From 8d6da4716459dde3e47de73679262e89564059ab Mon Sep 17 00:00:00 2001 From: Hawk Date: Fri, 22 Jun 2018 17:14:43 -0400 Subject: [PATCH] node / angular base config --- .env | 5 + .gitignore | 1 + app.js | 203 + config.json | 13 + database.js | 36 + html/!!!!README 1st!!!! | 46 - html/addnewuser.php | 80 - html/auth.php | 41 - html/create_database_table.sql | 38 - html/forums/admin/backups/.htaccess | 7 - html/forums/admin/backups/index.html | 8 - html/forums/admin/inc/class_form.php | 1068 - html/forums/admin/inc/class_page.php | 1230 - html/forums/admin/inc/class_table.php | 291 - html/forums/admin/inc/functions.php | 803 - html/forums/admin/inc/functions_themes.php | 1602 - .../admin/inc/functions_view_manager.php | 674 - html/forums/admin/inc/index.html | 8 - html/forums/admin/index.php | 822 - html/forums/admin/jscripts/admincp.js | 23 - html/forums/admin/jscripts/codemirror/LICENSE | 19 - .../codemirror/addon/dialog/dialog-mybb.css | 32 - .../codemirror/addon/dialog/dialog.css | 32 - .../codemirror/addon/dialog/dialog.js | 155 - .../codemirror/addon/dialog/index.html | 8 - .../codemirror/addon/fold/brace-fold.js | 105 - .../codemirror/addon/fold/comment-fold.js | 57 - .../codemirror/addon/fold/foldcode.js | 149 - .../codemirror/addon/fold/foldgutter.css | 20 - .../codemirror/addon/fold/foldgutter.js | 136 - .../codemirror/addon/fold/indent-fold.js | 44 - .../jscripts/codemirror/addon/fold/index.html | 8 - .../codemirror/addon/fold/markdown-fold.js | 49 - .../codemirror/addon/fold/xml-fold.js | 182 - .../jscripts/codemirror/addon/index.html | 8 - .../codemirror/addon/search/index.html | 8 - .../addon/search/match-highlighter.js | 128 - .../addon/search/matchesonscrollbar.css | 8 - .../addon/search/matchesonscrollbar.js | 90 - .../codemirror/addon/search/search.js | 164 - .../codemirror/addon/search/searchcursor.js | 189 - .../admin/jscripts/codemirror/index.html | 8 - .../jscripts/codemirror/lib/codemirror.css | 309 - .../jscripts/codemirror/lib/codemirror.js | 8045 ---- .../admin/jscripts/codemirror/lib/index.html | 8 - .../admin/jscripts/codemirror/mode/css/css.js | 717 - .../jscripts/codemirror/mode/css/index.html | 8 - .../jscripts/codemirror/mode/css/less.html | 152 - .../jscripts/codemirror/mode/css/less_test.js | 51 - .../jscripts/codemirror/mode/css/scss.html | 157 - .../jscripts/codemirror/mode/css/scss_test.js | 110 - .../jscripts/codemirror/mode/css/test.js | 135 - .../codemirror/mode/htmlmixed/htmlmixed.js | 121 - .../codemirror/mode/htmlmixed/index.html | 8 - .../codemirror/mode/javascript/index.html | 8 - .../codemirror/mode/javascript/javascript.js | 692 - .../codemirror/mode/javascript/json-ld.html | 72 - .../codemirror/mode/javascript/test.js | 200 - .../mode/javascript/typescript.html | 61 - .../jscripts/codemirror/mode/xml/index.html | 8 - .../jscripts/codemirror/mode/xml/test.js | 51 - .../admin/jscripts/codemirror/mode/xml/xml.js | 384 - .../jscripts/codemirror/theme/index.html | 8 - .../admin/jscripts/codemirror/theme/mybb.css | 41 - html/forums/admin/jscripts/index.html | 8 - .../css/redmond/images/animated-overlay.gif | Bin 1738 -> 0 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 86 -> 0 bytes .../images/ui-bg_flat_55_fbec88_40x100.png | Bin 86 -> 0 bytes .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 191 -> 0 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 189 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 187 -> 0 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 4709 -> 0 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 172 -> 0 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 153 -> 0 bytes .../images/ui-icons_217bc0_256x240.png | Bin 3756 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 3756 -> 0 bytes .../images/ui-icons_469bdd_256x240.png | Bin 3756 -> 0 bytes .../images/ui-icons_6da8d5_256x240.png | Bin 3756 -> 0 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 3756 -> 0 bytes .../images/ui-icons_d8e7f3_256x240.png | Bin 3756 -> 0 bytes .../images/ui-icons_f9bd01_256x240.png | Bin 3756 -> 0 bytes .../jqueryui/css/redmond/jquery-ui.min.css | 7 - .../css/redmond/jquery-ui.structure.min.css | 5 - .../css/redmond/jquery-ui.theme.min.css | 5 - .../jscripts/jqueryui/js/jquery-ui.min.js | 7 - html/forums/admin/jscripts/mycode_sandbox.js | 57 - html/forums/admin/jscripts/peeker.js | 105 - .../admin/jscripts/quick_perm_editor.js | 63 - html/forums/admin/jscripts/search.js | 74 - html/forums/admin/jscripts/tabs.js | 43 - .../forums/admin/jscripts/theme_properties.js | 87 - html/forums/admin/jscripts/themes.js | 345 - html/forums/admin/jscripts/users.js | 13 - html/forums/admin/jscripts/view_manager.js | 53 - .../admin/modules/config/attachment_types.php | 746 - html/forums/admin/modules/config/badwords.php | 269 - html/forums/admin/modules/config/banning.php | 294 - .../forums/admin/modules/config/calendars.php | 479 - .../admin/modules/config/help_documents.php | 624 - html/forums/admin/modules/config/index.html | 8 - .../forums/admin/modules/config/languages.php | 1052 - .../forums/admin/modules/config/mod_tools.php | 2362 -- .../admin/modules/config/module_meta.php | 128 - html/forums/admin/modules/config/mycode.php | 488 - html/forums/admin/modules/config/plugins.php | 715 - .../admin/modules/config/post_icons.php | 499 - .../admin/modules/config/profile_fields.php | 795 - .../forums/admin/modules/config/questions.php | 350 - .../admin/modules/config/report_reasons.php | 449 - html/forums/admin/modules/config/settings.php | 1777 - html/forums/admin/modules/config/smilies.php | 763 - html/forums/admin/modules/config/spiders.php | 307 - .../admin/modules/config/thread_prefixes.php | 536 - html/forums/admin/modules/config/warning.php | 774 - .../admin/modules/forum/announcements.php | 952 - .../admin/modules/forum/attachments.php | 982 - html/forums/admin/modules/forum/index.html | 8 - .../forums/admin/modules/forum/management.php | 2933 -- .../admin/modules/forum/moderation_queue.php | 567 - .../admin/modules/forum/module_meta.php | 87 - html/forums/admin/modules/home/credits.php | 151 - html/forums/admin/modules/home/index.html | 8 - html/forums/admin/modules/home/index.php | 388 - .../forums/admin/modules/home/module_meta.php | 191 - .../forums/admin/modules/home/preferences.php | 192 - html/forums/admin/modules/index.html | 8 - html/forums/admin/modules/style/index.html | 8 - .../admin/modules/style/module_meta.php | 79 - html/forums/admin/modules/style/templates.php | 2015 - html/forums/admin/modules/style/themes.php | 3011 -- html/forums/admin/modules/tools/adminlog.php | 609 - html/forums/admin/modules/tools/backupdb.php | 483 - html/forums/admin/modules/tools/cache.php | 276 - .../admin/modules/tools/file_verification.php | 137 - html/forums/admin/modules/tools/index.html | 8 - .../forums/admin/modules/tools/mailerrors.php | 263 - html/forums/admin/modules/tools/maillogs.php | 450 - html/forums/admin/modules/tools/modlog.php | 341 - .../admin/modules/tools/module_meta.php | 133 - .../forums/admin/modules/tools/optimizedb.php | 112 - html/forums/admin/modules/tools/php_info.php | 42 - .../admin/modules/tools/recount_rebuild.php | 764 - html/forums/admin/modules/tools/spamlog.php | 296 - .../forums/admin/modules/tools/statistics.php | 282 - .../admin/modules/tools/system_health.php | 981 - html/forums/admin/modules/tools/tasks.php | 770 - .../forums/admin/modules/tools/warninglog.php | 480 - .../admin/modules/user/admin_permissions.php | 534 - .../modules/user/awaiting_activation.php | 213 - html/forums/admin/modules/user/banning.php | 606 - .../admin/modules/user/group_promotions.php | 769 - html/forums/admin/modules/user/groups.php | 1546 - html/forums/admin/modules/user/index.html | 8 - html/forums/admin/modules/user/mass_mail.php | 1668 - .../forums/admin/modules/user/module_meta.php | 97 - html/forums/admin/modules/user/titles.php | 280 - html/forums/admin/modules/user/users.php | 4319 --- html/forums/admin/styles/default/config.css | 77 - html/forums/admin/styles/default/forum.css | 76 - html/forums/admin/styles/default/home.css | 15 - .../admin/styles/default/images/close.png | Bin 1048 -> 0 bytes .../default/images/icons/bullet_off.png | Bin 214 -> 0 bytes .../styles/default/images/icons/bullet_on.png | Bin 238 -> 0 bytes .../styles/default/images/icons/cross.png | Bin 385 -> 0 bytes .../styles/default/images/icons/custom.png | Bin 543 -> 0 bytes .../styles/default/images/icons/decrease.png | Bin 218 -> 0 bytes .../styles/default/images/icons/default.png | Bin 307 -> 0 bytes .../styles/default/images/icons/delete.png | Bin 601 -> 0 bytes .../styles/default/images/icons/error.png | Bin 580 -> 0 bytes .../styles/default/images/icons/find.png | Bin 556 -> 0 bytes .../styles/default/images/icons/group.png | Bin 680 -> 0 bytes .../styles/default/images/icons/increase.png | Bin 218 -> 0 bytes .../styles/default/images/icons/index.html | 8 - .../styles/default/images/icons/logout.png | Bin 352 -> 0 bytes .../default/images/icons/maillogs_contact.png | Bin 614 -> 0 bytes .../default/images/icons/maillogs_thread.png | Bin 368 -> 0 bytes .../default/images/icons/maillogs_user.png | Bin 512 -> 0 bytes .../default/images/icons/make_default.png | Bin 352 -> 0 bytes .../default/images/icons/mobile_user.png | Bin 407 -> 0 bytes .../styles/default/images/icons/no_change.png | Bin 128 -> 0 bytes .../styles/default/images/icons/run_task.png | Bin 696 -> 0 bytes .../styles/default/images/icons/search.png | Bin 521 -> 0 bytes .../styles/default/images/icons/success.png | Bin 602 -> 0 bytes .../styles/default/images/icons/tick.png | Bin 489 -> 0 bytes .../styles/default/images/icons/user.png | Bin 512 -> 0 bytes .../styles/default/images/icons/warning.png | Bin 505 -> 0 bytes .../styles/default/images/icons/world.png | Bin 793 -> 0 bytes .../admin/styles/default/images/index.html | 8 - .../styles/default/images/login_logo.png | Bin 5998 -> 0 bytes .../admin/styles/default/images/logo.png | Bin 10093 -> 0 bytes .../admin/styles/default/images/spinner.gif | Bin 1542 -> 0 bytes .../styles/default/images/spinner_big.gif | Bin 6586 -> 0 bytes .../admin/styles/default/images/submit_bg.png | Bin 104 -> 0 bytes .../admin/styles/default/images/tcat.png | Bin 125 -> 0 bytes .../admin/styles/default/images/thead.png | Bin 943 -> 0 bytes html/forums/admin/styles/default/index.html | 8 - html/forums/admin/styles/default/login.css | 191 - html/forums/admin/styles/default/main.css | 1262 - html/forums/admin/styles/default/modal.css | 45 - html/forums/admin/styles/default/popup.css | 32 - html/forums/admin/styles/default/style.css | 42 - html/forums/admin/styles/default/style.php | 82 - html/forums/admin/styles/default/user.css | 57 - html/forums/admin/styles/index.html | 8 - html/forums/announcements.php | 126 - html/forums/archive/global.php | 229 - html/forums/archive/index.php | 524 - html/forums/archive/print.css | 144 - html/forums/archive/screen.css | 144 - html/forums/attachment.php | 217 - html/forums/cache/index.html | 8 - html/forums/cache/themes/index.html | 8 - html/forums/calendar.php | 2531 -- html/forums/captcha.php | 311 - html/forums/contact.php | 296 - html/forums/css.php | 40 - html/forums/editpost.php | 947 - html/forums/forumdisplay.php | 1498 - html/forums/global.php | 1138 - html/forums/htaccess-nginx.txt | 28 - html/forums/htaccess.txt | 67 - html/forums/images/arrow_down.png | Bin 289 -> 0 bytes html/forums/images/attachtypes/blank.png | Bin 402 -> 0 bytes html/forums/images/attachtypes/css.png | Bin 474 -> 0 bytes html/forums/images/attachtypes/doc.png | Bin 528 -> 0 bytes html/forums/images/attachtypes/html.png | Bin 503 -> 0 bytes html/forums/images/attachtypes/image.png | Bin 494 -> 0 bytes html/forums/images/attachtypes/pdf.png | Bin 559 -> 0 bytes html/forums/images/attachtypes/php.png | Bin 559 -> 0 bytes html/forums/images/attachtypes/ppt.png | Bin 533 -> 0 bytes html/forums/images/attachtypes/psd.png | Bin 477 -> 0 bytes html/forums/images/attachtypes/tar.png | Bin 385 -> 0 bytes html/forums/images/attachtypes/txt.png | Bin 503 -> 0 bytes html/forums/images/attachtypes/unknown.png | Bin 491 -> 0 bytes html/forums/images/attachtypes/xls.png | Bin 513 -> 0 bytes html/forums/images/attachtypes/zip.png | Bin 427 -> 0 bytes html/forums/images/buddies.png | Bin 677 -> 0 bytes html/forums/images/buddy_away.png | Bin 346 -> 0 bytes html/forums/images/buddy_delete.png | Bin 514 -> 0 bytes html/forums/images/buddy_offline.png | Bin 344 -> 0 bytes html/forums/images/buddy_online.png | Bin 330 -> 0 bytes html/forums/images/buttons_bg.png | Bin 101 -> 0 bytes html/forums/images/buttons_sprite.png | Bin 3619 -> 0 bytes html/forums/images/close.png | Bin 945 -> 0 bytes html/forums/images/collapse.png | Bin 369 -> 0 bytes html/forums/images/collapse_collapsed.png | Bin 368 -> 0 bytes html/forums/images/colors/black_header.png | Bin 165 -> 0 bytes html/forums/images/colors/black_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/black_thead.png | Bin 118 -> 0 bytes html/forums/images/colors/calm_header.png | Bin 165 -> 0 bytes html/forums/images/colors/calm_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/calm_thead.png | Bin 119 -> 0 bytes html/forums/images/colors/dawn_header.png | Bin 163 -> 0 bytes html/forums/images/colors/dawn_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/dawn_thead.png | Bin 122 -> 0 bytes html/forums/images/colors/earth_header.png | Bin 164 -> 0 bytes html/forums/images/colors/earth_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/earth_thead.png | Bin 124 -> 0 bytes html/forums/images/colors/flame_header.png | Bin 105 -> 0 bytes html/forums/images/colors/flame_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/flame_thead.png | Bin 95 -> 0 bytes html/forums/images/colors/leaf_header.png | Bin 171 -> 0 bytes html/forums/images/colors/leaf_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/leaf_thead.png | Bin 123 -> 0 bytes html/forums/images/colors/night_header.png | Bin 169 -> 0 bytes html/forums/images/colors/night_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/night_thead.png | Bin 114 -> 0 bytes html/forums/images/colors/sun_header.png | Bin 138 -> 0 bytes html/forums/images/colors/sun_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/sun_thead.png | Bin 107 -> 0 bytes html/forums/images/colors/twilight_header.png | Bin 157 -> 0 bytes html/forums/images/colors/twilight_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/twilight_thead.png | Bin 119 -> 0 bytes html/forums/images/colors/water_header.png | Bin 168 -> 0 bytes html/forums/images/colors/water_tcat.png | Bin 109 -> 0 bytes html/forums/images/colors/water_thead.png | Bin 125 -> 0 bytes html/forums/images/default_avatar.png | Bin 992 -> 0 bytes html/forums/images/dismiss_notice.png | Bin 247 -> 0 bytes html/forums/images/error.png | Bin 556 -> 0 bytes html/forums/images/folders_sprite.png | Bin 4485 -> 0 bytes html/forums/images/forum_icon_sprite.png | Bin 1130 -> 0 bytes html/forums/images/fw_pm.png | Bin 698 -> 0 bytes .../english/team-administrator.png | Bin 1279 -> 0 bytes .../groupimages/english/team-designer.png | Bin 1470 -> 0 bytes .../groupimages/english/team-developer.png | Bin 990 -> 0 bytes .../groupimages/english/team-management.png | Bin 1342 -> 0 bytes .../images/groupimages/english/team-mod.png | Bin 990 -> 0 bytes .../groupimages/english/team-supermod.png | Bin 1201 -> 0 bytes .../groupimages/english/team-support.png | Bin 1443 -> 0 bytes .../groupimages/english/team-tester.png | Bin 1266 -> 0 bytes html/forums/images/headerlinks_sprite.png | Bin 2342 -> 0 bytes html/forums/images/icons/bell.png | Bin 653 -> 0 bytes html/forums/images/icons/biggrin.png | Bin 633 -> 0 bytes html/forums/images/icons/brick.png | Bin 476 -> 0 bytes html/forums/images/icons/bug.png | Bin 532 -> 0 bytes html/forums/images/icons/car.png | Bin 572 -> 0 bytes html/forums/images/icons/exclamation.png | Bin 580 -> 0 bytes html/forums/images/icons/game.png | Bin 413 -> 0 bytes html/forums/images/icons/heart.png | Bin 637 -> 0 bytes html/forums/images/icons/information.png | Bin 624 -> 0 bytes html/forums/images/icons/lightbulb.png | Bin 606 -> 0 bytes html/forums/images/icons/lightning.png | Bin 508 -> 0 bytes html/forums/images/icons/music.png | Bin 437 -> 0 bytes html/forums/images/icons/pencil.png | Bin 443 -> 0 bytes html/forums/images/icons/photo.png | Bin 494 -> 0 bytes html/forums/images/icons/question.png | Bin 629 -> 0 bytes html/forums/images/icons/rainbow.png | Bin 587 -> 0 bytes html/forums/images/icons/sad.png | Bin 653 -> 0 bytes html/forums/images/icons/shield.png | Bin 627 -> 0 bytes html/forums/images/icons/shocked.png | Bin 666 -> 0 bytes html/forums/images/icons/smile.png | Bin 652 -> 0 bytes html/forums/images/icons/sport.png | Bin 578 -> 0 bytes html/forums/images/icons/star.png | Bin 538 -> 0 bytes html/forums/images/icons/thumbsdown.png | Bin 663 -> 0 bytes html/forums/images/icons/thumbsup.png | Bin 637 -> 0 bytes html/forums/images/icons/tongue.png | Bin 652 -> 0 bytes html/forums/images/icons/user.png | Bin 512 -> 0 bytes html/forums/images/icons/video.png | Bin 570 -> 0 bytes html/forums/images/icons/wink.png | Bin 687 -> 0 bytes html/forums/images/index.html | 8 - html/forums/images/invalid.png | Bin 338 -> 0 bytes html/forums/images/jump.png | Bin 305 -> 0 bytes html/forums/images/logo.png | Bin 10233 -> 0 bytes html/forums/images/logo_white.png | Bin 8067 -> 0 bytes html/forums/images/mini_status_sprite.png | Bin 516 -> 0 bytes html/forums/images/modcp_sprite.png | Bin 4860 -> 0 bytes html/forums/images/nav_bit.png | Bin 86 -> 0 bytes html/forums/images/new_pm.png | Bin 390 -> 0 bytes html/forums/images/old_pm.png | Bin 614 -> 0 bytes html/forums/images/paperclip.png | Bin 477 -> 0 bytes html/forums/images/pollbar.png | Bin 1155 -> 0 bytes html/forums/images/printable.png | Bin 599 -> 0 bytes html/forums/images/re_pm.png | Bin 696 -> 0 bytes html/forums/images/send.png | Bin 390 -> 0 bytes html/forums/images/showthread_sprite.png | Bin 1455 -> 0 bytes html/forums/images/smilies/angel.png | Bin 760 -> 0 bytes html/forums/images/smilies/angry.png | Bin 526 -> 0 bytes html/forums/images/smilies/arrow.png | Bin 659 -> 0 bytes html/forums/images/smilies/at.png | Bin 719 -> 0 bytes html/forums/images/smilies/biggrin.png | Bin 587 -> 0 bytes html/forums/images/smilies/blush.png | Bin 685 -> 0 bytes html/forums/images/smilies/confused.png | Bin 606 -> 0 bytes html/forums/images/smilies/cool.png | Bin 594 -> 0 bytes html/forums/images/smilies/cry.png | Bin 610 -> 0 bytes html/forums/images/smilies/dodgy.png | Bin 588 -> 0 bytes html/forums/images/smilies/exclamation.png | Bin 619 -> 0 bytes html/forums/images/smilies/heart.png | Bin 519 -> 0 bytes html/forums/images/smilies/huh.png | Bin 670 -> 0 bytes html/forums/images/smilies/lightbulb.png | Bin 617 -> 0 bytes html/forums/images/smilies/my.png | Bin 685 -> 0 bytes html/forums/images/smilies/rolleyes.png | Bin 617 -> 0 bytes html/forums/images/smilies/sad.png | Bin 589 -> 0 bytes html/forums/images/smilies/shy.png | Bin 566 -> 0 bytes html/forums/images/smilies/sick.png | Bin 611 -> 0 bytes html/forums/images/smilies/sleepy.png | Bin 593 -> 0 bytes html/forums/images/smilies/smile.png | Bin 568 -> 0 bytes html/forums/images/smilies/tongue.png | Bin 609 -> 0 bytes html/forums/images/smilies/undecided.png | Bin 603 -> 0 bytes html/forums/images/smilies/wink.png | Bin 593 -> 0 bytes html/forums/images/spinner.gif | Bin 1542 -> 0 bytes html/forums/images/spinner_big.gif | Bin 6820 -> 0 bytes html/forums/images/star.png | Bin 507 -> 0 bytes html/forums/images/star_rating.png | Bin 3751 -> 0 bytes html/forums/images/tcat.png | Bin 131 -> 0 bytes html/forums/images/thead.png | Bin 115 -> 0 bytes html/forums/images/usercp_sprite.png | Bin 9822 -> 0 bytes html/forums/images/valid.png | Bin 444 -> 0 bytes .../inc/3rdparty/2fa/GoogleAuthenticator.php | 252 - html/forums/inc/3rdparty/diff/Diff.php | 261 - .../inc/3rdparty/diff/Diff/Engine/Native.php | 442 - .../inc/3rdparty/diff/Diff/Engine/Shell.php | 165 - .../inc/3rdparty/diff/Diff/Engine/String.php | 254 - .../inc/3rdparty/diff/Diff/Engine/Xdiff.php | 74 - .../inc/3rdparty/diff/Diff/Engine/index.html | 8 - .../inc/3rdparty/diff/Diff/Exception.php | 24 - html/forums/inc/3rdparty/diff/Diff/Mapped.php | 59 - html/forums/inc/3rdparty/diff/Diff/Op/Add.php | 34 - .../forums/inc/3rdparty/diff/Diff/Op/Base.php | 38 - .../inc/3rdparty/diff/Diff/Op/Change.php | 34 - .../forums/inc/3rdparty/diff/Diff/Op/Copy.php | 37 - .../inc/3rdparty/diff/Diff/Op/Delete.php | 34 - .../inc/3rdparty/diff/Diff/Op/index.html | 8 - .../inc/3rdparty/diff/Diff/Renderer.php | 241 - .../3rdparty/diff/Diff/Renderer/Context.php | 75 - .../3rdparty/diff/Diff/Renderer/Inline.php | 200 - .../3rdparty/diff/Diff/Renderer/Unified.php | 64 - .../3rdparty/diff/Diff/Renderer/index.html | 8 - html/forums/inc/3rdparty/diff/Diff/String.php | 778 - .../inc/3rdparty/diff/Diff/ThreeWay.php | 150 - .../diff/Diff/ThreeWay/BlockBuilder.php | 71 - .../3rdparty/diff/Diff/ThreeWay/Op/Base.php | 48 - .../3rdparty/diff/Diff/ThreeWay/Op/Copy.php | 36 - .../3rdparty/diff/Diff/ThreeWay/Op/index.html | 8 - .../3rdparty/diff/Diff/ThreeWay/index.html | 8 - html/forums/inc/3rdparty/diff/Diff/index.html | 8 - html/forums/inc/3rdparty/diff/index.html | 8 - html/forums/inc/3rdparty/index.html | 8 - html/forums/inc/3rdparty/json/index.html | 8 - html/forums/inc/3rdparty/json/json.php | 822 - html/forums/inc/adminfunctions_templates.php | 94 - html/forums/inc/cachehandlers/apc.php | 114 - html/forums/inc/cachehandlers/disk.php | 126 - .../forums/inc/cachehandlers/eaccelerator.php | 116 - html/forums/inc/cachehandlers/index.html | 8 - html/forums/inc/cachehandlers/interface.php | 61 - html/forums/inc/cachehandlers/memcache.php | 157 - html/forums/inc/cachehandlers/memcached.php | 157 - html/forums/inc/cachehandlers/xcache.php | 111 - html/forums/inc/captcha_fonts/MINYN___.ttf | Bin 84264 -> 0 bytes html/forums/inc/captcha_fonts/edmunds.ttf | Bin 48092 -> 0 bytes html/forums/inc/captcha_fonts/index.html | 8 - html/forums/inc/captcha_fonts/read_me.html | 253 - html/forums/inc/class_captcha.php | 467 - html/forums/inc/class_core.php | 625 - html/forums/inc/class_custommoderation.php | 496 - html/forums/inc/class_datacache.php | 1338 - html/forums/inc/class_error.php | 623 - html/forums/inc/class_feedgeneration.php | 224 - html/forums/inc/class_feedparser.php | 242 - html/forums/inc/class_graph.php | 337 - html/forums/inc/class_language.php | 242 - html/forums/inc/class_mailhandler.php | 437 - html/forums/inc/class_moderation.php | 3773 -- html/forums/inc/class_parser.php | 1728 - html/forums/inc/class_plugins.php | 245 - html/forums/inc/class_session.php | 570 - .../forums/inc/class_stopforumspamchecker.php | 204 - html/forums/inc/class_templates.php | 163 - html/forums/inc/class_timers.php | 133 - html/forums/inc/class_xml.php | 182 - html/forums/inc/config.default.php | 0 html/forums/inc/datahandler.php | 217 - html/forums/inc/datahandlers/event.php | 643 - html/forums/inc/datahandlers/index.html | 8 - html/forums/inc/datahandlers/login.php | 340 - html/forums/inc/datahandlers/pm.php | 755 - html/forums/inc/datahandlers/post.php | 1894 - html/forums/inc/datahandlers/user.php | 1854 - html/forums/inc/datahandlers/warnings.php | 741 - html/forums/inc/db_base.php | 449 - html/forums/inc/db_mysql.php | 1588 - html/forums/inc/db_mysqli.php | 1569 - html/forums/inc/db_pdo.php | 234 - html/forums/inc/db_pgsql.php | 1582 - html/forums/inc/db_sqlite.php | 1534 - html/forums/inc/functions.php | 8676 ----- html/forums/inc/functions_archive.php | 269 - html/forums/inc/functions_calendar.php | 1100 - html/forums/inc/functions_forumlist.php | 589 - html/forums/inc/functions_image.php | 260 - html/forums/inc/functions_indicators.php | 356 - html/forums/inc/functions_massmail.php | 222 - html/forums/inc/functions_modcp.php | 332 - html/forums/inc/functions_online.php | 1205 - html/forums/inc/functions_post.php | 1007 - html/forums/inc/functions_posting.php | 225 - html/forums/inc/functions_rebuild.php | 134 - html/forums/inc/functions_search.php | 1821 - html/forums/inc/functions_serverstats.php | 341 - html/forums/inc/functions_task.php | 383 - html/forums/inc/functions_time.php | 877 - html/forums/inc/functions_upload.php | 801 - html/forums/inc/functions_user.php | 848 - html/forums/inc/functions_warnings.php | 125 - html/forums/inc/index.html | 8 - html/forums/inc/init.php | 302 - html/forums/inc/languages/english.php | 30 - .../admin/config_attachment_types.lang.php | 53 - .../english/admin/config_badwords.lang.php | 35 - .../english/admin/config_banning.lang.php | 46 - .../english/admin/config_calendars.lang.php | 68 - .../admin/config_help_documents.lang.php | 60 - .../english/admin/config_languages.lang.php | 63 - .../english/admin/config_mod_tools.lang.php | 132 - .../english/admin/config_module_meta.lang.php | 47 - .../english/admin/config_mycode.lang.php | 59 - .../english/admin/config_plugins.lang.php | 52 - .../english/admin/config_post_icons.lang.php | 46 - .../admin/config_profile_fields.lang.php | 75 - .../english/admin/config_questions.lang.php | 42 - .../admin/config_report_reasons.lang.php | 65 - .../english/admin/config_settings.lang.php | 105 - .../english/admin/config_smilies.lang.php | 64 - .../english/admin/config_spiders.lang.php | 42 - .../admin/config_thread_prefixes.lang.php | 42 - .../english/admin/config_warning.lang.php | 80 - .../admin/forum_announcements.lang.php | 55 - .../english/admin/forum_attachments.lang.php | 109 - .../english/admin/forum_management.lang.php | 279 - .../admin/forum_moderation_queue.lang.php | 49 - .../english/admin/forum_module_meta.lang.php | 19 - .../languages/english/admin/global.lang.php | 372 - .../languages/english/admin/hello.lang.php | 23 - .../english/admin/home_credits.lang.php | 14 - .../english/admin/home_dashboard.lang.php | 54 - .../english/admin/home_module_meta.lang.php | 24 - .../english/admin/home_preferences.lang.php | 30 - .../inc/languages/english/admin/index.html | 8 - .../english/admin/style_module_meta.lang.php | 15 - .../english/admin/style_templates.lang.php | 179 - .../english/admin/style_themes.lang.php | 220 - .../english/admin/tools_adminlog.lang.php | 311 - .../english/admin/tools_backupdb.lang.php | 58 - .../english/admin/tools_cache.lang.php | 22 - .../admin/tools_file_verification.lang.php | 20 - .../english/admin/tools_mailerrors.lang.php | 31 - .../english/admin/tools_maillogs.lang.php | 37 - .../english/admin/tools_modlog.lang.php | 50 - .../english/admin/tools_module_meta.lang.php | 46 - .../english/admin/tools_optimizedb.lang.php | 20 - .../english/admin/tools_php_info.lang.php | 10 - .../admin/tools_recount_rebuild.lang.php | 52 - .../english/admin/tools_spamlog.lang.php | 33 - .../english/admin/tools_statistics.lang.php | 27 - .../admin/tools_system_health.lang.php | 90 - .../english/admin/tools_tasks.lang.php | 76 - .../english/admin/tools_warninglog.lang.php | 51 - .../admin/user_admin_permissions.lang.php | 46 - .../admin/user_awaiting_activation.lang.php | 50 - .../english/admin/user_banning.lang.php | 62 - .../admin/user_group_promotions.lang.php | 91 - .../english/admin/user_groups.lang.php | 223 - .../english/admin/user_mass_mail.lang.php | 120 - .../english/admin/user_module_meta.lang.php | 26 - .../english/admin/user_titles.lang.php | 37 - .../english/admin/user_users.lang.php | 411 - .../languages/english/announcements.lang.php | 16 - .../inc/languages/english/archive.lang.php | 18 - .../inc/languages/english/calendar.lang.php | 144 - .../inc/languages/english/contact.lang.php | 26 - .../languages/english/customhelpdocs.lang.php | 15 - .../english/customhelpsections.lang.php | 14 - .../english/datahandler_event.lang.php | 34 - .../english/datahandler_login.lang.php | 13 - .../languages/english/datahandler_pm.lang.php | 21 - .../english/datahandler_post.lang.php | 30 - .../english/datahandler_user.lang.php | 49 - .../english/datahandler_warnings.lang.php | 18 - .../inc/languages/english/editpost.lang.php | 54 - .../languages/english/forumdisplay.lang.php | 102 - .../inc/languages/english/global.lang.php | 577 - .../inc/languages/english/hello.lang.php | 16 - .../inc/languages/english/helpdocs.lang.php | 69 - .../languages/english/helpsections.lang.php | 14 - html/forums/inc/languages/english/index.html | 8 - .../inc/languages/english/index.lang.php | 40 - .../languages/english/mailhandler.lang.php | 16 - .../languages/english/managegroup.lang.php | 64 - .../inc/languages/english/member.lang.php | 256 - .../inc/languages/english/memberlist.lang.php | 79 - .../inc/languages/english/messages.lang.php | 505 - .../inc/languages/english/misc.lang.php | 98 - .../inc/languages/english/modcp.lang.php | 329 - .../inc/languages/english/moderation.lang.php | 221 - .../inc/languages/english/newreply.lang.php | 53 - .../inc/languages/english/newthread.lang.php | 54 - .../inc/languages/english/online.lang.php | 134 - .../inc/languages/english/polls.lang.php | 60 - .../inc/languages/english/portal.lang.php | 52 - .../languages/english/printthread.lang.php | 11 - .../inc/languages/english/private.lang.php | 201 - .../inc/languages/english/ratethread.lang.php | 20 - .../inc/languages/english/report.lang.php | 32 - .../inc/languages/english/reputation.lang.php | 82 - .../inc/languages/english/search.lang.php | 112 - .../inc/languages/english/sendthread.lang.php | 17 - .../inc/languages/english/showteam.lang.php | 25 - .../inc/languages/english/showthread.lang.php | 109 - .../inc/languages/english/stats.lang.php | 37 - .../languages/english/syndication.lang.php | 13 - .../inc/languages/english/usercp.lang.php | 420 - .../inc/languages/english/usercpnav.lang.php | 33 - .../inc/languages/english/warnings.lang.php | 88 - .../inc/languages/english/xmlhttp.lang.php | 45 - html/forums/inc/languages/index.html | 8 - html/forums/inc/mailhandlers/index.html | 8 - html/forums/inc/mailhandlers/php.php | 86 - html/forums/inc/mailhandlers/smtp.php | 538 - html/forums/inc/mybb_group.php | 17 - html/forums/inc/plugins/hello.php | 589 - html/forums/inc/plugins/index.html | 8 - html/forums/inc/settings.php | 0 html/forums/inc/tasks/backupdb.php | 147 - html/forums/inc/tasks/checktables.php | 88 - html/forums/inc/tasks/dailycleanup.php | 92 - html/forums/inc/tasks/delayedmoderation.php | 259 - html/forums/inc/tasks/hourlycleanup.php | 53 - html/forums/inc/tasks/index.html | 8 - html/forums/inc/tasks/logcleanup.php | 63 - html/forums/inc/tasks/massmail.php | 150 - html/forums/inc/tasks/promotions.php | 255 - html/forums/inc/tasks/recachestylesheets.php | 39 - html/forums/inc/tasks/threadviews.php | 35 - html/forums/inc/tasks/usercleanup.php | 74 - html/forums/inc/tasks/userpruning.php | 101 - html/forums/inc/tasks/versioncheck.php | 101 - html/forums/index.php | 384 - html/forums/install/images/active.png | Bin 5246 -> 0 bytes html/forums/install/images/inactive.png | Bin 4223 -> 0 bytes html/forums/install/images/index.html | 8 - html/forums/install/images/logo.png | Bin 10233 -> 0 bytes html/forums/install/images/submit_bg.png | Bin 104 -> 0 bytes html/forums/install/images/tcat.png | Bin 125 -> 0 bytes html/forums/install/images/thead.png | Bin 115 -> 0 bytes html/forums/install/index.php | 2530 -- .../forums/install/resources/adminoptions.xml | 207 - html/forums/install/resources/adminviews.xml | 19 - html/forums/install/resources/index.html | 8 - .../install/resources/language.lang.php | 374 - html/forums/install/resources/mybb_theme.xml | 14118 ------- .../install/resources/mybb_theme_colors.xml | 519 - .../install/resources/mysql_db_inserts.php | 166 - .../install/resources/mysql_db_tables.php | 1184 - html/forums/install/resources/output.php | 190 - .../install/resources/pgsql_db_tables.php | 1142 - html/forums/install/resources/settings.xml | 2522 -- .../install/resources/sqlite_db_tables.php | 1058 - html/forums/install/resources/tasks.xml | 159 - html/forums/install/resources/upgrade1.php | 408 - html/forums/install/resources/upgrade10.php | 39 - html/forums/install/resources/upgrade11.php | 73 - html/forums/install/resources/upgrade12.php | 1997 - html/forums/install/resources/upgrade13.php | 237 - html/forums/install/resources/upgrade14.php | 216 - html/forums/install/resources/upgrade15.php | 153 - html/forums/install/resources/upgrade16.php | 25 - html/forums/install/resources/upgrade17.php | 961 - html/forums/install/resources/upgrade18.php | 58 - html/forums/install/resources/upgrade19.php | 24 - html/forums/install/resources/upgrade2.php | 289 - html/forums/install/resources/upgrade20.php | 51 - html/forums/install/resources/upgrade21.php | 104 - html/forums/install/resources/upgrade22.php | 25 - html/forums/install/resources/upgrade23.php | 58 - html/forums/install/resources/upgrade24.php | 23 - html/forums/install/resources/upgrade25.php | 23 - html/forums/install/resources/upgrade26.php | 55 - html/forums/install/resources/upgrade27.php | 24 - html/forums/install/resources/upgrade28.php | 23 - html/forums/install/resources/upgrade29.php | 24 - html/forums/install/resources/upgrade3.php | 826 - html/forums/install/resources/upgrade30.php | 2511 -- html/forums/install/resources/upgrade31.php | 59 - html/forums/install/resources/upgrade32.php | 86 - html/forums/install/resources/upgrade33.php | 38 - html/forums/install/resources/upgrade34.php | 23 - html/forums/install/resources/upgrade35.php | 188 - html/forums/install/resources/upgrade36.php | 235 - html/forums/install/resources/upgrade37.php | 55 - html/forums/install/resources/upgrade38.php | 23 - html/forums/install/resources/upgrade39.php | 23 - html/forums/install/resources/upgrade4.php | 81 - html/forums/install/resources/upgrade40.php | 23 - html/forums/install/resources/upgrade5.php | 639 - html/forums/install/resources/upgrade6.php | 41 - html/forums/install/resources/upgrade7.php | 26 - html/forums/install/resources/upgrade8.php | 50 - html/forums/install/resources/upgrade9.php | 25 - html/forums/install/resources/usergroups.xml | 641 - html/forums/install/stylesheet.css | 387 - html/forums/install/upgrade.php | 1142 - html/forums/jscripts/bbcodes_sceditor.js | 645 - html/forums/jscripts/captcha.js | 39 - html/forums/jscripts/general.js | 691 - html/forums/jscripts/index.html | 8 - html/forums/jscripts/inline_edit.js | 90 - html/forums/jscripts/inline_moderation.js | 422 - .../jscripts/jeditable/jeditable.min.js | 38 - html/forums/jscripts/jquery.js | 5 - html/forums/jscripts/jquery.plugins.js | 1599 - html/forums/jscripts/jquery.plugins.min.js | 1 - html/forums/jscripts/post.js | 122 - html/forums/jscripts/question.js | 39 - html/forums/jscripts/rating.js | 136 - html/forums/jscripts/report.js | 49 - .../sceditor/editor_plugins/bbcode.js | 2 - .../sceditor/editor_plugins/format.js | 2 - .../sceditor/editor_plugins/index.html | 8 - .../jscripts/sceditor/editor_plugins/undo.js | 2 - .../jscripts/sceditor/editor_plugins/xhtml.js | 2 - .../sceditor/editor_themes/buttons.css | 763 - .../sceditor/editor_themes/default.css | 559 - .../editor_themes/emoticons/alien.png | Bin 656 -> 0 bytes .../editor_themes/emoticons/angel.png | Bin 889 -> 0 bytes .../editor_themes/emoticons/angry.png | Bin 780 -> 0 bytes .../editor_themes/emoticons/blink.png | Bin 761 -> 0 bytes .../editor_themes/emoticons/blush.png | Bin 826 -> 0 bytes .../editor_themes/emoticons/cheerful.png | Bin 752 -> 0 bytes .../sceditor/editor_themes/emoticons/cool.png | Bin 755 -> 0 bytes .../editor_themes/emoticons/credits.txt | 9 - .../sceditor/editor_themes/emoticons/cwy.png | Bin 708 -> 0 bytes .../editor_themes/emoticons/devil.png | Bin 788 -> 0 bytes .../editor_themes/emoticons/dizzy.png | Bin 777 -> 0 bytes .../sceditor/editor_themes/emoticons/ermm.png | Bin 774 -> 0 bytes .../sceditor/editor_themes/emoticons/face.png | Bin 745 -> 0 bytes .../editor_themes/emoticons/getlost.png | Bin 777 -> 0 bytes .../sceditor/editor_themes/emoticons/grin.png | Bin 691 -> 0 bytes .../editor_themes/emoticons/happy.png | Bin 791 -> 0 bytes .../editor_themes/emoticons/heart.png | Bin 571 -> 0 bytes .../editor_themes/emoticons/kissing.png | Bin 770 -> 0 bytes .../editor_themes/emoticons/laughing.png | Bin 711 -> 0 bytes .../editor_themes/emoticons/ninja.png | Bin 583 -> 0 bytes .../editor_themes/emoticons/pinch.png | Bin 802 -> 0 bytes .../editor_themes/emoticons/pouty.png | Bin 770 -> 0 bytes .../sceditor/editor_themes/emoticons/sad.png | Bin 791 -> 0 bytes .../editor_themes/emoticons/shocked.png | Bin 780 -> 0 bytes .../sceditor/editor_themes/emoticons/sick.png | Bin 664 -> 0 bytes .../editor_themes/emoticons/sideways.png | Bin 788 -> 0 bytes .../editor_themes/emoticons/silly.png | Bin 728 -> 0 bytes .../editor_themes/emoticons/sleeping.png | Bin 828 -> 0 bytes .../editor_themes/emoticons/smile.png | Bin 778 -> 0 bytes .../editor_themes/emoticons/tongue.png | Bin 769 -> 0 bytes .../editor_themes/emoticons/unsure.png | Bin 763 -> 0 bytes .../sceditor/editor_themes/emoticons/w00t.png | Bin 588 -> 0 bytes .../editor_themes/emoticons/wassat.png | Bin 808 -> 0 bytes .../editor_themes/emoticons/whistling.png | Bin 829 -> 0 bytes .../sceditor/editor_themes/emoticons/wink.png | Bin 789 -> 0 bytes .../sceditor/editor_themes/emoticons/wub.png | Bin 824 -> 0 bytes .../sceditor/editor_themes/famfamfam.png | Bin 11720 -> 0 bytes .../sceditor/editor_themes/index.html | 8 - .../sceditor/editor_themes/modern.css | 650 - .../sceditor/editor_themes/monocons.css | 719 - .../editor_themes/monocons/monocons.eot | Bin 8028 -> 0 bytes .../editor_themes/monocons/monocons.ttf | Bin 7860 -> 0 bytes .../jscripts/sceditor/editor_themes/mybb.css | 585 - .../sceditor/editor_themes/office-toolbar.css | 705 - .../sceditor/editor_themes/office.css | 734 - .../jscripts/sceditor/editor_themes/php.png | Bin 467 -> 0 bytes .../sceditor/editor_themes/square.css | 668 - .../jscripts/sceditor/editor_themes/video.png | Bin 570 -> 0 bytes .../sceditor/jquery.sceditor.bbcode.min.js | 4 - .../sceditor/jquery.sceditor.default.min.css | 1 - .../jscripts/sceditor/jquery.sceditor.min.js | 3 - .../sceditor/jquery.sceditor.xhtml.min.js | 3 - .../jquery.sceditor.buttons.css | 143 - .../jquery.sceditor.default.css | 143 - .../jquery.sceditor.modern.css | 143 - .../jquery.sceditor.monocons.css | 143 - .../textarea_styles/jquery.sceditor.mybb.css | 143 - .../jquery.sceditor.office-toolbar.css | 143 - .../jquery.sceditor.office.css | 143 - .../jquery.sceditor.square.css | 143 - .../jscripts/select2/select2-spinner.gif | Bin 1849 -> 0 bytes html/forums/jscripts/select2/select2.css | 696 - html/forums/jscripts/select2/select2.min.js | 23 - html/forums/jscripts/select2/select2.png | Bin 577 -> 0 bytes html/forums/jscripts/select2/select2x2.png | Bin 743 -> 0 bytes html/forums/jscripts/thread.js | 572 - html/forums/jscripts/usercp.js | 258 - .../validate/additional-methods.min.js | 4 - .../jscripts/validate/jquery.validate.min.js | 4 - html/forums/managegroup.php | 441 - html/forums/member.php | 3068 -- html/forums/memberlist.php | 459 - html/forums/misc.php | 1082 - html/forums/modcp.php | 4830 --- html/forums/moderation.php | 3329 -- html/forums/newreply.php | 1548 - html/forums/newthread.php | 1189 - html/forums/online.php | 284 - html/forums/polls.php | 1204 - html/forums/portal.php | 712 - html/forums/printthread.php | 261 - html/forums/private.php | 2475 -- html/forums/ratethread.php | 156 - html/forums/report.php | 286 - html/forums/reputation.php | 1063 - html/forums/rss.php | 19 - html/forums/search.php | 1694 - html/forums/sendthread.php | 294 - html/forums/showteam.php | 208 - html/forums/showthread.php | 1584 - html/forums/stats.php | 225 - html/forums/syndication.php | 235 - html/forums/task.php | 73 - html/forums/uploads/avatars/index.html | 8 - html/forums/uploads/index.html | 8 - html/forums/usercp.php | 4155 -- html/forums/usercp2.php | 251 - html/forums/warnings.php | 872 - html/forums/xmlhttp.php | 1087 - .../darth_vader-lightsaber-star_wars.jpg | Bin 601074 -> 0 bytes html/images/star_wars_1.jpg | Bin 24743 -> 0 bytes html/includes/db_connect.php | 11 - html/index.orig | 368 - html/index.php | 175 - html/music/Star Wars Main Theme.mp3 | Bin 8427310 -> 0 bytes html/newuserpost.php | 42 - html/stylesheet.css | 4 - html/test.php | 1 - init.sql | 50 + package-lock.json | 594 + package.json | 27 + public/Content/bootstrap-theme.css | 587 + public/Content/bootstrap-theme.css.map | 1 + public/Content/bootstrap-theme.min.css | 6 + public/Content/bootstrap-theme.min.css.map | 1 + public/Content/bootstrap.css | 7022 ++++ public/Content/bootstrap.css.map | 1 + public/Content/bootstrap.custom.css | 181 + public/Content/bootstrap.min.css | 14 + public/Content/bootstrap.min.css.map | 1 + public/Content/loading-bar.min.css | 1 + public/Content/style.css | 1 + public/Scripts/angular-cookies.js | 322 + public/Scripts/angular-cookies.min.js | 9 + public/Scripts/angular-cookies.min.js.map | 8 + public/Scripts/angular-mocks.js | 3126 ++ public/Scripts/angular-route.js | 1069 + public/Scripts/angular-route.min.js | 16 + public/Scripts/angular-route.min.js.map | 8 + public/Scripts/angular-ui-router.js | 4576 +++ public/Scripts/angular-ui-router.min.js | 8 + public/Scripts/angular.js | 31768 ++++++++++++++++ public/Scripts/angular.min.js | 318 + public/Scripts/angular.min.js.map | 8 + public/Scripts/bootstrap.custom.css | 2 + public/Scripts/bootstrap.js | 2377 ++ public/Scripts/bootstrap.min.js | 7 + public/Scripts/dirPagination.js | 584 + public/Scripts/jquery-1.9.1-vsdoc.js | 6728 ++++ public/Scripts/jquery-1.9.1.js | 9597 +++++ public/Scripts/jquery-1.9.1.min.js | 5 + public/Scripts/jquery-1.9.1.min.map | 1 + public/Scripts/loading-bar.min.js | 7 + public/Scripts/ui-router.js | 12 + public/Views/Common/Home/Home.html | 27 + public/Views/Common/Home/home.js | 3 + .../RecoverPassword/RecoverPassword.html | 41 + .../Common/RecoverPassword/recoverPassword.js | 39 + public/app.js | 48 + public/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes public/fonts/glyphicons-halflings-regular.svg | 288 + public/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes public/index.html | 30 + run.sh | 5 + setup.sh | 6 + 839 files changed, 69788 insertions(+), 217115 deletions(-) create mode 100644 .env create mode 100644 .gitignore create mode 100644 app.js create mode 100644 config.json create mode 100644 database.js delete mode 100644 html/!!!!README 1st!!!! delete mode 100644 html/addnewuser.php delete mode 100644 html/auth.php delete mode 100644 html/create_database_table.sql delete mode 100644 html/forums/admin/backups/.htaccess delete mode 100644 html/forums/admin/backups/index.html delete mode 100644 html/forums/admin/inc/class_form.php delete mode 100644 html/forums/admin/inc/class_page.php delete mode 100644 html/forums/admin/inc/class_table.php delete mode 100644 html/forums/admin/inc/functions.php delete mode 100644 html/forums/admin/inc/functions_themes.php delete mode 100644 html/forums/admin/inc/functions_view_manager.php delete mode 100644 html/forums/admin/inc/index.html delete mode 100644 html/forums/admin/index.php delete mode 100644 html/forums/admin/jscripts/admincp.js delete mode 100644 html/forums/admin/jscripts/codemirror/LICENSE delete mode 100644 html/forums/admin/jscripts/codemirror/addon/dialog/dialog-mybb.css delete mode 100644 html/forums/admin/jscripts/codemirror/addon/dialog/dialog.css delete mode 100644 html/forums/admin/jscripts/codemirror/addon/dialog/dialog.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/dialog/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/brace-fold.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/comment-fold.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/foldcode.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.css delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/indent-fold.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/markdown-fold.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/fold/xml-fold.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/addon/search/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/addon/search/match-highlighter.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.css delete mode 100644 html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/search/search.js delete mode 100644 html/forums/admin/jscripts/codemirror/addon/search/searchcursor.js delete mode 100644 html/forums/admin/jscripts/codemirror/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/lib/codemirror.css delete mode 100644 html/forums/admin/jscripts/codemirror/lib/codemirror.js delete mode 100644 html/forums/admin/jscripts/codemirror/lib/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/css/css.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/css/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/css/less.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/css/less_test.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/css/scss.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/css/scss_test.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/css/test.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/htmlmixed/htmlmixed.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/htmlmixed/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/javascript/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/javascript/javascript.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/javascript/json-ld.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/javascript/test.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/javascript/typescript.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/xml/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/mode/xml/test.js delete mode 100644 html/forums/admin/jscripts/codemirror/mode/xml/xml.js delete mode 100644 html/forums/admin/jscripts/codemirror/theme/index.html delete mode 100644 html/forums/admin/jscripts/codemirror/theme/mybb.css delete mode 100644 html/forums/admin/jscripts/index.html delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/animated-overlay.gif delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_217bc0_256x240.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_2e83ff_256x240.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_469bdd_256x240.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_6da8d5_256x240.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_cd0a0a_256x240.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_d8e7f3_256x240.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_f9bd01_256x240.png delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.min.css delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.structure.min.css delete mode 100644 html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.theme.min.css delete mode 100644 html/forums/admin/jscripts/jqueryui/js/jquery-ui.min.js delete mode 100644 html/forums/admin/jscripts/mycode_sandbox.js delete mode 100644 html/forums/admin/jscripts/peeker.js delete mode 100644 html/forums/admin/jscripts/quick_perm_editor.js delete mode 100644 html/forums/admin/jscripts/search.js delete mode 100644 html/forums/admin/jscripts/tabs.js delete mode 100644 html/forums/admin/jscripts/theme_properties.js delete mode 100644 html/forums/admin/jscripts/themes.js delete mode 100644 html/forums/admin/jscripts/users.js delete mode 100644 html/forums/admin/jscripts/view_manager.js delete mode 100644 html/forums/admin/modules/config/attachment_types.php delete mode 100644 html/forums/admin/modules/config/badwords.php delete mode 100644 html/forums/admin/modules/config/banning.php delete mode 100644 html/forums/admin/modules/config/calendars.php delete mode 100644 html/forums/admin/modules/config/help_documents.php delete mode 100644 html/forums/admin/modules/config/index.html delete mode 100644 html/forums/admin/modules/config/languages.php delete mode 100644 html/forums/admin/modules/config/mod_tools.php delete mode 100644 html/forums/admin/modules/config/module_meta.php delete mode 100644 html/forums/admin/modules/config/mycode.php delete mode 100644 html/forums/admin/modules/config/plugins.php delete mode 100644 html/forums/admin/modules/config/post_icons.php delete mode 100644 html/forums/admin/modules/config/profile_fields.php delete mode 100644 html/forums/admin/modules/config/questions.php delete mode 100644 html/forums/admin/modules/config/report_reasons.php delete mode 100644 html/forums/admin/modules/config/settings.php delete mode 100644 html/forums/admin/modules/config/smilies.php delete mode 100644 html/forums/admin/modules/config/spiders.php delete mode 100644 html/forums/admin/modules/config/thread_prefixes.php delete mode 100644 html/forums/admin/modules/config/warning.php delete mode 100644 html/forums/admin/modules/forum/announcements.php delete mode 100644 html/forums/admin/modules/forum/attachments.php delete mode 100644 html/forums/admin/modules/forum/index.html delete mode 100644 html/forums/admin/modules/forum/management.php delete mode 100644 html/forums/admin/modules/forum/moderation_queue.php delete mode 100644 html/forums/admin/modules/forum/module_meta.php delete mode 100644 html/forums/admin/modules/home/credits.php delete mode 100644 html/forums/admin/modules/home/index.html delete mode 100644 html/forums/admin/modules/home/index.php delete mode 100644 html/forums/admin/modules/home/module_meta.php delete mode 100644 html/forums/admin/modules/home/preferences.php delete mode 100644 html/forums/admin/modules/index.html delete mode 100644 html/forums/admin/modules/style/index.html delete mode 100644 html/forums/admin/modules/style/module_meta.php delete mode 100644 html/forums/admin/modules/style/templates.php delete mode 100644 html/forums/admin/modules/style/themes.php delete mode 100644 html/forums/admin/modules/tools/adminlog.php delete mode 100644 html/forums/admin/modules/tools/backupdb.php delete mode 100644 html/forums/admin/modules/tools/cache.php delete mode 100644 html/forums/admin/modules/tools/file_verification.php delete mode 100644 html/forums/admin/modules/tools/index.html delete mode 100644 html/forums/admin/modules/tools/mailerrors.php delete mode 100644 html/forums/admin/modules/tools/maillogs.php delete mode 100644 html/forums/admin/modules/tools/modlog.php delete mode 100644 html/forums/admin/modules/tools/module_meta.php delete mode 100644 html/forums/admin/modules/tools/optimizedb.php delete mode 100644 html/forums/admin/modules/tools/php_info.php delete mode 100644 html/forums/admin/modules/tools/recount_rebuild.php delete mode 100644 html/forums/admin/modules/tools/spamlog.php delete mode 100644 html/forums/admin/modules/tools/statistics.php delete mode 100644 html/forums/admin/modules/tools/system_health.php delete mode 100644 html/forums/admin/modules/tools/tasks.php delete mode 100644 html/forums/admin/modules/tools/warninglog.php delete mode 100644 html/forums/admin/modules/user/admin_permissions.php delete mode 100644 html/forums/admin/modules/user/awaiting_activation.php delete mode 100644 html/forums/admin/modules/user/banning.php delete mode 100644 html/forums/admin/modules/user/group_promotions.php delete mode 100644 html/forums/admin/modules/user/groups.php delete mode 100644 html/forums/admin/modules/user/index.html delete mode 100644 html/forums/admin/modules/user/mass_mail.php delete mode 100644 html/forums/admin/modules/user/module_meta.php delete mode 100644 html/forums/admin/modules/user/titles.php delete mode 100644 html/forums/admin/modules/user/users.php delete mode 100644 html/forums/admin/styles/default/config.css delete mode 100644 html/forums/admin/styles/default/forum.css delete mode 100644 html/forums/admin/styles/default/home.css delete mode 100644 html/forums/admin/styles/default/images/close.png delete mode 100644 html/forums/admin/styles/default/images/icons/bullet_off.png delete mode 100644 html/forums/admin/styles/default/images/icons/bullet_on.png delete mode 100644 html/forums/admin/styles/default/images/icons/cross.png delete mode 100644 html/forums/admin/styles/default/images/icons/custom.png delete mode 100644 html/forums/admin/styles/default/images/icons/decrease.png delete mode 100644 html/forums/admin/styles/default/images/icons/default.png delete mode 100644 html/forums/admin/styles/default/images/icons/delete.png delete mode 100644 html/forums/admin/styles/default/images/icons/error.png delete mode 100644 html/forums/admin/styles/default/images/icons/find.png delete mode 100644 html/forums/admin/styles/default/images/icons/group.png delete mode 100644 html/forums/admin/styles/default/images/icons/increase.png delete mode 100644 html/forums/admin/styles/default/images/icons/index.html delete mode 100644 html/forums/admin/styles/default/images/icons/logout.png delete mode 100644 html/forums/admin/styles/default/images/icons/maillogs_contact.png delete mode 100644 html/forums/admin/styles/default/images/icons/maillogs_thread.png delete mode 100644 html/forums/admin/styles/default/images/icons/maillogs_user.png delete mode 100644 html/forums/admin/styles/default/images/icons/make_default.png delete mode 100644 html/forums/admin/styles/default/images/icons/mobile_user.png delete mode 100644 html/forums/admin/styles/default/images/icons/no_change.png delete mode 100644 html/forums/admin/styles/default/images/icons/run_task.png delete mode 100644 html/forums/admin/styles/default/images/icons/search.png delete mode 100644 html/forums/admin/styles/default/images/icons/success.png delete mode 100644 html/forums/admin/styles/default/images/icons/tick.png delete mode 100644 html/forums/admin/styles/default/images/icons/user.png delete mode 100644 html/forums/admin/styles/default/images/icons/warning.png delete mode 100644 html/forums/admin/styles/default/images/icons/world.png delete mode 100644 html/forums/admin/styles/default/images/index.html delete mode 100644 html/forums/admin/styles/default/images/login_logo.png delete mode 100644 html/forums/admin/styles/default/images/logo.png delete mode 100644 html/forums/admin/styles/default/images/spinner.gif delete mode 100644 html/forums/admin/styles/default/images/spinner_big.gif delete mode 100644 html/forums/admin/styles/default/images/submit_bg.png delete mode 100644 html/forums/admin/styles/default/images/tcat.png delete mode 100644 html/forums/admin/styles/default/images/thead.png delete mode 100644 html/forums/admin/styles/default/index.html delete mode 100644 html/forums/admin/styles/default/login.css delete mode 100644 html/forums/admin/styles/default/main.css delete mode 100644 html/forums/admin/styles/default/modal.css delete mode 100644 html/forums/admin/styles/default/popup.css delete mode 100644 html/forums/admin/styles/default/style.css delete mode 100644 html/forums/admin/styles/default/style.php delete mode 100644 html/forums/admin/styles/default/user.css delete mode 100644 html/forums/admin/styles/index.html delete mode 100644 html/forums/announcements.php delete mode 100644 html/forums/archive/global.php delete mode 100644 html/forums/archive/index.php delete mode 100644 html/forums/archive/print.css delete mode 100644 html/forums/archive/screen.css delete mode 100644 html/forums/attachment.php delete mode 100644 html/forums/cache/index.html delete mode 100644 html/forums/cache/themes/index.html delete mode 100644 html/forums/calendar.php delete mode 100644 html/forums/captcha.php delete mode 100644 html/forums/contact.php delete mode 100644 html/forums/css.php delete mode 100644 html/forums/editpost.php delete mode 100644 html/forums/forumdisplay.php delete mode 100644 html/forums/global.php delete mode 100644 html/forums/htaccess-nginx.txt delete mode 100644 html/forums/htaccess.txt delete mode 100644 html/forums/images/arrow_down.png delete mode 100644 html/forums/images/attachtypes/blank.png delete mode 100644 html/forums/images/attachtypes/css.png delete mode 100644 html/forums/images/attachtypes/doc.png delete mode 100644 html/forums/images/attachtypes/html.png delete mode 100644 html/forums/images/attachtypes/image.png delete mode 100644 html/forums/images/attachtypes/pdf.png delete mode 100644 html/forums/images/attachtypes/php.png delete mode 100644 html/forums/images/attachtypes/ppt.png delete mode 100644 html/forums/images/attachtypes/psd.png delete mode 100644 html/forums/images/attachtypes/tar.png delete mode 100644 html/forums/images/attachtypes/txt.png delete mode 100644 html/forums/images/attachtypes/unknown.png delete mode 100644 html/forums/images/attachtypes/xls.png delete mode 100644 html/forums/images/attachtypes/zip.png delete mode 100644 html/forums/images/buddies.png delete mode 100644 html/forums/images/buddy_away.png delete mode 100644 html/forums/images/buddy_delete.png delete mode 100644 html/forums/images/buddy_offline.png delete mode 100644 html/forums/images/buddy_online.png delete mode 100644 html/forums/images/buttons_bg.png delete mode 100644 html/forums/images/buttons_sprite.png delete mode 100644 html/forums/images/close.png delete mode 100644 html/forums/images/collapse.png delete mode 100644 html/forums/images/collapse_collapsed.png delete mode 100644 html/forums/images/colors/black_header.png delete mode 100644 html/forums/images/colors/black_tcat.png delete mode 100644 html/forums/images/colors/black_thead.png delete mode 100644 html/forums/images/colors/calm_header.png delete mode 100644 html/forums/images/colors/calm_tcat.png delete mode 100644 html/forums/images/colors/calm_thead.png delete mode 100644 html/forums/images/colors/dawn_header.png delete mode 100644 html/forums/images/colors/dawn_tcat.png delete mode 100644 html/forums/images/colors/dawn_thead.png delete mode 100644 html/forums/images/colors/earth_header.png delete mode 100644 html/forums/images/colors/earth_tcat.png delete mode 100644 html/forums/images/colors/earth_thead.png delete mode 100644 html/forums/images/colors/flame_header.png delete mode 100644 html/forums/images/colors/flame_tcat.png delete mode 100644 html/forums/images/colors/flame_thead.png delete mode 100644 html/forums/images/colors/leaf_header.png delete mode 100644 html/forums/images/colors/leaf_tcat.png delete mode 100644 html/forums/images/colors/leaf_thead.png delete mode 100644 html/forums/images/colors/night_header.png delete mode 100644 html/forums/images/colors/night_tcat.png delete mode 100644 html/forums/images/colors/night_thead.png delete mode 100644 html/forums/images/colors/sun_header.png delete mode 100644 html/forums/images/colors/sun_tcat.png delete mode 100644 html/forums/images/colors/sun_thead.png delete mode 100644 html/forums/images/colors/twilight_header.png delete mode 100644 html/forums/images/colors/twilight_tcat.png delete mode 100644 html/forums/images/colors/twilight_thead.png delete mode 100644 html/forums/images/colors/water_header.png delete mode 100644 html/forums/images/colors/water_tcat.png delete mode 100644 html/forums/images/colors/water_thead.png delete mode 100644 html/forums/images/default_avatar.png delete mode 100644 html/forums/images/dismiss_notice.png delete mode 100644 html/forums/images/error.png delete mode 100644 html/forums/images/folders_sprite.png delete mode 100644 html/forums/images/forum_icon_sprite.png delete mode 100644 html/forums/images/fw_pm.png delete mode 100644 html/forums/images/groupimages/english/team-administrator.png delete mode 100644 html/forums/images/groupimages/english/team-designer.png delete mode 100644 html/forums/images/groupimages/english/team-developer.png delete mode 100644 html/forums/images/groupimages/english/team-management.png delete mode 100644 html/forums/images/groupimages/english/team-mod.png delete mode 100644 html/forums/images/groupimages/english/team-supermod.png delete mode 100644 html/forums/images/groupimages/english/team-support.png delete mode 100644 html/forums/images/groupimages/english/team-tester.png delete mode 100644 html/forums/images/headerlinks_sprite.png delete mode 100644 html/forums/images/icons/bell.png delete mode 100644 html/forums/images/icons/biggrin.png delete mode 100644 html/forums/images/icons/brick.png delete mode 100644 html/forums/images/icons/bug.png delete mode 100644 html/forums/images/icons/car.png delete mode 100644 html/forums/images/icons/exclamation.png delete mode 100644 html/forums/images/icons/game.png delete mode 100644 html/forums/images/icons/heart.png delete mode 100644 html/forums/images/icons/information.png delete mode 100644 html/forums/images/icons/lightbulb.png delete mode 100644 html/forums/images/icons/lightning.png delete mode 100644 html/forums/images/icons/music.png delete mode 100644 html/forums/images/icons/pencil.png delete mode 100644 html/forums/images/icons/photo.png delete mode 100644 html/forums/images/icons/question.png delete mode 100644 html/forums/images/icons/rainbow.png delete mode 100644 html/forums/images/icons/sad.png delete mode 100644 html/forums/images/icons/shield.png delete mode 100644 html/forums/images/icons/shocked.png delete mode 100644 html/forums/images/icons/smile.png delete mode 100644 html/forums/images/icons/sport.png delete mode 100644 html/forums/images/icons/star.png delete mode 100644 html/forums/images/icons/thumbsdown.png delete mode 100644 html/forums/images/icons/thumbsup.png delete mode 100644 html/forums/images/icons/tongue.png delete mode 100644 html/forums/images/icons/user.png delete mode 100644 html/forums/images/icons/video.png delete mode 100644 html/forums/images/icons/wink.png delete mode 100644 html/forums/images/index.html delete mode 100644 html/forums/images/invalid.png delete mode 100644 html/forums/images/jump.png delete mode 100644 html/forums/images/logo.png delete mode 100644 html/forums/images/logo_white.png delete mode 100644 html/forums/images/mini_status_sprite.png delete mode 100644 html/forums/images/modcp_sprite.png delete mode 100644 html/forums/images/nav_bit.png delete mode 100644 html/forums/images/new_pm.png delete mode 100644 html/forums/images/old_pm.png delete mode 100644 html/forums/images/paperclip.png delete mode 100644 html/forums/images/pollbar.png delete mode 100644 html/forums/images/printable.png delete mode 100644 html/forums/images/re_pm.png delete mode 100644 html/forums/images/send.png delete mode 100644 html/forums/images/showthread_sprite.png delete mode 100644 html/forums/images/smilies/angel.png delete mode 100644 html/forums/images/smilies/angry.png delete mode 100644 html/forums/images/smilies/arrow.png delete mode 100644 html/forums/images/smilies/at.png delete mode 100644 html/forums/images/smilies/biggrin.png delete mode 100644 html/forums/images/smilies/blush.png delete mode 100644 html/forums/images/smilies/confused.png delete mode 100644 html/forums/images/smilies/cool.png delete mode 100644 html/forums/images/smilies/cry.png delete mode 100644 html/forums/images/smilies/dodgy.png delete mode 100644 html/forums/images/smilies/exclamation.png delete mode 100644 html/forums/images/smilies/heart.png delete mode 100644 html/forums/images/smilies/huh.png delete mode 100644 html/forums/images/smilies/lightbulb.png delete mode 100644 html/forums/images/smilies/my.png delete mode 100644 html/forums/images/smilies/rolleyes.png delete mode 100644 html/forums/images/smilies/sad.png delete mode 100644 html/forums/images/smilies/shy.png delete mode 100644 html/forums/images/smilies/sick.png delete mode 100644 html/forums/images/smilies/sleepy.png delete mode 100644 html/forums/images/smilies/smile.png delete mode 100644 html/forums/images/smilies/tongue.png delete mode 100644 html/forums/images/smilies/undecided.png delete mode 100644 html/forums/images/smilies/wink.png delete mode 100644 html/forums/images/spinner.gif delete mode 100644 html/forums/images/spinner_big.gif delete mode 100644 html/forums/images/star.png delete mode 100644 html/forums/images/star_rating.png delete mode 100644 html/forums/images/tcat.png delete mode 100644 html/forums/images/thead.png delete mode 100644 html/forums/images/usercp_sprite.png delete mode 100644 html/forums/images/valid.png delete mode 100644 html/forums/inc/3rdparty/2fa/GoogleAuthenticator.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Engine/Native.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Engine/Shell.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Engine/String.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Engine/Xdiff.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Engine/index.html delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Exception.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Mapped.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Op/Add.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Op/Base.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Op/Change.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Op/Copy.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Op/Delete.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Op/index.html delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Renderer.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Renderer/Context.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Renderer/Inline.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Renderer/Unified.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/Renderer/index.html delete mode 100644 html/forums/inc/3rdparty/diff/Diff/String.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/ThreeWay.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/ThreeWay/BlockBuilder.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Base.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Copy.php delete mode 100644 html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/index.html delete mode 100644 html/forums/inc/3rdparty/diff/Diff/ThreeWay/index.html delete mode 100644 html/forums/inc/3rdparty/diff/Diff/index.html delete mode 100644 html/forums/inc/3rdparty/diff/index.html delete mode 100644 html/forums/inc/3rdparty/index.html delete mode 100644 html/forums/inc/3rdparty/json/index.html delete mode 100644 html/forums/inc/3rdparty/json/json.php delete mode 100644 html/forums/inc/adminfunctions_templates.php delete mode 100644 html/forums/inc/cachehandlers/apc.php delete mode 100644 html/forums/inc/cachehandlers/disk.php delete mode 100644 html/forums/inc/cachehandlers/eaccelerator.php delete mode 100644 html/forums/inc/cachehandlers/index.html delete mode 100644 html/forums/inc/cachehandlers/interface.php delete mode 100644 html/forums/inc/cachehandlers/memcache.php delete mode 100644 html/forums/inc/cachehandlers/memcached.php delete mode 100644 html/forums/inc/cachehandlers/xcache.php delete mode 100644 html/forums/inc/captcha_fonts/MINYN___.ttf delete mode 100644 html/forums/inc/captcha_fonts/edmunds.ttf delete mode 100644 html/forums/inc/captcha_fonts/index.html delete mode 100644 html/forums/inc/captcha_fonts/read_me.html delete mode 100644 html/forums/inc/class_captcha.php delete mode 100644 html/forums/inc/class_core.php delete mode 100644 html/forums/inc/class_custommoderation.php delete mode 100644 html/forums/inc/class_datacache.php delete mode 100644 html/forums/inc/class_error.php delete mode 100644 html/forums/inc/class_feedgeneration.php delete mode 100644 html/forums/inc/class_feedparser.php delete mode 100644 html/forums/inc/class_graph.php delete mode 100644 html/forums/inc/class_language.php delete mode 100644 html/forums/inc/class_mailhandler.php delete mode 100644 html/forums/inc/class_moderation.php delete mode 100644 html/forums/inc/class_parser.php delete mode 100644 html/forums/inc/class_plugins.php delete mode 100644 html/forums/inc/class_session.php delete mode 100644 html/forums/inc/class_stopforumspamchecker.php delete mode 100644 html/forums/inc/class_templates.php delete mode 100644 html/forums/inc/class_timers.php delete mode 100644 html/forums/inc/class_xml.php delete mode 100644 html/forums/inc/config.default.php delete mode 100644 html/forums/inc/datahandler.php delete mode 100644 html/forums/inc/datahandlers/event.php delete mode 100644 html/forums/inc/datahandlers/index.html delete mode 100644 html/forums/inc/datahandlers/login.php delete mode 100644 html/forums/inc/datahandlers/pm.php delete mode 100644 html/forums/inc/datahandlers/post.php delete mode 100644 html/forums/inc/datahandlers/user.php delete mode 100644 html/forums/inc/datahandlers/warnings.php delete mode 100644 html/forums/inc/db_base.php delete mode 100644 html/forums/inc/db_mysql.php delete mode 100644 html/forums/inc/db_mysqli.php delete mode 100644 html/forums/inc/db_pdo.php delete mode 100644 html/forums/inc/db_pgsql.php delete mode 100644 html/forums/inc/db_sqlite.php delete mode 100644 html/forums/inc/functions.php delete mode 100644 html/forums/inc/functions_archive.php delete mode 100644 html/forums/inc/functions_calendar.php delete mode 100644 html/forums/inc/functions_forumlist.php delete mode 100644 html/forums/inc/functions_image.php delete mode 100644 html/forums/inc/functions_indicators.php delete mode 100644 html/forums/inc/functions_massmail.php delete mode 100644 html/forums/inc/functions_modcp.php delete mode 100644 html/forums/inc/functions_online.php delete mode 100644 html/forums/inc/functions_post.php delete mode 100644 html/forums/inc/functions_posting.php delete mode 100644 html/forums/inc/functions_rebuild.php delete mode 100644 html/forums/inc/functions_search.php delete mode 100644 html/forums/inc/functions_serverstats.php delete mode 100644 html/forums/inc/functions_task.php delete mode 100644 html/forums/inc/functions_time.php delete mode 100644 html/forums/inc/functions_upload.php delete mode 100644 html/forums/inc/functions_user.php delete mode 100644 html/forums/inc/functions_warnings.php delete mode 100644 html/forums/inc/index.html delete mode 100644 html/forums/inc/init.php delete mode 100644 html/forums/inc/languages/english.php delete mode 100644 html/forums/inc/languages/english/admin/config_attachment_types.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_badwords.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_banning.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_calendars.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_help_documents.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_languages.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_mod_tools.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_module_meta.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_mycode.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_plugins.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_post_icons.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_profile_fields.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_questions.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_report_reasons.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_settings.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_smilies.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_spiders.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_thread_prefixes.lang.php delete mode 100644 html/forums/inc/languages/english/admin/config_warning.lang.php delete mode 100644 html/forums/inc/languages/english/admin/forum_announcements.lang.php delete mode 100644 html/forums/inc/languages/english/admin/forum_attachments.lang.php delete mode 100644 html/forums/inc/languages/english/admin/forum_management.lang.php delete mode 100644 html/forums/inc/languages/english/admin/forum_moderation_queue.lang.php delete mode 100644 html/forums/inc/languages/english/admin/forum_module_meta.lang.php delete mode 100644 html/forums/inc/languages/english/admin/global.lang.php delete mode 100644 html/forums/inc/languages/english/admin/hello.lang.php delete mode 100644 html/forums/inc/languages/english/admin/home_credits.lang.php delete mode 100644 html/forums/inc/languages/english/admin/home_dashboard.lang.php delete mode 100644 html/forums/inc/languages/english/admin/home_module_meta.lang.php delete mode 100644 html/forums/inc/languages/english/admin/home_preferences.lang.php delete mode 100644 html/forums/inc/languages/english/admin/index.html delete mode 100644 html/forums/inc/languages/english/admin/style_module_meta.lang.php delete mode 100644 html/forums/inc/languages/english/admin/style_templates.lang.php delete mode 100644 html/forums/inc/languages/english/admin/style_themes.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_adminlog.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_backupdb.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_cache.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_file_verification.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_mailerrors.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_maillogs.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_modlog.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_module_meta.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_optimizedb.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_php_info.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_recount_rebuild.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_spamlog.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_statistics.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_system_health.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_tasks.lang.php delete mode 100644 html/forums/inc/languages/english/admin/tools_warninglog.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_admin_permissions.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_awaiting_activation.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_banning.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_group_promotions.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_groups.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_mass_mail.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_module_meta.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_titles.lang.php delete mode 100644 html/forums/inc/languages/english/admin/user_users.lang.php delete mode 100644 html/forums/inc/languages/english/announcements.lang.php delete mode 100644 html/forums/inc/languages/english/archive.lang.php delete mode 100644 html/forums/inc/languages/english/calendar.lang.php delete mode 100644 html/forums/inc/languages/english/contact.lang.php delete mode 100644 html/forums/inc/languages/english/customhelpdocs.lang.php delete mode 100644 html/forums/inc/languages/english/customhelpsections.lang.php delete mode 100644 html/forums/inc/languages/english/datahandler_event.lang.php delete mode 100644 html/forums/inc/languages/english/datahandler_login.lang.php delete mode 100644 html/forums/inc/languages/english/datahandler_pm.lang.php delete mode 100644 html/forums/inc/languages/english/datahandler_post.lang.php delete mode 100644 html/forums/inc/languages/english/datahandler_user.lang.php delete mode 100644 html/forums/inc/languages/english/datahandler_warnings.lang.php delete mode 100644 html/forums/inc/languages/english/editpost.lang.php delete mode 100644 html/forums/inc/languages/english/forumdisplay.lang.php delete mode 100644 html/forums/inc/languages/english/global.lang.php delete mode 100644 html/forums/inc/languages/english/hello.lang.php delete mode 100644 html/forums/inc/languages/english/helpdocs.lang.php delete mode 100644 html/forums/inc/languages/english/helpsections.lang.php delete mode 100644 html/forums/inc/languages/english/index.html delete mode 100644 html/forums/inc/languages/english/index.lang.php delete mode 100644 html/forums/inc/languages/english/mailhandler.lang.php delete mode 100644 html/forums/inc/languages/english/managegroup.lang.php delete mode 100644 html/forums/inc/languages/english/member.lang.php delete mode 100644 html/forums/inc/languages/english/memberlist.lang.php delete mode 100644 html/forums/inc/languages/english/messages.lang.php delete mode 100644 html/forums/inc/languages/english/misc.lang.php delete mode 100644 html/forums/inc/languages/english/modcp.lang.php delete mode 100644 html/forums/inc/languages/english/moderation.lang.php delete mode 100644 html/forums/inc/languages/english/newreply.lang.php delete mode 100644 html/forums/inc/languages/english/newthread.lang.php delete mode 100644 html/forums/inc/languages/english/online.lang.php delete mode 100644 html/forums/inc/languages/english/polls.lang.php delete mode 100644 html/forums/inc/languages/english/portal.lang.php delete mode 100644 html/forums/inc/languages/english/printthread.lang.php delete mode 100644 html/forums/inc/languages/english/private.lang.php delete mode 100644 html/forums/inc/languages/english/ratethread.lang.php delete mode 100644 html/forums/inc/languages/english/report.lang.php delete mode 100644 html/forums/inc/languages/english/reputation.lang.php delete mode 100644 html/forums/inc/languages/english/search.lang.php delete mode 100644 html/forums/inc/languages/english/sendthread.lang.php delete mode 100644 html/forums/inc/languages/english/showteam.lang.php delete mode 100644 html/forums/inc/languages/english/showthread.lang.php delete mode 100644 html/forums/inc/languages/english/stats.lang.php delete mode 100644 html/forums/inc/languages/english/syndication.lang.php delete mode 100644 html/forums/inc/languages/english/usercp.lang.php delete mode 100644 html/forums/inc/languages/english/usercpnav.lang.php delete mode 100644 html/forums/inc/languages/english/warnings.lang.php delete mode 100644 html/forums/inc/languages/english/xmlhttp.lang.php delete mode 100644 html/forums/inc/languages/index.html delete mode 100644 html/forums/inc/mailhandlers/index.html delete mode 100644 html/forums/inc/mailhandlers/php.php delete mode 100644 html/forums/inc/mailhandlers/smtp.php delete mode 100644 html/forums/inc/mybb_group.php delete mode 100644 html/forums/inc/plugins/hello.php delete mode 100644 html/forums/inc/plugins/index.html delete mode 100644 html/forums/inc/settings.php delete mode 100644 html/forums/inc/tasks/backupdb.php delete mode 100644 html/forums/inc/tasks/checktables.php delete mode 100644 html/forums/inc/tasks/dailycleanup.php delete mode 100644 html/forums/inc/tasks/delayedmoderation.php delete mode 100644 html/forums/inc/tasks/hourlycleanup.php delete mode 100644 html/forums/inc/tasks/index.html delete mode 100644 html/forums/inc/tasks/logcleanup.php delete mode 100644 html/forums/inc/tasks/massmail.php delete mode 100644 html/forums/inc/tasks/promotions.php delete mode 100644 html/forums/inc/tasks/recachestylesheets.php delete mode 100644 html/forums/inc/tasks/threadviews.php delete mode 100644 html/forums/inc/tasks/usercleanup.php delete mode 100644 html/forums/inc/tasks/userpruning.php delete mode 100644 html/forums/inc/tasks/versioncheck.php delete mode 100644 html/forums/index.php delete mode 100644 html/forums/install/images/active.png delete mode 100644 html/forums/install/images/inactive.png delete mode 100644 html/forums/install/images/index.html delete mode 100644 html/forums/install/images/logo.png delete mode 100644 html/forums/install/images/submit_bg.png delete mode 100644 html/forums/install/images/tcat.png delete mode 100644 html/forums/install/images/thead.png delete mode 100644 html/forums/install/index.php delete mode 100644 html/forums/install/resources/adminoptions.xml delete mode 100644 html/forums/install/resources/adminviews.xml delete mode 100644 html/forums/install/resources/index.html delete mode 100644 html/forums/install/resources/language.lang.php delete mode 100644 html/forums/install/resources/mybb_theme.xml delete mode 100644 html/forums/install/resources/mybb_theme_colors.xml delete mode 100644 html/forums/install/resources/mysql_db_inserts.php delete mode 100644 html/forums/install/resources/mysql_db_tables.php delete mode 100644 html/forums/install/resources/output.php delete mode 100644 html/forums/install/resources/pgsql_db_tables.php delete mode 100644 html/forums/install/resources/settings.xml delete mode 100644 html/forums/install/resources/sqlite_db_tables.php delete mode 100644 html/forums/install/resources/tasks.xml delete mode 100644 html/forums/install/resources/upgrade1.php delete mode 100644 html/forums/install/resources/upgrade10.php delete mode 100644 html/forums/install/resources/upgrade11.php delete mode 100644 html/forums/install/resources/upgrade12.php delete mode 100644 html/forums/install/resources/upgrade13.php delete mode 100644 html/forums/install/resources/upgrade14.php delete mode 100644 html/forums/install/resources/upgrade15.php delete mode 100644 html/forums/install/resources/upgrade16.php delete mode 100644 html/forums/install/resources/upgrade17.php delete mode 100644 html/forums/install/resources/upgrade18.php delete mode 100644 html/forums/install/resources/upgrade19.php delete mode 100644 html/forums/install/resources/upgrade2.php delete mode 100644 html/forums/install/resources/upgrade20.php delete mode 100644 html/forums/install/resources/upgrade21.php delete mode 100644 html/forums/install/resources/upgrade22.php delete mode 100644 html/forums/install/resources/upgrade23.php delete mode 100644 html/forums/install/resources/upgrade24.php delete mode 100644 html/forums/install/resources/upgrade25.php delete mode 100644 html/forums/install/resources/upgrade26.php delete mode 100644 html/forums/install/resources/upgrade27.php delete mode 100644 html/forums/install/resources/upgrade28.php delete mode 100644 html/forums/install/resources/upgrade29.php delete mode 100644 html/forums/install/resources/upgrade3.php delete mode 100644 html/forums/install/resources/upgrade30.php delete mode 100644 html/forums/install/resources/upgrade31.php delete mode 100644 html/forums/install/resources/upgrade32.php delete mode 100644 html/forums/install/resources/upgrade33.php delete mode 100644 html/forums/install/resources/upgrade34.php delete mode 100644 html/forums/install/resources/upgrade35.php delete mode 100644 html/forums/install/resources/upgrade36.php delete mode 100644 html/forums/install/resources/upgrade37.php delete mode 100644 html/forums/install/resources/upgrade38.php delete mode 100644 html/forums/install/resources/upgrade39.php delete mode 100644 html/forums/install/resources/upgrade4.php delete mode 100644 html/forums/install/resources/upgrade40.php delete mode 100644 html/forums/install/resources/upgrade5.php delete mode 100644 html/forums/install/resources/upgrade6.php delete mode 100644 html/forums/install/resources/upgrade7.php delete mode 100644 html/forums/install/resources/upgrade8.php delete mode 100644 html/forums/install/resources/upgrade9.php delete mode 100644 html/forums/install/resources/usergroups.xml delete mode 100644 html/forums/install/stylesheet.css delete mode 100644 html/forums/install/upgrade.php delete mode 100644 html/forums/jscripts/bbcodes_sceditor.js delete mode 100644 html/forums/jscripts/captcha.js delete mode 100644 html/forums/jscripts/general.js delete mode 100644 html/forums/jscripts/index.html delete mode 100644 html/forums/jscripts/inline_edit.js delete mode 100644 html/forums/jscripts/inline_moderation.js delete mode 100644 html/forums/jscripts/jeditable/jeditable.min.js delete mode 100644 html/forums/jscripts/jquery.js delete mode 100644 html/forums/jscripts/jquery.plugins.js delete mode 100644 html/forums/jscripts/jquery.plugins.min.js delete mode 100644 html/forums/jscripts/post.js delete mode 100644 html/forums/jscripts/question.js delete mode 100644 html/forums/jscripts/rating.js delete mode 100644 html/forums/jscripts/report.js delete mode 100644 html/forums/jscripts/sceditor/editor_plugins/bbcode.js delete mode 100644 html/forums/jscripts/sceditor/editor_plugins/format.js delete mode 100644 html/forums/jscripts/sceditor/editor_plugins/index.html delete mode 100644 html/forums/jscripts/sceditor/editor_plugins/undo.js delete mode 100644 html/forums/jscripts/sceditor/editor_plugins/xhtml.js delete mode 100644 html/forums/jscripts/sceditor/editor_themes/buttons.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/default.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/alien.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/angel.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/angry.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/blink.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/blush.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/cheerful.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/cool.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/credits.txt delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/cwy.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/devil.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/dizzy.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/ermm.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/face.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/getlost.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/grin.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/happy.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/heart.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/kissing.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/laughing.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/ninja.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/pinch.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/pouty.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/sad.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/shocked.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/sick.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/sideways.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/silly.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/sleeping.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/smile.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/tongue.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/unsure.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/w00t.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/wassat.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/whistling.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/wink.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/emoticons/wub.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/famfamfam.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/index.html delete mode 100644 html/forums/jscripts/sceditor/editor_themes/modern.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/monocons.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/monocons/monocons.eot delete mode 100644 html/forums/jscripts/sceditor/editor_themes/monocons/monocons.ttf delete mode 100644 html/forums/jscripts/sceditor/editor_themes/mybb.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/office-toolbar.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/office.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/php.png delete mode 100644 html/forums/jscripts/sceditor/editor_themes/square.css delete mode 100644 html/forums/jscripts/sceditor/editor_themes/video.png delete mode 100644 html/forums/jscripts/sceditor/jquery.sceditor.bbcode.min.js delete mode 100644 html/forums/jscripts/sceditor/jquery.sceditor.default.min.css delete mode 100644 html/forums/jscripts/sceditor/jquery.sceditor.min.js delete mode 100644 html/forums/jscripts/sceditor/jquery.sceditor.xhtml.min.js delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.buttons.css delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.default.css delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.modern.css delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.monocons.css delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.mybb.css delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office-toolbar.css delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office.css delete mode 100644 html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.square.css delete mode 100644 html/forums/jscripts/select2/select2-spinner.gif delete mode 100644 html/forums/jscripts/select2/select2.css delete mode 100644 html/forums/jscripts/select2/select2.min.js delete mode 100644 html/forums/jscripts/select2/select2.png delete mode 100644 html/forums/jscripts/select2/select2x2.png delete mode 100644 html/forums/jscripts/thread.js delete mode 100644 html/forums/jscripts/usercp.js delete mode 100644 html/forums/jscripts/validate/additional-methods.min.js delete mode 100644 html/forums/jscripts/validate/jquery.validate.min.js delete mode 100644 html/forums/managegroup.php delete mode 100644 html/forums/member.php delete mode 100644 html/forums/memberlist.php delete mode 100644 html/forums/misc.php delete mode 100644 html/forums/modcp.php delete mode 100644 html/forums/moderation.php delete mode 100644 html/forums/newreply.php delete mode 100644 html/forums/newthread.php delete mode 100644 html/forums/online.php delete mode 100644 html/forums/polls.php delete mode 100644 html/forums/portal.php delete mode 100644 html/forums/printthread.php delete mode 100644 html/forums/private.php delete mode 100644 html/forums/ratethread.php delete mode 100644 html/forums/report.php delete mode 100644 html/forums/reputation.php delete mode 100644 html/forums/rss.php delete mode 100644 html/forums/search.php delete mode 100644 html/forums/sendthread.php delete mode 100644 html/forums/showteam.php delete mode 100644 html/forums/showthread.php delete mode 100644 html/forums/stats.php delete mode 100644 html/forums/syndication.php delete mode 100644 html/forums/task.php delete mode 100644 html/forums/uploads/avatars/index.html delete mode 100644 html/forums/uploads/index.html delete mode 100644 html/forums/usercp.php delete mode 100644 html/forums/usercp2.php delete mode 100644 html/forums/warnings.php delete mode 100644 html/forums/xmlhttp.php delete mode 100644 html/images/darth_vader-lightsaber-star_wars.jpg delete mode 100644 html/images/star_wars_1.jpg delete mode 100644 html/includes/db_connect.php delete mode 100644 html/index.orig delete mode 100644 html/index.php delete mode 100644 html/music/Star Wars Main Theme.mp3 delete mode 100644 html/newuserpost.php delete mode 100644 html/stylesheet.css delete mode 100644 html/test.php create mode 100644 init.sql create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/Content/bootstrap-theme.css create mode 100644 public/Content/bootstrap-theme.css.map create mode 100644 public/Content/bootstrap-theme.min.css create mode 100644 public/Content/bootstrap-theme.min.css.map create mode 100644 public/Content/bootstrap.css create mode 100644 public/Content/bootstrap.css.map create mode 100644 public/Content/bootstrap.custom.css create mode 100644 public/Content/bootstrap.min.css create mode 100644 public/Content/bootstrap.min.css.map create mode 100644 public/Content/loading-bar.min.css create mode 100644 public/Content/style.css create mode 100644 public/Scripts/angular-cookies.js create mode 100644 public/Scripts/angular-cookies.min.js create mode 100644 public/Scripts/angular-cookies.min.js.map create mode 100644 public/Scripts/angular-mocks.js create mode 100644 public/Scripts/angular-route.js create mode 100644 public/Scripts/angular-route.min.js create mode 100644 public/Scripts/angular-route.min.js.map create mode 100644 public/Scripts/angular-ui-router.js create mode 100644 public/Scripts/angular-ui-router.min.js create mode 100644 public/Scripts/angular.js create mode 100644 public/Scripts/angular.min.js create mode 100644 public/Scripts/angular.min.js.map create mode 100644 public/Scripts/bootstrap.custom.css create mode 100644 public/Scripts/bootstrap.js create mode 100644 public/Scripts/bootstrap.min.js create mode 100644 public/Scripts/dirPagination.js create mode 100644 public/Scripts/jquery-1.9.1-vsdoc.js create mode 100644 public/Scripts/jquery-1.9.1.js create mode 100644 public/Scripts/jquery-1.9.1.min.js create mode 100644 public/Scripts/jquery-1.9.1.min.map create mode 100644 public/Scripts/loading-bar.min.js create mode 100644 public/Scripts/ui-router.js create mode 100644 public/Views/Common/Home/Home.html create mode 100644 public/Views/Common/Home/home.js create mode 100644 public/Views/Common/RecoverPassword/RecoverPassword.html create mode 100644 public/Views/Common/RecoverPassword/recoverPassword.js create mode 100644 public/app.js create mode 100644 public/fonts/glyphicons-halflings-regular.eot create mode 100644 public/fonts/glyphicons-halflings-regular.svg create mode 100644 public/fonts/glyphicons-halflings-regular.ttf create mode 100644 public/fonts/glyphicons-halflings-regular.woff create mode 100644 public/fonts/glyphicons-halflings-regular.woff2 create mode 100644 public/index.html create mode 100644 run.sh create mode 100644 setup.sh diff --git a/.env b/.env new file mode 100644 index 0000000..a3a2e5a --- /dev/null +++ b/.env @@ -0,0 +1,5 @@ +ENV_HOST=localhost +PORT=3000 +SQL_HASH=D3f@ult5QLh@SH +SQL_USER=swg +SQL_PASS=password diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..336cb81 --- /dev/null +++ b/app.js @@ -0,0 +1,203 @@ +require('dotenv').config(); +const express = require("express"); +const bodyParser = require("body-parser"); +const timediff = require('timediff'); +const crypto = require('crypto'); +const path = require('path'); +const http = require('http'); + +const CONFIG = require('./config.json'); +const database = require("./database.js"); + +const Discord = require('discord.js'); + +const port = process.env.PORT; +const host = process.env.ENV_HOST; +// --------------------------------------------------------------- + +const client = new Discord.Client(); + +var app = express(); +const server = http.createServer(app); +app.use(bodyParser.json()); +app.use(express.json()); +app.use(bodyParser.urlencoded({ extended: true })); +app.use('/', express.static(__dirname + '/public')); + + +// --------------------------------------------------------------- + +function getHash(string, salt) { + var hash = crypto.createHash('sha1').update(string + salt).digest(); + var salt = Buffer.from(salt, "utf8") + return Buffer.concat([hash, salt]).toString('base64'); +} + +function dateFromUTSC(utscTime) { + var d = new Date(0); + d.setUTCSeconds(utscTime); + return d; +} + +function readableTimeDiff(timeDiff) { + var result = ""; + if (timeDiff.days > 0) result += timeDiff.days + " days, "; + if (timeDiff.hours > 0) result += timeDiff.hours + " hours, "; + if (timeDiff.minutes > 0) result += timeDiff.minutes + " minutes, "; + return result + timeDiff.seconds + " seconds"; +} + +// --------------------------------------------------------------- +//Test +//TBD + +app.post("/api/auth", function (req, res) { + var login = req.body; + + console.log("New Login: \t" + + "User: " + login.user_name + ", " + + "IP: " + login.ip); + + var loginHandler = function (err, user) { + if (user !== undefined && user !== null) { + if (user.password_hash === getHash(login.user_password, user.password_salt)) { + res.send({ message: 'success' }); + } else { + res.send({ message: 'Invalid password' }); + } + } else { + if (CONFIG.autoRegistration) { + database.createUser(login.user_name, getHash(login.user_password, process.env.SQL_HASH), "TODO:email", loginHandler); + } else { + res.send({ message: 'Unknown username' }); + } + } + } + + database.getUser(login.user_name, loginHandler); +}); + +app.post("/api/createUser", function (req, res) { + //TODO: implement + res.json('success'); +}); + +var clusters = {}; + +app.post("/api/sendMetrics", function (req, res) { + var metrics = req.body; + clusterName = metrics.clusterName; + + var cluster = clusters[clusterName]; + if (cluster === undefined) { + cluster = {} + clusters[clusterName] = cluster; + clusters[clusterName].clusterStartTime = Date.now(); + cluster.clusterUptime = { "days": 0, "hours": 0, "minutes": 0, "seconds": 0 }; + } + + cluster.clusterStatus = "N/A"; + cluster.clusterLastLoad = { "days": 0, "hours": 0, "minutes": 0, "seconds": 0 }; + cluster.clusterPopulation = metrics.totalPlayerCount; + cluster.clusterLastUpdate = Date.now(); + + if (clusters[clusterName].clusterStartTime == null) { + cluster.clusterStartTime = Date.now(); + } + + if (metrics.timeClusterWentIntoLoadingState > metrics.lastLoadingStateTime) { + cluster.clusterStatus = "Loading"; + } + else if (metrics.lastLoadingStateTime > 0) { + cluster.clusterStatus = "Online"; + var lastLoadDate = dateFromUTSC(metrics.lastLoadingStateTime); + cluster.clusterLastLoad = timediff(lastLoadDate, Date.now(), 'DHmS'); + } + else { + clusters[clusterName].clusterStatus = "Offline"; + cluster.clusterStartTime = null; + console.log("offline"); + } + + console.log("New Metrics: \t" + + "Cluster: " + clusterName + ", " + + "Status: " + cluster.clusterStatus + ", " + + "Players: " + cluster.clusterPopulation + ", " + + "Last Load: " + readableTimeDiff(cluster.clusterLastLoad) + " ago, " + + "Uptime: " + readableTimeDiff(cluster.clusterUptime)); + + res.json('success'); +}); + +// --------------------------------------------------------------- + +if (CONFIG.discordBot) { + + // Status checker + setInterval(function () { + for (var clusterName in clusters) { + let cluster = clusters[clusterName]; + // if we haven't received an update in twice as long as the interval, the server isn't responding + if (Date.now() - cluster.clusterLastUpdate > (CONFIG.discordStatusInterval * 2 * 1000)) { + cluster.clusterStatus = "Offline"; + cluster.clusterLastLoad = { "days": 0, "hours": 0, "minutes": 0, "seconds": 0 }; + cluster.clusterUptime = { "days": 0, "hours": 0, "minutes": 0, "seconds": 0 }; + cluster.clusterPopulation = 0; + cluster.clusterStartTime = null; + } else { + cluster.clusterUptime = timediff(cluster.clusterStartTime, Date.now(), 'DHmS'); + } + } + }, 5 * 1000) + + client.on('ready', () => { + var channel = client.channels.find("name", CONFIG.discordBotChannelName); + setInterval(function () { + for (var clusterName in clusters) { + let cluster = clusters[clusterName]; + channel.sendMessage( + "**Cluster** `" + clusterName + "` " + + "**Status** `" + cluster.clusterStatus + "` " + + "**Players** `" + cluster.clusterPopulation + "` " + + "**Last Load** `" + readableTimeDiff(cluster.clusterLastLoad) + " ago` " + + "**Uptime** `" + readableTimeDiff(cluster.clusterUptime) + "` "); + } + }, CONFIG.discordStatusInterval * 1000) + }); + + + client.login(CONFIG.discordBotToken); +} + +// --------------------------------------------------------------- + +if (CONFIG.restartServer) { + var cp = require("child_process"); + + setInterval(function () { + var cluster = clusters[CONFIG.restartClusterName]; + if (cluster !== undefined) { + if (cluster.clusterStatus === "Offline") { + console.log("[****] Restarting server!!!"); + cp.exec(CONFIG.restartCommand, { cwd: CONFIG.restartWorkingPath }, function (error, stdout, stderr) { }); + if (CONFIG.discordBot) { + var channel = client.channels.find("name", CONFIG.discordBotChannelName); + channel.sendMessage("@here **Restarting cluster `" + CONFIG.restartClusterName + "` due to detected offline status!**"); + } + } + } else { + console.log("[****] Starting server!!!"); + cp.exec(CONFIG.restartCommand, { cwd: CONFIG.restartWorkingPath }, function (error, stdout, stderr) { }); + } + }, 60 * 1000) +} + +// --------------------------------------------------------------- + +app.get('/*', function (req, res) { + res.sendFile(path.join(__dirname + '/public/index.html')); +}); + +server.listen(port, host, () => { + console.log(`Web Server Listening on ${host}:${port}`); +}); \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..f28b183 --- /dev/null +++ b/config.json @@ -0,0 +1,13 @@ +{ + "dbHost": "127.0.0.1", + "dbName": "swg", + "autoRegistration": true, + "discordBot": true, + "discordBotToken": "token", + "discordBotChannelName": "channelName", + "discordStatusInterval": 30, + "restartServer": true, + "restartClusterName": "SWG Server Name", + "restartWorkingPath": "/home/user/swg-main/", + "restartCommand": "./start_server.sh" +} \ No newline at end of file diff --git a/database.js b/database.js new file mode 100644 index 0000000..8bc2fa4 --- /dev/null +++ b/database.js @@ -0,0 +1,36 @@ +(function () { + var exports = module.exports = {}; + + const CONFIG = require('./config.json'); + const mysql = require('mysql'); + require('dotenv').config(); + + var con = mysql.createConnection({ + host: CONFIG.dbHost, + database: CONFIG.dbName, + user: process.env.SQL_USER, + password: process.env.SQL_PASS + }); + + // callback = function(err, user) + module.exports.getUser = function (username, callback) { + var sql = "SELECT * FROM user_account WHERE username = " + mysql.escape(username); + con.query(sql, function (err, result) { + if (err == null) { + var user = (result.length >= 1 ? result[0] : null); + callback(err, user); + } else { + console.log(err); + } + }); + } + + // callback = function(err, user) + module.exports.createUser = function (username, password, email, callback) { + var user = { username: username, password_hash: password, password_salt: process.env.SQL_HASH, accesslevel: 'standard' } + con.query("INSERT INTO user_account SET ?", user, function (err, result) { + if (err) throw err; + module.exports.getUser(username, callback); + }); + } +}()); \ No newline at end of file diff --git a/html/!!!!README 1st!!!! b/html/!!!!README 1st!!!! deleted file mode 100644 index 51ca287..0000000 --- a/html/!!!!README 1st!!!! +++ /dev/null @@ -1,46 +0,0 @@ - -SWG NGE Server Webpage v1.01 - - - -All Star Wars background pictures, music, and logos are registered trademarks and copyright of LucasArts and Disney. We do not recieve original credit for those trademarks and copyrights in anyway, shape, or form. - - - -Modified Webpage: - -I modified the webpage to add backgrounds, music(at main page), extra links, Server Online/Offline Status at Main Page (currently cant find correct port number for $portg but Login Server Status is working. If you accidently delete the port number for the Login Status, it is 10666. just put that in $portl if needed. If someone happens to find the correct port with no errors or crashes, please let us know with the correct port number). - -Currently I have no mysql database and oracle database experience to configure and modify the database for the Number of Players Online status so please let me know if you got this configured and how and what you did. - -Make sure to change the IP addresses in webpage code (not counting 127.0.0.1 in Server Status), to current IP address of VM in lower left corner of VM screen. Bring up a web browser and type in the address bar: http://(your.VM.Address.here) without the (). Then you can refresh the page when you change any of the webpage code. - - -FORUMS PAGE -------------------------------- -MyBB v1.8.12 - -I have also included a MyBB forums for the site as well. You will also have to add a mySQL database section for the forums before you can install it. - -Copy and paste this link in your browser for MyBB setup instructions and make sure to follow them correctly: https://docs.mybb.com/1.8/install/ - -You will need to register a seperate account for the forums. - - - - -May the Force Be With You. - ------------------------------------------------------------------ - -v1.01 UPDATE: 9/10/2017 - -1.)Fixed a few links on index.php and 1 link on addnewuser.php: - - a.)index.php: links for home, forums, and Register for an Account on index.php now have "/index.php", "/forums/index.php", and "/addnewuser.php" instead of http://192.168.1.XXX or http://localhost. Now user wont have to set addresses for webpage - - b.) addnewuser.php> fixed "Home" link on addnewuser.php. Instead of it being http://localhost/index.php or http://192.168.1.XXX, it is now /index.php. Now user wont have to set addresses for webpage - -2.) Reconfigured index.php coding to bring the main page up to top of page and menu on left side of page to be the top-left instead of at midd to bottom of page due to html body coding - - diff --git a/html/addnewuser.php b/html/addnewuser.php deleted file mode 100644 index d8917ba..0000000 --- a/html/addnewuser.php +++ /dev/null @@ -1,80 +0,0 @@ - - - - -Create a New Account - - - - - - - - -

Home

- - -

REGISTER AN ACCOUNT

- - - - - - - - - - - - - - - - -
Account Name
Password
Confirm Password
Access Level
- - -
- - diff --git a/html/auth.php b/html/auth.php deleted file mode 100644 index a3762ce..0000000 --- a/html/auth.php +++ /dev/null @@ -1,41 +0,0 @@ -query("SELECT * FROM user_account WHERE username = '$username'") or die(mysql_error()); - $no_of_rows = $result->num_rows; - if ($no_of_rows > 0) { - $result = $result->fetch_array(); - $salt = $result['password_salt']; - $stored_hash = $result['password_hash']; - $hashtest = checkhashSSHA($salt, $password); - if ($hashtest == $stored_hash) { - return $result; - } - } - else { - return false; - } -} - -function checkhashSSHA($salt, $password) { - $hash = base64_encode(sha1($password . $salt, true) . $salt); - return $hash; -} - -$username = $mysqli->real_escape_string($_POST['user_name']); -$password = $mysqli->real_escape_string($_POST['user_password']); -$user = getUserByEmailAndPassword($username, $password); -if ($user != false) { - if($user['accesslevel'] == "banned") { - $response['message'] = "Account banned"; - } else { - $response['message'] = "success"; - } -} -else { - $response['message'] = "Account does not exist or password was incorrect"; -} -echo json_encode($response); -?> diff --git a/html/create_database_table.sql b/html/create_database_table.sql deleted file mode 100644 index e8e164b..0000000 --- a/html/create_database_table.sql +++ /dev/null @@ -1,38 +0,0 @@ -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- -------------------------------------------------------- - --- --- Table structure for table `user_account` --- - -CREATE TABLE `user_account` ( - `user_id` int(11) NOT NULL, - `accesslevel` varchar(255) NOT NULL, - `username` varchar(255) NOT NULL, - `password_salt` varchar(255) NOT NULL, - `password_hash` varchar(255) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- --- Indexes for table `user_account` --- -ALTER TABLE `user_account` - ADD UNIQUE KEY `user_id` (`user_id`), - ADD UNIQUE KEY `username` (`username`); - --- --- AUTO_INCREMENT for table `user_account` --- -ALTER TABLE `user_account` - MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/html/forums/admin/backups/.htaccess b/html/forums/admin/backups/.htaccess deleted file mode 100644 index 9532873..0000000 --- a/html/forums/admin/backups/.htaccess +++ /dev/null @@ -1,7 +0,0 @@ - - Order deny,allow - Deny from all - - - Require all denied - \ No newline at end of file diff --git a/html/forums/admin/backups/index.html b/html/forums/admin/backups/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/backups/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/inc/class_form.php b/html/forums/admin/inc/class_form.php deleted file mode 100644 index ece99d7..0000000 --- a/html/forums/admin/inc/class_form.php +++ /dev/null @@ -1,1068 +0,0 @@ -\n"; - $form .= $this->generate_hidden_field("my_post_key", $mybb->post_code)."\n"; - if($return == false) - { - echo $form; - } - else - { - $this->_return = true; - $this->construct_return = $form; - } - } - - /** - * Generate and return a hidden field. - * - * @param string $name The name of the hidden field. - * @param string $value The value of the hidden field. - * @param array $options Optional array of options (id) - * @return string The generated hidden - */ - function generate_hidden_field($name, $value, $options=array()) - { - $input = ""; - $textarea .= htmlspecialchars_uni($value); - $textarea .= ""; - return $textarea; - } - - /** - * Generate a radio button. - * - * @param string $name The name of the radio button. - * @param string $value The value of the radio button - * @param string $label The label of the radio button if there is one. - * @param array $options Array of options for the radio button (id, class, checked) - * @return string The generated radio button. - */ - function generate_radio_button($name, $value="", $label="", $options=array()) - { - $input = " val format. - * @param string|array $selected Either a string containing the selected item or an array containing multiple selected items (options['multiple'] must be true) - * @param array $options Array of options for the select box (multiple, class, id, size) - * @return string The select box. - */ - function generate_select_box($name, $option_list, $selected=array(), $options=array()) - { - if(!isset($options['multiple'])) - { - $select = "\n"; - return $select; - } - - /** - * Generate a forum selection box. - * - * @param string $name The name of the selection box. - * @param array|string $selected Array/string of the selected items. - * @param array Array of options (pid, main_option, multiple, depth) - * @param boolean|int $is_first Is this our first iteration of this function? - * @return string The built select box. - */ - function generate_forum_select($name, $selected, $options=array(), $is_first=1) - { - global $fselectcache, $forum_cache, $selectoptions; - - if(!$selectoptions) - { - $selectoptions = ''; - } - - if(!isset($options['depth'])) - { - $options['depth'] = 0; - } - - $options['depth'] = (int)$options['depth']; - - if(!isset($options['pid'])) - { - $options['pid'] = 0; - } - - $pid = (int)$options['pid']; - - if(!is_array($fselectcache)) - { - if(!is_array($forum_cache)) - { - $forum_cache = cache_forums(); - } - - foreach($forum_cache as $fid => $forum) - { - $fselectcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - } - - if($options['main_option'] && $is_first) - { - $select_add = ''; - if($selected == -1) - { - $select_add = " selected=\"selected\""; - } - - $selectoptions .= "\n"; - } - - if(isset($fselectcache[$pid])) - { - foreach($fselectcache[$pid] as $main) - { - foreach($main as $forum) - { - if($forum['fid'] != "0" && $forum['linkto'] == '') - { - $select_add = ''; - - if(!empty($selected) && ($forum['fid'] == $selected || (is_array($selected) && in_array($forum['fid'], $selected)))) - { - $select_add = " selected=\"selected\""; - } - - $sep = ''; - if(isset($options['depth'])) - { - $sep = str_repeat(" ", $options['depth']); - } - - $style = ""; - if($forum['active'] == 0) - { - $style = " style=\"font-style: italic;\""; - } - - $selectoptions .= "\n"; - - if($forum_cache[$forum['fid']]) - { - $options['depth'] += 5; - $options['pid'] = $forum['fid']; - $this->generate_forum_select($forum['fid'], $selected, $options, 0); - $options['depth'] -= 5; - } - } - } - } - } - - if($is_first == 1) - { - if(!isset($options['multiple'])) - { - $select = "read('usergroups'); - - if(!is_array($selected)) - { - $selected = array($selected); - } - - foreach($groups_cache as $group) - { - $selected_add = ""; - - - if(in_array($group['gid'], $selected)) - { - $selected_add = " selected=\"selected\""; - } - - $select .= ""; - } - - $select .= ""; - - return $select; - } - - /** - * Generate a submit button. - * - * @param string $value The value for the submit button. - * @param array $options Array of options for the submit button (class, id, name, dsiabled, onclick) - * @return string The generated submit button. - */ - function generate_submit_button($value, $options=array()) - { - $input = "generate_radio_button($name, $yes_value, $lang->yes, $yes_options); - $no = $this->generate_radio_button($name, $no_value, $lang->no, $no_options); - return $yes." ".$no; - } - - /** - * Generate an on/off radio button choice. - * - * @param string $name The name of the on/off choice field. - * @param int $value The value that should be checked. - * @param boolean $int Using integers for the checkbox? - * @param array $on_options Array of options for the on checkbox (@see generate_radio_button) - * @param array $off_options Array of options for the off checkbox (@see generate_radio_button) - * @return string The generated on/off radio button. - */ - function generate_on_off_radio($name, $value=1, $int=true, $on_options=array(), $off_options = array()) - { - global $lang; - - // Checked status - if($value == "off" || (int) $value !== 1) - { - $off_checked = 1; - $on_checked = 0; - } - else - { - $on_checked = 1; - $off_checked = 0; - } - // Element value - if($int == true) - { - $on_value = 1; - $off_value = 0; - } - else - { - $on_value = "on"; - $off_value = "off"; - } - - // Set the options straight - if(!isset($on_options['class'])) - { - $on_options['class'] = ''; - } - - if(!isset($off_options['class'])) - { - $off_options['class'] = ''; - } - - $on_options['class'] = "radio_on ".$on_options['class']; - $on_options['checked'] = $on_checked; - $off_options['class'] = "radio_off ".$off_options['class']; - $off_options['checked'] = $off_checked; - - $on = $this->generate_radio_button($name, $on_value, $lang->on, $on_options); - $off = $this->generate_radio_button($name, $off_value, $lang->off, $off_options); - return $on." ".$off; - } - - /** - * @param string $name - * @param int $day - * @param int $month - * @param int $year - * - * @return string - */ - function generate_date_select($name, $day=0,$month=0,$year=0) - { - global $lang; - - $months = array( - 1 => $lang->january, - 2 => $lang->february, - 3 => $lang->march, - 4 => $lang->april, - 5 => $lang->may, - 6 => $lang->june, - 7 => $lang->july, - 8 => $lang->august, - 9 => $lang->september, - 10 => $lang->october, - 11 => $lang->november, - 12 => $lang->december, - ); - - // Construct option list for days - $days = array(); - for($i = 1; $i <= 31; ++$i) - { - $days[$i] = $i; - } - - if(!$day) - { - $day = date("j", TIME_NOW); - } - - if(!$month) - { - $month = date("n", TIME_NOW); - } - - if(!$year) - { - $year = date("Y", TIME_NOW); - } - - $built = $this->generate_select_box($name.'_day', $days, (int)$day, array('id' => $name.'_day'))."   "; - $built .= $this->generate_select_box($name.'_month', $months, (int)$month, array('id' => $name.'_month'))."   "; - $built .= $this->generate_numeric_field($name.'_year', $year, array('id' => $name.'_year', 'style' => 'width: 100px;', 'min' => 0)); - return $built; - } - - /** - * Output a row of buttons in a wrapped container. - * - * @param array $buttons Array of the buttons (html) to output. - * @return string The submit wrapper (optional) - */ - function output_submit_wrapper($buttons) - { - global $plugins; - $buttons = $plugins->run_hooks("admin_form_output_submit_wrapper", $buttons); - $return = "
\n"; - foreach($buttons as $button) - { - $return .= $button." \n"; - } - $return .= "
\n"; - if($this->_return == false) - { - echo $return; - } - else - { - return $return; - } - } - - /** - * Finish up a form. - * - * @return string The ending form tag (optional) - */ - function end() - { - global $plugins; - $plugins->run_hooks("admin_form_end", $this); - if($this->_return == false) - { - echo ""; - } - else - { - return ""; - } - } -} - -/** - * Generate a form container. - */ -class DefaultFormContainer -{ - /** @var Table */ - private $_container; - /** @var string */ - public $_title; - - /** - * Initialise the new form container. - * - * @param string $title The title of the form container - * @param string $extra_class An additional class to apply if we have one. - */ - function __construct($title='', $extra_class='') - { - $this->_container = new Table; - $this->extra_class = $extra_class; - $this->_title = $title; - } - - /** - * Output a header row of the form container. - * - * @param string $title The header row label. - * @param array $extra Array of extra information for this header cell (class, style, colspan, width) - */ - function output_row_header($title, $extra=array()) - { - $this->_container->construct_header($title, $extra); - } - - /** - * Output a row of the form container. - * - * @param string $title The title of the row. - * @param string $description The description of the row/field. - * @param string $content The HTML content to show in the row. - * @param string $label_for The ID of the control this row should be a label for. - * @param array $options Array of options for the row cell. - * @param array $row_options Array of options for the row container. - */ - function output_row($title, $description="", $content="", $label_for="", $options=array(), $row_options=array()) - { - global $plugins; - $pluginargs = array( - 'title' => &$title, - 'description' => &$description, - 'content' => &$content, - 'label_for' => &$label_for, - 'options' => &$options, - 'row_options' => &$row_options, - 'this' => &$this - ); - - $plugins->run_hooks("admin_formcontainer_output_row", $pluginargs); - - $row = $for = ''; - if($label_for != '') - { - $for = " for=\"{$label_for}\""; - } - - if($title) - { - $row = "{$title}"; - } - - if($description != '') - { - $row .= "\n
{$description}
\n"; - } - - $row .= "
{$content}
\n"; - - $this->_container->construct_cell($row, $options); - - if(!isset($options['skip_construct'])) - { - $this->_container->construct_row($row_options); - } - } - - /** - * Output a row cell for a table based form row. - * - * @param string $data The data to show in the cell. - * @param array $options Array of options for the cell (optional). - */ - function output_cell($data, $options=array()) - { - $this->_container->construct_cell($data, $options); - } - - /** - * Build a row for the table based form row. - * - * @param array $extra Array of extra options for the cell (optional). - */ - function construct_row($extra=array()) - { - $this->_container->construct_row($extra); - } - - /** - * return the cells of a row for the table based form row. - * - * @param string $row_id The id of the row. - * @param boolean $return Whether or not to return or echo the resultant contents. - * @return string The output of the row cells (optional). - */ - function output_row_cells($row_id, $return=false) - { - if(!$return) - { - echo $this->_container->output_row_cells($row_id, $return); - } - else - { - return $this->_container->output_row_cells($row_id, $return); - } - } - - /** - * Count the number of rows in the form container. Useful for displaying a 'no rows' message. - * - * @return int The number of rows in the form container. - */ - function num_rows() - { - return $this->_container->num_rows(); - } - - /** - * Output the end of the form container row. - * - * @param boolean $return Whether or not to return or echo the resultant contents. - * @return string The output of the form container (optional). - */ - function end($return=false) - { - global $plugins; - - $hook = array( - 'return' => &$return, - 'this' => &$this - ); - - $plugins->run_hooks("admin_formcontainer_end", $hook); - if($return == true) - { - return $this->_container->output($this->_title, 1, "general form_container {$this->extra_class}", true); - } - else - { - echo $this->_container->output($this->_title, 1, "general form_container {$this->extra_class}", false); - } - } -} diff --git a/html/forums/admin/inc/class_page.php b/html/forums/admin/inc/class_page.php deleted file mode 100644 index 15806cd..0000000 --- a/html/forums/admin/inc/class_page.php +++ /dev/null @@ -1,1230 +0,0 @@ - tags. - */ - public $extra_header = ""; - - /** - * @var string Any additional messages to add after the flash messages are shown. - */ - public $extra_messages = array(); - - /** - * @var string Show a post verify error - */ - public $show_post_verify_error = ''; - - /** - * Output the page header. - * - * @param string $title The title of the page. - */ - function output_header($title="") - { - global $mybb, $admin_session, $lang, $plugins; - - $args = array( - 'this' => &$this, - 'title' => &$title, - ); - - $plugins->run_hooks("admin_page_output_header", $args); - - if(!$title) - { - $title = $lang->mybb_admin_panel; - } - - $rtl = ""; - if($lang->settings['rtl'] == 1) - { - $rtl = " dir=\"rtl\""; - } - - echo "\n"; - echo "\n"; - echo "\n"; - echo " ".$title."\n"; - echo " \n"; - echo " \n"; - echo " style."/main.css?ver=1804\" type=\"text/css\" />\n"; - echo " style."/modal.css\" type=\"text/css\" />\n"; - - // Load stylesheet for this module if it has one - if(file_exists(MYBB_ADMIN_DIR."styles/{$this->style}/{$this->active_module}.css")) - { - echo " style}/{$this->active_module}.css\" type=\"text/css\" />\n"; - } - - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - - // Stop JS elements showing while page is loading (JS supported browsers only) - echo " \n"; - echo " \n"; - - echo " \n"; - echo $this->extra_header; - echo "\n"; - echo "\n"; - echo "
\n"; - echo "

{$lang->mybb_admin_cp}

\n"; - $username = htmlspecialchars_uni($mybb->user['username']); - echo " \n"; - echo $this->_build_menu(); - echo "
\n"; - echo "
\n"; - echo $this->submenu; - echo $this->sidebar; - echo "
\n"; - echo "
\n"; - echo "
\n"; - echo $this->_generate_breadcrumb(); - echo "
\n"; - echo "
\n"; - if(isset($admin_session['data']['flash_message']) && $admin_session['data']['flash_message']) - { - $message = $admin_session['data']['flash_message']['message']; - $type = $admin_session['data']['flash_message']['type']; - echo "
\n"; - echo "{$message}\n"; - echo "
\n"; - update_admin_session('flash_message', ''); - } - - if(!empty($this->extra_messages) && is_array($this->extra_messages)) - { - foreach($this->extra_messages as $message) - { - switch($message['type']) - { - case 'success': - case 'error': - echo "
\n"; - echo "{$message['message']}\n"; - echo "
\n"; - break; - default: - $this->output_error($message['message']); - break; - } - } - } - - if($this->show_post_verify_error == true) - { - $this->output_error($lang->invalid_post_verify_key); - } - } - - /** - * Output the page footer. - * - * @param bool $quit - */ - function output_footer($quit=true) - { - global $mybb, $maintimer, $db, $lang, $plugins; - - $args = array( - 'this' => &$this, - 'quit' => &$quit, - ); - - $plugins->run_hooks("admin_page_output_footer", $args); - - $memory_usage = get_friendly_size(get_memory_usage()); - - $totaltime = format_time_duration($maintimer->stop()); - $querycount = $db->query_count; - - if(my_strpos(getenv("REQUEST_URI"), "?")) - { - $debuglink = htmlspecialchars_uni(getenv("REQUEST_URI")) . "&debug=1#footer"; - } - else - { - $debuglink = htmlspecialchars_uni(getenv("REQUEST_URI")) . "?debug=1#footer"; - } - - echo "
\n"; - echo "
\n"; - echo "
"; - echo "
"; - echo "
\n"; - echo "

".$lang->sprintf($lang->generated_in, $totaltime, $debuglink, $querycount, $memory_usage)."

Powered By MyBB, © 2002-".COPY_YEAR." MyBB Group.

\n"; - if($mybb->debug_mode) - { - echo $db->explain; - } - echo "
\n"; - echo "\n"; - echo "\n"; - - if($quit != false) - { - exit; - } - } - - /** - * Add an item to the page breadcrumb trail. - * - * @param string $name The name of the item to add. - * @param string $url The URL to the item we're adding (if there is one) - */ - function add_breadcrumb_item($name, $url="") - { - $this->_breadcrumb_trail[] = array("name" => $name, "url" => $url); - } - - /** - * Generate a breadcrumb trail. - * - * @return bool|string - */ - function _generate_breadcrumb() - { - if(!is_array($this->_breadcrumb_trail)) - { - return false; - } - $trail = ""; - foreach($this->_breadcrumb_trail as $key => $crumb) - { - if(isset($this->_breadcrumb_trail[$key+1])) - { - $trail .= "".$crumb['name'].""; - if(isset($this->_breadcrumb_trail[$key+2])) - { - $trail .= " » "; - } - } - else - { - $trail .= "".$crumb['name'].""; - } - } - return $trail; - } - - /** - * Output a success message. - * - * @param string $message The message to output. - */ - function output_success($message) - { - echo "
{$message}
\n"; - } - - /** - * Output an alert/warning message. - * - * @param string $message The message to output. - * @param string $id The ID of the alert/warning (optional) - */ - function output_alert($message, $id="") - { - if($id) - { - $id = " id=\"{$id}\""; - } - echo "
{$message}
\n"; - } - - /** - * Output an inline message. - * - * @param string $message The message to output. - */ - function output_inline_message($message) - { - echo "
{$message}
\n"; - } - - /** - * Output a single error message. - * - * @param string $error The message to output. - */ - function output_error($error) - { - echo "
\n"; - echo "{$error}\n"; - echo "
\n"; - } - - /** - * Output one or more inline error messages. - * - * @param array $errors Array of error messages to output. - */ - function output_inline_error($errors) - { - global $lang; - - if(!is_array($errors)) - { - $errors = array($errors); - } - echo "
\n"; - echo "

{$lang->encountered_errors}

\n"; - echo "
    \n"; - foreach($errors as $error) - { - echo "
  • {$error}
  • \n"; - } - echo "
\n"; - echo "
\n"; - } - - /** - * Generate the login page. - * - * @param string $message The any message to output on the page if there is one. - * @param string $class The class name of the message (defaults to success) - */ - function show_login($message="", $class="success") - { - global $plugins, $lang, $cp_style, $mybb; - - $args = array( - 'this' => &$this, - 'message' => &$message, - 'class' => &$class - ); - - $plugins->run_hooks('admin_page_show_login_start', $args); - - $copy_year = COPY_YEAR; - - $login_container_width = ""; - $login_label_width = ""; - - // If the language string for "Username" is too cramped then use this to define how much larger you want the gap to be (in px) - if(isset($lang->login_field_width)) - { - $login_label_width = " style=\"width: ".((int)$lang->login_field_width+100)."px;\""; - $login_container_width = " style=\"width: ".(410+((int)$lang->login_field_width))."px;\""; - } - - $login_page .= << - - -{$lang->mybb_admin_login} - - - - - - - - - -
- -
-

{$lang->please_login}

-EOF; - if($message) - { - $login_page .= "

{$message}

"; - } - // Make query string nice and pretty so that user can go to his/her preferred destination - $query_string = ''; - if($_SERVER['QUERY_STRING']) - { - $query_string = '?'.preg_replace('#adminsid=(.{32})#i', '', $_SERVER['QUERY_STRING']); - $query_string = preg_replace('#my_post_key=(.{32})#i', '', $query_string); - $query_string = str_replace('action=logout', '', $query_string); - $query_string = preg_replace('#&+#', '&', $query_string); - $query_string = str_replace('?&', '?', $query_string); - $query_string = htmlspecialchars_uni($query_string); - } - switch($mybb->settings['username_method']) - { - case 0: - $lang_username = $lang->username; - break; - case 1: - $lang_username = $lang->username1; - break; - case 2: - $lang_username = $lang->username2; - break; - default: - $lang_username = $lang->username; - break; - } - - // Secret PIN - global $config; - if(isset($config['secret_pin']) && $config['secret_pin'] != '') - { - $secret_pin = "
-
"; - } - else - { - $secret_pin = ''; - } - - $login_lang_string = $lang->enter_username_and_password; - - switch($mybb->settings['username_method']) - { - case 0: // Username only - $login_lang_string = $lang->sprintf($login_lang_string, $lang->login_username); - break; - case 1: // Email only - $login_lang_string = $lang->sprintf($login_lang_string, $lang->login_email); - break; - case 2: // Username and email - default: - $login_lang_string = $lang->sprintf($login_lang_string, $lang->login_username_and_password); - break; - } - - $_SERVER['PHP_SELF'] = htmlspecialchars_uni($_SERVER['PHP_SELF']); - - $login_page .= <<{$login_lang_string}

-
-
- -
- -
- -
-
- {$secret_pin} -
-

- - {$lang->lost_password} - - - - -

-
-
-
- - -EOF; - - $args = array( - 'this' => &$this, - 'login_page' => &$login_page - ); - - $plugins->run_hooks('admin_page_show_login_end', $args); - - echo $login_page; - exit; - } - - function show_2fa() - { - global $lang, $cp_style, $mybb; - - $mybb2fa_page = << - - -{$lang->my2fa} - - - - - - - - - -
- -
-

{$lang->my2fa}

-EOF; - // Make query string nice and pretty so that user can go to his/her preferred destination - $query_string = ''; - if($_SERVER['QUERY_STRING']) - { - $query_string = '?'.preg_replace('#adminsid=(.{32})#i', '', $_SERVER['QUERY_STRING']); - $query_string = preg_replace('#my_post_key=(.{32})#i', '', $query_string); - $query_string = str_replace('action=logout', '', $query_string); - $query_string = preg_replace('#&+#', '&', $query_string); - $query_string = str_replace('?&', '?', $query_string); - $query_string = htmlspecialchars_uni($query_string); - } - $mybb2fa_page .= <<{$lang->my2fa_code}

-
-
-
-
-
-

- - -

-
-
-
- - -EOF; - echo $mybb2fa_page; - exit; - } - - /** - * Generate the lockout page - * - */ - function show_lockedout() - { - global $lang, $mybb, $cp_style; - - $copy_year = COPY_YEAR; - $allowed_attempts = (int)$mybb->settings['maxloginattempts']; - $lockedout_message = $lang->sprintf($lang->error_mybb_admin_lockedout_message, $allowed_attempts); - - print << - - -{$lang->mybb_admin_cp} - {$lang->error_mybb_admin_lockedout} - - - - - -
- -
-

{$lang->error_mybb_admin_lockedout}

-
{$lockedout_message}
-
-
- - -EOF; - exit; - } - - /** - * Generate the lockout unlock page - * - * @param string $message The any message to output on the page if there is one. - * @param string $class The class name of the message (defaults to success) - */ - function show_lockout_unlock($message="", $class="success") - { - global $lang, $mybb, $cp_style; - - $copy_year = COPY_YEAR; - switch($mybb->settings['username_method']) - { - case 0: - $lang_username = $lang->username; - break; - case 1: - $lang_username = $lang->username1; - break; - case 2: - $lang_username = $lang->username2; - break; - default: - $lang_username = $lang->username; - break; - } - - if($message) - { - $message = "

{$message}

"; - } - - print << - - -{$lang->mybb_admin_cp} - {$lang->lockout_unlock} - - - - - -
- -
-

{$lang->lockout_unlock}

- {$message} -

{$lang->enter_username_and_token}

-
-
- -
- -
- -
-
-
-

- - {$lang->lost_password} - - - - -

-
-
-
- - -EOF; - exit; - } - - /** - * Add an item to the primary navigation menu. - * - * @param string $title The title of the menu item. - * @param string $id The ID of the menu item. This should correspond with the module the menu will run. - * @param string $link The link to follow when the menu item is clicked. - * @param int $order The display order of the menu item. Lower display order means closer to start of the menu. - * @param array $submenu Array of sub menu items if there are any. - */ - function add_menu_item($title, $id, $link, $order=10, $submenu=array()) - { - $this->_menu[$order][] = array( - "title" => $title, - "id" => $id, - "link" => $link, - "submenu" => $submenu - ); - } - - /** - * Build the actual navigation menu. - * - * @return bool|string - */ - function _build_menu() - { - if(!is_array($this->_menu)) - { - return false; - } - $build_menu = "
\n
    \n"; - ksort($this->_menu); - foreach($this->_menu as $items) - { - foreach($items as $menu_item) - { - $menu_item['link'] = htmlspecialchars_uni($menu_item['link']); - if($menu_item['id'] == $this->active_module) - { - $sub_menu = $menu_item['submenu']; - $sub_menu_title = $menu_item['title']; - $build_menu .= "
  • {$menu_item['title']}
  • \n"; - - } - else - { - $build_menu .= "
  • {$menu_item['title']}
  • \n"; - } - } - } - $build_menu .= "
\n
"; - - if($sub_menu) - { - $this->_build_submenu($sub_menu_title, $sub_menu); - } - return $build_menu; - } - - /** - * Build a navigation sub menu if we have one. - * - * @param string $title A title for the sub menu. - * @param array $items Array of items for the sub menu. - */ - function _build_submenu($title, $items) - { - if(is_array($items)) - { - $sidebar = new sideBarItem($title); - $sidebar->add_menu_items($items, $this->active_action); - $this->submenu .= $sidebar->get_markup(); - } - } - - /** - * Output a Javascript based tab control on to the page. - * - * @param array $tabs Array of tabs in name => title format. Name should correspond to the name of a DIV containing the tab content. - * @param boolean $observe_onload Whether or not to run the event onload or instantly - * @param string $id The ID to use for the tabs for if you run multiple instances of the tabbing control in one html page - */ - function output_tab_control($tabs=array(), $observe_onload=true, $id="tabs") - { - global $plugins; - $tabs = $plugins->run_hooks("admin_page_output_tab_control_start", $tabs); - echo "
    \n"; - $tab_count = count($tabs); - $done = 1; - foreach($tabs as $anchor => $title) - { - $class = ""; - if($tab_count == $done) - { - $class .= " last"; - } - if($done == 1) - { - $class .= " first"; - } - ++$done; - echo "
  • {$title}
  • \n"; - } - echo "
\n"; - $plugins->run_hooks("admin_page_output_tab_control_end", $tabs); - } - - /** - * Output a series of primary navigation tabs for swithcing between items within a particular module/action. - * - * @param array $tabs Nested array of tabs containing possible keys of align, link_target, link, title. - * @param string $active The name of the active tab. Corresponds with the key of each tab item. - */ - function output_nav_tabs($tabs=array(), $active='') - { - global $plugins; - $tabs = $plugins->run_hooks("admin_page_output_nav_tabs_start", $tabs); - echo "
"; - echo "\t
    \n"; - foreach($tabs as $id => $tab) - { - $class = ''; - if($id == $active) - { - $class = ' active'; - } - if(isset($tab['align']) == "right") - { - $class .= " right"; - } - $target = ''; - if(isset($tab['link_target'])) - { - $target = " target=\"{$tab['link_target']}\""; - } - if(!isset($tab['link'])) - { - $tab['link'] = ''; - } - echo "\t\t
  • {$tab['title']}
  • \n"; - $target = ''; - } - echo "\t
\n"; - if($tabs[$active]['description']) - { - echo "\t
{$tabs[$active]['description']}
\n"; - } - echo "
"; - $arguments = array('tabs' => $tabs, 'active' => $active); - $plugins->run_hooks("admin_page_output_nav_tabs_end", $arguments); - } - - /** - * Output a page asking if a user wishes to continue performing a specific action. - * - * @param string $url The URL to be forwarded to. - * @param string $message The confirmation message to output. - * @param string $title The title to use in the output header - */ - function output_confirm_action($url, $message="", $title="") - { - global $lang, $plugins; - - $args = array( - 'this' => &$this, - 'url' => &$url, - 'message' => &$message, - 'title' => &$title, - ); - - $plugins->run_hooks('admin_page_output_confirm_action', $args); - - if(!$message) - { - $message = $lang->confirm_action; - } - $this->output_header($title); - $form = new Form($url, 'post'); - - echo "
\n"; - echo "

{$message}

\n"; - echo "
\n"; - echo "

\n"; - echo $form->generate_submit_button($lang->yes, array('class' => 'button_yes')); - echo $form->generate_submit_button($lang->no, array("name" => "no", 'class' => 'button_no')); - echo "

\n"; - echo "
\n"; - - $form->end(); - $this->output_footer(); - } - - /** - * Build a clickable MyCode editor for the Admin CP. - * - * @param string $bind The ID of the textarea to bind the editor to. - * @param string $editor_language The language string for the editor. - * @param bool $smilies Whether or not smilies should be included - * @return string The build MyCode editor Javascript. - */ - function build_codebuttons_editor($bind, $editor_language, $smilies) - { - global $lang, $mybb, $smiliecache, $cache; - - // Smilies - $emoticon = ""; - $emoticons_enabled = "false"; - if($smilies) - { - if($mybb->settings['smilieinserter'] && $mybb->settings['smilieinsertercols'] && $mybb->settings['smilieinsertertot']) - { - $emoticon = ",emoticon"; - } - $emoticons_enabled = "true"; - - if(!$smiliecount) - { - $smilie_cache = $cache->read("smilies"); - $smiliecount = count($smilie_cache); - } - - if(!$smiliecache) - { - if(!is_array($smilie_cache)) - { - $smilie_cache = $cache->read("smilies"); - } - foreach($smilie_cache as $smilie) - { - $smilie['image'] = str_replace("{theme}", "images", $smilie['image']); - $smiliecache[$smilie['sid']] = $smilie; - } - } - - unset($smilie); - - if(is_array($smiliecache)) - { - reset($smiliecache); - - $dropdownsmilies = $moresmilies = $hiddensmilies = ""; - $i = 0; - - foreach($smiliecache as $smilie) - { - $finds = explode("\n", $smilie['find']); - $finds_count = count($finds); - - // Only show the first text to replace in the box - $find = str_replace(array('\\', '"'), array('\\\\', '\"'), htmlspecialchars_uni($finds[0])); - $image = str_replace(array('\\', '"'), array('\\\\', '\"'), htmlspecialchars_uni($smilie['image'])); - if(substr($image, 0, 4) != "http") - { - $image = $mybb->settings['bburl']."/".$image; - } - - if(!$mybb->settings['smilieinserter'] || !$mybb->settings['smilieinsertercols'] || !$mybb->settings['smilieinsertertot'] || !$smilie['showclickable']) - { - $hiddensmilies .= '"'.$find.'": "'.$image.'",'; - } - elseif($i < $mybb->settings['smilieinsertertot']) - { - $dropdownsmilies .= '"'.$find.'": "'.$image.'",'; - ++$i; - } - else - { - $moresmilies .= '"'.$find.'": "'.$image.'",'; - } - - for($j = 1; $j < $finds_count; ++$j) - { - $find = str_replace(array('\\', '"'), array('\\\\', '\"'), htmlspecialchars_uni($finds[$j])); - $hiddensmilies .= '"'.$find.'": "'.$image.'",'; - } - } - } - } - - $basic1 = $basic2 = $align = $font = $size = $color = $removeformat = $email = $link = $list = $code = $sourcemode = ""; - - if($mybb->settings['allowbasicmycode'] == 1) - { - $basic1 = "bold,italic,underline,strike|"; - $basic2 = "horizontalrule,"; - } - - if($mybb->settings['allowalignmycode'] == 1) - { - $align = "left,center,right,justify|"; - } - - if($mybb->settings['allowfontmycode'] == 1) - { - $font = "font,"; - } - - if($mybb->settings['allowsizemycode'] == 1) - { - $size = "size,"; - } - - if($mybb->settings['allowcolormycode'] == 1) - { - $color = "color,"; - } - - if($mybb->settings['allowfontmycode'] == 1 || $mybb->settings['allowsizemycode'] == 1 || $mybb->settings['allowcolormycode'] == 1) - { - $removeformat = "removeformat|"; - } - - if($mybb->settings['allowemailmycode'] == 1) - { - $email = "email,"; - } - - if($mybb->settings['allowlinkmycode'] == 1) - { - $link = "link,unlink"; - } - - if($mybb->settings['allowlistmycode'] == 1) - { - $list = "bulletlist,orderedlist|"; - } - - if($mybb->settings['allowcodemycode'] == 1) - { - $code = "code,php,"; - } - - if($mybb->user['sourceeditor'] == 1) - { - $sourcemode = "MyBBEditor.sourceMode(true);"; - } - - return << -var partialmode = {$mybb->settings['partialmode']}, -opt_editor = { - plugins: "bbcode,undo", - style: "../jscripts/sceditor/textarea_styles/jquery.sceditor.mybb.css", - rtl: {$lang->settings['rtl']}, - locale: "mybblang", - enablePasteFiltering: true, - autoUpdate: true, - emoticonsEnabled: {$emoticons_enabled}, - emoticons: { - // Emoticons to be included in the dropdown - dropdown: { - {$dropdownsmilies} - }, - // Emoticons to be included in the more section - more: { - {$moresmilies} - }, - // Emoticons that are not shown in the dropdown but will still be converted. Can be used for things like aliases - hidden: { - {$hiddensmilies} - } - }, - emoticonsCompat: true, - toolbar: "{$basic1}{$align}{$font}{$size}{$color}{$removeformat}{$basic2}image,{$email}{$link}|video{$emoticon}|{$list}{$code}quote|maximize,source", -}; -{$editor_language} -$(function() { - $("#{$bind}").sceditor(opt_editor); - - MyBBEditor = $("#{$bind}").sceditor("instance"); - {$sourcemode} -}); - -EOF; - } -} - -/** - * A class for generating side bar blocks. - */ -class DefaultSidebarItem -{ - /** - * @var string The title of the side bar block. - */ - private $_title; - - /** - * @var string The contents of the side bar block. - */ - private $_contents; - - /** - * Constructor. Set the title of the side bar block. - * - * @param string $title The title of the side bar block. - */ - function __construct($title="") - { - $this->_title = $title; - } - - /** - * Add menus item to the side bar block. - * - * @param array $items Array of menu items to add. Each menu item should be a nested array of id, link and title. - * @param string $active The ID of the active menu item if there is one. - */ - function add_menu_items($items, $active) - { - global $run_module; - - $this->_contents = "
    "; - foreach($items as $item) - { - if(!check_admin_permissions(array("module" => $run_module, "action" => $item['id']), false)) - { - continue; - } - - $class = ""; - if($item['id'] == $active) - { - $class = "active"; - } - $item['link'] = htmlspecialchars_uni($item['link']); - $this->_contents .= "
  • {$item['title']}
  • \n"; - } - $this->_contents .= "
"; - } - - /** - * Sets custom html to the contents variable - * - * @param string $html The custom html to set - */ - function set_contents($html) - { - $this->_contents = $html; - } - - /** - * Fetch the HTML markup for the side bar box. - * - * @return string - */ - function get_markup() - { - $markup = "
\n"; - $markup .= "
{$this->_title}
\n"; - if($this->_contents) - { - $markup .= $this->_contents; - } - $markup .= "
\n"; - return $markup; - } -} - -/** - * Generate a Javascript based popup menu. - */ -class DefaultPopupMenu -{ - /** - * @var string The title of the popup menu to be shown on the button. - */ - private $_title; - - /** - * @var string The ID of this popup menu. Must be unique. - */ - private $_id; - - /** - * @var string Built HTML for the items in the popup menu. - */ - private $_items; - - /** - * Initialise a new popup menu. - * - * @var string $id The ID of the popup menu. - * @var string $title The title of the popup menu. - */ - function __construct($id, $title='') - { - $this->_id = $id; - $this->_title = $title; - } - - /** - * Add an item to the popup menu. - * - * @param string $text The title of this item. - * @param string $link The page this item should link to. - * @param string $onclick The onclick event handler if we have one. - */ - function add_item($text, $link, $onclick='') - { - if($onclick) - { - $onclick = " onclick=\"{$onclick}\""; - } - $this->_items .= "\n"; - } - - /** - * Fetch the contents of the popup menu. - * - * @return string The popup menu. - */ - function fetch() - { - $popup = "
_id}_popup\">\n{$this->_items}
\n"; - if($this->_title) - { - $popup .= "_id}\" class=\"popup_button\">{$this->_title}\n"; - } - $popup .= "\n"; - return $popup; - } - - /** - * Outputs a popup menu to the browser. - */ - function output() - { - echo $this->fetch(); - } -} diff --git a/html/forums/admin/inc/class_table.php b/html/forums/admin/inc/class_table.php deleted file mode 100644 index ff33251..0000000 --- a/html/forums/admin/inc/class_table.php +++ /dev/null @@ -1,291 +0,0 @@ -_cells[] = array("data" => $data, "extra" => $extra); - } - - /** - * Construct a row from the earlier defined constructed cells for the table. - * - * @param array $extra Array of extra information about this row (class, id) - */ - function construct_row($extra = array()) - { - $i = 1; - $cells = ''; - - // We construct individual cells here - foreach($this->_cells as $key => $cell) - { - $cells .= "\t\t\t_cells[$key+1])) - { - $cell['extra']['class'] .= " last"; - } - if($i == 2) - { - $cell['extra']['class'] .= " alt_col"; - $i = 0; - } - $i++; - if($cell['extra']['class']) - { - $cells .= " class=\"".trim($cell['extra']['class'])."\""; - } - if(isset($cell['extra']['style'])) - { - $cells .= " style=\"".$cell['extra']['style']."\""; - } - if(isset($cell['extra']['id'])) - { - $cells .= " id=\"".$cell['extra']['id']."\""; - } - if(isset($cell['extra']['colspan']) && $cell['extra']['colspan'] > 1) - { - $cells .= " colspan=\"".$cell['extra']['colspan']."\""; - } - if(isset($cell['extra']['rowspan']) && $cell['extra']['rowspan'] > 1) - { - $cells .= " rowspan=\"".$cell['extra']['rowspan']."\""; - } - if(isset($cell['extra']['width'])) - { - $cells .= " width=\"".$cell['extra']['width']."\""; - } - $cells .= ">"; - $cells .= $cell['data']; - $cells .= "\n"; - } - $data['cells'] = $cells; - $data['extra'] = $extra; - $this->_rows[] = $data; - - $this->_cells = array(); - } - - /** - * return the cells of a row for the table based row. - * - * @param string $row_id The id of the row you want to give it. - * @param boolean $return Whether or not to return or echo the resultant contents. - * @return string The output of the row cells (optional). - */ - function output_row_cells($row_id, $return=false) - { - $row = $this->_rows[$row_id]['cells']; - - if(!$return) - { - echo $row; - } - else - { - return $row; - } - } - - /** - * Count the number of rows in the table. Useful for displaying a 'no rows' message. - * - * @return int The number of rows in the table. - */ - function num_rows() - { - return count($this->_rows); - } - - /** - * Construct a header cell for this table. - * - * @param string $data The HTML content for this header cell. - * @param array $extra Array of extra information for this header cell (class, style, colspan, width) - */ - function construct_header($data, $extra=array()) - { - $this->_headers[] = array("data" => $data, "extra" => $extra); - } - - /** - * Output this table to the browser. - * - * @param string $heading The heading for this table. - * @param int $border The border width for this table. - * @param string $class The class for this table. - * @param boolean $return Whether or not to return or echo the resultant contents. - * @return string The output of the row cells (optional). - */ - function output($heading="", $border=1, $class="general", $return=false) - { - if($return == true) - { - return $this->construct_html($heading, $border, $class); - } - else - { - echo $this->construct_html($heading, $border, $class); - } - } - - /** - * Fetch the built HTML for this table. - * - * @param string $heading The heading for this table. - * @param int $border The border width for this table. - * @param string $class The class for this table. - * @param string $table_id The id for this table. - * @return string The built HTML. - */ - function construct_html($heading="", $border=1, $class=null, $table_id="") - { - $table = ''; - if($border == 1) - { - $table .= "
\n"; - if($heading != "") - { - $table .= "
".$heading."
\n"; - } - } - $table .= "\n"; - if($this->_headers) - { - $table .= "\t\n"; - $table .= "\t\t\n"; - foreach($this->_headers as $key => $data) - { - $table .= "\t\t\t_headers[$key+1])) - { - $data['extra']['class'] .= " last"; - } - if(isset($data['extra']['class'])) - { - $table .= " class=\"".$data['extra']['class']."\""; - } - if(isset($data['extra']['style'])) - { - $table .= " style=\"".$data['extra']['style']."\""; - } - if(isset($data['extra']['width'])) - { - $table .= " width=\"".$data['extra']['width']."\""; - } - if(isset($data['extra']['colspan']) && $data['extra']['colspan'] > 1) - { - $table .= " colspan=\"".$data['extra']['colspan']."\""; - } - $table .= ">".$data['data']."\n"; - } - $table .= "\t\t\n"; - $table .= "\t\n"; - } - $table .= "\t\n"; - $i = 1; - foreach($this->_rows as $key => $table_row) - { - $table .= "\t\t_rows[$key+1])) - { - $table_row['extra']['class'] .= " last"; - } - if($i == 2 && !isset($table_row['extra']['no_alt_row'])) - { - $table_row['extra']['class'] .= " alt_row"; - $i = 0; - } - $i++; - if($table_row['extra']['class']) - { - $table .= " class=\"".trim($table_row['extra']['class'])."\""; - } - $table .= ">\n"; - $table .= $table_row['cells']; - $table .= "\t\t\n"; - } - $table .= "\t\n"; - $table .= "\n"; - // Clean up - $this->_cells = $this->_rows = $this->_headers = array(); - if($border == 1) - { - $table .= "
"; - } - return $table; - } -} diff --git a/html/forums/admin/inc/functions.php b/html/forums/admin/inc/functions.php deleted file mode 100644 index 295c3e0..0000000 --- a/html/forums/admin/inc/functions.php +++ /dev/null @@ -1,803 +0,0 @@ - (int)$mybb->user['uid'], - "ipaddress" => $db->escape_binary(my_inet_pton(get_ip())), - "dateline" => TIME_NOW, - "module" => $db->escape_string($mybb->get_input('module')), - "action" => $db->escape_string($mybb->get_input('action')), - "data" => $db->escape_string(@my_serialize($data)) - ); - - $db->insert_query("adminlog", $log_entry); -} - -/** - * Redirects the current user to a specified URL. - * - * @param string $url The URL to redirect to - */ -function admin_redirect($url) -{ - if(!headers_sent()) - { - $url = str_replace("&", "&", $url); - header("Location: $url"); - } - else - { - echo ""; - } - exit; -} - -/** - * Updates an administration session data array. - * - * @param string $name The name of the item in the data session to update - * @param mixed $value The value - */ -function update_admin_session($name, $value) -{ - global $db, $admin_session; - - $admin_session['data'][$name] = $value; - $updated_session = array( - "data" => $db->escape_string(@my_serialize($admin_session['data'])) - ); - $db->update_query("adminsessions", $updated_session, "sid='{$admin_session['sid']}'"); -} - -/** - * Saves a "flash message" for the current user to be shown on their next page visit. - * - * @param string $message The message to show - * @param string $type The type of message to be shown (success|error) - */ -function flash_message($message, $type='') -{ - $flash = array('message' => $message, 'type' => $type); - update_admin_session('flash_message', $flash); -} - -/** - * Draw pagination for pages in the Admin CP. - * - * @param int $page The current page we're on - * @param int $per_page The number of items per page - * @param int $total_items The total number of items in this collection - * @param string $url The URL for pagination of this collection - * @return string The built pagination - */ -function draw_admin_pagination($page, $per_page, $total_items, $url) -{ - global $mybb, $lang; - - if($total_items <= $per_page) - { - return ''; - } - - $pages = ceil($total_items / $per_page); - - $pagination = "
{$lang->pages}: \n"; - - if($page > 1) - { - $prev = $page-1; - $prev_page = fetch_page_url($url, $prev); - $pagination .= "« {$lang->previous} \n"; - } - - // Maximum number of "page bits" to show - if(!$mybb->settings['maxmultipagelinks']) - { - $mybb->settings['maxmultipagelinks'] = 5; - } - - $max_links = $mybb->settings['maxmultipagelinks']; - - $from = $page-floor($mybb->settings['maxmultipagelinks']/2); - $to = $page+floor($mybb->settings['maxmultipagelinks']/2); - - if($from <= 0) - { - $from = 1; - $to = $from+$max_links-1; - } - - if($to > $pages) - { - $to = $pages; - $from = $pages-$max_links+1; - if($from <= 0) - { - $from = 1; - } - } - - if($to == 0) - { - $to = $pages; - } - - if($from > 2) - { - $first = fetch_page_url($url, 1); - $pagination .= "page} 1\" class=\"pagination_first\">1 ... "; - } - - for($i = $from; $i <= $to; ++$i) - { - $page_url = fetch_page_url($url, $i); - if($page == $i) - { - $pagination .= "{$i} \n"; - } - else - { - $pagination .= "page} {$i}\">{$i} \n"; - } - } - - if($to < $pages) - { - $last = fetch_page_url($url, $pages); - $pagination .= "... page} {$pages}\" class=\"pagination_last\">{$pages}"; - } - - if($page < $pages) - { - $next = $page+1; - $next_page = fetch_page_url($url, $next); - $pagination .= " {$lang->next} »\n"; - } - $pagination .= "
\n"; - return $pagination; -} - -/** - * Builds a CSV parent list for a particular forum. - * - * @param int $fid The forum ID - * @param string $navsep Optional separator - defaults to comma for CSV list - * @return string The built parent list - */ -function make_parent_list($fid, $navsep=",") -{ - global $pforumcache, $db; - - if(!$pforumcache) - { - $query = $db->simple_select("forums", "name, fid, pid", "", array("order_by" => "disporder, pid")); - while($forum = $db->fetch_array($query)) - { - $pforumcache[$forum['fid']][$forum['pid']] = $forum; - } - } - - reset($pforumcache); - reset($pforumcache[$fid]); - - foreach($pforumcache[$fid] as $key => $forum) - { - if($fid == $forum['fid']) - { - if($pforumcache[$forum['pid']]) - { - $navigation = make_parent_list($forum['pid'], $navsep).$navigation; - } - - if($navigation) - { - $navigation .= $navsep; - } - $navigation .= $forum['fid']; - } - } - return $navigation; -} - -/** - * @param int $fid - */ -function save_quick_perms($fid) -{ - global $db, $inherit, $canview, $canpostthreads, $canpostreplies, $canpostpolls, $canpostattachments, $cache; - - $permission_fields = array(); - - $field_list = $db->show_fields_from("forumpermissions"); - foreach($field_list as $field) - { - if(strpos($field['Field'], 'can') !== false || strpos($field['Field'], 'mod') !== false) - { - $permission_fields[$field['Field']] = 1; - } - } - - // "Can Only View Own Threads" and "Can Only Reply Own Threads" permissions are forum permission only options - $usergroup_permission_fields = $permission_fields; - unset($usergroup_permission_fields['canonlyviewownthreads']); - unset($usergroup_permission_fields['canonlyreplyownthreads']); - - $query = $db->simple_select("usergroups", "gid"); - while($usergroup = $db->fetch_array($query)) - { - $query2 = $db->simple_select("forumpermissions", $db->escape_string(implode(',', array_keys($permission_fields))), "fid='{$fid}' AND gid='{$usergroup['gid']}'", array('limit' => 1)); - $existing_permissions = $db->fetch_array($query2); - - if(!$existing_permissions) - { - $query2 = $db->simple_select("usergroups", $db->escape_string(implode(',', array_keys($usergroup_permission_fields))), "gid='{$usergroup['gid']}'", array('limit' => 1)); - $existing_permissions = $db->fetch_array($query2); - } - - // Delete existing permissions - $db->delete_query("forumpermissions", "fid='{$fid}' AND gid='{$usergroup['gid']}'"); - - // Only insert the new ones if we're using custom permissions - if($inherit[$usergroup['gid']] != 1) - { - if($canview[$usergroup['gid']] == 1) - { - $pview = 1; - } - else - { - $pview = 0; - } - - if($canpostthreads[$usergroup['gid']] == 1) - { - $pthreads = 1; - } - else - { - $pthreads = 0; - } - - if($canpostreplies[$usergroup['gid']] == 1) - { - $preplies = 1; - } - else - { - $preplies = 0; - } - - if($canpostpolls[$usergroup['gid']] == 1) - { - $ppolls = 1; - } - else - { - $ppolls = 0; - } - - if(!$preplies && !$pthreads) - { - $ppost = 0; - } - else - { - $ppost = 1; - } - - $insertquery = array( - "fid" => (int)$fid, - "gid" => (int)$usergroup['gid'], - "canview" => (int)$pview, - "canpostthreads" => (int)$pthreads, - "canpostreplys" => (int)$preplies, - "canpostpolls" => (int)$ppolls, - ); - - foreach($permission_fields as $field => $value) - { - if(array_key_exists($field, $insertquery)) - { - continue; - } - - $insertquery[$db->escape_string($field)] = (int)$existing_permissions[$field]; - } - - $db->insert_query("forumpermissions", $insertquery); - } - } - $cache->update_forumpermissions(); -} - -/** - * Checks if a particular user has the necessary permissions to access a particular page. - * - * @param array $action Array containing module and action to check for - * @param bool $error - * @return bool - */ -function check_admin_permissions($action, $error = true) -{ - global $mybb, $page, $lang, $modules_dir; - - if(is_super_admin($mybb->user['uid'])) - { - return true; - } - - require_once $modules_dir."/".$action['module']."/module_meta.php"; - if(function_exists($action['module']."_admin_permissions")) - { - $func = $action['module']."_admin_permissions"; - $permissions = $func(); - if($permissions['permissions'][$action['action']] && $mybb->admin['permissions'][$action['module']][$action['action']] != 1) - { - if($error) - { - $page->output_header($lang->access_denied); - $page->add_breadcrumb_item($lang->access_denied, "index.php?module=home-index"); - $page->output_error("{$lang->access_denied}
  • {$lang->access_denied_desc}
"); - $page->output_footer(); - exit; - } - else - { - return false; - } - } - } - - return true; -} - -/** - * Fetches the list of administrator permissions for a particular user or group - * - * @param int $get_uid The user ID to fetch permissions for - * @param int $get_gid The (optional) group ID to fetch permissions for - * @return array Array of permissions for specified user or group - */ -function get_admin_permissions($get_uid=0, $get_gid=0) -{ - global $db, $mybb; - - // Set UID and GID if none - $uid = $get_uid; - $gid = $get_gid; - - $gid_array = array(); - - if($uid === 0) - { - $uid = $mybb->user['uid']; - } - - if(!$gid) - { - // Prepare user's groups since the group isn't specified - $gid_array[] = (-1) * (int)$mybb->user['usergroup']; - - if($mybb->user['additionalgroups']) - { - $additional_groups = explode(',', $mybb->user['additionalgroups']); - - if(!empty($additional_groups)) - { - // Make sure gids are negative - foreach($additional_groups as $g) - { - $gid_array[] = (-1) * abs($g); - } - } - } - } - else - { - // Group is specified - // Make sure gid is negative - $gid_array[] = (-1) * abs($gid); - } - - // What are we trying to find? - if($get_gid && !$get_uid) - { - // A group only - - $options = array( - "order_by" => "uid", - "order_dir" => "ASC", - "limit" => "1" - ); - $query = $db->simple_select("adminoptions", "permissions", "(uid='-{$get_gid}' OR uid='0') AND permissions != ''", $options); - return my_unserialize($db->fetch_field($query, "permissions")); - } - else - { - // A user and/or group - - $options = array( - "order_by" => "uid", - "order_dir" => "DESC" - ); - - // Prepare user's groups into SQL format - $group_sql = ''; - foreach($gid_array as $gid) - { - $group_sql .= " OR uid='{$gid}'"; - } - - $perms_group = array(); - $query = $db->simple_select("adminoptions", "permissions, uid", "(uid='{$uid}'{$group_sql}) AND permissions != ''", $options); - while($perm = $db->fetch_array($query)) - { - $perm['permissions'] = my_unserialize($perm['permissions']); - - // Sorting out which permission is which - if($perm['uid'] > 0) - { - $perms_user = $perm; - return $perms_user['permissions']; - } - elseif($perm['uid'] < 0) - { - $perms_group[] = $perm['permissions']; - } - else - { - $perms_def = $perm['permissions']; - } - } - - // Figure out group permissions...ugh. - foreach($perms_group as $gperms) - { - if(!isset($final_group_perms)) - { - // Use this group as the base for admin group permissions - $final_group_perms = $gperms; - continue; - } - - // Loop through each specific permission to find the highest permission - foreach($gperms as $perm_name => $perm_value) - { - if($final_group_perms[$perm_name] != '1' && $perm_value == '1') - { - $final_group_perms[$perm_name] = '1'; - } - } - } - - // Send specific user, or group permissions before default. - // If user's permission are explicitly set, they've already been returned above. - if(isset($final_group_perms)) - { - return $final_group_perms; - } - else - { - return $perms_def; - } - } -} - -/** - * Fetch the iconv/mb encoding for a particular MySQL encoding - * - * @param string $mysql_encoding The MySQL encoding - * @return string The iconv/mb encoding - */ -function fetch_iconv_encoding($mysql_encoding) -{ - $mysql_encoding = explode("_", $mysql_encoding); - switch($mysql_encoding[0]) - { - case "utf8": - return "utf-8"; - break; - case "latin1": - return "iso-8859-1"; - break; - default: - return $mysql_encoding[0]; - } -} - -/** - * Adds/Updates a Page/Tab to the permissions array in the adminoptions table - * - * @param string $tab The name of the tab that is being affected - * @param string $page The name of the page being affected (optional - if not specified, will affect everything under the specified tab) - * @param integer $default Default permissions for the page (1 for allowed - 0 for disallowed - -1 to remove) - */ -function change_admin_permission($tab, $page="", $default=1) -{ - global $db; - - $query = $db->simple_select("adminoptions", "uid, permissions", "permissions != ''"); - while($adminoption = $db->fetch_array($query)) - { - $adminoption['permissions'] = my_unserialize($adminoption['permissions']); - - if($default == -1) - { - if(!empty($page)) - { - unset($adminoption['permissions'][$tab][$page]); - } - else - { - unset($adminoption['permissions'][$tab]); - } - } - else - { - if(!empty($page)) - { - if($adminoption['uid'] == 0) - { - $adminoption['permissions'][$tab][$page] = 0; - } - else - { - $adminoption['permissions'][$tab][$page] = $default; - } - } - else - { - if($adminoption['uid'] == 0) - { - $adminoption['permissions'][$tab]['tab'] = 0; - } - else - { - $adminoption['permissions'][$tab]['tab'] = $default; - } - } - } - - $db->update_query("adminoptions", array('permissions' => $db->escape_string(my_serialize($adminoption['permissions']))), "uid='{$adminoption['uid']}'"); - } -} - -/** - * Checks if we have had too many attempts at logging into the ACP - * - * @param integer $uid The uid of the admin to check - * @param boolean $return_num Return an array of the number of attempts and expiry time? (default false) - * @return mixed Return an array if the second parameter is true, boolean otherwise. - */ -function login_attempt_check_acp($uid=0, $return_num=false) -{ - global $db, $mybb; - - $attempts['loginattempts'] = 0; - - if($uid > 0) - { - $query = $db->simple_select("adminoptions", "loginattempts, loginlockoutexpiry", "uid='".(int)$uid."'", 1); - $attempts = $db->fetch_array($query); - } - - if($attempts['loginattempts'] <= 0) - { - return false; - } - - if($mybb->settings['maxloginattempts'] > 0 && $attempts['loginattempts'] >= $mybb->settings['maxloginattempts']) - { - // Has the expiry dateline been set yet? - if($attempts['loginlockoutexpiry'] == 0 && $return_num == false) - { - $db->update_query("adminoptions", array("loginlockoutexpiry" => TIME_NOW+((int)$mybb->settings['loginattemptstimeout']*60)), "uid='".(int)$uid."'"); - } - - // Are we returning the # of login attempts? - if($return_num == true) - { - return $attempts; - } - // Otherwise are we still locked out? - else if($attempts['loginlockoutexpiry'] > TIME_NOW) - { - return true; - } - } - - return false; -} - -/** - * Checks whether the administrator is on a mobile device - * - * @param string $useragent The useragent to be checked - * @return boolean A true/false depending on if the administrator is on a mobile - */ -function is_mobile($useragent) -{ - return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $useragent); -} - -/** - * Checks whether there are any 'security' issues in templates via complex syntax - * - * @param string $template The template to be scanned - * @return boolean A true/false depending on if an issue was detected - */ -function check_template($template) -{ - // Check to see if our database password is in the template - if(preg_match('#\$config\[(([\'|"]database[\'|"])|([^\'"].*?))\]\[(([\'|"](database|hostname|password|table_prefix|username)[\'|"])|([^\'"].*?))\]#i', $template)) - { - return true; - } - - // System calls via backtick - if(preg_match('#\$\s*\{#', $template)) - { - return true; - } - - // Any other malicious acts? - // Courtesy of ZiNgA BuRgA - if(preg_match("~\\{\\$.+?\\}~s", preg_replace('~\\{\\$+[a-zA-Z_][a-zA-Z_0-9]*((?:-\\>|\\:\\:)\\$*[a-zA-Z_][a-zA-Z_0-9]*|\\[\s*\\$*([\'"]?)[a-zA-Z_ 0-9 ]+\\2\\]\s*)*\\}~', '', $template))) - { - return true; - } - - return false; -} - -/** - * Provides a function to entirely delete a user's posts, and find the threads attached to them - * - * @param integer $uid The uid of the user - * @param int $date A UNIX timestamp to delete posts that are older - * @return array An array of threads to delete, threads/forums to recount - */ -function delete_user_posts($uid, $date) -{ - global $db; - $uid = (int)$uid; - - // Build an array of posts to delete - $postcache = array(); - $query = $db->simple_select("posts", "pid", "uid = '".$uid."' AND dateline < '".$date."'"); - while($post = $db->fetch_array($query)) - { - $postcache[] = $post['pid']; - } - - if(!$db->num_rows($query)) - { - return false; - } - elseif(!empty($postcache)) - { - // Let's start deleting posts - $user_posts = implode(",", $postcache); - $query = $db->query(" - SELECT p.pid, p.visible, f.usepostcounts, t.tid AS thread, t.firstpost, t.fid AS forum - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=p.fid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ({$user_posts}) - "); - - $post_count = 0; // Collect the post number to deduct from the user's postcount - $thread_list = array(); - $forum_list = array(); - $delete_thread_list = array(); - if(!$db->num_rows($query)) - { - return false; - } - else - { - while($post = $db->fetch_array($query)) - { - if($post['usepostcounts'] != 0 && $post['visible'] != 0) - { - ++$post_count; - } - - if($post['pid'] == $post['firstpost']) - { - $delete_thread_list[] = $post['thread']; - } - - if(!in_array($post['thread'], $thread_list) && !in_array($post['thread'], $delete_thread_list)) - { - $thread_list[] = $post['thread']; // Threads that have been affected by this action, that aren't marked to be deleted - } - if(!in_array($post['forum'], $forum_list)) - { - $forum_list[] = $post['forum']; // Forums that have been affected, too - } - - // Remove the attachments to this post, then delete the post - remove_attachments($post['pid']); - $db->delete_query("posts", "pid = '".$post['pid']."'"); - $db->delete_query("pollvotes", "pid = '".$post['pid']."'"); // Delete pollvotes attached to this post - } - - $db->update_query("users", array("postnum" => "postnum-".$post_count.""), "uid='".$uid."'", 1, true); - - $to_return = array( - 'to_delete' => $delete_thread_list, - 'thread_update' => $thread_list, - 'forum_update' => $forum_list - ); - - return $to_return; - } - } -} - -/** - * Prints a selection JavaScript code for selectable groups/forums fields. - */ -function print_selection_javascript() -{ - static $already_printed = false; - - if($already_printed) - { - return; - } - - $already_printed = true; - - echo ""; -} diff --git a/html/forums/admin/inc/functions_themes.php b/html/forums/admin/inc/functions_themes.php deleted file mode 100644 index ea2a27f..0000000 --- a/html/forums/admin/inc/functions_themes.php +++ /dev/null @@ -1,1602 +0,0 @@ -get_tree(); - - if(!is_array($tree) || !is_array($tree['theme'])) - { - return -1; - } - - $theme = $tree['theme']; - - // Do we have MyBB 1.2 template's we're importing? - $css_120 = ""; - - if(isset($theme['cssbits']) && is_array($theme['cssbits'])) - { - $cssbits = kill_tags($theme['cssbits']); - - foreach($cssbits as $name => $values) - { - $css_120 .= "{$name} {\n"; - foreach($values as $property => $value) - { - if(is_array($value)) - { - $property = str_replace('_', ':', $property); - - $css_120 .= "}\n{$name} {$property} {\n"; - foreach($value as $property2 => $value2) - { - $css_120 .= "\t{$property2}: {$value2}\n"; - } - } - else - { - $css_120 .= "\t{$property}: {$value}\n"; - } - } - $css_120 .= "}\n"; - } - } - - if(isset($theme['themebits']) && is_array($theme['themebits'])) - { - $themebits = kill_tags($theme['themebits']); - - $theme['properties']['tag'] = 'properties'; - - foreach($themebits as $name => $value) - { - if($name == "extracss") - { - $css_120 .= $value; - continue; - } - - $theme['properties'][$name] = $value; - } - } - - if($css_120) - { - $css_120 = upgrade_css_120_to_140($css_120); - $theme['stylesheets']['tag'] = 'stylesheets'; - $theme['stylesheets']['stylesheet'][0]['tag'] = 'stylesheet'; - $theme['stylesheets']['stylesheet'][0]['attributes'] = array('name' => 'global.css', 'version' => $mybb->version_code); - $theme['stylesheets']['stylesheet'][0]['value'] = $css_120; - - unset($theme['cssbits']); - unset($theme['themebits']); - } - - if(is_array($theme['properties'])) - { - foreach($theme['properties'] as $property => $value) - { - if($property == "tag" || $property == "value") - { - continue; - } - - if($property == 'colors' || $property == 'disporder') - { - $data = my_unserialize($value['value']); - - if(!is_array($data)) - { - // Bad data? - continue; - } - - $value['value'] = $data; - } - - $properties[$property] = $value['value']; - } - } - - if(empty($mybb->input['name'])) - { - $name = $theme['attributes']['name']; - } - else - { - $name = $mybb->input['name']; - } - $version = $theme['attributes']['version']; - - $query = $db->simple_select("themes", "tid", "name='".$db->escape_string($name)."'", array("limit" => 1)); - $existingtheme = $db->fetch_array($query); - if(!empty($options['force_name_check']) && $existingtheme['tid']) - { - return -3; - } - else if($existingtheme['tid']) - { - $options['tid'] = $existingtheme['tid']; - } - - if($mybb->version_code != $version && $options['version_compat'] != 1) - { - return -2; - } - - // Do we have any templates to insert? - if(!empty($theme['templates']['template']) && empty($options['no_templates'])) - { - if($options['templateset']) - { - $sid = $options['templateset']; - } - else - { - $sid = $db->insert_query("templatesets", array('title' => $db->escape_string($name)." Templates")); - } - - $templates = $theme['templates']['template']; - if(is_array($templates)) - { - // Theme only has one custom template - if(array_key_exists("attributes", $templates)) - { - $templates = array($templates); - } - } - - $security_check = false; - $templatecache = array(); - foreach($templates as $template) - { - if(check_template($template['value'])) - { - $security_check = true; - break; - } - - $templatecache[] = array( - "title" => $db->escape_string($template['attributes']['name']), - "template" => $db->escape_string($template['value']), - "sid" => $db->escape_string($sid), - "version" => $db->escape_string($template['attributes']['version']), - "dateline" => TIME_NOW - ); - } - - if($security_check == true) - { - return -4; - } - - foreach($templatecache as $template) - { - // PostgreSQL causes apache to stop sending content sometimes and - // causes the page to stop loading during many queries all at one time - if($db->engine == "pgsql") - { - echo " "; - flush(); - } - - $db->insert_query("templates", $template); - } - - $properties['templateset'] = $sid; - } - - // Not overriding an existing theme - if(empty($options['tid'])) - { - // Insert the theme - if(!isset($options['parent'])) - { - $options['parent'] = 0; - } - $theme_id = build_new_theme($name, $properties, $options['parent']); - } - // Overriding an existing - delete refs. - else - { - $db->delete_query("themestylesheets", "tid='{$options['tid']}'"); - $db->update_query("themes", array("properties" => $db->escape_string(my_serialize($properties))), "tid='{$options['tid']}'"); - $theme_id = $options['tid']; - } - - // If we have any stylesheets, process them - if(!empty($theme['stylesheets']['stylesheet']) && empty($options['no_stylesheets'])) - { - // Are we dealing with a single stylesheet? - if(isset($theme['stylesheets']['stylesheet']['tag'])) - { - // Trick the system into thinking we have a good array =P - $theme['stylesheets']['stylesheet'] = array($theme['stylesheets']['stylesheet']); - } - - // Retrieve a list of inherited stylesheets - $query = $db->simple_select("themes", "stylesheets", "tid = '{$theme_id}'"); - if($db->num_rows($query)) - { - $inherited_stylesheets = my_unserialize($db->fetch_field($query, "stylesheets")); - - if(is_array($inherited_stylesheets['inherited'])) - { - $loop = 1; - foreach($inherited_stylesheets['inherited'] as $action => $stylesheets) - { - foreach($stylesheets as $filename => $stylesheet) - { - if($properties['disporder'][basename($filename)]) - { - continue; - } - - $properties['disporder'][basename($filename)] = $loop; - ++$loop; - } - } - } - } - - $loop = 1; - foreach($theme['stylesheets']['stylesheet'] as $stylesheet) - { - if(substr($stylesheet['attributes']['name'], -4) != ".css") - { - continue; - } - - if(empty($stylesheet['attributes']['lastmodified'])) - { - $stylesheet['attributes']['lastmodified'] = TIME_NOW; - } - - if(empty($stylesheet['attributes']['disporder'])) - { - $stylesheet['attributes']['disporder'] = $loop; - } - - if(empty($stylesheet['attributes']['attachedto'])) - { - $stylesheet['attributes']['attachedto'] = ''; - } - - $properties['disporder'][$stylesheet['attributes']['name']] = $stylesheet['attributes']['disporder']; - - $new_stylesheet = array( - "name" => $db->escape_string($stylesheet['attributes']['name']), - "tid" => $theme_id, - "attachedto" => $db->escape_string($stylesheet['attributes']['attachedto']), - "stylesheet" => $db->escape_string($stylesheet['value']), - "lastmodified" => (int)$stylesheet['attributes']['lastmodified'], - "cachefile" => $db->escape_string($stylesheet['attributes']['name']) - ); - $sid = $db->insert_query("themestylesheets", $new_stylesheet); - $css_url = "css.php?stylesheet={$sid}"; - $cached = cache_stylesheet($theme_id, $stylesheet['attributes']['name'], $stylesheet['value']); - if($cached) - { - $css_url = $cached; - } - - $attachedto = $stylesheet['attributes']['attachedto']; - if(!$attachedto) - { - $attachedto = "global"; - } - - // private.php?compose,folders|usercp.php,global|global - $attachedto = explode("|", $attachedto); - foreach($attachedto as $attached_file) - { - $attached_actions = explode(",", $attached_file); - $attached_file = array_shift($attached_actions); - if(count($attached_actions) == 0) - { - $attached_actions = array("global"); - } - - foreach($attached_actions as $action) - { - $theme_stylesheets[$attached_file][$action][] = $css_url; - } - } - - ++$loop; - } - // Now we have our list of built stylesheets, save them - $updated_theme = array( - "stylesheets" => $db->escape_string(my_serialize($theme_stylesheets)) - ); - - if(is_array($properties['disporder'])) - { - asort($properties['disporder'], SORT_NUMERIC); - - // Because inherited stylesheets can mess this up - $loop = 1; - $orders = array(); - foreach($properties['disporder'] as $filename => $order) - { - $orders[$filename] = $loop; - ++$loop; - } - - $properties['disporder'] = $orders; - $updated_theme['properties'] = $db->escape_string(my_serialize($properties)); - } - - $db->update_query("themes", $updated_theme, "tid='{$theme_id}'"); - } - - update_theme_stylesheet_list($theme_id); - - // And done? - return $theme_id; -} - -/** - * Parse theme variables in a specific string. - * - * @param string $string The string to parse variables for - * @param array $variables Array of variables - * @return string Parsed string with variables replaced - */ -function parse_theme_variables($string, $variables=array()) -{ - $find = array(); - $replace = array(); - foreach(array_keys($variables) as $variable) - { - $find[] = "{{$variable}}"; - $replace[] = $variables[$variable]; - } - return str_replace($find, $replace, $string); -} - -/** - * Caches a stylesheet to the file system. - * - * @param string $tid The theme ID this stylesheet belongs to. - * @param string $filename The name of the stylesheet. - * @param string $stylesheet The contents of the stylesheet. - * - * @return string The cache file path. - */ -function cache_stylesheet($tid, $filename, $stylesheet) -{ - global $mybb; - - $filename = basename($filename); - $tid = (int) $tid; - $theme_directory = "cache/themes/theme{$tid}"; - - // If we're in safe mode save to the main theme folder by default - if($mybb->safemode) - { - $theme_directory = "cache/themes"; - $filename = $tid."_".$filename; - } - // Does our theme directory exist? Try and create it. - elseif(!is_dir(MYBB_ROOT . $theme_directory)) - { - if(!@mkdir(MYBB_ROOT . $theme_directory)) - { - $theme_directory = "cache/themes"; - $filename = $tid."_".$filename; - } - else - { - // Add in empty index.html! - $fp = @fopen(MYBB_ROOT . $theme_directory."/index.html", "w"); - @fwrite($fp, ""); - @fclose($fp); - - } - } - - $theme_vars = array( - "theme" => $theme_directory - ); - $stylesheet = parse_theme_variables($stylesheet, $theme_vars); - $stylesheet = preg_replace_callback("#url\((\"|'|)(.*)\\1\)#", create_function('$matches', 'return fix_css_urls($matches[2]);'), $stylesheet); - - $fp = @fopen(MYBB_ROOT . "{$theme_directory}/{$filename}", "wb"); - if(!$fp) - { - return false; - } - - @fwrite($fp, $stylesheet); - @fclose($fp); - - $stylesheet_min = minify_stylesheet($stylesheet); - $filename_min = str_replace('.css', '.min.css', $filename); - $fp_min = @fopen(MYBB_ROOT . "{$theme_directory}/{$filename_min}", "wb"); - if(!$fp_min) - { - return false; - } - @fwrite($fp_min, $stylesheet_min); - @fclose($fp_min); - - copy_file_to_cdn(MYBB_ROOT . "{$theme_directory}/{$filename}"); - copy_file_to_cdn(MYBB_ROOT . "{$theme_directory}/{$filename_min}"); - - return "{$theme_directory}/{$filename}"; -} - -/** - * Minify a stylesheet to remove comments, linebreaks, whitespace, - * unnecessary semicolons, and prefers #rgb over #rrggbb. - * - * @param $stylesheet string The stylesheet in it's untouched form. - * @return string The minified stylesheet - */ -function minify_stylesheet($stylesheet) -{ - // Remove comments. - $stylesheet = preg_replace('@/\*.*?\*/@s', '', $stylesheet); - // Remove whitespace around symbols. - $stylesheet = preg_replace('@\s*([{}:;,])\s*@', '\1', $stylesheet); - // Remove unnecessary semicolons. - $stylesheet = preg_replace('@;}@', '}', $stylesheet); - // Replace #rrggbb with #rgb when possible. - $stylesheet = preg_replace('@#([a-f0-9])\1([a-f0-9])\2([a-f0-9])\3@i','#\1\2\3',$stylesheet); - $stylesheet = trim($stylesheet); - return $stylesheet; -} - -/** - * @param array $stylesheet - * - * @return bool - */ -function resync_stylesheet($stylesheet) -{ - global $db; - - // Try and fix any missing cache file names - if(!$stylesheet['cachefile'] && $stylesheet['name']) - { - $stylesheet['cachefile'] = $stylesheet['name']; - $db->update_query("themestylesheets", array('cachefile' => $db->escape_string($stylesheet['name'])), "sid='{$stylesheet['sid']}'"); - } - - // Still don't have the cache file name or is it not a flat file? Return false - if(!$stylesheet['cachefile'] || strpos($stylesheet['cachefile'], 'css.php') !== false) - { - return false; - } - - if(!file_exists(MYBB_ROOT."cache/themes/theme{$stylesheet['tid']}/{$stylesheet['name']}") && !file_exists(MYBB_ROOT."cache/themes/{$stylesheet['tid']}_{$stylesheet['name']}")) - { - if(cache_stylesheet($stylesheet['tid'], $stylesheet['cachefile'], $stylesheet['stylesheet']) !== false) - { - $db->update_query("themestylesheets", array('cachefile' => $db->escape_string($stylesheet['name'])), "sid='{$stylesheet['sid']}'"); - - update_theme_stylesheet_list($stylesheet['tid']); - - if($stylesheet['sid'] != 1) - { - $db->update_query("themestylesheets", array('lastmodified' => TIME_NOW), "sid='{$stylesheet['sid']}'"); - } - } - - return true; - } - - return false; -} - -/** - * @param string $url - * - * @return string - */ -function fix_css_urls($url) -{ - if(!preg_match("#^([a-z0-9]+\:|/)#i", $url) && strpos($url, "../../../") === false) - { - return "url(../../../{$url})"; - } - else - { - return "url({$url})"; - } -} - -/** - * @param string $url - * - * @return string - */ -function unfix_css_urls($url) -{ - return str_replace("../../../", "", $url); -} - -/** - * Build a theme based on the specified parameters. - * - * @param string $name The name of the theme - * @param array $properties Array of theme properties (if blank, inherits from parent) - * @param int $parent The parent ID for this theme (defaults to Master) - * @return int The new theme ID - */ -function build_new_theme($name, $properties=null, $parent=1) -{ - global $db; - - $new_theme = array( - "name" => $db->escape_string($name), - "pid" => (int)$parent, - "def" => 0, - "allowedgroups" => "all", - "properties" => "", - "stylesheets" => "" - ); - $tid = $db->insert_query("themes", $new_theme); - - $inherited_properties = false; - $stylesheets = array(); - if($parent > 0) - { - $query = $db->simple_select("themes", "*", "tid='".(int)$parent."'"); - $parent_theme = $db->fetch_array($query); - if(count($properties) == 0 || !is_array($properties)) - { - $parent_properties = my_unserialize($parent_theme['properties']); - if(!empty($parent_properties)) - { - foreach($parent_properties as $property => $value) - { - if($property == "inherited") - { - continue; - } - - $properties[$property] = $value; - if(!empty($parent_properties['inherited'][$property])) - { - $properties['inherited'][$property] = $parent_properties['inherited'][$property]; - } - else - { - $properties['inherited'][$property] = $parent; - } - } - $inherited_properties = true; - } - } - - $parent_stylesheets = my_unserialize($parent_theme['stylesheets']); - if(!empty($parent_stylesheets)) - { - foreach($parent_stylesheets as $location => $value) - { - if($location == "inherited") - { - continue; - } - - foreach($value as $action => $sheets) - { - foreach($sheets as $stylesheet) - { - $stylesheets[$location][$action][] = $stylesheet; - $inherited_check = "{$location}_{$action}"; - if(!empty($parent_stylesheets['inherited'][$inherited_check][$stylesheet])) - { - $stylesheets['inherited'][$inherited_check][$stylesheet] = $parent_stylesheets['inherited'][$inherited_check][$stylesheet]; - } - else - { - $stylesheets['inherited'][$inherited_check][$stylesheet] = $parent; - } - } - } - } - } - } - - if(!$inherited_properties) - { - $theme_vars = array( - "theme" => "cache/themes/theme{$tid}" - ); - $properties['logo'] = parse_theme_variables($properties['logo'], $theme_vars); - } - if(!empty($stylesheets)) - { - $updated_theme['stylesheets'] = $db->escape_string(my_serialize($stylesheets)); - } - $updated_theme['properties'] = $db->escape_string(my_serialize($properties)); - - if(count($updated_theme) > 0) - { - $db->update_query("themes", $updated_theme, "tid='{$tid}'"); - } - - return $tid; -} - -/** - * Generates an array from an incoming CSS file. - * - * @param string $css The incoming CSS - * @return array Parsed CSS file as array, false on failure - */ -function css_to_array($css) -{ - // Normalise line breaks - $css = str_replace(array("\r\n", "\n", "\r"), "\n", $css); - - /** - * Play with the css a little - just to ensure we can parse it - * - * This essentially adds line breaks before and after each } not inside a string - * so it's parsed correctly below - */ - $stripped_css = preg_replace('#(?\*\.\#\,\s\(\)\|~|@\^]+)(\s*)\{(.*?)\}\n#msi', $stripped_css, $matches, PREG_PATTERN_ORDER); - $total = count($matches[1]); - - $parsed_css = array(); - - for($i=0; $i < $total; $i++) - { - $name = $description = ''; - $class_name = $matches[3][$i]; - $class_name = trim($class_name); - $comments = $matches[1][$i]; - preg_match_all("#Name:(.*)#i", $comments, $name_match); - if(isset($name_match[count($name_match)-1][0])) - { - $name = trim($name_match[count($name_match)-1][0]); - } - preg_match_all("#Description:(.*)#i", $comments, $description_match); - if(isset($description_match[count($description_match)-1][0])) - { - $description = trim($description_match[count($description_match)-1][0]); - } - $class_id = md5($class_name); - if(isset($already_parsed[$class_id])) - { - $already_parsed[$class_id]++; - $class_id .= "_".$already_parsed[$class_id]; - } - else - { - $already_parsed[$class_id] = 1; - } - $values = trim($matches[5][$i]); - $values = preg_replace("#/\*(.*?)\*/#s", "", $values); - $parsed_css[$class_id] = array("class_name" => $class_name, "name" => $name, "description" => $description, "values" => $values); - } - - return $parsed_css; -} - -/** - * @param array|string $css - * @param int $selected_item - * - * @return string - */ -function get_selectors_as_options($css, $selected_item=null) -{ - $select = ""; - - if(!is_array($css)) - { - $css = css_to_array($css); - } - - $selected = false; - - if(is_array($css)) - { - uasort($css, "css_selectors_sort_cmp"); - - foreach($css as $id => $css_array) - { - if(!$css_array['name']) - { - $css_array['name'] = $css_array['class_name']; - } - - if($selected_item == $id || (!$selected_item && !$selected)) - { - $select .= "\n"; - $selected = true; - } - else - { - $select .= "\n"; - } - } - } - return $select; -} - -/** - * @param array $a - * @param array $b - * - * @return int - */ -function css_selectors_sort_cmp($a, $b) -{ - if(!$a['name']) - { - $a['name'] = $a['class_name']; - } - - if(!$b['name']) - { - $b['name'] = $b['class_name']; - } - return strcmp($a['name'], $b['name']); -} - -/** - * @param array|string $css - * @param string $id - * - * @return array|bool - */ -function get_css_properties($css, $id) -{ - if(!is_array($css)) - { - $css = css_to_array($css); - } - - if(!isset($css[$id])) - { - return false; - } - return parse_css_properties($css[$id]['values']); -} - -/** - * Parses CSS supported properties and returns them as an array. - * - * @param string $values Value of CSS properties from within class or selector - * @return array Array of CSS properties - */ -function parse_css_properties($values) -{ - $css_bits = array(); - - if(!$values) - { - return null; - } - - $values = explode(";", $values); - foreach($values as $value) - { - $value = trim($value); - if(!$value) continue; - list($property, $css_value) = explode(":", $value, 2); - $property = trim($property); - switch(strtolower($property)) - { - case "background": - case "color": - case "width": - case "font-family": - case "font-size": - case "font-weight": - case "font-style": - case "text-decoration": - $css_bits[$property] = trim($css_value); - break; - default: - $css_bits['extra'] .= "{$property}: ".trim($css_value).";\n"; - - } - } - return $css_bits; -} - -/** - * Inserts an incoming string of CSS in to an already defined document. If the class ID is not found, the CSS is appended to the file. - * - * @param string $new_css CSS we wish to insert at this location. - * @param string $selector The selector for this piece of CSS. - * @param string $css The existing CSS if we have any. - * @param string $class_id (Optional) The optional friendly class id value just incase the CSS is not found in the file. - * - * @return string The altered CSS. - */ -function insert_into_css($new_css, $selector="", $css="", $class_id="") -{ - $new_css = str_replace(array("\r\n", "\n", "\r"), "\n", $new_css); - - $generated_css = ''; - - // Build the new CSS properties list - $new_css = explode("\n", $new_css); - foreach($new_css as $css_line) - { - $generated_css .= "\t".trim($css_line)."\n"; - } - - $parsed_css = array(); - - // Parse out the CSS - if($css) - { - $parsed_css = css_to_array($css); - } - - if(!$class_id) - { - $class_id = $parsed_css[$selector]['class_name']; - } - - // The specified class ID cannot be found, add CSS to end of file - if(!$css || !$parsed_css[$selector]) - { - return $css."{$class_id}\n{\n{$generated_css}\n}\n\n"; - } - // Valid CSS, swap out old, swap in new - else - { - $css = str_replace(array("\r\n", "\n", "\r"), "\n", $css); - $css = preg_replace('#(?\*\.\#\,\s\(\)\|~\^]+)(\s*)\{(\n*)#isu", "\n$1 {\n", $css); - $css = preg_replace("#\s{1,}\{#", " {", $css); - $existing_block = $parsed_css[$selector]; - - $break = strrpos($selector, "_"); - $actual_occurance = 0; - if($break !== false) - { - $actual_occurance = (int)substr($selector, ($break+1)); - } - - if(!$actual_occurance) - { - $actual_occurance = 1; - } - - $occurance = 1; - $pos = 0; - do - { - $pos = strpos($css, "\n".$existing_block['class_name']." {", $pos); - if($pos === false) - { - break; - } - if($occurance == $actual_occurance) - { - // This is the part we want to replace, now we need to fetch the opening & closing braces - $opening = strpos($css, "{", $pos); - $closing = strpos($css, "}", $pos); - $css = substr_replace($css, "\n".$generated_css."\n", $opening+1, $closing-$opening-1); - break; - } - ++$occurance; - ++$pos; - } while($occurance <= $actual_occurance); - } - $css = preg_replace("#{\n*#s", "{\n", $css); - $css = preg_replace("#\s*\}\s*#", "\n}\n\n", $css); - return $css; -} - -/** - * @param array $stylesheet - * @param int $tid - * - * @return bool|int - */ -function copy_stylesheet_to_theme($stylesheet, $tid) -{ - global $db; - - $stylesheet['tid'] = $tid; - unset($stylesheet['sid']); - - $new_stylesheet = array(); - foreach($stylesheet as $key => $value) - { - if(!is_numeric($key)) - { - $new_stylesheet[$db->escape_string($key)] = $db->escape_string($value); - } - } - - $sid = $db->insert_query("themestylesheets", $new_stylesheet); - - return $sid; -} - -/** - * @param int $tid - * @param bool|array $theme - * @param bool $update_disporders - * - * @return bool - */ -function update_theme_stylesheet_list($tid, $theme = false, $update_disporders = true) -{ - global $mybb, $db, $cache, $plugins; - - $stylesheets = array(); - - $child_list = make_child_theme_list($tid); - $parent_list = make_parent_theme_list($tid); - - if(!is_array($parent_list)) - { - return false; - } - - $tid_list = implode(',', $parent_list); - - // Get our list of stylesheets - $query = $db->simple_select("themestylesheets", "*", "tid IN ({$tid_list})", array('order_by' => 'tid', 'order_dir' => 'desc')); - while($stylesheet = $db->fetch_array($query)) - { - if(empty($stylesheets[$stylesheet['name']])) - { - if($stylesheet['tid'] != $tid) - { - $stylesheet['inherited'] = $stylesheet['tid']; - } - - $stylesheets[$stylesheet['name']] = $stylesheet; - } - } - - $theme_stylesheets = array(); - - foreach($stylesheets as $name => $stylesheet) - { - $sid = $stylesheet['sid']; - $css_url = "css.php?stylesheet={$sid}"; - - foreach($parent_list as $theme_id) - { - if($mybb->settings['usecdn'] && !empty($mybb->settings['cdnpath'])) - { - $cdnpath = rtrim($mybb->settings['cdnpath'], '/\\').'/'; - if(file_exists($cdnpath."cache/themes/theme{$theme_id}/{$stylesheet['name']}") && filemtime( - $cdnpath."cache/themes/theme{$theme_id}/{$stylesheet['name']}" - ) >= $stylesheet['lastmodified'] - ) - { - $css_url = "cache/themes/theme{$theme_id}/{$stylesheet['name']}"; - break; - } - } - else - { - if(file_exists(MYBB_ROOT."cache/themes/theme{$theme_id}/{$stylesheet['name']}") && filemtime( - MYBB_ROOT."cache/themes/theme{$theme_id}/{$stylesheet['name']}" - ) >= $stylesheet['lastmodified'] - ) - { - $css_url = "cache/themes/theme{$theme_id}/{$stylesheet['name']}"; - break; - } - } - } - - if(is_object($plugins)) - { - $plugins->run_hooks('update_theme_stylesheet_list_set_css_url', $css_url); - } - - $attachedto = $stylesheet['attachedto']; - if(!$attachedto) - { - $attachedto = "global"; - } - // private.php?compose,folders|usercp.php,global|global - $attachedto = explode("|", $attachedto); - foreach($attachedto as $attached_file) - { - $attached_actions = array(); - if(strpos($attached_file, '?') !== false) - { - $attached_file = explode('?', $attached_file); - $attached_actions = explode(",", $attached_file[1]); - $attached_file = $attached_file[0]; - } - - if(count($attached_actions) == 0) - { - $attached_actions = array("global"); - } - - foreach($attached_actions as $action) - { - $theme_stylesheets[$attached_file][$action][] = $css_url; - - if(!empty($stylesheet['inherited'])) - { - $theme_stylesheets['inherited']["{$attached_file}_{$action}"][$css_url] = $stylesheet['inherited']; - } - } - } - } - - // Now we have our list of built stylesheets, save them - $updated_theme = array( - "stylesheets" => $db->escape_string(my_serialize($theme_stylesheets)) - ); - - // Do we have a theme present? If so, update the stylesheet display orders - if($update_disporders) - { - if(!is_array($theme) || !$theme) - { - $theme_cache = cache_themes(); - $theme = $theme_cache[$tid]; - } - - $orders = $orphaned_stylesheets = array(); - $properties = $theme['properties']; - - if(!is_array($properties)) - { - $properties = my_unserialize($theme['properties']); - } - - $max_disporder = 0; - - foreach($stylesheets as $stylesheet) - { - if(!isset($properties['disporder'][$stylesheet['name']])) - { - $orphaned_stylesheets[] = $stylesheet['name']; - continue; - } - - if($properties['disporder'][$stylesheet['name']] > $max_disporder) - { - $max_disporder = $properties['disporder'][$stylesheet['name']]; - } - - $orders[$stylesheet['name']] = $properties['disporder'][$stylesheet['name']]; - } - - if(!empty($orphaned_stylesheets)) - { - $loop = $max_disporder + 1; - $max_disporder = $loop; - foreach($orphaned_stylesheets as $stylesheet) - { - $orders[$stylesheet] = $loop; - ++$loop; - } - } - - asort($orders); - $properties['disporder'] = $orders; - $updated_theme['properties'] = $db->escape_string(my_serialize($properties)); - } - - $db->update_query("themes", $updated_theme, "tid = '{$tid}'"); - - // Do we have any children themes that need updating too? - if(count($child_list) > 0) - { - foreach($child_list as $id) - { - update_theme_stylesheet_list($id, false, $update_disporders); - } - } - - $cache->update_default_theme(); - - return true; -} - -/** - * @param int $tid - * - * @return array|bool - */ -function make_parent_theme_list($tid) -{ - static $themes_by_parent; - - $themes = array(); - if(!is_array($themes_by_parent)) - { - $theme_cache = cache_themes(); - foreach($theme_cache as $key => $theme) - { - if($key == "default") - { - continue; - } - - $themes_by_parent[$theme['tid']][$theme['pid']] = $theme; - } - } - - if(!isset($themes_by_parent[$tid]) || !is_array($themes_by_parent[$tid])) - { - return false; - } - - reset($themes_by_parent); - reset($themes_by_parent[$tid]); - - $themes = array(); - - foreach($themes_by_parent[$tid] as $key => $theme) - { - $themes[] = $theme['tid']; - $parents = make_parent_theme_list($theme['pid']); - - if(is_array($parents)) - { - $themes = array_merge($themes, $parents); - } - } - - return $themes; -} - -/** - * @param int $tid - * - * @return array|null - */ -function make_child_theme_list($tid) -{ - static $themes_by_child; - - $themes = array(); - if(!is_array($themes_by_child)) - { - $theme_cache = cache_themes(); - foreach($theme_cache as $key => $theme) - { - if($key == "default") - { - continue; - } - - $themes_by_child[$theme['pid']][$theme['tid']] = $theme; - } - } - - if(!isset($themes_by_child[$tid]) || !is_array($themes_by_child[$tid])) - { - return null; - } - - $themes = array(); - - foreach($themes_by_child[$tid] as $theme) - { - $themes[] = $theme['tid']; - $children = make_child_theme_list($theme['tid']); - - if(is_array($children)) - { - $themes = array_merge($themes, $children); - } - } - - return $themes; -} - -/** - * @return array - */ -function cache_themes() -{ - global $db, $theme_cache; - - if(empty($theme_cache) || !is_array($theme_cache)) - { - $query = $db->simple_select("themes", "*", "", array('order_by' => "pid, name")); - while($theme = $db->fetch_array($query)) - { - $theme['properties'] = my_unserialize($theme['properties']); - $theme['stylesheets'] = my_unserialize($theme['stylesheets']); - $theme_cache[$theme['tid']] = $theme; - - if($theme['def'] == 1) - { - $theme_cache['default'] = $theme['tid']; - } - } - } - - // Do we have no themes assigned as default? - if(empty($theme_cache['default'])) - { - $theme_cache['default'] = 1; - } - - return $theme_cache; -} - -/** - * @param int $parent - * @param int $depth - */ -function build_theme_list($parent=0, $depth=0) -{ - global $mybb, $db, $table, $lang, $page; // Global $table is bad, but it will have to do for now - static $theme_cache; - - $padding = $depth*20; // Padding - - if(!is_array($theme_cache)) - { - $themes = cache_themes(); - $query = $db->simple_select("users", "style, COUNT(uid) AS users", "", array('group_by' => 'style')); - while($user_themes = $db->fetch_array($query)) - { - if($user_themes['style'] == 0) - { - $user_themes['style'] = $themes['default']; - } - - if($themes[$user_themes['style']]['users'] > 0) - { - $themes[$user_themes['style']]['users'] += (int)$user_themes['users']; - } - else - { - $themes[$user_themes['style']]['users'] = (int)$user_themes['users']; - } - } - - // Restrucure the theme array to something we can "loop-de-loop" with - foreach($themes as $key => $theme) - { - if($key == "default") - { - continue; - } - - $theme_cache[$theme['pid']][$theme['tid']] = $theme; - } - $theme_cache['num_themes'] = count($themes); - unset($themes); - } - - if(!is_array($theme_cache[$parent])) - { - return; - } - - foreach($theme_cache[$parent] as $theme) - { - $popup = new PopupMenu("theme_{$theme['tid']}", $lang->options); - if($theme['tid'] > 1) - { - $popup->add_item($lang->edit_theme, "index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - $theme['name'] = "".htmlspecialchars_uni($theme['name']).""; - - // We must have at least the master and 1 other active theme - if($theme_cache['num_themes'] > 2) - { - $popup->add_item($lang->delete_theme, "index.php?module=style-themes&action=delete&tid={$theme['tid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_theme_deletion}')"); - } - - if($theme['def'] != 1) - { - $popup->add_item($lang->set_as_default, "index.php?module=style-themes&action=set_default&tid={$theme['tid']}&my_post_key={$mybb->post_code}"); - $set_default = "post_code}\">style}/images/icons/make_default.png\" alt=\"{$lang->set_as_default}\" style=\"vertical-align: middle;\" title=\"{$lang->set_as_default}\" />"; - } - else - { - $set_default = "style}/images/icons/default.png\" alt=\"{$lang->default_theme}\" style=\"vertical-align: middle;\" title=\"{$lang->default_theme}\" />"; - } - $popup->add_item($lang->force_on_users, "index.php?module=style-themes&action=force&tid={$theme['tid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_theme_forced}')"); - } - $popup->add_item($lang->export_theme, "index.php?module=style-themes&action=export&tid={$theme['tid']}"); - $popup->add_item($lang->duplicate_theme, "index.php?module=style-themes&action=duplicate&tid={$theme['tid']}"); - $table->construct_cell("
{$set_default}
{$theme['name']}
"); - $table->construct_cell(my_number_format($theme['users']), array("class" => "align_center")); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - $table->construct_row(); - - // Fetch & build any child themes - build_theme_list($theme['tid'], ++$depth); - } -} - -/** - * returns an array which can be sent to generate_select_box() - * - * @param int $ignoretid - * @param int $parent - * @param int $depth - * - * @return null|string - */ -function build_theme_array($ignoretid = null, $parent=0, $depth=0) -{ - global $list; - static $theme_cache; - - if(!is_array($theme_cache)) - { - $themes = cache_themes(); - // Restrucure the theme array to something we can "loop-de-loop" with - foreach($themes as $key => $theme) - { - if($key == "default") - { - continue; - } - - $theme_cache[$theme['pid']][$theme['tid']] = $theme; - } - unset($theme); - } - - if(!is_array($theme_cache[$parent]) || $ignoretid === $parent) - { - return null; - } - - foreach($theme_cache[$parent] as $theme) - { - if($ignoretid === $theme['tid']) - { - continue; - } - - $list[$theme['tid']] = str_repeat("--", $depth).$theme['name']; - // Fetch & build any child themes - build_theme_array($ignoretid, $theme['tid'], $depth+1); - } - - if(!$parent) - { - return $list; - } -} - -/** - * @param array $theme - * - * @return array|bool - */ -function fetch_theme_stylesheets($theme) -{ - // Fetch list of all of the stylesheets for this theme - $file_stylesheets = my_unserialize($theme['stylesheets']); - - if(!is_array($file_stylesheets)) - { - return false; - } - - $stylesheets = array(); - $inherited_load = array(); - - // Now we loop through the list of stylesheets for each file - foreach($file_stylesheets as $file => $action_stylesheet) - { - if($file == 'inherited') - { - continue; - } - - foreach($action_stylesheet as $action => $style) - { - foreach($style as $stylesheet2) - { - $stylesheets[$stylesheet2]['applied_to'][$file][] = $action; - if(is_array($file_stylesheets['inherited'][$file."_".$action]) && in_array($stylesheet2, array_keys($file_stylesheets['inherited'][$file."_".$action]))) - { - $stylesheets[$stylesheet2]['inherited'] = $file_stylesheets['inherited'][$file."_".$action]; - foreach($file_stylesheets['inherited'][$file."_".$action] as $value) - { - $inherited_load[] = $value; - } - } - } - } - } - - foreach($stylesheets as $file => $stylesheet2) - { - if(is_array($stylesheet2['inherited'])) - { - foreach($stylesheet2['inherited'] as $inherited_file => $tid) - { - $stylesheet2['inherited'][basename($inherited_file)] = $tid; - unset($stylesheet2['inherited'][$inherited_file]); - } - } - - $stylesheets[basename($file)] = $stylesheet2; - unset($stylesheets[$file]); - } - - return $stylesheets; -} - -/** - * @param string $css - * - * @return string - */ -function upgrade_css_120_to_140($css) -{ - // Update our CSS to the new stuff in 1.4 - $parsed_css = css_to_array($css); - - if(!is_array($parsed_css)) - { - return ""; - } - - foreach($parsed_css as $class_id => $array) - { - $parsed_css[$class_id]['values'] = str_replace('#eea8a1', '#ffdde0', $array['values']); - $parsed_css[$class_id]['values'] = str_replace('font-family: Verdana;', 'font-family: Verdana, Arial, Sans-Serif;', $array['values']); - - switch($array['class_name']) - { - case '.bottommenu': - $parsed_css[$class_id]['values'] = str_replace('padding: 6px;', 'padding: 10px;', $array['values']); - break; - case '.expcolimage': - $parsed_css[$class_id]['values'] .= "\n\tmargin-top: 2px;"; - break; - case '.toolbar_normal': - case '.toolbar_hover': - case '.toolbar_clicked': - case '.pagenav': - case '.pagenavbit': - case '.pagenavbit a': - case '.pagenavcurrent': - case '.quote_header': - case '.quote_body': - case '.code_header': - case '.code_body': - case '.usercpnav': - case '.usercpnav li': - case '.usercpnav .pmfolders': - unset($parsed_css[$class_id]); - break; - default: - } - } - - $to_add = array( - md5('.trow_selected td') => array("class_name" => '.trow_selected td', "values" => 'background: #FFFBD9;'), - md5('blockquote') => array("class_name" => 'blockquote', "values" => "border: 1px solid #ccc;\n\tmargin: 0;\n\tbackground: #fff;\n\tpadding: 4px;"), - md5('blockquote cite') => array("class_name" => 'blockquote cite', "values" => "font-weight: bold;\n\tborder-bottom: 1px solid #ccc;\n\tfont-style: normal;\n\tdisplay: block;\n\tmargin: 4px 0;"), - md5('blockquote cite span') => array("class_name" => 'blockquote cite span', "values" => "float: right;\n\tfont-weight: normal;"), - md5('.codeblock') => array("class_name" => '.codeblock', "values" => "background: #fff;\n\tborder: 1px solid #ccc;\n\tpadding: 4px;"), - md5('.codeblock .title') => array("class_name" => '.codeblock .title', "values" => "border-bottom: 1px solid #ccc;\n\tfont-weight: bold;\n\tmargin: 4px 0;"), - md5('.codeblock code') => array("class_name" => '.codeblock code', "values" => "overflow: auto;\n\theight: auto;\n\tmax-height: 200px;\n\tdisplay: block;\n\tfont-family: Monaco, Consolas, Courier, monospace;\n\tfont-size: 13px;"), - md5('.subject_new') => array("class_name" => '.subject_new', "values" => "font-weight: bold;"), - md5('.highlight') => array("class_name" => '.highlight', "values" => "background: #FFFFCC;\n\tpadding: 3px;"), - md5('.pm_alert') => array("class_name" => '.pm_alert', "values" => "background: #FFF6BF;\n\tborder: 1px solid #FFD324;\n\ttext-align: center;\n\tpadding: 5px 20px;\n\tfont-size: 11px;"), - md5('.red_alert') => array("class_name" => '.red_alert', "values" => "background: #FBE3E4;\n\tborder: 1px solid #A5161A;\n\tcolor: #A5161A;\n\ttext-align: center;\n\tpadding: 5px 20px;\n\tfont-size: 11px;"), - md5('.high_warning') => array("class_name" => '.high_warning', "values" => "color: #CC0000;"), - md5('.moderate_warning') => array("class_name" => '.moderate_warning', "values" => "color: #F3611B;"), - md5('.low_warning') => array("class_name" => '.low_warning', "values" => "color: #AE5700;"), - md5('div.error') => array("class_name" => 'div.error', "values" => "padding: 5px 10px;\n\tborder-top: 2px solid #FFD324;\n\tborder-bottom: 2px solid #FFD324;\n\tbackground: #FFF6BF\n\tfont-size: 12px;"), - md5('.high_warning') => array("class_name" => '.high_warning', "values" => "color: #CC0000;"), - md5('.moderate_warning') => array("class_name" => '.moderate_warning', "values" => "color: #F3611B;"), - md5('.low_warning') => array("class_name" => '.low_warning', "values" => "color: #AE5700;"), - md5('div.error') => array("class_name" => 'div.error', "values" => "padding: 5px 10px;\n\tborder-top: 2px solid #FFD324;\n\tborder-bottom: 2px solid #FFD324;\n\tbackground: #FFF6BF;\n\tfont-size: 12px;"), - md5('div.error p') => array("class_name" => 'div.error p', "values" => "margin: 0;\n\tcolor: #000;\n\tfont-weight: normal;"), - md5('div.error p em') => array("class_name" => 'div.error p em', "values" => "font-style: normal;\n\tfont-weight: bold;\n\tpadding-left: 24px;\n\tdisplay: block;\n\tcolor: #C00;\n\tbackground: url({$mybb->settings['bburl']}/images/error.png) no-repeat 0;"), - md5('div.error.ul') => array("class_name" => 'div.error.ul', "values" => "margin-left: 24px;"), - md5('.online') => array("class_name" => '.online', "values" => "color: #15A018;"), - md5('.offline') => array("class_name" => '.offline', "values" => "color: #C7C7C7;"), - md5('.pagination') => array("class_name" => '.pagination', "values" => "font-size: 11px;\n\tpadding-top: 10px;\n\tmargin-bottom: 5px;"), - md5('.tfoot .pagination, .tcat .pagination') => array("class_name" => '.tfoot .pagination, .tcat .pagination', "values" => "padding-top: 0;"), - md5('.pagination .pages') => array("class_name" => '.pagination .pages', "values" => "font-weight: bold;"), - md5('.pagination .pagination_current, .pagination a') => array("class_name" => '.pagination .pagination_current, .pagination a', "values" => "padding: 2px 6px;\n\tmargin-bottom: 3px;"), - md5('.pagination a') => array("class_name" => '.pagination a', "values" => "border: 1px solid #81A2C4;"), - md5('.pagination .pagination_current') => array("class_name" => '.pagination .pagination_current', "values" => "background: #F5F5F5;\n\tborder: 1px solid #81A2C4;\n\tfont-weight: bold;"), - md5('.pagination a:hover') => array("class_name" => '.pagination a:hover', "values" => "background: #F5F5F5;\n\ttext-decoration: none;"), - md5('.thread_legend, .thread_legend dd') => array("class_name" => '.thread_legend, .thread_legend dd', "values" => "margin: 0;\n\tpadding: 0;"), - md5('.thread_legend dd') => array("class_name" => '.thread_legend dd', "values" => "padding-bottom: 4px;\n\tmargin-right: 15px;"), - md5('.thread_legend img') => array("class_name" => '.thread_legend img', "values" => "margin-right: 4px;\n\tvertical-align: bottom;"), - md5('.forum_legend, .forum_legend dt, .forum_legend dd') => array("class_name" => '.forum_legend, .forum_legend dt, .forum_legend dd', "values" => "margin: 0;\n\tpadding: 0;"), - md5('.forum_legend dd') => array("class_name" => '.forum_legend dd', "values" => "float: left;\n\tmargin-right: 10px;"), - md5('.forum_legend dt') => array("class_name" => '.forum_legend dt', "values" => "margin-right: 10px;\n\tfloat: left;"), - md5('.success_message') => array("class_name" => '.success_message', "values" => "color: #00b200;\n\tfont-weight: bold;\n\tfont-size: 10px;\n\tmargin-bottom: 10px;"), - md5('.error_message') => array("class_name" => '.error_message', "values" => "color: #C00;\n\tfont-weight: bold;\n\tfont-size: 10px;\n\tmargin-bottom: 10px;"), - md5('.post_body') => array("class_name" => '.post_body', "values" => "padding: 5px;"), - md5('.post_content') => array("class_name" => '.post_content', "values" => "padding: 5px 10px;"), - md5('.invalid_field') => array("class_name" => '.invalid_field', "values" => "border: 1px solid #f30;\n\tcolor: #f30;"), - md5('.valid_field') => array("class_name" => '.valid_field', "values" => "border: 1px solid #0c0;"), - md5('.validation_error') => array("class_name" => '.validation_error', "values" => "background: url(images/invalid.png) no-repeat center left;\n\tcolor: #f30;\n\tmargin: 5px 0;\n\tpadding: 5px;\n\tfont-weight: bold;\n\tfont-size: 11px;\n\tpadding-left: 22px;"), - md5('.validation_success') => array("class_name" => '.validation_success', "values" => "background: url(images/valid.png) no-repeat center left;\n\tcolor: #00b200;\n\tmargin: 5px 0;\n\tpadding: 5px;\n\tfont-weight: bold;\n\tfont-size: 11px;\n\tpadding-left: 22px;"), - md5('.validation_loading') => array("class_name" => '.validation_loading', "values" => "background: url(images/spinner.gif) no-repeat center left;\n\tcolor: #555;\n\tmargin: 5px 0;\n\tpadding: 5px;\n\tfont-weight: bold;\n\tfont-size: 11px;\n\tpadding-left: 22px;"), - ); - - $already_parsed = array(); - - foreach($to_add as $class_id => $array) - { - if($already_parsed[$class_id]) - { - $already_parsed[$class_id]++; - $class_id .= "_".$already_parsed[$class_id]; - } - else - { - $already_parsed[$class_id] = 1; - } - - $array['name'] = ""; - $array['description'] = ""; - - $parsed_css[$class_id] = $array; - } - - $theme = array( - 'css' => '', - ); - - $css = ""; - foreach($parsed_css as $class_id => $array) - { - if($array['name'] || $array['description']) - { - $theme['css'] .= "/* "; - if($array['name']) - { - $array['css'] .= "Name: {$array['name']}"; - - if($array['description']) - { - $array['css'] .= "\n"; - } - } - - if($array['description']) - { - $array['css'] .= "Description: {$array['description']}"; - } - - $array['css'] .= " */\n"; - } - - $css .= "{$array['class_name']} {\n\t{$array['values']}\n}\n"; - } - - return $css; -} diff --git a/html/forums/admin/inc/functions_view_manager.php b/html/forums/admin/inc/functions_view_manager.php deleted file mode 100644 index 8ba4c6d..0000000 --- a/html/forums/admin/inc/functions_view_manager.php +++ /dev/null @@ -1,674 +0,0 @@ - $lang->views, - 'link' => "{$base_url}&action=views", - 'description' => $lang->views_desc - ); - - $sub_tabs['create_view'] = array( - 'title' => $lang->create_new_view, - 'link' => "{$base_url}&action=views&do=add", - 'description' => $lang->create_new_view_desc - ); - - $page->add_breadcrumb_item($lang->view_manager, 'index.php?module=user-users&action=views'); - - // Lang strings should be in global lang file - - if($mybb->input['do'] == "set_default") - { - $query = $db->simple_select("adminviews", "vid, uid, visibility", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'"); - $admin_view = $db->fetch_array($query); - - if(!$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid']) - { - flash_message($lang->error_invalid_admin_view, 'error'); - admin_redirect($base_url."&action=views"); - } - set_default_view($type, $admin_view['vid']); - flash_message($lang->succuss_view_set_as_default, 'success'); - admin_redirect($base_url."&action=views"); - } - - if($mybb->input['do'] == "add") - { - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_view_title; - } - if($mybb->input['fields_js']) - { - $mybb->input['fields'] = explode(",", $mybb->input['fields_js']); - } - if(count($mybb->input['fields']) <= 0) - { - $errors[] = $lang->error_no_view_fields; - } - - if($mybb->get_input('perpage', MyBB::INPUT_INT) <= 0) - { - $errors[] = $lang->error_invalid_view_perpage; - } - - if(!in_array($mybb->input['sortby'], array_keys($sort_options))) - { - $errors[] = $lang->error_invalid_view_sortby; - } - - if($mybb->input['sortorder'] != "asc" && $mybb->input['sortorder'] != "desc") - { - $errors[] = $lang->error_invalid_view_sortorder; - } - - if($mybb->input['visibility'] == 0) - { - $mybb->input['visibility'] = 2; - } - - if(!$errors) - { - $new_view = array( - "uid" => $mybb->user['uid'], - "title" => $db->escape_string($mybb->input['title']), - "type" => $type, - "visibility" => $mybb->get_input('visibility', MyBB::INPUT_INT), - "fields" => $db->escape_string(my_serialize($mybb->input['fields'])), - "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])), - "custom_profile_fields" => $db->escape_string(my_serialize($mybb->input['profile_fields'])), - "sortby" => $db->escape_string($mybb->input['sortby']), - "sortorder" => $db->escape_string($mybb->input['sortorder']), - "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT), - "view_type" => $db->escape_string($mybb->input['view_type']) - ); - - $vid = $db->insert_query("adminviews", $new_view); - - if($mybb->input['isdefault']) - { - set_default_view($type, $vid); - } - flash_message($lang->success_view_created, "success"); - admin_redirect($base_url."&vid={$vid}"); - } - } - else - { - $mybb->input = array_merge($mybb->input, array('perpage' => 20)); - } - - // Write in our JS based field selector - $page->extra_header .= "\n"; - - $page->add_breadcrumb_item($lang->create_new_view); - $page->output_header($lang->create_new_view); - - $form = new Form($base_url."&action=views&do=add", "post"); - - $page->output_nav_tabs($sub_tabs, 'create_view'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->create_new_view); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - - if($mybb->input['visibility'] == 2) - { - $visibility_public_checked = true; - } - else - { - $visibility_private_checked = true; - } - - $visibility_options = array( - $form->generate_radio_button("visibility", "1", "{$lang->private} - {$lang->private_desc}", array("checked" => $visibility_private_checked)), - $form->generate_radio_button("visibility", "2", "{$lang->public} - {$lang->public_desc}", array("checked" => $visibility_public_checked)) - ); - $form_container->output_row($lang->visibility, "", implode("
", $visibility_options)); - - $form_container->output_row($lang->set_as_default_view, "", $form->generate_yes_no_radio("isdefault", $mybb->input['isdefault'], array('yes' => 1, 'no' => 0))); - - if(count($sort_options) > 0) - { - $sort_directions = array( - "asc" => $lang->ascending, - "desc" => $lang->descending - ); - $form_container->output_row($lang->sort_results_by, "", $form->generate_select_box('sortby', $sort_options, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('sortorder', $sort_directions, $mybb->input['sortorder'], array('id' => 'sortorder')), 'sortby'); - } - - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage'); - - if($type == "user") - { - $form_container->output_row($lang->display_results_as, "", $form->generate_radio_button('view_type', 'table', $lang->table, array('checked' => ($mybb->input['view_type'] != "card" ? true : false)))."
".$form->generate_radio_button('view_type', 'card', $lang->business_card, array('checked' => ($mybb->input['view_type'] == "card" ? true : false)))); - } - - $form_container->end(); - - $field_select .= "
\n"; - $field_select .= "
{$lang->enabled}
    \n"; - if(is_array($mybb->input['fields'])) - { - foreach($mybb->input['fields'] as $field) - { - if($fields[$field]) - { - $field_select .= "
  • • {$fields[$field]['title']}
  • "; - $active[$field] = 1; - } - } - } - $field_select .= "
\n"; - $field_select .= "
{$lang->disabled}
    \n"; - foreach($fields as $key => $field) - { - if($active[$key]) - { - continue; - } - $field_select .= "
  • • {$field['title']}
  • "; - } - $field_select .= "
\n"; - $field_select .= $form->generate_hidden_field("fields_js", @implode(",", @array_keys($active)), array('id' => 'fields_js')); - $field_select = str_replace("'", "\\'", $field_select); - $field_select = str_replace("\n", "", $field_select); - - $field_select = "\n"; - - foreach($fields as $key => $field) - { - $field_options[$key] = $field['title']; - } - - $field_select .= "\n"; - - $form_container = new FormContainer($lang->fields_to_show); - $form_container->output_row($lang->fields_to_show_desc, $description, $field_select); - $form_container->end(); - - // Build the search conditions - if(function_exists($conditions_callback)) - { - $conditions_callback($mybb->input, $form); - } - - $buttons[] = $form->generate_submit_button($lang->save_view); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); - } - else if($mybb->input['do'] == "edit") - { - $query = $db->simple_select("adminviews", "*", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'"); - $admin_view = $db->fetch_array($query); - - // Does the view not exist? - if(!$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid']) - { - flash_message($lang->error_invalid_admin_view, 'error'); - admin_redirect($base_url."&action=views"); - } - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_view_title; - } - if($mybb->input['fields_js']) - { - $mybb->input['fields'] = explode(",", $mybb->input['fields_js']); - } - - if(count($mybb->input['fields']) <= 0) - { - $errors[] = $lang->error_no_view_fields; - } - - if($mybb->get_input('perpage', MyBB::INPUT_INT) <= 0) - { - $errors[] = $lang->error_invalid_view_perpage; - } - - if(!in_array($mybb->input['sortby'], array_keys($sort_options))) - { - $errors[] = $lang->error_invalid_view_sortby; - } - - if($mybb->input['sortorder'] != "asc" && $mybb->input['sortorder'] != "desc") - { - $errors[] = $lang->error_invalid_view_sortorder; - } - - if($mybb->input['visibility'] == 0) - { - $mybb->input['visibility'] = 2; - } - - if(!$errors) - { - $updated_view = array( - "title" => $db->escape_string($mybb->input['title']), - "type" => $type, - "visibility" => $mybb->get_input('visibility', MyBB::INPUT_INT), - "fields" => $db->escape_string(my_serialize($mybb->input['fields'])), - "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])), - "custom_profile_fields" => $db->escape_string(my_serialize($mybb->input['profile_fields'])), - "sortby" => $db->escape_string($mybb->input['sortby']), - "sortorder" => $db->escape_string($mybb->input['sortorder']), - "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT), - "view_type" => $db->escape_string($mybb->input['view_type']) - ); - $db->update_query("adminviews", $updated_view, "vid='{$admin_view['vid']}'"); - - if($mybb->input['isdefault']) - { - set_default_view($type, $admin_view['vid']); - } - - flash_message($lang->success_view_updated, "success"); - admin_redirect($base_url."&vid={$admin_view['vid']}"); - } - } - - // Write in our JS based field selector - $page->extra_header .= "\n"; - - $page->add_breadcrumb_item($lang->edit_view); - $page->output_header($lang->edit_view); - - $form = new Form($base_url."&action=views&do=edit&vid={$admin_view['vid']}", "post"); - - $sub_tabs = array(); - $sub_tabs['edit_view'] = array( - 'title' => $lang->edit_view, - 'link' => $base_url."&action=views&do=edit&vid={$admin_view['vid']}", - 'description' => $lang->edit_view_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_view'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $admin_view['conditions'] = my_unserialize($admin_view['conditions']); - $admin_view['fields'] = my_unserialize($admin_view['fields']); - $admin_view['profile_fields'] = my_unserialize($admin_view['custom_profile_fields']); - $mybb->input = array_merge($mybb->input, $admin_view); - - $mybb->input['isdefault'] = 0; - $default_view = fetch_default_view($type); - - if($default_view == $admin_view['vid']) - { - $mybb->input['isdefault'] = 1; - } - } - - $form_container = new FormContainer($lang->edit_view); - $form_container->output_row($lang->view." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - - if($mybb->input['visibility'] == 2) - { - $visibility_public_checked = true; - } - else - { - $visibility_private_checked = true; - } - - $visibility_options = array( - $form->generate_radio_button("visibility", "1", "{$lang->private} - {$lang->private_desc}", array("checked" => $visibility_private_checked)), - $form->generate_radio_button("visibility", "2", "{$lang->public} - {$lang->public_desc}", array("checked" => $visibility_public_checked)) - ); - $form_container->output_row($lang->visibility, "", implode("
", $visibility_options)); - - $form_container->output_row($lang->set_as_default_view, "", $form->generate_yes_no_radio("isdefault", $mybb->input['isdefault'], array('yes' => 1, 'no' => 0))); - - if(count($sort_options) > 0) - { - $sort_directions = array( - "asc" => $lang->ascending, - "desc" => $lang->descending - ); - $form_container->output_row($lang->sort_results_by, "", $form->generate_select_box('sortby', $sort_options, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('sortorder', $sort_directions, $mybb->input['sortorder'], array('id' => 'sortorder')), 'sortby'); - } - - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage'); - - if($type == "user") - { - $form_container->output_row($lang->display_results_as, "", $form->generate_radio_button('view_type', 'table', $lang->table, array('checked' => ($mybb->input['view_type'] != "card" ? true : false)))."
".$form->generate_radio_button('view_type', 'card', $lang->business_card, array('checked' => ($mybb->input['view_type'] == "card" ? true : false)))); - } - - $form_container->end(); - - $field_select .= "
\n"; - $field_select .= "
{$lang->enabled}
    \n"; - if(is_array($mybb->input['fields'])) - { - foreach($mybb->input['fields'] as $field) - { - if($fields[$field]) - { - $field_select .= "
  • • {$fields[$field]['title']}
  • "; - $active[$field] = 1; - } - } - } - $field_select .= "
\n"; - $field_select .= "
{$lang->disabled}
    \n"; - if(is_array($fields)) - { - foreach($fields as $key => $field) - { - if($active[$key]) - { - continue; - } - $field_select .= "
  • • {$field['title']}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= $form->generate_hidden_field("fields_js", @implode(",", @array_keys($active)), array('id' => 'fields_js')); - $field_select = str_replace("'", "\\'", $field_select); - $field_select = str_replace("\n", "", $field_select); - - $field_select = "\n"; - - foreach($fields as $key => $field) - { - $field_options[$key] = $field['title']; - } - - $field_select .= "\n"; - - $form_container = new FormContainer($lang->fields_to_show); - $form_container->output_row($lang->fields_to_show_desc, $description, $field_select); - $form_container->end(); - - // Build the search conditions - if(function_exists($conditions_callback)) - { - $conditions_callback($mybb->input, $form); - } - - $buttons[] = $form->generate_submit_button($lang->save_view); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); - } - - else if($mybb->input['do'] == "delete") - { - if($mybb->input['no']) - { - admin_redirect($base_url."&action=views"); - } - - $query = $db->simple_select("adminviews", "COUNT(vid) as views"); - $views = $db->fetch_field($query, "views"); - - if($views == 0) - { - flash_message($lang->error_cannot_delete_view, 'error'); - admin_redirect($base_url."&action=views"); - } - - $vid = $mybb->get_input('vid', MyBB::INPUT_INT); - $query = $db->simple_select("adminviews", "vid, uid, visibility", "vid = '{$vid}'"); - $admin_view = $db->fetch_array($query); - - if($vid == 1 || !$admin_view['vid'] || $admin_view['visibility'] == 1 && $mybb->user['uid'] != $admin_view['uid']) - { - flash_message($lang->error_invalid_view_delete, 'error'); - admin_redirect($base_url."&action=views"); - } - - if($mybb->request_method == "post") - { - $db->delete_query("adminviews", "vid='{$admin_view['vid']}'"); - flash_message($lang->success_view_deleted, 'success'); - admin_redirect($base_url."&action=views"); - } - else - { - $page->output_confirm_action($base_url."&action=views&do=delete&vid={$admin_view['vid']}", $lang->confirm_view_deletion); - } - } - - // Export views - else if($mybb->input['do'] == "export") - { - $xml = "\n"; - $xml = "version_code."\" exported=\"".TIME_NOW."\">\n"; - - if($mybb->input['type']) - { - $type_where = "type='".$db->escape_string($mybb->input['type'])."'"; - } - - $query = $db->simple_select("adminviews", "*", $type_where); - while($admin_view = $db->fetch_array($query)) - { - $fields = my_unserialize($admin_view['fields']); - $conditions = my_unserialize($admin_view['conditions']); - - $admin_view['title'] = str_replace(']]>', ']]]]>', $admin_view['title']); - $admin_view['sortby'] = str_replace(']]>', ']]]]>', $admin_view['sortby']); - $admin_view['sortorder'] = str_replace(']]>', ']]]]>', $admin_view['sortorder']); - $admin_view['view_type'] = str_replace(']]>', ']]]]>', $admin_view['view_type']); - - $xml .= "\t\n"; - $xml .= "\t\t<![CDATA[{$admin_view['title']}]]>\n"; - $xml .= "\t\t\n"; - foreach($fields as $field) - { - $xml .= "\t\t\t\n"; - } - $xml .= "\t\t\n"; - $xml .= "\t\t\n"; - foreach($conditions as $name => $condition) - { - if(!$conditions) continue; - if(is_array($condition)) - { - $condition = my_serialize($condition); - $is_serialized = " is_serialized=\"1\""; - } - $condition = str_replace(']]>', ']]]]>', $condition); - $xml .= "\t\t\t\n"; - } - $xml .= "\t\t\n"; - $xml .= "\t\t\n"; - $xml .= "\t\t\n"; - $xml .= "\t\t\n"; - $xml .= "\t\t\n"; - $xml .= "\t\n"; - } - $xml .= "\n"; - $mybb->settings['bbname'] = urlencode($mybb->settings['bbname']); - header("Content-disposition: filename=".$mybb->settings['bbname']."-views.xml"); - header("Content-Length: ".my_strlen($xml)); - header("Content-type: unknown/unknown"); - header("Pragma: no-cache"); - header("Expires: 0"); - echo $xml; - exit; - } - - // Generate a listing of all current views - else - { - $page->output_header($lang->view_manager); - - $page->output_nav_tabs($sub_tabs, 'views'); - - $table = new Table; - $table->construct_header($lang->view); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - $default_view = fetch_default_view($type); - - $query = $db->simple_select("adminviews", "COUNT(vid) as views"); - $views = $db->fetch_field($query, "views"); - - $query = $db->query(" - SELECT v.*, u.username - FROM ".TABLE_PREFIX."adminviews v - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=v.uid) - WHERE v.visibility='2' OR (v.visibility='1' AND v.uid='{$mybb->user['uid']}') - ORDER BY title - "); - while($view = $db->fetch_array($query)) - { - $created = ""; - if($view['uid'] == 0) - { - $view_type = "default"; - $default_class = "grey"; - } - else if($view['visibility'] == 2) - { - $view_type = "group"; - if($view['username']) - { - $username = htmlspecialchars_uni($view['username']); - $created = "
{$lang->created_by} {$username}"; - } - } - else - { - $view_type = "user"; - } - - $default_add = ''; - if($default_view == $view['vid']) - { - $default_add = " ({$lang->default})"; - } - - $title_string = "view_title_{$view['vid']}"; - - if($lang->$title_string) - { - $view['title'] = $lang->$title_string; - } - - $table->construct_cell("
style}/images/icons/{$view_type}.png\" title=\"".$lang->sprintf($lang->this_is_a_view, $view_type)."\" alt=\"{$view_type}\" />
{$view['title']}{$default_add}{$created}
"); - - $popup = new PopupMenu("view_{$view['vid']}", $lang->options); - $popup->add_item($lang->edit_view, "{$base_url}&action=views&do=edit&vid={$view['vid']}"); - if($view['vid'] != $default_view) - { - $popup->add_item($lang->set_as_default, "{$base_url}&action=views&do=set_default&vid={$view['vid']}"); - } - - if($views > 1 && $view['vid'] != 1) - { - $popup->add_item($lang->delete_view, "{$base_url}&action=views&do=delete&vid={$view['vid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_view_deletion}')"); - } - $controls = $popup->fetch(); - $table->construct_cell($controls, array("class" => "align_center")); - $table->construct_row(); - } - - $table->output($lang->view); - - echo << -
-{$lang->legend} -{$lang->default} {$lang->default_view_desc}
-{$lang->public} {$lang->public_view_desc}
-{$lang->private} {$lang->private_view_desc}
-LEGEND; - $page->output_footer(); - } -} - -function set_default_view($type, $vid) -{ - global $mybb, $db; - - $query = $db->simple_select("adminoptions", "defaultviews", "uid='{$mybb->user['uid']}'"); - $default_views = my_unserialize($db->fetch_field($query, "defaultviews")); - if(!$db->num_rows($query)) - { - $create = true; - } - $default_views[$type] = $vid; - $default_views = my_serialize($default_views); - $updated_admin = array("defaultviews" => $db->escape_string($default_views)); - - if($create == true) - { - $updated_admin['uid'] = $mybb->user['uid']; - $updated_admin['notes'] = ''; - $updated_admin['permissions'] = ''; - $db->insert_query("adminoptions", $updated_admin); - } - else - { - $db->update_query("adminoptions", $updated_admin, "uid='{$mybb->user['uid']}'"); - } -} - -/** - * @param string $type - * - * @return bool|array - */ -function fetch_default_view($type) -{ - global $mybb, $db; - $query = $db->simple_select("adminoptions", "defaultviews", "uid='{$mybb->user['uid']}'"); - $default_views = my_unserialize($db->fetch_field($query, "defaultviews")); - if(!is_array($default_views)) - { - return false; - } - return $default_views[$type]; -} diff --git a/html/forums/admin/inc/index.html b/html/forums/admin/inc/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/inc/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/index.php b/html/forums/admin/index.php deleted file mode 100644 index 41b6a6a..0000000 --- a/html/forums/admin/index.php +++ /dev/null @@ -1,822 +0,0 @@ -settings['cookiepath'] = substr($loc, 0, strrpos($loc, "/{$config['admin_dir']}/"))."/{$config['admin_dir']}/"; - -if(!isset($cp_language)) -{ - if(!file_exists(MYBB_ROOT."inc/languages/".$mybb->settings['cplanguage']."/admin/home_dashboard.lang.php")) - { - $mybb->settings['cplanguage'] = "english"; - } - $lang->set_language($mybb->settings['cplanguage'], "admin"); -} - -// Load global language phrases -$lang->load("global"); -$lang->load("messages", true); - -if(function_exists('mb_internal_encoding') && !empty($lang->settings['charset'])) -{ - @mb_internal_encoding($lang->settings['charset']); -} - -header("Content-type: text/html; charset={$lang->settings['charset']}"); - -$time = TIME_NOW; -$errors = null; - -if(is_dir(MYBB_ROOT."install") && !file_exists(MYBB_ROOT."install/lock")) -{ - $mybb->trigger_generic_error("install_directory"); -} - -$ip_address = get_ip(); -unset($user); - -// Load Admin CP style -if(!isset($cp_style)) -{ - if(!empty($mybb->settings['cpstyle']) && file_exists(MYBB_ADMIN_DIR."/styles/".$mybb->settings['cpstyle']."/main.css")) - { - $cp_style = $mybb->settings['cpstyle']; - } - else - { - $cp_style = "default"; - } -} - -$default_page = new DefaultPage; - -$logged_out = false; -$fail_check = 0; -$post_verify = true; - -foreach(array('action', 'do', 'module') as $input) -{ - if(!isset($mybb->input[$input])) - { - $mybb->input[$input] = ''; - } -} - -if($mybb->input['action'] == "unlock") -{ - $user = array(); - $error = ''; - - $plugins->run_hooks("admin_unlock_start"); - - if($mybb->input['username']) - { - $user = get_user_by_username($mybb->input['username'], array('fields' => '*')); - - if(!$user['uid']) - { - $error = $lang->error_invalid_username; - } - } - else if($mybb->input['uid']) - { - $user = get_user($mybb->input['uid']); - if(!$user['uid']) - { - $error = $lang->error_invalid_uid; - } - } - - // Do we have the token? If so let's process it - if($mybb->input['token'] && $user['uid']) - { - $query = $db->simple_select("awaitingactivation", "COUNT(aid) AS num", "uid='".(int)$user['uid']."' AND code='".$db->escape_string($mybb->input['token'])."' AND type='l'"); - - $plugins->run_hooks("admin_unlock_end"); - - // If we're good to go - if($db->fetch_field($query, "num") > 0) - { - $db->delete_query("awaitingactivation", "uid='".(int)$user['uid']."' AND code='".$db->escape_string($mybb->input['token'])."' AND type='l'"); - $db->update_query("adminoptions", array('loginlockoutexpiry' => 0, 'loginattempts' => 0), "uid='".(int)$user['uid']."'"); - - admin_redirect("index.php"); - } - else - { - $error = $lang->error_invalid_token; - } - } - - $default_page->show_lockout_unlock($error, 'error'); -} -elseif($mybb->input['do'] == "login") -{ - $plugins->run_hooks("admin_login"); - - // We have an adminsid cookie? - if(isset($mybb->cookies['adminsid'])) - { - // Check admin session - $query = $db->simple_select("adminsessions", "sid", "sid='".$db->escape_string($mybb->cookies['adminsid'])."'"); - $admin_session = $db->fetch_field($query, 'sid'); - - // Session found: redirect to index - if($admin_session) - { - admin_redirect("index.php"); - } - } - - require_once MYBB_ROOT."inc/datahandlers/login.php"; - $loginhandler = new LoginDataHandler("get"); - - // Determine login method - $login_lang_string = $lang->error_invalid_username_password; - switch($mybb->settings['username_method']) - { - case 0: // Username only - $login_lang_string = $lang->sprintf($login_lang_string, $lang->login_username); - break; - case 1: // Email only - $login_lang_string = $lang->sprintf($login_lang_string, $lang->login_email); - break; - case 2: // Username and email - default: - $login_lang_string = $lang->sprintf($login_lang_string, $lang->login_username_and_password); - break; - } - - // Validate PIN first - if(!empty($config['secret_pin']) && (empty($mybb->input['pin']) || $mybb->input['pin'] != $config['secret_pin'])) - { - $login_user = get_user_by_username($mybb->input['username'], array('fields' => array('email', 'username'))); - - $plugins->run_hooks("admin_login_incorrect_pin"); - - if($login_user['uid'] > 0) - { - $db->update_query("adminoptions", array("loginattempts" => "loginattempts+1"), "uid='".(int)$login_user['uid']."'", '', true); - } - - $loginattempts = login_attempt_check_acp($login_user['uid'], true); - - // Have we attempted too many times? - if($loginattempts['loginattempts'] > 0) - { - // Have we set an expiry yet? - if($loginattempts['loginlockoutexpiry'] == 0) - { - $db->update_query("adminoptions", array("loginlockoutexpiry" => TIME_NOW+((int)$mybb->settings['loginattemptstimeout']*60)), "uid='".(int)$login_user['uid']."'"); - } - - // Did we hit lockout for the first time? Send the unlock email to the administrator - if($loginattempts['loginattempts'] == $mybb->settings['maxloginattempts']) - { - $db->delete_query("awaitingactivation", "uid='".(int)$login_user['uid']."' AND type='l'"); - $lockout_array = array( - "uid" => $login_user['uid'], - "dateline" => TIME_NOW, - "code" => random_str(), - "type" => "l" - ); - $db->insert_query("awaitingactivation", $lockout_array); - - $subject = $lang->sprintf($lang->locked_out_subject, $mybb->settings['bbname']); - $message = $lang->sprintf($lang->locked_out_message, htmlspecialchars_uni($mybb->input['username']), $mybb->settings['bbname'], $mybb->settings['maxloginattempts'], $mybb->settings['bburl'], $mybb->config['admin_dir'], $lockout_array['code'], $lockout_array['uid']); - my_mail($login_user['email'], $subject, $message); - } - - log_admin_action(array( - 'type' => 'admin_locked_out', - 'uid' => (int)$login_user['uid'], - 'username' => $login_user['username'], - ) - ); - - $default_page->show_lockedout(); - } - else - { - $default_page->show_login($login_lang_string, "error"); - } - } - - $loginhandler->set_data(array( - 'username' => $mybb->input['username'], - 'password' => $mybb->input['password'] - )); - - if($loginhandler->validate_login() == true) - { - $mybb->user = get_user($loginhandler->login_data['uid']); - } - - if($mybb->user['uid']) - { - if(login_attempt_check_acp($mybb->user['uid']) == true) - { - log_admin_action(array( - 'type' => 'admin_locked_out', - 'uid' => (int)$mybb->user['uid'], - 'username' => $mybb->user['username'], - ) - ); - - $default_page->show_lockedout(); - } - - $plugins->run_hooks("admin_login_success"); - - $db->delete_query("adminsessions", "uid='{$mybb->user['uid']}'"); - - $sid = md5(random_str(50)); - - $useragent = $_SERVER['HTTP_USER_AGENT']; - if(my_strlen($useragent) > 200) - { - $useragent = my_substr($useragent, 0, 200); - } - - // Create a new admin session for this user - $admin_session = array( - "sid" => $sid, - "uid" => $mybb->user['uid'], - "loginkey" => $mybb->user['loginkey'], - "ip" => $db->escape_binary(my_inet_pton(get_ip())), - "dateline" => TIME_NOW, - "lastactive" => TIME_NOW, - "data" => my_serialize(array()), - "useragent" => $db->escape_string($useragent), - ); - $db->insert_query("adminsessions", $admin_session); - $admin_session['data'] = array(); - - // Only reset the loginattempts when we're really logged in and the user doesn't need to enter a 2fa code - $query = $db->simple_select("adminoptions", "authsecret", "uid='{$mybb->user['uid']}'"); - $admin_options = $db->fetch_array($query); - if(empty($admin_options['authsecret'])) - { - $db->update_query("adminoptions", array("loginattempts" => 0, "loginlockoutexpiry" => 0), "uid='{$mybb->user['uid']}'"); - } - - my_setcookie("adminsid", $sid, '', true); - my_setcookie('acploginattempts', 0); - $post_verify = false; - - $mybb->request_method = "get"; - - if(!empty($mybb->input['module'])) - { - // $query_string should contain the module - $query_string = '?module='.htmlspecialchars_uni($mybb->input['module']); - - // Now we look for any paramters passed in $_SERVER['QUERY_STRING'] - if($_SERVER['QUERY_STRING']) - { - $qstring = '?'.preg_replace('#adminsid=(.{32})#i', '', $_SERVER['QUERY_STRING']); - $qstring = str_replace('action=logout', '', $qstring); - $qstring = preg_replace('#&+#', '&', $qstring); - $qstring = str_replace('?&', '?', $qstring); - - // So what do we do? We know that parameters are devided by ampersands - // That means we must get to work! - $parameters = explode('&', $qstring); - - // Remove our first member if it's for the module - if(substr($parameters[0], 0, 8) == '?module=') - { - unset($parameters[0]); - } - - foreach($parameters as $key => $param) - { - $params = explode("=", $param); - - $query_string .= '&'.htmlspecialchars_uni($params[0])."=".htmlspecialchars_uni($params[1]); - } - } - - admin_redirect("index.php".$query_string); - } - } - else - { - $login_user = get_user_by_username($mybb->input['username'], array('fields' => array('email', 'username'))); - - $plugins->run_hooks("admin_login_fail"); - - if($login_user['uid'] > 0) - { - $db->update_query("adminoptions", array("loginattempts" => "loginattempts+1"), "uid='".(int)$login_user['uid']."'", '', true); - } - - $loginattempts = login_attempt_check_acp($login_user['uid'], true); - - // Have we attempted too many times? - if($loginattempts['loginattempts'] > 0) - { - // Have we set an expiry yet? - if($loginattempts['loginlockoutexpiry'] == 0) - { - $db->update_query("adminoptions", array("loginlockoutexpiry" => TIME_NOW+((int)$mybb->settings['loginattemptstimeout']*60)), "uid='".(int)$login_user['uid']."'"); - } - - $plugins->run_hooks("admin_login_lockout"); - - // Did we hit lockout for the first time? Send the unlock email to the administrator - if($loginattempts['loginattempts'] == $mybb->settings['maxloginattempts']) - { - $db->delete_query("awaitingactivation", "uid='".(int)$login_user['uid']."' AND type='l'"); - $lockout_array = array( - "uid" => $login_user['uid'], - "dateline" => TIME_NOW, - "code" => random_str(), - "type" => "l" - ); - $db->insert_query("awaitingactivation", $lockout_array); - - $subject = $lang->sprintf($lang->locked_out_subject, $mybb->settings['bbname']); - $message = $lang->sprintf($lang->locked_out_message, htmlspecialchars_uni($mybb->input['username']), $mybb->settings['bbname'], $mybb->settings['maxloginattempts'], $mybb->settings['bburl'], $mybb->config['admin_dir'], $lockout_array['code'], $lockout_array['uid']); - my_mail($login_user['email'], $subject, $message); - } - - log_admin_action(array( - 'type' => 'admin_locked_out', - 'uid' => (int)$login_user['uid'], - 'username' => $login_user['username'], - ) - ); - - $default_page->show_lockedout(); - } - - $fail_check = 1; - } -} -else -{ - // No admin session - show message on the login screen - if(!isset($mybb->cookies['adminsid'])) - { - $login_message = ""; - } - // Otherwise, check admin session - else - { - $query = $db->simple_select("adminsessions", "*", "sid='".$db->escape_string($mybb->cookies['adminsid'])."'"); - $admin_session = $db->fetch_array($query); - - // No matching admin session found - show message on login screen - if(!$admin_session['sid']) - { - $login_message = $lang->error_invalid_admin_session; - } - else - { - $admin_session['data'] = my_unserialize($admin_session['data']); - - // Fetch the user from the admin session - $mybb->user = get_user($admin_session['uid']); - - // Login key has changed - force logout - if(!$mybb->user['uid'] || $mybb->user['loginkey'] !== $admin_session['loginkey']) - { - unset($mybb->user); - } - else - { - // Admin CP sessions 2 hours old are expired - if($admin_session['lastactive'] < TIME_NOW-7200) - { - $login_message = $lang->error_admin_session_expired; - $db->delete_query("adminsessions", "sid='".$db->escape_string($mybb->cookies['adminsid'])."'"); - unset($mybb->user); - } - // If IP matching is set - check IP address against the session IP - else if(ADMIN_IP_SEGMENTS > 0 && strpos($ip_address, ':') === false) - { - $exploded_ip = explode(".", $ip_address); - $exploded_admin_ip = explode(".", my_inet_ntop($admin_session['ip'])); - $matches = 0; - $valid_ip = false; - for($i = 0; $i < ADMIN_IP_SEGMENTS; ++$i) - { - if($exploded_ip[$i] == $exploded_admin_ip[$i]) - { - ++$matches; - } - if($matches == ADMIN_IP_SEGMENTS) - { - $valid_ip = true; - break; - } - } - - // IP doesn't match properly - show message on logon screen - if(!$valid_ip) - { - $login_message = $lang->error_invalid_ip; - unset($mybb->user); - } - } - else if(ADMIN_IPV6_SEGMENTS > 0 && strpos($ip_address, ':') !== false) - { - // Expand IPv6 addresses - $hex = unpack("H*hex", my_inet_pton($ip_address)); - $expanded_ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1); - $hex_admin = unpack("H*hex", $admin_session['ip']); - $expanded_admin_ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex_admin['hex']), 0, -1); - - $exploded_ip = explode(":", $expanded_ip); - $exploded_admin_ip = explode(":", $expanded_admin_ip); - $matches = 0; - $valid_ip = false; - for($i = 0; $i < ADMIN_IPV6_SEGMENTS; ++$i) - { - if($exploded_ip[$i] == $exploded_admin_ip[$i]) - { - ++$matches; - } - if($matches == ADMIN_IPV6_SEGMENTS) - { - $valid_ip = true; - break; - } - } - - // IP doesn't match properly - show message on logon screen - if(!$valid_ip) - { - $login_message = $lang->error_invalid_ip; - unset($mybb->user); - } - } - } - } - } -} - -if($mybb->input['action'] == "logout" && $mybb->user) -{ - $plugins->run_hooks("admin_logout"); - - if(verify_post_check($mybb->input['my_post_key'])) - { - $db->delete_query("adminsessions", "sid='".$db->escape_string($mybb->cookies['adminsid'])."'"); - my_unsetcookie('adminsid'); - $logged_out = true; - } -} - -if(!isset($mybb->user['usergroup'])) -{ - $mybbgroups = 1; -} -else -{ - $mybbgroups = $mybb->user['usergroup'].",".$mybb->user['additionalgroups']; -} -$mybb->usergroup = usergroup_permissions($mybbgroups); - -$is_super_admin = is_super_admin($mybb->user['uid']); - -if($mybb->usergroup['cancp'] != 1 && !$is_super_admin || !$mybb->user['uid']) -{ - $uid = 0; - if(isset($mybb->user['uid'])) - { - $uid = (int)$mybb->user['uid']; - } - $db->delete_query("adminsessions", "uid = '{$uid}'"); - unset($mybb->user); - my_unsetcookie('adminsid'); -} - -if(!empty($mybb->user['uid'])) -{ - $query = $db->simple_select("adminoptions", "*", "uid='".$mybb->user['uid']."'"); - $admin_options = $db->fetch_array($query); - - if(!empty($admin_options['cplanguage']) && file_exists(MYBB_ROOT."inc/languages/".$admin_options['cplanguage']."/admin/home_dashboard.lang.php")) - { - $cp_language = $admin_options['cplanguage']; - $lang->set_language($cp_language, "admin"); - $lang->load("global"); // Reload global language vars - $lang->load("messages", true); - } - - if(!empty($admin_options['cpstyle']) && file_exists(MYBB_ADMIN_DIR."/styles/{$admin_options['cpstyle']}/main.css")) - { - $cp_style = $admin_options['cpstyle']; - } - - // Update the session information in the DB - if($admin_session['sid']) - { - $db->update_query("adminsessions", array('lastactive' => TIME_NOW, 'ip' => $db->escape_binary(my_inet_pton(get_ip()))), "sid='".$db->escape_string($admin_session['sid'])."'"); - } - - // Fetch administrator permissions - $mybb->admin['permissions'] = get_admin_permissions($mybb->user['uid']); -} - -// Include the layout generation class overrides for this style -if(file_exists(MYBB_ADMIN_DIR."/styles/{$cp_style}/style.php")) -{ - require_once MYBB_ADMIN_DIR."/styles/{$cp_style}/style.php"; -} - -// Check if any of the layout generation classes we can override exist in the style file -$classes = array( - "Page" => "DefaultPage", - "SidebarItem" => "DefaultSidebarItem", - "PopupMenu" => "DefaultPopupMenu", - "Table" => "DefaultTable", - "Form" => "DefaultForm", - "FormContainer" => "DefaultFormContainer" -); -foreach($classes as $style_name => $default_name) -{ - // Style does not have this layout generation class, create it - if(!class_exists($style_name)) - { - eval("class {$style_name} extends {$default_name} { }"); - } -} - -$page = new Page; -$page->style = $cp_style; - -// Do not have a valid Admin user, throw back to login page. -if(!isset($mybb->user['uid']) || $logged_out == true) -{ - if($logged_out == true) - { - $page->show_login($lang->success_logged_out); - } - elseif($fail_check == 1) - { - $page->show_login($login_lang_string, "error"); - } - else - { - // If we have this error while retreiving it from an AJAX request, then send back a nice error - if(isset($mybb->input['ajax']) && $mybb->input['ajax'] == 1) - { - echo json_encode(array("errors" => array("login"))); - exit; - } - $page->show_login($login_message, "error"); - } -} - -// Time to check for Two-Factor Authentication -// First: are we trying to verify a code? -if($mybb->input['do'] == "do_2fa" && $mybb->request_method == "post") -{ - // Test whether it's a recovery code - $recovery = false; - $codes = my_unserialize($admin_options['recovery_codes']); - if(!empty($codes) && in_array($mybb->get_input('code'), $codes)) - { - $recovery = true; - $ncodes = array_diff($codes, array($mybb->input['code'])); // Removes our current code from the codes array - $db->update_query("adminoptions", array("recovery_codes" => $db->escape_string(my_serialize($ncodes))), "uid='{$mybb->user['uid']}'"); - - if(count($ncodes) == 0) - { - flash_message($lang->my2fa_no_codes, "error"); - } - } - - // Validate the code - require_once MYBB_ROOT."inc/3rdparty/2fa/GoogleAuthenticator.php"; - $auth = new PHPGangsta_GoogleAuthenticator; - - $test = $auth->verifyCode($admin_options['authsecret'], $mybb->get_input('code')); - - // Either the code was okay or it was a recovery code - if($test === true || $recovery === true) - { - // Correct code -> session authenticated - $db->update_query("adminsessions", array("authenticated" => 1), "sid='".$db->escape_string($mybb->cookies['adminsid'])."'"); - $admin_session['authenticated'] = 1; - $db->update_query("adminoptions", array("loginattempts" => 0, "loginlockoutexpiry" => 0), "uid='{$mybb->user['uid']}'"); - my_setcookie('acploginattempts', 0); - // post would result in an authorization code mismatch error - $mybb->request_method = "get"; - } - else - { - // Wrong code -> close session (aka logout) - $db->delete_query("adminsessions", "sid='".$db->escape_string($mybb->cookies['adminsid'])."'"); - my_unsetcookie('adminsid'); - - // Now test whether we need to lock this guy completly - $db->update_query("adminoptions", array("loginattempts" => "loginattempts+1"), "uid='{$mybb->user['uid']}'", '', true); - - $loginattempts = login_attempt_check_acp($mybb->user['uid'], true); - - // Have we attempted too many times? - if($loginattempts['loginattempts'] > 0) - { - // Have we set an expiry yet? - if($loginattempts['loginlockoutexpiry'] == 0) - { - $db->update_query("adminoptions", array("loginlockoutexpiry" => TIME_NOW+((int)$mybb->settings['loginattemptstimeout']*60)), "uid='{$mybb->user['uid']}'"); - } - - // Did we hit lockout for the first time? Send the unlock email to the administrator - if($loginattempts['loginattempts'] == $mybb->settings['maxloginattempts']) - { - $db->delete_query("awaitingactivation", "uid='{$mybb->user['uid']}' AND type='l'"); - $lockout_array = array( - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "code" => random_str(), - "type" => "l" - ); - $db->insert_query("awaitingactivation", $lockout_array); - - $subject = $lang->sprintf($lang->locked_out_subject, $mybb->settings['bbname']); - $message = $lang->sprintf($lang->locked_out_message, htmlspecialchars_uni($mybb->user['username']), $mybb->settings['bbname'], $mybb->settings['maxloginattempts'], $mybb->settings['bburl'], $mybb->config['admin_dir'], $lockout_array['code'], $lockout_array['uid']); - my_mail($mybb->user['email'], $subject, $message); - } - - log_admin_action(array( - 'type' => 'admin_locked_out', - 'uid' => $mybb->user['uid'], - 'username' => $mybb->user['username'], - ) - ); - - $page->show_lockedout(); - } - - // Still here? Show a custom login page - $page->show_login($lang->my2fa_failed, "error"); - } -} - -// Show our 2FA page -if(!empty($admin_options['authsecret']) && $admin_session['authenticated'] != 1) -{ - $page->show_2fa(); -} - -$page->add_breadcrumb_item($lang->home, "index.php"); - -// Begin dealing with the modules -$modules_dir = MYBB_ADMIN_DIR."modules"; -$dir = opendir($modules_dir); -while(($module = readdir($dir)) !== false) -{ - if(is_dir($modules_dir."/".$module) && !in_array($module, array(".", "..")) && file_exists($modules_dir."/".$module."/module_meta.php")) - { - require_once $modules_dir."/".$module."/module_meta.php"; - - // Need to always load it for admin permissions / quick access - $lang->load($module."_module_meta", false, true); - - $has_permission = false; - if(function_exists($module."_admin_permissions")) - { - if(isset($mybb->admin['permissions'][$module]) || $is_super_admin == true) - { - $has_permission = true; - } - } - // This module doesn't support permissions - else - { - $has_permission = true; - } - - // Do we have permissions to run this module (Note: home is accessible by all) - if($module == "home" || $has_permission == true) - { - $meta_function = $module."_meta"; - $initialized = $meta_function(); - if($initialized == true) - { - $modules[$module] = 1; - } - } - else - { - $modules[$module] = 0; - } - } -} - -$modules = $plugins->run_hooks("admin_tabs", $modules); - -closedir($dir); - -if(strpos($mybb->input['module'], "/") !== false) -{ - $current_module = explode("/", $mybb->input['module'], 2); -} -else -{ - $current_module = explode("-", $mybb->input['module'], 2); -} - -if(!isset($current_module[1])) -{ - $current_module[1] = 'home'; -} - -if($mybb->input['module'] && isset($modules[$current_module[0]])) -{ - $run_module = $current_module[0]; -} -else -{ - $run_module = "home"; -} - -$action_handler = $run_module."_action_handler"; -$action_file = $action_handler($current_module[1]); - -// Set our POST validation code here -$mybb->post_code = generate_post_check(); - -if($run_module != "home") -{ - check_admin_permissions(array('module' => $page->active_module, 'action' => $page->active_action)); -} - -// Only POST actions with a valid post code can modify information. Here we check if the incoming request is a POST and if that key is valid. -$post_check_ignores = array( - "example/page" => array("action") -); // An array of modules/actions to ignore POST checks for. - -if($mybb->request_method == "post") -{ - if(in_array($mybb->input['module'], $post_check_ignores)) - { - $k = array_search($mybb->input['module'], $post_check_ignores); - if(in_array($mybb->input['action'], $post_check_ignores[$k])) - { - $post_verify = false; - } - } - - if($post_verify == true) - { - // If the post key does not match we switch the action to GET and set a message to show the user - if(!isset($mybb->input['my_post_key']) || $mybb->post_code !== $mybb->input['my_post_key']) - { - $mybb->request_method = "get"; - $page->show_post_verify_error = true; - } - } -} - -$lang->load("{$run_module}_{$page->active_action}", false, true); - -$plugins->run_hooks("admin_load"); - -require $modules_dir."/".$run_module."/".$action_file; - diff --git a/html/forums/admin/jscripts/admincp.js b/html/forums/admin/jscripts/admincp.js deleted file mode 100644 index 7d4d810..0000000 --- a/html/forums/admin/jscripts/admincp.js +++ /dev/null @@ -1,23 +0,0 @@ -var AdminCP = { - init: function() - { - }, - - deleteConfirmation: function(element, message) - { - if(!element) return false; - confirmReturn = confirm(message); - if(confirmReturn == true) - { - form = $("
", { method: "post", action: element.href, style: "display: none;" }); - $("body").append(form); - form.submit(); - } - return false; - } -}; - -$(function() -{ - AdminCP.init(); -}); \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/LICENSE b/html/forums/admin/jscripts/codemirror/LICENSE deleted file mode 100644 index 3c454bd..0000000 --- a/html/forums/admin/jscripts/codemirror/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2014 by Marijn Haverbeke and others - -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. diff --git a/html/forums/admin/jscripts/codemirror/addon/dialog/dialog-mybb.css b/html/forums/admin/jscripts/codemirror/addon/dialog/dialog-mybb.css deleted file mode 100644 index 6d2c0ea..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/dialog/dialog-mybb.css +++ /dev/null @@ -1,32 +0,0 @@ -.CodeMirror-dialog { - position: absolute; - left: 0; right: 0; - background: #1F4661; - z-index: 15; - padding: .1em .8em; - overflow: hidden; - color: #fff; -} - -.CodeMirror-dialog-top { - border-bottom: 1px solid #3E7087; - top: 0; -} - -.CodeMirror-dialog-bottom { - border-top: 1px solid #3E7087; - bottom: 0; -} - -.CodeMirror-dialog input { - border: none; - outline: none; - background: transparent; - width: 20em; - color: inherit; - font-family: monospace; -} - -.CodeMirror-dialog button { - font-size: 70%; -} diff --git a/html/forums/admin/jscripts/codemirror/addon/dialog/dialog.css b/html/forums/admin/jscripts/codemirror/addon/dialog/dialog.css deleted file mode 100644 index 43e1212..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/dialog/dialog.css +++ /dev/null @@ -1,32 +0,0 @@ -.CodeMirror-dialog { - position: absolute; - left: 0; right: 0; - background: white; - z-index: 15; - padding: .1em .8em; - overflow: hidden; - color: #333; -} - -.CodeMirror-dialog-top { - border-bottom: 1px solid #eee; - top: 0; -} - -.CodeMirror-dialog-bottom { - border-top: 1px solid #eee; - bottom: 0; -} - -.CodeMirror-dialog input { - border: none; - outline: none; - background: transparent; - width: 20em; - color: inherit; - font-family: monospace; -} - -.CodeMirror-dialog button { - font-size: 70%; -} diff --git a/html/forums/admin/jscripts/codemirror/addon/dialog/dialog.js b/html/forums/admin/jscripts/codemirror/addon/dialog/dialog.js deleted file mode 100644 index e0e8ad4..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/dialog/dialog.js +++ /dev/null @@ -1,155 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Open simple dialogs on top of an editor. Relies on dialog.css. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - function dialogDiv(cm, template, bottom) { - var wrap = cm.getWrapperElement(); - var dialog; - dialog = wrap.appendChild(document.createElement("div")); - if (bottom) - dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; - else - dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; - - if (typeof template == "string") { - dialog.innerHTML = template; - } else { // Assuming it's a detached DOM element. - dialog.appendChild(template); - } - return dialog; - } - - function closeNotification(cm, newVal) { - if (cm.state.currentNotificationClose) - cm.state.currentNotificationClose(); - cm.state.currentNotificationClose = newVal; - } - - CodeMirror.defineExtension("openDialog", function(template, callback, options) { - if (!options) options = {}; - - closeNotification(this, null); - - var dialog = dialogDiv(this, template, options.bottom); - var closed = false, me = this; - function close(newVal) { - if (typeof newVal == 'string') { - inp.value = newVal; - } else { - if (closed) return; - closed = true; - dialog.parentNode.removeChild(dialog); - me.focus(); - - if (options.onClose) options.onClose(dialog); - } - } - - var inp = dialog.getElementsByTagName("input")[0], button; - if (inp) { - if (options.value) { - inp.value = options.value; - inp.select(); - } - - if (options.onInput) - CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); - if (options.onKeyUp) - CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); - - CodeMirror.on(inp, "keydown", function(e) { - if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } - if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { - inp.blur(); - CodeMirror.e_stop(e); - close(); - } - if (e.keyCode == 13) callback(inp.value, e); - }); - - if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close); - - inp.focus(); - } else if (button = dialog.getElementsByTagName("button")[0]) { - CodeMirror.on(button, "click", function() { - close(); - me.focus(); - }); - - if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); - - button.focus(); - } - return close; - }); - - CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { - closeNotification(this, null); - var dialog = dialogDiv(this, template, options && options.bottom); - var buttons = dialog.getElementsByTagName("button"); - var closed = false, me = this, blurring = 1; - function close() { - if (closed) return; - closed = true; - dialog.parentNode.removeChild(dialog); - me.focus(); - } - buttons[0].focus(); - for (var i = 0; i < buttons.length; ++i) { - var b = buttons[i]; - (function(callback) { - CodeMirror.on(b, "click", function(e) { - CodeMirror.e_preventDefault(e); - close(); - if (callback) callback(me); - }); - })(callbacks[i]); - CodeMirror.on(b, "blur", function() { - --blurring; - setTimeout(function() { if (blurring <= 0) close(); }, 200); - }); - CodeMirror.on(b, "focus", function() { ++blurring; }); - } - }); - - /* - * openNotification - * Opens a notification, that can be closed with an optional timer - * (default 5000ms timer) and always closes on click. - * - * If a notification is opened while another is opened, it will close the - * currently opened one and open the new one immediately. - */ - CodeMirror.defineExtension("openNotification", function(template, options) { - closeNotification(this, close); - var dialog = dialogDiv(this, template, options && options.bottom); - var closed = false, doneTimer; - var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; - - function close() { - if (closed) return; - closed = true; - clearTimeout(doneTimer); - dialog.parentNode.removeChild(dialog); - } - - CodeMirror.on(dialog, 'click', function(e) { - CodeMirror.e_preventDefault(e); - close(); - }); - - if (duration) - doneTimer = setTimeout(close, duration); - - return close; - }); -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/dialog/index.html b/html/forums/admin/jscripts/codemirror/addon/dialog/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/dialog/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/brace-fold.js b/html/forums/admin/jscripts/codemirror/addon/fold/brace-fold.js deleted file mode 100644 index 1605f6c..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/brace-fold.js +++ /dev/null @@ -1,105 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("fold", "brace", function(cm, start) { - var line = start.line, lineText = cm.getLine(line); - var startCh, tokenType; - - function findOpening(openCh) { - for (var at = start.ch, pass = 0;;) { - var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1); - if (found == -1) { - if (pass == 1) break; - pass = 1; - at = lineText.length; - continue; - } - if (pass == 1 && found < start.ch) break; - tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); - if (!/^(comment|string)/.test(tokenType)) return found + 1; - at = found - 1; - } - } - - var startToken = "{", endToken = "}", startCh = findOpening("{"); - if (startCh == null) { - startToken = "[", endToken = "]"; - startCh = findOpening("["); - } - - if (startCh == null) return; - var count = 1, lastLine = cm.lastLine(), end, endCh; - outer: for (var i = line; i <= lastLine; ++i) { - var text = cm.getLine(i), pos = i == line ? startCh : 0; - for (;;) { - var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); - if (nextOpen < 0) nextOpen = text.length; - if (nextClose < 0) nextClose = text.length; - pos = Math.min(nextOpen, nextClose); - if (pos == text.length) break; - if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) { - if (pos == nextOpen) ++count; - else if (!--count) { end = i; endCh = pos; break outer; } - } - ++pos; - } - } - if (end == null || line == end && endCh == startCh) return; - return {from: CodeMirror.Pos(line, startCh), - to: CodeMirror.Pos(end, endCh)}; -}); - -CodeMirror.registerHelper("fold", "import", function(cm, start) { - function hasImport(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); - if (start.type != "keyword" || start.string != "import") return null; - // Now find closing semicolon, return its position - for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { - var text = cm.getLine(i), semi = text.indexOf(";"); - if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)}; - } - } - - var start = start.line, has = hasImport(start), prev; - if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1)) - return null; - for (var end = has.end;;) { - var next = hasImport(end.line + 1); - if (next == null) break; - end = next.end; - } - return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end}; -}); - -CodeMirror.registerHelper("fold", "include", function(cm, start) { - function hasInclude(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); - if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; - } - - var start = start.line, has = hasInclude(start); - if (has == null || hasInclude(start - 1) != null) return null; - for (var end = start;;) { - var next = hasInclude(end + 1); - if (next == null) break; - ++end; - } - return {from: CodeMirror.Pos(start, has + 1), - to: cm.clipPos(CodeMirror.Pos(end))}; -}); - -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/comment-fold.js b/html/forums/admin/jscripts/codemirror/addon/fold/comment-fold.js deleted file mode 100644 index b75db7e..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/comment-fold.js +++ /dev/null @@ -1,57 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerGlobalHelper("fold", "comment", function(mode) { - return mode.blockCommentStart && mode.blockCommentEnd; -}, function(cm, start) { - var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd; - if (!startToken || !endToken) return; - var line = start.line, lineText = cm.getLine(line); - - var startCh; - for (var at = start.ch, pass = 0;;) { - var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1); - if (found == -1) { - if (pass == 1) return; - pass = 1; - at = lineText.length; - continue; - } - if (pass == 1 && found < start.ch) return; - if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)))) { - startCh = found + startToken.length; - break; - } - at = found - 1; - } - - var depth = 1, lastLine = cm.lastLine(), end, endCh; - outer: for (var i = line; i <= lastLine; ++i) { - var text = cm.getLine(i), pos = i == line ? startCh : 0; - for (;;) { - var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); - if (nextOpen < 0) nextOpen = text.length; - if (nextClose < 0) nextClose = text.length; - pos = Math.min(nextOpen, nextClose); - if (pos == text.length) break; - if (pos == nextOpen) ++depth; - else if (!--depth) { end = i; endCh = pos; break outer; } - ++pos; - } - } - if (end == null || line == end && endCh == startCh) return; - return {from: CodeMirror.Pos(line, startCh), - to: CodeMirror.Pos(end, endCh)}; -}); - -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/foldcode.js b/html/forums/admin/jscripts/codemirror/addon/fold/foldcode.js deleted file mode 100644 index 62911f9..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/foldcode.js +++ /dev/null @@ -1,149 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - function doFold(cm, pos, options, force) { - if (options && options.call) { - var finder = options; - options = null; - } else { - var finder = getOption(cm, options, "rangeFinder"); - } - if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); - var minSize = getOption(cm, options, "minFoldSize"); - - function getRange(allowFolded) { - var range = finder(cm, pos); - if (!range || range.to.line - range.from.line < minSize) return null; - var marks = cm.findMarksAt(range.from); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold && force !== "fold") { - if (!allowFolded) return null; - range.cleared = true; - marks[i].clear(); - } - } - return range; - } - - var range = getRange(true); - if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { - pos = CodeMirror.Pos(pos.line - 1, 0); - range = getRange(false); - } - if (!range || range.cleared || force === "unfold") return; - - var myWidget = makeWidget(cm, options); - CodeMirror.on(myWidget, "mousedown", function(e) { - myRange.clear(); - CodeMirror.e_preventDefault(e); - }); - var myRange = cm.markText(range.from, range.to, { - replacedWith: myWidget, - clearOnEnter: true, - __isFold: true - }); - myRange.on("clear", function(from, to) { - CodeMirror.signal(cm, "unfold", cm, from, to); - }); - CodeMirror.signal(cm, "fold", cm, range.from, range.to); - } - - function makeWidget(cm, options) { - var widget = getOption(cm, options, "widget"); - if (typeof widget == "string") { - var text = document.createTextNode(widget); - widget = document.createElement("span"); - widget.appendChild(text); - widget.className = "CodeMirror-foldmarker"; - } - return widget; - } - - // Clumsy backwards-compatible interface - CodeMirror.newFoldFunction = function(rangeFinder, widget) { - return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; - }; - - // New-style interface - CodeMirror.defineExtension("foldCode", function(pos, options, force) { - doFold(this, pos, options, force); - }); - - CodeMirror.defineExtension("isFolded", function(pos) { - var marks = this.findMarksAt(pos); - for (var i = 0; i < marks.length; ++i) - if (marks[i].__isFold) return true; - }); - - CodeMirror.commands.toggleFold = function(cm) { - cm.foldCode(cm.getCursor()); - }; - CodeMirror.commands.fold = function(cm) { - cm.foldCode(cm.getCursor(), null, "fold"); - }; - CodeMirror.commands.unfold = function(cm) { - cm.foldCode(cm.getCursor(), null, "unfold"); - }; - CodeMirror.commands.foldAll = function(cm) { - cm.operation(function() { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) - cm.foldCode(CodeMirror.Pos(i, 0), null, "fold"); - }); - }; - CodeMirror.commands.unfoldAll = function(cm) { - cm.operation(function() { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) - cm.foldCode(CodeMirror.Pos(i, 0), null, "unfold"); - }); - }; - - CodeMirror.registerHelper("fold", "combine", function() { - var funcs = Array.prototype.slice.call(arguments, 0); - return function(cm, start) { - for (var i = 0; i < funcs.length; ++i) { - var found = funcs[i](cm, start); - if (found) return found; - } - }; - }); - - CodeMirror.registerHelper("fold", "auto", function(cm, start) { - var helpers = cm.getHelpers(start, "fold"); - for (var i = 0; i < helpers.length; i++) { - var cur = helpers[i](cm, start); - if (cur) return cur; - } - }); - - var defaultOptions = { - rangeFinder: CodeMirror.fold.auto, - widget: "\u2194", - minFoldSize: 0, - scanUp: false - }; - - CodeMirror.defineOption("foldOptions", null); - - function getOption(cm, options, name) { - if (options && options[name] !== undefined) - return options[name]; - var editorOptions = cm.options.foldOptions; - if (editorOptions && editorOptions[name] !== undefined) - return editorOptions[name]; - return defaultOptions[name]; - } - - CodeMirror.defineExtension("foldOption", function(options, name) { - return getOption(this, options, name); - }); -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.css b/html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.css deleted file mode 100644 index 3655e7d..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.css +++ /dev/null @@ -1,20 +0,0 @@ -.CodeMirror-foldmarker { - color: blue; - text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; - font-family: arial; - line-height: .3; - cursor: pointer; -} -.CodeMirror-foldgutter { - width: .7em; -} -.CodeMirror-foldgutter-open, -.CodeMirror-foldgutter-folded { - cursor: pointer; -} -.CodeMirror-foldgutter-open:after { - content: "\25BE"; -} -.CodeMirror-foldgutter-folded:after { - content: "\25B8"; -} diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.js b/html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.js deleted file mode 100644 index 3359476..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/foldgutter.js +++ /dev/null @@ -1,136 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./foldcode")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./foldcode"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("foldGutter", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.clearGutter(cm.state.foldGutter.options.gutter); - cm.state.foldGutter = null; - cm.off("gutterClick", onGutterClick); - cm.off("change", onChange); - cm.off("viewportChange", onViewportChange); - cm.off("fold", onFold); - cm.off("unfold", onFold); - cm.off("swapDoc", updateInViewport); - } - if (val) { - cm.state.foldGutter = new State(parseOptions(val)); - updateInViewport(cm); - cm.on("gutterClick", onGutterClick); - cm.on("change", onChange); - cm.on("viewportChange", onViewportChange); - cm.on("fold", onFold); - cm.on("unfold", onFold); - cm.on("swapDoc", updateInViewport); - } - }); - - var Pos = CodeMirror.Pos; - - function State(options) { - this.options = options; - this.from = this.to = 0; - } - - function parseOptions(opts) { - if (opts === true) opts = {}; - if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; - if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; - if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; - return opts; - } - - function isFolded(cm, line) { - var marks = cm.findMarksAt(Pos(line)); - for (var i = 0; i < marks.length; ++i) - if (marks[i].__isFold && marks[i].find().from.line == line) return true; - } - - function marker(spec) { - if (typeof spec == "string") { - var elt = document.createElement("div"); - elt.className = spec + " CodeMirror-guttermarker-subtle"; - return elt; - } else { - return spec.cloneNode(true); - } - } - - function updateFoldInfo(cm, from, to) { - var opts = cm.state.foldGutter.options, cur = from; - var minSize = cm.foldOption(opts, "minFoldSize"); - var func = cm.foldOption(opts, "rangeFinder"); - cm.eachLine(from, to, function(line) { - var mark = null; - if (isFolded(cm, cur)) { - mark = marker(opts.indicatorFolded); - } else { - var pos = Pos(cur, 0); - var range = func && func(cm, pos); - if (range && range.to.line - range.from.line >= minSize) - mark = marker(opts.indicatorOpen); - } - cm.setGutterMarker(line, opts.gutter, mark); - ++cur; - }); - } - - function updateInViewport(cm) { - var vp = cm.getViewport(), state = cm.state.foldGutter; - if (!state) return; - cm.operation(function() { - updateFoldInfo(cm, vp.from, vp.to); - }); - state.from = vp.from; state.to = vp.to; - } - - function onGutterClick(cm, line, gutter) { - var opts = cm.state.foldGutter.options; - if (gutter != opts.gutter) return; - cm.foldCode(Pos(line, 0), opts.rangeFinder); - } - - function onChange(cm) { - var state = cm.state.foldGutter, opts = cm.state.foldGutter.options; - state.from = state.to = 0; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600); - } - - function onViewportChange(cm) { - var state = cm.state.foldGutter, opts = cm.state.foldGutter.options; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function() { - var vp = cm.getViewport(); - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { - updateInViewport(cm); - } else { - cm.operation(function() { - if (vp.from < state.from) { - updateFoldInfo(cm, vp.from, state.from); - state.from = vp.from; - } - if (vp.to > state.to) { - updateFoldInfo(cm, state.to, vp.to); - state.to = vp.to; - } - }); - } - }, opts.updateViewportTimeSpan || 400); - } - - function onFold(cm, from) { - var state = cm.state.foldGutter, line = from.line; - if (line >= state.from && line < state.to) - updateFoldInfo(cm, line, line + 1); - } -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/indent-fold.js b/html/forums/admin/jscripts/codemirror/addon/fold/indent-fold.js deleted file mode 100644 index e29f15e..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/indent-fold.js +++ /dev/null @@ -1,44 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("fold", "indent", function(cm, start) { - var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line); - if (!/\S/.test(firstLine)) return; - var getIndent = function(line) { - return CodeMirror.countColumn(line, null, tabSize); - }; - var myIndent = getIndent(firstLine); - var lastLineInFold = null; - // Go through lines until we find a line that definitely doesn't belong in - // the block we're folding, or to the end. - for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { - var curLine = cm.getLine(i); - var curIndent = getIndent(curLine); - if (curIndent > myIndent) { - // Lines with a greater indent are considered part of the block. - lastLineInFold = i; - } else if (!/\S/.test(curLine)) { - // Empty lines might be breaks within the block we're trying to fold. - } else { - // A non-empty line at an indent equal to or less than ours marks the - // start of another block. - break; - } - } - if (lastLineInFold) return { - from: CodeMirror.Pos(start.line, firstLine.length), - to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) - }; -}); - -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/index.html b/html/forums/admin/jscripts/codemirror/addon/fold/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/markdown-fold.js b/html/forums/admin/jscripts/codemirror/addon/fold/markdown-fold.js deleted file mode 100644 index ce84c94..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/markdown-fold.js +++ /dev/null @@ -1,49 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("fold", "markdown", function(cm, start) { - var maxDepth = 100; - - function isHeader(lineNo) { - var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); - return tokentype && /\bheader\b/.test(tokentype); - } - - function headerLevel(lineNo, line, nextLine) { - var match = line && line.match(/^#+/); - if (match && isHeader(lineNo)) return match[0].length; - match = nextLine && nextLine.match(/^[=\-]+\s*$/); - if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; - return maxDepth; - } - - var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); - var level = headerLevel(start.line, firstLine, nextLine); - if (level === maxDepth) return undefined; - - var lastLineNo = cm.lastLine(); - var end = start.line, nextNextLine = cm.getLine(end + 2); - while (end < lastLineNo) { - if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; - ++end; - nextLine = nextNextLine; - nextNextLine = cm.getLine(end + 2); - } - - return { - from: CodeMirror.Pos(start.line, firstLine.length), - to: CodeMirror.Pos(end, cm.getLine(end).length) - }; -}); - -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/fold/xml-fold.js b/html/forums/admin/jscripts/codemirror/addon/fold/xml-fold.js deleted file mode 100644 index 504727f..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/fold/xml-fold.js +++ /dev/null @@ -1,182 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var Pos = CodeMirror.Pos; - function cmp(a, b) { return a.line - b.line || a.ch - b.ch; } - - var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; - var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; - var xmlTagStart = new RegExp("<(/?)([" + nameStartChar + "][" + nameChar + "]*)", "g"); - - function Iter(cm, line, ch, range) { - this.line = line; this.ch = ch; - this.cm = cm; this.text = cm.getLine(line); - this.min = range ? range.from : cm.firstLine(); - this.max = range ? range.to - 1 : cm.lastLine(); - } - - function tagAt(iter, ch) { - var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch)); - return type && /\btag\b/.test(type); - } - - function nextLine(iter) { - if (iter.line >= iter.max) return; - iter.ch = 0; - iter.text = iter.cm.getLine(++iter.line); - return true; - } - function prevLine(iter) { - if (iter.line <= iter.min) return; - iter.text = iter.cm.getLine(--iter.line); - iter.ch = iter.text.length; - return true; - } - - function toTagEnd(iter) { - for (;;) { - var gt = iter.text.indexOf(">", iter.ch); - if (gt == -1) { if (nextLine(iter)) continue; else return; } - if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; } - var lastSlash = iter.text.lastIndexOf("/", gt); - var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); - iter.ch = gt + 1; - return selfClose ? "selfClose" : "regular"; - } - } - function toTagStart(iter) { - for (;;) { - var lt = iter.ch ? iter.text.lastIndexOf("<", iter.ch - 1) : -1; - if (lt == -1) { if (prevLine(iter)) continue; else return; } - if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; } - xmlTagStart.lastIndex = lt; - iter.ch = lt; - var match = xmlTagStart.exec(iter.text); - if (match && match.index == lt) return match; - } - } - - function toNextTag(iter) { - for (;;) { - xmlTagStart.lastIndex = iter.ch; - var found = xmlTagStart.exec(iter.text); - if (!found) { if (nextLine(iter)) continue; else return; } - if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; } - iter.ch = found.index + found[0].length; - return found; - } - } - function toPrevTag(iter) { - for (;;) { - var gt = iter.ch ? iter.text.lastIndexOf(">", iter.ch - 1) : -1; - if (gt == -1) { if (prevLine(iter)) continue; else return; } - if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; } - var lastSlash = iter.text.lastIndexOf("/", gt); - var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); - iter.ch = gt + 1; - return selfClose ? "selfClose" : "regular"; - } - } - - function findMatchingClose(iter, tag) { - var stack = []; - for (;;) { - var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0); - if (!next || !(end = toTagEnd(iter))) return; - if (end == "selfClose") continue; - if (next[1]) { // closing tag - for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) { - stack.length = i; - break; - } - if (i < 0 && (!tag || tag == next[2])) return { - tag: next[2], - from: Pos(startLine, startCh), - to: Pos(iter.line, iter.ch) - }; - } else { // opening tag - stack.push(next[2]); - } - } - } - function findMatchingOpen(iter, tag) { - var stack = []; - for (;;) { - var prev = toPrevTag(iter); - if (!prev) return; - if (prev == "selfClose") { toTagStart(iter); continue; } - var endLine = iter.line, endCh = iter.ch; - var start = toTagStart(iter); - if (!start) return; - if (start[1]) { // closing tag - stack.push(start[2]); - } else { // opening tag - for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) { - stack.length = i; - break; - } - if (i < 0 && (!tag || tag == start[2])) return { - tag: start[2], - from: Pos(iter.line, iter.ch), - to: Pos(endLine, endCh) - }; - } - } - } - - CodeMirror.registerHelper("fold", "xml", function(cm, start) { - var iter = new Iter(cm, start.line, 0); - for (;;) { - var openTag = toNextTag(iter), end; - if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return; - if (!openTag[1] && end != "selfClose") { - var start = Pos(iter.line, iter.ch); - var close = findMatchingClose(iter, openTag[2]); - return close && {from: start, to: close.from}; - } - } - }); - CodeMirror.findMatchingTag = function(cm, pos, range) { - var iter = new Iter(cm, pos.line, pos.ch, range); - if (iter.text.indexOf(">") == -1 && iter.text.indexOf("<") == -1) return; - var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch); - var start = end && toTagStart(iter); - if (!end || !start || cmp(iter, pos) > 0) return; - var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]}; - if (end == "selfClose") return {open: here, close: null, at: "open"}; - - if (start[1]) { // closing tag - return {open: findMatchingOpen(iter, start[2]), close: here, at: "close"}; - } else { // opening tag - iter = new Iter(cm, to.line, to.ch, range); - return {open: here, close: findMatchingClose(iter, start[2]), at: "open"}; - } - }; - - CodeMirror.findEnclosingTag = function(cm, pos, range) { - var iter = new Iter(cm, pos.line, pos.ch, range); - for (;;) { - var open = findMatchingOpen(iter); - if (!open) break; - var forward = new Iter(cm, pos.line, pos.ch, range); - var close = findMatchingClose(forward, open.tag); - if (close) return {open: open, close: close}; - } - }; - - // Used by addon/edit/closetag.js - CodeMirror.scanForClosingTag = function(cm, pos, name, end) { - var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null); - return findMatchingClose(iter, name); - }; -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/index.html b/html/forums/admin/jscripts/codemirror/addon/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/addon/search/index.html b/html/forums/admin/jscripts/codemirror/addon/search/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/search/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/addon/search/match-highlighter.js b/html/forums/admin/jscripts/codemirror/addon/search/match-highlighter.js deleted file mode 100644 index e9a2272..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/search/match-highlighter.js +++ /dev/null @@ -1,128 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Highlighting text that matches the selection -// -// Defines an option highlightSelectionMatches, which, when enabled, -// will style strings that match the selection throughout the -// document. -// -// The option can be set to true to simply enable it, or to a -// {minChars, style, wordsOnly, showToken, delay} object to explicitly -// configure it. minChars is the minimum amount of characters that should be -// selected for the behavior to occur, and style is the token style to -// apply to the matches. This will be prefixed by "cm-" to create an -// actual CSS class name. If wordsOnly is enabled, the matches will be -// highlighted only if the selected text is a word. showToken, when enabled, -// will cause the current token to be highlighted when nothing is selected. -// delay is used to specify how much time to wait, in milliseconds, before -// highlighting the matches. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var DEFAULT_MIN_CHARS = 2; - var DEFAULT_TOKEN_STYLE = "matchhighlight"; - var DEFAULT_DELAY = 100; - var DEFAULT_WORDS_ONLY = false; - - function State(options) { - if (typeof options == "object") { - this.minChars = options.minChars; - this.style = options.style; - this.showToken = options.showToken; - this.delay = options.delay; - this.wordsOnly = options.wordsOnly; - } - if (this.style == null) this.style = DEFAULT_TOKEN_STYLE; - if (this.minChars == null) this.minChars = DEFAULT_MIN_CHARS; - if (this.delay == null) this.delay = DEFAULT_DELAY; - if (this.wordsOnly == null) this.wordsOnly = DEFAULT_WORDS_ONLY; - this.overlay = this.timeout = null; - } - - CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - var over = cm.state.matchHighlighter.overlay; - if (over) cm.removeOverlay(over); - clearTimeout(cm.state.matchHighlighter.timeout); - cm.state.matchHighlighter = null; - cm.off("cursorActivity", cursorActivity); - } - if (val) { - cm.state.matchHighlighter = new State(val); - highlightMatches(cm); - cm.on("cursorActivity", cursorActivity); - } - }); - - function cursorActivity(cm) { - var state = cm.state.matchHighlighter; - clearTimeout(state.timeout); - state.timeout = setTimeout(function() {highlightMatches(cm);}, state.delay); - } - - function highlightMatches(cm) { - cm.operation(function() { - var state = cm.state.matchHighlighter; - if (state.overlay) { - cm.removeOverlay(state.overlay); - state.overlay = null; - } - if (!cm.somethingSelected() && state.showToken) { - var re = state.showToken === true ? /[\w$]/ : state.showToken; - var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; - while (start && re.test(line.charAt(start - 1))) --start; - while (end < line.length && re.test(line.charAt(end))) ++end; - if (start < end) - cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style)); - return; - } - var from = cm.getCursor("from"), to = cm.getCursor("to"); - if (from.line != to.line) return; - if (state.wordsOnly && !isWord(cm, from, to)) return; - var selection = cm.getRange(from, to).replace(/^\s+|\s+$/g, ""); - if (selection.length >= state.minChars) - cm.addOverlay(state.overlay = makeOverlay(selection, false, state.style)); - }); - } - - function isWord(cm, from, to) { - var str = cm.getRange(from, to); - if (str.match(/^\w+$/) !== null) { - if (from.ch > 0) { - var pos = {line: from.line, ch: from.ch - 1}; - var chr = cm.getRange(pos, from); - if (chr.match(/\W/) === null) return false; - } - if (to.ch < cm.getLine(from.line).length) { - var pos = {line: to.line, ch: to.ch + 1}; - var chr = cm.getRange(to, pos); - if (chr.match(/\W/) === null) return false; - } - return true; - } else return false; - } - - function boundariesAround(stream, re) { - return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && - (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); - } - - function makeOverlay(query, hasBoundary, style) { - return {token: function(stream) { - if (stream.match(query) && - (!hasBoundary || boundariesAround(stream, hasBoundary))) - return style; - stream.next(); - stream.skipTo(query.charAt(0)) || stream.skipToEnd(); - }}; - } -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.css b/html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.css deleted file mode 100644 index 77efb38..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.css +++ /dev/null @@ -1,8 +0,0 @@ -.CodeMirror-search-match { - background: gold; - border-top: 1px solid orange; - border-bottom: 1px solid orange; - -moz-box-sizing: border-box; - box-sizing: border-box; - opacity: .5; -} diff --git a/html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.js b/html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.js deleted file mode 100644 index 937d3f7..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/search/matchesonscrollbar.js +++ /dev/null @@ -1,90 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../scroll/annotatescrollbar")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./searchcursor", "../scroll/annotatescrollbar"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineExtension("showMatchesOnScrollbar", function(query, caseFold, className) { - return new SearchAnnotation(this, query, caseFold, className); - }); - - function SearchAnnotation(cm, query, caseFold, className) { - this.cm = cm; - this.annotation = cm.annotateScrollbar(className || "CodeMirror-search-match"); - this.query = query; - this.caseFold = caseFold; - this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1}; - this.matches = []; - this.update = null; - - this.findMatches(); - this.annotation.update(this.matches); - - var self = this; - cm.on("change", this.changeHandler = function(_cm, change) { self.onChange(change); }); - } - - var MAX_MATCHES = 1000; - - SearchAnnotation.prototype.findMatches = function() { - if (!this.gap) return; - for (var i = 0; i < this.matches.length; i++) { - var match = this.matches[i]; - if (match.from.line >= this.gap.to) break; - if (match.to.line >= this.gap.from) this.matches.splice(i--, 1); - } - var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), this.caseFold); - while (cursor.findNext()) { - var match = {from: cursor.from(), to: cursor.to()}; - if (match.from.line >= this.gap.to) break; - this.matches.splice(i++, 0, match); - if (this.matches.length > MAX_MATCHES) break; - } - this.gap = null; - }; - - function offsetLine(line, changeStart, sizeChange) { - if (line <= changeStart) return line; - return Math.max(changeStart, line + sizeChange); - } - - SearchAnnotation.prototype.onChange = function(change) { - var startLine = change.from.line; - var endLine = CodeMirror.changeEnd(change).line; - var sizeChange = endLine - change.to.line; - if (this.gap) { - this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line); - this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line); - } else { - this.gap = {from: change.from.line, to: endLine + 1}; - } - - if (sizeChange) for (var i = 0; i < this.matches.length; i++) { - var match = this.matches[i]; - var newFrom = offsetLine(match.from.line, startLine, sizeChange); - if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch); - var newTo = offsetLine(match.to.line, startLine, sizeChange); - if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch); - } - clearTimeout(this.update); - var self = this; - this.update = setTimeout(function() { self.updateAfterChange(); }, 250); - }; - - SearchAnnotation.prototype.updateAfterChange = function() { - this.findMatches(); - this.annotation.update(this.matches); - }; - - SearchAnnotation.prototype.clear = function() { - this.cm.off("change", this.changeHandler); - this.annotation.clear(); - }; -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/search/search.js b/html/forums/admin/jscripts/codemirror/addon/search/search.js deleted file mode 100644 index 0251067..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/search/search.js +++ /dev/null @@ -1,164 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Define search commands. Depends on dialog.js or another -// implementation of the openDialog method. - -// Replace works a little oddly -- it will do the replace on the next -// Ctrl-G (or whatever is bound to findNext) press. You prevent a -// replace by making sure the match is no longer selected when hitting -// Ctrl-G. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - function searchOverlay(query, caseInsensitive) { - if (typeof query == "string") - query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); - else if (!query.global) - query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); - - return {token: function(stream) { - query.lastIndex = stream.pos; - var match = query.exec(stream.string); - if (match && match.index == stream.pos) { - stream.pos += match[0].length; - return "searching"; - } else if (match) { - stream.pos = match.index; - } else { - stream.skipToEnd(); - } - }}; - } - - function SearchState() { - this.posFrom = this.posTo = this.query = null; - this.overlay = null; - } - function getSearchState(cm) { - return cm.state.search || (cm.state.search = new SearchState()); - } - function queryCaseInsensitive(query) { - return typeof query == "string" && query == query.toLowerCase(); - } - function getSearchCursor(cm, query, pos) { - // Heuristic: if the query string is all lowercase, do a case insensitive search. - return cm.getSearchCursor(query, pos, queryCaseInsensitive(query)); - } - function dialog(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, {value: deflt}); - else f(prompt(shortText, deflt)); - } - function confirmDialog(cm, text, shortText, fs) { - if (cm.openConfirm) cm.openConfirm(text, fs); - else if (confirm(shortText)) fs[0](); - } - function parseQuery(query) { - var isRE = query.match(/^\/(.*)\/([a-z]*)$/); - if (isRE) { - try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } - catch(e) {} // Not a regular expression after all, do a string search - } - if (typeof query == "string" ? query == "" : query.test("")) - query = /x^/; - return query; - } - var queryDialog = - 'Search: (Use /re/ syntax for regexp search)'; - function doSearch(cm, rev) { - var state = getSearchState(cm); - if (state.query) return findNext(cm, rev); - dialog(cm, queryDialog, "Search for:", cm.getSelection(), function(query) { - cm.operation(function() { - if (!query || state.query) return; - state.query = parseQuery(query); - cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); - state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); - cm.addOverlay(state.overlay); - if (cm.showMatchesOnScrollbar) { - if (state.annotate) { state.annotate.clear(); state.annotate = null; } - state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); - } - state.posFrom = state.posTo = cm.getCursor(); - findNext(cm, rev); - }); - }); - } - function findNext(cm, rev) {cm.operation(function() { - var state = getSearchState(cm); - var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); - if (!cursor.find(rev)) { - cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); - if (!cursor.find(rev)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); - state.posFrom = cursor.from(); state.posTo = cursor.to(); - });} - function clearSearch(cm) {cm.operation(function() { - var state = getSearchState(cm); - if (!state.query) return; - state.query = null; - cm.removeOverlay(state.overlay); - if (state.annotate) { state.annotate.clear(); state.annotate = null; } - });} - - var replaceQueryDialog = - 'Replace: (Use /re/ syntax for regexp search)'; - var replacementQueryDialog = 'With: '; - var doReplaceConfirm = "Replace? "; - function replace(cm, all) { - if (cm.getOption("readOnly")) return; - dialog(cm, replaceQueryDialog, "Replace:", cm.getSelection(), function(query) { - if (!query) return; - query = parseQuery(query); - dialog(cm, replacementQueryDialog, "Replace with:", "", function(text) { - if (all) { - cm.operation(function() { - for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { - if (typeof query != "string") { - var match = cm.getRange(cursor.from(), cursor.to()).match(query); - cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];})); - } else cursor.replace(text); - } - }); - } else { - clearSearch(cm); - var cursor = getSearchCursor(cm, query, cm.getCursor()); - var advance = function() { - var start = cursor.from(), match; - if (!(match = cursor.findNext())) { - cursor = getSearchCursor(cm, query); - if (!(match = cursor.findNext()) || - (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); - confirmDialog(cm, doReplaceConfirm, "Replace?", - [function() {doReplace(match);}, advance]); - }; - var doReplace = function(match) { - cursor.replace(typeof query == "string" ? text : - text.replace(/\$(\d)/g, function(_, i) {return match[i];})); - advance(); - }; - advance(); - } - }); - }); - } - - CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; - CodeMirror.commands.findNext = doSearch; - CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; - CodeMirror.commands.clearSearch = clearSearch; - CodeMirror.commands.replace = replace; - CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; -}); diff --git a/html/forums/admin/jscripts/codemirror/addon/search/searchcursor.js b/html/forums/admin/jscripts/codemirror/addon/search/searchcursor.js deleted file mode 100644 index 55c108b..0000000 --- a/html/forums/admin/jscripts/codemirror/addon/search/searchcursor.js +++ /dev/null @@ -1,189 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - var Pos = CodeMirror.Pos; - - function SearchCursor(doc, query, pos, caseFold) { - this.atOccurrence = false; this.doc = doc; - if (caseFold == null && typeof query == "string") caseFold = false; - - pos = pos ? doc.clipPos(pos) : Pos(0, 0); - this.pos = {from: pos, to: pos}; - - // The matches method is filled in based on the type of query. - // It takes a position and a direction, and returns an object - // describing the next occurrence of the query, or null if no - // more matches were found. - if (typeof query != "string") { // Regexp match - if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "ig" : "g"); - this.matches = function(reverse, pos) { - if (reverse) { - query.lastIndex = 0; - var line = doc.getLine(pos.line).slice(0, pos.ch), cutOff = 0, match, start; - for (;;) { - query.lastIndex = cutOff; - var newMatch = query.exec(line); - if (!newMatch) break; - match = newMatch; - start = match.index; - cutOff = match.index + (match[0].length || 1); - if (cutOff == line.length) break; - } - var matchLen = (match && match[0].length) || 0; - if (!matchLen) { - if (start == 0 && line.length == 0) {match = undefined;} - else if (start != doc.getLine(pos.line).length) { - matchLen++; - } - } - } else { - query.lastIndex = pos.ch; - var line = doc.getLine(pos.line), match = query.exec(line); - var matchLen = (match && match[0].length) || 0; - var start = match && match.index; - if (start + matchLen != line.length && !matchLen) matchLen = 1; - } - if (match && matchLen) - return {from: Pos(pos.line, start), - to: Pos(pos.line, start + matchLen), - match: match}; - }; - } else { // String query - var origQuery = query; - if (caseFold) query = query.toLowerCase(); - var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;}; - var target = query.split("\n"); - // Different methods for single-line and multi-line queries - if (target.length == 1) { - if (!query.length) { - // Empty string would match anything and never progress, so - // we define it to match nothing instead. - this.matches = function() {}; - } else { - this.matches = function(reverse, pos) { - if (reverse) { - var orig = doc.getLine(pos.line).slice(0, pos.ch), line = fold(orig); - var match = line.lastIndexOf(query); - if (match > -1) { - match = adjustPos(orig, line, match); - return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; - } - } else { - var orig = doc.getLine(pos.line).slice(pos.ch), line = fold(orig); - var match = line.indexOf(query); - if (match > -1) { - match = adjustPos(orig, line, match) + pos.ch; - return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; - } - } - }; - } - } else { - var origTarget = origQuery.split("\n"); - this.matches = function(reverse, pos) { - var last = target.length - 1; - if (reverse) { - if (pos.line - (target.length - 1) < doc.firstLine()) return; - if (fold(doc.getLine(pos.line).slice(0, origTarget[last].length)) != target[target.length - 1]) return; - var to = Pos(pos.line, origTarget[last].length); - for (var ln = pos.line - 1, i = last - 1; i >= 1; --i, --ln) - if (target[i] != fold(doc.getLine(ln))) return; - var line = doc.getLine(ln), cut = line.length - origTarget[0].length; - if (fold(line.slice(cut)) != target[0]) return; - return {from: Pos(ln, cut), to: to}; - } else { - if (pos.line + (target.length - 1) > doc.lastLine()) return; - var line = doc.getLine(pos.line), cut = line.length - origTarget[0].length; - if (fold(line.slice(cut)) != target[0]) return; - var from = Pos(pos.line, cut); - for (var ln = pos.line + 1, i = 1; i < last; ++i, ++ln) - if (target[i] != fold(doc.getLine(ln))) return; - if (fold(doc.getLine(ln).slice(0, origTarget[last].length)) != target[last]) return; - return {from: from, to: Pos(ln, origTarget[last].length)}; - } - }; - } - } - } - - SearchCursor.prototype = { - findNext: function() {return this.find(false);}, - findPrevious: function() {return this.find(true);}, - - find: function(reverse) { - var self = this, pos = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); - function savePosAndFail(line) { - var pos = Pos(line, 0); - self.pos = {from: pos, to: pos}; - self.atOccurrence = false; - return false; - } - - for (;;) { - if (this.pos = this.matches(reverse, pos)) { - this.atOccurrence = true; - return this.pos.match || true; - } - if (reverse) { - if (!pos.line) return savePosAndFail(0); - pos = Pos(pos.line-1, this.doc.getLine(pos.line-1).length); - } - else { - var maxLine = this.doc.lineCount(); - if (pos.line == maxLine - 1) return savePosAndFail(maxLine); - pos = Pos(pos.line + 1, 0); - } - } - }, - - from: function() {if (this.atOccurrence) return this.pos.from;}, - to: function() {if (this.atOccurrence) return this.pos.to;}, - - replace: function(newText) { - if (!this.atOccurrence) return; - var lines = CodeMirror.splitLines(newText); - this.doc.replaceRange(lines, this.pos.from, this.pos.to); - this.pos.to = Pos(this.pos.from.line + lines.length - 1, - lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); - } - }; - - // Maps a position in a case-folded line back to a position in the original line - // (compensating for codepoints increasing in number during folding) - function adjustPos(orig, folded, pos) { - if (orig.length == folded.length) return pos; - for (var pos1 = Math.min(pos, orig.length);;) { - var len1 = orig.slice(0, pos1).toLowerCase().length; - if (len1 < pos) ++pos1; - else if (len1 > pos) --pos1; - else return pos1; - } - } - - CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { - return new SearchCursor(this.doc, query, pos, caseFold); - }); - CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { - return new SearchCursor(this, query, pos, caseFold); - }); - - CodeMirror.defineExtension("selectMatches", function(query, caseFold) { - var ranges = [], next; - var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); - while (next = cur.findNext()) { - if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; - ranges.push({anchor: cur.from(), head: cur.to()}); - } - if (ranges.length) - this.setSelections(ranges, 0); - }); -}); diff --git a/html/forums/admin/jscripts/codemirror/index.html b/html/forums/admin/jscripts/codemirror/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/lib/codemirror.css b/html/forums/admin/jscripts/codemirror/lib/codemirror.css deleted file mode 100644 index 8cecd76..0000000 --- a/html/forums/admin/jscripts/codemirror/lib/codemirror.css +++ /dev/null @@ -1,309 +0,0 @@ -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror div.CodeMirror-cursor { - border-left: 1px solid black; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursor { - width: auto; - border: 0; - background: #7e7; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; -} -@-moz-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@-webkit-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} - -/* Can style cursor different in overwrite (non-insert) mode */ -div.CodeMirror-overwrite div.CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-ruler { - border-left: 1px solid #ccc; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3 {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - line-height: 1; - position: relative; - overflow: hidden; - background: white; - color: black; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 30px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; margin-right: -30px; - padding-bottom: 30px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -.CodeMirror-sizer { - position: relative; - border-right: 30px solid transparent; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actuall scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - -moz-box-sizing: content-box; - box-sizing: content-box; - display: inline-block; - margin-bottom: -30px; - /* Hack to make IE7 behave */ - *zoom:1; - *display:inline; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - height: 100%; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; -} - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; -} -.CodeMirror-wrap pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - overflow: auto; -} - -.CodeMirror-widget {} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} -.CodeMirror-measure pre { position: static; } - -.CodeMirror div.CodeMirror-cursor { - position: absolute; - border-right: none; - width: 0; -} - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } - -.cm-searching { - background: #ffa; - background: rgba(255, 255, 0, .4); -} - -/* IE7 hack to prevent it from returning funny offsetTops on the spans */ -.CodeMirror span { *vertical-align: text-bottom; } - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } diff --git a/html/forums/admin/jscripts/codemirror/lib/codemirror.js b/html/forums/admin/jscripts/codemirror/lib/codemirror.js deleted file mode 100644 index 03a34db..0000000 --- a/html/forums/admin/jscripts/codemirror/lib/codemirror.js +++ /dev/null @@ -1,8045 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// This is CodeMirror (http://codemirror.net), a code editor -// implemented in JavaScript on top of the browser's DOM. -// -// You can find some technical background for some of the code below -// at http://marijnhaverbeke.nl/blog/#cm-internals . - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - module.exports = mod(); - else if (typeof define == "function" && define.amd) // AMD - return define([], mod); - else // Plain browser env - this.CodeMirror = mod(); -})(function() { - "use strict"; - - // BROWSER SNIFFING - - // Kludges for bugs and behavior differences that can't be feature - // detected are enabled based on userAgent etc sniffing. - - var gecko = /gecko\/\d/i.test(navigator.userAgent); - // ie_uptoN means Internet Explorer version N or lower - var ie_upto10 = /MSIE \d/.test(navigator.userAgent); - var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); - var ie = ie_upto10 || ie_11up; - var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); - var webkit = /WebKit\//.test(navigator.userAgent); - var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); - var chrome = /Chrome\//.test(navigator.userAgent); - var presto = /Opera\//.test(navigator.userAgent); - var safari = /Apple Computer/.test(navigator.vendor); - var khtml = /KHTML\//.test(navigator.userAgent); - var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); - var phantom = /PhantomJS/.test(navigator.userAgent); - - var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); - // This is woefully incomplete. Suggestions for alternative methods welcome. - var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); - var mac = ios || /Mac/.test(navigator.platform); - var windows = /win/i.test(navigator.platform); - - var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/); - if (presto_version) presto_version = Number(presto_version[1]); - if (presto_version && presto_version >= 15) { presto = false; webkit = true; } - // Some browsers use the wrong event properties to signal cmd/ctrl on OS X - var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); - var captureRightClick = gecko || (ie && ie_version >= 9); - - // Optimize some code when these features are not used. - var sawReadOnlySpans = false, sawCollapsedSpans = false; - - // EDITOR CONSTRUCTOR - - // A CodeMirror instance represents an editor. This is the object - // that user code is usually dealing with. - - function CodeMirror(place, options) { - if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); - - this.options = options = options ? copyObj(options) : {}; - // Determine effective options based on given values and defaults. - copyObj(defaults, options, false); - setGuttersForLineNumbers(options); - - var doc = options.value; - if (typeof doc == "string") doc = new Doc(doc, options.mode); - this.doc = doc; - - var display = this.display = new Display(place, doc); - display.wrapper.CodeMirror = this; - updateGutters(this); - themeChanged(this); - if (options.lineWrapping) - this.display.wrapper.className += " CodeMirror-wrap"; - if (options.autofocus && !mobile) focusInput(this); - initScrollbars(this); - - this.state = { - keyMaps: [], // stores maps added by addKeyMap - overlays: [], // highlighting overlays, as added by addOverlay - modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, focused: false, - suppressEdits: false, // used to disable editing during key handlers when in readOnly mode - pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput - draggingText: false, - highlight: new Delayed(), // stores highlight worker timeout - keySeq: null // Unfinished key sequence - }; - - // Override magic textarea content restore that IE sometimes does - // on our hidden textarea on reload - if (ie && ie_version < 11) setTimeout(bind(resetInput, this, true), 20); - - registerEventHandlers(this); - ensureGlobalHandlers(); - - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - - if ((options.autofocus && !mobile) || activeElt() == display.input) - setTimeout(bind(onFocus, this), 20); - else - onBlur(this); - - for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) - optionHandlers[opt](this, options[opt], Init); - maybeUpdateLineNumberWidth(this); - for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); - endOperation(this); - // Suppress optimizelegibility in Webkit, since it breaks text - // measuring on line wrapping boundaries. - if (webkit && options.lineWrapping && - getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") - display.lineDiv.style.textRendering = "auto"; - } - - // DISPLAY CONSTRUCTOR - - // The display handles the DOM integration, both for input reading - // and content drawing. It holds references to DOM nodes and - // display-related state. - - function Display(place, doc) { - var d = this; - - // The semihidden textarea that is focused when the editor is - // focused, and receives input. - var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); - // The textarea is kept positioned near the cursor to prevent the - // fact that it'll be scrolled into view on input from scrolling - // our fake cursor out of view. On webkit, when wrap=off, paste is - // very slow. So make the area wide instead. - if (webkit) input.style.width = "1000px"; - else input.setAttribute("wrap", "off"); - // If border: 0; -- iOS fails to open keyboard (issue #1287) - if (ios) input.style.border = "1px solid black"; - input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false"); - - // Wraps and hides input textarea - d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - // Covers bottom-right square when both scrollbars are present. - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("not-content", "true"); - // Covers bottom of gutter when coverGutterNextToScrollbar is on - // and h scrollbar is present. - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("not-content", "true"); - // Will contain the actual code, positioned to cover the viewport. - d.lineDiv = elt("div", null, "CodeMirror-code"); - // Elements are added to these to represent selection and cursors. - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - // A visibility: hidden element used to find the size of things. - d.measure = elt("div", null, "CodeMirror-measure"); - // When lines outside of the viewport are measured, they are drawn in this. - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - // Wraps everything that needs to exist inside the vertically-padded coordinate system - d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], - null, "position: relative; outline: none"); - // Moved around its parent to cover visible view. - d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); - // Set to the height of the document, allowing scrolling. - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - // Behavior of elts with overflow: auto and padding is - // inconsistent across browsers. This is used to ensure the - // scrollable area is big enough. - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - // Will contain the gutters, if any. - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - // Actual scrollable element. - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - // The element in which the editor lives. - d.wrapper = elt("div", [d.inputDiv, d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - - // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) - if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } - // Needed to hide big blue blinking cursor on Mobile Safari - if (ios) input.style.width = "0px"; - if (!webkit) d.scroller.draggable = true; - // Needed to handle Tab key in KHTML - if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; } - - if (place) { - if (place.appendChild) place.appendChild(d.wrapper); - else place(d.wrapper); - } - - // Current rendered range (may be bigger than the view window). - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - // Information about the rendered lines. - d.view = []; - d.renderedView = null; - // Holds info about a single rendered line when it was rendered - // for measurement, while not in view. - d.externalMeasured = null; - // Empty space (in pixels) above the view - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - - // Used to only resize the line number gutter when necessary (when - // the amount of lines crosses a boundary that makes its width change) - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - // See readInput and resetInput - d.prevInput = ""; - // Set to true when a non-horizontal-scrolling line widget is - // added. As an optimization, line widget aligning is skipped when - // this is false. - d.alignWidgets = false; - // Flag that indicates whether we expect input to appear real soon - // now (after some event like 'keypress' or 'input') and are - // polling intensively. - d.pollingFast = false; - // Self-resetting timeout for the poller - d.poll = new Delayed(); - - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - - // Tracks when resetInput has punted to just putting a short - // string into the textarea instead of the full selection. - d.inaccurateSelection = false; - - // Tracks the maximum line length so that the horizontal scrollbar - // can be kept static when scrolling. - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - - // Used for measuring wheel scrolling granularity - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - - // True when shift is held down. - d.shift = false; - - // Used to track whether anything happened since the context menu - // was opened. - d.selForContextMenu = null; - } - - // STATE UPDATES - - // Used to get the editor into a consistent state again when options change. - - function loadMode(cm) { - cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); - } - - function resetModeState(cm) { - cm.doc.iter(function(line) { - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - }); - cm.doc.frontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) regChange(cm); - } - - function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function(){updateScrollbars(cm);}, 100); - } - - // Returns a function that estimates the height of a line, to use as - // first approximation until the line becomes visible (and is thus - // properly measurable). - function estimateHeight(cm) { - var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function(line) { - if (lineIsHidden(cm.doc, line)) return 0; - - var widgetsHeight = 0; - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { - if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; - } - - if (wrapping) - return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; - else - return widgetsHeight + th; - }; - } - - function estimateLineHeights(cm) { - var doc = cm.doc, est = estimateHeight(cm); - doc.iter(function(line) { - var estHeight = est(line); - if (estHeight != line.height) updateLineHeight(line, estHeight); - }); - } - - function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + - cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); - } - - function guttersChanged(cm) { - updateGutters(cm); - regChange(cm); - setTimeout(function(){alignHorizontally(cm);}, 20); - } - - // Rebuild the gutter elements, ensure the margin to the left of the - // code matches their width. - function updateGutters(cm) { - var gutters = cm.display.gutters, specs = cm.options.gutters; - removeChildren(gutters); - for (var i = 0; i < specs.length; ++i) { - var gutterClass = specs[i]; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); - if (gutterClass == "CodeMirror-linenumbers") { - cm.display.lineGutter = gElt; - gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = i ? "" : "none"; - updateGutterSpace(cm); - } - - function updateGutterSpace(cm) { - var width = cm.display.gutters.offsetWidth; - cm.display.sizer.style.marginLeft = width + "px"; - } - - // Compute the character length of a line, taking into account - // collapsed ranges (see markText) that might hide parts, and join - // other lines onto it. - function lineLength(line) { - if (line.height == 0) return 0; - var len = line.text.length, merged, cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found = merged.find(0, true); - len -= cur.text.length - found.from.ch; - cur = found.to.line; - len += cur.text.length - found.to.ch; - } - return len; - } - - // Find the longest line in the document. - function findMaxLine(cm) { - var d = cm.display, doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function(line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); - } - - // Make sure the gutters options contains the element - // "CodeMirror-linenumbers" when the lineNumbers option is true. - function setGuttersForLineNumbers(options) { - var found = indexOf(options.gutters, "CodeMirror-linenumbers"); - if (found == -1 && options.lineNumbers) { - options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); - } else if (found > -1 && !options.lineNumbers) { - options.gutters = options.gutters.slice(0); - options.gutters.splice(found, 1); - } - } - - // SCROLLBARS - - // Prepare DOM reads needed to update the scrollbars. Done in one - // shot to minimize update/measure roundtrips. - function measureForScrollbars(cm) { - var d = cm.display, gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - }; - } - - function NativeScrollbars(place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - place(vert); place(horiz); - - on(vert, "scroll", function() { - if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); - }); - on(horiz, "scroll", function() { - if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); - }); - - this.checkedOverlay = false; - // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). - if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; - } - - NativeScrollbars.prototype = copyObj({ - update: function(measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - // A bug in IE8 can cause this value to be negative, so guard it. - this.vert.firstChild.style.height = - Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = - (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - - if (!this.checkedOverlay && measure.clientHeight > 0) { - if (sWidth == 0) this.overlayHack(); - this.checkedOverlay = true; - } - - return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; - }, - setScrollLeft: function(pos) { - if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; - }, - setScrollTop: function(pos) { - if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; - }, - overlayHack: function() { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.minHeight = this.vert.style.minWidth = w; - var self = this; - var barMouseDown = function(e) { - if (e_target(e) != self.vert && e_target(e) != self.horiz) - operation(self.cm, onMouseDown)(e); - }; - on(this.vert, "mousedown", barMouseDown); - on(this.horiz, "mousedown", barMouseDown); - }, - clear: function() { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); - } - }, NativeScrollbars.prototype); - - function NullScrollbars() {} - - NullScrollbars.prototype = copyObj({ - update: function() { return {bottom: 0, right: 0}; }, - setScrollLeft: function() {}, - setScrollTop: function() {}, - clear: function() {} - }, NullScrollbars.prototype); - - CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; - - function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) - rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - on(node, "mousedown", function() { - if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); - }); - node.setAttribute("not-content", "true"); - }, function(pos, axis) { - if (axis == "horizontal") setScrollLeft(cm, pos); - else setScrollTop(cm, pos); - }, cm); - if (cm.display.scrollbars.addClass) - addClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - function updateScrollbars(cm, measure) { - if (!measure) measure = measureForScrollbars(cm); - var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) - updateHeightsInViewport(cm); - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; - } - } - - // Re-synchronize the fake scrollbars with the actual size of the - // content. - function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else d.scrollbarFiller.style.display = ""; - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else d.gutterFiller.style.display = ""; - } - - // Compute the lines that are visible in a given viewport (defaults - // the the current scroll position). viewport may contain top, - // height, and ensure (see op.scrollToPos) properties. - function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - - var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); - // Ensure is a {from: {line, ch}, to: {line, ch}} object, and - // forces those lines into the viewport (if possible). - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return {from: from, to: Math.max(to, from + 1)}; - } - - // LINE NUMBERS - - // Re-align line numbers and gutter marks to compensate for - // horizontal scrolling. - function alignHorizontally(cm) { - var display = cm.display, view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, left = comp + "px"; - for (var i = 0; i < view.length; i++) if (!view[i].hidden) { - if (cm.options.fixedGutter && view[i].gutter) - view[i].gutter.style.left = left; - var align = view[i].alignable; - if (align) for (var j = 0; j < align.length; j++) - align[j].style.left = left; - } - if (cm.options.fixedGutter) - display.gutters.style.left = (comp + gutterW) + "px"; - } - - // Used to ensure that the line number gutter is still the right - // size for the current document size. Returns true when an update - // is needed. - function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) return false; - var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], - "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding); - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm); - return true; - } - return false; - } - - function lineNumberFor(options, i) { - return String(options.lineNumberFormatter(i + options.firstLineNumber)); - } - - // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, - // but using getBoundingClientRect to get a sub-pixel-accurate - // result. - function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; - } - - // DISPLAY DRAWING - - function DisplayUpdate(cm, viewport, force) { - var display = cm.display; - - this.viewport = viewport; - // Store some values that we'll need later (but don't want to force a relayout for) - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - } - - function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } - } - - // Does the actual updating of the line display. Bails out - // (returning false) when there is nothing to be done and forced is - // false. - function updateDisplayIfNeeded(cm, update) { - var display = cm.display, doc = cm.doc; - - if (update.editorIsHidden) { - resetView(cm); - return false; - } - - // Bail out if the visible area is already rendered and nothing changed. - if (!update.force && - update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && - display.renderedView == display.view && countDirtyView(cm) == 0) - return false; - - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - - // Compute a suitable new viewport (from & to) - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); - if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - - var different = from != display.viewFrom || to != display.viewTo || - display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - // Position the mover div to align with the current scroll position - cm.display.mover.style.top = display.viewOffset + "px"; - - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) - return false; - - // For big changes, we hide the enclosing element during the - // update, since that speeds up the operations on most browsers. - var focused = activeElt(); - if (toUpdate > 4) display.lineDiv.style.display = "none"; - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) display.lineDiv.style.display = ""; - display.renderedView = display.view; - // There might have been a widget with a focused element that got - // hidden or updated, if so re-focus it. - if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); - - // Prevent selection and cursors from interfering with the scroll - // width and height. - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = 0; - - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - - display.updateLineNumbers = null; - - return true; - } - - function postUpdateDisplay(cm, update) { - var force = update.force, viewport = update.viewport; - for (var first = true;; first = false) { - if (first && cm.options.lineWrapping && update.oldDisplayWidth != displayWidth(cm)) { - force = true; - } else { - force = false; - // Clip forced viewport to actual scrollable area. - if (viewport && viewport.top != null) - viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; - // Updated line heights might result in the drawn area not - // actually covering the viewport. Keep looping until it does. - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) - break; - } - if (!updateDisplayIfNeeded(cm, update)) break; - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - } - - signalLater(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - signalLater(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; - } - } - - function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - } - } - - function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - var total = measure.docHeight + cm.display.barHeight; - cm.display.heightForcer.style.top = total + "px"; - cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + "px"; - } - - // Read the actual heights of the rendered lines, and update their - // stored heights to match. - function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - for (var i = 0; i < display.view.length; i++) { - var cur = display.view[i], height; - if (cur.hidden) continue; - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - } - var diff = cur.line.height - height; - if (height < 2) height = textHeight(display); - if (diff > .001 || diff < -.001) { - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) for (var j = 0; j < cur.rest.length; j++) - updateWidgetHeight(cur.rest[j]); - } - } - } - - // Read and store the height of line widgets associated with the - // given line. - function updateWidgetHeight(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) - line.widgets[i].height = line.widgets[i].node.offsetHeight; - } - - // Do a bulk-read of the DOM positions and sizes needed to draw the - // view, so that we don't interleave reading and writing to the DOM. - function getDimensions(cm) { - var d = cm.display, left = {}, width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { - left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; - width[cm.options.gutters[i]] = n.clientWidth; - } - return {fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth}; - } - - // Sync the actual display DOM structure with display.view, removing - // nodes for lines that are no longer in view, and creating the ones - // that are not there yet, and updating the ones that are out of - // date. - function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, cur = container.firstChild; - - function rm(node) { - var next = node.nextSibling; - // Works around a throw-scroll bug in OS X Webkit - if (webkit && mac && cm.display.currentWheelTarget == node) - node.style.display = "none"; - else - node.parentNode.removeChild(node); - return next; - } - - var view = display.view, lineN = display.viewFrom; - // Loop over the elements in the view, syncing cur (the DOM nodes - // in display.lineDiv) with the view as we go. - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (lineView.hidden) { - } else if (!lineView.node) { // Not drawn yet - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { // Already drawn - while (cur != lineView.node) cur = rm(cur); - var updateNumber = lineNumbers && updateNumbersFrom != null && - updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) cur = rm(cur); - } - - // When an aspect of a line changes, a string is added to - // lineView.changes. This updates the relevant part of the line's - // DOM structure. - function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") updateLineText(cm, lineView); - else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); - else if (type == "class") updateLineClasses(lineView); - else if (type == "widget") updateLineWidgets(lineView, dims); - } - lineView.changes = null; - } - - // Lines with gutter elements, widgets or a background class need to - // be wrapped, and have the extra elements added to the wrapper div - function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) - lineView.text.parentNode.replaceChild(lineView.node, lineView.text); - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) lineView.node.style.zIndex = 2; - } - return lineView.node; - } - - function updateLineBackground(lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) cls += " CodeMirror-linebackground"; - if (lineView.background) { - if (cls) lineView.background.className = cls; - else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - } - } - - // Wrapper around buildLineContent which will reuse the structure - // in display.externalMeasured when possible. - function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built; - } - return buildLineContent(cm, lineView); - } - - // Redraw the line's text. Interacts with the background and text - // classes because the mode may output tokens that influence these - // classes. - function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) lineView.node = built.pre; - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(lineView); - } else if (cls) { - lineView.text.className = cls; - } - } - - function updateLineClasses(lineView) { - updateLineBackground(lineView); - if (lineView.line.wrapClass) - ensureLineWrapped(lineView).className = lineView.line.wrapClass; - else if (lineView.node != lineView.text) - lineView.node.className = ""; - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; - } - - function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = - wrap.insertBefore(elt("div", null, "CodeMirror-gutter-wrapper", "left: " + - (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + - "px; width: " + dims.gutterTotalWidth + "px"), - lineView.text); - if (lineView.line.gutterClass) - gutterWrap.className += " " + lineView.line.gutterClass; - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) - lineView.lineNumber = gutterWrap.appendChild( - elt("div", lineNumberFor(cm.options, lineN), - "CodeMirror-linenumber CodeMirror-gutter-elt", - "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " - + cm.display.lineNumInnerWidth + "px")); - if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { - var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; - if (found) - gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + - dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); - } - } - } - - function updateLineWidgets(lineView, dims) { - if (lineView.alignable) lineView.alignable = null; - for (var node = lineView.node.firstChild, next; node; node = next) { - var next = node.nextSibling; - if (node.className == "CodeMirror-linewidget") - lineView.node.removeChild(node); - } - insertLineWidgets(lineView, dims); - } - - // Build a line's DOM representation from scratch - function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) lineView.bgClass = built.bgClass; - if (built.textClass) lineView.textClass = built.textClass; - - updateLineClasses(lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(lineView, dims); - return lineView.node; - } - - // A lineView may contain multiple logical lines (when merged by - // collapsed spans). The widgets for all of them need to be drawn. - function insertLineWidgets(lineView, dims) { - insertLineWidgetsFor(lineView.line, lineView, dims, true); - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - insertLineWidgetsFor(lineView.rest[i], lineView, dims, false); - } - - function insertLineWidgetsFor(line, lineView, dims, allowAbove) { - if (!line.widgets) return; - var wrap = ensureLineWrapped(lineView); - for (var i = 0, ws = line.widgets; i < ws.length; ++i) { - var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); - if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); - positionLineWidget(widget, node, lineView, dims); - if (allowAbove && widget.above) - wrap.insertBefore(node, lineView.gutter || lineView.text); - else - wrap.appendChild(node); - signalLater(widget, "redraw"); - } - } - - function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; - } - } - - // POSITION OBJECT - - // A Pos instance represents a position within the text. - var Pos = CodeMirror.Pos = function(line, ch) { - if (!(this instanceof Pos)) return new Pos(line, ch); - this.line = line; this.ch = ch; - }; - - // Compare two positions, return 0 if they are the same, a negative - // number when a is less, and a positive number otherwise. - var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; - - function copyPos(x) {return Pos(x.line, x.ch);} - function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } - function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } - - // SELECTION / CURSOR - - // Selection objects are immutable. A new one is created every time - // the selection changes. A selection is one or more non-overlapping - // (and non-touching) ranges, sorted, and an integer that indicates - // which one is the primary selection (the one that's scrolled into - // view, that getCursor returns, etc). - function Selection(ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; - } - - Selection.prototype = { - primary: function() { return this.ranges[this.primIndex]; }, - equals: function(other) { - if (other == this) return true; - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; - for (var i = 0; i < this.ranges.length; i++) { - var here = this.ranges[i], there = other.ranges[i]; - if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; - } - return true; - }, - deepCopy: function() { - for (var out = [], i = 0; i < this.ranges.length; i++) - out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); - return new Selection(out, this.primIndex); - }, - somethingSelected: function() { - for (var i = 0; i < this.ranges.length; i++) - if (!this.ranges[i].empty()) return true; - return false; - }, - contains: function(pos, end) { - if (!end) end = pos; - for (var i = 0; i < this.ranges.length; i++) { - var range = this.ranges[i]; - if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) - return i; - } - return -1; - } - }; - - function Range(anchor, head) { - this.anchor = anchor; this.head = head; - } - - Range.prototype = { - from: function() { return minPos(this.anchor, this.head); }, - to: function() { return maxPos(this.anchor, this.head); }, - empty: function() { - return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; - } - }; - - // Take an unsorted, potentially overlapping set of ranges, and - // build a selection out of it. 'Consumes' ranges array (modifying - // it). - function normalizeSelection(ranges, primIndex) { - var prim = ranges[primIndex]; - ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); - primIndex = indexOf(ranges, prim); - for (var i = 1; i < ranges.length; i++) { - var cur = ranges[i], prev = ranges[i - 1]; - if (cmp(prev.to(), cur.from()) >= 0) { - var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i <= primIndex) --primIndex; - ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex); - } - - function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0); - } - - // Most of the external API clips given positions to make sure they - // actually exist within the document. - function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} - function clipPos(doc, pos) { - if (pos.line < doc.first) return Pos(doc.first, 0); - var last = doc.first + doc.size - 1; - if (pos.line > last) return Pos(last, getLine(doc, last).text.length); - return clipToLen(pos, getLine(doc, pos.line).text.length); - } - function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) return Pos(pos.line, linelen); - else if (ch < 0) return Pos(pos.line, 0); - else return pos; - } - function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} - function clipPosArray(doc, array) { - for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); - return out; - } - - // SELECTION UPDATES - - // The 'scroll' parameter given to many of these indicated whether - // the new cursor position should be scrolled into view after - // modifying the selection. - - // If shift is held or the extend flag is set, extends a range to - // include a given position (and optionally a second position). - // Otherwise, simply returns the range between the given positions. - // Used for cursor motion and such. - function extendRange(doc, range, head, other) { - if (doc.cm && doc.cm.display.shift || doc.extend) { - var anchor = range.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != (cmp(other, anchor) < 0)) { - anchor = head; - head = other; - } else if (posBefore != (cmp(head, other) < 0)) { - head = other; - } - } - return new Range(anchor, head); - } else { - return new Range(other || head, head); - } - } - - // Extend the primary selection range, discard the rest. - function extendSelection(doc, head, other, options) { - setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); - } - - // Extend all selections (pos is an array of selections with length - // equal the number of selections) - function extendSelections(doc, heads, options) { - for (var out = [], i = 0; i < doc.sel.ranges.length; i++) - out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); - var newSel = normalizeSelection(out, doc.sel.primIndex); - setSelection(doc, newSel, options); - } - - // Updates a single range in the selection. - function replaceOneSelection(doc, i, range, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i] = range; - setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); - } - - // Reset the selection to a single range. - function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); - } - - // Give beforeSelectionChange handlers a change to influence a - // selection update. - function filterSelectionChange(doc, sel) { - var obj = { - ranges: sel.ranges, - update: function(ranges) { - this.ranges = []; - for (var i = 0; i < ranges.length; i++) - this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), - clipPos(doc, ranges[i].head)); - } - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); - if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); - else return sel; - } - - function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } - } - - // Set a new selection. - function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); - } - - function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) - sel = filterSelectionChange(doc, sel); - - var bias = options && options.bias || - (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - - if (!(options && options.scroll === false) && doc.cm) - ensureCursorVisible(doc.cm); - } - - function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) return; - - doc.sel = sel; - - if (doc.cm) { - doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); - } - - // Verify that the selection does not partially select any atomic - // marked ranges. - function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); - } - - // Return a selection that does not partially select any atomic - // ranges. - function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range.head, bias, mayClear); - if (out || newAnchor != range.anchor || newHead != range.head) { - if (!out) out = sel.ranges.slice(0, i); - out[i] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(out, sel.primIndex) : sel; - } - - // Ensure a given position is not inside an atomic range. - function skipAtomic(doc, pos, bias, mayClear) { - var flipped = false, curPos = pos; - var dir = bias || 1; - doc.cantEdit = false; - search: for (;;) { - var line = getLine(doc, curPos.line); - if (line.markedSpans) { - for (var i = 0; i < line.markedSpans.length; ++i) { - var sp = line.markedSpans[i], m = sp.marker; - if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && - (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) break; - else {--i; continue;} - } - } - if (!m.atomic) continue; - var newPos = m.find(dir < 0 ? -1 : 1); - if (cmp(newPos, curPos) == 0) { - newPos.ch += dir; - if (newPos.ch < 0) { - if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); - else newPos = null; - } else if (newPos.ch > line.text.length) { - if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); - else newPos = null; - } - if (!newPos) { - if (flipped) { - // Driven in a corner -- no valid cursor position found at all - // -- try again *with* clearing, if we didn't already - if (!mayClear) return skipAtomic(doc, pos, bias, true); - // Otherwise, turn off editing until further notice, and return the start of the doc - doc.cantEdit = true; - return Pos(doc.first, 0); - } - flipped = true; newPos = pos; dir = -dir; - } - } - curPos = newPos; - continue search; - } - } - } - return curPos; - } - } - - // SELECTION DRAWING - - // Redraw the selection and/or cursor - function drawSelection(cm) { - var display = cm.display, doc = cm.doc, result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - var collapsed = range.empty(); - if (collapsed || cm.options.showCursorWhenSelecting) - drawSelectionCursor(cm, range, curFragment); - if (!collapsed) - drawSelectionRange(cm, range, selFragment); - } - - // Move the hidden textarea near the cursor to prevent scrolling artifacts - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, - headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, - headPos.left + lineOff.left - wrapOff.left)); - } - - return result; - } - - function showSelection(cm, drawn) { - removeChildrenAndAdd(cm.display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(cm.display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - cm.display.inputDiv.style.top = drawn.teTop + "px"; - cm.display.inputDiv.style.left = drawn.teLeft + "px"; - } - } - - function updateSelection(cm) { - showSelection(cm, drawSelection(cm)); - } - - // Draws a cursor for the given range - function drawSelectionCursor(cm, range, output) { - var pos = cursorCoords(cm, range.head, "div", null, null, !cm.options.singleCursorHeightPerLine); - - var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - - if (pos.other) { - // Secondary cursor, shown when on a 'jump' in bi-directional text - var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; - } - } - - // Draws the given range as a highlighted selection - function drawSelectionRange(cm, range, output) { - var display = cm.display, doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - - function add(left, top, width, bottom) { - if (top < 0) top = 0; - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + - "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + - "px; height: " + (bottom - top) + "px")); - } - - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias); - } - - iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { - var leftPos = coords(from, "left"), rightPos, left, right; - if (from == to) { - rightPos = leftPos; - left = right = leftPos.left; - } else { - rightPos = coords(to - 1, "right"); - if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } - left = leftPos.left; - right = rightPos.right; - } - if (fromArg == null && from == 0) left = leftSide; - if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part - add(left, leftPos.top, null, leftPos.bottom); - left = leftSide; - if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); - } - if (toArg == null && to == lineLen) right = rightSide; - if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) - start = leftPos; - if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) - end = rightPos; - if (left < leftSide + 1) left = leftSide; - add(left, rightPos.top, right - left, rightPos.bottom); - }); - return {start: start, end: end}; - } - - var sFrom = range.from(), sTo = range.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) - add(leftSide, leftEnd.bottom, null, rightStart.top); - } - - output.appendChild(fragment); - } - - // Cursor-blinking - function restartBlink(cm) { - if (!cm.state.focused) return; - var display = cm.display; - clearInterval(display.blinker); - var on = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) - display.blinker = setInterval(function() { - display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; - }, cm.options.cursorBlinkRate); - else if (cm.options.cursorBlinkRate < 0) - display.cursorDiv.style.visibility = "hidden"; - } - - // HIGHLIGHT WORKER - - function startWorker(cm, time) { - if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) - cm.state.highlight.set(time, bind(highlightWorker, cm)); - } - - function highlightWorker(cm) { - var doc = cm.doc; - if (doc.frontier < doc.first) doc.frontier = doc.first; - if (doc.frontier >= cm.display.viewTo) return; - var end = +new Date + cm.options.workTime; - var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); - var changedLines = []; - - doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { - if (doc.frontier >= cm.display.viewFrom) { // Visible - var oldStyles = line.styles; - var highlighted = highlightLine(cm, line, state, true); - line.styles = highlighted.styles; - var oldCls = line.styleClasses, newCls = highlighted.classes; - if (newCls) line.styleClasses = newCls; - else if (oldCls) line.styleClasses = null; - var ischange = !oldStyles || oldStyles.length != line.styles.length || - oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; - if (ischange) changedLines.push(doc.frontier); - line.stateAfter = copyState(doc.mode, state); - } else { - processLine(cm, line.text, state); - line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; - } - ++doc.frontier; - if (+new Date > end) { - startWorker(cm, cm.options.workDelay); - return true; - } - }); - if (changedLines.length) runInOp(cm, function() { - for (var i = 0; i < changedLines.length; i++) - regLineChange(cm, changedLines[i], "text"); - }); - } - - // Finds the line to start with when starting a parse. Tries to - // find a line with a stateAfter, so that it can start with a - // valid state. If that fails, it returns the line with the - // smallest indentation, which tends to need the least context to - // parse correctly. - function findStartLine(cm, n, precise) { - var minindent, minline, doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) return doc.first; - var line = getLine(doc, search - 1); - if (line.stateAfter && (!precise || search <= doc.frontier)) return search; - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline; - } - - function getStateBefore(cm, n, precise) { - var doc = cm.doc, display = cm.display; - if (!doc.mode.startState) return true; - var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; - if (!state) state = startState(doc.mode); - else state = copyState(doc.mode, state); - doc.iter(pos, n, function(line) { - processLine(cm, line.text, state); - var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; - line.stateAfter = save ? copyState(doc.mode, state) : null; - ++pos; - }); - if (precise) doc.frontier = pos; - return state; - } - - // POSITION MEASUREMENT - - function paddingTop(display) {return display.lineSpace.offsetTop;} - function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} - function paddingH(display) { - if (display.cachedPaddingH) return display.cachedPaddingH; - var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; - if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; - return data; - } - - function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } - function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; - } - function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; - } - - // Ensure the lineView.wrapping.heights array is populated. This is - // an array of bottom offsets for the lines that make up a drawn - // line. When lineWrapping is on, there might be more than one - // height. - function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i = 0; i < rects.length - 1; i++) { - var cur = rects[i], next = rects[i + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) - heights.push((cur.bottom + next.top) / 2 - rect.top); - } - } - heights.push(rect.bottom - rect.top); - } - } - - // Find a line map (mapping character offsets to text nodes) and a - // measurement cache for the given line number. (A line view might - // contain multiple lines when collapsed ranges are present.) - function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) - return {map: lineView.measure.map, cache: lineView.measure.cache}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineView.rest[i] == line) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineNo(lineView.rest[i]) > lineN) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; - } - - // Render a line into the hidden node display.externalMeasured. Used - // when measurement is needed for a line that's not in the viewport. - function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view; - } - - // Get a {top, bottom, left, right} box (in line-local coordinates) - // for a given character. - function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); - } - - // Find a line view that corresponds to the given line number. - function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) - return cm.display.view[findViewIndex(cm, lineN)]; - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) - return ext; - } - - // Measurement can be split in two steps, the set-up work that - // applies to the whole line, and the measurement of the actual - // character. Functions like coordsChar, that need to do a lot of - // measurements in a row, can thus ensure that the set-up work is - // only done once. - function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) - view = null; - else if (view && view.changes) - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - if (!view) - view = updateExternalMeasurement(cm, line); - - var info = mapFromLineView(view, line, lineN); - return { - line: line, view: view, rect: null, - map: info.map, cache: info.cache, before: info.before, - hasHeights: false - }; - } - - // Given a prepared measurement object, measures the position of an - // actual character (or fetches it from the cache). - function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) ch = -1; - var key = ch + (bias || ""), found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) - prepared.rect = prepared.view.text.getBoundingClientRect(); - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) prepared.cache[key] = found; - } - return {left: found.left, right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom}; - } - - var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; - - function measureCharInner(cm, prepared, ch, bias) { - var map = prepared.map; - - var node, start, end, collapse; - // First, search the line map for the text node corresponding to, - // or closest to, the target character. - for (var i = 0; i < map.length; i += 3) { - var mStart = map[i], mEnd = map[i + 1]; - if (ch < mStart) { - start = 0; end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) collapse = "right"; - } - if (start != null) { - node = map[i + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) - collapse = bias; - if (bias == "left" && start == 0) - while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { - node = map[(i -= 3) + 2]; - collapse = "left"; - } - if (bias == "right" && start == mEnd - mStart) - while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { - node = map[(i += 3) + 2]; - collapse = "right"; - } - break; - } - } - - var rect; - if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. - for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned - while (start && isExtendingChar(prepared.line.text.charAt(mStart + start))) --start; - while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end))) ++end; - if (ie && ie_version < 9 && start == 0 && end == mEnd - mStart) { - rect = node.parentNode.getBoundingClientRect(); - } else if (ie && cm.options.lineWrapping) { - var rects = range(node, start, end).getClientRects(); - if (rects.length) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = nullRect; - } else { - rect = range(node, start, end).getBoundingClientRect() || nullRect; - } - if (rect.left || rect.right || start == 0) break; - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); - } else { // If it is a widget, simply get the box for the whole widget. - if (start > 0) collapse = bias = "right"; - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = node.getBoundingClientRect(); - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) - rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; - else - rect = nullRect; - } - - var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - for (var i = 0; i < heights.length - 1; i++) - if (mid < heights[i]) break; - var top = i ? heights[i - 1] : 0, bot = heights[i]; - var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top: top, bottom: bot}; - if (!rect.left && !rect.right) result.bogus = true; - if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } - - return result; - } - - // Work around problem with bounding client rects on ranges being - // returned incorrectly when zoomed on IE10 and below. - function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || - screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) - return rect; - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return {left: rect.left * scaleX, right: rect.right * scaleX, - top: rect.top * scaleY, bottom: rect.bottom * scaleY}; - } - - function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - lineView.measure.caches[i] = {}; - } - } - - function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i = 0; i < cm.display.view.length; i++) - clearLineMeasurementCacheFor(cm.display.view[i]); - } - - function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; - cm.display.lineNumChars = null; - } - - function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } - function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } - - // Converts a {top, bottom, left, right} box from line-local - // coordinates into another coordinate system. Context may be one of - // "line", "div" (display.lineDiv), "local"/null (editor), "window", - // or "page". - function intoCoordSystem(cm, lineObj, rect, context) { - if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { - var size = widgetHeight(lineObj.widgets[i]); - rect.top += size; rect.bottom += size; - } - if (context == "line") return rect; - if (!context) context = "local"; - var yOff = heightAtLine(lineObj); - if (context == "local") yOff += paddingTop(cm.display); - else yOff -= cm.display.viewOffset; - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; rect.right += xOff; - } - rect.top += yOff; rect.bottom += yOff; - return rect; - } - - // Coverts a box from "div" coords to another coordinate system. - // Context may be "window", "page", "div", or "local"/null. - function fromCoordSystem(cm, coords, context) { - if (context == "div") return coords; - var left = coords.left, top = coords.top; - // First move into "page" coordinate system - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; - } - - function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) lineObj = getLine(cm.doc, pos.line); - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); - } - - // Returns a box for a given cursor position, which may have an - // 'other' property containing the position of the secondary cursor - // on a bidi boundary. - function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); - function get(ch, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); - if (right) m.left = m.right; else m.right = m.left; - return intoCoordSystem(cm, lineObj, m, context); - } - function getBidi(ch, partPos) { - var part = order[partPos], right = part.level % 2; - if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { - part = order[--partPos]; - ch = bidiRight(part) - (part.level % 2 ? 0 : 1); - right = true; - } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { - part = order[++partPos]; - ch = bidiLeft(part) - part.level % 2; - right = false; - } - if (right && ch == part.to && ch > part.from) return get(ch - 1); - return get(ch, right); - } - var order = getOrder(lineObj), ch = pos.ch; - if (!order) return get(ch); - var partPos = getBidiPartAt(order, ch); - var val = getBidi(ch, partPos); - if (bidiOther != null) val.other = getBidi(ch, bidiOther); - return val; - } - - // Used to cheaply estimate the coordinates for a position. Used for - // intermediate scroll updates. - function estimateCoords(cm, pos) { - var left = 0, pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return {left: left, right: left, top: top, bottom: top + lineObj.height}; - } - - // Positions returned by coordsChar contain some extra information. - // xRel is the relative x position of the input coordinates compared - // to the found position (so xRel > 0 means the coordinates are to - // the right of the character position, for example). When outside - // is true, that means the coordinates lie outside the line's - // vertical range. - function PosWithInfo(line, ch, outside, xRel) { - var pos = Pos(line, ch); - pos.xRel = xRel; - if (outside) pos.outside = true; - return pos; - } - - // Compute the character position closest to the given coordinates. - // Input must be lineSpace-local ("div" coordinate system). - function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) return PosWithInfo(doc.first, 0, true, -1); - var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; - if (lineN > last) - return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); - if (x < 0) x = 0; - - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var merged = collapsedSpanAtEnd(lineObj); - var mergedPos = merged && merged.find(0, true); - if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) - lineN = lineNo(lineObj = mergedPos.to.line); - else - return found; - } - } - - function coordsCharInner(cm, lineObj, lineNo, x, y) { - var innerOff = y - heightAtLine(lineObj); - var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - - function getX(ch) { - var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); - wrongLine = true; - if (innerOff > sp.bottom) return sp.left - adjust; - else if (innerOff < sp.top) return sp.left + adjust; - else wrongLine = false; - return sp.left; - } - - var bidi = getOrder(lineObj), dist = lineObj.text.length; - var from = lineLeft(lineObj), to = lineRight(lineObj); - var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; - - if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); - // Do a binary search between these bounds. - for (;;) { - if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { - var ch = x < fromX || x - fromX <= toX - x ? from : to; - var xDiff = x - (ch == from ? fromX : toX); - while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; - var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, - xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); - return pos; - } - var step = Math.ceil(dist / 2), middle = from + step; - if (bidi) { - middle = from; - for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); - } - var middleX = getX(middle); - if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} - else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} - } - } - - var measureText; - // Compute the default text height. - function textHeight(display) { - if (display.cachedTextHeight != null) return display.cachedTextHeight; - if (measureText == null) { - measureText = elt("pre"); - // Measure a bunch of lines, for browsers that compute - // fractional heights. - for (var i = 0; i < 49; ++i) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) display.cachedTextHeight = height; - removeChildren(display.measure); - return height || 1; - } - - // Compute the default character width. - function charWidth(display) { - if (display.cachedCharWidth != null) return display.cachedCharWidth; - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor]); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; - if (width > 2) display.cachedCharWidth = width; - return width || 10; - } - - // OPERATIONS - - // Operations are used to wrap a series of changes to the editor - // state in such a way that each change won't have to update the - // cursor and display (which would be awkward, slow, and - // error-prone). Instead, display updates are batched and then all - // combined and executed at once. - - var operationGroup = null; - - var nextOpId = 0; - // Start a new operation. - function startOperation(cm) { - cm.curOp = { - cm: cm, - viewChanged: false, // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, // Used to detect need to update scrollbar - forceUpdate: false, // Used to force a redraw - updateInput: null, // Whether to reset the input textarea - typing: false, // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, // Accumulated changes, for firing change events - cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already - selectionChanged: false, // Whether the selection needs to be redrawn - updateMaxLine: false, // Set when the widest line needs to be determined anew - scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, // Used to scroll to a specific position - id: ++nextOpId // Unique ID - }; - if (operationGroup) { - operationGroup.ops.push(cm.curOp); - } else { - cm.curOp.ownsGroup = operationGroup = { - ops: [cm.curOp], - delayedCallbacks: [] - }; - } - } - - function fireCallbacksForOps(group) { - // Calls delayed callbacks and cursorActivity handlers until no - // new ones appear - var callbacks = group.delayedCallbacks, i = 0; - do { - for (; i < callbacks.length; i++) - callbacks[i](); - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) - while (op.cursorActivityCalled < op.cursorActivityHandlers.length) - op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm); - } - } while (i < callbacks.length); - } - - // Finish an operation, updating the display and signalling delayed events - function endOperation(cm) { - var op = cm.curOp, group = op.ownsGroup; - if (!group) return; - - try { fireCallbacksForOps(group); } - finally { - operationGroup = null; - for (var i = 0; i < group.ops.length; i++) - group.ops[i].cm.curOp = null; - endOperations(group); - } - } - - // The DOM updates done when an operation finishes are batched so - // that the minimum number of relayouts are required. - function endOperations(group) { - var ops = group.ops; - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R1(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W1(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R2(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W2(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_finish(ops[i]); - } - - function endOperation_R1(op) { - var cm = op.cm, display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) findMaxLine(cm); - - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || - op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || - op.scrollToPos.to.line >= display.viewTo) || - display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && - new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); - } - - function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); - } - - function endOperation_R2(op) { - var cm = op.cm, display = cm.display; - if (op.updatedDisplay) updateHeightsInViewport(cm); - - op.barMeasure = measureForScrollbars(cm); - - // If the max line changed since it was last measured, measure it, - // and ensure the document's width matches it. - // updateDisplay_W2 will use these properties to do the actual resizing - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = - Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - - if (op.updatedDisplay || op.selectionChanged) - op.newSelectionNodes = drawSelection(cm); - } - - function endOperation_W2(op) { - var cm = op.cm; - - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) - setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); - cm.display.maxLineChanged = false; - } - - if (op.newSelectionNodes) - showSelection(cm, op.newSelectionNodes); - if (op.updatedDisplay) - setDocumentHeight(cm, op.barMeasure); - if (op.updatedDisplay || op.startHeight != cm.doc.height) - updateScrollbars(cm, op.barMeasure); - - if (op.selectionChanged) restartBlink(cm); - - if (cm.state.focused && op.updateInput) - resetInput(cm, op.typing); - } - - function endOperation_finish(op) { - var cm = op.cm, display = cm.display, doc = cm.doc; - - if (op.updatedDisplay) postUpdateDisplay(cm, op.update); - - // Abort mouse wheel delta measurement, when scrolling explicitly - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) - display.wheelStartX = display.wheelStartY = null; - - // Propagate the scroll position to the actual DOM scroller - if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { - doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); - display.scrollbars.setScrollTop(doc.scrollTop); - display.scroller.scrollTop = doc.scrollTop; - } - if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { - doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - displayWidth(cm), op.scrollLeft)); - display.scrollbars.setScrollLeft(doc.scrollLeft); - display.scroller.scrollLeft = doc.scrollLeft; - alignHorizontally(cm); - } - // If we need to scroll a specific position into view, do so. - if (op.scrollToPos) { - var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), - clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); - } - - // Fire events for markers that are hidden/unidden by editing or - // undoing - var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; - if (hidden) for (var i = 0; i < hidden.length; ++i) - if (!hidden[i].lines.length) signal(hidden[i], "hide"); - if (unhidden) for (var i = 0; i < unhidden.length; ++i) - if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); - - if (display.wrapper.offsetHeight) - doc.scrollTop = cm.display.scroller.scrollTop; - - // Fire change events, and delayed event handlers - if (op.changeObjs) - signal(cm, "changes", cm, op.changeObjs); - } - - // Run the given function in an operation - function runInOp(cm, f) { - if (cm.curOp) return f(); - startOperation(cm); - try { return f(); } - finally { endOperation(cm); } - } - // Wraps a function in an operation. Returns the wrapped function. - function operation(cm, f) { - return function() { - if (cm.curOp) return f.apply(cm, arguments); - startOperation(cm); - try { return f.apply(cm, arguments); } - finally { endOperation(cm); } - }; - } - // Used to add methods to editor and doc instances, wrapping them in - // operations. - function methodOp(f) { - return function() { - if (this.curOp) return f.apply(this, arguments); - startOperation(this); - try { return f.apply(this, arguments); } - finally { endOperation(this); } - }; - } - function docMethodOp(f) { - return function() { - var cm = this.cm; - if (!cm || cm.curOp) return f.apply(this, arguments); - startOperation(cm); - try { return f.apply(this, arguments); } - finally { endOperation(cm); } - }; - } - - // VIEW TRACKING - - // These objects are used to represent the visible (currently drawn) - // part of the document. A LineView may correspond to multiple - // logical lines, if those are connected by collapsed ranges. - function LineView(doc, line, lineN) { - // The starting line - this.line = line; - // Continuing lines, if any - this.rest = visualLineContinued(line); - // Number of logical lines in this visual line - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); - } - - // Create a range of LineView objects for the given lines. - function buildViewArray(cm, from, to) { - var array = [], nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array; - } - - // Updates the display.view data structure for a given change to the - // document. From and to are in pre-change coordinates. Lendiff is - // the amount of lines added or subtracted by the change. This is - // used for changes that span multiple lines, or change the way - // lines are divided into visual lines. regLineChange (below) - // registers single-line changes. - function regChange(cm, from, to, lendiff) { - if (from == null) from = cm.doc.first; - if (to == null) to = cm.doc.first + cm.doc.size; - if (!lendiff) lendiff = 0; - - var display = cm.display; - if (lendiff && to < display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers > from)) - display.updateLineNumbers = from; - - cm.curOp.viewChanged = true; - - if (from >= display.viewTo) { // Change after - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) - resetView(cm); - } else if (to <= display.viewFrom) { // Change before - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap - resetView(cm); - } else if (from <= display.viewFrom) { // Top overlap - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { // Bottom overlap - var cut = viewCuttingPoint(cm, from, from, -1); - if (cut) { - display.view = display.view.slice(0, cut.index); - display.viewTo = cut.lineN; - } else { - resetView(cm); - } - } else { // Gap in the middle - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index) - .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) - .concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) - ext.lineN += lendiff; - else if (from < ext.lineN + ext.size) - display.externalMeasured = null; - } - } - - // Register a change to a single line. Type must be one of "text", - // "gutter", "class", "widget" - function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) - display.externalMeasured = null; - - if (line < display.viewFrom || line >= display.viewTo) return; - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) return; - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) arr.push(type); - } - - // Clear the view. - function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; - } - - // Find the view element corresponding to a given line. Return null - // when the line isn't visible. - function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) return null; - n -= cm.display.viewFrom; - if (n < 0) return null; - var view = cm.display.view; - for (var i = 0; i < view.length; i++) { - n -= view[i].size; - if (n < 0) return i; - } - } - - function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), diff, view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) - return {index: index, lineN: newN}; - for (var i = 0, n = cm.display.viewFrom; i < index; i++) - n += view[i].size; - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) return null; - diff = (n + view[index].size) - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) return null; - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return {index: index, lineN: newN}; - } - - // Force the view to cover a given range, adding empty view element - // or clipping off existing ones as needed. - function adjustView(cm, from, to) { - var display = cm.display, view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) - display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); - else if (display.viewFrom < from) - display.view = display.view.slice(findViewIndex(cm, from)); - display.viewFrom = from; - if (display.viewTo < to) - display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); - else if (display.viewTo > to) - display.view = display.view.slice(0, findViewIndex(cm, to)); - } - display.viewTo = to; - } - - // Count the number of lines in the view whose DOM representation is - // out of date (or nonexistent). - function countDirtyView(cm) { - var view = cm.display.view, dirty = 0; - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; - } - return dirty; - } - - // INPUT HANDLING - - // Poll for input changes, using the normal rate of polling. This - // runs as long as the editor is focused. - function slowPoll(cm) { - if (cm.display.pollingFast) return; - cm.display.poll.set(cm.options.pollInterval, function() { - readInput(cm); - if (cm.state.focused) slowPoll(cm); - }); - } - - // When an event has just come in that is likely to add or change - // something in the input textarea, we poll faster, to ensure that - // the change appears on the screen quickly. - function fastPoll(cm) { - var missed = false; - cm.display.pollingFast = true; - function p() { - var changed = readInput(cm); - if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);} - else {cm.display.pollingFast = false; slowPoll(cm);} - } - cm.display.poll.set(20, p); - } - - // This will be set to an array of strings when copying, so that, - // when pasting, we know what kind of selections the copied text - // was made out of. - var lastCopied = null; - - // Read input from the textarea, and update the document to match. - // When something is selected, it is present in the textarea, and - // selected (unless it is huge, in which case a placeholder is - // used). When nothing is selected, the cursor sits after previously - // seen text (can be empty), which is stored in prevInput (we must - // not reset the textarea when typing, because that breaks IME). - function readInput(cm) { - var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc; - // Since this is called a *lot*, try to bail out as cheaply as - // possible when it is clear that nothing happened. hasSelection - // will be the case when there is a lot of text in the textarea, - // in which case reading its value would be expensive. - if (!cm.state.focused || (hasSelection(input) && !prevInput) || isReadOnly(cm) || cm.options.disableInput || cm.state.keySeq) - return false; - // See paste handler for more on the fakedLastChar kludge - if (cm.state.pasteIncoming && cm.state.fakedLastChar) { - input.value = input.value.substring(0, input.value.length - 1); - cm.state.fakedLastChar = false; - } - var text = input.value; - // If nothing changed, bail. - if (text == prevInput && !cm.somethingSelected()) return false; - // Work around nonsensical selection resetting in IE9/10, and - // inexplicable appearance of private area unicode characters on - // some key combos in Mac (#2689). - if (ie && ie_version >= 9 && cm.display.inputHasSelection === text || - mac && /[\uf700-\uf7ff]/.test(text)) { - resetInput(cm); - return false; - } - - var withOp = !cm.curOp; - if (withOp) startOperation(cm); - cm.display.shift = false; - - if (text.charCodeAt(0) == 0x200b && doc.sel == cm.display.selForContextMenu && !prevInput) - prevInput = "\u200b"; - // Find the part of the input that is actually new - var same = 0, l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; - var inserted = text.slice(same), textLines = splitLines(inserted); - - // When pasing N lines into N selections, insert one line per selection - var multiPaste = null; - if (cm.state.pasteIncoming && doc.sel.ranges.length > 1) { - if (lastCopied && lastCopied.join("\n") == inserted) - multiPaste = doc.sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines); - else if (textLines.length == doc.sel.ranges.length) - multiPaste = map(textLines, function(l) { return [l]; }); - } - - // Normal behavior is to insert the new text into every selection - for (var i = doc.sel.ranges.length - 1; i >= 0; i--) { - var range = doc.sel.ranges[i]; - var from = range.from(), to = range.to(); - // Handle deletion - if (same < prevInput.length) - from = Pos(from.line, from.ch - (prevInput.length - same)); - // Handle overwrite - else if (cm.state.overwrite && range.empty() && !cm.state.pasteIncoming) - to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); - var updateInput = cm.curOp.updateInput; - var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, - origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"}; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - // When an 'electric' character is inserted, immediately trigger a reindent - if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && - cm.options.smartIndent && range.head.ch < 100 && - (!i || doc.sel.ranges[i - 1].head.line != range.head.line)) { - var mode = cm.getModeAt(range.head); - var end = changeEnd(changeEvent); - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) - if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indentLine(cm, end.line, "smart"); - break; - } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch))) - indentLine(cm, end.line, "smart"); - } - } - } - ensureCursorVisible(cm); - cm.curOp.updateInput = updateInput; - cm.curOp.typing = true; - - // Don't leave long text in the textarea, since it makes further polling slow - if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = ""; - else cm.display.prevInput = text; - if (withOp) endOperation(cm); - cm.state.pasteIncoming = cm.state.cutIncoming = false; - return true; - } - - // Reset the input to correspond to the selection (or to be empty, - // when not typing and nothing is selected) - function resetInput(cm, typing) { - if (cm.display.contextMenuPending) return; - var minimal, selected, doc = cm.doc; - if (cm.somethingSelected()) { - cm.display.prevInput = ""; - var range = doc.sel.primary(); - minimal = hasCopyEvent && - (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); - var content = minimal ? "-" : selected || cm.getSelection(); - cm.display.input.value = content; - if (cm.state.focused) selectInput(cm.display.input); - if (ie && ie_version >= 9) cm.display.inputHasSelection = content; - } else if (!typing) { - cm.display.prevInput = cm.display.input.value = ""; - if (ie && ie_version >= 9) cm.display.inputHasSelection = null; - } - cm.display.inaccurateSelection = minimal; - } - - function focusInput(cm) { - if (cm.options.readOnly != "nocursor" && (!mobile || activeElt() != cm.display.input)) - cm.display.input.focus(); - } - - function ensureFocus(cm) { - if (!cm.state.focused) { focusInput(cm); onFocus(cm); } - } - - function isReadOnly(cm) { - return cm.options.readOnly || cm.doc.cantEdit; - } - - // EVENT HANDLERS - - // Attach the necessary event handlers when initializing the editor - function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - // Older IE's will not fire a second mousedown for a double click - if (ie && ie_version < 11) - on(d.scroller, "dblclick", operation(cm, function(e) { - if (signalDOMEvent(cm, e)) return; - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); - else - on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); - // Prevent normal selection in the editor (we handle our own) - on(d.lineSpace, "selectstart", function(e) { - if (!eventInWidget(d, e)) e_preventDefault(e); - }); - // Some browsers fire contextmenu *after* opening the menu, at - // which point we can't mess with it anymore. Context menu is - // handled in onMouseDown for these browsers. - if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); - - // Sync scrolling between fake scrollbars and real scrollable - // area, ensure viewport is updated when scrolling. - on(d.scroller, "scroll", function() { - if (d.scroller.clientHeight) { - setScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - - // Listen to wheel events in order to try and update the viewport on time. - on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); - on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); - - // Prevent wrapper from ever scrolling - on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); - - on(d.input, "keyup", function(e) { onKeyUp.call(cm, e); }); - on(d.input, "input", function() { - if (ie && ie_version >= 9 && cm.display.inputHasSelection) cm.display.inputHasSelection = null; - readInput(cm); - }); - on(d.input, "keydown", operation(cm, onKeyDown)); - on(d.input, "keypress", operation(cm, onKeyPress)); - on(d.input, "focus", bind(onFocus, cm)); - on(d.input, "blur", bind(onBlur, cm)); - - function drag_(e) { - if (!signalDOMEvent(cm, e)) e_stop(e); - } - if (cm.options.dragDrop) { - on(d.scroller, "dragstart", function(e){onDragStart(cm, e);}); - on(d.scroller, "dragenter", drag_); - on(d.scroller, "dragover", drag_); - on(d.scroller, "drop", operation(cm, onDrop)); - } - on(d.scroller, "paste", function(e) { - if (eventInWidget(d, e)) return; - cm.state.pasteIncoming = true; - focusInput(cm); - fastPoll(cm); - }); - on(d.input, "paste", function() { - // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206 - // Add a char to the end of textarea before paste occur so that - // selection doesn't span to the end of textarea. - if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) { - var start = d.input.selectionStart, end = d.input.selectionEnd; - d.input.value += "$"; - // The selection end needs to be set before the start, otherwise there - // can be an intermediate non-empty selection between the two, which - // can override the middle-click paste buffer on linux and cause the - // wrong thing to get pasted. - d.input.selectionEnd = end; - d.input.selectionStart = start; - cm.state.fakedLastChar = true; - } - cm.state.pasteIncoming = true; - fastPoll(cm); - }); - - function prepareCopyCut(e) { - if (cm.somethingSelected()) { - lastCopied = cm.getSelections(); - if (d.inaccurateSelection) { - d.prevInput = ""; - d.inaccurateSelection = false; - d.input.value = lastCopied.join("\n"); - selectInput(d.input); - } - } else { - var text = [], ranges = []; - for (var i = 0; i < cm.doc.sel.ranges.length; i++) { - var line = cm.doc.sel.ranges[i].head.line; - var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - if (e.type == "cut") { - cm.setSelections(ranges, null, sel_dontScroll); - } else { - d.prevInput = ""; - d.input.value = text.join("\n"); - selectInput(d.input); - } - lastCopied = text; - } - if (e.type == "cut") cm.state.cutIncoming = true; - } - on(d.input, "cut", prepareCopyCut); - on(d.input, "copy", prepareCopyCut); - - // Needed to handle Tab key in KHTML - if (khtml) on(d.sizer, "mouseup", function() { - if (activeElt() == d.input) d.input.blur(); - focusInput(cm); - }); - } - - // Called when the window resizes - function onResize(cm) { - var d = cm.display; - if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) - return; - // Might be a text scaling operation, clear size caches. - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); - } - - // MOUSE EVENTS - - // Return true when the given mouse event happened in a widget - function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || - (n.parentNode == display.sizer && n != display.mover)) - return true; - } - } - - // Given a mouse event, find the corresponding position. If liberal - // is false, it checks whether a gutter or scrollbar was clicked, - // and returns null if it was. forRect is used by rectangular - // selections, and tries to estimate a character position even for - // coordinates beyond the right of the text. - function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("not-content") == "true") return null; - - var x, y, space = display.lineSpace.getBoundingClientRect(); - // Fails unpredictably on IE[67] when mouse is dragged around quickly. - try { x = e.clientX - space.left; y = e.clientY - space.top; } - catch (e) { return null; } - var coords = coordsChar(cm, x, y), line; - if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords; - } - - // A mouse down can be a single click, double click, triple click, - // start of selection drag, start of text drag, new cursor - // (ctrl-click), rectangle drag (alt-drag), or xwin - // middle-click-paste. Or it might be a click on something we should - // not interfere with, such as a scrollbar or widget. - function onMouseDown(e) { - if (signalDOMEvent(this, e)) return; - var cm = this, display = cm.display; - display.shift = e.shiftKey; - - if (eventInWidget(display, e)) { - if (!webkit) { - // Briefly turn off draggability, to allow widgets to do - // normal dragging things. - display.scroller.draggable = false; - setTimeout(function(){display.scroller.draggable = true;}, 100); - } - return; - } - if (clickInGutter(cm, e)) return; - var start = posFromMouse(cm, e); - window.focus(); - - switch (e_button(e)) { - case 1: - if (start) - leftButtonDown(cm, e, start); - else if (e_target(e) == display.scroller) - e_preventDefault(e); - break; - case 2: - if (webkit) cm.state.lastMiddleDown = +new Date; - if (start) extendSelection(cm.doc, start); - setTimeout(bind(focusInput, cm), 20); - e_preventDefault(e); - break; - case 3: - if (captureRightClick) onContextMenu(cm, e); - break; - } - } - - var lastClick, lastDoubleClick; - function leftButtonDown(cm, e, start) { - setTimeout(bind(ensureFocus, cm), 0); - - var now = +new Date, type; - if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { - type = "triple"; - } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { - type = "double"; - lastDoubleClick = {time: now, pos: start}; - } else { - type = "single"; - lastClick = {time: now, pos: start}; - } - - var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; - if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && - type == "single" && (contained = sel.contains(start)) > -1 && - !sel.ranges[contained].empty()) - leftButtonStartDrag(cm, e, start, modifier); - else - leftButtonSelect(cm, e, start, type, modifier); - } - - // Start a text drag. When it ends, see if any dragging actually - // happen, and treat as a click if it didn't. - function leftButtonStartDrag(cm, e, start, modifier) { - var display = cm.display; - var dragEnd = operation(cm, function(e2) { - if (webkit) display.scroller.draggable = false; - cm.state.draggingText = false; - off(document, "mouseup", dragEnd); - off(display.scroller, "drop", dragEnd); - if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { - e_preventDefault(e2); - if (!modifier) - extendSelection(cm.doc, start); - focusInput(cm); - // Work around unexplainable focus problem in IE9 (#2127) - if (ie && ie_version == 9) - setTimeout(function() {document.body.focus(); focusInput(cm);}, 20); - } - }); - // Let the drag handler handle this. - if (webkit) display.scroller.draggable = true; - cm.state.draggingText = dragEnd; - // IE's approach to draggable - if (display.scroller.dragDrop) display.scroller.dragDrop(); - on(document, "mouseup", dragEnd); - on(display.scroller, "drop", dragEnd); - } - - // Normal selection, as opposed to text dragging. - function leftButtonSelect(cm, e, start, type, addNew) { - var display = cm.display, doc = cm.doc; - e_preventDefault(e); - - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; - if (addNew && !e.shiftKey) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) - ourRange = ranges[ourIndex]; - else - ourRange = new Range(start, start); - } else { - ourRange = doc.sel.primary(); - } - - if (e.altKey) { - type = "rect"; - if (!addNew) ourRange = new Range(start, start); - start = posFromMouse(cm, e, true, true); - ourIndex = -1; - } else if (type == "double") { - var word = cm.findWordAt(start); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, word.anchor, word.head); - else - ourRange = word; - } else if (type == "triple") { - var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, line.anchor, line.head); - else - ourRange = line; - } else { - ourRange = extendRange(doc, ourRange, start); - } - - if (!addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), - {scroll: false, origin: "*mouse"}); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single") { - setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0)); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) return; - lastPos = pos; - - if (type == "rect") { - var ranges = [], tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); - line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); - if (left == right) - ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); - else if (text.length > leftPos) - ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); - } - if (!ranges.length) ranges.push(new Range(start, start)); - setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), - {origin: "*mouse", scroll: false}); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var anchor = oldRange.anchor, head = pos; - if (type != "single") { - if (type == "double") - var range = cm.findWordAt(pos); - else - var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); - if (cmp(range.anchor, anchor) > 0) { - head = range.head; - anchor = minPos(oldRange.from(), range.anchor); - } else { - head = range.anchor; - anchor = maxPos(oldRange.to(), range.head); - } - } - var ranges = startSel.ranges.slice(0); - ranges[ourIndex] = new Range(clipPos(doc, anchor), head); - setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); - } - } - - var editorSize = display.wrapper.getBoundingClientRect(); - // Used to ensure timeout re-tries don't fire when another extend - // happened in the meantime (clearTimeout isn't reliable -- at - // least on Chrome, the timeouts still happen even when cleared, - // if the clear happens after their scheduled firing time). - var counter = 0; - - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, type == "rect"); - if (!cur) return; - if (cmp(cur, lastPos) != 0) { - ensureFocus(cm); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) - setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) setTimeout(operation(cm, function() { - if (counter != curCount) return; - display.scroller.scrollTop += outside; - extend(e); - }), 50); - } - } - - function done(e) { - counter = Infinity; - e_preventDefault(e); - focusInput(cm); - off(document, "mousemove", move); - off(document, "mouseup", up); - doc.history.lastSelOrigin = null; - } - - var move = operation(cm, function(e) { - if (!e_button(e)) done(e); - else extend(e); - }); - var up = operation(cm, done); - on(document, "mousemove", move); - on(document, "mouseup", up); - } - - // Determines whether an event happened in the gutter, and fires the - // handlers for the corresponding event. - function gutterEvent(cm, e, type, prevent, signalfn) { - try { var mX = e.clientX, mY = e.clientY; } - catch(e) { return false; } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; - if (prevent) e_preventDefault(e); - - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - - if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); - mY -= lineBox.top - display.viewOffset; - - for (var i = 0; i < cm.options.gutters.length; ++i) { - var g = display.gutters.childNodes[i]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.options.gutters[i]; - signalfn(cm, type, cm, line, gutter, e); - return e_defaultPrevented(e); - } - } - } - - function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true, signalLater); - } - - // Kludge to work around strange IE behavior where it'll sometimes - // re-fire a series of drag-related events right after the drop (#1551) - var lastDrop = 0; - - function onDrop(e) { - var cm = this; - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) - return; - e_preventDefault(e); - if (ie) lastDrop = +new Date; - var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; - if (!pos || isReadOnly(cm)) return; - // Might be a file drop, in which case we simply extract the text - // and insert it. - if (files && files.length && window.FileReader && window.File) { - var n = files.length, text = Array(n), read = 0; - var loadFile = function(file, i) { - var reader = new FileReader; - reader.onload = operation(cm, function() { - text[i] = reader.result; - if (++read == n) { - pos = clipPos(cm.doc, pos); - var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); - } - }); - reader.readAsText(file); - }; - for (var i = 0; i < n; ++i) loadFile(files[i], i); - } else { // Normal drop - // Don't do a replace if the drop happened inside of the selected text. - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - // Ensure the editor is re-focused - setTimeout(bind(focusInput, cm), 20); - return; - } - try { - var text = e.dataTransfer.getData("Text"); - if (text) { - if (cm.state.draggingText && !(mac ? e.metaKey : e.ctrlKey)) - var selected = cm.listSelections(); - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) for (var i = 0; i < selected.length; ++i) - replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); - cm.replaceSelection(text, "around", "paste"); - focusInput(cm); - } - } - catch(e){} - } - } - - function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; - - e.dataTransfer.setData("Text", cm.getSelection()); - - // Use dummy image instead of default browsers image. - // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - // Force a relayout, or Opera won't use our image for some obscure reason - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) img.parentNode.removeChild(img); - } - } - - // SCROLL EVENTS - - // Sync the scrollable area and scrollbars, ensure the viewport - // covers the visible area. - function setScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) return; - cm.doc.scrollTop = val; - if (!gecko) updateDisplaySimple(cm, {top: val}); - if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (gecko) updateDisplaySimple(cm); - startWorker(cm, 100); - } - // Sync scroller and scrollbar, ensure the gutter elements are - // aligned. - function setScrollLeft(cm, val, isScroller) { - if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; - val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; - cm.display.scrollbars.setScrollLeft(val); - } - - // Since the delta values reported on mouse wheel events are - // unstandardized between browsers and even browser versions, and - // generally horribly unpredictable, this code starts by measuring - // the scroll effect that the first few mouse wheel events have, - // and, from that, detects the way it can convert deltas to pixel - // offsets afterwards. - // - // The reason we want to know the amount a wheel event will scroll - // is that it gives us a chance to update the display before the - // actual scrolling happens, reducing flickering. - - var wheelSamples = 0, wheelPixelsPerUnit = null; - // Fill in a browser-detected starting value on browsers where we - // know one. These don't have to be accurate -- the result of them - // being wrong would just be a slight flicker on the first wheel - // scroll (if it is large enough). - if (ie) wheelPixelsPerUnit = -.53; - else if (gecko) wheelPixelsPerUnit = 15; - else if (chrome) wheelPixelsPerUnit = -.7; - else if (safari) wheelPixelsPerUnit = -1/3; - - var wheelEventDelta = function(e) { - var dx = e.wheelDeltaX, dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; - else if (dy == null) dy = e.wheelDelta; - return {x: dx, y: dy}; - }; - CodeMirror.wheelEventPixels = function(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta; - }; - - function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; - - var display = cm.display, scroll = display.scroller; - // Quit if there's nothing to scroll here - if (!(dx && scroll.scrollWidth > scroll.clientWidth || - dy && scroll.scrollHeight > scroll.clientHeight)) return; - - // Webkit browsers on OS X abort momentum scrolls when the target - // of the scroll event is removed from the scrollable element. - // This hack (see related code in patchDisplay) makes sure the - // element is kept around. - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i = 0; i < view.length; i++) { - if (view[i].node == cur) { - cm.display.currentWheelTarget = cur; - break outer; - } - } - } - } - - // On some browsers, horizontal scrolling will cause redraws to - // happen before the gutter has been realigned, causing it to - // wriggle around in a most unseemly way. When we have an - // estimated pixels/delta value, we just handle horizontal - // scrolling entirely here. It'll be slightly off from native, but - // better than glitching out. - if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { - if (dy) - setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); - setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); - e_preventDefault(e); - display.wheelStartX = null; // Abort measurement, if in progress - return; - } - - // 'Project' the visible viewport to cover the area that is being - // scrolled into view (if we know enough to estimate it). - if (dy && wheelPixelsPerUnit != null) { - var pixels = dy * wheelPixelsPerUnit; - var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; - if (pixels < 0) top = Math.max(0, top + pixels - 50); - else bot = Math.min(cm.doc.height, bot + pixels + 50); - updateDisplaySimple(cm, {top: top, bottom: bot}); - } - - if (wheelSamples < 20) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; display.wheelDY = dy; - setTimeout(function() { - if (display.wheelStartX == null) return; - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || - (movedX && display.wheelDX && movedX / display.wheelDX); - display.wheelStartX = display.wheelStartY = null; - if (!sample) return; - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; display.wheelDY += dy; - } - } - } - - // KEY EVENTS - - // Run a handler that was bound to a key. - function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) return false; - } - // Ensure previous input has been read, so that the handler sees a - // consistent view of the document - if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false; - var prevShift = cm.display.shift, done = false; - try { - if (isReadOnly(cm)) cm.state.suppressEdits = true; - if (dropShift) cm.display.shift = false; - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done; - } - - function lookupKeyForEditor(cm, name, handle) { - for (var i = 0; i < cm.state.keyMaps.length; i++) { - var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); - if (result) return result; - } - return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) - || lookupKey(name, cm.options.keyMap, handle, cm); - } - - var stopSeq = new Delayed; - function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) return "handled"; - stopSeq.set(50, function() { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - resetInput(cm); - } - }); - name = seq + " " + name; - } - var result = lookupKeyForEditor(cm, name, handle); - - if (result == "multi") - cm.state.keySeq = name; - if (result == "handled") - signalLater(cm, "keyHandled", cm, name, e); - - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - - if (seq && !result && /\'$/.test(name)) { - e_preventDefault(e); - return true; - } - return !!result; - } - - // Handle a key from the keydown event. - function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) return false; - - if (e.shiftKey && !cm.state.keySeq) { - // First try to resolve full name (including 'Shift-'). Failing - // that, see if there is a cursor-motion command (starting with - // 'go') bound to the keyname without 'Shift-'. - return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) - || dispatchKey(cm, name, e, function(b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) - return doHandleBinding(cm, b); - }); - } else { - return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); - } - } - - // Handle a key from the keypress event - function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, - function(b) { return doHandleBinding(cm, b, true); }); - } - - var lastStoppedKey = null; - function onKeyDown(e) { - var cm = this; - ensureFocus(cm); - if (signalDOMEvent(cm, e)) return; - // IE does strange things with escape. - if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - // Opera has no cut event... we try to at least catch the key combo - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) - cm.replaceSelection("", null, "cut"); - } - - // Turn mouse into crosshair when Alt is held on Mac. - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) - showCrossHair(cm); - } - - function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); - } - - function onKeyUp(e) { - if (e.keyCode == 16) this.doc.sel.shift = false; - signalDOMEvent(this, e); - } - - function onKeyPress(e) { - var cm = this; - if (signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; - var keyCode = e.keyCode, charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} - if (((presto && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return; - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - if (handleCharBinding(cm, e, ch)) return; - if (ie && ie_version >= 9) cm.display.inputHasSelection = null; - fastPoll(cm); - } - - // FOCUS/BLUR EVENTS - - function onFocus(cm) { - if (cm.options.readOnly == "nocursor") return; - if (!cm.state.focused) { - signal(cm, "focus", cm); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - // The prevInput test prevents this from firing when a context - // menu is closed (since the resetInput would kill the - // select-all detection hack) - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - resetInput(cm); - if (webkit) setTimeout(bind(resetInput, cm, true), 0); // Issue #1730 - } - } - slowPoll(cm); - restartBlink(cm); - } - function onBlur(cm) { - if (cm.state.focused) { - signal(cm, "blur", cm); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); - } - - // CONTEXT MENU HANDLING - - // To make the context menu work, we need to briefly unhide the - // textarea (making it as unobtrusive as possible) to let the - // right-click take effect on it. - function onContextMenu(cm, e) { - if (signalDOMEvent(cm, e, "contextmenu")) return; - var display = cm.display; - if (eventInWidget(display, e) || contextMenuInGutter(cm, e)) return; - - var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; - if (!pos || presto) return; // Opera is difficult. - - // Reset the current text selection only if the click is done outside of the selection - // and 'resetSelectionOnContextMenu' option is true. - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) - operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); - - var oldCSS = display.input.style.cssText; - display.inputDiv.style.position = "absolute"; - display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + - "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + - (ie ? "rgba(255, 255, 255, .05)" : "transparent") + - "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) - focusInput(cm); - if (webkit) window.scrollTo(null, oldScrollY); - resetInput(cm); - // Adds "Select all" to context menu in FF - if (!cm.somethingSelected()) display.input.value = display.prevInput = " "; - display.contextMenuPending = true; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - - // Select-all will be greyed out if there's nothing to select, so - // this adds a zero-width space so that we can later check whether - // it got selected. - function prepareSelectAllHack() { - if (display.input.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = display.input.value = "\u200b" + (selected ? display.input.value : ""); - display.prevInput = selected ? "" : "\u200b"; - display.input.selectionStart = 1; display.input.selectionEnd = extval.length; - // Re-set this, in case some other handler touched the - // selection in the meantime. - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - display.contextMenuPending = false; - display.inputDiv.style.position = "relative"; - display.input.style.cssText = oldCSS; - if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); - slowPoll(cm); - - // Try to detect the user choosing select-all - if (display.input.selectionStart != null) { - if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); - var i = 0, poll = function() { - if (display.selForContextMenu == cm.doc.sel && display.input.selectionStart == 0) - operation(cm, commands.selectAll)(cm); - else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); - else resetInput(cm); - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - - if (ie && ie_version >= 9) prepareSelectAllHack(); - if (captureRightClick) { - e_stop(e); - var mouseup = function() { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } - } - - function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) return false; - return gutterEvent(cm, e, "gutterContextMenu", false, signal); - } - - // UPDATING - - // Compute the position of the end of a change (its 'to' property - // refers to the pre-change end). - var changeEnd = CodeMirror.changeEnd = function(change) { - if (!change.text) return change.to; - return Pos(change.from.line + change.text.length - 1, - lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); - }; - - // Adjust a position to refer to the post-change position of the - // same text, or the end of the change if the change covers it. - function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) return pos; - if (cmp(pos, change.to) <= 0) return changeEnd(change); - - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; - if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; - return Pos(line, ch); - } - - function computeSelAfterChange(doc, change) { - var out = []; - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - out.push(new Range(adjustForChange(range.anchor, change), - adjustForChange(range.head, change))); - } - return normalizeSelection(out, doc.sel.primIndex); - } - - function offsetPos(pos, old, nw) { - if (pos.line == old.line) - return Pos(nw.line, pos.ch - old.ch + nw.ch); - else - return Pos(nw.line + (pos.line - old.line), pos.ch); - } - - // Used by replaceSelections to allow moving the selection to the - // start or around the replaced test. Hint may be "start" or "around". - function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; - out[i] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex); - } - - // Allow "beforeChange" event handlers to influence a change - function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function() { this.canceled = true; } - }; - if (update) obj.update = function(from, to, text, origin) { - if (from) this.from = clipPos(doc, from); - if (to) this.to = clipPos(doc, to); - if (text) this.text = text; - if (origin !== undefined) this.origin = origin; - }; - signal(doc, "beforeChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); - - if (obj.canceled) return null; - return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; - } - - // Apply a change to a document, and add it to the document's - // history, and propagating it to all linked documents. - function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); - if (doc.cm.state.suppressEdits) return; - } - - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) return; - } - - // Possibly split or suppress the update based on the presence - // of read-only spans in its range. - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i = split.length - 1; i >= 0; --i) - makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); - } else { - makeChangeInner(doc, change); - } - } - - function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); - }); - } - - // Revert a change stored in a document's history. - function makeChangeFromHistory(doc, type, allowSelectionOnly) { - if (doc.cm && doc.cm.state.suppressEdits) return; - - var hist = doc.history, event, selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; - - // Verify that there is a useable event (so that ctrl-z won't - // needlessly clear selection events) - for (var i = 0; i < source.length; i++) { - event = source[i]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) - break; - } - if (i == source.length) return; - hist.lastOrigin = hist.lastSelOrigin = null; - - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, {clearRedo: false}); - return; - } - selAfter = event; - } - else break; - } - - // Build up a reverse change object to add to the opposite history - // stack (redo when undoing, and vice versa). - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({changes: antiChanges, generation: hist.generation}); - hist.generation = event.generation || ++hist.maxGeneration; - - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - - for (var i = event.changes.length - 1; i >= 0; --i) { - var change = event.changes[i]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return; - } - - antiChanges.push(historyChangeFromChange(doc, change)); - - var after = i ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); - var rebased = []; - - // Propagate to the linked documents - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); - }); - } - } - - // Sub-views need their line numbers shifted when text is added - // above or below them in the parent document. - function shiftDoc(doc, distance) { - if (distance == 0) return; - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function(range) { - return new Range(Pos(range.anchor.line + distance, range.anchor.ch), - Pos(range.head.line + distance, range.head.ch)); - }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) - regLineChange(doc.cm, l, "gutter"); - } - } - - // More lower-level change function, handling only a single document - // (not linked ones). - function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) - return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); - - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return; - } - if (change.from.line > doc.lastLine()) return; - - // Clip the change to the size of this doc - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], origin: change.origin}; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], origin: change.origin}; - } - - change.removed = getBetween(doc, change.from, change.to); - - if (!selAfter) selAfter = computeSelAfterChange(doc, change); - if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); - else updateDoc(doc, change, spans); - setSelectionNoUndo(doc, selAfter, sel_dontScroll); - } - - // Handle the interaction of a change to a document with the editor - // that this document is part of. - function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, display = cm.display, from = change.from, to = change.to; - - var recomputeMaxLength = false, checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function(line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true; - } - }); - } - - if (doc.sel.contains(change.from, change.to) > -1) - signalCursorActivity(cm); - - updateDoc(doc, change, spans, estimateHeight(cm)); - - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function(line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) cm.curOp.updateMaxLine = true; - } - - // Adjust frontier, schedule worker - doc.frontier = Math.min(doc.frontier, from.line); - startWorker(cm, 400); - - var lendiff = change.text.length - (to.line - from.line) - 1; - // Remember that these lines changed, for updating the display - if (change.full) - regChange(cm); - else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) - regLineChange(cm, from.line, "text"); - else - regChange(cm, from.line, to.line + 1, lendiff); - - var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from: from, to: to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) signalLater(cm, "change", cm, obj); - if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); - } - cm.display.selForContextMenu = null; - } - - function replaceRange(doc, code, from, to, origin) { - if (!to) to = from; - if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } - if (typeof code == "string") code = splitLines(code); - makeChange(doc, {from: from, to: to, text: code, origin: origin}); - } - - // SCROLLING THINGS INTO VIEW - - // If an editor sits on the top or bottom of the window, partially - // scrolled out of view, this ensures that the cursor is visible. - function maybeScrollWindow(cm, coords) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) return; - - var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; - if (coords.top + box.top < 0) doScroll = true; - else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + - (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + - (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + - coords.left + "px; width: 2px;"); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } - } - - // Scroll a given position into view (immediately), verifying that - // it actually became visible (as line heights are accurately - // measured, the position of something may 'drift' during drawing). - function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) margin = 0; - for (var limit = 0; limit < 5; limit++) { - var changed = false, coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), - Math.min(coords.top, endCoords.top) - margin, - Math.max(coords.left, endCoords.left), - Math.max(coords.bottom, endCoords.bottom) + margin); - var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - setScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; - } - if (!changed) break; - } - return coords; - } - - // Scroll a given set of coordinates into view (immediately). - function scrollIntoView(cm, x1, y1, x2, y2) { - var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); - if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); - if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); - } - - // Calculate a new scroll position needed to scroll the given - // rectangle into view. Returns an object with scrollTop and - // scrollLeft properties. When these are undefined, the - // vertical/horizontal position does not need to be adjusted. - function calculateScrollPos(cm, x1, y1, x2, y2) { - var display = cm.display, snapMargin = textHeight(cm.display); - if (y1 < 0) y1 = 0; - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen = displayHeight(cm), result = {}; - if (y2 - y1 > screen) y2 = y1 + screen; - var docBottom = cm.doc.height + paddingVert(display); - var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; - if (y1 < screentop) { - result.scrollTop = atTop ? 0 : y1; - } else if (y2 > screentop + screen) { - var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); - if (newTop != screentop) result.scrollTop = newTop; - } - - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; - var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); - var tooWide = x2 - x1 > screenw; - if (tooWide) x2 = x1 + screenw; - if (x1 < 10) - result.scrollLeft = 0; - else if (x1 < screenleft) - result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); - else if (x2 > screenw + screenleft - 3) - result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; - return result; - } - - // Store a relative adjustment to the scroll position in the current - // operation (to be applied when the operation finishes). - function addToScrollPos(cm, left, top) { - if (left != null || top != null) resolveScrollToPos(cm); - if (left != null) - cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; - if (top != null) - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; - } - - // Make sure that at the end of the operation the current cursor is - // shown. - function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(), from = cur, to = cur; - if (!cm.options.lineWrapping) { - from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; - to = Pos(cur.line, cur.ch + 1); - } - cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; - } - - // When an operation has its scrollToPos property set, and another - // scroll action is applied before the end of the operation, this - // 'simulates' scrolling that position into view in a cheap way, so - // that the effect of intermediate scroll commands is not ignored. - function resolveScrollToPos(cm) { - var range = cm.curOp.scrollToPos; - if (range) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); - var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), - Math.min(from.top, to.top) - range.margin, - Math.max(from.right, to.right), - Math.max(from.bottom, to.bottom) + range.margin); - cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - } - - // API UTILITIES - - // Indent the given line. The how parameter can be "smart", - // "add"/null, "subtract", or "prev". When aggressive is false - // (typically set to true for forced single-line indents), empty - // lines are not indented, and places where the mode returns Pass - // are left alone. - function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, state; - if (how == null) how = "add"; - if (how == "smart") { - // Fall back to "prev" when the mode doesn't have an indentation - // method. - if (!doc.mode.indent) how = "prev"; - else state = getStateBefore(cm, n); - } - - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) line.stateAfter = null; - var curSpaceString = line.text.match(/^\s*/)[0], indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) return; - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); - else indentation = 0; - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - - var indentString = "", pos = 0; - if (cm.options.indentWithTabs) - for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} - if (pos < indentation) indentString += spaceStr(indentation - pos); - - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - } else { - // Ensure that, if the cursor was in the whitespace at the start - // of the line, it is moved to the end of that space. - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - if (range.head.line == n && range.head.ch < curSpaceString.length) { - var pos = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i, new Range(pos, pos)); - break; - } - } - } - line.stateAfter = null; - } - - // Utility for applying a change to a line by handle or number, - // returning the number and optionally registering the line as - // changed. - function changeLine(doc, handle, changeType, op) { - var no = handle, line = handle; - if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); - else no = lineNo(handle); - if (no == null) return null; - if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); - return line; - } - - // Helper for deleting text near the selection(s), used to implement - // backspace, delete, and similar functionality. - function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, kill = []; - // Build up a set of ranges to kill first, merging overlapping - // ranges. - for (var i = 0; i < ranges.length; i++) { - var toKill = compute(ranges[i]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break; - } - } - kill.push(toKill); - } - // Next, remove those actual ranges. - runInOp(cm, function() { - for (var i = kill.length - 1; i >= 0; i--) - replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); - ensureCursorVisible(cm); - }); - } - - // Used for horizontal relative motion. Dir is -1 or 1 (left or - // right), unit can be "char", "column" (like char, but doesn't - // cross line boundaries), "word" (across next word), or "group" (to - // the start of next group of word or non-word-non-whitespace - // chars). The visually param controls whether, in right-to-left - // text, direction 1 means to move towards the next index in the - // string, or towards the character to the right of the current - // position. The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosH(doc, pos, dir, unit, visually) { - var line = pos.line, ch = pos.ch, origDir = dir; - var lineObj = getLine(doc, line); - var possible = true; - function findNextLine() { - var l = line + dir; - if (l < doc.first || l >= doc.first + doc.size) return (possible = false); - line = l; - return lineObj = getLine(doc, l); - } - function moveOnce(boundToLine) { - var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); - if (next == null) { - if (!boundToLine && findNextLine()) { - if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); - else ch = dir < 0 ? lineObj.text.length : 0; - } else return (possible = false); - } else ch = next; - return true; - } - - if (unit == "char") moveOnce(); - else if (unit == "column") moveOnce(true); - else if (unit == "word" || unit == "group") { - var sawType = null, group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) break; - var cur = lineObj.text.charAt(ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" - : group && cur == "\n" ? "n" - : !group || /\s/.test(cur) ? null - : "p"; - if (group && !first && !type) type = "s"; - if (sawType && sawType != type) { - if (dir < 0) {dir = 1; moveOnce();} - break; - } - - if (type) sawType = type; - if (dir > 0 && !moveOnce(!first)) break; - } - } - var result = skipAtomic(doc, Pos(line, ch), origDir, true); - if (!possible) result.hitSide = true; - return result; - } - - // For relative vertical movement. Dir may be -1 or 1. Unit can be - // "page" or "line". The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, x = pos.left, y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - for (;;) { - var target = coordsChar(cm, x, y); - if (!target.outside) break; - if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } - y += dir * 5; - } - return target; - } - - // EDITOR METHODS - - // The publicly visible API. Note that methodOp(f) means - // 'wrap f in an operation, performed on its `this` parameter'. - - // This is not the complete set of editor methods. Most of the - // methods defined on the Doc type are also injected into - // CodeMirror.prototype, for backwards compatibility and - // convenience. - - CodeMirror.prototype = { - constructor: CodeMirror, - focus: function(){window.focus(); focusInput(this); fastPoll(this);}, - - setOption: function(option, value) { - var options = this.options, old = options[option]; - if (options[option] == value && option != "mode") return; - options[option] = value; - if (optionHandlers.hasOwnProperty(option)) - operation(this, optionHandlers[option])(this, value, old); - }, - - getOption: function(option) {return this.options[option];}, - getDoc: function() {return this.doc;}, - - addKeyMap: function(map, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); - }, - removeKeyMap: function(map) { - var maps = this.state.keyMaps; - for (var i = 0; i < maps.length; ++i) - if (maps[i] == map || maps[i].name == map) { - maps.splice(i, 1); - return true; - } - }, - - addOverlay: methodOp(function(spec, options) { - var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); - if (mode.startState) throw new Error("Overlays may not be stateful."); - this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function(spec) { - var overlays = this.state.overlays; - for (var i = 0; i < overlays.length; ++i) { - var cur = overlays[i].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i, 1); - this.state.modeGen++; - regChange(this); - return; - } - } - }), - - indentLine: methodOp(function(n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; - else dir = dir ? "add" : "subtract"; - } - if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); - }), - indentSelection: methodOp(function(how) { - var ranges = this.doc.sel.ranges, end = -1; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty()) { - var from = range.from(), to = range.to(); - var start = Math.max(end, from.line); - end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) - indentLine(this, j, how); - var newRanges = this.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) - replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); - } else if (range.head.line > end) { - indentLine(this, range.head.line, how, true); - end = range.head.line; - if (i == this.doc.sel.primIndex) ensureCursorVisible(this); - } - } - }), - - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function(pos, precise) { - return takeToken(this, pos, precise); - }, - - getLineTokens: function(line, precise) { - return takeToken(this, Pos(line), precise, true); - }, - - getTokenTypeAt: function(pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; - var type; - if (ch == 0) type = styles[2]; - else for (;;) { - var mid = (before + after) >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; - else if (styles[mid * 2 + 1] < ch) before = mid + 1; - else { type = styles[mid * 2 + 2]; break; } - } - var cut = type ? type.indexOf("cm-overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); - }, - - getModeAt: function(pos) { - var mode = this.doc.mode; - if (!mode.innerMode) return mode; - return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; - }, - - getHelper: function(pos, type) { - return this.getHelpers(pos, type)[0]; - }, - - getHelpers: function(pos, type) { - var found = []; - if (!helpers.hasOwnProperty(type)) return helpers; - var help = helpers[type], mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) found.push(help[mode[type]]); - } else if (mode[type]) { - for (var i = 0; i < mode[type].length; i++) { - var val = help[mode[type][i]]; - if (val) found.push(val); - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i = 0; i < help._global.length; i++) { - var cur = help._global[i]; - if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) - found.push(cur.val); - } - return found; - }, - - getStateAfter: function(line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); - return getStateBefore(this, line + 1, precise); - }, - - cursorCoords: function(start, mode) { - var pos, range = this.doc.sel.primary(); - if (start == null) pos = range.head; - else if (typeof start == "object") pos = clipPos(this.doc, start); - else pos = start ? range.from() : range.to(); - return cursorCoords(this, pos, mode || "page"); - }, - - charCoords: function(pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page"); - }, - - coordsChar: function(coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top); - }, - - lineAtHeight: function(height, mode) { - height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset); - }, - heightAtLine: function(line, mode) { - var end = false, last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) line = this.doc.first; - else if (line > last) { line = last; end = true; } - var lineObj = getLine(this.doc, line); - return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + - (end ? this.doc.height - heightAtLine(lineObj) : 0); - }, - - defaultTextHeight: function() { return textHeight(this.display); }, - defaultCharWidth: function() { return charWidth(this.display); }, - - setGutterMarker: methodOp(function(line, gutterID, value) { - return changeLine(this.doc, line, "gutter", function(line) { - var markers = line.gutterMarkers || (line.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) line.gutterMarkers = null; - return true; - }); - }), - - clearGutter: methodOp(function(gutterID) { - var cm = this, doc = cm.doc, i = doc.first; - doc.iter(function(line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - line.gutterMarkers[gutterID] = null; - regLineChange(cm, i, "gutter"); - if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; - } - ++i; - }); - }), - - addLineWidget: methodOp(function(handle, node, options) { - return addLineWidget(this, handle, node, options); - }), - - removeLineWidget: function(widget) { widget.clear(); }, - - lineInfo: function(line) { - if (typeof line == "number") { - if (!isLine(this.doc, line)) return null; - var n = line; - line = getLine(this.doc, line); - if (!line) return null; - } else { - var n = lineNo(line); - if (n == null) return null; - } - return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, - textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, - widgets: line.widgets}; - }, - - getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, - - addWidget: function(pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - // Default to positioning above (if specified and possible); otherwise default to positioning below - if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) - top = pos.top - node.offsetHeight; - else if (pos.bottom + node.offsetHeight <= vspace) - top = pos.bottom; - if (left + node.offsetWidth > hspace) - left = hspace - node.offsetWidth; - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") left = 0; - else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; - node.style.left = left + "px"; - } - if (scroll) - scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); - }, - - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - - execCommand: function(cmd) { - if (commands.hasOwnProperty(cmd)) - return commands[cmd](this); - }, - - findPosH: function(from, amount, unit, visually) { - var dir = 1; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - cur = findPosH(this.doc, cur, dir, unit, visually); - if (cur.hitSide) break; - } - return cur; - }, - - moveH: methodOp(function(dir, unit) { - var cm = this; - cm.extendSelectionsBy(function(range) { - if (cm.display.shift || cm.doc.extend || range.empty()) - return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); - else - return dir < 0 ? range.from() : range.to(); - }, sel_move); - }), - - deleteH: methodOp(function(dir, unit) { - var sel = this.doc.sel, doc = this.doc; - if (sel.somethingSelected()) - doc.replaceSelection("", null, "+delete"); - else - deleteNearSelection(this, function(range) { - var other = findPosH(doc, range.head, dir, unit, false); - return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; - }); - }), - - findPosV: function(from, amount, unit, goalColumn) { - var dir = 1, x = goalColumn; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - var coords = cursorCoords(this, cur, "div"); - if (x == null) x = coords.left; - else coords.left = x; - cur = findPosV(this, coords, dir, unit); - if (cur.hitSide) break; - } - return cur; - }, - - moveV: methodOp(function(dir, unit) { - var cm = this, doc = this.doc, goals = []; - var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function(range) { - if (collapse) - return dir < 0 ? range.from() : range.to(); - var headPos = cursorCoords(cm, range.head, "div"); - if (range.goalColumn != null) headPos.left = range.goalColumn; - goals.push(headPos.left); - var pos = findPosV(cm, headPos, dir, unit); - if (unit == "page" && range == doc.sel.primary()) - addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); - return pos; - }, sel_move); - if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) - doc.sel.ranges[i].goalColumn = goals[i]; - }), - - // Find the word at the given position (as returned by coordsChar). - findWordAt: function(pos) { - var doc = this.doc, line = getLine(doc, pos.line).text; - var start = pos.ch, end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) - ? function(ch) { return isWordChar(ch, helper); } - : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} - : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; - while (start > 0 && check(line.charAt(start - 1))) --start; - while (end < line.length && check(line.charAt(end))) ++end; - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)); - }, - - toggleOverwrite: function(value) { - if (value != null && value == this.state.overwrite) return; - if (this.state.overwrite = !this.state.overwrite) - addClass(this.display.cursorDiv, "CodeMirror-overwrite"); - else - rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); - - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function() { return activeElt() == this.display.input; }, - - scrollTo: methodOp(function(x, y) { - if (x != null || y != null) resolveScrollToPos(this); - if (x != null) this.curOp.scrollLeft = x; - if (y != null) this.curOp.scrollTop = y; - }), - getScrollInfo: function() { - var scroller = this.display.scroller; - return {left: scroller.scrollLeft, top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; - }, - - scrollIntoView: methodOp(function(range, margin) { - if (range == null) { - range = {from: this.doc.sel.primary().head, to: null}; - if (margin == null) margin = this.options.cursorScrollMargin; - } else if (typeof range == "number") { - range = {from: Pos(range, 0), to: null}; - } else if (range.from == null) { - range = {from: range, to: null}; - } - if (!range.to) range.to = range.from; - range.margin = margin || 0; - - if (range.from.line != null) { - resolveScrollToPos(this); - this.curOp.scrollToPos = range; - } else { - var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), - Math.min(range.from.top, range.to.top) - range.margin, - Math.max(range.from.right, range.to.right), - Math.max(range.from.bottom, range.to.bottom) + range.margin); - this.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - }), - - setSize: methodOp(function(width, height) { - var cm = this; - function interpret(val) { - return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; - } - if (width != null) cm.display.wrapper.style.width = interpret(width); - if (height != null) cm.display.wrapper.style.height = interpret(height); - if (cm.options.lineWrapping) clearLineMeasurementCache(this); - var lineNo = cm.display.viewFrom; - cm.doc.iter(lineNo, cm.display.viewTo, function(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) - if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } - ++lineNo; - }); - cm.curOp.forceUpdate = true; - signal(cm, "refresh", this); - }), - - operation: function(f){return runInOp(this, f);}, - - refresh: methodOp(function() { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) - estimateLineHeights(this); - signal(this, "refresh", this); - }), - - swapDoc: methodOp(function(doc) { - var old = this.doc; - old.cm = null; - attachDoc(this, doc); - clearCaches(this); - resetInput(this); - this.scrollTo(doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old; - }), - - getInputField: function(){return this.display.input;}, - getWrapperElement: function(){return this.display.wrapper;}, - getScrollerElement: function(){return this.display.scroller;}, - getGutterElement: function(){return this.display.gutters;} - }; - eventMixin(CodeMirror); - - // OPTION DEFAULTS - - // The default configuration options. - var defaults = CodeMirror.defaults = {}; - // Functions to run when options are changed. - var optionHandlers = CodeMirror.optionHandlers = {}; - - function option(name, deflt, handle, notOnInit) { - CodeMirror.defaults[name] = deflt; - if (handle) optionHandlers[name] = - notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; - } - - // Passed to option handlers when there is no old value. - var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; - - // These two are, on init, called from the constructor because they - // have to be initialized before the editor can start at all. - option("value", "", function(cm, val) { - cm.setValue(val); - }, true); - option("mode", null, function(cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function(cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - option("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val) { - cm.options.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); - cm.refresh(); - }, true); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); - option("electricChars", true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - - option("theme", "default", function(cm) { - themeChanged(cm); - guttersChanged(cm); - }, true); - option("keyMap", "default", function(cm, val, old) { - var next = getKeyMap(val); - var prev = old != CodeMirror.Init && getKeyMap(old); - if (prev && prev.detach) prev.detach(cm, next); - if (next.attach) next.attach(cm, prev || null); - }); - option("extraKeys", null); - - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("fixedGutter", true, function(cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); - option("scrollbarStyle", "native", function(cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("firstLineNumber", 1, guttersChanged, true); - option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); - option("showCursorWhenSelecting", false, updateSelection, true); - - option("resetSelectionOnContextMenu", true); - - option("readOnly", false, function(cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - cm.display.disabled = true; - } else { - cm.display.disabled = false; - if (!val) resetInput(cm); - } - }); - option("disableInput", false, function(cm, val) {if (!val) resetInput(cm);}, true); - option("dragDrop", true); - - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function(cm){cm.refresh();}, true); - option("maxHighlightLength", 10000, resetModeState, true); - option("moveInputWithCursor", true, function(cm, val) { - if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0; - }); - - option("tabindex", null, function(cm, val) { - cm.display.input.tabIndex = val || ""; - }); - option("autofocus", null); - - // MODE DEFINITION AND QUERYING - - // Known modes, by name and by MIME - var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; - - // Extra arguments are stored as the mode's dependencies, which is - // used by (legacy) mechanisms like loadmode.js to automatically - // load a mode. (Preferred mechanism is the require/define calls.) - CodeMirror.defineMode = function(name, mode) { - if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; - if (arguments.length > 2) - mode.dependencies = Array.prototype.slice.call(arguments, 2); - modes[name] = mode; - }; - - CodeMirror.defineMIME = function(mime, spec) { - mimeModes[mime] = spec; - }; - - // Given a MIME type, a {name, ...options} config object, or a name - // string, return a mode config object. - CodeMirror.resolveMode = function(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") found = {name: found}; - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return CodeMirror.resolveMode("application/xml"); - } - if (typeof spec == "string") return {name: spec}; - else return spec || {name: "null"}; - }; - - // Given a mode spec (anything that resolveMode accepts), find and - // initialize an actual mode object. - CodeMirror.getMode = function(options, spec) { - var spec = CodeMirror.resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) return CodeMirror.getMode(options, "text/plain"); - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop in exts) { - if (!exts.hasOwnProperty(prop)) continue; - if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; - modeObj[prop] = exts[prop]; - } - } - modeObj.name = spec.name; - if (spec.helperType) modeObj.helperType = spec.helperType; - if (spec.modeProps) for (var prop in spec.modeProps) - modeObj[prop] = spec.modeProps[prop]; - - return modeObj; - }; - - // Minimal default mode. - CodeMirror.defineMode("null", function() { - return {token: function(stream) {stream.skipToEnd();}}; - }); - CodeMirror.defineMIME("text/plain", "null"); - - // This can be used to attach properties to mode objects from - // outside the actual mode definition. - var modeExtensions = CodeMirror.modeExtensions = {}; - CodeMirror.extendMode = function(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); - copyObj(properties, exts); - }; - - // EXTENSIONS - - CodeMirror.defineExtension = function(name, func) { - CodeMirror.prototype[name] = func; - }; - CodeMirror.defineDocExtension = function(name, func) { - Doc.prototype[name] = func; - }; - CodeMirror.defineOption = option; - - var initHooks = []; - CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; - - var helpers = CodeMirror.helpers = {}; - CodeMirror.registerHelper = function(type, name, value) { - if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; - helpers[type][name] = value; - }; - CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { - CodeMirror.registerHelper(type, name, value); - helpers[type]._global.push({pred: predicate, val: value}); - }; - - // MODE STATE HANDLING - - // Utility functions for working with state. Exported because nested - // modes need to do this for their inner modes. - - var copyState = CodeMirror.copyState = function(mode, state) { - if (state === true) return state; - if (mode.copyState) return mode.copyState(state); - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) val = val.concat([]); - nstate[n] = val; - } - return nstate; - }; - - var startState = CodeMirror.startState = function(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; - }; - - // Given a mode and a state (for that mode), find the inner mode and - // state at the position that the state refers to. - CodeMirror.innerMode = function(mode, state) { - while (mode.innerMode) { - var info = mode.innerMode(state); - if (!info || info.mode == mode) break; - state = info.state; - mode = info.mode; - } - return info || {mode: mode, state: state}; - }; - - // STANDARD COMMANDS - - // Commands are parameter-less actions that can be performed on an - // editor, mostly used for keybindings. - var commands = CodeMirror.commands = { - selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, - singleSelection: function(cm) { - cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); - }, - killLine: function(cm) { - deleteNearSelection(cm, function(range) { - if (range.empty()) { - var len = getLine(cm.doc, range.head.line).text.length; - if (range.head.ch == len && range.head.line < cm.lastLine()) - return {from: range.head, to: Pos(range.head.line + 1, 0)}; - else - return {from: range.head, to: Pos(range.head.line, len)}; - } else { - return {from: range.from(), to: range.to()}; - } - }); - }, - deleteLine: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), - to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; - }); - }, - delLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), to: range.from()}; - }); - }, - delWrappedLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var leftPos = cm.coordsChar({left: 0, top: top}, "div"); - return {from: leftPos, to: range.from()}; - }); - }, - delWrappedLineRight: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - return {from: range.from(), to: rightPos }; - }); - }, - undo: function(cm) {cm.undo();}, - redo: function(cm) {cm.redo();}, - undoSelection: function(cm) {cm.undoSelection();}, - redoSelection: function(cm) {cm.redoSelection();}, - goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, - goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, - goLineStart: function(cm) { - cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, - {origin: "+move", bias: 1}); - }, - goLineStartSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - return lineStartSmart(cm, range.head); - }, {origin: "+move", bias: 1}); - }, - goLineEnd: function(cm) { - cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, - {origin: "+move", bias: -1}); - }, - goLineRight: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - }, sel_move); - }, - goLineLeft: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: 0, top: top}, "div"); - }, sel_move); - }, - goLineLeftSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var pos = cm.coordsChar({left: 0, top: top}, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); - return pos; - }, sel_move); - }, - goLineUp: function(cm) {cm.moveV(-1, "line");}, - goLineDown: function(cm) {cm.moveV(1, "line");}, - goPageUp: function(cm) {cm.moveV(-1, "page");}, - goPageDown: function(cm) {cm.moveV(1, "page");}, - goCharLeft: function(cm) {cm.moveH(-1, "char");}, - goCharRight: function(cm) {cm.moveH(1, "char");}, - goColumnLeft: function(cm) {cm.moveH(-1, "column");}, - goColumnRight: function(cm) {cm.moveH(1, "column");}, - goWordLeft: function(cm) {cm.moveH(-1, "word");}, - goGroupRight: function(cm) {cm.moveH(1, "group");}, - goGroupLeft: function(cm) {cm.moveH(-1, "group");}, - goWordRight: function(cm) {cm.moveH(1, "word");}, - delCharBefore: function(cm) {cm.deleteH(-1, "char");}, - delCharAfter: function(cm) {cm.deleteH(1, "char");}, - delWordBefore: function(cm) {cm.deleteH(-1, "word");}, - delWordAfter: function(cm) {cm.deleteH(1, "word");}, - delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, - delGroupAfter: function(cm) {cm.deleteH(1, "group");}, - indentAuto: function(cm) {cm.indentSelection("smart");}, - indentMore: function(cm) {cm.indentSelection("add");}, - indentLess: function(cm) {cm.indentSelection("subtract");}, - insertTab: function(cm) {cm.replaceSelection("\t");}, - insertSoftTab: function(cm) { - var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); - } - cm.replaceSelections(spaces); - }, - defaultTab: function(cm) { - if (cm.somethingSelected()) cm.indentSelection("add"); - else cm.execCommand("insertTab"); - }, - transposeChars: function(cm) { - runInOp(cm, function() { - var ranges = cm.listSelections(), newSel = []; - for (var i = 0; i < ranges.length; i++) { - var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), - Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) - cm.replaceRange(line.charAt(0) + "\n" + prev.charAt(prev.length - 1), - Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); - }, - newlineAndIndent: function(cm) { - runInOp(cm, function() { - var len = cm.listSelections().length; - for (var i = 0; i < len; i++) { - var range = cm.listSelections()[i]; - cm.replaceRange("\n", range.anchor, range.head, "+input"); - cm.indentLine(range.from().line + 1, null, true); - ensureCursorVisible(cm); - } - }); - }, - toggleOverwrite: function(cm) {cm.toggleOverwrite();} - }; - - - // STANDARD KEYMAPS - - var keyMap = CodeMirror.keyMap = {}; - - keyMap.basic = { - "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", - "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", - "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", - "Esc": "singleSelection" - }; - // Note that the save and find-related commands aren't defined by - // default. User code or addons can define them. Unknown commands - // are simply ignored. - keyMap.pcDefault = { - "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", - "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", - fallthrough: "basic" - }; - // Very basic readline/emacs-style bindings, which are standard on Mac. - keyMap.emacsy = { - "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", - "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", - "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" - }; - keyMap.macDefault = { - "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", - "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", - fallthrough: ["basic", "emacsy"] - }; - keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - - // KEYMAP DISPATCH - - function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i = 0; i < parts.length - 1; i++) { - var mod = parts[i]; - if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; - else if (/^a(lt)?$/i.test(mod)) alt = true; - else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; - else if (/^s(hift)$/i.test(mod)) shift = true; - else throw new Error("Unrecognized modifier name: " + mod); - } - if (alt) name = "Alt-" + name; - if (ctrl) name = "Ctrl-" + name; - if (cmd) name = "Cmd-" + name; - if (shift) name = "Shift-" + name; - return name; - } - - // This is a kludge to keep keymaps mostly working as raw objects - // (backwards compatibility) while at the same time support features - // like normalization and multi-stroke key bindings. It compiles a - // new normalized keymap, and then updates the old object to reflect - // this. - CodeMirror.normalizeKeyMap = function(keymap) { - var copy = {}; - for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; - if (value == "...") { delete keymap[keyname]; continue; } - - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i = 0; i < keys.length; i++) { - var val, name; - if (i == keys.length - 1) { - name = keyname; - val = value; - } else { - name = keys.slice(0, i + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) copy[name] = val; - else if (prev != val) throw new Error("Inconsistent bindings for " + name); - } - delete keymap[keyname]; - } - for (var prop in copy) keymap[prop] = copy[prop]; - return keymap; - }; - - var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { - map = getKeyMap(map); - var found = map.call ? map.call(key, context) : map[key]; - if (found === false) return "nothing"; - if (found === "...") return "multi"; - if (found != null && handle(found)) return "handled"; - - if (map.fallthrough) { - if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") - return lookupKey(key, map.fallthrough, handle, context); - for (var i = 0; i < map.fallthrough.length; i++) { - var result = lookupKey(key, map.fallthrough[i], handle, context); - if (result) return result; - } - } - }; - - // Modifier key presses don't count as 'real' key presses for the - // purpose of keymap fallthrough. - var isModifierKey = CodeMirror.isModifierKey = function(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; - }; - - // Look up the name of a key as indicated by an event object. - var keyName = CodeMirror.keyName = function(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) return false; - var base = keyNames[event.keyCode], name = base; - if (name == null || event.altGraphKey) return false; - if (event.altKey && base != "Alt") name = "Alt-" + name; - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; - if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; - return name; - }; - - function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val; - } - - // FROMTEXTAREA - - CodeMirror.fromTextArea = function(textarea, options) { - if (!options) options = {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabindex) - options.tabindex = textarea.tabindex; - if (!options.placeholder && textarea.placeholder) - options.placeholder = textarea.placeholder; - // Set autofocus to true if this textarea is focused, or if it has - // autofocus and no other element is focused. - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || - textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - - function save() {textarea.value = cm.getValue();} - if (textarea.form) { - on(textarea.form, "submit", save); - // Deplorable hack to make the submit method do the right thing. - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form, realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function() { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch(e) {} - } - } - - textarea.style.display = "none"; - var cm = CodeMirror(function(node) { - textarea.parentNode.insertBefore(node, textarea.nextSibling); - }, options); - cm.save = save; - cm.getTextArea = function() { return textarea; }; - cm.toTextArea = function() { - cm.toTextArea = isNaN; // Prevent this from being ran twice - save(); - textarea.parentNode.removeChild(cm.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (typeof textarea.form.submit == "function") - textarea.form.submit = realSubmit; - } - }; - return cm; - }; - - // STRING STREAM - - // Fed to the mode parsers, provides helper functions to make - // parsers more succinct. - - var StringStream = CodeMirror.StringStream = function(string, tabSize) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - }; - - StringStream.prototype = { - eol: function() {return this.pos >= this.string.length;}, - sol: function() {return this.pos == this.lineStart;}, - peek: function() {return this.string.charAt(this.pos) || undefined;}, - next: function() { - if (this.pos < this.string.length) - return this.string.charAt(this.pos++); - }, - eat: function(match) { - var ch = this.string.charAt(this.pos); - if (typeof match == "string") var ok = ch == match; - else var ok = ch && (match.test ? match.test(ch) : match(ch)); - if (ok) {++this.pos; return ch;} - }, - eatWhile: function(match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start; - }, - eatSpace: function() { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; - return this.pos > start; - }, - skipToEnd: function() {this.pos = this.string.length;}, - skipTo: function(ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true;} - }, - backUp: function(n) {this.pos -= n;}, - column: function() { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - indentation: function() { - return countColumn(this.string, null, this.tabSize) - - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - match: function(pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) this.pos += pattern.length; - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) return null; - if (match && consume !== false) this.pos += match[0].length; - return match; - } - }, - current: function(){return this.string.slice(this.start, this.pos);}, - hideFirstChars: function(n, inner) { - this.lineStart += n; - try { return inner(); } - finally { this.lineStart -= n; } - } - }; - - // TEXTMARKERS - - // Created with markText and setBookmark methods. A TextMarker is a - // handle that can be used to clear or find a marked position in the - // document. Line objects hold arrays (markedSpans) containing - // {from, to, marker} object pointing to such marker objects, and - // indicating that such a marker is present on that line. Multiple - // lines may point to the same marker when it spans across lines. - // The spans will have null for their from/to properties when the - // marker continues beyond the start/end of the line. Markers have - // links back to the lines they currently touch. - - var TextMarker = CodeMirror.TextMarker = function(doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - }; - eventMixin(TextMarker); - - // Clear the marker. - TextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - var cm = this.doc.cm, withOp = cm && !cm.curOp; - if (withOp) startOperation(cm); - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) signalLater(this, "clear", found.from, found.to); - } - var min = null, max = null; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); - else if (cm) { - if (span.to != null) max = lineNo(line); - if (span.from != null) min = lineNo(line); - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) - updateLineHeight(line, textHeight(cm.display)); - } - if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { - var visual = visualLine(this.lines[i]), len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } - - if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) reCheckSelection(cm.doc); - } - if (cm) signalLater(cm, "markerCleared", cm, this); - if (withOp) endOperation(cm); - if (this.parent) this.parent.clear(); - }; - - // Find the position of the marker in the document. Returns a {from, - // to} object by default. Side can be passed to get a specific side - // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the - // Pos objects returned contain a line object, rather than a line - // number (used to prevent looking up the same line twice). - TextMarker.prototype.find = function(side, lineObj) { - if (side == null && this.type == "bookmark") side = 1; - var from, to; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) return from; - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) return to; - } - } - return from && {from: from, to: to}; - }; - - // Signals that the marker's widget changed, and surrounding layout - // should be recomputed. - TextMarker.prototype.changed = function() { - var pos = this.find(-1, true), widget = this, cm = this.doc.cm; - if (!pos || !cm) return; - runInOp(cm, function() { - var line = pos.line, lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) - updateLineHeight(line, line.height + dHeight); - } - }); - }; - - TextMarker.prototype.attachLine = function(line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) - (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); - } - this.lines.push(line); - }; - TextMarker.prototype.detachLine = function(line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } - }; - - // Collapsed markers have unique ids, in order to be able to order - // them, which is needed for uniquely determining an outer marker - // when they overlap (they may nest, but not partially overlap). - var nextMarkerId = 0; - - // Create a marker, wire it up to the right lines, and - function markText(doc, from, to, options, type) { - // Shared markers (across linked documents) are handled separately - // (markTextShared will call out to this again, once per - // document). - if (options && options.shared) return markTextShared(doc, from, to, options, type); - // Ensure we are in an operation. - if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); - - var marker = new TextMarker(doc, type), diff = cmp(from, to); - if (options) copyObj(options, marker, false); - // Don't connect empty markers unless clearWhenEmpty is false - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) - return marker; - if (marker.replacedWith) { - // Showing up as a widget implies collapsed (widget replaces text) - marker.collapsed = true; - marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); - if (options.insertLeft) marker.widgetNode.insertLeft = true; - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || - from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) - throw new Error("Inserting collapsed marker partially overlapping an existing one"); - sawCollapsedSpans = true; - } - - if (marker.addToHistory) - addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); - - var curLine = from.line, cm = doc.cm, updateMaxLine; - doc.iter(curLine, to.line + 1, function(line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) - updateMaxLine = true; - if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); - addMarkedSpan(line, new MarkedSpan(marker, - curLine == from.line ? from.ch : null, - curLine == to.line ? to.ch : null)); - ++curLine; - }); - // lineIsHidden depends on the presence of the spans, so needs a second pass - if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { - if (lineIsHidden(doc, line)) updateLineHeight(line, 0); - }); - - if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); - - if (marker.readOnly) { - sawReadOnlySpans = true; - if (doc.history.done.length || doc.history.undone.length) - doc.clearHistory(); - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - // Sync editor state - if (updateMaxLine) cm.curOp.updateMaxLine = true; - if (marker.collapsed) - regChange(cm, from.line, to.line + 1); - else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) - for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); - if (marker.atomic) reCheckSelection(cm.doc); - signalLater(cm, "markerAdded", cm, marker); - } - return marker; - } - - // SHARED TEXTMARKERS - - // A shared marker spans multiple linked documents. It is - // implemented as a meta-marker-object controlling multiple normal - // markers. - var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { - this.markers = markers; - this.primary = primary; - for (var i = 0; i < markers.length; ++i) - markers[i].parent = this; - }; - eventMixin(SharedTextMarker); - - SharedTextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - this.explicitlyCleared = true; - for (var i = 0; i < this.markers.length; ++i) - this.markers[i].clear(); - signalLater(this, "clear"); - }; - SharedTextMarker.prototype.find = function(side, lineObj) { - return this.primary.find(side, lineObj); - }; - - function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function(doc) { - if (widget) options.widgetNode = widget.cloneNode(true); - markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); - for (var i = 0; i < doc.linked.length; ++i) - if (doc.linked[i].isParent) return; - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary); - } - - function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), - function(m) { return m.parent; }); - } - - function copySharedMarkers(doc, markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], pos = marker.find(); - var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } - } - - function detachSharedMarkers(markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], linked = [marker.primary.doc];; - linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - } - } - - // TEXTMARKER SPANS - - function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; this.to = to; - } - - // Search an array of spans for a span matching the given marker. - function getMarkedSpanFor(spans, marker) { - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.marker == marker) return span; - } - } - // Remove a span from an array, returning undefined if no spans are - // left (we don't store arrays for lines without spans). - function removeMarkedSpan(spans, span) { - for (var r, i = 0; i < spans.length; ++i) - if (spans[i] != span) (r || (r = [])).push(spans[i]); - return r; - } - // Add a span to a line. - function addMarkedSpan(line, span) { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - span.marker.attachLine(line); - } - - // Used for the algorithm that adjusts markers for a change in the - // document. These functions cut an array of spans at a given - // character position, returning an array of remaining chunks (or - // undefined if nothing remains). - function markedSpansBefore(old, startCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); - (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } - return nw; - } - function markedSpansAfter(old, endCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); - (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, - span.to == null ? null : span.to - endCh)); - } - } - return nw; - } - - // Given a change object, compute the new set of marker spans that - // cover the line in which the change took place. Removes spans - // entirely within the change, reconnects spans belonging to the - // same marker that appear on both sides of the change, and cuts off - // spans partially within the change. Returns an array of span - // arrays with one element for each line in (after) the change. - function stretchSpansOverChange(doc, change) { - if (change.full) return null; - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) return null; - - var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; - // Get the spans that 'stick out' on both sides - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - - // Next, merge those two ends - var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - // Fix up .to properties of first - for (var i = 0; i < first.length; ++i) { - var span = first[i]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) span.to = startCh; - else if (sameLine) span.to = found.to == null ? null : found.to + offset; - } - } - } - if (last) { - // Fix up .from in last (or move them into first in case of sameLine) - for (var i = 0; i < last.length; ++i) { - var span = last[i]; - if (span.to != null) span.to += offset; - if (span.from == null) { - var found = getMarkedSpanFor(first, span.marker); - if (!found) { - span.from = offset; - if (sameLine) (first || (first = [])).push(span); - } - } else { - span.from += offset; - if (sameLine) (first || (first = [])).push(span); - } - } - } - // Make sure we didn't create any zero-length spans - if (first) first = clearEmptySpans(first); - if (last && last != first) last = clearEmptySpans(last); - - var newMarkers = [first]; - if (!sameLine) { - // Fill gap with whole-line-spans - var gap = change.text.length - 2, gapMarkers; - if (gap > 0 && first) - for (var i = 0; i < first.length; ++i) - if (first[i].to == null) - (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); - for (var i = 0; i < gap; ++i) - newMarkers.push(gapMarkers); - newMarkers.push(last); - } - return newMarkers; - } - - // Remove spans that are empty and don't have a clearWhenEmpty - // option of false. - function clearEmptySpans(spans) { - for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) - spans.splice(i--, 1); - } - if (!spans.length) return null; - return spans; - } - - // Used for un/re-doing changes from the history. Combines the - // result of computing the existing spans with the set of spans that - // existed in the history (so that deleting around a span and then - // undoing brings back the span). - function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) return stretched; - if (!stretched) return old; - - for (var i = 0; i < old.length; ++i) { - var oldCur = old[i], stretchCur = stretched[i]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) - if (oldCur[k].marker == span.marker) continue spans; - oldCur.push(span); - } - } else if (stretchCur) { - old[i] = stretchCur; - } - } - return old; - } - - // Used to 'clip' out readOnly ranges when making a change. - function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function(line) { - if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { - var mark = line.markedSpans[i].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) - (markers || (markers = [])).push(mark); - } - }); - if (!markers) return null; - var parts = [{from: from, to: to}]; - for (var i = 0; i < markers.length; ++i) { - var mk = markers[i], m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; - var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) - newParts.push({from: p.from, to: m.from}); - if (dto > 0 || !mk.inclusiveRight && !dto) - newParts.push({from: m.to, to: p.to}); - parts.splice.apply(parts, newParts); - j += newParts.length - 1; - } - } - return parts; - } - - // Connect or disconnect spans from a line. - function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.detachLine(line); - line.markedSpans = null; - } - function attachMarkedSpans(line, spans) { - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.attachLine(line); - line.markedSpans = spans; - } - - // Helpers used when computing which overlapping collapsed span - // counts as the larger one. - function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } - function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } - - // Returns a number indicating which of two overlapping collapsed - // spans is larger (and thus includes the other). Falls back to - // comparing ids when the spans cover exactly the same range. - function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) return lenDiff; - var aPos = a.find(), bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) return -fromCmp; - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) return toCmp; - return b.id - a.id; - } - - // Find out whether a line ends or starts in a collapsed span. If - // so, return the marker for that span. - function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) - found = sp.marker; - } - return found; - } - function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } - function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } - - // Test whether there exists a collapsed span that partially - // overlaps (covers the start or end, but not both) of a new span. - // Such overlap is not allowed. - function conflictingCollapsedRange(doc, lineNo, from, to, marker) { - var line = getLine(doc, lineNo); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (!sp.marker.collapsed) continue; - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; - if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) || - fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight))) - return true; - } - } - - // A visual line is a line as drawn on the screen. Folding, for - // example, can cause multiple logical lines to appear on the same - // visual line. This finds the start of the visual line that the - // given line is part of (usually that is the line itself). - function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) - line = merged.find(-1, true).line; - return line; - } - - // Returns an array of logical lines that continue the visual line - // started by the argument, or undefined if there are no such lines. - function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - (lines || (lines = [])).push(line); - } - return lines; - } - - // Get the line number of the start of the visual line that the - // given line number is part of. - function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), vis = visualLine(line); - if (line == vis) return lineN; - return lineNo(vis); - } - // Get the line number of the start of the next visual line after - // the given line. - function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) return lineN; - var line = getLine(doc, lineN), merged; - if (!lineIsHidden(doc, line)) return lineN; - while (merged = collapsedSpanAtEnd(line)) - line = merged.find(1, true).line; - return lineNo(line) + 1; - } - - // Compute whether a line is hidden. Lines count as hidden when they - // are part of a visual line that starts with another line, or when - // they are entirely covered by collapsed, non-widget span. - function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (!sp.marker.collapsed) continue; - if (sp.from == null) return true; - if (sp.marker.widgetNode) continue; - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) - return true; - } - } - function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); - } - if (span.marker.inclusiveRight && span.to == line.text.length) - return true; - for (var sp, i = 0; i < line.markedSpans.length; ++i) { - sp = line.markedSpans[i]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && - (sp.to == null || sp.to != span.from) && - (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && - lineIsHiddenInner(doc, line, sp)) return true; - } - } - - // LINE WIDGETS - - // Line widgets are block elements displayed above or below a line. - - var LineWidget = CodeMirror.LineWidget = function(cm, node, options) { - if (options) for (var opt in options) if (options.hasOwnProperty(opt)) - this[opt] = options[opt]; - this.cm = cm; - this.node = node; - }; - eventMixin(LineWidget); - - function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) - addToScrollPos(cm, null, diff); - } - - LineWidget.prototype.clear = function() { - var cm = this.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); - if (no == null || !ws) return; - for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); - if (!ws.length) line.widgets = null; - var height = widgetHeight(this); - runInOp(cm, function() { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - updateLineHeight(line, Math.max(0, line.height - height)); - }); - }; - LineWidget.prototype.changed = function() { - var oldH = this.height, cm = this.cm, line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) return; - runInOp(cm, function() { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - updateLineHeight(line, line.height + diff); - }); - }; - - function widgetHeight(widget) { - if (widget.height != null) return widget.height; - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) - parentStyle += "margin-left: -" + widget.cm.display.gutters.offsetWidth + "px;"; - if (widget.noHScroll) - parentStyle += "width: " + widget.cm.display.wrapper.clientWidth + "px;"; - removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.offsetHeight; - } - - function addLineWidget(cm, handle, node, options) { - var widget = new LineWidget(cm, node, options); - if (widget.noHScroll) cm.display.alignWidgets = true; - changeLine(cm.doc, handle, "widget", function(line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) widgets.push(widget); - else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); - widget.line = line; - if (!lineIsHidden(cm.doc, line)) { - var aboveVisible = heightAtLine(line) < cm.doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) addToScrollPos(cm, null, widget.height); - cm.curOp.forceUpdate = true; - } - return true; - }); - return widget; - } - - // LINE DATA STRUCTURE - - // Line objects. These hold state related to a line, including - // highlighting info (the styles array). - var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight ? estimateHeight(this) : 1; - }; - eventMixin(Line); - Line.prototype.lineNo = function() { return lineNo(this); }; - - // Change the content (text, markers) of a line. Automatically - // invalidates cached information and tries to re-estimate the - // line's height. - function updateLine(line, text, markedSpans, estimateHeight) { - line.text = text; - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - if (line.order != null) line.order = null; - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight ? estimateHeight(line) : 1; - if (estHeight != line.height) updateLineHeight(line, estHeight); - } - - // Detach a line from the document tree and its markers. - function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); - } - - function extractLineClasses(type, output) { - if (type) for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) break; - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop] == null) - output[prop] = lineClass[2]; - else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) - output[prop] += " " + lineClass[2]; - } - return type; - } - - function callBlankLine(mode, state) { - if (mode.blankLine) return mode.blankLine(state); - if (!mode.innerMode) return; - var inner = CodeMirror.innerMode(mode, state); - if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); - } - - function readToken(mode, stream, state, inner) { - for (var i = 0; i < 10; i++) { - if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; - var style = mode.token(stream, state); - if (stream.pos > stream.start) return style; - } - throw new Error("Mode " + mode.name + " failed to advance stream."); - } - - // Utility for getTokenAt and getLineTokens - function takeToken(cm, pos, precise, asArray) { - function getObj(copy) { - return {start: stream.start, end: stream.pos, - string: stream.current(), - type: style || null, - state: copy ? copyState(doc.mode, state) : state}; - } - - var doc = cm.doc, mode = doc.mode, style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize), tokens; - if (asArray) tokens = []; - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, state); - if (asArray) tokens.push(getObj(true)); - } - return asArray ? tokens : getObj(); - } - - // Run the given mode's parser over a line, calling f for each token. - function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; - var curStart = 0, curStyle = null; - var stream = new StringStream(text, cm.options.tabSize), style; - var inner = cm.options.addModeClass && [null]; - if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) processLine(cm, text, state, stream.pos); - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) style = "m-" + (style ? mName + " " + style : mName); - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 50000); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - // Webkit seems to refuse to render text nodes longer than 57444 characters - var pos = Math.min(stream.pos, curStart + 50000); - f(pos, curStyle); - curStart = pos; - } - } - - // Compute a style array (an array starting with a mode generation - // -- for invalidation -- followed by pairs of end positions and - // style strings), which is used to highlight the tokens on the - // line. - function highlightLine(cm, line, state, forceToEnd) { - // A styles array always starts with a number identifying the - // mode/overlays that it is based on (for easy invalidation). - var st = [cm.state.modeGen], lineClasses = {}; - // Compute the base array of styles - runMode(cm, line.text, cm.doc.mode, state, function(end, style) { - st.push(end, style); - }, lineClasses, forceToEnd); - - // Run overlays, adjust style array. - for (var o = 0; o < cm.state.overlays.length; ++o) { - var overlay = cm.state.overlays[o], i = 1, at = 0; - runMode(cm, line.text, overlay.mode, true, function(end, style) { - var start = i; - // Ensure there's a token end at the current position, and that i points at it - while (at < end) { - var i_end = st[i]; - if (i_end > end) - st.splice(i, 1, end, st[i+1], i_end); - i += 2; - at = Math.min(end, i_end); - } - if (!style) return; - if (overlay.opaque) { - st.splice(start, i - start, end, "cm-overlay " + style); - i = start + 2; - } else { - for (; start < i; start += 2) { - var cur = st[start+1]; - st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; - } - } - }, lineClasses); - } - - return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; - } - - function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); - line.styles = result.styles; - if (result.classes) line.styleClasses = result.classes; - else if (line.styleClasses) line.styleClasses = null; - if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; - } - return line.styles; - } - - // Lightweight form of highlight -- proceed over this line and - // update state, but don't save a style array. Used for lines that - // aren't currently visible. - function processLine(cm, text, state, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize); - stream.start = stream.pos = startAt || 0; - if (text == "") callBlankLine(mode, state); - while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { - readToken(mode, stream, state); - stream.start = stream.pos; - } - } - - // Convert a style as returned by a mode (either null, or a string - // containing one or more styles) to a CSS style. This is cached, - // and also looks for line-wide styles. - var styleToClassCache = {}, styleToClassCacheWithMode = {}; - function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) return null; - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || - (cache[style] = style.replace(/\S+/g, "cm-$&")); - } - - // Render the DOM representation of the text of a line. Also builds - // up a 'line map', which points at the DOM nodes that represent - // specific stretches of text, and is used by the measuring code. - // The returned object contains the DOM node, this map, and - // information about line-wide styles that were set by the mode. - function buildLineContent(cm, lineView) { - // The padding-right forces the element to have a 'border', which - // is needed on Webkit to be able to get line-level bounding - // rectangles for it (in measureChar). - var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = {pre: elt("pre", [content]), content: content, col: 0, pos: 0, cm: cm}; - lineView.measure = {}; - - // Iterate over the logical lines that make up this visual line. - for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { - var line = i ? lineView.rest[i - 1] : lineView.line, order; - builder.pos = 0; - builder.addToken = buildToken; - // Optionally wire in some hacks into the token-rendering - // algorithm, to deal with browser quirks. - if ((ie || webkit) && cm.getOption("lineWrapping")) - builder.addToken = buildTokenSplitSpaces(builder.addToken); - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) - builder.addToken = buildTokenBadBidi(builder.addToken, order); - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) - builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); - if (line.styleClasses.textClass) - builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); - } - - // Ensure at least a single node is present, for measuring. - if (builder.map.length == 0) - builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); - - // Store the map and a cache object for the current logical line - if (i == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); - (lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - - // See issue #2901 - if (webkit && /\bcm-tab\b/.test(builder.content.lastChild.className)) - builder.content.className = "cm-tab-wrap-hack"; - - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) - builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); - - return builder; - } - - function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "\u2022", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - return token; - } - - // Build up the DOM representation for a single token, and add it to - // the line map. Takes care to render special characters separately. - function buildToken(builder, text, style, startStyle, endStyle, title, css) { - if (!text) return; - var special = builder.cm.options.specialChars, mustWrap = false; - if (!special.test(text)) { - builder.col += text.length; - var content = document.createTextNode(text); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) mustWrap = true; - builder.pos += text.length; - } else { - var content = document.createDocumentFragment(), pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(text.slice(pos, pos + skipped)); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) break; - pos += skipped + 1; - if (m[0] == "\t") { - var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; - var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - builder.col += tabWidth; - } else { - var txt = builder.cm.options.specialCharPlaceholder(m[0]); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt); - builder.pos++; - } - } - if (style || startStyle || endStyle || mustWrap || css) { - var fullStyle = style || ""; - if (startStyle) fullStyle += startStyle; - if (endStyle) fullStyle += endStyle; - var token = elt("span", [content], fullStyle, css); - if (title) token.title = title; - return builder.content.appendChild(token); - } - builder.content.appendChild(content); - } - - function buildTokenSplitSpaces(inner) { - function split(old) { - var out = " "; - for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; - out += " "; - return out; - } - return function(builder, text, style, startStyle, endStyle, title) { - inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title); - }; - } - - // Work around nonsense dimensions being reported for stretches of - // right-to-left text. - function buildTokenBadBidi(inner, order) { - return function(builder, text, style, startStyle, endStyle, title) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, end = start + text.length; - for (;;) { - // Find the part that overlaps with the start of this text - for (var i = 0; i < order.length; i++) { - var part = order[i]; - if (part.to > start && part.from <= start) break; - } - if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title); - inner(builder, text.slice(0, part.to - start), style, startStyle, null, title); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - }; - } - - function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) { - builder.map.push(builder.pos, builder.pos + size, widget); - builder.content.appendChild(widget); - } - builder.pos += size; - } - - // Outputs a number of spans to make up a line, taking highlighting - // and marked text into account. - function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, allText = line.text, at = 0; - if (!spans) { - for (var i = 1; i < styles.length; i+=2) - builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); - return; - } - - var len = allText.length, pos = 0, i = 1, text = "", style, css; - var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; - for (;;) { - if (nextChange == pos) { // Update current marker set - spanStyle = spanEndStyle = spanStartStyle = title = css = ""; - collapsed = null; nextChange = Infinity; - var foundBookmarks = []; - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], m = sp.marker; - if (sp.from <= pos && (sp.to == null || sp.to > pos)) { - if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } - if (m.className) spanStyle += " " + m.className; - if (m.css) css = m.css; - if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; - if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; - if (m.title && !title) title = m.title; - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) - collapsed = sp; - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); - } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, - collapsed.marker, collapsed.from == null); - if (collapsed.to == null) return; - } - if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) - buildCollapsedSpan(builder, 0, foundBookmarks[j]); - } - if (pos >= len) break; - - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, - spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); - } - if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i++]); - style = interpretTokenStyle(styles[i++], builder.cm.options); - } - } - } - - // DOCUMENT DATA STRUCTURE - - // By default, updates that start and end at the beginning of a line - // are treated specially, in order to make the association of line - // widgets and marker elements with the text behave more intuitive. - function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && - (!doc.cm || doc.cm.options.wholeLineUpdateBefore); - } - - // Perform a change on the document data structure. - function updateDoc(doc, change, markedSpans, estimateHeight) { - function spansFor(n) {return markedSpans ? markedSpans[n] : null;} - function update(line, text, spans) { - updateLine(line, text, spans, estimateHeight); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - for (var i = start, result = []; i < end; ++i) - result.push(new Line(text[i], spansFor(i), estimateHeight)); - return result; - } - - var from = change.from, to = change.to, text = change.text; - var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); - var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; - - // Adjust the line structure - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - // This is a whole-line replace. Treated specially to make - // sure line objects move the way they are supposed to. - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) doc.remove(from.line, nlines); - if (added.length) doc.insert(from.line, added); - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added = linesFor(1, text.length - 1); - added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added = linesFor(1, text.length - 1); - if (nlines > 1) doc.remove(from.line + 1, nlines - 1); - doc.insert(from.line + 1, added); - } - - signalLater(doc, "change", doc, change); - } - - // The document is represented as a BTree consisting of leaves, with - // chunk of lines in them, and branches, with up to ten leaves or - // other branch nodes below them. The top node is always a branch - // node, and is the document object itself (meaning it has - // additional methods and properties). - // - // All nodes have parent links. The tree is used both to go from - // line numbers to line objects, and to go from objects to numbers. - // It also indexes by height, and is used to convert between height - // and line object, and to find the total height of the document. - // - // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html - - function LeafChunk(lines) { - this.lines = lines; - this.parent = null; - for (var i = 0, height = 0; i < lines.length; ++i) { - lines[i].parent = this; - height += lines[i].height; - } - this.height = height; - } - - LeafChunk.prototype = { - chunkSize: function() { return this.lines.length; }, - // Remove the n lines at offset 'at'. - removeInner: function(at, n) { - for (var i = at, e = at + n; i < e; ++i) { - var line = this.lines[i]; - this.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - // Helper used to collapse a small branch into a single leaf. - collapse: function(lines) { - lines.push.apply(lines, this.lines); - }, - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function(at, lines, height) { - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i = 0; i < lines.length; ++i) lines[i].parent = this; - }, - // Used to iterate over a part of the tree. - iterN: function(at, n, op) { - for (var e = at + n; at < e; ++at) - if (op(this.lines[at])) return true; - } - }; - - function BranchChunk(children) { - this.children = children; - var size = 0, height = 0; - for (var i = 0; i < children.length; ++i) { - var ch = children[i]; - size += ch.chunkSize(); height += ch.height; - ch.parent = this; - } - this.size = size; - this.height = height; - this.parent = null; - } - - BranchChunk.prototype = { - chunkSize: function() { return this.size; }, - removeInner: function(at, n) { - this.size -= n; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), oldHeight = child.height; - child.removeInner(at, rm); - this.height -= oldHeight - child.height; - if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } - if ((n -= rm) == 0) break; - at = 0; - } else at -= sz; - } - // If the result is smaller than 25 lines, ensure that it is a - // single leaf node. - if (this.size - n < 25 && - (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - collapse: function(lines) { - for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); - }, - insertInner: function(at, lines, height) { - this.size += lines.length; - this.height += height; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - while (child.lines.length > 50) { - var spilled = child.lines.splice(child.lines.length - 25, 25); - var newleaf = new LeafChunk(spilled); - child.height -= newleaf.height; - this.children.splice(i + 1, 0, newleaf); - newleaf.parent = this; - } - this.maybeSpill(); - } - break; - } - at -= sz; - } - }, - // When a node has grown, check whether it should be split. - maybeSpill: function() { - if (this.children.length <= 10) return; - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { // Become the parent node - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10); - me.parent.maybeSpill(); - }, - iterN: function(at, n, op) { - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) return true; - if ((n -= used) == 0) break; - at = 0; - } else at -= sz; - } - } - }; - - var nextDocId = 0; - var Doc = CodeMirror.Doc = function(text, mode, firstLine) { - if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); - if (firstLine == null) firstLine = 0; - - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.frontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - - if (typeof text == "string") text = splitLines(text); - updateDoc(this, {from: start, to: start, text: text}); - setSelection(this, simpleSelection(start), sel_dontScroll); - }; - - Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function(from, to, op) { - if (op) this.iterN(from - this.first, to - from, op); - else this.iterN(this.first, this.first + this.size, from); - }, - - // Non-public interface for adding and removing lines. - insert: function(at, lines) { - var height = 0; - for (var i = 0; i < lines.length; ++i) height += lines[i].height; - this.insertInner(at - this.first, lines, height); - }, - remove: function(at, n) { this.removeInner(at - this.first, n); }, - - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - - getValue: function(lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - setValue: docMethodOp(function(code) { - var top = Pos(this.first, 0), last = this.first + this.size - 1; - makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), - text: splitLines(code), origin: "setValue", full: true}, true); - setSelection(this, simpleSelection(top)); - }), - replaceRange: function(code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function(from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - - getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, - - getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, - getLineNumber: function(line) {return lineNo(line);}, - - getLineHandleVisualStart: function(line) { - if (typeof line == "number") line = getLine(this, line); - return visualLine(line); - }, - - lineCount: function() {return this.size;}, - firstLine: function() {return this.first;}, - lastLine: function() {return this.first + this.size - 1;}, - - clipPos: function(pos) {return clipPos(this, pos);}, - - getCursor: function(start) { - var range = this.sel.primary(), pos; - if (start == null || start == "head") pos = range.head; - else if (start == "anchor") pos = range.anchor; - else if (start == "end" || start == "to" || start === false) pos = range.to(); - else pos = range.from(); - return pos; - }, - listSelections: function() { return this.sel.ranges; }, - somethingSelected: function() {return this.sel.somethingSelected();}, - - setCursor: docMethodOp(function(line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function(anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function(head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function(heads, options) { - extendSelections(this, clipPosArray(this, heads, options)); - }), - extendSelectionsBy: docMethodOp(function(f, options) { - extendSelections(this, map(this.sel.ranges, f), options); - }), - setSelections: docMethodOp(function(ranges, primary, options) { - if (!ranges.length) return; - for (var i = 0, out = []; i < ranges.length; i++) - out[i] = new Range(clipPos(this, ranges[i].anchor), - clipPos(this, ranges[i].head)); - if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); - setSelection(this, normalizeSelection(out, primary), options); - }), - addSelection: docMethodOp(function(anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); - }), - - getSelection: function(lineSep) { - var ranges = this.sel.ranges, lines; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) return lines; - else return lines.join(lineSep || "\n"); - }, - getSelections: function(lineSep) { - var parts = [], ranges = this.sel.ranges; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - if (lineSep !== false) sel = sel.join(lineSep || "\n"); - parts[i] = sel; - } - return parts; - }, - replaceSelection: function(code, collapse, origin) { - var dup = []; - for (var i = 0; i < this.sel.ranges.length; i++) - dup[i] = code; - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function(code, collapse, origin) { - var changes = [], sel = this.sel; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i = changes.length - 1; i >= 0; i--) - makeChange(this, changes[i]); - if (newSel) setSelectionReplaceHistory(this, newSel); - else if (this.cm) ensureCursorVisible(this.cm); - }), - undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), - redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), - undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), - redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), - - setExtending: function(val) {this.extend = val;}, - getExtending: function() {return this.extend;}, - - historySize: function() { - var hist = this.history, done = 0, undone = 0; - for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; - for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; - return {undo: done, redo: undone}; - }, - clearHistory: function() {this.history = new History(this.history.maxGeneration);}, - - markClean: function() { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function(forceSplit) { - if (forceSplit) - this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; - return this.history.generation; - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration); - }, - - getHistory: function() { - return {done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone)}; - }, - setHistory: function(histData) { - var hist = this.history = new History(this.history.maxGeneration); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - - addLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop]) line[prop] = cls; - else if (classTest(cls).test(line[prop])) return false; - else line[prop] += " " + cls; - return true; - }); - }), - removeLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop]; - if (!cur) return false; - else if (cls == null) line[prop] = null; - else { - var found = cur.match(classTest(cls)); - if (!found) return false; - var end = found.index + found[0].length; - line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true; - }); - }), - - markText: function(from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); - }, - setBookmark: function(pos, options) { - var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, shared: options && options.shared}; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark"); - }, - findMarksAt: function(pos) { - pos = clipPos(this, pos); - var markers = [], spans = getLine(this, pos.line).markedSpans; - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if ((span.from == null || span.from <= pos.ch) && - (span.to == null || span.to >= pos.ch)) - markers.push(span.marker.parent || span.marker); - } - return markers; - }, - findMarks: function(from, to, filter) { - from = clipPos(this, from); to = clipPos(this, to); - var found = [], lineNo = from.line; - this.iter(from.line, to.line + 1, function(line) { - var spans = line.markedSpans; - if (spans) for (var i = 0; i < spans.length; i++) { - var span = spans[i]; - if (!(lineNo == from.line && from.ch > span.to || - span.from == null && lineNo != from.line|| - lineNo == to.line && span.from > to.ch) && - (!filter || filter(span.marker))) - found.push(span.marker.parent || span.marker); - } - ++lineNo; - }); - return found; - }, - getAllMarks: function() { - var markers = []; - this.iter(function(line) { - var sps = line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) - if (sps[i].from != null) markers.push(sps[i].marker); - }); - return markers; - }, - - posFromIndex: function(off) { - var ch, lineNo = this.first; - this.iter(function(line) { - var sz = line.text.length + 1; - if (sz > off) { ch = off; return true; } - off -= sz; - ++lineNo; - }); - return clipPos(this, Pos(lineNo, ch)); - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) return 0; - this.iter(this.first, coords.line, function (line) { - index += line.text.length + 1; - }); - return index; - }, - - copy: function(copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); - doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc; - }, - - linkedDoc: function(options) { - if (!options) options = {}; - var from = this.first, to = this.first + this.size; - if (options.from != null && options.from > from) from = options.from; - if (options.to != null && options.to < to) to = options.to; - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); - if (options.sharedHist) copy.history = this.history; - (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); - copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy; - }, - unlinkDoc: function(other) { - if (other instanceof CodeMirror) other = other.doc; - if (this.linked) for (var i = 0; i < this.linked.length; ++i) { - var link = this.linked[i]; - if (link.doc != other) continue; - this.linked.splice(i, 1); - other.unlinkDoc(this); - detachSharedMarkers(findSharedMarkers(this)); - break; - } - // If the histories were shared, split them again - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function(f) {linkedDocs(this, f);}, - - getMode: function() {return this.mode;}, - getEditor: function() {return this.cm;} - }); - - // Public alias. - Doc.prototype.eachLine = Doc.prototype.iter; - - // Set up methods on CodeMirror's prototype to redirect to the editor's document. - var dontDelegate = "iter insert remove copy getEditor".split(" "); - for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) - CodeMirror.prototype[prop] = (function(method) { - return function() {return method.apply(this.doc, arguments);}; - })(Doc.prototype[prop]); - - eventMixin(Doc); - - // Call f for all linked documents. - function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc, skip, sharedHist) { - if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { - var rel = doc.linked[i]; - if (rel.doc == skip) continue; - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) continue; - f(rel.doc, shared); - propagate(rel.doc, doc, shared); - } - } - propagate(doc, null, true); - } - - // Attach a document to an editor. - function attachDoc(cm, doc) { - if (doc.cm) throw new Error("This document is already in use."); - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - if (!cm.options.lineWrapping) findMaxLine(cm); - cm.options.mode = doc.modeOption; - regChange(cm); - } - - // LINE UTILITIES - - // Find the line object corresponding to the given line number. - function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); - for (var chunk = doc; !chunk.lines;) { - for (var i = 0;; ++i) { - var child = chunk.children[i], sz = child.chunkSize(); - if (n < sz) { chunk = child; break; } - n -= sz; - } - } - return chunk.lines[n]; - } - - // Get the part of a document between two positions, as an array of - // strings. - function getBetween(doc, start, end) { - var out = [], n = start.line; - doc.iter(start.line, end.line + 1, function(line) { - var text = line.text; - if (n == end.line) text = text.slice(0, end.ch); - if (n == start.line) text = text.slice(start.ch); - out.push(text); - ++n; - }); - return out; - } - // Get the lines between from and to, as array of strings. - function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function(line) { out.push(line.text); }); - return out; - } - - // Update the height of a line, propagating the height change - // upwards to parent nodes. - function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) for (var n = line; n; n = n.parent) n.height += diff; - } - - // Given a line object, find its line number by walking up through - // its parent links. - function lineNo(line) { - if (line.parent == null) return null; - var cur = line.parent, no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i = 0;; ++i) { - if (chunk.children[i] == cur) break; - no += chunk.children[i].chunkSize(); - } - } - return no + cur.first; - } - - // Find the line at the given vertical position, using the height - // information in the document tree. - function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i = 0; i < chunk.children.length; ++i) { - var child = chunk.children[i], ch = child.height; - if (h < ch) { chunk = child; continue outer; } - h -= ch; - n += child.chunkSize(); - } - return n; - } while (!chunk.lines); - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i], lh = line.height; - if (h < lh) break; - h -= lh; - } - return n + i; - } - - - // Find the height above the given line. - function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - - var h = 0, chunk = lineObj.parent; - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i]; - if (line == lineObj) break; - else h += line.height; - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i = 0; i < p.children.length; ++i) { - var cur = p.children[i]; - if (cur == chunk) break; - else h += cur.height; - } - } - return h; - } - - // Get the bidi ordering for the given line (and cache it). Returns - // false for lines that are fully left-to-right, and an array of - // BidiSpan objects otherwise. - function getOrder(line) { - var order = line.order; - if (order == null) order = line.order = bidiOrdering(line.text); - return order; - } - - // HISTORY - - function History(startGen) { - // Arrays of change events and selections. Doing something adds an - // event to done and clears undo. Undoing moves events from done - // to undone, redoing moves them in the other direction. - this.done = []; this.undone = []; - this.undoDepth = Infinity; - // Used to track when changes can be merged into a single undo - // event - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - // Used by the isClean() method - this.generation = this.maxGeneration = startGen || 1; - } - - // Create a history change event from an updateDoc-style change - // object. - function historyChangeFromChange(doc, change) { - var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); - return histChange; - } - - // Pop all selection events off the end of a history array. Stop at - // a change event. - function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) array.pop(); - else break; - } - } - - // Find the top change event in the history. Pop off selection - // events that are in the way. - function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done); - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done); - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done); - } - } - - // Register a change in the history. Merges changes that are within - // a single operation, ore are close together with an origin that - // allows merging (starting with "+") into a single event. - function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = +new Date, cur; - - if ((hist.lastOp == opId || - hist.lastOrigin == change.origin && change.origin && - ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || - change.origin.charAt(0) == "*")) && - (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - // Merge this change into the last event - var last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - // Optimized case for simple insertion -- don't want to add - // new changesets for every character typed - last.to = changeEnd(change); - } else { - // Add new sub-event - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - // Can not be merged, start a new event. - var before = lst(hist.done); - if (!before || !before.ranges) - pushSelectionToHistory(doc.sel, hist.done); - cur = {changes: [historyChangeFromChange(doc, change)], - generation: hist.generation}; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) hist.done.shift(); - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - - if (!last) signal(doc, "historyAdded"); - } - - function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || - ch == "+" && - prev.ranges.length == sel.ranges.length && - prev.somethingSelected() == sel.somethingSelected() && - new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); - } - - // Called whenever the selection changes, sets the new selection as - // the pending selection in the history, and pushes the old pending - // selection into the 'done' array when it was significantly - // different (in number of selected ranges, emptiness, or time). - function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, origin = options && options.origin; - - // A new event is started when the previous origin does not match - // the current, or the origins don't allow matching. Origins - // starting with * are always merged, those starting with + are - // merged when similar and close together in time. - if (opId == hist.lastSelOp || - (origin && hist.lastSelOrigin == origin && - (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || - selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) - hist.done[hist.done.length - 1] = sel; - else - pushSelectionToHistory(sel, hist.done); - - hist.lastSelTime = +new Date; - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) - clearSelectionEvents(hist.undone); - } - - function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) - dest.push(sel); - } - - // Used to store marked span information in the history. - function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { - if (line.markedSpans) - (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; - ++n; - }); - } - - // When un/re-doing restores text containing marked spans, those - // that have been explicitly cleared should not be restored. - function removeClearedSpans(spans) { - if (!spans) return null; - for (var i = 0, out; i < spans.length; ++i) { - if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } - else if (out) out.push(spans[i]); - } - return !out ? spans : out.length ? out : null; - } - - // Retrieve and filter the old marked spans stored in a change event. - function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) return null; - for (var i = 0, nw = []; i < change.text.length; ++i) - nw.push(removeClearedSpans(found[i])); - return nw; - } - - // Used both to provide a JSON-safe object in .getHistory, and, when - // detaching a document, to split the history in two - function copyHistoryArray(events, newGroup, instantiateSel) { - for (var i = 0, copy = []; i < events.length; ++i) { - var event = events[i]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue; - } - var changes = event.changes, newChanges = []; - copy.push({changes: newChanges}); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], m; - newChanges.push({from: change.from, to: change.to, text: change.text}); - if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop] = change[prop]; - delete change[prop]; - } - } - } - } - return copy; - } - - // Rebasing/resetting history to deal with externally-sourced changes - - function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } - } - - // Tries to rebase an array of history events given a change in the - // document. If the change touches the same lines as the event, the - // event, and everything 'behind' it, is discarded. If the change is - // before the event, the event's positions are updated. Uses a - // copy-on-write scheme for the positions, to avoid having to - // reallocate them all on every rebase, but also avoid problems with - // shared position objects being unsafely updated. - function rebaseHistArray(array, from, to, diff) { - for (var i = 0; i < array.length; ++i) { - var sub = array[i], ok = true; - if (sub.ranges) { - if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue; - } - for (var j = 0; j < sub.changes.length; ++j) { - var cur = sub.changes[j]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break; - } - } - if (!ok) { - array.splice(0, i + 1); - i = 0; - } - } - } - - function rebaseHist(hist, change) { - var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); - } - - // EVENT UTILITIES - - // Due to the fact that we still support jurassic IE versions, some - // compatibility wrappers are needed. - - var e_preventDefault = CodeMirror.e_preventDefault = function(e) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - }; - var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { - if (e.stopPropagation) e.stopPropagation(); - else e.cancelBubble = true; - }; - function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; - } - var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; - - function e_target(e) {return e.target || e.srcElement;} - function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) b = 1; - else if (e.button & 2) b = 3; - else if (e.button & 4) b = 2; - } - if (mac && e.ctrlKey && b == 1) b = 3; - return b; - } - - // EVENT HANDLING - - // Lightweight event framework. on/off also work on DOM nodes, - // registering native DOM handlers. - - var on = CodeMirror.on = function(emitter, type, f) { - if (emitter.addEventListener) - emitter.addEventListener(type, f, false); - else if (emitter.attachEvent) - emitter.attachEvent("on" + type, f); - else { - var map = emitter._handlers || (emitter._handlers = {}); - var arr = map[type] || (map[type] = []); - arr.push(f); - } - }; - - var off = CodeMirror.off = function(emitter, type, f) { - if (emitter.removeEventListener) - emitter.removeEventListener(type, f, false); - else if (emitter.detachEvent) - emitter.detachEvent("on" + type, f); - else { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - for (var i = 0; i < arr.length; ++i) - if (arr[i] == f) { arr.splice(i, 1); break; } - } - }; - - var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2); - for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); - }; - - var orphanDelayedCallbacks = null; - - // Often, we want to signal events at a point where we are in the - // middle of some work, but don't want the handler to start calling - // other methods on the editor, which might be in an inconsistent - // state or simply not expect any other events to happen. - // signalLater looks whether there are any handlers, and schedules - // them to be executed when the last operation ends, or, if no - // operation is active, when a timeout fires. - function signalLater(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2), list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - function bnd(f) {return function(){f.apply(null, args);};}; - for (var i = 0; i < arr.length; ++i) - list.push(bnd(arr[i])); - } - - function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i = 0; i < delayed.length; ++i) delayed[i](); - } - - // The DOM events that CodeMirror handles can be overridden by - // registering a (non-DOM) handler on the editor for the event name, - // and preventDefault-ing the event in that handler. - function signalDOMEvent(cm, e, override) { - if (typeof e == "string") - e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore; - } - - function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) return; - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) - set.push(arr[i]); - } - - function hasHandler(emitter, type) { - var arr = emitter._handlers && emitter._handlers[type]; - return arr && arr.length > 0; - } - - // Add on and off methods to a constructor's prototype, to make - // registering events on such objects more convenient. - function eventMixin(ctor) { - ctor.prototype.on = function(type, f) {on(this, type, f);}; - ctor.prototype.off = function(type, f) {off(this, type, f);}; - } - - // MISC UTILITIES - - // Number of pixels added to scroller and sizer to hide scrollbar - var scrollerGap = 30; - - // Returned or thrown by various protocols to signal 'I'm not - // handling this'. - var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; - - // Reused option objects for setSelection & friends - var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; - - function Delayed() {this.id = null;} - Delayed.prototype.set = function(ms, f) { - clearTimeout(this.id); - this.id = setTimeout(f, ms); - }; - - // Counts the column offset in a string, taking tabs into account. - // Used mostly to find indentation. - var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) end = string.length; - } - for (var i = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf("\t", i); - if (nextTab < 0 || nextTab >= end) - return n + (end - i); - n += nextTab - i; - n += tabSize - (n % tabSize); - i = nextTab + 1; - } - }; - - // The inverse of countColumn -- find the offset that corresponds to - // a particular column. - function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf("\t", pos); - if (nextTab == -1) nextTab = string.length; - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) - return pos + Math.min(skipped, goal - col); - col += nextTab - pos; - col += tabSize - (col % tabSize); - pos = nextTab + 1; - if (col >= goal) return pos; - } - } - - var spaceStrs = [""]; - function spaceStr(n) { - while (spaceStrs.length <= n) - spaceStrs.push(lst(spaceStrs) + " "); - return spaceStrs[n]; - } - - function lst(arr) { return arr[arr.length-1]; } - - var selectInput = function(node) { node.select(); }; - if (ios) // Mobile Safari apparently has a bug where select() is broken. - selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; - else if (ie) // Suppress mysterious IE10 errors - selectInput = function(node) { try { node.select(); } catch(_e) {} }; - - function indexOf(array, elt) { - for (var i = 0; i < array.length; ++i) - if (array[i] == elt) return i; - return -1; - } - function map(array, f) { - var out = []; - for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); - return out; - } - - function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - var ctor = function() {}; - ctor.prototype = base; - inst = new ctor(); - } - if (props) copyObj(props, inst); - return inst; - }; - - function copyObj(obj, target, overwrite) { - if (!target) target = {}; - for (var prop in obj) - if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) - target[prop] = obj[prop]; - return target; - } - - function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function(){return f.apply(null, args);}; - } - - var nonASCIISingleCaseWordChar = /[\u00df\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; - var isWordCharBasic = CodeMirror.isWordChar = function(ch) { - return /\w/.test(ch) || ch > "\x80" && - (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); - }; - function isWordChar(ch, helper) { - if (!helper) return isWordCharBasic(ch); - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; - return helper.test(ch); - } - - function isEmpty(obj) { - for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; - return true; - } - - // Extending unicode characters. A series of a non-extending char + - // any number of extending chars is treated as a single unit as far - // as editing and measuring is concerned. This is not fully correct, - // since some scripts/fonts/browsers also treat other configurations - // of code points as a group. - var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; - function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } - - // DOM UTILITIES - - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) e.className = className; - if (style) e.style.cssText = style; - if (typeof content == "string") e.appendChild(document.createTextNode(content)); - else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); - return e; - } - - var range; - if (document.createRange) range = function(node, start, end) { - var r = document.createRange(); - r.setEnd(node, end); - r.setStart(node, start); - return r; - }; - else range = function(node, start, end) { - var r = document.body.createTextRange(); - try { r.moveToElementText(node.parentNode); } - catch(e) { return r; } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r; - }; - - function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) - e.removeChild(e.firstChild); - return e; - } - - function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e); - } - - function contains(parent, child) { - if (parent.contains) - return parent.contains(child); - while (child = child.parentNode) - if (child == parent) return true; - } - - function activeElt() { return document.activeElement; } - // Older versions of IE throws unspecified error when touching - // document.activeElement in some cases (during loading, in iframe) - if (ie && ie_version < 11) activeElt = function() { - try { return document.activeElement; } - catch(e) { return document.body; } - }; - - function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } - var rmClass = CodeMirror.rmClass = function(node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } - }; - var addClass = CodeMirror.addClass = function(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; - }; - function joinClasses(a, b) { - var as = a.split(" "); - for (var i = 0; i < as.length; i++) - if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; - return b; - } - - // WINDOW-WIDE EVENTS - - // These must be handled carefully, because naively registering a - // handler for each editor will cause the editors to never be - // garbage collected. - - function forEachCodeMirror(f) { - if (!document.body.getElementsByClassName) return; - var byClass = document.body.getElementsByClassName("CodeMirror"); - for (var i = 0; i < byClass.length; i++) { - var cm = byClass[i].CodeMirror; - if (cm) f(cm); - } - } - - var globalsRegistered = false; - function ensureGlobalHandlers() { - if (globalsRegistered) return; - registerGlobalHandlers(); - globalsRegistered = true; - } - function registerGlobalHandlers() { - // When the window resizes, we need to refresh active editors. - var resizeTimer; - on(window, "resize", function() { - if (resizeTimer == null) resizeTimer = setTimeout(function() { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); - }); - // When the window loses focus, we want to show the editor as blurred - on(window, "blur", function() { - forEachCodeMirror(onBlur); - }); - } - - // FEATURE DETECTION - - // Detect drag-and-drop - var dragAndDrop = function() { - // There is *some* kind of drag-and-drop support in IE6-8, but I - // couldn't get it to work yet. - if (ie && ie_version < 9) return false; - var div = elt('div'); - return "draggable" in div || "dragDrop" in div; - }(); - - var zwspSupported; - function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "\u200b"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) - zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); - } - if (zwspSupported) return elt("span", "\u200b"); - else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); - } - - // Feature-detect IE's crummy client rect reporting for bidi text - var badBidiRects; - function hasBadBidiRects(measure) { - if (badBidiRects != null) return badBidiRects; - var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) - var r1 = range(txt, 1, 2).getBoundingClientRect(); - return badBidiRects = (r1.right - r0.right < 3); - } - - // See if "".split is the broken IE version, if so, provide an - // alternative way to split lines. - var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { - var pos = 0, result = [], l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) nl = string.length; - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result; - } : function(string){return string.split(/\r\n?|\n/);}; - - var hasSelection = window.getSelection ? function(te) { - try { return te.selectionStart != te.selectionEnd; } - catch(e) { return false; } - } : function(te) { - try {var range = te.ownerDocument.selection.createRange();} - catch(e) {} - if (!range || range.parentElement() != te) return false; - return range.compareEndPoints("StartToEnd", range) != 0; - }; - - var hasCopyEvent = (function() { - var e = elt("div"); - if ("oncopy" in e) return true; - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function"; - })(); - - var badZoomedRects = null; - function hasBadZoomedRects(measure) { - if (badZoomedRects != null) return badZoomedRects; - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; - } - - // KEY NAMES - - var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", - 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", - 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", - 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", - 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", - 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", - 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; - CodeMirror.keyNames = keyNames; - (function() { - // Number keys - for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); - // Alphabetic keys - for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); - // Function keys - for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; - })(); - - // BIDI HELPERS - - function iterateBidiSections(order, from, to, f) { - if (!order) return f(from, to, "ltr"); - var found = false; - for (var i = 0; i < order.length; ++i) { - var part = order[i]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); - found = true; - } - } - if (!found) f(from, to, "ltr"); - } - - function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } - function bidiRight(part) { return part.level % 2 ? part.from : part.to; } - - function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } - function lineRight(line) { - var order = getOrder(line); - if (!order) return line.text.length; - return bidiRight(lst(order)); - } - - function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) lineN = lineNo(visual); - var order = getOrder(visual); - var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); - return Pos(lineN, ch); - } - function lineEnd(cm, lineN) { - var merged, line = getLine(cm.doc, lineN); - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - lineN = null; - } - var order = getOrder(line); - var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); - return Pos(lineN == null ? lineNo(line) : lineN, ch); - } - function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(0, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS); - } - return start; - } - - function compareBidiLevel(order, a, b) { - var linedir = order[0].level; - if (a == linedir) return true; - if (b == linedir) return false; - return a < b; - } - var bidiOther; - function getBidiPartAt(order, pos) { - bidiOther = null; - for (var i = 0, found; i < order.length; ++i) { - var cur = order[i]; - if (cur.from < pos && cur.to > pos) return i; - if ((cur.from == pos || cur.to == pos)) { - if (found == null) { - found = i; - } else if (compareBidiLevel(order, cur.level, order[found].level)) { - if (cur.from != cur.to) bidiOther = found; - return i; - } else { - if (cur.from != cur.to) bidiOther = i; - return found; - } - } - } - return found; - } - - function moveInLine(line, pos, dir, byUnit) { - if (!byUnit) return pos + dir; - do pos += dir; - while (pos > 0 && isExtendingChar(line.text.charAt(pos))); - return pos; - } - - // This is needed in order to move 'visually' through bi-directional - // text -- i.e., pressing left should make the cursor go left, even - // when in RTL text. The tricky part is the 'jumps', where RTL and - // LTR text touch each other. This often requires the cursor offset - // to move more than one unit, in order to visually move one unit. - function moveVisually(line, start, dir, byUnit) { - var bidi = getOrder(line); - if (!bidi) return moveLogically(line, start, dir, byUnit); - var pos = getBidiPartAt(bidi, start), part = bidi[pos]; - var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); - - for (;;) { - if (target > part.from && target < part.to) return target; - if (target == part.from || target == part.to) { - if (getBidiPartAt(bidi, target) == pos) return target; - part = bidi[pos += dir]; - return (dir > 0) == part.level % 2 ? part.to : part.from; - } else { - part = bidi[pos += dir]; - if (!part) return null; - if ((dir > 0) == part.level % 2) - target = moveInLine(line, part.to, -1, byUnit); - else - target = moveInLine(line, part.from, 1, byUnit); - } - } - } - - function moveLogically(line, start, dir, byUnit) { - var target = start + dir; - if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; - return target < 0 || target > line.text.length ? null : target; - } - - // Bidirectional ordering algorithm - // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm - // that this (partially) implements. - - // One-char codes used for character types: - // L (L): Left-to-Right - // R (R): Right-to-Left - // r (AL): Right-to-Left Arabic - // 1 (EN): European Number - // + (ES): European Number Separator - // % (ET): European Number Terminator - // n (AN): Arabic Number - // , (CS): Common Number Separator - // m (NSM): Non-Spacing Mark - // b (BN): Boundary Neutral - // s (B): Paragraph Separator - // t (S): Segment Separator - // w (WS): Whitespace - // N (ON): Other Neutrals - - // Returns null if characters are ordered as they appear - // (left-to-right), or an array of sections ({from, to, level} - // objects) in the order in which they occur visually. - var bidiOrdering = (function() { - // Character types for codepoints 0 to 0xff - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - // Character types for codepoints 0x600 to 0x6ff - var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; - function charType(code) { - if (code <= 0xf7) return lowTypes.charAt(code); - else if (0x590 <= code && code <= 0x5f4) return "R"; - else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); - else if (0x6ee <= code && code <= 0x8ac) return "r"; - else if (0x2000 <= code && code <= 0x200b) return "w"; - else if (code == 0x200c) return "b"; - else return "L"; - } - - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; - // Browsers seem to always treat the boundaries of block elements as being L. - var outerType = "L"; - - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; this.to = to; - } - - return function(str) { - if (!bidiRE.test(str)) return false; - var len = str.length, types = []; - for (var i = 0, type; i < len; ++i) - types.push(type = charType(str.charCodeAt(i))); - - // W1. Examine each non-spacing mark (NSM) in the level run, and - // change the type of the NSM to the type of the previous - // character. If the NSM is at the start of the level run, it will - // get the type of sor. - for (var i = 0, prev = outerType; i < len; ++i) { - var type = types[i]; - if (type == "m") types[i] = prev; - else prev = type; - } - - // W2. Search backwards from each instance of a European number - // until the first strong type (R, L, AL, or sor) is found. If an - // AL is found, change the type of the European number to Arabic - // number. - // W3. Change all ALs to R. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (type == "1" && cur == "r") types[i] = "n"; - else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } - } - - // W4. A single European separator between two European numbers - // changes to a European number. A single common separator between - // two numbers of the same type changes to that type. - for (var i = 1, prev = types[0]; i < len - 1; ++i) { - var type = types[i]; - if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; - else if (type == "," && prev == types[i+1] && - (prev == "1" || prev == "n")) types[i] = prev; - prev = type; - } - - // W5. A sequence of European terminators adjacent to European - // numbers changes to all European numbers. - // W6. Otherwise, separators and terminators change to Other - // Neutral. - for (var i = 0; i < len; ++i) { - var type = types[i]; - if (type == ",") types[i] = "N"; - else if (type == "%") { - for (var end = i + 1; end < len && types[end] == "%"; ++end) {} - var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // W7. Search backwards from each instance of a European number - // until the first strong type (R, L, or sor) is found. If an L is - // found, then change the type of the European number to L. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (cur == "L" && type == "1") types[i] = "L"; - else if (isStrong.test(type)) cur = type; - } - - // N1. A sequence of neutrals takes the direction of the - // surrounding strong text if the text on both sides has the same - // direction. European and Arabic numbers act as if they were R in - // terms of their influence on neutrals. Start-of-level-run (sor) - // and end-of-level-run (eor) are used at level run boundaries. - // N2. Any remaining neutrals take the embedding direction. - for (var i = 0; i < len; ++i) { - if (isNeutral.test(types[i])) { - for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} - var before = (i ? types[i-1] : outerType) == "L"; - var after = (end < len ? types[end] : outerType) == "L"; - var replace = before || after ? "L" : "R"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // Here we depart from the documented algorithm, in order to avoid - // building up an actual levels array. Since there are only three - // levels (0, 1, 2) in an implementation that doesn't take - // explicit embedding into account, we can build up the order on - // the fly, without following the level-based algorithm. - var order = [], m; - for (var i = 0; i < len;) { - if (countsAsLeft.test(types[i])) { - var start = i; - for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} - order.push(new BidiSpan(0, start, i)); - } else { - var pos = i, at = order.length; - for (++i; i < len && types[i] != "L"; ++i) {} - for (var j = pos; j < i;) { - if (countsAsNum.test(types[j])) { - if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); - var nstart = j; - for (++j; j < i && countsAsNum.test(types[j]); ++j) {} - order.splice(at, 0, new BidiSpan(2, nstart, j)); - pos = j; - } else ++j; - } - if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); - } - } - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - if (order[0].level != lst(order).level) - order.push(new BidiSpan(order[0].level, len, len)); - - return order; - }; - })(); - - // THE END - - CodeMirror.version = "4.12.0"; - - return CodeMirror; -}); diff --git a/html/forums/admin/jscripts/codemirror/lib/index.html b/html/forums/admin/jscripts/codemirror/lib/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/lib/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/mode/css/css.js b/html/forums/admin/jscripts/codemirror/mode/css/css.js deleted file mode 100644 index 3f02907..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/css/css.js +++ /dev/null @@ -1,717 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("css", function(config, parserConfig) { - if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); - - var indentUnit = config.indentUnit, - tokenHooks = parserConfig.tokenHooks, - mediaTypes = parserConfig.mediaTypes || {}, - mediaFeatures = parserConfig.mediaFeatures || {}, - propertyKeywords = parserConfig.propertyKeywords || {}, - nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, - colorKeywords = parserConfig.colorKeywords || {}, - valueKeywords = parserConfig.valueKeywords || {}, - fontProperties = parserConfig.fontProperties || {}, - allowNested = parserConfig.allowNested; - - var type, override; - function ret(style, tp) { type = tp; return style; } - - // Tokenizers - - function tokenBase(stream, state) { - var ch = stream.next(); - if (tokenHooks[ch]) { - var result = tokenHooks[ch](stream, state); - if (result !== false) return result; - } - if (ch == "@") { - stream.eatWhile(/[\w\\\-]/); - return ret("def", stream.current()); - } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { - return ret(null, "compare"); - } else if (ch == "\"" || ch == "'") { - state.tokenize = tokenString(ch); - return state.tokenize(stream, state); - } else if (ch == "#") { - stream.eatWhile(/[\w\\\-]/); - return ret("atom", "hash"); - } else if (ch == "!") { - stream.match(/^\s*\w*/); - return ret("keyword", "important"); - } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { - stream.eatWhile(/[\w.%]/); - return ret("number", "unit"); - } else if (ch === "-") { - if (/[\d.]/.test(stream.peek())) { - stream.eatWhile(/[\w.%]/); - return ret("number", "unit"); - } else if (stream.match(/^\w+-/)) { - return ret("meta", "meta"); - } - } else if (/[,+>*\/]/.test(ch)) { - return ret(null, "select-op"); - } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { - return ret("qualifier", "qualifier"); - } else if (/[:;{}\[\]\(\)]/.test(ch)) { - return ret(null, ch); - } else if (ch == "u" && stream.match("rl(")) { - stream.backUp(1); - state.tokenize = tokenParenthesized; - return ret("property", "word"); - } else if (/[\w\\\-]/.test(ch)) { - stream.eatWhile(/[\w\\\-]/); - return ret("property", "word"); - } else { - return ret(null, null); - } - } - - function tokenString(quote) { - return function(stream, state) { - var escaped = false, ch; - while ((ch = stream.next()) != null) { - if (ch == quote && !escaped) { - if (quote == ")") stream.backUp(1); - break; - } - escaped = !escaped && ch == "\\"; - } - if (ch == quote || !escaped && quote != ")") state.tokenize = null; - return ret("string", "string"); - }; - } - - function tokenParenthesized(stream, state) { - stream.next(); // Must be '(' - if (!stream.match(/\s*[\"\')]/, false)) - state.tokenize = tokenString(")"); - else - state.tokenize = null; - return ret(null, "("); - } - - // Context management - - function Context(type, indent, prev) { - this.type = type; - this.indent = indent; - this.prev = prev; - } - - function pushContext(state, stream, type) { - state.context = new Context(type, stream.indentation() + indentUnit, state.context); - return type; - } - - function popContext(state) { - state.context = state.context.prev; - return state.context.type; - } - - function pass(type, stream, state) { - return states[state.context.type](type, stream, state); - } - function popAndPass(type, stream, state, n) { - for (var i = n || 1; i > 0; i--) - state.context = state.context.prev; - return pass(type, stream, state); - } - - // Parser - - function wordAsValue(stream) { - var word = stream.current().toLowerCase(); - if (valueKeywords.hasOwnProperty(word)) - override = "atom"; - else if (colorKeywords.hasOwnProperty(word)) - override = "keyword"; - else - override = "variable"; - } - - var states = {}; - - states.top = function(type, stream, state) { - if (type == "{") { - return pushContext(state, stream, "block"); - } else if (type == "}" && state.context.prev) { - return popContext(state); - } else if (type == "@media") { - return pushContext(state, stream, "media"); - } else if (type == "@font-face") { - return "font_face_before"; - } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { - return "keyframes"; - } else if (type && type.charAt(0) == "@") { - return pushContext(state, stream, "at"); - } else if (type == "hash") { - override = "builtin"; - } else if (type == "word") { - override = "tag"; - } else if (type == "variable-definition") { - return "maybeprop"; - } else if (type == "interpolation") { - return pushContext(state, stream, "interpolation"); - } else if (type == ":") { - return "pseudo"; - } else if (allowNested && type == "(") { - return pushContext(state, stream, "parens"); - } - return state.context.type; - }; - - states.block = function(type, stream, state) { - if (type == "word") { - var word = stream.current().toLowerCase(); - if (propertyKeywords.hasOwnProperty(word)) { - override = "property"; - return "maybeprop"; - } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { - override = "string-2"; - return "maybeprop"; - } else if (allowNested) { - override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; - return "block"; - } else { - override += " error"; - return "maybeprop"; - } - } else if (type == "meta") { - return "block"; - } else if (!allowNested && (type == "hash" || type == "qualifier")) { - override = "error"; - return "block"; - } else { - return states.top(type, stream, state); - } - }; - - states.maybeprop = function(type, stream, state) { - if (type == ":") return pushContext(state, stream, "prop"); - return pass(type, stream, state); - }; - - states.prop = function(type, stream, state) { - if (type == ";") return popContext(state); - if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); - if (type == "}" || type == "{") return popAndPass(type, stream, state); - if (type == "(") return pushContext(state, stream, "parens"); - - if (type == "hash" && !/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) { - override += " error"; - } else if (type == "word") { - wordAsValue(stream); - } else if (type == "interpolation") { - return pushContext(state, stream, "interpolation"); - } - return "prop"; - }; - - states.propBlock = function(type, _stream, state) { - if (type == "}") return popContext(state); - if (type == "word") { override = "property"; return "maybeprop"; } - return state.context.type; - }; - - states.parens = function(type, stream, state) { - if (type == "{" || type == "}") return popAndPass(type, stream, state); - if (type == ")") return popContext(state); - if (type == "(") return pushContext(state, stream, "parens"); - if (type == "word") wordAsValue(stream); - return "parens"; - }; - - states.pseudo = function(type, stream, state) { - if (type == "word") { - override = "variable-3"; - return state.context.type; - } - return pass(type, stream, state); - }; - - states.media = function(type, stream, state) { - if (type == "(") return pushContext(state, stream, "media_parens"); - if (type == "}") return popAndPass(type, stream, state); - if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); - - if (type == "word") { - var word = stream.current().toLowerCase(); - if (word == "only" || word == "not" || word == "and") - override = "keyword"; - else if (mediaTypes.hasOwnProperty(word)) - override = "attribute"; - else if (mediaFeatures.hasOwnProperty(word)) - override = "property"; - else - override = "error"; - } - return state.context.type; - }; - - states.media_parens = function(type, stream, state) { - if (type == ")") return popContext(state); - if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); - return states.media(type, stream, state); - }; - - states.font_face_before = function(type, stream, state) { - if (type == "{") - return pushContext(state, stream, "font_face"); - return pass(type, stream, state); - }; - - states.font_face = function(type, stream, state) { - if (type == "}") return popContext(state); - if (type == "word") { - if (!fontProperties.hasOwnProperty(stream.current().toLowerCase())) - override = "error"; - else - override = "property"; - return "maybeprop"; - } - return "font_face"; - }; - - states.keyframes = function(type, stream, state) { - if (type == "word") { override = "variable"; return "keyframes"; } - if (type == "{") return pushContext(state, stream, "top"); - return pass(type, stream, state); - }; - - states.at = function(type, stream, state) { - if (type == ";") return popContext(state); - if (type == "{" || type == "}") return popAndPass(type, stream, state); - if (type == "word") override = "tag"; - else if (type == "hash") override = "builtin"; - return "at"; - }; - - states.interpolation = function(type, stream, state) { - if (type == "}") return popContext(state); - if (type == "{" || type == ";") return popAndPass(type, stream, state); - if (type != "variable") override = "error"; - return "interpolation"; - }; - - return { - startState: function(base) { - return {tokenize: null, - state: "top", - context: new Context("top", base || 0, null)}; - }, - - token: function(stream, state) { - if (!state.tokenize && stream.eatSpace()) return null; - var style = (state.tokenize || tokenBase)(stream, state); - if (style && typeof style == "object") { - type = style[1]; - style = style[0]; - } - override = style; - state.state = states[state.state](type, stream, state); - return override; - }, - - indent: function(state, textAfter) { - var cx = state.context, ch = textAfter && textAfter.charAt(0); - var indent = cx.indent; - if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; - if (cx.prev && - (ch == "}" && (cx.type == "block" || cx.type == "top" || cx.type == "interpolation" || cx.type == "font_face") || - ch == ")" && (cx.type == "parens" || cx.type == "media_parens") || - ch == "{" && (cx.type == "at" || cx.type == "media"))) { - indent = cx.indent - indentUnit; - cx = cx.prev; - } - return indent; - }, - - electricChars: "}", - blockCommentStart: "/*", - blockCommentEnd: "*/", - fold: "brace" - }; -}); - - function keySet(array) { - var keys = {}; - for (var i = 0; i < array.length; ++i) { - keys[array[i]] = true; - } - return keys; - } - - var mediaTypes_ = [ - "all", "aural", "braille", "handheld", "print", "projection", "screen", - "tty", "tv", "embossed" - ], mediaTypes = keySet(mediaTypes_); - - var mediaFeatures_ = [ - "width", "min-width", "max-width", "height", "min-height", "max-height", - "device-width", "min-device-width", "max-device-width", "device-height", - "min-device-height", "max-device-height", "aspect-ratio", - "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", - "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", - "max-color", "color-index", "min-color-index", "max-color-index", - "monochrome", "min-monochrome", "max-monochrome", "resolution", - "min-resolution", "max-resolution", "scan", "grid" - ], mediaFeatures = keySet(mediaFeatures_); - - var propertyKeywords_ = [ - "align-content", "align-items", "align-self", "alignment-adjust", - "alignment-baseline", "anchor-point", "animation", "animation-delay", - "animation-direction", "animation-duration", "animation-fill-mode", - "animation-iteration-count", "animation-name", "animation-play-state", - "animation-timing-function", "appearance", "azimuth", "backface-visibility", - "background", "background-attachment", "background-clip", "background-color", - "background-image", "background-origin", "background-position", - "background-repeat", "background-size", "baseline-shift", "binding", - "bleed", "bookmark-label", "bookmark-level", "bookmark-state", - "bookmark-target", "border", "border-bottom", "border-bottom-color", - "border-bottom-left-radius", "border-bottom-right-radius", - "border-bottom-style", "border-bottom-width", "border-collapse", - "border-color", "border-image", "border-image-outset", - "border-image-repeat", "border-image-slice", "border-image-source", - "border-image-width", "border-left", "border-left-color", - "border-left-style", "border-left-width", "border-radius", "border-right", - "border-right-color", "border-right-style", "border-right-width", - "border-spacing", "border-style", "border-top", "border-top-color", - "border-top-left-radius", "border-top-right-radius", "border-top-style", - "border-top-width", "border-width", "bottom", "box-decoration-break", - "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", - "caption-side", "clear", "clip", "color", "color-profile", "column-count", - "column-fill", "column-gap", "column-rule", "column-rule-color", - "column-rule-style", "column-rule-width", "column-span", "column-width", - "columns", "content", "counter-increment", "counter-reset", "crop", "cue", - "cue-after", "cue-before", "cursor", "direction", "display", - "dominant-baseline", "drop-initial-after-adjust", - "drop-initial-after-align", "drop-initial-before-adjust", - "drop-initial-before-align", "drop-initial-size", "drop-initial-value", - "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", - "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", - "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", - "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", - "font-stretch", "font-style", "font-synthesis", "font-variant", - "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", - "font-variant-ligatures", "font-variant-numeric", "font-variant-position", - "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", - "grid-auto-position", "grid-auto-rows", "grid-column", "grid-column-end", - "grid-column-start", "grid-row", "grid-row-end", "grid-row-start", - "grid-template", "grid-template-areas", "grid-template-columns", - "grid-template-rows", "hanging-punctuation", "height", "hyphens", - "icon", "image-orientation", "image-rendering", "image-resolution", - "inline-box-align", "justify-content", "left", "letter-spacing", - "line-break", "line-height", "line-stacking", "line-stacking-ruby", - "line-stacking-shift", "line-stacking-strategy", "list-style", - "list-style-image", "list-style-position", "list-style-type", "margin", - "margin-bottom", "margin-left", "margin-right", "margin-top", - "marker-offset", "marks", "marquee-direction", "marquee-loop", - "marquee-play-count", "marquee-speed", "marquee-style", "max-height", - "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", - "nav-left", "nav-right", "nav-up", "object-fit", "object-position", - "opacity", "order", "orphans", "outline", - "outline-color", "outline-offset", "outline-style", "outline-width", - "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", - "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", - "page", "page-break-after", "page-break-before", "page-break-inside", - "page-policy", "pause", "pause-after", "pause-before", "perspective", - "perspective-origin", "pitch", "pitch-range", "play-during", "position", - "presentation-level", "punctuation-trim", "quotes", "region-break-after", - "region-break-before", "region-break-inside", "region-fragment", - "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", - "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", - "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", - "shape-outside", "size", "speak", "speak-as", "speak-header", - "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", - "tab-size", "table-layout", "target", "target-name", "target-new", - "target-position", "text-align", "text-align-last", "text-decoration", - "text-decoration-color", "text-decoration-line", "text-decoration-skip", - "text-decoration-style", "text-emphasis", "text-emphasis-color", - "text-emphasis-position", "text-emphasis-style", "text-height", - "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", - "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", - "text-wrap", "top", "transform", "transform-origin", "transform-style", - "transition", "transition-delay", "transition-duration", - "transition-property", "transition-timing-function", "unicode-bidi", - "vertical-align", "visibility", "voice-balance", "voice-duration", - "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", - "voice-volume", "volume", "white-space", "widows", "width", "word-break", - "word-spacing", "word-wrap", "z-index", - // SVG-specific - "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", - "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", - "color-interpolation", "color-interpolation-filters", - "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", - "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", - "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", - "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", - "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", - "glyph-orientation-vertical", "text-anchor", "writing-mode" - ], propertyKeywords = keySet(propertyKeywords_); - - var nonStandardPropertyKeywords_ = [ - "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", - "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", - "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", - "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", - "searchfield-results-decoration", "zoom" - ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); - - var colorKeywords_ = [ - "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", - "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", - "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", - "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", - "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", - "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", - "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", - "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", - "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", - "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", - "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", - "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", - "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", - "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", - "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", - "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", - "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", - "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", - "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", - "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", - "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", - "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", - "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", - "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", - "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", - "whitesmoke", "yellow", "yellowgreen" - ], colorKeywords = keySet(colorKeywords_); - - var valueKeywords_ = [ - "above", "absolute", "activeborder", "activecaption", "afar", - "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate", - "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", - "arabic-indic", "armenian", "asterisks", "auto", "avoid", "avoid-column", "avoid-page", - "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", - "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", - "both", "bottom", "break", "break-all", "break-word", "button", "button-bevel", - "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian", - "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", - "cell", "center", "checkbox", "circle", "cjk-earthly-branch", - "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", - "col-resize", "collapse", "column", "compact", "condensed", "contain", "content", - "content-box", "context-menu", "continuous", "copy", "cover", "crop", - "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal", - "decimal-leading-zero", "default", "default-button", "destination-atop", - "destination-in", "destination-out", "destination-over", "devanagari", - "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted", - "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", - "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", - "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", - "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", - "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", - "ethiopic-halehame-gez", "ethiopic-halehame-om-et", - "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", - "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", - "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed", - "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "footnotes", - "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", - "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", - "help", "hidden", "hide", "higher", "highlight", "highlighttext", - "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", - "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", - "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", - "inline-block", "inline-flex", "inline-table", "inset", "inside", "intrinsic", "invert", - "italic", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", - "landscape", "lao", "large", "larger", "left", "level", "lighter", - "line-through", "linear", "lines", "list-item", "listbox", "listitem", - "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", - "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", - "lower-roman", "lowercase", "ltr", "malayalam", "match", - "media-controls-background", "media-current-time-display", - "media-fullscreen-button", "media-mute-button", "media-play-button", - "media-return-to-realtime-button", "media-rewind-button", - "media-seek-back-button", "media-seek-forward-button", "media-slider", - "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", - "media-volume-slider-container", "media-volume-sliderthumb", "medium", - "menu", "menulist", "menulist-button", "menulist-text", - "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", - "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", - "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", - "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", - "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", - "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", - "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", - "painted", "page", "paused", "persian", "plus-darker", "plus-lighter", "pointer", - "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", - "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", - "relative", "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", - "ridge", "right", "round", "row-resize", "rtl", "run-in", "running", - "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield", - "searchfield-cancel-button", "searchfield-decoration", - "searchfield-results-button", "searchfield-results-decoration", - "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", - "single", "skip-white-space", "slide", "slider-horizontal", - "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", - "small", "small-caps", "small-caption", "smaller", "solid", "somali", - "source-atop", "source-in", "source-out", "source-over", "space", "square", - "square-button", "start", "static", "status-bar", "stretch", "stroke", - "sub", "subpixel-antialiased", "super", "sw-resize", "table", - "table-caption", "table-cell", "table-column", "table-column-group", - "table-footer-group", "table-header-group", "table-row", "table-row-group", - "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", - "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", - "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", - "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", - "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", - "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", - "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", - "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", - "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", - "window", "windowframe", "windowtext", "x-large", "x-small", "xor", - "xx-large", "xx-small" - ], valueKeywords = keySet(valueKeywords_); - - var fontProperties_ = [ - "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", - "font-stretch", "font-weight", "font-style" - ], fontProperties = keySet(fontProperties_); - - var allWords = mediaTypes_.concat(mediaFeatures_).concat(propertyKeywords_) - .concat(nonStandardPropertyKeywords_).concat(colorKeywords_).concat(valueKeywords_); - CodeMirror.registerHelper("hintWords", "css", allWords); - - function tokenCComment(stream, state) { - var maybeEnd = false, ch; - while ((ch = stream.next()) != null) { - if (maybeEnd && ch == "/") { - state.tokenize = null; - break; - } - maybeEnd = (ch == "*"); - } - return ["comment", "comment"]; - } - - function tokenSGMLComment(stream, state) { - if (stream.skipTo("-->")) { - stream.match("-->"); - state.tokenize = null; - } else { - stream.skipToEnd(); - } - return ["comment", "comment"]; - } - - CodeMirror.defineMIME("text/css", { - mediaTypes: mediaTypes, - mediaFeatures: mediaFeatures, - propertyKeywords: propertyKeywords, - nonStandardPropertyKeywords: nonStandardPropertyKeywords, - colorKeywords: colorKeywords, - valueKeywords: valueKeywords, - fontProperties: fontProperties, - tokenHooks: { - "<": function(stream, state) { - if (!stream.match("!--")) return false; - state.tokenize = tokenSGMLComment; - return tokenSGMLComment(stream, state); - }, - "/": function(stream, state) { - if (!stream.eat("*")) return false; - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } - }, - name: "css" - }); - - CodeMirror.defineMIME("text/x-scss", { - mediaTypes: mediaTypes, - mediaFeatures: mediaFeatures, - propertyKeywords: propertyKeywords, - nonStandardPropertyKeywords: nonStandardPropertyKeywords, - colorKeywords: colorKeywords, - valueKeywords: valueKeywords, - fontProperties: fontProperties, - allowNested: true, - tokenHooks: { - "/": function(stream, state) { - if (stream.eat("/")) { - stream.skipToEnd(); - return ["comment", "comment"]; - } else if (stream.eat("*")) { - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } else { - return ["operator", "operator"]; - } - }, - ":": function(stream) { - if (stream.match(/\s*\{/)) - return [null, "{"]; - return false; - }, - "$": function(stream) { - stream.match(/^[\w-]+/); - if (stream.match(/^\s*:/, false)) - return ["variable-2", "variable-definition"]; - return ["variable-2", "variable"]; - }, - "#": function(stream) { - if (!stream.eat("{")) return false; - return [null, "interpolation"]; - } - }, - name: "css", - helperType: "scss" - }); - - CodeMirror.defineMIME("text/x-less", { - mediaTypes: mediaTypes, - mediaFeatures: mediaFeatures, - propertyKeywords: propertyKeywords, - nonStandardPropertyKeywords: nonStandardPropertyKeywords, - colorKeywords: colorKeywords, - valueKeywords: valueKeywords, - fontProperties: fontProperties, - allowNested: true, - tokenHooks: { - "/": function(stream, state) { - if (stream.eat("/")) { - stream.skipToEnd(); - return ["comment", "comment"]; - } else if (stream.eat("*")) { - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } else { - return ["operator", "operator"]; - } - }, - "@": function(stream) { - if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; - stream.eatWhile(/[\w\\\-]/); - if (stream.match(/^\s*:/, false)) - return ["variable-2", "variable-definition"]; - return ["variable-2", "variable"]; - }, - "&": function() { - return ["atom", "atom"]; - } - }, - name: "css", - helperType: "less" - }); - -}); diff --git a/html/forums/admin/jscripts/codemirror/mode/css/index.html b/html/forums/admin/jscripts/codemirror/mode/css/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/css/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/mode/css/less.html b/html/forums/admin/jscripts/codemirror/mode/css/less.html deleted file mode 100644 index 6ccb721..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/css/less.html +++ /dev/null @@ -1,152 +0,0 @@ - - -CodeMirror: LESS mode - - - - - - - - - - -
-

LESS mode

- - - -

The LESS mode is a sub-mode of the CSS mode (defined in css.js.

- -

Parsing/Highlighting Tests: normal, verbose.

-
diff --git a/html/forums/admin/jscripts/codemirror/mode/css/less_test.js b/html/forums/admin/jscripts/codemirror/mode/css/less_test.js deleted file mode 100644 index 2ba6998..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/css/less_test.js +++ /dev/null @@ -1,51 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function() { - "use strict"; - - var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less"); - function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); } - - MT("variable", - "[variable-2 @base]: [atom #f04615];", - "[qualifier .class] {", - " [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]", - " [property color]: [variable saturate]([variable-2 @base], [number 5%]);", - "}"); - - MT("amp", - "[qualifier .child], [qualifier .sibling] {", - " [qualifier .parent] [atom &] {", - " [property color]: [keyword black];", - " }", - " [atom &] + [atom &] {", - " [property color]: [keyword red];", - " }", - "}"); - - MT("mixin", - "[qualifier .mixin] ([variable dark]; [variable-2 @color]) {", - " [property color]: [variable darken]([variable-2 @color], [number 10%]);", - "}", - "[qualifier .mixin] ([variable light]; [variable-2 @color]) {", - " [property color]: [variable lighten]([variable-2 @color], [number 10%]);", - "}", - "[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {", - " [property display]: [atom block];", - "}", - "[variable-2 @switch]: [variable light];", - "[qualifier .class] {", - " [qualifier .mixin]([variable-2 @switch]; [atom #888]);", - "}"); - - MT("nest", - "[qualifier .one] {", - " [def @media] ([property width]: [number 400px]) {", - " [property font-size]: [number 1.2em];", - " [def @media] [attribute print] [keyword and] [property color] {", - " [property color]: [keyword blue];", - " }", - " }", - "}"); -})(); diff --git a/html/forums/admin/jscripts/codemirror/mode/css/scss.html b/html/forums/admin/jscripts/codemirror/mode/css/scss.html deleted file mode 100644 index 21f20e0..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/css/scss.html +++ /dev/null @@ -1,157 +0,0 @@ - - -CodeMirror: SCSS mode - - - - - - - - - -
-

SCSS mode

-
- - -

The SCSS mode is a sub-mode of the CSS mode (defined in css.js.

- -

Parsing/Highlighting Tests: normal, verbose.

- -
diff --git a/html/forums/admin/jscripts/codemirror/mode/css/scss_test.js b/html/forums/admin/jscripts/codemirror/mode/css/scss_test.js deleted file mode 100644 index 8dcea9e..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/css/scss_test.js +++ /dev/null @@ -1,110 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function() { - var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-scss"); - function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } - - MT('url_with_quotation', - "[tag foo] { [property background]:[atom url]([string test.jpg]) }"); - - MT('url_with_double_quotes', - "[tag foo] { [property background]:[atom url]([string \"test.jpg\"]) }"); - - MT('url_with_single_quotes', - "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) }"); - - MT('string', - "[def @import] [string \"compass/css3\"]"); - - MT('important_keyword', - "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) [keyword !important] }"); - - MT('variable', - "[variable-2 $blue]:[atom #333]"); - - MT('variable_as_attribute', - "[tag foo] { [property color]:[variable-2 $blue] }"); - - MT('numbers', - "[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }"); - - MT('number_percentage', - "[tag foo] { [property width]:[number 80%] }"); - - MT('selector', - "[builtin #hello][qualifier .world]{}"); - - MT('singleline_comment', - "[comment // this is a comment]"); - - MT('multiline_comment', - "[comment /*foobar*/]"); - - MT('attribute_with_hyphen', - "[tag foo] { [property font-size]:[number 10px] }"); - - MT('string_after_attribute', - "[tag foo] { [property content]:[string \"::\"] }"); - - MT('directives', - "[def @include] [qualifier .mixin]"); - - MT('basic_structure', - "[tag p] { [property background]:[keyword red]; }"); - - MT('nested_structure', - "[tag p] { [tag a] { [property color]:[keyword red]; } }"); - - MT('mixin', - "[def @mixin] [tag table-base] {}"); - - MT('number_without_semicolon', - "[tag p] {[property width]:[number 12]}", - "[tag a] {[property color]:[keyword red];}"); - - MT('atom_in_nested_block', - "[tag p] { [tag a] { [property color]:[atom #000]; } }"); - - MT('interpolation_in_property', - "[tag foo] { #{[variable-2 $hello]}:[number 2]; }"); - - MT('interpolation_in_selector', - "[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }"); - - MT('interpolation_error', - "[tag foo]#{[error foo]} { [property color]:[atom #000]; }"); - - MT("divide_operator", - "[tag foo] { [property width]:[number 4] [operator /] [number 2] }"); - - MT('nested_structure_with_id_selector', - "[tag p] { [builtin #hello] { [property color]:[keyword red]; } }"); - - MT('indent_mixin', - "[def @mixin] [tag container] (", - " [variable-2 $a]: [number 10],", - " [variable-2 $b]: [number 10])", - "{}"); - - MT('indent_nested', - "[tag foo] {", - " [tag bar] {", - " }", - "}"); - - MT('indent_parentheses', - "[tag foo] {", - " [property color]: [variable darken]([variable-2 $blue],", - " [number 9%]);", - "}"); - - MT('indent_vardef', - "[variable-2 $name]:", - " [string 'val'];", - "[tag tag] {", - " [tag inner] {", - " [property margin]: [number 3px];", - " }", - "}"); -})(); diff --git a/html/forums/admin/jscripts/codemirror/mode/css/test.js b/html/forums/admin/jscripts/codemirror/mode/css/test.js deleted file mode 100644 index d236e2a..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/css/test.js +++ /dev/null @@ -1,135 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function() { - var mode = CodeMirror.getMode({indentUnit: 2}, "css"); - function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } - - // Error, because "foobarhello" is neither a known type or property, but - // property was expected (after "and"), and it should be in parenthese. - MT("atMediaUnknownType", - "[def @media] [attribute screen] [keyword and] [error foobarhello] { }"); - - // Soft error, because "foobarhello" is not a known property or type. - MT("atMediaUnknownProperty", - "[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }"); - - // Make sure nesting works with media queries - MT("atMediaMaxWidthNested", - "[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }"); - - MT("tagSelector", - "[tag foo] { }"); - - MT("classSelector", - "[qualifier .foo-bar_hello] { }"); - - MT("idSelector", - "[builtin #foo] { [error #foo] }"); - - MT("tagSelectorUnclosed", - "[tag foo] { [property margin]: [number 0] } [tag bar] { }"); - - MT("tagStringNoQuotes", - "[tag foo] { [property font-family]: [variable hello] [variable world]; }"); - - MT("tagStringDouble", - "[tag foo] { [property font-family]: [string \"hello world\"]; }"); - - MT("tagStringSingle", - "[tag foo] { [property font-family]: [string 'hello world']; }"); - - MT("tagColorKeyword", - "[tag foo] {", - " [property color]: [keyword black];", - " [property color]: [keyword navy];", - " [property color]: [keyword yellow];", - "}"); - - MT("tagColorHex3", - "[tag foo] { [property background]: [atom #fff]; }"); - - MT("tagColorHex6", - "[tag foo] { [property background]: [atom #ffffff]; }"); - - MT("tagColorHex4", - "[tag foo] { [property background]: [atom&error #ffff]; }"); - - MT("tagColorHexInvalid", - "[tag foo] { [property background]: [atom&error #ffg]; }"); - - MT("tagNegativeNumber", - "[tag foo] { [property margin]: [number -5px]; }"); - - MT("tagPositiveNumber", - "[tag foo] { [property padding]: [number 5px]; }"); - - MT("tagVendor", - "[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }"); - - MT("tagBogusProperty", - "[tag foo] { [property&error barhelloworld]: [number 0]; }"); - - MT("tagTwoProperties", - "[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }"); - - MT("tagTwoPropertiesURL", - "[tag foo] { [property background]: [atom url]([string //example.com/foo.png]); [property padding]: [number 0]; }"); - - MT("commentSGML", - "[comment ]"); - - MT("commentSGML2", - "[comment ] [tag div] {}"); - - MT("indent_tagSelector", - "[tag strong], [tag em] {", - " [property background]: [atom rgba](", - " [number 255], [number 255], [number 0], [number .2]", - " );", - "}"); - - MT("indent_atMedia", - "[def @media] {", - " [tag foo] {", - " [property color]:", - " [keyword yellow];", - " }", - "}"); - - MT("indent_comma", - "[tag foo] {", - " [property font-family]: [variable verdana],", - " [atom sans-serif];", - "}"); - - MT("indent_parentheses", - "[tag foo]:[variable-3 before] {", - " [property background]: [atom url](", - "[string blahblah]", - "[string etc]", - "[string ]) [keyword !important];", - "}"); - - MT("font_face", - "[def @font-face] {", - " [property font-family]: [string 'myfont'];", - " [error nonsense]: [string 'abc'];", - " [property src]: [atom url]([string http://blah]),", - " [atom url]([string http://foo]);", - "}"); - - MT("empty_url", - "[def @import] [tag url]() [tag screen];"); - - MT("parens", - "[qualifier .foo] {", - " [property background-image]: [variable fade]([atom #000], [number 20%]);", - " [property border-image]: [variable linear-gradient](", - " [atom to] [atom bottom],", - " [variable fade]([atom #000], [number 20%]) [number 0%],", - " [variable fade]([atom #000], [number 20%]) [number 100%]", - " );", - "}"); -})(); diff --git a/html/forums/admin/jscripts/codemirror/mode/htmlmixed/htmlmixed.js b/html/forums/admin/jscripts/codemirror/mode/htmlmixed/htmlmixed.js deleted file mode 100644 index 1cc438f..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/htmlmixed/htmlmixed.js +++ /dev/null @@ -1,121 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("htmlmixed", function(config, parserConfig) { - var htmlMode = CodeMirror.getMode(config, {name: "xml", - htmlMode: true, - multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, - multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag}); - var cssMode = CodeMirror.getMode(config, "css"); - - var scriptTypes = [], scriptTypesConf = parserConfig && parserConfig.scriptTypes; - scriptTypes.push({matches: /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, - mode: CodeMirror.getMode(config, "javascript")}); - if (scriptTypesConf) for (var i = 0; i < scriptTypesConf.length; ++i) { - var conf = scriptTypesConf[i]; - scriptTypes.push({matches: conf.matches, mode: conf.mode && CodeMirror.getMode(config, conf.mode)}); - } - scriptTypes.push({matches: /./, - mode: CodeMirror.getMode(config, "text/plain")}); - - function html(stream, state) { - var tagName = state.htmlState.tagName; - if (tagName) tagName = tagName.toLowerCase(); - var style = htmlMode.token(stream, state.htmlState); - if (tagName == "script" && /\btag\b/.test(style) && stream.current() == ">") { - // Script block: mode to change to depends on type attribute - var scriptType = stream.string.slice(Math.max(0, stream.pos - 100), stream.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i); - scriptType = scriptType ? scriptType[1] : ""; - if (scriptType && /[\"\']/.test(scriptType.charAt(0))) scriptType = scriptType.slice(1, scriptType.length - 1); - for (var i = 0; i < scriptTypes.length; ++i) { - var tp = scriptTypes[i]; - if (typeof tp.matches == "string" ? scriptType == tp.matches : tp.matches.test(scriptType)) { - if (tp.mode) { - state.token = script; - state.localMode = tp.mode; - state.localState = tp.mode.startState && tp.mode.startState(htmlMode.indent(state.htmlState, "")); - } - break; - } - } - } else if (tagName == "style" && /\btag\b/.test(style) && stream.current() == ">") { - state.token = css; - state.localMode = cssMode; - state.localState = cssMode.startState(htmlMode.indent(state.htmlState, "")); - } - return style; - } - function maybeBackup(stream, pat, style) { - var cur = stream.current(); - var close = cur.search(pat), m; - if (close > -1) stream.backUp(cur.length - close); - else if (m = cur.match(/<\/?$/)) { - stream.backUp(cur.length); - if (!stream.match(pat, false)) stream.match(cur); - } - return style; - } - function script(stream, state) { - if (stream.match(/^<\/\s*script\s*>/i, false)) { - state.token = html; - state.localState = state.localMode = null; - return null; - } - return maybeBackup(stream, /<\/\s*script\s*>/, - state.localMode.token(stream, state.localState)); - } - function css(stream, state) { - if (stream.match(/^<\/\s*style\s*>/i, false)) { - state.token = html; - state.localState = state.localMode = null; - return null; - } - return maybeBackup(stream, /<\/\s*style\s*>/, - cssMode.token(stream, state.localState)); - } - - return { - startState: function() { - var state = htmlMode.startState(); - return {token: html, localMode: null, localState: null, htmlState: state}; - }, - - copyState: function(state) { - if (state.localState) - var local = CodeMirror.copyState(state.localMode, state.localState); - return {token: state.token, localMode: state.localMode, localState: local, - htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; - }, - - token: function(stream, state) { - return state.token(stream, state); - }, - - indent: function(state, textAfter) { - if (!state.localMode || /^\s*<\//.test(textAfter)) - return htmlMode.indent(state.htmlState, textAfter); - else if (state.localMode.indent) - return state.localMode.indent(state.localState, textAfter); - else - return CodeMirror.Pass; - }, - - innerMode: function(state) { - return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; - } - }; -}, "xml", "javascript", "css"); - -CodeMirror.defineMIME("text/html", "htmlmixed"); - -}); diff --git a/html/forums/admin/jscripts/codemirror/mode/htmlmixed/index.html b/html/forums/admin/jscripts/codemirror/mode/htmlmixed/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/htmlmixed/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/mode/javascript/index.html b/html/forums/admin/jscripts/codemirror/mode/javascript/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/javascript/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/mode/javascript/javascript.js b/html/forums/admin/jscripts/codemirror/mode/javascript/javascript.js deleted file mode 100644 index 93df06d..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/javascript/javascript.js +++ /dev/null @@ -1,692 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// TODO actually recognize syntax of TypeScript constructs - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("javascript", function(config, parserConfig) { - var indentUnit = config.indentUnit; - var statementIndent = parserConfig.statementIndent; - var jsonldMode = parserConfig.jsonld; - var jsonMode = parserConfig.json || jsonldMode; - var isTS = parserConfig.typescript; - var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; - - // Tokenizer - - var keywords = function(){ - function kw(type) {return {type: type, style: "keyword"};} - var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); - var operator = kw("operator"), atom = {type: "atom", style: "atom"}; - - var jsKeywords = { - "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, - "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, "debugger": C, - "var": kw("var"), "const": kw("var"), "let": kw("var"), - "function": kw("function"), "catch": kw("catch"), - "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), - "in": operator, "typeof": operator, "instanceof": operator, - "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, - "this": kw("this"), "module": kw("module"), "class": kw("class"), "super": kw("atom"), - "yield": C, "export": kw("export"), "import": kw("import"), "extends": C - }; - - // Extend the 'normal' keywords with the TypeScript language extensions - if (isTS) { - var type = {type: "variable", style: "variable-3"}; - var tsKeywords = { - // object-like things - "interface": kw("interface"), - "extends": kw("extends"), - "constructor": kw("constructor"), - - // scope modifiers - "public": kw("public"), - "private": kw("private"), - "protected": kw("protected"), - "static": kw("static"), - - // types - "string": type, "number": type, "bool": type, "any": type - }; - - for (var attr in tsKeywords) { - jsKeywords[attr] = tsKeywords[attr]; - } - } - - return jsKeywords; - }(); - - var isOperatorChar = /[+\-*&%=<>!?|~^]/; - var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; - - function readRegexp(stream) { - var escaped = false, next, inSet = false; - while ((next = stream.next()) != null) { - if (!escaped) { - if (next == "/" && !inSet) return; - if (next == "[") inSet = true; - else if (inSet && next == "]") inSet = false; - } - escaped = !escaped && next == "\\"; - } - } - - // Used as scratch variables to communicate multiple values without - // consing up tons of objects. - var type, content; - function ret(tp, style, cont) { - type = tp; content = cont; - return style; - } - function tokenBase(stream, state) { - var ch = stream.next(); - if (ch == '"' || ch == "'") { - state.tokenize = tokenString(ch); - return state.tokenize(stream, state); - } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { - return ret("number", "number"); - } else if (ch == "." && stream.match("..")) { - return ret("spread", "meta"); - } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { - return ret(ch); - } else if (ch == "=" && stream.eat(">")) { - return ret("=>", "operator"); - } else if (ch == "0" && stream.eat(/x/i)) { - stream.eatWhile(/[\da-f]/i); - return ret("number", "number"); - } else if (/\d/.test(ch)) { - stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); - return ret("number", "number"); - } else if (ch == "/") { - if (stream.eat("*")) { - state.tokenize = tokenComment; - return tokenComment(stream, state); - } else if (stream.eat("/")) { - stream.skipToEnd(); - return ret("comment", "comment"); - } else if (state.lastType == "operator" || state.lastType == "keyword c" || - state.lastType == "sof" || /^[\[{}\(,;:]$/.test(state.lastType)) { - readRegexp(stream); - stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla - return ret("regexp", "string-2"); - } else { - stream.eatWhile(isOperatorChar); - return ret("operator", "operator", stream.current()); - } - } else if (ch == "`") { - state.tokenize = tokenQuasi; - return tokenQuasi(stream, state); - } else if (ch == "#") { - stream.skipToEnd(); - return ret("error", "error"); - } else if (isOperatorChar.test(ch)) { - stream.eatWhile(isOperatorChar); - return ret("operator", "operator", stream.current()); - } else if (wordRE.test(ch)) { - stream.eatWhile(wordRE); - var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; - return (known && state.lastType != ".") ? ret(known.type, known.style, word) : - ret("variable", "variable", word); - } - } - - function tokenString(quote) { - return function(stream, state) { - var escaped = false, next; - if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ - state.tokenize = tokenBase; - return ret("jsonld-keyword", "meta"); - } - while ((next = stream.next()) != null) { - if (next == quote && !escaped) break; - escaped = !escaped && next == "\\"; - } - if (!escaped) state.tokenize = tokenBase; - return ret("string", "string"); - }; - } - - function tokenComment(stream, state) { - var maybeEnd = false, ch; - while (ch = stream.next()) { - if (ch == "/" && maybeEnd) { - state.tokenize = tokenBase; - break; - } - maybeEnd = (ch == "*"); - } - return ret("comment", "comment"); - } - - function tokenQuasi(stream, state) { - var escaped = false, next; - while ((next = stream.next()) != null) { - if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { - state.tokenize = tokenBase; - break; - } - escaped = !escaped && next == "\\"; - } - return ret("quasi", "string-2", stream.current()); - } - - var brackets = "([{}])"; - // This is a crude lookahead trick to try and notice that we're - // parsing the argument patterns for a fat-arrow function before we - // actually hit the arrow token. It only works if the arrow is on - // the same line as the arguments and there's no strange noise - // (comments) in between. Fallback is to only notice when we hit the - // arrow, and not declare the arguments as locals for the arrow - // body. - function findFatArrow(stream, state) { - if (state.fatArrowAt) state.fatArrowAt = null; - var arrow = stream.string.indexOf("=>", stream.start); - if (arrow < 0) return; - - var depth = 0, sawSomething = false; - for (var pos = arrow - 1; pos >= 0; --pos) { - var ch = stream.string.charAt(pos); - var bracket = brackets.indexOf(ch); - if (bracket >= 0 && bracket < 3) { - if (!depth) { ++pos; break; } - if (--depth == 0) break; - } else if (bracket >= 3 && bracket < 6) { - ++depth; - } else if (wordRE.test(ch)) { - sawSomething = true; - } else if (/["'\/]/.test(ch)) { - return; - } else if (sawSomething && !depth) { - ++pos; - break; - } - } - if (sawSomething && !depth) state.fatArrowAt = pos; - } - - // Parser - - var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; - - function JSLexical(indented, column, type, align, prev, info) { - this.indented = indented; - this.column = column; - this.type = type; - this.prev = prev; - this.info = info; - if (align != null) this.align = align; - } - - function inScope(state, varname) { - for (var v = state.localVars; v; v = v.next) - if (v.name == varname) return true; - for (var cx = state.context; cx; cx = cx.prev) { - for (var v = cx.vars; v; v = v.next) - if (v.name == varname) return true; - } - } - - function parseJS(state, style, type, content, stream) { - var cc = state.cc; - // Communicate our context to the combinators. - // (Less wasteful than consing up a hundred closures on every call.) - cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; - - if (!state.lexical.hasOwnProperty("align")) - state.lexical.align = true; - - while(true) { - var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; - if (combinator(type, content)) { - while(cc.length && cc[cc.length - 1].lex) - cc.pop()(); - if (cx.marked) return cx.marked; - if (type == "variable" && inScope(state, content)) return "variable-2"; - return style; - } - } - } - - // Combinator utils - - var cx = {state: null, column: null, marked: null, cc: null}; - function pass() { - for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); - } - function cont() { - pass.apply(null, arguments); - return true; - } - function register(varname) { - function inList(list) { - for (var v = list; v; v = v.next) - if (v.name == varname) return true; - return false; - } - var state = cx.state; - if (state.context) { - cx.marked = "def"; - if (inList(state.localVars)) return; - state.localVars = {name: varname, next: state.localVars}; - } else { - if (inList(state.globalVars)) return; - if (parserConfig.globalVars) - state.globalVars = {name: varname, next: state.globalVars}; - } - } - - // Combinators - - var defaultVars = {name: "this", next: {name: "arguments"}}; - function pushcontext() { - cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; - cx.state.localVars = defaultVars; - } - function popcontext() { - cx.state.localVars = cx.state.context.vars; - cx.state.context = cx.state.context.prev; - } - function pushlex(type, info) { - var result = function() { - var state = cx.state, indent = state.indented; - if (state.lexical.type == "stat") indent = state.lexical.indented; - else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) - indent = outer.indented; - state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); - }; - result.lex = true; - return result; - } - function poplex() { - var state = cx.state; - if (state.lexical.prev) { - if (state.lexical.type == ")") - state.indented = state.lexical.indented; - state.lexical = state.lexical.prev; - } - } - poplex.lex = true; - - function expect(wanted) { - function exp(type) { - if (type == wanted) return cont(); - else if (wanted == ";") return pass(); - else return cont(exp); - }; - return exp; - } - - function statement(type, value) { - if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); - if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); - if (type == "keyword b") return cont(pushlex("form"), statement, poplex); - if (type == "{") return cont(pushlex("}"), block, poplex); - if (type == ";") return cont(); - if (type == "if") { - if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) - cx.state.cc.pop()(); - return cont(pushlex("form"), expression, statement, poplex, maybeelse); - } - if (type == "function") return cont(functiondef); - if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); - if (type == "variable") return cont(pushlex("stat"), maybelabel); - if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), - block, poplex, poplex); - if (type == "case") return cont(expression, expect(":")); - if (type == "default") return cont(expect(":")); - if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), - statement, poplex, popcontext); - if (type == "module") return cont(pushlex("form"), pushcontext, afterModule, popcontext, poplex); - if (type == "class") return cont(pushlex("form"), className, poplex); - if (type == "export") return cont(pushlex("form"), afterExport, poplex); - if (type == "import") return cont(pushlex("form"), afterImport, poplex); - return pass(pushlex("stat"), expression, expect(";"), poplex); - } - function expression(type) { - return expressionInner(type, false); - } - function expressionNoComma(type) { - return expressionInner(type, true); - } - function expressionInner(type, noComma) { - if (cx.state.fatArrowAt == cx.stream.start) { - var body = noComma ? arrowBodyNoComma : arrowBody; - if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); - else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); - } - - var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; - if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); - if (type == "function") return cont(functiondef, maybeop); - if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); - if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop); - if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); - if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); - if (type == "{") return contCommasep(objprop, "}", null, maybeop); - if (type == "quasi") { return pass(quasi, maybeop); } - return cont(); - } - function maybeexpression(type) { - if (type.match(/[;\}\)\],]/)) return pass(); - return pass(expression); - } - function maybeexpressionNoComma(type) { - if (type.match(/[;\}\)\],]/)) return pass(); - return pass(expressionNoComma); - } - - function maybeoperatorComma(type, value) { - if (type == ",") return cont(expression); - return maybeoperatorNoComma(type, value, false); - } - function maybeoperatorNoComma(type, value, noComma) { - var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; - var expr = noComma == false ? expression : expressionNoComma; - if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); - if (type == "operator") { - if (/\+\+|--/.test(value)) return cont(me); - if (value == "?") return cont(expression, expect(":"), expr); - return cont(expr); - } - if (type == "quasi") { return pass(quasi, me); } - if (type == ";") return; - if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); - if (type == ".") return cont(property, me); - if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); - } - function quasi(type, value) { - if (type != "quasi") return pass(); - if (value.slice(value.length - 2) != "${") return cont(quasi); - return cont(expression, continueQuasi); - } - function continueQuasi(type) { - if (type == "}") { - cx.marked = "string-2"; - cx.state.tokenize = tokenQuasi; - return cont(quasi); - } - } - function arrowBody(type) { - findFatArrow(cx.stream, cx.state); - return pass(type == "{" ? statement : expression); - } - function arrowBodyNoComma(type) { - findFatArrow(cx.stream, cx.state); - return pass(type == "{" ? statement : expressionNoComma); - } - function maybelabel(type) { - if (type == ":") return cont(poplex, statement); - return pass(maybeoperatorComma, expect(";"), poplex); - } - function property(type) { - if (type == "variable") {cx.marked = "property"; return cont();} - } - function objprop(type, value) { - if (type == "variable" || cx.style == "keyword") { - cx.marked = "property"; - if (value == "get" || value == "set") return cont(getterSetter); - return cont(afterprop); - } else if (type == "number" || type == "string") { - cx.marked = jsonldMode ? "property" : (cx.style + " property"); - return cont(afterprop); - } else if (type == "jsonld-keyword") { - return cont(afterprop); - } else if (type == "[") { - return cont(expression, expect("]"), afterprop); - } - } - function getterSetter(type) { - if (type != "variable") return pass(afterprop); - cx.marked = "property"; - return cont(functiondef); - } - function afterprop(type) { - if (type == ":") return cont(expressionNoComma); - if (type == "(") return pass(functiondef); - } - function commasep(what, end) { - function proceed(type) { - if (type == ",") { - var lex = cx.state.lexical; - if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; - return cont(what, proceed); - } - if (type == end) return cont(); - return cont(expect(end)); - } - return function(type) { - if (type == end) return cont(); - return pass(what, proceed); - }; - } - function contCommasep(what, end, info) { - for (var i = 3; i < arguments.length; i++) - cx.cc.push(arguments[i]); - return cont(pushlex(end, info), commasep(what, end), poplex); - } - function block(type) { - if (type == "}") return cont(); - return pass(statement, block); - } - function maybetype(type) { - if (isTS && type == ":") return cont(typedef); - } - function typedef(type) { - if (type == "variable"){cx.marked = "variable-3"; return cont();} - } - function vardef() { - return pass(pattern, maybetype, maybeAssign, vardefCont); - } - function pattern(type, value) { - if (type == "variable") { register(value); return cont(); } - if (type == "[") return contCommasep(pattern, "]"); - if (type == "{") return contCommasep(proppattern, "}"); - } - function proppattern(type, value) { - if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { - register(value); - return cont(maybeAssign); - } - if (type == "variable") cx.marked = "property"; - return cont(expect(":"), pattern, maybeAssign); - } - function maybeAssign(_type, value) { - if (value == "=") return cont(expressionNoComma); - } - function vardefCont(type) { - if (type == ",") return cont(vardef); - } - function maybeelse(type, value) { - if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); - } - function forspec(type) { - if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); - } - function forspec1(type) { - if (type == "var") return cont(vardef, expect(";"), forspec2); - if (type == ";") return cont(forspec2); - if (type == "variable") return cont(formaybeinof); - return pass(expression, expect(";"), forspec2); - } - function formaybeinof(_type, value) { - if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } - return cont(maybeoperatorComma, forspec2); - } - function forspec2(type, value) { - if (type == ";") return cont(forspec3); - if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } - return pass(expression, expect(";"), forspec3); - } - function forspec3(type) { - if (type != ")") cont(expression); - } - function functiondef(type, value) { - if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} - if (type == "variable") {register(value); return cont(functiondef);} - if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, statement, popcontext); - } - function funarg(type) { - if (type == "spread") return cont(funarg); - return pass(pattern, maybetype); - } - function className(type, value) { - if (type == "variable") {register(value); return cont(classNameAfter);} - } - function classNameAfter(type, value) { - if (value == "extends") return cont(expression, classNameAfter); - if (type == "{") return cont(pushlex("}"), classBody, poplex); - } - function classBody(type, value) { - if (type == "variable" || cx.style == "keyword") { - cx.marked = "property"; - if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody); - return cont(functiondef, classBody); - } - if (value == "*") { - cx.marked = "keyword"; - return cont(classBody); - } - if (type == ";") return cont(classBody); - if (type == "}") return cont(); - } - function classGetterSetter(type) { - if (type != "variable") return pass(); - cx.marked = "property"; - return cont(); - } - function afterModule(type, value) { - if (type == "string") return cont(statement); - if (type == "variable") { register(value); return cont(maybeFrom); } - } - function afterExport(_type, value) { - if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } - if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } - return pass(statement); - } - function afterImport(type) { - if (type == "string") return cont(); - return pass(importSpec, maybeFrom); - } - function importSpec(type, value) { - if (type == "{") return contCommasep(importSpec, "}"); - if (type == "variable") register(value); - return cont(); - } - function maybeFrom(_type, value) { - if (value == "from") { cx.marked = "keyword"; return cont(expression); } - } - function arrayLiteral(type) { - if (type == "]") return cont(); - return pass(expressionNoComma, maybeArrayComprehension); - } - function maybeArrayComprehension(type) { - if (type == "for") return pass(comprehension, expect("]")); - if (type == ",") return cont(commasep(maybeexpressionNoComma, "]")); - return pass(commasep(expressionNoComma, "]")); - } - function comprehension(type) { - if (type == "for") return cont(forspec, comprehension); - if (type == "if") return cont(expression, comprehension); - } - - function isContinuedStatement(state, textAfter) { - return state.lastType == "operator" || state.lastType == "," || - isOperatorChar.test(textAfter.charAt(0)) || - /[,.]/.test(textAfter.charAt(0)); - } - - // Interface - - return { - startState: function(basecolumn) { - var state = { - tokenize: tokenBase, - lastType: "sof", - cc: [], - lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), - localVars: parserConfig.localVars, - context: parserConfig.localVars && {vars: parserConfig.localVars}, - indented: 0 - }; - if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") - state.globalVars = parserConfig.globalVars; - return state; - }, - - token: function(stream, state) { - if (stream.sol()) { - if (!state.lexical.hasOwnProperty("align")) - state.lexical.align = false; - state.indented = stream.indentation(); - findFatArrow(stream, state); - } - if (state.tokenize != tokenComment && stream.eatSpace()) return null; - var style = state.tokenize(stream, state); - if (type == "comment") return style; - state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; - return parseJS(state, style, type, content, stream); - }, - - indent: function(state, textAfter) { - if (state.tokenize == tokenComment) return CodeMirror.Pass; - if (state.tokenize != tokenBase) return 0; - var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; - // Kludge to prevent 'maybelse' from blocking lexical scope pops - if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { - var c = state.cc[i]; - if (c == poplex) lexical = lexical.prev; - else if (c != maybeelse) break; - } - if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; - if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") - lexical = lexical.prev; - var type = lexical.type, closing = firstChar == type; - - if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); - else if (type == "form" && firstChar == "{") return lexical.indented; - else if (type == "form") return lexical.indented + indentUnit; - else if (type == "stat") - return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); - else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) - return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); - else if (lexical.align) return lexical.column + (closing ? 0 : 1); - else return lexical.indented + (closing ? 0 : indentUnit); - }, - - electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, - blockCommentStart: jsonMode ? null : "/*", - blockCommentEnd: jsonMode ? null : "*/", - lineComment: jsonMode ? null : "//", - fold: "brace", - - helperType: jsonMode ? "json" : "javascript", - jsonldMode: jsonldMode, - jsonMode: jsonMode - }; -}); - -CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); - -CodeMirror.defineMIME("text/javascript", "javascript"); -CodeMirror.defineMIME("text/ecmascript", "javascript"); -CodeMirror.defineMIME("application/javascript", "javascript"); -CodeMirror.defineMIME("application/x-javascript", "javascript"); -CodeMirror.defineMIME("application/ecmascript", "javascript"); -CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); -CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); -CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); -CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); -CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); - -}); diff --git a/html/forums/admin/jscripts/codemirror/mode/javascript/json-ld.html b/html/forums/admin/jscripts/codemirror/mode/javascript/json-ld.html deleted file mode 100644 index 3a37f0b..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/javascript/json-ld.html +++ /dev/null @@ -1,72 +0,0 @@ - - -CodeMirror: JSON-LD mode - - - - - - - - - - - - -
-

JSON-LD mode

- - -
- - - -

This is a specialization of the JavaScript mode.

-
diff --git a/html/forums/admin/jscripts/codemirror/mode/javascript/test.js b/html/forums/admin/jscripts/codemirror/mode/javascript/test.js deleted file mode 100644 index 91b0e89..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/javascript/test.js +++ /dev/null @@ -1,200 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function() { - var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); - function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } - - MT("locals", - "[keyword function] [variable foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }"); - - MT("comma-and-binop", - "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); - - MT("destructuring", - "([keyword function]([def a], [[[def b], [def c] ]]) {", - " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", - " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", - "})();"); - - MT("class_body", - "[keyword class] [variable Foo] {", - " [property constructor]() {}", - " [property sayName]() {", - " [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];", - " }", - "}"); - - MT("class", - "[keyword class] [variable Point] [keyword extends] [variable SuperThing] {", - " [property get] [property prop]() { [keyword return] [number 24]; }", - " [property constructor]([def x], [def y]) {", - " [keyword super]([string 'something']);", - " [keyword this].[property x] [operator =] [variable-2 x];", - " }", - "}"); - - MT("module", - "[keyword module] [string 'foo'] {", - " [keyword export] [keyword let] [def x] [operator =] [number 42];", - " [keyword export] [keyword *] [keyword from] [string 'somewhere'];", - "}"); - - MT("import", - "[keyword function] [variable foo]() {", - " [keyword import] [def $] [keyword from] [string 'jquery'];", - " [keyword module] [def crypto] [keyword from] [string 'crypto'];", - " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", - "}"); - - MT("const", - "[keyword function] [variable f]() {", - " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", - "}"); - - MT("for/of", - "[keyword for]([keyword let] [variable of] [keyword of] [variable something]) {}"); - - MT("generator", - "[keyword function*] [variable repeat]([def n]) {", - " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", - " [keyword yield] [variable-2 i];", - "}"); - - MT("quotedStringAddition", - "[keyword let] [variable f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];"); - - MT("quotedFatArrow", - "[keyword let] [variable f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];"); - - MT("fatArrow", - "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", - "[variable a];", // No longer in scope - "[keyword let] [variable f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", - "[variable c];"); - - MT("spread", - "[keyword function] [variable f]([def a], [meta ...][def b]) {", - " [variable something]([variable-2 a], [meta ...][variable-2 b]);", - "}"); - - MT("comprehension", - "[keyword function] [variable f]() {", - " [[([variable x] [operator +] [number 1]) [keyword for] ([keyword var] [def x] [keyword in] [variable y]) [keyword if] [variable pred]([variable-2 x]) ]];", - " ([variable u] [keyword for] ([keyword var] [def u] [keyword of] [variable generateValues]()) [keyword if] ([variable-2 u].[property color] [operator ===] [string 'blue']));", - "}"); - - MT("quasi", - "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); - - MT("quasi_no_function", - "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); - - MT("indent_statement", - "[keyword var] [variable x] [operator =] [number 10]", - "[variable x] [operator +=] [variable y] [operator +]", - " [atom Infinity]", - "[keyword debugger];"); - - MT("indent_if", - "[keyword if] ([number 1])", - " [keyword break];", - "[keyword else] [keyword if] ([number 2])", - " [keyword continue];", - "[keyword else]", - " [number 10];", - "[keyword if] ([number 1]) {", - " [keyword break];", - "} [keyword else] [keyword if] ([number 2]) {", - " [keyword continue];", - "} [keyword else] {", - " [number 10];", - "}"); - - MT("indent_for", - "[keyword for] ([keyword var] [variable i] [operator =] [number 0];", - " [variable i] [operator <] [number 100];", - " [variable i][operator ++])", - " [variable doSomething]([variable i]);", - "[keyword debugger];"); - - MT("indent_c_style", - "[keyword function] [variable foo]()", - "{", - " [keyword debugger];", - "}"); - - MT("indent_else", - "[keyword for] (;;)", - " [keyword if] ([variable foo])", - " [keyword if] ([variable bar])", - " [number 1];", - " [keyword else]", - " [number 2];", - " [keyword else]", - " [number 3];"); - - MT("indent_funarg", - "[variable foo]([number 10000],", - " [keyword function]([def a]) {", - " [keyword debugger];", - "};"); - - MT("indent_below_if", - "[keyword for] (;;)", - " [keyword if] ([variable foo])", - " [number 1];", - "[number 2];"); - - MT("multilinestring", - "[keyword var] [variable x] [operator =] [string 'foo\\]", - "[string bar'];"); - - MT("scary_regexp", - "[string-2 /foo[[/]]bar/];"); - - MT("indent_strange_array", - "[keyword var] [variable x] [operator =] [[", - " [number 1],,", - " [number 2],", - "]];", - "[number 10];"); - - var jsonld_mode = CodeMirror.getMode( - {indentUnit: 2}, - {name: "javascript", jsonld: true} - ); - function LD(name) { - test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); - } - - LD("json_ld_keywords", - '{', - ' [meta "@context"]: {', - ' [meta "@base"]: [string "http://example.com"],', - ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', - ' [property "likesFlavor"]: {', - ' [meta "@container"]: [meta "@list"]', - ' [meta "@reverse"]: [string "@beFavoriteOf"]', - ' },', - ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', - ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', - ' },', - ' [meta "@graph"]: [[ {', - ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', - ' [property "name"]: [string "John Lennon"],', - ' [property "modified"]: {', - ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', - ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', - ' }', - ' } ]]', - '}'); - - LD("json_ld_fake", - '{', - ' [property "@fake"]: [string "@fake"],', - ' [property "@contextual"]: [string "@identifier"],', - ' [property "user@domain.com"]: [string "@graphical"],', - ' [property "@ID"]: [string "@@ID"]', - '}'); -})(); diff --git a/html/forums/admin/jscripts/codemirror/mode/javascript/typescript.html b/html/forums/admin/jscripts/codemirror/mode/javascript/typescript.html deleted file mode 100644 index 2cfc538..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/javascript/typescript.html +++ /dev/null @@ -1,61 +0,0 @@ - - -CodeMirror: TypeScript mode - - - - - - - - - -
-

TypeScript mode

- - -
- - - -

This is a specialization of the JavaScript mode.

-
diff --git a/html/forums/admin/jscripts/codemirror/mode/xml/index.html b/html/forums/admin/jscripts/codemirror/mode/xml/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/xml/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/mode/xml/test.js b/html/forums/admin/jscripts/codemirror/mode/xml/test.js deleted file mode 100644 index f48156b..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/xml/test.js +++ /dev/null @@ -1,51 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function() { - var mode = CodeMirror.getMode({indentUnit: 2}, "xml"), mname = "xml"; - function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); } - - MT("matching", - "[tag&bracket <][tag top][tag&bracket >]", - " text", - " [tag&bracket <][tag inner][tag&bracket />]", - "[tag&bracket ]"); - - MT("nonmatching", - "[tag&bracket <][tag top][tag&bracket >]", - " [tag&bracket <][tag inner][tag&bracket />]", - " [tag&bracket ]"); - - MT("doctype", - "[meta ]", - "[tag&bracket <][tag top][tag&bracket />]"); - - MT("cdata", - "[tag&bracket <][tag top][tag&bracket >]", - " [atom ]", - "[tag&bracket ]"); - - // HTML tests - mode = CodeMirror.getMode({indentUnit: 2}, "text/html"); - - MT("selfclose", - "[tag&bracket <][tag html][tag&bracket >]", - " [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \"/foobar\"][tag&bracket >]", - "[tag&bracket ]"); - - MT("list", - "[tag&bracket <][tag ol][tag&bracket >]", - " [tag&bracket <][tag li][tag&bracket >]one", - " [tag&bracket <][tag li][tag&bracket >]two", - "[tag&bracket ]"); - - MT("valueless", - "[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]"); - - MT("pThenArticle", - "[tag&bracket <][tag p][tag&bracket >]", - " foo", - "[tag&bracket <][tag article][tag&bracket >]bar"); - -})(); diff --git a/html/forums/admin/jscripts/codemirror/mode/xml/xml.js b/html/forums/admin/jscripts/codemirror/mode/xml/xml.js deleted file mode 100644 index 2f3b8f8..0000000 --- a/html/forums/admin/jscripts/codemirror/mode/xml/xml.js +++ /dev/null @@ -1,384 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("xml", function(config, parserConfig) { - var indentUnit = config.indentUnit; - var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1; - var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag; - if (multilineTagIndentPastTag == null) multilineTagIndentPastTag = true; - - var Kludges = parserConfig.htmlMode ? { - autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, - 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, - 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, - 'track': true, 'wbr': true, 'menuitem': true}, - implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, - 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, - 'th': true, 'tr': true}, - contextGrabbers: { - 'dd': {'dd': true, 'dt': true}, - 'dt': {'dd': true, 'dt': true}, - 'li': {'li': true}, - 'option': {'option': true, 'optgroup': true}, - 'optgroup': {'optgroup': true}, - 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, - 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, - 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, - 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, - 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, - 'rp': {'rp': true, 'rt': true}, - 'rt': {'rp': true, 'rt': true}, - 'tbody': {'tbody': true, 'tfoot': true}, - 'td': {'td': true, 'th': true}, - 'tfoot': {'tbody': true}, - 'th': {'td': true, 'th': true}, - 'thead': {'tbody': true, 'tfoot': true}, - 'tr': {'tr': true} - }, - doNotIndent: {"pre": true}, - allowUnquoted: true, - allowMissing: true, - caseFold: true - } : { - autoSelfClosers: {}, - implicitlyClosed: {}, - contextGrabbers: {}, - doNotIndent: {}, - allowUnquoted: false, - allowMissing: false, - caseFold: false - }; - var alignCDATA = parserConfig.alignCDATA; - - // Return variables for tokenizers - var type, setStyle; - - function inText(stream, state) { - function chain(parser) { - state.tokenize = parser; - return parser(stream, state); - } - - var ch = stream.next(); - if (ch == "<") { - if (stream.eat("!")) { - if (stream.eat("[")) { - if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); - else return null; - } else if (stream.match("--")) { - return chain(inBlock("comment", "-->")); - } else if (stream.match("DOCTYPE", true, true)) { - stream.eatWhile(/[\w\._\-]/); - return chain(doctype(1)); - } else { - return null; - } - } else if (stream.eat("?")) { - stream.eatWhile(/[\w\._\-]/); - state.tokenize = inBlock("meta", "?>"); - return "meta"; - } else { - type = stream.eat("/") ? "closeTag" : "openTag"; - state.tokenize = inTag; - return "tag bracket"; - } - } else if (ch == "&") { - var ok; - if (stream.eat("#")) { - if (stream.eat("x")) { - ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); - } else { - ok = stream.eatWhile(/[\d]/) && stream.eat(";"); - } - } else { - ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); - } - return ok ? "atom" : "error"; - } else { - stream.eatWhile(/[^&<]/); - return null; - } - } - - function inTag(stream, state) { - var ch = stream.next(); - if (ch == ">" || (ch == "/" && stream.eat(">"))) { - state.tokenize = inText; - type = ch == ">" ? "endTag" : "selfcloseTag"; - return "tag bracket"; - } else if (ch == "=") { - type = "equals"; - return null; - } else if (ch == "<") { - state.tokenize = inText; - state.state = baseState; - state.tagName = state.tagStart = null; - var next = state.tokenize(stream, state); - return next ? next + " tag error" : "tag error"; - } else if (/[\'\"]/.test(ch)) { - state.tokenize = inAttribute(ch); - state.stringStartCol = stream.column(); - return state.tokenize(stream, state); - } else { - stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); - return "word"; - } - } - - function inAttribute(quote) { - var closure = function(stream, state) { - while (!stream.eol()) { - if (stream.next() == quote) { - state.tokenize = inTag; - break; - } - } - return "string"; - }; - closure.isInAttribute = true; - return closure; - } - - function inBlock(style, terminator) { - return function(stream, state) { - while (!stream.eol()) { - if (stream.match(terminator)) { - state.tokenize = inText; - break; - } - stream.next(); - } - return style; - }; - } - function doctype(depth) { - return function(stream, state) { - var ch; - while ((ch = stream.next()) != null) { - if (ch == "<") { - state.tokenize = doctype(depth + 1); - return state.tokenize(stream, state); - } else if (ch == ">") { - if (depth == 1) { - state.tokenize = inText; - break; - } else { - state.tokenize = doctype(depth - 1); - return state.tokenize(stream, state); - } - } - } - return "meta"; - }; - } - - function Context(state, tagName, startOfLine) { - this.prev = state.context; - this.tagName = tagName; - this.indent = state.indented; - this.startOfLine = startOfLine; - if (Kludges.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) - this.noIndent = true; - } - function popContext(state) { - if (state.context) state.context = state.context.prev; - } - function maybePopContext(state, nextTagName) { - var parentTagName; - while (true) { - if (!state.context) { - return; - } - parentTagName = state.context.tagName; - if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) || - !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { - return; - } - popContext(state); - } - } - - function baseState(type, stream, state) { - if (type == "openTag") { - state.tagStart = stream.column(); - return tagNameState; - } else if (type == "closeTag") { - return closeTagNameState; - } else { - return baseState; - } - } - function tagNameState(type, stream, state) { - if (type == "word") { - state.tagName = stream.current(); - setStyle = "tag"; - return attrState; - } else { - setStyle = "error"; - return tagNameState; - } - } - function closeTagNameState(type, stream, state) { - if (type == "word") { - var tagName = stream.current(); - if (state.context && state.context.tagName != tagName && - Kludges.implicitlyClosed.hasOwnProperty(state.context.tagName)) - popContext(state); - if (state.context && state.context.tagName == tagName) { - setStyle = "tag"; - return closeState; - } else { - setStyle = "tag error"; - return closeStateErr; - } - } else { - setStyle = "error"; - return closeStateErr; - } - } - - function closeState(type, _stream, state) { - if (type != "endTag") { - setStyle = "error"; - return closeState; - } - popContext(state); - return baseState; - } - function closeStateErr(type, stream, state) { - setStyle = "error"; - return closeState(type, stream, state); - } - - function attrState(type, _stream, state) { - if (type == "word") { - setStyle = "attribute"; - return attrEqState; - } else if (type == "endTag" || type == "selfcloseTag") { - var tagName = state.tagName, tagStart = state.tagStart; - state.tagName = state.tagStart = null; - if (type == "selfcloseTag" || - Kludges.autoSelfClosers.hasOwnProperty(tagName)) { - maybePopContext(state, tagName); - } else { - maybePopContext(state, tagName); - state.context = new Context(state, tagName, tagStart == state.indented); - } - return baseState; - } - setStyle = "error"; - return attrState; - } - function attrEqState(type, stream, state) { - if (type == "equals") return attrValueState; - if (!Kludges.allowMissing) setStyle = "error"; - return attrState(type, stream, state); - } - function attrValueState(type, stream, state) { - if (type == "string") return attrContinuedState; - if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return attrState;} - setStyle = "error"; - return attrState(type, stream, state); - } - function attrContinuedState(type, stream, state) { - if (type == "string") return attrContinuedState; - return attrState(type, stream, state); - } - - return { - startState: function() { - return {tokenize: inText, - state: baseState, - indented: 0, - tagName: null, tagStart: null, - context: null}; - }, - - token: function(stream, state) { - if (!state.tagName && stream.sol()) - state.indented = stream.indentation(); - - if (stream.eatSpace()) return null; - type = null; - var style = state.tokenize(stream, state); - if ((style || type) && style != "comment") { - setStyle = null; - state.state = state.state(type || style, stream, state); - if (setStyle) - style = setStyle == "error" ? style + " error" : setStyle; - } - return style; - }, - - indent: function(state, textAfter, fullLine) { - var context = state.context; - // Indent multi-line strings (e.g. css). - if (state.tokenize.isInAttribute) { - if (state.tagStart == state.indented) - return state.stringStartCol + 1; - else - return state.indented + indentUnit; - } - if (context && context.noIndent) return CodeMirror.Pass; - if (state.tokenize != inTag && state.tokenize != inText) - return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; - // Indent the starts of attribute names. - if (state.tagName) { - if (multilineTagIndentPastTag) - return state.tagStart + state.tagName.length + 2; - else - return state.tagStart + indentUnit * multilineTagIndentFactor; - } - if (alignCDATA && /$/, - blockCommentStart: "", - - configuration: parserConfig.htmlMode ? "html" : "xml", - helperType: parserConfig.htmlMode ? "html" : "xml" - }; -}); - -CodeMirror.defineMIME("text/xml", "xml"); -CodeMirror.defineMIME("application/xml", "xml"); -if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) - CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); - -}); diff --git a/html/forums/admin/jscripts/codemirror/theme/index.html b/html/forums/admin/jscripts/codemirror/theme/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/codemirror/theme/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/codemirror/theme/mybb.css b/html/forums/admin/jscripts/codemirror/theme/mybb.css deleted file mode 100644 index d3bf390..0000000 --- a/html/forums/admin/jscripts/codemirror/theme/mybb.css +++ /dev/null @@ -1,41 +0,0 @@ -.cm-s-mybb { font:13px/1.4em Trebuchet, Verdana, sans-serif; } /* - customized editor font - */ - -.cm-s-mybb.CodeMirror { background: #fafafa; color: black; height: 500px; width: 100%; max-width: 100%; } -.cm-s-mybb div.CodeMirror-selected { background: #b3c6d3 !important; } -.cm-s-mybb .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } -.cm-s-mybb .CodeMirror-linenumber { color: white; } -.cm-s-mybb .CodeMirror-cursor { border-left: 1px solid black !important; } -.cm-s-mybb .CodeMirror-scroll { overflow-x: auto; } - -.cm-s-mybb .cm-keyword {color: #708;} -.cm-s-mybb .cm-atom {color: #219;} -.cm-s-mybb .cm-number {color: #164;} -.cm-s-mybb .cm-def {color: #00f;} -.cm-s-mybb .cm-variable {color: black;} -.cm-s-mybb .cm-variable-2 {color: #05a;} -.cm-s-mybb .cm-variable-3 {color: #085;} -.cm-s-mybb .cm-property {color: black;} -.cm-s-mybb .cm-operator {color: black;} -.cm-s-mybb .cm-comment {color: #a50;} -.cm-s-mybb .cm-string {color: #a11;} -.cm-s-mybb .cm-string-2 {color: #f50;} -.cm-s-mybb .cm-meta {color: #555;} -.cm-s-mybb .cm-error {color: #f00;} -.cm-s-mybb .cm-qualifier {color: #555;} -.cm-s-mybb .cm-builtin {color: #30a;} -.cm-s-mybb .cm-bracket {color: #997;} -.cm-s-mybb .cm-tag {color: #170;} -.cm-s-mybb .cm-attribute {color: #00c;} -.cm-s-mybb .cm-header {color: blue;} -.cm-s-mybb .cm-quote {color: #090;} -.cm-s-mybb .cm-hr {color: #999;} -.cm-s-mybb .cm-link {color: #00c;} - -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-emstrong {font-style: italic; font-weight: bold;} -.cm-link {text-decoration: underline;} - -.cm-invalidchar {color: #f00;} \ No newline at end of file diff --git a/html/forums/admin/jscripts/index.html b/html/forums/admin/jscripts/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/jscripts/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/images/animated-overlay.gif b/html/forums/admin/jscripts/jqueryui/css/redmond/images/animated-overlay.gif deleted file mode 100644 index d441f75ebfbdf26a265dfccd670120d25c0a341c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1738 zcmZ|OX;ji_6b5ixNYt8>l?gOuO)6lU%W(mxn(`>1S(XO;u`D+P%xqBvMr|w-Vyr1s z7R|Cn0b8|Hu<=Zmv1mFqh9Fj!NuZfKB2MP$e75`XJ@>=!y!Ux9xR3x;EW!q1^V>X| znVFuRUN`NqJ2)ybXh%e__h!!pv(M|S3+?9F%(K}zyE40MGyhWF5-IDgL&=%2-9`Nk z!1@8uk4t%_{(K~>N;sK&dzJbwJ=$kYTlL=$%#0Pfh>U{%i@~wWbvYsD_K-D`&+u1( z#Ma`>%q<^UhzGvi(hyE`zCD{-=2|zL5>wnB=DE!U?(CZG%q4@lDnCq_%&3DCla#(X zmBhDD+RN$aMWWHm?ig*>1Onn6~r?Ma~N2JKAxN>H%UtRyRqS)6Um!-Tz%-r=& zQmTb^JFIe3W^-kAm`}`2P|niMh>RYyd)S^f(dbrx965?rzbhP|XeP}o&&DSZ4|oYQ z)I{f!SfycYw?3=9W;o-B%U5xs(pP267X~9-7L|4WzaYexC0GtG8wWygm63rF{llCEraxzkc=IxvFQ-y37=_;e5 zJLq^gsSO0Ayz?a>E_?{dmUc+t#qv$)XN8$<<}rQ#)lsiw+pmL&J>~+hgpo>i$m+;l zZIa_ZRIfSeT$~v5d`EBV&*k`apPgjv&B|+d`Q!nyu{L4rs%ZfoF0*Kq8I%ByOcFpL zK=>wzofZo<+0GZLCnWM3oQ^pb(gRSf02;~cEn@LJ>~XB9IkEX{$N#Z`m%>S!U{uPx zloI%bLdo$Adxlh(Uv^yX7s5G&C zLwNRG>~T?G{kzupp8EcyLGPoPf)@&9Wqfw_l&uU-6cexk%5;uQg%wb=0k_733{i#& z1a2p)gV3S2+QG1-K9tZ}E~I<(P0r2aFFY-c{o?TUOz3Xjod#TLE2A_c?*T7t z=1>~%YW450{Qqno4t`}gvLnuMrcu8+#xEBoY%2_+Mb#Z6S38+r*M4O`-+!zl(@m`D zQsi|GA2l3gEy}LFe<#Hv8?$_L#u8E|3-bP$*La*E>B{X!Sy4i6?TKam!49aXCAW4S*P_O^H4^*DpiA40o}Uqw~Eo&veh1`|8i zD2$x+>_b^bXE4N;AW=5>iYak2%!JAh0j1*k1{p#iRCjbB7!cSws~U{1IA@acLII$t z$>X#A+^s6iJ5~DFG!xa?>z{=lxtdi1rzbM-(nqAu3D8h-&64xo6|E!p?pK0xT;qoK z`6%+SpBk+~M?nO}>2mTw!A{yZ6O>Z@kwSd4;8aWU5z!P~tQl?u==^+R`{OmOS}oZh zOXQ3{6kuz?Is^n^L7;9ieB9C+8B{>t+pDrlq4xGDDn#T#3T5$l1g`FTQkU;b-981j zNm{zC`$wn7etklM#qHI4=3m5gwa6DNS{?Z!vSObi_od{4eUo=_S2BKNpkSdiqe(k9WtkeM79;2-%CFbb)aB=&H1?i1}uwFzoZQ(38Kn1zBP ORn*B%u*Wk|4g3!*Rv{Mv diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png b/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100644 index a2e6bfc085f51b392569e58b72d454586b900f61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F$P6UUt$JVyq?iMILR?p^S|wQb`zMgg=jq}Y hQo)$KfKh^VF#`ir1OsEt!yO=<44$rjF6*2UngAlC6uAHZ diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png b/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png deleted file mode 100644 index f73255156308a05c3caeae49c8e60525ef34be32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F$P6UUt$JVyq?iMILR^2p>EL%3lLT`4JY5_^ hDj1U&FiNm4W?*27U|@`SxC5kbGx!IU7f$NE(F z;uQ~XZ27ie!~9eG?`*nbsCD-83fG_Cw@&_c&hXX6+wa?+9S{9qA;Q35&o8DEu^}PR z-nuQ%eB)W0zezl?OH__C8YOibPg$yX@RqgBgC(+i*VHpfJ<4u--{beHp!3!9K2gnM razTeAd|i$()O?un6llhe?;lt;m@3O`*>?Fg&_xWMu6{1-oD!M<-4;<0 diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png b/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png deleted file mode 100644 index b7879f56ac07aa583ce14547ea5b5634c7a1f723..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fC;&F`b(o5Vloj~qD7v2Z~V&ufYMO;dDIcCcQuoB5GNm|5Lf^|6o|n^_w}Tg-x5 ihq+G5wkO;nmN0bq$;V5s(bWdJhQZU-&t;ucLK6VKphQ~$ diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png deleted file mode 100644 index 66f0b827d74aad4afd9bcf7509705703d5a6c281..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4709 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 m{l+c1%^b@X`JEaxex}5M z292yKNmml4Bu-%{(3!@;!OAF5Yn-lF$Z+TGT}8#2KKJ&dKl83ldRL+`n_pS#+H}!c z;V&0XajlGl-zYjtxq<=))v=6COVbiB2jV@I)k^r6Yib@HSc z`Q?<})aiwaW6&Y_agCMoB0ImVK62jvhsZ7d;&&0!M7LP#f-iaBgj z4pI0}sD^SrWkO?YzV-QD*Y~gZKCkq1@J|zBe)YOamwzdr_~pb zXQGfgW+;jJ!D*xwMKsHt!_B7_{qmXLNR<*W%`yMIwjlOgd1Z-wF6p9h>oqYuC6p-j zDx+%F+$5SMK~`K;vq5b}KLO`-%4@Mt1bY+&coa-Id=r|EW~L?4_N68RMBmjdLPcN& zxio$sg-MWhd`<4u5UjZYW8i*LQ#Q6K+h1$HGJN>%@E!H9Y3ckr`rmH0cEIQtY}YYco@)+ z%dTNu1LlL&Jnl;#F~w$BzDVLCS69+yMUY0lh(TC}|EEgvy(b~L6B}NglfXG{QSir; zNS?`LS_6^58pI`#j9^%|Qsd0DlCkxYv4AxYjK6GN=voJmsjFH?c+pcUoK`Y=i*Y%v zumGDIT>zB*LkcrWpW`LU`^V=BHng zLeHMZYUX4jjZ?iYs)!n>8<$Pj%!L^u<}3~v7oxGdGikH^o+;;Q;dO|0Ne$zeqZ8_o z*c%cqiHE5RF<Ewmc%u1hqJD_wo5)%{$n zdkP<^R5^BjzPRZ$J=4JeA5><$5)9P;m}dGUo`+ul#U4)Uo@zyqtZvntT!`4d1!1sV zpT;?^b?*s{zn=PDM>3QaR9Zd|EeGIG)pgMZREKA|zHGGwq4+pxU5ukx>}L?R`i6)c zeM+&f^7a14H=lYzrY%o*mg&M&KF0}NRH5g~$ss26&Xs1CTp7z3J=0qGsz0Uwmcg!c z_k}%vkOxM3A;qI{YRzoU&Q2#(i`_qaR9SiCds{%%D`nT^;)glAGny5;hA^nVk^q&( zM)*FPKB|;1C41{j8y7%|xZ!-$`yH|aZ*xwW-9MBx>xKv4>1>plm=}Ldpu7z^bL+x0 zEOpJz%C^&|=TMHeU6oJTC|WZzE^jf)$!WK%#qTj;F}c7qdbsd%?JpvOQA#?OlQPjD zRUyXQ1nD{@tZNh7T7I=13BKgYl@X;TsXArJs7OJ3D_Hhq(0Za1Iu|Jmc*|@ zO2ay%0JScdkOHJfl4)83L4`q#;#iaS>;V{NyS6iu8o^E$Va(%I#ei8pl<-E{Ap|k? zus<5-x!1{lq+z#;^)w#>OQVU^r83G%m8lF{3#VXpV*O@41$e}JNHWcZ;U;|~%KL+j zScv|6gce|IwpKe1%iwRQbY*$P}@g5 zTR?|Z^{T!=^QJfS?OcIn`+=m~k9r=bhCQf$Cn-yS2z5sVU@n zS7r7Uu1=LMqv)RPi|#xB&xb7;Z=eACxJ~lh3$^)z*7;>9K#Q`kKKPgH<&YRo$dVe? zQJIY0NN+=hak**46X%w4=Jy=?{}CyOt1)iglrlY!|Ct!98g}jyJ%& zD%%{tL~(;Ro>pIX(WnUnp002>6IpdwYBNTN$qHqVJJf{tmeckrj6jFOu1k30N$epwypUv>ePtDT=W8T7amXY`2+_AB$ebMw z=|ws?g@OhffW2sM?xi>#!dp!I*7ub*ctX?a0knN={U_ZvCGfO;Y21@_yJdq>8G@pv ziX{@_&Ykm+D6xW&!&CWK`I$#`+~~voR;rybQ+erzo0EG)2m?22gRV^$jzgV{Uo>#I zQG}hb(b2Q2<)p(cyh+30>veB9HJ`m7PZ=Xm-ftw+PU|kp&tBF43)bkPH&Yy z9|!LYa{U6Kda2ju*6r==J5ncP@+PP>fp-MHzcGUL0H0AYb*^b!pQLTj>y^KVyt^gy z{u^D>HM9FyhCP_&3l6S!?JoptKHmPc0gh<-#-coMr?`fG`;gU$wh;I!lbqCSpDC$Q z42rt+O4dfRWgG_r#Ben5D_^ESFl2*M?114;pLcP(NlQA>02q@psg}FzK(qO47qzf= zY!O1^pXQ1piJGSa4gs0o4JT&EWzI!dPdrtDQKevSyRMD8(Qb-OI>MYfK=2nhMsUtJ z1YCqzdfxZcd01l&c7Nua{uC*LJz@6V`_fZyZce0VOljW1c+K)B=x&2CI79BTK+yDe zMWhGcrKX)6H{ZK0v`KIDMl!|ls5j68X@QJ4T;gVBhQ16?i5Nm%N0s)XL6O;;?}}hU zrID*10Ud;?@CX1={v+eLqKi_jsO5t1OCgDS;@0k9E&p2MDHAKeDyXYgW=?=L=+fvg zgc#AIW_C~Is*MbcfA0nN&K+Uod!9L+*VXvgDZ{u_wjLoIVv`RQ zk5yvbshAOb^#lpUN9IPMivO@)EDqXBb&M-V!3as zT1iKEU0rSe!Y)YP-q^)(z|8+*8Ek7!$Xwkn>wZ%XkiOvYfYA6!IfFp!jXl*<)ltYm zpeK6-P{C=lyc8H=3B2DFCzqg~DT^sh1{uXPE{8M>NPPyYPCn)PL+;+_&UoMtx(vNI z2+nUhFDL>23X8 zV^sl2)jiV$5rls6hcsiUi>;f033(89dMC+vyq<^?lK`J?gIxqL8{(Z$8I^E`Cg0Fw`gkhcfpW?-VcO>M?&yg2^s72IEqBL`zl z)iW2Am&rz|ZcjEiE3vjf1_O#)xgL2VR`Jl-?DS#1pm04G-tSj8JkOl;c@U+=*vkT` zuHewFZLdr)=28T^UjDvQsAY`~F+hC;z-fWdly*X?iV&kx!C&*E=8uvkz`0kG{Zn?l ziv(g%dl0mv+dXjg;o{>U-;EtKJ8=pxLQ(YR@yzgabB`6$ zhS#HfiS`XX7G}b3OUY{7Vs6<}_mwvAFr{7QQlGSQPljI$4>z;=``XnAnvWwcu|x96 z(2a<)tFB^N;Huj|rNW7UoIOTCt#UhobqGTS>Cp!);7r{^6O#gbo&WgAFY-pT`TXb$rAF5&))<7#&dg zmBai!dAE5WDA&0IP0eDrVifH%8rC}CQhgDL#U;@d+mQoy@N8H*<8626Py8nI||r(|wT(6{Y4Bc>}jg8r~n)o}XX6IOKm zw>jAp*Rm51EDS|!!T(EZ7$T$iZCM_9sBdh!6&QvC{11q~p@_(6eqi?`6M9|s_Yrwx zoGe84BluQ9(tjmM^TGz}9{=%S2=fo~jb-_cA|uU~d#eoM-8>x~1Vue3*#ff6Sf`<7 zrXE6`$vN4Qc;Z$$aW6&Y_agCMoB0ImVK62jvhsZ7d;&&0!M7LP#f-iaBgj z4pI0}sD^SrWkO?YzV-QD*Y~gZKCkq1@J|zBe)YOamwzdr_~pb zXQGfgW+;jJ!D*xwMKsHt!_B7_{qmXLNR<*W%`yMIwjlOgd1Z-wF6p9h>oqYuC6p-j zDx+%F+$5SMK~`K;vq5b}KLO`-%4@Mt1bY+&coa-Id=r|EW~L?4_N68RMBmjdLPcN& zxio$sg-MWhd`<4u5UjZYW8i*LQ#Q6K+h1$HGJN>%@E!H9Y3ckr`rmH0cEIQtY}YYco@)+ z%dTNu1LlL&Jnl;#F~w$BzDVLCS69+yMUY0lh(TC}|EEgvy(b~L6B}NglfXG{QSir; zNS?`LS_6^58pI`#j9^%|Qsd0DlCkxYv4AxYjK6GN=voJmsjFH?c+pcUoK`Y=i*Y%v zumGDIT>zB*LkcrWpW`LU`^V=BHng zLeHMZYUX4jjZ?iYs)!n>8<$Pj%!L^u<}3~v7oxGdGikH^o+;;Q;dO|0Ne$zeqZ8_o z*c%cqiHE5RF<Ewmc%u1hqJD_wo5)%{$n zdkP<^R5^BjzPRZ$J=4JeA5><$5)9P;m}dGUo`+ul#U4)Uo@zyqtZvntT!`4d1!1sV zpT;?^b?*s{zn=PDM>3QaR9Zd|EeGIG)pgMZREKA|zHGGwq4+pxU5ukx>}L?R`i6)c zeM+&f^7a14H=lYzrY%o*mg&M&KF0}NRH5g~$ss26&Xs1CTp7z3J=0qGsz0Uwmcg!c z_k}%vkOxM3A;qI{YRzoU&Q2#(i`_qaR9SiCds{%%D`nT^;)glAGny5;hA^nVk^q&( zM)*FPKB|;1C41{j8y7%|xZ!-$`yH|aZ*xwW-9MBx>xKv4>1>plm=}Ldpu7z^bL+x0 zEOpJz%C^&|=TMHeU6oJTC|WZzE^jf)$!WK%#qTj;F}c7qdbsd%?JpvOQA#?OlQPjD zRUyXQ1nD{@tZNh7T7I=13BKgYl@X;TsXArJs7OJ3D_Hhq(0Za1Iu|Jmc*|@ zO2ay%0JScdkOHJfl4)83L4`q#;#iaS>;V{NyS6iu8o^E$Va(%I#ei8pl<-E{Ap|k? zus<5-x!1{lq+z#;^)w#>OQVU^r83G%m8lF{3#VXpV*O@41$e}JNHWcZ;U;|~%KL+j zScv|6gce|IwpKe1%iwRQbY*$P}@g5 zTR?|Z^{T!=^QJfS?OcIn`+=m~k9r=bhCQf$Cn-yS2z5sVU@n zS7r7Uu1=LMqv)RPi|#xB&xb7;Z=eACxJ~lh3$^)z*7;>9K#Q`kKKPgH<&YRo$dVe? zQJIY0NN+=hak**46X%w4=Jy=?{}CyOt1)iglrlY!|Ct!98g}jyJ%& zD%%{tL~(;Ro>pIX(WnUnp002>6IpdwYBNTN$qHqVJJf{tmeckrj6jFOu1k30N$epwypUv>ePtDT=W8T7amXY`2+_AB$ebMw z=|ws?g@OhffW2sM?xi>#!dp!I*7ub*ctX?a0knN={U_ZvCGfO;Y21@_yJdq>8G@pv ziX{@_&Ykm+D6xW&!&CWK`I$#`+~~voR;rybQ+erzo0EG)2m?22gRV^$jzgV{Uo>#I zQG}hb(b2Q2<)p(cyh+30>veB9HJ`m7PZ=Xm-ftw+PU|kp&tBF43)bkPH&Yy z9|!LYa{U6Kda2ju*6r==J5ncP@+PP>fp-MHzcGUL0H0AYb*^b!pQLTj>y^KVyt^gy z{u^D>HM9FyhCP_&3l6S!?JoptKHmPc0gh<-#-coMr?`fG`;gU$wh;I!lbqCSpDC$Q z42rt+O4dfRWgG_r#Ben5D_^ESFl2*M?114;pLcP(NlQA>02q@psg}FzK(qO47qzf= zY!O1^pXQ1piJGSa4gs0o4JT&EWzI!dPdrtDQKevSyRMD8(Qb-OI>MYfK=2nhMsUtJ z1YCqzdfxZcd01l&c7Nua{uC*LJz@6V`_fZyZce0VOljW1c+K)B=x&2CI79BTK+yDe zMWhGcrKX)6H{ZK0v`KIDMl!|ls5j68X@QJ4T;gVBhQ16?i5Nm%N0s)XL6O;;?}}hU zrID*10Ud;?@CX1={v+eLqKi_jsO5t1OCgDS;@0k9E&p2MDHAKeDyXYgW=?=L=+fvg zgc#AIW_C~Is*MbcfA0nN&K+Uod!9L+*VXvgDZ{u_wjLoIVv`RQ zk5yvbshAOb^#lpUN9IPMivO@)EDqXBb&M-V!3as zT1iKEU0rSe!Y)YP-q^)(z|8+*8Ek7!$Xwkn>wZ%XkiOvYfYA6!IfFp!jXl*<)ltYm zpeK6-P{C=lyc8H=3B2DFCzqg~DT^sh1{uXPE{8M>NPPyYPCn)PL+;+_&UoMtx(vNI z2+nUhFDL>23X8 zV^sl2)jiV$5rls6hcsiUi>;f033(89dMC+vyq<^?lK`J?gIxqL8{(Z$8I^E`Cg0Fw`gkhcfpW?-VcO>M?&yg2^s72IEqBL`zl z)iW2Am&rz|ZcjEiE3vjf1_O#)xgL2VR`Jl-?DS#1pm04G-tSj8JkOl;c@U+=*vkT` zuHewFZLdr)=28T^UjDvQsAY`~F+hC;z-fWdly*X?iV&kx!C&*E=8uvkz`0kG{Zn?l ziv(g%dl0mv+dXjg;o{>U-;EtKJ8=pxLQ(YR@yzgabB`6$ zhS#HfiS`XX7G}b3OUY{7Vs6<}_mwvAFr{7QQlGSQPljI$4>z;=``XnAnvWwcu|x96 z(2a<)tFB^N;Huj|rNW7UoIOTCt#UhobqGTS>Cp!);7r{^6O#gbo&WgAFY-pT`TXb$rAF5&))<7#&dg zmBai!dAE5WDA&0IP0eDrVifH%8rC}CQhgDL#U;@d+mQoy@N8H*<8626Py8nI||r(|wT(6{Y4Bc>}jg8r~n)o}XX6IOKm zw>jAp*Rm51EDS|!!T(EZ7$T$iZCM_9sBdh!6&QvC{11q~p@_(6eqi?`6M9|s_Yrwx zoGe84BluQ9(tjmM^TGz}9{=%S2=fo~jb-_cA|uU~d#eoM-8>x~1Vue3*#ff6Sf`<7 zrXE6`$vN4Qc;Z$$aW6&Y_agCMoB0ImVK62jvhsZ7d;&&0!M7LP#f-iaBgj z4pI0}sD^SrWkO?YzV-QD*Y~gZKCke3m~^6VZbNoNKd}4yZ6); zY#>g4mwu0!iiz|wOB;l;=f3@VE?Oyusf4!B&faz-3&p1TmiUJ+?`PIjKZZX)zy*~! zsV)l(fFYzZzkF-z(~DzwPM*Vr;d6qY@1tk~fat2#aWmH#(BfBS_^PpB%GsFs9d?sL z8_I0LYE_LnW%@$qt)I~5>#P8emZW@qQ=;!rLVUwpr+j~*0{9}<5!{KCIAwR!)9MSz zGf_w#Gn7RA;55>TBAR8+;pS6|e)-IAq)G{x=9vFpTM&D$ys|_-mvm9M^_rNS5=xYM zl~FZoZW7IsAS*7a*`PL~pMY~Z<+a!+f;|cXJPM{9z6ni7Gt-i2`%;quqVMV!p(3z? zTpGWR!X!vLz9#o_t(gQxxH56OYCW$?5*EG}N)N;+2)?C*QS3)rKQs!BKGxE1s4lrBL@{f1 zWhPcM+{mcC3w!To)YoT3&t#2JS85@i=42MO}x?c(}ghObfk@p12_ z*RBCG`@U%`*SDVyHT$+@p{PJ3pl1l>8a{8`W{B?pj-OMN(`|*pfHG7tR9`_}Wm|`<5UnFsnt1IcUB1ofN#2_rg|5K&--jk5ri4CvLN#Go}DEQ+^ zB+q0rt$|2j4dN0=Mlh^fsc~jn$=G_ySil+x#$Prsbgcu()K#q`yy&SFPAeI`#kibS zSb)uqE&$5@A%z*G&+!`;2BL%?;O`w)Ag8iHAwJ3dJZssZ}i3ID&2 zNw3)d6My!zfdod-uU&$tVKru+y)HBKtweu-9omc&;GQB}h_lwNNz{;bAv|{w^V6?L zp=ZxyHFGkN#;INxRYVQcjmxHM=E4jSa~21T3(?r!nY7t{&y;hu@H)i0q=s?K(Ft`( z>VB@( zJ%x`{svJ8%U)*$>p6OtK4=S@=2?pwaOf!8F&qJ^OVh^WvPqiXQR=4U+E<|kKf-u;w zPvacdy7z>}Ur&9nBN<8yDlH#~mIH98>bhtHs>8EfU$$C;P<$M;F2+$T_A>}ueM3Z! zKBd@K`Feljn@_zU)0U?@%XDEXpW}oss?hW0m9pz{@xz?m8O;h^Lm1RwNr1{? zBYdAtA5}`1lD+k%jSC<}+;G0>{SMiIw>hWG?jK5;b;E=2bT-ON%!|J!P~L`|xpm;`f-am|Wl)JzRLX_7{=CC?%cCNttMn zs*vLaMihY`D0(8f_|2GL3+$G`fgJDLHO0y^E*#qR9t_sq1niALQlD$zf#p09OX61{ zrD2^>fLa$!NCDC#$uup2pu!+VajeOE_5cjCUE3K+jbJB>Fy`^9V!$jPN_Zpf5Q3O` z*dLAa-0NgN(y&{_dYTV`rP0LdQW@o>%2bA}g;TIPv3|3j0zBe9B$?*IaFad~<^93N z@+!o4emQVRp}h^VDgNf9TUE#0zt+DDIx@WsO=-3 zEuh1ydR1SbdD9#EcCNs({XkOgM?H^I!yZ(>lawVugu0^wFqh1<;lQ&-(`Y3I_dSEc zt1|lvSEovsQFPDtMfaWm=fjqaH&B3m+$MSMh1z^U>-;hlphekNAN))9a!3p(WJwL{ zs7%Igr5|645g-KF+8~-cN-np)WtQAsyFB6HXnp29ETZtC&46JDS5K;^o&T~ArR&2- zK6SU@t-(OPTnQztZDD&El; zlgPbd?Mb)x)2Ac6P_bsZ^J*$Y>+1P>+ELx<^oL26T}uc?#k$Z&wu{xS;GQ%f#~a{X zm2Hk+qPW2uPphxHXw-xOPggjciL5#-HJs-rmWX_I; z^dcRcLP3KKz+SXB_fnh=;VmY9>-$O@JfUgz0NOsb{*!K-5_sCaH15f|-Lk=`3_;OS z#S#f|=gxUZlvqK?;i-JA{LG^|ZuH@PE7i`Jsl0T<&B;9?gn=8iLDwb=$DvNfFB&-9 zD8kOz=;&G1a?;@z-lSph^}08ln$O;kr;L#&?>CZZr*#+QXRqr21?zZByIi1Nr?*O< zkArsxxqg9Az0_-S>-Ki`9jOyCc@tEcz&irp-xxuAfX}FyI@h$VPtrE%^~zsF-rbUU z|BbHcn%Vs;!ye4?1qWBV_7{RRA8&u!07tZZV^JQsQ(Qy8eaLD=TL}D=Nlt3E&y-Xt z21Q+ZC2OPEGL8cQVmKQ3l`m5u7_z}BcEE6_&$~F?q$Qnb0E|hQRLk9UpxOMji(1$_ zwg{o|Pjf|)M9tFyhk#7)h7&X7GUpyFYVIe~OgBo-ljwed(z;Hz!gwrZn$hyk_|mbhp76oFR8vAZYr# zBGQBJQqxY3oA2Eg+N3vnBbj1&)Ej7lv_QriE^)ImLth4{L=2&>qe^?xpvdgacSW$F z(#TbhfDXb`cm#kb|B>-r(M2g%)N;Z1rI5ruacg(5mVd4Bl!+B!71UKLGbg|rbZK-L zLX7B9GrOm9)kX%!zxRTB=Z-M)JuP-Llwn*a)VFz-UXrFzD&Qe|TaOS9vB`&u z$11VzRLlszdV+*vrJ(VWyT@IMIo$4j{X*mZSI-L_F& z(33p^sNl3&UJ8t`1m16olS|Ogl*N=LgN$MtmqQu`q&|aHC!g~DA$Ms52`T>G`Lv33UbFQu>345J-8#l zv8n*1>YizW2tvR3Lz=PF#nw&0gggj4y^~}-UQfh{Nq|qc!7c)r4e`#Wj7qq_D9Thk zu`iCF==PjQeW0)-9wklg>o0uPR`e4#fXRnL$lHT)GcZx!rZ(d>UL1e+3huAQk%KX& z>X{45%VZ-}w}7#e zS8!<8wpS(?b18ydFMr=D)Urm07@$4^;Iu$!N;{!cMTk+U;IH{n^GC@N;M}Xp{wX`& zMFO#>JqX&-?H;&#aoK-G?N?LZR^#zdmI9ZRb)2}F@5Tn>TAoqS`NT{u}vX# z1GxdqP}y#PqGc_^FhvWVX8qXAaJ&ynqg8qxrMW#w6i9p$DJS=L@me-?Eow*N6rR0+ z&YoFWhRx3K^k}@FL(zQ8tt8p);Wj2Q|L{y=LI;bx!G;!^&*KHxIzHk72>??_j1H*$ z%3=PVyxTkwl4Qm~6slJHB;*#i!?Z|;au0zG(4wpSP2nrEOfYkbS z8sRPR^-9v4n>o5j13HYl%o7}*>AuK?ic)imyn)-L4auBFST!E173G9UMe`M@zc4pd zx-$d0Q1x?}+|=f56Dxot7X2a?i6txaiaE!)1;z%F^P_(aeE219v#PAPYB>Gx2`f7O z+nnr)YuO107KWm=;QysH43Sa%wk(f4)Hk-=3Jk*m{s+Y0P()-jKd^g}3B9iR`-r?T zP8K5j5qzs4>A#Ysd0~TfkN@~Eg!za0#aW6&Y_agCMoB0ImVK62jvhsZ7d;&&0!M7LP#f-iaBgj z4pI0}sD^SrWkO?YzV-QD*Y~gZKCk=c1Kjm`Z31?d)wgvQTWQZ;5~S@_uGb^<((+16)vv zlj^dt02o3l^UJrUKD{`0=j1s|7(OTX`96v^0En(y9XE500WE%IhOZh6rkst5-(fd7 zw4uxSQ>HIu-uek`zRn8pXi3V)HzoT1B*Ztob;|b_Du6Fy9l@PQiBonrJ*~cg zJQIb~F+)kz4^AVkD56>B9Bw|f=$Fs@Myiy6X^#2twFR-~$}3Ccb4eG4Td#@PDWOEE zR~c2a<|ffB39{m%nhk0*`UyCvQ(lXGBG{uKz@uQw;hWHOG&3!Uwl6gqAo{Lu5h?;J z$ffc7C`^L1<7;v+*P2OCgew!btJd?XBw^uuq4YqEg5X;^7{z|1^mfm9BfdNKKy?>2YB%Ke(Yh`(3fBE^Gz!SU1@KgXk$U9A$JU@?_(|PhU$`ALKL%B zS7u^G!;OsEyRi3eMtyxo^i0+mH9p$6{`?#{sUbOnBT;q%a*!Y|-Y%~1W%wGkA0PK_ zdhHr8v+tY6a((;RP_u7a7K#cq0(yo}uHp06ZHDOn@Ax@YIo(zm3@AedV?}#H!^41n zTy_oP8ZaNE=5b&0h$%M1@!00o!Ic|oCMBsi-JF% zMDk1~(;A2b)*vo{WCX*yl^SQJm5i;Ij0LQLVEkqCLf1NgOkLGF!i%0-;k1&`Ta3$T zg$3B$=mMbZA5xf6`W(MuVIWHQ0sh`$1#&7I6ylTIPhM605FVL%-blPqtQw%No$&wb znDmPMKk;Wj8%SUT{n{mX8dhWG+3PYx-%9ic*rClh0q!Zng*a>NnnVq07s7J~F+cr^ z6ngeNRx>9PX`JeHQAN~1-MDPJW-iPSF=uhWxDbuqok^SR_e?og3$H`0OKKR$9Gy^y z#NLo_Njywli1~USD6s1&_@FY|m0+O$$28L?@jUeUFZOU+_f#u_WOb|FtYU_=r4fubjpi{Fe1w!m%~9LVv`T~n+)l1$SQ2r3L>6vvvpXAi(I+qIpM)ChL62xA_vDhAB*p@cWm4k3uC zhyBqw&%I9eBMrM%tf%=9SQ<^NE|pPEs!V0rS~vx(6YDqYDZnG%Ly~DO3^(Z`QQjYH zEU!X*=a&PA6x!P$t3m*0c`Tow6yqS_{Lo^`iwrYX4+XLbkYQLILdPeKylD-`88Ay> zGF`iKoU^{*=#NI&cZbV=1$0c{jCGN|0;hMxQ!gvzqrhp$&@tg#DiCBmkRn2`huS{k z*#bJOs#o;|nm4_nZ|4du+Ycn=e$?|gHS9t4J4smrM5sF|0CUMq8xA~cG>ukbaNjd1 zyehM=aCNG58AbPOUv%I3e?Dx0a}!O^})YnFNef%LYCC9 zj>=^0R{HU!7y&|%tqr2NqvUeyTV~1KwaXJ8j@D<+!y*bF+6)+maP_2m+W9a0P`W;R zsq`)>Kk4@+HYYOb=&yMpTpG2c}; zW$ka%lq-S-AGl(FEw9RIVSi0D5Ni{*aQBV(P@Xu-ZT<;F-gt;}5CK}xdd=4H8l^mQ zuaASKNmeL>+@U7Cx16?5VFWrHc3r{~Pht?^C#J6|Kwi9;qiLWsU4LFVje zNH5aCDHJr=0PID3b1%i|5Z+?qx4y5m!4sNR51{R1>p$tXDS@Z$OXHrb+btW6$`BMS zRVYkwhF^YQkl4RA!uHx}iAJH<8h+lQ=1w1vP=ndGEq`%Fod zVo=njSF$#mE#o*4AcmuXU->cxf*~86Vh0R&`n-$NObm!((}Hj&chmOu=_LT^ruJ}>8L3bOB!5MOw1%jr( zD*{Lz7j{AV_Qo!T17`jg%V1k;LgwmrS@)ZAfb<2A2ZY8?${7S&Z|td_s*XYi z0zKIyfC^5V<)y#~OW^&cIJpGVaXF-6K5PtCj|_i##btu?UETfKcpE;U2NS1Ovr<<(>qDVOm@P5C#;d$ny&x0r}#$Fak zbp?lZZF^;cF_$9P_44}_hym&&08R^prnD1ERfHIo3jUfOHGh;W0nWXe?4PpZ zT_g~D+Jm4S-R^;_7nl84)P6PfZ8aVbWhro3S;vW+`EKl>*@;tl5sIQek7tIbn|rK~ zHoP9?OSEtBu`m;MTS`{r7IVvhbiqcm-?igdoui5c(|F>-`B22(0m+mi5-$h zhHgZZU3C@H0$1GzDiux)GyKv-unT(sWnj+s*<5rW)bcZEslK+%tK|UP7uys< zH;@~!43+H$C|cGs3{$k=Y1WU;49EMRG+L$CQJUL>M1jO7k#cf>7q4YQ*P?bLPT|=L z=YsekN_}+#OQ#^ zuN>y@$-B)1LAlNyXlfR_6{BdE(XiG5m+Fg1EG~(z*p3_+z=vPrHmk~ttA^A6p0J|h zzs<>>xR#x8U|}d)3;thP!w?z8Z_Dz?Lw#e*t-vrG;D12;4Mjvo^8>plnb7O1zmLcp z<76SSAHlZ@lKv}6nin=$_xO(wLzsV~ASmiN$rg}h#ySlx zGxZSiOwP%c#1ps5A&(OE*L{=4J3r$+K7wy^biYRtKH+6ZASl6U>mcfK>MCYOiko-8 T$?fOg�A!{qZNqaLNAx?35Vi diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_cd0a0a_256x240.png b/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index ee9dfec99c8b2e0983a2c67ca6323f5906348bc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3756 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 Ta{KxBGiqgFfBeZYT=IVaf3#on diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_f9bd01_256x240.png b/html/forums/admin/jscripts/jqueryui/css/redmond/images/ui-icons_f9bd01_256x240.png deleted file mode 100644 index a71ec491367e688454aaf6df435750c41274d816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3756 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 S+t0tBQ7a4k<4=#_lK%tR^9d6G diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.min.css b/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.min.css deleted file mode 100644 index 77d558c..0000000 --- a/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! jQuery UI - v1.11.2 - 2015-01-29 -* http://jqueryui.com -* Includes: core.css, draggable.css, sortable.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=gloss_wave&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=inset_hard&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=glass&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=inset_hard&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #a6c9e2;background:#fcfdfd url("images/ui-bg_inset-hard_100_fcfdfd_1x100.png") 50% bottom repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #4297d7;background:#5c9ccc url("images/ui-bg_gloss-wave_55_5c9ccc_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #c5dbec;background:#dfeffc url("images/ui-bg_glass_85_dfeffc_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#2e6e9e}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2e6e9e;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #79b7e7;background:#d0e5f5 url("images/ui-bg_glass_75_d0e5f5_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1d5987}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#1d5987;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #79b7e7;background:#f5f8f9 url("images/ui-bg_inset-hard_100_f5f8f9_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#e17009}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#e17009;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fad42e;background:#fbec88 url("images/ui-bg_flat_55_fbec88_40x100.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_469bdd_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_d8e7f3_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_6da8d5_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_217bc0_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_f9bd01_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:5px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:5px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:5px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:5px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.structure.min.css b/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.structure.min.css deleted file mode 100644 index 3916325..0000000 --- a/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.structure.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery UI - v1.11.2 - 2015-01-29 -* http://jqueryui.com -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-sortable-handle{-ms-touch-action:none;touch-action:none} \ No newline at end of file diff --git a/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.theme.min.css b/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.theme.min.css deleted file mode 100644 index 22d3906..0000000 --- a/html/forums/admin/jscripts/jqueryui/css/redmond/jquery-ui.theme.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery UI - v1.11.2 - 2015-01-29 -* http://jqueryui.com -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #a6c9e2;background:#fcfdfd url("images/ui-bg_inset-hard_100_fcfdfd_1x100.png") 50% bottom repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #4297d7;background:#5c9ccc url("images/ui-bg_gloss-wave_55_5c9ccc_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #c5dbec;background:#dfeffc url("images/ui-bg_glass_85_dfeffc_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#2e6e9e}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2e6e9e;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #79b7e7;background:#d0e5f5 url("images/ui-bg_glass_75_d0e5f5_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1d5987}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#1d5987;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #79b7e7;background:#f5f8f9 url("images/ui-bg_inset-hard_100_f5f8f9_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#e17009}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#e17009;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fad42e;background:#fbec88 url("images/ui-bg_flat_55_fbec88_40x100.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_469bdd_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_d8e7f3_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_6da8d5_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_217bc0_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_f9bd01_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:5px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:5px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:5px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:5px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/html/forums/admin/jscripts/jqueryui/js/jquery-ui.min.js b/html/forums/admin/jscripts/jqueryui/js/jquery-ui.min.js deleted file mode 100644 index 3b86294..0000000 --- a/html/forums/admin/jscripts/jqueryui/js/jquery-ui.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! jQuery UI - v1.11.2 - 2015-01-29 -* http://jqueryui.com -* Includes: core.js, widget.js, mouse.js, draggable.js, droppable.js, sortable.js -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var a,n,o,r=t.nodeName.toLowerCase();return"area"===r?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(o=e("img[usemap='#"+n+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,a=t?/(auto|scroll|hidden)/:/(auto|scroll)/,n=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:a.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&n.length?n:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),a=isNaN(s);return(a||s>=0)&&t(i,!a)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,n){return e.each(a,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),n&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var a="Width"===i?["Left","Right"]:["Top","Bottom"],n=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(n,s(this,t)+"px")})},e.fn["outer"+i]=function(t,a){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(n,s(this,t,!0,a)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,a=e(this[0]);a.length&&a[0]!==document;){if(i=a.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(a.css("zIndex"),10),!isNaN(s)&&0!==s))return s;a=a.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i,s){var a,n=e.plugins[t];if(n&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(a=0;n.length>a;a++)e.options[n[a][0]]&&n[a][1].apply(e.element,i)}};var s=0,a=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,a,n;for(n=0;null!=(a=i[n]);n++)try{s=e._data(a,"events"),s&&s.remove&&e(a).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var a,n,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],a=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[l]=e[l]||{},n=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,n,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},a=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,n=this._superApply;return this._super=e,this._superApply=a,t=s.apply(this,arguments),this._super=i,this._superApply=n,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:n?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:a}),n?(e.each(n._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=a.call(arguments,1),o=0,r=n.length;r>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var o="string"==typeof n,r=a.call(arguments,1),h=this;return n=!o&&r.length?e.widget.extend.apply(null,[n].concat(r)):n,o?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(h=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,r),i!==a&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),h}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=s++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,a,n,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(a=o[t]=e.widget.extend({},this.options[t]),n=0;s.length-1>n;n++)a[s[n]]=a[s[n]]||{},a=a[s[n]];if(t=s.pop(),1===arguments.length)return void 0===a[t]?null:a[t];a[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var a,n=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=a=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,a=this.widget()),e.each(s,function(s,o){function r(){return t||n.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?n[o]:o).apply(n,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+n.eventNamespace,u=h[2];u?a.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var a,n,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],n=i.originalEvent)for(a in n)a in i||(i[a]=n[a]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,a,n){"string"==typeof a&&(a={effect:a});var o,r=a?a===!0||"number"==typeof a?i:a.effect||i:t;a=a||{},"number"==typeof a&&(a={duration:a}),o=!e.isEmptyObject(a),a.complete=n,a.delay&&s.delay(a.delay),o&&e.effects&&e.effects.effect[r]?s[t](a):r!==t&&s[r]?s[r](a.duration,a.easing,n):s.queue(function(i){e(this)[t](),n&&n.call(s[0]),i()})}}),e.widget;var n=!1;e(document).mouseup(function(){n=!1}),e.widget("ui.mouse",{version:"1.11.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,a="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!a&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),n=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),e.widget("ui.draggable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("
").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),a=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return a.parents("body").length||a.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&a[0]===this.element[0]&&this._setPositionRelative(),a[0]===this.element[0]||/(fixed|absolute)/.test(a.css("position"))||a.css("position","absolute"),a},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,a=this.options,n=this.document[0];return this.relativeContainer=null,a.containment?"window"===a.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===a.containment?(this.containment=[0,0,e(n).width()-this.helperProportions.width-this.margins.left,(e(n).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):a.containment.constructor===Array?(this.containment=a.containment,void 0):("parent"===a.containment&&(a.containment=this.helper[0].parentNode),i=e(a.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,a,n,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(a=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?a-this.offset.click.top>=i[1]||a-this.offset.click.top>i[3]?a:a-this.offset.click.top>=i[1]?a-o.grid[1]:a+o.grid[1]:a,n=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?n-this.offset.click.left>=i[0]||n-this.offset.click.left>i[2]?n:n-this.offset.click.left>=i[0]?n-o.grid[0]:n+o.grid[0]:n),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var a=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i,s){var a=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,a))})},drag:function(t,i,s){e.each(s.sortables,function(){var a=!1,n=this;n.positionAbs=s.positionAbs,n.helperProportions=s.helperProportions,n.offset.click=s.offset.click,n._intersectsWith(n.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==n&&this._intersectsWith(this.containerCache)&&e.contains(n.element[0],this.element[0])&&(a=!1),a})),a?(n.isOver||(n.isOver=1,n.currentItem=i.helper.appendTo(n.element).data("ui-sortable-item",!0),n.options._helper=n.options.helper,n.options.helper=function(){return i.helper[0]},t.target=n.currentItem[0],n._mouseCapture(t,!0),n._mouseStart(t,!0,!0),n.offset.click.top=s.offset.click.top,n.offset.click.left=s.offset.click.left,n.offset.parent.left-=s.offset.parent.left-n.offset.parent.left,n.offset.parent.top-=s.offset.parent.top-n.offset.parent.top,s._trigger("toSortable",t),s.dropped=n.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,n.fromOutside=s),n.currentItem&&(n._mouseDrag(t),i.position=n.position)):n.isOver&&(n.isOver=0,n.cancelHelperRemoval=!0,n.options._revert=n.options.revert,n.options.revert=!1,n._trigger("out",t,n._uiHash(n)),n._mouseStop(t,!0),n.options.revert=n.options._revert,n.options.helper=n.options._helper,n.placeholder&&n.placeholder.remove(),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var a=e("body"),n=s.options;a.css("cursor")&&(n._cursor=a.css("cursor")),a.css("cursor",n.cursor)},stop:function(t,i,s){var a=s.options;a._cursor&&e("body").css("cursor",a._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var a=e(i.helper),n=s.options;a.css("opacity")&&(n._opacity=a.css("opacity")),a.css("opacity",n.opacity)},stop:function(t,i,s){var a=s.options;a._opacity&&e(i.helper).css("opacity",a._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var a=s.options,n=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(a.axis&&"x"===a.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(a=m>=Math.abs(u-b),n=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),a&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),n&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=a||n||o||r,"outer"!==f.snapMode&&(a=m>=Math.abs(u-y),n=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),a&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),n&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(a||n||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=a||n||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var a,n=s.options,o=e.makeArray(e(n.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(a=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",a+t)}),this.css("zIndex",a+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var a=e(i.helper),n=s.options;a.css("zIndex")&&(n._zIndex=a.css("zIndex")),a.css("zIndex",n.zIndex)},stop:function(t,i,s){var a=s.options;a._zIndex&&e(i.helper).css("zIndex",a._zIndex)}}),e.ui.draggable,e.widget("ui.droppable",{version:"1.11.2",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s) -},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,a=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(a=!0,!1):void 0}),a?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,a){if(!i.offset)return!1;var n=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=n+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return n>=l&&d>=r&&o>=u&&c>=h;case"intersect":return n+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(a.pageY,u,i.proportions().height)&&e(a.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(n>=l&&d>=n||r>=l&&d>=r||l>n&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,a,n=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;n.length>s;s++)if(!(n[s].options.disabled||t&&!n[s].accept.call(n[s].element[0],t.currentItem||t.element))){for(a=0;r.length>a;a++)if(r[a]===n[s].element[0]){n[s].proportions().height=0;continue e}n[s].visible="none"!==n[s].element.css("display"),n[s].visible&&("mousedown"===o&&n[s]._activate.call(n[s],i),n[s].offset=n[s].element.offset(),n[s].proportions({width:n[s].element[0].offsetWidth,height:n[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,a,n,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(a=this.options.scope,n=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===a}),n.length&&(s=e(n[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable,e.widget("ui.sortable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,a=!1,n=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,n.widgetName+"-item")===n?(s=e(this),!1):void 0}),e.data(t.target,n.widgetName+"-item")===n&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(a=!0)}),a)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var a,n,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),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},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(n=this.document.find("body"),this.storedCursor=n.css("cursor"),n.css("cursor",o.cursor),this.storedStylesheet=e("").appendTo(n)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(a=this.containers.length-1;a>=0;a--)this.containers[a]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,a,n,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY=0;i--)if(s=this.items[i],a=s.item[0],n=this._intersectsWithPointer(s),n&&s.instance===this.currentContainer&&a!==this.currentItem[0]&&this.placeholder[1===n?"next":"prev"]()[0]!==a&&!e.contains(this.placeholder[0],a)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],a):!0)){if(this.direction=1===n?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,a=this.placeholder.offset(),n=this.options.axis,o={};n&&"x"!==n||(o.left=a.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),n&&"y"!==n||(o.top=a.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,a=s+this.helperProportions.height,n=e.left,o=n+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>n&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>n&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>a-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,a=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return s?this.floating?n&&"right"===n||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&i||"left"===a&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,a,n,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(n=e(l[s]),a=n.length-1;a>=0;a--)o=e.data(n[a],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,a,n,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(a=e(c[i]),s=a.length-1;s>=0;s--)n=e.data(a[s],this.widgetFullName),n&&n!==this&&!n.options.disabled&&(d.push([e.isFunction(n.options.items)?n.options.items.call(n.element[0],t,{item:this.currentItem}):e(n.options.items,n.element),n]),this.containers.push(n));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,a,n;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(a=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=a.outerWidth(),s.height=a.outerHeight()),n=a.offset(),s.left=n.left,s.top=n.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)n=this.containers[i].element.offset(),this.containers[i].containerCache.left=n.left,this.containers[i].containerCache.top=n.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),a=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e(" ",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(a)}):"img"===s&&a.attr("src",t.currentItem.attr("src")),i||a.css("visibility","hidden"),a},update:function(e,a){(!i||s.forcePlaceholderSize)&&(a.height()||a.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),a.width()||a.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,a,n,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(a=1e4,n=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),a>Math.abs(t[d]-h)&&(a=Math.abs(t[d]-h),n=this.items[s],this.direction=l?"up":"down"));if(!n&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;n?this._rearrange(t,n,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,a=this.options;"parent"===a.containment&&(a.containment=this.helper[0].parentNode),("document"===a.containment||"window"===a.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===a.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===a.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(a.containment)||(t=e(a.containment)[0],i=e(a.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,a="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,n=/(html|body)/i.test(a[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():n?0:a.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():n?0:a.scrollLeft())*s}},_generatePosition:function(t){var i,s,a=this.options,n=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.leftthis.containment[2]&&(n=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),a.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/a.grid[1])*a.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-a.grid[1]:i+a.grid[1]:i,s=this.originalPageX+Math.round((n-this.originalPageX)/a.grid[0])*a.grid[0],n=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-a.grid[0]:s+a.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:n-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var a=this.counter;this._delay(function(){a===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,a=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&a.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||a.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(a.push(function(e){this._trigger("remove",e,this._uiHash())}),a.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),a.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||a.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(a.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;a.length>s;s++)a[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}})}); \ No newline at end of file diff --git a/html/forums/admin/jscripts/mycode_sandbox.js b/html/forums/admin/jscripts/mycode_sandbox.js deleted file mode 100644 index 775a949..0000000 --- a/html/forums/admin/jscripts/mycode_sandbox.js +++ /dev/null @@ -1,57 +0,0 @@ -function MyCodeSandbox(url, button, regex_textbox, replacement_textbox, test_textbox, html_textbox, actual_div) -{ - if(button && regex_textbox && replacement_textbox && test_textbox && html_textbox && actual_div) - { - this.url = url; - this.button = button; - this.regex_textbox = regex_textbox; - this.replacement_textbox = replacement_textbox; - this.test_textbox = test_textbox; - this.html_textbox = html_textbox; - this.actual_div = actual_div; - - $(button).on('click', function(e) { - e.preventDefault(); - this.update(); - }.bind(this)); - } -} - -MyCodeSandbox.prototype.update = function(e) -{ - postData = "regex="+encodeURIComponent($(this.regex_textbox).val())+"&replacement="+encodeURIComponent($(this.replacement_textbox).val())+"&test_value="+encodeURIComponent($(this.test_textbox).val())+"&my_post_key="+encodeURIComponent(my_post_key); - - $.ajax( - { - url: this.url, - async: true, - method: 'post', - data: postData, - complete: function (request) - { - this.onComplete(request); - }.bind(this) - }); -}; - -MyCodeSandbox.prototype.onComplete = function(request) -{ - if(request.responseText.match(/(.*)<\/error>/)) - { - message = request.responseText.match(/(.*)<\/error>/); - - if(!message[1]) - { - message[1] = lang.unknown_error; - } - - alert(lang.mycode_sandbox_test_error + '\n\n' + message[1]); - } - else if(request.responseText) - { - $(this.actual_div).html(request.responseText); - $(this.html_textbox).val(request.responseText); - } - - return true; -}; \ No newline at end of file diff --git a/html/forums/admin/jscripts/peeker.js b/html/forums/admin/jscripts/peeker.js deleted file mode 100644 index 6992d77..0000000 --- a/html/forums/admin/jscripts/peeker.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Peeker controls the visibility of an element based on the value of an input - * - * Examples: - * new Peeker($('#myController'), $('#myDomain'), 1, false); - * new Peeker($('.myControllerNode'), $('#myDomain, #myDomain2'), 1, true); - * new Peeker($('#myController'), $('#nestedPeeker'), /works/, false); - * new Peeker($('#nestedPeeker'), $('#nestedPeekerChild'), /\d+/, false); - */ - -var Peeker = (function() { - /** - * Constructor - * - * @param string ID of the controlling select menu - * @param string ID of the thing to show/hide - * @param regexp If this regexp matches value of the select menu, then the 'thing' will be shown - * @param boolean Should be set to true for radio/checkboxes - */ - function Peeker(controller, domain, match, isNodelist) { - var fn; - - // verify input - if (!controller || - (isNodelist && controller.length <= 0) || - !domain) { - return; - } - this.controller = controller; - this.domain = domain; - this.match = match; - this.isNodelist = isNodelist; - - // create a context-bound copy of the function - fn = $.proxy(this.check, this); - - if (isNodelist) { - // attach event handlers to the inputs in the node list - this.controller.each(function(i, el) { - el = $(el); - el.on('change', fn); - el.click(fn); - }); - } else { - this.controller.on('change', fn); - } - this.check(); - } - - /** - * Checks the controller and shows/hide - * - * @return void - */ - function check() { - var type = '', show = false, regex = this.match; - - if (this.isNodelist) { - this.controller.each(function(i, el) { - if ($(el).is(':visible') && el.checked && - el.value.match(regex)) { - show = true; - return false; - } - }); - this.domain[show ? 'show' : 'hide'](); - } else { - type = this.controller.val() || ''; - this.domain[(type.match(regex) && this.controller.is(':visible')) ? 'show' : 'hide'](); - } - - $(this.domain).each(function() { - $(this).find('input, textarea, select').each(function() { - $(this).trigger('change'); - }); - }); - } - - Peeker.prototype = { - controller: null, - domain: null, - match: null, - isNodelist: null, - check: check, - }; - - return Peeker; -})(); - -/** - * Add a "required" asterisk to a FormContainer row - * @param string ID of the row - */ -function add_star(id) { - if (!$('#' + id).length) { - return; - } - - cell = $('#' + id).children('td')[0]; - label = $(cell).children('label')[0]; - star = $(document.createElement('em')); - starText = $(document.createTextNode(' *')); - star.append(starText); - $(label).append(star); -} \ No newline at end of file diff --git a/html/forums/admin/jscripts/quick_perm_editor.js b/html/forums/admin/jscripts/quick_perm_editor.js deleted file mode 100644 index 8a700e3..0000000 --- a/html/forums/admin/jscripts/quick_perm_editor.js +++ /dev/null @@ -1,63 +0,0 @@ -var QuickPermEditor = { - - init: function(id) - { - if(!$('#fields_enabled_'+id) || !$('#fields_disabled_'+id)) - { - return; - } - if(!$('#fields_'+id)) - { - return; - } - - $("#fields_enabled_"+id).sortable({ - connectWith: "#fields_disabled_"+id, - dropOnEmpty: true, - update: function(event, ui) { - QuickPermEditor.buildFieldsList(id); - } - }).disableSelection(); - - $("#fields_disabled_"+id).sortable({ - connectWith: "#fields_enabled_"+id, - dropOnEmpty: true, - update: function(event, ui) { - QuickPermEditor.buildFieldsList(id); - } - }).disableSelection(); - }, - - buildFieldsList: function(id) - { - new_input = ''; - - $('#fields_enabled_'+id).children().each(function() { - var textid = $(this).attr('id').split("-"); - - if(textid[1]) - { - if(new_input) - { - new_input += ","; - } - new_input += textid[1]; - } - }); - - if($('#fields_'+id).val() != new_input) - { - if($('#default_permissions_'+id)) - { - $('#default_permissions_'+id).attr('checked', false); - } - } - - $('#fields_'+id).val(new_input); - - if($('#fields_inherit_'+id)) - { - $('#fields_inherit_'+id).val(0); - } - }, -}; \ No newline at end of file diff --git a/html/forums/admin/jscripts/search.js b/html/forums/admin/jscripts/search.js deleted file mode 100644 index 16298c0..0000000 --- a/html/forums/admin/jscripts/search.js +++ /dev/null @@ -1,74 +0,0 @@ -var SettingSearch = { - - error_unknown : "", - - init: function(settings_search, error_unknown) - { - this.error_unknown = error_unknown; - - $('#settings_search').bind("submit", this.onSubmit); - $('#search_results').css('display', 'none'); - - $('#search').focusin(function() { - if($('#search').val() == settings_search) - { - $('#search').removeClass('search_default'); - $('#search').val(''); - } - }); - - $('#search').focusout(function() { - if($('#search').val() == "") - { - $('#search').addClass('search_default'); - $('#search').val(settings_search); - $("#search_results").css('display', "none"); - $("#group_list").css('display', ""); - } - }); - }, - - onSubmit: function(e) - { - e.preventDefault(); - if($('#search').val() != "") - { - $.jGrowl(lang.searching, {theme:'jgrowl_process'}); - pars = "module=config-settings&action=change&ajax_search=1&search="+encodeURIComponent($('#search').val()); - $.ajax({ - type: 'get', - url: "index.php", - data: pars, - complete: function (request, status) - { - try - { - var json = $.parseJSON(request.responseText); - if(typeof json == 'object') - { - if(json.hasOwnProperty("errors")) - { - $("div.jGrowl").jGrowl("close"); - - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.search_error + ' ' + message, {theme:'jgrowl_error'}); - }); - return false; - } - } - } - catch(error) - { - $('#search_results').css('display', ''); - $('#group_list').css('display', 'none'); - $('#search_results').html(request.responseText); - loadPeekers(); - $.jGrowl(lang.search_done, {theme:'jgrowl_success'}); - return false; - } - } - }); - } - }, -}; \ No newline at end of file diff --git a/html/forums/admin/jscripts/tabs.js b/html/forums/admin/jscripts/tabs.js deleted file mode 100644 index af4562d..0000000 --- a/html/forums/admin/jscripts/tabs.js +++ /dev/null @@ -1,43 +0,0 @@ -$(function() -{ - $('ul.tabs').each(function() - { - if($(this).data('rendered')) - { - return; - } - - $(this).data('rendered', 'yes'); - - var activeTab, activeContent, links = $(this).find('a'); - - activeTab = $(links.filter('[href="'+location.hash+'"]')[0] || links[0]); - activeTab.addClass('active'); - activeContent = $(activeTab.attr('href')); - - // Hide the remaining content - links.not(activeTab).each(function() - { - $($(this).attr('href')).hide(); - }); - - // Tab functionality - $(this).on('click', 'a', function(e) - { - activeTab.removeClass('active'); - activeContent.hide(); - - activeTab = $(this); - activeContent = $($(this).attr('href')); - - // update address bar - window.location.hash = $(this).attr('href'); - - activeTab.addClass('active'); - activeContent.show(); - - e.preventDefault(); - }); - }); - -}); \ No newline at end of file diff --git a/html/forums/admin/jscripts/theme_properties.js b/html/forums/admin/jscripts/theme_properties.js deleted file mode 100644 index ffc486d..0000000 --- a/html/forums/admin/jscripts/theme_properties.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * functions for stylesheet file/color attachments - */ - -var themeProperties = (function() { - /** - * @var number the total attached files for this stylesheet - */ - var attachedCount = 0; - - /** - * attach event handlers - * - * @return void - */ - function init() { - for (var i = 0; i < attachedCount; ++i) { - $("#delete_img_" + i).click(removeAttachmentBox); - } - $("#new_specific_file").click(addAttachmentBox); - } - - /** - * allow external setup - * - * @param string the count at load time - * @return void - */ - function setup(count) { - attachedCount = count || 0; - } - - /** - * create a new blank attachment box - * - * @param object the event - * @return void - */ - function addAttachmentBox(e) { - e.preventDefault(); - - var next_count = Number(attachedCount) + 1, - contents = "
\n\n\n\n\n\n\n\n\n\n
\""" + file_lang_string + "  
\n
\n
\n
\n
\n" + specific_actions_desc_lang_string + "\n\n\n\n\n
\n
\n
\n
\n
\n"; - - // if this is the first attachment, create the first - if (!$("#attach_box_" + attachedCount).attr('id')) { - $("#attach_1").html(contents).show(); - } else { - $("#attach_box_" + attachedCount).html(contents).show(); - } - - checkAction('action_' + attachedCount); - - if ($("#attached_form_" + attachedCount)) { - $("#delete_img_" + attachedCount).click(removeAttachmentBox); - } - ++attachedCount; - } - - /** - * remove an entire attachment box - * - * @param object the event - * @return void - */ - function removeAttachmentBox(e) { - var idArray, id; - - idArray = e.currentTarget.id.split('_'); - if (!idArray.length) { - return; - } - id = idArray[idArray.length - 1]; - e.preventDefault(); - - if (confirm(delete_confirm_lang_string) == true) { - $("#attached_form_" + id).remove(); - } - } - - $(document).ready(init); - - // the only public method - return { - setup: setup, - }; -})(); diff --git a/html/forums/admin/jscripts/themes.js b/html/forums/admin/jscripts/themes.js deleted file mode 100644 index d2976cd..0000000 --- a/html/forums/admin/jscripts/themes.js +++ /dev/null @@ -1,345 +0,0 @@ -/** - * ThemeSelector loads various selectors' properties when they are select from - * a list - */ - -var ThemeSelector = { - - /** - * Constructor - * - * @param string the address to the load script - * @param string the address to the save script - * @param object the select element - * @param object the stylesheet info div - * @param string the stylesheet file name - * @param object the form element - * @param number the theme id - * @return void - */ - init: function(url, saveUrl, selector, styleSheet, file, selectorForm, tid) { - // verify input - if (!url || !saveUrl || !selector || !styleSheet || !file || !selectorForm || !tid) { - return; - } - - ThemeSelector.url = url; - ThemeSelector.saveUrl = saveUrl; - ThemeSelector.selector = selector; - ThemeSelector.selectorPrevOpt = ThemeSelector.selector.val(); - ThemeSelector.styleSheet = styleSheet; - ThemeSelector.file = file; - ThemeSelector.selectorForm = selectorForm; - ThemeSelector.tid = tid; - - ThemeSelector.background = $("#css_bits\\[background\\]").val(); - ThemeSelector.width = $("#css_bits\\[width\\]").val(); - ThemeSelector.color = $("#css_bits\\[color\\]").val(); - ThemeSelector.extra = $("#css_bits\\[extra\\]").val(); - ThemeSelector.text_decoration = $("#css_bits\\[text_decoration\\]").val(); - ThemeSelector.font_family = $("#css_bits\\[font_family\\]").val(); - ThemeSelector.font_size = $("#css_bits\\[font_size\\]").val(); - ThemeSelector.font_style = $("#css_bits\\[font_style\\]").val(); - ThemeSelector.font_weight = $("#css_bits\\[font_weight\\]").val(); - - $("#save").on('click', function(event) { ThemeSelector.save(event, true); } ); - $("#save_close").on('click', function(event) { ThemeSelector.saveClose(event); } ); - - - $(window).on('beforeunload', function(event){ - if(ThemeSelector.isChanged()) - { - return ' '; - } - }); - - - - ThemeSelector.selector.on("change", ThemeSelector.updateSelector); - ThemeSelector.selectorForm.on("submit", ThemeSelector.updateSelector); - }, - - /** - * prevents no-save warning messaging when saving - * - * @return void - */ - saveClose: function(e) { - ThemeSelector.isClosing = true; - }, - - /** - * updates the stylesheet info to match the current selection, checking - * first that work isn't lost - * - * @param object the event - * @return void - */ - updateSelector: function(e) { - var postData; - - e.preventDefault() - - ThemeSelector.saveCheck(e, true); - - postData = "file=" + encodeURIComponent(ThemeSelector.file) + "&tid=" + encodeURIComponent(ThemeSelector.tid) + "&selector=" + encodeURIComponent(ThemeSelector.selector.val()) + "&my_post_key=" + encodeURIComponent(my_post_key); - - ThemeSelector.selectorGoText = $("#mini_spinner").html(); - $("#mini_spinner").html(" \"\" "); - - $.ajax({ - type: 'post', - url: ThemeSelector.url, - data: postData, - complete: ThemeSelector.onComplete, - }); - }, - - /** - * handles the AJAX return data - * - * @param object the request - * @return true - */ - onComplete: function(request) { - var message, saved; - - if (request.responseText.match(/(.*)<\/error>/)) { - message = request.responseText.match(/(.*)<\/error>/); - - if (!message[1]) { - message[1] = lang.unknown_error; - } - $.jGrowl(lang.theme_info_fetch_error + '\n\n' + message[1], {theme:'jgrowl_error'}); - } else if(request.responseText) { - if ($("#saved").html()) { - saved = $("#saved").html(); - } - ThemeSelector.styleSheet.html(request.responseText); - } - - ThemeSelector.background = $("#css_bits\\[background\\]").val(); - ThemeSelector.width = $("#css_bits\\[width\\]").val(); - ThemeSelector.color = $("#css_bits\\[color\\]").val(); - ThemeSelector.extra = $("#css_bits\\[extra\\]").val(); - ThemeSelector.text_decoration = $("#css_bits\\[text_decoration\\]").val(); - ThemeSelector.font_family = $("#css_bits\\[font_family\\]").val(); - ThemeSelector.font_size = $("#css_bits\\[font_size\\]").val(); - ThemeSelector.font_style = $("#css_bits\\[font_style\\]").val(); - ThemeSelector.font_weight = $("#css_bits\\[font_weight\\]").val(); - - if (saved) { - $("#saved").html(saved); - window.setTimeout(function() { - $("#saved").html(""); - }, 30000); - } - - $("#mini_spinner").html(ThemeSelector.selectorGoText); - ThemeSelector.selectorGoText = ''; - - return true; - }, - - isChanged: function() - { - return (ThemeSelector.background != $("#css_bits\\[background\\]").val() || - ThemeSelector.width != $("#css_bits\\[width\\]").val() || - ThemeSelector.color != $("#css_bits\\[color\\]").val() || - ThemeSelector.extra != $("#css_bits\\[extra\\]").val() || - ThemeSelector.text_decoration != $("#css_bits\\[text_decoration\\]").val() || - ThemeSelector.font_family != $("#css_bits\\[font_family\\]").val() || - ThemeSelector.font_size != $("#css_bits\\[font_size\\]").val() || - ThemeSelector.font_style != $("#css_bits\\[font_style\\]").val() || - ThemeSelector.font_weight != $("#css_bits\\[font_weight\\]").val()); - }, - - /** - * check if anything has changed - * - * @param object the event - * @param bool true if AJAX, false if not - * @return true - */ - saveCheck: function(e, isAjax) { - - - if (ThemeSelector.isClosing == true) { - return true; - } - - if(e != null && isAjax == true) - e.preventDefault(); - - if (ThemeSelector.isChanged()) { - - e.preventDefault(); - - if(isAjax == false) - return save_changes_lang_string; - else - { - confirmReturn = confirm(save_changes_lang_string); - if (confirmReturn == true) { - ThemeSelector.save(false, isAjax); - $.jGrowl(lang.saved, {theme:'jgrowl_success'}); - } - } - } - else if(isAjax == true) - { - ThemeSelector.selectorPrevOpt = ThemeSelector.selector.val(); - return true; - } - }, - - /** - * saves the selector info - * - * @param object the event - * @param bool true if AJAX, false if not - * @return true - */ - save: function(e, isAjax) { - var cssBits, postData, completeMethod = 'onUnloadSaveComplete'; - - if (e) { - e.preventDefault(); - } - - cssBits = { - 'background': $('#css_bits\\[background\\]').val(), - 'width': $('#css_bits\\[width\\]').val(), - 'color': $('#css_bits\\[color\\]').val(), - 'extra': $('#css_bits\\[extra\\]').val(), - 'text_decoration': $('#css_bits\\[text_decoration\\]').val(), - 'font_family': $('#css_bits\\[font_family\\]').val(), - 'font_size': $('#css_bits\\[font_size\\]').val(), - 'font_style': $('#css_bits\\[font_style\\]').val(), - 'font_weight': $('#css_bits\\[font_weight\\]').val() - }; - - postData = "css_bits=" + encodeURIComponent(jsArrayToPhpArray(cssBits)) + "&selector=" + encodeURIComponent(ThemeSelector.selectorPrevOpt) + "&file=" + encodeURIComponent(ThemeSelector.file) + "&tid=" + encodeURIComponent(ThemeSelector.tid) + "&my_post_key=" + encodeURIComponent(my_post_key) + "&serialized=1"; - - if (isAjax == true) { - postData += "&ajax=1"; - } - - ThemeSelector.isAjax = isAjax; - - if (isAjax == true) { - completeMethod = 'onSaveComplete'; - $.jGrowl(lang.saving, {theme:'jgrowl_process'}); - } - - $.ajax({ - type: 'post', - url: ThemeSelector.saveUrl, - data: postData, - complete: ThemeSelector[completeMethod], - }); - return !isAjax; - }, - - /** - * handle errors, reset values and clean up - * - * @param object the request - * @return true - */ - onSaveComplete: function(request) { - var message; - - if (request.responseText.match(/(.*)<\/error>/)) { - message = request.responseText.match(/(.*)<\/error>/); - - if (!message[1]) { - message[1] = lang.unkown_error; - } - $.jGrowl(lang.theme_info_save_error + '\n\n' + message[1], {theme:'jgrowl_error'}); - return false; - } else if(request.responseText) { - $("#saved").html(" (" + lang.saved + " @ "+ Date() + ")"); - if ($("#ajax_alert")) { - $("#ajax_alert").html('').hide(); - } - } - - ThemeSelector.background = $("#css_bits\\[background\\]").val(); - ThemeSelector.width = $("#css_bits\\[width\\]").val(); - ThemeSelector.color = $("#css_bits\\[color\\]").val(); - ThemeSelector.extra = $("#css_bits\\[extra\\]").val(); - ThemeSelector.text_decoration = $("#css_bits\\[text_decoration\\]").val(); - ThemeSelector.font_family = $("#css_bits\\[font_family\\]").val(); - ThemeSelector.font_size = $("#css_bits\\[font_size\\]").val(); - ThemeSelector.font_style = $("#css_bits\\[font_style\\]").val(); - ThemeSelector.font_weight = $("#css_bits\\[font_weight\\]").val(); - - return true; - }, - - /** - * handle leaving page save - * - * @param object the request - * @return true - */ - onUnloadSaveComplete: function(request) { - var message; - - if (request.responseText.match(/(.*)<\/error>/)) { - message = request.responseText.match(/(.*)<\/error>/); - - if (!message[1]) { - message[1] = lang.unkown_error; - } - $.jGrowl(lang.theme_info_save_error + '\n\n' + message[1], {theme:'jgrowl_error'}); - return false; - } - return true; - }, - - url: null, - saveUrl: null, - selector: null, - styleSheet: null, - file: null, - selectorForm: null, - tid: null, - miniSpinnerImage: "../images/spinner.gif", - isAjax: false, - specific_count: 0, - selectorGoText: null, - selectorPrevOpt: null, - isClosing: false, - background: null, - width: null, - color: null, - extra: null, - text_decoration: null, - font_family: null, - font_size: null, - font_style: null, - font_weight: null -}; - -/** - * converts a JS object to a JSON of a PHP associative array - * - * @param array the JS array - * @return string the JSON - */ -function jsArrayToPhpArray(a) { - var a_php = "", total = 0; - - for (var key in a) { - ++total; - a_php += "s:" + - String(key).length + ":\"" + - String(key) + "\";s:" + - String(a[key]).length + - ":\"" + String(a[key]) + "\";"; - } - a_php = "a:" + total + ":{" + a_php + "}"; - return a_php; -} diff --git a/html/forums/admin/jscripts/users.js b/html/forums/admin/jscripts/users.js deleted file mode 100644 index 72a1b26..0000000 --- a/html/forums/admin/jscripts/users.js +++ /dev/null @@ -1,13 +0,0 @@ -var Users = { - last_value: '', - cached_users: '', - - init: function() - { - } -}; - -$(function() -{ - Users.init(); -}); \ No newline at end of file diff --git a/html/forums/admin/jscripts/view_manager.js b/html/forums/admin/jscripts/view_manager.js deleted file mode 100644 index a0da901..0000000 --- a/html/forums/admin/jscripts/view_manager.js +++ /dev/null @@ -1,53 +0,0 @@ -var ViewManager = { - init: function() - { - if(!$('#fields_enabled') || !$('#fields_disabled')) - { - return; - } - - if(!$('#fields_js')) - { - return; - } - - $("#fields_enabled").sortable({ - connectWith: "#fields_disabled", - dropOnEmpty: true, - update: function(event, ui) { - ViewManager.buildFieldsList(); - } - }).disableSelection(); - - $("#fields_disabled").sortable({ - connectWith: "#fields_enabled", - dropOnEmpty: true, - update: function(event, ui) { - ViewManager.buildFieldsList(); - } - }).disableSelection(); - }, - - buildFieldsList: function() - { - new_input = ''; - $('#fields_enabled').children().each(function() { - id = $(this).attr('id').split("-"); - - if(id[1]) - { - if(new_input) - { - new_input += ","; - } - new_input += id[1]; - } - }); - $('#fields_js').val(new_input); - } -}; - -$(function() -{ - ViewManager.init(); -}); \ No newline at end of file diff --git a/html/forums/admin/modules/config/attachment_types.php b/html/forums/admin/modules/config/attachment_types.php deleted file mode 100644 index 91f6459..0000000 --- a/html/forums/admin/modules/config/attachment_types.php +++ /dev/null @@ -1,746 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->attachment_types, "index.php?module=config-attachment_types"); - -$plugins->run_hooks("admin_config_attachment_types_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_attachment_types_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['mimetype']) && !trim($mybb->input['extension'])) - { - $errors[] = $lang->error_missing_mime_type; - } - - if(!trim($mybb->input['extension']) && !trim($mybb->input['mimetype'])) - { - $errors[] = $lang->error_missing_extension; - } - - if(!$errors) - { - if($mybb->input['mimetype'] == "images/attachtypes/") - { - $mybb->input['mimetype'] = ''; - } - - if(substr($mybb->input['extension'], 0, 1) == '.') - { - $mybb->input['extension'] = substr($mybb->input['extension'], 1); - } - - foreach(array('groups', 'forums') as $key) - { - if($mybb->input[$key] == 'all') - { - $mybb->input[$key] = -1; - } - elseif($mybb->input[$key] == 'custom') - { - if(isset($mybb->input['select'][$key]) && is_array($mybb->input['select'][$key])) - { - foreach($mybb->input['select'][$key] as &$val) - { - $val = (int)$val; - } - unset($val); - - $mybb->input[$key] = implode(',', (array)$mybb->input['select'][$key]); - } - else - { - $mybb->input[$key] = ''; - } - } - else - { - $mybb->input[$key] = ''; - } - } - - $maxsize = $mybb->get_input('maxsize', MyBB::INPUT_INT); - - if($maxsize == 0) - { - $maxsize = ""; - } - - $new_type = array( - "name" => $db->escape_string($mybb->input['name']), - "mimetype" => $db->escape_string($mybb->input['mimetype']), - "extension" => $db->escape_string($mybb->input['extension']), - "maxsize" => $maxsize, - "icon" => $db->escape_string($mybb->input['icon']), - 'enabled' => $mybb->get_input('enabled', MyBB::INPUT_INT), - 'groups' => $db->escape_string($mybb->get_input('groups')), - 'forums' => $db->escape_string($mybb->get_input('forums')), - 'avatarfile' => $mybb->get_input('avatarfile', MyBB::INPUT_INT) - ); - - $atid = $db->insert_query("attachtypes", $new_type); - - $plugins->run_hooks("admin_config_attachment_types_add_commit"); - - // Log admin action - log_admin_action($atid, htmlspecialchars_uni($mybb->input['extension'])); - - $cache->update_attachtypes(); - - flash_message($lang->success_attachment_type_created, 'success'); - admin_redirect("index.php?module=config-attachment_types"); - } - } - - $page->add_breadcrumb_item($lang->add_new_attachment_type); - $page->output_header($lang->attachment_types." - ".$lang->add_new_attachment_type); - - $sub_tabs['attachment_types'] = array( - 'title' => $lang->attachment_types, - 'link' => "index.php?module=config-attachment_types" - ); - - $sub_tabs['add_attachment_type'] = array( - 'title' => $lang->add_new_attachment_type, - 'link' => "index.php?module=config-attachment_types&action=add", - 'description' => $lang->add_attachment_type_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_attachment_type'); - - $form = new Form("index.php?module=config-attachment_types&action=add", "post", "add"); - - if($errors) - { - switch($mybb->input['groups']) - { - case 'all': - $mybb->input['groups'] = -1; - break; - case 'custom': - $mybb->input['groups'] = implode(',', (array)$mybb->input['select']['groups']); - break; - default: - $mybb->input['groups'] = ''; - break; - } - - switch($mybb->input['forums']) - { - case 'all': - $mybb->input['forums'] = -1; - break; - case 'custom': - $mybb->input['forums'] = implode(',', (array)$mybb->input['select']['forums']); - break; - default: - $mybb->input['forums'] = ''; - break; - } - - $page->output_inline_error($errors); - } - else - { - $mybb->input['maxsize'] = '1024'; - $mybb->input['icon'] = "images/attachtypes/"; - } - - if(empty($mybb->input['groups'])) - { - $mybb->input['groups'] = ''; - } - - if(empty($mybb->input['forums'])) - { - $mybb->input['forums'] = ''; - } - - // PHP settings - $upload_max_filesize = @ini_get('upload_max_filesize'); - $post_max_size = @ini_get('post_max_size'); - $limit_string = ''; - if($upload_max_filesize || $post_max_size) - { - $limit_string = '

'.$lang->limit_intro; - if($upload_max_filesize) - { - $limit_string .= '
'.$lang->sprintf($lang->limit_upload_max_filesize, $upload_max_filesize); - } - if($post_max_size) - { - $limit_string .= '
'.$lang->sprintf($lang->limit_post_max_size, $post_max_size); - } - } - - $selected_values = ''; - if($mybb->input['groups'] != '' && $mybb->input['groups'] != -1) - { - $selected_values = explode(',', $mybb->get_input('groups')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $group_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['groups'] == -1) - { - $group_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['groups'] != '') - { - $group_checked['custom'] = 'checked="checked"'; - } - else - { - $group_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $groups_select_code = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('select[groups][]', $selected_values, array('id' => 'groups', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - - $selected_values = ''; - if($mybb->input['forums'] != '' && $mybb->input['forums'] != -1) - { - $selected_values = explode(',', $mybb->get_input('forums')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $forum_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['forums'] == -1) - { - $forum_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['forums'] != '') - { - $forum_checked['custom'] = 'checked="checked"'; - } - else - { - $forum_checked['none'] = 'checked="checked"'; - } - - $forums_select_code = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('select[forums][]', $selected_values, array('id' => 'forums', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - - $form_container = new FormContainer($lang->add_new_attachment_type); - $form_container->output_row($lang->name, $lang->name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->file_extension." *", $lang->file_extension_desc, $form->generate_text_box('extension', $mybb->input['extension'], array('id' => 'extension')), 'extension'); - $form_container->output_row($lang->mime_type." *", $lang->mime_type_desc, $form->generate_text_box('mimetype', $mybb->input['mimetype'], array('id' => 'mimetype')), 'mimetype'); - $form_container->output_row($lang->maximum_file_size, $lang->maximum_file_size_desc.$limit_string, $form->generate_numeric_field('maxsize', $mybb->input['maxsize'], array('id' => 'maxsize', 'min' => 0)), 'maxsize'); - $form_container->output_row($lang->attachment_icon, $lang->attachment_icon_desc, $form->generate_text_box('icon', $mybb->input['icon'], array('id' => 'icon')), 'icon'); - $form_container->output_row($lang->enabled, '', $form->generate_yes_no_radio('enabled', $mybb->input['enabled']), 'enabled'); - $form_container->output_row($lang->available_to_groups, '', $groups_select_code, '', array(), array('id' => 'row_groups')); - $form_container->output_row($lang->available_in_forums, '', $forums_select_code, '', array(), array('id' => 'row_forums')); - $form_container->output_row($lang->avatar_file, $lang->avatar_file_desc, $form->generate_yes_no_radio('avatarfile', $mybb->input['avatarfile']), 'avatarfile'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_attachment_type); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("attachtypes", "*", "atid='".$mybb->get_input('atid', MyBB::INPUT_INT)."'"); - $attachment_type = $db->fetch_array($query); - - if(!$attachment_type['atid']) - { - flash_message($lang->error_invalid_attachment_type, 'error'); - admin_redirect("index.php?module=config-attachment_types"); - } - - $plugins->run_hooks("admin_config_attachment_types_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['mimetype']) && !trim($mybb->input['extension'])) - { - $errors[] = $lang->error_missing_mime_type; - } - - if(!trim($mybb->input['extension']) && !trim($mybb->input['mimetype'])) - { - $errors[] = $lang->error_missing_extension; - } - - if(!$errors) - { - if($mybb->input['mimetype'] == "images/attachtypes/") - { - $mybb->input['mimetype'] = ''; - } - - if(substr($mybb->input['extension'], 0, 1) == '.') - { - $mybb->input['extension'] = substr($mybb->input['extension'], 1); - } - - foreach(array('groups', 'forums') as $key) - { - if($mybb->input[$key] == 'all') - { - $mybb->input[$key] = -1; - } - elseif($mybb->input[$key] == 'custom') - { - if(isset($mybb->input['select'][$key]) && is_array($mybb->input['select'][$key])) - { - foreach($mybb->input['select'][$key] as &$val) - { - $val = (int)$val; - } - unset($val); - - $mybb->input[$key] = implode(',', (array)$mybb->input['select'][$key]); - } - else - { - $mybb->input[$key] = ''; - } - } - else - { - $mybb->input[$key] = ''; - } - } - - $updated_type = array( - "name" => $db->escape_string($mybb->input['name']), - "mimetype" => $db->escape_string($mybb->input['mimetype']), - "extension" => $db->escape_string($mybb->input['extension']), - "maxsize" => $mybb->get_input('maxsize', MyBB::INPUT_INT), - "icon" => $db->escape_string($mybb->input['icon']), - 'enabled' => $mybb->get_input('enabled', MyBB::INPUT_INT), - 'groups' => $db->escape_string($mybb->get_input('groups')), - 'forums' => $db->escape_string($mybb->get_input('forums')), - 'avatarfile' => $mybb->get_input('avatarfile', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_attachment_types_edit_commit"); - - $db->update_query("attachtypes", $updated_type, "atid='{$attachment_type['atid']}'"); - - // Log admin action - log_admin_action($attachment_type['atid'], htmlspecialchars_uni($mybb->input['extension'])); - - $cache->update_attachtypes(); - - flash_message($lang->success_attachment_type_updated, 'success'); - admin_redirect("index.php?module=config-attachment_types"); - } - } - - $page->add_breadcrumb_item($lang->edit_attachment_type); - $page->output_header($lang->attachment_types." - ".$lang->edit_attachment_type); - - $sub_tabs['edit_attachment_type'] = array( - 'title' => $lang->edit_attachment_type, - 'link' => "index.php?module=config-attachment_types&action=edit&atid={$attachment_type['atid']}", - 'description' => $lang->edit_attachment_type_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_attachment_type'); - - $form = new Form("index.php?module=config-attachment_types&action=edit&atid={$attachment_type['atid']}", "post", "add"); - - if($errors) - { - switch($mybb->input['groups']) - { - case 'all': - $mybb->input['groups'] = -1; - break; - case 'custom': - $mybb->input['groups'] = implode(',', (array)$mybb->input['select']['groups']); - break; - default: - $mybb->input['groups'] = ''; - break; - } - - switch($mybb->input['forums']) - { - case 'all': - $mybb->input['forums'] = -1; - break; - case 'custom': - $mybb->input['forums'] = implode(',', (array)$mybb->input['select']['forums']); - break; - default: - $mybb->input['forums'] = ''; - break; - } - - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, $attachment_type); - } - - if(empty($mybb->input['groups'])) - { - $mybb->input['groups'] = ''; - } - - if(empty($mybb->input['forums'])) - { - $mybb->input['forums'] = ''; - } - - // PHP settings - $upload_max_filesize = @ini_get('upload_max_filesize'); - $post_max_size = @ini_get('post_max_size'); - $limit_string = ''; - if($upload_max_filesize || $post_max_size) - { - $limit_string = '

'.$lang->limit_intro; - if($upload_max_filesize) - { - $limit_string .= '
'.$lang->sprintf($lang->limit_upload_max_filesize, $upload_max_filesize); - } - if($post_max_size) - { - $limit_string .= '
'.$lang->sprintf($lang->limit_post_max_size, $post_max_size); - } - } - - $selected_values = ''; - if($mybb->input['groups'] != '' && $mybb->input['groups'] != -1) - { - $selected_values = explode(',', $mybb->get_input('groups')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $group_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['groups'] == -1) - { - $group_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['groups'] != '') - { - $group_checked['custom'] = 'checked="checked"'; - } - else - { - $group_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $groups_select_code = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('select[groups][]', $selected_values, array('id' => 'groups', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - - $selected_values = ''; - if($mybb->input['forums'] != '' && $mybb->input['forums'] != -1) - { - $selected_values = explode(',', $mybb->get_input('forums')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $forum_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['forums'] == -1) - { - $forum_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['forums'] != '') - { - $forum_checked['custom'] = 'checked="checked"'; - } - else - { - $forum_checked['none'] = 'checked="checked"'; - } - - $forums_select_code = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('select[forums][]', $selected_values, array('id' => 'forums', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - - $form_container = new FormContainer($lang->edit_attachment_type); - $form_container->output_row($lang->name, $lang->name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->file_extension." *", $lang->file_extension_desc, $form->generate_text_box('extension', $mybb->input['extension'], array('id' => 'extension')), 'extension'); - $form_container->output_row($lang->mime_type." *", $lang->mime_type_desc, $form->generate_text_box('mimetype', $mybb->input['mimetype'], array('id' => 'mimetype')), 'mimetype'); - $form_container->output_row($lang->maximum_file_size, $lang->maximum_file_size_desc.$limit_string, $form->generate_numeric_field('maxsize', $mybb->input['maxsize'], array('id' => 'maxsize', 'min' => 0)), 'maxsize'); - $form_container->output_row($lang->attachment_icon, $lang->attachment_icon_desc, $form->generate_text_box('icon', $mybb->input['icon'], array('id' => 'icon')), 'icon'); - $form_container->output_row($lang->enabled, '', $form->generate_yes_no_radio('enabled', $mybb->input['enabled']), 'enabled'); - $form_container->output_row($lang->available_to_groups, '', $groups_select_code, '', array(), array('id' => 'row_groups')); - $form_container->output_row($lang->available_in_forums, '', $forums_select_code, '', array(), array('id' => 'row_forums')); - $form_container->output_row($lang->avatar_file, $lang->avatar_file_desc, $form->generate_yes_no_radio('avatarfile', $mybb->input['avatarfile']), 'avatarfile'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_attachment_type); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-attachment_types"); - } - - $query = $db->simple_select("attachtypes", "*", "atid='".$mybb->get_input('atid', MyBB::INPUT_INT)."'"); - $attachment_type = $db->fetch_array($query); - - if(!$attachment_type['atid']) - { - flash_message($lang->error_invalid_attachment_type, 'error'); - admin_redirect("index.php?module=config-attachment_types"); - } - - $plugins->run_hooks("admin_config_attachment_types_delete"); - - if($mybb->request_method == "post") - { - $db->delete_query("attachtypes", "atid='{$attachment_type['atid']}'"); - - $plugins->run_hooks("admin_config_attachment_types_delete_commit"); - - $cache->update_attachtypes(); - - // Log admin action - log_admin_action($attachment_type['atid'], htmlspecialchars_uni($attachment_type['extension'])); - - flash_message($lang->success_attachment_type_deleted, 'success'); - admin_redirect("index.php?module=config-attachment_types"); - } - else - { - $page->output_confirm_action("index.php?module=config-attachment_types&action=delete&atid={$attachment_type['atid']}", $lang->confirm_attachment_type_deletion); - } -} - -if($mybb->input['action'] == 'toggle_status') -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect('index.php?module=config-attachment_types'); - } - - $atid = $mybb->get_input('atid', MyBB::INPUT_INT); - - $query = $db->simple_select('attachtypes', '*', "atid='{$atid}'"); - $attachment_type = $db->fetch_array($query); - - if(!$attachment_type['atid']) - { - flash_message($lang->error_invalid_mycode, 'error'); - admin_redirect('index.php?module=config-attachment_types'); - } - - $plugins->run_hooks('admin_config_attachment_types_toggle_status'); - - $update_array = array('enabled' => 1); - $phrase = $lang->success_activated_attachment_type; - if($attachment_type['enabled'] == 1) - { - $update_array['enabled'] = 0; - $phrase = $lang->success_activated_attachment_type; - } - - $plugins->run_hooks('admin_config_attachment_types_toggle_status_commit'); - - $db->update_query('attachtypes', $update_array, "atid='{$atid}'"); - - $cache->update_attachtypes(); - - // Log admin action - log_admin_action($atid, htmlspecialchars_uni($attachment_type['extension']), $update_array['enabled']); - - flash_message($phrase, 'success'); - admin_redirect('index.php?module=config-attachment_types'); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->attachment_types); - - $sub_tabs['attachment_types'] = array( - 'title' => $lang->attachment_types, - 'link' => "index.php?module=config-attachment_types", - 'description' => $lang->attachment_types_desc - ); - $sub_tabs['add_attachment_type'] = array( - 'title' => $lang->add_new_attachment_type, - 'link' => "index.php?module=config-attachment_types&action=add", - ); - - $plugins->run_hooks("admin_config_attachment_types_start"); - - $page->output_nav_tabs($sub_tabs, 'attachment_types'); - - $table = new Table; - $table->construct_header($lang->extension, array("colspan" => 2)); - $table->construct_header($lang->mime_type); - $table->construct_header($lang->alt_enabled, array('class' => 'align_center')); - $table->construct_header($lang->maximum_size, array("class" => "align_center")); - $table->construct_header($lang->controls, array("class" => "align_center")); - - $query = $db->simple_select("attachtypes", "*", "", array('order_by' => 'extension')); - while($attachment_type = $db->fetch_array($query)) - { - // Just show default icons in ACP - $attachment_type['icon'] = htmlspecialchars_uni(str_replace("{theme}", "images", $attachment_type['icon'])); - if(my_validate_url($attachment_type['icon'], true)) - { - $image = $attachment_type['icon']; - } - else - { - $image = "../".$attachment_type['icon']; - } - - if(!$attachment_type['icon'] || $attachment_type['icon'] == "images/attachtypes/") - { - $attachment_type['icon'] = " "; - } - else - { - $attachment_type['name'] = htmlspecialchars_uni($attachment_type['name']); - $attachment_type['icon'] = "\"\""; - } - - if($attachment_type['enabled']) - { - $phrase = $lang->disable; - $icon = "on.png\" alt=\"({$lang->alt_enabled})\" title=\"{$lang->alt_enabled}"; - } - else - { - $phrase = $lang->enable; - $icon = "off.png\" alt=\"({$lang->alt_disabled})\" title=\"{$lang->alt_disabled}"; - } - - $table->construct_cell($attachment_type['icon'], array("width" => 1)); - $table->construct_cell(".{$attachment_type['extension']}"); - $table->construct_cell(htmlspecialchars_uni($attachment_type['mimetype'])); - $table->construct_cell("style}/images/icons/bullet_{$icon}\" style=\"vertical-align: middle;\" />", array("class" => "align_center")); - $table->construct_cell(get_friendly_size(($attachment_type['maxsize']*1024)), array("class" => "align_center")); - - $popup = new PopupMenu("attachment_type_{$attachment_type['atid']}", $lang->options); - $popup->add_item($lang->edit, "index.php?module=config-attachment_types&action=edit&atid={$attachment_type['atid']}"); - $popup->add_item($phrase, "index.php?module=config-attachment_types&action=toggle_status&atid={$attachment_type['atid']}&my_post_key={$mybb->post_code}"); - $popup->add_item($lang->delete, "index.php?module=config-attachment_types&action=delete&atid={$attachment_type['atid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_attachment_type_deletion}')"); - $table->construct_cell($popup->fetch(), array('class' => 'align_center')); - - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_attachment_types, array('colspan' => 6)); - $table->construct_row(); - } - - $table->output($lang->attachment_types); - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/config/badwords.php b/html/forums/admin/modules/config/badwords.php deleted file mode 100644 index 20b6805..0000000 --- a/html/forums/admin/modules/config/badwords.php +++ /dev/null @@ -1,269 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->bad_words, "index.php?module=config-badwords"); - -$plugins->run_hooks("admin_config_badwords_begin"); - -if($mybb->input['action'] == "add" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_config_badwords_add"); - - if(!trim($mybb->input['badword'])) - { - $errors[] = $lang->error_missing_bad_word; - } - - if(strlen(trim($mybb->input['badword'])) > 100) - { - $errors[] = $lang->bad_word_max; - } - - if(strlen($mybb->input['replacement']) > 100) - { - $errors[] = $lang->replacement_word_max; - } - - if(!$errors) - { - $query = $db->simple_select("badwords", "bid", "badword = '".$db->escape_string($mybb->input['badword'])."'"); - - if($db->num_rows($query)) - { - $errors[] = $lang->error_bad_word_filtered; - } - } - - $badword = str_replace('\*', '([a-zA-Z0-9_]{1})', preg_quote($mybb->input['badword'], "#")); - - // Don't allow certain badword replacements to be added if it would cause an infinite recursive loop. - if(strlen($mybb->input['badword']) == strlen($mybb->input['replacement']) && preg_match("#(^|\W)".$badword."(\W|$)#i", $mybb->input['replacement'])) - { - $errors[] = $lang->error_replacement_word_invalid; - } - - if(!$errors) - { - $new_badword = array( - "badword" => $db->escape_string($mybb->input['badword']), - "replacement" => $db->escape_string($mybb->input['replacement']) - ); - - $bid = $db->insert_query("badwords", $new_badword); - - $plugins->run_hooks("admin_config_badwords_add_commit"); - - // Log admin action - log_admin_action($bid, $mybb->input['badword']); - - $cache->update_badwords(); - flash_message($lang->success_added_bad_word, 'success'); - admin_redirect("index.php?module=config-badwords"); - } - else - { - $mybb->input['action'] = ''; - } -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("badwords", "*", "bid='".$mybb->get_input('bid', MyBB::INPUT_INT)."'"); - $badword = $db->fetch_array($query); - - // Does the bad word not exist? - if(!$badword['bid']) - { - flash_message($lang->error_invalid_bid, 'error'); - admin_redirect("index.php?module=config-badwords"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-badwords"); - } - - $plugins->run_hooks("admin_config_badwords_delete"); - - if($mybb->request_method == "post") - { - // Delete the bad word - $db->delete_query("badwords", "bid='{$badword['bid']}'"); - - $plugins->run_hooks("admin_config_badwords_delete_commit"); - - // Log admin action - log_admin_action($badword['bid'], $badword['badword']); - - $cache->update_badwords(); - - flash_message($lang->success_deleted_bad_word, 'success'); - admin_redirect("index.php?module=config-badwords"); - } - else - { - $page->output_confirm_action("index.php?module=config-badwords&action=delete&bid={$badword['bid']}", $lang->confirm_bad_word_deletion); - } -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("badwords", "*", "bid='".$mybb->get_input('bid', MyBB::INPUT_INT)."'"); - $badword = $db->fetch_array($query); - - // Does the bad word not exist? - if(!$badword['bid']) - { - flash_message($lang->error_invalid_bid, 'error'); - admin_redirect("index.php?module=config-badwords"); - } - - $plugins->run_hooks("admin_config_badwords_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['badword'])) - { - $errors[] = $lang->error_missing_bad_word; - } - - if(strlen(trim($mybb->input['badword'])) > 100) - { - $errors[] = $lang->bad_word_max; - } - - if(strlen($mybb->input['replacement']) > 100) - { - $errors[] = $lang->replacement_word_max; - } - - if(!$errors) - { - $updated_badword = array( - "badword" => $db->escape_string($mybb->input['badword']), - "replacement" => $db->escape_string($mybb->input['replacement']) - ); - - $plugins->run_hooks("admin_config_badwords_edit_commit"); - - $db->update_query("badwords", $updated_badword, "bid='{$badword['bid']}'"); - - // Log admin action - log_admin_action($badword['bid'], $mybb->input['badword']); - - $cache->update_badwords(); - - flash_message($lang->success_updated_bad_word, 'success'); - admin_redirect("index.php?module=config-badwords"); - } - } - - $page->add_breadcrumb_item($lang->edit_bad_word); - $page->output_header($lang->bad_words." - ".$lang->edit_bad_word); - - $sub_tabs['editbadword'] = array( - 'title' => $lang->edit_bad_word, - 'description' => $lang->edit_bad_word_desc, - 'link' => "index.php?module=config-badwords" - ); - - $page->output_nav_tabs($sub_tabs, "editbadword"); - - $form = new Form("index.php?module=config-badwords&action=edit&bid={$badword['bid']}", "post"); - - if($errors) - { - $page->output_inline_error($errors); - $badword_data = $mybb->input; - } - else - { - $badword_data = $badword; - } - - $form_container = new FormContainer($lang->edit_bad_word); - $form_container->output_row($lang->bad_word." *", $lang->bad_word_desc, $form->generate_text_box('badword', $badword_data['badword'], array('id' => 'badword')), 'badword'); - $form_container->output_row($lang->replacement, $lang->replacement_desc, $form->generate_text_box('replacement', $badword_data['replacement'], array('id' => 'replacement')), 'replacement'); - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->save_bad_word); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->bad_words); - - $sub_tabs['badwords'] = array( - 'title' => $lang->bad_word_filters, - 'description' => $lang->bad_word_filters_desc, - 'link' => "index.php?module=config-badwords" - ); - - $plugins->run_hooks("admin_config_badwords_start"); - - $page->output_nav_tabs($sub_tabs, "badwords"); - - if($errors) - { - $page->output_inline_error($errors); - } - - $table = new Table; - $table->construct_header($lang->bad_word); - $table->construct_header($lang->replacement, array("width" => "50%")); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150, "colspan" => 2)); - - $query = $db->simple_select("badwords", "*", "", array("order_by" => "badword", "order_dir" => "asc")); - while($badword = $db->fetch_array($query)) - { - $badword['badword'] = htmlspecialchars_uni($badword['badword']); - $badword['replacement'] = htmlspecialchars_uni($badword['replacement']); - if(!$badword['replacement']) - { - $badword['replacement'] = '*****'; - } - $table->construct_cell($badword['badword']); - $table->construct_cell($badword['replacement']); - $table->construct_cell("
{$lang->edit}", array("class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_bad_word_deletion}');\">{$lang->delete}", array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_bad_words, array("colspan" => 4)); - $table->construct_row(); - } - - $table->output($lang->bad_word_filters); - - $form = new Form("index.php?module=config-badwords&action=add", "post", "add"); - - $form_container = new FormContainer($lang->add_bad_word); - $form_container->output_row($lang->bad_word." *", $lang->bad_word_desc, $form->generate_text_box('badword', $mybb->input['badword'], array('id' => 'badword')), 'badword'); - $form_container->output_row($lang->replacement, $lang->replacement_desc, $form->generate_text_box('replacement', $mybb->input['replacement'], array('id' => 'replacement')), 'replacement'); - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->save_bad_word); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/config/banning.php b/html/forums/admin/modules/config/banning.php deleted file mode 100644 index 719adb1..0000000 --- a/html/forums/admin/modules/config/banning.php +++ /dev/null @@ -1,294 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->banning, "index.php?module=config-banning"); - -$plugins->run_hooks("admin_config_banning_begin"); - -if($mybb->input['action'] == "add" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_config_banning_add"); - - if(!trim($mybb->input['filter'])) - { - $errors[] = $lang->error_missing_ban_input; - } - - $query = $db->simple_select("banfilters", "fid", "filter = '".$db->escape_string($mybb->input['filter'])."' AND type = '".$mybb->get_input('type', MyBB::INPUT_INT)."'"); - if($db->num_rows($query)) - { - $errors[] = $lang->error_filter_already_banned; - } - - if(!$errors) - { - $new_filter = array( - "filter" => $db->escape_string($mybb->input['filter']), - "type" => $mybb->get_input('type', MyBB::INPUT_INT), - "dateline" => TIME_NOW - ); - $fid = $db->insert_query("banfilters", $new_filter); - - $plugins->run_hooks("admin_config_banning_add_commit"); - - if($mybb->input['type'] == 1) - { - $cache->update_bannedips(); - } - else if($mybb->input['type'] == 3) - { - $cache->update_bannedemails(); - } - - // Log admin action - log_admin_action($fid, htmlspecialchars_uni($mybb->input['filter']), (int)$mybb->input['type']); - - if($mybb->input['type'] == 1) - { - flash_message($lang->success_ip_banned, 'success'); - admin_redirect("index.php?module=config-banning"); - } - else if($mybb->input['type'] == 2) - { - flash_message($lang->success_username_disallowed, 'success'); - admin_redirect("index.php?module=config-banning&type=usernames"); - } - else if($mybb->input['type'] == 3) - { - flash_message($lang->success_email_disallowed, 'success'); - admin_redirect("index.php?module=config-banning&type=emails"); - } - } - else - { - if($mybb->input['type'] == 1) - { - $mybb->input['type'] = "ips"; - } - else if($mybb->input['type'] == 2) - { - $mybb->input['type'] = "usernames"; - } - else if($mybb->input['type'] == 3) - { - $mybb->input['type'] = "emails"; - } - $mybb->input['action'] = ''; - } -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("banfilters", "*", "fid='".$mybb->get_input('fid', MyBB::INPUT_INT)."'"); - $filter = $db->fetch_array($query); - - // Does the filter not exist? - if(!$filter['fid']) - { - flash_message($lang->error_invalid_filter, 'error'); - admin_redirect("index.php?module=config-banning"); - } - - $plugins->run_hooks("admin_config_banning_delete"); - - if($filter['type'] == 3) - { - $type = "emails"; - } - else if($filter['type'] == 2) - { - $type = "usernames"; - } - else - { - $type = "ips"; - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-banning&type={$type}"); - } - - if($mybb->request_method == "post") - { - // Delete the ban filter - $db->delete_query("banfilters", "fid='{$filter['fid']}'"); - - $plugins->run_hooks("admin_config_banning_delete_commit"); - - // Log admin action - log_admin_action($filter['fid'], htmlspecialchars_uni($filter['filter']), (int)$filter['type']); - - // Banned IP? Rebuild banned IP cache - if($filter['type'] == 1) - { - $cache->update_bannedips(); - } - else if($filter['type'] == 3) - { - $cache->update_bannedemails(); - } - - flash_message($lang->success_ban_deleted, 'success'); - admin_redirect("index.php?module=config-banning&type={$type}"); - } - else - { - $page->output_confirm_action("index.php?module=config-banning&action=delete&fid={$filter['fid']}", $lang->confirm_ban_deletion); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_banning_start"); - - switch($mybb->input['type']) - { - case "emails": - $type = "3"; - $title = $lang->disallowed_email_addresses; - break; - case "usernames": - $type = "2"; - $title = $lang->disallowed_usernames; - break; - default: - $type = "1"; - $title = $lang->banned_ip_addresses; - $mybb->input['type'] = "ips"; - } - - $page->output_header($title); - - $sub_tabs['ips'] = array( - 'title' => $lang->banned_ips, - 'link' => "index.php?module=config-banning", - 'description' => $lang->banned_ips_desc - ); - - $sub_tabs['users'] = array( - 'title' => $lang->banned_accounts, - 'link' => "index.php?module=user-banning" - ); - - $sub_tabs['usernames'] = array( - 'title' => $lang->disallowed_usernames, - 'link' => "index.php?module=config-banning&type=usernames", - 'description' => $lang->disallowed_usernames_desc - ); - - $sub_tabs['emails'] = array( - 'title' => $lang->disallowed_email_addresses, - 'link' => "index.php?module=config-banning&type=emails", - 'description' => $lang->disallowed_email_addresses_desc - ); - - $page->output_nav_tabs($sub_tabs, $mybb->input['type']); - - if($errors) - { - $page->output_inline_error($errors); - } - - $table = new Table; - if($mybb->input['type'] == "usernames") - { - $table->construct_header($lang->username); - $table->construct_header($lang->date_disallowed, array("class" => "align_center", "width" => 200)); - $table->construct_header($lang->last_attempted_use, array("class" => "align_center", "width" => 200)); - } - else if($mybb->input['type'] == "emails") - { - $table->construct_header($lang->email_address); - $table->construct_header($lang->date_disallowed, array("class" => "align_center", "width" => 200)); - $table->construct_header($lang->last_attempted_use, array("class" => "align_center", "width" => 200)); - } - else - { - $table->construct_header($lang->ip_address); - $table->construct_header($lang->ban_date, array("class" => "align_center", "width" => 200)); - $table->construct_header($lang->last_access, array("class" => "align_center", "width" => 200)); - } - $table->construct_header($lang->controls, array("width" => 1)); - - $query = $db->simple_select("banfilters", "*", "type='{$type}'", array("order_by" => "filter", "order_dir" => "asc")); - while($filter = $db->fetch_array($query)) - { - $filter['filter'] = htmlspecialchars_uni($filter['filter']); - - if($filter['lastuse'] > 0) - { - $last_use = my_date('relative', $filter['lastuse']); - } - else - { - $last_use = $lang->never; - } - - if($filter['dateline'] > 0) - { - $date = my_date('relative', $filter['dateline']); - } - else - { - $date = $lang->na; - } - - $table->construct_cell($filter['filter']); - $table->construct_cell($date, array("class" => "align_center")); - $table->construct_cell($last_use, array("class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_ban_deletion}');\">style}/images/icons/delete.png\" title=\"{$lang->delete}\" alt=\"{$lang->delete}\" />", array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_bans, array("colspan" => 4)); - $table->construct_row(); - } - - $table->output($title); - - $form = new Form("index.php?module=config-banning&action=add", "post", "add"); - - if($mybb->input['type'] == "usernames") - { - $form_container = new FormContainer($lang->add_disallowed_username); - $form_container->output_row($lang->username." *", $lang->username_desc, $form->generate_text_box('filter', $mybb->input['filter'], array('id' => 'filter')), 'filter'); - $buttons[] = $form->generate_submit_button($lang->disallow_username); - } - else if($mybb->input['type'] == "emails") - { - $form_container = new FormContainer($lang->add_disallowed_email_address); - $form_container->output_row($lang->email_address." *", $lang->email_address_desc, $form->generate_text_box('filter', $mybb->input['filter'], array('id' => 'filter')), 'filter'); - $buttons[] = $form->generate_submit_button($lang->disallow_email_address); - } - else - { - $form_container = new FormContainer($lang->ban_an_ip_address); - $form_container->output_row($lang->ip_address." *", $lang->ip_address_desc, $form->generate_text_box('filter', $mybb->input['filter'], array('id' => 'filter')), 'filter'); - $buttons[] = $form->generate_submit_button($lang->ban_ip_address); - } - - $form_container->end(); - echo $form->generate_hidden_field("type", $type); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/config/calendars.php b/html/forums/admin/modules/config/calendars.php deleted file mode 100644 index e4128b9..0000000 --- a/html/forums/admin/modules/config/calendars.php +++ /dev/null @@ -1,479 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->calendars, "index.php?module=config-calendars"); - -if($mybb->input['action'] == "add" || $mybb->input['action'] == "permissions" || !$mybb->input['action']) -{ - $sub_tabs['manage_calendars'] = array( - 'title' => $lang->manage_calendars, - 'link' => "index.php?module=config-calendars", - 'description' => $lang->manage_calendars_desc - ); - $sub_tabs['add_calendar'] = array( - 'title' => $lang->add_calendar, - 'link' => "index.php?module=config-calendars&action=add", - 'description' => $lang->add_calendar_desc - ); -} - -$plugins->run_hooks("admin_config_calendars_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_calendars_add"); - - if($mybb->request_method == "post") - { - $plugins->run_hooks("admin_config_calendars_add_commit"); - - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!isset($mybb->input['disporder'])) - { - $errors[] = $lang->error_missing_order; - } - - if(!$errors) - { - $calendar = array( - "name" => $db->escape_string($mybb->input['name']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "startofweek" => $mybb->get_input('startofweek', MyBB::INPUT_INT), - "eventlimit" => $mybb->get_input('eventlimit', MyBB::INPUT_INT), - "showbirthdays" => $mybb->get_input('showbirthdays', MyBB::INPUT_INT), - "moderation" => $mybb->get_input('moderation', MyBB::INPUT_INT), - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT), - "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_calendars_add_commit_start"); - - $cid = $db->insert_query("calendars", $calendar); - - $plugins->run_hooks("admin_config_calendars_add_commit_end"); - - // Log admin action - log_admin_action($cid, $mybb->input['name']); - - flash_message($lang->success_calendar_created, 'success'); - admin_redirect("index.php?module=config-calendars"); - } - } - else - { - $mybb->input = array_merge($mybb->input, array( - "allowhtml" => 0, - "eventlimit" => 4, - "disporder" => 1, - "moderation" => 0 - ) - ); - } - - $page->add_breadcrumb_item($lang->add_calendar); - $page->output_header($lang->calendars." - ".$lang->add_calendar); - - $page->output_nav_tabs($sub_tabs, 'add_calendar'); - $form = new Form("index.php?module=config-calendars&action=add", "post"); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_calendar); - $form_container->output_row($lang->name." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->display_order, $lang->display_order_desc, $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $select_list = array($lang->sunday, $lang->monday, $lang->tuesday, $lang->wednesday, $lang->thursday, $lang->friday, $lang->saturday); - $form_container->output_row($lang->week_start, $lang->week_start_desc, $form->generate_select_box('startofweek', $select_list, $mybb->input['startofweek'], array('id' => 'startofweek')), 'startofweek'); - $form_container->output_row($lang->event_limit, $lang->event_limit_desc, $form->generate_numeric_field('eventlimit', $mybb->input['eventlimit'], array('id' => 'eventlimit', 'min' => 0)), 'eventlimit'); - $form_container->output_row($lang->show_birthdays, $lang->show_birthdays_desc, $form->generate_yes_no_radio('showbirthdays', $mybb->input['showbirthdays'], true)); - $form_container->output_row($lang->moderate_events, $lang->moderate_events_desc, $form->generate_yes_no_radio('moderation', $mybb->input['moderation'], true)); - $form_container->output_row($lang->allow_html, "", $form->generate_yes_no_radio('allowhtml', $mybb->input['allowhtml'])); - $form_container->output_row($lang->allow_mycode, "", $form->generate_yes_no_radio('allowmycode', $mybb->input['allowmycode'])); - $form_container->output_row($lang->allow_img, "", $form->generate_yes_no_radio('allowimgcode', $mybb->input['allowimgcode'])); - $form_container->output_row($lang->allow_video, "", $form->generate_yes_no_radio('allowvideocode', $mybb->input['allowvideocode'])); - $form_container->output_row($lang->allow_smilies, "", $form->generate_yes_no_radio('allowsmilies', $mybb->input['allowsmilies'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_calendar); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "permissions") -{ - $usergroups = array(); - - $query = $db->simple_select("calendars", "*", "cid='".$mybb->get_input('cid', MyBB::INPUT_INT)."'"); - $calendar = $db->fetch_array($query); - - // Does the calendar not exist? - if(!$calendar['cid']) - { - flash_message($lang->error_invalid_calendar, 'error'); - admin_redirect("index.php?module=config-calendars"); - } - - $plugins->run_hooks("admin_config_calendars_permissions"); - - $query = $db->simple_select("usergroups", "*", "", array("order" => "name")); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = $usergroup; - } - - $query = $db->simple_select("calendarpermissions", "*", "cid='{$calendar['cid']}'"); - while($existing = $db->fetch_array($query)) - { - $existing_permissions[$existing['gid']] = $existing; - } - - if($mybb->request_method == "post") - { - foreach(array_keys($usergroups) as $group_id) - { - $permissions = $mybb->input['permissions'][$group_id]; - $db->delete_query("calendarpermissions", "cid='{$calendar['cid']}' AND gid='".(int)$group_id."'"); - - if(!$mybb->input['default_permissions'][$group_id]) - { - foreach(array('canviewcalendar','canaddevents','canbypasseventmod','canmoderateevents') as $calendar_permission) - { - if($permissions[$calendar_permission] == 1) - { - $permissions_array[$calendar_permission] = 1; - } - else - { - $permissions_array[$calendar_permission] = 0; - } - } - $permissions_array['gid'] = (int)$group_id; - $permissions_array['cid'] = $calendar['cid']; - $db->insert_query("calendarpermissions", $permissions_array); - } - } - - $plugins->run_hooks("admin_config_calendars_permissions_commit"); - - // Log admin action - log_admin_action($calendar['cid'], $calendar['name']); - - flash_message($lang->success_calendar_permissions_updated, 'success'); - admin_redirect("index.php?module=config-calendars"); - } - - $calendar['name'] = htmlspecialchars_uni($calendar['name']); - $page->add_breadcrumb_item($calendar['name'], "index.php?module=config-calendars&action=edit&cid={$calendar['cid']}"); - $page->add_breadcrumb_item($lang->permissions); - $page->output_header($lang->calendars." - ".$lang->edit_permissions); - - $form = new Form("index.php?module=config-calendars&action=permissions", "post"); - echo $form->generate_hidden_field("cid", $calendar['cid']); - - $table = new Table; - $table->construct_header($lang->permissions_group); - $table->construct_header($lang->permissions_view, array("class" => "align_center", "width" => "10%")); - $table->construct_header($lang->permissions_post_events, array("class" => "align_center", "width" => "10%")); - $table->construct_header($lang->permissions_bypass_moderation, array("class" => "align_center", "width" => "10%")); - $table->construct_header($lang->permissions_moderator, array("class" => "align_center", "width" => "10%")); - $table->construct_header($lang->permissions_all, array("class" => "align_center", "width" => "10%")); - - foreach($usergroups as $usergroup) - { - if($existing_permissions[$usergroup['gid']]) - { - $perms = $existing_permissions[$usergroup['gid']]; - $default_checked = false; - } - else - { - $perms = $usergroup; - $default_checked = true; - } - $perm_check = $all_check = ""; - $all_checked = true; - foreach(array('canviewcalendar','canaddevents','canbypasseventmod','canmoderateevents') as $calendar_permission) - { - if($usergroup[$calendar_permission] == 1) - { - $value = "this.checked"; - } - else - { - $value = "false"; - } - if($perms[$calendar_permission] != 1) - { - $all_checked = false; - } - if($perms[$calendar_permission] == 1) - { - $perms_checked[$calendar_permission] = 1; - } - else - { - $perms_checked[$calendar_permission] = 0; - } - $all_check .= "\$('#permissions_{$usergroup['gid']}_{$calendar_permission}').prop('checked', this.checked);\n"; - $perm_check .= "\$('#permissions_{$usergroup['gid']}_{$calendar_permission}').prop('checked', $value);\n"; - } - $default_click = "if(\$(this).is(':checked')) { $perm_check }"; - $reset_default = "if(!\$(this).is(':checked')) { \$('#permissions_{$usergroup['gid']}_all').prop('checked', false); }\n"; - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - $table->construct_cell("{$usergroup['title']}
".$form->generate_check_box("default_permissions[{$usergroup['gid']}];", 1, "", array("id" => "default_permissions_{$usergroup['gid']}", "checked" => $default_checked, "onclick" => $default_click))." "); - $table->construct_cell($form->generate_check_box("permissions[{$usergroup['gid']}][canviewcalendar]", 1, "", array("id" => "permissions_{$usergroup['gid']}_canviewcalendar", "checked" => $perms_checked['canviewcalendar'], "onclick" => $reset_default)), array('class' => 'align_center')); - $table->construct_cell($form->generate_check_box("permissions[{$usergroup['gid']}][canaddevents]", 1, "", array("id" => "permissions_{$usergroup['gid']}_canaddevents", "checked" => $perms_checked['canaddevents'], "onclick" => $reset_default)), array('class' => 'align_center')); - $table->construct_cell($form->generate_check_box("permissions[{$usergroup['gid']}][canbypasseventmod]", 1, "", array("id" => "permissions_{$usergroup['gid']}_canbypasseventmod", "checked" => $perms_checked['canbypasseventmod'], "onclick" => $reset_default)), array('class' => 'align_center')); - $table->construct_cell($form->generate_check_box("permissions[{$usergroup['gid']}][canmoderateevents]", 1, "", array("id" => "permissions_{$usergroup['gid']}_canmoderateevents", "checked" => $perms_checked['canmoderateevents'], "onclick" => $reset_default)), array('class' => 'align_center')); - $table->construct_cell($form->generate_check_box("permissions[{$usergroup['gid']}][all]", 1, "", array("id" => "permissions_{$usergroup['gid']}_all", "checked" => $all_checked, "onclick" => $all_check)), array('class' => 'align_center')); - $table->construct_row(); - } - $table->output("{$lang->calendar_permissions_for} {$calendar['name']}"); - - if(!$no_results) - { - $buttons[] = $form->generate_submit_button($lang->save_permissions); - $form->output_submit_wrapper($buttons); - } - - $form->end(); - - $page->output_footer(); - -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("calendars", "*", "cid='".$mybb->get_input('cid', MyBB::INPUT_INT)."'"); - $calendar = $db->fetch_array($query); - - // Does the calendar not exist? - if(!$calendar['cid']) - { - flash_message($lang->error_invalid_calendar, 'error'); - admin_redirect("index.php?module=config-calendars"); - } - - $plugins->run_hooks("admin_config_calendars_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!isset($mybb->input['disporder'])) - { - $errors[] = $lang->error_missing_order; - } - - if(!$errors) - { - $updated_calendar = array( - "name" => $db->escape_string($mybb->input['name']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "startofweek" => $mybb->get_input('startofweek', MyBB::INPUT_INT), - "eventlimit" => $mybb->get_input('eventlimit', MyBB::INPUT_INT), - "showbirthdays" => $mybb->get_input('showbirthdays', MyBB::INPUT_INT), - "moderation" => $mybb->get_input('moderation', MyBB::INPUT_INT), - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT), - "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_calendars_edit_commit"); - - $db->update_query("calendars", $updated_calendar, "cid='{$calendar['cid']}'"); - - // Log admin action - log_admin_action($calendar['cid'], $mybb->input['name']); - - flash_message($lang->success_calendar_updated, 'success'); - admin_redirect("index.php?module=config-calendars"); - } - } - - $page->add_breadcrumb_item($lang->edit_calendar); - $page->output_header($lang->calendars." - ".$lang->edit_calendar); - - $sub_tabs['edit_calendar'] = array( - 'title' => $lang->edit_calendar, - 'link' => "index.php?module=config-calendars&action=edit", - 'description' => $lang->edit_calendar_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_calendar'); - $form = new Form("index.php?module=config-calendars&action=edit", "post"); - - echo $form->generate_hidden_field("cid", $calendar['cid']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = $calendar; - } - - $form_container = new FormContainer($lang->edit_calendar); - $form_container->output_row($lang->name." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->display_order." *", $lang->display_order_desc, $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $select_list = array($lang->sunday, $lang->monday, $lang->tuesday, $lang->wednesday, $lang->thursday, $lang->friday, $lang->saturday); - $form_container->output_row($lang->week_start, $lang->week_start_desc, $form->generate_select_box('startofweek', $select_list, $mybb->input['startofweek'], array('id' => 'startofweek')), 'startofweek'); - $form_container->output_row($lang->event_limit, $lang->event_limit_desc, $form->generate_numeric_field('eventlimit', $mybb->input['eventlimit'], array('id' => 'eventlimit', 'min' => 0)), 'eventlimit'); - $form_container->output_row($lang->show_birthdays, $lang->show_birthdays_desc, $form->generate_yes_no_radio('showbirthdays', $mybb->input['showbirthdays'], true)); - $form_container->output_row($lang->moderate_events, $lang->moderate_events_desc, $form->generate_yes_no_radio('moderation', $mybb->input['moderation'], true)); - $form_container->output_row($lang->allow_html, "", $form->generate_yes_no_radio('allowhtml', $mybb->input['allowhtml'])); - $form_container->output_row($lang->allow_mycode, "", $form->generate_yes_no_radio('allowmycode', $mybb->input['allowmycode'])); - $form_container->output_row($lang->allow_img, "", $form->generate_yes_no_radio('allowimgcode', $mybb->input['allowimgcode'])); - $form_container->output_row($lang->allow_video, "", $form->generate_yes_no_radio('allowvideocode', $mybb->input['allowvideocode'])); - $form_container->output_row($lang->allow_smilies, "", $form->generate_yes_no_radio('allowsmilies', $mybb->input['allowsmilies'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_calendar); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("calendars", "*", "cid='".$mybb->get_input('cid', MyBB::INPUT_INT)."'"); - $calendar = $db->fetch_array($query); - - // Does the calendar not exist? - if(!$calendar['cid']) - { - flash_message($lang->error_invalid_calendar, 'error'); - admin_redirect("index.php?module=config-calendars"); - } - - $plugins->run_hooks("admin_config_calendars_delete"); - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-calendars"); - } - - if($mybb->request_method == "post") - { - // Delete the calendar - $db->delete_query("calendars", "cid='{$calendar['cid']}'"); - $db->delete_query("calendarpermissions", "cid='{$calendar['cid']}'"); - $db->delete_query("events", "cid='{$calendar['cid']}'"); - - $plugins->run_hooks("admin_config_calendars_delete_commit"); - - // Log admin action - log_admin_action($calendar['cid'], $calendar['name']); - - flash_message($lang->success_calendar_deleted, 'success'); - admin_redirect("index.php?module=config-calendars"); - } - else - { - $page->output_confirm_action("index.php?module=config-calendars&action=delete&cid={$calendar['cid']}", $lang->confirm_calendar_deletion); - } -} - -if($mybb->input['action'] == "update_order" && $mybb->request_method == "post") -{ - if(!is_array($mybb->input['disporder'])) - { - admin_redirect("index.php?module=config-calendars"); - } - - $plugins->run_hooks("admin_config_calendars_update_order"); - - foreach($mybb->input['disporder'] as $cid => $order) - { - $update_query = array( - "disporder" => (int)$order - ); - $db->update_query("calendars", $update_query, "cid='".(int)$cid."'"); - } - - $plugins->run_hooks("admin_config_calendars_update_order_commit"); - - // Log admin action - log_admin_action(); - - flash_message($lang->success_calendar_orders_updated, 'success'); - admin_redirect("index.php?module=config-calendars"); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->manage_calendars); - - $page->output_nav_tabs($sub_tabs, 'manage_calendars'); - - $form = new Form("index.php?module=config-calendars&action=update_order", "post"); - $table = new Table; - $table->construct_header($lang->calendar); - $table->construct_header($lang->order, array('width' => '5%', 'class' => 'align_center')); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 3, "width" => 300)); - - $query = $db->simple_select("calendars", "*", "", array('order_by' => 'disporder')); - while($calendar = $db->fetch_array($query)) - { - $calendar['name'] = htmlspecialchars_uni($calendar['name']); - $table->construct_cell("{$calendar['name']}"); - $table->construct_cell($form->generate_numeric_field("disporder[{$calendar['cid']}]", $calendar['disporder'], array('id' => 'disporder', 'style' => 'width: 80%', 'class' => 'align_center', 'min' => 0))); - $table->construct_cell("{$lang->edit}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("{$lang->permissions}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_calendar_deletion}')\">{$lang->delete}", array("width" => 100, "class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_calendars, array('colspan' => 5)); - $table->construct_row(); - $no_results = true; - } - - $table->output($lang->manage_calendars); - - if(!$no_results) - { - $buttons[] = $form->generate_submit_button($lang->save_calendar_orders); - $form->output_submit_wrapper($buttons); - } - - $form->end(); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/help_documents.php b/html/forums/admin/modules/config/help_documents.php deleted file mode 100644 index a303c3a..0000000 --- a/html/forums/admin/modules/config/help_documents.php +++ /dev/null @@ -1,624 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->help_documents, "index.php?module=config-help_documents"); - -$plugins->run_hooks("admin_config_help_documents_begin"); - -// Add something -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_help_documents_add"); - - // Add section - if($mybb->input['type'] == "section") - { - $plugins->run_hooks("admin_config_help_documents_add_section"); - - // Do add? - if($mybb->request_method == "post") - { - if(empty($mybb->input['name'])) - { - $errors[] = $lang->error_section_missing_name; - } - - if(empty($mybb->input['description'])) - { - $errors[] = $lang->error_section_missing_description; - } - - if(!isset($mybb->input['enabled'])) - { - $errors[] = $lang->error_section_missing_enabled; - } - - if($mybb->input['enabled'] != 1) - { - $mybb->input['enabled'] = 0; - } - - if(!is_array($errors)) - { - $sql_array = array( - "name" => $db->escape_string($mybb->input['name']), - "description" => $db->escape_string($mybb->input['description']), - "usetranslation" => $mybb->get_input('usetranslation', MyBB::INPUT_INT), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT) - ); - - $sid = $db->insert_query("helpsections", $sql_array); - - $plugins->run_hooks("admin_config_help_documents_add_section_commit"); - - // Log admin action - log_admin_action($sid, $mybb->input['name'], 'section'); - - flash_message($lang->success_help_section_added, 'success'); - admin_redirect('index.php?module=config-help_documents'); - } - } - - $page->add_breadcrumb_item($lang->add_new_section); - $page->output_header($lang->help_documents." - ".$lang->add_new_section); - - $sub_tabs['manage_help_documents'] = array( - 'title' => $lang->manage_help_documents, - 'link' => "index.php?module=config-help_documents" - ); - - $sub_tabs['add_help_document'] = array( - 'title' => $lang->add_new_document, - 'link' => "index.php?module=config-help_documents&action=add&type=document" - ); - - $sub_tabs['add_help_section'] = array( - 'title' => $lang->add_new_section, - 'link' => "index.php?module=config-help_documents&action=add&type=section", - 'description' => $lang->add_new_section_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_help_section'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $query = $db->simple_select("helpsections", "MAX(disporder) as maxdisp"); - $mybb->input['disporder'] = $db->fetch_field($query, "maxdisp")+1; - $mybb->input['enabled'] = 1; - $mybb->input['usetranslation'] = 1; - } - - $form = new Form("index.php?module=config-help_documents&action=add&type=section", "post", "add"); - echo $form->generate_hidden_field("usetranslation", $mybb->input['usetranslation']); - - $form_container = new FormContainer($lang->add_new_section); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio('enabled', $mybb->input['enabled'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_section); - - $form->output_submit_wrapper($buttons); - $form->end(); - } - - // Add page - else - { - $plugins->run_hooks("admin_config_help_documents_add_page"); - - // Do add? - if($mybb->request_method == "post") - { - if(empty($mybb->input['sid'])) - { - $errors[] = $lang->error_missing_sid; - } - - if(empty($mybb->input['name'])) - { - $errors[] = $lang->error_document_missing_name; - } - - if(empty($mybb->input['description'])) - { - $errors[] = $lang->error_document_missing_description; - } - - if(empty($mybb->input['document'])) - { - $errors[] = $lang->error_document_missing_document; - } - - if(!isset($mybb->input['enabled'])) - { - $errors[] = $lang->error_document_missing_enabled; - } - - if($mybb->input['enabled'] != 1) - { - $mybb->input['enabled'] = 0; - } - - if(!is_array($errors)) - { - $sql_array = array( - "sid" => $mybb->get_input('sid', MyBB::INPUT_INT), - "name" => $db->escape_string($mybb->input['name']), - "description" => $db->escape_string($mybb->input['description']), - "document" => $db->escape_string($mybb->input['document']), - "usetranslation" => $mybb->get_input('usetranslation', MyBB::INPUT_INT), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT) - ); - - $hid = $db->insert_query("helpdocs", $sql_array); - - $plugins->run_hooks("admin_config_help_documents_add_page_commit"); - - // Log admin action - log_admin_action($hid, $mybb->input['name'], 'document'); - - flash_message($lang->success_help_document_added, 'success'); - admin_redirect('index.php?module=config-help_documents'); - } - } - - $page->add_breadcrumb_item($lang->add_new_document); - $page->output_header($lang->help_documents." - ".$lang->add_new_document); - - $sub_tabs['manage_help_documents'] = array( - 'title' => $lang->manage_help_documents, - 'link' => "index.php?module=config-help_documents" - ); - - $sub_tabs['add_help_document'] = array( - 'title' => $lang->add_new_document, - 'link' => "index.php?module=config-help_documents&action=add&type=document", - 'description' => $lang->add_new_document_desc - ); - - $sub_tabs['add_help_section'] = array( - 'title' => $lang->add_new_section, - 'link' => "index.php?module=config-help_documents&action=add&type=section" - ); - - $page->output_nav_tabs($sub_tabs, 'add_help_document'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - // Select the largest existing display order - $query = $db->simple_select("helpdocs", "MAX(disporder) as maxdisp"); - $mybb->input['disporder'] = $db->fetch_field($query, "maxdisp")+1; - $mybb->input['enabled'] = 1; - $mybb->input['usetranslation'] = 1; - } - - $form = new Form("index.php?module=config-help_documents&action=add&type=document", "post", "add"); - echo $form->generate_hidden_field("usetranslation", $mybb->input['usetranslation']); - - $form_container = new FormContainer($lang->add_new_document); - $query = $db->simple_select("helpsections", "sid, name"); - - $sections = array(); - while($section = $db->fetch_array($query)) - { - $sections[$section['sid']] = $section['name']; - } - $form_container->output_row($lang->section." *", "", $form->generate_select_box("sid", $sections, $mybb->input['sid'], array('id' => 'sid')), 'sid'); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->document." *", "", $form->generate_text_area('document', $mybb->input['document'], array('id' => 'document')), 'document'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio('enabled', $mybb->input['enabled'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_document); - - $form->output_submit_wrapper($buttons); - $form->end(); - } - - $page->output_footer(); -} - -// Edit something -if($mybb->input['action'] == "edit") -{ - $plugins->run_hooks("admin_config_help_documents_edit"); - - // Edit a section - if($mybb->input['sid'] && !$mybb->input['hid']) - { - $query = $db->simple_select("helpsections", "*", "sid = '".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); - $section = $db->fetch_array($query); - - $plugins->run_hooks("admin_config_help_documents_edit_section"); - - // Do edit? - if($mybb->request_method == "post") - { - $sid = $mybb->get_input('sid', MyBB::INPUT_INT); - - if(empty($sid)) - { - $errors[] = $lang->error_invalid_sid; - } - - if(empty($mybb->input['name'])) - { - $errors[] = $lang->error_section_missing_name; - } - - if(empty($mybb->input['description'])) - { - $errors[] = $lang->error_section_missing_description; - } - - if(!isset($mybb->input['enabled'])) - { - $errors[] = $lang->error_section_missing_enabled; - } - - if($mybb->input['enabled'] != 1) - { - $mybb->input['enabled'] = 0; - } - - if(!is_array($errors)) - { - $sql_array = array( - "name" => $db->escape_string($mybb->input['name']), - "description" => $db->escape_string($mybb->input['description']), - "usetranslation" => $mybb->get_input('usetranslation', MyBB::INPUT_INT), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_help_documents_edit_section_commit"); - - $db->update_query("helpsections", $sql_array, "sid = '{$sid}'"); - - // Log admin action - log_admin_action($sid, $mybb->input['name'], 'section'); - - flash_message($lang->success_help_section_updated, 'success'); - admin_redirect('index.php?module=config-help_documents'); - } - } - - $page->add_breadcrumb_item($lang->edit_section); - $page->output_header($lang->help_documents." - ".$lang->edit_section); - - - $sub_tabs['edit_help_section'] = array( - 'title' => $lang->edit_section, - 'link' => "index.php?module=config-help_documents&action=edit&sid=".$section['sid'], - 'description' => $lang->edit_section_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_help_section'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['sid'] = $section['sid']; - $mybb->input['name'] = $section['name']; - $mybb->input['description'] = $section['description']; - $mybb->input['disporder'] = $section['disporder']; - $mybb->input['enabled'] = $section['enabled']; - $mybb->input['usetranslation'] = $section['usetranslation']; - } - - $form = new Form("index.php?module=config-help_documents&action=edit", "post", "edit"); - - echo $form->generate_hidden_field("sid", $section['sid']); - echo $form->generate_hidden_field("usetranslation", $mybb->input['usetranslation']); - - $form_container = new FormContainer($lang->edit_section." ({$lang->id} ".$section['sid'].")"); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio('enabled', $mybb->input['enabled'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->edit_section); - - $form->output_submit_wrapper($buttons); - $form->end(); - } - - // Edit document - else - { - $plugins->run_hooks("admin_config_help_documents_edit_page"); - - // Do edit? - if($mybb->request_method == "post") - { - $hid = $mybb->get_input('hid', MyBB::INPUT_INT); - - if(empty($hid)) - { - $errors[] = $lang->error_invalid_sid; - } - - if(empty($mybb->input['name'])) - { - $errors[] = $lang->error_document_missing_name; - } - - if(empty($mybb->input['description'])) - { - $errors[] = $lang->error_document_missing_description; - } - - if(empty($mybb->input['document'])) - { - $errors[] = $lang->error_document_missing_document; - } - - if(!isset($mybb->input['enabled'])) - { - $errors[] = $lang->error_document_missing_enabled; - } - - if($mybb->input['enabled'] != 1) - { - $mybb->input['enabled'] = 0; - } - - if(!is_array($errors)) - { - $sql_array = array( - "sid" => $mybb->get_input('sid', MyBB::INPUT_INT), - "name" => $db->escape_string($mybb->input['name']), - "description" => $db->escape_string($mybb->input['description']), - "document" => $db->escape_string($mybb->input['document']), - "usetranslation" => $mybb->get_input('usetranslation', MyBB::INPUT_INT), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_help_documents_edit_page_commit"); - - $db->update_query("helpdocs", $sql_array, "hid = '{$hid}'"); - - // Log admin action - log_admin_action($hid, $mybb->input['name'], 'document'); - - flash_message($lang->success_help_document_updated, 'success'); - admin_redirect('index.php?module=config-help_documents'); - } - } - - $page->add_breadcrumb_item($lang->edit_document); - $page->output_header($lang->help_documents." - ".$lang->edit_document); - - - $sub_tabs['edit_help_document'] = array( - 'title' => $lang->edit_document, - 'link' => "index.php?module=config-help_documents&action=edit&hid=".$hid, - 'description' => $lang->edit_document_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_help_document'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $query = $db->simple_select("helpdocs", "*", "hid = '".$mybb->get_input('hid', MyBB::INPUT_INT)."'"); - $doc = $db->fetch_array($query); - $mybb->input['hid'] = $doc['hid']; - $mybb->input['sid'] = $doc['sid']; - $mybb->input['name'] = $doc['name']; - $mybb->input['description'] = $doc['description']; - $mybb->input['document'] = $doc['document']; - $mybb->input['disporder'] = $doc['disporder']; - $mybb->input['enabled'] = $doc['enabled']; - $mybb->input['usetranslation'] = $doc['usetranslation']; - } - - $form = new Form("index.php?module=config-help_documents&action=edit", "post", "edit"); - - echo $form->generate_hidden_field("hid", $doc['hid']); - echo $form->generate_hidden_field("usetranslation", $mybb->input['usetranslation']); - - $form_container = new FormContainer($lang->edit_document." ({$lang->id} ".$doc['hid'].")"); - - $sections = array(); - $query = $db->simple_select("helpsections", "sid, name"); - while($section = $db->fetch_array($query)) - { - $sections[$section['sid']] = $section['name']; - } - $form_container->output_row($lang->section." *", "", $form->generate_select_box("sid", $sections, $mybb->input['sid']), 'sid'); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->document." *", "", $form->generate_text_area('document', $mybb->input['document'], array('id' => 'document')), 'document'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio('enabled', $mybb->input['enabled'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->edit_document); - - $form->output_submit_wrapper($buttons); - $form->end(); - } - - $page->output_footer(); -} - -// Delete something -if($mybb->input['action'] == "delete") -{ - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-help_documents"); - } - - $plugins->run_hooks("admin_config_help_documents_delete"); - - // Do delete something? - if($mybb->request_method == "post") - { - // Delete section - if(isset($mybb->input['sid'])) - { - $sid = $mybb->get_input('sid', MyBB::INPUT_INT); - - $query = $db->simple_select("helpsections", "*", "sid='{$sid}'"); - $section = $db->fetch_array($query); - - // Invalid section? - if(!$section['sid']) - { - flash_message($lang->error_missing_section_id, 'error'); - admin_redirect("index.php?module=config-help_documents"); - } - - // Delete section and its documents - $db->delete_query("helpsections", "sid = '{$section['sid']}'", 1); - $db->delete_query("helpdocs", "sid = '{$section['sid']}'"); - - $plugins->run_hooks("admin_config_help_documents_delete_section_commit"); - - // Log admin action - log_admin_action($section['sid'], $section['name'], 'section'); - - flash_message($lang->success_section_deleted, 'success'); - admin_redirect("index.php?module=config-help_documents"); - } - - // Delete document - else - { - $hid = $mybb->get_input('hid', MyBB::INPUT_INT); - - $query = $db->simple_select("helpdocs", "*", "hid='{$hid}'"); - $doc = $db->fetch_array($query); - - // Invalid document? - if(!$doc['hid']) - { - flash_message($lang->error_missing_hid, 'error'); - admin_redirect("index.php?module=config-help_documents"); - } - - $db->delete_query("helpdocs", "hid = '{$doc['hid']}'", 1); - - $plugins->run_hooks("admin_config_help_documents_delete_page_commit"); - - // Log admin action - log_admin_action($doc['hid'], $doc['name'], 'document'); - - flash_message($lang->success_document_deleted, 'success'); - admin_redirect("index.php?module=config-help_documents"); - } - } - // Show form for deletion - else - { - // Section - if(isset($mybb->input['sid'])) - { - $sid = $mybb->get_input('sid', MyBB::INPUT_INT); - $page->output_confirm_action("index.php?module=config-help_documents&action=delete&sid={$sid}", $lang->confirm_section_deletion); - } - // Document - else - { - $hid = $mybb->get_input('hid', MyBB::INPUT_INT); - $page->output_confirm_action("index.php?module=config-help_documents&action=delete&hid={$hid}", $lang->confirm_document_deletion); - } - } -} - -// List document and sections -if(!$mybb->input['action']) -{ - $page->output_header($lang->help_documents); - - $sub_tabs['manage_help_documents'] = array( - 'title' => $lang->manage_help_documents, - 'link' => "index.php?module=config-help_documents", - 'description'=> $lang->manage_help_documents_desc - ); - - $sub_tabs['add_help_document'] = array( - 'title' => $lang->add_new_document, - 'link' => "index.php?module=config-help_documents&action=add&type=document" - ); - - $sub_tabs['add_help_section'] = array( - 'title' => $lang->add_new_section, - 'link' => "index.php?module=config-help_documents&action=add&type=section" - ); - - $plugins->run_hooks("admin_config_help_documents_start"); - - $page->output_nav_tabs($sub_tabs, 'manage_help_documents'); - - $table = new Table; - $table->construct_header($lang->section_document); - $table->construct_header($lang->controls, array('class' => "align_center", 'colspan' => 2, "width" => "150")); - - $query = $db->simple_select("helpsections", "*", "", array('order_by' => "disporder")); - while($section = $db->fetch_array($query)) - { - $table->construct_cell("
{$section['name']}
{$section['description']}
"); - $table->construct_cell("{$lang->edit}", array("class" => "align_center", "width" => '60')); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_section_deletion}')\">{$lang->delete}", array("class" => "align_center", "width" => '90')); - $table->construct_row(); - - $query2 = $db->simple_select("helpdocs", "*", "sid='{$section['sid']}'", array('order_by' => "disporder")); - while($doc = $db->fetch_array($query2)) - { - $table->construct_cell("
{$doc['name']}
{$doc['description']}
"); - $table->construct_cell("{$lang->edit}", array("class" => "align_center", "width" => '60')); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_document_deletion}')\">{$lang->delete}", array("class" => "align_center", "width" => '90')); - $table->construct_row(); - } - } - - // No documents message - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_help_documents, array('colspan' => 3)); - $table->construct_row(); - } - - $table->output($lang->help_documents); - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/index.html b/html/forums/admin/modules/config/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/modules/config/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/modules/config/languages.php b/html/forums/admin/modules/config/languages.php deleted file mode 100644 index ef90833..0000000 --- a/html/forums/admin/modules/config/languages.php +++ /dev/null @@ -1,1052 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$languages = $lang->get_languages(); - -$page->add_breadcrumb_item($lang->languages, "index.php?module=config-languages"); - -$plugins->run_hooks("admin_config_languages_begin"); - -if($mybb->input['action'] == "edit_properties") -{ - $editlang = basename($mybb->input['lang']); - $file = MYBB_ROOT."inc/languages/".$editlang.".php"; - if(!file_exists($file)) - { - flash_message($lang->error_invalid_file, 'error'); - admin_redirect("index.php?module=config-languages"); - } - - $plugins->run_hooks("admin_config_languages_edit_properties"); - - if($mybb->request_method == "post") - { - if(!is_writable($file)) - { - flash_message($lang->error_cannot_write_to_file, 'error'); - admin_redirect("index.php?module=config-languages"); - } - - foreach($mybb->input['info'] as $key => $info) - { - $info = str_replace("\\", "\\\\", $info); - $info = str_replace('$', '\$', $info); - - if($key == 'admin' || $key == 'rtl') - { - $info = (int)$info; - } - - $newlanginfo[$key] = str_replace("\"", '\"', $info); - } - - // Get contents of existing file - require $file; - - // Make the contents of the new file - $newfile = " on all pages -\$langinfo['htmllang'] = \"{$newlanginfo['htmllang']}\"; - -// Sets the character set, blank uses the default. -\$langinfo['charset'] = \"{$newlanginfo['charset']}\";\n"; - - // Put it in! - if($file = fopen($file, "w")) - { - fwrite($file, $newfile); - fclose($file); - - $plugins->run_hooks("admin_config_languages_edit_properties_commit"); - - // Log admin action - log_admin_action($editlang); - - flash_message($lang->success_langprops_updated, 'success'); - admin_redirect("index.php?module=config-languages&action=edit&lang={$editlang}&editwith={$editwith}"); - } - else - { - $errors[] = $lang->error_cannot_write_to_file; - } - } - - $page->add_breadcrumb_item(preg_replace("<\?|\?>", "?", $languages[$editlang]), "index.php?module=config-languages&action=edit&lang={$editlang}"); - $page->add_breadcrumb_item($lang->nav_editing_set); - - $page->output_header($lang->languages); - - $sub_tabs['edit_properties'] = array( - "title" => $lang->edit_properties, - "link" => "index.php?module=config-languages", - "description" => $lang->edit_properties_desc - ); - $page->output_nav_tabs($sub_tabs, "edit_properties"); - - // Get language info - require $file; - - $form = new Form("index.php?module=config-languages&action=edit_properties", "post", "editset"); - echo $form->generate_hidden_field("lang", $editlang); - echo $form->generate_hidden_field("info[author]", $langinfo['author']); - echo $form->generate_hidden_field("info[website]", $langinfo['website']); - echo $form->generate_hidden_field("info[version]", $langinfo['version']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - if($langinfo['admin']) - { - $mybb->input['info']['admin'] = 1; - } - else - { - $mybb->input['info']['admin'] = 0; - } - - if($langinfo['rtl']) - { - $mybb->input['info']['rtl'] = 1; - } - else - { - $mybb->input['info']['rtl'] = 0; - } - - $mybb->input['info']['name'] = $langinfo['name']; - $mybb->input['info']['htmllang'] = $langinfo['htmllang']; - $mybb->input['info']['charset'] = $langinfo['charset']; - } - - $form_container = new FormContainer($lang->edit_properties); - - $form_container->output_row($lang->friendly_name." *", "", $form->generate_text_box('info[name]', $mybb->input['info']['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->language_in_html." *", "", $form->generate_text_box('info[htmllang]', $mybb->input['info']['htmllang'], array('id' => 'htmllang')), 'htmllang'); - $form_container->output_row($lang->charset." *", "", $form->generate_text_box('info[charset]', $mybb->input['info']['charset'], array('id' => 'charset')), 'charset'); - $form_container->output_row($lang->rtl." *", "", $form->generate_yes_no_radio('info[rtl]', $mybb->input['info']['rtl'], array('id' => 'rtl')), 'rtl'); - $form_container->output_row($lang->admin." *", "", $form->generate_yes_no_radio('info[admin]', $mybb->input['info']['admin'], array('id' => 'admin')), 'admin'); - - // Check if file is writable, before allowing submission - if(!is_writable($file)) - { - $no_write = 1; - $page->output_alert($lang->alert_note_cannot_write); - } - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_language_file, array('disabled' => $no_write)); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "quick_phrases") -{ - // Validate input - $editlang = basename($mybb->input['lang']); - $folder = MYBB_ROOT."inc/languages/".$editlang."/"; - - $page->add_breadcrumb_item(preg_replace("<\?|\?>", "?", $languages[$editlang]), "index.php?module=config-languages&action=quick_edit&lang={$editlang}"); - - // Validate that this language pack really exists - if(file_exists(MYBB_ROOT."inc/languages/".$editlang.".php")) - { - // Then validate language pack folders (and try to fix them if missing) - @mkdir($folder); - @mkdir($folder."admin"); - } - - if(!file_exists($folder) || !file_exists($folder."admin")) - { - flash_message($lang->error_folders_fail, 'error'); - admin_redirect("index.php?module=config-languages"); - } - - $plugins->run_hooks("admin_config_languages_quick_phrases"); - - $quick_phrases = array( - 'member.lang.php' => array( - 'agreement' => $lang->quickphrases_agreement, - 'agreement_1' => $lang->quickphrases_agreement_1, - 'agreement_2' => $lang->quickphrases_agreement_2, - 'agreement_3' => $lang->quickphrases_agreement_3, - 'agreement_4' => $lang->quickphrases_agreement_4, - 'agreement_5' => $lang->quickphrases_agreement_5 - ), - 'messages.lang.php' => array( - 'error_nopermission_guest_1' => $lang->quickphrases_error_nopermission_guest_1, - 'error_nopermission_guest_2' => $lang->quickphrases_error_nopermission_guest_2, - 'error_nopermission_guest_3' => $lang->quickphrases_error_nopermission_guest_3, - 'error_nopermission_guest_4' => $lang->quickphrases_error_nopermission_guest_4 - ) - ); - - if($mybb->request_method == 'post') - { - if($mybb->request_method == 'post') - { - // We have more than one file to edit, lets set flag for all of them. - $editsuccess = true; - foreach($quick_phrases as $file => $phrases) - { - @include $folder.$file; - $contents_file = (array)$l; - unset($l); - - foreach($phrases as $key => $value) - { - // validation - we fetch from input only variables that are defined in $quick_phrases array - $contents_file[$key] = $mybb->input['edit'][$key]; - } - // Save edited language file - if($fp = @fopen($folder.$file, "w")) - { - // We need info about edited language files to generate credits for our file - require MYBB_ROOT."inc/languages/".$editlang.".php"; - - // Lets make nice credits header in language file - $lang_file_credits = "#i", " ", $langinfo['name'])."\n"; - $lang_file_credits .= "// Author of the language pack : ".preg_replace("#<\?|\?>#i", " ", $langinfo['author'])."\n"; - $lang_file_credits .= "// Language pack translators website : ".preg_replace("#<\?|\?>#i", " ", $langinfo['website'])."\n"; - $lang_file_credits .= "// Compatible version of MyBB : ".preg_replace("#<\?|\?>#i", " ", $langinfo['version'])."\n"; - $lang_file_credits .= "// Last edited in MyBB Editor by : ".preg_replace("#<\?|\?>#i", " ", $mybb->user['username'])."\n"; - $lang_file_credits .= "// Last edited date : ".gmdate("r")."\n"; - $lang_file_credits .= "// ".str_repeat('-',80)."\n\n"; - - $contents_wfile = $lang_file_credits; - foreach($contents_file as $key => $value) - { - $contents_wfile .= "\$l['".$key."'] = ".var_export($value, true).";\n"; - } - - flock($fp, LOCK_EX); - fwrite($fp, $contents_wfile); - flock($fp, LOCK_UN); - fclose($fp); - } - else - { - // One of files failed - $editsuccess = false; - } - } - - if($editsuccess == true) - { - // Log admin action - log_admin_action($editlang); - - flash_message($lang->success_quickphrases_updated, 'success'); - admin_redirect('index.php?module=config-languages&action=edit&lang='.$editlang); - } - } - } - - $page->output_header($lang->languages); - - $sub_tabs['language_files'] = array( - 'title' => $lang->language_files, - 'link' => "index.php?module=config-languages&action=edit&lang=".$editlang, - 'description' => $lang->language_files_desc - ); - - $sub_tabs['quick_phrases'] = array( - 'title' => $lang->quick_phrases, - 'link' => "index.php?module=config-languages&action=quick_phrases&lang=".$editlang, - 'description' => $lang->quick_phrases_desc - ); - - $page->output_nav_tabs($sub_tabs, 'quick_phrases'); - - $form = new Form('index.php?module=config-languages&action=quick_phrases&lang='.$editlang, 'post', 'quick_phrases'); - - if($errors) - { - $page->output_inline_error($errors); - } - - $table = new Table; - - // Check if files are writable, before allowing submission - $no_write = null; - foreach($quick_phrases as $file => $phrases) - { - if(file_exists($folder.$file) && !is_writable($folder.$file) || !is_writable($folder)) - { - $no_write = 1; - } - } - - if($no_write) - { - $page->output_alert($lang->alert_note_cannot_write); - } - - $form_container = new FormContainer($lang->quick_phrases); - - foreach($quick_phrases as $file => $phrases) - { - unset($langinfo); - @include MYBB_ROOT."inc/languages/".$editlang.".php"; - $quickphrases_dir_class = " langeditor_ltr"; - if((int)$langinfo['rtl'] > 0) - { - $quickphrases_dir_class = " langeditor_rtl"; - } - - @include $folder.$file; - foreach($phrases as $phrase => $description) - { - $value = $l[$phrase]; - if(my_strtolower($langinfo['charset']) == "utf-8") - { - $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $value); - } - else - { - $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return "&#".hexdec($matches[1]).";";'), $value); - } - - $form_container->output_row($description, $phrase, $form->generate_text_area("edit[$phrase]", $value, array('id' => 'lang_'.$phrase, 'rows' => 2, 'class' => "langeditor_textarea_edit {$quickphrases_dir_class}")), 'lang_'.$phrase, array('width' => '50%')); - } - } - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_language_file, array('disabled' => $no_write)); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - // Validate input - $editlang = basename($mybb->input['lang']); - $folder = MYBB_ROOT."inc/languages/".$editlang."/"; - - $page->add_breadcrumb_item(preg_replace("<\?|\?>", "?", $languages[$editlang]), "index.php?module=config-languages&action=edit&lang={$editlang}"); - - $editwith = basename($mybb->input['editwith']); - $editwithfolder = ''; - - if($editwith) - { - $editwithfolder = MYBB_ROOT."inc/languages/".$editwith."/"; - } - - // Validate that edited language pack really exists - if(file_exists(MYBB_ROOT."inc/languages/".$editlang.".php")) - { - // Then validate edited language pack folders (and try to fix them if missing) - @mkdir($folder); - @mkdir($folder."admin"); - } - - if(!file_exists($folder) || !file_exists($folder."admin")) - { - flash_message($lang->error_folders_fail, 'error'); - admin_redirect("index.php?module=config-languages"); - } - - // If we edit in compare mode, verify that at least folders of compared language exists - if($editwithfolder && (!file_exists($editwithfolder) || !file_exists($editwithfolder))) - { - flash_message($lang->error_invalid_set, 'error'); - admin_redirect("index.php?module=config-languages"); - } - - $plugins->run_hooks("admin_config_languages_edit"); - - if(isset($mybb->input['file'])) - { - // Validate input - $file = basename($mybb->input['file']); - if($mybb->input['inadmin'] == 1) - { - $file = 'admin/'.$file; - } - $page->add_breadcrumb_item($file); - - $editfile = $folder.$file; - $withfile = ''; - - $editwithfile = ''; - if($editwithfolder) - { - $editwithfile = $editwithfolder.$file; - } - - if($mybb->request_method == "post") - { - // Save edited phrases to language file - - // To validate input - build array of keys that allready exist in files - @include $editfile; - $valid_keys = (array)$l; - unset($l); - @include $editwithfile; - $valid_keys = array_merge($valid_keys, (array)$l); - unset($l); - - // Then fetch from input only valid keys - foreach($valid_keys as $key => $value) - { - $contents_wfile .= "\$l['".$key."'] = ".var_export($mybb->input['edit'][$key], true).";\n"; - } - - // Save edited language file - if($fp = @fopen($editfile, "w")) - { - // We need info about edited language files to generate credits for our file - require MYBB_ROOT."inc/languages/".$editlang.".php"; - - // Lets make nice credits header in language file - $lang_file_credits = "#i", " ", $langinfo['name'])."\n"; - $lang_file_credits .= "// Author of the language pack : ".preg_replace("#<\?|\?>#i", " ", $langinfo['author'])."\n"; - $lang_file_credits .= "// Language pack translators website : ".preg_replace("#<\?|\?>#i", " ", $langinfo['website'])."\n"; - $lang_file_credits .= "// Compatible version of MyBB : ".preg_replace("#<\?|\?>#i", " ", $langinfo['version'])."\n"; - $lang_file_credits .= "// Last edited in MyBB Editor by : ".preg_replace("#<\?|\?>#i", " ", $mybb->user['username'])."\n"; - $lang_file_credits .= "// Last edited date : ".gmdate("r")."\n"; - $lang_file_credits .= "// ".str_repeat('-',80)."\n\n"; - - $contents_wfile = $lang_file_credits.$contents_wfile; - - flock($fp, LOCK_EX); - fwrite($fp, $contents_wfile); - flock($fp, LOCK_UN); - fclose($fp); - - $plugins->run_hooks("admin_config_languages_edit_commit"); - - // Log admin action - log_admin_action($editlang, $editfile, $mybb->get_input('inadmin', MyBB::INPUT_INT)); - - flash_message($lang->success_langfile_updated, 'success'); - admin_redirect("index.php?module=config-languages&action=edit&lang={$editlang}&editwith={$editwith}"); - } - else - { - $errors[] = $lang->error_cannot_write_to_file; - } - } - - unset($langinfo); - @include MYBB_ROOT."inc/languages/".$editwith.".php"; - $editwith_dir_class = " langeditor_ltr"; - if((int)$langinfo['rtl'] > 0) - { - $editwith_dir_class = " langeditor_rtl"; - } - unset($langinfo); - @include MYBB_ROOT."inc/languages/".$editlang.".php"; - $editlang_dir_class = " langeditor_ltr"; - if((int)$langinfo['rtl'] > 0) - { - $editlang_dir_class = " langeditor_rtl"; - } - - // Build and output form with edited phrases - - // Get file being edited in an array - @include $editfile; - $editvars = (array)$l; - unset($l); - - $withvars = array(); - // Get edit with file in an array if exists - if($editwithfile) - { - // File we will compare to, may not exists, but dont worry we will auto switch to solo mode later if so - @include $editwithfile; - $withvars = (array)$l; - unset($l); - } - - // Start output - $page->output_header($lang->languages); - - $sub_tabs['edit_language_variables'] = array( - "title" => $lang->edit_language_variables, - "link" => "index.php?module=config-languages", - "description" => $lang->edit_language_variables_desc - ); - $page->output_nav_tabs($sub_tabs, "edit_language_variables"); - - $form = new Form("index.php?module=config-languages&action=edit", "post", "edit"); - echo $form->generate_hidden_field("file", htmlspecialchars_uni($file)); - echo $form->generate_hidden_field("lang", $editlang); - echo $form->generate_hidden_field("editwith", $editwith); - echo $form->generate_hidden_field("inadmin", $mybb->get_input('inadmin', MyBB::INPUT_INT)); - if($errors) - { - $page->output_inline_error($errors); - } - - // Check if file is writable, before allowing submission - $no_write = null; - if(file_exists($editfile) && !is_writable($editfile) || !is_writable($folder)) - { - $no_write = 1; - $page->output_alert($lang->alert_note_cannot_write); - } - - $form_container = new FormContainer(htmlspecialchars_uni($file)); - if($editwithfile && $withvars) - { - // Editing with another file - - $form_container->output_row_header(preg_replace("<\?|\?>", "?", $languages[$editwith])); - $form_container->output_row_header(preg_replace("<\?|\?>", "?", $languages[$editlang])); - - foreach($withvars as $key => $value) - { - if(my_strtolower($langinfo['charset']) == "utf-8") - { - $withvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $withvars[$key]); - $editvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $editvars[$key]); - } - else - { - $withvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $withvars[$key]); - $editvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return "&#".hexdec($matches[1]).";";'), $editvars[$key]); - } - - // Find problems and differences in editfile in comparision to editwithfile - - // Count {x} in left and right variable - $withvars_value_cbvCount = preg_match_all("/{[ \t]*\d+[ \t]*}/", $withvars[$key], $matches); - $editvars_value_cbvCount = preg_match_all("/{[ \t]*\d+[ \t]*}/", $editvars[$key], $matches); - - // If left contain something but right is empty or only spaces || count of {x} are different betwin left and right - if($withvars[$key] && !$editvars[$key] || $withvars_value_cbvCount != $editvars_value_cbvCount) - { - $textarea_issue_class = " langeditor_textarea_issue"; - } - else - { - $textarea_issue_class = ""; - } - - $form_container->output_row($key, "", $form->generate_text_area("", $withvars[$key], array('readonly' => true, 'rows' => 2, 'class' => "langeditor_textarea_editwith {$editwith_dir_class}")), "", array('width' => '50%', 'skip_construct' => true)); - $form_container->output_row($key, "", $form->generate_text_area("edit[$key]", $editvars[$key], array('id' => 'lang_'.$key, 'rows' => 2, 'class' => "langeditor_textarea_edit {$textarea_issue_class} {$editlang_dir_class}")), 'lang_'.$key, array('width' => '50%')); - } - - // Create form fields for extra variables that are present only in edited file - $present_in_edit_vars_only = (array)array_diff_key($editvars, $withvars); - if($present_in_edit_vars_only) - { - foreach($present_in_edit_vars_only as $key => $value) - { - if(my_strtolower($langinfo['charset']) == "utf-8") - { - $editvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $editvars[$key]); - } - else - { - $editvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return "&#".hexdec($matches[1]).";";'), $editvars[$key]); - } - - $form_container->output_row("", "", "", "", array('width' => '50%', 'skip_construct' => true)); - $form_container->output_row($key, "", $form->generate_text_area("edit[$key]", $editvars[$key], array('id' => 'lang_'.$key, 'rows' => 2, 'class' => "langeditor_textarea_edit {$editlang_dir_class}")), 'lang_'.$key, array('width' => '50%')); - } - } - - } - else - { - // Editing individually - $form_container->output_row_header(preg_replace("<\?|\?>", "?", $languages[$editlang])); - - // Make each editing row from current file that we edit - foreach($editvars as $key => $value) - { - if(my_strtolower($langinfo['charset']) == "utf-8") - { - $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $value); - } - else - { - $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return "&#".hexdec($matches[1]).";";'), $value); - } - $form_container->output_row($key, "", $form->generate_text_area("edit[$key]", $value, array('id' => 'lang_'.$key, 'rows' => 2, 'class' => "langeditor_textarea_edit {$editlang_dir_class}")), 'lang_'.$key, array('width' => '50%')); - } - } - $form_container->end(); - - if(!count($editvars)) - { - $no_write = 1; - } - - $buttons[] = $form->generate_submit_button($lang->save_language_file, array('disabled' => $no_write)); - - $form->output_submit_wrapper($buttons); - $form->end(); - } - else - { - // Build and output list of available language files - - $page->output_header($lang->languages); - - $sub_tabs['language_files'] = array( - 'title' => $lang->language_files, - 'link' => "index.php?module=config-languages&action=edit&lang=".$editlang, - 'description' => $lang->language_files_desc - ); - - $sub_tabs['quick_phrases'] = array( - 'title' => $lang->quick_phrases, - 'link' => "index.php?module=config-languages&action=quick_phrases&lang=".$editlang, - 'description' => $lang->quick_phrases_desc - ); - - $page->output_nav_tabs($sub_tabs, 'language_files'); - - if(!file_exists(MYBB_ROOT."inc/languages/".$editlang.".php")) - { - flash_message($lang->error_invalid_set, 'error'); - admin_redirect("index.php?module=config-languages"); - } - require MYBB_ROOT."inc/languages/".$editlang.".php"; - - $table = new Table; - if($editwithfolder) - { - $table->construct_header(preg_replace("<\?|\?>", "?", $languages[$editwith])); - $table->construct_header($lang->phrases, array("class" => "align_center", "width" => 100)); - $table->construct_header(preg_replace("<\?|\?>", "?", $languages[$editlang])); - $table->construct_header($lang->issues, array("class" => "align_center", "width" => 100)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 100)); - } - else - { - $table->construct_header(preg_replace("<\?|\?>", "?", $languages[$editlang])); - $table->construct_header($lang->phrases, array("class" => "align_center", "width" => 100)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 100)); - } - - // Get files in main folder - $filenames = array(); - if($handle = opendir($folder)) - { - while(false !== ($file = readdir($handle))) - { - if(preg_match("#\.lang\.php$#", $file)) - { - $filenames[] = $file; - } - } - closedir($handle); - sort($filenames); - } - - $edit_colspan = 3; - // Get files from folder we want to peek at (if possible) - if($editwithfolder) - { - $edit_colspan = 5; - $filenameswith = array(); - if($handle = opendir($editwithfolder)) - { - while(false !== ($file = readdir($handle))) - { - if(preg_match("#\.lang\.php$#", $file)) - { - $filenameswith[] = $file; - } - } - closedir($handle); - sort($filenameswith); - } - } - - if($editwithfolder) - { - $files_left = array_diff($filenameswith, $filenames); - $files_right = array_diff($filenames, $filenameswith); - $files_both = array_intersect($filenameswith, $filenames); - - foreach($files_left as $key => $file) - { - @include $editwithfolder.$file; - $editvars_left = (array)$l; - unset($l); - - $icon_issues = ""; - if(count($editvars_left) >0) - { - $icon_issues = ""; - } - - $table->construct_cell($file, array("class" => "langeditor_editwithfile")); - $table->construct_cell(count($editvars_left), array("class" => "langeditor_phrases")); - $table->construct_cell("", array("class" => "langeditor_editfile")); - $table->construct_cell($icon_issues, array("class" => "langeditor_issues")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - foreach($files_right as $key => $file) - { - @include $folder.$file; - $editvars_right = (array)$l; - unset($l); - - $icon_issues = ""; - if(count($editvars_right >0)) - { - $icon_issues = ""; - } - - $table->construct_cell("", array("class" => "langeditor_editwithfile")); - $table->construct_cell("", array("class" => "langeditor_phrases")); - $table->construct_cell($file, array("class" => "langeditor_editfile")); - $table->construct_cell($icon_issues, array("class" => "langeditor_issues")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - foreach($files_both as $key => $file) - { - @include $editwithfolder.$file; - $editvars_left = (array)$l; - unset($l); - @include $folder.$file; - $editvars_right = (array)$l; - unset($l); - - $table->construct_cell($file, array("class" => "langeditor_editwithfile")); - $table->construct_cell(count($editvars_left), array("class" => "langeditor_phrases")); - $table->construct_cell($file, array("class" => "langeditor_editfile")); - - $icon_issues = ""; - - // Find problems and differences in editfile in comparision to editwithfile - foreach($editvars_left as $editvars_left_key => $editvars_left_value) - { - // Count {x} in left and right variable - $editvars_left_value_cbvCount = preg_match_all("/{[ \t]*\d+[ \t]*}/", $editvars_left_value, $matches); - $editvars_right_value_cbvCount = preg_match_all("/{[ \t]*\d+[ \t]*}/", $editvars_right[$editvars_left_key], $matches); - // If left contain something but right is empty || count of {x} are different betwin left and right - if($editvars_left_value && !$editvars_right[$editvars_left_key] || $editvars_left_value_cbvCount != $editvars_right_value_cbvCount) - { - $icon_issues = ""; - // One difference is enought, so lets abort checking for more. - break; - } - } - - $table->construct_cell($icon_issues, array("class" => "langeditor_issues")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - } - else - { - foreach($filenames as $key => $file) - { - @include $folder.$file; - $editvars_count = (array)$l; - unset($l); - - $table->construct_cell($file, array("class" => "langeditor_editfile")); - $table->construct_cell(count($editvars_count), array("class" => "langeditor_phrases")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_language_files_front_end, array('colspan' => $edit_colspan)); - $table->construct_row(); - } - - $table->output($lang->front_end); - - if($langinfo['admin'] != 0) - { - $table = new Table; - if($editwithfolder) - { - $table->construct_header(preg_replace("<\?|\?>", "?", $languages[$editwith])); - $table->construct_header($lang->phrases, array("class" => "align_center", "width" => 100)); - $table->construct_header(preg_replace("<\?|\?>", "?", $languages[$editlang])); - $table->construct_header($lang->issues, array("class" => "align_center", "width" => 100)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 100)); - } - else - { - $table->construct_header(preg_replace("<\?|\?>", "?", $languages[$editlang])); - $table->construct_header($lang->phrases, array("class" => "align_center", "width" => 100)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 100)); - } - - // Get files in admin folder - $adminfilenames = array(); - if($handle = opendir($folder."admin")) - { - while(false !== ($file = readdir($handle))) - { - if(preg_match("#\.lang\.php$#", $file)) - { - $adminfilenames[] = $file; - } - } - closedir($handle); - sort($adminfilenames); - } - - $edit_colspan = 3; - // Get files from admin folder we want to peek at (if possible) - if($editwithfolder) - { - $edit_colspan = 5; - $adminfilenameswith = array(); - if($handle = opendir($editwithfolder."admin")) - { - while(false !== ($file = readdir($handle))) - { - if(preg_match("#\.lang\.php$#", $file)) - { - $adminfilenameswith[] = $file; - } - } - closedir($handle); - sort($adminfilenameswith); - } - } - - if($editwithfolder) - { - $files_left = array_diff($adminfilenameswith, $adminfilenames); - $files_right = array_diff($adminfilenames, $adminfilenameswith); - $files_both = array_intersect($adminfilenameswith, $adminfilenames); - - foreach($files_left as $key => $file) - { - @include $editwithfolder."admin/".$file; - $editvars_left = (array)$l; - unset($l); - - $icon_issues = ""; - if(count($editvars_left) >0) - { - $icon_issues = ""; - } - - $table->construct_cell($file, array("class" => "langeditor_editwithfile")); - $table->construct_cell(count($editvars_left), array("class" => "langeditor_phrases")); - $table->construct_cell("", array("class" => "langeditor_editfile")); - $table->construct_cell($icon_issues, array("class" => "langeditor_issues")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - foreach($files_right as $key => $file) - { - @include $folder."admin/".$file; - $editvars_right = (array)$l; - unset($l); - - $icon_issues = ""; - if(count($editvars_right >0)) - { - $icon_issues = ""; - } - - $table->construct_cell("", array("class" => "langeditor_editwithfile")); - $table->construct_cell("", array("class" => "langeditor_phrases")); - $table->construct_cell($file, array("class" => "langeditor_editfile")); - $table->construct_cell($icon_issues, array("class" => "langeditor_issues")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - foreach($files_both as $key => $file) - { - @include $editwithfolder."admin/".$file; - $editvars_left = (array)$l; - unset($l); - @include $folder."admin/".$file; - $editvars_right = (array)$l; - unset($l); - - $table->construct_cell($file, array("class" => "langeditor_editwithfile")); - $table->construct_cell(count($editvars_left), array("class" => "langeditor_phrases")); - $table->construct_cell($file, array("class" => "langeditor_editfile")); - - $icon_issues = ""; - - // Find problems and differences in editfile in comparision to editwithfile - foreach($editvars_left as $editvars_left_key => $editvars_left_value) - { - // Count {x} in left and right variable - $editvars_left_value_cbvCount = preg_match_all("/{[ \t]*\d+[ \t]*}/", $editvars_left_value, $matches); - $editvars_right_value_cbvCount = preg_match_all("/{[ \t]*\d+[ \t]*}/", $editvars_right[$editvars_left_key], $matches); - // If left contain something but right is empty || count of {x} are different betwin left and right - if($editvars_left_value && !$editvars_right[$editvars_left_key] || $editvars_left_value_cbvCount != $editvars_right_value_cbvCount) - { - $icon_issues = ""; - // One difference is enought. - break; - } - } - - $table->construct_cell($icon_issues, array("class" => "langeditor_issues")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - } - else - { - foreach($adminfilenames as $key => $file) - { - @include $folder."admin/".$file; - $editvars_count = (array)$l; - unset($l); - - $table->construct_cell($file, array("class" => "langeditor_editfile")); - $table->construct_cell(count($editvars_count), array("class" => "langeditor_phrases")); - $table->construct_cell("{$lang->edit}", array("class" => "langeditor_edit")); - $table->construct_row(); - } - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_language_files_admin_cp, array('colspan' => $edit_colspan)); - $table->construct_row(); - } - - $table->output($lang->admin_cp); - } - } - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->languages); - - $sub_tabs['languages'] = array( - 'title' => $lang->languages, - 'link' => "index.php?module=config-languages", - 'description' => $lang->languages_desc - ); - $sub_tabs['find_language'] = array( - 'title' => $lang->find_language_packs, - 'link' => "https://community.mybb.com/mods.php?action=browse&category=19", - 'target' => "_blank" - ); - - $plugins->run_hooks("admin_config_languages_start"); - - $page->output_nav_tabs($sub_tabs, 'languages'); - - $table = new Table; - $table->construct_header($lang->languagevar); - $table->construct_header($lang->version, array("class" => "align_center", "width" => 100)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 155)); - - asort($languages); - - foreach($languages as $key1 => $langname1) - { - $langselectlangs[$key1] = $lang->sprintf($lang->edit_with, preg_replace("<\?|\?>", "?", $langname1)); - } - - foreach($languages as $key => $langname) - { - include MYBB_ROOT."inc/languages/".$key.".php"; - - if(!empty($langinfo['website'])) - { - $author = "{$langinfo['author']}"; - } - else - { - $author = $langinfo['author']; - } - - $table->construct_cell("".preg_replace("<\?|\?>", "?", $langinfo['name'])."
{$author}"); - $table->construct_cell($langinfo['version'], array("class" => "align_center")); - - $popup = new PopupMenu("language_{$key}", $lang->options); - $popup->add_item($lang->edit_language_variables, "index.php?module=config-languages&action=edit&lang={$key}"); - foreach($langselectlangs as $key1 => $langname1) - { - if($key != $key1) - { - $popup->add_item($langname1, "index.php?module=config-languages&action=edit&lang={$key}&editwith={$key1}"); - } - } - $popup->add_item($lang->edit_properties, "index.php?module=config-languages&action=edit_properties&lang={$key}"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_language, array('colspan' => 3)); - $table->construct_row(); - } - - $table->output($lang->installed_language_packs); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/mod_tools.php b/html/forums/admin/modules/config/mod_tools.php deleted file mode 100644 index dbb784f..0000000 --- a/html/forums/admin/modules/config/mod_tools.php +++ /dev/null @@ -1,2362 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->mod_tools, "index.php?module=config-mod_tools"); - -$plugins->run_hooks("admin_config_mod_tools_begin"); - -if($mybb->input['action'] == "delete_post_tool") -{ - $query = $db->simple_select("modtools", "*", "tid='{$mybb->input['tid']}'"); - $tool = $db->fetch_array($query); - - // Does the post tool not exist? - if(!$tool['tid']) - { - flash_message($lang->error_invalid_post_tool, 'error'); - admin_redirect("index.php?module=config-mod_tools&action=post_tools"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-mod_tools&action=post_tools"); - } - - $plugins->run_hooks("admin_config_mod_tools_delete_post_tool"); - - if($mybb->request_method == 'post') - { - // Delete the type - $db->delete_query('modtools', "tid='{$tool['tid']}'"); - - $plugins->run_hooks("admin_config_mod_tools_delete_post_tool_commit"); - - // Log admin action - log_admin_action($tool['tid'], $tool['name']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_post_tool_deleted, 'success'); - admin_redirect("index.php?module=config-mod_tools&action=post_tools"); - } - else - { - $page->output_confirm_action("index.php?module=config-mod_tools&action=post_tools&tid={$type['tid']}", $lang->confirm_post_tool_deletion); - } -} - -if($mybb->input['action'] == "delete_thread_tool") -{ - $query = $db->simple_select("modtools", "*", "tid='{$mybb->input['tid']}'"); - $tool = $db->fetch_array($query); - - // Does the post tool not exist? - if(!$tool['tid']) - { - flash_message($lang->error_invalid_thread_tool, 'error'); - admin_redirect("index.php?module=config-mod_tools"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-mod_tools"); - } - - $plugins->run_hooks("admin_config_mod_tools_delete_thread_tool"); - - if($mybb->request_method == 'post') - { - // Delete the type - $db->delete_query('modtools', "tid='{$tool['tid']}'"); - - $plugins->run_hooks("admin_config_mod_tools_delete_thread_tool_commit"); - - // Log admin action - log_admin_action($tool['tid'], $tool['name']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_thread_tool_deleted, 'success'); - admin_redirect("index.php?module=config-mod_tools"); - } - else - { - $page->output_confirm_action("index.php?module=config-mod_tools&action=delete_thread_tool&tid={$tool['tid']}", $lang->confirm_thread_tool_deletion); - } -} - -if($mybb->input['action'] == "post_tools") -{ - $plugins->run_hooks("admin_config_mod_tools_post_tools"); - - $page->add_breadcrumb_item($lang->post_tools); - $page->output_header($lang->mod_tools." - ".$lang->post_tools); - - $sub_tabs['thread_tools'] = array( - 'title' => $lang->thread_tools, - 'link' => "index.php?module=config-mod_tools" - ); - $sub_tabs['add_thread_tool'] = array( - 'title'=> $lang->add_thread_tool, - 'link' => "index.php?module=config-mod_tools&action=add_thread_tool" - ); - $sub_tabs['post_tools'] = array( - 'title' => $lang->post_tools, - 'link' => "index.php?module=config-mod_tools&action=post_tools", - 'description' => $lang->post_tools_desc - ); - $sub_tabs['add_post_tool'] = array( - 'title'=> $lang->add_post_tool, - 'link' => "index.php?module=config-mod_tools&action=add_post_tool" - ); - - $page->output_nav_tabs($sub_tabs, 'post_tools'); - - $table = new Table; - $table->construct_header($lang->title); - $table->construct_header($lang->controls, array('class' => "align_center", 'colspan' => 2)); - - $query = $db->simple_select('modtools', 'tid, name, description, type', "type='p'", array('order_by' => 'name')); - while($tool = $db->fetch_array($query)) - { - $table->construct_cell("".htmlspecialchars_uni($tool['name'])."
".htmlspecialchars_uni($tool['description']).""); - $table->construct_cell("{$lang->edit}", array('width' => 100, 'class' => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_post_tool_deletion}')\">{$lang->delete}", array('width' => 100, 'class' => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_post_tools, array('colspan' => 3)); - $table->construct_row(); - } - - $table->output($lang->post_tools); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_thread_tool") -{ - $query = $db->simple_select("modtools", "COUNT(tid) as tools", "tid = '{$mybb->input['tid']}' AND type='t'"); - if($db->fetch_field($query, "tools") < 1) - { - flash_message($lang->error_invalid_thread_tool, 'error'); - admin_redirect("index.php?module=config-mod_tools"); - } - - $plugins->run_hooks("admin_config_mod_tools_edit_thread_tool"); - - if($mybb->request_method == 'post') - { - if(trim($mybb->input['title']) == "") - { - $errors[] = $lang->error_missing_title; - } - - if(trim($mybb->input['description']) == "") - { - $errors[] = $lang->error_missing_description; - } - - if($mybb->input['forum_type'] == 2) - { - $forum_checked[1] = ''; - $forum_checked[2] = "checked=\"checked\""; - - if(count($mybb->input['forum_1_forums']) < 1) - { - $errors[] = $lang->error_no_forums_selected; - } - } - else - { - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - - $mybb->input['forum_1_forums'] = ''; - } - - if($mybb->input['group_type'] == 2) - { - $group_checked[1] = ''; - $group_checked[2] = "checked=\"checked\""; - - if(count($mybb->input['group_1_groups']) < 1) - { - $errors[] = $lang->error_no_groups_selected; - } - } - else - { - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - - $mybb->input['group_1_groups'] = ''; - } - - if($mybb->input['approvethread'] != '' && $mybb->input['approvethread'] != 'approve' && $mybb->input['approvethread'] != 'unapprove' && $mybb->input['approvethread'] != 'toggle') - { - $mybb->input['approvethread'] = ''; - } - - if($mybb->input['softdeletethread'] != '' && $mybb->input['softdeletethread'] != 'softdelete' && $mybb->input['softdeletethread'] != 'restore' && $mybb->input['softdeletethread'] != 'toggle') - { - $mybb->input['softdeletethread'] = ''; - } - - if($mybb->input['openthread'] != '' && $mybb->input['openthread'] != 'open' && $mybb->input['openthread'] != 'close' && $mybb->input['openthread'] != 'toggle') - { - $mybb->input['openthread'] = ''; - } - - if($mybb->input['stickthread'] != '' && $mybb->input['stickthread'] != 'stick' && $mybb->input['stickthread'] != 'unstick' && $mybb->input['stickthread'] != 'toggle') - { - $mybb->input['stickthread'] = ''; - } - - if($mybb->input['move_type'] == 2) - { - $move_checked[1] = ''; - $move_checked[2] = "checked=\"checked\""; - - if(!$mybb->input['move_1_forum']) - { - $errors[] = $lang->error_no_move_forum_selected; - } - else - { - // Check that the destination forum is not a category - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('move_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - - if($mybb->input['move_2_redirect'] != 1 && $mybb->input['move_2_redirect'] != 0) - { - $mybb->input['move_2_redirect'] = 0; - } - - if(!isset($mybb->input['move_3_redirecttime'])) - { - $mybb->input['move_3_redirecttime'] = ''; - } - } - else - { - $move_checked[1] = "checked=\"checked\""; - $move_checked[2] = ''; - - $mybb->input['move_1_forum'] = ''; - $mybb->input['move_2_redirect'] = 0; - $mybb->input['move_3_redirecttime'] = ''; - } - - if($mybb->input['copy_type'] == 2) - { - $copy_checked[1] = ''; - $copy_checked[2] = "checked=\"checked\""; - - if(!$mybb->input['copy_1_forum']) - { - $errors[] = $lang->error_no_copy_forum_selected; - } - else - { - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('copy_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - } - else - { - $copy_checked[1] = "checked=\"checked\""; - $copy_checked[2] = ''; - - $mybb->input['copy_1_forum'] = ''; - } - - if(!$errors) - { - $thread_options = array( - 'confirmation' => $mybb->get_input('confirmation', MyBB::INPUT_INT), - 'deletethread' => $mybb->get_input('deletethread', MyBB::INPUT_INT), - 'mergethreads' => $mybb->get_input('mergethreads', MyBB::INPUT_INT), - 'deletepoll' => $mybb->get_input('deletepoll', MyBB::INPUT_INT), - 'removeredirects' => $mybb->get_input('removeredirects', MyBB::INPUT_INT), - 'removesubscriptions' => $mybb->get_input('removesubscriptions', MyBB::INPUT_INT), - 'recountrebuild' => $mybb->get_input('recountrebuild', MyBB::INPUT_INT), - 'approvethread' => $mybb->input['approvethread'], - 'softdeletethread' => $mybb->input['softdeletethread'], - 'openthread' => $mybb->input['openthread'], - 'stickthread' => $mybb->input['stickthread'], - 'movethread' => $mybb->get_input('move_1_forum', MyBB::INPUT_INT), - 'movethreadredirect' => $mybb->get_input('move_2_redirect', MyBB::INPUT_INT), - 'movethreadredirectexpire' => $mybb->get_input('move_3_redirecttime', MyBB::INPUT_INT), - 'copythread' => $mybb->get_input('copy_1_forum', MyBB::INPUT_INT), - 'newsubject' => $mybb->input['newsubject'], - 'addreply' => $mybb->input['newreply'], - 'replysubject' => $mybb->input['newreplysubject'], - 'pm_subject' => $mybb->input['pm_subject'], - 'pm_message' => $mybb->input['pm_message'], - 'threadprefix' => $mybb->get_input('threadprefix', MyBB::INPUT_INT) - ); - - $update_tool['type'] = 't'; - $update_tool['threadoptions'] = $db->escape_string(my_serialize($thread_options)); - $update_tool['name'] = $db->escape_string($mybb->input['title']); - $update_tool['description'] = $db->escape_string($mybb->input['description']); - $update_tool['forums'] = ''; - $update_tool['groups'] = ''; - - if($mybb->input['forum_type'] == 2) - { - if(is_array($mybb->input['forum_1_forums'])) - { - $checked = array(); - - foreach($mybb->input['forum_1_forums'] as $fid) - { - $checked[] = (int)$fid; - } - - $update_tool['forums'] = implode(',', $checked); - } - } - else - { - $update_tool['forums'] = "-1"; - } - - if($mybb->input['group_type'] == 2) - { - if(is_array($mybb->input['group_1_groups'])) - { - $checked = array(); - - foreach($mybb->input['group_1_groups'] as $gid) - { - $checked[] = (int)$gid; - } - - $update_tool['groups'] = implode(',', $checked); - } - } - else - { - $update_tool['groups'] = "-1"; - } - - $plugins->run_hooks("admin_config_mod_tools_edit_thread_tool_commit"); - - $db->update_query("modtools", $update_tool, "tid='{$mybb->input['tid']}'"); - - // Log admin action - log_admin_action($mybb->input['tid'], $mybb->input['title']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_mod_tool_updated, 'success'); - admin_redirect("index.php?module=config-mod_tools"); - } - } - - $page->add_breadcrumb_item($lang->edit_thread_tool); - $page->output_header($lang->mod_tools." - ".$lang->edit_thread_tool); - - $sub_tabs['edit_thread_tool'] = array( - "title" => $lang->edit_thread_tool, - "description" => $lang->edit_thread_tool_desc, - "link" => "index.php?module=config-mod_tools" - ); - - $page->output_nav_tabs($sub_tabs, 'edit_thread_tool'); - - $form = new Form("index.php?module=config-mod_tools&action=edit_thread_tool", 'post'); - echo $form->generate_hidden_field("tid", $mybb->input['tid']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $query = $db->simple_select("modtools", "*", "tid = '{$mybb->input['tid']}'"); - $modtool = $db->fetch_array($query); - $thread_options = my_unserialize($modtool['threadoptions']); - - $mybb->input['title'] = $modtool['name']; - $mybb->input['description'] = $modtool['description']; - $mybb->input['forum_1_forums'] = explode(",", $modtool['forums']); - $mybb->input['group_1_groups'] = explode(",", $modtool['groups']); - - if(!$modtool['forums'] || $modtool['forums'] == -1) - { - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - } - else - { - $forum_checked[1] = ''; - $forum_checked[2] = "checked=\"checked\""; - } - - if(!$modtool['groups'] || $modtool['groups'] == -1) - { - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - } - else - { - $group_checked[1] = ''; - $group_checked[2] = "checked=\"checked\""; - } - - $mybb->input['confirmation'] = $thread_options['confirmation']; - $mybb->input['approvethread'] = $thread_options['approvethread']; - $mybb->input['softdeletethread'] = $thread_options['softdeletethread']; - $mybb->input['openthread'] = $thread_options['openthread']; - $mybb->input['stickthread'] = $thread_options['stickthread']; - $mybb->input['move_1_forum'] = $thread_options['movethread']; - $mybb->input['move_2_redirect'] = $thread_options['movethreadredirect']; - $mybb->input['move_3_redirecttime'] = $thread_options['movethreadredirectexpire']; - - if(!$thread_options['movethread']) - { - $move_checked[1] = "checked=\"checked\""; - $move_checked[2] = ''; - } - else - { - $move_checked[1] = ''; - $move_checked[2] = "checked=\"checked\""; - } - - if(!$thread_options['copythread']) - { - $copy_checked[1] = "checked=\"checked\""; - $copy_checked[2] = ''; - } - else - { - $copy_checked[1] = ''; - $copy_checked[2] = "checked=\"checked\""; - } - - $mybb->input['copy_1_forum'] = $thread_options['copythread']; - $mybb->input['deletethread'] = $thread_options['deletethread']; - $mybb->input['mergethreads'] = $thread_options['mergethreads']; - $mybb->input['deletepoll'] = $thread_options['deletepoll']; - $mybb->input['removeredirects'] = $thread_options['removeredirects']; - $mybb->input['removesubscriptions'] = $thread_options['removesubscriptions']; - $mybb->input['recountrebuild'] = $thread_options['recountrebuild']; - $mybb->input['threadprefix'] = $thread_options['threadprefix']; - $mybb->input['newsubject'] = $thread_options['newsubject']; - $mybb->input['newreply'] = $thread_options['addreply']; - $mybb->input['newreplysubject'] = $thread_options['replysubject']; - $mybb->input['pm_subject'] = $thread_options['pm_subject']; - $mybb->input['pm_message'] = $thread_options['pm_message']; - } - - $form_container = new FormContainer($lang->general_options); - $form_container->output_row($lang->name." *", '', $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description." *", '', $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $actions = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('forum_1_forums[]', $mybb->input['forum_1_forums'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_in_forums." *", '', $actions); - - $actions = "
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('group_1_groups[]', $mybb->input['group_1_groups'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_to_groups." *", '', $actions); - $form_container->output_row($lang->show_confirmation." *", '', $form->generate_yes_no_radio('confirmation', $mybb->input['confirmation'], array('style' => 'width: 2em;'))); - $form_container->end(); - - $approve_unapprove = array( - '' => $lang->no_change, - 'approve' => $lang->approve, - 'unapprove' => $lang->unapprove, - 'toggle' => $lang->toggle - ); - - $open_close = array( - '' => $lang->no_change, - 'open' => $lang->open, - 'close' => $lang->close, - 'toggle' => $lang->toggle - ); - - $stick_unstick = array( - '' => $lang->no_change, - 'stick' => $lang->stick, - 'unstick' => $lang->unstick, - 'toggle' => $lang->toggle - ); - - $form_container = new FormContainer($lang->thread_moderation); - $form_container->output_row($lang->approve_unapprove." *", '', $form->generate_select_box('approvethread', $approve_unapprove, $mybb->input['approvethread'], array('id' => 'approvethread')), 'approvethread'); - $form_container->output_row($lang->open_close_thread." *", '', $form->generate_select_box('openthread', $open_close, $mybb->input['openthread'], array('id' => 'openthread')), 'openthread'); - $form_container->output_row($lang->stick_unstick_thread." *", '', $form->generate_select_box('stickthread', $stick_unstick, $mybb->input['stickthread'], array('id' => 'stickthread')), 'stickthread'); - - - $actions = " -
-
-
-
- - - - - - - - - - - - - -
{$lang->forum_to_move_to}".$form->generate_forum_select('move_1_forum', $mybb->input['move_1_forum'])."
{$lang->leave_redirect}".$form->generate_yes_no_radio('move_2_redirect', $mybb->input['move_2_redirect'], array('style' => 'width: 2em;'))."
{$lang->delete_redirect_after}".$form->generate_numeric_field('move_3_redirecttime', $mybb->input['move_3_redirecttime'], array('style' => 'width: 3em;', 'min' => 0))." {$lang->days}
-
-
- "; - $form_container->output_row($lang->move_thread." *", $lang->move_thread_desc, $actions); - - $actions = " -
-
-
-
- - - - - -
{$lang->forum_to_copy_to}".$form->generate_forum_select('copy_1_forum', $mybb->input['copy_1_forum'])."
-
-
- "; - $form_container->output_row($lang->copy_thread." *", '', $actions); - - $softdelete_restore = array( - '' => $lang->no_change, - 'restore' => $lang->restore, - 'softdelete' => $lang->softdelete, - 'toggle' => $lang->toggle - ); - - $form_container->output_row($lang->softdelete_restore_thread." *", '', $form->generate_select_box('softdeletethread', $softdelete_restore, $mybb->input['softdeletethread'], array('id' => 'softdeletethread')), 'softdeletethread'); - $form_container->output_row($lang->delete_thread." *", '', $form->generate_yes_no_radio('deletethread', $mybb->input['deletethread'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->merge_thread." *", $lang->merge_thread_desc, $form->generate_yes_no_radio('mergethreads', $mybb->input['mergethreads'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->delete_poll." *", '', $form->generate_yes_no_radio('deletepoll', $mybb->input['deletepoll'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->delete_redirects." *", '', $form->generate_yes_no_radio('removeredirects', $mybb->input['removeredirects'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->remove_subscriptions." *", '', $form->generate_yes_no_radio('removesubscriptions', $mybb->input['removesubscriptions'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->recount_rebuild." *", '', $form->generate_yes_no_radio('recountrebuild', $mybb->input['recountrebuild'], array('style' => 'width: 2em;'))); - - $threadprefixes = build_prefixes(); - if(!empty($threadprefixes)) - { - $thread_prefixes = array( - '-1' => $lang->no_change, - '0' => $lang->no_prefix - ); - - foreach($threadprefixes as $prefix) - { - $thread_prefixes[$prefix['pid']] = $prefix['prefix']; - } - - $form_container->output_row($lang->apply_thread_prefix." *", '', $form->generate_select_box('threadprefix', $thread_prefixes, array($mybb->get_input('threadprefix', MyBB::INPUT_INT)), array('id' => 'threadprefix')), 'threadprefix'); - } - - $form_container->output_row($lang->new_subject." *", $lang->new_subject_desc, $form->generate_text_box('newsubject', $mybb->input['newsubject'], array('id' => 'newsubject'))); - $form_container->end(); - - $form_container = new FormContainer($lang->add_new_reply); - $form_container->output_row($lang->add_new_reply, $lang->add_new_reply_desc, $form->generate_text_area('newreply', $mybb->input['newreply'], array('id' => 'newreply')), 'newreply'); - $form_container->output_row($lang->reply_subject, $lang->reply_subject_desc, $form->generate_text_box('newreplysubject', $mybb->input['newreplysubject'], array('id' => 'newreplysubject')), 'newreplysubject'); - $form_container->end(); - - $form_container = new FormContainer($lang->send_private_message); - $form_container->output_row($lang->private_message_message, $lang->private_message_message_desc, $form->generate_text_area('pm_message', $mybb->input['pm_message'], array('id' => 'pm_message')), 'pm_message'); - $form_container->output_row($lang->private_message_subject, $lang->private_message_subject_desc, $form->generate_text_box('pm_subject', $mybb->input['pm_subject'], array('id' => 'pm_subject')), 'pm_subject'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_thread_tool); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "add_thread_tool") -{ - $plugins->run_hooks("admin_config_mod_tools_add_thread_tool"); - - if($mybb->request_method == 'post') - { - if(trim($mybb->input['title']) == "") - { - $errors[] = $lang->error_missing_title; - } - - if(trim($mybb->input['description']) == "") - { - $errors[] = $lang->error_missing_description; - } - - if($mybb->input['forum_type'] == 2) - { - $forum_checked[1] = ''; - $forum_checked[2] = "checked=\"checked\""; - - if(count($mybb->input['forum_1_forums']) < 1) - { - $errors[] = $lang->error_no_forums_selected; - } - } - else - { - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - - $mybb->input['forum_1_forums'] = ''; - } - - if($mybb->input['group_type'] == 2) - { - $group_checked[1] = ''; - $group_checked[2] = "checked=\"checked\""; - - if(count($mybb->input['group_1_groups']) < 1) - { - $errors[] = $lang->error_no_groups_selected; - } - } - else - { - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - - $mybb->input['group_1_groups'] = ''; - } - - if($mybb->input['approvethread'] != '' && $mybb->input['approvethread'] != 'approve' && $mybb->input['approvethread'] != 'unapprove' && $mybb->input['approvethread'] != 'toggle') - { - $mybb->input['approvethread'] = ''; - } - - if($mybb->input['softdeletethread'] != '' && $mybb->input['softdeletethread'] != 'restore' && $mybb->input['softdeletethread'] != 'softdelete' && $mybb->input['softdeletethread'] != 'toggle') - { - $mybb->input['softdeletethread'] = ''; - } - - if($mybb->input['openthread'] != '' && $mybb->input['openthread'] != 'open' && $mybb->input['openthread'] != 'close' && $mybb->input['openthread'] != 'toggle') - { - $mybb->input['openthread'] = ''; - } - - if($mybb->input['stickthread'] != '' && $mybb->input['stickthread'] != 'stick' && $mybb->input['stickthread'] != 'unstick' && $mybb->input['stickthread'] != 'toggle') - { - $mybb->input['stickthread'] = ''; - } - - if(!isset($mybb->input['threadprefix'])) - { - $mybb->input['threadprefix'] = ''; - } - - if($mybb->input['move_type'] == 2) - { - $move_checked[1] = ''; - $move_checked[2] = "checked=\"checked\""; - - if(!$mybb->input['move_1_forum']) - { - $errors[] = $lang->error_no_move_forum_selected; - } - else - { - // Check that the destination forum is not a category - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('move_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - } - else - { - $move_checked[1] = "checked=\"checked\""; - $move_checked[2] = ''; - - $mybb->input['move_1_forum'] = ''; - $mybb->input['move_2_redirect'] = 0; - $mybb->input['move_3_redirecttime'] = ''; - } - - if($mybb->input['copy_type'] == 2) - { - $copy_checked[1] = ''; - $copy_checked[2] = "checked=\"checked\""; - - if(!$mybb->input['copy_1_forum']) - { - $errors[] = $lang->error_no_copy_forum_selected; - } - else - { - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('copy_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - } - else - { - $copy_checked[1] = "checked=\"checked\""; - $copy_checked[2] = ''; - - $mybb->input['copy_1_forum'] = ''; - } - - if(!$errors) - { - $thread_options = array( - 'confirmation' => $mybb->get_input('confirmation', MyBB::INPUT_INT), - 'deletethread' => $mybb->get_input('deletethread', MyBB::INPUT_INT), - 'mergethreads' => $mybb->get_input('mergethreads', MyBB::INPUT_INT), - 'deletepoll' => $mybb->get_input('deletepoll', MyBB::INPUT_INT), - 'removeredirects' => $mybb->get_input('removeredirects', MyBB::INPUT_INT), - 'removesubscriptions' => $mybb->get_input('removesubscriptions', MyBB::INPUT_INT), - 'recountrebuild' => $mybb->get_input('recountrebuild', MyBB::INPUT_INT), - 'approvethread' => $mybb->input['approvethread'], - 'softdeletethread' => $mybb->input['softdeletethread'], - 'openthread' => $mybb->input['openthread'], - 'stickthread' => $mybb->input['stickthread'], - 'movethread' => $mybb->get_input('move_1_forum', MyBB::INPUT_INT), - 'movethreadredirect' => $mybb->get_input('move_2_redirect', MyBB::INPUT_INT), - 'movethreadredirectexpire' => $mybb->get_input('move_3_redirecttime', MyBB::INPUT_INT), - 'copythread' => $mybb->get_input('copy_1_forum', MyBB::INPUT_INT), - 'newsubject' => $mybb->input['newsubject'], - 'addreply' => $mybb->input['newreply'], - 'replysubject' => $mybb->input['newreplysubject'], - 'pm_subject' => $mybb->input['pm_subject'], - 'pm_message' => $mybb->input['pm_message'], - 'threadprefix' => $mybb->input['threadprefix'], - ); - - $new_tool['type'] = 't'; - $new_tool['threadoptions'] = $db->escape_string(my_serialize($thread_options)); - $new_tool['name'] = $db->escape_string($mybb->input['title']); - $new_tool['description'] = $db->escape_string($mybb->input['description']); - $new_tool['forums'] = ''; - $new_tool['groups'] = ''; - $new_tool['postoptions'] = ''; - - if($mybb->input['forum_type'] == 2) - { - if(is_array($mybb->input['forum_1_forums'])) - { - $checked = array(); - - foreach($mybb->input['forum_1_forums'] as $fid) - { - $checked[] = (int)$fid; - } - - $new_tool['forums'] = implode(',', $checked); - } - } - else - { - $new_tool['forums'] = "-1"; - } - - if($mybb->input['group_type'] == 2) - { - if(is_array($mybb->input['group_1_groups'])) - { - $checked = array(); - - foreach($mybb->input['group_1_groups'] as $gid) - { - $checked[] = (int)$gid; - } - - $new_tool['groups'] = implode(',', $checked); - } - } - else - { - $new_tool['groups'] = "-1"; - } - - if($mybb->get_input('threadprefix', MyBB::INPUT_INT) >= 0) - { - $thread_options['threadprefix'] = $mybb->get_input('threadprefix', MyBB::INPUT_INT); - } - - $tid = $db->insert_query("modtools", $new_tool); - - $plugins->run_hooks("admin_config_mod_tools_add_thread_tool_commit"); - - // Log admin action - log_admin_action($tid, $mybb->input['title']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_mod_tool_created, 'success'); - admin_redirect("index.php?module=config-mod_tools"); - } - } - - $page->add_breadcrumb_item($lang->add_new_thread_tool); - $page->output_header($lang->mod_tools." - ".$lang->add_new_thread_tool); - - $sub_tabs['thread_tools'] = array( - 'title' => $lang->thread_tools, - 'link' => "index.php?module=config-mod_tools" - ); - $sub_tabs['add_thread_tool'] = array( - 'title'=> $lang->add_new_thread_tool, - 'link' => "index.php?module=config-mod_tools&action=add_thread_tool", - 'description' => $lang->add_thread_tool_desc - ); - $sub_tabs['post_tools'] = array( - 'title' => $lang->post_tools, - 'link' => "index.php?module=config-mod_tools&action=post_tools", - ); - $sub_tabs['add_post_tool'] = array( - 'title'=> $lang->add_new_post_tool, - 'link' => "index.php?module=config-mod_tools&action=add_post_tool" - ); - - $page->output_nav_tabs($sub_tabs, 'add_thread_tool'); - - $form = new Form("index.php?module=config-mod_tools&action=add_thread_tool", 'post'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['title'] = ''; - $mybb->input['description'] = ''; - $mybb->input['forum_1_forums'] = ''; - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - $mybb->input['group_1_groups'] = ''; - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - $mybb->input['confirmation'] = '0'; - $mybb->input['approvethread'] = ''; - $mybb->input['softdeletethread'] = ''; - $mybb->input['openthread'] = ''; - $mybb->input['stickthread'] = ''; - $mybb->input['move_1_forum'] = ''; - $mybb->input['move_2_redirect'] = '0'; - $mybb->input['move_3_redirecttime'] = ''; - $move_checked[1] = "checked=\"checked\""; - $move_checked[2] = ''; - $copy_checked[1] = "checked=\"checked\""; - $copy_checked[2] = ''; - $mybb->input['copy_1_forum'] = ''; - $mybb->input['deletethread'] = '0'; - $mybb->input['mergethreads'] = '0'; - $mybb->input['deletepoll'] = '0'; - $mybb->input['removeredirects'] = '0'; - $mybb->input['removesubscriptions'] = '0'; - $mybb->input['recountrebuild'] = '0'; - $mybb->input['threadprefix'] = '-1'; - $mybb->input['newsubject'] = '{subject}'; - $mybb->input['newreply'] = ''; - $mybb->input['newreplysubject'] = '{subject}'; - $mybb->input['pm_subject'] = ''; - $mybb->input['pm_message'] = ''; - } - - $form_container = new FormContainer($lang->general_options); - $form_container->output_row($lang->name." *", '', $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description." *", '', $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $actions = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('forum_1_forums[]', $mybb->input['forum_1_forums'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_in_forums." *", '', $actions); - - $actions = "
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('group_1_groups[]', $mybb->input['group_1_groups'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_to_groups." *", '', $actions); - $form_container->output_row($lang->show_confirmation." *", '', $form->generate_yes_no_radio('confirmation', $mybb->input['confirmation'], array('style' => 'width: 2em;'))); - $form_container->end(); - - $approve_unapprove = array( - '' => $lang->no_change, - 'approve' => $lang->approve, - 'unapprove' => $lang->unapprove, - 'toggle' => $lang->toggle - ); - - $open_close = array( - '' => $lang->no_change, - 'open' => $lang->open, - 'close' => $lang->close, - 'toggle' => $lang->toggle - ); - - $stick_unstick = array( - '' => $lang->no_change, - 'stick' => $lang->stick, - 'unstick' => $lang->unstick, - 'toggle' => $lang->toggle - ); - - $form_container = new FormContainer($lang->thread_moderation); - $form_container->output_row($lang->approve_unapprove." *", '', $form->generate_select_box('approvethread', $approve_unapprove, $mybb->input['approvethread'], array('id' => 'approvethread')), 'approvethread'); - $form_container->output_row($lang->open_close_thread." *", '', $form->generate_select_box('openthread', $open_close, $mybb->input['openthread'], array('id' => 'openthread')), 'openthread'); - $form_container->output_row($lang->stick_unstick_thread." *", '', $form->generate_select_box('stickthread', $stick_unstick, $mybb->input['stickthread'], array('id' => 'stickthread')), 'stickthread'); - - - $actions = " -
-
-
-
- - - - - - - - - - - - - -
{$lang->forum_to_move_to}".$form->generate_forum_select('move_1_forum', $mybb->input['move_1_forum'])."
{$lang->leave_redirect}".$form->generate_yes_no_radio('move_2_redirect', $mybb->input['move_2_redirect'], array('style' => 'width: 2em;'))."
{$lang->delete_redirect_after}".$form->generate_numeric_field('move_3_redirecttime', $mybb->input['move_3_redirecttime'], array('style' => 'width: 3em;', 'min' => 0))." {$lang->days}
-
-
- "; - $form_container->output_row($lang->move_thread." *", $lang->move_thread_desc, $actions); - - $actions = " -
-
-
-
- - - - - -
{$lang->forum_to_copy_to}".$form->generate_forum_select('copy_1_forum', $mybb->input['copy_1_forum'])."
-
-
- "; - $form_container->output_row($lang->copy_thread." *", '', $actions); - - $softdelete_restore = array( - '' => $lang->no_change, - 'restore' => $lang->restore, - 'softdelete' => $lang->softdelete, - 'toggle' => $lang->toggle - ); - - $form_container->output_row($lang->softdelete_restore_thread." *", '', $form->generate_select_box('softdeletethread', $softdelete_restore, $mybb->input['softdeletethread'], array('id' => 'softdeletethread')), 'softdeletethread'); - $form_container->output_row($lang->delete_thread." *", '', $form->generate_yes_no_radio('deletethread', $mybb->input['deletethread'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->merge_thread." *", $lang->merge_thread_desc, $form->generate_yes_no_radio('mergethreads', $mybb->input['mergethreads'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->delete_poll." *", '', $form->generate_yes_no_radio('deletepoll', $mybb->input['deletepoll'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->delete_redirects." *", '', $form->generate_yes_no_radio('removeredirects', $mybb->input['removeredirects'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->remove_subscriptions." *", '', $form->generate_yes_no_radio('removesubscriptions', $mybb->input['removesubscriptions'], array('style' => 'width: 2em;'))); - $form_container->output_row($lang->recount_rebuild." *", '', $form->generate_yes_no_radio('recountrebuild', $mybb->input['recountrebuild'], array('style' => 'width: 2em;'))); - - $threadprefixes = build_prefixes(); - if(!empty($threadprefixes)) - { - $thread_prefixes = array( - '-1' => $lang->no_change, - '0' => $lang->no_prefix - ); - - foreach($threadprefixes as $prefix) - { - $thread_prefixes[$prefix['pid']] = $prefix['prefix']; - } - - $form_container->output_row($lang->apply_thread_prefix." *", '', $form->generate_select_box('threadprefix', $thread_prefixes, $mybb->input['threadprefix'], array('id' => 'threadprefix')), 'threadprefix'); - } - - $form_container->output_row($lang->new_subject." *", $lang->new_subject_desc, $form->generate_text_box('newsubject', $mybb->input['newsubject'], array('id' => 'newsubject'))); - $form_container->end(); - - $form_container = new FormContainer($lang->add_new_reply); - $form_container->output_row($lang->add_new_reply, $lang->add_new_reply_desc, $form->generate_text_area('newreply', $mybb->input['newreply'], array('id' => 'newreply')), 'newreply'); - $form_container->output_row($lang->reply_subject, $lang->reply_subject_desc, $form->generate_text_box('newreplysubject', $mybb->input['newreplysubject'], array('id' => 'newreplysubject')), 'newreplysubject'); - $form_container->end(); - - $form_container = new FormContainer($lang->send_private_message); - $form_container->output_row($lang->private_message_message, $lang->private_message_message_desc, $form->generate_text_area('pm_message', $mybb->input['pm_message'], array('id' => 'pm_message')), 'pm_message'); - $form_container->output_row($lang->private_message_subject, $lang->private_message_subject_desc, $form->generate_text_box('pm_subject', $mybb->input['pm_subject'], array('id' => 'pm_subject')), 'pm_subject'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_thread_tool); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_post_tool") -{ - $query = $db->simple_select("modtools", "COUNT(tid) as tools", "tid = '{$mybb->input['tid']}' AND type='p'"); - if($db->fetch_field($query, "tools") < 1) - { - flash_message($lang->error_invalid_post_tool, 'error'); - admin_redirect("index.php?module=config-mod_tools&action=post_tools"); - } - - $plugins->run_hooks("admin_config_mod_tools_edit_post_tool"); - - if($mybb->request_method == 'post') - { - if(trim($mybb->input['title']) == "") - { - $errors[] = $lang->error_missing_title; - } - - if(trim($mybb->input['description']) == "") - { - $errors[] = $lang->error_missing_description; - } - - if($mybb->input['forum_type'] == 2) - { - if(count($mybb->input['forum_1_forums']) < 1) - { - $errors[] = $lang->error_no_forums_selected; - } - } - else - { - $mybb->input['forum_1_forums'] = ''; - } - - if($mybb->input['group_type'] == 2) - { - if(count($mybb->input['group_1_groups']) < 1) - { - $errors[] = $lang->error_no_groups_selected; - } - } - else - { - $mybb->input['group_1_groups'] = ''; - } - - if($mybb->input['approvethread'] != '' && $mybb->input['approvethread'] != 'approve' && $mybb->input['approvethread'] != 'unapprove' && $mybb->input['approvethread'] != 'toggle') - { - $mybb->input['approvethread'] = ''; - } - - if($mybb->input['softdeletethread'] != '' && $mybb->input['softdeletethread'] != 'softdelete' && $mybb->input['softdeletethread'] != 'restore' && $mybb->input['softdeletethread'] != 'toggle') - { - $mybb->input['softdeletethread'] = ''; - } - - if($mybb->input['openthread'] != '' && $mybb->input['openthread'] != 'open' && $mybb->input['openthread'] != 'close' && $mybb->input['openthread'] != 'toggle') - { - $mybb->input['openthread'] = ''; - } - - if($mybb->input['stickthread'] != '' && $mybb->input['stickthread'] != 'stick' && $mybb->input['stickthread'] != 'unstick' && $mybb->input['stickthread'] != 'toggle') - { - $mybb->input['stickthread'] = ''; - } - - if($mybb->input['move_type'] == 2) - { - if(!$mybb->input['move_1_forum']) - { - $errors[] = $lang->error_no_move_forum_selected; - } - else - { - // Check that the destination forum is not a category - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('move_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - } - else - { - $mybb->input['move_1_forum'] = ''; - $mybb->input['move_2_redirect'] = 0; - $mybb->input['move_3_redirecttime'] = ''; - } - - if($mybb->input['copy_type'] == 2) - { - if(!$mybb->input['copy_1_forum']) - { - $errors[] = $lang->error_no_copy_forum_selected; - } - else - { - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('copy_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - } - else - { - $mybb->input['copy_1_forum'] = ''; - } - - if($mybb->input['approveposts'] != '' && $mybb->input['approveposts'] != 'approve' && $mybb->input['approveposts'] != 'unapprove' && $mybb->input['approveposts'] != 'toggle') - { - $mybb->input['approveposts'] = ''; - } - - if($mybb->input['softdeleteposts'] != '' && $mybb->input['softdeleteposts'] != 'approve' && $mybb->input['softdeleteposts'] != 'unapprove' && $mybb->input['softdeleteposts'] != 'toggle') - { - $mybb->input['softdeleteposts'] = ''; - } - - if($mybb->input['splitposts'] < -2) - { - $mybb->input['splitposts'] = -1; - } - - if($mybb->input['splitpostsclose'] == 1) - { - $mybb->input['splitpostsclose'] = 'close'; - } - else - { - $mybb->input['splitpostsclose'] = ''; - } - - if($mybb->input['splitpostsstick'] == 1) - { - $mybb->input['splitpostsstick'] = 'stick'; - } - else - { - $mybb->input['splitpostsstick'] = ''; - } - - if($mybb->input['splitpostsunapprove'] == 1) - { - $mybb->input['splitpostsunapprove'] = 'unapprove'; - } - else - { - $mybb->input['splitpostsunapprove'] = ''; - } - - if(!$errors) - { - $thread_options = array( - 'confirmation' => $mybb->get_input('confirmation', MyBB::INPUT_INT), - 'deletethread' => $mybb->get_input('deletethread', MyBB::INPUT_INT), - 'softdeletethread' => $mybb->input['softdeletethread'], - 'approvethread' => $mybb->input['approvethread'], - 'openthread' => $mybb->input['openthread'], - 'stickthread' => $mybb->input['stickthread'], - 'movethread' => $mybb->get_input('move_1_forum', MyBB::INPUT_INT), - 'movethreadredirect' => $mybb->get_input('move_2_redirect', MyBB::INPUT_INT), - 'movethreadredirectexpire' => $mybb->get_input('move_3_redirecttime', MyBB::INPUT_INT), - 'copythread' => $mybb->get_input('copy_1_forum', MyBB::INPUT_INT), - 'newsubject' => $mybb->input['newsubject'], - 'addreply' => $mybb->input['newreply'], - 'replysubject' => $mybb->input['newreplysubject'], - 'pm_subject' => $mybb->input['pm_subject'], - 'pm_message' => $mybb->input['pm_message'], - 'threadprefix' => $mybb->get_input('threadprefix', MyBB::INPUT_INT) - ); - - if(stripos($mybb->input['splitpostsnewsubject'], '{subject}') === false) - { - $mybb->input['splitpostsnewsubject'] = '{subject}'.$mybb->input['splitpostsnewsubject']; - } - - $post_options = array( - 'deleteposts' => $mybb->get_input('deleteposts', MyBB::INPUT_INT), - 'softdeleteposts' => $mybb->input['softdeleteposts'], - 'mergeposts' =>$mybb->get_input('mergeposts', MyBB::INPUT_INT), - 'approveposts' => $mybb->input['approveposts'], - 'splitposts' => $mybb->get_input('splitposts', MyBB::INPUT_INT), - 'splitpostsclose' => $mybb->input['splitpostsclose'], - 'splitpostsstick' => $mybb->input['splitpostsstick'], - 'splitpostsunapprove' => $mybb->input['splitpostsunapprove'], - 'splitthreadprefix' => $mybb->get_input('splitthreadprefix', MyBB::INPUT_INT), - 'splitpostsnewsubject' => $mybb->input['splitpostsnewsubject'], - 'splitpostsaddreply' => $mybb->input['splitpostsaddreply'], - 'splitpostsreplysubject' => $mybb->input['splitpostsreplysubject'] - ); - - $update_tool['type'] = 'p'; - $update_tool['threadoptions'] = $db->escape_string(my_serialize($thread_options)); - $update_tool['postoptions'] = $db->escape_string(my_serialize($post_options)); - $update_tool['name'] = $db->escape_string($mybb->input['title']); - $update_tool['description'] = $db->escape_string($mybb->input['description']); - $update_tool['forums'] = ''; - $update_tool['groups'] = ''; - - if($mybb->input['forum_type'] == 2) - { - if(is_array($mybb->input['forum_1_forums'])) - { - $checked = array(); - - foreach($mybb->input['forum_1_forums'] as $fid) - { - $checked[] = (int)$fid; - } - - $update_tool['forums'] = implode(',', $checked); - } - } - else - { - $update_tool['forums'] = "-1"; - } - - if($mybb->input['group_type'] == 2) - { - if(is_array($mybb->input['group_1_groups'])) - { - $checked = array(); - - foreach($mybb->input['group_1_groups'] as $gid) - { - $checked[] = (int)$gid; - } - - $update_tool['groups'] = implode(',', $checked); - } - } - else - { - $update_tool['groups'] = "-1"; - } - - $plugins->run_hooks("admin_config_mod_tools_edit_post_tool_commit"); - - $db->update_query("modtools", $update_tool, "tid = '{$mybb->input['tid']}'"); - - // Log admin action - log_admin_action($mybb->input['tid'], $mybb->input['title']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_mod_tool_updated, 'success'); - admin_redirect("index.php?module=config-mod_tools&action=post_tools"); - } - } - - $page->add_breadcrumb_item($lang->edit_post_tool); - $page->output_header($lang->mod_tools." - ".$lang->edit_post_tool); - - $sub_tabs['edit_post_tool'] = array( - "title" => $lang->edit_post_tool, - "description" => $lang->edit_post_tool_desc, - "link" => "index.php?module=config-mod_tools" - ); - - $page->output_nav_tabs($sub_tabs, 'edit_post_tool'); - - $form = new Form("index.php?module=config-mod_tools&action=edit_post_tool", 'post'); - echo $form->generate_hidden_field("tid", $mybb->input['tid']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $query = $db->simple_select("modtools", "*", "tid = '{$mybb->input['tid']}'"); - $modtool = $db->fetch_array($query); - $thread_options = my_unserialize($modtool['threadoptions']); - $post_options = my_unserialize($modtool['postoptions']); - - $mybb->input['title'] = $modtool['name']; - $mybb->input['description'] = $modtool['description']; - $mybb->input['forum_1_forums'] = explode(",", $modtool['forums']); - $mybb->input['group_1_groups'] = explode(",", $modtool['groups']); - - if(!$modtool['forums'] || $modtool['forums'] == -1) - { - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - } - else - { - $forum_checked[1] = ''; - $forum_checked[2] = "checked=\"checked\""; - } - - if(!$modtool['groups'] || $modtool['groups'] == -1) - { - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - } - else - { - $group_checked[1] = ''; - $group_checked[2] = "checked=\"checked\""; - } - - $mybb->input['confirmation'] = $thread_options['confirmation']; - $mybb->input['approvethread'] = $thread_options['approvethread']; - $mybb->input['softdeletethread'] = $thread_options['softdeletethread']; - $mybb->input['openthread'] = $thread_options['openthread']; - $mybb->input['stickthread'] = $thread_options['stickthread']; - $mybb->input['move_1_forum'] = $thread_options['movethread']; - $mybb->input['move_2_redirect'] = $thread_options['movethreadredirect']; - $mybb->input['move_3_redirecttime'] = $thread_options['movethreadredirectexpire']; - - if(!$thread_options['movethread']) - { - $move_checked[1] = "checked=\"checked\""; - $move_checked[2] = ''; - } - else - { - $move_checked[1] = ''; - $move_checked[2] = "checked=\"checked\""; - } - - if(!$thread_options['copythread']) - { - $copy_checked[1] = "checked=\"checked\""; - $copy_checked[2] = ''; - } - else - { - $copy_checked[1] = ''; - $copy_checked[2] = "checked=\"checked\""; - } - - $mybb->input['copy_1_forum'] = $thread_options['copythread']; - $mybb->input['deletethread'] = $thread_options['deletethread']; - $mybb->input['threadprefix'] = $thread_options['threadprefix']; - $mybb->input['newsubject'] = $thread_options['newsubject']; - $mybb->input['newreply'] = $thread_options['addreply']; - $mybb->input['newreplysubject'] = $thread_options['replysubject']; - $mybb->input['pm_subject'] = $thread_options['pm_subject']; - $mybb->input['pm_message'] = $thread_options['pm_message']; - - if($post_options['splitposts'] == '-1') - { - $do_not_split_checked = ' selected="selected"'; - $split_same_checked = ''; - } - else if($post_options['splitposts'] == '-2') - { - $do_not_split_checked = ''; - $split_same_checked = ' selected="selected"'; - } - - $mybb->input['softdeleteposts'] = $post_options['softdeleteposts']; - $mybb->input['deleteposts'] = $post_options['deleteposts']; - $mybb->input['mergeposts'] = $post_options['mergeposts']; - $mybb->input['approveposts'] = $post_options['approveposts']; - - if($post_options['splitpostsclose'] == 'close') - { - $mybb->input['splitpostsclose'] = '1'; - } - else - { - $mybb->input['splitpostsclose'] = '0'; - } - - if($post_options['splitpostsstick'] == 'stick') - { - $mybb->input['splitpostsstick'] = '1'; - } - else - { - $mybb->input['splitpostsstick'] = '0'; - } - - if($post_options['splitpostsunapprove'] == 'unapprove') - { - $mybb->input['splitpostsunapprove'] = '1'; - } - else - { - $mybb->input['splitpostsunapprove'] = '0'; - } - - $mybb->input['splitposts'] = $post_options['splitposts']; - $mybb->input['splitthreadprefix'] = $post_options['splitthreadprefix']; - $mybb->input['splitpostsnewsubject'] = $post_options['splitpostsnewsubject']; - $mybb->input['splitpostsaddreply'] = $post_options['splitpostsaddreply']; - $mybb->input['splitpostsreplysubject'] = $post_options['splitpostsreplysubject']; - } - - $form_container = new FormContainer($lang->general_options); - $form_container->output_row($lang->name." *", '', $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description." *", '', $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $actions = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('forum_1_forums[]', $mybb->input['forum_1_forums'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_in_forums." *", '', $actions); - - $actions = "
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('group_1_groups[]', $mybb->input['group_1_groups'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_to_groups." *", '', $actions); - $form_container->output_row($lang->show_confirmation." *", '', $form->generate_yes_no_radio('confirmation', $mybb->input['confirmation'], array('style' => 'width: 2em;'))); - $form_container->end(); - - $approve_unapprove = array( - '' => $lang->no_change, - 'approve' => $lang->approve, - 'unapprove' => $lang->unapprove, - 'toggle' => $lang->toggle - ); - - $form_container = new FormContainer($lang->inline_post_moderation); - - $softdelete_restore = array( - '' => $lang->no_change, - 'restore' => $lang->restore, - 'softdelete' => $lang->softdelete, - 'toggle' => $lang->toggle - ); - - $form_container->output_row($lang->softdelete_restore_posts." *", '', $form->generate_select_box('softdeleteposts', $softdelete_restore, $mybb->input['softdeleteposts'], array('id' => 'softdeleteposts')), 'softdeleteposts'); - $form_container->output_row($lang->delete_posts." *", '', $form->generate_yes_no_radio('deleteposts', $mybb->input['deleteposts'])); - $form_container->output_row($lang->merge_posts." *", $lang->merge_posts_desc, $form->generate_yes_no_radio('mergeposts', $mybb->input['mergeposts'])); - $form_container->output_row($lang->approve_unapprove_posts." *", '', $form->generate_select_box('approveposts', $approve_unapprove, $mybb->input['approveposts'], array('id' => 'approveposts')), 'approveposts'); - $form_container->end(); - - $selectoptions = "\n"; - $selectoptions .= "\n"; - - $form_container = new FormContainer($lang->split_posts); - $form_container->output_row($lang->split_posts2." *", '', $form->generate_forum_select('splitposts', $mybb->input['splitposts'])); - $form_container->output_row($lang->close_split_thread." *", '', $form->generate_yes_no_radio('splitpostsclose', $mybb->input['splitpostsclose'])); - $form_container->output_row($lang->stick_split_thread." *", '', $form->generate_yes_no_radio('splitpostsstick', $mybb->input['splitpostsstick'])); - $form_container->output_row($lang->unapprove_split_thread." *", '', $form->generate_yes_no_radio('splitpostsunapprove', $mybb->input['splitpostsunapprove'])); - - $splitthreadprefix = build_prefixes(); - if(!empty($splitthreadprefix)) - { - $split_thread_prefixes = array( - '0' => $lang->no_prefix - ); - - foreach($splitthreadprefix as $prefix) - { - $split_thread_prefixes[$prefix['pid']] = $prefix['prefix']; - } - - $form_container->output_row($lang->split_thread_prefix." *", '', $form->generate_select_box('splitthreadprefix', $split_thread_prefixes, array($mybb->get_input('splitthreadprefix', MyBB::INPUT_INT)), array('id' => 'splitthreadprefix')), 'splitthreadprefix'); - } - - $form_container->output_row($lang->split_thread_subject, $lang->split_thread_subject_desc, $form->generate_text_box('splitpostsnewsubject', $mybb->input['splitpostsnewsubject'], array('id' => 'splitpostsnewsubject ')), 'newreplysubject'); - $form_container->output_row($lang->add_new_split_reply, $lang->add_new_split_reply_desc, $form->generate_text_area('splitpostsaddreply', $mybb->input['splitpostsaddreply'], array('id' => 'splitpostsaddreply')), 'splitpostsaddreply'); - $form_container->output_row($lang->split_reply_subject, $lang->split_reply_subject_desc, $form->generate_text_box('splitpostsreplysubject', $mybb->input['splitpostsreplysubject'], array('id' => 'splitpostsreplysubject')), 'splitpostsreplysubject'); - $form_container->end(); - - $open_close = array( - '' => $lang->no_change, - 'open' => $lang->open, - 'close' => $lang->close, - 'toggle' => $lang->toggle - ); - - $stick_unstick = array( - '' => $lang->no_change, - 'stick' => $lang->stick, - 'unstick' => $lang->unstick, - 'toggle' => $lang->toggle - ); - - $form_container = new FormContainer($lang->thread_moderation); - $form_container->output_row($lang->approve_unapprove." *", '', $form->generate_select_box('approvethread', $approve_unapprove, $mybb->input['approvethread'], array('id' => 'approvethread')), 'approvethread'); - $form_container->output_row($lang->open_close_thread." *", '', $form->generate_select_box('openthread', $open_close, $mybb->input['openthread'], array('id' => 'openthread')), 'openthread'); - $form_container->output_row($lang->stick_unstick_thread." *", '', $form->generate_select_box('stickthread', $stick_unstick, $mybb->input['stickthread'], array('id' => 'stickthread')), 'stickthread'); - - - $actions = " -
-
-
-
- - - - - - - - - - - - - -
{$lang->forum_to_move_to}".$form->generate_forum_select('move_1_forum', $mybb->input['move_1_forum'])."
{$lang->leave_redirect}".$form->generate_yes_no_radio('move_2_redirect', $mybb->input['move_2_redirect'])."
{$lang->delete_redirect_after}".$form->generate_numeric_field('move_3_redirecttime', $mybb->input['move_3_redirecttime'], array('style' => 'width: 3em;', 'min' => 0))." {$lang->days}
-
-
- "; - $form_container->output_row($lang->move_thread." *", $lang->move_thread_desc, $actions); - - $actions = " -
-
-
-
- - - - - -
{$lang->forum_to_copy_to}".$form->generate_forum_select('copy_1_forum', $mybb->input['copy_1_forum'])."
-
-
- "; - $form_container->output_row($lang->copy_thread." *", '', $actions); - $form_container->output_row($lang->softdelete_restore_thread." *", '', $form->generate_select_box('softdeletethread', $softdelete_restore, $mybb->input['softdeletethread'], array('id' => 'softdeletethread')), 'softdeletethread'); - $form_container->output_row($lang->delete_thread." *", '', $form->generate_yes_no_radio('deletethread', $mybb->input['deletethread'])); - - $threadprefixes = build_prefixes(); - if(!empty($threadprefixes)) - { - $thread_prefixes = array( - '-1' => $lang->no_change, - '0' => $lang->no_prefix - ); - - foreach($threadprefixes as $prefix) - { - $thread_prefixes[$prefix['pid']] = $prefix['prefix']; - } - - $form_container->output_row($lang->apply_thread_prefix." *", '', $form->generate_select_box('threadprefix', $thread_prefixes, array($mybb->get_input('threadprefix', MyBB::INPUT_INT)), array('id' => 'threadprefix')), 'threadprefix'); - } - - $form_container->output_row($lang->new_subject." *", $lang->new_subject_desc, $form->generate_text_box('newsubject', $mybb->input['newsubject'])); - $form_container->end(); - - $form_container = new FormContainer($lang->add_new_reply); - $form_container->output_row($lang->add_new_reply, $lang->add_new_reply_desc, $form->generate_text_area('newreply', $mybb->input['newreply']), 'newreply'); - $form_container->output_row($lang->reply_subject, $lang->reply_subject_desc, $form->generate_text_box('newreplysubject', $mybb->input['newreplysubject'], array('id' => 'newreplysubject')), 'newreplysubject'); - $form_container->end(); - - $form_container = new FormContainer($lang->send_private_message); - $form_container->output_row($lang->private_message_message, $lang->private_message_message_desc, $form->generate_text_area('pm_message', $mybb->input['pm_message'], array('id' => 'pm_message')), 'pm_message'); - $form_container->output_row($lang->private_message_subject, $lang->private_message_subject_desc, $form->generate_text_box('pm_subject', $mybb->input['pm_subject'], array('id' => 'pm_subject')), 'pm_subject'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_post_tool); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "add_post_tool") -{ - $plugins->run_hooks("admin_config_mod_tools_add_post_tool"); - - if($mybb->request_method == 'post') - { - if(trim($mybb->input['title']) == "") - { - $errors[] = $lang->error_missing_title; - } - - if(trim($mybb->input['description']) == "") - { - $errors[] = $lang->error_missing_description; - } - - if($mybb->input['forum_type'] == 2) - { - $forum_checked[1] = ''; - $forum_checked[2] = "checked=\"checked\""; - - if(count($mybb->input['forum_1_forums']) < 1) - { - $errors[] = $lang->error_no_forums_selected; - } - } - else - { - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - - $mybb->input['forum_1_forums'] = ''; - } - - if($mybb->input['group_type'] == 2) - { - $group_checked[1] = ''; - $group_checked[2] = "checked=\"checked\""; - - if(count($mybb->input['group_1_groups']) < 1) - { - $errors[] = $lang->error_no_groups_selected; - } - } - else - { - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - - $mybb->input['group_1_groups'] = ''; - } - - if($mybb->input['approvethread'] != '' && $mybb->input['approvethread'] != 'approve' && $mybb->input['approvethread'] != 'unapprove' && $mybb->input['approvethread'] != 'toggle') - { - $mybb->input['approvethread'] = ''; - } - - if($mybb->input['softdeletethread'] != '' && $mybb->input['softdeletethread'] != 'softdelete' && $mybb->input['softdeletethread'] != 'restore' && $mybb->input['softdeletethread'] != 'toggle') - { - $mybb->input['softdeletethread'] = ''; - } - - if($mybb->input['openthread'] != '' && $mybb->input['openthread'] != 'open' && $mybb->input['openthread'] != 'close' && $mybb->input['openthread'] != 'toggle') - { - $mybb->input['openthread'] = ''; - } - - if($mybb->input['stickthread'] != '' && $mybb->input['stickthread'] != 'stick' && $mybb->input['stickthread'] != 'unstick' && $mybb->input['stickthread'] != 'toggle') - { - $mybb->input['stickthread'] = ''; - } - - if(!$mybb->get_input('threadprefix', MyBB::INPUT_INT)) - { - $mybb->input['threadprefix'] = ''; - } - - if($mybb->input['move_type'] == 2) - { - $move_checked[1] = ''; - $move_checked[2] = "checked=\"checked\""; - - if(!$mybb->input['move_1_forum']) - { - $errors[] = $lang->error_no_move_forum_selected; - } - else - { - // Check that the destination forum is not a category - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('move_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - } - else - { - $move_checked[1] = "checked=\"checked\""; - $move_checked[2] = ''; - - $mybb->input['move_1_forum'] = ''; - $mybb->input['move_2_redirect'] = 0; - $mybb->input['move_3_redirecttime'] = ''; - } - - if($mybb->input['copy_type'] == 2) - { - $copy_checked[1] = ''; - $copy_checked[2] = "checked=\"checked\""; - - if(!$mybb->input['copy_1_forum']) - { - $errors[] = $lang->error_no_copy_forum_selected; - } - else - { - $query = $db->simple_select("forums", "type", "fid = '".$mybb->get_input('copy_1_forum', MyBB::INPUT_INT)."'"); - if($db->fetch_field($query, "type") == "c") - { - $errors[] = $lang->error_forum_is_category; - } - } - } - else - { - $copy_checked[1] = 'checked=\"checked\"'; - $copy_checked[2] = ''; - - $mybb->input['copy_1_forum'] = ''; - } - - if($mybb->input['approveposts'] != '' && $mybb->input['approveposts'] != 'approve' && $mybb->input['approveposts'] != 'unapprove' && $mybb->input['approveposts'] != 'toggle') - { - $mybb->input['approveposts'] = ''; - } - - if($mybb->input['softdeleteposts'] != '' && $mybb->input['softdeleteposts'] != 'softdelete' && $mybb->input['softdeleteposts'] != 'restore' && $mybb->input['softdeleteposts'] != 'toggle') - { - $mybb->input['softdeleteposts'] = ''; - } - - if($mybb->input['splitposts'] < -2) - { - $mybb->input['splitposts'] = -1; - } - - if($mybb->input['splitpostsclose'] == 1) - { - $mybb->input['splitpostsclose'] = 'close'; - } - else - { - $mybb->input['splitpostsclose'] = ''; - } - - if($mybb->input['splitpostsstick'] == 1) - { - $mybb->input['splitpostsstick'] = 'stick'; - } - else - { - $mybb->input['splitpostsstick'] = ''; - } - - if($mybb->input['splitpostsunapprove'] == 1) - { - $mybb->input['splitpostsunapprove'] = 'unapprove'; - } - else - { - $mybb->input['splitpostsunapprove'] = ''; - } - - if(!$mybb->get_input('splitthreadprefix', MyBB::INPUT_INT)) - { - $mybb->input['splitthreadprefix'] = ''; - } - - if(!$errors) - { - $thread_options = array( - 'confirmation' => $mybb->get_input('confirmation', MyBB::INPUT_INT), - 'deletethread' => $mybb->get_input('deletethread', MyBB::INPUT_INT), - 'softdeletethread' => $mybb->input['softdeletethread'], - 'approvethread' => $mybb->input['approvethread'], - 'openthread' => $mybb->input['openthread'], - 'stickthread' => $mybb->input['stickthread'], - 'movethread' => $mybb->get_input('move_1_forum', MyBB::INPUT_INT), - 'movethreadredirect' => $mybb->get_input('move_2_redirect', MyBB::INPUT_INT), - 'movethreadredirectexpire' => $mybb->get_input('move_3_redirecttime', MyBB::INPUT_INT), - 'copythread' => $mybb->get_input('copy_1_forum', MyBB::INPUT_INT), - 'newsubject' => $mybb->input['newsubject'], - 'addreply' => $mybb->input['newreply'], - 'replysubject' => $mybb->input['newreplysubject'], - 'pm_subject' => $mybb->input['pm_subject'], - 'pm_message' => $mybb->input['pm_message'], - 'threadprefix' => $mybb->get_input('threadprefix', MyBB::INPUT_INT) - ); - - if(stripos($mybb->input['splitpostsnewsubject'], '{subject}') === false) - { - $mybb->input['splitpostsnewsubject'] = '{subject}'.$mybb->input['splitpostsnewsubject']; - } - - $post_options = array( - 'deleteposts' => $mybb->get_input('deleteposts', MyBB::INPUT_INT), - 'softdeleteposts' => $mybb->input['softdeleteposts'], - 'mergeposts' => $mybb->get_input('mergeposts', MyBB::INPUT_INT), - 'approveposts' => $mybb->input['approveposts'], - 'splitposts' => $mybb->get_input('splitposts', MyBB::INPUT_INT), - 'splitpostsclose' => $mybb->input['splitpostsclose'], - 'splitpostsstick' => $mybb->input['splitpostsstick'], - 'splitpostsunapprove' => $mybb->input['splitpostsunapprove'], - 'splitthreadprefix' => $mybb->get_input('splitthreadprefix', MyBB::INPUT_INT), - 'splitpostsnewsubject' => $mybb->input['splitpostsnewsubject'], - 'splitpostsaddreply' => $mybb->input['splitpostsaddreply'], - 'splitpostsreplysubject' => $mybb->input['splitpostsreplysubject'] - ); - - $new_tool['type'] = 'p'; - $new_tool['threadoptions'] = $db->escape_string(my_serialize($thread_options)); - $new_tool['postoptions'] = $db->escape_string(my_serialize($post_options)); - $new_tool['name'] = $db->escape_string($mybb->input['title']); - $new_tool['description'] = $db->escape_string($mybb->input['description']); - $new_tool['forums'] = ''; - $new_tool['groups'] = ''; - - if($mybb->input['forum_type'] == 2) - { - if(is_array($mybb->input['forum_1_forums'])) - { - $checked = array(); - - foreach($mybb->input['forum_1_forums'] as $fid) - { - $checked[] = (int)$fid; - } - - $new_tool['forums'] = implode(',', $checked); - } - } - else - { - $new_tool['forums'] = "-1"; - } - - if($mybb->input['group_type'] == 2) - { - if(is_array($mybb->input['group_1_groups'])) - { - $checked = array(); - - foreach($mybb->input['group_1_groups'] as $gid) - { - $checked[] = (int)$gid; - } - - $new_tool['groups'] = implode(',', $checked); - } - } - else - { - $new_tool['groups'] = "-1"; - } - - $tid = $db->insert_query("modtools", $new_tool); - - $plugins->run_hooks("admin_config_mod_tools_add_post_tool_commit"); - - // Log admin action - log_admin_action($tid, $mybb->input['title']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_mod_tool_created, 'success'); - admin_redirect("index.php?module=config-mod_tools&action=post_tools"); - } - } - - $page->add_breadcrumb_item($lang->add_new_post_tool); - $page->output_header($lang->mod_tools." - ".$lang->add_new_post_tool); - - $sub_tabs['thread_tools'] = array( - 'title' => $lang->thread_tools, - 'link' => "index.php?module=config-mod_tools" - ); - $sub_tabs['add_thread_tool'] = array( - 'title'=> $lang->add_new_thread_tool, - 'link' => "index.php?module=config-mod_tools&action=add_thread_tool" - ); - $sub_tabs['post_tools'] = array( - 'title' => $lang->post_tools, - 'link' => "index.php?module=config-mod_tools&action=post_tools", - ); - $sub_tabs['add_post_tool'] = array( - 'title'=> $lang->add_new_post_tool, - 'link' => "index.php?module=config-mod_tools&action=add_post_tool", - 'description' => $lang->add_post_tool_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_post_tool'); - - $form = new Form("index.php?module=config-mod_tools&action=add_post_tool", 'post'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['title'] = ''; - $mybb->input['description'] = ''; - $mybb->input['forum_1_forums'] = ''; - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - $mybb->input['group_1_groups'] = ''; - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - $mybb->input['confirmation'] = '0'; - $mybb->input['approvethread'] = ''; - $mybb->input['softdeletethread'] = ''; - $mybb->input['openthread'] = ''; - $mybb->input['stickthread'] = ''; - $mybb->input['move_1_forum'] = ''; - $mybb->input['move_2_redirect'] = '0'; - $mybb->input['move_3_redirecttime'] = ''; - $move_checked[1] = "checked=\"checked\""; - $move_checked[2] = ''; - $copy_checked[1] = "checked=\"checked\""; - $copy_checked[2] = ''; - $mybb->input['copy_1_forum'] = ''; - $mybb->input['deletethread'] = '0'; - $mybb->input['threadprefix'] = '-1'; - $mybb->input['newsubject'] = '{subject}'; - $mybb->input['newreply'] = ''; - $mybb->input['newreplysubject'] = '{subject}'; - $do_not_split_checked = ' selected="selected"'; - $split_same_checked = ''; - $mybb->input['deleteposts'] = '0'; - $mybb->input['mergeposts'] = '0'; - $mybb->input['approveposts'] = ''; - $mybb->input['softdeleteposts'] = ''; - $mybb->input['splitposts'] = '-1'; - $mybb->input['splitpostsclose'] = '0'; - $mybb->input['splitpostsstick'] = '0'; - $mybb->input['splitpostsunapprove'] = '0'; - $mybb->input['splitthreadprefix'] = '0'; - $mybb->input['splitpostsnewsubject'] = '{subject}'; - $mybb->input['splitpostsaddreply'] = ''; - $mybb->input['splitpostsreplysubject'] = '{subject}'; - } - - $form_container = new FormContainer($lang->general_options); - $form_container->output_row($lang->name." *", '', $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description." *", '', $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $actions = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('forum_1_forums[]', $mybb->input['forum_1_forums'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_in_forums." *", '', $actions); - - $actions = "
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('group_1_groups[]', $mybb->input['group_1_groups'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_to_groups." *", '', $actions); - $form_container->output_row($lang->show_confirmation." *", '', $form->generate_yes_no_radio('confirmation', $mybb->input['confirmation'], array('style' => 'width: 2em;'))); - $form_container->end(); - - $approve_unapprove = array( - '' => $lang->no_change, - 'approve' => $lang->approve, - 'unapprove' => $lang->unapprove, - 'toggle' => $lang->toggle - ); - - $form_container = new FormContainer($lang->inline_post_moderation); - - $softdelete_restore = array( - '' => $lang->no_change, - 'restore' => $lang->restore, - 'softdelete' => $lang->softdelete, - 'toggle' => $lang->toggle - ); - - $form_container->output_row($lang->softdelete_restore_posts." *", '', $form->generate_select_box('softdeleteposts', $softdelete_restore, $mybb->input['softdeleteposts'], array('id' => 'softdeleteposts')), 'softdeleteposts'); - $form_container->output_row($lang->delete_posts." *", '', $form->generate_yes_no_radio('deleteposts', $mybb->input['deleteposts'])); - $form_container->output_row($lang->merge_posts." *", $lang->merge_posts_desc, $form->generate_yes_no_radio('mergeposts', $mybb->input['mergeposts'])); - $form_container->output_row($lang->approve_unapprove_posts." *", '', $form->generate_select_box('approveposts', $approve_unapprove, $mybb->input['approveposts'], array('id' => 'approveposts')), 'approveposts'); - $form_container->end(); - - $selectoptions = "\n"; - $selectoptions .= "\n"; - - $form_container = new FormContainer($lang->split_posts); - $form_container->output_row($lang->split_posts2." *", '', $form->generate_forum_select('splitposts', $mybb->input['splitposts'])); - $form_container->output_row($lang->close_split_thread." *", '', $form->generate_yes_no_radio('splitpostsclose', $mybb->input['splitpostsclose'])); - $form_container->output_row($lang->stick_split_thread." *", '', $form->generate_yes_no_radio('splitpostsstick', $mybb->input['splitpostsstick'])); - $form_container->output_row($lang->unapprove_split_thread." *", '', $form->generate_yes_no_radio('splitpostsunapprove', $mybb->input['splitpostsunapprove'])); - - $splitthreadprefix = build_prefixes(); - if(!empty($splitthreadprefix)) - { - $split_thread_prefixes = array( - '0' => $lang->no_prefix - ); - - foreach($splitthreadprefix as $prefix) - { - $split_thread_prefixes[$prefix['pid']] = $prefix['prefix']; - } - - $form_container->output_row($lang->split_thread_prefix." *", '', $form->generate_select_box('splitthreadprefix', $split_thread_prefixes, array($mybb->get_input('splitthreadprefix', MyBB::INPUT_INT)), array('id' => 'splitthreadprefix')), 'splitthreadprefix'); - } - - $form_container->output_row($lang->split_thread_subject, $lang->split_thread_subject_desc, $form->generate_text_box('splitpostsnewsubject', $mybb->input['splitpostsnewsubject'], array('id' => 'splitpostsnewsubject ')), 'newreplysubject'); - $form_container->output_row($lang->add_new_split_reply, $lang->add_new_split_reply_desc, $form->generate_text_area('splitpostsaddreply', $mybb->input['splitpostsaddreply'], array('id' => 'splitpostsaddreply')), 'splitpostsaddreply'); - $form_container->output_row($lang->split_reply_subject, $lang->split_reply_subject_desc, $form->generate_text_box('splitpostsreplysubject', $mybb->input['splitpostsreplysubject'], array('id' => 'splitpostsreplysubject')), 'splitpostsreplysubject'); - $form_container->end(); - - $open_close = array( - '' => $lang->no_change, - 'open' => $lang->open, - 'close' => $lang->close, - 'toggle' => $lang->toggle - ); - - $stick_unstick = array( - '' => $lang->no_change, - 'stick' => $lang->stick, - 'unstick' => $lang->unstick, - 'toggle' => $lang->toggle - ); - - - $form_container = new FormContainer($lang->thread_moderation); - $form_container->output_row($lang->approve_unapprove." *", '', $form->generate_select_box('approvethread', $approve_unapprove, $mybb->input['approvethread'], array('id' => 'approvethread')), 'approvethread'); - $form_container->output_row($lang->open_close_thread." *", '', $form->generate_select_box('openthread', $open_close, $mybb->input['openthread'], array('id' => 'openthread')), 'openthread'); - $form_container->output_row($lang->stick_unstick_thread." *", '', $form->generate_select_box('stickthread', $stick_unstick, $mybb->input['stickthread'], array('id' => 'stickthread')), 'stickthread'); - - - $actions = " -
-
-
-
- - - - - - - - - - - - - -
{$lang->forum_to_move_to}".$form->generate_forum_select('move_1_forum', $mybb->input['move_1_forum'])."
{$lang->leave_redirect}".$form->generate_yes_no_radio('move_2_redirect', $mybb->input['move_2_redirect'])."
{$lang->delete_redirect_after}".$form->generate_numeric_field('move_3_redirecttime', $mybb->input['move_3_redirecttime'], array('style' => 'width: 3em;', 'min' => 0))." {$lang->days}
-
-
- "; - $form_container->output_row($lang->move_thread." *", $lang->move_thread_desc, $actions); - - $actions = " -
-
-
-
- - - - - -
{$lang->forum_to_copy_to}".$form->generate_forum_select('copy_1_forum', $mybb->input['copy_1_forum'])."
-
-
- "; - $form_container->output_row($lang->copy_thread." *", '', $actions); - $form_container->output_row($lang->softdelete_restore_thread." *", '', $form->generate_select_box('softdeletethread', $softdelete_restore, $mybb->input['softdeletethread'], array('id' => 'softdeletethread')), 'softdeletethread'); - $form_container->output_row($lang->delete_thread." *", '', $form->generate_yes_no_radio('deletethread', $mybb->input['deletethread'])); - - $threadprefixes = build_prefixes(); - if(!empty($threadprefixes)) - { - $thread_prefixes = array( - '-1' => $lang->no_change, - '0' => $lang->no_prefix - ); - - foreach($threadprefixes as $prefix) - { - $thread_prefixes[$prefix['pid']] = $prefix['prefix']; - } - - $form_container->output_row($lang->apply_thread_prefix." *", '', $form->generate_select_box('threadprefix', $thread_prefixes, $mybb->input['threadprefix'], array('id' => 'threadprefix')), 'threadprefix'); - } - - $form_container->output_row($lang->new_subject." *", $lang->new_subject_desc, $form->generate_text_box('newsubject', $mybb->input['newsubject'])); - $form_container->end(); - - $form_container = new FormContainer($lang->add_new_reply); - $form_container->output_row($lang->add_new_reply, $lang->add_new_reply_desc, $form->generate_text_area('newreply', $mybb->input['newreply'], array('id' => 'newreply')), 'newreply'); - $form_container->output_row($lang->reply_subject, $lang->reply_subject_desc, $form->generate_text_box('newreplysubject', $mybb->input['newreplysubject'], array('id' => 'newreplysubject')), 'newreplysubject'); - $form_container->end(); - - $form_container = new FormContainer($lang->send_private_message); - $form_container->output_row($lang->private_message_message, $lang->private_message_message_desc, $form->generate_text_area('pm_message', $mybb->input['pm_message'], array('id' => 'pm_message')), 'pm_message'); - $form_container->output_row($lang->private_message_subject, $lang->private_message_subject_desc, $form->generate_text_box('pm_subject', $mybb->input['pm_subject'], array('id' => 'pm_subject')), 'pm_subject'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_post_tool); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_mod_tools_start"); - - $page->output_header($lang->mod_tools." - ".$lang->thread_tools); - - $sub_tabs['thread_tools'] = array( - 'title' => $lang->thread_tools, - 'link' => "index.php?module=config-mod_tools", - 'description' => $lang->thread_tools_desc - ); - $sub_tabs['add_thread_tool'] = array( - 'title'=> $lang->add_new_thread_tool, - 'link' => "index.php?module=config-mod_tools&action=add_thread_tool" - ); - $sub_tabs['post_tools'] = array( - 'title' => $lang->post_tools, - 'link' => "index.php?module=config-mod_tools&action=post_tools", - ); - $sub_tabs['add_post_tool'] = array( - 'title'=> $lang->add_new_post_tool, - 'link' => "index.php?module=config-mod_tools&action=add_post_tool" - ); - - $page->output_nav_tabs($sub_tabs, 'thread_tools'); - - $table = new Table; - $table->construct_header($lang->title); - $table->construct_header($lang->controls, array('class' => "align_center", 'colspan' => 2)); - - $query = $db->simple_select('modtools', 'tid, name, description, type', "type='t'", array('order_by' => 'name')); - while($tool = $db->fetch_array($query)) - { - $table->construct_cell("".htmlspecialchars_uni($tool['name'])."
".htmlspecialchars_uni($tool['description']).""); - $table->construct_cell("{$lang->edit}", array('width' => 100, 'class' => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_thread_tool_deletion}')\">{$lang->delete}", array('width' => 100, 'class' => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_thread_tools, array('colspan' => 3)); - $table->construct_row(); - } - - $table->output($lang->thread_tools); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/module_meta.php b/html/forums/admin/modules/config/module_meta.php deleted file mode 100644 index 24bc7e8..0000000 --- a/html/forums/admin/modules/config/module_meta.php +++ /dev/null @@ -1,128 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -/** - * @return bool true - */ -function config_meta() -{ - global $page, $lang, $plugins; - - $sub_menu = array(); - $sub_menu['10'] = array("id" => "settings", "title" => $lang->bbsettings, "link" => "index.php?module=config-settings"); - $sub_menu['20'] = array("id" => "banning", "title" => $lang->banning, "link" => "index.php?module=config-banning"); - $sub_menu['30'] = array("id" => "profile_fields", "title" => $lang->custom_profile_fields, "link" => "index.php?module=config-profile_fields"); - $sub_menu['40'] = array("id" => "smilies", "title" => $lang->smilies, "link" => "index.php?module=config-smilies"); - $sub_menu['50'] = array("id" => "badwords", "title" => $lang->word_filters, "link" => "index.php?module=config-badwords"); - $sub_menu['60'] = array("id" => "mycode", "title" => $lang->mycode, "link" => "index.php?module=config-mycode"); - $sub_menu['70'] = array("id" => "languages", "title" => $lang->languages, "link" => "index.php?module=config-languages"); - $sub_menu['80'] = array("id" => "post_icons", "title" => $lang->post_icons, "link" => "index.php?module=config-post_icons"); - $sub_menu['90'] = array("id" => "help_documents", "title" => $lang->help_documents, "link" => "index.php?module=config-help_documents"); - $sub_menu['100'] = array("id" => "plugins", "title" => $lang->plugins, "link" => "index.php?module=config-plugins"); - $sub_menu['110'] = array("id" => "attachment_types", "title" => $lang->attachment_types, "link" => "index.php?module=config-attachment_types"); - $sub_menu['120'] = array("id" => "mod_tools", "title" => $lang->moderator_tools, "link" => "index.php?module=config-mod_tools"); - $sub_menu['130'] = array("id" => "spiders", "title" => $lang->spiders_bots, "link" => "index.php?module=config-spiders"); - $sub_menu['140'] = array("id" => "calendars", "title" => $lang->calendars, "link" => "index.php?module=config-calendars"); - $sub_menu['150'] = array("id" => "warning", "title" => $lang->warning_system, "link" => "index.php?module=config-warning"); - $sub_menu['160'] = array("id" => "thread_prefixes", "title" => $lang->thread_prefixes, "link" => "index.php?module=config-thread_prefixes"); - $sub_menu['170'] = array("id" => "questions", "title" => $lang->security_questions, "link" => "index.php?module=config-questions"); - $sub_menu['180'] = array("id" => "report_reasons", "title" => $lang->report_reasons, "link" => "index.php?module=config-report_reasons"); - - $sub_menu = $plugins->run_hooks("admin_config_menu", $sub_menu); - - $page->add_menu_item($lang->configuration, "config", "index.php?module=config", 10, $sub_menu); - - return true; -} - -/** - * @param string $action - * - * @return string - */ -function config_action_handler($action) -{ - global $page, $plugins; - - $page->active_module = "config"; - - $actions = array( - 'plugins' => array('active' => 'plugins', 'file' => 'plugins.php'), - 'smilies' => array('active' => 'smilies', 'file' => 'smilies.php'), - 'banning' => array('active' => 'banning', 'file' => 'banning.php'), - 'badwords' => array('active' => 'badwords', 'file' => 'badwords.php'), - 'profile_fields' => array('active' => 'profile_fields', 'file' => 'profile_fields.php'), - 'spiders' => array('active' => 'spiders', 'file' => 'spiders.php'), - 'attachment_types' => array('active' => 'attachment_types', 'file' => 'attachment_types.php'), - 'languages' => array('active' => 'languages', 'file' => 'languages.php'), - 'post_icons' => array('active' => 'post_icons', 'file' => 'post_icons.php'), - 'help_documents' => array('active' => 'help_documents', 'file' => 'help_documents.php'), - 'calendars' => array('active' => 'calendars', 'file' => 'calendars.php'), - 'warning' => array('active' => 'warning', 'file' => 'warning.php'), - 'mod_tools' => array('active' => 'mod_tools', 'file' => 'mod_tools.php'), - 'mycode' => array('active' => 'mycode', 'file' => 'mycode.php'), - 'settings' => array('active' => 'settings', 'file' => 'settings.php'), - 'thread_prefixes' => array('active' => 'thread_prefixes', 'file' => 'thread_prefixes.php'), - 'questions' => array('active' => 'questions', 'file' => 'questions.php'), - 'report_reasons' => array('active' => 'report_reasons', 'file' => 'report_reasons.php') - ); - - $actions = $plugins->run_hooks("admin_config_action_handler", $actions); - - if(isset($actions[$action])) - { - $page->active_action = $actions[$action]['active']; - return $actions[$action]['file']; - } - else - { - $page->active_action = "settings"; - return "settings.php"; - } -} - -/** - * @return array - */ -function config_admin_permissions() -{ - global $lang, $plugins; - - $admin_permissions = array( - "settings" => $lang->can_manage_settings, - "banning" => $lang->can_manage_banned_accounts, - "profile_fields" => $lang->can_manage_custom_profile_fields, - "smilies" => $lang->can_manage_smilies, - "badwords" => $lang->can_manage_bad_words, - "mycode" => $lang->can_manage_custom_mycode, - "languages" => $lang->can_manage_language_packs, - "post_icons" => $lang->can_manage_post_icons, - "help_documents" => $lang->can_manage_help_documents, - "plugins" => $lang->can_manage_plugins, - "attachment_types" => $lang->can_manage_attachment_types, - "spiders" => $lang->can_manage_spiders_bots, - "calendars" => $lang->can_manage_calendars, - "warning" => $lang->can_manage_warning_system, - "mod_tools" => $lang->can_manage_mod_tools, - "thread_prefixes" => $lang->can_manage_thread_prefixes, - "questions" => $lang->can_manage_security_questions, - "report_reasons" => $lang->can_manage_report_reasons - ); - - $admin_permissions = $plugins->run_hooks("admin_config_permissions", $admin_permissions); - - return array("name" => $lang->configuration, "permissions" => $admin_permissions, "disporder" => 10); -} diff --git a/html/forums/admin/modules/config/mycode.php b/html/forums/admin/modules/config/mycode.php deleted file mode 100644 index 79774cc..0000000 --- a/html/forums/admin/modules/config/mycode.php +++ /dev/null @@ -1,488 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->mycode, "index.php?module=config-mycode"); - -$plugins->run_hooks("admin_config_mycode_begin"); - -if($mybb->input['action'] == "toggle_status") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=config-mycode"); - } - - $query = $db->simple_select("mycode", "*", "cid='".$mybb->get_input('cid', MyBB::INPUT_INT)."'"); - $mycode = $db->fetch_array($query); - - if(!$mycode['cid']) - { - flash_message($lang->error_invalid_mycode, 'error'); - admin_redirect("index.php?module=config-mycode"); - } - - $plugins->run_hooks("admin_config_mycode_toggle_status"); - - if($mycode['active'] == 1) - { - $new_status = 0; - $phrase = $lang->success_deactivated_mycode; - } - else - { - $new_status = 1; - $phrase = $lang->success_activated_mycode; - } - $mycode_update = array( - 'active' => $new_status, - ); - - $plugins->run_hooks("admin_config_mycode_toggle_status_commit"); - - $db->update_query("mycode", $mycode_update, "cid='{$mycode['cid']}'"); - - $cache->update_mycode(); - - // Log admin action - log_admin_action($mycode['cid'], $mycode['title'], $new_status); - - flash_message($phrase, 'success'); - admin_redirect('index.php?module=config-mycode'); -} - -if($mybb->input['action'] == "xmlhttp_test_mycode" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_config_mycode_xmlhttp_test_mycode_start"); - - // Send no cache headers - header("Expires: Sat, 1 Jan 2000 01:00:00 GMT"); - header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); - header("Cache-Control: no-cache, must-revalidate"); - header("Pragma: no-cache"); - header("Content-type: text/html"); - - $sandbox = test_regex($mybb->input['regex'], $mybb->input['replacement'], $mybb->input['test_value']); - - $plugins->run_hooks("admin_config_mycode_xmlhttp_test_mycode_end"); - - echo $sandbox['actual']; - exit; -} - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_mycode_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!trim($mybb->input['regex'])) - { - $errors[] = $lang->error_missing_regex; - } - - $regex = str_replace("\x0", "", $mybb->input['regex']); - - if(check_existing_regex($regex)) - { - $errors[] = $lang->error_regex_already_available; - } - - if(!trim($mybb->input['replacement'])) - { - $errors[] = $lang->error_missing_replacement; - } - - if($mybb->input['test']) - { - $errors[] = $lang->changes_not_saved; - $sandbox = test_regex($mybb->input['regex'], $mybb->input['replacement'], $mybb->input['test_value']); - } - - if(!$errors) - { - $new_mycode = array( - 'title' => $db->escape_string($mybb->input['title']), - 'description' => $db->escape_string($mybb->input['description']), - 'regex' => $db->escape_string($regex), - 'replacement' => $db->escape_string($mybb->input['replacement']), - 'active' => $mybb->get_input('active', MyBB::INPUT_INT), - 'parseorder' => $mybb->get_input('parseorder', MyBB::INPUT_INT) - ); - - $cid = $db->insert_query("mycode", $new_mycode); - - $plugins->run_hooks("admin_config_mycode_add_commit"); - - $cache->update_mycode(); - - // Log admin action - log_admin_action($cid, htmlspecialchars_uni($mybb->input['title'])); - - flash_message($lang->success_added_mycode, 'success'); - admin_redirect('index.php?module=config-mycode'); - } - } - - $sub_tabs['mycode'] = array( - 'title' => $lang->mycode, - 'link' => "index.php?module=config-mycode", - 'description' => $lang->mycode_desc - ); - - $sub_tabs['add_new_mycode'] = array( - 'title' => $lang->add_new_mycode, - 'link' => "index.php?module=config-mycode&action=add", - 'description' => $lang->add_new_mycode_desc - ); - - $page->extra_header .= " - "; - - $page->add_breadcrumb_item($lang->add_new_mycode); - $page->output_header($lang->custom_mycode." - ".$lang->add_new_mycode); - $page->output_nav_tabs($sub_tabs, 'add_new_mycode'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['active'] = 1; - } - - $form = new Form("index.php?module=config-mycode&action=add", "post", "add"); - $form_container = new FormContainer($lang->add_mycode); - $form_container->output_row($lang->title." *", '', $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description, '', $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->regular_expression." *", $lang->regular_expression_desc.'
'.$lang->example.' \[b\](.*?)\[/b\]', $form->generate_text_area('regex', $mybb->input['regex'], array('id' => 'regex')), 'regex'); - $form_container->output_row($lang->replacement." *", $lang->replacement_desc.'
'.$lang->example.' <strong>$1</strong>', $form->generate_text_area('replacement', $mybb->input['replacement'], array('id' => 'replacement')), 'replacement'); - $form_container->output_row($lang->enabled." *", '', $form->generate_yes_no_radio('active', $mybb->input['active'])); - $form_container->output_row($lang->parse_order, $lang->parse_order_desc, $form->generate_numeric_field('parseorder', $mybb->input['parseorder'], array('id' => 'parseorder', 'min' => 0)), 'parseorder'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_mycode); - $form->output_submit_wrapper($buttons); - - // Sandbox - echo "
\n"; - $form_container = new FormContainer($lang->sandbox); - $form_container->output_row($lang->sandbox_desc); - $form_container->output_row($lang->test_value, $lang->test_value_desc, $form->generate_text_area('test_value', $mybb->input['test_value'], array('id' => 'test_value'))."
".$form->generate_submit_button($lang->test, array('id' => 'test', 'name' => 'test')), 'test_value'); - $form_container->output_row($lang->result_html, $lang->result_html_desc, $form->generate_text_area('result_html', $sandbox['html'], array('id' => 'result_html', 'disabled' => 1)), 'result_html'); - $form_container->output_row($lang->result_actual, $lang->result_actual_desc, "
{$sandbox['actual']}
"); - $form_container->end(); - echo ''; - echo ''; - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("mycode", "*", "cid='".$mybb->get_input('cid', MyBB::INPUT_INT)."'"); - $mycode = $db->fetch_array($query); - - if(!$mycode['cid']) - { - flash_message($lang->error_invalid_mycode, 'error'); - admin_redirect("index.php?module=config-mycode"); - } - - $plugins->run_hooks("admin_config_mycode_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!trim($mybb->input['regex'])) - { - $errors[] = $lang->error_missing_regex; - } - - $regex = str_replace("\x0", "", $mybb->input['regex']); - - if(check_existing_regex($regex, $mycode)) - { - $errors[] = $lang->error_regex_already_available; - } - - if(!trim($mybb->input['replacement'])) - { - $errors[] = $lang->error_missing_replacement; - } - - if($mybb->input['test']) - { - $errors[] = $lang->changes_not_saved; - $sandbox = test_regex($mybb->input['regex'], $mybb->input['replacement'], $mybb->input['test_value']); - } - - if(!$errors) - { - $updated_mycode = array( - 'title' => $db->escape_string($mybb->input['title']), - 'description' => $db->escape_string($mybb->input['description']), - 'regex' => $db->escape_string($regex), - 'replacement' => $db->escape_string($mybb->input['replacement']), - 'active' => $mybb->get_input('active', MyBB::INPUT_INT), - 'parseorder' => $mybb->get_input('parseorder', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_mycode_edit_commit"); - - $db->update_query("mycode", $updated_mycode, "cid='{$mycode['cid']}'"); - - $cache->update_mycode(); - - // Log admin action - log_admin_action($mycode['cid'], htmlspecialchars_uni($mybb->input['title'])); - - flash_message($lang->success_updated_mycode, 'success'); - admin_redirect('index.php?module=config-mycode'); - } - } - - $sub_tabs['edit_mycode'] = array( - 'title' => $lang->edit_mycode, - 'link' => "index.php?module=config-mycode&action=edit", - 'description' => $lang->edit_mycode_desc - ); - - $page->extra_header .= " - "; - - $page->add_breadcrumb_item($lang->edit_mycode); - $page->output_header($lang->custom_mycode." - ".$lang->edit_mycode); - $page->output_nav_tabs($sub_tabs, 'edit_mycode'); - - $form = new Form("index.php?module=config-mycode&action=edit", "post", "edit"); - echo $form->generate_hidden_field('cid', $mycode['cid']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, $mycode); - } - - $form_container = new FormContainer($lang->edit_mycode); - $form_container->output_row($lang->title." *", '', $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description, '', $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->regular_expression." *", $lang->regular_expression_desc.'
'.$lang->example.' \[b\](.*?)\[/b\]', $form->generate_text_area('regex', $mybb->input['regex'], array('id' => 'regex')), 'regex'); - $form_container->output_row($lang->replacement." *", $lang->replacement_desc.'
'.$lang->example.' <strong>$1</strong>', $form->generate_text_area('replacement', $mybb->input['replacement'], array('id' => 'replacement')), 'replacement'); - $form_container->output_row($lang->enabled." *", '', $form->generate_yes_no_radio('active', $mybb->input['active'])); - $form_container->output_row($lang->parse_order, $lang->parse_order_desc, $form->generate_numeric_field('parseorder', $mybb->input['parseorder'], array('id' => 'parseorder', 'min' => 0)), 'parseorder'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_mycode); - - $form->output_submit_wrapper($buttons); - - // Sandbox - echo "
\n"; - $form_container = new FormContainer($lang->sandbox); - $form_container->output_row($lang->sandbox_desc); - $form_container->output_row($lang->test_value, $lang->test_value_desc, $form->generate_text_area('test_value', $mybb->input['test_value'], array('id' => 'test_value'))."
".$form->generate_submit_button($lang->test, array('id' => 'test', 'name' => 'test')), 'test_value'); - $form_container->output_row($lang->result_html, $lang->result_html_desc, $form->generate_text_area('result_html', $sandbox['html'], array('id' => 'result_html', 'disabled' => 1)), 'result_html'); - $form_container->output_row($lang->result_actual, $lang->result_actual_desc, "
{$sandbox['actual']}
"); - $form_container->end(); - echo ''; - echo ''; - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("mycode", "*", "cid='".$mybb->get_input('cid', MyBB::INPUT_INT)."'"); - $mycode = $db->fetch_array($query); - - if(!$mycode['cid']) - { - flash_message($lang->error_invalid_mycode, 'error'); - admin_redirect("index.php?module=config-mycode"); - } - - $plugins->run_hooks("admin_config_mycode_delete"); - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-mycode"); - } - - if($mybb->request_method == "post") - { - $db->delete_query("mycode", "cid='{$mycode['cid']}'"); - - $plugins->run_hooks("admin_config_mycode_delete_commit"); - - $cache->update_mycode(); - - // Log admin action - log_admin_action($mycode['cid'], htmlspecialchars_uni($mycode['title'])); - - flash_message($lang->success_deleted_mycode, 'success'); - admin_redirect("index.php?module=config-mycode"); - } - else - { - $page->output_confirm_action("index.php?module=config-mycode&action=delete&cid={$mycode['cid']}", $lang->confirm_mycode_deletion); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_mycode_start"); - - $page->output_header($lang->custom_mycode); - - $sub_tabs['mycode'] = array( - 'title' => $lang->mycode, - 'link' => "index.php?module=config-mycode", - 'description' => $lang->mycode_desc - ); - - $sub_tabs['add_new_mycode'] = array( - 'title' => $lang->add_new_mycode, - 'link' => "index.php?module=config-mycode&action=add" - ); - - $page->output_nav_tabs($sub_tabs, 'mycode'); - - $table = new Table; - $table->construct_header($lang->title); - $table->construct_header($lang->controls, array('class' => 'align_center', 'width' => 150)); - - $query = $db->simple_select("mycode", "*", "", array('order_by' => 'parseorder')); - while($mycode = $db->fetch_array($query)) - { - if($mycode['active'] == 1) - { - $phrase = $lang->deactivate_mycode; - $icon = "style}/images/icons/bullet_on.png\" alt=\"({$lang->alt_enabled})\" title=\"{$lang->alt_enabled}\" style=\"vertical-align: middle;\" /> "; - } - else - { - $phrase = $lang->activate_mycode; - $icon = "style}/images/icons/bullet_off.png\" alt=\"({$lang->alt_disabled})\" title=\"{$lang->alt_disabled}\" style=\"vertical-align: middle;\" /> "; - } - - if($mycode['description']) - { - $mycode['description'] = "".htmlspecialchars_uni($mycode['description']).""; - } - - $table->construct_cell("
{$icon}".htmlspecialchars_uni($mycode['title'])."
{$mycode['description']}
"); - - $popup = new PopupMenu("mycode_{$mycode['cid']}", $lang->options); - $popup->add_item($lang->edit_mycode, "index.php?module=config-mycode&action=edit&cid={$mycode['cid']}"); - $popup->add_item($phrase, "index.php?module=config-mycode&action=toggle_status&cid={$mycode['cid']}&my_post_key={$mybb->post_code}"); - $popup->add_item($lang->delete_mycode, "index.php?module=config-mycode&action=delete&cid={$mycode['cid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_mycode_deletion}')"); - $table->construct_cell($popup->fetch(), array('class' => 'align_center')); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_mycode, array('colspan' => 2)); - $table->construct_row(); - } - - $table->output($lang->custom_mycode); - - $page->output_footer(); -} - -/** - * @param string $regex - * @param string $replacement - * @param string $test - * - * @return array - */ -function test_regex($regex, $replacement, $test) -{ - $array = array(); - $array['actual'] = @preg_replace("#".str_replace("\x0", "", $regex)."#si", $replacement, $test); - $array['html'] = htmlspecialchars_uni($array['actual']); - return $array; -} - -/** - * Checks if a regex is already available - * - * @param string $regex The regex to check - * @param array $current The currently edited MyCode - * - * @return bool True if already available, false otherwise - */ -function check_existing_regex($regex='', $current=array()) -{ - global $cache; - - if(!empty($current) && $current['regex'] == $regex) - { - return false; - } - - $mycodes = $cache->read('mycode'); - - foreach($mycodes as $mycode) - { - if($mycode['regex'] == $regex) - { - return true; - } - } - - return false; -} \ No newline at end of file diff --git a/html/forums/admin/modules/config/plugins.php b/html/forums/admin/modules/config/plugins.php deleted file mode 100644 index 9b9a151..0000000 --- a/html/forums/admin/modules/config/plugins.php +++ /dev/null @@ -1,715 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->plugins, "index.php?module=config-plugins"); - -$plugins->run_hooks("admin_config_plugins_begin"); - -if($mybb->input['action'] == "browse") -{ - $page->add_breadcrumb_item($lang->browse_plugins); - - $page->output_header($lang->browse_plugins); - - $sub_tabs['plugins'] = array( - 'title' => $lang->plugins, - 'link' => "index.php?module=config-plugins", - 'description' => $lang->plugins_desc - ); - $sub_tabs['update_plugins'] = array( - 'title' => $lang->plugin_updates, - 'link' => "index.php?module=config-plugins&action=check", - 'description' => $lang->plugin_updates_desc - ); - - $sub_tabs['browse_plugins'] = array( - 'title' => $lang->browse_plugins, - 'link' => "index.php?module=config-plugins&action=browse", - 'description' => $lang->browse_plugins_desc - ); - - $page->output_nav_tabs($sub_tabs, 'browse_plugins'); - - // Process search requests - require_once MYBB_ROOT."inc/class_xml.php"; - - $keywords = ""; - if($mybb->input['keywords']) - { - $keywords = "&keywords=".urlencode($mybb->input['keywords']); - } - - if($mybb->input['page']) - { - $url_page = "&page=".$mybb->get_input('page', MyBB::INPUT_INT); - } - else - { - $mybb->input['page'] = 1; - $url_page = ""; - } - - // Gets the major version code. i.e. 1410 -> 1400 or 121 -> 1200 - $major_version_code = round($mybb->version_code/100, 0)*100; - // Convert to mods site version codes - $search_version = ($major_version_code/100).'x'; - - $contents = fetch_remote_file("https://community.mybb.com/xmlbrowse.php?type=plugins&version={$search_version}{$keywords}{$url_page}", $post_data); - - if(!$contents) - { - $page->output_inline_error($lang->error_communication_problem); - $page->output_footer(); - exit; - } - - $table = new Table; - $table->construct_header($lang->plugin); - $table->construct_header($lang->latest_version, array("class" => "align_center", 'width' => 125)); - $table->construct_header($lang->controls, array("class" => "align_center", 'width' => 125)); - - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - if(!is_array($tree) || !isset($tree['results'])) - { - $page->output_inline_error($lang->error_communication_problem); - $page->output_footer(); - exit; - } - - if(!empty($tree['results']['result'])) - { - if(array_key_exists("tag", $tree['results']['result'])) - { - $only_plugin = $tree['results']['result']; - unset($tree['results']['result']); - $tree['results']['result'][0] = $only_plugin; - } - - require_once MYBB_ROOT . '/inc/class_parser.php'; - $post_parser = new postParser(); - - foreach($tree['results']['result'] as $result) - { - $result['name']['value'] = htmlspecialchars_uni($result['name']['value']); - $result['description']['value'] = htmlspecialchars_uni($result['description']['value']); - $result['author']['value'] = $post_parser->parse_message($result['author']['value'], array( - 'allow_html' => true - ) - ); - $result['version']['value'] = htmlspecialchars_uni($result['version']['value']); - $result['download_url']['value'] = htmlspecialchars_uni(html_entity_decode($result['download_url']['value'])); - - $table->construct_cell("{$result['name']['value']}
{$result['description']['value']}
{$lang->created_by} {$result['author']['value']}"); - $table->construct_cell($result['version']['value'], array("class" => "align_center")); - $table->construct_cell("{$lang->download}", array("class" => "align_center")); - $table->construct_row(); - } - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->error_no_results_found, array("colspan" => 3)); - $table->construct_row(); - } - - $search = new Form("index.php?module=config-plugins&action=browse", 'post', 'search_form'); - echo "
"; - if($mybb->input['keywords']) - { - $default_class = ''; - $value = htmlspecialchars_uni($mybb->input['keywords']); - } - else - { - $default_class = "search_default"; - $value = $lang->search_for_plugins; - } - echo $search->generate_text_box('keywords', $value, array('id' => 'search_keywords', 'class' => "{$default_class} field150 field_small"))."\n"; - echo "search}\" />\n"; - echo "\n"; - echo "
\n"; - echo $search->end(); - - // Recommended plugins = Default; Otherwise search results & pagination - if($mybb->request_method == "post") - { - $table->output("{$lang->browse_all_plugins}".$lang->sprintf($lang->browse_results_for_mybb, $mybb->version)); - } - else - { - $table->output("{$lang->browse_all_plugins}".$lang->sprintf($lang->recommended_plugins_for_mybb, $mybb->version)); - } - - echo "
".draw_admin_pagination($mybb->input['page'], 15, $tree['results']['attributes']['total'], "index.php?module=config-plugins&action=browse{$keywords}&page={page}"); - - $page->output_footer(); -} - -if($mybb->input['action'] == "check") -{ - $plugins_list = get_plugins_list(); - - $plugins->run_hooks("admin_config_plugins_check"); - - $info = array(); - - if($plugins_list) - { - $active_hooks = $plugins->hooks; - foreach($plugins_list as $plugin_file) - { - require_once MYBB_ROOT."inc/plugins/".$plugin_file; - $codename = str_replace(".php", "", $plugin_file); - $infofunc = $codename."_info"; - if(!function_exists($infofunc)) - { - continue; - } - $plugininfo = $infofunc(); - $plugininfo['guid'] = trim($plugininfo['guid']); - $plugininfo['codename'] = trim($plugininfo['codename']); - - if($plugininfo['codename'] != "") - { - $info[] = $plugininfo['codename']; - $names[$plugininfo['codename']] = array('name' => $plugininfo['name'], 'version' => $plugininfo['version']); - } - elseif($plugininfo['guid'] != "") - { - $info[] = $plugininfo['guid']; - $names[$plugininfo['guid']] = array('name' => $plugininfo['name'], 'version' => $plugininfo['version']); - } - } - $plugins->hooks = $active_hooks; - } - - if(empty($info)) - { - flash_message($lang->error_vcheck_no_supported_plugins, 'error'); - admin_redirect("index.php?module=config-plugins"); - } - - $url = "https://community.mybb.com/version_check.php?"; - $url .= http_build_query(array("info" => $info))."&"; - require_once MYBB_ROOT."inc/class_xml.php"; - $contents = fetch_remote_file($url); - - if(!$contents) - { - flash_message($lang->error_vcheck_communications_problem, 'error'); - admin_redirect("index.php?module=config-plugins"); - } - - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - if(!is_array($tree) || !isset($tree['plugins'])) - { - flash_message($lang->error_communication_problem, 'error'); - admin_redirect("index.php?module=config-plugins"); - } - - if(array_key_exists('error', $tree['plugins'])) - { - switch($tree['plugins'][0]['error']) - { - case "1": - $error_msg = $lang->error_no_input; - break; - case "2": - $error_msg = $lang->error_no_pids; - break; - default: - $error_msg = ""; - } - flash_message($lang->error_communication_problem.$error_msg, 'error'); - admin_redirect("index.php?module=config-plugins"); - } - - $table = new Table; - $table->construct_header($lang->plugin); - $table->construct_header($lang->your_version, array("class" => "align_center", 'width' => 125)); - $table->construct_header($lang->latest_version, array("class" => "align_center", 'width' => 125)); - $table->construct_header($lang->controls, array("class" => "align_center", 'width' => 125)); - - if(!is_array($tree['plugins']['plugin'])) - { - flash_message($lang->success_plugins_up_to_date, 'success'); - admin_redirect("index.php?module=config-plugins"); - } - - if(array_key_exists("tag", $tree['plugins']['plugin'])) - { - $only_plugin = $tree['plugins']['plugin']; - unset($tree['plugins']['plugin']); - $tree['plugins']['plugin'][0] = $only_plugin; - } - - foreach($tree['plugins']['plugin'] as $plugin) - { - $compare_by = array_key_exists("codename", $plugin['attributes']) ? "codename" : "guid"; - $is_vulnerable = array_key_exists("vulnerable", $plugin) ? true : false; - - if(version_compare($names[$plugin['attributes'][$compare_by]]['version'], $plugin['version']['value'], "<")) - { - $plugin['download_url']['value'] = htmlspecialchars_uni($plugin['download_url']['value']); - $plugin['vulnerable']['value'] = htmlspecialchars_uni($plugin['vulnerable']['value']); - $plugin['version']['value'] = htmlspecialchars_uni($plugin['version']['value']); - - if($is_vulnerable) - { - $table->construct_cell("
- {$lang->error_vcheck_vulnerable} {$names[$plugin['attributes'][$compare_by]]['name']} -
-

{$lang->error_vcheck_vulnerable_notes}

{$plugin['vulnerable']['value']}

"); - } - else - { - $table->construct_cell("{$names[$plugin['attributes'][$compare_by]]['name']}"); - } - $table->construct_cell("{$names[$plugin['attributes'][$compare_by]]['version']}", array("class" => "align_center")); - $table->construct_cell("{$plugin['version']['value']}", array("class" => "align_center")); - if($is_vulnerable) - { - $table->construct_cell("{$lang->deactivate}", array("class" => "align_center", "width" => 150)); - } - else - { - $table->construct_cell("{$lang->download}", array("class" => "align_center")); - } - $table->construct_row(); - } - } - - if($table->num_rows() == 0) - { - flash_message($lang->success_plugins_up_to_date, 'success'); - admin_redirect("index.php?module=config-plugins"); - } - - $page->add_breadcrumb_item($lang->plugin_updates); - - $page->output_header($lang->plugin_updates); - - $sub_tabs['plugins'] = array( - 'title' => $lang->plugins, - 'link' => "index.php?module=config-plugins", - ); - - $sub_tabs['update_plugins'] = array( - 'title' => $lang->plugin_updates, - 'link' => "index.php?module=config-plugins&action=check", - 'description' => $lang->plugin_updates_desc - ); - - $sub_tabs['browse_plugins'] = array( - 'title' => $lang->browse_plugins, - 'link' => "index.php?module=config-plugins&action=browse", - 'description' => $lang->browse_plugins_desc - ); - - $page->output_nav_tabs($sub_tabs, 'update_plugins'); - - $table->output($lang->plugin_updates); - - $page->output_footer(); -} - -// Activates or deactivates a specific plugin -if($mybb->input['action'] == "activate" || $mybb->input['action'] == "deactivate") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=config-plugins"); - } - - if($mybb->input['action'] == "activate") - { - $plugins->run_hooks("admin_config_plugins_activate"); - } - else - { - $plugins->run_hooks("admin_config_plugins_deactivate"); - } - - $codename = $mybb->input['plugin']; - $codename = str_replace(array(".", "/", "\\"), "", $codename); - $file = basename($codename.".php"); - - // Check if the file exists and throw an error if it doesn't - if(!file_exists(MYBB_ROOT."inc/plugins/$file")) - { - flash_message($lang->error_invalid_plugin, 'error'); - admin_redirect("index.php?module=config-plugins"); - } - - $plugins_cache = $cache->read("plugins"); - $active_plugins = $plugins_cache['active']; - - require_once MYBB_ROOT."inc/plugins/$file"; - - $installed_func = "{$codename}_is_installed"; - $installed = true; - if(function_exists($installed_func) && $installed_func() != true) - { - $installed = false; - } - - $install_uninstall = false; - - if($mybb->input['action'] == "activate") - { - $message = $lang->success_plugin_activated; - - // Plugin is compatible with this version? - if($plugins->is_compatible($codename) == false) - { - flash_message($lang->sprintf($lang->plugin_incompatible, $mybb->version), 'error'); - admin_redirect("index.php?module=config-plugins"); - } - - // If not installed and there is a custom installation function - if($installed == false && function_exists("{$codename}_install")) - { - call_user_func("{$codename}_install"); - $message = $lang->success_plugin_installed; - $install_uninstall = true; - } - - if(function_exists("{$codename}_activate")) - { - call_user_func("{$codename}_activate"); - } - - $active_plugins[$codename] = $codename; - $executed[] = 'activate'; - } - else if($mybb->input['action'] == "deactivate") - { - $message = $lang->success_plugin_deactivated; - - if(function_exists("{$codename}_deactivate")) - { - call_user_func("{$codename}_deactivate"); - } - - if($mybb->input['uninstall'] == 1 && function_exists("{$codename}_uninstall")) - { - call_user_func("{$codename}_uninstall"); - $message = $lang->success_plugin_uninstalled; - $install_uninstall = true; - } - - unset($active_plugins[$codename]); - } - - // Update plugin cache - $plugins_cache['active'] = $active_plugins; - $cache->update("plugins", $plugins_cache); - - // Log admin action - log_admin_action($codename, $install_uninstall); - - if($mybb->input['action'] == "activate") - { - $plugins->run_hooks("admin_config_plugins_activate_commit"); - } - else - { - $plugins->run_hooks("admin_config_plugins_deactivate_commit"); - } - - flash_message($message, 'success'); - admin_redirect("index.php?module=config-plugins"); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->plugins); - - $sub_tabs['plugins'] = array( - 'title' => $lang->plugins, - 'link' => "index.php?module=config-plugins", - 'description' => $lang->plugins_desc - ); - $sub_tabs['update_plugins'] = array( - 'title' => $lang->plugin_updates, - 'link' => "index.php?module=config-plugins&action=check", - 'description' => $lang->plugin_updates_desc - ); - - $sub_tabs['browse_plugins'] = array( - 'title' => $lang->browse_plugins, - 'link' => "index.php?module=config-plugins&action=browse", - 'description' => $lang->browse_plugins_desc - ); - - $page->output_nav_tabs($sub_tabs, 'plugins'); - - // Let's make things easier for our user - show them active - // and inactive plugins in different lists - $plugins_cache = $cache->read("plugins"); - $active_plugins = $plugins_cache['active']; - - $plugins_list = get_plugins_list(); - - $plugins->run_hooks("admin_config_plugins_plugin_list"); - - if(!empty($plugins_list)) - { - $a_plugins = $i_plugins = array(); - - foreach($plugins_list as $plugin_file) - { - require_once MYBB_ROOT."inc/plugins/".$plugin_file; - $codename = str_replace(".php", "", $plugin_file); - $infofunc = $codename."_info"; - - if(!function_exists($infofunc)) - { - continue; - } - - $plugininfo = $infofunc(); - $plugininfo['codename'] = $codename; - - if($active_plugins[$codename]) - { - // This is an active plugin - $plugininfo['is_active'] = 1; - - $a_plugins[] = $plugininfo; - continue; - } - - // Either installed and not active or completely inactive - $i_plugins[] = $plugininfo; - } - - $table = new Table; - $table->construct_header($lang->plugin); - $table->construct_header($lang->controls, array("colspan" => 2, "class" => "align_center", "width" => 300)); - - if(empty($a_plugins)) - { - $table->construct_cell($lang->no_active_plugins, array('colspan' => 3)); - $table->construct_row(); - } - else - { - build_plugin_list($a_plugins); - } - - $table->output($lang->active_plugin); - - $table = new Table; - $table->construct_header($lang->plugin); - $table->construct_header($lang->controls, array("colspan" => 2, "class" => "align_center", "width" => 300)); - - if(empty($i_plugins)) - { - $table->construct_cell($lang->no_inactive_plugins, array('colspan' => 3)); - $table->construct_row(); - } - else - { - build_plugin_list($i_plugins); - } - - $table->output($lang->inactive_plugin); - } - else - { - // No plugins - $table = new Table; - $table->construct_header($lang->plugin); - $table->construct_header($lang->controls, array("colspan" => 2, "class" => "align_center", "width" => 300)); - - $table->construct_cell($lang->no_plugins, array('colspan' => 3)); - $table->construct_row(); - - $table->output($lang->plugins); - } - - $page->output_footer(); -} - -/** - * @return array - */ -function get_plugins_list() -{ - // Get a list of the plugin files which exist in the plugins directory - $dir = @opendir(MYBB_ROOT."inc/plugins/"); - if($dir) - { - while($file = readdir($dir)) - { - $ext = get_extension($file); - if($ext == "php") - { - $plugins_list[] = $file; - } - } - @sort($plugins_list); - } - @closedir($dir); - - return $plugins_list; -} - -/** - * @param array $plugin_list - */ -function build_plugin_list($plugin_list) -{ - global $lang, $mybb, $plugins, $table; - - foreach($plugin_list as $plugininfo) - { - if($plugininfo['website']) - { - $plugininfo['name'] = "".$plugininfo['name'].""; - } - - if($plugininfo['authorsite']) - { - $plugininfo['author'] = "".$plugininfo['author'].""; - } - - if($plugins->is_compatible($plugininfo['codename']) == false) - { - $compatibility_warning = "".$lang->sprintf($lang->plugin_incompatible, $mybb->version).""; - } - else - { - $compatibility_warning = ""; - } - - $installed_func = "{$plugininfo['codename']}_is_installed"; - $install_func = "{$plugininfo['codename']}_install"; - $uninstall_func = "{$plugininfo['codename']}_uninstall"; - - $installed = true; - $install_button = false; - $uninstall_button = false; - - if(function_exists($installed_func) && $installed_func() != true) - { - $installed = false; - } - - if(function_exists($install_func)) - { - $install_button = true; - } - - if(function_exists($uninstall_func)) - { - $uninstall_button = true; - } - - $table->construct_cell("{$plugininfo['name']} ({$plugininfo['version']})
{$plugininfo['description']}
{$lang->created_by} {$plugininfo['author']}"); - - // Plugin is not installed at all - if($installed == false) - { - if($compatibility_warning) - { - $table->construct_cell("{$compatibility_warning}", array("class" => "align_center", "colspan" => 2)); - } - else - { - $table->construct_cell("post_code}\">{$lang->install_and_activate}", array("class" => "align_center", "colspan" => 2)); - } - } - // Plugin is activated and installed - else if($plugininfo['is_active']) - { - $table->construct_cell("post_code}\">{$lang->deactivate}", array("class" => "align_center", "width" => 150)); - if($uninstall_button) - { - $table->construct_cell("post_code}\">{$lang->uninstall}", array("class" => "align_center", "width" => 150)); - } - else - { - $table->construct_cell(" ", array("class" => "align_center", "width" => 150)); - } - } - // Plugin is installed but not active - else if($installed == true) - { - if($compatibility_warning && !$uninstall_button) - { - $table->construct_cell("{$compatibility_warning}", array("class" => "align_center", "colspan" => 2)); - } - else - { - $table->construct_cell("post_code}\">{$lang->activate}", array("class" => "align_center", "width" => 150)); - if($uninstall_button) - { - $table->construct_cell("post_code}\">{$lang->uninstall}", array("class" => "align_center", "width" => 150)); - } - else - { - $table->construct_cell(" ", array("class" => "align_center", "width" => 150)); - } - } - } - $table->construct_row(); - } -} diff --git a/html/forums/admin/modules/config/post_icons.php b/html/forums/admin/modules/config/post_icons.php deleted file mode 100644 index f8ba7cb..0000000 --- a/html/forums/admin/modules/config/post_icons.php +++ /dev/null @@ -1,499 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->post_icons, "index.php?module=config-post_icons"); - -$plugins->run_hooks("admin_config_post_icons_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_post_icons_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['path'])) - { - $errors[] = $lang->error_missing_path; - } - - if(!$errors) - { - $new_icon = array( - 'name' => $db->escape_string($mybb->input['name']), - 'path' => $db->escape_string($mybb->input['path']) - ); - - $iid = $db->insert_query("icons", $new_icon); - - $plugins->run_hooks("admin_config_post_icons_add_commit"); - - $cache->update_posticons(); - - // Log admin action - log_admin_action($iid, htmlspecialchars_uni($mybb->input['name'])); - - flash_message($lang->success_post_icon_added, 'success'); - admin_redirect('index.php?module=config-post_icons'); - } - } - - $page->add_breadcrumb_item($lang->add_post_icon); - $page->output_header($lang->post_icons." - ".$lang->add_post_icon); - - $sub_tabs['manage_icons'] = array( - 'title' => $lang->manage_post_icons, - 'link' => "index.php?module=config-post_icons" - ); - - $sub_tabs['add_icon'] = array( - 'title' => $lang->add_post_icon, - 'link' => "index.php?module=config-post_icons&action=add", - 'description' => $lang->add_post_icon_desc - ); - - $sub_tabs['add_multiple'] = array( - 'title' => $lang->add_multiple_post_icons, - 'link' => "index.php?module=config-post_icons&action=add_multiple" - ); - - $page->output_nav_tabs($sub_tabs, 'add_icon'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['path'] = 'images/icons/'; - } - - $form = new Form("index.php?module=config-post_icons&action=add", "post", "add"); - $form_container = new FormContainer($lang->add_post_icon); - $form_container->output_row($lang->name." *", $lang->name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->image_path." *", $lang->image_path_desc, $form->generate_text_box('path', $mybb->input['path'], array('id' => 'path')), 'path'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_post_icon); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "add_multiple") -{ - $plugins->run_hooks("admin_config_post_icons_add_multiple"); - - if($mybb->request_method == "post") - { - if($mybb->input['step'] == 1) - { - if(!trim($mybb->input['pathfolder'])) - { - $errors[] = $lang->error_missing_path_multiple; - } - - $path = $mybb->input['pathfolder']; - $dir = @opendir(MYBB_ROOT.$path); - if(!$dir) - { - $errors[] = $lang->error_invalid_path; - } - - if(substr($path, -1, 1) !== "/") - { - $path .= "/"; - } - - $query = $db->simple_select("icons"); - - $aicons = array(); - while($icon = $db->fetch_array($query)) - { - $aicons[$icon['path']] = 1; - } - - $icons = array(); - if(!$errors) - { - while($file = readdir($dir)) - { - if($file != ".." && $file != ".") - { - $ext = get_extension($file); - if($ext == "gif" || $ext == "jpg" || $ext == "jpeg" || $ext == "png" || $ext == "bmp") - { - if(!$aicons[$path.$file]) - { - $icons[] = $file; - } - } - } - } - closedir($dir); - - if(count($icons) == 0) - { - $errors[] = $lang->error_no_images; - } - } - - // Check for errors again (from above statement)! - if(!$errors) - { - // We have no errors so let's proceed! - $page->add_breadcrumb_item($lang->add_multiple_post_icons); - $page->output_header($lang->post_icons." - ".$lang->add_multiple_post_icons); - - $sub_tabs['manage_icons'] = array( - 'title' => $lang->manage_post_icons, - 'link' => "index.php?module=config-post_icons" - ); - - $sub_tabs['add_icon'] = array( - 'title' => $lang->add_post_icon, - 'link' => "index.php?module=config-post_icons&action=add" - ); - - $sub_tabs['add_multiple'] = array( - 'title' => $lang->add_multiple_post_icons, - 'link' => "index.php?module=config-post_icons&action=add_multiple", - 'description' => $lang->add_multiple_post_icons_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_multiple'); - - $form = new Form("index.php?module=config-post_icons&action=add_multiple", "post", "add_multiple"); - echo $form->generate_hidden_field("step", "2"); - echo $form->generate_hidden_field("pathfolder", $path); - - $form_container = new FormContainer($lang->add_multiple_post_icons); - $form_container->output_row_header($lang->image, array("class" => "align_center", 'width' => '10%')); - $form_container->output_row_header($lang->name); - $form_container->output_row_header($lang->add, array("class" => "align_center", 'width' => '5%')); - - foreach($icons as $key => $file) - { - $ext = get_extension($file); - $find = str_replace(".".$ext, "", $file); - $name = ucfirst($find); - - $form_container->output_cell("\"\"
{$file}", array("class" => "align_center", "width" => 1)); - $form_container->output_cell($form->generate_text_box("name[{$file}]", $name, array('id' => 'name', 'style' => 'width: 98%'))); - $form_container->output_cell($form->generate_check_box("include[{$file}]", 1, "", array('checked' => 1)), array("class" => "align_center")); - $form_container->construct_row(); - } - - if($form_container->num_rows() == 0) - { - flash_message($lang->error_no_images, 'error'); - admin_redirect("index.php?module=config-post_icons&action=add_multiple"); - } - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_post_icons); - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); - exit; - } - } - else - { - $path = $mybb->input['pathfolder']; - reset($mybb->input['include']); - $name = $mybb->input['name']; - - if(empty($mybb->input['include'])) - { - flash_message($lang->error_none_included, 'error'); - admin_redirect("index.php?module=config-post_icons&action=add_multiple"); - } - - foreach($mybb->input['include'] as $image => $insert) - { - if($insert) - { - $new_icon = array( - 'name' => $db->escape_string($name[$image]), - 'path' => $db->escape_string($path.$image) - ); - - $db->insert_query("icons", $new_icon); - } - } - - $plugins->run_hooks("admin_config_post_icons_add_multiple_commit"); - - $cache->update_posticons(); - - // Log admin action - log_admin_action(); - - flash_message($lang->success_post_icons_added, 'success'); - admin_redirect("index.php?module=config-post_icons"); - } - } - - $page->add_breadcrumb_item($lang->add_multiple_post_icons); - $page->output_header($lang->post_icons." - ".$lang->add_multiple_post_icons); - - $sub_tabs['manage_icons'] = array( - 'title' => $lang->manage_post_icons, - 'link' => "index.php?module=config-post_icons" - ); - - $sub_tabs['add_icon'] = array( - 'title' => $lang->add_post_icon, - 'link' => "index.php?module=config-post_icons&action=add" - ); - - $sub_tabs['add_multiple'] = array( - 'title' => $lang->add_multiple_post_icons, - 'link' => "index.php?module=config-post_icons&action=add_multiple", - 'description' => $lang->add_multiple_post_icons_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_multiple'); - - $form = new Form("index.php?module=config-post_icons&action=add_multiple", "post", "add_multiple"); - echo $form->generate_hidden_field("step", "1"); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_multiple_post_icons); - $form_container->output_row($lang->path_to_images." *", $lang->path_to_images_desc, $form->generate_text_box('pathfolder', $mybb->input['pathfolder'], array('id' => 'pathfolder')), 'pathfolder'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->show_post_icons); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("icons", "*", "iid='".$mybb->get_input('iid', MyBB::INPUT_INT)."'"); - $icon = $db->fetch_array($query); - - if(!$icon['iid']) - { - flash_message($lang->error_invalid_post_icon, 'error'); - admin_redirect("index.php?module=config-post_icons"); - } - - $plugins->run_hooks("admin_config_post_icons_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['path'])) - { - $errors[] = $lang->error_missing_path; - } - - if(!$errors) - { - $updated_icon = array( - 'name' => $db->escape_string($mybb->input['name']), - 'path' => $db->escape_string($mybb->input['path']) - ); - - $plugins->run_hooks("admin_config_post_icons_edit_commit"); - - $db->update_query("icons", $updated_icon, "iid='{$icon['iid']}'"); - - $cache->update_posticons(); - - // Log admin action - log_admin_action($icon['iid'], htmlspecialchars_uni($mybb->input['name'])); - - flash_message($lang->success_post_icon_updated, 'success'); - admin_redirect('index.php?module=config-post_icons'); - } - } - - $page->add_breadcrumb_item($lang->edit_post_icon); - $page->output_header($lang->post_icons." - ".$lang->edit_post_icon); - - $sub_tabs['edit_icon'] = array( - 'title' => $lang->edit_post_icon, - 'link' => "index.php?module=config-post_icons", - 'description' => $lang->edit_post_icon_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_icon'); - - $form = new Form("index.php?module=config-post_icons&action=edit", "post", "edit"); - echo $form->generate_hidden_field("iid", $icon['iid']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, $icon); - } - - $form_container = new FormContainer($lang->edit_post_icon); - $form_container->output_row($lang->name." *", $lang->name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->image_path." *", $lang->image_path_desc, $form->generate_text_box('path', $mybb->input['path'], array('id' => 'path')), 'path'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_post_icon); - $buttons[] = $form->generate_reset_button($lang->reset); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("icons", "*", "iid='".$mybb->get_input('iid', MyBB::INPUT_INT)."'"); - $icon = $db->fetch_array($query); - - if(!$icon['iid']) - { - flash_message($lang->error_invalid_post_icon, 'error'); - admin_redirect("index.php?module=config-post_icons"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-post_icons"); - } - - $plugins->run_hooks("admin_config_post_icons_delete"); - - if($mybb->request_method == "post") - { - $db->delete_query("icons", "iid='{$icon['iid']}'"); - - $plugins->run_hooks("admin_config_post_icons_delete_commit"); - - $cache->update_posticons(); - - // Log admin action - log_admin_action($icon['iid'], htmlspecialchars_uni($icon['name'])); - - flash_message($lang->success_post_icon_deleted, 'success'); - admin_redirect("index.php?module=config-post_icons"); - } - else - { - $page->output_confirm_action("index.php?module=config-post_icons&action=delete&iid={$icon['iid']}", $lang->confirm_post_icon_deletion); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_post_icons_start"); - - $page->output_header($lang->post_icons); - - $sub_tabs['manage_icons'] = array( - 'title' => $lang->manage_post_icons, - 'link' => "index.php?module=config-post_icons", - 'description' => $lang->manage_post_icons_desc - ); - - $sub_tabs['add_icon'] = array( - 'title' => $lang->add_post_icon, - 'link' => "index.php?module=config-post_icons&action=add" - ); - - $sub_tabs['add_multiple'] = array( - 'title' => $lang->add_multiple_post_icons, - 'link' => "index.php?module=config-post_icons&action=add_multiple" - ); - - $page->output_nav_tabs($sub_tabs, 'manage_icons'); - - $pagenum = $mybb->get_input('page', MyBB::INPUT_INT); - if($pagenum) - { - $start = ($pagenum - 1) * 20; - } - else - { - $start = 0; - $pagenum = 1; - } - - $table = new Table; - $table->construct_header($lang->image, array('class' => "align_center", 'width' => 1)); - $table->construct_header($lang->name, array('width' => "70%")); - $table->construct_header($lang->controls, array('class' => "align_center", 'colspan' => 2)); - - $query = $db->simple_select("icons", "*", "", array('limit_start' => $start, 'limit' => 20, 'order_by' => 'name')); - while($icon = $db->fetch_array($query)) - { - $icon['path'] = str_replace("{theme}", "images", $icon['path']); - if(my_validate_url($icon['path'], true)) - { - $image = $icon['path']; - } - else - { - $image = "../".$icon['path']; - } - - $table->construct_cell("\"\"", array("class" => "align_center")); - $table->construct_cell(htmlspecialchars_uni($icon['name'])); - - $table->construct_cell("{$lang->edit}", array("class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_post_icon_deletion}')\">{$lang->delete}", array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_post_icons, array('colspan' => 4)); - $table->construct_row(); - } - - $table->output($lang->manage_post_icons); - - $query = $db->simple_select("icons", "COUNT(iid) AS icons"); - $total_rows = $db->fetch_field($query, "icons"); - - echo "
".draw_admin_pagination($pagenum, "20", $total_rows, "index.php?module=config-post_icons&page={page}"); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/profile_fields.php b/html/forums/admin/modules/config/profile_fields.php deleted file mode 100644 index 1dd230a..0000000 --- a/html/forums/admin/modules/config/profile_fields.php +++ /dev/null @@ -1,795 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->custom_profile_fields, "index.php?module=config-profile_fields"); - -$plugins->run_hooks("admin_config_profile_fields_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_profile_fields_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['description'])) - { - $errors[] = $lang->error_missing_description; - } - - if(!trim($mybb->input['fieldtype'])) - { - $errors[] = $lang->error_missing_fieldtype; - } - - if(!$errors) - { - $type = $mybb->input['fieldtype']; - $options = preg_replace("#(\r\n|\r|\n)#s", "\n", trim($mybb->input['options'])); - if($type != "text" && $type != "textarea") - { - $thing = "$type\n$options"; - } - else - { - $thing = $type; - } - - foreach(array('viewableby', 'editableby') as $key) - { - if($mybb->input[$key] == 'all') - { - $mybb->input[$key] = -1; - } - elseif($mybb->input[$key] == 'custom') - { - if(isset($mybb->input['select'][$key]) && is_array($mybb->input['select'][$key])) - { - foreach($mybb->input['select'][$key] as &$val) - { - $val = (int)$val; - } - unset($val); - - $mybb->input[$key] = implode(',', (array)$mybb->input['select'][$key]); - } - else - { - $mybb->input[$key] = ''; - } - } - else - { - $mybb->input[$key] = ''; - } - } - - $new_profile_field = array( - "name" => $db->escape_string($mybb->input['name']), - "description" => $db->escape_string($mybb->input['description']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "type" => $db->escape_string($thing), - "regex" => $db->escape_string($mybb->input['regex']), - "length" => $mybb->get_input('length', MyBB::INPUT_INT), - "maxlength" => $mybb->get_input('maxlength', MyBB::INPUT_INT), - "required" => $mybb->get_input('required', MyBB::INPUT_INT), - "registration" => $mybb->get_input('registration', MyBB::INPUT_INT), - "profile" => $mybb->get_input('profile', MyBB::INPUT_INT), - "viewableby" => $db->escape_string($mybb->input['viewableby']), - "editableby" => $db->escape_string($mybb->input['editableby']), - "postbit" => $mybb->get_input('postbit', MyBB::INPUT_INT), - "postnum" => $mybb->get_input('postnum', MyBB::INPUT_INT), - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT), - "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT), - "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT) - ); - - $fid = $db->insert_query("profilefields", $new_profile_field); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."userfields ADD fid{$fid} TEXT"); - - $plugins->run_hooks("admin_config_profile_fields_add_commit"); - - $cache->update_profilefields(); - - // Log admin action - log_admin_action($fid, htmlspecialchars_uni($mybb->input['name'])); - - flash_message($lang->success_profile_field_added, 'success'); - admin_redirect("index.php?module=config-profile_fields"); - } - } - - $page->add_breadcrumb_item($lang->add_new_profile_field); - $page->output_header($lang->custom_profile_fields." - ".$lang->add_new_profile_field); - - $sub_tabs['custom_profile_fields'] = array( - 'title' => $lang->custom_profile_fields, - 'link' => "index.php?module=config-profile_fields" - ); - - $sub_tabs['add_profile_field'] = array( - 'title' => $lang->add_new_profile_field, - 'link' => "index.php?module=config-profile_fields&action=add", - 'description' => $lang->add_new_profile_field_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_profile_field'); - $form = new Form("index.php?module=config-profile_fields&action=add", "post", "add"); - - if($errors) - { - switch($mybb->input['viewableby']) - { - case 'all': - $mybb->input['viewableby'] = -1; - break; - case 'custom': - $mybb->input['viewableby'] = implode(',', (array)$mybb->input['select']['viewableby']); - break; - default: - $mybb->input['viewableby'] = ''; - break; - } - - switch($mybb->input['editableby']) - { - case 'all': - $mybb->input['editableby'] = -1; - break; - case 'custom': - $mybb->input['editableby'] = implode(',', (array)$mybb->input['select']['editableby']); - break; - default: - $mybb->input['editableby'] = ''; - break; - } - - $page->output_inline_error($errors); - } - else - { - $mybb->input['fieldtype'] = 'textbox'; - $mybb->input['required'] = 0; - $mybb->input['registration'] = 0; - $mybb->input['editable'] = 1; - $mybb->input['hidden'] = 0; - $mybb->input['postbit'] = 0; - } - - if(empty($mybb->input['viewableby'])) - { - $mybb->input['viewableby'] = ''; - } - - if(empty($mybb->input['editableby'])) - { - $mybb->input['editableby'] = ''; - } - - $form_container = new FormContainer($lang->add_new_profile_field); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $select_list = array( - "text" => $lang->text, - "textarea" => $lang->textarea, - "select" => $lang->select, - "multiselect" => $lang->multiselect, - "radio" => $lang->radio, - "checkbox" => $lang->checkbox - ); - $form_container->output_row($lang->field_type." *", $lang->field_type_desc, $form->generate_select_box('fieldtype', $select_list, $mybb->input['fieldtype'], array('id' => 'fieldtype')), 'fieldtype'); - $form_container->output_row($lang->field_regex, $lang->field_regex_desc, $form->generate_text_box('regex', $mybb->input['regex'], array('id' => 'regex')), 'regex', array(), array('id' => 'row_regex')); - $form_container->output_row($lang->maximum_length, $lang->maximum_length_desc, $form->generate_numeric_field('maxlength', $mybb->input['maxlength'], array('id' => 'maxlength', 'min' => 0)), 'maxlength', array(), array('id' => 'row_maxlength')); - $form_container->output_row($lang->field_length, $lang->field_length_desc, $form->generate_numeric_field('length', $mybb->input['length'], array('id' => 'length', 'min' => 0)), 'length', array(), array('id' => 'row_fieldlength')); - $form_container->output_row($lang->selectable_options, $lang->selectable_options_desc, $form->generate_text_area('options', $mybb->input['options'], array('id' => 'options')), 'options', array(), array('id' => 'row_options')); - $form_container->output_row($lang->min_posts_enabled, $lang->min_posts_enabled_desc, $form->generate_numeric_field('postnum', $mybb->input['postnum'], array('id' => 'postnum', 'min' => 0)), 'postnum'); - $form_container->output_row($lang->display_order." *", $lang->display_order_desc, $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->required." *", $lang->required_desc, $form->generate_yes_no_radio('required', $mybb->input['required'])); - $form_container->output_row($lang->show_on_registration." *", $lang->show_on_registration_desc, $form->generate_yes_no_radio('registration', $mybb->input['registration'])); - $form_container->output_row($lang->display_on_profile." *", $lang->display_on_profile_desc, $form->generate_yes_no_radio('profile', $mybb->input['profile'])); - $form_container->output_row($lang->display_on_postbit." *", $lang->display_on_postbit_desc, $form->generate_yes_no_radio('postbit', $mybb->input['postbit'])); - - $selected_values = ''; - if($mybb->input['viewableby'] != '' && $mybb->input['viewableby'] != -1) - { - $selected_values = explode(',', $mybb->get_input('viewableby')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $group_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['viewableby'] == -1) - { - $group_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['viewableby'] != '') - { - $group_checked['custom'] = 'checked="checked"'; - } - else - { - $group_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $select_code = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('select[viewableby][]', $selected_values, array('id' => 'viewableby', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - $form_container->output_row($lang->viewableby, $lang->viewableby_desc, $select_code, '', array(), array('id' => 'row_viewableby')); - - $selected_values = ''; - if($mybb->input['editableby'] != '' && $mybb->input['editableby'] != -1) - { - $selected_values = explode(',', $mybb->get_input('editableby')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $group_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['editableby'] == -1) - { - $group_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['editableby'] != '') - { - $group_checked['custom'] = 'checked="checked"'; - } - else - { - $group_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $select_code = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('select[editableby][]', $selected_values, array('id' => 'editableby', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - $form_container->output_row($lang->editableby, $lang->editableby_desc, $select_code, '', array(), array('id' => 'row_editableby')); - - $parser_options = array( - $form->generate_check_box('allowhtml', 1, $lang->parse_allowhtml, array('checked' => $mybb->input['allowhtml'], 'id' => 'allowhtml')), - $form->generate_check_box('allowmycode', 1, $lang->parse_allowmycode, array('checked' => $mybb->input['allowmycode'], 'id' => 'allowmycode')), - $form->generate_check_box('allowsmilies', 1, $lang->parse_allowsmilies, array('checked' => $mybb->input['allowsmilies'], 'id' => 'allowsmilies')), - $form->generate_check_box('allowimgcode', 1, $lang->parse_allowimgcode, array('checked' => $mybb->input['allowimgcode'], 'id' => 'allowimgcode')), - $form->generate_check_box('allowvideocode', 1, $lang->parse_allowvideocode, array('checked' => $mybb->input['allowvideocode'], 'id' => 'allowvideocode')) - ); - $form_container->output_row($lang->parser_options, '', implode('
', $parser_options), '', array(), array('id' => 'row_parser_options')); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_profile_field); - - $form->output_submit_wrapper($buttons); - $form->end(); - - echo ' - '; - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("profilefields", "*", "fid = '".$mybb->get_input('fid', MyBB::INPUT_INT)."'"); - $profile_field = $db->fetch_array($query); - - if(!$profile_field['fid']) - { - flash_message($lang->error_invalid_fid, 'error'); - admin_redirect("index.php?module=config-profile_fields"); - } - - $plugins->run_hooks("admin_config_profile_fields_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['description'])) - { - $errors[] = $lang->error_missing_description; - } - - if(!trim($mybb->input['fieldtype'])) - { - $errors[] = $lang->error_missing_fieldtype; - } - - $type = $mybb->input['fieldtype']; - $options = preg_replace("#(\r\n|\r|\n)#s", "\n", trim($mybb->input['options'])); - if($type != "text" && $type != "textarea") - { - $type = "$type\n$options"; - } - - if(!$errors) - { - foreach(array('viewableby', 'editableby') as $key) - { - if($mybb->input[$key] == 'all') - { - $mybb->input[$key] = -1; - } - elseif($mybb->input[$key] == 'custom') - { - if(isset($mybb->input['select'][$key]) && is_array($mybb->input['select'][$key])) - { - foreach($mybb->input['select'][$key] as &$val) - { - $val = (int)$val; - } - unset($val); - - $mybb->input[$key] = implode(',', (array)$mybb->input['select'][$key]); - } - else - { - $mybb->input[$key] = ''; - } - } - else - { - $mybb->input[$key] = ''; - } - } - - $updated_profile_field = array( - "name" => $db->escape_string($mybb->input['name']), - "description" => $db->escape_string($mybb->input['description']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "type" => $db->escape_string($type), - "regex" => $db->escape_string($mybb->input['regex']), - "length" => $mybb->get_input('length', MyBB::INPUT_INT), - "maxlength" => $mybb->get_input('maxlength', MyBB::INPUT_INT), - "required" => $mybb->get_input('required', MyBB::INPUT_INT), - "registration" => $mybb->get_input('registration', MyBB::INPUT_INT), - "profile" => $mybb->get_input('profile', MyBB::INPUT_INT), - "viewableby" => $db->escape_string($mybb->input['viewableby']), - "editableby" => $db->escape_string($mybb->input['editableby']), - "postbit" => $mybb->get_input('postbit', MyBB::INPUT_INT), - "postnum" => $mybb->get_input('postnum', MyBB::INPUT_INT), - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT), - "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT), - "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_profile_fields_edit_commit"); - - $db->update_query("profilefields", $updated_profile_field, "fid='{$profile_field['fid']}'"); - - $cache->update_profilefields(); - - // Log admin action - log_admin_action($profile_field['fid'], htmlspecialchars_uni($mybb->input['name'])); - - flash_message($lang->success_profile_field_saved, 'success'); - admin_redirect("index.php?module=config-profile_fields"); - } - } - - $page->add_breadcrumb_item($lang->edit_profile_field); - $page->output_header($lang->custom_profile_fields." - ".$lang->edit_profile_field); - - $sub_tabs['edit_profile_field'] = array( - 'title' => $lang->edit_profile_field, - 'link' => "index.php?module=config-profile_fields&action=edit&fid={$profile_field['fid']}", - 'description' => $lang->edit_profile_field_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_profile_field'); - $form = new Form("index.php?module=config-profile_fields&action=edit", "post", "edit"); - - - echo $form->generate_hidden_field("fid", $profile_field['fid']); - - if($errors) - { - switch($mybb->input['viewableby']) - { - case 'all': - $mybb->input['viewableby'] = -1; - break; - case 'custom': - $mybb->input['viewableby'] = implode(',', (array)$mybb->input['select']['viewableby']); - break; - default: - $mybb->input['viewableby'] = ''; - break; - } - - switch($mybb->input['editableby']) - { - case 'all': - $mybb->input['editableby'] = -1; - break; - case 'custom': - $mybb->input['editableby'] = implode(',', (array)$mybb->input['select']['editableby']); - break; - default: - $mybb->input['editableby'] = ''; - break; - } - - $page->output_inline_error($errors); - } - else - { - $type = explode("\n", $profile_field['type'], "2"); - - $mybb->input = $profile_field; - $mybb->input['fieldtype'] = $type[0]; - $mybb->input['options'] = $type[1]; - } - - if(empty($mybb->input['viewableby'])) - { - $mybb->input['viewableby'] = ''; - } - - if(empty($mybb->input['editableby'])) - { - $mybb->input['editableby'] = ''; - } - - $form_container = new FormContainer($lang->edit_profile_field); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $select_list = array( - "text" => $lang->text, - "textarea" => $lang->textarea, - "select" => $lang->select, - "multiselect" => $lang->multiselect, - "radio" => $lang->radio, - "checkbox" => $lang->checkbox - ); - $form_container->output_row($lang->field_type." *", $lang->field_type_desc, $form->generate_select_box('fieldtype', $select_list, $mybb->input['fieldtype'], array('id' => 'fieldtype')), 'fieldtype'); - $form_container->output_row($lang->field_regex, $lang->field_regex_desc, $form->generate_text_box('regex', $mybb->input['regex'], array('id' => 'regex')), 'regex', array(), array('id' => 'row_regex')); - $form_container->output_row($lang->maximum_length, $lang->maximum_length_desc, $form->generate_numeric_field('maxlength', $mybb->input['maxlength'], array('id' => 'maxlength', 'min' => 0)), 'maxlength', array(), array('id' => 'row_maxlength')); - $form_container->output_row($lang->field_length, $lang->field_length_desc, $form->generate_numeric_field('length', $mybb->input['length'], array('id' => 'length', 'min' => 0)), 'length', array(), array('id' => 'row_fieldlength')); - $form_container->output_row($lang->selectable_options, $lang->selectable_options_desc, $form->generate_text_area('options', $mybb->input['options'], array('id' => 'options')), 'options', array(), array('id' => 'row_options')); - $form_container->output_row($lang->min_posts_enabled, $lang->min_posts_enabled_desc, $form->generate_numeric_field('postnum', $mybb->input['postnum'], array('id' => 'postnum', 'min' => 0)), 'postnum'); - $form_container->output_row($lang->display_order." *", $lang->display_order_desc, $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->required." *", $lang->required_desc, $form->generate_yes_no_radio('required', $mybb->input['required'])); - $form_container->output_row($lang->show_on_registration." *", $lang->show_on_registration_desc, $form->generate_yes_no_radio('registration', $mybb->input['registration'])); - $form_container->output_row($lang->display_on_profile." *", $lang->display_on_profile_desc, $form->generate_yes_no_radio('profile', $mybb->input['profile'])); - $form_container->output_row($lang->display_on_postbit." *", $lang->display_on_postbit_desc, $form->generate_yes_no_radio('postbit', $mybb->input['postbit'])); - - $selected_values = ''; - if($mybb->input['viewableby'] != '' && $mybb->input['viewableby'] != -1) - { - $selected_values = explode(',', $mybb->get_input('viewableby')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $group_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['viewableby'] == -1) - { - $group_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['viewableby'] != '') - { - $group_checked['custom'] = 'checked="checked"'; - } - else - { - $group_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $select_code = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('select[viewableby][]', $selected_values, array('id' => 'viewableby', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - $form_container->output_row($lang->viewableby, $lang->viewableby_desc, $select_code, '', array(), array('id' => 'row_viewableby')); - - $selected_values = ''; - if($mybb->input['editableby'] != '' && $mybb->input['editableby'] != -1) - { - $selected_values = explode(',', $mybb->get_input('editableby')); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $group_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['editableby'] == -1) - { - $group_checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['editableby'] != '') - { - $group_checked['custom'] = 'checked="checked"'; - } - else - { - $group_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $select_code = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('select[editableby][]', $selected_values, array('id' => 'editableby', 'multiple' => true, 'size' => 5))."
-
-
-
- "; - $form_container->output_row($lang->editableby, $lang->editableby_desc, $select_code, '', array(), array('id' => 'row_editableby')); - - $parser_options = array( - $form->generate_check_box('allowhtml', 1, $lang->parse_allowhtml, array('checked' => $mybb->input['allowhtml'], 'id' => 'allowhtml')), - $form->generate_check_box('allowmycode', 1, $lang->parse_allowmycode, array('checked' => $mybb->input['allowmycode'], 'id' => 'allowmycode')), - $form->generate_check_box('allowsmilies', 1, $lang->parse_allowsmilies, array('checked' => $mybb->input['allowsmilies'], 'id' => 'allowsmilies')), - $form->generate_check_box('allowimgcode', 1, $lang->parse_allowimgcode, array('checked' => $mybb->input['allowimgcode'], 'id' => 'allowimgcode')), - $form->generate_check_box('allowvideocode', 1, $lang->parse_allowvideocode, array('checked' => $mybb->input['allowvideocode'], 'id' => 'allowvideocode')) - ); - $form_container->output_row($lang->parser_options, '', implode('
', $parser_options), '', array(), array('id' => 'row_parser_options')); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_profile_field); - - $form->output_submit_wrapper($buttons); - $form->end(); - - echo ' - '; - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("profilefields", "*", "fid='".$mybb->get_input('fid', MyBB::INPUT_INT)."'"); - $profile_field = $db->fetch_array($query); - - // Does the profile field not exist? - if(!$profile_field['fid']) - { - flash_message($lang->error_invalid_fid, 'error'); - admin_redirect("index.php?module=config-profile_fields"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-profile_fields"); - } - - $plugins->run_hooks("admin_config_profile_fields_delete"); - - if($mybb->request_method == "post") - { - // Delete the profile field - $db->delete_query("profilefields", "fid='{$profile_field['fid']}'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."userfields DROP fid{$profile_field['fid']}"); - - $plugins->run_hooks("admin_config_profile_fields_delete_commit"); - - $cache->update_profilefields(); - - // Log admin action - log_admin_action($profile_field['fid'], htmlspecialchars_uni($profile_field['name'])); - - flash_message($lang->success_profile_field_deleted, 'success'); - admin_redirect("index.php?module=config-profile_fields"); - } - else - { - $page->output_confirm_action("index.php?module=config-profile_fields&action=delete&fid={$profile_field['fid']}", $lang->confirm_profile_field_deletion); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_profile_fields_start"); - - $page->output_header($lang->custom_profile_fields); - - $sub_tabs['custom_profile_fields'] = array( - 'title' => $lang->custom_profile_fields, - 'link' => "index.php?module=config-profile_fields", - 'description' => $lang->custom_profile_fields_desc - ); - - $sub_tabs['add_profile_field'] = array( - 'title' => $lang->add_new_profile_field, - 'link' => "index.php?module=config-profile_fields&action=add", - ); - - - $page->output_nav_tabs($sub_tabs, 'custom_profile_fields'); - - $table = new Table; - $table->construct_header($lang->name); - $table->construct_header($lang->required, array("class" => "align_center")); - $table->construct_header($lang->registration, array("class" => "align_center")); - $table->construct_header($lang->editable, array("class" => "align_center")); - $table->construct_header($lang->profile, array("class" => "align_center")); - $table->construct_header($lang->postbit, array("class" => "align_center")); - $table->construct_header($lang->controls, array("class" => "align_center")); - - $query = $db->simple_select("profilefields", "*", "", array('order_by' => 'disporder')); - while($field = $db->fetch_array($query)) - { - if($field['required']) - { - $required = $lang->yes; - } - else - { - $required = $lang->no; - } - - if($field['registration']) - { - $registration = $lang->yes; - } - else - { - $registration = $lang->no; - } - - if($field['editableby'] == '') - { - $editable = $lang->no; - } - else - { - $editable = $lang->yes; - } - - if($field['profile']) - { - $profile = $lang->yes; - } - else - { - $profile = $lang->no; - } - - if($field['postbit']) - { - $postbit = $lang->yes; - } - else - { - $postbit = $lang->no; - } - - $table->construct_cell("".htmlspecialchars_uni($field['name'])."
".htmlspecialchars_uni($field['description'])."", array('width' => '35%')); - $table->construct_cell($required, array("class" => "align_center", 'width' => '10%')); - $table->construct_cell($registration, array("class" => "align_center", 'width' => '10%')); - $table->construct_cell($editable, array("class" => "align_center", 'width' => '10%')); - $table->construct_cell($profile, array("class" => "align_center", 'width' => '10%')); - $table->construct_cell($postbit, array("class" => "align_center", 'width' => '10%')); - - $popup = new PopupMenu("field_{$field['fid']}", $lang->options); - $popup->add_item($lang->edit_field, "index.php?module=config-profile_fields&action=edit&fid={$field['fid']}"); - $popup->add_item($lang->delete_field, "index.php?module=config-profile_fields&action=delete&fid={$field['fid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_profile_field_deletion}')"); - $table->construct_cell($popup->fetch(), array("class" => "align_center", 'width' => '20%')); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_profile_fields, array('colspan' => 7)); - $table->construct_row(); - } - - $table->output($lang->custom_profile_fields); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/questions.php b/html/forums/admin/modules/config/questions.php deleted file mode 100644 index 71586a6..0000000 --- a/html/forums/admin/modules/config/questions.php +++ /dev/null @@ -1,350 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->security_questions, "index.php?module=config-questions"); - -$plugins->run_hooks("admin_config_questions_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_questions_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['question'])) - { - $errors[] = $lang->error_missing_question; - } - - if(!trim($mybb->input['answer'])) - { - $errors[] = $lang->error_missing_answer; - } - - if(!$errors) - { - $answer = preg_replace("#(\r\n|\r|\n)#s", "\n", trim($mybb->input['answer'])); - - $new_question = array( - "question" => $db->escape_string($mybb->input['question']), - "answer" => $db->escape_string($answer), - "active" => $mybb->get_input('active', MyBB::INPUT_INT) - ); - $qid = $db->insert_query("questions", $new_question); - - $plugins->run_hooks("admin_config_questions_add_commit"); - - // Log admin action - log_admin_action($qid, $mybb->input['question']); - - flash_message($lang->success_question_created, 'success'); - admin_redirect("index.php?module=config-questions"); - } - } - - $page->add_breadcrumb_item($lang->add_new_question); - $page->output_header($lang->security_questions." - ".$lang->add_new_question); - - $sub_tabs['security_questions'] = array( - 'title' => $lang->security_questions, - 'link' => "index.php?module=config-questions" - ); - - $sub_tabs['add_new_question'] = array( - 'title' => $lang->add_new_question, - 'link' => "index.php?module=config-questions&action=add", - 'description' => $lang->add_new_question_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_new_question'); - - $form = new Form("index.php?module=config-questions&action=add", "post", "add"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['active'] = '1'; - } - - $form_container = new FormContainer($lang->add_new_question); - $form_container->output_row($lang->question." *", $lang->question_desc, $form->generate_text_area('question', $mybb->input['question'], array('id' => 'question')), 'question'); - $form_container->output_row($lang->answers." *", $lang->answers_desc, $form->generate_text_area('answer', $mybb->input['answer'], array('id' => 'answer')), 'answer'); - $form_container->output_row($lang->active." *", "", $form->generate_yes_no_radio('active', $mybb->input['active'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_question); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("questions", "*", "qid='".$mybb->get_input('qid', MyBB::INPUT_INT)."'"); - $question = $db->fetch_array($query); - - if(!$question['qid']) - { - flash_message($lang->error_invalid_question, 'error'); - admin_redirect("index.php?module=config-questions"); - } - - $plugins->run_hooks("admin_config_questions_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['question'])) - { - $errors[] = $lang->error_missing_question; - } - - if(!trim($mybb->input['answer'])) - { - $errors[] = $lang->error_missing_answer; - } - - if(!$errors) - { - $answer = preg_replace("#(\r\n|\r|\n)#s", "\n", trim($mybb->input['answer'])); - - $updated_question = array( - "question" => $db->escape_string($mybb->input['question']), - "answer" => $db->escape_string($answer), - "active" => $mybb->get_input('active', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_questions_edit_commit"); - - $db->update_query("questions", $updated_question, "qid='{$question['qid']}'"); - - // Log admin action - log_admin_action($question['qid'], $mybb->input['question']); - - flash_message($lang->success_question_updated, 'success'); - admin_redirect("index.php?module=config-questions"); - } - } - - $page->add_breadcrumb_item($lang->edit_question); - $page->output_header($lang->security_questions." - ".$lang->edit_question); - - $sub_tabs['edit_question'] = array( - 'title' => $lang->edit_question, - 'link' => "index.php?module=config-questions&action=edit&qid={$question['qid']}", - 'description' => $lang->edit_question_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_question'); - - $form = new Form("index.php?module=config-questions&action=edit&qid={$question['qid']}", "post", "add"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = $question; - } - - $form_container = new FormContainer($lang->edit_question); - $form_container->output_row($lang->question." *", $lang->question_desc, $form->generate_text_area('question', $mybb->input['question'], array('id' => 'question')), 'question'); - $form_container->output_row($lang->answers." *", $lang->answers_desc, $form->generate_text_area('answer', $mybb->input['answer'], array('id' => 'answer')), 'answer'); - $form_container->output_row($lang->active." *", "", $form->generate_yes_no_radio('active', $mybb->input['active'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_question); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-questions"); - } - - $query = $db->simple_select("questions", "*", "qid='".$mybb->get_input('qid', MyBB::INPUT_INT)."'"); - $question = $db->fetch_array($query); - - if(!$question['qid']) - { - flash_message($lang->error_invalid_question, 'error'); - admin_redirect("index.php?module=config-questions"); - } - - $plugins->run_hooks("admin_config_questions_delete"); - - if($mybb->request_method == "post") - { - $db->delete_query("questions", "qid='{$question['qid']}'"); - $db->delete_query("questionsessions", "qid='{$question['qid']}'"); - - $plugins->run_hooks("admin_config_questions_delete_commit"); - - // Log admin action - log_admin_action($question['qid'], $question['question']); - - flash_message($lang->success_question_deleted, 'success'); - admin_redirect("index.php?module=config-questions"); - } - else - { - $page->output_confirm_action("index.php?module=config-questions&action=delete&qid={$question['qid']}", $lang->confirm_question_deletion); - } -} - -if($mybb->input['action'] == "disable") -{ - $query = $db->simple_select("questions", "*", "qid='".$mybb->get_input('qid', MyBB::INPUT_INT)."'"); - $question = $db->fetch_array($query); - - if(!$question['qid']) - { - flash_message($lang->error_invalid_question, 'error'); - admin_redirect("index.php?module=config-questions"); - } - - $plugins->run_hooks("admin_config_questions_disable"); - - $update_question = array( - "active" => 0 - ); - - $plugins->run_hooks("admin_config_questions_disable_commit"); - - $db->update_query("questions", $update_question, "qid = '{$question['qid']}'"); - - // Log admin action - log_admin_action($question['qid'], $question['question']); - - flash_message($lang->success_question_disabled, 'success'); - admin_redirect("index.php?module=config-questions"); -} - -if($mybb->input['action'] == "enable") -{ - $query = $db->simple_select("questions", "*", "qid='".$mybb->get_input('qid', MyBB::INPUT_INT)."'"); - $question = $db->fetch_array($query); - - if(!$question['qid']) - { - flash_message($lang->error_invalid_question, 'error'); - admin_redirect("index.php?module=config-questions"); - } - - $plugins->run_hooks("admin_config_questions_enable"); - - $update_question = array( - "active" => 1 - ); - - $plugins->run_hooks("admin_config_questions_enable_commit"); - - $db->update_query("questions", $update_question, "qid = '{$question['qid']}'"); - - // Log admin action - log_admin_action($question['qid'], $question['question']); - - flash_message($lang->success_question_enabled, 'success'); - admin_redirect("index.php?module=config-questions"); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_questions_start"); - - $page->output_header($lang->security_questions); - - $sub_tabs['security_questions'] = array( - 'title' => $lang->security_questions, - 'link' => "index.php?module=config-questions", - 'description' => $lang->security_questions_desc - ); - $sub_tabs['add_new_question'] = array( - 'title' => $lang->add_new_question, - 'link' => "index.php?module=config-questions&action=add", - ); - - $page->output_nav_tabs($sub_tabs, 'security_questions'); - - $table = new Table; - $table->construct_header($lang->question); - $table->construct_header($lang->answers, array("width" => "35%")); - $table->construct_header($lang->shown, array("width" => "5%", "class" => "align_center")); - $table->construct_header($lang->correct, array("width" => "5%", "class" => "align_center")); - $table->construct_header($lang->incorrect, array("width" => "5%", "class" => "align_center")); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - $query = $db->simple_select("questions", "*", "", array('order_by' => 'question')); - while($questions = $db->fetch_array($query)) - { - $questions['question'] = htmlspecialchars_uni($questions['question']); - $questions['answer'] = htmlspecialchars_uni($questions['answer']); - $questions['answer'] = preg_replace("#(\n)#s", "
", trim($questions['answer'])); - $questions['shown'] = my_number_format($questions['shown']); - $questions['correct'] = my_number_format($questions['correct']); - $questions['incorrect'] = my_number_format($questions['incorrect']); - - if($questions['active'] == 1) - { - $icon = "style}/images/icons/bullet_on.png\" alt=\"({$lang->alt_enabled})\" title=\"{$lang->alt_enabled}\" style=\"vertical-align: middle;\" /> "; - } - else - { - $icon = "style}/images/icons/bullet_off.png\" alt=\"({$lang->alt_disabled})\" title=\"{$lang->alt_disabled}\" style=\"vertical-align: middle;\" /> "; - } - - $table->construct_cell("
{$icon}{$questions['question']}
"); - $table->construct_cell($questions['answer']); - $table->construct_cell($questions['shown'], array("class" => "align_center")); - $table->construct_cell($questions['correct'], array("class" => "align_center")); - $table->construct_cell($questions['incorrect'], array("class" => "align_center")); - $popup = new PopupMenu("questions_{$questions['qid']}", $lang->options); - $popup->add_item($lang->edit_question, "index.php?module=config-questions&action=edit&qid={$questions['qid']}"); - if($questions['active'] == 1) - { - $popup->add_item($lang->disable_question, "index.php?module=config-questions&action=disable&qid={$questions['qid']}&my_post_key={$mybb->post_code}"); - } - else - { - $popup->add_item($lang->enable_question, "index.php?module=config-questions&action=enable&qid={$questions['qid']}&my_post_key={$mybb->post_code}"); - } - $popup->add_item($lang->delete_question, "index.php?module=config-questions&action=delete&qid={$questions['qid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_question_deletion}')"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_security_questions, array('colspan' => 6)); - $table->construct_row(); - } - - $table->output($lang->security_questions); - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/config/report_reasons.php b/html/forums/admin/modules/config/report_reasons.php deleted file mode 100644 index e201d16..0000000 --- a/html/forums/admin/modules/config/report_reasons.php +++ /dev/null @@ -1,449 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->report_reasons, "index.php?module=config-report_reasons"); - -$content_types = array('post', 'profile', 'reputation'); - -$content_types = $plugins->run_hooks("report_content_types", $content_types); - -$plugins->run_hooks("admin_config_report_reasons_begin"); - -if($mybb->input['action'] == "add") -{ - cast_content_inputs(); - - $plugins->run_hooks("admin_config_report_reasons_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if($mybb->input['extra'] != 0 && $mybb->input['extra'] != 1) - { - $errors[] = $lang->error_missing_extra; - } - - if(!$errors) - { - if($mybb->input['appliesto'] != 'all') - { - $appliesto = array(); - asort($content_types); - foreach($content_types as $content) - { - if($mybb->input["appliesto_{$content}"] == 1) - { - $appliesto[] = $content; - } - } - $appliesto = implode(",", $appliesto); - } - else - { - $appliesto = 'all'; - } - - $new_reason = array( - "title" => $db->escape_string($mybb->input['title']), - "appliesto" => $db->escape_string($appliesto), - "extra" => $mybb->input['extra'] - ); - $rid = $db->insert_query("reportreasons", $new_reason); - - $plugins->run_hooks("admin_config_report_reasons_add_commit"); - - $cache->update_reportreasons(); - - // Log admin action - log_admin_action($rid, $mybb->input['title']); - - flash_message($lang->success_reason_created, 'success'); - admin_redirect("index.php?module=config-report_reasons"); - } - } - - $page->add_breadcrumb_item($lang->add_new_reason); - $page->output_header($lang->report_reasons." - ".$lang->add_new_reason); - - $sub_tabs['report_reasons'] = array( - 'title' => $lang->report_reasons, - 'link' => "index.php?module=config-report_reasons" - ); - - $sub_tabs['add_new_reason'] = array( - 'title' => $lang->add_new_reason, - 'link' => "index.php?module=config-report_reasons&action=add", - 'description' => $lang->add_new_reason_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_new_reason'); - - $form = new Form("index.php?module=config-report_reasons&action=add", "post", "add"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['extra'] = 0; - } - - $form_container = new FormContainer($lang->add_new_reason); - $form_container->output_row($lang->reason_title." *", $lang->reason_title_desc, $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->applies_to." *", $lang->applies_to_desc, generate_content_select()); - $form_container->output_row($lang->requires_extra." *", $lang->requires_extra_desc, $form->generate_yes_no_radio('extra', $mybb->input['extra'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_reason); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("reportreasons", "*", "rid='".$mybb->get_input('rid', MyBB::INPUT_INT)."'"); - $reason = $db->fetch_array($query); - - if(!$reason['rid']) - { - flash_message($lang->error_invalid_reason, 'error'); - admin_redirect("index.php?module=config-report_reasons"); - } - elseif($reason['rid'] == 1) - { - flash_message($lang->error_cannot_modify_reason, 'error'); - admin_redirect("index.php?module=config-report_reasons"); - } - - cast_content_inputs(); - - $plugins->run_hooks("admin_config_report_reasons_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if($mybb->input['extra'] != 0 && $mybb->input['extra'] != 1) - { - $errors[] = $lang->error_missing_extra; - } - - if(!$errors) - { - if($mybb->input['appliesto'] != 'all') - { - $appliesto = array(); - asort($content_types); - foreach($content_types as $content) - { - if($mybb->input["appliesto_{$content}"] == 1) - { - $appliesto[] = $content; - } - } - $appliesto = implode(",", $appliesto); - } - else - { - $appliesto = 'all'; - } - - $updated_reason = array( - "title" => $db->escape_string($mybb->input['title']), - "appliesto" => $db->escape_string($appliesto), - "extra" => $mybb->input['extra'] - ); - - $plugins->run_hooks("admin_config_report_reasons_edit_commit"); - - $db->update_query("reportreasons", $updated_reason, "rid='{$reason['rid']}'"); - - $cache->update_reportreasons(); - - // Log admin action - log_admin_action($reason['rid'], $mybb->input['title']); - - flash_message($lang->success_reason_updated, 'success'); - admin_redirect("index.php?module=config-report_reasons"); - } - } - - $page->add_breadcrumb_item($lang->edit_reason); - $page->output_header($lang->report_reasons." - ".$lang->edit_reason); - - $sub_tabs['edit_reason'] = array( - 'title' => $lang->edit_reason, - 'link' => "index.php?module=config-report_reasons&action=edit&rid={$reason['rid']}", - 'description' => $lang->edit_reason_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_reason'); - - $form = new Form("index.php?module=config-report_reasons&action=edit&rid={$reason['rid']}", "post", "add"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = $reason; - $appliesto = explode(",", $reason['appliesto']); - foreach($appliesto as $content) - { - $mybb->input["appliesto_{$content}"] = 1; - } - } - - $form_container = new FormContainer($lang->add_new_reason); - $form_container->output_row($lang->reason_title." *", $lang->reason_title_desc, $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->applies_to." *", $lang->applies_to_desc, generate_content_select()); - $form_container->output_row($lang->requires_extra." *", $lang->requires_extra_desc, $form->generate_yes_no_radio('extra', $mybb->input['extra'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_reason); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-report_reasons"); - } - - $query = $db->simple_select("reportreasons", "*", "rid='".$mybb->get_input('rid', MyBB::INPUT_INT)."'"); - $reason = $db->fetch_array($query); - - if(!$reason['rid']) - { - flash_message($lang->error_invalid_reason, 'error'); - admin_redirect("index.php?module=config-report_reasons"); - } - elseif($reason['rid'] == 1) - { - flash_message($lang->error_cannot_delete_reason, 'error'); - admin_redirect("index.php?module=config-report_reasons"); - } - - $plugins->run_hooks("admin_config_report_reasons_delete"); - - if($mybb->request_method == "post") - { - - // Change the reason of associated reports to Other and carry over the title - $updated_report = array( - 'reasonid' => 1, - 'reason' => $db->escape_string($reason['title']) - ); - $db->update_query("reportedcontent", $updated_report, "reasonid='{$reason['rid']}'"); - - $db->delete_query("reportreasons", "rid='{$reason['rid']}'"); - - $plugins->run_hooks("admin_config_report_reasons_delete_commit"); - - // Log admin action - log_admin_action($reason['rid'], $reason['title']); - - flash_message($lang->success_reason_deleted, 'success'); - admin_redirect("index.php?module=config-report_reasons"); - } - else - { - $page->output_confirm_action("index.php?module=config-report_reasons&action=delete&rid={$reason['rid']}", $lang->confirm_reason_deletion); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_report_reasons_start"); - - if($mybb->request_method == "post") - { - if(!empty($mybb->input['disporder'])) - { - foreach($mybb->input['disporder'] as $rid => $order) - { - $db->update_query("reportreasons", array('disporder' => (int)$order), "rid='".(int)$rid."'"); - } - - $plugins->run_hooks("admin_config_report_reasons_start_commit"); - - //$cache->update_reportreasons(); - - flash_message($lang->success_reasons_disporder_updated, 'success'); - admin_redirect("index.php?module=config-report_reasons"); - } - } - - $page->output_header($lang->report_reasons); - - $sub_tabs['report_reasons'] = array( - 'title' => $lang->report_reasons, - 'link' => "index.php?module=config-report_reasons", - 'description' => $lang->report_reasons_desc - ); - $sub_tabs['add_new_reason'] = array( - 'title' => $lang->add_new_reason, - 'link' => "index.php?module=config-report_reasons&action=add", - ); - - $page->output_nav_tabs($sub_tabs, 'report_reasons'); - - $form = new Form("index.php?module=config-report_reasons", "post", "reasons"); - - $form_container = new FormContainer($lang->report_reasons); - $form_container->output_row_header($lang->reason_title); - $form_container->output_row_header($lang->applies_to, array("width" => "35%")); - $form_container->output_row_header($lang->extra_comment, array("width" => "10%", "class" => "align_center")); - $form_container->output_row_header($lang->order, array("width" => "5%", "class" => "align_center")); - $form_container->output_row_header($lang->controls, array("class" => "align_center", "width" => 150)); - - $query = $db->simple_select("reportreasons", "*", "", array('order_by' => 'disporder')); - while($reasons = $db->fetch_array($query)) - { - $reasons['title'] = $lang->parse($reasons['title']); - - $reasons['appliesto'] = explode(",", $reasons['appliesto']); - - $appliesto = array(); - foreach($reasons['appliesto'] as $content) - { - $key = "report_content_".$content; - $appliesto[] = $lang->$key; - } - $reasons['appliesto'] = implode(", ", $appliesto); - - if($reasons['extra'] == 1) - { - $icon = "style}/images/icons/bullet_on.png\" alt=\"({$lang->yes})\" title=\"{$lang->yes}\" style=\"vertical-align: middle;\" /> "; - } - else - { - $icon = "style}/images/icons/bullet_off.png\" alt=\"({$lang->no})\" title=\"{$lang->no}\" style=\"vertical-align: middle;\" /> "; - } - - $form_container->output_cell(htmlspecialchars_uni($reasons['title'])); - $form_container->output_cell(htmlspecialchars_uni($reasons['appliesto'])); - $form_container->output_cell("
{$icon}
", array("class" => "align_center")); - $form_container->output_cell("", array("class" => "align_center")); - $popup = new PopupMenu("reasons_{$reasons['rid']}", $lang->options); - $popup->add_item($lang->edit_reason, "index.php?module=config-report_reasons&action=edit&rid={$reasons['rid']}"); - $popup->add_item($lang->delete_reason, "index.php?module=config-report_reasons&action=delete&rid={$reasons['rid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_reason_deletion}')"); - $form_container->output_cell($popup->fetch(), array("class" => "align_center")); - $form_container->construct_row(); - } - - if($form_container->num_rows() == 0) - { - $form_container->construct_cell($lang->no_report_reasons, array('colspan' => 5)); - $form_container->construct_row(); - } - - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->update_reasons_order); - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -function generate_content_select() -{ - global $mybb, $lang; - - $checked = array('all' => '', 'custom' => '', 'none' => ''); - if($mybb->input['appliesto'] == 'all') - { - $checked['all'] = 'checked="checked"'; - } - elseif($mybb->input['appliesto'] == '') - { - $checked['none'] = 'checked="checked"'; - } - else - { - $checked['custom'] = 'checked="checked"'; - } - - print_selection_javascript(); - - return "
-
-
-
- - - - - -
{$lang->content_colon}".implode("
", generate_content_choices())."
-
-
-
- "; -} - -function generate_content_choices() -{ - global $mybb, $lang, $form, $content_types; - - asort($content_types); - - $content_choices = array(); - foreach($content_types as $content) - { - $key = "report_content_{$content}"; - $content_choices[] = $form->generate_check_box("appliesto_{$content}", 1, $lang->$key, array('id' => "appliesto_{$content}", 'checked' => $mybb->input["appliesto_{$content}"])); - } - - return $content_choices; -} - -function cast_content_inputs() -{ - global $mybb, $content_types; - - asort($content_types); - - foreach($content_types as $content) - { - $key = "appliesto_{$content}"; - $mybb->input[$key] = $mybb->get_input($key, MyBB::INPUT_INT); - } - - $mybb->input['extra'] = $mybb->get_input('extra', MyBB::INPUT_INT); -} \ No newline at end of file diff --git a/html/forums/admin/modules/config/settings.php b/html/forums/admin/modules/config/settings.php deleted file mode 100644 index a937cef..0000000 --- a/html/forums/admin/modules/config/settings.php +++ /dev/null @@ -1,1777 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->board_settings, "index.php?module=config-settings"); - -$plugins->run_hooks("admin_config_settings_begin"); - -// Creating a new setting group -if($mybb->input['action'] == "addgroup") -{ - $plugins->run_hooks("admin_config_settings_addgroup"); - - if($mybb->request_method == "post") - { - // Validate title - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_group_title; - } - - // Validate identifier - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_group_name; - } - $query = $db->simple_select("settinggroups", "title", "name='".$db->escape_string($mybb->input['name'])."'"); - if($db->num_rows($query) > 0) - { - $dup_group_title = $db->fetch_field($query, 'title'); - $errors[] = $lang->sprintf($lang->error_duplicate_group_name, $dup_group_title); - } - - if(!$errors) - { - $new_setting_group = array( - "name" => $db->escape_string($mybb->input['name']), - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "isdefault" => 0 - ); - $gid = $db->insert_query("settinggroups", $new_setting_group); - - $plugins->run_hooks("admin_config_settings_addgroup_commit"); - - // Log admin action - log_admin_action($gid, $mybb->input['name']); - - flash_message($lang->success_setting_group_added, 'success'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - } - - $page->add_breadcrumb_item($lang->add_new_setting_group); - $page->output_header($lang->board_settings." - ".$lang->add_new_setting_group); - - $sub_tabs['change_settings'] = array( - 'title' => $lang->change_settings, - 'link' => "index.php?module=config-settings" - ); - - $sub_tabs['add_setting'] = array( - 'title' => $lang->add_new_setting, - 'link' => "index.php?module=config-settings&action=add" - ); - - $sub_tabs['add_setting_group'] = array( - 'title' => $lang->add_new_setting_group, - 'link' => "index.php?module=config-settings&action=addgroup", - 'description' => $lang->add_new_setting_group_desc - ); - - $sub_tabs['modify_setting'] = array( - 'title' => $lang->modify_existing_settings, - 'link' => "index.php?module=config-settings&action=manage" - ); - - $page->output_nav_tabs($sub_tabs, 'add_setting_group'); - - $form = new Form("index.php?module=config-settings&action=addgroup", "post", "add"); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_new_setting_group); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->description, "", $form->generate_text_area('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->name." *", $lang->group_name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->insert_new_setting_group); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -// Edit setting group -if($mybb->input['action'] == "editgroup") -{ - $query = $db->simple_select("settinggroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $group = $db->fetch_array($query); - - // Does the setting not exist? - if(!$group['gid']) - { - flash_message($lang->error_invalid_gid2, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - // Prevent editing of default - if($group['isdefault'] == 1) - { - flash_message($lang->error_cannot_edit_default, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - - $plugins->run_hooks("admin_config_settings_editgroup"); - - // Do edit? - if($mybb->request_method == "post") - { - // Validate title - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_group_title; - } - - // Validate identifier - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_group_name; - } - $query = $db->simple_select("settinggroups", "title", "name='".$db->escape_string($mybb->input['name'])."' AND gid != '{$group['gid']}'"); - if($db->num_rows($query) > 0) - { - $dup_group_title = $db->fetch_field($query, 'title'); - $errors[] = $lang->sprintf($lang->error_duplicate_group_name, $dup_group_title); - } - - if(!$errors) - { - $update_setting_group = array( - "name" => $db->escape_string($mybb->input['name']), - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - ); - - $plugins->run_hooks("admin_config_settings_editgroup_commit"); - - $db->update_query("settinggroups", $update_setting_group, "gid='{$group['gid']}'"); - - // Log admin action - log_admin_action($group['gid'], $mybb->input['name']); - - flash_message($lang->success_setting_group_updated, 'success'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - } - - $page->add_breadcrumb_item($lang->edit_setting_group); - $page->output_header($lang->board_settings." - ".$lang->edit_setting_group); - - $sub_tabs['edit_setting_group'] = array( - 'title' => $lang->edit_setting_group, - 'link' => "index.php?module=config-settings&action=editgroup&gid={$group['gid']}", - 'description' => $lang->edit_setting_group_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_setting_group'); - - $form = new Form("index.php?module=config-settings&action=editgroup", "post", "editgroup"); - - echo $form->generate_hidden_field("gid", $group['gid']); - - if($errors) - { - $group_data = $mybb->input; - $page->output_inline_error($errors); - } - else - { - $group_data = $group; - } - - $form_container = new FormContainer($lang->edit_setting_group); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $group_data['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->description, "", $form->generate_text_area('description', $group_data['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $group_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->name." *", $lang->group_name_desc, $form->generate_text_box('name', $group_data['name'], array('id' => 'name')), 'name'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->update_setting_group); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -// Delete Setting Group -if($mybb->input['action'] == "deletegroup") -{ - $query = $db->simple_select("settinggroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $group = $db->fetch_array($query); - - // Does the setting group not exist? - if(!$group['gid']) - { - flash_message($lang->error_invalid_gid2, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - // Prevent deletion of default - if($group['isdefault'] == 1) - { - flash_message($lang->error_cannot_edit_default, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-settings&action=manage"); - } - - $plugins->run_hooks("admin_config_settings_deletegroup"); - - if($mybb->request_method == "post") - { - // Delete the setting group and its settings - $db->delete_query("settinggroups", "gid='{$group['gid']}'"); - $db->delete_query("settings", "gid='{$group['gid']}'"); - - rebuild_settings(); - - $plugins->run_hooks("admin_config_settings_deletegroup_commit"); - - // Log admin action - log_admin_action($group['gid'], $group['name']); - - flash_message($lang->success_setting_group_deleted, 'success'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - else - { - $page->output_confirm_action("index.php?module=config-settings&action=deletegroup&gid={$group['gid']}", $lang->confirm_setting_group_deletion); - } -} - -// Creating a new setting -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_settings_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - $query = $db->simple_select("settinggroups", "gid", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $gid = $db->fetch_field($query, 'gid'); - if(!$gid) - { - $errors[] = $lang->error_invalid_gid; - } - - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - $query = $db->simple_select("settings", "title", "name='".$db->escape_string($mybb->input['name'])."'"); - if($db->num_rows($query) > 0) - { - $dup_setting_title = $db->fetch_field($query, 'title'); - $errors[] = $lang->sprintf($lang->error_duplicate_name, $dup_setting_title); - } - - // do some type filtering - $mybb->input['type'] = str_replace("\n", "", $mybb->input['type']); - if(strtolower(substr($mybb->input['type'], 0, 3)) == "php") - { - $mybb->input['type'] = ""; - } - - if(!$mybb->input['type']) - { - $errors[] = $lang->error_invalid_type; - } - - if(!$errors) - { - if($mybb->input['type'] == "custom") - { - $options_code = $mybb->input['extra']; - } - else if($mybb->input['extra']) - { - $options_code = "{$mybb->input['type']}\n{$mybb->input['extra']}"; - } - else - { - $options_code = $mybb->input['type']; - } - - $mybb->input['name'] = str_replace("\\", '', $mybb->input['name']); - $mybb->input['name'] = str_replace('$', '', $mybb->input['name']); - $mybb->input['name'] = str_replace("'", '', $mybb->input['name']); - - if($options_code == "numeric") - { - $value = $mybb->get_input('value', MyBB::INPUT_INT); - } - else - { - $value = $db->escape_string($mybb->input['value']); - } - - $new_setting = array( - "name" => $db->escape_string($mybb->input['name']), - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "optionscode" => $db->escape_string($options_code), - "value" => $value, - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "gid" => $mybb->get_input('gid', MyBB::INPUT_INT) - ); - - $sid = $db->insert_query("settings", $new_setting); - rebuild_settings(); - - $plugins->run_hooks("admin_config_settings_add_commit"); - - // Log admin action - log_admin_action($sid, $mybb->input['title']); - - flash_message($lang->success_setting_added, 'success'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - } - - $page->add_breadcrumb_item($lang->add_new_setting); - $page->output_header($lang->board_settings." - ".$lang->add_new_setting); - - $sub_tabs['change_settings'] = array( - 'title' => $lang->change_settings, - 'link' => "index.php?module=config-settings" - ); - - $sub_tabs['add_setting'] = array( - 'title' => $lang->add_new_setting, - 'link' => "index.php?module=config-settings&action=add", - 'description' => $lang->add_new_setting_desc - ); - - $sub_tabs['add_setting_group'] = array( - 'title' => $lang->add_new_setting_group, - 'link' => "index.php?module=config-settings&action=addgroup" - ); - - $sub_tabs['modify_setting'] = array( - 'title' => $lang->modify_existing_settings, - 'link' => "index.php?module=config-settings&action=manage" - ); - - $page->output_nav_tabs($sub_tabs, 'add_setting'); - - $form = new Form("index.php?module=config-settings&action=add", "post", "add"); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_new_setting); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->description, "", $form->generate_text_area('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder')); - while($group = $db->fetch_array($query)) - { - $group_lang_var = "setting_group_{$group['name']}"; - if($lang->$group_lang_var) - { - $options[$group['gid']] = htmlspecialchars_uni($lang->$group_lang_var); - } - else - { - $options[$group['gid']] = htmlspecialchars_uni($group['title']); - } - } - $form_container->output_row($lang->group." *", "", $form->generate_select_box("gid", $options, $mybb->input['gid'], array('id' => 'gid')), 'gid'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - - $form_container->output_row($lang->name." *", $lang->name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - - $setting_types = array( - "text" => $lang->text, - "numeric" => $lang->numeric_text, - "textarea" => $lang->textarea, - "yesno" => $lang->yesno, - "onoff" => $lang->onoff, - "select" => $lang->select, - "forumselect" => $lang->forum_selection_box, - "forumselectsingle" => $lang->forum_selection_single, - "groupselect" => $lang->group_selection_box, - "groupselectsingle" => $lang->group_selection_single, - "radio" => $lang->radio, - "checkbox" => $lang->checkbox, - "language" => $lang->language_selection_box, - "adminlanguage" => $lang->adminlanguage, - "cpstyle" => $lang->cpstyle - //"php" => $lang->php // Internal Use Only - ); - - $form_container->output_row($lang->type." *", "", $form->generate_select_box("type", $setting_types, $mybb->input['type'], array('id' => 'type')), 'type'); - $form_container->output_row($lang->extra, $lang->extra_desc, $form->generate_text_area('extra', $mybb->input['extra'], array('id' => 'extra')), 'extra', array(), array('id' => 'row_extra')); - $form_container->output_row($lang->value, "", $form->generate_text_area('value', $mybb->input['value'], array('id' => 'value')), 'value'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->insert_new_setting); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo ' - '; - - $page->output_footer(); -} - -// Editing a particular setting -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("settings", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); - $setting = $db->fetch_array($query); - - // Does the setting not exist? - if(!$setting['sid']) - { - flash_message($lang->error_invalid_sid, 'error'); - admin_redirect("index.php?module=config-settings"); - } - - // Prevent editing of default - if($setting['isdefault'] == 1) - { - flash_message($lang->error_cannot_edit_default, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - - $plugins->run_hooks("admin_config_settings_edit"); - - $type = explode("\n", $setting['optionscode'], 2); - $type = trim($type[0]); - if($type == "php") - { - flash_message($lang->error_cannot_edit_php, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - $query = $db->simple_select("settings", "title", "name='".$db->escape_string($mybb->input['name'])."' AND sid != '{$setting['sid']}'"); - if($db->num_rows($query) > 0) - { - $dup_setting_title = $db->fetch_field($query, 'title'); - $errors[] = $lang->sprintf($lang->error_duplicate_name, $dup_setting_title); - } - - // do some type filtering - $mybb->input['type'] = str_replace("\n", "", $mybb->input['type']); - if(strtolower(substr($mybb->input['type'], 0, 3)) == "php") - { - $mybb->input['type'] = ""; - } - - if(!$mybb->input['type']) - { - $errors[] = $lang->error_invalid_type; - } - - if(!$errors) - { - if($mybb->input['type'] == "custom") - { - $options_code = $mybb->input['extra']; - } - else if($mybb->input['extra']) - { - $options_code = "{$mybb->input['type']}\n{$mybb->input['extra']}"; - } - else - { - $options_code = $mybb->input['type']; - } - - $mybb->input['name'] = str_replace("\\", '', $mybb->input['name']); - $mybb->input['name'] = str_replace('$', '', $mybb->input['name']); - $mybb->input['name'] = str_replace("'", '', $mybb->input['name']); - - if($options_code == "numeric") - { - $value = $mybb->get_input('value', MyBB::INPUT_INT); - } - else - { - $value = $db->escape_string($mybb->input['value']); - } - - $updated_setting = array( - "name" => $db->escape_string($mybb->input['name']), - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "optionscode" => $db->escape_string($options_code), - "value" => $value, - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "gid" => $mybb->get_input('gid', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_settings_edit_commit"); - - $db->update_query("settings", $updated_setting, "sid='{$setting['sid']}'"); - rebuild_settings(); - - // Log admin action - log_admin_action($setting['sid'], $mybb->input['title']); - - flash_message($lang->success_setting_updated, 'success'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - } - - $page->add_breadcrumb_item($lang->edit_setting); - $page->output_header($lang->board_settings." - ".$lang->edit_setting); - - $sub_tabs['change_settings'] = array( - 'title' => $lang->change_settings, - 'link' => "index.php?module=config-settings", - ); - - $sub_tabs['add_setting'] = array( - 'title' => $lang->add_new_setting, - 'link' => "index.php?module=config-settings&action=add" - ); - - $sub_tabs['add_setting_group'] = array( - 'title' => $lang->add_new_setting_group, - 'link' => "index.php?module=config-settings&action=addgroup" - ); - - $sub_tabs['modify_setting'] = array( - 'title' => $lang->modify_existing_settings, - 'link' => "index.php?module=config-settings&action=manage", - 'description' => $lang->modify_existing_settings_desc - ); - - $page->output_nav_tabs($sub_tabs, 'modify_setting'); - - $form = new Form("index.php?module=config-settings&action=edit", "post", "edit"); - - echo $form->generate_hidden_field("sid", $setting['sid']); - - if($errors) - { - $setting_data = $mybb->input; - $page->output_inline_error($errors); - } - else - { - $setting_data = $setting; - $type = explode("\n", $setting['optionscode'], 2); - $setting_data['type'] = trim($type[0]); - $setting_data['extra'] = trim($type[1]); - } - - $form_container = new FormContainer($lang->modify_setting); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $setting_data['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->description, "", $form->generate_text_area('description', $setting_data['description'], array('id' => 'description')), 'description'); - - $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder')); - while($group = $db->fetch_array($query)) - { - $group_lang_var = "setting_group_{$group['name']}"; - if($lang->$group_lang_var) - { - $options[$group['gid']] = htmlspecialchars_uni($lang->$group_lang_var); - } - else - { - $options[$group['gid']] = htmlspecialchars_uni($group['title']); - } - } - $form_container->output_row($lang->group." *", "", $form->generate_select_box("gid", $options, $setting_data['gid'], array('id' => 'gid')), 'gid'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $setting_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->end(); - - $form_container = new FormContainer($lang->setting_configuration, 1); - $form_container->output_row($lang->name." *", $lang->name_desc, $form->generate_text_box('name', $setting_data['name'], array('id' => 'name')), 'name'); - - $setting_types = array( - "text" => $lang->text, - "numeric" => $lang->numeric_text, - "textarea" => $lang->textarea, - "yesno" => $lang->yesno, - "onoff" => $lang->onoff, - "select" => $lang->select, - "forumselect" => $lang->forum_selection_box, - "forumselectsingle" => $lang->forum_selection_single, - "groupselect" => $lang->group_selection_box, - "groupselectsingle" => $lang->group_selection_single, - "radio" => $lang->radio, - "checkbox" => $lang->checkbox, - "language" => $lang->language_selection_box, - "adminlanguage" => $lang->adminlanguage, - "cpstyle" => $lang->cpstyle - //"php" => $lang->php // Internal Use Only - ); - - $form_container->output_row($lang->type." *", "", $form->generate_select_box("type", $setting_types, $setting_data['type'], array('id' => 'type')), 'type'); - $form_container->output_row($lang->extra, $lang->extra_desc, $form->generate_text_area('extra', $setting_data['extra'], array('id' => 'extra')), 'extra', array(), array('id' => 'row_extra')); - $form_container->output_row($lang->value, '', $form->generate_text_area('value', $setting_data['value'], array('id' => 'value')), 'value'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->update_setting); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo ' - '; - - $page->output_footer(); -} - -// Delete Setting -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("settings", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); - $setting = $db->fetch_array($query); - - // Does the setting not exist? - if(!$setting['sid']) - { - flash_message($lang->error_invalid_sid, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - - // Prevent editing of default - if($setting['isdefault'] == 1) - { - flash_message($lang->error_cannot_edit_default, 'error'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-settings&action=manage"); - } - - $plugins->run_hooks("admin_config_settings_delete"); - - if($mybb->request_method == "post") - { - // Delete the setting - $db->delete_query("settings", "sid='{$setting['sid']}'"); - - rebuild_settings(); - - $plugins->run_hooks("admin_config_settings_delete_commit"); - - // Log admin action - log_admin_action($setting['sid'], $setting['title']); - - flash_message($lang->success_setting_deleted, 'success'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - else - { - $page->output_confirm_action("index.php?module=config-settings&action=delete&sid={$setting['sid']}", $lang->confirm_setting_deletion); - } -} - -// Modify Existing Settings -if($mybb->input['action'] == "manage") -{ - $plugins->run_hooks("admin_config_settings_manage"); - - // Update orders - if($mybb->request_method == "post") - { - if(is_array($mybb->input['group_disporder'])) - { - foreach($mybb->input['group_disporder'] as $gid => $new_order) - { - $gid = (int)$gid; - $update_group = array('disporder' => (int)$new_order); - $db->update_query("settinggroups", $update_group, "gid={$gid}"); - } - } - - if(is_array($mybb->input['setting_disporder'])) - { - foreach($mybb->input['setting_disporder'] as $sid => $new_order) - { - $sid = (int)$sid; - $update_setting = array('disporder' => (int)$new_order); - $db->update_query("settings", $update_setting, "sid={$sid}"); - } - } - - $plugins->run_hooks("admin_config_settings_manage_commit"); - - // Log admin action - log_admin_action(); - - flash_message($lang->success_display_orders_updated, 'success'); - admin_redirect("index.php?module=config-settings&action=manage"); - } - - $page->add_breadcrumb_item($lang->modify_existing_settings); - $page->output_header($lang->board_settings." - ".$lang->modify_existing_settings); - - $sub_tabs['change_settings'] = array( - 'title' => $lang->change_settings, - 'link' => "index.php?module=config-settings", - ); - - $sub_tabs['add_setting'] = array( - 'title' => $lang->add_new_setting, - 'link' => "index.php?module=config-settings&action=add" - ); - - $sub_tabs['add_setting_group'] = array( - 'title' => $lang->add_new_setting_group, - 'link' => "index.php?module=config-settings&action=addgroup" - ); - - $sub_tabs['modify_setting'] = array( - 'title' => $lang->modify_existing_settings, - 'link' => "index.php?module=config-settings&action=manage", - 'description' => $lang->modify_existing_settings_desc - ); - - $page->output_nav_tabs($sub_tabs, 'modify_setting'); - - // Cache settings - $settings_cache = array(); - $query = $db->simple_select("settings", "sid, name, title, disporder, gid, isdefault", "", array('order_by' => 'disporder', 'order_dir' => 'asc')); - while($setting = $db->fetch_array($query)) - { - $settings_cache[$setting['gid']][] = $setting; - } - - $form = new Form("index.php?module=config-settings&action=manage", "post", "edit"); - - $table = new Table; - - $table->construct_header($lang->setting_group_setting); - $table->construct_header($lang->order, array('class' => 'align_center', 'style' => 'width: 5%')); - $table->construct_header($lang->controls, array('class' => 'align_center', 'style' => 'width: 200px')); - - // Generate table - $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder', 'order_dir' => 'asc')); - while($group = $db->fetch_array($query)) - { - // Make setting group row - // Translated? - $group_lang_var = "setting_group_{$group['name']}"; - if($lang->$group_lang_var) - { - $group_title = htmlspecialchars_uni($lang->$group_lang_var); - } - else - { - $group_title = htmlspecialchars_uni($group['title']); - } - $table->construct_cell("{$group_title}", array('id' => "group{$group['gid']}")); - $table->construct_cell($form->generate_numeric_field("group_disporder[{$group['gid']}]", $group['disporder'], array('style' => 'width: 80%; font-weight: bold', 'class' => 'align_center', 'min' => 0))); - // Only show options if not a default setting group - if($group['isdefault'] != 1) - { - $popup = new PopupMenu("group_{$group['gid']}", $lang->options); - $popup->add_item($lang->edit_setting_group, "index.php?module=config-settings&action=editgroup&gid={$group['gid']}"); - $popup->add_item($lang->delete_setting_group, "index.php?module=config-settings&action=deletegroup&gid={$group['gid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_setting_group_deletion}')"); - $table->construct_cell($popup->fetch(), array('class' => 'align_center')); - } - else - { - $table->construct_cell(''); - } - $table->construct_row(array('class' => 'alt_row', 'no_alt_row' => 1)); - - // Make rows for each setting in the group - if(is_array($settings_cache[$group['gid']])) - { - foreach($settings_cache[$group['gid']] as $setting) - { - $setting_lang_var = "setting_{$setting['name']}"; - if($lang->$setting_lang_var) - { - $setting_title = htmlspecialchars_uni($lang->$setting_lang_var); - } - else - { - $setting_title = htmlspecialchars_uni($setting['title']); - } - $table->construct_cell($setting_title, array('style' => 'padding-left: 40px;')); - $table->construct_cell($form->generate_numeric_field("setting_disporder[{$setting['sid']}]", $setting['disporder'], array('style' => 'width: 80%', 'class' => 'align_center', 'min' => 0))); - // Only show options if not a default setting group or is a custom setting - if($group['isdefault'] != 1 || $setting['isdefault'] != 1) - { - $popup = new PopupMenu("setting_{$setting['sid']}", $lang->options); - $popup->add_item($lang->edit_setting, "index.php?module=config-settings&action=edit&sid={$setting['sid']}"); - $popup->add_item($lang->delete_setting, "index.php?module=config-settings&action=delete&sid={$setting['sid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_setting_deletion}')"); - $table->construct_cell($popup->fetch(), array('class' => 'align_center')); - } - else - { - $table->construct_cell(''); - } - $table->construct_row(array('no_alt_row' => 1, 'class' => "group{$group['gid']}")); - } - } - } - - $table->output($lang->modify_existing_settings); - - $buttons[] = $form->generate_submit_button($lang->save_display_orders); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -// Change settings for a specified group. -if($mybb->input['action'] == "change") -{ - $plugins->run_hooks("admin_config_settings_change"); - - if($mybb->request_method == "post") - { - if(!is_writable(MYBB_ROOT.'inc/settings.php')) - { - flash_message($lang->error_chmod_settings_file, 'error'); - admin_redirect("index.php?module=config-settings"); - } - - // Not allowed to be hidden captcha fields - $disallowed_fields = array( - 'username', - 'password', - 'password2', - 'email', - 'email2', - 'imagestring', - 'imagehash', - 'answer', - 'question_id', - 'allownotices', - 'hideemail', - 'receivepms', - 'pmnotice', - 'emailpmnotify', - 'invisible', - 'subscriptionmethod', - 'timezoneoffset', - 'dstcorrection', - 'language', - 'step', - 'action', - 'agree', - 'regtime', - 'regcheck1', - 'regcheck2', - 'regsubmit' - ); - - $is_current_hiddencaptcha_wrong = in_array($mybb->settings['hiddencaptchaimagefield'], $disallowed_fields); - if(in_array($mybb->input['upsetting']['hiddencaptchaimagefield'], $disallowed_fields) || $is_current_hiddencaptcha_wrong) - { - if(isset($mybb->input['upsetting']['hiddencaptchaimagefield']) && $mybb->input['upsetting']['hiddencaptchaimagefield'] != $mybb->settings['hiddencaptchaimagefield'] && !$is_current_hiddencaptcha_wrong) - { - $wrong_value = $mybb->input['upsetting']['hiddencaptchaimagefield']; - $mybb->input['upsetting']['hiddencaptchaimagefield'] = $mybb->settings['hiddencaptchaimagefield']; - } - else - { - $wrong_value = $mybb->settings['hiddencaptchaimagefield']; - $mybb->input['upsetting']['hiddencaptchaimagefield'] = 'email3'; - } - - $lang->success_settings_updated .= $lang->sprintf($lang->success_settings_updated_hiddencaptchaimage, htmlspecialchars_uni($mybb->input['upsetting']['hiddencaptchaimagefield']), htmlspecialchars_uni($wrong_value)); - } - - // Have we opted for a reCAPTCHA and not set a public/private key? - if((isset($mybb->input['upsetting']['captchaimage']) && in_array($mybb->input['upsetting']['captchaimage'], array(2, 4)) && (!$mybb->input['upsetting']['captchaprivatekey'] || !$mybb->input['upsetting']['captchapublickey'])) - || (in_array($mybb->settings['captchaimage'], array(2, 4)) && (!$mybb->settings['captchaprivatekey'] || !$mybb->settings['captchapublickey']))) - { - $mybb->input['upsetting']['captchaimage'] = 1; - $lang->success_settings_updated .= $lang->success_settings_updated_captchaimage; - } - - // Get settings which optionscode is a forum/group select, checkbox or numeric - // We cannot rely on user input to decide this - $checkbox_settings = $forum_group_select = array(); - $query = $db->simple_select('settings', 'name, optionscode', "optionscode IN('forumselect', 'groupselect') OR optionscode LIKE 'checkbox%' OR optionscode LIKE 'numeric%'"); - - while($multisetting = $db->fetch_array($query)) - { - $options = array(); - - if(substr($multisetting['optionscode'], 0, 8) == 'checkbox') - { - $checkbox_settings[] = $multisetting['name']; - - // All checkboxes deselected = no $mybb->input['upsetting'] for them, we need to initialize it manually then, but only on pages where the setting is shown - if(empty($mybb->input['upsetting'][$multisetting['name']]) && isset($mybb->input["isvisible_{$multisetting['name']}"])) - { - $mybb->input['upsetting'][$multisetting['name']] = array(); - } - } - elseif(substr($multisetting['optionscode'], 0, 7) == 'numeric') - { - if(isset($mybb->input['upsetting'][$multisetting['name']])) - { - $type = explode("\n", $multisetting['optionscode']); - for($i=1; $i < count($type); $i++) - { - $optionsexp = explode("=", $type[$i]); - $opt = array_map('trim', $optionsexp); - if(in_array($opt[0], array('min', 'max', 'step'))) - { - if($opt[0] != 'step' || $opt[1] != 'any') - { - $opt[1] = (float)$opt[1]; - } - $options[$opt[0]] = $opt[1]; - } - } - - $value = (float)$mybb->input['upsetting'][$multisetting['name']]; - - if(isset($options['min'])) - { - $value = max($value, $options['min']); - } - - if(isset($options['max'])) - { - $value = min($value, $options['max']); - } - - $mybb->input['upsetting'][$multisetting['name']] = $value; - } - } - else - { - $forum_group_select[] = $multisetting['name']; - } - } - - // Administrator is changing the login method. - if($mybb->settings['username_method'] == 1 || $mybb->settings['username_method'] == 2 || $mybb->input['upsetting']['username_method'] == 1 || $mybb->input['upsetting']['username_method'] == 2) - { - $query = $db->simple_select('users', 'email, COUNT(email) AS duplicates', "email!=''", array('group_by' => 'email HAVING duplicates>1')); - if($db->num_rows($query)) - { - $mybb->input['upsetting']['username_method'] = 0; - $lang->success_settings_updated .= $lang->success_settings_updated_username_method; - } - else - { - $mybb->input['upsetting']['allowmultipleemails'] = 0; - $lang->success_settings_updated .= $lang->success_settings_updated_allowmultipleemails; - } - } - - if(is_array($mybb->input['upsetting'])) - { - foreach($mybb->input['upsetting'] as $name => $value) - { - if($forum_group_select && in_array($name, $forum_group_select)) - { - if($value == 'all') - { - $value = -1; - } - elseif($value == 'custom') - { - if(isset($mybb->input['select'][$name]) && is_array($mybb->input['select'][$name])) - { - foreach($mybb->input['select'][$name] as &$val) - { - $val = (int)$val; - } - unset($val); - - $value = implode(',', $mybb->input['select'][$name]); - } - else - { - $value = ''; - } - } - else - { - $value = ''; - } - } - elseif($checkbox_settings && in_array($name, $checkbox_settings)) - { - $value = ''; - - if(is_array($mybb->input['upsetting'][$name])) - { - $value = implode(',', $mybb->input['upsetting'][$name]); - } - } - - $db->update_query("settings", array('value' => $db->escape_string($value)), "name='".$db->escape_string($name)."'"); - } - } - - // Check if we need to create our fulltext index after changing the search mode - if($mybb->settings['searchtype'] != $mybb->input['upsetting']['searchtype'] && $mybb->input['upsetting']['searchtype'] == "fulltext") - { - if(!$db->is_fulltext("posts") && $db->supports_fulltext_boolean("posts")) - { - $db->create_fulltext_index("posts", "message"); - } - if(!$db->is_fulltext("posts") && $db->supports_fulltext("threads")) - { - $db->create_fulltext_index("threads", "subject"); - } - } - - // If the delayedthreadviews setting was changed, enable or disable the tasks for it. - if(isset($mybb->input['upsetting']['delayedthreadviews']) && $mybb->settings['delayedthreadviews'] != $mybb->input['upsetting']['delayedthreadviews']) - { - $db->update_query("tasks", array('enabled' => (int)$mybb->input['upsetting']['delayedthreadviews']), "file='threadviews'"); - } - - // Have we changed our cookie prefix? If so, update our adminsid so we're not logged out - if(isset($mybb->input['upsetting']['cookieprefix']) && $mybb->input['upsetting']['cookieprefix'] != $mybb->settings['cookieprefix']) - { - my_unsetcookie("adminsid"); - $mybb->settings['cookieprefix'] = $mybb->input['upsetting']['cookieprefix']; - my_setcookie("adminsid", $admin_session['sid'], '', true); - } - - if(isset($mybb->input['upsetting']['statstopreferrer']) && $mybb->input['upsetting']['statstopreferrer'] != $mybb->settings['statstopreferrer']) - { - $cache->update_statistics(); - } - - $statslimit = $mybb->settings['statslimit']; - - rebuild_settings(); - - if(isset($mybb->input['upsetting']['statslimit']) && $mybb->input['upsetting']['statslimit'] != $statslimit) - { - $cache->update_most_replied_threads(); - $cache->update_most_viewed_threads(); - } - - $plugins->run_hooks("admin_config_settings_change_commit"); - - // Log admin action - log_admin_action(); - - flash_message($lang->success_settings_updated, 'success'); - admin_redirect("index.php?module=config-settings"); - } - - // What type of page - $cache_groups = $cache_settings = array(); - if(isset($mybb->input['search'])) - { - // Search - - // Search for settings - $search = $db->escape_string_like($mybb->input['search']); - $query = $db->query(" - SELECT s.* - FROM ".TABLE_PREFIX."settings s - LEFT JOIN ".TABLE_PREFIX."settinggroups g ON(s.gid=g.gid) - WHERE s.name LIKE '%{$search}%' OR s.title LIKE '%{$search}%' OR s.description LIKE '%{$search}%' OR g.name LIKE '%{$search}%' OR g.title LIKE '%{$search}%' OR g.description LIKE '%{$search}%' - ORDER BY s.disporder - "); - while($setting = $db->fetch_array($query)) - { - $cache_settings[$setting['gid']][$setting['sid']] = $setting; - } - - if(!$db->num_rows($query)) - { - if(isset($mybb->input['ajax_search'])) - { - echo json_encode(array("errors" => array($lang->error_no_settings_found))); - exit; - } - else - { - flash_message($lang->error_no_settings_found, 'error'); - admin_redirect("index.php?module=config-settings"); - } - } - - // Cache groups - $groups = array_keys($cache_settings); - $groups = implode(',', $groups); - $query = $db->simple_select("settinggroups", "*", "gid IN ({$groups})", array('order_by' => 'disporder')); - while($group = $db->fetch_array($query)) - { - $cache_groups[$group['gid']] = $group; - } - - // Page header only if not AJAX - if(!isset($mybb->input['ajax_search'])) - { - $page->add_breadcrumb_item($lang->settings_search); - $page->output_header($lang->board_settings." - {$lang->settings_search}"); - } - - $form = new Form("index.php?module=config-settings&action=change", "post", "change"); - - echo $form->generate_hidden_field("gid", $group['gid']); - } - elseif($mybb->input['gid']) - { - // Group listing - // Cache groups - $query = $db->simple_select("settinggroups", "*", "gid = '".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $groupinfo = $db->fetch_array($query); - $cache_groups[$groupinfo['gid']] = $groupinfo; - - if(!$db->num_rows($query)) - { - $page->output_error($lang->error_invalid_gid2); - } - - // Cache settings - $query = $db->simple_select("settings", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'", array('order_by' => 'disporder')); - while($setting = $db->fetch_array($query)) - { - $cache_settings[$setting['gid']][$setting['sid']] = $setting; - } - - if(!$db->num_rows($query)) - { - flash_message($lang->error_no_settings_found, 'error'); - admin_redirect("index.php?module=config-settings"); - } - - $group_lang_var = "setting_group_{$groupinfo['name']}"; - if(isset($lang->$group_lang_var)) - { - $groupinfo['title'] = $lang->$group_lang_var; - } - - // Page header - $page->add_breadcrumb_item($groupinfo['title']); - $page->output_header($lang->board_settings." - {$groupinfo['title']}"); - - $form = new Form("index.php?module=config-settings&action=change", "post", "change"); - - echo $form->generate_hidden_field("gid", $groupinfo['gid']); - } - else - { - // All settings list - // Cache groups - $query = $db->simple_select("settinggroups", "*", "", array('order_by' => 'disporder')); - while($group = $db->fetch_array($query)) - { - $cache_groups[$group['gid']] = $group; - } - - if(!$db->num_rows($query)) - { - $page->output_error($lang->error_invalid_gid2); - } - - // Cache settings - $query = $db->simple_select("settings", "*", "", array('order_by' => 'disporder')); - while($setting = $db->fetch_array($query)) - { - $cache_settings[$setting['gid']][$setting['sid']] = $setting; - } - - // Page header - $page->add_breadcrumb_item($lang->show_all_settings); - $page->output_header($lang->board_settings." - {$lang->show_all_settings}"); - - $form = new Form("index.php?module=config-settings&action=change", "post", "change"); - } - - // Build rest of page - $buttons[] = $form->generate_submit_button($lang->save_settings); - foreach($cache_groups as $groupinfo) - { - $group_lang_var = "setting_group_{$groupinfo['name']}"; - if(isset($lang->$group_lang_var)) - { - $groupinfo['title'] = $lang->$group_lang_var; - } - - $form_container = new FormContainer($groupinfo['title']); - - if(empty($cache_settings[$groupinfo['gid']])) - { - $form_container->output_cell($lang->error_no_settings_found); - $form_container->construct_row(); - - $form_container->end(); - echo '
'; - - continue; - } - - foreach($cache_settings[$groupinfo['gid']] as $setting) - { - $options = ""; - $type = explode("\n", $setting['optionscode']); - $type[0] = trim($type[0]); - $element_name = "upsetting[{$setting['name']}]"; - $element_id = "setting_{$setting['name']}"; - if($type[0] == "text" || $type[0] == "") - { - $setting_code = $form->generate_text_box($element_name, $setting['value'], array('id' => $element_id)); - } - else if($type[0] == "numeric") - { - $field_options = array('id' => $element_id); - if(count($type) > 1) - { - for($i=1; $i < count($type); $i++) - { - $optionsexp = explode("=", $type[$i]); - $opt = array_map('trim', $optionsexp); - if(in_array($opt[0], array('min', 'max', 'step'))) - { - if($opt[0] != 'step' || $opt[1] != 'any') - { - $opt[1] = (float)$opt[1]; - } - $field_options[$opt[0]] = $opt[1]; - } - } - } - $setting_code = $form->generate_numeric_field($element_name, $setting['value'], $field_options); - } - else if($type[0] == "textarea") - { - $setting_code = $form->generate_text_area($element_name, $setting['value'], array('id' => $element_id)); - } - else if($type[0] == "yesno") - { - $setting_code = $form->generate_yes_no_radio($element_name, $setting['value'], true, array('id' => $element_id.'_yes', 'class' => $element_id), array('id' => $element_id.'_no', 'class' => $element_id)); - } - else if($type[0] == "onoff") - { - $setting_code = $form->generate_on_off_radio($element_name, $setting['value'], true, array('id' => $element_id.'_on', 'class' => $element_id), array('id' => $element_id.'_off', 'class' => $element_id)); - } - else if($type[0] == "cpstyle") - { - $dir = @opendir(MYBB_ROOT.$config['admin_dir']."/styles"); - - $folders = array(); - while($folder = readdir($dir)) - { - if($file != "." && $file != ".." && @file_exists(MYBB_ROOT.$config['admin_dir']."/styles/$folder/main.css")) - { - $folders[$folder] = ucfirst($folder); - } - } - closedir($dir); - ksort($folders); - $setting_code = $form->generate_select_box($element_name, $folders, $setting['value'], array('id' => $element_id)); - } - else if($type[0] == "language") - { - $languages = $lang->get_languages(); - $setting_code = $form->generate_select_box($element_name, $languages, $setting['value'], array('id' => $element_id)); - } - else if($type[0] == "adminlanguage") - { - $languages = $lang->get_languages(1); - $setting_code = $form->generate_select_box($element_name, $languages, $setting['value'], array('id' => $element_id)); - } - else if($type[0] == "passwordbox") - { - $setting_code = $form->generate_password_box($element_name, $setting['value'], array('id' => $element_id)); - } - else if($type[0] == "php") - { - $setting['optionscode'] = substr($setting['optionscode'], 3); - eval("\$setting_code = \"".$setting['optionscode']."\";"); - } - else if($type[0] == "forumselect") - { - $selected_values = ''; - if($setting['value'] != '' && $setting['value'] != -1) - { - $selected_values = explode(',', (string)$setting['value']); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $forum_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($setting['value'] == -1) - { - $forum_checked['all'] = 'checked="checked"'; - } - elseif($setting['value'] != '') - { - $forum_checked['custom'] = 'checked="checked"'; - } - else - { - $forum_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $setting_code = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('select['.$setting['name'].'][]', $selected_values, array('id' => $element_id, 'multiple' => true, 'size' => 5))."
-
-
-
- "; - } - else if($type[0] == "forumselectsingle") - { - $selected_value = (int)$setting['value']; // No need to check if empty, int will give 0 - $setting_code = $form->generate_forum_select($element_name, $selected_value, array('id' => $element_id, 'main_option' => $lang->none)); - } - else if($type[0] == "groupselect") - { - $selected_values = ''; - if($setting['value'] != '' && $setting['value'] != -1) - { - $selected_values = explode(',', (string)$setting['value']); - - foreach($selected_values as &$value) - { - $value = (int)$value; - } - unset($value); - } - - $group_checked = array('all' => '', 'custom' => '', 'none' => ''); - if($setting['value'] == -1) - { - $group_checked['all'] = 'checked="checked"'; - } - elseif($setting['value'] != '') - { - $group_checked['custom'] = 'checked="checked"'; - } - else - { - $group_checked['none'] = 'checked="checked"'; - } - - print_selection_javascript(); - - $setting_code = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('select['.$setting['name'].'][]', $selected_values, array('id' => $element_id, 'multiple' => true, 'size' => 5))."
-
-
-
- "; - } - else if($type[0] == "groupselectsingle") - { - $selected_value = (int)$setting['value']; // No need to check if empty, int will give 0 - $setting_code = $form->generate_group_select($element_name, $selected_value, array('id' => $element_id, 'main_option' => $lang->none)); - } - else - { - $typecount = count($type); - - if($type[0] == 'checkbox') - { - $multivalue = explode(',', $setting['value']); - } - - for($i = 0; $i < $typecount; $i++) - { - $optionsexp = explode("=", $type[$i]); - if(!isset($optionsexp[1])) - { - continue; - } - $title_lang = "setting_{$setting['name']}_{$optionsexp[0]}"; - if(isset($lang->$title_lang)) - { - $optionsexp[1] = $lang->$title_lang; - } - - if($type[0] == "select") - { - $option_list[$optionsexp[0]] = htmlspecialchars_uni($optionsexp[1]); - } - else if($type[0] == "radio") - { - if($setting['value'] == $optionsexp[0]) - { - $option_list[$i] = $form->generate_radio_button($element_name, $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, "checked" => 1, 'class' => $element_id)); - } - else - { - $option_list[$i] = $form->generate_radio_button($element_name, $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, 'class' => $element_id)); - } - } - else if($type[0] == "checkbox") - { - if(in_array($optionsexp[0], $multivalue)) - { - $option_list[$i] = $form->generate_check_box("{$element_name}[]", $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, "checked" => 1, 'class' => $element_id)); - } - else - { - $option_list[$i] = $form->generate_check_box("{$element_name}[]", $optionsexp[0], htmlspecialchars_uni($optionsexp[1]), array('id' => $element_id.'_'.$i, 'class' => $element_id)); - } - } - } - - if($type[0] == "select") - { - $setting_code = $form->generate_select_box($element_name, $option_list, $setting['value'], array('id' => $element_id)); - } - else - { - $setting_code = implode("
", $option_list); - - if($type[0] == 'checkbox') - { - $setting_code .= $form->generate_hidden_field("isvisible_{$setting['name']}", 1); - } - } - $option_list = array(); - } - - // Do we have a custom language variable for this title or description? - $title_lang = "setting_".$setting['name']; - $desc_lang = $title_lang."_desc"; - if(isset($lang->$title_lang)) - { - $setting['title'] = $lang->$title_lang; - } - if(isset($lang->$desc_lang)) - { - $setting['description'] = $lang->$desc_lang; - } - $form_container->output_row(htmlspecialchars_uni($setting['title']), $setting['description'], $setting_code, '', array(), array('id' => 'row_'.$element_id)); - } - $form_container->end(); - - $form->output_submit_wrapper($buttons); - echo '
'; - } - $form->end(); - - print_setting_peekers(); - - if(!isset($mybb->input['ajax_search'])) - { - $page->output_footer(); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_settings_start"); - - $page->extra_header .= << - - -EOF; - - $page->output_header($lang->board_settings); - if(isset($message)) - { - $page->output_inline_message($message); - } - - $sub_tabs['change_settings'] = array( - 'title' => $lang->change_settings, - 'link' => "index.php?module=config-settings", - 'description' => $lang->change_settings_desc - ); - - $sub_tabs['add_setting'] = array( - 'title' => $lang->add_new_setting, - 'link' => "index.php?module=config-settings&action=add" - ); - - $sub_tabs['add_setting_group'] = array( - 'title' => $lang->add_new_setting_group, - 'link' => "index.php?module=config-settings&action=addgroup" - ); - - $sub_tabs['modify_setting'] = array( - 'title' => $lang->modify_existing_settings, - 'link' => "index.php?module=config-settings&action=manage", - ); - - $page->output_nav_tabs($sub_tabs, 'change_settings'); - - // Search form - echo "
"; - $search = new Form("index.php", 'get', 'settings_search', 0, 'settings_search'); - echo $search->generate_hidden_field('module', 'config/settings'); - echo $search->generate_hidden_field('action', 'change'); - echo $search->generate_text_box('search', $lang->settings_search, array('id' => 'search', 'class' => 'search_default field150 field_small')); - echo "search}\" />"; - $search->end(); - echo "
\n"; - - echo '
 
'; - $table = new Table; - $table->construct_header($lang->setting_groups); - - switch($db->type) - { - case "pgsql": - $query = $db->query(" - SELECT g.*, COUNT(s.sid) AS settingcount - FROM ".TABLE_PREFIX."settinggroups g - LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) - WHERE g.isdefault = 1 - GROUP BY ".$db->build_fields_string("settinggroups", "g.")." - ORDER BY g.disporder - "); - break; - default: - $query = $db->query(" - SELECT g.*, COUNT(s.sid) AS settingcount - FROM ".TABLE_PREFIX."settinggroups g - LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) - WHERE g.isdefault = 1 - GROUP BY g.gid - ORDER BY g.disporder - "); - } - while($group = $db->fetch_array($query)) - { - $group_lang_var = "setting_group_{$group['name']}"; - if(isset($lang->$group_lang_var)) - { - $group_title = htmlspecialchars_uni($lang->$group_lang_var); - } - else - { - $group_title = htmlspecialchars_uni($group['title']); - } - - $group_desc_lang_var = "setting_group_{$group['name']}_desc"; - if(isset($lang->$group_desc_lang_var)) - { - $group_desc = htmlspecialchars_uni($lang->$group_desc_lang_var); - } - else - { - $group_desc = htmlspecialchars_uni($group['description']); - } - - $table->construct_cell("{$group_title} ({$group['settingcount']} {$lang->bbsettings})
{$group_desc}"); - $table->construct_row(); - } - - $table->output("{$lang->show_all_settings}{$lang->board_settings}"); - - // Plugin Settings - switch($db->type) - { - case "pgsql": - $query = $db->query(" - SELECT g.*, COUNT(s.sid) AS settingcount - FROM ".TABLE_PREFIX."settinggroups g - LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) - WHERE g.isdefault <> 1 - GROUP BY ".$db->build_fields_string("settinggroups", "g.")." - ORDER BY g.disporder - "); - break; - default: - $query = $db->query(" - SELECT g.*, COUNT(s.sid) AS settingcount - FROM ".TABLE_PREFIX."settinggroups g - LEFT JOIN ".TABLE_PREFIX."settings s ON (s.gid=g.gid) - WHERE g.isdefault <> 1 - GROUP BY g.gid - ORDER BY g.disporder - "); - } - - if($db->num_rows($query)) - { - $table = new Table; - $table->construct_header($lang->setting_groups); - - while($group = $db->fetch_array($query)) - { - $group_lang_var = "setting_group_{$group['name']}"; - if($lang->$group_lang_var) - { - $group_title = htmlspecialchars_uni($lang->$group_lang_var); - } - else - { - $group_title = htmlspecialchars_uni($group['title']); - } - - $group_desc_lang_var = "setting_group_{$group['name']}_desc"; - if($lang->$group_desc_lang_var) - { - $group_desc = htmlspecialchars_uni($lang->$group_desc_lang_var); - } - else - { - $group_desc = htmlspecialchars_uni($group['description']); - } - - $table->construct_cell("{$group_title} ({$group['settingcount']} {$lang->bbsettings})
{$group_desc}"); - $table->construct_row(); - } - - $table->output($lang->plugin_settings); - } - - echo '
'; - - echo ' - -'; - - print_setting_peekers(); - $page->output_footer(); -} - -/** - * Print all the peekers for all of the default settings - */ -function print_setting_peekers() -{ - global $plugins; - - $peekers = array( - 'new Peeker($(".setting_boardclosed"), $("#row_setting_boardclosed_reason"), 1, true)', - 'new Peeker($(".setting_gzipoutput"), $("#row_setting_gziplevel"), 1, true)', - 'new Peeker($(".setting_useerrorhandling"), $("#row_setting_errorlogmedium, #row_setting_errortypemedium, #row_setting_errorloglocation"), 1, true)', - 'new Peeker($("#setting_subforumsindex"), $("#row_setting_subforumsstatusicons"), /[^0+|]/, false)', - 'new Peeker($(".setting_showsimilarthreads"), $("#row_setting_similarityrating, #row_setting_similarlimit"), 1, true)', - 'new Peeker($(".setting_disableregs"), $("#row_setting_regtype, #row_setting_securityquestion, #row_setting_regtime, #row_setting_allowmultipleemails, #row_setting_hiddencaptchaimage, #row_setting_betweenregstime"), 0, true)', - 'new Peeker($(".setting_hiddencaptchaimage"), $("#row_setting_hiddencaptchaimagefield"), 1, true)', - 'new Peeker($("#setting_failedlogincount"), $("#row_setting_failedlogintime, #row_setting_failedlogintext"), /[^0+|]/, false)', - 'new Peeker($(".setting_postfloodcheck"), $("#row_setting_postfloodsecs"), 1, true)', - 'new Peeker($("#setting_postmergemins"), $("#row_setting_postmergefignore, #row_setting_postmergeuignore, #row_setting_postmergesep"), /[^0+|]/, false)', - 'new Peeker($(".setting_enablememberlist"), $("#row_setting_membersperpage, #row_setting_default_memberlist_sortby, #row_setting_default_memberlist_order, #row_setting_memberlistmaxavatarsize"), 1, true)', - 'new Peeker($(".setting_enablereputation"), $("#row_setting_repsperpage, #row_setting_posrep, #row_setting_neurep, #row_setting_negrep, #row_setting_postrep, #row_setting_multirep, #row_setting_maxreplength, #row_setting_minreplength"), 1, true)', - 'new Peeker($(".setting_enablewarningsystem"), $("#row_setting_allowcustomwarnings, #row_setting_canviewownwarning, #row_setting_maxwarningpoints, #row_setting_allowanonwarningpms"), 1, true)', - 'new Peeker($(".setting_enablepms"), $("#row_setting_pmsallowhtml, #row_setting_pmsallowmycode, #row_setting_pmsallowsmilies, #row_setting_pmsallowimgcode, #row_setting_pmsallowvideocode, #row_setting_pmquickreply, #row_setting_pmfloodsecs, #row_setting_showpmip, #row_setting_maxpmquotedepth"), 1, true)', - 'new Peeker($(".setting_smilieinserter"), $("#row_setting_smilieinsertertot, #row_setting_smilieinsertercols"), 1, true)', - 'new Peeker($("#setting_mail_handler"), $("#row_setting_smtp_host, #row_setting_smtp_port, #row_setting_smtp_user, #row_setting_smtp_pass, #row_setting_secure_smtp"), "smtp", false)', - 'new Peeker($("#setting_mail_handler"), $("#row_setting_mail_parameters"), "mail", false)', - 'new Peeker($("#setting_captchaimage"), $("#row_setting_captchapublickey, #row_setting_captchaprivatekey"), /(2|4)/, false)', - 'new Peeker($(".setting_contact"), $("#row_setting_contact_guests, #row_setting_contact_badwords, #row_setting_contact_maxsubjectlength, #row_setting_contact_minmessagelength, #row_setting_contact_maxmessagelength"), 1, true)', - 'new Peeker($(".setting_enablepruning"), $("#row_setting_enableprunebyposts, #row_setting_pruneunactived, #row_setting_prunethreads"), 1, true)', - 'new Peeker($(".setting_enableprunebyposts"), $("#row_setting_prunepostcount, #row_setting_dayspruneregistered, #row_setting_prunepostcountall"), 1, true)', - 'new Peeker($(".setting_pruneunactived"), $("#row_setting_dayspruneunactivated"), 1, true)', - 'new Peeker($(".setting_statsenabled"), $("#row_setting_statscachetime, #row_setting_statslimit, #row_setting_statstopreferrer"), 1, true)', - 'new Peeker($(".setting_purgespammergroups_forums_groups_check"), $("#row_setting_purgespammerpostlimit, #row_setting_purgespammerbandelete, #row_setting_purgespammerapikey"), /^(?!none)/, true)', - 'new Peeker($(".setting_purgespammerbandelete"),$("#row_setting_purgespammerbangroup, #row_setting_purgespammerbanreason"), "ban", true)', - 'new Peeker($("#setting_maxloginattempts"), $("#row_setting_loginattemptstimeout"), /[^0+|]/, false)', - 'new Peeker($(".setting_bbcodeinserter"), $("#row_setting_partialmode, #row_setting_smilieinserter"), 1, true)', - 'new Peeker($(".setting_portal"), $("#row_setting_portal_announcementsfid, #row_setting_portal_showwelcome, #row_setting_portal_showpms, #row_setting_portal_showstats, #row_setting_portal_showwol, #row_setting_portal_showsearch, #row_setting_portal_showdiscussions"), 1, true)', - 'new Peeker($(".setting_portal_announcementsfid_forums_groups_check"), $("#row_setting_portal_numannouncements"), /^(?!none)/, true)', - 'new Peeker($(".setting_portal_showdiscussions"), $("#row_setting_portal_showdiscussionsnum, #row_setting_portal_excludediscussion"), 1, true)', - 'new Peeker($(".setting_enableattachments"), $("#row_setting_maxattachments, #row_setting_attachthumbnails"), 1, true)', - 'new Peeker($(".setting_attachthumbnails"), $("#row_setting_attachthumbh, #row_setting_attachthumbw"), "yes", true)', - 'new Peeker($(".setting_showbirthdays"), $("#row_setting_showbirthdayspostlimit"), 1, true)', - 'new Peeker($("#setting_betweenregstime"), $("#row_setting_maxregsbetweentime"), /[^0+|]/, false)', - 'new Peeker($(".setting_usecdn"), $("#row_setting_cdnurl, #row_setting_cdnpath"), 1, true)', - 'new Peeker($("#setting_errorlogmedium"), $("#row_setting_errortypemedium"), /^(log|email|both)/, false)', - 'new Peeker($("#setting_errorlogmedium"), $("#row_setting_errorloglocation"), /^(log|both)/, false)', - 'new Peeker($(".setting_sigmycode"), $("#row_setting_sigcountmycode, #row_setting_sigimgcode"), 1, true)', - 'new Peeker($(".setting_pmsallowmycode"), $("#row_setting_pmsallowimgcode, #row_setting_pmsallowvideocode"), 1, true)' - ); - - $peekers = $plugins->run_hooks("admin_settings_print_peekers", $peekers); - - $setting_peekers = implode("\n ", $peekers); - - echo ' - '; -} diff --git a/html/forums/admin/modules/config/smilies.php b/html/forums/admin/modules/config/smilies.php deleted file mode 100644 index ee711e5..0000000 --- a/html/forums/admin/modules/config/smilies.php +++ /dev/null @@ -1,763 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->smilies, "index.php?module=config-smilies"); - -$plugins->run_hooks("admin_config_smilies_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_smilies_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['find'])) - { - $errors[] = $lang->error_missing_text_replacement; - } - - if(!trim($mybb->input['image'])) - { - $errors[] = $lang->error_missing_path; - } - - if(!trim($mybb->input['disporder'])) - { - $errors[] = $lang->error_missing_order; - } - else - { - $mybb->input['disporder'] = $mybb->get_input('disporder', MyBB::INPUT_INT); - $query = $db->simple_select('smilies', 'sid', 'disporder=\''.$mybb->input['disporder'].'\''); - $duplicate_disporder = $db->fetch_field($query, 'sid'); - - if($duplicate_disporder) - { - $errors[] = $lang->error_duplicate_order; - } - } - - if(!$errors) - { - $mybb->input['find'] = str_replace("\r\n", "\n", $mybb->input['find']); - $mybb->input['find'] = str_replace("\r", "\n", $mybb->input['find']); - $mybb->input['find'] = explode("\n", $mybb->input['find']); - foreach(array_merge(array_keys($mybb->input['find'], ""), array_keys($mybb->input['find'], " ")) as $key) - { - unset($mybb->input['find'][$key]); - } - $mybb->input['find'] = implode("\n", $mybb->input['find']); - - $new_smilie = array( - "name" => $db->escape_string($mybb->input['name']), - "find" => $db->escape_string($mybb->input['find']), - "image" => $db->escape_string($mybb->input['image']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "showclickable" => $mybb->get_input('showclickable', MyBB::INPUT_INT) - ); - - $sid = $db->insert_query("smilies", $new_smilie); - - $plugins->run_hooks("admin_config_smilies_add_commit"); - - $cache->update_smilies(); - - // Log admin action - log_admin_action($sid, htmlspecialchars_uni($mybb->input['name'])); - - flash_message($lang->success_smilie_added, 'success'); - admin_redirect("index.php?module=config-smilies"); - } - } - - $page->add_breadcrumb_item($lang->add_smilie); - $page->output_header($lang->smilies." - ".$lang->add_smilie); - - $sub_tabs['manage_smilies'] = array( - 'title' => $lang->manage_smilies, - 'link' => "index.php?module=config-smilies", - ); - $sub_tabs['add_smilie'] = array( - 'title' => $lang->add_smilie, - 'link' => "index.php?module=config-smilies&action=add", - 'description' => $lang->add_smilie_desc - ); - $sub_tabs['add_multiple_smilies'] = array( - 'title' => $lang->add_multiple_smilies, - 'link' => "index.php?module=config-smilies&action=add_multiple", - ); - $sub_tabs['mass_edit'] = array( - 'title' => $lang->mass_edit, - 'link' => "index.php?module=config-smilies&action=mass_edit" - ); - - $page->output_nav_tabs($sub_tabs, 'add_smilie'); - $form = new Form("index.php?module=config-smilies&action=add", "post", "add"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['image'] = 'images/smilies/'; - $mybb->input['showclickable'] = 1; - } - - if(!$mybb->input['disporder']) - { - $query = $db->simple_select("smilies", "max(disporder) as dispordermax"); - $mybb->input['disporder'] = $db->fetch_field($query, "dispordermax")+1; - } - - $form_container = new FormContainer($lang->add_smilie); - $form_container->output_row($lang->name." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->text_replace." *", $lang->text_replace_desc, $form->generate_text_area('find', $mybb->input['find'], array('id' => 'find')), 'find'); - $form_container->output_row($lang->image_path." *", $lang->image_path_desc, $form->generate_text_box('image', $mybb->input['image'], array('id' => 'image')), 'image'); - $form_container->output_row($lang->display_order." *", $lang->display_order_desc, $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->show_clickable." *", $lang->show_clickable_desc, $form->generate_yes_no_radio('showclickable', $mybb->input['showclickable'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_smilie); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("smilies", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); - $smilie = $db->fetch_array($query); - - // Does the smilie not exist? - if(!$smilie['sid']) - { - flash_message($lang->error_invalid_smilie, 'error'); - admin_redirect("index.php?module=config-smilies"); - } - - $plugins->run_hooks("admin_config_smilies_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['find'])) - { - $errors[] = $lang->error_missing_text_replacement; - } - - if(!trim($mybb->input['image'])) - { - $errors[] = $lang->error_missing_path; - } - - if(!trim($mybb->input['disporder'])) - { - $errors[] = $lang->error_missing_order; - } - else - { - $mybb->input['disporder'] = $mybb->get_input('disporder', MyBB::INPUT_INT); - $query = $db->simple_select("smilies", "sid", "disporder= '".$mybb->input['disporder']."' AND sid != '".$smilie['sid']."'"); - $duplicate_disporder = $db->fetch_field($query, 'sid'); - - if($duplicate_disporder) - { - $errors[] = $lang->error_duplicate_order; - } - } - - if(!$errors) - { - $mybb->input['find'] = str_replace("\r\n", "\n", $mybb->input['find']); - $mybb->input['find'] = str_replace("\r", "\n", $mybb->input['find']); - $mybb->input['find'] = explode("\n", $mybb->input['find']); - foreach(array_merge(array_keys($mybb->input['find'], ""), array_keys($mybb->input['find'], " ")) as $key) - { - unset($mybb->input['find'][$key]); - } - $mybb->input['find'] = implode("\n", $mybb->input['find']); - - $updated_smilie = array( - "name" => $db->escape_string($mybb->input['name']), - "find" => $db->escape_string($mybb->input['find']), - "image" => $db->escape_string($mybb->input['image']), - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "showclickable" => $mybb->get_input('showclickable', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_config_smilies_edit_commit"); - - $db->update_query("smilies", $updated_smilie, "sid = '{$smilie['sid']}'"); - - $cache->update_smilies(); - - // Log admin action - log_admin_action($smilie['sid'], htmlspecialchars_uni($mybb->input['name'])); - - flash_message($lang->success_smilie_updated, 'success'); - admin_redirect("index.php?module=config-smilies"); - } - } - - $page->add_breadcrumb_item($lang->edit_smilie); - $page->output_header($lang->smilies." - ".$lang->edit_smilie); - - $sub_tabs['edit_smilie'] = array( - 'title' => $lang->edit_smilie, - 'link' => "index.php?module=config-smilies&action=edit", - 'description' => $lang->edit_smilie_desc - ); - $sub_tabs['mass_edit'] = array( - 'title' => $lang->mass_edit, - 'link' => "index.php?module=config-smilies&action=mass_edit", - ); - - $page->output_nav_tabs($sub_tabs, 'edit_smilie'); - $form = new Form("index.php?module=config-smilies&action=edit", "post", "edit"); - - echo $form->generate_hidden_field("sid", $smilie['sid']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, $smilie); - } - - $form_container = new FormContainer($lang->edit_smilie); - $form_container->output_row($lang->name." *", "", $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->text_replace." *", $lang->text_replace_desc, $form->generate_text_area('find', $mybb->input['find'], array('id' => 'find')), 'find'); - $form_container->output_row($lang->image_path." *", $lang->image_path_desc, $form->generate_text_box('image', $mybb->input['image'], array('id' => 'image')), 'image'); - $form_container->output_row($lang->display_order." *", $lang->display_order_desc, $form->generate_numeric_field('disporder', $mybb->input['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->output_row($lang->show_clickable." *", $lang->show_clickable_desc, $form->generate_yes_no_radio('showclickable', $mybb->input['showclickable'])); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_smilie); - $buttons[] = $form->generate_reset_button($lang->reset); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("smilies", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); - $smilie = $db->fetch_array($query); - - // Does the smilie not exist? - if(!$smilie['sid']) - { - flash_message($lang->error_invalid_smilie, 'error'); - admin_redirect("index.php?module=config-smilies"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-smilies"); - } - - $plugins->run_hooks("admin_config_smilies_delete"); - - if($mybb->request_method == "post") - { - // Delete the smilie - $db->delete_query("smilies", "sid='{$smilie['sid']}'"); - - $plugins->run_hooks("admin_config_smilies_delete_commit"); - - $cache->update_smilies(); - - // Log admin action - log_admin_action($smilie['sid'], htmlspecialchars_uni($smilie['name'])); - - flash_message($lang->success_smilie_updated, 'success'); - admin_redirect("index.php?module=config-smilies"); - } - else - { - $page->output_confirm_action("index.php?module=config-smilies&action=delete&sid={$smilie['sid']}", $lang->confirm_smilie_deletion); - }} - -if($mybb->input['action'] == "add_multiple") -{ - $plugins->run_hooks("admin_config_smilies_add_multiple"); - - if($mybb->request_method == "post") - { - if($mybb->input['step'] == 1) - { - $plugins->run_hooks("admin_config_smilies_add_multiple_step1"); - - if(!trim($mybb->input['pathfolder'])) - { - $errors[] = $lang->error_missing_path_multiple; - } - - $path = $mybb->input['pathfolder']; - $dir = @opendir(MYBB_ROOT.$path); - - if(!$dir) - { - $errors[] = $lang->error_invalid_path; - } - - if($path && !is_array($errors)) - { - if(substr($path, -1, 1) !== "/") - { - $path .= "/"; - } - - $query = $db->simple_select("smilies"); - - $asmilies = array(); - while($smilie = $db->fetch_array($query)) - { - $asmilies[$smilie['image']] = 1; - } - - $smilies = array(); - while($file = readdir($dir)) - { - if($file != ".." && $file != ".") - { - $ext = get_extension($file); - if($ext == "gif" || $ext == "jpg" || $ext == "jpeg" || $ext == "png" || $ext == "bmp") - { - if(!$asmilies[$path.$file]) - { - $smilies[] = $file; - } - } - } - } - closedir($dir); - - if(count($smilies) == 0) - { - $errors[] = $lang->error_no_smilies; - } - } - - if(!$errors) - { - $page->add_breadcrumb_item($lang->add_multiple_smilies); - $page->output_header($lang->smilies." - ".$lang->add_multiple_smilies); - - $sub_tabs['manage_smilies'] = array( - 'title' => $lang->manage_smilies, - 'link' => "index.php?module=config-smilies", - ); - $sub_tabs['add_smilie'] = array( - 'title' => $lang->add_smilie, - 'link' => "index.php?module=config-smilies&action=add" - ); - $sub_tabs['add_multiple_smilies'] = array( - 'title' => $lang->add_multiple_smilies, - 'link' => "index.php?module=config-smilies&action=add_multiple", - 'description' => $lang->add_multiple_smilies_desc - ); - $sub_tabs['mass_edit'] = array( - 'title' => $lang->mass_edit, - 'link' => "index.php?module=config-smilies&action=mass_edit" - ); - - $page->output_nav_tabs($sub_tabs, 'add_multiple_smilies'); - $form = new Form("index.php?module=config-smilies&action=add_multiple", "post", "add_multiple"); - echo $form->generate_hidden_field("step", "2"); - echo $form->generate_hidden_field("pathfolder", $path); - - $form_container = new FormContainer($lang->add_multiple_smilies); - $form_container->output_row_header($lang->image, array("class" => "align_center", 'width' => '10%')); - $form_container->output_row_header($lang->name); - $form_container->output_row_header($lang->text_replace, array('width' => '20%')); - $form_container->output_row_header($lang->include, array("class" => "align_center", 'width' => '5%')); - - foreach($smilies as $key => $file) - { - $ext = get_extension($file); - $find = str_replace(".".$ext, "", $file); - $name = ucfirst($find); - - $file = htmlspecialchars_uni($file); - - $form_container->output_cell("\"\"
{$file}", array("class" => "align_center", "width" => 1)); - $form_container->output_cell($form->generate_text_box("name[{$file}]", htmlspecialchars_uni($name), array('id' => 'name', 'style' => 'width: 98%'))); - $form_container->output_cell($form->generate_text_box("find[{$file}]", ":".$find.":", array('id' => 'find', 'style' => 'width: 95%'))); - $form_container->output_cell($form->generate_check_box("include[{$file}]", 1, "", array('checked' => 1)), array("class" => "align_center")); - $form_container->construct_row(); - } - - if($form_container->num_rows() == 0) - { - flash_message($lang->error_no_images, 'error'); - admin_redirect("index.php?module=config-smilies&action=add_multiple"); - } - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_smilies); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); - exit; - } - } - else - { - $plugins->run_hooks("admin_config_smilies_add_multiple_step2"); - - $path = $mybb->input['pathfolder']; - reset($mybb->input['include']); - $find = $mybb->input['find']; - $name = $mybb->input['name']; - - if(empty($mybb->input['include'])) - { - flash_message($lang->error_none_included, 'error'); - admin_redirect("index.php?module=config-smilies&action=add_multiple"); - } - - $query = $db->simple_select('smilies', 'MAX(disporder) as max_disporder'); - $disporder = $db->fetch_field($query, 'max_disporder'); - - foreach($mybb->input['include'] as $image => $insert) - { - $find[$image] = str_replace("\r\n", "\n", $find[$image]); - $find[$image] = str_replace("\r", "\n", $find[$image]); - $find[$image] = explode("\n", $find[$image]); - foreach(array_merge(array_keys($find[$image], ""), array_keys($find[$image], " ")) as $key) - { - unset($find[$image][$key]); - } - $find[$image] = implode("\n", $find[$image]); - - if($insert) - { - $new_smilie = array( - "name" => $db->escape_string($name[$image]), - "find" => $db->escape_string($find[$image]), - "image" => $db->escape_string($path.$image), - "disporder" => ++$disporder, - "showclickable" => 1 - ); - - $db->insert_query("smilies", $new_smilie); - } - } - - $plugins->run_hooks("admin_config_smilies_add_multiple_commit"); - - $cache->update_smilies(); - - // Log admin action - log_admin_action(); - - flash_message($lang->success_multiple_smilies_added, 'success'); - admin_redirect("index.php?module=config-smilies"); - } - } - - $page->add_breadcrumb_item($lang->add_multiple_smilies); - $page->output_header($lang->smilies." - ".$lang->add_multiple_smilies); - - $sub_tabs['manage_smilies'] = array( - 'title' => $lang->manage_smilies, - 'link' => "index.php?module=config-smilies", - ); - $sub_tabs['add_smilie'] = array( - 'title' => $lang->add_smilie, - 'link' => "index.php?module=config-smilies&action=add" - ); - $sub_tabs['add_multiple_smilies'] = array( - 'title' => $lang->add_multiple_smilies, - 'link' => "index.php?module=config-smilies&action=add_multiple", - 'description' => $lang->add_multiple_smilies_desc - ); - $sub_tabs['mass_edit'] = array( - 'title' => $lang->mass_edit, - 'link' => "index.php?module=config-smilies&action=mass_edit" - ); - - $page->output_nav_tabs($sub_tabs, 'add_multiple_smilies'); - $form = new Form("index.php?module=config-smilies&action=add_multiple", "post", "add_multiple"); - echo $form->generate_hidden_field("step", "1"); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_multiple_smilies); - $form_container->output_row($lang->path_to_images, $lang->path_to_images_desc, $form->generate_text_box('pathfolder', $mybb->input['pathfolder'], array('id' => 'pathfolder')), 'pathfolder'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->show_smilies); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "mass_edit") -{ - $plugins->run_hooks("admin_config_smilies_mass_edit"); - - if($mybb->request_method == "post") - { - foreach($mybb->input['name'] as $sid => $name) - { - $disporder = (int)$mybb->input['disporder'][$sid]; - - $sid = (int)$sid; - if($mybb->input['delete'][$sid] == 1) - { - // Dirty hack to get the disporder working. Note: this doesn't work in every case - unset($mybb->input['disporder'][$sid]); - - $db->delete_query("smilies", "sid = '{$sid}'", 1); - } - else - { - $mybb->input['find'][$sid] = str_replace("\r\n", "\n", $mybb->input['find'][$sid]); - $mybb->input['find'][$sid] = str_replace("\r", "\n", $mybb->input['find'][$sid]); - $mybb->input['find'][$sid] = explode("\n", $mybb->input['find'][$sid]); - foreach(array_merge(array_keys($mybb->input['find'][$sid], ""), array_keys($mybb->input['find'][$sid], " ")) as $key) - { - unset($mybb->input['find'][$sid][$key]); - } - $mybb->input['find'][$sid] = implode("\n", $mybb->input['find'][$sid]); - - $smilie = array( - "name" => $db->escape_string($mybb->input['name'][$sid]), - "find" => $db->escape_string($mybb->input['find'][$sid]), - "showclickable" => $db->escape_string($mybb->input['showclickable'][$sid]) - ); - - // $test contains all disporders except the actual one so we can check whether we have multiple disporders - $test = $mybb->input['disporder']; - unset($test[$sid]); - if(!in_array($disporder, $test)) - { - $smilie['disporder'] = $disporder; - } - - $db->update_query("smilies", $smilie, "sid = '{$sid}'"); - } - - $disporder_list[$disporder] = $disporder; - } - - $plugins->run_hooks("admin_config_smilies_mass_edit_commit"); - - $cache->update_smilies(); - - // Log admin action - log_admin_action(); - - flash_message($lang->success_multiple_smilies_updated, 'success'); - admin_redirect("index.php?module=config-smilies"); - } - - $page->add_breadcrumb_item($lang->mass_edit); - $page->output_header($lang->smilies." - ".$lang->mass_edit); - - $sub_tabs['manage_smilies'] = array( - 'title' => $lang->manage_smilies, - 'link' => "index.php?module=config-smilies", - ); - $sub_tabs['add_smilie'] = array( - 'title' => $lang->add_smilie, - 'link' => "index.php?module=config-smilies&action=add", - ); - $sub_tabs['add_multiple_smilies'] = array( - 'title' => $lang->add_multiple_smilies, - 'link' => "index.php?module=config-smilies&action=add_multiple", - ); - $sub_tabs['mass_edit'] = array( - 'title' => $lang->mass_edit, - 'link' => "index.php?module=config-smilies&action=mass_edit", - 'description' => $lang->mass_edit_desc - ); - - $page->output_nav_tabs($sub_tabs, 'mass_edit'); - - $form = new Form("index.php?module=config-smilies&action=mass_edit", "post", "mass_edit"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['path'] = 'images/smilies/'; - $mybb->input['showclickable'] = 1; - } - - if(!$mybb->input['disporder']) - { - $query = $db->simple_select("smilies", "max(disporder) as dispordermax"); - $mybb->input['disporder'] = $db->fetch_field($query, "dispordermax")+1; - } - - $form_container = new FormContainer($lang->manage_smilies); - $form_container->output_row_header($lang->image, array("class" => "align_center", 'width' => '1')); - $form_container->output_row_header($lang->name); - $form_container->output_row_header($lang->text_replace, array('width' => '20%')); - $form_container->output_row_header($lang->order, array('width' => '5%')); - $form_container->output_row_header($lang->mass_edit_show_clickable, array("width" => 165)); - $form_container->output_row_header($lang->smilie_delete, array("class" => "align_center", 'width' => '5%')); - - $query = $db->simple_select("smilies", "*", "", array('order_by' => 'disporder')); - while($smilie = $db->fetch_array($query)) - { - $smilie['image'] = str_replace("{theme}", "images", $smilie['image']); - if(my_validate_url($smilie['image'], true)) - { - $image = htmlspecialchars_uni($smilie['image']); - } - else - { - $image = "../".htmlspecialchars_uni($smilie['image']); - } - - $form_container->output_cell("\"\"", array("class" => "align_center", "width" => 1)); - $form_container->output_cell($form->generate_text_box("name[{$smilie['sid']}]", $smilie['name'], array('id' => 'name', 'style' => 'width: 98%'))); - $form_container->output_cell($form->generate_text_area("find[{$smilie['sid']}]", $smilie['find'], array('id' => 'find', 'style' => 'width: 95%'))); - $form_container->output_cell($form->generate_numeric_field("disporder[{$smilie['sid']}]", $smilie['disporder'], array('id' => 'disporder', 'style' => 'width: 80%', 'min' => 0))); - $form_container->output_cell($form->generate_yes_no_radio("showclickable[{$smilie['sid']}]", $smilie['showclickable']), array("class" => "align_center")); - $form_container->output_cell($form->generate_check_box("delete[{$smilie['sid']}]", 1, $mybb->input['delete']), array("class" => "align_center")); - $form_container->construct_row(); - } - - if($form_container->num_rows() == 0) - { - $form_container->output_cell($lang->no_smilies, array('colspan' => 6)); - $form_container->construct_row(); - } - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_smilies); - $buttons[] = $form->generate_reset_button($lang->reset); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_smilies_start"); - - $page->output_header($lang->manage_smilies); - - $sub_tabs['manage_smilies'] = array( - 'title' => $lang->manage_smilies, - 'link' => "index.php?module=config-smilies", - 'description' => $lang->manage_smilies_desc - ); - $sub_tabs['add_smilie'] = array( - 'title' => $lang->add_smilie, - 'link' => "index.php?module=config-smilies&action=add", - ); - $sub_tabs['add_multiple_smilies'] = array( - 'title' => $lang->add_multiple_smilies, - 'link' => "index.php?module=config-smilies&action=add_multiple", - ); - $sub_tabs['mass_edit'] = array( - 'title' => $lang->mass_edit, - 'link' => "index.php?module=config-smilies&action=mass_edit", - ); - - $page->output_nav_tabs($sub_tabs, 'manage_smilies'); - - $pagenum = $mybb->get_input('page', MyBB::INPUT_INT); - if($pagenum) - { - $start = ($pagenum-1) * 20; - } - else - { - $start = 0; - $pagenum = 1; - } - - - $table = new Table; - $table->construct_header($lang->image, array("class" => "align_center", "width" => 1)); - $table->construct_header($lang->name, array("width" => "35%")); - $table->construct_header($lang->text_replace, array("width" => "35%")); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2)); - - $query = $db->simple_select("smilies", "*", "", array('limit_start' => $start, 'limit' => 20, 'order_by' => 'disporder')); - while($smilie = $db->fetch_array($query)) - { - $smilie['image'] = str_replace("{theme}", "images", $smilie['image']); - if(my_validate_url($smilie['image'], true)) - { - $image = htmlspecialchars_uni($smilie['image']); - } - else - { - $image = "../".htmlspecialchars_uni($smilie['image']); - } - - $table->construct_cell("\"\"", array("class" => "align_center")); - $table->construct_cell(htmlspecialchars_uni($smilie['name'])); - $table->construct_cell(nl2br(htmlspecialchars_uni($smilie['find']))); - - $table->construct_cell("{$lang->edit}", array("class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_smilie_deletion}')\">{$lang->delete}", array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_smilies, array('colspan' => 5)); - $table->construct_row(); - } - - $table->output($lang->manage_smilies); - - $query = $db->simple_select("smilies", "COUNT(sid) as smilies"); - $total_rows = $db->fetch_field($query, "smilies"); - - echo "
".draw_admin_pagination($pagenum, "20", $total_rows, "index.php?module=config-smilies&page={page}"); - - $page->output_footer(); -} \ No newline at end of file diff --git a/html/forums/admin/modules/config/spiders.php b/html/forums/admin/modules/config/spiders.php deleted file mode 100644 index 9a701a4..0000000 --- a/html/forums/admin/modules/config/spiders.php +++ /dev/null @@ -1,307 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->spiders_bots, "index.php?module=config-spiders"); - -$plugins->run_hooks("admin_config_spiders_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_config_spiders_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['useragent'])) - { - $errors[] = $lang->error_missing_agent; - } - - if(!$errors) - { - $new_spider = array( - "name" => $db->escape_string($mybb->input['name']), - "theme" => $mybb->get_input('theme', MyBB::INPUT_INT), - "language" => $db->escape_string($mybb->input['language']), - "usergroup" => $mybb->get_input('usergroup', MyBB::INPUT_INT), - "useragent" => $db->escape_string($mybb->input['useragent']), - "lastvisit" => 0 - ); - $sid = $db->insert_query("spiders", $new_spider); - - $plugins->run_hooks("admin_config_spiders_add_commit"); - - $cache->update_spiders(); - - // Log admin action - log_admin_action($sid, $mybb->input['name']); - - flash_message($lang->success_bot_created, 'success'); - admin_redirect("index.php?module=config-spiders"); - } - } - - $page->add_breadcrumb_item($lang->add_new_bot); - $page->output_header($lang->spiders_bots." - ".$lang->add_new_bot); - - $sub_tabs['spiders'] = array( - 'title' => $lang->spiders_bots, - 'link' => "index.php?module=config-spiders", - ); - $sub_tabs['add_spider'] = array( - 'title' => $lang->add_new_bot, - 'link' => "index.php?module=config-spiders&action=add", - 'description' => $lang->add_new_bot_desc - ); - - $page->output_nav_tabs($sub_tabs, "add_spider"); - - $form = new Form("index.php?module=config-spiders&action=add", "post"); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_new_bot); - $form_container->output_row($lang->name." *", $lang->name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->user_agent." *", $lang->user_agent_desc, $form->generate_text_box('useragent', $mybb->input['useragent'], array('id' => 'useragent')), 'useragent'); - - $languages = array('' => $lang->use_board_default); - $languages = array_merge($languages, $lang->get_languages()); - $form_container->output_row($lang->language_str, $lang->language_desc, $form->generate_select_box("language", $languages, $mybb->input['language'], array("id" => "language")), 'language'); - - $form_container->output_row($lang->theme, $lang->theme_desc, build_theme_select("theme", $mybb->input['theme'], 0, "", true, false, true)); - - $query = $db->simple_select("usergroups", "*", "", array("order_by" => "title", "order_dir" => "asc")); - - $usergroups = array(); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = $usergroup['title']; - } - if(!$mybb->input['usergroup']) - { - $mybb->input['usergroup'] = 1; - } - $form_container->output_row($lang->user_group, $lang->user_group_desc, $form->generate_select_box("usergroup", $usergroups, $mybb->input['usergroup'], array("id" => "usergroup")), 'usergroup'); - - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->save_bot); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("spiders", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); - $spider = $db->fetch_array($query); - - // Does the spider not exist? - if(!$spider['sid']) - { - flash_message($lang->error_invalid_bot, 'error'); - admin_redirect("index.php?module=config-spiders"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-spiders"); - } - - $plugins->run_hooks("admin_config_spiders_delete"); - - if($mybb->request_method == "post") - { - // Delete the spider - $db->delete_query("spiders", "sid='{$spider['sid']}'"); - - $plugins->run_hooks("admin_config_spiders_delete_commit"); - - $cache->update_spiders(); - - // Log admin action - log_admin_action($spider['sid'], $spider['name']); - - flash_message($lang->success_bot_deleted, 'success'); - admin_redirect("index.php?module=config-spiders"); - } - else - { - $page->output_confirm_action("index.php?module=config-spiders&action=delete&sid={$spider['sid']}", $lang->confirm_bot_deletion); - } -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("spiders", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."'"); - $spider = $db->fetch_array($query); - - // Does the spider not exist? - if(!$spider['sid']) - { - flash_message($lang->error_invalid_bot, 'error'); - admin_redirect("index.php?module=config-spiders"); - } - - $plugins->run_hooks("admin_config_spiders_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['name'])) - { - $errors[] = $lang->error_missing_name; - } - - if(!trim($mybb->input['useragent'])) - { - $errors[] = $lang->error_missing_agent; - } - - if(!$errors) - { - $updated_spider = array( - "name" => $db->escape_string($mybb->input['name']), - "theme" => $mybb->get_input('theme', MyBB::INPUT_INT), - "language" => $db->escape_string($mybb->input['language']), - "usergroup" => $mybb->get_input('usergroup', MyBB::INPUT_INT), - "useragent" => $db->escape_string($mybb->input['useragent']) - ); - - $plugins->run_hooks("admin_config_spiders_edit_commit"); - - $db->update_query("spiders", $updated_spider, "sid='{$spider['sid']}'"); - - $cache->update_spiders(); - - // Log admin action - log_admin_action($spider['sid'], $mybb->input['name']); - - flash_message($lang->success_bot_updated, 'success'); - admin_redirect("index.php?module=config-spiders"); - } - } - - $page->add_breadcrumb_item($lang->edit_bot); - $page->output_header($lang->spiders_bots." - ".$lang->edit_bot); - - $sub_tabs['edit_spider'] = array( - 'title' => $lang->edit_bot, - 'link' => "index.php?module=config-spiders&action=edit&sid={$spider['sid']}", - 'description' => $lang->edit_bot_desc - ); - - $page->output_nav_tabs($sub_tabs, "edit_spider"); - - $form = new Form("index.php?module=config-spiders&action=edit&sid={$spider['sid']}", "post"); - - if($errors) - { - $page->output_inline_error($errors); - $spider_data = $mybb->input; - } - else - { - $spider_data = $spider; - } - - $form_container = new FormContainer($lang->edit_bot); - $form_container->output_row($lang->name." *", $lang->name_desc, $form->generate_text_box('name', $spider_data['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->user_agent." *", $lang->user_agent_desc, $form->generate_text_box('useragent', $spider_data['useragent'], array('id' => 'useragent')), 'useragent'); - - $languages = array('' => $lang->use_board_default); - $languages = array_merge($languages, $lang->get_languages()); - $form_container->output_row($lang->language_str, $lang->language_desc, $form->generate_select_box("language", $languages, $spider_data['language'], array("id" => "language")), 'language'); - - $form_container->output_row($lang->theme, $lang->theme_desc, build_theme_select("theme", $spider_data['theme'], 0, "", true, false, true)); - - $query = $db->simple_select("usergroups", "*", "", array("order_by" => "title", "order_dir" => "asc")); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = $usergroup['title']; - } - if(!$spider_data['usergroup']) - { - $spider_data['usergroup'] = 1; - } - $form_container->output_row($lang->user_group, $lang->user_group_desc, $form->generate_select_box("usergroup", $usergroups, $spider_data['usergroup'], array("id" => "usergroup")), 'usergroup'); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->save_bot); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_spiders_start"); - - $page->output_header($lang->spiders_bots); - - $sub_tabs['spiders'] = array( - 'title' => $lang->spiders_bots, - 'link' => "index.php?module=config-spiders", - 'description' => $lang->spiders_bots_desc - ); - $sub_tabs['add_spider'] = array( - 'title' => $lang->add_new_bot, - 'link' => "index.php?module=config-spiders&action=add" - ); - - $page->output_nav_tabs($sub_tabs, "spiders"); - - $table = new Table; - $table->construct_header($lang->bot); - $table->construct_header($lang->last_visit, array("class" => "align_center", "width" => 200)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150, "colspan" => 2)); - - $query = $db->simple_select("spiders", "*", "", array("order_by" => "lastvisit", "order_dir" => "desc")); - while($spider = $db->fetch_array($query)) - { - $lastvisit = $lang->never; - $spider['name'] = htmlspecialchars_uni($spider['name']); - - if($spider['lastvisit']) - { - $lastvisit = my_date('relative', $spider['lastvisit']); - } - - $table->construct_cell("{$spider['name']}"); - $table->construct_cell($lastvisit, array("class" => "align_center", "width" => 200)); - $table->construct_cell("{$lang->edit}", array("class" => "align_center", "width" => 75)); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_bot_deletion}');\">{$lang->delete}", array("class" => "align_center", "width" => 75)); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_bots, array("colspan" => 4)); - $table->construct_row(); - } - - $table->output($lang->spiders_bots); - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/thread_prefixes.php b/html/forums/admin/modules/config/thread_prefixes.php deleted file mode 100644 index 9d1e9a2..0000000 --- a/html/forums/admin/modules/config/thread_prefixes.php +++ /dev/null @@ -1,536 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->thread_prefixes, 'index.php?module=config-thread_prefixes'); - -$sub_tabs = array( - "thread_prefixes" => array( - 'title' => $lang->thread_prefixes, - 'link' => 'index.php?module=config-thread_prefixes', - 'description' => $lang->thread_prefixes_desc - ), - "add_prefix" => array( - 'title'=> $lang->add_new_thread_prefix, - 'link' => 'index.php?module=config-thread_prefixes&action=add_prefix', - 'description' => $lang->add_new_thread_prefix_desc - ) -); - -$plugins->run_hooks('admin_config_thread_prefixes_begin'); - -if($mybb->input['action'] == 'add_prefix') -{ - $plugins->run_hooks('admin_config_thread_prefixes_add_prefix'); - - if($mybb->request_method == 'post') - { - if(trim($mybb->input['prefix']) == '') - { - $errors[] = $lang->error_missing_prefix; - } - - if(trim($mybb->input['displaystyle']) == '') - { - $errors[] = $lang->error_missing_display_style; - } - - if($mybb->input['forum_type'] == 2) - { - if(count($mybb->input['forum_1_forums']) < 1) - { - $errors[] = $lang->error_no_forums_selected; - } - - $forum_checked[2] = "checked=\"checked\""; - } - else - { - $forum_checked[1] = "checked=\"checked\""; - $mybb->input['forum_1_forums'] = ''; - } - - if($mybb->input['group_type'] == 2) - { - if(count($mybb->input['group_1_groups']) < 1) - { - $errors[] = $lang->error_no_groups_selected; - } - - $group_checked[2] = "checked=\"checked\""; - } - else - { - $group_checked[1] = "checked=\"checked\""; - $mybb->input['group_1_forums'] = ''; - } - - if(!$errors) - { - $new_prefix = array( - 'prefix' => $db->escape_string($mybb->input['prefix']), - 'displaystyle' => $db->escape_string($mybb->input['displaystyle']) - ); - - if($mybb->input['forum_type'] == 2) - { - if(is_array($mybb->input['forum_1_forums'])) - { - $checked = array(); - foreach($mybb->input['forum_1_forums'] as $fid) - { - $checked[] = (int)$fid; - } - - $new_prefix['forums'] = implode(',', $checked); - } - } - else - { - $new_prefix['forums'] = '-1'; - } - - if($mybb->input['group_type'] == 2) - { - if(is_array($mybb->input['group_1_groups'])) - { - $checked = array(); - foreach($mybb->input['group_1_groups'] as $gid) - { - $checked[] = (int)$gid; - } - - $new_prefix['groups'] = implode(',', $checked); - } - } - else - { - $new_prefix['groups'] = '-1'; - } - - $pid = $db->insert_query('threadprefixes', $new_prefix); - - $plugins->run_hooks('admin_config_thread_prefixes_add_prefix_commit'); - - // Log admin action - log_admin_action($pid, htmlspecialchars_uni($mybb->input['prefix'])); - $cache->update_threadprefixes(); - - flash_message($lang->success_thread_prefix_created, 'success'); - admin_redirect('index.php?module=config-thread_prefixes'); - } - } - - $page->add_breadcrumb_item($lang->add_new_thread_prefix); - $page->output_header($lang->thread_prefixes." - ".$lang->add_new_thread_prefix); - $page->output_nav_tabs($sub_tabs, 'add_prefix'); - - $form = new Form('index.php?module=config-thread_prefixes&action=add_prefix', 'post'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['prefix'] = ''; - $mybb->input['displaystyle'] = ''; - $mybb->input['forum_1_forums'] = ''; - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - $mybb->input['group_1_groups'] = ''; - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - } - - $form_container = new FormContainer($lang->prefix_options); - $form_container->output_row($lang->prefix.' *', $lang->prefix_desc, $form->generate_text_box('prefix', $mybb->input['prefix'], array('id' => 'prefix')), 'prefix'); - $form_container->output_row($lang->display_style.' *', $lang->display_style_desc, $form->generate_text_box('displaystyle', $mybb->input['displaystyle'], array('id' => 'displaystyle')), 'displaystyle'); - - $actions = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('forum_1_forums[]', $mybb->input['forum_1_forums'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_in_forums.' *', '', $actions); - - $group_select = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('group_1_groups[]', $mybb->input['group_1_groups'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_to_groups." *", '', $group_select); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_thread_prefix); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == 'edit_prefix') -{ - $prefix = build_prefixes($mybb->input['pid']); - if(empty($prefix['pid'])) - { - flash_message($lang->error_invalid_prefix, 'error'); - admin_redirect('index.php?module=config-thread_prefixes'); - } - - $plugins->run_hooks('admin_config_thread_prefixes_edit_prefix_start'); - - if($mybb->request_method == 'post') - { - if(trim($mybb->input['prefix']) == '') - { - $errors[] = $lang->error_missing_prefix; - } - - if(trim($mybb->input['displaystyle']) == '') - { - $errors[] = $lang->error_missing_display_style; - } - - if($mybb->input['forum_type'] == 2) - { - if(count($mybb->input['forum_1_forums']) < 1) - { - $errors[] = $lang->error_no_forums_selected; - } - - $forum_checked[2] = "checked=\"checked\""; - } - else - { - $forum_checked[1] = "checked=\"checked\""; - $mybb->input['forum_1_forums'] = ''; - } - - if($mybb->input['group_type'] == 2) - { - if(count($mybb->input['group_1_groups']) < 1) - { - $errors[] = $lang->error_no_groups_selected; - } - - $group_checked[2] = "checked=\"checked\""; - } - else - { - $group_checked[1] = "checked=\"checked\""; - $mybb->input['group_1_forums'] = ''; - } - - if(!$errors) - { - $update_prefix = array( - 'prefix' => $db->escape_string($mybb->input['prefix']), - 'displaystyle' => $db->escape_string($mybb->input['displaystyle']) - ); - - if($mybb->input['forum_type'] == 2) - { - if(is_array($mybb->input['forum_1_forums'])) - { - $checked = array(); - foreach($mybb->input['forum_1_forums'] as $fid) - { - $checked[] = (int)$fid; - } - - $update_prefix['forums'] = implode(',', $checked); - } - } - else - { - $update_prefix['forums'] = '-1'; - } - - if($mybb->input['group_type'] == 2) - { - if(is_array($mybb->input['group_1_groups'])) - { - $checked = array(); - foreach($mybb->input['group_1_groups'] as $gid) - { - $checked[] = (int)$gid; - } - - $update_prefix['groups'] = implode(',', $checked); - } - } - else - { - $update_prefix['groups'] = '-1'; - } - - $plugins->run_hooks('admin_config_thread_prefixes_edit_prefix_commit'); - - $db->update_query('threadprefixes', $update_prefix, "pid='{$prefix['pid']}'"); - - // Log admin action - log_admin_action($prefix['pid'], htmlspecialchars_uni($mybb->input['prefix'])); - $cache->update_threadprefixes(); - - flash_message($lang->success_thread_prefix_updated, 'success'); - admin_redirect('index.php?module=config-thread_prefixes'); - } - } - - $page->add_breadcrumb_item($lang->edit_thread_prefix); - $page->output_header($lang->thread_prefixes.' - '.$lang->edit_thread_prefix); - - // Setup the edit prefix tab - unset($sub_tabs); - $sub_tabs['edit_prefix'] = array( - "title" => $lang->edit_prefix, - "link" => "index.php?module=config-thread_prefixes", - "description" => $lang->edit_prefix_desc - ); - $page->output_nav_tabs($sub_tabs, "edit_prefix"); - - $form = new Form('index.php?module=config-thread_prefixes&action=edit_prefix', 'post'); - echo $form->generate_hidden_field('pid', $prefix['pid']); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $query = $db->simple_select('threadprefixes', '*', "pid = '{$prefix['pid']}'"); - $threadprefix = $db->fetch_array($query); - - $mybb->input['prefix'] = $threadprefix['prefix']; - $mybb->input['displaystyle'] = $threadprefix['displaystyle']; - $mybb->input['forum_1_forums'] = explode(",", $threadprefix['forums']); - - if(!$threadprefix['forums'] || $threadprefix['forums'] == -1) - { - $forum_checked[1] = "checked=\"checked\""; - $forum_checked[2] = ''; - } - else - { - $forum_checked[1] = ''; - $forum_checked[2] = "checked=\"checked\""; - } - - $mybb->input['group_1_groups'] = explode(",", $threadprefix['groups']); - - if(!$threadprefix['groups'] || $threadprefix['groups'] == -1) - { - $group_checked[1] = "checked=\"checked\""; - $group_checked[2] = ''; - } - else - { - $group_checked[1] = ''; - $group_checked[2] = "checked=\"checked\""; - } - } - - $form_container = new FormContainer($lang->prefix_options); - $form_container->output_row($lang->prefix.' *', $lang->prefix_desc, $form->generate_text_box('prefix', $mybb->input['prefix'], array('id' => 'prefix')), 'prefix'); - $form_container->output_row($lang->display_style.' *', $lang->display_style_desc, $form->generate_text_box('displaystyle', $mybb->input['displaystyle'], array('id' => 'displaystyle')), 'displaystyle'); - - $actions = " -
-
-
-
- - - - - -
{$lang->forums_colon}".$form->generate_forum_select('forum_1_forums[]', $mybb->input['forum_1_forums'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_in_forums.' *', '', $actions); - - $group_select = " -
-
-
-
- - - - - -
{$lang->groups_colon}".$form->generate_group_select('group_1_groups[]', $mybb->input['group_1_groups'], array('multiple' => true, 'size' => 5))."
-
-
- "; - $form_container->output_row($lang->available_to_groups." *", '', $group_select); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_thread_prefix); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == 'delete_prefix') -{ - $prefix = build_prefixes($mybb->input['pid']); - if(empty($prefix['pid'])) - { - flash_message($lang->error_invalid_thread_prefix, 'error'); - admin_redirect('index.php?module=config-thread_prefixes'); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect('index.php?module=config-thread_prefixes'); - } - - $plugins->run_hooks('admin_config_thread_prefixes_delete_prefix'); - - if($mybb->request_method == 'post') - { - // Remove prefix from existing threads - $update_threads = array('prefix' => 0); - - // Delete prefix - $db->delete_query('threadprefixes', "pid='{$prefix['pid']}'"); - - $plugins->run_hooks('admin_config_thread_prefixes_delete_thread_prefix_commit'); - - $db->update_query('threads', $update_threads, "prefix='{$prefix['pid']}'"); - - // Log admin action - log_admin_action($prefix['pid'], htmlspecialchars_uni($prefix['prefix'])); - $cache->update_threadprefixes(); - - flash_message($lang->success_thread_prefix_deleted, 'success'); - admin_redirect('index.php?module=config-thread_prefixes'); - } - else - { - $page->output_confirm_action("index.php?module=config-thread_prefixes&action=delete_prefix&pid={$prefix['pid']}", $lang->confirm_thread_prefix_deletion); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks('admin_config_thread_prefixes_start'); - - $page->output_header($lang->thread_prefixes); - $page->output_nav_tabs($sub_tabs, 'thread_prefixes'); - - $table = new Table; - $table->construct_header($lang->prefix); - $table->construct_header($lang->controls, array('class' => 'align_center', 'colspan' => 2)); - - $prefixes = build_prefixes(); - if(!empty($prefixes)) - { - foreach($prefixes as $prefix) - { - $table->construct_cell("".htmlspecialchars_uni($prefix['prefix']).""); - $table->construct_cell("{$lang->edit}", array('width' => 100, 'class' => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_thread_prefix_deletion}')\">{$lang->delete}", array('width' => 100, 'class' => 'align_center')); - $table->construct_row(); - } - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_thread_prefixes, array('colspan' => 3)); - $table->construct_row(); - } - - $table->output($lang->thread_prefixes); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/config/warning.php b/html/forums/admin/modules/config/warning.php deleted file mode 100644 index 1e4b911..0000000 --- a/html/forums/admin/modules/config/warning.php +++ /dev/null @@ -1,774 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -require_once MYBB_ROOT."inc/functions_warnings.php"; - -$page->add_breadcrumb_item($lang->warning_system, "index.php?module=config-warning"); - -if($mybb->input['action'] == "levels" || $mybb->input['action'] == "add_type" || $mybb->input['action'] == "add_level" || !$mybb->input['action']) -{ - $sub_tabs['manage_types'] = array( - 'title' => $lang->warning_types, - 'link' => "index.php?module=config-warning", - 'description' => $lang->warning_types_desc - ); - $sub_tabs['add_type'] = array( - 'title'=> $lang->add_warning_type, - 'link' => "index.php?module=config-warning&action=add_type", - 'description' => $lang->add_warning_type_desc - ); - $sub_tabs['manage_levels'] = array( - 'title' => $lang->warning_levels, - 'link' => "index.php?module=config-warning&action=levels", - 'description' => $lang->warning_levels_desc, - ); - $sub_tabs['add_level'] = array( - 'title'=> $lang->add_warning_level, - 'link' => "index.php?module=config-warning&action=add_level", - 'description' => $lang->add_warning_level_desc - ); -} - -$plugins->run_hooks("admin_config_warning_begin"); - -if($mybb->input['action'] == "add_level") -{ - $plugins->run_hooks("admin_config_warning_add_level"); - - if($mybb->request_method == "post") - { - if(!is_numeric($mybb->input['percentage']) || $mybb->input['percentage'] > 100 || $mybb->input['percentage'] < 0) - { - $errors[] = $lang->error_invalid_warning_percentage; - } - - if(!$mybb->input['action_type']) - { - $errors[] = $lang->error_missing_action_type; - } - - if(!$errors) - { - // Ban - if($mybb->input['action_type'] == 1) - { - $action = array( - "type" => 1, - "usergroup" => $mybb->get_input('action_1_usergroup', MyBB::INPUT_INT), - "length" => fetch_time_length($mybb->input['action_1_time'], $mybb->input['action_1_period']) - ); - } - // Suspend posting - else if($mybb->input['action_type'] == 2) - { - $action = array( - "type" => 2, - "length" => fetch_time_length($mybb->input['action_2_time'], $mybb->input['action_2_period']) - ); - } - // Moderate posts - else if($mybb->input['action_type'] == 3) - { - $action = array( - "type" => 3, - "length" => fetch_time_length($mybb->input['action_3_time'], $mybb->input['action_3_period']) - ); - } - $new_level = array( - "percentage" => $mybb->get_input('percentage', MyBB::INPUT_INT), - "action" => my_serialize($action) - ); - - $lid = $db->insert_query("warninglevels", $new_level); - - $plugins->run_hooks("admin_config_warning_add_level_commit"); - - // Log admin action - log_admin_action($lid, $mybb->input['percentage']); - - flash_message($lang->success_warning_level_created, 'success'); - admin_redirect("index.php?module=config-warning&action=levels"); - } - } - - $page->add_breadcrumb_item($lang->add_warning_level); - $page->output_header($lang->warning_levels." - ".$lang->add_warning_level); - - $page->output_nav_tabs($sub_tabs, 'add_level'); - $form = new Form("index.php?module=config-warning&action=add_level", "post"); - - - if($errors) - { - $page->output_inline_error($errors); - $action_checked[$mybb->input['action_type']] = "checked=\"checked\""; - } - - $form_container = new FormContainer($lang->add_warning_level); - $form_container->output_row($lang->warning_points_percentage, $lang->warning_points_percentage_desc, $form->generate_numeric_field('percentage', $mybb->input['percentage'], array('id' => 'percentage', 'min' => 0, 'max' => 100)), 'percentage'); - - $query = $db->simple_select("usergroups", "*", "isbannedgroup=1"); - while($group = $db->fetch_array($query)) - { - $banned_groups[$group['gid']] = $group['title']; - } - - $periods = array( - "hours" => $lang->expiration_hours, - "days" => $lang->expiration_days, - "weeks" => $lang->expiration_weeks, - "months" => $lang->expiration_months, - "never" => $lang->expiration_permanent - ); - - $actions = " -
-
-
- - - - - - - - - -
{$lang->banned_group}".$form->generate_select_box('action_1_usergroup', $banned_groups, $mybb->input['action_1_usergroup'])."
{$lang->ban_length}".$form->generate_numeric_field('action_1_time', $mybb->input['action_1_time'], array('style' => 'width: 3em;', 'min' => 0))." ".$form->generate_select_box('action_1_period', $periods, $mybb->input['action_1_period'])."
-
-
-
- - - - - -
{$lang->suspension_length}".$form->generate_numeric_field('action_2_time', $mybb->input['action_2_time'], array('style' => 'width: 3em;', 'min' => 0))." ".$form->generate_select_box('action_2_period', $periods, $mybb->input['action_2_period'])."
-
-
-
- - - - - -
{$lang->moderation_length}".$form->generate_numeric_field('action_3_time', $mybb->input['action_3_time'], array('style' => 'width: 3em;', 'min' => 0))." ".$form->generate_select_box('action_3_period', $periods, $mybb->input['action_3_period'])."
-
-
- "; - $form_container->output_row($lang->action_to_be_taken, $lang->action_to_be_taken_desc, $actions); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_warning_level); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_level") -{ - $query = $db->simple_select("warninglevels", "*", "lid='".$mybb->get_input('lid', MyBB::INPUT_INT)."'"); - $level = $db->fetch_array($query); - - // Does the warning level not exist? - if(!$level['lid']) - { - flash_message($lang->error_invalid_warning_level, 'error'); - admin_redirect("index.php?module=config-warning"); - } - - $plugins->run_hooks("admin_config_warning_edit_level"); - - if($mybb->request_method == "post") - { - if(!is_numeric($mybb->input['percentage']) || $mybb->input['percentage'] > 100 || $mybb->input['percentage'] < 0) - { - $errors[] = $lang->error_invalid_warning_percentage; - } - - if(!$mybb->input['action_type']) - { - $errors[] = $lang->error_missing_action_type; - } - - if(!$errors) - { - // Ban - if($mybb->input['action_type'] == 1) - { - $action = array( - "type" => 1, - "usergroup" => $mybb->get_input('action_1_usergroup', MyBB::INPUT_INT), - "length" => fetch_time_length($mybb->input['action_1_time'], $mybb->input['action_1_period']) - ); - } - // Suspend posting - else if($mybb->input['action_type'] == 2) - { - $action = array( - "type" => 2, - "length" => fetch_time_length($mybb->input['action_2_time'], $mybb->input['action_2_period']) - ); - } - // Moderate posts - else if($mybb->input['action_type'] == 3) - { - $action = array( - "type" => 3, - "length" => fetch_time_length($mybb->input['action_3_time'], $mybb->input['action_3_period']) - ); - } - $updated_level = array( - "percentage" => $mybb->get_input('percentage', MyBB::INPUT_INT), - "action" => my_serialize($action) - ); - - $plugins->run_hooks("admin_config_warning_edit_level_commit"); - - $db->update_query("warninglevels", $updated_level, "lid='{$level['lid']}'"); - - // Log admin action - log_admin_action($level['lid'], $mybb->input['percentage']); - - flash_message($lang->success_warning_level_updated, 'success'); - admin_redirect("index.php?module=config-warning&action=levels"); - } - } - - $page->add_breadcrumb_item($lang->edit_warning_level); - $page->output_header($lang->warning_levels." - ".$lang->edit_warning_level); - - $sub_tabs['edit_level'] = array( - 'link' => "index.php?module=config-warning&action=edit_level&lid={$level['lid']}", - 'title' => $lang->edit_warning_level, - 'description' => $lang->edit_warning_level_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_level'); - $form = new Form("index.php?module=config-warning&action=edit_level&lid={$level['lid']}", "post"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, array( - "percentage" => $level['percentage'], - ) - ); - $action = my_unserialize($level['action']); - if($action['type'] == 1) - { - $mybb->input['action_1_usergroup'] = $action['usergroup']; - $length = fetch_friendly_expiration($action['length']); - $mybb->input['action_1_time'] = $length['time']; - $mybb->input['action_1_period'] = $length['period']; - } - else if($action['type'] == 2) - { - $length = fetch_friendly_expiration($action['length']); - $mybb->input['action_2_time'] = $length['time']; - $mybb->input['action_2_period'] = $length['period']; - } - else if($action['type'] == 3) - { - $length = fetch_friendly_expiration($action['length']); - $mybb->input['action_3_time'] = $length['time']; - $mybb->input['action_3_period'] = $length['period']; - } - $action_checked[$action['type']] = "checked=\"checked\""; - } - - $form_container = new FormContainer($lang->edit_warning_level); - $form_container->output_row($lang->warning_points_percentage, $lang->warning_points_percentage_desc, $form->generate_numeric_field('percentage', $mybb->input['percentage'], array('id' => 'percentage', 'min' => 0, 'max' => 100)), 'percentage'); - - $query = $db->simple_select("usergroups", "*", "isbannedgroup=1"); - while($group = $db->fetch_array($query)) - { - $banned_groups[$group['gid']] = $group['title']; - } - - $periods = array( - "hours" => $lang->expiration_hours, - "days" => $lang->expiration_days, - "weeks" => $lang->expiration_weeks, - "months" => $lang->expiration_months, - "never" => $lang->expiration_permanent - ); - - $actions = " -
-
-
- - - - - - - - - -
{$lang->banned_group}".$form->generate_select_box('action_1_usergroup', $banned_groups, $mybb->input['action_1_usergroup'])."
{$lang->ban_length}".$form->generate_numeric_field('action_1_time', $mybb->input['action_1_time'], array('style' => 'width: 3em;', 'min' => 0))." ".$form->generate_select_box('action_1_period', $periods, $mybb->input['action_1_period'])."
-
-
-
- - - - - -
{$lang->suspension_length}".$form->generate_numeric_field('action_2_time', $mybb->input['action_2_time'], array('style' => 'width: 3em;', 'min' => 0))." ".$form->generate_select_box('action_2_period', $periods, $mybb->input['action_2_period'])."
-
-
-
- - - - - -
{$lang->moderation_length}".$form->generate_numeric_field('action_3_time', $mybb->input['action_3_time'], array('style' => 'width: 3em;', 'min' => 0))." ".$form->generate_select_box('action_3_period', $periods, $mybb->input['action_3_period'])."
-
-
- "; - $form_container->output_row($lang->action_to_be_taken, $lang->action_to_be_taken_desc, $actions); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_warning_level); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete_level") -{ - $query = $db->simple_select("warninglevels", "*", "lid='".$mybb->get_input('lid', MyBB::INPUT_INT)."'"); - $level = $db->fetch_array($query); - - // Does the warning level not exist? - if(!$level['lid']) - { - flash_message($lang->error_invalid_warning_level, 'error'); - admin_redirect("index.php?module=config-warning"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-warning"); - } - - $plugins->run_hooks("admin_config_warning_delete_level"); - - if($mybb->request_method == "post") - { - // Delete the level - $db->delete_query("warninglevels", "lid='{$level['lid']}'"); - - $plugins->run_hooks("admin_config_warning_delete_level_commit"); - - // Log admin action - log_admin_action($level['lid'], $level['percentage']); - - flash_message($lang->success_warning_level_deleted, 'success'); - admin_redirect("index.php?module=config-warning"); - } - else - { - $page->output_confirm_action("index.php?module=config-warning&action=delete_level&lid={$level['lid']}", $lang->confirm_warning_level_deletion); - } -} - -if($mybb->input['action'] == "add_type") -{ - $plugins->run_hooks("admin_config_warning_add_type"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_type_title; - } - - if(!is_numeric($mybb->input['points']) || $mybb->input['points'] > $mybb->settings['maxwarningpoints'] || $mybb->input['points'] <= 0) - { - $errors[] = $lang->sprintf($lang->error_missing_type_points, $mybb->settings['maxwarningpoints']); - } - - if(!$errors) - { - $new_type = array( - "title" => $db->escape_string($mybb->input['title']), - "points" => $mybb->get_input('points', MyBB::INPUT_INT), - "expirationtime" => fetch_time_length($mybb->input['expire_time'], $mybb->input['expire_period']) - ); - - $tid = $db->insert_query("warningtypes", $new_type); - - $plugins->run_hooks("admin_config_warning_add_type_commit"); - - // Log admin action - log_admin_action($tid, $mybb->input['title']); - - flash_message($lang->success_warning_type_created, 'success'); - admin_redirect("index.php?module=config-warning"); - } - } - else - { - $mybb->input = array_merge($mybb->input, array( - "points" => "2", - "expire_time" => 1, - "expire_period" => "days" - ) - ); - } - - $page->add_breadcrumb_item($lang->add_warning_type); - $page->output_header($lang->warning_types." - ".$lang->add_warning_type); - - $page->output_nav_tabs($sub_tabs, 'add_type'); - $form = new Form("index.php?module=config-warning&action=add_type", "post"); - - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_warning_type); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->points_to_add." *", $lang->points_to_add_desc, $form->generate_numeric_field('points', $mybb->input['points'], array('id' => 'points', 'min' => 0, 'max' => $mybb->settings['maxwarningpoints'])), 'points'); - $expiration_periods = array( - "hours" => $lang->expiration_hours, - "days" => $lang->expiration_days, - "weeks" => $lang->expiration_weeks, - "months" => $lang->expiration_months, - "never" => $lang->expiration_never - ); - $form_container->output_row($lang->warning_expiry, $lang->warning_expiry_desc, $form->generate_numeric_field('expire_time', $mybb->input['expire_time'], array('id' => 'expire_time', 'min' => 0))." ".$form->generate_select_box('expire_period', $expiration_periods, $mybb->input['expire_period'], array('id' => 'expire_period')), 'expire_time'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_warning_type); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_type") -{ - $query = $db->simple_select("warningtypes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $type = $db->fetch_array($query); - - // Does the warning type not exist? - if(!$type['tid']) - { - flash_message($lang->error_invalid_warning_type, 'error'); - admin_redirect("index.php?module=config-warning"); - } - - $plugins->run_hooks("admin_config_warning_edit_type"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_type_title; - } - - if(!is_numeric($mybb->input['points']) || $mybb->input['points'] > $mybb->settings['maxwarningpoints'] || $mybb->input['points'] < 0) - { - $errors[] = $lang->sprintf($lang->error_missing_type_points, $mybb->settings['maxwarningpoints']); - } - - if(!$errors) - { - $updated_type = array( - "title" => $db->escape_string($mybb->input['title']), - "points" => $mybb->get_input('points', MyBB::INPUT_INT), - "expirationtime" => fetch_time_length($mybb->input['expire_time'], $mybb->input['expire_period']) - ); - - $plugins->run_hooks("admin_config_warning_edit_type_commit"); - - $db->update_query("warningtypes", $updated_type, "tid='{$type['tid']}'"); - - // Log admin action - log_admin_action($type['tid'], $mybb->input['title']); - - flash_message($lang->success_warning_type_updated, 'success'); - admin_redirect("index.php?module=config-warning"); - } - } - else - { - $expiration = fetch_friendly_expiration($type['expirationtime']); - $mybb->input = array_merge($mybb->input, array( - "title" => $type['title'], - "points" => $type['points'], - "expire_time" => $expiration['time'], - "expire_period" => $expiration['period'] - ) - ); - } - - $page->add_breadcrumb_item($lang->edit_warning_type); - $page->output_header($lang->warning_types." - ".$lang->edit_warning_type); - - $sub_tabs['edit_type'] = array( - 'link' => "index.php?module=config-warning&action=edit_type&tid={$type['tid']}", - 'title' => $lang->edit_warning_type, - 'description' => $lang->edit_warning_type_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_type'); - $form = new Form("index.php?module=config-warning&action=edit_type&tid={$type['tid']}", "post"); - - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->edit_warning_type); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->points_to_add." *", $lang->points_to_add_desc, $form->generate_numeric_field('points', $mybb->input['points'], array('id' => 'points', 'min' => 0, 'max' => $mybb->settings['maxwarningpoints'])), 'points'); - $expiration_periods = array( - "hours" => $lang->expiration_hours, - "days" => $lang->expiration_days, - "weeks" => $lang->expiration_weeks, - "months" => $lang->expiration_months, - "never" => $lang->expiration_never - ); - $form_container->output_row($lang->warning_expiry, $lang->warning_expiry_desc, $form->generate_numeric_field('expire_time', $mybb->input['expire_time'], array('id' => 'expire_time', 'min' => 0))." ".$form->generate_select_box('expire_period', $expiration_periods, $mybb->input['expire_period'], array('id' => 'expire_period')), 'expire_time'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_warning_type); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete_type") -{ - $query = $db->simple_select("warningtypes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $type = $db->fetch_array($query); - - // Does the warning type not exist? - if(!$type['tid']) - { - flash_message($lang->error_invalid_warning_type, 'error'); - admin_redirect("index.php?module=config-warning"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=config-warning"); - } - - $plugins->run_hooks("admin_config_warning_delete_type"); - - if($mybb->request_method == "post") - { - // Delete the type - $db->delete_query("warningtypes", "tid='{$type['tid']}'"); - - $plugins->run_hooks("admin_config_warning_delete_type_commit"); - - // Log admin action - log_admin_action($type['tid'], $type['title']); - - flash_message($lang->success_warning_type_deleted, 'success'); - admin_redirect("index.php?module=config-warning"); - } - else - { - $page->output_confirm_action("index.php?module=config-warning&action=delete_type&tid={$type['tid']}", $lang->confirm_warning_type_deletion); - } -} - -if($mybb->input['action'] == "levels") -{ - $plugins->run_hooks("admin_config_warning_levels"); - - $page->output_header($lang->warning_levels); - - $page->output_nav_tabs($sub_tabs, 'manage_levels'); - - $table = new Table; - $table->construct_header($lang->percentage, array('width' => '5%', 'class' => 'align_center')); - $table->construct_header($lang->action_to_take); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2)); - - $query = $db->simple_select("warninglevels", "*", "", array('order_by' => 'percentage')); - while($level = $db->fetch_array($query)) - { - $table->construct_cell("{$level['percentage']}%", array("class" => "align_center")); - $action = my_unserialize($level['action']); - $period = fetch_friendly_expiration($action['length']); - - // Get the right language for the ban period - $lang_str = "expiration_".$period['period']; - $period_str = $lang->$lang_str; - - if($action['type'] == 1) - { - $type = "move_banned_group"; - $group_name = $groupscache[$action['usergroup']]['title']; - } - elseif($action['type'] == 2) - { - $type = "suspend_posting"; - } - elseif($action['type'] == 3) - { - $type = "moderate_new_posts"; - } - - if($period['period'] == "never") - { - $type .= "_permanent"; - - if($group_name) - { - // Permanently banned? Oh noes... switch group to the first sprintf replacement... - $period['time'] = $group_name; - } - } - - // If this level is permanently in place, then $period_str and $group_name do not apply below... - $type = $lang->sprintf($lang->$type, $period['time'], $period_str, $group_name); - - $table->construct_cell($type); - $table->construct_cell("{$lang->edit}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_warning_level_deletion}')\">{$lang->delete}", array("width" => 100, "class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_warning_levels, array('colspan' => 4)); - $table->construct_row(); - $no_results = true; - } - - $table->output($lang->warning_levels); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_config_warning_start"); - - $page->output_header($lang->warning_types); - - $page->output_nav_tabs($sub_tabs, 'manage_types'); - - $table = new Table; - $table->construct_header($lang->warning_type); - $table->construct_header($lang->points, array('width' => '5%', 'class' => 'align_center')); - $table->construct_header($lang->expires_after, array('width' => '25%', 'class' => 'align_center')); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2)); - - $query = $db->simple_select("warningtypes", "*", "", array('order_by' => 'title')); - while($type = $db->fetch_array($query)) - { - $type['name'] = htmlspecialchars_uni($type['title']); - $table->construct_cell("{$type['title']}"); - $table->construct_cell("{$type['points']}", array("class" => "align_center")); - $expiration = fetch_friendly_expiration($type['expirationtime']); - $lang_str = "expiration_".$expiration['period']; - if($type['expirationtime'] > 0) - { - $table->construct_cell("{$expiration['time']} {$lang->$lang_str}", array("class" => "align_center")); - } - else - { - $table->construct_cell($lang->never, array("class" => "align_center")); - } - $table->construct_cell("{$lang->edit}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_warning_type_deletion}')\">{$lang->delete}", array("width" => 100, "class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_warning_types, array('colspan' => 5)); - $table->construct_row(); - $no_results = true; - } - - $table->output($lang->warning_types); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/forum/announcements.php b/html/forums/admin/modules/forum/announcements.php deleted file mode 100644 index 2393f33..0000000 --- a/html/forums/admin/modules/forum/announcements.php +++ /dev/null @@ -1,952 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->forum_announcements, "index.php?module=forum-announcements"); - -if($mybb->input['action'] == "add" || !$mybb->input['action']) -{ - $sub_tabs['forum_announcements'] = array( - 'title' => $lang->forum_announcements, - 'link' => "index.php?module=forum-announcements", - 'description' => $lang->forum_announcements_desc - ); - - $sub_tabs['add_announcement'] = array( - 'title' => $lang->add_announcement, - 'link' => "index.php?module=forum-announcements&action=add", - 'description' => $lang->add_announcement_desc - ); -} -else if($mybb->input['action'] == "edit") -{ - $sub_tabs['forum_announcements'] = array( - 'title' => $lang->forum_announcements, - 'link' => "index.php?module=forum-announcements", - 'description' => $lang->forum_announcements_desc - ); - - $sub_tabs['update_announcement'] = array( - 'title' => $lang->update_announcement, - 'link' => "index.php?module=forum-announcements&action=add", - 'description' => $lang->update_announcement_desc - ); -} - -$plugins->run_hooks("admin_forum_announcements_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_forum_announcements_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!trim($mybb->input['message'])) - { - $errors[] = $lang->error_missing_message; - } - - if(!trim($mybb->input['fid'])) - { - $errors[] = $lang->error_missing_forum; - } - - if(!checkdate($mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT))) - { - $errors[] = $lang->error_invalid_start_date; - } - - // End before startdate? - $startdate = @explode(" ", $mybb->input['starttime_time']); - $startdate = @explode(":", $startdate[0]); - $enddate = @explode(" ", $mybb->input['endtime_time']); - $enddate = @explode(":", $enddate[0]); - - if(stristr($mybb->input['starttime_time'], "pm")) - { - $startdate[0] = 12+$startdate[0]; - if($startdate[0] >= 24) - { - $startdate[0] = "00"; - } - } - - if(stristr($mybb->input['endtime_time'], "pm")) - { - $enddate[0] = 12+$enddate[0]; - if($enddate[0] >= 24) - { - $enddate[0] = "00"; - } - } - - $startdate = gmmktime((int)$startdate[0], (int)$startdate[1], 0, $mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT)); - - if($mybb->input['endtime_type'] != "2") - { - $enddate = gmmktime((int)$enddate[0], (int)$enddate[1], 0, $mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT)); - if(!checkdate($mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT))) - { - $errors[] = $lang->error_invalid_end_date; - } - if($enddate <= $startdate) - { - $errors[] = $lang->error_end_before_start; - } - } - - if(!$errors) - { - if(isset($mybb->input['preview'])) - { - $parser_options = array(); - $parser_options['allow_html'] = $mybb->get_input('allowhtml', MyBB::INPUT_INT); - $parser_options['allow_mycode'] = $mybb->get_input('allowmycode', MyBB::INPUT_INT); - $parser_options['allow_smilies'] = $mybb->get_input('allowsmilies', MyBB::INPUT_INT); - $parser_options['allow_imgcode'] = 1; - $parser_options['allow_videocode'] = 1; - $parser_options['me_username'] = htmlspecialchars_uni($mybb->user['username']); - $parser_options['filter_badwords'] = 1; - - // Set up the message parser if it doesn't already exist. - if(!is_object($parser)) - { - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - } - - $preview['message'] = $parser->parse_message($mybb->input['message'], $parser_options); - $preview['subject'] = htmlspecialchars_uni($mybb->input['title']); - } - else - { - $months = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); - if(!in_array($mybb->input['starttime_month'], $months)) - { - $mybb->input['starttime_month'] = 1; - } - - if($mybb->input['endtime_type'] == "2") - { - $enddate = '0'; - } - else - { - if(!in_array($mybb->input['endtime_month'], $months)) - { - $mybb->input['endtime_month'] = 1; - } - } - - $insert_announcement = array( - "fid" => $mybb->input['fid'], - "uid" => $mybb->user['uid'], - "subject" => $db->escape_string($mybb->input['title']), - "message" => $db->escape_string($mybb->input['message']), - "startdate" => $startdate, - "enddate" => $enddate, - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT) - ); - - $aid = $db->insert_query("announcements", $insert_announcement); - - $plugins->run_hooks("admin_forum_announcements_add_commit"); - - // Log admin action - log_admin_action($aid, $mybb->input['title']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_added_announcement, 'success'); - admin_redirect("index.php?module=forum-announcements"); - } - } - } - - $page->add_breadcrumb_item($lang->add_an_announcement); - $page->output_header($lang->add_an_announcement); - $page->output_nav_tabs($sub_tabs, "add_announcement"); - - $form = new Form("index.php?module=forum-announcements&action=add", "post"); - if($errors) - { - $page->output_inline_error($errors); - } - - $default_options = array( - 'starttime_time', - 'starttime_day', - 'starttime_month', - 'starttime_year', - 'endtime_type', - 'endtime_time', - 'endtime_day', - 'endtime_month', - 'endtime_year', - 'title', - 'message', - 'fid', - 'allowhtml', - 'allowmycode', - 'allowsmilies' - ); - - foreach($default_options as $option) - { - if(!isset($mybb->input[$option])) - { - $mybb->input[$option] = ''; - } - } - - if($mybb->input['endtime_type'] == "1") - { - $endtime_checked[1] = "checked=\"checked\""; - $endtime_checked[2] = ""; - } - else - { - $endtime_checked[1] = ""; - $endtime_checked[2] = "checked=\"checked\""; - } - - if(!$mybb->input['starttime_time']) - { - $mybb->input['starttime_time'] = gmdate($mybb->settings['timeformat'], TIME_NOW); - } - - if(!$mybb->input['endtime_time']) - { - $mybb->input['endtime_time'] = gmdate($mybb->settings['timeformat'], TIME_NOW); - } - - if($mybb->input['starttime_day']) - { - $startday = $mybb->get_input('starttime_day', MyBB::INPUT_INT); - } - else - { - $startday = gmdate("j", TIME_NOW); - } - - if($mybb->input['endtime_day']) - { - $endday = $mybb->get_input('endtime_day', MyBB::INPUT_INT); - } - else - { - $endday = gmdate("j", TIME_NOW); - } - - $startdateday = $enddateday = $startdatemonth = $enddatemonth = ''; - - // Days - for($i = 1; $i <= 31; ++$i) - { - if($startday == $i) - { - $startdateday .= "\n"; - } - else - { - $startdateday .= "\n"; - } - - if($endday == $i) - { - $enddateday .= "\n"; - } - else - { - $enddateday .= "\n"; - } - } - - // Months - for($i = 1; $i <= 12; ++$i) - { - $endmonthsel[$i] = $startmonthsel[$i] = ''; - } - - if($mybb->input['starttime_month']) - { - $startmonth = $mybb->get_input('starttime_month', MyBB::INPUT_INT); - $startmonthsel[$startmonth] = "selected=\"selected\""; - } - else - { - $startmonth = gmdate("m", TIME_NOW); - $startmonthsel[$startmonth] = "selected=\"selected\""; - } - - if($mybb->input['endtime_month']) - { - $endmonth = $mybb->get_input('endtime_month', MyBB::INPUT_INT); - $endmonthsel[$endmonth] = "selected=\"selected\""; - } - else - { - $endmonth = gmdate("m", TIME_NOW); - $endmonthsel[$endmonth] = "selected=\"selected\""; - } - - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - - if($mybb->input['starttime_year']) - { - $startdateyear = $mybb->get_input('starttime_year', MyBB::INPUT_INT); - } - else - { - $startdateyear = gmdate("Y", TIME_NOW); - } - - if($mybb->input['endtime_year']) - { - $enddateyear = $mybb->get_input('endtime_year', MyBB::INPUT_INT); - } - else - { - $enddateyear = gmdate("Y", TIME_NOW) + 1; - } - - if(isset($preview)) - { - $form_container = new FormContainer($lang->announcement_preview); - $form_container->output_row($preview['subject'], "", $preview['message'], 'preview'); - $form_container->end(); - } - - $form_container = new FormContainer($lang->add_an_announcement); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->start_date." *", $lang->start_date_desc, "\n   \n\n   \n\n - {$lang->time} ".$form->generate_text_box('starttime_time', $mybb->input['starttime_time'], array('id' => 'starttime_time', 'style' => 'width: 50px;'))); - - $actions = " -
-
-
- - - - -
\n   \n\n   \n\n - {$lang->time} ".$form->generate_text_box('endtime_time', $mybb->input['endtime_time'], array('id' => 'endtime_time', 'style' => 'width: 50px;'))."
-
-
-
- "; - $form_container->output_row($lang->end_date." *", $lang->end_date_desc, $actions); - - $form_container->output_row($lang->message." *", "", $form->generate_text_area('message', $mybb->input['message'], array('id' => 'message')), 'message'); - - $form_container->output_row($lang->forums_to_appear_in." *", $lang->forums_to_appear_in_desc, $form->generate_forum_select('fid', $mybb->input['fid'], array('size' => 5, 'main_option' => $lang->all_forums))); - - $form_container->output_row($lang->allow_html." *", "", $form->generate_yes_no_radio('allowhtml', $mybb->input['allowhtml'], array('style' => 'width: 2em;'))); - - $form_container->output_row($lang->allow_mycode." *", "", $form->generate_yes_no_radio('allowmycode', $mybb->input['allowmycode'], array('style' => 'width: 2em;'))); - - $form_container->output_row($lang->allow_smilies." *", "", $form->generate_yes_no_radio('allowsmilies', $mybb->input['allowsmilies'], array('style' => 'width: 2em;'))); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_announcement); - $buttons[] = $form->generate_submit_button($lang->preview_announcement, array('name' => 'preview')); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - if(!trim($mybb->input['aid'])) - { - flash_message($lang->error_invalid_announcement, 'error'); - admin_redirect("index.php?module=forum-announcements"); - } - - $plugins->run_hooks("admin_forum_announcements_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!trim($mybb->input['message'])) - { - $errors[] = $lang->error_missing_message; - } - - if(!trim($mybb->input['fid'])) - { - $errors[] = $lang->error_missing_forum; - } - - if(!checkdate($mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT))) - { - $errors[] = $lang->error_invalid_start_date; - } - - // End before startdate? - $startdate = @explode(" ", $mybb->input['starttime_time']); - $startdate = @explode(":", $startdate[0]); - $enddate = @explode(" ", $mybb->input['endtime_time']); - $enddate = @explode(":", $enddate[0]); - - if(stristr($mybb->input['starttime_time'], "pm")) - { - $startdate[0] = 12+$startdate[0]; - if($startdate[0] >= 24) - { - $startdate[0] = "00"; - } - } - - if(stristr($mybb->input['endtime_time'], "pm")) - { - $enddate[0] = 12+$enddate[0]; - if($enddate[0] >= 24) - { - $enddate[0] = "00"; - } - } - - $startdate = gmmktime((int)$startdate[0], (int)$startdate[1], 0, $mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT)); - - if($mybb->input['endtime_type'] != "2") - { - $enddate = gmmktime((int)$enddate[0], (int)$enddate[1], 0, $mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT)); - if(!checkdate($mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT))) - { - $errors[] = $lang->error_invalid_end_date; - } - if($enddate <= $startdate) - { - $errors[] = $lang->error_end_before_start; - } - } - - if(!$errors) - { - if(isset($mybb->input['preview'])) - { - $parser_options = array(); - $parser_options['allow_html'] = $mybb->get_input('allowhtml', MyBB::INPUT_INT); - $parser_options['allow_mycode'] = $mybb->get_input('allowmycode', MyBB::INPUT_INT); - $parser_options['allow_smilies'] = $mybb->get_input('allowsmilies', MyBB::INPUT_INT); - $parser_options['allow_imgcode'] = 1; - $parser_options['allow_videocode'] = 1; - $parser_options['me_username'] = htmlspecialchars_uni($mybb->user['username']); - $parser_options['filter_badwords'] = 1; - - // Set up the message parser if it doesn't already exist. - if(!is_object($parser)) - { - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - } - - $preview = array(); - $preview['message'] = $parser->parse_message($mybb->input['message'], $parser_options); - $preview['subject'] = htmlspecialchars_uni($mybb->input['title']); - } - else - { - $months = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); - if(!in_array($mybb->input['starttime_month'], $months)) - { - $mybb->input['starttime_month'] = 1; - } - - if($mybb->input['endtime_type'] == "2") - { - $enddate = '0'; - } - else - { - if(!in_array($mybb->input['endtime_month'], $months)) - { - $mybb->input['endtime_month'] = 1; - } - } - - $update_announcement = array( - "fid" => $mybb->input['fid'], - "subject" => $db->escape_string($mybb->input['title']), - "message" => $db->escape_string($mybb->input['message']), - "startdate" => $startdate, - "enddate" => $enddate, - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_forum_announcements_edit_commit"); - - $db->update_query("announcements", $update_announcement, "aid='{$mybb->input['aid']}'"); - - // Log admin action - log_admin_action($mybb->input['aid'], $mybb->input['title']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_updated_announcement, 'success'); - admin_redirect("index.php?module=forum-announcements"); - } - } - } - - $page->add_breadcrumb_item($lang->update_an_announcement); - $page->output_header($lang->update_an_announcement); - $page->output_nav_tabs($sub_tabs, "update_announcement"); - - $form = new Form("index.php?module=forum-announcements&action=edit", "post"); - echo $form->generate_hidden_field("aid", $mybb->input['aid']); - - if($errors || isset($mybb->input['preview'])) - { - // Only show errors if we have any - if($errors) - { - $page->output_inline_error($errors); - } - - // Gather start and end date data - $startday = $mybb->input['starttime_day']; - $start_time = $mybb->input['starttime_time']; - $startmonth = $mybb->input['starttime_month']; - $startmonthsel[$startmonth] = 'selected="selected"'; - $startdateyear = $mybb->input['starttime_year']; - - if($mybb->input['endtime_type'] == 1) - { - // Set time - $endtime_checked[1] = 'checked="checked"'; - $endtime_checked[2] = ''; - - $endday = $mybb->input['endtime_day']; - $endtime = $mybb->input['endtime_time']; - $endmonth = $mybb->input['endtime_month']; - $endmonthsel[$endmonth] = 'selected'; - $enddateyear = $mybb->input['endtime_year']; - } - else - { - // Never - $endtime_checked[1] = ''; - $endtime_checked[2] = 'checked="checked"'; - - $endday = $startday; - $endmonth = $startmonth; - $endmonthsel[$endmonth] = 'selected'; - $enddateyear = $startdateyear + 1; - } - } - elseif(!isset($mybb->input['preview'])) - { - $query = $db->simple_select("announcements", "*", "aid='{$mybb->input['aid']}'"); - $announcement = $db->fetch_array($query); - - if(!$announcement) - { - flash_message($lang->error_invalid_announcement, 'error'); - admin_redirect("index.php?module=forum-announcements"); - } - - $mybb->input['starttime_time'] = gmdate( $mybb->settings['timeformat'], $announcement['startdate']); - - $startday = gmdate("j", $announcement['startdate']); - - $startmonth = gmdate("m", $announcement['startdate']); - $startmonthsel[$startmonth] = "selected=\"selected\""; - - $startdateyear = gmdate("Y", $announcement['startdate']); - - $mybb->input['title'] = $announcement['subject']; - $mybb->input['message'] = $announcement['message']; - $mybb->input['allowhtml'] = $announcement['allowhtml']; - $mybb->input['allowsmilies'] = $announcement['allowsmilies']; - $mybb->input['allowmycode'] = $announcement['allowmycode']; - $mybb->input['fid'] = $announcement['fid']; - - if($announcement['enddate']) - { - $endtime_checked[1] = "checked=\"checked\""; - $endtime_checked[2] = ""; - - $mybb->input['endtime_time'] = gmdate( $mybb->settings['timeformat'],$announcement['enddate']); - - $endday = gmdate("j", $announcement['enddate']); - - $endmonth = gmdate("m", $announcement['enddate']); - $endmonthsel[$endmonth] = "selected"; - - $enddateyear = gmdate("Y", $announcement['enddate']); - } - else - { - $endtime_checked[1] = ""; - $endtime_checked[2] = "checked=\"checked\""; - - $mybb->input['endtime_time'] = $mybb->input['starttime_time']; - $endday = $startday; - $endmonth = $startmonth; - $enddateyear = $startdateyear+1; - } - } - - for($i = 1; $i <= 31; ++$i) - { - if($startday == $i) - { - $startdateday .= "\n"; - } - else - { - $startdateday .= "\n"; - } - - if($endday == $i) - { - $enddateday .= "\n"; - } - else - { - $enddateday .= "\n"; - } - } - - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - $startdatemonth .= "\n"; - $enddatemonth .= "\n"; - - if(isset($preview)) - { - $form_container = new FormContainer($lang->announcement_preview); - $form_container->output_row($preview['subject'], "", $preview['message'], 'preview'); - $form_container->end(); - } - - $form_container = new FormContainer($lang->add_an_announcement); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->start_date." *", $lang->start_date_desc, "\n   \n\n   \n\n - {$lang->time} ".$form->generate_text_box('starttime_time', $mybb->input['starttime_time'], array('id' => 'starttime_time', 'style' => 'width: 50px;'))); - - $actions = " -
-
-
- - - - -
\n   \n\n   \n\n - {$lang->time} ".$form->generate_text_box('endtime_time', $mybb->input['endtime_time'], array('id' => 'endtime_time', 'style' => 'width: 50px;'))."
-
-
-
- "; - $form_container->output_row($lang->end_date." *", $lang->end_date_desc, $actions); - - $form_container->output_row($lang->message." *", "", $form->generate_text_area('message', $mybb->input['message'], array('id' => 'message')), 'message'); - - $form_container->output_row($lang->forums_to_appear_in." *", $lang->forums_to_appear_in_desc, $form->generate_forum_select('fid', $mybb->input['fid'], array('size' => 5, 'main_option' => $lang->all_forums))); - - $form_container->output_row($lang->allow_html." *", "", $form->generate_yes_no_radio('allowhtml', $mybb->input['allowhtml'], array('style' => 'width: 2em;'))); - - $form_container->output_row($lang->allow_mycode." *", "", $form->generate_yes_no_radio('allowmycode', $mybb->input['allowmycode'], array('style' => 'width: 2em;'))); - - $form_container->output_row($lang->allow_smilies." *", "", $form->generate_yes_no_radio('allowsmilies', $mybb->input['allowsmilies'], array('style' => 'width: 2em;'))); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_announcement); - $buttons[] = $form->generate_submit_button($lang->preview_announcement, array('name' => 'preview')); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("announcements", "*", "aid='{$mybb->input['aid']}'"); - $announcement = $db->fetch_array($query); - - // Does the announcement not exist? - if(!$announcement['aid']) - { - flash_message($lang->error_invalid_announcement, 'error'); - admin_redirect("index.php?module=forum-announcements"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=forum-announcements"); - } - - $plugins->run_hooks("admin_forum_announcements_delete"); - - if($mybb->request_method == "post") - { - $db->delete_query("announcements", "aid='{$announcement['aid']}'"); - - $plugins->run_hooks("admin_forum_announcements_delete_commit"); - - // Log admin action - log_admin_action($announcement['aid'], $announcement['subject']); - $cache->update_forumsdisplay(); - - flash_message($lang->success_announcement_deleted, 'success'); - admin_redirect("index.php?module=forum-announcements"); - } - else - { - $page->output_confirm_action("index.php?module=forum-announcements&action=delete&aid={$announcement['aid']}", $lang->confirm_announcement_deletion); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_forum_announcements_start"); - - $page->output_header($lang->forum_announcements); - - $page->output_nav_tabs($sub_tabs, "forum_announcements"); - - // Fetch announcements into their proper arrays - $global_announcements = $announcements = array(); - $query = $db->simple_select("announcements", "aid, fid, subject, enddate"); - while($announcement = $db->fetch_array($query)) - { - if($announcement['fid'] == -1) - { - $global_announcements[$announcement['aid']] = $announcement; - continue; - } - $announcements[$announcement['fid']][$announcement['aid']] = $announcement; - } - - if(!empty($global_announcements)) - { - $table = new Table; - $table->construct_header($lang->announcement); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 150)); - - // Get the global announcements - foreach($global_announcements as $aid => $announcement) - { - if($announcement['enddate'] < TIME_NOW && $announcement['enddate'] != 0) - { - $icon = "style}/images/icons/bullet_off.png\" alt=\"(Expired)\" title=\"Expired Announcement\" style=\"vertical-align: middle;\" /> "; - } - else - { - $icon = "style}/images/icons/bullet_on.png\" alt=\"(Active)\" title=\"Active Announcement\" style=\"vertical-align: middle;\" /> "; - } - - $table->construct_cell($icon."".htmlspecialchars_uni($announcement['subject']).""); - $table->construct_cell("{$lang->edit}", array("class" => "align_center", "width" => 75)); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_announcement_deletion}')\">{$lang->delete}", array("class" => "align_center", "width" => 75)); - $table->construct_row(); - } - $table->output($lang->global_announcements); - } - - $table = new Table; - $table->construct_header($lang->announcement); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200)); - - fetch_forum_announcements($table); - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_forums, array("colspan" => "3")); - $table->construct_row(); - } - - $table->output($lang->forum_announcements); - - $page->output_footer(); -} - -/** - * @param DefaultTable $table - * @param int $pid - * @param int $depth - */ -function fetch_forum_announcements(&$table, $pid=0, $depth=1) -{ - global $mybb, $db, $lang, $announcements, $page; - static $forums_by_parent; - - if(!is_array($forums_by_parent)) - { - $forum_cache = cache_forums(); - - foreach($forum_cache as $forum) - { - $forums_by_parent[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - } - - if(!is_array($forums_by_parent[$pid])) - { - return; - } - - foreach($forums_by_parent[$pid] as $children) - { - foreach($children as $forum) - { - $forum['name'] = htmlspecialchars_uni($forum['name']); - if($forum['active'] == 0) - { - $forum['name'] = "".$forum['name'].""; - } - - if($forum['type'] == "c") - { - $forum['name'] = "".$forum['name'].""; - } - - $table->construct_cell("
{$forum['name']}
"); - $table->construct_cell("{$lang->add_announcement}", array("class" => "align_center", "colspan" => 2)); - $table->construct_row(); - - if(isset($announcements[$forum['fid']])) - { - foreach($announcements[$forum['fid']] as $aid => $announcement) - { - if($announcement['enddate'] < TIME_NOW && $announcement['enddate'] != 0) - { - $icon = "style}/images/icons/bullet_off.png\" alt=\"(Expired)\" title=\"Expired Announcement\" style=\"vertical-align: middle;\" /> "; - } - else - { - $icon = "style}/images/icons/bullet_on.png\" alt=\"(Active)\" title=\"Active Announcement\" style=\"vertical-align: middle;\" /> "; - } - - $table->construct_cell(""); - $table->construct_cell("{$lang->edit}", array("class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_announcement_deletion}')\">{$lang->delete}", array("class" => "align_center")); - $table->construct_row(); - } - } - - // Build the list for any sub forums of this forum - if(isset($forums_by_parent[$forum['fid']])) - { - fetch_forum_announcements($table, $forum['fid'], $depth+1); - } - } - } -} - diff --git a/html/forums/admin/modules/forum/attachments.php b/html/forums/admin/modules/forum/attachments.php deleted file mode 100644 index 50b28a2..0000000 --- a/html/forums/admin/modules/forum/attachments.php +++ /dev/null @@ -1,982 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->attachments, "index.php?module=forum-attachments"); - -if($mybb->input['action'] == "stats" || $mybb->input['action'] == "orphans" || !$mybb->input['action']) -{ - $sub_tabs['find_attachments'] = array( - 'title' => $lang->find_attachments, - 'link' => "index.php?module=forum-attachments", - 'description' => $lang->find_attachments_desc - ); - - $sub_tabs['find_orphans'] = array( - 'title' => $lang->find_orphans, - 'link' => "index.php?module=forum-attachments&action=orphans", - 'description' => $lang->find_orphans_desc - ); - - $sub_tabs['stats'] = array( - 'title' => $lang->attachment_stats, - 'link' => "index.php?module=forum-attachments&action=stats", - 'description' => $lang->attachment_stats_desc - ); -} - -$plugins->run_hooks("admin_forum_attachments_begin"); - -if($mybb->input['action'] == "delete") -{ - $plugins->run_hooks("admin_forum_attachments_delete"); - - if(!is_array($mybb->input['aids'])) - { - $mybb->input['aids'] = array($mybb->get_input('aid', MyBB::INPUT_INT)); - } - else - { - $mybb->input['aids'] = array_map("intval", $mybb->input['aids']); - } - - if(count($mybb->input['aids']) < 1) - { - flash_message($lang->error_nothing_selected, 'error'); - admin_redirect("index.php?module=forum-attachments"); - } - - if($mybb->request_method == "post") - { - require_once MYBB_ROOT."inc/functions_upload.php"; - - $query = $db->simple_select("attachments", "aid,pid,posthash, filename", "aid IN (".implode(",", $mybb->input['aids']).")"); - while($attachment = $db->fetch_array($query)) - { - if(!$attachment['pid']) - { - remove_attachment(null, $attachment['posthash'], $attachment['aid']); - // Log admin action - log_admin_action($attachment['aid'], $attachment['filename']); - } - else - { - remove_attachment($attachment['pid'], null, $attachment['aid']); - // Log admin action - log_admin_action($attachment['aid'], $attachment['filename'], $attachment['pid']); - } - } - - $plugins->run_hooks("admin_forum_attachments_delete_commit"); - - flash_message($lang->success_deleted, 'success'); - admin_redirect("index.php?module=forum-attachments"); - } - else - { - $aids = array(); - foreach($mybb->input['aids'] as $aid) - { - $aids .= "&aids[]=$aid"; - } - $page->output_confirm_action("index.php?module=forum-attachments&action=delete&aids={$aids}", $lang->confirm_delete); - } -} - -if($mybb->input['action'] == "stats") -{ - $plugins->run_hooks("admin_forum_attachments_stats"); - - $query = $db->simple_select("attachments", "COUNT(*) AS total_attachments, SUM(filesize) as disk_usage, SUM(downloads*filesize) as bandwidthused", "visible='1'"); - $attachment_stats = $db->fetch_array($query); - - $page->add_breadcrumb_item($lang->stats); - $page->output_header($lang->stats_attachment_stats); - - $page->output_nav_tabs($sub_tabs, 'stats'); - - if($attachment_stats['total_attachments'] == 0) - { - $page->output_inline_error(array($lang->error_no_attachments)); - $page->output_footer(); - exit; - } - - $table = new Table; - - $table->construct_cell($lang->num_uploaded, array('width' => '25%')); - $table->construct_cell(my_number_format($attachment_stats['total_attachments']), array('width' => '25%')); - $table->construct_cell($lang->space_used, array('width' => '200')); - $table->construct_cell(get_friendly_size($attachment_stats['disk_usage']), array('width' => '200')); - $table->construct_row(); - - $table->construct_cell($lang->bandwidth_used, array('width' => '25%')); - $table->construct_cell(get_friendly_size(round($attachment_stats['bandwidthused'])), array('width' => '25%')); - $table->construct_cell($lang->average_size, array('width' => '25%')); - $table->construct_cell(get_friendly_size(round($attachment_stats['disk_usage']/$attachment_stats['total_attachments'])), array('width' => '25%')); - $table->construct_row(); - - $table->output($lang->general_stats); - - // Fetch the most popular attachments - $table = new Table; - $table->construct_header($lang->attachments, array('colspan' => 2)); - $table->construct_header($lang->size, array('width' => '10%', 'class' => 'align_center')); - $table->construct_header($lang->posted_by, array('width' => '20%', 'class' => 'align_center')); - $table->construct_header($lang->thread, array('width' => '25%', 'class' => 'align_center')); - $table->construct_header($lang->downloads, array('width' => '10%', 'class' => 'align_center')); - $table->construct_header($lang->date_uploaded, array("class" => "align_center")); - - $query = $db->query(" - SELECT a.*, p.tid, p.fid, t.subject, p.uid, p.username, u.username AS user_username - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - ORDER BY a.downloads DESC - LIMIT 5 - "); - while($attachment = $db->fetch_array($query)) - { - build_attachment_row($attachment, $table); - } - $table->output($lang->popular_attachments); - - // Fetch the largest attachments - $table = new Table; - $table->construct_header($lang->attachments, array('colspan' => 2)); - $table->construct_header($lang->size, array('width' => '10%', 'class' => 'align_center')); - $table->construct_header($lang->posted_by, array('width' => '20%', 'class' => 'align_center')); - $table->construct_header($lang->thread, array('width' => '25%', 'class' => 'align_center')); - $table->construct_header($lang->downloads, array('width' => '10%', 'class' => 'align_center')); - $table->construct_header($lang->date_uploaded, array("class" => "align_center")); - - $query = $db->query(" - SELECT a.*, p.tid, p.fid, t.subject, p.uid, p.username, u.username AS user_username - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - ORDER BY a.filesize DESC - LIMIT 5 - "); - while($attachment = $db->fetch_array($query)) - { - build_attachment_row($attachment, $table); - } - $table->output($lang->largest_attachments); - - // Fetch users who've uploaded the most attachments - $table = new Table; - $table->construct_header($lang->username); - $table->construct_header($lang->total_size, array('width' => '20%', 'class' => 'align_center')); - - switch($db->type) - { - case "pgsql": - $query = $db->query(" - SELECT a.uid, u.username, SUM(a.filesize) as totalsize - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - GROUP BY a.uid, u.username - ORDER BY totalsize DESC - LIMIT 5 - "); - break; - default: - $query = $db->query(" - SELECT a.uid, u.username, SUM(a.filesize) as totalsize - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - GROUP BY a.uid - ORDER BY totalsize DESC - LIMIT 5 - "); - } - while($user = $db->fetch_array($query)) - { - if(!$user['uid']) - { - $user['username'] = $lang->na; - } - $table->construct_cell(build_profile_link(htmlspecialchars_uni($user['username']), $user['uid'], "_blank")); - $table->construct_cell("".get_friendly_size($user['totalsize'])."", array('class' => 'align_center')); - $table->construct_row(); - } - $table->output($lang->users_diskspace); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete_orphans" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_forum_attachments_delete_orphans"); - - $success_count = $error_count = 0; - - // Deleting specific attachments from uploads directory - if(is_array($mybb->input['orphaned_files'])) - { - /** - * @param string $string - * - * @return string - */ - function clean_filename($string) - { - return str_replace(array(".."), "", $string); - } - $mybb->input['orphaned_files'] = array_map("clean_filename", $mybb->input['orphaned_files']); - foreach($mybb->input['orphaned_files'] as $file) - { - if(!@unlink(MYBB_ROOT.$mybb->settings['uploadspath']."/".$file)) - { - $error_count++; - } - else - { - $success_count++; - } - } - } - - // Deleting physical attachments which exist in database - if(is_array($mybb->input['orphaned_attachments'])) - { - $mybb->input['orphaned_attachments'] = array_map("intval", $mybb->input['orphaned_attachments']); - require_once MYBB_ROOT."inc/functions_upload.php"; - - $query = $db->simple_select("attachments", "aid,pid,posthash", "aid IN (".implode(",", $mybb->input['orphaned_attachments']).")"); - while($attachment = $db->fetch_array($query)) - { - if(!$attachment['pid']) - { - remove_attachment(null, $attachment['posthash'], $attachment['aid']); - } - else - { - remove_attachment($attachment['pid'], null, $attachment['aid']); - } - $success_count++; - } - } - - $plugins->run_hooks("admin_forum_attachments_delete_orphans_commit"); - - // Log admin action - log_admin_action(); - - $message = ''; - $status = 'success'; - if($error_count > 0) - { - $status = 'error'; - $message = $lang->sprintf($lang->error_count, $error_count); - } - - if($success_count > 0) - { - if($error_count > 0) - { - $message .= '
'.$lang->sprintf($lang->success_count, $success_count); - } - else - { - $message = $lang->success_orphan_deleted; - } - } - flash_message($message, $status); - admin_redirect('index.php?module=forum-attachments'); -} - -if($mybb->input['action'] == "orphans") -{ - $plugins->run_hooks("admin_forum_attachments_orphans"); - - // Oprhans are defined as: - // - Uploaded files in the uploads directory that don't exist in the database - // - Attachments for which the uploaded file is missing - // - Attachments for which the thread or post has been deleted - // - Files uploaded > 24h ago not attached to a real post - - // This process is quite intensive so we split it up in to 2 steps, one which scans the file system and the other which scans the database. - - // Finished second step, show results - if($mybb->input['step'] == 3) - { - $plugins->run_hooks("admin_forum_attachments_step3"); - - $reults = 0; - // Incoming attachments which exist as files but not in database - if($mybb->input['bad_attachments']) - { - $bad_attachments = my_unserialize($mybb->input['bad_attachments']); - $results = count($bad_attachments); - } - - $aids = array(); - if($mybb->input['missing_attachment_files']) - { - $missing_attachment_files = my_unserialize($mybb->input['missing_attachment_files']); - $aids = array_merge($aids, $missing_attachment_files); - } - - if($mybb->input['missing_threads']) - { - $missing_threads = my_unserialize($mybb->input['missing_threads']); - $aids = array_merge($aids, $missing_threads); - } - - if($mybb->input['incomplete_attachments']) - { - $incomplete_attachments = my_unserialize($mybb->input['incomplete_attachments']); - $aids = array_merge($aids, $incomplete_attachments); - } - - foreach($aids as $key => $aid) - { - $aids[$key] = (int)$aid; - } - - $results += count($aids); - - if($results == 0) - { - flash_message($lang->success_no_orphans, 'success'); - admin_redirect("index.php?module=forum-attachments"); - } - - $page->output_header($lang->orphan_results); - $page->output_nav_tabs($sub_tabs, 'find_orphans'); - - $form = new Form("index.php?module=forum-attachments&action=delete_orphans", "post"); - - $table = new Table; - $table->construct_header($form->generate_check_box('checkall', '1', '', array('class' => 'checkall')), array( 'width' => 1)); - $table->construct_header($lang->size_attachments, array('colspan' => 2)); - $table->construct_header($lang->reason_orphaned, array('width' => '20%', 'class' => 'align_center')); - $table->construct_header($lang->date_uploaded, array("class" => "align_center")); - - if(is_array($bad_attachments)) - { - foreach($bad_attachments as $file) - { - $file_path = MYBB_ROOT.$mybb->settings['uploadspath']."/".$file; - $filesize = get_friendly_size(filesize($file_path)); - $table->construct_cell($form->generate_check_box('orphaned_files[]', $file, '', array('checked' => true))); - $table->construct_cell(get_attachment_icon(get_extension($attachment['filename'])), array('width' => 1)); - $table->construct_cell("{$filesize}{$file}"); - $table->construct_cell($lang->reason_not_in_table, array('class' => 'align_center')); - $table->construct_cell(my_date('relative', filemtime($file_path)), array('class' => 'align_center')); - $table->construct_row(); - } - } - - if(count($aids) > 0) - { - $query = $db->simple_select("attachments", "*", "aid IN (".implode(",", $aids).")"); - while($attachment = $db->fetch_array($query)) - { - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - - if($missing_attachment_files[$attachment['aid']]) - { - $reason = $lang->reason_file_missing; - } - else if($missing_threads[$attachment['aid']]) - { - $reason = $lang->reason_thread_deleted; - } - else if($incomplete_attachments[$attachment['aid']]) - { - $reason = $lang->reason_post_never_made; - } - $table->construct_cell($form->generate_check_box('orphaned_attachments[]', $attachment['aid'], '', array('checked' => true))); - $table->construct_cell(get_attachment_icon(get_extension($attachment['filename'])), array('width' => 1)); - $table->construct_cell("".get_friendly_size($attachment['filesize'])."{$attachment['filename']}", array('class' => $cell_class)); - $table->construct_cell($reason, array('class' => 'align_center')); - if($attachment['dateuploaded']) - { - $table->construct_cell(my_date('relative', $attachment['dateuploaded']), array('class' => 'align_center')); - } - else - { - $table->construct_cell($lang->unknown, array('class' => 'align_center')); - } - $table->construct_row(); - } - } - - $table->output("{$lang->orphan_attachments_search} - {$results} {$lang->results}"); - - $buttons[] = $form->generate_submit_button($lang->button_delete_orphans); - $form->output_submit_wrapper($buttons); - $form->end(); - $page->output_footer(); - } - - // Running second step - scan the database - else if($mybb->input['step'] == 2) - { - $plugins->run_hooks("admin_forum_attachments_orphans_step2"); - - $page->output_header("{$lang->orphan_attachments_search} - {$lang->step2}"); - - $page->output_nav_tabs($sub_tabs, 'find_orphans'); - echo "

{$lang->step2of2}

"; - echo "

{$lang->step2of2_line1}

"; - echo "

{$lang->step_line2}

"; - echo "

style}/images/spinner_big.gif\" alt=\"{$lang->scanning}\" id=\"spinner\" />

"; - - $page->output_footer(false); - flush(); - - $missing_attachment_files = array(); - $missing_threads = array(); - $incomplete_attachments = array(); - - $query = $db->query(" - SELECT a.*, a.pid AS attachment_pid, p.pid - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - ORDER BY a.aid"); - while($attachment = $db->fetch_array($query)) - { - // Check if the attachment exists in the file system - if(!file_exists(MYBB_ROOT.$mybb->settings['uploadspath']."/{$attachment['attachname']}")) - { - $missing_attachment_files[$attachment['aid']] = $attachment['aid']; - } - // Check if the thread/post for this attachment is missing - else if(!$attachment['pid'] && $attachment['attachment_pid']) - { - $missing_threads[$attachment['aid']] = $attachment['aid']; - } - // Check if the attachment was uploaded > 24 hours ago but not assigned to a thread - else if(!$attachment['attachment_pid'] && $attachment['dateuploaded'] < TIME_NOW-60*60*24 && $attachment['dateuploaded'] != 0) - { - $incomplete_attachments[$attachment['aid']] = $attachment['aid']; - } - } - - // Now send the user to the final page - $form = new Form("index.php?module=forum-attachments&action=orphans&step=3", "post", "redirect_form", 0, ""); - // Scan complete - if($mybb->input['bad_attachments']) - { - echo $form->generate_hidden_field("bad_attachments", $mybb->input['bad_attachments']); - } - if(is_array($missing_attachment_files) && count($missing_attachment_files) > 0) - { - $missing_attachment_files = my_serialize($missing_attachment_files); - echo $form->generate_hidden_field("missing_attachment_files", $missing_attachment_files); - } - if(is_array($missing_threads) && count($missing_threads) > 0) - { - $missing_threads = my_serialize($missing_threads); - echo $form->generate_hidden_field("missing_threads", $missing_threads); - } - if(is_array($incomplete_attachments) && count($incomplete_attachments) > 0) - { - $incomplete_attachments = my_serialize($incomplete_attachments); - echo $form->generate_hidden_field("incomplete_attachments", $incomplete_attachments); - } - $form->end(); - echo ""; - exit; - } - // Running first step, scan the file system - else - { - $plugins->run_hooks("admin_forum_attachments_orphans_step1"); - - /** - * @param string $dir - */ - function scan_attachments_directory($dir="") - { - global $db, $mybb, $bad_attachments, $attachments_to_check; - - $real_dir = MYBB_ROOT.$mybb->settings['uploadspath']; - $false_dir = ""; - if($dir) - { - $real_dir .= "/".$dir; - $false_dir = $dir."/"; - } - - if($dh = opendir($real_dir)) - { - while(false !== ($file = readdir($dh))) - { - if($file == "." || $file == ".." || $file == ".svn") - { - continue; - } - - if(is_dir($real_dir.'/'.$file)) - { - scan_attachments_directory($false_dir.$file); - } - else if(my_substr($file, -7, 7) == ".attach") - { - $attachments_to_check["$false_dir$file"] = $false_dir.$file; - // In allotments of 20, query the database for these attachments - if(count($attachments_to_check) >= 20) - { - $attachments_to_check = array_map(array($db, "escape_string"), $attachments_to_check); - $attachment_names = "'".implode("','", $attachments_to_check)."'"; - $query = $db->simple_select("attachments", "aid, attachname", "attachname IN ($attachment_names)"); - while($attachment = $db->fetch_array($query)) - { - unset($attachments_to_check[$attachment['attachname']]); - } - - // Now anything left is bad! - if(count($attachments_to_check) > 0) - { - if($bad_attachments) - { - $bad_attachments = @array_merge($bad_attachments, $attachments_to_check); - } - else - { - $bad_attachments = $attachments_to_check; - } - } - $attachments_to_check = array(); - } - } - } - closedir($dh); - // Any reamining to check? - if(count($attachments_to_check) > 0) - { - $attachments_to_check = array_map(array($db, "escape_string"), $attachments_to_check); - $attachment_names = "'".implode("','", $attachments_to_check)."'"; - $query = $db->simple_select("attachments", "aid, attachname", "attachname IN ($attachment_names)"); - while($attachment = $db->fetch_array($query)) - { - unset($attachments_to_check[$attachment['attachname']]); - } - - // Now anything left is bad! - if(count($attachments_to_check) > 0) - { - if($bad_attachments) - { - $bad_attachments = @array_merge($bad_attachments, $attachments_to_check); - } - else - { - $bad_attachments = $attachments_to_check; - } - } - } - } - } - - $page->output_header("{$lang->orphan_attachments_search} - {$lang->step1}"); - - $page->output_nav_tabs($sub_tabs, 'find_orphans'); - echo "

{$lang->step1of2}

"; - echo "

{$lang->step1of2_line1}

"; - echo "

{$lang->step_line2}

"; - echo "

style}/images/spinner_big.gif\" alt=\"{$lang->scanning}\" id=\"spinner\" />

"; - - $page->output_footer(false); - - flush(); - - scan_attachments_directory(); - global $bad_attachments; - - $form = new Form("index.php?module=forum-attachments&action=orphans&step=2", "post", "redirect_form", 0, ""); - // Scan complete - if(is_array($bad_attachments) && count($bad_attachments) > 0) - { - $bad_attachments = my_serialize($bad_attachments); - echo $form->generate_hidden_field("bad_attachments", $bad_attachments); - } - $form->end(); - echo ""; - exit; - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_forum_attachments_start"); - - if($mybb->request_method == "post" || $mybb->input['results'] == 1) - { - $search_sql = '1=1'; - - // Build the search SQL for users - - // List of valid LIKE search fields - $user_like_fields = array("filename", "filetype"); - foreach($user_like_fields as $search_field) - { - if($mybb->input[$search_field]) - { - $search_sql .= " AND a.{$search_field} LIKE '%".$db->escape_string_like($mybb->input[$search_field])."%'"; - } - } - - $errors = array(); - - // Username matching - if($mybb->input['username']) - { - $user = get_user_by_username($mybb->input['username']); - - if(!$user['uid']) - { - $errors[] = $lang->error_invalid_username; - } - else - { - $search_sql .= " AND a.uid='{$user['uid']}'"; - } - } - - $forum_cache = cache_forums(); - - // Searching for attachments in a specific forum, we need to fetch all child forums too - if($mybb->input['forum']) - { - if(!is_array($mybb->input['forum'])) - { - $mybb->input['forum'] = array($mybb->input['forum']); - } - - $fid_in = array(); - foreach($mybb->input['forum'] as $fid) - { - if(!$forum_cache[$fid]) - { - $errors[] = $lang->error_invalid_forums; - break; - } - $child_forums = get_child_list($fid); - $child_forums[] = $fid; - $fid_in = array_merge($fid_in, $child_forums); - } - - if(count($fid_in) > 0) - { - $search_sql .= " AND p.fid IN (".implode(",", $fid_in).")"; - } - } - - // LESS THAN or GREATER THAN - $direction_fields = array( - "dateuploaded" => $mybb->get_input('dateuploaded', MyBB::INPUT_INT), - "filesize" => $mybb->get_input('filesize', MyBB::INPUT_INT), - "downloads" => $mybb->get_input('downloads', MyBB::INPUT_INT) - ); - - if($mybb->input['dateuploaded'] && $mybb->request_method == "post") - { - $direction_fields['dateuploaded'] = TIME_NOW-$direction_fields['dateuploaded']*60*60*24; - } - if($mybb->input['filesize'] && $mybb->request_method == "post") - { - $direction_fields['filesize'] *= 1024; - } - - foreach($direction_fields as $field_name => $field_content) - { - $direction_field = $field_name."_dir"; - if($mybb->input[$field_name] && $mybb->input[$direction_field]) - { - switch($mybb->input[$direction_field]) - { - case "greater_than": - $direction = ">"; - break; - case "less_than": - $direction = "<"; - break; - default: - $direction = "="; - } - $search_sql .= " AND a.{$field_name}{$direction}'".$field_content."'"; - } - } - if(!$errors) - { - // Lets fetch out how many results we have - $query = $db->query(" - SELECT COUNT(a.aid) AS num_results - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - WHERE {$search_sql} - "); - $num_results = $db->fetch_field($query, "num_results"); - - // No matching results then show an error - if(!$num_results) - { - $errors[] = $lang->error_no_results; - } - } - - // Now we fetch the results if there were 100% no errors - if(!$errors) - { - $mybb->input['perpage'] = $mybb->get_input('perpage', MyBB::INPUT_INT); - if(!$mybb->input['perpage']) - { - $mybb->input['perpage'] = 20; - } - - $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); - if($mybb->input['page']) - { - $start = ($mybb->input['page'] - 1) * $mybb->input['perpage']; - } - else - { - $start = 0; - $mybb->input['page'] = 1; - } - - switch($mybb->input['sortby']) - { - case "filesize": - $sort_field = "a.filesize"; - break; - case "downloads": - $sort_field = "a.downloads"; - break; - case "dateuploaded": - $sort_field = "a.dateuploaded"; - break; - case "username": - $sort_field = "u.username"; - break; - default: - $sort_field = "a.filename"; - $mybb->input['sortby'] = "filename"; - } - - if($mybb->input['order'] != "desc") - { - $mybb->input['order'] = "asc"; - } - - $page->add_breadcrumb_item($lang->results); - $page->output_header($lang->index_find_attachments); - - $page->output_nav_tabs($sub_tabs, 'find_attachments'); - - $form = new Form("index.php?module=forum-attachments&action=delete", "post"); - - $table = new Table; - $table->construct_header($form->generate_check_box('checkall', '1', '', array('class' => 'checkall')), array( 'width' => 1)); - $table->construct_header($lang->attachments, array('colspan' => 2)); - $table->construct_header($lang->size, array('width' => '10%', 'class' => 'align_center')); - $table->construct_header($lang->posted_by, array('width' => '20%', 'class' => 'align_center')); - $table->construct_header($lang->thread, array('width' => '25%', 'class' => 'align_center')); - $table->construct_header($lang->downloads, array('width' => '10%', 'class' => 'align_center')); - $table->construct_header($lang->date_uploaded, array("class" => "align_center")); - - // Fetch matching attachments - $query = $db->query(" - SELECT a.*, p.tid, p.fid, t.subject, p.uid, p.username, u.username AS user_username - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - WHERE {$search_sql} - ORDER BY {$sort_field} {$mybb->input['order']} - LIMIT {$start}, {$mybb->input['perpage']} - "); - while($attachment = $db->fetch_array($query)) - { - build_attachment_row($attachment, $table, true); - } - - // Need to draw pagination for this result set - if($num_results > $mybb->input['perpage']) - { - $pagination_url = "index.php?module=forum-attachments&results=1"; - $pagination_vars = array('perpage', 'sortby', 'order', 'filename', 'mimetype', 'username', 'fid', 'downloads', 'downloads_dir', 'dateuploaded', 'dateuploaded_dir', 'filesize', 'filesize_dir'); - foreach($pagination_vars as $var) - { - if($mybb->input[$var]) - { - $pagination_url .= "&{$var}=".urlencode($mybb->input[$var]); - } - } - $pagination = draw_admin_pagination($mybb->input['page'], $mybb->input['perpage'], $num_results, $pagination_url); - } - - echo $pagination; - $table->output($lang->results); - echo $pagination; - - $buttons[] = $form->generate_submit_button($lang->button_delete_attachments); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); - } - } - - $page->output_header($lang->find_attachments); - - $page->output_nav_tabs($sub_tabs, 'find_attachments'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=forum-attachments", "post"); - - $form_container = new FormContainer($lang->find_where); - $form_container->output_row($lang->name_contains, $lang->name_contains_desc, $form->generate_text_box('filename', $mybb->input['filename'], array('id' => 'filename')), 'filename'); - $form_container->output_row($lang->type_contains, "", $form->generate_text_box('mimetype', $mybb->input['mimetype'], array('id' => 'mimetype')), 'mimetype'); - $form_container->output_row($lang->forum_is, "", $form->generate_forum_select('forum[]', $mybb->input['forum'], array('multiple' => true, 'size' => 5, 'id' => 'forum')), 'forum'); - $form_container->output_row($lang->username_is, "", $form->generate_text_box('username', htmlspecialchars_uni($mybb->get_input('username')), array('id' => 'username')), 'username'); - - $more_options = array( - "less_than" => $lang->more_than, - "greater_than" => $lang->less_than - ); - - $greater_options = array( - "greater_than" => $lang->greater_than, - "is_exactly" => $lang->is_exactly, - "less_than" => $lang->less_than - ); - - $form_container->output_row($lang->date_posted_is, "", $form->generate_select_box('dateuploaded_dir', $more_options, $mybb->input['dateuploaded_dir'], array('id' => 'dateuploaded_dir'))." ".$form->generate_numeric_field('dateuploaded', $mybb->input['dateuploaded'], array('id' => 'dateuploaded', 'min' => 0))." {$lang->days_ago}", 'dateuploaded'); - $form_container->output_row($lang->file_size_is, "", $form->generate_select_box('filesize_dir', $greater_options, $mybb->input['filesize_dir'], array('id' => 'filesize_dir'))." ".$form->generate_numeric_field('filesize', $mybb->input['filesize'], array('id' => 'filesize', 'min' => 0))." {$lang->kb}", 'dateuploaded'); - $form_container->output_row($lang->download_count_is, "", $form->generate_select_box('downloads_dir', $greater_options, $mybb->input['downloads_dir'], array('id' => 'downloads_dir'))." ".$form->generate_numeric_field('downloads', $mybb->input['downloads'], array('id' => 'downloads', 'min' => 0))."", 'dateuploaded'); - $form_container->end(); - - $form_container = new FormContainer($lang->display_options); - $sort_options = array( - "filename" => $lang->filename, - "filesize" => $lang->filesize, - "downloads" => $lang->download_count, - "dateuploaded" => $lang->date_uploaded, - "username" => $lang->post_username - ); - $sort_directions = array( - "asc" => $lang->asc, - "desc" => $lang->desc - ); - $form_container->output_row($lang->sort_results_by, "", $form->generate_select_box('sortby', $sort_options, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('order', $sort_directions, $mybb->input['order'], array('id' => 'order')), 'sortby'); - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->button_find_attachments); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -/** - * @param array $attachment - * @param DefaultTable $table - * @param bool $use_form - */ -function build_attachment_row($attachment, &$table, $use_form=false) -{ - global $mybb, $form, $lang; - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - - // Here we do a bit of detection, we want to automatically check for removal any missing attachments and any not assigned to a post uploaded > 24hours ago - // Check if the attachment exists in the file system - $checked = false; - $title = $cell_class = ''; - if(!file_exists(MYBB_ROOT.$mybb->settings['uploadspath']."/{$attachment['attachname']}")) - { - $cell_class = "bad_attachment"; - $title = $lang->error_not_found; - $checked = true; - } - elseif(!$attachment['pid'] && $attachment['dateuploaded'] < TIME_NOW-60*60*24 && $attachment['dateuploaded'] != 0) - { - $cell_class = "bad_attachment"; - $title = $lang->error_not_attached; - $checked = true; - } - else if(!$attachment['tid'] && $attachment['pid']) - { - $cell_class = "bad_attachment"; - $title = $lang->error_does_not_exist; - $checked = true; - } - else if($attachment['visible'] == 0) - { - $cell_class = "invisible_attachment"; - } - - if($cell_class) - { - $cell_class .= " align_center"; - } - else - { - $cell_class = "align_center"; - } - - if($use_form == true && is_object($form)) - { - $table->construct_cell($form->generate_check_box('aids[]', $attachment['aid'], '', array('checked' => $checked))); - } - $table->construct_cell(get_attachment_icon(get_extension($attachment['filename'])), array('width' => 1)); - $table->construct_cell("{$attachment['filename']}"); - $table->construct_cell(get_friendly_size($attachment['filesize']), array('class' => $cell_class)); - - if($attachment['user_username']) - { - $attachment['username'] = $attachment['user_username']; - } - $table->construct_cell(build_profile_link(htmlspecialchars_uni($attachment['username']), $attachment['uid'], "_blank"), array("class" => "align_center")); - $table->construct_cell("".htmlspecialchars_uni($attachment['subject'])."", array("class" => "align_center")); - $table->construct_cell(my_number_format($attachment['downloads']), array("class" => "align_center")); - if($attachment['dateuploaded'] > 0) - { - $date = my_date('relative', $attachment['dateuploaded']); - } - else - { - $date = $lang->unknown; - } - $table->construct_cell($date, array("class" => "align_center")); - $table->construct_row(); -} diff --git a/html/forums/admin/modules/forum/index.html b/html/forums/admin/modules/forum/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/modules/forum/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/modules/forum/management.php b/html/forums/admin/modules/forum/management.php deleted file mode 100644 index 6633c09..0000000 --- a/html/forums/admin/modules/forum/management.php +++ /dev/null @@ -1,2933 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->forum_management, "index.php?module=forum-management"); - -if($mybb->input['action'] == "add" || $mybb->input['action'] == "edit" || $mybb->input['action'] == "copy" || $mybb->input['action'] == "permissions" || !$mybb->input['action']) -{ - if(!empty($mybb->input['fid']) && ($mybb->input['action'] == "management" || $mybb->input['action'] == "edit" || $mybb->input['action'] == "copy" || !$mybb->input['action'])) - { - $sub_tabs['view_forum'] = array( - 'title' => $lang->view_forum, - 'link' => "index.php?module=forum-management&fid=".$mybb->input['fid'], - 'description' => $lang->view_forum_desc - ); - - $sub_tabs['add_child_forum'] = array( - 'title' => $lang->add_child_forum, - 'link' => "index.php?module=forum-management&action=add&pid=".$mybb->input['fid'], - 'description' => $lang->view_forum_desc - ); - - $sub_tabs['edit_forum_settings'] = array( - 'title' => $lang->edit_forum_settings, - 'link' => "index.php?module=forum-management&action=edit&fid=".$mybb->input['fid'], - 'description' => $lang->edit_forum_settings_desc - ); - - $sub_tabs['copy_forum'] = array( - 'title' => $lang->copy_forum, - 'link' => "index.php?module=forum-management&action=copy&fid=".$mybb->input['fid'], - 'description' => $lang->copy_forum_desc - ); - } - else - { - $sub_tabs['forum_management'] = array( - 'title' => $lang->forum_management, - 'link' => "index.php?module=forum-management", - 'description' => $lang->forum_management_desc - ); - - $sub_tabs['add_forum'] = array( - 'title' => $lang->add_forum, - 'link' => "index.php?module=forum-management&action=add", - 'description' => $lang->add_forum_desc - ); - } -} - -$plugins->run_hooks("admin_forum_management_begin"); - -if($mybb->input['action'] == "copy") -{ - $plugins->run_hooks("admin_forum_management_copy"); - - if($mybb->request_method == "post") - { - $from = $mybb->get_input('from', MyBB::INPUT_INT); - $to = $mybb->get_input('to', MyBB::INPUT_INT); - - // Find the source forum - $query = $db->simple_select("forums", '*', "fid='{$from}'"); - $from_forum = $db->fetch_array($query); - if(!$db->num_rows($query)) - { - $errors[] = $lang->error_invalid_source_forum; - } - - if($to == -1) - { - // Create a new forum - if(empty($mybb->input['title'])) - { - $errors[] = $lang->error_new_forum_needs_name; - } - - if($mybb->input['pid'] == -1 && $mybb->input['type'] == 'f') - { - $errors[] = $lang->error_no_parent; - } - - if(!$errors) - { - $new_forum = $from_forum; - unset($new_forum['fid'], $new_forum['threads'], $new_forum['posts'], $new_forum['lastpost'], $new_forum['lastposter'], $new_forum['lastposteruid'], $new_forum['lastposttid'], $new_forum['lastpostsubject'], $new_forum['unapprovedthreads'], $new_forum['unapprovedposts']); - $new_forum['name'] = $db->escape_string($mybb->input['title']); - $new_forum['description'] = $db->escape_string($mybb->input['description']); - $new_forum['type'] = $db->escape_string($mybb->input['type']); - $new_forum['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - $new_forum['rulestitle'] = $db->escape_string($new_forum['rulestitle']); - $new_forum['rules'] = $db->escape_string($new_forum['rules']); - $new_forum['parentlist'] = ''; - - $to = $db->insert_query("forums", $new_forum); - - // Generate parent list - $parentlist = make_parent_list($to); - $updatearray = array( - 'parentlist' => $parentlist - ); - $db->update_query("forums", $updatearray, "fid='{$to}'"); - } - } - elseif($mybb->input['copyforumsettings'] == 1) - { - // Copy settings to existing forum - $query = $db->simple_select("forums", '*', "fid='{$to}'"); - $to_forum = $db->fetch_array($query); - if(!$db->num_rows($query)) - { - $errors[] = $lang->error_invalid_destination_forum; - } - - if(!$errors) - { - $new_forum = $from_forum; - unset($new_forum['fid'], $new_forum['threads'], $new_forum['posts'], $new_forum['lastpost'], $new_forum['lastposter'], $new_forum['lastposteruid'], $new_forum['lastposttid'], $new_forum['lastpostsubject'], $new_forum['unapprovedthreads'], $new_forum['unapprovedposts']); - $new_forum['name'] = $db->escape_string($to_forum['name']); - $new_forum['description'] = $db->escape_string($to_forum['description']); - $new_forum['pid'] = $db->escape_string($to_forum['pid']); - $new_forum['parentlist'] = $db->escape_string($to_forum['parentlist']); - $new_forum['rulestitle'] = $db->escape_string($new_forum['rulestitle']); - $new_forum['rules'] = $db->escape_string($new_forum['rules']); - - $db->update_query("forums", $new_forum, "fid='{$to}'"); - } - } - - if(!$errors) - { - // Copy permissions - if(is_array($mybb->input['copygroups']) && count($mybb->input['copygroups'] > 0)) - { - foreach($mybb->input['copygroups'] as $gid) - { - $groups[] = (int)$gid; - } - $groups = implode(',', $groups); - $query = $db->simple_select("forumpermissions", '*', "fid='{$from}' AND gid IN ({$groups})"); - $db->delete_query("forumpermissions", "fid='{$to}' AND gid IN ({$groups})", 1); - while($permissions = $db->fetch_array($query)) - { - unset($permissions['pid']); - $permissions['fid'] = $to; - - $db->insert_query("forumpermissions", $permissions); - } - - // Log admin action - log_admin_action($from, $from_forum['name'], $to, $new_forum['name'], $groups); - } - else - { - // Log admin action (no group permissions) - log_admin_action($from, $from_forum['name'], $to, $new_forum['name']); - } - - $plugins->run_hooks("admin_forum_management_copy_commit"); - - $cache->update_forums(); - $cache->update_forumpermissions(); - - flash_message($lang->success_forum_copied, 'success'); - admin_redirect("index.php?module=forum-management&action=edit&fid={$to}"); - } - } - - $page->add_breadcrumb_item($lang->copy_forum); - $page->output_header($lang->copy_forum); - $page->output_nav_tabs($sub_tabs, 'copy_forum'); - - $form = new Form("index.php?module=forum-management&action=copy", "post"); - - if($errors) - { - $page->output_inline_error($errors); - $copy_data = $mybb->input; - } - else - { - $copy_data['type'] = "f"; - $copy_data['title'] = ""; - $copy_data['description'] = ""; - - if(!$mybb->input['pid']) - { - $copy_data['pid'] = "-1"; - } - else - { - $copy_data['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - } - $copy_data['disporder'] = "1"; - $copy_data['from'] = $mybb->input['fid']; - $copy_data['copyforumsettings'] = 0; - $copy_data['pid'] = 0; - } - - $types = array( - 'f' => $lang->forum, - 'c' => $lang->category - ); - - $create_a_options_f = array( - 'id' => 'forum' - ); - - $create_a_options_c = array( - 'id' => 'category' - ); - - if($copy_data['type'] == "f") - { - $create_a_options_f['checked'] = true; - } - else - { - $create_a_options_c['checked'] = true; - } - - $usergroups = array(); - - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - } - - $form_container = new FormContainer($lang->copy_forum); - $form_container->output_row($lang->source_forum." *", $lang->source_forum_desc, $form->generate_forum_select('from', $copy_data['from'], array('id' => 'from')), 'from'); - $form_container->output_row($lang->destination_forum." *", $lang->destination_forum_desc, $form->generate_forum_select('to', $copy_data['to'], array('id' => 'to', 'main_option' => $lang->copy_to_new_forum)), 'to'); - $form_container->output_row($lang->copy_settings_and_properties, $lang->copy_settings_and_properties_desc, $form->generate_yes_no_radio('copyforumsettings', $copy_data['copyforumsettings'])); - $form_container->output_row($lang->copy_user_group_permissions, $lang->copy_user_group_permissions_desc, $form->generate_select_box('copygroups[]', $usergroups, $mybb->input['copygroups'], array('id' => 'copygroups', 'multiple' => true, 'size' => 5)), 'copygroups'); - - $form_container->end(); - - $form_container = new FormContainer($lang->new_forum_settings); - $form_container->output_row($lang->forum_type, $lang->forum_type_desc, $form->generate_radio_button('type', 'f', $lang->forum, $create_a_options_f)."
\n".$form->generate_radio_button('type', 'c', $lang->category, $create_a_options_c)); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $copy_data['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->description, "", $form->generate_text_area('description', $copy_data['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->parent_forum." *", $lang->parent_forum_desc, $form->generate_forum_select('pid', $copy_data['pid'], array('id' => 'pid', 'main_option' => $lang->none)), 'pid'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->copy_forum); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "editmod") -{ - $query = $db->simple_select("moderators", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $mod_data = $db->fetch_array($query); - - if(!$mod_data['id']) - { - flash_message($lang->error_incorrect_moderator, 'error'); - admin_redirect("index.php?module=forum-management"); - } - - $plugins->run_hooks("admin_forum_management_editmod"); - - if($mod_data['isgroup']) - { - $fieldname = "title"; - } - else - { - $fieldname = "username"; - } - - if($mybb->request_method == "post") - { - $mid = $mybb->get_input('mid', MyBB::INPUT_INT); - if(!$mid) - { - flash_message($lang->error_incorrect_moderator, 'error'); - admin_redirect("index.php?module=forum-management"); - } - - if(!$errors) - { - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - $forum = get_forum($fid); - if($mod_data['isgroup']) - { - $mod = $groupscache[$mod_data['id']]; - } - else - { - $mod = get_user($mod_data['id']); - } - $update_array = array( - 'fid' => (int)$fid, - 'caneditposts' => $mybb->get_input('caneditposts', MyBB::INPUT_INT), - 'cansoftdeleteposts' => $mybb->get_input('cansoftdeleteposts', MyBB::INPUT_INT), - 'canrestoreposts' => $mybb->get_input('canrestoreposts', MyBB::INPUT_INT), - 'candeleteposts' => $mybb->get_input('candeleteposts', MyBB::INPUT_INT), - 'cansoftdeletethreads' => $mybb->get_input('cansoftdeletethreads', MyBB::INPUT_INT), - 'canrestorethreads' => $mybb->get_input('canrestorethreads', MyBB::INPUT_INT), - 'candeletethreads' => $mybb->get_input('candeletethreads', MyBB::INPUT_INT), - 'canviewips' => $mybb->get_input('canviewips', MyBB::INPUT_INT), - 'canviewunapprove' => $mybb->get_input('canviewunapprove', MyBB::INPUT_INT), - 'canviewdeleted' => $mybb->get_input('canviewdeleted', MyBB::INPUT_INT), - 'canopenclosethreads' => $mybb->get_input('canopenclosethreads', MyBB::INPUT_INT), - 'canstickunstickthreads' => $mybb->get_input('canstickunstickthreads', MyBB::INPUT_INT), - 'canapproveunapprovethreads' => $mybb->get_input('canapproveunapprovethreads', MyBB::INPUT_INT), - 'canapproveunapproveposts' => $mybb->get_input('canapproveunapproveposts', MyBB::INPUT_INT), - 'canapproveunapproveattachs' => $mybb->get_input('canapproveunapproveattachs', MyBB::INPUT_INT), - 'canmanagethreads' => $mybb->get_input('canmanagethreads', MyBB::INPUT_INT), - 'canmanagepolls' => $mybb->get_input('canmanagepolls', MyBB::INPUT_INT), - 'canpostclosedthreads' => $mybb->get_input('canpostclosedthreads', MyBB::INPUT_INT), - 'canmovetononmodforum' => $mybb->get_input('canmovetononmodforum', MyBB::INPUT_INT), - 'canusecustomtools' => $mybb->get_input('canusecustomtools', MyBB::INPUT_INT), - 'canmanageannouncements' => $mybb->get_input('canmanageannouncements', MyBB::INPUT_INT), - 'canmanagereportedposts' => $mybb->get_input('canmanagereportedposts', MyBB::INPUT_INT), - 'canviewmodlog' => $mybb->get_input('canviewmodlog', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_forum_management_editmod_commit"); - - $db->update_query("moderators", $update_array, "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - - $cache->update_moderators(); - - // Log admin action - log_admin_action($fid, $forum['name'], $mid, $mod[$fieldname]); - - flash_message($lang->success_moderator_updated, 'success'); - admin_redirect("index.php?module=forum-management&fid=".$mybb->get_input('fid', MyBB::INPUT_INT)."#tab_moderators"); - } - } - - if($mod_data['isgroup']) - { - $query = $db->simple_select("usergroups", "title", "gid='{$mod_data['id']}'"); - $mod_data[$fieldname] = $db->fetch_field($query, 'title'); - } - else - { - $query = $db->simple_select("users", "username", "uid='{$mod_data['id']}'"); - $mod_data[$fieldname] = $db->fetch_field($query, 'username'); - } - - $sub_tabs = array(); - - $sub_tabs['edit_mod'] = array( - 'title' => $lang->edit_mod, - 'link' => "index.php?module=forum-management&action=editmod&mid=".$mybb->input['mid'], - 'description' => $lang->edit_mod_desc - ); - - $page->add_breadcrumb_item($lang->forum_moderators, "index.php?module=forum-management&fid={$mod_data['fid']}#tab_moderators"); - $page->add_breadcrumb_item($lang->edit_forum); - $page->output_header($lang->edit_mod); - $page->output_nav_tabs($sub_tabs, 'edit_mod'); - - $form = new Form("index.php?module=forum-management&action=editmod", "post"); - echo $form->generate_hidden_field("mid", $mod_data['mid']); - - if($errors) - { - $page->output_inline_error($errors); - $mod_data = $mybb->input; - } - - $form_container = new FormContainer($lang->sprintf($lang->edit_mod_for, $mod_data[$fieldname])); - $form_container->output_row($lang->forum, $lang->forum_desc, $form->generate_forum_select('fid', $mod_data['fid'], array('id' => 'fid')), 'fid'); - - $moderator_permissions = array( - $form->generate_check_box('caneditposts', 1, $lang->can_edit_posts, array('checked' => $mod_data['caneditposts'], 'id' => 'caneditposts')), - $form->generate_check_box('cansoftdeleteposts', 1, $lang->can_soft_delete_posts, array('checked' => $mod_data['cansoftdeleteposts'], 'id' => 'cansoftdeleteposts')), - $form->generate_check_box('canrestoreposts', 1, $lang->can_restore_posts, array('checked' => $mod_data['canrestoreposts'], 'id' => 'canrestoreposts')), - $form->generate_check_box('candeleteposts', 1, $lang->can_delete_posts, array('checked' => $mod_data['candeleteposts'], 'id' => 'candeleteposts')), - $form->generate_check_box('cansoftdeletethreads', 1, $lang->can_soft_delete_threads, array('checked' => $mod_data['cansoftdeletethreads'], 'id' => 'cansoftdeletethreads')), - $form->generate_check_box('canrestorethreads', 1, $lang->can_restore_threads, array('checked' => $mod_data['canrestorethreads'], 'id' => 'canrestorethreads')), - $form->generate_check_box('candeletethreads', 1, $lang->can_delete_threads, array('checked' => $mod_data['candeletethreads'], 'id' => 'candeletethreads')), - $form->generate_check_box('canviewips', 1, $lang->can_view_ips, array('checked' => $mod_data['canviewips'], 'id' => 'canviewips')), - $form->generate_check_box('canviewunapprove', 1, $lang->can_view_unapprove, array('checked' => $mod_data['canviewunapprove'], 'id' => 'canviewunapprove')), - $form->generate_check_box('canviewdeleted', 1, $lang->can_view_deleted, array('checked' => $mod_data['canviewdeleted'], 'id' => 'canviewdeleted')), - $form->generate_check_box('canopenclosethreads', 1, $lang->can_open_close_threads, array('checked' => $mod_data['canopenclosethreads'], 'id' => 'canopenclosethreads')), - $form->generate_check_box('canstickunstickthreads', 1, $lang->can_stick_unstick_threads, array('checked' => $mod_data['canstickunstickthreads'], 'id' => 'canstickunstickthreads')), - $form->generate_check_box('canapproveunapprovethreads', 1, $lang->can_approve_unapprove_threads, array('checked' => $mod_data['canapproveunapprovethreads'], 'id' => 'canapproveunapprovethreads')), - $form->generate_check_box('canapproveunapproveposts', 1, $lang->can_approve_unapprove_posts, array('checked' => $mod_data['canapproveunapproveposts'], 'id' => 'canapproveunapproveposts')), - $form->generate_check_box('canapproveunapproveattachs', 1, $lang->can_approve_unapprove_attachments, array('checked' => $mod_data['canapproveunapproveattachs'], 'id' => 'canapproveunapproveattachs')), - $form->generate_check_box('canmanagethreads', 1, $lang->can_manage_threads, array('checked' => $mod_data['canmanagethreads'], 'id' => 'canmanagethreads')), - $form->generate_check_box('canmanagepolls', 1, $lang->can_manage_polls, array('checked' => $mod_data['canmanagepolls'], 'id' => 'canmanagepolls')), - $form->generate_check_box('canpostclosedthreads', 1, $lang->can_post_closed_threads, array('checked' => $mod_data['canpostclosedthreads'], 'id' => 'canpostclosedthreads')), - $form->generate_check_box('canmovetononmodforum', 1, $lang->can_move_to_other_forums, array('checked' => $mod_data['canmovetononmodforum'], 'id' => 'canmovetononmodforum')), - $form->generate_check_box('canusecustomtools', 1, $lang->can_use_custom_tools, array('checked' => $mod_data['canusecustomtools'], 'id' => 'canusecustomtools')) - ); - $form_container->output_row($lang->moderator_permissions, "", "
".implode("
", $moderator_permissions)."
"); - - $moderator_cp_permissions = array( - $form->generate_check_box('canmanageannouncements', 1, $lang->can_manage_announcements, array('checked' => $mod_data['canmanageannouncements'], 'id' => 'canmanageannouncements')), - $form->generate_check_box('canmanagereportedposts', 1, $lang->can_manage_reported_posts, array('checked' => $mod_data['canmanagereportedposts'], 'id' => 'canmanagereportedposts')), - $form->generate_check_box('canviewmodlog', 1, $lang->can_view_mod_log, array('checked' => $mod_data['canviewmodlog'], 'id' => 'canviewmodlog')) - ); - $form_container->output_row($lang->moderator_cp_permissions, $lang->moderator_cp_permissions_desc, "
".implode("
", $moderator_cp_permissions)."
"); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_mod); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "clear_permission") -{ - $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - $gid = $mybb->get_input('gid', MyBB::INPUT_INT); - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=forum-management&fid={$fid}"); - } - - $plugins->run_hooks("admin_forum_management_clear_permission"); - - if($mybb->request_method == "post") - { - if((!$fid || !$gid) && $pid) - { - $query = $db->simple_select("forumpermissions", "fid, gid", "pid='{$pid}'"); - $result = $db->fetch_array($query); - $fid = $result['fid']; - $gid = $result['gid']; - } - - if($pid) - { - $db->delete_query("forumpermissions", "pid='{$pid}'"); - } - else - { - $db->delete_query("forumpermissions", "gid='{$gid}' AND fid='{$fid}'"); - } - - $plugins->run_hooks('admin_forum_management_clear_permission_commit'); - - $cache->update_forumpermissions(); - - flash_message($lang->success_custom_permission_cleared, 'success'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_permissions"); - } - else - { - $page->output_confirm_action("index.php?module=forum-management&action=clear_permission&pid={$pid}&gid={$gid}&fid={$fid}", $lang->confirm_clear_custom_permission); - } -} - -if($mybb->input['action'] == "permissions") -{ - $plugins->run_hooks("admin_forum_management_permissions"); - - if($mybb->request_method == "post") - { - $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - $gid = $mybb->get_input('gid', MyBB::INPUT_INT); - $forum = get_forum($fid); - - if((!$fid || !$gid) && $pid) - { - $query = $db->simple_select("forumpermissions", "fid, gid", "pid='{$pid}'"); - $result = $db->fetch_array($query); - $fid = $result['fid']; - $gid = $result['gid']; - $forum = get_forum($fid); - } - - $field_list = array(); - $fields_array = $db->show_fields_from("forumpermissions"); - if(is_array($mybb->input['permissions'])) - { - // User has set permissions for this group... - foreach($fields_array as $field) - { - if(strpos($field['Field'], 'can') !== false || strpos($field['Field'], 'mod') !== false) - { - if(array_key_exists($field['Field'], $mybb->input['permissions'])) - { - $update_array[$db->escape_string($field['Field'])] = (int)$mybb->input['permissions'][$field['Field']]; - } - else - { - $update_array[$db->escape_string($field['Field'])] = 0; - } - } - } - } - else - { - // Else, we assume that the group has no permissions... - foreach($fields_array as $field) - { - if(strpos($field['Field'], 'can') !== false || strpos($field['Field'], 'mod') !== false) - { - $update_array[$db->escape_string($field['Field'])] = 0; - } - } - } - - if($fid && !$pid) - { - $update_array['fid'] = $fid; - $update_array['gid'] = $mybb->get_input('gid', MyBB::INPUT_INT); - $db->insert_query("forumpermissions", $update_array); - } - - $plugins->run_hooks("admin_forum_management_permissions_commit"); - - if(!($fid && !$pid)) - { - $db->update_query("forumpermissions", $update_array, "pid='{$pid}'"); - } - - $cache->update_forumpermissions(); - - // Log admin action - log_admin_action($fid, $forum['name']); - - if($mybb->input['ajax'] == 1) - { - echo json_encode(""); - die; - } - else - { - flash_message($lang->success_forum_permissions_saved, 'success'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_permissions"); - } - } - - if($mybb->input['ajax'] != 1) - { - $sub_tabs = array(); - - if($mybb->input['fid'] && $mybb->input['gid']) - { - $sub_tabs['edit_permissions'] = array( - 'title' => $lang->forum_permissions, - 'link' => "index.php?module=forum-management&action=permissions&fid=".$mybb->input['fid']."&gid=".$mybb->input['gid'], - 'description' => $lang->forum_permissions_desc - ); - - $page->add_breadcrumb_item($lang->forum_permissions2, "index.php?module=forum-management&fid=".$mybb->input['fid']."#tab_permissions"); - } - else - { - $query = $db->simple_select("forumpermissions", "fid", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $mybb->input['fid'] = $db->fetch_field($query, "fid"); - - $sub_tabs['edit_permissions'] = array( - 'title' => $lang->forum_permissions, - 'link' => "index.php?module=forum-management&action=permissions&pid=".$mybb->get_input('pid', MyBB::INPUT_INT), - 'description' => $lang->forum_permissions_desc - ); - - $page->add_breadcrumb_item($lang->forum_permissions2, "index.php?module=forum-management&fid=".$mybb->input['fid']."#tab_permissions"); - } - - $page->add_breadcrumb_item($lang->forum_permissions); - $page->output_header($lang->forum_permissions); - $page->output_nav_tabs($sub_tabs, 'edit_permissions'); - } - else - { - echo " -
- \n - -
"; - } - - if($mybb->input['pid'] || ($mybb->input['gid'] && $mybb->input['fid'])) - { - if($mybb->input['ajax'] != 1) - { - $form = new Form("index.php?module=forum-management&action=permissions", "post"); - } - else - { - $form = new Form("index.php?module=forum-management&action=permissions&ajax=1&pid=".$mybb->get_input('pid', MyBB::INPUT_INT)."&gid=".$mybb->get_input('gid', MyBB::INPUT_INT)."&fid=".$mybb->get_input('gid', MyBB::INPUT_INT), "post", "modal_form"); - } - echo $form->generate_hidden_field("usecustom", "1"); - - if($errors) - { - $page->output_inline_error($errors); - $permission_data = $mybb->input; - - $query = $db->simple_select("usergroups", "*", "gid='{$permission_data['gid']}'"); - $usergroup = $db->fetch_array($query); - - $query = $db->simple_select("forums", "*", "fid='{$permission_data['fid']}'"); - $forum = $db->fetch_array($query); - } - else - { - $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - $gid = $mybb->get_input('gid', MyBB::INPUT_INT); - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - - if($pid) - { - $query = $db->simple_select("forumpermissions", "*", "pid='{$pid}'"); - } - else - { - $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}' AND gid='{$gid}'", array('limit' => 1)); - } - - $permission_data = $db->fetch_array($query); - - if(!$fid) - { - $fid = $permission_data['fid']; - } - - if(!$gid) - { - $gid = $permission_data['gid']; - } - - if(!$pid) - { - $pid = $permission_data['pid']; - } - - $query = $db->simple_select("usergroups", "*", "gid='$gid'"); - $usergroup = $db->fetch_array($query); - - $query = $db->simple_select("forums", "*", "fid='$fid'"); - $forum = $db->fetch_array($query); - - $sperms = $permission_data; - - $sql = build_parent_list($fid); - $query = $db->simple_select("forumpermissions", "*", "$sql AND gid='$gid'"); - $customperms = $db->fetch_array($query); - - if($permission_data['pid']) - { - $permission_data['usecustom'] = 1; - echo $form->generate_hidden_field("pid", $pid); - } - else - { - echo $form->generate_hidden_field("fid", $fid); - echo $form->generate_hidden_field("gid", $gid); - if(!$customperms['pid']) - { - $permission_data = usergroup_permissions($gid); - } - else - { - $permission_data = forum_permissions($fid, 0, $gid); - } - } - } - - $groups = array( - 'canviewthreads' => 'viewing', - 'canview' => 'viewing', - 'canonlyviewownthreads' => 'viewing', - 'candlattachments' => 'viewing', - - 'canpostthreads' => 'posting_rating', - 'canpostreplys' => 'posting_rating', - 'canonlyreplyownthreads' => 'posting_rating', - 'canpostattachments' => 'posting_rating', - 'canratethreads' => 'posting_rating', - - 'caneditposts' => 'editing', - 'candeleteposts' => 'editing', - 'candeletethreads' => 'editing', - 'caneditattachments' => 'editing', - 'canviewdeletionnotice' => 'editing', - - 'modposts' => 'moderate', - 'modthreads' => 'moderate', - 'modattachments' => 'moderate', - 'mod_edit_posts' => 'moderate', - - 'canpostpolls' => 'polls', - 'canvotepolls' => 'polls', - 'cansearch' => 'misc', - ); - - $groups = $plugins->run_hooks("admin_forum_management_permission_groups", $groups); - - $tabs = array(); - foreach(array_unique(array_values($groups)) as $group) - { - $lang_group = "group_".$group; - $tabs[$group] = $lang->$lang_group; - } - - if($mybb->input['ajax'] == 1) - { - $page->output_tab_control($tabs, false, "tabs2"); - } - else - { - $page->output_tab_control($tabs); - } - - $field_list = array(); - $fields_array = $db->show_fields_from("forumpermissions"); - foreach($fields_array as $field) - { - if(strpos($field['Field'], 'can') !== false || strpos($field['Field'], 'mod') !== false) - { - if(array_key_exists($field['Field'], $groups)) - { - $field_list[$groups[$field['Field']]][] = $field['Field']; - } - else - { - $field_list['misc'][] = $field['Field']; - } - } - } - - foreach(array_unique(array_values($groups)) as $group) - { - $lang_group = "group_".$group; - echo "
\n"; - $form_container = new FormContainer("\"".htmlspecialchars_uni($usergroup['title'])."\" {$lang->custom_permissions_for} \"".htmlspecialchars_uni($forum['name'])."\""); - $fields = array(); - foreach($field_list[$group] as $field) - { - $lang_field = $group."_field_".$field; - $fields[] = $form->generate_check_box("permissions[{$field}]", 1, $lang->$lang_field, array('checked' => $permission_data[$field], 'id' => $field)); - } - $form_container->output_row("", "", "
".implode("
", $fields)."
"); - $form_container->end(); - echo "
"; - } - - if($mybb->input['ajax'] == 1) - { - $buttons[] = $form->generate_submit_button($lang->cancel, array('onclick' => '$.modal.close(); return false;')); - $buttons[] = $form->generate_submit_button($lang->save_permissions, array('id' => 'savePermissions')); - $form->output_submit_wrapper($buttons); - $form->end(); - echo "
"; - echo "
"; - } - else - { - $buttons[] = $form->generate_submit_button($lang->save_permissions); - $form->output_submit_wrapper($buttons); - - $form->end(); - } - } - - if($mybb->input['ajax'] != 1) - { - $page->output_footer(); - } -} - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_forum_management_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - $type = $mybb->input['type']; - - if($pid <= 0 && $type == "f") - { - $errors[] = $lang->error_no_parent; - } - - if(!$errors) - { - if($pid < 0) - { - $pid = 0; - } - $insert_array = array( - "name" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "linkto" => $db->escape_string($mybb->input['linkto']), - "type" => $db->escape_string($type), - "pid" => $pid, - "parentlist" => '', - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "active" => $mybb->get_input('active', MyBB::INPUT_INT), - "open" => $mybb->get_input('open', MyBB::INPUT_INT), - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT), - "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT), - "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT), - "allowpicons" => $mybb->get_input('allowpicons', MyBB::INPUT_INT), - "allowtratings" => $mybb->get_input('allowtratings', MyBB::INPUT_INT), - "usepostcounts" => $mybb->get_input('usepostcounts', MyBB::INPUT_INT), - "usethreadcounts" => $mybb->get_input('usethreadcounts', MyBB::INPUT_INT), - "requireprefix" => $mybb->get_input('requireprefix', MyBB::INPUT_INT), - "password" => $db->escape_string($mybb->input['password']), - "showinjump" => $mybb->get_input('showinjump', MyBB::INPUT_INT), - "style" => $mybb->get_input('style', MyBB::INPUT_INT), - "overridestyle" => $mybb->get_input('overridestyle', MyBB::INPUT_INT), - "rulestype" => $mybb->get_input('rulestype', MyBB::INPUT_INT), - "rulestitle" => $db->escape_string($mybb->input['rulestitle']), - "rules" => $db->escape_string($mybb->input['rules']), - "defaultdatecut" => $mybb->get_input('defaultdatecut', MyBB::INPUT_INT), - "defaultsortby" => $db->escape_string($mybb->input['defaultsortby']), - "defaultsortorder" => $db->escape_string($mybb->input['defaultsortorder']), - ); - $fid = $db->insert_query("forums", $insert_array); - - $parentlist = make_parent_list($fid); - $db->update_query("forums", array("parentlist" => $parentlist), "fid='$fid'"); - - $inherit = $mybb->input['default_permissions']; - - foreach($mybb->input as $id => $permission) - { - if(strpos($id, 'fields_') === false) - { - continue; - } - - list(, $gid) = explode('fields_', $id); - - // If it isn't an array then it came from the javascript form - if(!is_array($permission)) - { - $permission = explode(',', $permission); - $permission = array_flip($permission); - foreach($permission as $name => $value) - { - $permission[$name] = 1; - } - } - - foreach(array('canview','canpostthreads','canpostreplys','canpostpolls') as $name) - { - if(in_array($name, $permission) || $permission[$name]) - { - $permissions[$name][$gid] = 1; - } - else - { - $permissions[$name][$gid] = 0; - } - } - } - - $canview = $permissions['canview']; - $canpostthreads = $permissions['canpostthreads']; - $canpostpolls = $permissions['canpostpolls']; - $canpostattachments = $permissions['canpostattachments']; - $canpostreplies = $permissions['canpostreplys']; - save_quick_perms($fid); - - $plugins->run_hooks("admin_forum_management_add_commit"); - - $cache->update_forums(); - - // Log admin action - log_admin_action($fid, $insert_array['name']); - - flash_message($lang->success_forum_added, 'success'); - admin_redirect("index.php?module=forum-management"); - } - } - - $page->extra_header .= "\n"; - - $page->add_breadcrumb_item($lang->add_forum); - $page->output_header($lang->add_forum); - $page->output_nav_tabs($sub_tabs, 'add_forum'); - - $form = new Form("index.php?module=forum-management&action=add", "post"); - - if($errors) - { - $page->output_inline_error($errors); - $forum_data = $mybb->input; - } - else - { - $forum_data['type'] = "f"; - $forum_data['title'] = ""; - $forum_data['description'] = ""; - - if(!$mybb->input['pid']) - { - $forum_data['pid'] = "-1"; - } - else - { - $forum_data['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - } - $forum_data['disporder'] = "1"; - $forum_data['linkto'] = ""; - $forum_data['password'] = ""; - $forum_data['active'] = 1; - $forum_data['open'] = 1; - $forum_data['overridestyle'] = ""; - $forum_data['style'] = ""; - $forum_data['rulestype'] = ""; - $forum_data['rulestitle'] = ""; - $forum_data['rules'] = ""; - $forum_data['defaultdatecut'] = ""; - $forum_data['defaultsortby'] = ""; - $forum_data['defaultsortorder'] = ""; - $forum_data['allowhtml'] = ""; - $forum_data['allowmycode'] = 1; - $forum_data['allowsmilies'] = 1; - $forum_data['allowimgcode'] = 1; - $forum_data['allowvideocode'] = 1; - $forum_data['allowpicons'] = 1; - $forum_data['allowtratings'] = 1; - $forum_data['showinjump'] = 1; - $forum_data['usepostcounts'] = 1; - $forum_data['usethreadcounts'] = 1; - $forum_data['requireprefix'] = 0; - } - - $types = array( - 'f' => $lang->forum, - 'c' => $lang->category - ); - - $create_a_options_f = array( - 'id' => 'forum' - ); - - $create_a_options_c = array( - 'id' => 'category' - ); - - if($forum_data['type'] == "f") - { - $create_a_options_f['checked'] = true; - } - else - { - $create_a_options_c['checked'] = true; - } - - $form_container = new FormContainer($lang->add_forum); - $form_container->output_row($lang->forum_type, $lang->forum_type_desc, $form->generate_radio_button('type', 'f', $lang->forum, $create_a_options_f)."
\n".$form->generate_radio_button('type', 'c', $lang->category, $create_a_options_c)); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $forum_data['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->description, "", $form->generate_text_area('description', $forum_data['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->parent_forum." *", $lang->parent_forum_desc, $form->generate_forum_select('pid', $forum_data['pid'], array('id' => 'pid', 'main_option' => $lang->none)), 'pid'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $forum_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->end(); - - echo ""; - echo "
"; - $form_container = new FormContainer("".$lang->additional_forum_options); - $form_container->output_row($lang->forum_link, $lang->forum_link_desc, $form->generate_text_box('linkto', $forum_data['linkto'], array('id' => 'linkto')), 'linkto'); - $form_container->output_row($lang->forum_password, $lang->forum_password_desc, $form->generate_text_box('password', $forum_data['password'], array('id' => 'password')), 'password'); - - $access_options = array( - $form->generate_check_box('active', 1, $lang->forum_is_active."
\n{$lang->forum_is_active_desc}", array('checked' => $forum_data['active'], 'id' => 'active')), - $form->generate_check_box('open', 1, $lang->forum_is_open."
\n{$lang->forum_is_open_desc}", array('checked' => $forum_data['open'], 'id' => 'open')) - ); - - $form_container->output_row($lang->access_options, "", "
".implode("
", $access_options)."
"); - - $styles = array( - '0' => $lang->use_default - ); - - $query = $db->simple_select("themes", "tid,name", "name!='((master))' AND name!='((master-backup))'", array('order_by' => 'name')); - while($style = $db->fetch_array($query)) - { - $styles[$style['tid']] = htmlspecialchars_uni($style['name']); - } - - $style_options = array( - $form->generate_check_box('overridestyle', 1, $lang->override_user_style, array('checked' => $forum_data['overridestyle'], 'id' => 'overridestyle')), - $lang->forum_specific_style."
\n".$form->generate_select_box('style', $styles, $forum_data['style'], array('id' => 'style')) - ); - - $form_container->output_row($lang->style_options, "", "
".implode("
", $style_options)."
"); - - $display_methods = array( - '0' => $lang->dont_display_rules, - '1' => $lang->display_rules_inline, - '3' => $lang->display_rules_inline_new, - '2' => $lang->display_rules_link - ); - - $forum_rules = array( - $lang->display_method."
\n".$form->generate_select_box('rulestype', $display_methods, $forum_data['rulestype'], array('checked' => $forum_data['rulestype'], 'id' => 'rulestype')), - $lang->title."
\n".$form->generate_text_box('rulestitle', $forum_data['rulestitle'], array('checked' => $forum_data['rulestitle'], 'id' => 'rulestitle')), - $lang->rules."
\n".$form->generate_text_area('rules', $forum_data['rules'], array('checked' => $forum_data['rules'], 'id' => 'rules')) - ); - - $form_container->output_row($lang->forum_rules, "", "
".implode("
", $forum_rules)."
"); - - $default_date_cut = array( - 0 => $lang->board_default, - 1 => $lang->datelimit_1day, - 5 => $lang->datelimit_5days, - 10 => $lang->datelimit_10days, - 20 => $lang->datelimit_20days, - 50 => $lang->datelimit_50days, - 75 => $lang->datelimit_75days, - 100 => $lang->datelimit_100days, - 365 => $lang->datelimit_lastyear, - 9999 => $lang->datelimit_beginning, - ); - - $default_sort_by = array( - "" => $lang->board_default, - "subject" => $lang->sort_by_subject, - "lastpost" => $lang->sort_by_lastpost, - "starter" => $lang->sort_by_starter, - "started" => $lang->sort_by_started, - "rating" => $lang->sort_by_rating, - "replies" => $lang->sort_by_replies, - "views" => $lang->sort_by_views, - ); - - $default_sort_order = array( - "" => $lang->board_default, - "asc" => $lang->sort_order_asc, - "desc" => $lang->sort_order_desc, - ); - - $view_options = array( - $lang->default_date_cut."
\n".$form->generate_select_box('defaultdatecut', $default_date_cut, $forum_data['defaultdatecut'], array('checked' => $forum_data['defaultdatecut'], 'id' => 'defaultdatecut')), - $lang->default_sort_by."
\n".$form->generate_select_box('defaultsortby', $default_sort_by, $forum_data['defaultsortby'], array('checked' => $forum_data['defaultsortby'], 'id' => 'defaultsortby')), - $lang->default_sort_order."
\n".$form->generate_select_box('defaultsortorder', $default_sort_order, $forum_data['defaultsortorder'], array('checked' => $forum_data['defaultsortorder'], 'id' => 'defaultsortorder')), - ); - - $form_container->output_row($lang->default_view_options, "", "
".implode("
", $view_options)."
"); - - $misc_options = array( - $form->generate_check_box('allowhtml', 1, $lang->allow_html, array('checked' => $forum_data['allowhtml'], 'id' => 'allowhtml')), - $form->generate_check_box('allowmycode', 1, $lang->allow_mycode, array('checked' => $forum_data['allowmycode'], 'id' => 'allowmycode')), - $form->generate_check_box('allowsmilies', 1, $lang->allow_smilies, array('checked' => $forum_data['allowsmilies'], 'id' => 'allowsmilies')), - $form->generate_check_box('allowimgcode', 1, $lang->allow_img_code, array('checked' => $forum_data['allowimgcode'], 'id' => 'allowimgcode')), - $form->generate_check_box('allowvideocode', 1, $lang->allow_video_code, array('checked' => $forum_data['allowvideocode'], 'id' => 'allowvideocode')), - $form->generate_check_box('allowpicons', 1, $lang->allow_post_icons, array('checked' => $forum_data['allowpicons'], 'id' => 'allowpicons')), - $form->generate_check_box('allowtratings', 1, $lang->allow_thread_ratings, array('checked' => $forum_data['allowtratings'], 'id' => 'allowtratings')), - $form->generate_check_box('showinjump', 1, $lang->show_forum_jump, array('checked' => $forum_data['showinjump'], 'id' => 'showinjump')), - $form->generate_check_box('usepostcounts', 1, $lang->use_postcounts, array('checked' => $forum_data['usepostcounts'], 'id' => 'usepostcounts')), - $form->generate_check_box('usethreadcounts', 1, $lang->use_threadcounts, array('checked' => $forum_data['usethreadcounts'], 'id' => 'usethreadcounts')), - $form->generate_check_box('requireprefix', 1, $lang->require_thread_prefix, array('checked' => $forum_data['requireprefix'], 'id' => 'requireprefix')) - ); - - $form_container->output_row($lang->misc_options, "", "
".implode("
", $misc_options)."
"); - $form_container->end(); - echo "
"; - - $query = $db->simple_select("usergroups", "*", "", array("order" => "name")); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = $usergroup; - } - - $cached_forum_perms = $cache->read("forumpermissions"); - $field_list = array( - 'canview' => $lang->permissions_canview, - 'canpostthreads' => $lang->permissions_canpostthreads, - 'canpostreplys' => $lang->permissions_canpostreplys, - 'canpostpolls' => $lang->permissions_canpostpolls, - ); - - $field_list2 = array( - 'canview' => $lang->perm_drag_canview, - 'canpostthreads' => $lang->perm_drag_canpostthreads, - 'canpostreplys' => $lang->perm_drag_canpostreplys, - 'canpostpolls' => $lang->perm_drag_canpostpolls, - ); - - $ids = array(); - - $form_container = new FormContainer($lang->forum_permissions); - $form_container->output_row_header($lang->permissions_group, array("class" => "align_center", 'style' => 'width: 40%')); - $form_container->output_row_header($lang->overview_allowed_actions, array("class" => "align_center")); - $form_container->output_row_header($lang->overview_disallowed_actions, array("class" => "align_center")); - - if($mybb->request_method == "post") - { - foreach($usergroups as $usergroup) - { - if(isset($mybb->input['fields_'.$usergroup['gid']])) - { - $input_permissions = $mybb->input['fields_'.$usergroup['gid']]; - if(!is_array($input_permissions)) - { - // Convering the comma separated list from Javascript form into a variable - $input_permissions = explode(',' , $input_permissions); - } - foreach($input_permissions as $input_permission) - { - $mybb->input['permissions'][$usergroup['gid']][$input_permission] = 1; - } - } - } - } - - foreach($usergroups as $usergroup) - { - $perms = array(); - if(isset($mybb->input['default_permissions']) && $mybb->input['default_permissions'][$usergroup['gid']]) - { - if(is_array($existing_permissions) && $existing_permissions[$usergroup['gid']]) - { - $perms = $existing_permissions[$usergroup['gid']]; - $default_checked = false; - } - elseif(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]; - $default_checked = true; - } - else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]; - $default_checked = true; - } - } - - if(!$perms) - { - $perms = $usergroup; - $default_checked = true; - } - - foreach($field_list as $forum_permission => $forum_perm_title) - { - if(isset($mybb->input['permissions'])) - { - if($mybb->input['default_permissions'][$usergroup['gid']]) - { - $default_checked = true; - } - else - { - $default_checked = false; - } - - if($mybb->input['permissions'][$usergroup['gid']][$forum_permission]) - { - $perms_checked[$forum_permission] = 1; - } - else - { - $perms_checked[$forum_permission] = 0; - } - } - else - { - if($perms[$forum_permission] == 1) - { - $perms_checked[$forum_permission] = 1; - } - else - { - $perms_checked[$forum_permission] = 0; - } - } - } - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - - if($default_checked) - { - $inherited_text = $lang->inherited_permission; - } - else - { - $inherited_text = $lang->custom_permission; - } - - $form_container->output_cell("{$usergroup['title']}
".$form->generate_check_box("default_permissions[{$usergroup['gid']}]", 1, "", array("id" => "default_permissions_{$usergroup['gid']}", "checked" => $default_checked, "onclick" => $default_click))." "); - - $field_select = "
\n"; - $field_select .= "
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 1) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= "
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 0) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_'.$usergroup['gid'])); - $field_select = str_replace("'", "\\'", $field_select); - $field_select = str_replace("\n", "", $field_select); - - $field_select = "\n"; - - $field_selected = array(); - foreach($field_list as $forum_permission => $permission_title) - { - $field_options[$forum_permission] = $permission_title; - if($perms_checked[$forum_permission]) - { - $field_selected[] = $forum_permission; - } - } - - $field_select .= "\n"; - $form_container->output_cell($field_select, array('colspan' => 2)); - - $form_container->construct_row(); - - $ids[] = $usergroup['gid']; - } - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_forum); - $form->output_submit_wrapper($buttons); - $form->end(); - - // Write in our JS based field selector - echo "\n"; - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - if(!$mybb->input['fid']) - { - flash_message($lang->error_invalid_fid, 'error'); - admin_redirect("index.php?module=forum-management"); - } - - $query = $db->simple_select("forums", "*", "fid='{$mybb->input['fid']}'"); - $forum_data = $db->fetch_array($query); - if(!$forum_data) - { - flash_message($lang->error_invalid_fid, 'error'); - admin_redirect("index.php?module=forum-management"); - } - - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - - $plugins->run_hooks("admin_forum_management_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - - if($pid == $mybb->input['fid']) - { - $errors[] = $lang->error_forum_parent_itself; - } - else - { - $query = $db->simple_select('forums', 'parentlist', "fid='{$pid}'"); - $parents = explode(',', $db->fetch_field($query, 'parentlist')); - if(in_array($mybb->input['fid'], $parents)) - { - $errors[] = $lang->error_forum_parent_child; - } - } - - $type = $mybb->input['type']; - - if($pid <= 0 && $type == "f") - { - $errors[] = $lang->error_no_parent; - } - - if($type == 'c' && $forum_data['type'] == 'f') - { - $query = $db->simple_select('threads', 'COUNT(tid) as num_threads', "fid = '{$fid}'"); - if($db->fetch_field($query, "num_threads") > 0) - { - $errors[] = $lang->error_not_empty; - } - } - - if(!empty($mybb->input['linkto']) && empty($forum_data['linkto'])) - { - $query = $db->simple_select('threads', 'COUNT(tid) as num_threads', "fid = '{$fid}'", array("limit" => 1)); - if($db->fetch_field($query, "num_threads") > 0) - { - $errors[] = $lang->error_forum_link_not_empty; - } - } - - if(!$errors) - { - if($pid < 0) - { - $pid = 0; - } - $update_array = array( - "name" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "linkto" => $db->escape_string($mybb->input['linkto']), - "type" => $db->escape_string($type), - "pid" => $pid, - "disporder" => $mybb->get_input('disporder', MyBB::INPUT_INT), - "active" => $mybb->get_input('active', MyBB::INPUT_INT), - "open" => $mybb->get_input('open', MyBB::INPUT_INT), - "allowhtml" => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - "allowmycode" => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - "allowsmilies" => $mybb->get_input('allowsmilies', MyBB::INPUT_INT), - "allowimgcode" => $mybb->get_input('allowimgcode', MyBB::INPUT_INT), - "allowvideocode" => $mybb->get_input('allowvideocode', MyBB::INPUT_INT), - "allowpicons" => $mybb->get_input('allowpicons', MyBB::INPUT_INT), - "allowtratings" => $mybb->get_input('allowtratings', MyBB::INPUT_INT), - "usepostcounts" => $mybb->get_input('usepostcounts', MyBB::INPUT_INT), - "usethreadcounts" => $mybb->get_input('usethreadcounts', MyBB::INPUT_INT), - "requireprefix" => $mybb->get_input('requireprefix', MyBB::INPUT_INT), - "password" => $db->escape_string($mybb->input['password']), - "showinjump" => $mybb->get_input('showinjump', MyBB::INPUT_INT), - "style" => $mybb->get_input('style', MyBB::INPUT_INT), - "overridestyle" => $mybb->get_input('overridestyle', MyBB::INPUT_INT), - "rulestype" => $mybb->get_input('rulestype', MyBB::INPUT_INT), - "rulestitle" => $db->escape_string($mybb->input['rulestitle']), - "rules" => $db->escape_string($mybb->input['rules']), - "defaultdatecut" => $mybb->get_input('defaultdatecut', MyBB::INPUT_INT), - "defaultsortby" => $db->escape_string($mybb->input['defaultsortby']), - "defaultsortorder" => $db->escape_string($mybb->input['defaultsortorder']), - ); - $db->update_query("forums", $update_array, "fid='{$fid}'"); - if($pid != $forum_data['pid']) - { - // Update the parentlist of this forum. - $db->update_query("forums", array("parentlist" => make_parent_list($fid)), "fid='{$fid}'"); - - // Rebuild the parentlist of all of the subforums of this forum - switch($db->type) - { - case "sqlite": - case "pgsql": - $query = $db->simple_select("forums", "fid", "','||parentlist||',' LIKE '%,$fid,%'"); - break; - default: - $query = $db->simple_select("forums", "fid", "CONCAT(',',parentlist,',') LIKE '%,$fid,%'"); - } - - while($child = $db->fetch_array($query)) - { - $db->update_query("forums", array("parentlist" => make_parent_list($child['fid'])), "fid='{$child['fid']}'"); - } - } - - $inherit = $mybb->input['default_permissions']; - - foreach($mybb->input as $id => $permission) - { - // Make sure we're only skipping inputs that don't start with "fields_" and aren't fields_default_ or fields_inherit_ - if(strpos($id, 'fields_') === false || (strpos($id, 'fields_default_') !== false || strpos($id, 'fields_inherit_') !== false)) - { - continue; - } - - list(, $gid) = explode('fields_', $id); - - if($mybb->input['fields_default_'.$gid] == $permission && $mybb->input['fields_inherit_'.$gid] == 1) - { - $inherit[$gid] = 1; - continue; - } - $inherit[$gid] = 0; - - // If it isn't an array then it came from the javascript form - if(!is_array($permission)) - { - $permission = explode(',', $permission); - $permission = array_flip($permission); - foreach($permission as $name => $value) - { - $permission[$name] = 1; - } - } - - foreach(array('canview','canpostthreads','canpostreplys','canpostpolls') as $name) - { - if(in_array($name, $permission) || $permission[$name]) - { - $permissions[$name][$gid] = 1; - } - else - { - $permissions[$name][$gid] = 0; - } - } - } - - $cache->update_forums(); - - $canview = $permissions['canview']; - $canpostthreads = $permissions['canpostthreads']; - $canpostpolls = $permissions['canpostpolls']; - $canpostattachments = $permissions['canpostattachments']; - $canpostreplies = $permissions['canpostreplys']; - - save_quick_perms($fid); - - $plugins->run_hooks("admin_forum_management_edit_commit"); - - // Log admin action - log_admin_action($fid, $mybb->input['title']); - - flash_message($lang->success_forum_updated, 'success'); - admin_redirect("index.php?module=forum-management&fid={$fid}"); - } - } - - $page->extra_header .= "\n"; - - $page->add_breadcrumb_item($lang->edit_forum); - $page->output_header($lang->edit_forum); - - $page->output_nav_tabs($sub_tabs, 'edit_forum_settings'); - - $form = new Form("index.php?module=forum-management&action=edit", "post"); - echo $form->generate_hidden_field("fid", $fid); - - if($errors) - { - $page->output_inline_error($errors); - $forum_data = $mybb->input; - } - else - { - $forum_data['title'] = $forum_data['name']; - } - - $query = $db->simple_select("usergroups", "*", "", array("order_dir" => "name")); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = $usergroup; - } - - $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}'"); - while($existing = $db->fetch_array($query)) - { - $existing_permissions[$existing['gid']] = $existing; - } - - $types = array( - 'f' => $lang->forum, - 'c' => $lang->category - ); - - $create_a_options_f = array( - 'id' => 'forum' - ); - - $create_a_options_c = array( - 'id' => 'category' - ); - - if($forum_data['type'] == "f") - { - $create_a_options_f['checked'] = true; - } - else - { - $create_a_options_c['checked'] = true; - } - - $form_container = new FormContainer($lang->edit_forum); - $form_container->output_row($lang->forum_type, $lang->forum_type_desc, $form->generate_radio_button('type', 'f', $lang->forum, $create_a_options_f)."
\n".$form->generate_radio_button('type', 'c', $lang->category, $create_a_options_c)); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $forum_data['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->description, "", $form->generate_text_area('description', $forum_data['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->parent_forum." *", $lang->parent_forum_desc, $form->generate_forum_select('pid', $forum_data['pid'], array('id' => 'pid', 'main_option' => $lang->none)), 'pid'); - $form_container->output_row($lang->display_order, "", $form->generate_numeric_field('disporder', $forum_data['disporder'], array('id' => 'disporder', 'min' => 0)), 'disporder'); - $form_container->end(); - - $form_container = new FormContainer($lang->additional_forum_options); - $form_container->output_row($lang->forum_link, $lang->forum_link_desc, $form->generate_text_box('linkto', $forum_data['linkto'], array('id' => 'linkto')), 'linkto'); - $form_container->output_row($lang->forum_password, $lang->forum_password_desc, $form->generate_text_box('password', $forum_data['password'], array('id' => 'password')), 'password'); - - $access_options = array( - $form->generate_check_box('active', 1, $lang->forum_is_active."
\n{$lang->forum_is_active_desc}", array('checked' => $forum_data['active'], 'id' => 'active')), - $form->generate_check_box('open', 1, $lang->forum_is_open."
\n{$lang->forum_is_open_desc}", array('checked' => $forum_data['open'], 'id' => 'open')) - ); - - $form_container->output_row($lang->access_options, "", "
".implode("
", $access_options)."
"); - - $styles = array( - '0' => $lang->use_default - ); - - $query = $db->simple_select("themes", "tid,name", "name!='((master))' AND name!='((master-backup))'", array('order_by' => 'name')); - while($style = $db->fetch_array($query)) - { - $styles[$style['tid']] = $style['name']; - } - - $style_options = array( - $form->generate_check_box('overridestyle', 1, $lang->override_user_style, array('checked' => $forum_data['overridestyle'], 'id' => 'overridestyle')), - $lang->forum_specific_style."
\n".$form->generate_select_box('style', $styles, $forum_data['style'], array('id' => 'style')) - ); - - $form_container->output_row($lang->style_options, "", "
".implode("
", $style_options)."
"); - - $display_methods = array( - '0' => $lang->dont_display_rules, - '1' => $lang->display_rules_inline, - '3' => $lang->display_rules_inline_new, - '2' => $lang->display_rules_link - ); - - $forum_rules = array( - $lang->display_method."
\n".$form->generate_select_box('rulestype', $display_methods, $forum_data['rulestype'], array('checked' => $forum_data['rulestype'], 'id' => 'rulestype')), - $lang->title."
\n".$form->generate_text_box('rulestitle', $forum_data['rulestitle'], array('checked' => $forum_data['rulestitle'], 'id' => 'rulestitle')), - $lang->rules."
\n".$form->generate_text_area('rules', $forum_data['rules'], array('checked' => $forum_data['rules'], 'id' => 'rules')) - ); - - $form_container->output_row($lang->forum_rules, "", "
".implode("
", $forum_rules)."
"); - - $default_date_cut = array( - 0 => $lang->board_default, - 1 => $lang->datelimit_1day, - 5 => $lang->datelimit_5days, - 10 => $lang->datelimit_10days, - 20 => $lang->datelimit_20days, - 50 => $lang->datelimit_50days, - 75 => $lang->datelimit_75days, - 100 => $lang->datelimit_100days, - 365 => $lang->datelimit_lastyear, - 9999 => $lang->datelimit_beginning, - ); - - $default_sort_by = array( - "" => $lang->board_default, - "subject" => $lang->sort_by_subject, - "lastpost" => $lang->sort_by_lastpost, - "starter" => $lang->sort_by_starter, - "started" => $lang->sort_by_started, - "rating" => $lang->sort_by_rating, - "replies" => $lang->sort_by_replies, - "views" => $lang->sort_by_views, - ); - - $default_sort_order = array( - "" => $lang->board_default, - "asc" => $lang->sort_order_asc, - "desc" => $lang->sort_order_desc, - ); - - $view_options = array( - $lang->default_date_cut."
\n".$form->generate_select_box('defaultdatecut', $default_date_cut, $forum_data['defaultdatecut'], array('checked' => $forum_data['defaultdatecut'], 'id' => 'defaultdatecut')), - $lang->default_sort_by."
\n".$form->generate_select_box('defaultsortby', $default_sort_by, $forum_data['defaultsortby'], array('checked' => $forum_data['defaultsortby'], 'id' => 'defaultsortby')), - $lang->default_sort_order."
\n".$form->generate_select_box('defaultsortorder', $default_sort_order, $forum_data['defaultsortorder'], array('checked' => $forum_data['defaultsortorder'], 'id' => 'defaultsortorder')), - ); - - $form_container->output_row($lang->default_view_options, "", "
".implode("
", $view_options)."
"); - - $misc_options = array( - $form->generate_check_box('allowhtml', 1, $lang->allow_html, array('checked' => $forum_data['allowhtml'], 'id' => 'allowhtml')), - $form->generate_check_box('allowmycode', 1, $lang->allow_mycode, array('checked' => $forum_data['allowmycode'], 'id' => 'allowmycode')), - $form->generate_check_box('allowsmilies', 1, $lang->allow_smilies, array('checked' => $forum_data['allowsmilies'], 'id' => 'allowsmilies')), - $form->generate_check_box('allowimgcode', 1, $lang->allow_img_code, array('checked' => $forum_data['allowimgcode'], 'id' => 'allowimgcode')), - $form->generate_check_box('allowvideocode', 1, $lang->allow_video_code, array('checked' => $forum_data['allowvideocode'], 'id' => 'allowvideocode')), - $form->generate_check_box('allowpicons', 1, $lang->allow_post_icons, array('checked' => $forum_data['allowpicons'], 'id' => 'allowpicons')), - $form->generate_check_box('allowtratings', 1, $lang->allow_thread_ratings, array('checked' => $forum_data['allowtratings'], 'id' => 'allowtratings')), - $form->generate_check_box('showinjump', 1, $lang->show_forum_jump, array('checked' => $forum_data['showinjump'], 'id' => 'showinjump')), - $form->generate_check_box('usepostcounts', 1, $lang->use_postcounts, array('checked' => $forum_data['usepostcounts'], 'id' => 'usepostcounts')), - $form->generate_check_box('usethreadcounts', 1, $lang->use_threadcounts, array('checked' => $forum_data['usethreadcounts'], 'id' => 'usethreadcounts')), - $form->generate_check_box('requireprefix', 1, $lang->require_thread_prefix, array('checked' => $forum_data['requireprefix'], 'id' => 'requireprefix')) - ); - - $form_container->output_row($lang->misc_options, "", "
".implode("
", $misc_options)."
"); - $form_container->end(); - - $cached_forum_perms = $cache->read("forumpermissions"); - $field_list = array( - 'canview' => $lang->permissions_canview, - 'canpostthreads' => $lang->permissions_canpostthreads, - 'canpostreplys' => $lang->permissions_canpostreplys, - 'canpostpolls' => $lang->permissions_canpostpolls, - ); - - $field_list2 = array( - 'canview' => $lang->perm_drag_canview, - 'canpostthreads' => $lang->perm_drag_canpostthreads, - 'canpostreplys' => $lang->perm_drag_canpostreplys, - 'canpostpolls' => $lang->perm_drag_canpostpolls, - ); - - $ids = array(); - - $form_container = new FormContainer($lang->sprintf($lang->forum_permissions_in, $forum_data['name'])); - $form_container->output_row_header($lang->permissions_group, array("class" => "align_center", 'style' => 'width: 30%')); - $form_container->output_row_header($lang->overview_allowed_actions, array("class" => "align_center")); - $form_container->output_row_header($lang->overview_disallowed_actions, array("class" => "align_center")); - $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 120px', 'colspan' => 2)); - - if($mybb->request_method == "post") - { - foreach($usergroups as $usergroup) - { - if(isset($mybb->input['fields_'.$usergroup['gid']])) - { - $input_permissions = $mybb->input['fields_'.$usergroup['gid']]; - if(!is_array($input_permissions)) - { - // Convering the comma separated list from Javascript form into a variable - $input_permissions = explode(',' , $input_permissions); - } - foreach($input_permissions as $input_permission) - { - $mybb->input['permissions'][$usergroup['gid']][$input_permission] = 1; - } - } - } - } - - foreach($usergroups as $usergroup) - { - $perms = array(); - if(isset($mybb->input['default_permissions'])) - { - if($mybb->input['default_permissions'][$usergroup['gid']]) - { - if(is_array($existing_permissions) && $existing_permissions[$usergroup['gid']]) - { - $perms = $existing_permissions[$usergroup['gid']]; - $default_checked = false; - } - elseif(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]; - $default_checked = true; - } - else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]; - $default_checked = true; - } - } - - if(!$perms) - { - $perms = $usergroup; - $default_checked = true; - } - } - else - { - if(is_array($existing_permissions) && $existing_permissions[$usergroup['gid']]) - { - $perms = $existing_permissions[$usergroup['gid']]; - $default_checked = false; - } - elseif(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]; - $default_checked = true; - } - else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]; - $default_checked = true; - } - - if(!$perms) - { - $perms = $usergroup; - $default_checked = true; - } - } - - foreach($field_list as $forum_permission => $forum_perm_title) - { - if(isset($mybb->input['permissions'])) - { - if($mybb->input['permissions'][$usergroup['gid']][$forum_permission]) - { - $perms_checked[$forum_permission] = 1; - } - else - { - $perms_checked[$forum_permission] = 0; - } - } - else - { - if($perms[$forum_permission] == 1) - { - $perms_checked[$forum_permission] = 1; - } - else - { - $perms_checked[$forum_permission] = 0; - } - } - } - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - - if($default_checked) - { - $inherited_text = $lang->inherited_permission; - } - else - { - $inherited_text = $lang->custom_permission; - } - - $form_container->output_cell("{$usergroup['title']} ({$inherited_text})"); - - $field_select = "
\n"; - $field_select .= "
{$lang->enabled}
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 1) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= "
{$lang->disabled}
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 0) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_'.$usergroup['gid'])); - $field_select .= $form->generate_hidden_field("fields_inherit_".$usergroup['gid'], (int)$default_checked, array('id' => 'fields_inherit_'.$usergroup['gid'])); - $field_select .= $form->generate_hidden_field("fields_default_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_default_'.$usergroup['gid'])); - $field_select = str_replace("'", "\\'", $field_select); - $field_select = str_replace("\n", "", $field_select); - - $field_select = "\n"; - - $field_selected = array(); - foreach($field_list as $forum_permission => $permission_title) - { - $field_options[$forum_permission] = $permission_title; - if($perms_checked[$forum_permission]) - { - $field_selected[] = $forum_permission; - } - } - - $field_select .= "\n"; - $form_container->output_cell($field_select, array('colspan' => 2)); - - if(!$default_checked) - { - $form_container->output_cell("{$lang->edit_permissions}", array("class" => "align_center")); - $form_container->output_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_clear_custom_permission}')\">{$lang->clear_custom_perms}", array("class" => "align_center")); - } - else - { - $form_container->output_cell("{$lang->set_custom_perms}", array("class" => "align_center", "colspan" => 2)); - } - - $form_container->construct_row(array('id' => 'row_'.$usergroup['gid'])); - - $ids[] = $usergroup['gid']; - } - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_forum); - $form->output_submit_wrapper($buttons); - $form->end(); - - // Write in our JS based field selector - echo "\n"; - - $page->output_footer(); -} - -if($mybb->input['action'] == "deletemod") -{ - $modid = $mybb->get_input('id', MyBB::INPUT_INT); - $isgroup = $mybb->get_input('isgroup', MyBB::INPUT_INT); - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - - $query = $db->simple_select("moderators", "*", "id='{$modid}' AND isgroup = '{$isgroup}' AND fid='{$fid}'"); - $mod = $db->fetch_array($query); - - // Does the forum not exist? - if(!$mod['mid']) - { - flash_message($lang->error_invalid_moderator, 'error'); - admin_redirect("index.php?module=forum-management&fid={$fid}"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=forum-management&fid={$fid}"); - } - - $plugins->run_hooks("admin_forum_management_deletemod"); - - if($mybb->request_method == "post") - { - $mid = $mod['mid']; - if($mybb->input['isgroup']) - { - $query = $db->query(" - SELECT m.*, g.title - FROM ".TABLE_PREFIX."moderators m - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=m.id) - WHERE m.mid='{$mid}' - "); - } - else - { - $query = $db->query(" - SELECT m.*, u.username, u.usergroup - FROM ".TABLE_PREFIX."moderators m - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=m.id) - WHERE m.mid='{$mid}' - "); - } - $mod = $db->fetch_array($query); - - $db->delete_query("moderators", "mid='{$mid}'"); - - $plugins->run_hooks("admin_forum_management_deletemod_commit"); - - $cache->update_moderators(); - - $forum = get_forum($fid); - - // Log admin action - if($isgroup) - { - log_admin_action($mid, $mod['title'], $forum['fid'], $forum['name']); - } - else - { - log_admin_action($mid, $mod['username'], $forum['fid'], $forum['name']); - } - - flash_message($lang->success_moderator_deleted, 'success'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators"); - } - else - { - $page->output_confirm_action("index.php?module=forum-management&action=deletemod&fid={$mod['fid']}&uid={$mod['uid']}", $lang->confirm_moderator_deletion); - } -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("forums", "*", "fid='{$mybb->input['fid']}'"); - $forum = $db->fetch_array($query); - - // Does the forum not exist? - if(!$forum['fid']) - { - flash_message($lang->error_invalid_forum, 'error'); - admin_redirect("index.php?module=forum-management"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=forum-management"); - } - - $plugins->run_hooks("admin_forum_management_delete"); - - if($mybb->request_method == "post") - { - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - $forum_info = get_forum($fid); - - $delquery = ""; - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("forums", "*", "','|| parentlist|| ',' LIKE '%,$fid,%'"); - break; - default: - $query = $db->simple_select("forums", "*", "CONCAT(',', parentlist, ',') LIKE '%,$fid,%'"); - } - while($forum = $db->fetch_array($query)) - { - $fids[$forum['fid']] = $fid; - $delquery .= " OR fid='{$forum['fid']}'"; - } - - require_once MYBB_ROOT.'inc/class_moderation.php'; - $moderation = new Moderation(); - - // Start pagination. Limit results to 50 - $query = $db->simple_select("threads", "tid", "fid='{$fid}' {$delquery}", array("limit" => 50)); - - while($tid = $db->fetch_field($query, 'tid')) - { - $moderation->delete_thread($tid); - } - - // Check whether all threads have been deleted - $query = $db->simple_select("threads", "tid", "fid='{$fid}' {$delquery}"); - - if($db->num_rows($query) > 0) - { - $page->output_header(); - - $form = new Form("index.php?module=forum-management", 'post'); - - echo $form->generate_hidden_field("fid", $fid); - echo $form->generate_hidden_field("action", "delete"); - echo "
\n"; - echo "

{$lang->confirm_proceed_deletion}

\n"; - echo "
\n"; - echo ""; - echo "

\n"; - echo $form->generate_submit_button($lang->proceed, array('class' => 'button_yes', 'id' => 'proceed_button')); - echo "

\n"; - echo "
\n"; - - $form->end(); - - $page->output_footer(); - exit; - } - - // End pagination - - // Delete the forum - $db->delete_query("forums", "fid='$fid'"); - - // Delete subforums - switch($db->type) - { - case "pgsql": - case "sqlite": - $db->delete_query("forums", "','||parentlist||',' LIKE '%,$fid,%'"); - break; - default: - $db->delete_query("forums", "CONCAT(',',parentlist,',') LIKE '%,$fid,%'"); - } - - $db->delete_query('moderators', "fid='{$fid}' {$delquery}"); - $db->delete_query('forumsubscriptions', "fid='{$fid}' {$delquery}"); - $db->delete_query('forumpermissions', "fid='{$fid}' {$delquery}"); - $db->delete_query('announcements', "fid='{$fid}' {$delquery}"); - $db->delete_query('forumsread', "fid='{$fid}' {$delquery}"); - - $plugins->run_hooks("admin_forum_management_delete_commit"); - - $cache->update_forums(); - $cache->update_moderators(); - $cache->update_forumpermissions(); - $cache->update_forumsdisplay(); - - // Log admin action - log_admin_action($forum_info['fid'], $forum_info['name']); - - flash_message($lang->success_forum_deleted, 'success'); - admin_redirect("index.php?module=forum-management"); - } - else - { - $page->output_confirm_action("index.php?module=forum-management&action=delete&fid={$forum['fid']}", $lang->confirm_forum_deletion); - } -} - -if(!$mybb->input['action']) -{ - if(!isset($mybb->input['fid'])) - { - $mybb->input['fid'] = 0; - } - - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - if($fid) - { - $forum = get_forum($fid); - } - - $plugins->run_hooks("admin_forum_management_start"); - - if($mybb->request_method == "post") - { - if($mybb->input['update'] == "permissions") - { - $inherit = array(); - foreach($mybb->input as $id => $permission) - { - // Make sure we're only skipping inputs that don't start with "fields_" and aren't fields_default_ or fields_inherit_ - if(strpos($id, 'fields_') === false || (strpos($id, 'fields_default_') !== false || strpos($id, 'fields_inherit_') !== false)) - { - continue; - } - - list(, $gid) = explode('fields_', $id); - - if($mybb->input['fields_default_'.$gid] == $permission && $mybb->input['fields_inherit_'.$gid] == 1) - { - $inherit[$gid] = 1; - continue; - } - $inherit[$gid] = 0; - - // If it isn't an array then it came from the javascript form - if(!is_array($permission)) - { - $permission = explode(',', $permission); - $permission = array_flip($permission); - foreach($permission as $name => $value) - { - $permission[$name] = 1; - } - } - foreach(array('canview','canpostthreads','canpostreplys','canpostpolls') as $name) - { - if($permission[$name]) - { - $permissions[$name][$gid] = 1; - } - else - { - $permissions[$name][$gid] = 0; - } - } - } - - $canview = $permissions['canview']; - $canpostthreads = $permissions['canpostthreads']; - $canpostpolls = $permissions['canpostpolls']; - $canpostattachments = $permissions['canpostattachments']; - $canpostreplies = $permissions['canpostreplys']; - - save_quick_perms($fid); - - $plugins->run_hooks("admin_forum_management_start_permissions_commit"); - - $cache->update_forums(); - - // Log admin action - log_admin_action('quickpermissions', $fid, $forum['name']); - - flash_message($lang->success_forum_permissions_updated, 'success'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_permissions"); - } - elseif($mybb->input['add'] == "moderators") - { - $forum = get_forum($fid); - if(!$forum) - { - flash_message($lang->error_invalid_forum, 'error'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators"); - } - if(!empty($mybb->input['usergroup'])) - { - $isgroup = 1; - $gid = $mybb->get_input('usergroup', MyBB::INPUT_INT); - - if(!$groupscache[$gid]) - { - // Didn't select a valid moderator - flash_message($lang->error_moderator_not_found, 'error'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators"); - } - - $newmod = array( - "id" => $gid, - "name" => $groupscache[$gid]['title'] - ); - } - else - { - $options = array( - 'fields' => array('uid AS id', 'username AS name') - ); - $newmod = get_user_by_username($mybb->input['username'], $options); - - if(empty($newmod['id'])) - { - flash_message($lang->error_moderator_not_found, 'error'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators"); - } - - $isgroup = 0; - } - - if($newmod['id']) - { - $query = $db->simple_select("moderators", "id", "id='".$newmod['id']."' AND fid='".$fid."' AND isgroup='{$isgroup}'", array('limit' => 1)); - - if(!$db->num_rows($query)) - { - $new_mod = array( - "fid" => $fid, - "id" => $newmod['id'], - "isgroup" => $isgroup, - "caneditposts" => 1, - "cansoftdeleteposts" => 1, - "canrestoreposts" => 1, - "candeleteposts" => 1, - "cansoftdeletethreads" => 1, - "canrestorethreads" => 1, - "candeletethreads" => 1, - "canviewips" => 1, - "canviewunapprove" => 1, - "canviewdeleted" => 1, - "canopenclosethreads" => 1, - "canstickunstickthreads" => 1, - "canapproveunapprovethreads" => 1, - "canapproveunapproveposts" => 1, - "canapproveunapproveattachs" => 1, - "canmanagethreads" => 1, - "canmanagepolls" => 1, - "canpostclosedthreads" => 1, - "canmovetononmodforum" => 1, - "canusecustomtools" => 1, - "canmanageannouncements" => 1, - "canmanagereportedposts" => 1, - "canviewmodlog" => 1 - ); - - $mid = $db->insert_query("moderators", $new_mod); - - if(!$isgroup) - { - $db->update_query("users", array('usergroup' => 6), "uid='{$newmod['id']}' AND usergroup='2'"); - } - - $plugins->run_hooks("admin_forum_management_start_moderators_commit"); - - $cache->update_moderators(); - - // Log admin action - log_admin_action('addmod', $mid, $newmod['name'], $fid, $forum['name']); - - flash_message($lang->success_moderator_added, 'success'); - admin_redirect("index.php?module=forum-management&action=editmod&mid={$mid}"); - } - else - { - flash_message($lang->error_moderator_already_added, 'error'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators"); - } - } - else - { - flash_message($lang->error_moderator_not_found, 'error'); - admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators"); - } - } - else - { - if(!empty($mybb->input['disporder']) && is_array($mybb->input['disporder'])) - { - foreach($mybb->input['disporder'] as $update_fid => $order) - { - $db->update_query("forums", array('disporder' => (int)$order), "fid='".(int)$update_fid."'"); - } - - $plugins->run_hooks("admin_forum_management_start_disporder_commit"); - - $cache->update_forums(); - - // Log admin action - log_admin_action('orders', $forum['fid'], $forum['name']); - - flash_message($lang->success_forum_disporder_updated, 'success'); - admin_redirect("index.php?module=forum-management&fid=".$mybb->input['fid']); - } - } - } - - $page->extra_header .= "\n"; - - if($fid) - { - $page->add_breadcrumb_item($lang->view_forum, "index.php?module=forum-management"); - } - - $page->output_header($lang->forum_management); - - if($fid) - { - $page->output_nav_tabs($sub_tabs, 'view_forum'); - } - else - { - $page->output_nav_tabs($sub_tabs, 'forum_management'); - } - - $form = new Form("index.php?module=forum-management", "post", "management"); - echo $form->generate_hidden_field("fid", $mybb->input['fid']); - - if($fid) - { - $tabs = array( - 'subforums' => $lang->subforums, - 'permissions' => $lang->forum_permissions, - 'moderators' => $lang->moderators, - ); - $tabs = $plugins->run_hooks("admin_forum_management_start_graph_tabs", $tabs); - $page->output_tab_control($tabs); - - echo "
\n"; - if(!isset($forum_cache) || !is_array($forum_cache)) - { - cache_forums(); - } - $form_container = new FormContainer($lang->sprintf($lang->in_forums, $forum_cache[$fid]['name'])); - } - else - { - $form_container = new FormContainer($lang->manage_forums); - } - $form_container->output_row_header($lang->forum); - $form_container->output_row_header($lang->order, array("class" => "align_center", 'width' => '5%')); - $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 200px')); - - build_admincp_forums_list($form_container, $fid); - - $submit_options = array(); - - if($form_container->num_rows() == 0) - { - $form_container->output_cell($lang->no_forums, array('colspan' => 3)); - $form_container->construct_row(); - $submit_options = array('disabled' => true); - } - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->update_forum_orders, $submit_options); - $buttons[] = $form->generate_reset_button($lang->reset); - - $form->output_submit_wrapper($buttons); - - if(!$fid) - { - $form->end(); - } - - if($fid) - { - echo "
\n"; - $form->end(); - - $query = $db->simple_select("usergroups", "*", "", array("order" => "name")); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = $usergroup; - } - - $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}'"); - while($existing = $db->fetch_array($query)) - { - $existing_permissions[$existing['gid']] = $existing; - } - - $cached_forum_perms = $cache->read("forumpermissions"); - $field_list = array( - 'canview' => $lang->permissions_canview, - 'canpostthreads' => $lang->permissions_canpostthreads, - 'canpostreplys' => $lang->permissions_canpostreplys, - 'canpostpolls' => $lang->permissions_canpostpolls, - ); - - $field_list2 = array( - 'canview' => $lang->perm_drag_canview, - 'canpostthreads' => $lang->perm_drag_canpostthreads, - 'canpostreplys' => $lang->perm_drag_canpostreplys, - 'canpostpolls' => $lang->perm_drag_canpostpolls, - ); - - $ids = array(); - - $form = new Form("index.php?module=forum-management", "post", "management"); - echo $form->generate_hidden_field("fid", $mybb->input['fid']); - echo $form->generate_hidden_field("update", "permissions"); - - echo "
\n"; - - $form_container = new FormContainer($lang->sprintf($lang->forum_permissions_in, $forum_cache[$fid]['name'])); - $form_container->output_row_header($lang->permissions_group, array("class" => "align_center", 'style' => 'width: 30%')); - $form_container->output_row_header($lang->overview_allowed_actions, array("class" => "align_center")); - $form_container->output_row_header($lang->overview_disallowed_actions, array("class" => "align_center")); - $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 120px', 'colspan' => 2)); - foreach($usergroups as $usergroup) - { - $perms = array(); - if(isset($mybb->input['default_permissions'])) - { - if($mybb->input['default_permissions'][$usergroup['gid']]) - { - if(is_array($existing_permissions) && $existing_permissions[$usergroup['gid']]) - { - $perms = $existing_permissions[$usergroup['gid']]; - $default_checked = false; - } - elseif(is_array($cached_forum_perms) && $cached_forum_perms[$forum['fid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum['fid']][$usergroup['gid']]; - $default_checked = true; - } - else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum['pid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum['pid']][$usergroup['gid']]; - $default_checked = true; - } - } - - if(!$perms) - { - $perms = $usergroup; - $default_checked = true; - } - } - else - { - if(isset($existing_permissions) && is_array($existing_permissions) && $existing_permissions[$usergroup['gid']]) - { - $perms = $existing_permissions[$usergroup['gid']]; - $default_checked = false; - } - elseif(is_array($cached_forum_perms) && isset($cached_forum_perms[$forum['fid']]) && $cached_forum_perms[$forum['fid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum['fid']][$usergroup['gid']]; - $default_checked = true; - } - else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum['pid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum['pid']][$usergroup['gid']]; - $default_checked = true; - } - - if(!$perms) - { - $perms = $usergroup; - $default_checked = true; - } - } - foreach($field_list as $forum_permission => $forum_perm_title) - { - if(isset($mybb->input['permissions'])) - { - if($mybb->input['permissions'][$usergroup['gid']][$forum_permission]) - { - $perms_checked[$forum_permission] = 1; - } - else - { - $perms_checked[$forum_permission] = 0; - } - } - else - { - if($perms[$forum_permission] == 1) - { - $perms_checked[$forum_permission] = 1; - } - else - { - $perms_checked[$forum_permission] = 0; - } - } - } - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - - if($default_checked == 1) - { - $inherited_text = $lang->inherited_permission; - } - else - { - $inherited_text = $lang->custom_permission; - } - - $form_container->output_cell("{$usergroup['title']} ({$inherited_text})"); - - $field_select = "
\n"; - $field_select .= "
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 1) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= "
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 0) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_'.$usergroup['gid'])); - $field_select .= $form->generate_hidden_field("fields_inherit_".$usergroup['gid'], (int)$default_checked, array('id' => 'fields_inherit_'.$usergroup['gid'])); - $field_select .= $form->generate_hidden_field("fields_default_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, '1')), array('id' => 'fields_default_'.$usergroup['gid'])); - $field_select = str_replace("'", "\\'", $field_select); - $field_select = str_replace("\n", "", $field_select); - - $field_select = "\n"; - - $field_selected = array(); - foreach($field_list as $forum_permission => $permission_title) - { - $field_options[$forum_permission] = $permission_title; - if($perms_checked[$forum_permission]) - { - $field_selected[] = $forum_permission; - } - } - - $field_select .= "\n"; - $form_container->output_cell($field_select, array('colspan' => 2)); - - if(!$default_checked) - { - $form_container->output_cell("{$lang->edit_permissions}", array("class" => "align_center")); - $form_container->output_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_clear_custom_permission}')\">{$lang->clear_custom_perms}", array("class" => "align_center")); - } - else - { - $form_container->output_cell("{$lang->set_custom_perms}", array("class" => "align_center", "colspan" => 2)); - } - $form_container->construct_row(array('id' => 'row_'.$usergroup['gid'])); - - $ids[] = $usergroup['gid']; - } - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->update_forum_permissions); - $buttons[] = $form->generate_reset_button($lang->reset); - - $form->output_submit_wrapper($buttons); - - // Write in our JS based field selector - echo "\n"; - - echo "
\n"; - $form->end(); - echo "
\n"; - $form_container = new FormContainer($lang->sprintf($lang->moderators_assigned_to, $forum_cache[$fid]['name'])); - $form_container->output_row_header($lang->name, array('width' => '75%')); - $form_container->output_row_header($lang->controls, array("class" => "align_center", 'style' => 'width: 200px', 'colspan' => 2)); - $query = $db->query(" - SELECT m.mid, m.id, m.isgroup, u.username, g.title - FROM ".TABLE_PREFIX."moderators m - LEFT JOIN ".TABLE_PREFIX."users u ON (m.isgroup='0' AND m.id=u.uid) - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (m.isgroup='1' AND m.id=g.gid) - WHERE fid='{$fid}' - ORDER BY m.isgroup DESC, u.username, g.title - "); - while($moderator = $db->fetch_array($query)) - { - if($moderator['isgroup']) - { - $moderator['img'] = "style}/images/icons/group.png\" alt=\"{$lang->group}\" title=\"{$lang->group}\" />"; - $form_container->output_cell("{$moderator['img']} ".htmlspecialchars_uni($moderator['title'])." ({$lang->usergroup} {$moderator['id']})"); - $form_container->output_cell("{$lang->edit}", array("class" => "align_center")); - $form_container->output_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_moderator_deletion}')\">{$lang->delete}", array("class" => "align_center")); - } - else - { - $moderator['img'] = "style}/images/icons/user.png\" alt=\"{$lang->user}\" title=\"{$lang->user}\" />"; - $form_container->output_cell("{$moderator['img']} ".htmlspecialchars_uni($moderator['username']).""); - $form_container->output_cell("{$lang->edit}", array("class" => "align_center")); - $form_container->output_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_moderator_deletion}')\">{$lang->delete}", array("class" => "align_center")); - } - $form_container->construct_row(); - } - - if($form_container->num_rows() == 0) - { - $form_container->output_cell($lang->no_moderators, array('colspan' => 3)); - $form_container->construct_row(); - } - $form_container->end(); - - // Users - $buttons = array(); - $form = new Form("index.php?module=forum-management", "post", "management"); - echo $form->generate_hidden_field("fid", $mybb->input['fid']); - echo $form->generate_hidden_field("add", "moderators"); - - // Usergroup Moderator - if(!is_array($usergroups)) - { - $usergroups = $groupscache; - } - - foreach($usergroups as $group) - { - $modgroups[$group['gid']] = $lang->usergroup." ".$group['gid'].": ".htmlspecialchars_uni($group['title']); - } - - if(!isset($mybb->input['usergroup'])) - { - $mybb->input['usergroup'] = ''; - } - - if(!isset($mybb->input['username'])) - { - $mybb->input['username'] = ''; - } - - $form_container = new FormContainer($lang->add_usergroup_as_moderator); - $form_container->output_row($lang->usergroup." *", $lang->moderator_usergroup_desc, $form->generate_select_box('usergroup', $modgroups, $mybb->input['usergroup'], array('id' => 'usergroup')), 'usergroup'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->add_usergroup_moderator); - $form->output_submit_wrapper($buttons); - $form->end(); - echo "
"; - - $form = new Form("index.php?module=forum-management", "post", "management"); - echo $form->generate_hidden_field("fid", $mybb->input['fid']); - echo $form->generate_hidden_field("add", "moderators"); - $form_container = new FormContainer($lang->add_user_as_moderator); - $form_container->output_row($lang->username." *", $lang->moderator_username_desc, $form->generate_text_box('username', htmlspecialchars_uni($mybb->get_input('username')), array('id' => 'username')), 'username'); - $form_container->end(); - - // Autocompletion for usernames - echo ' - - - '; - - $buttons = array($form->generate_submit_button($lang->add_user_moderator)); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo "
\n"; - - $plugins->run_hooks("admin_forum_management_start_graph"); - } - - $page->output_footer(); -} - -/** - * @param DefaultFormContainer $form_container - * @param int $pid - * @param int $depth - */ -function build_admincp_forums_list(&$form_container, $pid=0, $depth=1) -{ - global $mybb, $lang, $db, $sub_forums; - static $forums_by_parent; - - if(!is_array($forums_by_parent)) - { - $forum_cache = cache_forums(); - - foreach($forum_cache as $forum) - { - $forums_by_parent[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - } - - if(!is_array($forums_by_parent[$pid])) - { - return; - } - - foreach($forums_by_parent[$pid] as $children) - { - foreach($children as $forum) - { - $forum['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['name']); // Fix & but allow unicode - - if($forum['active'] == 0) - { - $forum['name'] = "".$forum['name'].""; - } - - if($forum['type'] == "c" && ($depth == 1 || $depth == 2)) - { - $sub_forums = ''; - if(isset($forums_by_parent[$forum['fid']]) && $depth == 2) - { - build_admincp_forums_list($form_container, $forum['fid'], $depth+1); - } - if($sub_forums) - { - $sub_forums = "
{$lang->sub_forums}: {$sub_forums}"; - } - - $form_container->output_cell("
{$forum['name']}{$sub_forums}
"); - - $form_container->output_cell("", array("class" => "align_center")); - - $popup = new PopupMenu("forum_{$forum['fid']}", $lang->options); - $popup->add_item($lang->edit_forum, "index.php?module=forum-management&action=edit&fid={$forum['fid']}"); - $popup->add_item($lang->subforums, "index.php?module=forum-management&fid={$forum['fid']}"); - $popup->add_item($lang->moderators, "index.php?module=forum-management&fid={$forum['fid']}#tab_moderators"); - $popup->add_item($lang->permissions, "index.php?module=forum-management&fid={$forum['fid']}#tab_permissions"); - $popup->add_item($lang->add_child_forum, "index.php?module=forum-management&action=add&pid={$forum['fid']}"); - $popup->add_item($lang->copy_forum, "index.php?module=forum-management&action=copy&fid={$forum['fid']}"); - $popup->add_item($lang->delete_forum, "index.php?module=forum-management&action=delete&fid={$forum['fid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_forum_deletion}')"); - - $form_container->output_cell($popup->fetch(), array("class" => "align_center")); - - $form_container->construct_row(); - - // Does this category have any sub forums? - if($forums_by_parent[$forum['fid']]) - { - build_admincp_forums_list($form_container, $forum['fid'], $depth+1); - } - } - elseif($forum['type'] == "f" && ($depth == 1 || $depth == 2)) - { - if($forum['description']) - { - $forum['description'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['description']); - $forum['description'] = "
".$forum['description'].""; - } - - $sub_forums = ''; - if(isset($forums_by_parent[$forum['fid']]) && $depth == 2) - { - build_admincp_forums_list($form_container, $forum['fid'], $depth+1); - } - if($sub_forums) - { - $sub_forums = "
{$lang->sub_forums}: {$sub_forums}"; - } - - $form_container->output_cell("
{$forum['name']}{$forum['description']}{$sub_forums}
"); - - $form_container->output_cell("", array("class" => "align_center")); - - $popup = new PopupMenu("forum_{$forum['fid']}", $lang->options); - $popup->add_item($lang->edit_forum, "index.php?module=forum-management&action=edit&fid={$forum['fid']}"); - $popup->add_item($lang->subforums, "index.php?module=forum-management&fid={$forum['fid']}"); - $popup->add_item($lang->moderators, "index.php?module=forum-management&fid={$forum['fid']}#tab_moderators"); - $popup->add_item($lang->permissions, "index.php?module=forum-management&fid={$forum['fid']}#tab_permissions"); - $popup->add_item($lang->add_child_forum, "index.php?module=forum-management&action=add&pid={$forum['fid']}"); - $popup->add_item($lang->copy_forum, "index.php?module=forum-management&action=copy&fid={$forum['fid']}"); - $popup->add_item($lang->delete_forum, "index.php?module=forum-management&action=delete&fid={$forum['fid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_forum_deletion}')"); - - $form_container->output_cell($popup->fetch(), array("class" => "align_center")); - - $form_container->construct_row(); - - if(isset($forums_by_parent[$forum['fid']]) && $depth == 1) - { - build_admincp_forums_list($form_container, $forum['fid'], $depth+1); - } - } - else if($depth == 3) - { - if($donecount < $mybb->settings['subforumsindex']) - { - $sub_forums .= "{$comma} {$forum['name']}"; - $comma = $lang->comma; - } - - // Have we reached our max visible subforums? put a nice message and break out of the loop - ++$donecount; - if($donecount == $mybb->settings['subforumsindex']) - { - if(subforums_count($forums_by_parent[$pid]) > $donecount) - { - $sub_forums .= $comma.$lang->sprintf($lang->more_subforums, (subforums_count($forums_by_parent[$pid]) - $donecount)); - return; - } - } - } - } - } -} - -/** - * @param int $gid - * @param int $fid - * - * @return string - */ -function retrieve_single_permissions_row($gid, $fid) -{ - global $mybb, $lang, $cache, $db; - - $query = $db->simple_select("usergroups", "*", "gid='{$gid}'"); - $usergroup = $db->fetch_array($query); - - $query = $db->simple_select("forums", "*", "fid='{$fid}'"); - $forum_data = $db->fetch_array($query); - - $query = $db->simple_select("forumpermissions", "*", "fid='{$fid}'"); - while($existing = $db->fetch_array($query)) - { - $existing_permissions[$existing['gid']] = $existing; - } - - $cached_forum_perms = $cache->read("forumpermissions"); - $field_list = array( - 'canview' => $lang->permissions_canview, - 'canpostthreads' => $lang->permissions_canpostthreads, - 'canpostreplys' => $lang->permissions_canpostreplys, - 'canpostpolls' => $lang->permissions_canpostpolls, - ); - - $field_list2 = array( - 'canview' => $lang->perm_drag_canview, - 'canpostthreads' => $lang->perm_drag_canpostthreads, - 'canpostreplys' => $lang->perm_drag_canpostreplys, - 'canpostpolls' => $lang->perm_drag_canpostpolls, - ); - - $form = new Form('', '', "", 0, "", true); - $form_container = new FormContainer(); - - $perms = array(); - - if(is_array($existing_permissions) && $existing_permissions[$usergroup['gid']]) - { - $perms = $existing_permissions[$usergroup['gid']]; - $default_checked = false; - } - elseif(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['fid']][$usergroup['gid']]; - $default_checked = true; - } - else if(is_array($cached_forum_perms) && $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]) - { - $perms = $cached_forum_perms[$forum_data['pid']][$usergroup['gid']]; - $default_checked = true; - } - - if(!$perms) - { - $perms = $usergroup; - $default_checked = true; - } - - foreach($field_list as $forum_permission => $forum_perm_title) - { - if($perms[$forum_permission] == 1) - { - $perms_checked[$forum_permission] = 1; - } - else - { - $perms_checked[$forum_permission] = 0; - } - } - - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - - if($default_checked == 1) - { - $inherited_text = $lang->inherited_permission; - } - else - { - $inherited_text = $lang->custom_permission; - } - - $form_container->output_cell("{$usergroup['title']} ({$inherited_text})"); - - $field_select = "
\n"; - $field_select .= "
{$lang->enabled}
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 1) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= "
{$lang->disabled}
    \n"; - foreach($perms_checked as $perm => $value) - { - if($value == 0) - { - $field_select .= "
  • {$field_list2[$perm]}
  • "; - } - } - $field_select .= "
\n"; - $field_select .= $form->generate_hidden_field("fields_".$usergroup['gid'], @implode(",", @array_keys($perms_checked, 1)), array('id' => 'fields_'.$usergroup['gid'])); - $field_select = str_replace("\n", "", $field_select); - - foreach($field_list as $forum_permission => $permission_title) - { - $field_options[$forum_permission] = $permission_title; - } - $form_container->output_cell($field_select, array('colspan' => 2)); - - if(!$default_checked) - { - $form_container->output_cell("{$lang->edit_permissions}", array("class" => "align_center")); - $form_container->output_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_clear_custom_permission}')\">{$lang->clear_custom_perms}", array("class" => "align_center")); - } - else - { - $form_container->output_cell("{$lang->set_custom_perms}", array("class" => "align_center", "colspan" => 2)); - } - $form_container->construct_row(); - return $form_container->output_row_cells(0, true); -} - diff --git a/html/forums/admin/modules/forum/moderation_queue.php b/html/forums/admin/modules/forum/moderation_queue.php deleted file mode 100644 index dab78ac..0000000 --- a/html/forums/admin/modules/forum/moderation_queue.php +++ /dev/null @@ -1,567 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->moderation_queue, "index.php?module=forum-moderation_queue"); - -$sub_tabs['threads'] = array( - 'title' => $lang->threads, - 'link' => "index.php?module=forum-moderation_queue&type=threads", - 'description' => $lang->threads_desc -); - -$sub_tabs['posts'] = array( - 'title' => $lang->posts, - 'link' => "index.php?module=forum-moderation_queue&type=posts", - 'description' => $lang->posts_desc -); - -$sub_tabs['attachments'] = array( - 'title' => $lang->attachments, - 'link' => "index.php?module=forum-moderation_queue&type=attachments", - 'description' => $lang->attachments_desc -); - -$plugins->run_hooks("admin_forum_moderation_queue_begin"); - -// Actually performing our moderation choices -if($mybb->request_method == "post") -{ - $plugins->run_hooks("admin_forum_moderation_queue_commit"); - - require_once MYBB_ROOT."inc/functions_upload.php"; - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - - if(is_array($mybb->input['threads'])) - { - $threads_to_approve = $threads_to_delete = array(); - // Fetch threads - $query = $db->simple_select("threads", "tid", "tid IN (".implode(",", array_map("intval", array_keys($mybb->input['threads'])))."){$flist}"); - while($thread = $db->fetch_array($query)) - { - $action = $mybb->input['threads'][$thread['tid']]; - if($action == "approve") - { - $threads_to_approve[] = $thread['tid']; - } - else if($action == "delete" && $mybb->settings['soft_delete'] != 1) - { - $moderation->delete_thread($thread['tid']); - } - else if($action == "delete") - { - $threads_to_delete[] = $thread['tid']; - } - } - if(!empty($threads_to_approve)) - { - $moderation->approve_threads($threads_to_approve); - } - if(!empty($threads_to_delete)) - { - $moderation->soft_delete_threads($threads_to_delete); - } - - $plugins->run_hooks("admin_forum_moderation_queue_threads_commit"); - - // Log admin action - log_admin_action('threads'); - - flash_message($lang->success_threads, 'success'); - admin_redirect("index.php?module=forum-moderation_queue&type=threads"); - } - else if(is_array($mybb->input['posts'])) - { - $posts_to_approve = $posts_to_delete = array(); - // Fetch posts - $query = $db->simple_select("posts", "pid", "pid IN (".implode(",", array_map("intval", array_keys($mybb->input['posts'])))."){$flist}"); - while($post = $db->fetch_array($query)) - { - $action = $mybb->input['posts'][$post['pid']]; - if($action == "approve") - { - $posts_to_approve[] = $post['pid']; - } - else if($action == "delete" && $mybb->settings['soft_delete'] != 1) - { - $moderation->delete_post($post['pid']); - } - else if($action == "delete") - { - $posts_to_delete[] = $post['pid']; - } - } - if(!empty($posts_to_approve)) - { - $moderation->approve_posts($posts_to_approve); - } - if(!empty($posts_to_delete)) - { - $moderation->soft_delete_posts($posts_to_delete); - } - - $plugins->run_hooks("admin_forum_moderation_queue_posts_commit"); - - // Log admin action - log_admin_action('posts'); - - flash_message($lang->success_posts, 'success'); - admin_redirect("index.php?module=forum-moderation_queue&type=posts"); - - } - else if(is_array($mybb->input['attachments'])) - { - $query = $db->simple_select("attachments", "aid, pid", "aid IN (".implode(",", array_map("intval", array_keys($mybb->input['attachments'])))."){$flist}"); - while($attachment = $db->fetch_array($query)) - { - $action = $mybb->input['attachments'][$attachment['aid']]; - if($action == "approve") - { - $db->update_query("attachments", array("visible" => 1), "aid='{$attachment['aid']}'"); - } - else if($action == "delete") - { - remove_attachment($attachment['pid'], '', $attachment['aid']); - } - } - - $plugins->run_hooks("admin_forum_moderation_queue_attachments_commit"); - - // Log admin action - log_admin_action('attachments'); - - flash_message($lang->success_attachments, 'success'); - admin_redirect("index.php?module=forum-moderation_queue&type=attachments"); - } -} - -$all_options = "\n"; - -// Threads awaiting moderation -if($mybb->input['type'] == "threads" || !$mybb->input['type']) -{ - $plugins->run_hooks("admin_forum_moderation_queue_threads"); - - $forum_cache = $cache->read("forums"); - - $query = $db->simple_select("threads", "COUNT(tid) AS unapprovedthreads", "visible=0"); - $unapproved_threads = $db->fetch_field($query, "unapprovedthreads"); - - if($unapproved_threads > 0) - { - // Figure out if we need to display multiple pages. - $per_page = 15; - if($mybb->input['page'] > 0) - { - $current_page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($current_page-1)*$per_page; - $pages = $unapproved_threads / $per_page; - $pages = ceil($pages); - if($current_page > $pages) - { - $start = 0; - $current_page = 1; - } - } - else - { - $start = 0; - $current_page = 1; - } - - $pagination = draw_admin_pagination($current_page, $per_page, $unapproved_threads, "index.php?module=forum-moderation_queue&page={page}"); - - $page->add_breadcrumb_item($lang->threads_awaiting_moderation); - $page->output_header($lang->threads_awaiting_moderation); - $page->output_nav_tabs($sub_tabs, "threads"); - - $form = new Form("index.php?module=forum-moderation_queue", "post"); - - $table = new Table; - $table->construct_header($lang->subject); - $table->construct_header($lang->author, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->posted, array("class" => "align_center", "width" => "20%")); - - $query = $db->query(" - SELECT t.tid, t.dateline, t.fid, t.subject, t.username AS threadusername, p.message AS postmessage, u.username AS username, t.uid - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=t.firstpost) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=t.uid) - WHERE t.visible='0' - ORDER BY t.lastpost DESC - LIMIT {$start}, {$per_page} - "); - while($thread = $db->fetch_array($query)) - { - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - $thread['threadlink'] = get_thread_link($thread['tid']); - $thread['forumlink'] = get_forum_link($thread['fid']); - $forum_name = $forum_cache[$thread['fid']]['name']; - $threaddate = my_date('relative', $thread['dateline']); - - if($thread['username'] == "") - { - if($thread['threadusername'] != "") - { - $profile_link = $thread['threadusername']; - } - else - { - $profile_link = htmlspecialchars_uni($lang->guest); - } - } - else - { - $profile_link = build_profile_link(htmlspecialchars_uni($thread['username']), $thread['uid'], "_blank"); - } - - $thread['postmessage'] = nl2br(htmlspecialchars_uni($thread['postmessage'])); - - $table->construct_cell("{$thread['subject']}"); - $table->construct_cell($profile_link, array("class" => "align_center")); - $table->construct_cell($threaddate, array("class" => "align_center")); - $table->construct_row(); - - $controls = "
\n"; - $controls .= $form->generate_radio_button("threads[{$thread['tid']}]", "ignore", $lang->ignore, array('class' => 'radio_ignore', 'checked' => true))." "; - $controls .= $form->generate_radio_button("threads[{$thread['tid']}]", "delete", $lang->delete, array('class' => 'radio_delete', 'checked' => false))." "; - $controls .= $form->generate_radio_button("threads[{$thread['tid']}]", "approve", $lang->approve, array('class' => 'radio_approve', 'checked' => false)); - $controls .= "
"; - - $forum = "{$lang->forum} {$forum_name}
"; - - $table->construct_cell("
{$controls}
{$forum}
{$thread['postmessage']}
", array("colspan" => 3)); - $table->construct_row(); - } - - $table->output($lang->threads_awaiting_moderation); - echo $all_options; - echo $pagination; - - $buttons[] = $form->generate_submit_button($lang->perform_action); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo ''; - - $page->output_footer(); - } -} - -// Posts awaiting moderation -if($mybb->input['type'] == "posts" || $mybb->input['type'] == "") -{ - $plugins->run_hooks("admin_forum_moderation_queue_posts"); - - $forum_cache = $cache->read("forums"); - - $query = $db->query(" - SELECT COUNT(pid) AS unapprovedposts - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.visible='0' AND t.firstpost != p.pid - "); - $unapproved_posts = $db->fetch_field($query, "unapprovedposts"); - - if($unapproved_posts > 0) - { - // Figure out if we need to display multiple pages. - $per_page = 15; - if($mybb->input['page'] > 0) - { - $current_page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($current_page-1)*$per_page; - $pages = $unapproved_posts / $per_page; - $pages = ceil($pages); - if($current_page > $pages) - { - $start = 0; - $current_page = 1; - } - } - else - { - $start = 0; - $current_page = 1; - } - - $pagination = draw_admin_pagination($current_page, $per_page, $unapproved_posts, "index.php?module=forum-moderation_queue&type=posts&page={page}"); - - - $page->add_breadcrumb_item($lang->posts_awaiting_moderation); - $page->output_header($lang->posts_awaiting_moderation); - $page->output_nav_tabs($sub_tabs, "posts"); - - $form = new Form("index.php?module=forum-moderation_queue", "post"); - - $table = new Table; - $table->construct_header($lang->subject); - $table->construct_header($lang->author, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->posted, array("class" => "align_center", "width" => "20%")); - - $query = $db->query(" - SELECT p.pid, p.subject, p.message, p.dateline, p.username AS postusername, t.subject AS threadsubject, t.tid, u.username, p.uid, t.fid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.visible='0' AND t.firstpost != p.pid - ORDER BY p.dateline DESC - LIMIT {$start}, {$per_page} - "); - while($post = $db->fetch_array($query)) - { - $altbg = alt_trow(); - $post['threadsubject'] = htmlspecialchars_uni($post['threadsubject']); - $post['subject'] = htmlspecialchars_uni($post['subject']); - - if(!$post['subject']) - { - $post['subject'] = $lang->re." ".$post['threadsubject']; - } - - $post['postlink'] = get_post_link($post['pid'], $post['tid']); - $post['threadlink'] = get_thread_link($post['tid']); - $post['forumlink'] = get_forum_link($post['fid']); - $forum_name = $forum_cache[$post['fid']]['name']; - $postdate = my_date('relative', $post['dateline']); - - if($post['username'] == "") - { - if($post['postusername'] != "") - { - $profile_link = $post['postusername']; - } - else - { - $profile_link = $lang->guest; - } - } - else - { - $profile_link = build_profile_link(htmlspecialchars_uni($post['username']), $post['uid'], "_blank"); - } - - $post['message'] = nl2br(htmlspecialchars_uni($post['message'])); - - $table->construct_cell("{$post['subject']}"); - $table->construct_cell($profile_link, array("class" => "align_center")); - $table->construct_cell($postdate, array("class" => "align_center")); - $table->construct_row(); - - $controls = "
\n"; - $controls .= $form->generate_radio_button("posts[{$post['pid']}]", "ignore", $lang->ignore, array('class' => 'radio_ignore', 'checked' => true))." "; - $controls .= $form->generate_radio_button("posts[{$post['pid']}]", "delete",$lang->delete, array('class' => 'radio_delete', 'checked' => false))." "; - $controls .= $form->generate_radio_button("posts[{$post['pid']}]", "approve", $lang->approve, array('class' => 'radio_approve', 'checked' => false)); - $controls .= "
"; - - $thread = "{$lang->thread} {$post['threadsubject']}"; - $forum = "{$lang->forum} {$forum_name}
"; - - $table->construct_cell("
{$controls}
{$forum}{$thread}
{$post['message']}
", array("colspan" => 3)); - $table->construct_row(); - } - - $table->output($lang->posts_awaiting_moderation); - echo $all_options; - echo $pagination; - - $buttons[] = $form->generate_submit_button($lang->perform_action); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo ''; - - $page->output_footer(); - } - else if($mybb->input['type'] == "posts") - { - $page->output_header($lang->moderation_queue); - $page->output_nav_tabs($sub_tabs, "posts"); - echo "

{$lang->error_no_posts}

"; - $page->output_footer(); - } -} - -// Attachments awaiting moderation -if($mybb->input['type'] == "attachments" || $mybb->input['type'] == "") -{ - $plugins->run_hooks("admin_forum_moderation_queue_attachments"); - - $query = $db->query(" - SELECT COUNT(aid) AS unapprovedattachments - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE a.visible='0' - "); - $unapproved_attachments = $db->fetch_field($query, "unapprovedattachments"); - - if($unapproved_attachments > 0) - { - // Figure out if we need to display multiple pages. - $per_page = 15; - if($mybb->input['page'] > 0) - { - $current_page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($current_page-1)*$per_page; - $pages = $unapproved_attachments / $per_page; - $pages = ceil($pages); - if($current_page > $pages) - { - $start = 0; - $current_page = 1; - } - } - else - { - $start = 0; - $current_page = 1; - } - - $pagination = draw_admin_pagination($current_page, $per_page, $unapproved_attachments, "index.php?module=forum-moderation_queue&type=attachments&page={page}"); - - $page->add_breadcrumb_item($lang->attachments_awaiting_moderation); - $page->output_header($lang->attachments_awaiting_moderation); - $page->output_nav_tabs($sub_tabs, "attachments"); - - $form = new Form("index.php?module=forum-moderation_queue", "post"); - - $table = new Table; - $table->construct_header($lang->filename); - $table->construct_header($lang->uploadedby, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->posted, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 3)); - - $query = $db->query(" - SELECT a.*, p.subject AS postsubject, p.dateline, p.uid, u.username, t.tid, t.subject AS threadsubject - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE a.visible='0' - ORDER BY a.dateuploaded DESC - LIMIT {$start}, {$per_page} - "); - - while($attachment = $db->fetch_array($query)) - { - if(!$attachment['dateuploaded']) $attachment['dateuploaded'] = $attachment['dateline']; - $attachdate = my_date('relative', $attachment['dateuploaded']); - - $attachment['postsubject'] = htmlspecialchars_uni($attachment['postsubject']); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - $attachment['threadsubject'] = htmlspecialchars_uni($attachment['threadsubject']); - $attachment['filesize'] = get_friendly_size($attachment['filesize']); - - $link = get_post_link($attachment['pid'], $attachment['tid']) . "#pid{$attachment['pid']}"; - $thread_link = get_thread_link($attachment['tid']); - $profile_link = build_profile_link(htmlspecialchars_uni($attachment['username']), $attachment['uid'], "_blank"); - - $table->construct_cell("{$attachment['filename']} ({$attachment['filesize']})
{$lang->post} {$attachment['postsubject']}"); - $table->construct_cell($profile_link, array("class" => "align_center")); - $table->construct_cell($attachdate, array("class" => "align_center")); - - $table->construct_cell($form->generate_radio_button("attachments[{$attachment['aid']}]", "ignore", $lang->ignore, array('class' => 'radio_ignore', 'checked' => true)), array("class" => "align_center")); - $table->construct_cell($form->generate_radio_button("attachments[{$attachment['aid']}]", "delete", $lang->delete, array('class' => 'radio_delete', 'checked' => false)), array("class" => "align_center")); - $table->construct_cell($form->generate_radio_button("attachments[{$attachment['aid']}]", "approve", $lang->approve, array('class' => 'radio_approve', 'checked' => false)), array("class" => "align_center")); - $table->construct_row(); - } - $table->output($lang->attachments_awaiting_moderation); - echo $all_options; - echo $pagination; - - $buttons[] = $form->generate_submit_button($lang->perform_action); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo ''; - - $page->output_footer(); - } - else if($mybb->input['type'] == "attachments") - { - $page->output_header($lang->moderation_queue); - $page->output_nav_tabs($sub_tabs, "attachments"); - echo "

{$lang->error_no_attachments}

"; - $page->output_footer(); - } -} - -// Still nothing? All queues are empty! :-D -$page->output_header($lang->moderation_queue); -echo "

{$lang->error_no_threads}

"; -$page->output_footer(); diff --git a/html/forums/admin/modules/forum/module_meta.php b/html/forums/admin/modules/forum/module_meta.php deleted file mode 100644 index 1980876..0000000 --- a/html/forums/admin/modules/forum/module_meta.php +++ /dev/null @@ -1,87 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -/** - * @return bool true - */ -function forum_meta() -{ - global $page, $lang, $plugins; - - $sub_menu = array(); - $sub_menu['10'] = array("id" => "management", "title" => $lang->forum_management, "link" => "index.php?module=forum-management"); - $sub_menu['20'] = array("id" => "announcements", "title" => $lang->forum_announcements, "link" => "index.php?module=forum-announcements"); - $sub_menu['30'] = array("id" => "moderation_queue", "title" => $lang->moderation_queue, "link" => "index.php?module=forum-moderation_queue"); - $sub_menu['40'] = array("id" => "attachments", "title" => $lang->attachments, "link" => "index.php?module=forum-attachments"); - - $sub_menu = $plugins->run_hooks("admin_forum_menu", $sub_menu); - - $page->add_menu_item($lang->forums_and_posts, "forum", "index.php?module=forum", 20, $sub_menu); - - return true; -} - -/** - * @param string $action - * - * @return string - */ -function forum_action_handler($action) -{ - global $page, $plugins; - - $page->active_module = "forum"; - - $actions = array( - 'moderation_queue' => array('active' => 'moderation_queue', 'file' => 'moderation_queue.php'), - 'announcements' => array('active' => 'announcements', 'file' => 'announcements.php'), - 'attachments' => array('active' => 'attachments', 'file' => 'attachments.php'), - 'management' => array('active' => 'management', 'file' => 'management.php') - ); - - $actions = $plugins->run_hooks("admin_forum_action_handler", $actions); - - if(isset($actions[$action])) - { - $page->active_action = $actions[$action]['active']; - return $actions[$action]['file']; - } - else - { - $page->active_action = "management"; - return "management.php"; - } -} - -/** - * @return array - */ -function forum_admin_permissions() -{ - global $lang, $plugins; - - $admin_permissions = array( - "management" => $lang->can_manage_forums, - "announcements" => $lang->can_manage_forum_announcements, - "moderation_queue" => $lang->can_moderate, - "attachments" => $lang->can_manage_attachments, - ); - - $admin_permissions = $plugins->run_hooks("admin_forum_permissions", $admin_permissions); - - return array("name" => $lang->forums_and_posts, "permissions" => $admin_permissions, "disporder" => 20); -} - diff --git a/html/forums/admin/modules/home/credits.php b/html/forums/admin/modules/home/credits.php deleted file mode 100644 index 7e4aaa6..0000000 --- a/html/forums/admin/modules/home/credits.php +++ /dev/null @@ -1,151 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->mybb_credits, "index.php?module=home-credits"); - -$plugins->run_hooks("admin_home_credits_begin"); - -if(!$mybb->input['action']) -{ - $page->output_header($lang->mybb_credits); - - $sub_tabs['credits'] = array( - 'title' => $lang->mybb_credits, - 'link' => "index.php?module=home-credits", - 'description' => $lang->mybb_credits_description - ); - - $sub_tabs['credits_about'] = array( - 'title' => $lang->about_the_team, - 'link' => "https://mybb.com/about/team", - 'link_target' => "_blank", - ); - - $sub_tabs['check_for_updates'] = array( - 'title' => $lang->check_for_updates, - 'link' => "index.php?module=home-credits&fetch_new=1", - ); - - $plugins->run_hooks("admin_home_credits_start"); - - $page->output_nav_tabs($sub_tabs, 'credits'); - - $mybb_credits = $cache->read('mybb_credits'); - - if($mybb->get_input('fetch_new', MyBB::INPUT_INT) == 1 || $mybb->get_input('fetch_new', MyBB::INPUT_INT) == -2 || ($mybb->get_input('fetch_new', MyBB::INPUT_INT) != -1 && (!is_array($mybb_credits) || $mybb_credits['last_check'] <= TIME_NOW - 60*60*24*14))) - { - $new_mybb_credits = array( - 'last_check' => TIME_NOW - ); - - require_once MYBB_ROOT."inc/class_xml.php"; - $contents = fetch_remote_file("https://mybb.com/mybb_team.xml"); - - if(!$contents) - { - flash_message($lang->error_communication, 'error'); - if($mybb->get_input('fetch_new', MyBB::INPUT_INT) == -2) - { - admin_redirect('index.php?module=tools-cache'); - } - admin_redirect('index.php?module=home-credits&fetch_new=-1'); - } - - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - $mybbgroup = array(); - foreach($tree['mybbgroup']['team'] as $team) - { - $members = array(); - foreach($team['member'] as $member) - { - $members[] = array( - 'name' => htmlspecialchars_uni($member['name']['value']), - 'username' => htmlspecialchars_uni($member['username']['value']), - 'profile' => htmlspecialchars_uni($member['profile']['value']), - 'lead' => (bool)$member['attributes']['lead'] or false - ); - } - $mybbgroup[] = array( - 'title' => htmlspecialchars_uni($team['attributes']['title']), - 'members' => $members - ); - } - $new_mybb_credits['credits'] = $mybbgroup; - - $cache->update('mybb_credits', $new_mybb_credits); - - if($mybb->get_input('fetch_new', MyBB::INPUT_INT) == -2) - { - $lang->load('tools_cache'); - flash_message($lang->success_cache_reloaded, 'success'); - admin_redirect('index.php?module=tools-cache'); - } - else - { - flash_message($lang->success_credits_updated, 'success'); - admin_redirect('index.php?module=home-credits&fetch_new=-1'); - } - } - - if(empty($mybb_credits) || (is_array($mybb_credits) && empty($mybb_credits['credits']))) - { - $table = new Table; - $table->construct_cell($lang->no_credits); - $table->construct_row(); - } - else - { - $largest_count = $i = 0; - $team_max = array(); - foreach($mybb_credits['credits'] as $team) - { - $count = count($team['members']); - $team_max[$i++] = $count; - if($largest_count < $count) - { - $largest_count = $count; - } - } - $largest_count -= 1; - - $table = new Table; - foreach($mybb_credits['credits'] as $team) - { - $table->construct_header($team['title'], array('width' => '16%')); - } - - for($i = 0; $i <= $largest_count; $i++) - { - foreach($team_max as $team => $max) - { - if($max < $i) - { - $table->construct_cell(" "); - } - else - { - $table->construct_cell("{$mybb_credits['credits'][$team]['members'][$i]['name']}"); - } - } - $table->construct_row(); - } - } - - $table->output($lang->mybb_credits); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/home/index.html b/html/forums/admin/modules/home/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/modules/home/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/modules/home/index.php b/html/forums/admin/modules/home/index.php deleted file mode 100644 index 5ce174e..0000000 --- a/html/forums/admin/modules/home/index.php +++ /dev/null @@ -1,388 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$plugins->run_hooks("admin_home_index_begin"); - -$sub_tabs['dashboard'] = array( - 'title' => $lang->dashboard, - 'link' => "index.php", - 'description' => $lang->dashboard_description -); - -$sub_tabs['version_check'] = array( - 'title' => $lang->version_check, - 'link' => "index.php?module=home&action=version_check", - 'description' => $lang->version_check_description -); - -if($mybb->input['action'] == "version_check") -{ - $plugins->run_hooks("admin_home_version_check_start"); - - $current_version = rawurlencode($mybb->version_code); - - $updated_cache = array( - "last_check" => TIME_NOW - ); - - require_once MYBB_ROOT."inc/class_xml.php"; - $contents = fetch_remote_file("https://mybb.com/version_check.php"); - - if(!$contents) - { - flash_message($lang->error_communication, 'error'); - admin_redirect('index.php'); - } - - $plugins->run_hooks("admin_home_version_check"); - - $page->add_breadcrumb_item($lang->version_check, "index.php?module=home-version_check"); - $page->output_header($lang->version_check); - $page->output_nav_tabs($sub_tabs, 'version_check'); - - // We do this because there is some weird symbols that show up in the xml file for unknown reasons - $pos = strpos($contents, "<"); - if($pos > 1) - { - $contents = substr($contents, $pos); - } - - $pos = strpos(strrev($contents), ">"); - if($pos > 1) - { - $contents = substr($contents, 0, (-1) * ($pos-1)); - } - - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - $latest_code = (int)$tree['mybb']['version_code']['value']; - $latest_version = "".htmlspecialchars_uni($tree['mybb']['latest_version']['value'])." (".$latest_code.")"; - if($latest_code > $mybb->version_code) - { - $latest_version = "".$latest_version.""; - $version_warn = 1; - $updated_cache['latest_version'] = $latest_version; - $updated_cache['latest_version_code'] = $latest_code; - } - else - { - $latest_version = "".$latest_version.""; - } - - if($version_warn) - { - $page->output_error("

{$lang->error_out_of_date} {$lang->update_forum}

"); - } - else - { - $page->output_success("

{$lang->success_up_to_date}

"); - } - - $table = new Table; - $table->construct_header($lang->your_version); - $table->construct_header($lang->latest_version); - - $table->construct_cell("".$mybb->version." (".$mybb->version_code.")"); - $table->construct_cell($latest_version); - $table->construct_row(); - - $table->output($lang->version_check); - - require_once MYBB_ROOT."inc/class_feedparser.php"; - - $feed_parser = new FeedParser(); - $feed_parser->parse_feed("http://feeds.feedburner.com/MyBBDevelopmentBlog"); - - $updated_cache['news'] = array(); - - require_once MYBB_ROOT . '/inc/class_parser.php'; - $post_parser = new postParser(); - - if($feed_parser->error == '') - { - foreach($feed_parser->items as $item) - { - if(!isset($updated_cache['news'][2])) - { - $description = $item['description']; - $content = $item['content']; - - $description = $post_parser->parse_message($description, array( - 'allow_html' => true, - ) - ); - - $content = $post_parser->parse_message($content, array( - 'allow_html' => true, - ) - ); - - $description = preg_replace('##', '', $description); - $content = preg_replace('##', '', $content); - - $updated_cache['news'][] = array( - 'title' => htmlspecialchars_uni($item['title']), - 'description' => $description, - 'link' => htmlspecialchars_uni($item['link']), - 'author' => htmlspecialchars_uni($item['author']), - 'dateline' => $item['date_timestamp'], - ); - } - - $stamp = ''; - if($item['date_timestamp']) - { - $stamp = my_date('relative', $item['date_timestamp']); - } - - $link = htmlspecialchars_uni($item['link']); - - $table->construct_cell("".htmlspecialchars_uni($item['title'])."

{$content}{$stamp}

» {$lang->read_more}
"); - $table->construct_row(); - } - } - else - { - $table->construct_cell("{$lang->error_fetch_news} "); - $table->construct_row(); - } - - $cache->update("update_check", $updated_cache); - - $table->output($lang->latest_mybb_announcements); - $page->output_footer(); -} -elseif(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_home_index_start"); - - if($mybb->request_method == "post" && isset($mybb->input['adminnotes'])) - { - // Update Admin Notes cache - $update_cache = array( - "adminmessage" => $mybb->input['adminnotes'] - ); - - $cache->update("adminnotes", $update_cache); - - $plugins->run_hooks("admin_home_index_start_begin"); - - flash_message($lang->success_notes_updated, 'success'); - admin_redirect("index.php"); - } - - $page->add_breadcrumb_item($lang->dashboard); - $page->output_header($lang->dashboard); - - $sub_tabs['dashboard'] = array( - 'title' => $lang->dashboard, - 'link' => "index.php", - 'description' => $lang->dashboard_description - ); - - $page->output_nav_tabs($sub_tabs, 'dashboard'); - - // Load stats cache - $stats = $cache->read("stats"); - - $serverload = get_server_load(); - - // Get the number of users - $query = $db->simple_select("users", "COUNT(uid) AS numusers"); - $users = my_number_format($db->fetch_field($query, "numusers")); - - // Get the number of users awaiting validation - $awaitingusers = $cache->read('awaitingactivation'); - - if(!empty($awaitingusers['users'])) - { - $awaitingusers = (int)$awaitingusers['users']; - } - else - { - $awaitingusers = 0; - } - - if($awaitingusers < 1) - { - $awaitingusers = 0; - } - else - { - $awaitingusers = my_number_format($awaitingusers); - } - - // Get the number of new users for today - $timecut = TIME_NOW - 86400; - $query = $db->simple_select("users", "COUNT(uid) AS newusers", "regdate > '$timecut'"); - $newusers = my_number_format($db->fetch_field($query, "newusers")); - - // Get the number of active users today - $query = $db->simple_select("users", "COUNT(uid) AS activeusers", "lastvisit > '$timecut'"); - $activeusers = my_number_format($db->fetch_field($query, "activeusers")); - - // Get the number of threads - $threads = my_number_format($stats['numthreads']); - - // Get the number of unapproved threads - $unapproved_threads = my_number_format($stats['numunapprovedthreads']); - - // Get the number of new threads for today - $query = $db->simple_select("threads", "COUNT(*) AS newthreads", "dateline > '$timecut' AND visible='1' AND closed NOT LIKE 'moved|%'"); - $newthreads = my_number_format($db->fetch_field($query, "newthreads")); - - // Get the number of posts - $posts = my_number_format($stats['numposts']); - - // Get the number of unapproved posts - if($stats['numunapprovedposts'] < 0) - { - $stats['numunapprovedposts'] = 0; - } - - $unapproved_posts = my_number_format($stats['numunapprovedposts']); - - // Get the number of new posts for today - $query = $db->simple_select("posts", "COUNT(*) AS newposts", "dateline > '$timecut' AND visible='1'"); - $newposts = my_number_format($db->fetch_field($query, "newposts")); - - // Get the number of reported post - $query = $db->simple_select("reportedcontent", "COUNT(*) AS reported_posts", "type = 'post' OR type = ''"); - $reported_posts = my_number_format($db->fetch_field($query, "reported_posts")); - - // If report medium is MCP... - if($mybb->settings['reportmethod'] == "db") - { - // Get the number of reported posts that haven't been marked as read yet - $query = $db->simple_select("reportedcontent", "COUNT(*) AS new_reported_posts", "reportstatus='0' AND (type = 'post' OR type = '')"); - $new_reported_posts = my_number_format($db->fetch_field($query, "new_reported_posts")); - } - - // Get the number and total file size of attachments - $query = $db->simple_select("attachments", "COUNT(*) AS numattachs, SUM(filesize) as spaceused", "visible='1' AND pid > '0'"); - $attachs = $db->fetch_array($query); - $attachs['spaceused'] = get_friendly_size($attachs['spaceused']); - $approved_attachs = my_number_format($attachs['numattachs']); - - // Get the number of unapproved attachments - $query = $db->simple_select("attachments", "COUNT(*) AS numattachs", "visible='0' AND pid > '0'"); - $unapproved_attachs = my_number_format($db->fetch_field($query, "numattachs")); - - // Fetch the last time an update check was run - $update_check = $cache->read("update_check"); - - // If last update check was greater than two weeks ago (14 days) show an alert - if(isset($update_check['last_check']) && $update_check['last_check'] <= TIME_NOW-60*60*24*14) - { - $lang->last_update_check_two_weeks = $lang->sprintf($lang->last_update_check_two_weeks, "index.php?module=home&action=version_check"); - $page->output_error("

{$lang->last_update_check_two_weeks}

"); - } - - // If the update check contains information about a newer version, show an alert - if(isset($update_check['latest_version_code']) && $update_check['latest_version_code'] > $mybb->version_code) - { - $lang->new_version_available = $lang->sprintf($lang->new_version_available, "MyBB {$mybb->version}", "MyBB {$update_check['latest_version']}"); - $page->output_error("

{$lang->new_version_available}

"); - } - - $plugins->run_hooks("admin_home_index_output_message"); - - $adminmessage = $cache->read("adminnotes"); - - $table = new Table; - $table->construct_header($lang->mybb_server_stats, array("colspan" => 2)); - $table->construct_header($lang->forum_stats, array("colspan" => 2)); - - $table->construct_cell("{$lang->mybb_version}", array('width' => '25%')); - $table->construct_cell($mybb->version, array('width' => '25%')); - $table->construct_cell("{$lang->threads}", array('width' => '25%')); - $table->construct_cell("{$threads} {$lang->threads}
{$newthreads} {$lang->new_today}
{$unapproved_threads} {$lang->unapproved}", array('width' => '25%')); - $table->construct_row(); - - $table->construct_cell("{$lang->php_version}", array('width' => '25%')); - $table->construct_cell(PHP_VERSION, array('width' => '25%')); - $table->construct_cell("{$lang->posts}", array('width' => '25%')); - if($mybb->settings['reportmethod'] == "db") - { - $table->construct_cell("{$posts} {$lang->posts}
{$newposts} {$lang->new_today}
{$unapproved_posts} {$lang->unapproved}
{$reported_posts} {$lang->reported_posts}
{$new_reported_posts} {$lang->unread_reports}", array('width' => '25%')); - } - else - { - $table->construct_cell("{$posts} {$lang->posts}
{$newposts} {$lang->new_today}
{$unapproved_posts} {$lang->unapproved}
{$reported_posts} {$lang->reported_posts}", array('width' => '25%')); - } - $table->construct_row(); - - $table->construct_cell("{$lang->sql_engine}", array('width' => '25%')); - $table->construct_cell($db->short_title." ".$db->get_version(), array('width' => '25%')); - $table->construct_cell("{$lang->users}", array('width' => '25%')); - $table->construct_cell("{$users} {$lang->registered_users}
{$activeusers} {$lang->active_users}
{$newusers} {$lang->registrations_today}
{$awaitingusers} {$lang->awaiting_activation}", array('width' => '25%')); - $table->construct_row(); - - $table->construct_cell("{$lang->server_load}", array('width' => '25%')); - $table->construct_cell($serverload, array('width' => '25%')); - $table->construct_cell("{$lang->attachments}", array('width' => '25%')); - $table->construct_cell("{$approved_attachs} {$lang->attachments}
{$unapproved_attachs} {$lang->unapproved}
{$attachs['spaceused']} {$lang->used}", array('width' => '25%')); - $table->construct_row(); - - $table->output($lang->dashboard); - - echo ' -
'; - - $table = new Table; - $table->construct_header($lang->admin_notes_public); - - $form = new Form("index.php", "post"); - $table->construct_cell($form->generate_text_area("adminnotes", $adminmessage['adminmessage'], array('style' => 'width: 99%; height: 200px;'))); - $table->construct_row(); - - $table->output($lang->admin_notes); - - $buttons[] = $form->generate_submit_button($lang->save_notes); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo '
-
'; - - // Latest news widget - $table = new Table; - $table->construct_header($lang->news_description); - - if(!empty($update_check['news']) && is_array($update_check['news'])) - { - foreach($update_check['news'] as $news_item) - { - $posted = my_date('relative', $news_item['dateline']); - $table->construct_cell("{$news_item['title']}
{$posted}"); - $table->construct_row(); - - $table->construct_cell($news_item['description']); - $table->construct_row(); - } - } - else - { - $table->construct_cell($lang->no_announcements); - $table->construct_row(); - } - - $table->output($lang->latest_mybb_announcements); - echo '
'; - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/home/module_meta.php b/html/forums/admin/modules/home/module_meta.php deleted file mode 100644 index f66d33e..0000000 --- a/html/forums/admin/modules/home/module_meta.php +++ /dev/null @@ -1,191 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -/** - * @return bool true - */ -function home_meta() -{ - global $page, $lang, $plugins; - - $sub_menu = array(); - $sub_menu['10'] = array("id" => "dashboard", "title" => $lang->dashboard, "link" => "index.php?module=home-dashboard"); - $sub_menu['20'] = array("id" => "preferences", "title" => $lang->preferences, "link" => "index.php?module=home-preferences"); - $sub_menu['30'] = array("id" => "docs", "title" => $lang->mybb_documentation, "link" => "https://docs.mybb.com"); - $sub_menu['40'] = array("id" => "credits", "title" => $lang->mybb_credits, "link" => "index.php?module=home-credits"); - $sub_menu = $plugins->run_hooks("admin_home_menu", $sub_menu); - - $page->add_menu_item($lang->home, "home", "index.php", 1, $sub_menu); - - return true; -} - -/** - * @param string $action - * - * @return string - */ -function home_action_handler($action) -{ - global $page, $db, $lang, $plugins; - - $page->active_module = "home"; - - $actions = array( - 'preferences' => array('active' => 'preferences', 'file' => 'preferences.php'), - 'credits' => array('active' => 'credits', 'file' => 'credits.php'), - 'version_check' => array('active' => 'version_check', 'file' => 'version_check.php'), - 'dashboard' => array('active' => 'dashboard', 'file' => 'index.php') - ); - - if(!isset($actions[$action])) - { - $page->active_action = "dashboard"; - } - else - { - $page->active_action = $actions[$action]['active']; - } - - $actions = $plugins->run_hooks("admin_home_action_handler", $actions); - - if($page->active_action == "dashboard") - { - // Quick Access - $sub_menu = array(); - $sub_menu['10'] = array("id" => "add_forum", "title" => $lang->add_new_forum, "link" => "index.php?module=forum-management&action=add", "module" => "forum", "action" => "management"); - $sub_menu['20'] = array("id" => "search", "title" => $lang->search_for_users, "link" => "index.php?module=user-users&action=search", "module" => "user", "action" => "users"); - $sub_menu['30'] = array("id" => "themes", "title" => $lang->themes, "link" => "index.php?module=style-themes", "module" => "style", "action" => "themes"); - $sub_menu['40'] = array("id" => "templates", "title" => $lang->templates, "link" => "index.php?module=style-templates", "module" => "style", "action" => "templates"); - $sub_menu['50'] = array("id" => "plugins", "title" => $lang->plugins, "link" => "index.php?module=config-plugins", "module" => "config", "action" => "plugins"); - $sub_menu['60'] = array("id" => "backupdb", "title" => $lang->database_backups, "link" => "index.php?module=tools-backupdb", "module" => "tools", "action" => "backupdb"); - - foreach($sub_menu as $id => $sub) - { - if(!check_admin_permissions(array("module" => $sub['module'], "action" => $sub['action']), false)) - { - unset($sub_menu[$id]); - } - } - - $sub_menu = $plugins->run_hooks("admin_home_menu_quick_access", $sub_menu); - - if(!empty($sub_menu)) - { - $sidebar = new SidebarItem($lang->quick_access); - $sidebar->add_menu_items($sub_menu, $page->active_action); - $page->sidebar .= $sidebar->get_markup(); - } - - // Online Administrators in the last 30 minutes - $timecut = TIME_NOW-60*30; - $query = $db->simple_select("adminsessions", "uid, ip, useragent", "lastactive > {$timecut}"); - $online_users = "
    "; - $online_admins = array(); - - // If there's only 1 user online, it has to be us. - if($db->num_rows($query) == 1) - { - $user = $db->fetch_array($query); - global $mybb; - - // Are we on a mobile device? - // Stolen from http://stackoverflow.com/a/10989424 - $user_type = "desktop"; - if(is_mobile($user["useragent"])) - { - $user_type = "mobile"; - } - - $online_admins[$mybb->user['username']] = array( - "uid" => $mybb->user['uid'], - "username" => $mybb->user['username'], - "ip" => $user["ip"], - "type" => $user_type - ); - } - else - { - $uid_in = array(); - while($user = $db->fetch_array($query)) - { - $uid_in[] = $user['uid']; - - $user_type = "desktop"; - if(is_mobile($user['useragent'])) - { - $user_type = "mobile"; - } - - $online_admins[$user['uid']] = array( - "ip" => $user['ip'], - "type" => $user_type - ); - } - - $query = $db->simple_select("users", "uid, username", "uid IN(".implode(',', $uid_in).")", array('order_by' => 'username')); - while($user = $db->fetch_array($query)) - { - $online_admins[$user['username']] = array( - "uid" => $user['uid'], - "username" => $user['username'], - "ip" => $online_admins[$user['uid']]['ip'], - "type" => $online_admins[$user['uid']]['type'] - ); - unset($online_admins[$user['uid']]); - } - } - - $done_users = array(); - - asort($online_admins); - - foreach($online_admins as $user) - { - if(!isset($done_users["{$user['uid']}.{$user['ip']}"])) - { - if($user['type'] == "mobile") - { - $class = " class=\"mobile_user\""; - } - else - { - $class = ""; - } - $ip_address = my_inet_ntop($db->unescape_binary($user['ip'])); - $online_users .= "
  • ipaddress} {$ip_address}\"{$class}>".build_profile_link(htmlspecialchars_uni($user['username']).' ('.$ip_address.')', $user['uid'], "_blank")."
  • "; - $done_users["{$user['uid']}.{$user['ip']}"] = 1; - } - } - $online_users .= "
"; - $sidebar = new SidebarItem($lang->online_admins); - $sidebar->set_contents($online_users); - - $page->sidebar .= $sidebar->get_markup(); - } - - if(isset($actions[$action])) - { - $page->active_action = $actions[$action]['active']; - return $actions[$action]['file']; - } - else - { - $page->active_action = "dashboard"; - return "index.php"; - } -} - diff --git a/html/forums/admin/modules/home/preferences.php b/html/forums/admin/modules/home/preferences.php deleted file mode 100644 index 651fed4..0000000 --- a/html/forums/admin/modules/home/preferences.php +++ /dev/null @@ -1,192 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->preferences_and_personal_notes, "index.php?module=home-preferences"); - -$plugins->run_hooks("admin_home_preferences_begin"); - -if($mybb->input['action'] == "recovery_codes") -{ - $page->add_breadcrumb_item($lang->recovery_codes, "index.php?module=home-preferences&action=recovery_codes"); - - // First: regenerate the codes - $codes = generate_recovery_codes(); - $db->update_query("adminoptions", array("recovery_codes" => $db->escape_string(my_serialize($codes))), "uid='{$mybb->user['uid']}'"); - - // And now display them - $page->output_header($lang->recovery_codes); - - $table = new Table; - $table->construct_header($lang->recovery_codes); - - $table->construct_cell("{$lang->recovery_codes_warning} {$lang->print_recovery_codes}"); - $table->construct_row(); - - $table->construct_cell(implode("
", $codes)); - $table->construct_row(); - - $table->output($lang->recovery_codes); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - require_once MYBB_ROOT."inc/3rdparty/2fa/GoogleAuthenticator.php"; - $auth = new PHPGangsta_GoogleAuthenticator; - - $plugins->run_hooks("admin_home_preferences_start"); - - if($mybb->request_method == "post") - { - $query = $db->simple_select("adminoptions", "permissions, defaultviews, authsecret, recovery_codes", "uid='{$mybb->user['uid']}'"); - $adminopts = $db->fetch_array($query); - - $secret = $adminopts['authsecret']; - // Was the option changed? empty = disabled so == - if($mybb->input['2fa'] == empty($secret)) - { - // 2FA was enabled -> create secret and log - if($mybb->input['2fa']) - { - $secret = $auth->createSecret(); - // We don't want to close this session now - $db->update_query("adminsessions", array("authenticated" => 1), "sid='".$db->escape_string($mybb->cookies['adminsid'])."'"); - log_admin_action("enabled"); - } - // 2FA was disabled -> clear secret - else - { - $secret = ""; - $adminopts['recovery_codes'] = ""; - log_admin_action("disabled"); - } - } - - $sqlarray = array( - "notes" => $db->escape_string($mybb->input['notes']), - "cpstyle" => $db->escape_string($mybb->input['cpstyle']), - "cplanguage" => $db->escape_string($mybb->input['cplanguage']), - "permissions" => $db->escape_string($adminopts['permissions']), - "defaultviews" => $db->escape_string($adminopts['defaultviews']), - "uid" => $mybb->user['uid'], - "codepress" => $mybb->get_input('codepress', MyBB::INPUT_INT), // It's actually CodeMirror but for compatibility purposes lets leave it codepress - "authsecret" => $db->escape_string($secret), - "recovery_codes" => $db->escape_string($adminopts['recovery_codes']), - ); - - $db->replace_query("adminoptions", $sqlarray, "uid"); - - $plugins->run_hooks("admin_home_preferences_start_commit"); - - flash_message($lang->success_preferences_updated, 'success'); - admin_redirect("index.php?module=home-preferences"); - } - - $page->output_header($lang->preferences_and_personal_notes); - - $sub_tabs['preferences'] = array( - 'title' => $lang->preferences_and_personal_notes, - 'link' => "index.php?module=home-preferences", - 'description' => $lang->prefs_and_personal_notes_description - ); - - $page->output_nav_tabs($sub_tabs, 'preferences'); - - $query = $db->simple_select("adminoptions", "notes, cpstyle, cplanguage, codepress, authsecret", "uid='".$mybb->user['uid']."'", array('limit' => 1)); - $admin_options = $db->fetch_array($query); - - $form = new Form("index.php?module=home-preferences", "post"); - $dir = @opendir(MYBB_ADMIN_DIR."/styles"); - - $folders = array(); - while($folder = readdir($dir)) - { - if($folder != "." && $folder != ".." && @file_exists(MYBB_ADMIN_DIR."/styles/$folder/main.css")) - { - $folders[$folder] = ucfirst($folder); - } - } - closedir($dir); - ksort($folders); - $setting_code = $form->generate_select_box("cpstyle", $folders, $admin_options['cpstyle']); - - $languages = array_merge(array('' => $lang->use_default), $lang->get_languages(1)); - $language_code = $form->generate_select_box("cplanguage", $languages, $admin_options['cplanguage']); - - $table = new Table; - $table->construct_header($lang->global_preferences); - - $table->construct_cell("{$lang->acp_theme}
{$lang->select_acp_theme}

{$setting_code}"); - $table->construct_row(); - - $table->construct_cell("{$lang->acp_language}
{$lang->select_acp_language}

{$language_code}"); - $table->construct_row(); - - $table->construct_cell("{$lang->codemirror}
{$lang->use_codemirror_desc}

".$form->generate_on_off_radio('codepress', $admin_options['codepress'])); - $table->construct_row(); - - // If 2FA is enabled we need to display a link to the recovery codes page - if(!empty($admin_options['authsecret'])) - { - $lang->use_2fa_desc .= "
".$lang->recovery_codes_desc." ".$lang->recovery_codes_warning; - } - - $table->construct_cell("{$lang->my2fa}
{$lang->use_2fa_desc}

".$form->generate_on_off_radio('2fa', (int)!empty($admin_options['authsecret']))); - $table->construct_row(); - - if(!empty($admin_options['authsecret'])) - { - $qr = $auth->getQRCodeGoogleUrl($mybb->user['username']."@".str_replace(" ", "", $mybb->settings['bbname']), $admin_options['authsecret']); - $table->construct_cell("{$lang->my2fa_qr}
construct_row(); - } - - $table->output($lang->preferences); - - $table->construct_header($lang->notes_not_shared); - - $table->construct_cell($form->generate_text_area("notes", $admin_options['notes'], array('style' => 'width: 99%; height: 300px;'))); - $table->construct_row(); - - $table->output($lang->personal_notes); - - $buttons[] = $form->generate_submit_button($lang->save_notes_and_prefs); - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -/** - * Generate 10 random recovery codes, each with a length of 6 and without duplicates - * - * @return array - */ -function generate_recovery_codes() -{ - $t = array(); - while(count($t) < 10) - { - $g = random_str(6); - if(!in_array($g, $t)) - { - $t[] = $g; - } - } - return $t; -} diff --git a/html/forums/admin/modules/index.html b/html/forums/admin/modules/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/modules/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/modules/style/index.html b/html/forums/admin/modules/style/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/modules/style/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/modules/style/module_meta.php b/html/forums/admin/modules/style/module_meta.php deleted file mode 100644 index 2cefa8a..0000000 --- a/html/forums/admin/modules/style/module_meta.php +++ /dev/null @@ -1,79 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -/** - * @return bool true - */ -function style_meta() -{ - global $page, $lang, $plugins; - - $sub_menu = array(); - $sub_menu['10'] = array("id" => "themes", "title" => $lang->themes, "link" => "index.php?module=style-themes"); - $sub_menu['20'] = array("id" => "templates", "title" => $lang->templates, "link" => "index.php?module=style-templates"); - - $sub_menu = $plugins->run_hooks("admin_style_menu", $sub_menu); - - $page->add_menu_item($lang->templates_and_style, "style", "index.php?module=style", 40, $sub_menu); - return true; -} - -/** - * @param string $action - * - * @return string - */ -function style_action_handler($action) -{ - global $page, $plugins; - - $page->active_module = "style"; - - $actions = array( - 'templates' => array('active' => 'templates', 'file' => 'templates.php'), - 'themes' => array('active' => 'themes', 'file' => 'themes.php') - ); - - $actions = $plugins->run_hooks("admin_style_action_handler", $actions); - - if(isset($actions[$action])) - { - $page->active_action = $actions[$action]['active']; - return $actions[$action]['file']; - } - else - { - $page->active_action = "themes"; - return "themes.php"; - } -} - -/** - * @return array - */ -function style_admin_permissions() -{ - global $lang, $plugins; - - $admin_permissions = array( - "themes" => $lang->can_manage_themes, - "templates" => $lang->can_manage_templates, - ); - - $admin_permissions = $plugins->run_hooks("admin_style_permissions", $admin_permissions); - - return array("name" => $lang->templates_and_style, "permissions" => $admin_permissions, "disporder" => 40); -} diff --git a/html/forums/admin/modules/style/templates.php b/html/forums/admin/modules/style/templates.php deleted file mode 100644 index 8136e0f..0000000 --- a/html/forums/admin/modules/style/templates.php +++ /dev/null @@ -1,2015 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->template_sets, "index.php?module=style-templates"); - -$sid = $mybb->get_input('sid', MyBB::INPUT_INT); - -$expand_str = ""; -$expand_str2 = ""; -$expand_array = array(); -if(isset($mybb->input['expand'])) -{ - $expand_array = explode("|", $mybb->input['expand']); - $expand_array = array_map("intval", $expand_array); - $expand_str = "&expand=".implode("|", $expand_array); - $expand_str2 = "&expand=".implode("|", $expand_array); -} - -if($mybb->input['action'] == "add_set" || $mybb->input['action'] == "add_template" || ($mybb->input['action'] == "add_template_group" && !$sid) || $mybb->input['action'] == "search_replace" || $mybb->input['action'] == "find_updated" || (!$mybb->input['action'] && !$sid)) -{ - $sub_tabs['templates'] = array( - 'title' => $lang->manage_template_sets, - 'link' => "index.php?module=style-templates", - 'description' => $lang->manage_template_sets_desc - ); - - $sub_tabs['add_set'] = array( - 'title' => $lang->add_set, - 'link' => "index.php?module=style-templates&action=add_set".$expand_str - ); - - if($mybb->get_input('sid', MyBB::INPUT_INT) != -1) - { - $sub_tabs['add_template_group'] = array( - 'title' => $lang->add_template_group, - 'link' => "index.php?module=style-templates&action=add_template_group".$expand_str, - 'description' => $lang->add_template_group_desc - ); - } - - $sub_tabs['search_replace'] = array( - 'title' => $lang->search_replace, - 'link' => "index.php?module=style-templates&action=search_replace", - 'description' => $lang->search_replace_desc - ); - - $sub_tabs['find_updated'] = array( - 'title' => $lang->find_updated, - 'link' => "index.php?module=style-templates&action=find_updated", - 'description' => $lang->find_updated_desc - ); -} -else if(($sid && !$mybb->input['action']) || $mybb->input['action'] == "edit_set" || $mybb->input['action'] == "check_set" || $mybb->input['action'] == "edit_template" || $mybb->input['action'] == "add_template_group") -{ - $sub_tabs['manage_templates'] = array( - 'title' => $lang->manage_templates, - 'link' => "index.php?module=style-templates&sid=".$sid.$expand_str, - 'description' => $lang->manage_templates_desc - ); - - if($sid > 0) - { - $sub_tabs['edit_set'] = array( - 'title' => $lang->edit_set, - 'link' => "index.php?module=style-templates&action=edit_set&sid=".$sid.$expand_str, - 'description' => $lang->edit_set_desc - ); - } - - $sub_tabs['add_template'] = array( - 'title' => $lang->add_template, - 'link' => "index.php?module=style-templates&action=add_template&sid=".$sid.$expand_str, - 'description' => $lang->add_template_desc - ); - - if($mybb->get_input('sid', MyBB::INPUT_INT) != -1) - { - $sub_tabs['add_template_group'] = array( - 'title' => $lang->add_template_group, - 'link' => "index.php?module=style-templates&action=add_template_group&sid=".$sid.$expand_str, - 'description' => $lang->add_template_group_desc - ); - } -} - -$template_sets = array(); -$template_sets[-1] = $lang->global_templates; - -$query = $db->simple_select("templatesets", "*", "", array('order_by' => 'title', 'order_dir' => 'ASC')); -while($template_set = $db->fetch_array($query)) -{ - $template_sets[$template_set['sid']] = $template_set['title']; -} - -$plugins->run_hooks("admin_style_templates"); - -if($mybb->input['action'] == "add_set") -{ - $plugins->run_hooks("admin_style_templates_add_set"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_set_title; - } - - if(!$errors) - { - $sid = $db->insert_query("templatesets", array('title' => $db->escape_string($mybb->input['title']))); - - $plugins->run_hooks("admin_style_templates_add_set_commit"); - - // Log admin action - log_admin_action($sid, $mybb->input['title']); - - flash_message($lang->success_template_set_saved, 'success'); - admin_redirect("index.php?module=style-templates&sid=".$sid); - } - } - - $page->add_breadcrumb_item($lang->add_set); - - $page->output_header($lang->add_set); - - $sub_tabs = array(); - $sub_tabs['add_set'] = array( - 'title' => $lang->add_set, - 'link' => "index.php?module=style-templates&action=add_set", - 'description' => $lang->add_set_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_set'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['title'] = ""; - } - - $form = new Form("index.php?module=style-templates&action=add_set", "post", "add_set"); - - $form_container = new FormContainer($lang->add_set); - $form_container->output_row($lang->title, "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->save); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "add_template") -{ - $plugins->run_hooks("admin_style_templates_add_template"); - - if($mybb->request_method == "post") - { - if(empty($mybb->input['title'])) - { - $errors[] = $lang->error_missing_set_title; - } - else - { - $query = $db->simple_select("templates", "COUNT(tid) as count", "title='".$db->escape_string($mybb->input['title'])."' AND (sid = '-2' OR sid = '{$sid}')"); - if($db->fetch_field($query, "count") > 0) - { - $errors[] = $lang->error_already_exists; - } - } - - if(!isset($template_sets[$sid])) - { - $errors[] = $lang->error_invalid_set; - } - - // Are we trying to do malicious things in our template? - if(check_template($mybb->input['template'])) - { - $errors[] = $lang->error_security_problem; - } - - if(!$errors) - { - $template_array = array( - 'title' => $db->escape_string($mybb->input['title']), - 'sid' => $sid, - 'template' => $db->escape_string(rtrim($mybb->input['template'])), - 'version' => $db->escape_string($mybb->version_code), - 'status' => '', - 'dateline' => TIME_NOW - ); - - $tid = $db->insert_query("templates", $template_array); - - $plugins->run_hooks("admin_style_templates_add_template_commit"); - - // Log admin action - log_admin_action($tid, $mybb->input['title'], $sid, $template_sets[$sid]); - - flash_message($lang->success_template_saved, 'success'); - - if($mybb->input['continue']) - { - admin_redirect("index.php?module=style-templates&action=edit_template&title=".urlencode($mybb->input['title'])."&sid=".$sid.$expand_str2); - } - else - { - admin_redirect("index.php?module=style-templates&sid=".$sid.$expand_str2); - } - } - } - - if($errors) - { - $template = $mybb->input; - } - else - { - if(!$sid) - { - $sid = -1; - } - - $template['template'] = ""; - $template['sid'] = $sid; - } - - if($mybb->input['sid']) - { - $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); - } - - if($admin_options['codepress'] != 0) - { - $page->extra_header .= ' - - - - - - - - - - - - - - - -'; - } - - $page->add_breadcrumb_item($lang->add_template); - - $page->output_header($lang->add_template); - - $sub_tabs = array(); - $sub_tabs['add_template'] = array( - 'title' => $lang->add_template, - 'link' => "index.php?module=style-templates&action=add_template&sid=".$template['sid'].$expand_str, - 'description' => $lang->add_template_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_template'); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=style-templates&action=add_template{$expand_str}", "post", "add_template"); - - $form_container = new FormContainer($lang->add_template, 'tfixed'); - $form_container->output_row($lang->template_name, $lang->template_name_desc, $form->generate_text_box('title', $template['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->template_set, $lang->template_set_desc, $form->generate_select_box('sid', $template_sets, $sid), 'sid'); - $form_container->output_row("", "", $form->generate_text_area('template', $template['template'], array('id' => 'template', 'class' => '', 'style' => 'width: 100%; height: 500px;')), 'template'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_continue, array('name' => 'continue')); - $buttons[] = $form->generate_submit_button($lang->save_close, array('name' => 'close')); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - if($admin_options['codepress'] != 0) - { - echo ''; - } - - $page->output_footer(); -} - -if($mybb->input['action'] == "add_template_group") -{ - $plugins->run_hooks("admin_style_templates_add_template_group"); - - if($mybb->get_input('sid', MyBB::INPUT_INT) == -1) - { - admin_redirect("index.php?module=style-templates&sid={$sid}".$expand_str2); - } - - $errors = array(); - if($mybb->request_method == "post") - { - $prefix = trim($mybb->input['prefix']); - if(!$prefix) - { - $errors[] = $lang->error_missing_group_prefix; - } - - if(strpos($prefix, "_") !== false) - { - $errors[] = $lang->error_invalid_group_title; - } - - $title = trim($mybb->input['title']); - if(!$title) - { - $errors[] = $lang->error_missing_group_title; - } - - if(!$errors) - { - $query = $db->simple_select("templategroups", "COUNT(gid) AS gid", "prefix = '".$db->escape_string($mybb->input['prefix'])."'"); - $prefix_count = $db->fetch_field($query, 'gid'); - - if($prefix_count >= 1) - { - $errors[] = $lang->error_duplicate_group_prefix; - } - else - { - // Add template group - $insert_array = array( - 'prefix' => $db->escape_string($prefix), - 'title' => $db->escape_string($title), - 'isdefault' => 0 - ); - - $gid = $db->insert_query('templategroups', $insert_array); - - $plugins->run_hooks('admin_style_templates_add_template_group_commit'); - - log_admin_action($gid, $title); - flash_message($lang->success_template_group_saved, 'success'); - - if($sid) - { - admin_redirect("index.php?module=style-templates&sid={$sid}".$expand_str2); - } - - admin_redirect('index.php?module=style-templates'); - } - } - } - - if($mybb->input['sid']) - { - $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); - } - - $page->add_breadcrumb_item($lang->add_template_group); - $page->output_header($lang->add_template_group); - $page->output_nav_tabs($sub_tabs, 'add_template_group'); - - if($errors) - { - $template_group = array( - 'prefix' => $prefix, - 'title' => $title - ); - - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=style-templates&action=add_template_group{$expand_str}", "post", "add_template_group"); - echo $form->generate_hidden_field('sid', $sid); - - $form_container = new FormContainer($lang->add_template_group); - $form_container->output_row($lang->template_group_prefix, $lang->template_group_prefix_desc, $form->generate_text_box('prefix', $template_group['prefix'], array('id' => 'prefix')), 'prefix'); - $form_container->output_row($lang->template_group_title, $lang->template_group_title_desc, $form->generate_text_box('title', $template_group['title'], array('id' => 'title')), 'title'); - $form_container->end(); - - $buttons = array( - $form->generate_submit_button($lang->add_template_group) - ); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_set") -{ - $query = $db->simple_select("templatesets", "*", "sid='{$sid}'"); - $set = $db->fetch_array($query); - if(!$set) - { - flash_message($lang->error_invalid_input, 'error'); - admin_redirect("index.php?module=style-templates"); - } - - $plugins->run_hooks("admin_style_templates_edit_set"); - - $sid = $set['sid']; - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_set_title; - } - - if(!$errors) - { - $query = $db->update_query("templatesets", array('title' => $db->escape_string($mybb->input['title'])), "sid='{$sid}'"); - - $plugins->run_hooks("admin_style_templates_edit_set_commit"); - - // Log admin action - log_admin_action($sid, $set['title']); - - flash_message($lang->success_template_set_saved, 'success'); - admin_redirect("index.php?module=style-templates&sid=".$sid.$expand_str2); - } - } - - if($sid) - { - $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); - } - - $page->add_breadcrumb_item($lang->edit_set); - - $page->output_header($lang->edit_set); - - $sub_tabs = array(); - $sub_tabs['edit_set'] = array( - 'title' => $lang->edit_set, - 'link' => "index.php?module=style-templates&action=edit_set&sid=".$sid, - 'description' => $lang->edit_set_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_set'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $query = $db->simple_select("templatesets", "title", "sid='{$sid}'"); - $mybb->input['title'] = $db->fetch_field($query, "title"); - } - - $form = new Form("index.php?module=style-templates&action=edit_set{$expand_str}", "post", "edit_set"); - echo $form->generate_hidden_field("sid", $sid); - - $form_container = new FormContainer($lang->edit_set); - $form_container->output_row($lang->title, "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->save); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_template") -{ - if(!$mybb->input['title'] || !$sid || !isset($template_sets[$sid])) - { - flash_message($lang->error_missing_input, 'error'); - admin_redirect("index.php?module=style-templates"); - } - - $plugins->run_hooks("admin_style_templates_edit_template"); - - if($mybb->request_method == "post") - { - if(empty($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - // Are we trying to do malicious things in our template? - if(check_template($mybb->input['template'])) - { - $errors[] = $lang->error_security_problem; - } - - if(!$errors) - { - $query = $db->simple_select("templates", "*", "tid='{$mybb->input['tid']}'"); - $template = $db->fetch_array($query); - - $template_array = array( - 'title' => $db->escape_string($mybb->input['title']), - 'sid' => $sid, - 'template' => $db->escape_string(rtrim($mybb->input['template'])), - 'version' => $mybb->version_code, - 'status' => '', - 'dateline' => TIME_NOW - ); - - // Make sure we have the correct tid associated with this template. If the user double submits then the tid could originally be the master template tid, but because the form is sumbitted again, the tid doesn't get updated to the new modified template one. This then causes the master template to be overwritten - $query = $db->simple_select("templates", "tid", "title='".$db->escape_string($template['title'])."' AND (sid = '-2' OR sid = '{$template['sid']}')", array('order_by' => 'sid', 'order_dir' => 'desc', 'limit' => 1)); - $template['tid'] = $db->fetch_field($query, "tid"); - - $plugins->run_hooks("admin_style_templates_edit_template_commit_start"); - - if($sid > 0) - { - // Check to see if it's never been edited before (i.e. master) or if this a new template (i.e. we've renamed it) or if it's a custom template - $query = $db->simple_select("templates", "sid", "title='".$db->escape_string($mybb->input['title'])."' AND (sid = '-2' OR sid = '{$sid}' OR sid='{$template['sid']}')", array('order_by' => 'sid', 'order_dir' => 'desc')); - $existing_sid = $db->fetch_field($query, "sid"); - $existing_rows = $db->num_rows($query); - - if(($existing_sid == -2 && $existing_rows == 1) || $existing_rows == 0) - { - $template['tid'] = $db->insert_query("templates", $template_array); - } - else - { - $db->update_query("templates", $template_array, "tid='{$template['tid']}' AND sid != '-2'"); - } - } - else - { - // Global template set - $db->update_query("templates", $template_array, "tid='{$template['tid']}' AND sid != '-2'"); - } - - $plugins->run_hooks("admin_style_templates_edit_template_commit"); - - $query = $db->simple_select("templatesets", "title", "sid='{$sid}'"); - $set = $db->fetch_array($query); - - $exploded = explode("_", $template_array['title'], 2); - $prefix = $exploded[0]; - - $query = $db->simple_select("templategroups", "gid", "prefix = '".$db->escape_string($prefix)."'"); - $group = $db->fetch_field($query, "gid"); - - if(!$group) - { - $group = "-1"; - } - - // Log admin action - log_admin_action($template['tid'], $mybb->input['title'], $mybb->input['sid'], $set['title']); - - flash_message($lang->success_template_saved, 'success'); - - if($mybb->input['continue']) - { - if($mybb->input['from'] == "diff_report") - { - admin_redirect("index.php?module=style-templates&action=edit_template&title=".urlencode($mybb->input['title'])."&sid=".$mybb->get_input('sid', MyBB::INPUT_INT).$expand_str2."&from=diff_report"); - } - else - { - admin_redirect("index.php?module=style-templates&action=edit_template&title=".urlencode($mybb->input['title'])."&sid=".$mybb->get_input('sid', MyBB::INPUT_INT).$expand_str2); - } - } - else - { - if($mybb->input['from'] == "diff_report") - { - admin_redirect("index.php?module=style-templates&action=find_updated"); - } - else - { - admin_redirect("index.php?module=style-templates&sid=".$mybb->get_input('sid', MyBB::INPUT_INT).$expand_str2."#group_{$group}"); - } - } - } - } - - if($errors) - { - $template = $mybb->input; - } - else - { - $query = $db->simple_select("templates", "*", "title='".$db->escape_string($mybb->input['title'])."' AND (sid='-2' OR sid='{$sid}')", array('order_by' => 'sid', 'order_dir' => 'DESC', 'limit' => 1)); - $template = $db->fetch_array($query); - } - $template['title'] = htmlspecialchars_uni($template['title']); - - if($admin_options['codepress'] != 0) - { - $page->extra_header .= ' - - - - - - - - - - - - - - - -'; - } - - $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); - - if(!isset($mybb->input['from'])) - { - $mybb->input['from'] = ''; - } - - if($mybb->input['from'] == "diff_report") - { - $page->add_breadcrumb_item($lang->find_updated, "index.php?module=style-templates&action=find_updated"); - } - - $page->add_breadcrumb_item($lang->edit_template_breadcrumb.$template['title'], "index.php?module=style-templates&sid={$sid}"); - - $page->output_header($lang->sprintf($lang->editing_template, $template['title'])); - - - $sub_tabs = array(); - - if($mybb->input['from'] == "diff_report") - { - $sub_tabs['find_updated'] = array( - 'title' => $lang->find_updated, - 'link' => "index.php?module=style-templates&action=find_updated" - ); - - $sub_tabs['diff_report'] = array( - 'title' => $lang->diff_report, - 'link' => "index.php?module=style-templates&action=diff_report&title=".$db->escape_string($template['title'])."&sid1=".(int)$template['sid']."&sid2=-2", - ); - } - - $sub_tabs['edit_template'] = array( - 'title' => $lang->edit_template, - 'link' => "index.php?module=style-templates&action=edit_template&title=".htmlspecialchars_uni($template['title']).$expand_str, - 'description' => $lang->edit_template_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_template'); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=style-templates&action=edit_template{$expand_str}", "post", "edit_template"); - echo $form->generate_hidden_field('tid', $template['tid'])."\n"; - - if($mybb->input['from'] == "diff_report") - { - echo $form->generate_hidden_field('from', "diff_report"); - } - - $form_container = new FormContainer($lang->edit_template_breadcrumb.$template['title'], 'tfixed'); - $form_container->output_row($lang->template_name, $lang->template_name_desc, $form->generate_text_box('title', $template['title'], array('id' => 'title')), 'title'); - - // Force users to save the default template to a specific set, rather than the "global" templates - where they can delete it - if($template['sid'] == "-2") - { - unset($template_sets[-1]); - } - - $form_container->output_row($lang->template_set, $lang->template_set_desc, $form->generate_select_box('sid', $template_sets, $sid)); - - $form_container->output_row("", "", $form->generate_text_area('template', $template['template'], array('id' => 'template', 'class' => '', 'style' => 'width: 100%; height: 500px;'))); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_continue, array('name' => 'continue')); - $buttons[] = $form->generate_submit_button($lang->save_close, array('name' => 'close')); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - if($admin_options['codepress'] != 0) - { - echo ''; - } - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_template_group") -{ - $query = $db->simple_select("templategroups", "*", "gid = '".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - - if(!$db->num_rows($query)) - { - flash_message($lang->error_missing_template_group, 'error'); - admin_redirect("index.php?module=style-templates&sid={$sid}{$expand_str}"); - } - - $template_group = $db->fetch_array($query); - if(isset($template_group['isdefault']) && $template_group['isdefault'] == 1) - { - flash_message($lang->error_default_template_group, 'error'); - admin_redirect("index.php?module=style-templates&sid={$sid}{$expand_str}"); - } - - $plugins->run_hooks("admin_style_templates_edit_template_group"); - - $errors = array(); - if($mybb->request_method == "post") - { - $prefix = trim($mybb->input['prefix']); - if(!$prefix) - { - $errors[] = $lang->error_missing_group_prefix; - } - - if(strpos($prefix, "_") !== false) - { - $errors[] = $lang->error_invalid_group_title; - } - - $title = trim($mybb->input['title']); - if(!$title) - { - $errors[] = $lang->error_missing_group_title; - } - - if(!$errors) - { - if($prefix != $template_group['prefix']) - { - $query = $db->simple_select("templategroups", "COUNT(gid) AS gid", "prefix = '".$db->escape_string($mybb->input['prefix'])."'"); - $prefix_count = $db->fetch_field($query, 'gid'); - - if($prefix_count >= 1) - { - $errors[] = $lang->error_duplicate_group_prefix; - } - } - - if(!$errors) - { - // Add template group - $update_array = array( - 'prefix' => $db->escape_string($prefix), - 'title' => $db->escape_string($title), - 'isdefault' => 0 - ); - - $plugins->run_hooks('admin_style_templates_edit_template_group_commit'); - - $db->update_query('templategroups', $update_array, "gid = '{$template_group['gid']}'"); - - log_admin_action($template_group['gid'], htmlspecialchars_uni($title)); - flash_message($lang->success_template_group_saved, 'success'); - admin_redirect("index.php?module=style-templates&sid={$sid}"); - } - } - } - - $lang->editing_template_group = $lang->sprintf($lang->editing_template_group, htmlspecialchars_uni($template_group['title'])); - - $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); - $page->add_breadcrumb_item($lang->editing_template_group, "index.php?module=style-templates&sid={$sid}"); - - $page->output_header($lang->editing_template_group); - - if($errors) - { - $template_group['prefix'] = $prefix; - $template_group['title'] = $title; - - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=style-templates&action=edit_template_group", "post"); - echo $form->generate_hidden_field('sid', $sid); - echo $form->generate_hidden_field('gid', $template_group['gid']); - - $form_container = new FormContainer($lang->edit_template_group); - $form_container->output_row($lang->template_group_prefix, $lang->template_group_prefix_desc, $form->generate_text_box('prefix', $template_group['prefix'], array('id' => 'prefix')), 'prefix'); - $form_container->output_row($lang->template_group_title, $lang->template_group_title_desc, $form->generate_text_box('title', $template_group['title'], array('id' => 'title')), 'title'); - $form_container->end(); - - $buttons = array( - $form->generate_submit_button($lang->save_template_group) - ); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "search_replace") -{ - $plugins->run_hooks("admin_style_templates_search_replace"); - - if($mybb->request_method == "post") - { - if($mybb->input['type'] == "templates") - { - // Search and replace in templates - - if(!$mybb->input['find']) - { - flash_message($lang->search_noneset, "error"); - admin_redirect("index.php?module=style-templates&action=search_replace"); - } - else - { - $page->add_breadcrumb_item($lang->search_replace); - - $page->output_header($lang->search_replace); - - $plugins->run_hooks("admin_style_templates_search_replace_find"); - - $page->output_nav_tabs($sub_tabs, 'search_replace'); - - $templates_list = array(); - $table = new Table; - - $template_sets = array(); - - // Get the names of all template sets - $template_sets[-2] = $lang->master_templates; - $template_sets[-1] = $lang->global_templates; - - $query = $db->simple_select("templatesets", "sid, title"); - while($set = $db->fetch_array($query)) - { - $template_sets[$set['sid']] = $set['title']; - } - - $search_string = str_replace(array("\r\n", "\r"), "\n", $mybb->input['find']); - $search_string = str_replace(array(" ", "\t"), "", $search_string); - - // Select all templates with that search term - $query = $db->query(" - SELECT t.tid, t.title, t.sid, t.template - FROM ".TABLE_PREFIX."templates t - LEFT JOIN ".TABLE_PREFIX."templatesets s ON (t.sid=s.sid) - LEFT JOIN ".TABLE_PREFIX."templates t2 ON (t.title=t2.title AND t2.sid='1') - WHERE REPLACE(REPLACE(REPLACE(REPLACE(t.template, '\r\n', '\n'), '\r', '\n'), ' ', ''), '\t', '') LIKE '%".$db->escape_string_like($search_string)."%' AND NOT (t.sid = -2 AND (t2.tid) IS NOT NULL) - ORDER BY t.title ASC - "); - if($db->num_rows($query) == 0) - { - $table->construct_cell($lang->sprintf($lang->search_noresults, htmlspecialchars_uni($mybb->input['find'])), array("class" => "align_center")); - - $table->construct_row(); - - $table->output($lang->search_results); - } - else - { - $template_list = array(); - while($template = $db->fetch_array($query)) - { - $template_list[$template['sid']][$template['title']] = $template; - } - - $count = 0; - - foreach($template_list as $sid => $templates) - { - ++$count; - - $search_header = $lang->sprintf($lang->search_header, htmlspecialchars_uni($mybb->input['find']), $template_sets[$sid]); - $table->construct_header($search_header, array("colspan" => 2)); - - foreach($templates as $title => $template) - { - // Do replacement - $newtemplate = str_ireplace($mybb->input['find'], $mybb->input['replace'], $template['template']); - if($newtemplate != $template['template'] && check_template($newtemplate) === false) - { - // If the template is different, that means the search term has been found. - if(trim($mybb->input['replace']) != "") - { - if($template['sid'] == -2) - { - // The template is a master template. We have to make a new custom template. - $new_template = array( - "title" => $db->escape_string($title), - "template" => $db->escape_string($newtemplate), - "sid" => 1, - "version" => $mybb->version_code, - "status" => '', - "dateline" => TIME_NOW - ); - $new_tid = $db->insert_query("templates", $new_template); - $label = $lang->sprintf($lang->search_created_custom, $template['title']); - $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid=1"; - } - else - { - // The template is a custom template. Replace as normal. - // Update the template if there is a replacement term - $updatedtemplate = array( - "template" => $db->escape_string($newtemplate) - ); - $db->update_query("templates", $updatedtemplate, "tid='".$template['tid']."'"); - $label = $lang->sprintf($lang->search_updated, $template['title']); - $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$template['sid']}"; - } - } - else - { - // Just show that the term was found - if($template['sid'] == -2) - { - $label = $lang->sprintf($lang->search_found, $template['title']); - } - else - { - $label = $lang->sprintf($lang->search_found, $template['title']); - $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$template['sid']}"; - } - } - } - else - { - // Just show that the term was found - if($template['sid'] == -2) - { - $label = $lang->sprintf($lang->search_found, $template['title']); - } - else - { - $label = $lang->sprintf($lang->search_found, $template['title']); - $url = "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$template['sid']}"; - } - } - - $table->construct_cell($label, array("width" => "85%")); - - if($sid == -2) - { - $popup = new PopupMenu("template_{$template['tid']}", $lang->options); - - foreach($template_sets as $set_sid => $title) - { - if($set_sid > 0) - { - $popup->add_item($lang->edit_in." ".htmlspecialchars_uni($title), "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$set_sid}"); - } - } - - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - } - else - { - $table->construct_cell("{$lang->edit}", array("class" => "align_center")); - } - - $table->construct_row(); - } - - if($count == 1) - { - $table->output($lang->search_results); - } - else - { - $table->output(); - } - } - } - - if(trim($mybb->input['replace']) != "") - { - // Log admin action - only if replace - log_admin_action($mybb->input['find'], $mybb->input['replace']); - } - - $page->output_footer(); - exit; - } - } - else - { - if(!$mybb->input['title']) - { - flash_message($lang->search_noneset, "error"); - admin_redirect("index.php?module=style-templates&action=search_replace"); - } - else - { - // Search Template Titles - - $templatessets = array(); - - $templates_sets = array(); - // Get the names of all template sets - $template_sets[-2] = $lang->master_templates; - $template_sets[-1] = $lang->global_templates; - - $plugins->run_hooks("admin_style_templates_search_replace_title"); - - $query = $db->simple_select("templatesets", "sid, title"); - while($set = $db->fetch_array($query)) - { - $template_sets[$set['sid']] = $set['title']; - } - - $table = new Table; - - $query = $db->query(" - SELECT t.tid, t.title, t.sid, s.title as settitle, t2.tid as customtid - FROM ".TABLE_PREFIX."templates t - LEFT JOIN ".TABLE_PREFIX."templatesets s ON (t.sid=s.sid) - LEFT JOIN ".TABLE_PREFIX."templates t2 ON (t.title=t2.title AND t2.sid='1') - WHERE t.title LIKE '%".$db->escape_string_like($mybb->input['title'])."%' - ORDER BY t.title ASC - "); - while($template = $db->fetch_array($query)) - { - if($template['sid'] == -2) - { - if(!$template['customtid']) - { - $template['original'] = true; - } - else - { - $template['modified'] = true; - } - } - else - { - $template['original'] = false; - $template['modified'] = false; - } - $templatessets[$template['sid']][$template['title']] = $template; - } - - $page->add_breadcrumb_item($lang->search_replace); - - $page->output_header($lang->search_replace); - - $page->output_nav_tabs($sub_tabs, 'search_replace'); - - if(empty($templatessets)) - { - $table->construct_cell($lang->sprintf($lang->search_noresults_title, htmlspecialchars_uni($mybb->input['title'])), array("class" => "align_center")); - - $table->construct_row(); - - $table->output($lang->search_results); - } - - $count = 0; - - foreach($templatessets as $sid => $templates) - { - ++$count; - - $table->construct_header($template_sets[$sid], array("colspan" => 2)); - - foreach($templates as $template) - { - $template['pretty_title'] = $template['title']; - - $popup = new PopupMenu("template_{$template['tid']}", $lang->options); - - if($sid == -2) - { - foreach($template_sets as $set_sid => $title) - { - if($set_sid < 0) continue; - - $popup->add_item($lang->edit_in." ".htmlspecialchars_uni($title), "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$set_sid}"); - } - } - else - { - $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$sid}"); - } - - if(isset($template['modified']) && $template['modified'] == true) - { - if($sid > 0) - { - $popup->add_item($lang->diff_report, "index.php?module=style-templates&action=diff_report&title=".urlencode($template['title'])."&sid2={$sid}"); - - $popup->add_item($lang->revert_to_orig, "index.php?module=style-templates&action=revert&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_revertion}')"); - } - - $template['pretty_title'] = "{$template['title']}"; - } - // This template does not exist in the master list - else if(!isset($template['original']) || $template['original'] == false) - { - $popup->add_item($lang->delete_template, "index.php?module=style-templates&action=delete_template&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_deletion}')"); - - $template['pretty_title'] = "{$template['title']}"; - } - - $table->construct_cell("{$template['pretty_title']}", array("width" => "85%")); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - - $table->construct_row(); - } - - if($count == 1) - { - $table->output($lang->sprintf($lang->search_names_header, htmlspecialchars_uni($mybb->input['title']))); - } - else if($count > 0) - { - $table->output(); - } - } - - $page->output_footer(); - exit; - } - } - } - - if($admin_options['codepress'] != 0) - { - $page->extra_header .= ' - - - - - - - - - - - - - - - -'; - } - - $page->add_breadcrumb_item($lang->search_replace); - - $page->output_header($lang->search_replace); - - $page->output_nav_tabs($sub_tabs, 'search_replace'); - - $form = new Form("index.php?module=style-templates&action=search_replace", "post", "do_template"); - echo $form->generate_hidden_field('type', "templates"); - - $form_container = new FormContainer($lang->search_replace, 'tfixed'); - $form_container->output_row($lang->search_for, "", $form->generate_text_area('find', $mybb->input['find'], array('id' => 'find', 'class' => '', 'style' => 'width: 100%; height: 200px;'))); - - $form_container->output_row($lang->replace_with, "", $form->generate_text_area('replace', $mybb->input['replace'], array('id' => 'replace', 'class' => '', 'style' => 'width: 100%; height: 200px;'))); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->find_and_replace); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - echo "
"; - - - $form = new Form("index.php?module=style-templates&action=search_replace", "post", "do_title"); - echo $form->generate_hidden_field('type', "titles"); - - $form_container = new FormContainer($lang->search_template_names); - - $form_container->output_row($lang->search_for, "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->find_templates); - $buttons[] = $form->generate_reset_button($lang->reset); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - if($admin_options['codepress'] != 0) - { - echo ''; - } - - $page->output_footer(); -} - -if($mybb->input['action'] == "find_updated") -{ - // Finds templates that are old and have been updated by MyBB - $compare_version = $mybb->version_code; - $query = $db->query(" - SELECT COUNT(*) AS updated_count - FROM ".TABLE_PREFIX."templates t - LEFT JOIN ".TABLE_PREFIX."templates m ON (m.title=t.title AND m.sid=-2 AND m.version > t.version) - WHERE t.sid > 0 AND m.template != t.template - "); - $count = $db->fetch_array($query); - - if($count['updated_count'] < 1) - { - flash_message($lang->no_updated_templates, 'success'); - admin_redirect("index.php?module=style-templates"); - } - - $plugins->run_hooks("admin_style_templates_find_updated"); - - $page->add_breadcrumb_item($lang->find_updated, "index.php?module=style-templates&action=find_updated"); - - $page->output_header($lang->find_updated); - - $page->output_nav_tabs($sub_tabs, 'find_updated'); - - $query = $db->simple_select("templatesets", "*", "", array('order_by' => 'title')); - while($templateset = $db->fetch_array($query)) - { - $templatesets[$templateset['sid']] = $templateset; - } - - echo << -{$lang->legend} -
    -
  • {$lang->updated_template_welcome1}
  • -
  • {$lang->updated_template_welcome2}
  • -
  • {$lang->updated_template_welcome3}
  • -
- -LEGEND; - - $count = 0; - $done_set = array(); - $done_output = array(); - $templates = array(); - $table = new Table; - - $query = $db->query(" - SELECT t.tid, t.title, t.sid, t.version - FROM ".TABLE_PREFIX."templates t - LEFT JOIN ".TABLE_PREFIX."templates m ON (m.title=t.title AND m.sid=-2 AND m.version > t.version) - WHERE t.sid > 0 AND m.template != t.template - ORDER BY t.sid ASC, title ASC - "); - while($template = $db->fetch_array($query)) - { - $templates[$template['sid']][] = $template; - } - - foreach($templates as $sid => $templates) - { - if(!$done_set[$sid]) - { - $table->construct_header($templatesets[$sid]['title'], array("colspan" => 2)); - - $done_set[$sid] = 1; - ++$count; - } - - foreach($templates as $template) - { - $popup = new PopupMenu("template_{$template['tid']}", $lang->options); - $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$sid}&from=diff_report"); - $popup->add_item($lang->diff_report, "index.php?module=style-templates&action=diff_report&title=".urlencode($template['title'])."&sid1=".$template['sid']."&sid2=-2&from=diff_report"); - $popup->add_item($lang->revert_to_orig, "index.php?module=style-templates&action=revert&title=".urlencode($template['title'])."&sid={$sid}&from=diff_report&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_revertion}')"); - - $table->construct_cell("{$template['title']}", array('width' => '80%')); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - - $table->construct_row(); - } - - if($done_set[$sid] && !$done_output[$sid]) - { - $done_output[$sid] = 1; - if($count == 1) - { - $table->output($lang->find_updated); - } - else - { - $table->output(); - } - } - } - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete_template_group") -{ - $gid = $mybb->get_input('gid', MyBB::INPUT_INT); - $query = $db->simple_select("templategroups", "*", "gid='{$gid}'"); - - if(!$db->num_rows($query)) - { - flash_message($lang->error_missing_template_group, 'error'); - admin_redirect("index.php?module=style-templates&sid={$sid}"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=style-templates&sid={$sid}"); - } - - $plugins->run_hooks("admin_style_template_group_delete"); - - $template_group = $db->fetch_array($query); - - if($mybb->request_method == "post") - { - // Delete the group - $db->delete_query("templategroups", "gid = '{$template_group['gid']}'"); - - $plugins->run_hooks("admin_style_template_group_delete_commit"); - - // Log admin action - log_admin_action($template_group['gid'], htmlspecialchars_uni($template_group['title'])); - - flash_message($lang->success_template_group_deleted, 'success'); - admin_redirect("index.php?module=style-templates&sid={$sid}"); - } - else - { - $page->output_confirm_action("index.php?module=style-templates&action=delete_template_group&gid={$template_group['gid']}&sid={$sid}", $lang->confirm_template_group_delete); - } -} - -if($mybb->input['action'] == "delete_set") -{ - $query = $db->simple_select("templatesets", "*", "sid='{$sid}' AND sid > 0"); - $set = $db->fetch_array($query); - - // Does the template not exist? - if(!$set['sid']) - { - flash_message($lang->error_invalid_template_set, 'error'); - admin_redirect("index.php?module=style-templates"); - } - - $plugins->run_hooks("admin_style_templates_delete_set"); - - // Is there a theme attached to this set? - $query = $db->simple_select("themes", "properties"); - while($theme = $db->fetch_array($query)) - { - $properties = my_unserialize($theme['properties']); - if($properties['templateset'] == $sid) - { - flash_message($lang->error_themes_attached_template_set, 'error'); - admin_redirect("index.php?module=style-templates"); - break; - } - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=style-templates"); - } - - if($mybb->request_method == "post") - { - // Delete the templateset - $db->delete_query("templatesets", "sid='{$set['sid']}'"); - // Delete all custom templates in this templateset - $db->delete_query("templates", "sid='{$set['sid']}'"); - - $plugins->run_hooks("admin_style_templates_delete_set_commit"); - - // Log admin action - log_admin_action($set['sid'], $set['title']); - - flash_message($lang->success_template_set_deleted, 'success'); - admin_redirect("index.php?module=style-templates"); - } - else - { - $page->output_confirm_action("index.php?module=style-templates&action=delete_set&sid={$set['sid']}", $lang->confirm_template_set_deletion); - } - -} - -if($mybb->input['action'] == "delete_template") -{ - $query = $db->query(" - SELECT t.*, s.title as set_title - FROM ".TABLE_PREFIX."templates t - LEFT JOIN ".TABLE_PREFIX."templatesets s ON(t.sid=s.sid) - WHERE t.title='".$db->escape_string($mybb->input['title'])."' AND t.sid > '-2' AND t.sid = '{$sid}' - "); - $template = $db->fetch_array($query); - - // Does the template not exist? - if(!$template) - { - flash_message($lang->error_invalid_template, 'error'); - admin_redirect("index.php?module=style-templates"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); - } - - $plugins->run_hooks("admin_style_templates_delete_template"); - - if($mybb->request_method == "post") - { - // Delete the template - $db->delete_query("templates", "tid='{$template['tid']}'"); - - $plugins->run_hooks("admin_style_templates_delete_template_commit"); - - // Log admin action - log_admin_action($template['tid'], $template['title'], $template['sid'], $template['set_title']); - - flash_message($lang->success_template_deleted, 'success'); - admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); - } - else - { - $page->output_confirm_action("index.php?module=style-templates&action=delete_template&sid={$template['sid']}{$expand_str}", $lang->confirm_template_deletion); - } -} - -if($mybb->input['action'] == "diff_report") -{ - // Compares a template of sid1 with that of sid2, if no sid1, it is assumed -2 - if(!$mybb->input['sid1'] || !isset($template_sets[$mybb->input['sid1']])) - { - $mybb->input['sid1'] = -2; - } - - if($mybb->input['sid2'] == -2) - { - $sub_tabs['find_updated'] = array( - 'title' => $lang->find_updated, - 'link' => "index.php?module=style-templates&action=find_updated" - ); - } - - if($mybb->input['sid2'] != -2 && !isset($template_sets[$mybb->input['sid2']])) - { - flash_message($lang->error_invalid_input, 'error'); - admin_redirect("index.php?module=style-templates"); - } - - if(!$mybb->input['from']) - { - $mybb->input['from'] = 0; - } - - $sub_tabs['diff_report'] = array( - 'title' => $lang->diff_report, - 'link' => "index.php?module=style-templates&action=diff_report&title=".$db->escape_string($mybb->input['title'])."&from=".htmlspecialchars_uni($mybb->input['from'])."sid1=".$mybb->get_input('sid1', MyBB::INPUT_INT)."&sid2=".$mybb->get_input('sid2', MyBB::INPUT_INT), - 'description' => $lang->diff_report_desc - ); - - $plugins->run_hooks("admin_style_templates_diff_report"); - - $query = $db->simple_select("templates", "*", "title='".$db->escape_string($mybb->input['title'])."' AND sid='".$mybb->get_input('sid1', MyBB::INPUT_INT)."'"); - $template1 = $db->fetch_array($query); - - $query = $db->simple_select("templates", "*", "title='".$db->escape_string($mybb->input['title'])."' AND sid='".$mybb->get_input('sid2', MyBB::INPUT_INT)."'"); - $template2 = $db->fetch_array($query); - - if($mybb->input['sid2'] == -2) - { - $sub_tabs['full_edit'] = array( - 'title' => $lang->full_edit, - 'link' => "index.php?module=style-templates&action=edit_template&title=".urlencode($template1['title'])."&sid=".$mybb->get_input('sid1', MyBB::INPUT_INT)."&from=diff_report", - ); - } - - if($template1['template'] == $template2['template']) - { - flash_message($lang->templates_the_same, 'error'); - admin_redirect("index.php?module=style-templates&sid=".$mybb->get_input('sid2', MyBB::INPUT_INT).$expand_str); - } - - $template1['template'] = explode("\n", $template1['template']); - $template2['template'] = explode("\n", $template2['template']); - - $plugins->run_hooks("admin_style_templates_diff_report_run"); - - require_once MYBB_ROOT."inc/3rdparty/diff/Diff.php"; - require_once MYBB_ROOT."inc/3rdparty/diff/Diff/Renderer.php"; - require_once MYBB_ROOT."inc/3rdparty/diff/Diff/Renderer/Inline.php"; - - $diff = new Horde_Text_Diff('auto', array($template1['template'], $template2['template'])); - $renderer = new Horde_Text_Diff_Renderer_Inline(); - - if($sid) - { - $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}{$expand_str}"); - } - - if($mybb->input['sid2'] == -2) - { - $page->add_breadcrumb_item($lang->find_updated, "index.php?module=style-templates&action=find_updated"); - } - - $page->add_breadcrumb_item($lang->diff_report.": ".htmlspecialchars_uni($template1['title']), "index.php?module=style-templates&action=diff_report&title=".$db->escape_string($mybb->input['title'])."&from=".htmlspecialchars_uni($mybb->input['from'])."&sid1=".$mybb->get_input('sid1', MyBB::INPUT_INT)."&sid2=".$mybb->get_input('sid2', MyBB::INPUT_INT)); - - $page->output_header($lang->template_sets); - - $page->output_nav_tabs($sub_tabs, 'diff_report'); - - $table = new Table; - - if($mybb->input['from']) - { - $table->construct_header("".$lang->master_updated_ins."
".$lang->master_updated_del.""); - } - else - { - $table->construct_header("".$lang->master_updated_del."
".$lang->master_updated_ins.""); - } - - $table->construct_cell("
".$renderer->render($diff)."
"); - $table->construct_row(); - - $table->output($lang->template_diff_analysis.": ".$template1['title']); - - $page->output_footer(); -} - -if($mybb->input['action'] == "revert") -{ - $query = $db->query(" - SELECT t.*, s.title as set_title - FROM ".TABLE_PREFIX."templates t - LEFT JOIN ".TABLE_PREFIX."templatesets s ON(s.sid=t.sid) - WHERE t.title='".$db->escape_string($mybb->input['title'])."' AND t.sid > 0 AND t.sid = '".$mybb->get_input('sid', MyBB::INPUT_INT)."' - "); - $template = $db->fetch_array($query); - - // Does the template not exist? - if(!$template) - { - flash_message($lang->error_invalid_template, 'error'); - admin_redirect("index.php?module=style-templates"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); - } - - $plugins->run_hooks("admin_style_templates_revert"); - - if($mybb->request_method == "post") - { - // Revert the template - $db->delete_query("templates", "tid='{$template['tid']}'"); - - $plugins->run_hooks("admin_style_templates_revert_commit"); - - // Log admin action - log_admin_action($template['tid'], $template['title'], $template['sid'], $template['set_title']); - - flash_message($lang->success_template_reverted, 'success'); - - if($mybb->input['from'] == "diff_report") - { - admin_redirect("index.php?module=style-templates&action=find_updated"); - } - else - { - admin_redirect("index.php?module=style-templates&sid={$template['sid']}{$expand_str2}"); - } - } - else - { - $page->output_confirm_action("index.php?module=style-templates&sid={$template['sid']}{$expand_str}", $lang->confirm_template_revertion); - } -} - -if($mybb->input['sid'] && !$mybb->input['action']) -{ - if(!isset($template_sets[$mybb->input['sid']])) - { - flash_message($lang->error_invalid_input, 'error'); - admin_redirect("index.php?module=style-templates"); - } - - $plugins->run_hooks("admin_style_templates_set"); - - $table = new Table; - - $page->add_breadcrumb_item($template_sets[$sid], "index.php?module=style-templates&sid={$sid}"); - - $page->output_header($lang->template_sets); - - $page->output_nav_tabs($sub_tabs, 'manage_templates'); - - $table->construct_header($lang->template_set); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - // Global Templates - if($sid == -1) - { - $query = $db->simple_select("templates", "tid,title", "sid='-1'", array('order_by' => 'title', 'order_dir' => 'ASC')); - while($template = $db->fetch_array($query)) - { - $popup = new PopupMenu("template_{$template['tid']}", $lang->options); - $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid=-1"); - $popup->add_item($lang->delete_template, "index.php?module=style-templates&action=delete_template&title=".urlencode($template['title'])."&sid=-1&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_deletion}')"); - - $table->construct_cell("{$template['title']}"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_global_templates, array('colspan' => 2)); - $table->construct_row(); - } - - $table->output($template_sets[$sid]); - - $page->output_footer(); - } - - if(!isset($mybb->input['expand'])) - { - $mybb->input['expand'] = ''; - } - if($mybb->input['expand'] == 'all') - { - // If we're expanding everything, stick in the ungrouped templates in the list as well - $expand_array = array(-1); - } - // Fetch Groups - $query = $db->simple_select("templategroups", "*"); - - $template_groups = array(); - while($templategroup = $db->fetch_array($query)) - { - $templategroup['title'] = $lang->sprintf($lang->templates, htmlspecialchars_uni($lang->parse($templategroup['title']))); - if($mybb->input['expand'] == 'all') - { - $expand_array[] = $templategroup['gid']; - } - if(in_array($templategroup['gid'], $expand_array)) - { - $templategroup['expanded'] = 1; - } - $template_groups[$templategroup['prefix']] = $templategroup; - } - - /** - * @param array $a - * @param array $b - * - * @return int - */ - function sort_template_groups($a, $b) - { - return strcasecmp($a['title'], $b['title']); - } - uasort($template_groups, "sort_template_groups"); - - // Add the ungrouped templates group at the bottom - $template_groups['-1'] = array( - "prefix" => "", - "title" => $lang->ungrouped_templates, - "gid" => -1 - ); - - // Set the template group keys to lowercase for case insensitive comparison. - $template_groups = array_change_key_case($template_groups, CASE_LOWER); - - // Load the list of templates - $query = $db->simple_select("templates", "*", "sid='".$mybb->get_input('sid', MyBB::INPUT_INT)."' OR sid='-2'", array('order_by' => 'sid DESC, title', 'order_dir' => 'ASC')); - while($template = $db->fetch_array($query)) - { - $exploded = explode("_", $template['title'], 2); - - // Set the prefix to lowercase for case insensitive comparison. - $exploded[0] = strtolower($exploded[0]); - - if(isset($template_groups[$exploded[0]])) - { - $group = $exploded[0]; - } - else - { - $group = -1; - } - - $template['gid'] = -1; - if(isset($template_groups[$exploded[0]]['gid'])) - { - $template['gid'] = $template_groups[$exploded[0]]['gid']; - } - - // If this template is not a master template, we simple add it to the list - if($template['sid'] != -2) - { - $template['original'] = false; - $template['modified'] = false; - $template_groups[$group]['templates'][$template['title']] = $template; - } - else if(!in_array($template['gid'], $expand_array) && !isset($expand_array[-1])) - { - $template['original'] = true; - $template['modified'] = false; - $template_groups[$group]['templates'][$template['title']] = $template; - - // Save some memory! - unset($template_groups[$group]['templates'][$template['title']]['template']); - } - // Otherwise, if we are down to master templates we need to do a few extra things - else - { - // Master template that hasn't been customised in the set we have expanded - if(!isset($template_groups[$group]['templates'][$template['title']]) || $template_groups[$group]['templates'][$template['title']]['template'] == $template['template']) - { - $template['original'] = true; - $template_groups[$group]['templates'][$template['title']] = $template; - } - // Template has been modified in the set we have expanded (it doesn't match the master) - else if($template_groups[$group]['templates'][$template['title']]['template'] != $template['template'] && $template_groups[$group]['templates'][$template['title']]['sid'] != -2) - { - $template_groups[$group]['templates'][$template['title']]['modified'] = true; - } - - // Save some memory! - unset($template_groups[$group]['templates'][$template['title']]['template']); - } - } - - foreach($template_groups as $prefix => $group) - { - $tmp_expand = ""; - if(in_array($group['gid'], $expand_array)) - { - $expand = $lang->collapse; - $expanded = true; - - $tmp_expand = $expand_array; - $unsetgid = array_search($group['gid'], $tmp_expand); - unset($tmp_expand[$unsetgid]); - $group['expand_str'] = implode("|", $tmp_expand); - } - else - { - $expand = $lang->expand; - $expanded = false; - - $group['expand_str'] = implode("|", $expand_array); - if($group['expand_str']) - { - $group['expand_str'] .= "|"; - } - $group['expand_str'] .= $group['gid']; - } - - if($group['expand_str']) - { - $group['expand_str'] = "&expand={$group['expand_str']}"; - } - - $set_popup = ''; - if(isset($group['isdefault']) && !$group['isdefault']) - { - $popup = new PopupMenu("template_set_{$group['gid']}", $lang->options); - $popup->add_item($lang->edit_template_group, "index.php?module=style-templates&sid={$sid}&action=edit_template_group&gid={$group['gid']}{$group['expand_str']}"); - $popup->add_item($lang->delete_template_group, "index.php?module=style-templates&sid={$sid}&action=delete_template_group&gid={$group['gid']}&my_post_key={$mybb->post_code}{$group['expand_str']}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_group_delete}')"); - - $set_popup = "
{$popup->fetch()}
"; - } - - if($expanded == true) - { - // Show templates in this group - $table->construct_cell("{$set_popup}{$group['title']}"); - $table->construct_cell("{$expand}", array("class" => "align_center")); - $table->construct_row(array("class" => "alt_row", "id" => "group_".$group['gid'], "name" => "group_".$group['gid'])); - - if(isset($group['templates']) && count($group['templates']) > 0) - { - $templates = $group['templates']; - ksort($templates); - - foreach($templates as $template) - { - $template['pretty_title'] = $template['title']; - - $popup = new PopupMenu("template_{$template['tid']}", $lang->options); - $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$sid}{$expand_str}"); - - if(isset($template['modified']) && $template['modified'] == true) - { - if($sid > 0) - { - $popup->add_item($lang->diff_report, "index.php?module=style-templates&action=diff_report&title=".urlencode($template['title'])."&sid2={$sid}"); - - $popup->add_item($lang->revert_to_orig, "index.php?module=style-templates&action=revert&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}{$expand_str}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_revertion}')"); - } - - $template['pretty_title'] = "{$template['title']}"; - } - // This template does not exist in the master list - else if(isset($template['original']) && $template['original'] == false) - { - $popup->add_item($lang->delete_template, "index.php?module=style-templates&action=delete_template&title=".urlencode($template['title'])."&sid={$sid}&my_post_key={$mybb->post_code}{$expand_str}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_deletion}')"); - - $template['pretty_title'] = "{$template['title']}"; - } - - $table->construct_cell("{$template['pretty_title']}"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - - $table->construct_row(); - } - } - else - { - // No templates in this group - $table->construct_cell($lang->empty_template_set, array('colspan' => 2)); - $table->construct_row(); - } - } - else - { - // Collapse template set - $table->construct_cell("{$set_popup}{$group['title']}"); - $table->construct_cell("{$expand}", array("class" => "align_center")); - $table->construct_row(array("class" => "alt_row", "id" => "group_".$group['gid'], "name" => "group_".$group['gid'])); - } - } - - $table->output($template_sets[$sid]); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_style_templates_start"); - - $page->output_header($lang->template_sets); - - $page->output_nav_tabs($sub_tabs, 'templates'); - - $themes = array(); - $query = $db->simple_select("themes", "name,tid,properties", "tid != '1'"); - while($theme = $db->fetch_array($query)) - { - $tbits = my_unserialize($theme['properties']); - $themes[$tbits['templateset']][$theme['tid']] = htmlspecialchars_uni($theme['name']); - } - - $template_sets = array(); - $template_sets[-1]['title'] = $lang->global_templates; - $template_sets[-1]['sid'] = -1; - - $query = $db->simple_select("templatesets", "*", "", array('order_by' => 'title', 'order_dir' => 'ASC')); - while($template_set = $db->fetch_array($query)) - { - $template_sets[$template_set['sid']] = $template_set; - } - - $table = new Table; - $table->construct_header($lang->template_set); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - foreach($template_sets as $set) - { - if($set['sid'] == -1) - { - $table->construct_cell("{$lang->global_templates}
{$lang->used_by_all_themes}"); - $table->construct_cell("{$lang->expand_templates}", array("class" => "align_center")); - $table->construct_row(); - continue; - } - - if($themes[$set['sid']]) - { - $used_by_note = $lang->used_by; - $comma = ""; - foreach($themes[$set['sid']] as $theme_name) - { - $used_by_note .= $comma.$theme_name; - $comma = $lang->comma; - } - } - else - { - $used_by_note = $lang->not_used_by_any_themes; - } - - if($set['sid'] == 1) - { - $actions = "{$lang->expand_templates}"; - } - else - { - $popup = new PopupMenu("templateset_{$set['sid']}", $lang->options); - $popup->add_item($lang->expand_templates, "index.php?module=style-templates&sid={$set['sid']}"); - - if($set['sid'] != 1) - { - $popup->add_item($lang->edit_template_set, "index.php?module=style-templates&action=edit_set&sid={$set['sid']}"); - - if(!$themes[$set['sid']]) - { - $popup->add_item($lang->delete_template_set, "index.php?module=style-templates&action=delete_set&sid={$set['sid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_template_set_deletion}')"); - } - } - - $actions = $popup->fetch(); - } - - $table->construct_cell("{$set['title']}
{$used_by_note}"); - $table->construct_cell($actions, array("class" => "align_center")); - $table->construct_row(); - } - - $table->output($lang->template_sets); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/style/themes.php b/html/forums/admin/modules/style/themes.php deleted file mode 100644 index 4064c5d..0000000 --- a/html/forums/admin/modules/style/themes.php +++ /dev/null @@ -1,3011 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -require_once MYBB_ADMIN_DIR."inc/functions_themes.php"; - -$page->extra_header .= " -"; - -if($mybb->input['action'] == "xmlhttp_stylesheet" && $mybb->request_method == "post") -{ - // Fetch the theme we want to edit this stylesheet in - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $parent_list = make_parent_theme_list($theme['tid']); - $parent_list = implode(',', $parent_list); - if(!$parent_list) - { - $parent_list = 1; - } - - $query = $db->simple_select("themestylesheets", "*", "name='".$db->escape_string($mybb->input['file'])."' AND tid IN ({$parent_list})", array('order_by' => 'tid', 'order_dir' => 'desc', 'limit' => 1)); - $stylesheet = $db->fetch_array($query); - - // Does the theme not exist? - if(!$stylesheet['sid']) - { - flash_message($lang->error_invalid_stylesheet, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $css_array = css_to_array($stylesheet['stylesheet']); - $selector_list = get_selectors_as_options($css_array, $mybb->input['selector']); - $editable_selector = $css_array[$mybb->input['selector']]; - $properties = parse_css_properties($editable_selector['values']); - - $form = new Form("index.php?module=style-themes&action=stylesheet_properties", "post", "selector_form", 0, "", true); - echo $form->generate_hidden_field("tid", $mybb->input['tid'], array('id' => "tid"))."\n"; - echo $form->generate_hidden_field("file", htmlspecialchars_uni($mybb->input['file']), array('id' => "file"))."\n"; - echo $form->generate_hidden_field("selector", htmlspecialchars_uni($mybb->input['selector']), array('id' => 'hidden_selector'))."\n"; - - $table = new Table; - if($lang->settings['rtl'] === true) - { - $div_align = "left"; - } - else - { - $div_align = "right"; - } - - $table->construct_cell("
".$form->generate_text_box('css_bits[background]', $properties['background'], array('id' => 'css_bits[background]', 'style' => 'width: 260px;'))."
{$lang->background}
", array('style' => 'width: 20%;')); - $table->construct_cell("{$lang->extra_css_atribs}
".$form->generate_text_area('css_bits[extra]', $properties['extra'], array('id' => 'css_bits[extra]', 'style' => 'width: 98%;', 'rows' => '19'))."
", array('rowspan' => 8)); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[color]', $properties['color'], array('id' => 'css_bits[color]', 'style' => 'width: 260px;'))."
{$lang->color}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[width]', $properties['width'], array('id' => 'css_bits[width]', 'style' => 'width: 260px;'))."
{$lang->width}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_family]', $properties['font-family'], array('id' => 'css_bits[font_family]', 'style' => 'width: 260px;'))."
{$lang->font_family}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_size]', $properties['font-size'], array('id' => 'css_bits[font_size]', 'style' => 'width: 260px;'))."
{$lang->font_size}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_style]', $properties['font-style'], array('id' => 'css_bits[font_style]', 'style' => 'width: 260px;'))."
{$lang->font_style}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_weight]', $properties['font-weight'], array('id' => 'css_bits[font_weight]', 'style' => 'width: 260px;'))."
{$lang->font_weight}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[text_decoration]', $properties['text-decoration'], array('id' => 'css_bits[text_decoration]', 'style' => 'width: 260px;'))."
{$lang->text_decoration}
", array('style' => 'width: 40%;')); - $table->construct_row(); - - $table->output(htmlspecialchars_uni($editable_selector['class_name']).""); - exit; -} - -$page->add_breadcrumb_item($lang->themes, "index.php?module=style-themes"); - -if($mybb->input['action'] == "add" || $mybb->input['action'] == "import" || $mybb->input['action'] == "browse" || !$mybb->input['action']) -{ - $sub_tabs['themes'] = array( - 'title' => $lang->themes, - 'link' => "index.php?module=style-themes", - 'description' => $lang->themes_desc - ); - - $sub_tabs['create_theme'] = array( - 'title' => $lang->create_new_theme, - 'link' => "index.php?module=style-themes&action=add", - 'description' => $lang->create_new_theme_desc - ); - - $sub_tabs['import_theme'] = array( - 'title' => $lang->import_a_theme, - 'link' => "index.php?module=style-themes&action=import", - 'description' => $lang->import_a_theme_desc - ); - - $sub_tabs['browse_themes'] = array( - 'title' => $lang->browse_themes, - 'link' => "index.php?module=style-themes&action=browse", - 'description' => $lang->browse_themes_desc - ); -} - -$plugins->run_hooks("admin_style_themes_begin"); - -if($mybb->input['action'] == "browse") -{ - $plugins->run_hooks("admin_style_themes_browse"); - - $page->add_breadcrumb_item($lang->browse_themes); - - $page->output_header($lang->browse_themes); - - $page->output_nav_tabs($sub_tabs, 'browse_themes'); - - // Process search requests - require_once MYBB_ROOT."inc/class_xml.php"; - - $keywords = ""; - if($mybb->input['keywords']) - { - $keywords = "&keywords=".urlencode($mybb->input['keywords']); - } - - if($mybb->input['page']) - { - $url_page = "&page=".$mybb->get_input('page', MyBB::INPUT_INT); - } - else - { - $mybb->input['page'] = 1; - $url_page = ""; - } - - // Gets the major version code. i.e. 1410 -> 1400 or 121 -> 1200 - $major_version_code = round($mybb->version_code/100, 0)*100; - // Convert to mods site version codes - $search_version = ($major_version_code/100).'x'; - - $contents = fetch_remote_file("https://community.mybb.com/xmlbrowse.php?type=themes&version={$search_version}{$keywords}{$url_page}", $post_data); - - if(!$contents) - { - $page->output_inline_error($lang->error_communication_problem); - $page->output_footer(); - exit; - } - - $table = new Table; - $table->construct_header($lang->themes, array('colspan' => 2)); - $table->construct_header($lang->controls, array("class" => "align_center", 'width' => 125)); - - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - if(!is_array($tree) || !isset($tree['results'])) - { - $page->output_inline_error($lang->error_communication_problem); - $page->output_footer(); - exit; - } - - if(!empty($tree['results']['result'])) - { - if(array_key_exists("tag", $tree['results']['result'])) - { - $only_theme = $tree['results']['result']; - unset($tree['results']['result']); - $tree['results']['result'][0] = $only_theme; - } - - require_once MYBB_ROOT . '/inc/class_parser.php'; - $post_parser = new postParser(); - - foreach($tree['results']['result'] as $result) - { - $result['thumbnail']['value'] = htmlspecialchars_uni($result['thumbnail']['value']); - $result['name']['value'] = htmlspecialchars_uni($result['name']['value']); - $result['description']['value'] = htmlspecialchars_uni($result['description']['value']); - $result['author']['value'] = $post_parser->parse_message($result['author']['value'], array( - 'allow_html' => true - ) - ); - $result['download_url']['value'] = htmlspecialchars_uni(html_entity_decode($result['download_url']['value'])); - - $table->construct_cell("\"{$lang-theme_thumbnail}\" title=\"{$lang->theme_thumbnail}\"/>", array("class" => "align_center", "width" => 100)); - $table->construct_cell("{$result['name']['value']}
{$result['description']['value']}
{$lang->created_by} {$result['author']['value']}"); - $table->construct_cell("{$lang->download}", array("class" => "align_center")); - $table->construct_row(); - } - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->error_no_results_found, array("colspan" => 3)); - $table->construct_row(); - } - - $search = new Form("index.php?module=style-themes&action=browse", 'post', 'search_form'); - echo "
"; - if($mybb->input['keywords']) - { - $default_class = ''; - $value = htmlspecialchars_uni($mybb->input['keywords']); - } - else - { - $default_class = "search_default"; - $value = $lang->search_for_themes; - } - echo $search->generate_text_box('keywords', $value, array('id' => 'search_keywords', 'class' => "{$default_class} field150 field_small"))."\n"; - echo "search}\" />\n"; - echo "\n"; - echo "
\n"; - echo $search->end(); - - // Recommended themes = Default; Otherwise search results & pagination - if($mybb->request_method == "post") - { - $table->output("{$lang->browse_all_themes}".$lang->sprintf($lang->browse_results_for_mybb, $mybb->version)); - } - else - { - $table->output("{$lang->browse_all_themes}".$lang->sprintf($lang->recommended_themes_for_mybb, $mybb->version)); - } - - echo "
".draw_admin_pagination($mybb->input['page'], 15, $tree['results']['attributes']['total'], "index.php?module=style-themes&action=browse{$keywords}&page={page}"); - - $page->output_footer(); -} - -if($mybb->input['action'] == "import") -{ - $plugins->run_hooks("admin_style_themes_import"); - - if($mybb->request_method == "post") - { - if(!$_FILES['local_file'] && !$mybb->input['url']) - { - $errors[] = $lang->error_missing_url; - } - - if(!$errors) - { - // Find out if there was an uploaded file - if($_FILES['local_file']['error'] != 4) - { - // Find out if there was an error with the uploaded file - if($_FILES['local_file']['error'] != 0) - { - $errors[] = $lang->error_uploadfailed.$lang->error_uploadfailed_detail; - switch($_FILES['local_file']['error']) - { - case 1: // UPLOAD_ERR_INI_SIZE - $errors[] = $lang->error_uploadfailed_php1; - break; - case 2: // UPLOAD_ERR_FORM_SIZE - $errors[] = $lang->error_uploadfailed_php2; - break; - case 3: // UPLOAD_ERR_PARTIAL - $errors[] = $lang->error_uploadfailed_php3; - break; - case 6: // UPLOAD_ERR_NO_TMP_DIR - $errors[] = $lang->error_uploadfailed_php6; - break; - case 7: // UPLOAD_ERR_CANT_WRITE - $errors[] = $lang->error_uploadfailed_php7; - break; - default: - $errors[] = $lang->sprintf($lang->error_uploadfailed_phpx, $_FILES['local_file']['error']); - break; - } - } - - if(!$errors) - { - // Was the temporary file found? - if(!is_uploaded_file($_FILES['local_file']['tmp_name'])) - { - $errors[] = $lang->error_uploadfailed_lost; - } - // Get the contents - $contents = @file_get_contents($_FILES['local_file']['tmp_name']); - // Delete the temporary file if possible - @unlink($_FILES['local_file']['tmp_name']); - // Are there contents? - if(!trim($contents)) - { - $errors[] = $lang->error_uploadfailed_nocontents; - } - } - } - else if(!empty($mybb->input['url'])) - { - // Get the contents - $contents = @fetch_remote_file($mybb->input['url']); - if(!$contents) - { - $errors[] = $lang->error_local_file; - } - } - else - { - // UPLOAD_ERR_NO_FILE - $errors[] = $lang->error_uploadfailed_php4; - } - - if(!$errors) - { - $options = array( - 'no_stylesheets' => ($mybb->input['import_stylesheets'] ? 0 : 1), - 'no_templates' => ($mybb->input['import_templates'] ? 0 : 1), - 'version_compat' => $mybb->get_input('version_compat', MyBB::INPUT_INT), - 'parent' => $mybb->get_input('tid', MyBB::INPUT_INT), - 'force_name_check' => true, - ); - $theme_id = import_theme_xml($contents, $options); - - if($theme_id > -1) - { - $plugins->run_hooks("admin_style_themes_import_commit"); - - // Log admin action - log_admin_action($theme_id); - - flash_message($lang->success_imported_theme, 'success'); - admin_redirect("index.php?module=style-themes&action=edit&tid=".$theme_id); - } - else - { - switch($theme_id) - { - case -1: - $errors[] = $lang->error_uploadfailed_nocontents; - break; - case -2: - $errors[] = $lang->error_invalid_version; - break; - case -3: - $errors[] = $lang->error_theme_already_exists; - break; - case -4: - $errors[] = $lang->error_theme_security_problem; - } - } - } - } - } - - $query = $db->simple_select("themes", "tid, name"); - while($theme = $db->fetch_array($query)) - { - $themes[$theme['tid']] = $theme['name']; - } - - $page->add_breadcrumb_item($lang->import_a_theme, "index.php?module=style-themes&action=import"); - - $page->output_header("{$lang->themes} - {$lang->import_a_theme}"); - - $page->output_nav_tabs($sub_tabs, 'import_theme'); - - if($errors) - { - $page->output_inline_error($errors); - - if($mybb->input['import'] == 1) - { - $import_checked[1] = ""; - $import_checked[2] = "checked=\"checked\""; - } - else - { - $import_checked[1] = "checked=\"checked\""; - $import_checked[2] = ""; - } - } - else - { - $import_checked[1] = "checked=\"checked\""; - $import_checked[2] = ""; - - $mybb->input['import_stylesheets'] = true; - $mybb->input['import_templates'] = true; - } - - $form = new Form("index.php?module=style-themes&action=import", "post", "", 1); - - $actions = ' -
-
-
- - - - -
'.$form->generate_file_upload_box("local_file", array('style' => 'width: 230px;')).'
-
-
-
- - - - -
'.$form->generate_text_box("url", $mybb->input['file']).'
-
- '; - - $form_container = new FormContainer($lang->import_a_theme); - $form_container->output_row($lang->import_from, $lang->import_from_desc, $actions, 'file'); - $form_container->output_row($lang->parent_theme, $lang->parent_theme_desc, $form->generate_select_box('tid', $themes, $mybb->input['tid'], array('id' => 'tid')), 'tid'); - $form_container->output_row($lang->new_name, $lang->new_name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->advanced_options, "", $form->generate_check_box('version_compat', '1', $lang->ignore_version_compatibility, array('checked' => $mybb->input['version_compat'], 'id' => 'version_compat'))."
{$lang->ignore_version_compat_desc}
".$form->generate_check_box('import_stylesheets', '1', $lang->import_stylesheets, array('checked' => $mybb->input['import_stylesheets'], 'id' => 'import_stylesheets'))."
{$lang->import_stylesheets_desc}
".$form->generate_check_box('import_templates', '1', $lang->import_templates, array('checked' => $mybb->input['import_templates'], 'id' => 'import_templates'))."
{$lang->import_templates_desc}"); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->import_theme); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "export") -{ - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - // Does the theme not exist? - if(!$theme['tid']) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_export"); - - if($mybb->request_method == "post") - { - $properties = my_unserialize($theme['properties']); - - $xml = "settings['charset']}\"?".">\r\n"; - $xml .= "version_code."\">\r\n"; - $xml .= "\t\r\n"; - foreach($properties as $property => $value) - { - if($property == "inherited") continue; - - if(is_array($value)) - { - $value = my_serialize($value); - } - - $value = str_replace(']]>', ']]]]>', $value); - - $xml .= "\t\t<{$property}>\r\n"; - } - $xml .= "\t\r\n"; - - // Fetch list of all of the stylesheets for this theme - $file_stylesheets = my_unserialize($theme['stylesheets']); - - $stylesheets = array(); - $inherited_load = array(); - - // Now we loop through the list of stylesheets for each file - foreach($file_stylesheets as $file => $action_stylesheet) - { - if($file == 'inherited' || !is_array($action_stylesheet)) - { - continue; - } - - foreach($action_stylesheet as $action => $style) - { - foreach($style as $stylesheet) - { - $stylesheets[$stylesheet]['applied_to'][$file][] = $action; - if(is_array($file_stylesheets['inherited'][$file."_".$action]) && in_array($stylesheet, array_keys($file_stylesheets['inherited'][$file."_".$action]))) - { - $stylesheets[$stylesheet]['inherited'] = $file_stylesheets['inherited'][$file."_".$action]; - foreach($file_stylesheets['inherited'][$file."_".$action] as $value) - { - $inherited_load[] = $value; - } - } - } - } - } - - $inherited_load[] = $mybb->input['tid']; - $inherited_load = array_unique($inherited_load); - - $inherited_themes = array(); - if(count($inherited_load) > 0) - { - $query = $db->simple_select("themes", "tid, name", "tid IN (".implode(",", $inherited_load).")"); - while($inherited_theme = $db->fetch_array($query)) - { - $inherited_themes[$inherited_theme['tid']] = $inherited_theme['name']; - } - } - - $theme_stylesheets = array(); - - if(count($inherited_load) > 0) - { - $query = $db->simple_select("themestylesheets", "*", "tid IN (".implode(",", $inherited_load).")", array('order_by' => 'tid', 'order_dir' => 'desc')); - while($theme_stylesheet = $db->fetch_array($query)) - { - if(!$theme_stylesheets[$theme_stylesheet['cachefile']]) - { - $theme_stylesheets[$theme_stylesheet['cachefile']] = $theme_stylesheet; - $theme_stylesheets[$theme_stylesheet['sid']] = $theme_stylesheet['cachefile']; - } - } - } - - $xml .= "\t\r\n"; - foreach($stylesheets as $filename => $style) - { - if(strpos($filename, 'css.php?stylesheet=') !== false) - { - $style['sid'] = (int)str_replace('css.php?stylesheet=', '', $filename); - $filename = $theme_stylesheets[$style['sid']]; - } - else - { - $filename = basename($filename); - $style['sid'] = $theme_stylesheets[$filename]['sid']; - } - - $style['tid'] = $theme_stylesheets[$filename]['tid']; - - if($mybb->input['custom_theme'] == 1 && $style['tid'] != $mybb->input['tid']) - { - continue; - } - - // Has the file on the file system been modified? - resync_stylesheet($theme_stylesheets[$filename]); - - $style['sid'] = $theme_stylesheets[$filename]['sid']; - - $attachedto = $theme_stylesheets[$filename]['attachedto']; - $stylesheet = $theme_stylesheets[$filename]['stylesheet']; - $stylesheet = str_replace(']]>', ']]]]>', $stylesheet); - - if($attachedto) - { - $attachedto = "attachedto=\"{$attachedto}\" "; - } - - $filename = $theme_stylesheets[$filename]['name']; - - $xml .= "\t\tversion_code}\">\r\n\t\t\r\n"; - - } - $xml .= "\t\r\n"; - - if($mybb->input['include_templates'] != 0) - { - $xml .= "\t\r\n"; - $query = $db->simple_select("templates", "*", "sid='".$properties['templateset']."'"); - while($template = $db->fetch_array($query)) - { - $template['template'] = str_replace(']]>', ']]]]>', $template['template']); - $xml .= "\t\t\r\n"; - } - $xml .= "\t\r\n"; - } - $xml .= ""; - - $plugins->run_hooks("admin_style_themes_export_commit"); - - // Log admin action - log_admin_action($theme['tid'], htmlspecialchars_uni($theme['name'])); - - $theme['name'] = rawurlencode($theme['name']); - header("Content-disposition: attachment; filename=".$theme['name']."-theme.xml"); - header("Content-type: application/octet-stream"); - header("Content-Length: ".strlen($xml)); - header("Pragma: no-cache"); - header("Expires: 0"); - echo $xml; - exit; - } - - $page->add_breadcrumb_item(htmlspecialchars_uni($theme['name']), "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}"); - - $page->add_breadcrumb_item($lang->export_theme, "index.php?module=style-themes&action=export"); - - $page->output_header("{$lang->themes} - {$lang->export_theme}"); - - $sub_tabs['edit_stylesheets'] = array( - 'title' => $lang->edit_stylesheets, - 'link' => "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}", - ); - - $sub_tabs['add_stylesheet'] = array( - 'title' => $lang->add_stylesheet, - 'link' => "index.php?module=style-themes&action=add_stylesheet&tid={$mybb->input['tid']}", - ); - - $sub_tabs['export_theme'] = array( - 'title' => $lang->export_theme, - 'link' => "index.php?module=style-themes&action=export&tid={$mybb->input['tid']}", - 'description' => $lang->export_theme_desc - ); - - $sub_tabs['duplicate_theme'] = array( - 'title' => $lang->duplicate_theme, - 'link' => "index.php?module=style-themes&action=duplicate&tid={$mybb->input['tid']}", - 'description' => $lang->duplicate_theme_desc - ); - - $page->output_nav_tabs($sub_tabs, 'export_theme'); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=style-themes&action=export", "post"); - echo $form->generate_hidden_field("tid", $theme['tid']); - - $form_container = new FormContainer($lang->export_theme.": ".htmlspecialchars_uni($theme['name'])); - $form_container->output_row($lang->include_custom_only, $lang->include_custom_only_desc, $form->generate_yes_no_radio('custom_theme', $mybb->input['custom_theme']), 'custom_theme'); - $form_container->output_row($lang->include_templates, $lang->include_templates_desc, $form->generate_yes_no_radio('include_templates', $mybb->input['include_templates']), 'include_templates'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->export_theme); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "duplicate") -{ - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - // Does the theme not exist? - if(!$theme['tid']) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_duplicate"); - - if($mybb->request_method == "post") - { - if($mybb->input['name'] == "") - { - $errors[] = $lang->error_missing_name; - } - else - { - $query = $db->simple_select("themes", "COUNT(tid) as numthemes", "name = '".$db->escape_string($mybb->get_input('name'))."'"); - $numthemes = $db->fetch_field($query, 'numthemes'); - - if($numthemes) - { - $errors[] = $lang->error_theme_already_exists; - } - } - - if(!$errors) - { - $properties = my_unserialize($theme['properties']); - $sid = $properties['templateset']; - $nprops = null; - if($mybb->input['duplicate_templates']) - { - $nsid = $db->insert_query("templatesets", array('title' => $db->escape_string($mybb->input['name'])." Templates")); - - // Copy all old Templates to our new templateset - $query = $db->simple_select("templates", "*", "sid='{$sid}'"); - while($template = $db->fetch_array($query)) - { - $insert = array( - "title" => $db->escape_string($template['title']), - "template" => $db->escape_string($template['template']), - "sid" => $nsid, - "version" => $db->escape_string($template['version']), - "dateline" => TIME_NOW - ); - - if($db->engine == "pgsql") - { - echo " "; - flush(); - } - - $db->insert_query("templates", $insert); - } - - // We need to change the templateset so we need to work out the others properties too - foreach($properties as $property => $value) - { - if($property == "inherited") - { - continue; - } - - $nprops[$property] = $value; - if($properties['inherited'][$property]) - { - $nprops['inherited'][$property] = $properties['inherited'][$property]; - } - else - { - $nprops['inherited'][$property] = $theme['tid']; - } - } - $nprops['templateset'] = $nsid; - } - $tid = build_new_theme($mybb->input['name'], $nprops, $theme['tid']); - - update_theme_stylesheet_list($tid); - - $plugins->run_hooks("admin_style_themes_duplicate_commit"); - - // Log admin action - log_admin_action($tid, $theme['tid']); - - flash_message($lang->success_duplicated_theme, 'success'); - admin_redirect("index.php?module=style-themes&action=edit&tid=".$tid); - } - } - - $page->add_breadcrumb_item(htmlspecialchars_uni($theme['name']), "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}"); - - $page->add_breadcrumb_item($lang->duplicate_theme, "index.php?module=style-themes&action=duplicate&tid={$theme['tid']}"); - - $page->output_header("{$lang->themes} - {$lang->duplicate_theme}"); - - $sub_tabs['edit_stylesheets'] = array( - 'title' => $lang->edit_stylesheets, - 'link' => "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}", - ); - - $sub_tabs['add_stylesheet'] = array( - 'title' => $lang->add_stylesheet, - 'link' => "index.php?module=style-themes&action=add_stylesheet&tid={$mybb->input['tid']}", - ); - - $sub_tabs['export_theme'] = array( - 'title' => $lang->export_theme, - 'link' => "index.php?module=style-themes&action=export&tid={$mybb->input['tid']}", - 'description' => $lang->export_theme_desc - ); - - $sub_tabs['duplicate_theme'] = array( - 'title' => $lang->duplicate_theme, - 'link' => "index.php?module=style-themes&action=duplicate&tid={$mybb->input['tid']}", - 'description' => $lang->duplicate_theme_desc - ); - - $page->output_nav_tabs($sub_tabs, 'duplicate_theme'); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['duplicate_templates'] = true; - } - - $form = new Form("index.php?module=style-themes&action=duplicate&tid={$theme['tid']}", "post"); - - $form_container = new FormContainer($lang->duplicate_theme); - $form_container->output_row($lang->new_name, $lang->new_name_duplicate_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->advanced_options, "", $form->generate_check_box('duplicate_templates', '1', $lang->duplicate_templates, array('checked' => $mybb->input['duplicate_templates'], 'id' => 'duplicate_templates'))."
{$lang->duplicate_templates_desc}"); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->duplicate_theme); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_style_themes_add"); - - $query = $db->simple_select("themes", "tid, name"); - while($theme = $db->fetch_array($query)) - { - $themes[$theme['tid']] = $theme['name']; - } - - if($mybb->request_method == "post") - { - if(!$mybb->input['name']) - { - $errors[] = $lang->error_missing_name; - } - else if(in_array($mybb->input['name'], $themes)) - { - $errors[] = $lang->error_theme_already_exists; - } - - if(!$errors) - { - $tid = build_new_theme($mybb->input['name'], null, $mybb->input['tid']); - - $plugins->run_hooks("admin_style_themes_add_commit"); - - // Log admin action - log_admin_action(htmlspecialchars_uni($mybb->input['name']), $tid); - - flash_message($lang->success_theme_created, 'success'); - admin_redirect("index.php?module=style-themes&action=edit&tid=".$tid); - } - } - - $page->add_breadcrumb_item($lang->create_new_theme, "index.php?module=style-themes&action=add"); - - $page->output_header("{$lang->themes} - {$lang->create_new_theme}"); - - $page->output_nav_tabs($sub_tabs, 'create_theme'); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=style-themes&action=add", "post"); - - $form_container = new FormContainer($lang->create_a_theme); - $form_container->output_row($lang->name, $lang->name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name')), 'name'); - $form_container->output_row($lang->parent_theme, $lang->parent_theme_desc, $form->generate_select_box('tid', $themes, $mybb->input['tid'], array('id' => 'tid')), 'tid'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->create_new_theme); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - // Does the theme not exist? or are we trying to delete the master? - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_delete"); - - if($mybb->request_method == "post") - { - $inherited_theme_cache = array(); - - $query = $db->simple_select("themes", "tid,stylesheets", "tid != '{$theme['tid']}'", array('order_by' => "pid, name")); - while($theme2 = $db->fetch_array($query)) - { - $theme2['stylesheets'] = my_unserialize($theme2['stylesheets']); - - if(!$theme2['stylesheets']['inherited']) - { - continue; - } - - $inherited_theme_cache[$theme2['tid']] = $theme2['stylesheets']['inherited']; - } - - $inherited_stylesheets = false; - - // Are any other themes relying on stylesheets from this theme? Get a list and show an error - foreach($inherited_theme_cache as $tid => $inherited) - { - foreach($inherited as $file => $value) - { - foreach($value as $filepath => $val) - { - if(strpos($filepath, "cache/themes/theme{$theme['tid']}") !== false) - { - $inherited_stylesheets = true; - } - } - } - } - - if($inherited_stylesheets == true) - { - flash_message($lang->error_inheriting_stylesheets, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $query = $db->simple_select("themestylesheets", "cachefile", "tid='{$theme['tid']}'"); - while($cachefile = $db->fetch_array($query)) - { - @unlink(MYBB_ROOT."cache/themes/theme{$theme['tid']}/{$cachefile['cachefile']}"); - - $filename_min = str_replace('.css', '.min.css', $cachefile['cachefile']); - @unlink(MYBB_ROOT."cache/themes/theme{$theme['tid']}/{$filename_min}"); - } - @unlink(MYBB_ROOT."cache/themes/theme{$theme['tid']}/index.html"); - - $db->delete_query("themestylesheets", "tid='{$theme['tid']}'"); - - // Update the CSS file list for this theme - update_theme_stylesheet_list($theme['tid'], $theme, true); - - $db->update_query("users", array('style' => 0), "style='{$theme['tid']}'"); - - @rmdir(MYBB_ROOT."cache/themes/theme{$theme['tid']}/"); - - $children = (array)make_child_theme_list($theme['tid']); - $child_tids = array(); - - foreach($children as $child_tid) - { - if($child_tid != 0) - { - $child_tids[] = $child_tid; - } - } - - if(!empty($child_tids)) - { - $db->update_query("themes", array('pid' => $theme['pid']), "tid IN (".implode(',', $child_tids).")"); - } - - $db->delete_query("themes", "tid='{$theme['tid']}'", 1); - - $plugins->run_hooks("admin_style_themes_delete_commit"); - - // Log admin action - log_admin_action($theme['tid'], htmlspecialchars_uni($theme['name'])); - - flash_message($lang->success_theme_deleted, 'success'); - admin_redirect("index.php?module=style-themes"); - } - else - { - $page->output_confirm_action("index.php?module=style-themes&action=delete&tid={$theme['tid']}", $lang->confirm_theme_deletion); - } -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - // Does the theme not exist? - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_edit"); - - if($mybb->request_method == "post" && !$mybb->input['do']) - { - $properties = array( - 'templateset' => $mybb->get_input('templateset', MyBB::INPUT_INT), - 'editortheme' => $mybb->input['editortheme'], - 'imgdir' => $mybb->input['imgdir'], - 'logo' => $mybb->input['logo'], - 'tablespace' => $mybb->get_input('tablespace', MyBB::INPUT_INT), - 'borderwidth' => $mybb->get_input('borderwidth', MyBB::INPUT_INT), - 'color' => $mybb->input['color'] - ); - - if($properties['color'] == 'none') - { - unset($properties['color']); - } - - if($mybb->input['colors']) - { - $colors = explode("\n", $mybb->input['colors']); - - foreach($colors as $color) - { - $color = explode("=", $color); - - $properties['colors'][$color[0]] = $color[1]; - } - } - - if($properties['templateset'] <= 0) - { - $errors[] = $lang->error_invalid_templateset; - } - - $theme_properties = my_unserialize($theme['properties']); - if(is_array($theme_properties['disporder'])) - { - $properties['disporder'] = $theme_properties['disporder']; - } - else - { - $errors[] = $lang->error_no_display_order; - } - - $allowedgroups = array(); - if(is_array($mybb->input['allowedgroups'])) - { - foreach($mybb->input['allowedgroups'] as $gid) - { - if($gid == "all") - { - $allowedgroups = "all"; - break; - } - $gid = (int)$gid; - $allowedgroups[$gid] = $gid; - } - } - if(is_array($allowedgroups)) - { - $allowedgroups = implode(",", $allowedgroups); - } - - $update_array = array( - 'name' => $db->escape_string($mybb->input['name']), - 'pid' => $mybb->get_input('pid', MyBB::INPUT_INT), - 'allowedgroups' => $allowedgroups, - 'properties' => $db->escape_string(my_serialize($properties)) - ); - - // perform validation - if(!$update_array['name']) - { - $errors[] = $lang->error_missing_name; - } - else - { - $query = $db->simple_select("themes", "COUNT(tid) as numthemes", "name = '".$db->escape_string($update_array['name'])."' AND tid != '{$theme['tid']}'"); - $numthemes = $db->fetch_field($query, 'numthemes'); - - if($numthemes) - { - $errors[] = $lang->error_theme_already_exists; - } - } - - if($update_array['pid']) - { - $query = $db->simple_select("themes", "tid", "tid='".$update_array['pid']."'"); - $parent_check = $db->fetch_field($query, "tid"); - if(!$parent_check) - { - $errors[] = $lang->error_invalid_parent_theme; - } - } - if($properties['templateset']) - { - $query = $db->simple_select("templatesets", "sid", "sid='".$properties['templateset']."'"); - $ts_check = $db->fetch_field($query, "sid"); - if(!$ts_check) - { - unset($properties['templateset']); - } - } - if(!$properties['templateset']) - { - $errors[] = $lang->error_invalid_templateset; - } - if(!$properties['editortheme'] || !file_exists(MYBB_ROOT."jscripts/sceditor/editor_themes/".$properties['editortheme']) || is_dir(MYBB_ROOT."jscripts/sceditor/editor_themes/".$properties['editortheme'])) - { - $errors[] = $lang->error_invalid_editortheme; - } - - if(empty($errors)) - { - $plugins->run_hooks("admin_style_themes_edit_commit"); - - $db->update_query("themes", $update_array, "tid='{$theme['tid']}'"); - update_theme_stylesheet_list($theme['tid']); - - if($theme['def'] == 1) - { - $cache->update_default_theme(); - } - - // Log admin action - log_admin_action($theme['tid'], htmlspecialchars_uni($theme['name'])); - - flash_message($lang->success_theme_properties_updated, 'success'); - admin_redirect("index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - } - } - - // Fetch list of all of the stylesheets for this theme - $file_stylesheets = my_unserialize($theme['stylesheets']); - - $stylesheets = array(); - $inherited_load = array(); - - // Now we loop through the list of stylesheets for each file - foreach($file_stylesheets as $file => $action_stylesheet) - { - if($file == 'inherited' || !is_array($action_stylesheet)) - { - continue; - } - - foreach($action_stylesheet as $action => $style) - { - foreach($style as $stylesheet) - { - $stylesheets[$stylesheet]['applied_to'][$file][] = $action; - if(is_array($file_stylesheets['inherited'][$file."_".$action]) && in_array($stylesheet, array_keys($file_stylesheets['inherited'][$file."_".$action]))) - { - $stylesheets[$stylesheet]['inherited'] = $file_stylesheets['inherited'][$file."_".$action]; - foreach($file_stylesheets['inherited'][$file."_".$action] as $value) - { - $inherited_load[] = $value; - } - } - } - } - } - - $inherited_load[] = $mybb->input['tid']; - $inherited_load = array_unique($inherited_load); - - $inherited_themes = array(); - if(count($inherited_load) > 0) - { - $query = $db->simple_select("themes", "tid, name", "tid IN (".implode(",", $inherited_load).")"); - while($inherited_theme = $db->fetch_array($query)) - { - $inherited_themes[$inherited_theme['tid']] = $inherited_theme['name']; - } - } - - $theme_stylesheets = array(); - - if(count($inherited_load) > 0) - { - $query = $db->simple_select("themestylesheets", "*", "", array('order_by' => 'sid DESC, tid', 'order_dir' => 'desc')); - while($theme_stylesheet = $db->fetch_array($query)) - { - if(!isset($theme_stylesheets[$theme_stylesheet['name']]) && in_array($theme_stylesheet['tid'], $inherited_load)) - { - $theme_stylesheets[$theme_stylesheet['name']] = $theme_stylesheet; - } - - $theme_stylesheets[$theme_stylesheet['sid']] = $theme_stylesheet['name']; - } - } - - // Save any stylesheet orders - if($mybb->request_method == "post" && $mybb->input['do'] == "save_orders") - { - if(!is_array($mybb->input['disporder'])) - { - // Error out - flash_message($lang->error_no_display_order, 'error'); - admin_redirect("index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - } - - $orders = array(); - foreach($theme_stylesheets as $stylesheet => $properties) - { - if(is_array($properties)) - { - $order = (int)$mybb->input['disporder'][$properties['sid']]; - - $orders[$properties['name']] = $order; - } - } - - asort($orders, SORT_NUMERIC); - - // Save the orders in the theme properties - $properties = my_unserialize($theme['properties']); - $properties['disporder'] = $orders; - - $update_array = array( - "properties" => $db->escape_string(my_serialize($properties)) - ); - - $db->update_query("themes", $update_array, "tid = '{$theme['tid']}'"); - - if($theme['def'] == 1) - { - $cache->update_default_theme(); - } - - // normalize for consistency - update_theme_stylesheet_list($theme['tid'], false, true); - - flash_message($lang->success_stylesheet_order_updated, 'success'); - admin_redirect("index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - } - - $page->add_breadcrumb_item(htmlspecialchars_uni($theme['name']), "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}"); - - $page->output_header("{$lang->themes} - {$lang->stylesheets}"); - - $sub_tabs['edit_stylesheets'] = array( - 'title' => $lang->edit_stylesheets, - 'link' => "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}", - 'description' => $lang->edit_stylesheets_desc - ); - - $sub_tabs['add_stylesheet'] = array( - 'title' => $lang->add_stylesheet, - 'link' => "index.php?module=style-themes&action=add_stylesheet&tid={$mybb->input['tid']}", - ); - - $sub_tabs['export_theme'] = array( - 'title' => $lang->export_theme, - 'link' => "index.php?module=style-themes&action=export&tid={$mybb->input['tid']}" - ); - - $sub_tabs['duplicate_theme'] = array( - 'title' => $lang->duplicate_theme, - 'link' => "index.php?module=style-themes&action=duplicate&tid={$mybb->input['tid']}", - 'description' => $lang->duplicate_theme_desc - ); - - $properties = my_unserialize($theme['properties']); - $page->output_nav_tabs($sub_tabs, 'edit_stylesheets'); - - $table = new Table; - $table->construct_header($lang->stylesheets); - $table->construct_header($lang->display_order, array("class" => "align_center", "width" => 50)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - // Display Order form - $form = new Form("index.php?module=style-themes&action=edit", "post", "edit"); - echo $form->generate_hidden_field("tid", $theme['tid']); - echo $form->generate_hidden_field("do", 'save_orders'); - - // Order the stylesheets - $ordered_stylesheets = array(); - - foreach($properties['disporder'] as $style_name => $order) - { - foreach($stylesheets as $filename => $style) - { - if(strpos($filename, 'css.php?stylesheet=') !== false) - { - $style['sid'] = (int)str_replace('css.php?stylesheet=', '', $filename); - $filename = $theme_stylesheets[$style['sid']]; - } - - if(basename($filename) != $style_name) - { - continue; - } - - $ordered_stylesheets[$filename] = $style; - } - } - - foreach($ordered_stylesheets as $filename => $style) - { - if(strpos($filename, 'css.php?stylesheet=') !== false) - { - $style['sid'] = (int)str_replace('css.php?stylesheet=', '', $filename); - $filename = $theme_stylesheets[$style['sid']]; - } - else - { - $filename = basename($filename); - $style['sid'] = $theme_stylesheets[$filename]['sid']; - } - - // Has the file on the file system been modified? - resync_stylesheet($theme_stylesheets[$filename]); - - $filename = $theme_stylesheets[$filename]['name']; - - $inherited = ""; - $inherited_ary = array(); - if(is_array($style['inherited'])) - { - foreach($style['inherited'] as $tid) - { - if($inherited_themes[$tid]) - { - $inherited_ary[$tid] = $inherited_themes[$tid]; - } - } - } - - if(!empty($inherited_ary)) - { - $inherited = " ({$lang->inherited_from}"; - $sep = " "; - $inherited_count = count($inherited_ary); - $count = 0; - - foreach($inherited_ary as $tid => $file) - { - if(isset($applied_to_count) && $count == $applied_to_count && $count != 0) - { - $sep = " {$lang->and} "; - } - - $inherited .= $sep.$file; - $sep = $lang->comma; - - ++$count; - } - $inherited .= ")"; - } - - if(is_array($style['applied_to']) && (!isset($style['applied_to']['global']) || $style['applied_to']['global'][0] != "global")) - { - $attached_to = ''; - - $applied_to_count = count($style['applied_to']); - $count = 0; - $sep = " "; - $name = ""; - - $colors = array(); - - if(!is_array($properties['colors'])) - { - $properties['colors'] = array(); - } - - foreach($style['applied_to'] as $name => $actions) - { - if(!$name) - { - continue; - } - - if(array_key_exists($name, $properties['colors'])) - { - $colors[] = $properties['colors'][$name]; - } - - if(count($colors)) - { - // Colors override files and are handled below. - continue; - } - - // It's a file: - ++$count; - - if($actions[0] != "global") - { - $name = "{$name} ({$lang->actions}: ".implode(',', $actions).")"; - } - - if($count == $applied_to_count && $count > 1) - { - $sep = " {$lang->and} "; - } - $attached_to .= $sep.$name; - - $sep = $lang->comma; - } - - if($attached_to) - { - $attached_to = "{$lang->attached_to} {$attached_to}"; - } - - if(count($colors)) - { - // Attached to color instead of files. - $count = 1; - $color_list = $sep = ''; - - foreach($colors as $color) - { - if($count == count($colors) && $count > 1) - { - $sep = " {$lang->and} "; - } - - $color_list .= $sep.trim($color); - ++$count; - - $sep = ', '; - } - - $attached_to = "{$lang->attached_to} ".$lang->sprintf($lang->colors_attached_to)." {$color_list}"; - } - - if($attached_to == '') - { - // Orphaned! :( - $attached_to = "{$lang->attached_to_nothing}"; - } - } - else - { - $attached_to = "{$lang->attached_to_all_pages}"; - } - - $popup = new PopupMenu("style_{$style['sid']}", $lang->options); - - $popup->add_item($lang->edit_style, "index.php?module=style-themes&action=edit_stylesheet&file=".htmlspecialchars_uni($filename)."&tid={$theme['tid']}"); - $popup->add_item($lang->properties, "index.php?module=style-themes&action=stylesheet_properties&file=".htmlspecialchars_uni($filename)."&tid={$theme['tid']}"); - - if($inherited == "") - { - $popup->add_item($lang->delete_revert, "index.php?module=style-themes&action=delete_stylesheet&file=".htmlspecialchars_uni($filename)."&tid={$theme['tid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_stylesheet_deletion}')"); - } - - $table->construct_cell("{$filename}{$inherited}
{$attached_to}"); - $table->construct_cell($form->generate_numeric_field("disporder[{$theme_stylesheets[$filename]['sid']}]", $properties['disporder'][$filename], array('style' => 'width: 80%; text-align: center;', 'min' => 0)), array("class" => "align_center")); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - $table->construct_row(); - } - - $table->output("{$lang->stylesheets_in} ".htmlspecialchars_uni($theme['name'])); - - $buttons = array($form->generate_submit_button($lang->save_stylesheet_order)); - $form->output_submit_wrapper($buttons); - $form->end(); - - echo '
'; - - // Theme Properties table - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=style-themes&action=edit", "post", "edit"); - echo $form->generate_hidden_field("tid", $theme['tid']); - $form_container = new FormContainer($lang->edit_theme_properties); - $form_container->output_row($lang->name." *", $lang->name_desc_edit, $form->generate_text_box('name', $theme['name'], array('id' => 'name')), 'name'); - - $options = build_theme_array($theme['tid']); - $form_container->output_row($lang->parent_theme." *", $lang->parent_theme_desc, $form->generate_select_box('pid', $options, $theme['pid'], array('id' => 'pid')), 'pid'); - - $options = array(); - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - $options['all'] = $lang->all_user_groups; - while($usergroup = $db->fetch_array($query)) - { - $options[(int)$usergroup['gid']] = $usergroup['title']; - } - $form_container->output_row($lang->allowed_user_groups, $lang->allowed_user_groups_desc, $form->generate_select_box('allowedgroups[]', $options, explode(",", $theme['allowedgroups']), array('id' => 'allowedgroups', 'multiple' => true, 'size' => 5)), 'allowedgroups'); - - $options = array(); - $query = $db->simple_select("templatesets", "*", "", array('order_by' => 'title')); - while($templateset = $db->fetch_array($query)) - { - $options[(int)$templateset['sid']] = $templateset['title']; - } - $form_container->output_row($lang->template_set." *", $lang->template_set_desc, $form->generate_select_box('templateset', $options, $properties['templateset'], array('id' => 'templateset')), 'templateset'); - - $options = array(); - $editor_theme_root = MYBB_ROOT."jscripts/sceditor/editor_themes/"; - if($dh = @opendir($editor_theme_root)) - { - while($dir = readdir($dh)) - { - if($dir == ".svn" || $dir == "." || $dir == ".." || is_dir($editor_theme_root.$dir) || get_extension($editor_theme_root.$dir) != 'css') - { - continue; - } - $options[$dir] = ucfirst(str_replace(array('_', '.css'), array(' ', ''), $dir)); - } - } - - $form_container->output_row($lang->editor_theme." *", $lang->editor_theme_desc, $form->generate_select_box('editortheme', $options, $properties['editortheme'], array('id' => 'editortheme')), 'editortheme'); - - $form_container->output_row($lang->img_directory, $lang->img_directory_desc, $form->generate_text_box('imgdir', $properties['imgdir'], array('id' => 'imgdir')), 'imgdir'); - $form_container->output_row($lang->logo, $lang->logo_desc, $form->generate_text_box('logo', $properties['logo'], array('id' => 'boardlogo')), 'logo'); - $form_container->output_row($lang->table_spacing, $lang->table_spacing_desc, $form->generate_numeric_field('tablespace', $properties['tablespace'], array('id' => 'tablespace', 'min' => 0)), 'tablespace'); - $form_container->output_row($lang->inner_border, $lang->inner_border_desc, $form->generate_numeric_field('borderwidth', $properties['borderwidth'], array('id' => 'borderwidth', 'min' => 0)), 'borderwidth'); - - $form_container->end(); - - $form_container = new FormContainer($lang->colors_manage); - - if(!$properties['colors'] || !is_array($properties['colors'])) - { - $color_setting = $lang->colors_no_color_setting; - } - else - { - $colors = array('none' => $lang->colors_please_select); - $colors = array_merge($colors, $properties['colors']); - - $color_setting = $form->generate_select_box('color', $colors, $properties['color'], array('class' => "select\" style=\"width: 200px;")); - - $mybb->input['colors'] = ''; - foreach($properties['colors'] as $key => $color) - { - if($mybb->input['colors']) - { - $mybb->input['colors'] .= "\n"; - } - - $mybb->input['colors'] .= "{$key}={$color}"; - } - } - - $form_container->output_row($lang->colors_setting, $lang->colors_setting_desc, $color_setting, 'color'); - $form_container->output_row($lang->colors_add, $lang->colors_add_desc, $form->generate_text_area('colors', $mybb->input['colors'], array('style' => 'width: 200px;', 'rows' => '5'))); - - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->save_theme_properties); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "stylesheet_properties") -{ - // Fetch the theme we want to edit this stylesheet in - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_stylesheet_properties"); - - $parent_list = make_parent_theme_list($theme['tid']); - $parent_list = implode(',', $parent_list); - if(!$parent_list) - { - $parent_list = 1; - } - - $query = $db->simple_select("themestylesheets", "*", "name='".$db->escape_string($mybb->input['file'])."' AND tid IN ({$parent_list})", array('order_by' => 'tid', 'order_dir' => 'desc', 'limit' => 1)); - $stylesheet = $db->fetch_array($query); - - // Does the theme not exist? - if(!$stylesheet['sid']) - { - flash_message($lang->error_invalid_stylesheet, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - // Fetch list of all of the stylesheets for this theme - $stylesheets = fetch_theme_stylesheets($theme); - - if(!array_key_exists($stylesheet['cachefile'], $stylesheets) && array_key_exists("css.php?stylesheet=".$stylesheet['tid'], $stylesheets)) - { - $stylesheet['cachefile'] = "css.php?stylesheet=".$stylesheet['tid']; - } - - $this_stylesheet = $stylesheets[$stylesheet['cachefile']]; - unset($stylesheets); - - if($mybb->request_method == "post") - { - // Do we not have a name, or is it just an extension? - if(!$mybb->input['name'] || $mybb->input['name'] == ".css") - { - $errors[] = $lang->error_missing_stylesheet_name; - } - - // Get 30 chars only because we don't want more than that - $mybb->input['name'] = my_substr($mybb->input['name'], 0, 30); - if(get_extension($mybb->input['name']) != "css") - { - // Does not end with '.css' - $errors[] = $lang->sprintf($lang->error_missing_stylesheet_extension, $mybb->input['name']); - } - - if(!$errors) - { - // Theme & stylesheet theme ID do not match, editing inherited - we copy to local theme - if($theme['tid'] != $stylesheet['tid']) - { - $stylesheet['sid'] = copy_stylesheet_to_theme($stylesheet, $theme['tid']); - } - - $attached = array(); - if($mybb->input['attach'] == 1) - { - // Our stylesheet is attached to custom pages in MyBB - foreach($mybb->input as $id => $value) - { - $actions_list = ""; - $attached_to = $value; - - if(strpos($id, 'attached_') !== false) - { - // We have a custom attached file - $attached_id = (int)str_replace('attached_', '', $id); - - if($mybb->input['action_'.$attached_id] == 1) - { - // We have custom actions for attached files - $actions_list = $mybb->input['action_list_'.$attached_id]; - } - - if($actions_list) - { - $attached_to .= "?".$actions_list; - } - - $attached[] = $attached_to; - } - } - } - else if($mybb->input['attach'] == 2) - { - if(!is_array($mybb->input['color'])) - { - $errors[] = $lang->error_no_color_picked; - } - else - { - $attached = $mybb->input['color']; - } - } - - // Update Stylesheet - $update_array = array( - 'name' => $db->escape_string($mybb->input['name']), - 'attachedto' => $db->escape_string(implode('|', $attached)) - ); - - if($stylesheet['name'] != $mybb->input['name']) - { - $update_array['cachefile'] = $db->escape_string(str_replace('/', '', $mybb->input['name'])); - } - - $db->update_query("themestylesheets", $update_array, "sid='{$stylesheet['sid']}'", 1); - - // If the name changed, re-cache our stylesheet - $theme_c = $update_d = false; - if($stylesheet['name'] != $mybb->input['name']) - { - // Update the theme stylesheet list if the name is changed - $theme_c = $theme; - $update_d = true; - - $db->update_query("themestylesheets", array('lastmodified' => TIME_NOW), "sid='{$stylesheet['sid']}'", 1); - if(!cache_stylesheet($theme['tid'], str_replace('/', '', $mybb->input['name']), $stylesheet['stylesheet'])) - { - $db->update_query("themestylesheets", array('cachefile' => "css.php?stylesheet={$stylesheet['sid']}"), "sid='{$stylesheet['sid']}'", 1); - } - @unlink(MYBB_ROOT."cache/themes/theme{$theme['tid']}/{$stylesheet['cachefile']}"); - - $filename_min = str_replace('.css', '.min.css', $stylesheet['cachefile']); - @unlink(MYBB_ROOT."cache/themes/theme{$theme['tid']}/{$filename_min}"); - } - - // Update the CSS file list for this theme - update_theme_stylesheet_list($theme['tid'], $theme_c, $update_d); - - $plugins->run_hooks("admin_style_themes_stylesheet_properties_commit"); - - // Log admin action - log_admin_action($stylesheet['sid'], $mybb->input['name'], $theme['tid'], htmlspecialchars_uni($theme['name'])); - - flash_message($lang->success_stylesheet_properties_updated, 'success'); - admin_redirect("index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - } - } - - $properties = my_unserialize($theme['properties']); - $page->add_breadcrumb_item(htmlspecialchars_uni($theme['name']), "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}"); - $page->add_breadcrumb_item(htmlspecialchars_uni($stylesheet['name'])." {$lang->properties}", "index.php?module=style-themes&action=edit_properties&tid={$mybb->input['tid']}"); - - $page->output_header("{$lang->themes} - {$lang->stylesheet_properties}"); - - // If the stylesheet and theme do not match, we must be editing something that is inherited - if($this_stylesheet['inherited'][$stylesheet['name']]) - { - $query = $db->simple_select("themes", "name", "tid='{$stylesheet['tid']}'"); - $stylesheet_parent = htmlspecialchars_uni($db->fetch_field($query, 'name')); - - // Show inherited warning - if($stylesheet['tid'] == 1) - { - $page->output_alert($lang->sprintf($lang->stylesheet_inherited_default, $stylesheet_parent)); - } - else - { - $page->output_alert($lang->sprintf($lang->stylesheet_inherited, $stylesheet_parent)); - } - } - - $applied_to = $this_stylesheet['applied_to']; - unset($this_stylesheet); - - if($errors) - { - $page->output_inline_error($errors); - - foreach($mybb->input as $name => $value) - { - if(strpos($name, "attached") !== false) - { - list(, $id) = explode('_', $name); - $id = (int)$id; - - $applied_to[$value] = array(0 => 'global'); - - if($mybb->input['action_'.$id] == 1) - { - $applied_to[$value] = explode(',', $mybb->input['action_list_'.$id]); - } - } - } - } - else - { - $mybb->input['name'] = $stylesheet['name']; - } - - $global_checked[1] = "checked=\"checked\""; - $global_checked[2] = ""; - $global_checked[3] = ""; - - $form = new Form("index.php?module=style-themes&action=stylesheet_properties", "post"); - - $specific_files = "
"; - $count = 0; - if(is_array($applied_to) && $applied_to['global'][0] != "global") - { - $check_actions = ""; - $stylesheet['colors'] = array(); - - if(!is_array($properties['colors'])) - { - $properties['colors'] = array(); - } - - foreach($applied_to as $name => $actions) - { - // Verify this is a color for this theme - if(array_key_exists($name, $properties['colors'])) - { - $stylesheet['colors'][] = $name; - } - - if(count($stylesheet['colors'])) - { - // Colors override files and are handled below. - continue; - } - - // It's a file: - $action_list = ""; - if($actions[0] != "global") - { - $action_list = implode(',', $actions); - } - - if($actions[0] == "global") - { - $global_action_checked[1] = "checked=\"checked\""; - $global_action_checked[2] = ""; - } - else - { - $global_action_checked[2] = "checked=\"checked\""; - $global_action_checked[1] = ""; - } - - $specific_file = "
-
-
-
- {$lang->specific_actions_desc} - - - - -
".$form->generate_text_box('action_list_'.$count, $action_list, array('id' => 'action_list_'.$count, 'style' => 'width: 190px;'))."
-
-
"; - - $form_container = new FormContainer(); - $form_container->output_row("", "", "style}/images/icons/cross.png\" alt=\"{$lang->delete}\" title=\"{$lang->delete}\" />{$lang->file}  ".$form->generate_text_box("attached_{$count}", $name, array('id' => "attached_{$count}", 'style' => 'width: 200px;')), "attached_{$count}"); - - $form_container->output_row("", "", $specific_file); - - $specific_files .= "
".$form_container->end(true)."
"; - - $check_actions .= "\n\tcheckAction('action_{$count}');"; - - ++$count; - } - - if($check_actions) - { - $global_checked[3] = ""; - $global_checked[2] = "checked=\"checked\""; - $global_checked[1] = ""; - } - - if(!empty($stylesheet['colors'])) - { - $global_checked[3] = "checked=\"checked\""; - $global_checked[2] = ""; - $global_checked[1] = ""; - } - } - - $specific_files .= "
"; - - // Colors - $specific_colors = $specific_colors_option = ''; - - if(is_array($properties['colors'])) - { - $specific_colors = "
"; - $specific_colors_option = '

'; - - $specific_color = " - {$lang->colors_add_edit_desc} -

- ".$form->generate_select_box('color[]', $properties['colors'], $stylesheet['colors'], array('multiple' => true, 'size' => "5\" style=\"width: 200px;"))." - "; - - $form_container = new FormContainer(); - $form_container->output_row("", "", $specific_color); - $specific_colors .= $form_container->end(true)."
"; - } - - $actions = ' -
-

-

- '.$specific_files.' - '.$specific_colors_option.' - '.$specific_colors.' -
- '; - - echo $form->generate_hidden_field("file", htmlspecialchars_uni($stylesheet['name']))."
\n"; - echo $form->generate_hidden_field("tid", $theme['tid'])."
\n"; - - $form_container = new FormContainer("{$lang->edit_stylesheet_properties_for} ".htmlspecialchars_uni($stylesheet['name'])); - $form_container->output_row($lang->file_name, $lang->file_name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name', 'style' => 'width: 200px;')), 'name'); - - $form_container->output_row($lang->attached_to, $lang->attached_to_desc, $actions); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_stylesheet_properties); - - $form->output_submit_wrapper($buttons); - - echo << - -EOF; - - $form->end(); - - $page->output_footer(); -} - -// Shows the page where you can actually edit a particular selector or the whole stylesheet -if($mybb->input['action'] == "edit_stylesheet" && (!isset($mybb->input['mode']) || $mybb->input['mode'] == "simple")) -{ - // Fetch the theme we want to edit this stylesheet in - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_edit_stylesheet_simple"); - - $parent_list = make_parent_theme_list($theme['tid']); - $parent_list = implode(',', $parent_list); - if(!$parent_list) - { - $parent_list = 1; - } - - $query = $db->simple_select("themestylesheets", "*", "name='".$db->escape_string($mybb->input['file'])."' AND tid IN ({$parent_list})", array('order_by' => 'tid', 'order_dir' => 'desc', 'limit' => 1)); - $stylesheet = $db->fetch_array($query); - - // Does the theme not exist? - if(!$stylesheet['sid']) - { - flash_message($lang->error_invalid_stylesheet, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - if($mybb->request_method == "post") - { - $sid = $stylesheet['sid']; - - // Theme & stylesheet theme ID do not match, editing inherited - we copy to local theme - if($theme['tid'] != $stylesheet['tid']) - { - $sid = copy_stylesheet_to_theme($stylesheet, $theme['tid']); - } - - // Insert the modified CSS - $new_stylesheet = $stylesheet['stylesheet']; - - if($mybb->input['serialized'] == 1) - { - $mybb->input['css_bits'] = my_unserialize($mybb->input['css_bits']); - } - - $css_to_insert = ''; - foreach($mybb->input['css_bits'] as $field => $value) - { - if(!trim($value) || !trim($field)) - { - continue; - } - - if($field == "extra") - { - $css_to_insert .= $value."\n"; - } - else - { - $field = str_replace("_", "-", $field); - $css_to_insert .= "{$field}: {$value};\n"; - } - } - - $new_stylesheet = insert_into_css($css_to_insert, $mybb->input['selector'], $new_stylesheet); - - // Now we have the new stylesheet, save it - $updated_stylesheet = array( - "cachefile" => $db->escape_string($stylesheet['name']), - "stylesheet" => $db->escape_string(unfix_css_urls($new_stylesheet)), - "lastmodified" => TIME_NOW - ); - $db->update_query("themestylesheets", $updated_stylesheet, "sid='{$sid}'"); - - // Cache the stylesheet to the file - if(!cache_stylesheet($theme['tid'], $stylesheet['name'], $new_stylesheet)) - { - $db->update_query("themestylesheets", array('cachefile' => "css.php?stylesheet={$sid}"), "sid='{$sid}'", 1); - } - - // Update the CSS file list for this theme - update_theme_stylesheet_list($theme['tid']); - - $plugins->run_hooks("admin_style_themes_edit_stylesheet_simple_commit"); - - // Log admin action - log_admin_action(htmlspecialchars_uni($theme['name']), $stylesheet['name']); - - if(!$mybb->input['ajax']) - { - flash_message($lang->success_stylesheet_updated, 'success'); - - if($mybb->input['save_close']) - { - admin_redirect("index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - } - else - { - admin_redirect("index.php?module=style-themes&action=edit_stylesheet&tid={$theme['tid']}&file={$stylesheet['name']}"); - } - } - else - { - echo "1"; - exit; - } - } - - // Has the file on the file system been modified? - if(resync_stylesheet($stylesheet)) - { - // Need to refetch new stylesheet as it was modified - $query = $db->simple_select("themestylesheets", "stylesheet", "sid='{$stylesheet['sid']}'"); - $stylesheet['stylesheet'] = $db->fetch_field($query, 'stylesheet'); - } - - $css_array = css_to_array($stylesheet['stylesheet']); - $selector_list = get_selectors_as_options($css_array, $mybb->input['selector']); - - // Do we not have any selectors? Send em to the full edit page - if(!$selector_list) - { - flash_message($lang->error_cannot_parse, 'error'); - admin_redirect("index.php?module=style-themes&action=edit_stylesheet&tid={$theme['tid']}&file=".htmlspecialchars_uni($stylesheet['name'])."&mode=advanced"); - exit; - } - - // Fetch list of all of the stylesheets for this theme - $stylesheets = fetch_theme_stylesheets($theme); - $this_stylesheet = $stylesheets[$stylesheet['name']]; - unset($stylesheets); - - $page->extra_header .= " - "; - - $page->add_breadcrumb_item(htmlspecialchars_uni($theme['name']), "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}"); - $page->add_breadcrumb_item("{$lang->editing} ".htmlspecialchars_uni($stylesheet['name']), "index.php?module=style-themes&action=edit_stylesheet&tid={$mybb->input['tid']}&file=".htmlspecialchars_uni($mybb->input['file'])."&mode=simple"); - - $page->output_header("{$lang->themes} - {$lang->edit_stylesheets}"); - - // If the stylesheet and theme do not match, we must be editing something that is inherited - if($this_stylesheet['inherited'][$stylesheet['name']]) - { - $query = $db->simple_select("themes", "name", "tid='{$stylesheet['tid']}'"); - $stylesheet_parent = htmlspecialchars_uni($db->fetch_field($query, 'name')); - - // Show inherited warning - if($stylesheet['tid'] == 1) - { - $page->output_alert($lang->sprintf($lang->stylesheet_inherited_default, $stylesheet_parent), "ajax_alert"); - } - else - { - $page->output_alert($lang->sprintf($lang->stylesheet_inherited, $stylesheet_parent), "ajax_alert"); - } - } - - $sub_tabs['edit_stylesheet'] = array( - 'title' => $lang->edit_stylesheet_simple_mode, - 'link' => "index.php?module=style-themes&action=edit_stylesheet&tid={$mybb->input['tid']}&file=".htmlspecialchars_uni($mybb->input['file'])."&mode=simple", - 'description' => $lang->edit_stylesheet_simple_mode_desc - ); - - $sub_tabs['edit_stylesheet_advanced'] = array( - 'title' => $lang->edit_stylesheet_advanced_mode, - 'link' => "index.php?module=style-themes&action=edit_stylesheet&tid={$mybb->input['tid']}&file=".htmlspecialchars_uni($mybb->input['file'])."&mode=advanced", - ); - - $page->output_nav_tabs($sub_tabs, 'edit_stylesheet'); - - // Output the selection box - $form = new Form("index.php", "get", "selector_form"); - echo $form->generate_hidden_field("module", "style/themes")."\n"; - echo $form->generate_hidden_field("action", "edit_stylesheet")."\n"; - echo $form->generate_hidden_field("tid", $mybb->input['tid'])."\n"; - echo $form->generate_hidden_field("file", htmlspecialchars_uni($mybb->input['file']))."\n"; - - echo "{$lang->selector}: ".$form->generate_submit_button($lang->go)."

\n"; - - $form->end(); - - // Haven't chosen a selector to edit, show the first one from the stylesheet - if(!$mybb->input['selector']) - { - reset($css_array); - uasort($css_array, "css_selectors_sort_cmp"); - $selector = key($css_array); - $editable_selector = $css_array[$selector]; - } - // Show a specific selector - else - { - $editable_selector = $css_array[$mybb->input['selector']]; - $selector = $mybb->input['selector']; - } - - // Get the properties from this item - $properties = parse_css_properties($editable_selector['values']); - - foreach(array('background', 'color', 'width', 'font-family', 'font-size', 'font-style', 'font-weight', 'text-decoration') as $_p) - { - if(!isset($properties[$_p])) - { - $properties[$_p] = ''; - } - } - - $form = new Form("index.php?module=style-themes&action=edit_stylesheet", "post"); - echo $form->generate_hidden_field("tid", $mybb->input['tid'], array('id' => "tid"))."\n"; - echo $form->generate_hidden_field("file", htmlspecialchars_uni($mybb->input['file']), array('id' => "file"))."\n"; - echo $form->generate_hidden_field("selector", htmlspecialchars_uni($selector), array('id' => 'hidden_selector'))."\n"; - - echo "
"; - $table = new Table; - $table->construct_cell("
".$form->generate_text_box('css_bits[background]', $properties['background'], array('id' => 'css_bits[background]', 'style' => 'width: 260px;'))."
{$lang->background}
", array('style' => 'width: 20%;')); - $table->construct_cell("{$lang->extra_css_atribs}
".$form->generate_text_area('css_bits[extra]', $properties['extra'], array('id' => 'css_bits[extra]', 'style' => 'width: 98%;', 'rows' => '19'))."
", array('rowspan' => 8)); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[color]', $properties['color'], array('id' => 'css_bits[color]', 'style' => 'width: 260px;'))."
{$lang->color}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[width]', $properties['width'], array('id' => 'css_bits[width]', 'style' => 'width: 260px;'))."
{$lang->width}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_family]', $properties['font-family'], array('id' => 'css_bits[font_family]', 'style' => 'width: 260px;'))."
{$lang->font_family}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_size]', $properties['font-size'], array('id' => 'css_bits[font_size]', 'style' => 'width: 260px;'))."
{$lang->font_size}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_style]', $properties['font-style'], array('id' => 'css_bits[font_style]', 'style' => 'width: 260px;'))."
{$lang->font_style}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[font_weight]', $properties['font-weight'], array('id' => 'css_bits[font_weight]', 'style' => 'width: 260px;'))."
{$lang->font_weight}
", array('style' => 'width: 40%;')); - $table->construct_row(); - $table->construct_cell("
".$form->generate_text_box('css_bits[text_decoration]', $properties['text-decoration'], array('id' => 'css_bits[text_decoration]', 'style' => 'width: 260px;'))."
{$lang->text_decoration}
", array('style' => 'width: 40%;')); - $table->construct_row(); - - $table->output(htmlspecialchars_uni($editable_selector['class_name']).""); - - echo "
"; - - $buttons[] = $form->generate_reset_button($lang->reset); - $buttons[] = $form->generate_submit_button($lang->save_changes, array('id' => 'save', 'name' => 'save')); - $buttons[] = $form->generate_submit_button($lang->save_changes_and_close, array('id' => 'save_close', 'name' => 'save_close')); - - $form->output_submit_wrapper($buttons); - - echo ''; - echo ''; - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit_stylesheet" && $mybb->input['mode'] == "advanced") -{ - // Fetch the theme we want to edit this stylesheet in - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_edit_stylesheet_advanced"); - - $parent_list = make_parent_theme_list($theme['tid']); - $parent_list = implode(',', $parent_list); - if(!$parent_list) - { - $parent_list = 1; - } - - $query = $db->simple_select("themestylesheets", "*", "name='".$db->escape_string($mybb->input['file'])."' AND tid IN ({$parent_list})", array('order_by' => 'tid', 'order_dir' => 'desc', 'limit' => 1)); - $stylesheet = $db->fetch_array($query); - - // Does the theme not exist? - if(!$stylesheet['sid']) - { - flash_message($lang->error_invalid_stylesheet, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - if($mybb->request_method == "post") - { - $sid = $stylesheet['sid']; - - // Theme & stylesheet theme ID do not match, editing inherited - we copy to local theme - if($theme['tid'] != $stylesheet['tid']) - { - $sid = copy_stylesheet_to_theme($stylesheet, $theme['tid']); - } - - // Now we have the new stylesheet, save it - $updated_stylesheet = array( - "cachefile" => $db->escape_string($stylesheet['name']), - "stylesheet" => $db->escape_string(unfix_css_urls($mybb->input['stylesheet'])), - "lastmodified" => TIME_NOW - ); - $db->update_query("themestylesheets", $updated_stylesheet, "sid='{$sid}'"); - - // Cache the stylesheet to the file - if(!cache_stylesheet($theme['tid'], $stylesheet['name'], $mybb->input['stylesheet'])) - { - $db->update_query("themestylesheets", array('cachefile' => "css.php?stylesheet={$sid}"), "sid='{$sid}'", 1); - } - - // Update the CSS file list for this theme - update_theme_stylesheet_list($theme['tid']); - - $plugins->run_hooks("admin_style_themes_edit_stylesheet_advanced_commit"); - - // Log admin action - log_admin_action(htmlspecialchars_uni($theme['name']), $stylesheet['name']); - - flash_message($lang->success_stylesheet_updated, 'success'); - - if(!$mybb->input['save_close']) - { - admin_redirect("index.php?module=style-themes&action=edit_stylesheet&file=".htmlspecialchars_uni($stylesheet['name'])."&tid={$theme['tid']}&mode=advanced"); - } - else - { - admin_redirect("index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - } - } - - // Fetch list of all of the stylesheets for this theme - $stylesheets = fetch_theme_stylesheets($theme); - $this_stylesheet = $stylesheets[$stylesheet['name']]; - unset($stylesheets); - - if($admin_options['codepress'] != 0) - { - $page->extra_header .= ' - - - - - - - - -'; - } - - $page->add_breadcrumb_item(htmlspecialchars_uni($theme['name']), "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}"); - $page->add_breadcrumb_item("{$lang->editing} ".htmlspecialchars_uni($stylesheet['name']), "index.php?module=style-themes&action=edit_stylesheet&tid={$mybb->input['tid']}&file=".htmlspecialchars_uni($mybb->input['file'])."&mode=advanced"); - - $page->output_header("{$lang->themes} - {$lang->edit_stylesheet_advanced_mode}"); - - // If the stylesheet and theme do not match, we must be editing something that is inherited - if($this_stylesheet['inherited'][$stylesheet['name']]) - { - $query = $db->simple_select("themes", "name", "tid='{$stylesheet['tid']}'"); - $stylesheet_parent = htmlspecialchars_uni($db->fetch_field($query, 'name')); - - // Show inherited warning - if($stylesheet['tid'] == 1) - { - $page->output_alert($lang->sprintf($lang->stylesheet_inherited_default, $stylesheet_parent)); - } - else - { - $page->output_alert($lang->sprintf($lang->stylesheet_inherited, $stylesheet_parent)); - } - } - - $sub_tabs['edit_stylesheet'] = array( - 'title' => $lang->edit_stylesheet_simple_mode, - 'link' => "index.php?module=style-themes&action=edit_stylesheet&tid={$mybb->input['tid']}&file=".htmlspecialchars_uni($mybb->input['file'])."&mode=simple" - ); - - $sub_tabs['edit_stylesheet_advanced'] = array( - 'title' => $lang->edit_stylesheet_advanced_mode, - 'link' => "index.php?module=style-themes&action=edit_stylesheet&tid={$mybb->input['tid']}&file=".htmlspecialchars_uni($mybb->input['file'])."&mode=advanced", - 'description' => $lang->edit_stylesheet_advanced_mode_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_stylesheet_advanced'); - - // Has the file on the file system been modified? - if(resync_stylesheet($stylesheet)) - { - // Need to refetch new stylesheet as it was modified - $query = $db->simple_select("themestylesheets", "stylesheet", "sid='{$stylesheet['sid']}'"); - $stylesheet['stylesheet'] = $db->fetch_field($query, 'stylesheet'); - } - - $form = new Form("index.php?module=style-themes&action=edit_stylesheet&mode=advanced", "post", "edit_stylesheet"); - echo $form->generate_hidden_field("tid", $mybb->input['tid'])."\n"; - echo $form->generate_hidden_field("file", htmlspecialchars_uni($mybb->input['file']))."\n"; - - $table = new Table; - $table->construct_cell($form->generate_text_area('stylesheet', $stylesheet['stylesheet'], array('id' => 'stylesheet', 'style' => 'width: 99%;', 'class' => '', 'rows' => '30'))); - $table->construct_row(); - $table->output($lang->full_stylesheet_for.' '.htmlspecialchars_uni($stylesheet['name']), 1, 'tfixed'); - - $buttons[] = $form->generate_submit_button($lang->save_changes, array('id' => 'save', 'name' => 'save')); - $buttons[] = $form->generate_submit_button($lang->save_changes_and_close, array('id' => 'save_close', 'name' => 'save_close')); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - if($admin_options['codepress'] != 0) - { - echo ''; - } - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete_stylesheet") -{ - // Fetch the theme we want to edit this stylesheet in - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_delete_stylesheet"); - - $parent_list = make_parent_theme_list($theme['tid']); - $parent_list = implode(',', $parent_list); - if(!$parent_list) - { - $parent_list = 1; - } - - $query = $db->simple_select("themestylesheets", "*", "name='".$db->escape_string($mybb->input['file'])."' AND tid IN ({$parent_list})", array('order_by' => 'tid', 'order_dir' => 'desc', 'limit' => 1)); - $stylesheet = $db->fetch_array($query); - - // Does the theme not exist? or are we trying to delete the master? - if(!$stylesheet['sid'] || $stylesheet['tid'] == 1) - { - flash_message($lang->error_invalid_stylesheet, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=style-themes"); - } - - if($mybb->request_method == "post") - { - $db->delete_query("themestylesheets", "sid='{$stylesheet['sid']}'", 1); - @unlink(MYBB_ROOT."cache/themes/theme{$theme['tid']}/{$stylesheet['cachefile']}"); - - $filename_min = str_replace('.css', '.min.css', $stylesheet['cachefile']); - @unlink(MYBB_ROOT."cache/themes/theme{$theme['tid']}/{$filename_min}"); - - // Update the CSS file list for this theme - update_theme_stylesheet_list($theme['tid'], $theme, true); - - $plugins->run_hooks("admin_style_themes_delete_stylesheet_commit"); - - // Log admin action - log_admin_action($stylesheet['sid'], $stylesheet['name'], $theme['tid'], htmlspecialchars_uni($theme['name'])); - - flash_message($lang->success_stylesheet_deleted, 'success'); - admin_redirect("index.php?module=style-themes&action=edit&tid={$theme['tid']}"); - } - else - { - $page->output_confirm_action("index.php?module=style-themes&action=force&tid={$theme['tid']}", $lang->confirm_stylesheet_deletion); - } -} - -if($mybb->input['action'] == "add_stylesheet") -{ - // Fetch the theme we want to edit this stylesheet in - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_add_stylesheet"); - - // Fetch list of all of the stylesheets for this theme - $stylesheets = fetch_theme_stylesheets($theme); - - if($mybb->request_method == "post") - { - // Remove special characters - $mybb->input['name'] = preg_replace('#([^a-z0-9-_\.]+)#i', '', $mybb->input['name']); - if(!$mybb->input['name'] || $mybb->input['name'] == ".css") - { - $errors[] = $lang->error_missing_stylesheet_name; - } - - // Get 30 chars only because we don't want more than that - $mybb->input['name'] = my_substr($mybb->input['name'], 0, 30); - if(get_extension($mybb->input['name']) != "css") - { - // Does not end with '.css' - $errors[] = $lang->sprintf($lang->error_missing_stylesheet_extension, $mybb->input['name']); - } - - if(!$errors) - { - if($mybb->input['add_type'] == 1) - { - // Import from a current stylesheet - $parent_list = make_parent_theme_list($theme['tid']); - $parent_list = implode(',', $parent_list); - - $query = $db->simple_select("themestylesheets", "stylesheet", "name='".$db->escape_string($mybb->input['import'])."' AND tid IN ({$parent_list})", array('limit' => 1, 'order_by' => 'tid', 'order_dir' => 'desc')); - $stylesheet = $db->fetch_field($query, "stylesheet"); - } - else - { - // Custom stylesheet - $stylesheet = $mybb->input['stylesheet']; - } - - $attached = array(); - - if($mybb->input['attach'] == 1) - { - // Our stylesheet is attached to custom pages in MyBB - foreach($mybb->input as $id => $value) - { - $actions_list = ""; - $attached_to = ""; - - if(strpos($id, 'attached_') !== false) - { - // We have a custom attached file - $attached_id = (int)str_replace('attached_', '', $id); - $attached_to = $value; - - if($mybb->input['action_'.$attached_id] == 1) - { - // We have custom actions for attached files - $actions_list = $mybb->input['action_list_'.$attached_id]; - } - - if($actions_list) - { - $attached_to = $attached_to."?".$actions_list; - } - - $attached[] = $attached_to; - } - } - } - else if($mybb->input['attach'] == 2) - { - if(!is_array($mybb->input['color'])) - { - $errors[] = $lang->error_no_color_picked; - } - else - { - $attached = $mybb->input['color']; - } - } - - // Add Stylesheet - $insert_array = array( - 'name' => $db->escape_string($mybb->input['name']), - 'tid' => $mybb->get_input('tid', MyBB::INPUT_INT), - 'attachedto' => implode('|', array_map(array($db, "escape_string"), $attached)), - 'stylesheet' => $db->escape_string($stylesheet), - 'cachefile' => $db->escape_string(str_replace('/', '', $mybb->input['name'])), - 'lastmodified' => TIME_NOW - ); - - $sid = $db->insert_query("themestylesheets", $insert_array); - - if(!cache_stylesheet($theme['tid'], str_replace('/', '', $mybb->input['name']), $stylesheet)) - { - $db->update_query("themestylesheets", array('cachefile' => "css.php?stylesheet={$sid}"), "sid='{$sid}'", 1); - } - - // Update the CSS file list for this theme - update_theme_stylesheet_list($theme['tid'], $theme, true); - - $plugins->run_hooks("admin_style_themes_add_stylesheet_commit"); - - // Log admin action - log_admin_action($sid, $mybb->input['name'], $theme['tid'], htmlspecialchars_uni($theme['name'])); - - flash_message($lang->success_stylesheet_added, 'success'); - admin_redirect("index.php?module=style-themes&action=edit_stylesheet&tid={$mybb->input['tid']}&sid={$sid}&file=".urlencode($mybb->input['name'])); - } - } - - if($admin_options['codepress'] != 0) - { - $page->extra_header .= ' - - - - - - - - -'; - } - - $page->add_breadcrumb_item(htmlspecialchars_uni($theme['name']), "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}"); - $page->add_breadcrumb_item($lang->add_stylesheet); - $properties = my_unserialize($theme['properties']); - - $page->output_header("{$lang->themes} - {$lang->add_stylesheet}"); - - $sub_tabs['edit_stylesheets'] = array( - 'title' => $lang->edit_stylesheets, - 'link' => "index.php?module=style-themes&action=edit&tid={$mybb->input['tid']}" - ); - - $sub_tabs['add_stylesheet'] = array( - 'title' => $lang->add_stylesheet, - 'link' => "index.php?module=style-themes&action=add_stylesheet&tid={$mybb->input['tid']}", - 'description' => $lang->add_stylesheet_desc - ); - - $sub_tabs['export_theme'] = array( - 'title' => $lang->export_theme, - 'link' => "index.php?module=style-themes&action=export&tid={$mybb->input['tid']}" - ); - - $sub_tabs['duplicate_theme'] = array( - 'title' => $lang->duplicate_theme, - 'link' => "index.php?module=style-themes&action=duplicate&tid={$mybb->input['tid']}", - 'description' => $lang->duplicate_theme_desc - ); - - $page->output_nav_tabs($sub_tabs, 'add_stylesheet'); - - if($errors) - { - $page->output_inline_error($errors); - - foreach($mybb->input as $name => $value) - { - if(strpos($name, "attached") !== false) - { - list(, $id) = explode('_', $name); - $id = (int)$id; - - $mybb->input['applied_to'][$value] = array(0 => 'global'); - - if($mybb->input['action_'.$id] == 1) - { - $mybb->input['applied_to'][$value] = explode(',', $mybb->input['action_list_'.$id]); - } - } - } - - if($mybb->input['add_type'] == 1) - { - $add_checked[1] = "checked=\"checked\""; - $add_checked[2] = ""; - } - else - { - $add_checked[2] = "checked=\"checked\""; - $add_checked[1] = ""; - } - } - else - { - $mybb->input['name'] = $stylesheet['name']; - } - - $global_checked[1] = "checked=\"checked\""; - $global_checked[2] = ""; - $global_checked[3] = ""; - - $form = new Form("index.php?module=style-themes&action=add_stylesheet", "post", "add_stylesheet"); - - echo $form->generate_hidden_field("tid", $mybb->input['tid'])."\n"; - - $specific_files = "
"; - $count = 0; - - if($mybb->input['attach'] == 1 && is_array($mybb->input['applied_to']) && (!isset($mybb->input['applied_to']['global']) || $mybb->input['applied_to']['global'][0] != "global")) - { - $check_actions = ""; - - foreach($mybb->input['applied_to'] as $name => $actions) - { - $action_list = ""; - if($actions[0] != "global") - { - $action_list = implode(',', $actions); - } - - if($actions[0] == "global") - { - $global_action_checked[1] = "checked=\"checked\""; - $global_action_checked[2] = ""; - } - else - { - $global_action_checked[2] = "checked=\"checked\""; - $global_action_checked[1] = ""; - } - - $specific_file = "
-
-
-
- {$lang->specific_actions_desc} - - - - -
".$form->generate_text_box('action_list_'.$count, $action_list, array('id' => 'action_list_'.$count, 'style' => 'width: 190px;'))."
-
-
"; - - $form_container = new FormContainer(); - $form_container->output_row("", "", "style}/images/icons/cross.png\" alt=\"{$lang->delete}\" title=\"{$lang->delete}\" />{$lang->file}  ".$form->generate_text_box("attached_{$count}", $name, array('id' => "attached_{$count}", 'style' => 'width: 200px;')), "attached_{$count}"); - - $form_container->output_row("", "", $specific_file); - - $specific_files .= "
".$form_container->end(true)."
"; - - $check_actions .= "\n\tcheckAction('action_{$count}');"; - - ++$count; - } - - if($check_actions) - { - $global_checked[3] = ""; - $global_checked[2] = "checked=\"checked\""; - $global_checked[1] = ""; - } - } - else if($mybb->input['attach'] == 2) - { - // Colors - $stylesheet['colors'] = array(); - if(is_array($properties['colors'])) - { - // We might have colors here... - foreach($mybb->input['color'] as $color) - { - // Verify this is a color for this theme - if(array_key_exists($color, $properties['colors'])) - { - $stylesheet['colors'][] = $color; - } - } - - if(!empty($stylesheet['colors'])) - { - $global_checked[3] = "checked=\"checked\""; - $global_checked[2] = ""; - $global_checked[1] = ""; - } - } - } - - $specific_files .= "
"; - - // Colors - $specific_colors = $specific_colors_option = ''; - - if(is_array($properties['colors'])) - { - $specific_colors = "
"; - $specific_colors_option = '
'; - - $specific_color = " - {$lang->colors_add_edit_desc} -

- ".$form->generate_select_box('color[]', $properties['colors'], $stylesheet['colors'], array('multiple' => true, 'size' => "5\" style=\"width: 200px;"))." - "; - - $form_container = new FormContainer(); - $form_container->output_row("", "", $specific_color); - $specific_colors .= $form_container->end(true)."
"; - } - - $actions = ' -
-

-

- '.$specific_files.' - '.$specific_colors_option.' - '.$specific_colors.' -
- '; - - echo $form->generate_hidden_field("sid", $stylesheet['sid'])."
\n"; - - $form_container = new FormContainer($lang->add_stylesheet_to.' '.htmlspecialchars_uni($theme['name']), 'tfixed'); - $form_container->output_row($lang->file_name, $lang->file_name_desc, $form->generate_text_box('name', $mybb->input['name'], array('id' => 'name', 'style' => 'width: 200px;')), 'name'); - - $form_container->output_row($lang->attached_to, $lang->attached_to_desc, $actions); - - $sheetnames = array(); - foreach($stylesheets as $filename => $style) - { - $sheetnames[basename($filename)] = basename($filename); - } - - $actions = "
-
-
- - - - -
".$form->generate_select_box('import', $sheetnames, $mybb->input['import'], array('id' => 'import'))."
-
-
-
".$form->generate_text_area('stylesheet', $mybb->input['stylesheet'], array('id' => 'stylesheet', 'style' => 'width: 99%;', 'class' => '', 'rows' => '30'))."
-
"; - - $form_container->output_row("", "", $actions); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_stylesheet); - - $form->output_submit_wrapper($buttons); - - if($admin_options['codepress'] != 0) - { - echo ''; - } - - echo ''; - echo ''; - echo ''; - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "set_default") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - // Does the theme not exist? - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_set_default"); - - $cache->update('default_theme', $theme); - - $db->update_query("themes", array('def' => 0)); - $db->update_query("themes", array('def' => 1), "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - - $plugins->run_hooks("admin_style_themes_set_default_commit"); - - // Log admin action - log_admin_action($theme['tid'], htmlspecialchars_uni($theme['name'])); - - flash_message($lang->success_theme_set_default, 'success'); - admin_redirect("index.php?module=style-themes"); -} - -if($mybb->input['action'] == "force") -{ - $query = $db->simple_select("themes", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $theme = $db->fetch_array($query); - - // Does the theme not exist? - if(!$theme['tid'] || $theme['tid'] == 1) - { - flash_message($lang->error_invalid_theme, 'error'); - admin_redirect("index.php?module=style-themes"); - } - - $plugins->run_hooks("admin_style_themes_force"); - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=style-themes"); - } - - if($mybb->request_method == "post") - { - $updated_users = array( - "style" => $theme['tid'] - ); - - $plugins->run_hooks("admin_style_themes_force_commit"); - - $db->update_query("users", $updated_users); - - // Log admin action - log_admin_action($theme['tid'], htmlspecialchars_uni($theme['name'])); - - flash_message($lang->success_theme_forced, 'success'); - admin_redirect("index.php?module=style-themes"); - } - else - { - $page->output_confirm_action("index.php?module=style-themes&action=force&tid={$theme['tid']}", $lang->confirm_theme_forced); - } -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->themes); - - $plugins->run_hooks("admin_style_themes_start"); - - $page->output_nav_tabs($sub_tabs, 'themes'); - - $table = new Table; - $table->construct_header($lang->theme); - $table->construct_header($lang->num_users, array("class" => "align_center", "width" => 100)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - build_theme_list(); - - $table->output($lang->themes); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/adminlog.php b/html/forums/admin/modules/tools/adminlog.php deleted file mode 100644 index ffd9374..0000000 --- a/html/forums/admin/modules/tools/adminlog.php +++ /dev/null @@ -1,609 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->admin_logs, "index.php?module=tools-adminlog"); - -$sub_tabs['admin_logs'] = array( - 'title' => $lang->admin_logs, - 'link' => "index.php?module=tools-adminlog", - 'description' => $lang->admin_logs_desc -); -$sub_tabs['prune_admin_logs'] = array( - 'title' => $lang->prune_admin_logs, - 'link' => "index.php?module=tools-adminlog&action=prune", - 'description' => $lang->prune_admin_logs_desc -); - -$plugins->run_hooks("admin_tools_adminlog_begin"); - -if($mybb->input['action'] == 'prune') -{ - if(!is_super_admin($mybb->user['uid'])) - { - flash_message($lang->cannot_perform_action_super_admin_general, 'error'); - admin_redirect("index.php?module=tools-adminlog"); - } - - $plugins->run_hooks("admin_tools_adminlog_prune"); - - if($mybb->request_method == 'post') - { - $is_today = false; - $mybb->input['older_than'] = $mybb->get_input('older_than', MyBB::INPUT_INT); - if($mybb->input['older_than'] <= 0) - { - $is_today = true; - $mybb->input['older_than'] = 1; - } - $where = 'dateline < '.(TIME_NOW-($mybb->input['older_than']*86400)); - - // Searching for entries by a particular user - if($mybb->input['uid']) - { - $where .= " AND uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"; - } - - // Searching for entries in a specific module - if($mybb->input['filter_module']) - { - $where .= " AND module='".$db->escape_string($mybb->input['filter_module'])."'"; - } - - $query = $db->delete_query("adminlog", $where); - $num_deleted = $db->affected_rows(); - - $plugins->run_hooks("admin_tools_adminlog_prune_commit"); - - // Log admin action - log_admin_action($mybb->input['older_than'], $mybb->input['uid'], $mybb->input['filter_module'], $num_deleted); - - $success = $lang->success_pruned_admin_logs; - if($is_today == true && $num_deleted > 0) - { - $success .= ' '.$lang->note_logs_locked; - } - elseif($is_today == true && $num_deleted == 0) - { - flash_message($lang->note_logs_locked, 'error'); - admin_redirect("index.php?module=tools-adminlog"); - } - flash_message($success, 'success'); - admin_redirect("index.php?module=tools-adminlog"); - } - $page->add_breadcrumb_item($lang->prune_admin_logs, "index.php?module=tools-adminlog&action=prune"); - $page->output_header($lang->prune_admin_logs); - $page->output_nav_tabs($sub_tabs, 'prune_admin_logs'); - - // Fetch filter options - $sortbysel[$mybb->input['sortby']] = 'selected="selected"'; - $ordersel[$mybb->input['order']] = 'selected="selected"'; - - $user_options[''] = $lang->all_administrators; - $user_options['0'] = '----------'; - - $query = $db->query(" - SELECT DISTINCT l.uid, u.username - FROM ".TABLE_PREFIX."adminlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (l.uid=u.uid) - ORDER BY u.username ASC - "); - while($user = $db->fetch_array($query)) - { - $user_options[$user['uid']] = htmlspecialchars_uni($user['username']); - } - - $module_options = array(); - $module_options[''] = $lang->all_modules; - $module_options['0'] = '----------'; - $query = $db->query(" - SELECT DISTINCT l.module - FROM ".TABLE_PREFIX."adminlog l - ORDER BY l.module ASC - "); - while($module = $db->fetch_array($query)) - { - $module_options[$module['module']] = str_replace(' ', ' -> ', ucwords(str_replace('/', ' ', $module['module']))); - } - - $form = new Form("index.php?module=tools-adminlog&action=prune", "post"); - $form_container = new FormContainer($lang->prune_administrator_logs); - $form_container->output_row($lang->module, "", $form->generate_select_box('filter_module', $module_options, $mybb->input['filter_module'], array('id' => 'filter_module')), 'filter_module'); - $form_container->output_row($lang->administrator, "", $form->generate_select_box('uid', $user_options, $mybb->input['uid'], array('id' => 'uid')), 'uid'); - if(!$mybb->input['older_than']) - { - $mybb->input['older_than'] = '30'; - } - $form_container->output_row($lang->date_range, "", $lang->older_than.$form->generate_numeric_field('older_than', $mybb->input['older_than'], array('id' => 'older_than', 'style' => 'width: 50px', 'min' => 0))." {$lang->days}", 'older_than'); - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->prune_administrator_logs); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->admin_logs); - $page->output_nav_tabs($sub_tabs, 'admin_logs'); - - $perpage = $mybb->get_input('perpage', MyBB::INPUT_INT); - if(!$perpage) - { - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $perpage = $mybb->settings['threadsperpage']; - } - - $where = ''; - - $plugins->run_hooks("admin_tools_adminlog_start"); - - // Searching for entries by a particular user - if($mybb->input['uid']) - { - $where .= " AND l.uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"; - } - - // Searching for entries in a specific module - if($mybb->input['filter_module']) - { - $where .= " AND module='".$db->escape_string($mybb->input['filter_module'])."'"; - } - - // Order? - switch($mybb->input['sortby']) - { - case "username": - $sortby = "u.username"; - break; - default: - $sortby = "l.dateline"; - } - $order = $mybb->input['order']; - if($order != 'asc') - { - $order = 'desc'; - } - - $query = $db->query(" - SELECT COUNT(l.dateline) AS count - FROM ".TABLE_PREFIX."adminlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - WHERE 1=1 {$where} - "); - $rescount = $db->fetch_field($query, "count"); - - // Figure out if we need to display multiple pages. - if($mybb->input['page'] != "last") - { - $pagecnt = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $postcount = (int)$rescount; - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->input['page'] == "last") - { - $pagecnt = $pages; - } - - if($pagecnt > $pages) - { - $pagecnt = 1; - } - - if($pagecnt) - { - $start = ($pagecnt-1) * $perpage; - } - else - { - $start = 0; - $pagecnt = 1; - } - - $table = new Table; - $table->construct_header($lang->username, array('width' => '10%')); - $table->construct_header($lang->date, array('class' => 'align_center', 'width' => '15%')); - $table->construct_header($lang->information, array('class' => 'align_center', 'width' => '65%')); - $table->construct_header($lang->ipaddress, array('class' => 'align_center', 'width' => '10%')); - - $query = $db->query(" - SELECT l.*, u.username, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."adminlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - WHERE 1=1 {$where} - ORDER BY {$sortby} {$order} - LIMIT {$start}, {$perpage} - "); - while($logitem = $db->fetch_array($query)) - { - $information = ''; - $trow = alt_trow(); - $logitem['username'] = htmlspecialchars_uni($logitem['username']); - $username = format_name($logitem['username'], $logitem['usergroup'], $logitem['displaygroup']); - - $logitem['data'] = my_unserialize($logitem['data']); - $logitem['profilelink'] = build_profile_link($username, $logitem['uid'], "_blank"); - $logitem['dateline'] = my_date('relative', $logitem['dateline']); - - // Get detailed information from meta - $information = get_admin_log_action($logitem); - - $table->construct_cell($logitem['profilelink']); - $table->construct_cell($logitem['dateline'], array('class' => 'align_center')); - $table->construct_cell($information); - $table->construct_cell(my_inet_ntop($db->unescape_binary($logitem['ipaddress'])), array('class' => 'align_center')); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_adminlogs, array('colspan' => '4')); - $table->construct_row(); - } - - $table->output($lang->admin_logs); - - // Do we need to construct the pagination? - if($rescount > $perpage) - { - echo draw_admin_pagination($pagecnt, $perpage, $rescount, "index.php?module=tools-adminlog&perpage=$perpage&uid={$mybb->input['uid']}&fid={$mybb->input['fid']}&sortby={$mybb->input['sortby']}&order={$order}&filter_module=".htmlspecialchars_uni($mybb->input['filter_module']))."
"; - } - - // Fetch filter options - $sortbysel[$mybb->input['sortby']] = 'selected="selected"'; - $ordersel[$mybb->input['order']] = 'selected="selected"'; - - $user_options[''] = $lang->all_administrators; - $user_options['0'] = '----------'; - - $query = $db->query(" - SELECT DISTINCT l.uid, u.username - FROM ".TABLE_PREFIX."adminlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (l.uid=u.uid) - ORDER BY u.username ASC - "); - while($user = $db->fetch_array($query)) - { - $user_options[$user['uid']] = htmlspecialchars_uni($user['username']); - } - - $module_options = array(); - $module_options[''] = $lang->all_modules; - $module_options['0'] = '----------'; - $query = $db->query(" - SELECT DISTINCT l.module - FROM ".TABLE_PREFIX."adminlog l - ORDER BY l.module ASC - "); - while($module = $db->fetch_array($query)) - { - $module_options[$module['module']] = str_replace(' ', ' -> ', ucwords(str_replace('/', ' ', $module['module']))); - } - - $sort_by = array( - 'dateline' => $lang->date, - 'username' => $lang->username - ); - - $order_array = array( - 'asc' => $lang->asc, - 'desc' => $lang->desc - ); - - $form = new Form("index.php?module=tools-adminlog", "post"); - $form_container = new FormContainer($lang->filter_administrator_logs); - $form_container->output_row($lang->module, "", $form->generate_select_box('filter_module', $module_options, $mybb->input['filter_module'], array('id' => 'filter_module')), 'filter_module'); - $form_container->output_row($lang->administrator, "", $form->generate_select_box('uid', $user_options, $mybb->input['uid'], array('id' => 'uid')), 'uid'); - $form_container->output_row($lang->sort_by, "", $form->generate_select_box('sortby', $sort_by, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('order', $order_array, $order, array('id' => 'order'))." {$lang->order}", 'order'); - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $perpage, array('id' => 'perpage', 'min' => 1)), 'perpage'); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->filter_administrator_logs); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -/** - * Returns language-friendly string describing $logitem - * @param array $logitem The log item (one row from mybb_adminlogs) - * @return string The description - */ -function get_admin_log_action($logitem) -{ - global $lang, $plugins, $mybb; - - $logitem['module'] = str_replace('/', '-', $logitem['module']); - list($module, $action) = explode('-', $logitem['module']); - $lang_string = 'admin_log_'.$module.'_'.$action.'_'.$logitem['action']; - - // Specific page overrides - switch($lang_string) - { - // == CONFIG == - case 'admin_log_config_banning_add': // Banning IP/Username/Email - case 'admin_log_config_banning_delete': // Removing banned IP/username/emails - switch($logitem['data'][2]) - { - case 1: - $lang_string = 'admin_log_config_banning_'.$logitem['action'].'_ip'; - break; - case 2: - $lang_string = 'admin_log_config_banning_'.$logitem['action'].'_username'; - break; - case 3: - $lang_string = 'admin_log_config_banning_'.$logitem['action'].'_email'; - break; - } - break; - - case 'admin_log_config_help_documents_add': // Help documents and sections - case 'admin_log_config_help_documents_edit': - case 'admin_log_config_help_documents_delete': - $lang_string .= "_{$logitem['data'][2]}"; // adds _section or _document - break; - - case 'admin_log_config_languages_edit': // Editing language variables - $logitem['data'][1] = basename($logitem['data'][1]); - if($logitem['data'][2] == 1) - { - $lang_string = 'admin_log_config_languages_edit_admin'; - } - break; - - case 'admin_log_config_mycode_toggle_status': // Custom MyCode toggle activation - if($logitem['data'][2] == 1) - { - $lang_string .= '_enabled'; - } - else - { - $lang_string .= '_disabled'; - } - break; - case 'admin_log_config_plugins_activate': // Installing plugin - if($logitem['data'][1]) - { - $lang_string .= '_install'; - } - break; - case 'admin_log_config_plugins_deactivate': // Uninstalling plugin - if($logitem['data'][1]) - { - $lang_string .= '_uninstall'; - } - break; - // == FORUM == - case 'admin_log_forum_attachments_delete': // Deleting attachments - if($logitem['data'][2]) - { - $lang_string .= '_post'; - } - break; - case 'admin_log_forum_management_copy': // Forum copy - if($logitem['data'][4]) - { - $lang_string .= '_with_permissions'; - } - break; - case 'admin_log_forum_management_': // add mod, permissions, forum orders - // first parameter already set with action - $lang_string .= $logitem['data'][0]; - if($logitem['data'][0] == 'orders' && $logitem['data'][1]) - { - $lang_string .= '_sub'; // updating forum orders in a subforum - } - break; - case 'admin_log_forum_moderation_queue_': //moderation queue - // first parameter already set with action - $lang_string .= $logitem['data'][0]; - break; - // == HOME == - case 'admin_log_home_preferences_': // 2FA - $lang_string .= $logitem['data'][0]; // either "enabled" or "disabled" - break; - // == STYLE == - case 'admin_log_style_templates_delete_template': // deleting templates - // global template set - if($logitem['data'][2] == -1) - { - $lang_string .= '_global'; - } - break; - case 'admin_log_style_templates_edit_template': // editing templates - // global template set - if($logitem['data'][2] == -1) - { - $lang_string .= '_global'; - } - break; - // == TOOLS == - case 'admin_log_tools_adminlog_prune': // Admin Log Pruning - if($logitem['data'][1] && !$logitem['data'][2]) - { - $lang_string = 'admin_log_tools_adminlog_prune_user'; - } - elseif($logitem['data'][2] && !$logitem['data'][1]) - { - $lang_string = 'admin_log_tools_adminlog_prune_module'; - } - elseif($logitem['data'][1] && $logitem['data'][2]) - { - $lang_string = 'admin_log_tools_adminlog_prune_user_module'; - } - break; - case 'admin_log_tools_modlog_prune': // Moderator Log Pruning - if($logitem['data'][1] && !$logitem['data'][2]) - { - $lang_string = 'admin_log_tools_modlog_prune_user'; - } - elseif($logitem['data'][2] && !$logitem['data'][1]) - { - $lang_string = 'admin_log_tools_modlog_prune_forum'; - } - elseif($logitem['data'][1] && $logitem['data'][2]) - { - $lang_string = 'admin_log_tools_modlog_prune_user_forum'; - } - break; - case 'admin_log_tools_backupdb_backup': // Create backup - if($logitem['data'][0] == 'download') - { - $lang_string = 'admin_log_tools_backupdb_backup_download'; - } - $logitem['data'][1] = '...'.substr($logitem['data'][1], -20); - break; - case 'admin_log_tools_backupdb_dlbackup': // Download backup - $logitem['data'][0] = '...'.substr($logitem['data'][0], -20); - break; - case 'admin_log_tools_backupdb_delete': // Delete backup - $logitem['data'][0] = '...'.substr($logitem['data'][0], -20); - break; - case 'admin_log_tools_optimizedb_': // Optimize DB - $logitem['data'][0] = @implode(', ', my_unserialize($logitem['data'][0])); - break; - case 'admin_log_tools_recount_rebuild_': // Recount and rebuild - $detail_lang_string = $lang_string.$logitem['data'][0]; - if(isset($lang->$detail_lang_string)) - { - $lang_string = $detail_lang_string; - } - break; - case 'admin_log_tools_spamlog_prune': // Spam Log Pruning - if($logitem['data'][1] && !$logitem['data'][2]) - { - $lang_string = 'admin_log_tools_spamlog_prune_user'; - } - elseif($logitem['data'][2] && !$logitem['data'][1]) - { - $lang_string = 'admin_log_tools_spamlog_prune_email'; - } - elseif($logitem['data'][1] && $logitem['data'][2]) - { - $lang_string = 'admin_log_tools_spamlog_prune_user_email'; - } - break; - // == USERS == - case 'admin_log_user_admin_permissions_edit': // editing default/group/user admin permissions - if($logitem['data'][0] > 0) - { - // User - $lang_string .= '_user'; - } - elseif($logitem['data'][0] < 0) - { - // Group - $logitem['data'][0] = abs($logitem['data'][0]); - $lang_string .= '_group'; - } - break; - case 'admin_log_user_admin_permissions_delete': // deleting group/user admin permissions - if($logitem['data'][0] > 0) - { - // User - $lang_string .= '_user'; - } - elseif($logitem['data'][0] < 0) - { - // Group - $logitem['data'][0] = abs($logitem['data'][0]); - $lang_string .= '_group'; - } - break; - case 'admin_log_user_awaiting_activation_activate': - if($logitem['data'][0] == 'deleted') - { - $lang_string .= '_deleted'; - } - else - { - $lang_string .= '_activated'; - } - break; - case 'admin_log_user_banning_': // banning - if($logitem['data'][2] == 0) - { - $lang_string = 'admin_log_user_banning_add_permanent'; - } - else - { - $logitem['data'][2] = my_date($mybb->settings['dateformat'], $logitem['data'][2]); - $lang_string = 'admin_log_user_banning_add_temporary'; - } - break; - case 'admin_log_user_groups_join_requests': - if($logitem['data'][0] == 'approve') - { - $lang_string = 'admin_log_user_groups_join_requests_approve'; - } - else - { - $lang_string = 'admin_log_user_groups_join_requests_deny'; - } - break; - case 'admin_log_user_users_inline_banned': - if($logitem['data'][1] == 0) - { - $lang_string = 'admin_log_user_users_inline_banned_perm'; - } - else - { - $logitem['data'][1] = my_date($mybb->settings['dateformat'], $logitem['data'][1]); - $lang_string = 'admin_log_user_users_inline_banned_temp'; - } - break; - } - - $plugin_array = array('logitem' => &$logitem, 'lang_string' => &$lang_string); - $plugins->run_hooks("admin_tools_get_admin_log_action", $plugin_array); - - if(isset($lang->$lang_string)) - { - array_unshift($logitem['data'], $lang->$lang_string); // First parameter for sprintf is the format string - $string = call_user_func_array(array($lang, 'sprintf'), $logitem['data']); - if(!$string) - { - $string = $lang->$lang_string; // Fall back to the one in the language pack - } - } - else - { - if(isset($logitem['data']['type']) && $logitem['data']['type'] == 'admin_locked_out') - { - $string = $lang->sprintf($lang->admin_log_admin_locked_out, (int) $logitem['data']['uid'], htmlspecialchars_uni($logitem['data']['username'])); - } - else - { - // Build a default string - $string = $logitem['module'].' - '.$logitem['action']; - if(is_array($logitem['data']) && count($logitem['data']) > 0) - { - $string .= '('.implode(', ', $logitem['data']).')'; - } - } - } - return $string; -} - - diff --git a/html/forums/admin/modules/tools/backupdb.php b/html/forums/admin/modules/tools/backupdb.php deleted file mode 100644 index bcb09f6..0000000 --- a/html/forums/admin/modules/tools/backupdb.php +++ /dev/null @@ -1,483 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -/** - * Allows us to refresh cache to prevent over flowing - * - * @param resource $fp - * @param string $contents - */ -function clear_overflow($fp, &$contents) -{ - global $mybb; - - if($mybb->input['method'] == 'disk') - { - if($mybb->input['filetype'] == 'gzip') - { - gzwrite($fp, $contents); - } - else - { - fwrite($fp, $contents); - } - } - else - { - if($mybb->input['filetype'] == "gzip") - { - echo gzencode($contents); - } - else - { - echo $contents; - } - } - - $contents = ''; -} - -$page->add_breadcrumb_item($lang->database_backups, "index.php?module=tools-backupdb"); - -$plugins->run_hooks("admin_tools_backupdb_begin"); - -if($mybb->input['action'] == "dlbackup") -{ - if(empty($mybb->input['file'])) - { - flash_message($lang->error_file_not_specified, 'error'); - admin_redirect("index.php?module=tools-backupdb"); - } - - $plugins->run_hooks("admin_tools_backupdb_dlbackup"); - - $file = basename($mybb->input['file']); - $ext = get_extension($file); - - if(file_exists(MYBB_ADMIN_DIR.'backups/'.$file) && filetype(MYBB_ADMIN_DIR.'backups/'.$file) == 'file' && ($ext == 'gz' || $ext == 'sql')) - { - $plugins->run_hooks("admin_tools_backupdb_dlbackup_commit"); - - // Log admin action - log_admin_action($file); - - header('Content-disposition: attachment; filename='.$file); - header("Content-type: ".$ext); - header("Content-length: ".filesize(MYBB_ADMIN_DIR.'backups/'.$file)); - - $handle = fopen(MYBB_ADMIN_DIR.'backups/'.$file, 'rb'); - while(!feof($handle)) - { - echo fread($handle, 8192); - } - fclose($handle); - } - else - { - flash_message($lang->error_invalid_backup, 'error'); - admin_redirect("index.php?module=tools-backupdb"); - } -} - -if($mybb->input['action'] == "delete") -{ - if($mybb->input['no']) - { - admin_redirect("index.php?module=tools-backupdb"); - } - - $file = basename($mybb->input['file']); - - if(!trim($mybb->input['file']) || !file_exists(MYBB_ADMIN_DIR.'backups/'.$file)) - { - flash_message($lang->error_backup_doesnt_exist, 'error'); - admin_redirect("index.php?module=tools-backupdb"); - } - - $plugins->run_hooks("admin_tools_backupdb_delete"); - - if($mybb->request_method == "post") - { - $delete = @unlink(MYBB_ADMIN_DIR.'backups/'.$file); - - if($delete) - { - $plugins->run_hooks("admin_tools_backupdb_delete_commit"); - - // Log admin action - log_admin_action($file); - - flash_message($lang->success_backup_deleted, 'success'); - admin_redirect("index.php?module=tools-backupdb"); - } - else - { - flash_message($lang->error_backup_not_deleted, 'error'); - admin_redirect("index.php?module=tools-backupdb"); - } - } - else - { - $page->output_confirm_action("index.php?module=tools-backupdb&action=delete&file={$mybb->input['file']}", $lang->confirm_backup_deletion); - } -} - -if($mybb->input['action'] == "backup") -{ - $plugins->run_hooks("admin_tools_backupdb_backup"); - - if($mybb->request_method == "post") - { - if(!is_array($mybb->input['tables'])) - { - flash_message($lang->error_tables_not_selected, 'error'); - admin_redirect("index.php?module=tools-backupdb&action=backup"); - } - - @set_time_limit(0); - - if($mybb->input['method'] == 'disk') - { - $file = MYBB_ADMIN_DIR.'backups/backup_'.date("_Ymd_His_").random_str(16); - - if($mybb->input['filetype'] == 'gzip') - { - if(!function_exists('gzopen')) // check zlib-ness - { - flash_message($lang->error_no_zlib, 'error'); - admin_redirect("index.php?module=tools-backupdb&action=backup"); - } - - $fp = gzopen($file.'.incomplete.sql.gz', 'w9'); - } - else - { - $fp = fopen($file.'.incomplete.sql', 'w'); - } - } - else - { - $file = 'backup_'.substr(md5($mybb->user['uid'].TIME_NOW), 0, 10).random_str(54); - if($mybb->input['filetype'] == 'gzip') - { - if(!function_exists('gzopen')) // check zlib-ness - { - flash_message($lang->error_no_zlib, 'error'); - admin_redirect("index.php?module=tools-backupdb&action=backup"); - } - - // Send headers for gzip file - header('Content-Type: application/x-gzip'); - header('Content-Disposition: attachment; filename="'.$file.'.sql.gz"'); - } - else - { - // Send standard headers for .sql - header('Content-Type: text/x-sql'); - header('Content-Disposition: attachment; filename="'.$file.'.sql"'); - } - } - $db->set_table_prefix(''); - - $time = date('dS F Y \a\t H:i', TIME_NOW); - $header = "-- MyBB Database Backup\n-- Generated: {$time}\n-- -------------------------------------\n\n"; - $contents = $header; - foreach($mybb->input['tables'] as $table) - { - if(!$db->table_exists($db->escape_string($table))) - { - continue; - } - if($mybb->input['analyzeoptimize'] == 1) - { - $db->optimize_table($table); - $db->analyze_table($table); - } - - $field_list = array(); - $fields_array = $db->show_fields_from($table); - foreach($fields_array as $field) - { - $field_list[] = $field['Field']; - } - - $fields = "`".implode("`,`", $field_list)."`"; - if($mybb->input['contents'] != 'data') - { - $structure = $db->show_create_table($table).";\n"; - $contents .= $structure; - clear_overflow($fp, $contents); - } - - if($mybb->input['contents'] != 'structure') - { - if($db->engine == 'mysqli') - { - $query = mysqli_query($db->read_link, "SELECT * FROM {$db->table_prefix}{$table}", MYSQLI_USE_RESULT); - } - else - { - $query = $db->simple_select($table); - } - - while($row = $db->fetch_array($query)) - { - $insert = "INSERT INTO {$table} ($fields) VALUES ("; - $comma = ''; - foreach($field_list as $field) - { - if(!isset($row[$field]) || is_null($row[$field])) - { - $insert .= $comma."NULL"; - } - else if($db->engine == 'mysqli') - { - $insert .= $comma."'".mysqli_real_escape_string($db->read_link, $row[$field])."'"; - } - else - { - $insert .= $comma."'".$db->escape_string($row[$field])."'"; - } - $comma = ','; - } - $insert .= ");\n"; - $contents .= $insert; - clear_overflow($fp, $contents); - } - $db->free_result($query); - } - } - - $db->set_table_prefix(TABLE_PREFIX); - - if($mybb->input['method'] == 'disk') - { - if($mybb->input['filetype'] == 'gzip') - { - gzwrite($fp, $contents); - gzclose($fp); - rename($file.'.incomplete.sql.gz', $file.'.sql.gz'); - } - else - { - fwrite($fp, $contents); - fclose($fp); - rename($file.'.incomplete.sql', $file.'.sql'); - } - - if($mybb->input['filetype'] == 'gzip') - { - $ext = '.sql.gz'; - } - else - { - $ext = '.sql'; - } - - $plugins->run_hooks("admin_tools_backupdb_backup_disk_commit"); - - // Log admin action - log_admin_action("disk", $file.$ext); - - $file_from_admindir = 'index.php?module=tools-backupdb&action=dlbackup&file='.basename($file).$ext; - flash_message("{$lang->success_backup_created}

{$lang->backup_saved_to}
{$file}{$ext} ({$lang->download})

", 'success'); - admin_redirect("index.php?module=tools-backupdb"); - } - else - { - $plugins->run_hooks("admin_tools_backupdb_backup_download_commit"); - - // Log admin action - log_admin_action("download"); - - if($mybb->input['filetype'] == 'gzip') - { - echo gzencode($contents); - } - else - { - echo $contents; - } - } - - exit; - } - - $page->extra_header = " \n"; - - $page->add_breadcrumb_item($lang->new_database_backup); - $page->output_header($lang->new_database_backup); - - $sub_tabs['database_backup'] = array( - 'title' => $lang->database_backups, - 'link' => "index.php?module=tools-backupdb" - ); - - $sub_tabs['new_backup'] = array( - 'title' => $lang->new_backup, - 'link' => "index.php?module=tools-backupdb&action=backup", - 'description' => $lang->new_backup_desc - ); - - $page->output_nav_tabs($sub_tabs, 'new_backup'); - - // Check if file is writable, before allowing submission - if(!is_writable(MYBB_ADMIN_DIR."/backups")) - { - $lang->update_button = ''; - $page->output_alert($lang->alert_not_writable); - $cannot_write = true; - } - - $table = new Table; - $table->construct_header($lang->table_selection); - $table->construct_header($lang->backup_options); - - $table_selects = array(); - $table_list = $db->list_tables($config['database']['database']); - foreach($table_list as $id => $table_name) - { - $table_selects[$table_name] = $table_name; - } - - $form = new Form("index.php?module=tools-backupdb&action=backup", "post", "table_selection", 0, "table_selection"); - - $table->construct_cell("{$lang->table_select_desc}\n

\n{$lang->select_all}
\n{$lang->deselect_all}
\n{$lang->select_forum_tables}\n

\n
".$form->generate_select_box("tables[]", $table_selects, false, array('multiple' => true, 'id' => 'table_select', 'size' => 20))."
", array('rowspan' => 5, 'width' => '50%', 'style' => 'border-bottom: 0px')); - $table->construct_row(); - - $table->construct_cell("{$lang->file_type}
\n{$lang->file_type_desc}
\n
".$form->generate_radio_button("filetype", "gzip", $lang->gzip_compressed, array('checked' => 1))."
\n".$form->generate_radio_button("filetype", "plain", $lang->plain_text)."
", array('width' => '50%')); - $table->construct_row(); - $table->construct_cell("{$lang->save_method}
\n{$lang->save_method_desc}
".$form->generate_radio_button("method", "disk", $lang->backup_directory)."
\n".$form->generate_radio_button("method", "download", $lang->download, array('checked' => 1))."
", array('width' => '50%')); - $table->construct_row(); - $table->construct_cell("{$lang->backup_contents}
\n{$lang->backup_contents_desc}
".$form->generate_radio_button("contents", "both", $lang->structure_and_data, array('checked' => 1))."
\n".$form->generate_radio_button("contents", "structure", $lang->structure_only)."
\n".$form->generate_radio_button("contents", "data", $lang->data_only)."
", array('width' => '50%')); - $table->construct_row(); - $table->construct_cell("{$lang->analyze_and_optimize}
\n{$lang->analyze_and_optimize_desc}
".$form->generate_yes_no_radio("analyzeoptimize")."
", array('width' => '50%')); - $table->construct_row(); - - $table->output($lang->new_database_backup); - - $buttons[] = $form->generate_submit_button($lang->perform_backup); - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $page->add_breadcrumb_item($lang->backups); - $page->output_header($lang->database_backups); - - $sub_tabs['database_backup'] = array( - 'title' => $lang->database_backups, - 'link' => "index.php?module=tools-backupdb", - 'description' => $lang->database_backups_desc - ); - - $sub_tabs['new_backup'] = array( - 'title' => $lang->new_backup, - 'link' => "index.php?module=tools-backupdb&action=backup", - ); - - $plugins->run_hooks("admin_tools_backupdb_start"); - - $page->output_nav_tabs($sub_tabs, 'database_backup'); - - $backups = array(); - $dir = MYBB_ADMIN_DIR.'backups/'; - $handle = opendir($dir); - - if($handle !== false) - { - while(($file = readdir($handle)) !== false) - { - if(filetype(MYBB_ADMIN_DIR.'backups/'.$file) == 'file') - { - $ext = get_extension($file); - if($ext == 'gz' || $ext == 'sql') - { - $backups[@filemtime(MYBB_ADMIN_DIR.'backups/'.$file)] = array( - "file" => $file, - "time" => @filemtime(MYBB_ADMIN_DIR.'backups/'.$file), - "type" => $ext - ); - } - } - } - closedir($handle); - } - - $count = count($backups); - krsort($backups); - - $table = new Table; - $table->construct_header($lang->backup_filename); - $table->construct_header($lang->file_size, array("class" => "align_center")); - $table->construct_header($lang->creation_date); - $table->construct_header($lang->controls, array("class" => "align_center")); - - foreach($backups as $backup) - { - $time = "-"; - if($backup['time']) - { - $time = my_date('relative', $backup['time']); - } - - $table->construct_cell("{$backup['file']}"); - $table->construct_cell(get_friendly_size(filesize(MYBB_ADMIN_DIR.'backups/'.$backup['file'])), array("class" => "align_center")); - $table->construct_cell($time); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_backup_deletion}')\">{$lang->delete}", array("class" => "align_center")); - $table->construct_row(); - } - - if($count == 0) - { - $table->construct_cell($lang->no_backups, array('colspan' => 4)); - $table->construct_row(); - } - - $table->output($lang->existing_database_backups); - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/cache.php b/html/forums/admin/modules/tools/cache.php deleted file mode 100644 index dd28f4a..0000000 --- a/html/forums/admin/modules/tools/cache.php +++ /dev/null @@ -1,276 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->cache_manager, "index.php?module=tools-cache"); - -$plugins->run_hooks("admin_tools_cache_begin"); - -if($mybb->input['action'] == 'view') -{ - if(!trim($mybb->input['title'])) - { - flash_message($lang->error_no_cache_specified, 'error'); - admin_redirect("index.php?module=tools-cache"); - } - - $plugins->run_hooks("admin_tools_cache_view"); - - // Rebuilds forum settings - if($mybb->input['title'] == 'settings') - { - $cachedsettings = (array)$mybb->settings; - if(isset($cachedsettings['internal'])) - { - unset($cachedsettings['internal']); - } - - $cacheitem = array( - 'title' => 'settings', - 'cache' => my_serialize($cachedsettings) - ); - } - else - { - $query = $db->simple_select("datacache", "*", "title = '".$db->escape_string($mybb->input['title'])."'"); - $cacheitem = $db->fetch_array($query); - } - - if(!$cacheitem) - { - flash_message($lang->error_incorrect_cache, 'error'); - admin_redirect("index.php?module=tools-cache"); - } - - $cachecontents = unserialize($cacheitem['cache']); - if(empty($cachecontents)) - { - $cachecontents = $lang->error_empty_cache; - } - ob_start(); - print_r($cachecontents); - $cachecontents = htmlspecialchars_uni(ob_get_contents()); - ob_end_clean(); - - $page->add_breadcrumb_item($lang->view); - $page->output_header($lang->cache_manager); - - $table = new Table; - - $table->construct_cell("
\n{$cachecontents}\n
"); - $table->construct_row(); - $table->output($lang->cache." {$cacheitem['title']}"); - - $page->output_footer(); - -} - -if($mybb->input['action'] == "rebuild" || $mybb->input['action'] == "reload") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=tools-cache"); - } - - $plugins->run_hooks("admin_tools_cache_rebuild"); - - // Rebuilds forum settings - if($mybb->input['title'] == 'settings') - { - rebuild_settings(); - - $plugins->run_hooks("admin_tools_cache_rebuild_commit"); - - // Log admin action - log_admin_action($mybb->input['title']); - - flash_message($lang->success_cache_reloaded, 'success'); - admin_redirect("index.php?module=tools-cache"); - } - - if(method_exists($cache, "update_{$mybb->input['title']}")) - { - $func = "update_{$mybb->input['title']}"; - $cache->$func(); - - $plugins->run_hooks("admin_tools_cache_rebuild_commit"); - - // Log admin action - log_admin_action($mybb->input['title']); - - flash_message($lang->success_cache_rebuilt, 'success'); - admin_redirect("index.php?module=tools-cache"); - } - elseif(method_exists($cache, "reload_{$mybb->input['title']}")) - { - $func = "reload_{$mybb->input['title']}"; - $cache->$func(); - - $plugins->run_hooks("admin_tools_cache_rebuild_commit"); - - // Log admin action - log_admin_action($mybb->input['title']); - - flash_message($lang->success_cache_reloaded, 'success'); - admin_redirect("index.php?module=tools-cache"); - } - elseif(function_exists("update_{$mybb->input['title']}")) - { - $func = "update_{$mybb->input['title']}"; - $func(); - - $plugins->run_hooks("admin_tools_cache_rebuild_commit"); - - // Log admin action - log_admin_action($mybb->input['title']); - - flash_message($lang->success_cache_rebuilt, 'success'); - admin_redirect("index.php?module=tools-cache"); - } - elseif(function_exists("reload_{$mybb->input['title']}")) - { - $func = "reload_{$mybb->input['title']}"; - $func(); - - $plugins->run_hooks("admin_tools_cache_rebuild_commit"); - - // Log admin action - log_admin_action($mybb->input['title']); - - flash_message($lang->success_cache_reloaded, 'success'); - admin_redirect("index.php?module=tools-cache"); - } - else - { - flash_message($lang->error_cannot_rebuild, 'error'); - admin_redirect("index.php?module=tools-cache"); - } -} - -if($mybb->input['action'] == "rebuild_all") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=tools-cache"); - } - - $plugins->run_hooks("admin_tools_cache_rebuild_all"); - - $query = $db->simple_select("datacache"); - while($cacheitem = $db->fetch_array($query)) - { - if(method_exists($cache, "update_{$cacheitem['title']}")) - { - $func = "update_{$cacheitem['title']}"; - $cache->$func(); - } - elseif(method_exists($cache, "reload_{$cacheitem['title']}")) - { - $func = "reload_{$cacheitem['title']}"; - $cache->$func(); - } - elseif(function_exists("update_{$cacheitem['title']}")) - { - $func = "update_{$cacheitem['title']}"; - $func(); - } - elseif(function_exists("reload_{$cacheitem['title']}")) - { - $func = "reload_{$cacheitem['title']}"; - $func(); - } - } - - // Rebuilds forum settings - rebuild_settings(); - - $plugins->run_hooks("admin_tools_cache_rebuild_all_commit"); - - // Log admin action - log_admin_action(); - - flash_message($lang->success_cache_reloaded, 'success'); - admin_redirect("index.php?module=tools-cache"); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->cache_manager); - - $sub_tabs['cache_manager'] = array( - 'title' => $lang->cache_manager, - 'link' => "index.php?module=tools-cache", - 'description' => $lang->cache_manager_description - ); - - $plugins->run_hooks("admin_tools_cache_start"); - - $page->output_nav_tabs($sub_tabs, 'cache_manager'); - - $table = new Table; - $table->construct_header($lang->name); - $table->construct_header($lang->size, array("class" => "align_center", "width" => 100)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - $query = $db->simple_select("datacache"); - while($cacheitem = $db->fetch_array($query)) - { - $table->construct_cell("{$cacheitem['title']}"); - $table->construct_cell(get_friendly_size(strlen($cacheitem['cache'])), array("class" => "align_center")); - - if(method_exists($cache, "update_".$cacheitem['title'])) - { - $table->construct_cell("post_code}\">".$lang->rebuild_cache."", array("class" => "align_center")); - } - elseif(method_exists($cache, "reload_".$cacheitem['title'])) - { - $table->construct_cell("post_code}\">".$lang->reload_cache."", array("class" => "align_center")); - } - elseif(function_exists("update_".$cacheitem['title'])) - { - $table->construct_cell("post_code}\">".$lang->rebuild_cache."", array("class" => "align_center")); - } - elseif(function_exists("reload_".$cacheitem['title'])) - { - $table->construct_cell("post_code}\">".$lang->reload_cache."", array("class" => "align_center")); - } - else - { - $table->construct_cell(""); - } - - $table->construct_row(); - } - - // Rebuilds forum settings - $cachedsettings = (array)$mybb->settings; - if(isset($cachedsettings['internal'])) - { - unset($cachedsettings['internal']); - } - - $table->construct_cell("settings"); - $table->construct_cell(get_friendly_size(strlen(my_serialize($cachedsettings))), array("class" => "align_center")); - $table->construct_cell("post_code}\">".$lang->reload_cache."", array("class" => "align_center")); - - $table->construct_row(); - - $table->output("".$lang->cache_manager); - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/tools/file_verification.php b/html/forums/admin/modules/tools/file_verification.php deleted file mode 100644 index 65304d3..0000000 --- a/html/forums/admin/modules/tools/file_verification.php +++ /dev/null @@ -1,137 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -@set_time_limit(0); - -$page->add_breadcrumb_item($lang->file_verification, "index.php?module=tools-file_verification"); - -$plugins->run_hooks("admin_tools_file_verification_begin"); - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_tools_file_verification_check"); - - if($mybb->request_method == "post") - { - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=tools-system_health"); - } - - $page->add_breadcrumb_item($lang->checking, "index.php?module=tools-file_verification"); - - $page->output_header($lang->file_verification." - ".$lang->checking); - - $file = explode("\n", fetch_remote_file("https://mybb.com/checksums/release_mybb_{$mybb->version_code}.txt")); - - if(strstr($file[0], "output_inline_error($lang->error_communication); - $page->output_footer(); - exit; - } - - // Parser-up our checksum file from the MyBB Server - foreach($file as $line) - { - $parts = explode(" ", $line, 2); - if(empty($parts[0]) || empty($parts[1])) - { - continue; - } - - if(substr($parts[1], 0, 7) == "./admin") - { - $parts[1] = "./{$mybb->config['admin_dir']}".substr($parts[1], 7); - } - - if(file_exists(MYBB_ROOT."forums.php") && !file_exists(MYBB_ROOT."portal.php")) - { - if(trim($parts[1]) == "./index.php") - { - $parts[1] = "./forums.php"; - } - elseif($parts[1] == "./portal.php") - { - $parts[1] = "./index.php"; - } - } - - if(!file_exists(MYBB_ROOT."inc/plugins/hello.php") && $parts[1] == "./inc/plugins/hello.php") - { - continue; - } - - if(!is_dir(MYBB_ROOT."install/") && substr($parts[1], 0, 10) == "./install/") - { - continue; - } - - $checksums[trim($parts[1])][] = $parts[0]; - } - - $bad_files = verify_files(); - - $plugins->run_hooks("admin_tools_file_verification_check_commit_start"); - - $table = new Table; - $table->construct_header($lang->file); - $table->construct_header($lang->status, array("class" => "align_center", "width" => 100)); - - foreach($bad_files as $file) - { - switch($file['status']) - { - case "changed": - $file['status'] = $lang->changed; - $color = "#F22B48"; - break; - case "missing": - $file['status'] = $lang->missing; - $color = "#5B5658"; - break; - } - - $table->construct_cell("".htmlspecialchars_uni(substr($file['path'], 2)).""); - - $table->construct_cell("{$file['status']}", array("class" => "align_center")); - $table->construct_row(); - } - - $no_errors = false; - if($table->num_rows() == 0) - { - $no_errors = true; - $table->construct_cell($lang->no_corrupt_files_found, array('colspan' => 3)); - $table->construct_row(); - } - - if($no_errors) - { - $table->output($lang->file_verification.": ".$lang->no_problems_found); - } - else - { - $table->output($lang->file_verification.": ".$lang->found_problems); - } - - $page->output_footer(); - exit; - } - - $page->output_confirm_action("index.php?module=tools-file_verification", $lang->file_verification_message, $lang->file_verification); -} diff --git a/html/forums/admin/modules/tools/index.html b/html/forums/admin/modules/tools/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/modules/tools/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/modules/tools/mailerrors.php b/html/forums/admin/modules/tools/mailerrors.php deleted file mode 100644 index c10d9a3..0000000 --- a/html/forums/admin/modules/tools/mailerrors.php +++ /dev/null @@ -1,263 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->system_email_log, "index.php?module=tools-mailerrors"); - -$plugins->run_hooks("admin_tools_mailerrors_begin"); - -if($mybb->input['action'] == "prune" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_tools_mailerrors_prune"); - - if($mybb->input['delete_all']) - { - $db->delete_query("mailerrors"); - $num_deleted = $db->affected_rows(); - - $plugins->run_hooks("admin_tools_mailerrors_prune_delete_all_commit"); - - // Log admin action - log_admin_action($num_deleted); - - flash_message($lang->all_logs_deleted, 'success'); - admin_redirect("index.php?module=tools-mailerrors"); - } - else if(is_array($mybb->input['log'])) - { - $log_ids = implode(",", array_map("intval", $mybb->input['log'])); - if($log_ids) - { - $db->delete_query("mailerrors", "eid IN ({$log_ids})"); - $num_deleted = $db->affected_rows(); - } - - // Log admin action - log_admin_action($num_deleted); - } - - $plugins->run_hooks("admin_tools_mailerrors_prune_commit"); - - flash_message($lang->selected_logs_deleted, 'success'); - admin_redirect("index.php?module=tools-mailerrors"); -} - -if($mybb->input['action'] == "view") -{ - $query = $db->simple_select("mailerrors", "*", "eid='".$mybb->get_input('eid', MyBB::INPUT_INT)."'"); - $log = $db->fetch_array($query); - - if(!$log['eid']) - { - exit; - } - - $plugins->run_hooks("admin_tools_mailerrors_view"); - - $log['toaddress'] = htmlspecialchars_uni($log['toaddress']); - $log['fromaddress'] = htmlspecialchars_uni($log['fromaddress']); - $log['subject'] = htmlspecialchars_uni($log['subject']); - $log['error'] = htmlspecialchars_uni($log['error']); - $log['smtperror'] = htmlspecialchars_uni($log['smtpcode']); - $log['dateline'] = date($mybb->settings['dateformat'], $log['dateline']).", ".date($mybb->settings['timeformat'], $log['dateline']); - $log['message'] = nl2br(htmlspecialchars_uni($log['message'])); - - ?> - - - input['action']) -{ - $per_page = 20; - - if($mybb->input['page'] && $mybb->input['page'] > 1) - { - $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($mybb->input['page']*$per_page)-$per_page; - } - else - { - $mybb->input['page'] = 1; - $start = 0; - } - - $additional_criteria = array(); - - $plugins->run_hooks("admin_tools_mailerrors_start"); - - $page->output_header($lang->system_email_log); - - $sub_tabs['mailerrors'] = array( - 'title' => $lang->system_email_log, - 'link' => "index.php?module=tools-mailerrors", - 'description' => $lang->system_email_log_desc - ); - - $page->output_nav_tabs($sub_tabs, 'mailerrors'); - - $form = new Form("index.php?module=tools-mailerrors&action=prune", "post"); - - // Begin criteria filtering - if($mybb->input['subject']) - { - $additional_sql_criteria .= " AND subject LIKE '%".$db->escape_string_like($mybb->input['subject'])."%'"; - $additional_criteria[] = "subject=".htmlspecialchars_uni($mybb->input['subject']); - $form->generate_hidden_field("subject", $mybb->input['subject']); - } - - if($mybb->input['fromaddress']) - { - $additional_sql_criteria .= " AND fromaddress LIKE '%".$db->escape_string_like($mybb->input['fromaddress'])."%'"; - $additional_criteria[] = "fromaddress=".urlencode($mybb->input['fromaddress']); - $form->generate_hidden_field("fromaddress", $mybb->input['fromaddress']); - } - - if($mybb->input['toaddress']) - { - $additional_sql_criteria .= " AND toaddress LIKE '%".$db->escape_string_like($mybb->input['toaddress'])."%'"; - $additional_criteria[] = "toaddress=".urlencode($mybb->input['toaddress']); - $form->generate_hidden_field("toaddress", $mybb->input['toaddress']); - } - - if($mybb->input['error']) - { - $additional_sql_criteria .= " AND error LIKE '%".$db->escape_string_like($mybb->input['error'])."%'"; - $additional_criteria[] = "error=".urlencode($mybb->input['error']); - $form->generate_hidden_field("error", $mybb->input['error']); - } - - if($additional_criteria) - { - $additional_criteria = "&".implode("&", $additional_criteria); - } - else - { - $additional_criteria = ''; - } - - $table = new Table; - $table->construct_header($form->generate_check_box("allbox", 1, '', array('class' => 'checkall'))); - $table->construct_header($lang->subject); - $table->construct_header($lang->to, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->error_message, array("class" => "align_center", "width" => "30%")); - $table->construct_header($lang->date_sent, array("class" => "align_center", "width" => "20%")); - - $query = $db->simple_select('mailerrors', '*', "1=1 $additional_sql_criteria", array('order_by' => 'dateline', 'order_dir' => 'DESC', 'limit_start' => $start, 'limit' => $per_page)); - - while($log = $db->fetch_array($query)) - { - $log['subject'] = htmlspecialchars_uni($log['subject']); - $log['toemail'] = htmlspecialchars_uni($log['toemail']); - $log['error'] = htmlspecialchars_uni($log['error']); - $log['dateline'] = date($mybb->settings['dateformat'], $log['dateline']).", ".date($mybb->settings['timeformat'], $log['dateline']); - - $table->construct_cell($form->generate_check_box("log[{$log['eid']}]", $log['eid'], '')); - $table->construct_cell("{$log['subject']}"); - $find_from = ""; - $table->construct_cell("{$find_from}
{$log['toaddress']}
"); - $table->construct_cell($log['error']); - $table->construct_cell($log['dateline'], array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_logs, array("colspan" => 5)); - $table->construct_row(); - $table->output($lang->system_email_log); - } - else - { - $table->output($lang->system_email_log); - $buttons[] = $form->generate_submit_button($lang->delete_selected, array('onclick' => "return confirm('{$lang->confirm_delete_logs}');")); - $buttons[] = $form->generate_submit_button($lang->delete_all, array('name' => 'delete_all', 'onclick' => "return confirm('{$lang->confirm_delete_all_logs}');")); - $form->output_submit_wrapper($buttons); - } - - $form->end(); - - $query = $db->simple_select("mailerrors l", "COUNT(eid) AS logs", "1=1 {$additional_sql_criteria}"); - $total_rows = $db->fetch_field($query, "logs"); - - echo "
".draw_admin_pagination($mybb->input['page'], $per_page, $total_rows, "index.php?module=tools-mailerrors&page={page}{$additional_criteria}"); - - $form = new Form("index.php?module=tools-mailerrors", "post"); - $form_container = new FormContainer($lang->filter_system_email_log); - $form_container->output_row($lang->subject_contains, "", $form->generate_text_box('subject', $mybb->input['subject'], array('id' => 'subject')), 'subject'); - $form_container->output_row($lang->error_message_contains, "", $form->generate_text_box('error', $mybb->input['error'], array('id' => 'error')), 'error'); - $form_container->output_row($lang->to_address_contains, "", $form->generate_text_box('toaddress', $mybb->input['toaddress'], array('id' => 'toaddress')), 'toaddress'); - $form_container->output_row($lang->from_address_contains, "", $form->generate_text_box('fromaddress', $mybb->input['fromaddress'], array('id' => 'fromaddress')), 'fromaddress'); - - $form_container->end(); - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->filter_system_email_log); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/maillogs.php b/html/forums/admin/modules/tools/maillogs.php deleted file mode 100644 index be8f4f9..0000000 --- a/html/forums/admin/modules/tools/maillogs.php +++ /dev/null @@ -1,450 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->user_email_log, "index.php?module=tools-maillogs"); - -$plugins->run_hooks("admin_tools_maillogs_begin"); - -if($mybb->input['action'] == "prune" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_tools_maillogs_prune"); - - if($mybb->input['delete_all']) - { - $db->delete_query("maillogs"); - $num_deleted = $db->affected_rows(); - - $plugins->run_hooks("admin_tools_maillogs_prune_delete_all_commit"); - - // Log admin action - log_admin_action($num_deleted); - - flash_message($lang->all_logs_deleted, 'success'); - admin_redirect("index.php?module=tools-maillogs"); - } - else if(is_array($mybb->input['log'])) - { - $log_ids = implode(",", array_map("intval", $mybb->input['log'])); - if($log_ids) - { - $db->delete_query("maillogs", "mid IN ({$log_ids})"); - $num_deleted = $db->affected_rows(); - } - - // Log admin action - log_admin_action($num_deleted); - } - - $plugins->run_hooks("admin_tools_maillogs_prune_commit"); - - flash_message($lang->selected_logs_deleted, 'success'); - admin_redirect("index.php?module=tools-maillogs"); -} - -if($mybb->input['action'] == "view") -{ - $query = $db->simple_select("maillogs", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $log = $db->fetch_array($query); - - if(!$log['mid']) - { - exit; - } - - $plugins->run_hooks("admin_tools_maillogs_view"); - - $log['toemail'] = htmlspecialchars_uni($log['toemail']); - $log['fromemail'] = htmlspecialchars_uni($log['fromemail']); - $log['subject'] = htmlspecialchars_uni($log['subject']); - $log['dateline'] = date($mybb->settings['dateformat'], $log['dateline']).", ".date($mybb->settings['timeformat'], $log['dateline']); - if($mybb->settings['mail_logging'] == 1) - { - $log['message'] = $lang->na; - } - else - { - $log['message'] = nl2br(htmlspecialchars_uni($log['message'])); - } - - ?> - - input['action']) -{ - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $per_page = $mybb->settings['threadsperpage']; - - if(!$per_page) - { - $per_page = 20; - } - - if($mybb->input['page'] && $mybb->input['page'] > 1) - { - $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($mybb->input['page']*$per_page)-$per_page; - } - else - { - $mybb->input['page'] = 1; - $start = 0; - } - - $additional_criteria = array(); - - $plugins->run_hooks("admin_tools_maillogs_start"); - - // Filter form was submitted - play around with the values - if($mybb->request_method == "post") - { - if($mybb->input['from_type'] == "user") - { - $mybb->input['fromname'] = $mybb->input['from_value']; - } - else if($mybb->input['from_type'] == "email") - { - $mybb->input['fromemail'] = $mybb->input['from_value']; - } - - if($mybb->input['to_type'] == "user") - { - $mybb->input['toname'] = $mybb->input['to_value']; - } - else if($mybb->input['to_type'] == "email") - { - $mybb->input['toemail'] = $mybb->input['to_value']; - } - } - - $touid = $mybb->get_input('touid', MyBB::INPUT_INT); - $toname = $db->escape_string($mybb->input['toname']); - $toemail = $db->escape_string_like($mybb->input['toemail']); - - $fromuid = $mybb->get_input('fromuid', MyBB::INPUT_INT); - $fromemail = $db->escape_string_like($mybb->input['fromemail']); - - $subject = $db->escape_string_like($mybb->input['subject']); - - // Begin criteria filtering - if($mybb->input['subject']) - { - $additional_sql_criteria .= " AND l.subject LIKE '%{$subject}%'"; - $additional_criteria[] = "subject=".urlencode($mybb->input['subject']); - } - - if($mybb->input['fromuid']) - { - $query = $db->simple_select("users", "uid, username", "uid = '{$fromuid}'"); - $user = $db->fetch_array($query); - $from_filter = $user['username']; - - $additional_sql_criteria .= " AND l.fromuid = '{$fromuid}'"; - $additional_criteria[] = "fromuid={$fromuid}"; - } - else if($mybb->input['fromname']) - { - $user = get_user_by_username($mybb->input['fromname'], array('fields' => 'uid, username')); - $from_filter = $user['username']; - - if(!$user['uid']) - { - flash_message($lang->error_invalid_user, 'error'); - admin_redirect("index.php?module=tools-maillogs"); - } - - $additional_sql_criteria .= "AND l.fromuid = '{$user['uid']}'"; - $additional_criteria[] = "fromuid={$user['uid']}"; - } - - if($mybb->input['fromemail']) - { - $additional_sql_criteria .= " AND l.fromemail LIKE '%{$fromemail}%'"; - $additional_criteria[] = "fromemail=".urlencode($mybb->input['fromemail']); - $from_filter = $mybb->input['fromemail']; - } - - if($mybb->input['touid']) - { - $query = $db->simple_select("users", "uid, username", "uid = '{$touid}'"); - $user = $db->fetch_array($query); - $to_filter = $user['username']; - - $additional_sql_criteria .= " AND l.touid = '{$touid}'"; - $additional_criteria[] = "touid={$touid}"; - } - else if($mybb->input['toname']) - { - $user = get_user_by_username($toname, array('fields' => 'username')); - $to_filter = $user['username']; - - if(!$user['uid']) - { - flash_message($lang->error_invalid_user, 'error'); - admin_redirect("index.php?module=tools-maillogs"); - } - - $additional_sql_criteria .= "AND l.touid='{$user['uid']}'"; - $additional_criteria[] = "touid={$user['uid']}"; - } - - if($mybb->input['toemail']) - { - $additional_sql_criteria .= " AND l.toemail LIKE '%{$toemail}%'"; - $additional_criteria[] = "toemail=".urlencode($mybb->input['toemail']); - $to_filter = $mybb->input['toemail']; - } - - if(!empty($additional_criteria)) - { - $additional_criteria = "&".implode("&", $additional_criteria); - } - else - { - $additional_criteria = ''; - } - - $page->output_header($lang->user_email_log); - - $sub_tabs['maillogs'] = array( - 'title' => $lang->user_email_log, - 'link' => "index.php?module=tools-maillogs", - 'description' => $lang->user_email_log_desc - ); - - $page->output_nav_tabs($sub_tabs, 'maillogs'); - - $form = new Form("index.php?module=tools-maillogs&action=prune", "post"); - - $table = new Table; - $table->construct_header($form->generate_check_box("allbox", 1, '', array('class' => 'checkall'))); - $table->construct_header($lang->subject, array("colspan" => 2)); - $table->construct_header($lang->from, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->to, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->date_sent, array("class" => "align_center", "width" => "20%")); - $table->construct_header($lang->ip_address, array("class" => "align_center", 'width' => '10%')); - - $query = $db->query(" - SELECT l.*, r.username AS to_username, f.username AS from_username, t.subject AS thread_subject - FROM ".TABLE_PREFIX."maillogs l - LEFT JOIN ".TABLE_PREFIX."users r ON (r.uid=l.touid) - LEFT JOIN ".TABLE_PREFIX."users f ON (f.uid=l.fromuid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=l.tid) - WHERE 1=1 {$additional_sql_criteria} - ORDER BY l.dateline DESC - LIMIT {$start}, {$per_page} - "); - while($log = $db->fetch_array($query)) - { - $table->construct_cell($form->generate_check_box("log[{$log['mid']}]", $log['mid'], ''), array("width" => 1)); - $log['subject'] = htmlspecialchars_uni($log['subject']); - $log['dateline'] = date($mybb->settings['dateformat'], $log['dateline']).", ".date($mybb->settings['timeformat'], $log['dateline']); - - if($log['type'] == 2) - { - if($log['thread_subject']) - { - $log['thread_subject'] = htmlspecialchars_uni($log['thread_subject']); - $thread_link = "".$log['thread_subject'].""; - } - else - { - $thread_link = $lang->deleted; - } - $table->construct_cell("style}/images/icons/maillogs_thread.png\" title=\"{$lang->sent_using_send_thread_feature}\" alt=\"\" />", array("width" => 1)); - $table->construct_cell("{$log['subject']}
{$lang->thread} {$thread_link}"); - - if($log['fromuid'] > 0) - { - $find_from = ""; - } - - if(!$log['from_username'] && $log['fromuid'] > 0) - { - $table->construct_cell("{$find_from}
{$lang->deleted_user}
"); - } - elseif($log['fromuid'] == 0) - { - $log['fromemail'] = htmlspecialchars_uni($log['fromemail']); - $table->construct_cell("{$find_from}
{$log['fromemail']}
"); - } - else - { - $table->construct_cell("{$find_from}"); - } - - $log['toemail'] = htmlspecialchars_uni($log['toemail']); - $table->construct_cell($log['toemail']); - } - elseif($log['type'] == 1) - { - $table->construct_cell("style}/images/icons/maillogs_user.png\" title=\"{$lang->email_sent_to_user}\" alt=\"\" />", array("width" => 1)); - $table->construct_cell("{$log['subject']}"); - - if($log['fromuid'] > 0) - { - $find_from = ""; - } - - if(!$log['from_username'] && $log['fromuid'] > 0) - { - $table->construct_cell("{$find_from}
{$lang->deleted_user}
"); - } - elseif($log['fromuid'] == 0) - { - $log['fromemail'] = htmlspecialchars_uni($log['fromemail']); - $table->construct_cell("{$find_from}
{$log['fromemail']}
"); - } - else - { - $table->construct_cell("{$find_from}"); - } - - $find_to = ""; - if(!$log['to_username']) - { - $table->construct_cell("{$find_to}
{$lang->deleted_user}
"); - } - else - { - $table->construct_cell("{$find_to}"); - } - } - elseif($log['type'] == 3) - { - $table->construct_cell("style}/images/icons/maillogs_contact.png\" title=\"{$lang->email_sent_using_contact_form}\" alt=\"\" />", array("width" => 1)); - $table->construct_cell("{$log['subject']}"); - - if($log['fromuid'] > 0) - { - $find_from = ""; - } - - if(!$log['from_username'] && $log['fromuid'] > 0) - { - $table->construct_cell("{$find_from}
{$lang->deleted_user}
"); - } - elseif($log['fromuid'] == 0) - { - $log['fromemail'] = htmlspecialchars_uni($log['fromemail']); - $table->construct_cell("{$find_from}
{$log['fromemail']}
"); - } - else - { - $table->construct_cell("{$find_from}"); - } - - $log['toemail'] = htmlspecialchars_uni($log['toemail']); - $table->construct_cell($log['toemail']); - } - - $table->construct_cell($log['dateline'], array("class" => "align_center")); - $table->construct_cell(my_inet_ntop($db->unescape_binary($log['ipaddress'])), array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_logs, array("colspan" => "7")); - $table->construct_row(); - $table->output($lang->user_email_log); - } - else - { - $table->output($lang->user_email_log); - $buttons[] = $form->generate_submit_button($lang->delete_selected, array('onclick' => "return confirm('{$lang->confirm_delete_logs}');")); - $buttons[] = $form->generate_submit_button($lang->delete_all, array('name' => 'delete_all', 'onclick' => "return confirm('{$lang->confirm_delete_all_logs}');")); - $form->output_submit_wrapper($buttons); - } - - $form->end(); - - $query = $db->simple_select("maillogs l", "COUNT(l.mid) as logs", "1=1 {$additional_sql_criteria}"); - $total_rows = $db->fetch_field($query, "logs"); - - echo "
".draw_admin_pagination($mybb->input['page'], $per_page, $total_rows, "index.php?module=tools-maillogs&page={page}{$additional_criteria}"); - - $form = new Form("index.php?module=tools-maillogs", "post"); - $form_container = new FormContainer($lang->filter_user_email_log); - $user_email = array( - "user" => $lang->username_is, - "email" => $lang->email_contains - ); - $form_container->output_row($lang->subject_contains, "", $form->generate_text_box('subject', $mybb->input['subject'], array('id' => 'subject')), 'subject'); - if($from_username) - { - $from_type = "user"; - } - else if($mybb->input['fromemail']) - { - $from_type = "email"; - } - $form_container->output_row($lang->from, "", $form->generate_select_box('from_type', $user_email, $from_type)." ".$form->generate_text_box('from_value', htmlspecialchars_uni($from_filter), array('id' => 'from_value')), 'from_value'); - if($to_username) - { - $to_type = "user"; - } - else if($mybb->input['toemail']) - { - $to_type = "email"; - } - $form_container->output_row($lang->to, "", $form->generate_select_box('to_type', $user_email, $to_type)." ".$form->generate_text_box('to_value', htmlspecialchars_uni($to_filter), array('id' => 'to_value')), 'to_value'); - $form_container->end(); - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->filter_user_email_log); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/modlog.php b/html/forums/admin/modules/tools/modlog.php deleted file mode 100644 index 096fbcb..0000000 --- a/html/forums/admin/modules/tools/modlog.php +++ /dev/null @@ -1,341 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->mod_logs, "index.php?module=tools-modlog"); - -$sub_tabs['mod_logs'] = array( - 'title' => $lang->mod_logs, - 'link' => "index.php?module=tools-modlog", - 'description' => $lang->mod_logs_desc -); -$sub_tabs['prune_mod_logs'] = array( - 'title' => $lang->prune_mod_logs, - 'link' => "index.php?module=tools-modlog&action=prune", - 'description' => $lang->prune_mod_logs_desc -); - -$plugins->run_hooks("admin_tools_modlog_begin"); - -if($mybb->input['action'] == 'prune') -{ - $plugins->run_hooks("admin_tools_modlog_prune"); - - if($mybb->request_method == 'post') - { - $is_today = false; - $mybb->input['older_than'] = $mybb->get_input('older_than', MyBB::INPUT_INT); - if($mybb->input['older_than'] <= 0) - { - $is_today = true; - $mybb->input['older_than'] = 1; - } - $where = 'dateline < '.(TIME_NOW-($mybb->input['older_than']*86400)); - - // Searching for entries by a particular user - if($mybb->input['uid']) - { - $where .= " AND uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"; - } - - // Searching for entries in a specific module - if($mybb->input['fid'] > 0) - { - $where .= " AND fid='".$db->escape_string($mybb->input['fid'])."'"; - } - else - { - $mybb->input['fid'] = 0; - } - - $db->delete_query("moderatorlog", $where); - $num_deleted = $db->affected_rows(); - - $plugins->run_hooks("admin_tools_modlog_prune_commit"); - - if(!is_array($forum_cache)) - { - $forum_cache = cache_forums(); - } - - // Log admin action - log_admin_action($mybb->input['older_than'], $mybb->input['uid'], $mybb->input['fid'], $num_deleted, $forum_cache[$mybb->input['fid']]['name']); - - $success = $lang->success_pruned_mod_logs; - if($is_today == true && $num_deleted > 0) - { - $success .= ' '.$lang->note_logs_locked; - } - elseif($is_today == true && $num_deleted == 0) - { - flash_message($lang->note_logs_locked, 'error'); - admin_redirect("index.php?module=tools-modlog"); - } - flash_message($success, 'success'); - admin_redirect("index.php?module=tools-modlog"); - } - $page->add_breadcrumb_item($lang->prune_mod_logs, "index.php?module=tools-modlog&action=prune"); - $page->output_header($lang->prune_mod_logs); - $page->output_nav_tabs($sub_tabs, 'prune_mod_logs'); - - // Fetch filter options - $sortbysel[$mybb->input['sortby']] = 'selected="selected"'; - $ordersel[$mybb->input['order']] = 'selected="selected"'; - - $user_options[''] = $lang->all_moderators; - $user_options['0'] = '----------'; - - $query = $db->query(" - SELECT DISTINCT l.uid, u.username - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (l.uid=u.uid) - ORDER BY u.username ASC - "); - while($user = $db->fetch_array($query)) - { - $user_options[$user['uid']] = htmlspecialchars_uni($user['username']); - } - - $form = new Form("index.php?module=tools-modlog&action=prune", "post"); - $form_container = new FormContainer($lang->prune_moderator_logs); - $form_container->output_row($lang->forum, "", $form->generate_forum_select('fid', $mybb->input['fid'], array('id' => 'fid', 'main_option' => $lang->all_forums)), 'fid'); - $form_container->output_row($lang->forum_moderator, "", $form->generate_select_box('uid', $user_options, $mybb->input['uid'], array('id' => 'uid')), 'uid'); - if(!$mybb->input['older_than']) - { - $mybb->input['older_than'] = '30'; - } - $form_container->output_row($lang->date_range, "", $lang->older_than.$form->generate_numeric_field('older_than', $mybb->input['older_than'], array('id' => 'older_than', 'style' => 'width: 50px', 'min' => 0)).' '.$lang->days, 'older_than'); - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->prune_moderator_logs); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_tools_modlog_start"); - - $page->output_header($lang->mod_logs); - - $page->output_nav_tabs($sub_tabs, 'mod_logs'); - - $perpage = $mybb->get_input('perpage', MyBB::INPUT_INT); - if(!$perpage) - { - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $perpage = $mybb->settings['threadsperpage']; - } - - $where = 'WHERE 1=1'; - - // Searching for entries by a particular user - if($mybb->input['uid']) - { - $where .= " AND l.uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"; - } - - // Searching for entries in a specific forum - if($mybb->input['fid'] > 0) - { - $where .= " AND l.fid='".$mybb->get_input('fid', MyBB::INPUT_INT)."'"; - } - - // Order? - switch($mybb->input['sortby']) - { - case "username": - $sortby = "u.username"; - break; - case "forum": - $sortby = "f.name"; - break; - case "thread": - $sortby = "t.subject"; - break; - default: - $sortby = "l.dateline"; - } - $order = $mybb->input['order']; - if($order != "asc") - { - $order = "desc"; - } - - $query = $db->query(" - SELECT COUNT(l.dateline) AS count - FROM ".TABLE_PREFIX."moderatorlog l - {$where} - "); - $rescount = $db->fetch_field($query, "count"); - - // Figure out if we need to display multiple pages. - if($mybb->input['page'] != "last") - { - $pagecnt = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $postcount = (int)$rescount; - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->input['page'] == "last") - { - $pagecnt = $pages; - } - - if($pagecnt > $pages) - { - $pagecnt = 1; - } - - if($pagecnt) - { - $start = ($pagecnt-1) * $perpage; - } - else - { - $start = 0; - $pagecnt = 1; - } - - $table = new Table; - $table->construct_header($lang->username, array('width' => '10%')); - $table->construct_header($lang->date, array("class" => "align_center", 'width' => '15%')); - $table->construct_header($lang->action, array("class" => "align_center", 'width' => '35%')); - $table->construct_header($lang->information, array("class" => "align_center", 'width' => '30%')); - $table->construct_header($lang->ipaddress, array("class" => "align_center", 'width' => '10%')); - - $query = $db->query(" - SELECT l.*, u.username, u.usergroup, u.displaygroup, t.subject AS tsubject, f.name AS fname, p.subject AS psubject - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=l.tid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=l.fid) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=l.pid) - {$where} - ORDER BY {$sortby} {$order} - LIMIT {$start}, {$perpage} - "); - while($logitem = $db->fetch_array($query)) - { - $information = ''; - $logitem['action'] = htmlspecialchars_uni($logitem['action']); - $logitem['dateline'] = my_date('relative', $logitem['dateline']); - $trow = alt_trow(); - $username = format_name(htmlspecialchars_uni($logitem['username']), $logitem['usergroup'], $logitem['displaygroup']); - $logitem['profilelink'] = build_profile_link($username, $logitem['uid'], "_blank"); - if($logitem['tsubject']) - { - $information = "{$lang->thread} ".htmlspecialchars_uni($logitem['tsubject'])."
"; - } - if($logitem['fname']) - { - $information .= "{$lang->forum} ".htmlspecialchars_uni($logitem['fname'])."
"; - } - if($logitem['psubject']) - { - $information .= "{$lang->post} ".htmlspecialchars_uni($logitem['psubject']).""; - } - - if(!$logitem['tsubject'] || !$logitem['fname'] || !$logitem['psubject']) - { - $data = my_unserialize($logitem['data']); - if($data['uid']) - { - $information = "{$lang->user_info} ".htmlspecialchars_uni($data['username']).""; - } - if($data['aid']) - { - $information = "{$lang->announcement} ".htmlspecialchars_uni($data['subject']).""; - } - } - - $table->construct_cell($logitem['profilelink']); - $table->construct_cell($logitem['dateline'], array("class" => "align_center")); - $table->construct_cell($logitem['action'], array("class" => "align_center")); - $table->construct_cell($information); - $table->construct_cell(my_inet_ntop($db->unescape_binary($logitem['ipaddress'])), array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_modlogs, array("colspan" => "5")); - $table->construct_row(); - } - - $table->output($lang->mod_logs); - - // Do we need to construct the pagination? - if($rescount > $perpage) - { - echo draw_admin_pagination($pagecnt, $perpage, $rescount, "index.php?module=tools-modlog&perpage=$perpage&uid={$mybb->input['uid']}&fid={$mybb->input['fid']}&sortby={$mybb->input['sortby']}&order={$order}")."
"; - } - - // Fetch filter options - $sortbysel[$mybb->input['sortby']] = "selected=\"selected\""; - $ordersel[$mybb->input['order']] = "selected=\"selected\""; - - $user_options[''] = $lang->all_moderators; - $user_options['0'] = '----------'; - - $query = $db->query(" - SELECT DISTINCT l.uid, u.username - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (l.uid=u.uid) - ORDER BY u.username ASC - "); - while($user = $db->fetch_array($query)) - { - $selected = ''; - if($mybb->input['uid'] == $user['uid']) - { - $selected = "selected=\"selected\""; - } - $user_options[$user['uid']] = htmlspecialchars_uni($user['username']); - } - - $sort_by = array( - 'dateline' => $lang->date, - 'username' => $lang->username, - 'forum' => $lang->forum_name, - 'thread' => $lang->thread_subject - ); - - $order_array = array( - 'asc' => $lang->asc, - 'desc' => $lang->desc - ); - - $form = new Form("index.php?module=tools-modlog", "post"); - $form_container = new FormContainer($lang->filter_moderator_logs); - $form_container->output_row($lang->forum, "", $form->generate_forum_select('fid', $mybb->input['fid'], array('id' => 'fid', 'main_option' => $lang->all_forums)), 'fid'); - $form_container->output_row($lang->forum_moderator, "", $form->generate_select_box('uid', $user_options, $mybb->input['uid'], array('id' => 'uid')), 'uid'); - $form_container->output_row($lang->sort_by, "", $form->generate_select_box('sortby', $sort_by, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('order', $order_array, $order, array('id' => 'order'))." {$lang->order}", 'order'); - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $perpage, array('id' => 'perpage', 'min' => 1)), 'perpage'); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->filter_moderator_logs); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/module_meta.php b/html/forums/admin/modules/tools/module_meta.php deleted file mode 100644 index 11e2455..0000000 --- a/html/forums/admin/modules/tools/module_meta.php +++ /dev/null @@ -1,133 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -/** - * @return bool true - */ -function tools_meta() -{ - global $page, $lang, $plugins; - - $sub_menu = array(); - $sub_menu['10'] = array("id" => "system_health", "title" => $lang->system_health, "link" => "index.php?module=tools-system_health"); - $sub_menu['20'] = array("id" => "cache", "title" => $lang->cache_manager, "link" => "index.php?module=tools-cache"); - $sub_menu['30'] = array("id" => "tasks", "title" => $lang->task_manager, "link" => "index.php?module=tools-tasks"); - $sub_menu['40'] = array("id" => "recount_rebuild", "title" => $lang->recount_and_rebuild, "link" => "index.php?module=tools-recount_rebuild"); - $sub_menu['50'] = array("id" => "php_info", "title" => $lang->view_php_info, "link" => "index.php?module=tools-php_info"); - $sub_menu['60'] = array("id" => "backupdb", "title" => $lang->database_backups, "link" => "index.php?module=tools-backupdb"); - $sub_menu['70'] = array("id" => "optimizedb", "title" => $lang->optimize_database, "link" => "index.php?module=tools-optimizedb"); - $sub_menu['80'] = array("id" => "file_verification", "title" => $lang->file_verification, "link" => "index.php?module=tools-file_verification"); - - $sub_menu = $plugins->run_hooks("admin_tools_menu", $sub_menu); - - $page->add_menu_item($lang->tools_and_maintenance, "tools", "index.php?module=tools", 50, $sub_menu); - - return true; -} - -/** - * @param string $action - * - * @return string - */ -function tools_action_handler($action) -{ - global $page, $lang, $plugins; - - $page->active_module = "tools"; - - $actions = array( - 'php_info' => array('active' => 'php_info', 'file' => 'php_info.php'), - 'tasks' => array('active' => 'tasks', 'file' => 'tasks.php'), - 'backupdb' => array('active' => 'backupdb', 'file' => 'backupdb.php'), - 'optimizedb' => array('active' => 'optimizedb', 'file' => 'optimizedb.php'), - 'cache' => array('active' => 'cache', 'file' => 'cache.php'), - 'recount_rebuild' => array('active' => 'recount_rebuild', 'file' => 'recount_rebuild.php'), - 'maillogs' => array('active' => 'maillogs', 'file' => 'maillogs.php'), - 'mailerrors' => array('active' => 'mailerrors', 'file' => 'mailerrors.php'), - 'adminlog' => array('active' => 'adminlog', 'file' => 'adminlog.php'), - 'modlog' => array('active' => 'modlog', 'file' => 'modlog.php'), - 'warninglog' => array('active' => 'warninglog', 'file' => 'warninglog.php'), - 'spamlog' => array('active' => 'spamlog', 'file' => 'spamlog.php'), - 'system_health' => array('active' => 'system_health', 'file' => 'system_health.php'), - 'file_verification' => array('active' => 'file_verification', 'file' => 'file_verification.php'), - 'statistics' => array('active' => 'statistics', 'file' => 'statistics.php'), - ); - - $actions = $plugins->run_hooks("admin_tools_action_handler", $actions); - - $sub_menu = array(); - $sub_menu['10'] = array("id" => "adminlog", "title" => $lang->administrator_log, "link" => "index.php?module=tools-adminlog"); - $sub_menu['20'] = array("id" => "modlog", "title" => $lang->moderator_log, "link" => "index.php?module=tools-modlog"); - $sub_menu['30'] = array("id" => "maillogs", "title" => $lang->user_email_log, "link" => "index.php?module=tools-maillogs"); - $sub_menu['40'] = array("id" => "mailerrors", "title" => $lang->system_mail_log, "link" => "index.php?module=tools-mailerrors"); - $sub_menu['50'] = array("id" => "warninglog", "title" => $lang->user_warning_log, "link" => "index.php?module=tools-warninglog"); - $sub_menu['60'] = array("id" => "spamlog", "title" => $lang->spam_log, "link" => "index.php?module=tools-spamlog"); - $sub_menu['70'] = array("id" => "statistics", "title" => $lang->statistics, "link" => "index.php?module=tools-statistics"); - - $sub_menu = $plugins->run_hooks("admin_tools_menu_logs", $sub_menu); - - if(!isset($actions[$action])) - { - $page->active_action = "system_health"; - } - - $sidebar = new SidebarItem($lang->logs); - $sidebar->add_menu_items($sub_menu, $actions[$action]['active']); - - $page->sidebar .= $sidebar->get_markup(); - - if(isset($actions[$action])) - { - $page->active_action = $actions[$action]['active']; - return $actions[$action]['file']; - } - else - { - return "system_health.php"; - } -} - -/** - * @return array - */ -function tools_admin_permissions() -{ - global $lang, $plugins; - - $admin_permissions = array( - "system_health" => $lang->can_access_system_health, - "cache" => $lang->can_manage_cache, - "tasks" => $lang->can_manage_tasks, - "backupdb" => $lang->can_manage_db_backup, - "optimizedb" => $lang->can_optimize_db, - "recount_rebuild" => $lang->can_recount_and_rebuild, - "adminlog" => $lang->can_manage_admin_logs, - "modlog" => $lang->can_manage_mod_logs, - "maillogs" => $lang->can_manage_user_mail_log, - "mailerrors" => $lang->can_manage_system_mail_log, - "warninglog" => $lang->can_manage_user_warning_log, - "spamlog" => $lang->can_manage_spam_log, - "php_info" => $lang->can_view_php_info, - "file_verification" => $lang->can_manage_file_verification, - "statistics" => $lang->can_view_statistics, - ); - - $admin_permissions = $plugins->run_hooks("admin_tools_permissions", $admin_permissions); - - return array("name" => $lang->tools_and_maintenance, "permissions" => $admin_permissions, "disporder" => 50); -} - diff --git a/html/forums/admin/modules/tools/optimizedb.php b/html/forums/admin/modules/tools/optimizedb.php deleted file mode 100644 index b7c7c98..0000000 --- a/html/forums/admin/modules/tools/optimizedb.php +++ /dev/null @@ -1,112 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->optimize_database, "index.php?module=tools-optimizedb"); - -$plugins->run_hooks("admin_tools_optimizedb_begin"); - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_tools_optimizedb_start"); - - if($mybb->request_method == "post") - { - if(!is_array($mybb->input['tables'])) - { - flash_message($lang->error_no_tables_selected, 'error'); - admin_redirect("index.php?module=tools-optimizedb"); - } - - @set_time_limit(0); - - $db->set_table_prefix(''); - - foreach($mybb->input['tables'] as $table) - { - if($db->table_exists($db->escape_string($table))) - { - $db->optimize_table($table); - $db->analyze_table($table); - } - } - - $db->set_table_prefix(TABLE_PREFIX); - - $plugins->run_hooks("admin_tools_optimizedb_start_begin"); - - // Log admin action - log_admin_action(my_serialize($mybb->input['tables'])); - - flash_message($lang->success_tables_optimized, 'success'); - admin_redirect("index.php?module=tools-optimizedb"); - } - - $page->extra_header = " \n"; - - $page->output_header($lang->optimize_database); - - $table = new Table; - $table->construct_header($lang->table_selection); - - $table_selects = array(); - $table_list = $db->list_tables($config['database']['database']); - foreach($table_list as $id => $table_name) - { - $table_selects[$table_name] = $table_name; - } - - $form = new Form("index.php?module=tools-optimizedb", "post", "table_selection", 0, "table_selection"); - - $table->construct_cell("{$lang->tables_select_desc}\n

\n{$lang->select_all}
\n{$lang->deselect_all}
\n{$lang->select_forum_tables}\n

\n
".$form->generate_select_box("tables[]", $table_selects, false, array('multiple' => true, 'id' => 'table_select', 'size' => 20))."
", array('rowspan' => 5, 'width' => '50%')); - $table->construct_row(); - - $table->output($lang->optimize_database); - - $buttons[] = $form->generate_submit_button($lang->optimize_selected_tables); - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/tools/php_info.php b/html/forums/admin/modules/tools/php_info.php deleted file mode 100644 index 48a8e61..0000000 --- a/html/forums/admin/modules/tools/php_info.php +++ /dev/null @@ -1,42 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -if($mybb->input['action'] == 'phpinfo') -{ - $plugins->run_hooks("admin_tools_php_info_phpinfo"); - - // Log admin action - log_admin_action(); - - phpinfo(); - exit; -} - -$page->add_breadcrumb_item($lang->php_info, "index.php?module=tools-php_info"); - -$plugins->run_hooks("admin_tools_php_info_begin"); - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_tools_php_info_start"); - - $page->output_header($lang->php_info); - - echo ""; - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/tools/recount_rebuild.php b/html/forums/admin/modules/tools/recount_rebuild.php deleted file mode 100644 index 56998db..0000000 --- a/html/forums/admin/modules/tools/recount_rebuild.php +++ /dev/null @@ -1,764 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->recount_rebuild, "index.php?module=tools-recount_rebuild"); - -$plugins->run_hooks("admin_tools_recount_rebuild"); - -/** - * Rebuild forum counters - */ -function acp_rebuild_forum_counters() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("forums", "COUNT(*) as num_forums"); - $num_forums = $db->fetch_field($query, 'num_forums'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('forumcounters', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 50; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("forums", "fid", '', array('order_by' => 'fid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($forum = $db->fetch_array($query)) - { - $update['parentlist'] = make_parent_list($forum['fid']); - $db->update_query("forums", $update, "fid='{$forum['fid']}'"); - rebuild_forum_counters($forum['fid']); - } - - check_proceed($num_forums, $end, ++$page, $per_page, "forumcounters", "do_rebuildforumcounters", $lang->success_rebuilt_forum_counters); -} - -/** - * Rebuild thread counters - */ -function acp_rebuild_thread_counters() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("threads", "COUNT(*) as num_threads"); - $num_threads = $db->fetch_field($query, 'num_threads'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('threadcounters', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("threads", "tid", '', array('order_by' => 'tid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($thread = $db->fetch_array($query)) - { - rebuild_thread_counters($thread['tid']); - } - - check_proceed($num_threads, $end, ++$page, $per_page, "threadcounters", "do_rebuildthreadcounters", $lang->success_rebuilt_thread_counters); -} - -/** - * Rebuild poll counters - */ -function acp_rebuild_poll_counters() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("polls", "COUNT(*) as num_polls"); - $num_polls = $db->fetch_field($query, 'num_polls'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('pollcounters', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("polls", "pid", '', array('order_by' => 'pid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($poll = $db->fetch_array($query)) - { - rebuild_poll_counters($poll['pid']); - } - - check_proceed($num_polls, $end, ++$page, $per_page, "pollcounters", "do_rebuildpollcounters", $lang->success_rebuilt_poll_counters); -} - -/** - * Recount user posts - */ -function acp_recount_user_posts() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("users", "COUNT(uid) as num_users"); - $num_users = $db->fetch_field($query, 'num_users'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('userposts', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("forums", "fid", "usepostcounts = 0"); - while($forum = $db->fetch_array($query)) - { - $fids[] = $forum['fid']; - } - if(is_array($fids)) - { - $fids = implode(',', $fids); - } - if($fids) - { - $fids = " AND p.fid NOT IN($fids)"; - } - else - { - $fids = ""; - } - - $query = $db->simple_select("users", "uid", '', array('order_by' => 'uid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($user = $db->fetch_array($query)) - { - $query2 = $db->query(" - SELECT COUNT(p.pid) AS post_count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.uid='{$user['uid']}' AND t.visible > 0 AND p.visible > 0{$fids} - "); - $num_posts = $db->fetch_field($query2, "post_count"); - - $db->update_query("users", array("postnum" => (int)$num_posts), "uid='{$user['uid']}'"); - } - - check_proceed($num_users, $end, ++$page, $per_page, "userposts", "do_recountuserposts", $lang->success_rebuilt_user_post_counters); -} - -/** - * Recount user threads - */ -function acp_recount_user_threads() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("users", "COUNT(uid) as num_users"); - $num_users = $db->fetch_field($query, 'num_users'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('userthreads', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("forums", "fid", "usethreadcounts = 0"); - while($forum = $db->fetch_array($query)) - { - $fids[] = $forum['fid']; - } - if(is_array($fids)) - { - $fids = implode(',', $fids); - } - if($fids) - { - $fids = " AND t.fid NOT IN($fids)"; - } - else - { - $fids = ""; - } - - $query = $db->simple_select("users", "uid", '', array('order_by' => 'uid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($user = $db->fetch_array($query)) - { - $query2 = $db->query(" - SELECT COUNT(t.tid) AS thread_count - FROM ".TABLE_PREFIX."threads t - WHERE t.uid='{$user['uid']}' AND t.visible > 0 AND t.closed NOT LIKE 'moved|%'{$fids} - "); - $num_threads = $db->fetch_field($query2, "thread_count"); - - $db->update_query("users", array("threadnum" => (int)$num_threads), "uid='{$user['uid']}'"); - } - - check_proceed($num_users, $end, ++$page, $per_page, "userthreads", "do_recountuserthreads", $lang->success_rebuilt_user_thread_counters); -} - -/** - * Recount reputation values - */ -function acp_recount_reputation() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("users", "COUNT(uid) as num_users"); - $num_users = $db->fetch_field($query, 'num_users'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('reputation', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("users", "uid", '', array('order_by' => 'uid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($user = $db->fetch_array($query)) - { - $query2 = $db->query(" - SELECT SUM(reputation) as total_rep - FROM ".TABLE_PREFIX."reputation - WHERE `uid`='{$user['uid']}' - "); - $total_rep = $db->fetch_field($query2, "total_rep"); - - $db->update_query("users", array("reputation" => (int)$total_rep), "uid='{$user['uid']}'"); - } - - check_proceed($num_users, $end, ++$page, $per_page, "reputation", "do_recountreputation", $lang->success_rebuilt_reputation); -} - -/** - * Recount warnings for users - */ -function acp_recount_warning() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("users", "COUNT(uid) as num_users"); - $num_users = $db->fetch_field($query, 'num_users'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('warning', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("users", "uid", '', array('order_by' => 'uid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($user = $db->fetch_array($query)) - { - $query2 = $db->query(" - SELECT SUM(points) as warn_lev - FROM ".TABLE_PREFIX."warnings - WHERE uid='{$user['uid']}' AND expired='0' - "); - $warn_lev = $db->fetch_field($query2, "warn_lev"); - - $db->update_query("users", array("warningpoints" => (int)$warn_lev), "uid='{$user['uid']}'"); - } - - check_proceed($num_users, $end, ++$page, $per_page, "warning", "do_recountwarning", $lang->success_rebuilt_warning); -} - -/** - * Recount private messages (total and unread) for users - */ -function acp_recount_private_messages() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("users", "COUNT(uid) as num_users"); - $num_users = $db->fetch_field($query, 'num_users'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('privatemessages', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - require_once MYBB_ROOT."inc/functions_user.php"; - - $query = $db->simple_select("users", "uid", '', array('order_by' => 'uid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($user = $db->fetch_array($query)) - { - update_pm_count($user['uid']); - } - - check_proceed($num_users, $end, ++$page, $per_page, "privatemessages", "do_recountprivatemessages", $lang->success_rebuilt_private_messages); -} - -/** - * Recount referrals for users - */ -function acp_recount_referrals() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("users", "COUNT(uid) as num_users"); - $num_users = $db->fetch_field($query, 'num_users'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('referral', MyBB::INPUT_INT); - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("users", "uid", '', array('order_by' => 'uid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($user = $db->fetch_array($query)) - { - $query2 = $db->query(" - SELECT COUNT(uid) as num_referrers - FROM ".TABLE_PREFIX."users - WHERE referrer='{$user['uid']}' - "); - $num_referrers = $db->fetch_field($query2, "num_referrers"); - - $db->update_query("users", array("referrals" => (int)$num_referrers), "uid='{$user['uid']}'"); - } - - check_proceed($num_users, $end, ++$page, $per_page, "referral", "do_recountreferral", $lang->success_rebuilt_referral); -} - -/** - * Recount thread ratings - */ -function acp_recount_thread_ratings() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("threads", "COUNT(*) as num_threads"); - $num_threads = $db->fetch_field($query, 'num_threads'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('threadrating', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 500; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $query = $db->simple_select("threads", "tid", '', array('order_by' => 'tid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($thread = $db->fetch_array($query)) - { - $query2 = $db->query(" - SELECT COUNT(tid) as num_ratings, SUM(rating) as total_rating - FROM ".TABLE_PREFIX."threadratings - WHERE tid='{$thread['tid']}' - "); - $recount = $db->fetch_array($query2); - - $db->update_query("threads", array("numratings" => (int)$recount['num_ratings'], "totalratings" => (int)$recount['total_rating']), "tid='{$thread['tid']}'"); - } - - check_proceed($num_threads, $end, ++$page, $per_page, "threadrating", "do_recountthreadrating", $lang->success_rebuilt_thread_ratings); -} - -/** - * Rebuild thumbnails for attachments - */ -function acp_rebuild_attachment_thumbnails() -{ - global $db, $mybb, $lang; - - $query = $db->simple_select("attachments", "COUNT(aid) as num_attachments"); - $num_attachments = $db->fetch_field($query, 'num_attachments'); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $per_page = $mybb->get_input('attachmentthumbs', MyBB::INPUT_INT); - if($per_page <= 0) - { - $per_page = 20; - } - $start = ($page-1) * $per_page; - $end = $start + $per_page; - - $uploadspath = $mybb->settings['uploadspath']; - if(my_substr($uploadspath, 0, 1) == '.') - { - $uploadspath = MYBB_ROOT . $mybb->settings['uploadspath']; - } - - require_once MYBB_ROOT."inc/functions_image.php"; - - $query = $db->simple_select("attachments", "*", '', array('order_by' => 'aid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); - while($attachment = $db->fetch_array($query)) - { - $ext = my_strtolower(my_substr(strrchr($attachment['filename'], "."), 1)); - if($ext == "gif" || $ext == "png" || $ext == "jpg" || $ext == "jpeg" || $ext == "jpe") - { - $thumbname = str_replace(".attach", "_thumb.$ext", $attachment['attachname']); - $thumbnail = generate_thumbnail($uploadspath."/".$attachment['attachname'], $uploadspath, $thumbname, $mybb->settings['attachthumbh'], $mybb->settings['attachthumbw']); - if($thumbnail['code'] == 4) - { - $thumbnail['filename'] = "SMALL"; - } - $db->update_query("attachments", array("thumbnail" => $thumbnail['filename']), "aid='{$attachment['aid']}'"); - } - } - - check_proceed($num_attachments, $end, ++$page, $per_page, "attachmentthumbs", "do_rebuildattachmentthumbs", $lang->success_rebuilt_attachment_thumbnails); -} - -/** - * @param int $current - * @param int $finish - * @param int $next_page - * @param int $per_page - * @param string $name - * @param string $name2 - * @param string $message - */ -function check_proceed($current, $finish, $next_page, $per_page, $name, $name2, $message) -{ - global $page, $lang; - - if($finish >= $current) - { - flash_message($message, 'success'); - admin_redirect("index.php?module=tools-recount_rebuild"); - } - else - { - $page->output_header(); - - $form = new Form("index.php?module=tools-recount_rebuild", 'post'); - - echo $form->generate_hidden_field("page", $next_page); - echo $form->generate_hidden_field($name, $per_page); - echo $form->generate_hidden_field($name2, $lang->go); - echo "
\n"; - echo "

{$lang->confirm_proceed_rebuild}

\n"; - echo "
\n"; - echo ""; - echo "

\n"; - echo $form->generate_submit_button($lang->proceed, array('class' => 'button_yes', 'id' => 'proceed_button')); - echo "

\n"; - echo "
\n"; - - $form->end(); - - $page->output_footer(); - exit; - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_tools_recount_rebuild_start"); - - if($mybb->request_method == "post") - { - require_once MYBB_ROOT."inc/functions_rebuild.php"; - - if(!isset($mybb->input['page']) || $mybb->get_input('page', MyBB::INPUT_INT) < 1) - { - $mybb->input['page'] = 1; - } - - if(isset($mybb->input['do_rebuildforumcounters'])) - { - $plugins->run_hooks("admin_tools_recount_rebuild_forum_counters"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("forum"); - } - if(!$mybb->get_input('forumcounters', MyBB::INPUT_INT)) - { - $mybb->input['forumcounters'] = 50; - } - - acp_rebuild_forum_counters(); - } - elseif(isset($mybb->input['do_rebuildthreadcounters'])) - { - $plugins->run_hooks("admin_tools_recount_rebuild_thread_counters"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("thread"); - } - if(!$mybb->get_input('threadcounters', MyBB::INPUT_INT)) - { - $mybb->input['threadcounters'] = 500; - } - - acp_rebuild_thread_counters(); - } - elseif(isset($mybb->input['do_recountuserposts'])) - { - $plugins->run_hooks("admin_tools_recount_rebuild_user_posts"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("userposts"); - } - if(!$mybb->get_input('userposts', MyBB::INPUT_INT)) - { - $mybb->input['userposts'] = 500; - } - - acp_recount_user_posts(); - } - elseif(isset($mybb->input['do_recountuserthreads'])) - { - $plugins->run_hooks("admin_tools_recount_rebuild_user_threads"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("userthreads"); - } - if(!$mybb->get_input('userthreads', MyBB::INPUT_INT)) - { - $mybb->input['userthreads'] = 500; - } - - acp_recount_user_threads(); - } - elseif(isset($mybb->input['do_rebuildattachmentthumbs'])) - { - $plugins->run_hooks("admin_tools_recount_rebuild_attachment_thumbs"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("attachmentthumbs"); - } - - if(!$mybb->get_input('attachmentthumbs', MyBB::INPUT_INT)) - { - $mybb->input['attachmentthumbs'] = 500; - } - - acp_rebuild_attachment_thumbnails(); - } - elseif(isset($mybb->input['do_recountreputation'])) - { - $plugins->run_hooks("admin_tools_recount_recount_reputation"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("reputation"); - } - - if(!$mybb->get_input('reputation', MyBB::INPUT_INT)) - { - $mybb->input['reputation'] = 500; - } - - acp_recount_reputation(); - } - elseif(isset($mybb->input['do_recountwarning'])) - { - $plugins->run_hooks("admin_tools_recount_recount_warning"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("warning"); - } - - if(!$mybb->get_input('warning', MyBB::INPUT_INT)) - { - $mybb->input['warning'] = 500; - } - - acp_recount_warning(); - } - elseif(isset($mybb->input['do_recountprivatemessages'])) - { - $plugins->run_hooks("admin_tools_recount_recount_private_messages"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("privatemessages"); - } - - if(!$mybb->get_input('privatemessages', MyBB::INPUT_INT)) - { - $mybb->input['privatemessages'] = 500; - } - - acp_recount_private_messages(); - } - elseif(isset($mybb->input['do_recountreferral'])) - { - $plugins->run_hooks("admin_tools_recount_recount_referral"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("referral"); - } - - if(!$mybb->get_input('referral', MyBB::INPUT_INT)) - { - $mybb->input['referral'] = 500; - } - - acp_recount_referrals(); - } - elseif(isset($mybb->input['do_recountthreadrating'])) - { - $plugins->run_hooks("admin_tools_recount_recount_thread_ratings"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("threadrating"); - } - - if(!$mybb->get_input('threadrating', MyBB::INPUT_INT)) - { - $mybb->input['threadrating'] = 500; - } - - acp_recount_thread_ratings(); - } - elseif(isset($mybb->input['do_rebuildpollcounters'])) - { - $plugins->run_hooks("admin_tools_recount_rebuild_poll_counters"); - - if($mybb->input['page'] == 1) - { - // Log admin action - log_admin_action("poll"); - } - - if(!$mybb->get_input('pollcounters', MyBB::INPUT_INT)) - { - $mybb->input['pollcounters'] = 500; - } - - acp_rebuild_poll_counters(); - } - else - { - $plugins->run_hooks("admin_tools_recount_rebuild_stats"); - - $cache->update_stats(); - - // Log admin action - log_admin_action("stats"); - - flash_message($lang->success_rebuilt_forum_stats, 'success'); - admin_redirect("index.php?module=tools-recount_rebuild"); - } - } - - $page->output_header($lang->recount_rebuild); - - $sub_tabs['recount_rebuild'] = array( - 'title' => $lang->recount_rebuild, - 'link' => "index.php?module=tools-recount_rebuild", - 'description' => $lang->recount_rebuild_desc - ); - - $page->output_nav_tabs($sub_tabs, 'recount_rebuild'); - - $form = new Form("index.php?module=tools-recount_rebuild", "post"); - - $form_container = new FormContainer($lang->recount_rebuild); - $form_container->output_row_header($lang->name); - $form_container->output_row_header($lang->data_per_page, array('width' => 50)); - $form_container->output_row_header(" "); - - $form_container->output_cell("
{$lang->rebuild_forum_counters_desc}
"); - $form_container->output_cell($form->generate_numeric_field("forumcounters", 50, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_rebuildforumcounters"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->rebuild_thread_counters_desc}
"); - $form_container->output_cell($form->generate_numeric_field("threadcounters", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_rebuildthreadcounters"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->rebuild_poll_counters_desc}
"); - $form_container->output_cell($form->generate_numeric_field("pollcounters", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_rebuildpollcounters"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_user_posts_desc}
"); - $form_container->output_cell($form->generate_numeric_field("userposts", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountuserposts"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_user_threads_desc}
"); - $form_container->output_cell($form->generate_numeric_field("userthreads", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountuserthreads"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->rebuild_attachment_thumbs_desc}
"); - $form_container->output_cell($form->generate_numeric_field("attachmentthumbs", 20, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_rebuildattachmentthumbs"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_stats_desc}
"); - $form_container->output_cell($lang->na); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountstats"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_reputation_desc}
"); - $form_container->output_cell($form->generate_numeric_field("reputation", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountreputation"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_warning_desc}
"); - $form_container->output_cell($form->generate_numeric_field("warning", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountwarning"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_private_messages_desc}
"); - $form_container->output_cell($form->generate_numeric_field("privatemessages", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountprivatemessages"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_referrals_desc}
"); - $form_container->output_cell($form->generate_numeric_field("referral", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountreferral"))); - $form_container->construct_row(); - - $form_container->output_cell("
{$lang->recount_thread_ratings_desc}
"); - $form_container->output_cell($form->generate_numeric_field("threadrating", 500, array('style' => 'width: 150px;', 'min' => 0))); - $form_container->output_cell($form->generate_submit_button($lang->go, array("name" => "do_recountthreadrating"))); - $form_container->construct_row(); - - $plugins->run_hooks("admin_tools_recount_rebuild_output_list"); - - $form_container->end(); - - $form->end(); - - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/tools/spamlog.php b/html/forums/admin/modules/tools/spamlog.php deleted file mode 100644 index a34dc9c..0000000 --- a/html/forums/admin/modules/tools/spamlog.php +++ /dev/null @@ -1,296 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->spam_logs, "index.php?module=tools-spamlog"); - -$sub_tabs['spam_logs'] = array( - 'title' => $lang->spam_logs, - 'link' => "index.php?module=tools-spamlog", - 'description' => $lang->spam_logs_desc -); -$sub_tabs['prune_spam_logs'] = array( - 'title' => $lang->prune_spam_logs, - 'link' => "index.php?module=tools-spamlog&action=prune", - 'description' => $lang->prune_spam_logs_desc -); - -$plugins->run_hooks("admin_tools_spamlog_begin"); - -if($mybb->input['action'] == 'prune') -{ - if(!is_super_admin($mybb->user['uid'])) - { - flash_message($lang->cannot_perform_action_super_admin_general, 'error'); - admin_redirect("index.php?module=tools-spamlog"); - } - - $plugins->run_hooks("admin_tools_spamlog_prune"); - - if($mybb->request_method == 'post') - { - $is_today = false; - $mybb->input['older_than'] = $mybb->get_input('older_than', MyBB::INPUT_INT); - if($mybb->input['older_than'] <= 0) - { - $is_today = true; - $mybb->input['older_than'] = 1; - } - $where = 'dateline < '.(TIME_NOW-($mybb->input['older_than']*86400)); - - // Searching for entries in a specific module - if($mybb->input['filter_username']) - { - $where .= " AND username='".$db->escape_string($mybb->input['filter_username'])."'"; - } - - // Searching for entries in a specific module - if($mybb->input['filter_email']) - { - $where .= " AND email='".$db->escape_string($mybb->input['filter_email'])."'"; - } - - $query = $db->delete_query("spamlog", $where); - $num_deleted = $db->affected_rows(); - - $plugins->run_hooks("admin_tools_spamlog_prune_commit"); - - // Log admin action - log_admin_action($mybb->input['older_than'], $mybb->input['filter_username'], $mybb->input['filter_email'], $num_deleted); - - $success = $lang->success_pruned_spam_logs; - if($is_today == true && $num_deleted > 0) - { - $success .= ' '.$lang->note_logs_locked; - } - elseif($is_today == true && $num_deleted == 0) - { - flash_message($lang->note_logs_locked, 'error'); - admin_redirect('index.php?module=tools-spamlog'); - } - flash_message($success, 'success'); - admin_redirect('index.php?module=tools-spamlog'); - } - $page->add_breadcrumb_item($lang->prune_spam_logs, 'index.php?module=tools-spamlog&action=prune'); - $page->output_header($lang->prune_spam_logs); - $page->output_nav_tabs($sub_tabs, 'prune_spam_logs'); - - // Fetch filter options - $sortbysel[$mybb->input['sortby']] = 'selected="selected"'; - $ordersel[$mybb->input['order']] = 'selected="selected"'; - - $form = new Form("index.php?module=tools-spamlog&action=prune", "post"); - $form_container = new FormContainer($lang->prune_spam_logs); - $form_container->output_row($lang->spam_username, "", $form->generate_text_box('filter_username', $mybb->input['filter_username'], array('id' => 'filter_username')), 'filter_username'); - $form_container->output_row($lang->spam_email, "", $form->generate_text_box('filter_email', $mybb->input['filter_email'], array('id' => 'filter_email')), 'filter_email'); - if(!$mybb->input['older_than']) - { - $mybb->input['older_than'] = '30'; - } - $form_container->output_row($lang->date_range, "", $lang->older_than.$form->generate_numeric_field('older_than', $mybb->input['older_than'], array('id' => 'older_than', 'style' => 'width: 50px', 'min' => 0))." {$lang->days}", 'older_than'); - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->prune_spam_logs); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_tools_spamlog_start"); - - $page->output_header($lang->spam_logs); - - $page->output_nav_tabs($sub_tabs, 'spam_logs'); - - $perpage = $mybb->get_input('perpage', MyBB::INPUT_INT); - if(!$perpage) - { - $perpage = 20; - } - - $where = '1=1'; - - $additional_criteria = array(); - - // Searching for entries witha specific username - if($mybb->input['username']) - { - $where .= " AND username='".$db->escape_string($mybb->input['username'])."'"; - $additional_criteria[] = "username=".urlencode($mybb->input['username']); - } - - // Searching for entries with a specific email - if($mybb->input['email']) - { - $where .= " AND email='".$db->escape_string($mybb->input['email'])."'"; - $additional_criteria[] = "email=".urlencode($mybb->input['email']); - } - - // Searching for entries with a specific IP - if($mybb->input['ipaddress'] > 0) - { - $where .= " AND ipaddress=".$db->escape_binary(my_inet_pton($mybb->input['ipaddress'])); - $additional_criteria[] = "ipaddress=".urlencode($mybb->input['ipaddress']); - } - - if($additional_criteria) - { - $additional_criteria = "&".implode("&", $additional_criteria); - } - else - { - $additional_criteria = ''; - } - - // Order? - switch($mybb->input['sortby']) - { - case "username": - $sortby = "username"; - break; - case "email": - $sortby = "email"; - break; - case "ipaddress": - $sortby = "ipaddress"; - break; - default: - $sortby = "dateline"; - } - $order = $mybb->input['order']; - if($order != "asc") - { - $order = "desc"; - } - - $query = $db->simple_select("spamlog", "COUNT(sid) AS count", $where); - $rescount = $db->fetch_field($query, "count"); - - // Figure out if we need to display multiple pages. - if($mybb->input['page'] != "last") - { - $pagecnt = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $logcount = (int)$rescount; - $pages = $logcount / $perpage; - $pages = ceil($pages); - - if($mybb->input['page'] == "last") - { - $pagecnt = $pages; - } - - if($pagecnt > $pages) - { - $pagecnt = 1; - } - - if($pagecnt) - { - $start = ($pagecnt-1) * $perpage; - } - else - { - $start = 0; - $pagecnt = 1; - } - - $table = new Table; - $table->construct_header($lang->spam_username, array('width' => '20%')); - $table->construct_header($lang->spam_email, array("class" => "align_center", 'width' => '20%')); - $table->construct_header($lang->spam_ip, array("class" => "align_center", 'width' => '20%')); - $table->construct_header($lang->spam_date, array("class" => "align_center", 'width' => '20%')); - $table->construct_header($lang->spam_confidence, array("class" => "align_center", 'width' => '20%')); - - $query = $db->simple_select("spamlog", "*", $where, array('order_by' => $sortby, 'order_dir' => $order, 'limit_start' => $start, 'limit' => $perpage)); - while($row = $db->fetch_array($query)) - { - $username = htmlspecialchars_uni($row['username']); - $email = htmlspecialchars_uni($row['email']); - $ip_address = my_inet_ntop($db->unescape_binary($row['ipaddress'])); - - $dateline = ''; - if($row['dateline'] > 0) - { - $dateline = my_date('relative', $row['dateline']); - } - - $confidence = '0%'; - $data = @my_unserialize($row['data']); - if(is_array($data) && !empty($data)) - { - if(isset($data['confidence'])) - { - $confidence = (double)$data['confidence'].'%'; - } - } - - $search_sfs = ""; - - $table->construct_cell($username); - $table->construct_cell($email); - $table->construct_cell("{$search_sfs}
{$ip_address}
"); - $table->construct_cell($dateline); - $table->construct_cell($confidence); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_spam_logs, array("colspan" => "5")); - $table->construct_row(); - } - - $table->output($lang->spam_logs); - - // Do we need to construct the pagination? - if($rescount > $perpage) - { - echo draw_admin_pagination($pagecnt, $perpage, $rescount, "index.php?module=tools-spamlog&perpage={$perpage}{$additional_criteria}&sortby={$mybb->input['sortby']}&order={$order}")."
"; - } - - // Fetch filter options - $sortbysel[$mybb->input['sortby']] = "selected=\"selected\""; - $ordersel[$mybb->input['order']] = "selected=\"selected\""; - - $sort_by = array( - 'dateline' => $lang->spam_date, - 'username' => $lang->spam_username, - 'email' => $lang->spam_email, - 'ipaddress' => $lang->spam_ip, - ); - - $order_array = array( - 'asc' => $lang->asc, - 'desc' => $lang->desc - ); - - $form = new Form("index.php?module=tools-spamlog", "post"); - $form_container = new FormContainer($lang->filter_spam_logs); - $form_container->output_row($lang->spam_username, "", $form->generate_text_box('username', htmlspecialchars_uni($mybb->get_input('username')), array('id' => 'username')), 'suername'); - $form_container->output_row($lang->spam_email, "", $form->generate_text_box('email', $mybb->input['email'], array('id' => 'email')), 'email'); - $form_container->output_row($lang->spam_ip, "", $form->generate_text_box('ipaddress', $mybb->input['ipaddress'], array('id' => 'ipaddress')), 'ipaddress'); - $form_container->output_row($lang->sort_by, "", $form->generate_select_box('sortby', $sort_by, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('order', $order_array, $order, array('id' => 'order'))." {$lang->order}", 'order'); - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $perpage, array('id' => 'perpage', 'min' => 1)), 'perpage'); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->filter_spam_logs); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/statistics.php b/html/forums/admin/modules/tools/statistics.php deleted file mode 100644 index 75d5af9..0000000 --- a/html/forums/admin/modules/tools/statistics.php +++ /dev/null @@ -1,282 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -if($mybb->input['action'] == "do_graph") -{ - $range = array( - 'start' => $mybb->get_input('start', MyBB::INPUT_INT), - 'end' => $mybb->get_input('end', MyBB::INPUT_INT) - ); - create_graph($mybb->input['type'], $range); - die; -} - -$page->add_breadcrumb_item($lang->statistics, "index.php?module=tools-statistics"); - -$sub_tabs['overall_statistics'] = array( - 'title' => $lang->overall_statistics, - 'link' => "index.php?module=tools-statistics", - 'description' => $lang->overall_statistics_desc -); - -$plugins->run_hooks("admin_tools_statistics_begin"); - -if(!$mybb->input['action']) -{ - $query = $db->simple_select("stats", "COUNT(*) as total"); - if($db->fetch_field($query, "total") == 0) - { - flash_message($lang->error_no_statistics_available_yet, 'error'); - admin_redirect("index.php?module=tools"); - } - - $per_page = 20; - - $plugins->run_hooks("admin_tools_statistics_overall_begin"); - - // Do we have date range criteria? - if($mybb->input['from_year']) - { - $start_dateline = mktime(0, 0, 0, $mybb->get_input('from_month', MyBB::INPUT_INT), $mybb->get_input('from_day', MyBB::INPUT_INT), $mybb->get_input('from_year', MyBB::INPUT_INT)); - $end_dateline = mktime(23, 59, 59, $mybb->get_input('to_month', MyBB::INPUT_INT), $mybb->get_input('to_day', MyBB::INPUT_INT), $mybb->get_input('to_year', MyBB::INPUT_INT)); - $range = "&start={$start_dateline}&end={$end_dateline}"; - } - - // Otherwise default to the last 30 days - if(!$mybb->input['from_year'] || $start_dateline > TIME_NOW || $end_dateline > mktime(23, 59, 59)) - { - $start_dateline = TIME_NOW-(60*60*24*30); - $end_dateline = TIME_NOW; - - list($mybb->input['from_day'], $mybb->input['from_month'], $mybb->input['from_year']) = explode('-', date('j-n-Y', $start_dateline)); - list($mybb->input['to_day'], $mybb->input['to_month'], $mybb->input['to_year']) = explode('-', date('j-n-Y', $end_dateline)); - - $range = "&start={$start_dateline}&end={$end_dateline}"; - } - - $last_dateline = 0; - - if($mybb->input['page'] && $mybb->input['page'] > 1) - { - $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($mybb->input['page']*$per_page)-$per_page; - } - else - { - $mybb->input['page'] = 1; - $start = 0; - } - - $query = $db->simple_select("stats", "*", "dateline >= '".(int)$start_dateline."' AND dateline <= '".(int)$end_dateline."'", array('order_by' => 'dateline', 'order_dir' => 'asc')); - - $stats = array(); - while($stat = $db->fetch_array($query)) - { - if($last_dateline) - { - $stat['change_users'] = ($stat['numusers'] - $stats[$last_dateline]['numusers']); - $stat['change_threads'] = ($stat['numthreads'] - $stats[$last_dateline]['numthreads']); - $stat['change_posts'] = ($stat['numposts'] - $stats[$last_dateline]['numposts']); - } - - $stats[$stat['dateline']] = $stat; - - $last_dateline = $stat['dateline']; - } - - if(empty($stats)) - { - flash_message($lang->error_no_results_found_for_criteria, 'error'); - admin_redirect("index.php?module=tools"); - } - - krsort($stats, SORT_NUMERIC); - - $page->add_breadcrumb_item($lang->overall_statistics, "index.php?module=tools-statistics"); - - $page->output_header($lang->statistics." - ".$lang->overall_statistics); - - $page->output_nav_tabs($sub_tabs, 'overall_statistics'); - - // Date range fields - $form = new Form("index.php?module=tools-statistics", "post", "overall"); - echo "
{$lang->date_range}\n"; - echo "{$lang->from} ".$form->generate_date_select('from', $mybb->input['from_day'], $mybb->input['from_month'], $mybb->input['from_year']); - echo " {$lang->to} ".$form->generate_date_select('to', $mybb->input['to_day'], $mybb->input['to_month'], $mybb->input['to_year']); - echo " ".$form->generate_submit_button($lang->view); - echo "
\n"; - $form->end(); - - echo "
{$lang->users}\n"; - echo "\n"; - echo "
\n"; - - echo "
{$lang->threads}\n"; - echo "\n"; - echo "
\n"; - - echo "
{$lang->posts}\n"; - echo "\n"; - echo "
\n"; - - $total_rows = count($stats); - - $table = new Table; - $table->construct_header($lang->date); - $table->construct_header($lang->users); - $table->construct_header($lang->threads); - $table->construct_header($lang->posts); - $query = $db->simple_select("stats", "*", "dateline >= '".(int)$start_dateline."' AND dateline <= '".(int)$end_dateline."'", array('order_by' => 'dateline', 'order_dir' => 'desc', 'limit_start' => $start, 'limit' => $per_page)); - while($stat = $db->fetch_array($query)) - { - $table->construct_cell("".date($mybb->settings['dateformat'], $stat['dateline']).""); - $table->construct_cell(my_number_format($stat['numusers'])." ".generate_growth_string($stats[$stat['dateline']]['change_users']).""); - $table->construct_cell(my_number_format($stat['numthreads'])." ".generate_growth_string($stats[$stat['dateline']]['change_threads']).""); - $table->construct_cell(my_number_format($stat['numposts'])." ".generate_growth_string($stats[$stat['dateline']]['change_posts']).""); - $table->construct_row(); - } - $table->output($lang->overall_statistics); - - $url_range = "&from_month=".$mybb->get_input('from_month', MyBB::INPUT_INT)."&from_day=".$mybb->get_input('from_day', MyBB::INPUT_INT)."&from_year=".$mybb->get_input('from_year', MyBB::INPUT_INT); - $url_range .= "&to_month=".$mybb->get_input('to_month', MyBB::INPUT_INT)."&to_day=".$mybb->get_input('to_day', MyBB::INPUT_INT)."&to_year=".$mybb->get_input('to_year', MyBB::INPUT_INT); - - echo draw_admin_pagination($mybb->input['page'], $per_page, $total_rows, "index.php?module=tools-statistics{$url_range}&page={page}"); - - $page->output_footer(); -} - -/** - * @param int $number - * - * @return string - */ -function generate_growth_string($number) -{ - global $lang, $cp_style; - - if($number === null) - { - return ""; - } - - $number = (int)$number; - $friendly_number = my_number_format(abs($number)); - - if($number > 0) - { - $growth_string = "(\"{$lang-increase}\" title=\"{$lang->increase}\" style=\"vertical-align: middle; margin-top: -2px;\" /> {$friendly_number})"; - } - elseif($number == 0) - { - $growth_string = "(\"{$lang-no_change}\" title=\"{$lang->no_change}\" style=\"vertical-align: middle; margin-top: -2px;\" /> {$friendly_number})"; - } - else - { - $growth_string = "(\"{$lang-decrease}\" title=\"{$lang->decrease}\" style=\"vertical-align: middle; margin-top: -2px;\" /> {$friendly_number})"; - } - - return $growth_string; -} - -/** - * @param string $type users, threads, posts - * @param array $range - */ -function create_graph($type, $range=null) -{ - global $db; - - // Do we have date range criteria? - if($range['end'] || $range['start']) - { - $start = (int)$range['start']; - $end = (int)$range['end']; - } - // Otherwise default to the last 30 days - else - { - $start = TIME_NOW-(60*60*24*30); - $end = TIME_NOW; - } - - $allowed_types = array('users', 'threads', 'posts'); - if(!in_array($type, $allowed_types)) - { - die; - } - - require_once MYBB_ROOT.'inc/class_graph.php'; - - $points = $stats = $datelines = array(); - if($start == 0) - { - $query = $db->simple_select("stats", "dateline,num{$type}", "dateline <= '".(int)$end."'", array('order_by' => 'dateline', 'order_dir' => 'desc', 'limit' => 2)); - while($stat = $db->fetch_array($query)) - { - $stats[] = $stat['num'.$type]; - $datelines[] = $stat['dateline']; - $x_labels[] = date("m/j", $stat['dateline']); - } - $points[$datelines[0]] = 0; - $points[$datelines[1]] = $stats[0]-$stats[1]; - ksort($points, SORT_NUMERIC); - } - elseif($end == 0) - { - $query = $db->simple_select("stats", "dateline,num{$type}", "dateline >= '".(int)$start."'", array('order_by' => 'dateline', 'order_dir' => 'asc', 'limit' => 2)); - while($stat = $db->fetch_array($query)) - { - $stats[] = $stat['num'.$type]; - $datelines[] = $stat['dateline']; - $x_labels[] = date("m/j", $stat['dateline']); - } - $points[$datelines[0]] = 0; - $points[$datelines[1]] = $stats[1]-$stats[0]; - ksort($points, SORT_NUMERIC); - } - else - { - $query = $db->simple_select("stats", "dateline,num{$type}", "dateline >= '".(int)$start."' AND dateline <= '".(int)$end."'", array('order_by' => 'dateline', 'order_dir' => 'asc')); - while($stat = $db->fetch_array($query)) - { - $points[$stat['dateline']] = $stat['num'.$type]; - $datelines[] = $stat['dateline']; - $x_labels[] = date("m/j", $stat['dateline']); - } - } - - sort($datelines, SORT_NUMERIC); - - // Find our year(s) label - $start_year = date('Y', $datelines[0]); - $last_year = date('Y', $datelines[count($datelines)-1]); - if(($last_year - $start_year) == 0) - { - $bottom_label = $start_year; - } - else - { - $bottom_label = $start_year." - ".$last_year; - } - - // Create the graph outline - $graph = new Graph(); - $graph->add_points(array_values($points)); - $graph->add_x_labels($x_labels); - $graph->set_bottom_label($bottom_label); - $graph->render(); - $graph->output(); -} diff --git a/html/forums/admin/modules/tools/system_health.php b/html/forums/admin/modules/tools/system_health.php deleted file mode 100644 index 120e336..0000000 --- a/html/forums/admin/modules/tools/system_health.php +++ /dev/null @@ -1,981 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->system_health, "index.php?module=tools-system_health"); - -$sub_tabs['system_health'] = array( - 'title' => $lang->system_health, - 'link' => "index.php?module=tools-system_health", - 'description' => $lang->system_health_desc -); - -$sub_tabs['utf8_conversion'] = array( - 'title' => $lang->utf8_conversion, - 'link' => "index.php?module=tools-system_health&action=utf8_conversion", - 'description' => $lang->utf8_conversion_desc2 -); - -$sub_tabs['template_check'] = array( - 'title' => $lang->check_templates, - 'link' => "index.php?module=tools-system_health&action=check_templates", - 'description' => $lang->check_templates_desc -); - -$plugins->run_hooks("admin_tools_system_health_begin"); - -if($mybb->input['action'] == "do_check_templates" && $mybb->request_method == "post") -{ - $query = $db->simple_select("templates", "*", "", array("order_by" => "sid, title", "order_dir" => "ASC")); - - if(!$db->num_rows($query)) - { - flash_message($lang->error_invalid_input, 'error'); - admin_redirect("index.php?module=tools-system_health"); - } - - $plugins->run_hooks("admin_tools_system_health_template_do_check_start"); - - $t_cache = array(); - while($template = $db->fetch_array($query)) - { - if(check_template($template['template']) == true) - { - $t_cache[$template['sid']][] = $template; - } - } - - if(empty($t_cache)) - { - flash_message($lang->success_templates_checked, 'success'); - admin_redirect("index.php?module=tools-system_health"); - } - - $plugins->run_hooks("admin_tools_system_health_template_do_check"); - - $page->add_breadcrumb_item($lang->check_templates); - $page->output_header($lang->check_templates); - - $page->output_nav_tabs($sub_tabs, 'template_check'); - $page->output_inline_error(array($lang->check_templates_info_desc)); - - $templatesets = array( - -2 => array( - "title" => "MyBB Master Templates" - ) - ); - $query = $db->simple_select("templatesets", "*"); - while($set = $db->fetch_array($query)) - { - $templatesets[$set['sid']] = $set; - } - - $count = 0; - foreach($t_cache as $sid => $templates) - { - if(!$done_set[$sid]) - { - $table = new Table(); - $table->construct_header($templatesets[$sid]['title'], array("colspan" => 2)); - - $done_set[$sid] = 1; - ++$count; - } - - if($sid == -2) - { - // Some cheeky clown has altered the master templates! - $table->construct_cell($lang->error_master_templates_altered, array("colspan" => 2)); - $table->construct_row(); - } - - foreach($templates as $template) - { - if($sid == -2) - { - $table->construct_cell($template['title'], array('colspan' => 2)); - } - else - { - $popup = new PopupMenu("template_{$template['tid']}", $lang->options); - $popup->add_item($lang->full_edit, "index.php?module=style-templates&action=edit_template&title=".urlencode($template['title'])."&sid={$sid}"); - - $table->construct_cell("{$template['title']}", array('width' => '80%')); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - } - - $table->construct_row(); - } - - if($done_set[$sid] && !$done_output[$sid]) - { - $done_output[$sid] = 1; - if($count == 1) - { - $table->output($lang->check_templates); - } - else - { - $table->output(); - } - } - } - - $page->output_footer(); -} - -if($mybb->input['action'] == "check_templates") -{ - $page->add_breadcrumb_item($lang->check_templates); - $page->output_header($lang->check_templates); - - $plugins->run_hooks("admin_tools_system_health_template_check"); - - $page->output_nav_tabs($sub_tabs, 'template_check'); - - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=tools-system_health", "post", "check_set"); - echo $form->generate_hidden_field("action", "do_check_templates"); - - $form_container = new FormContainer($lang->check_templates); - $form_container->output_row($lang->check_templates_title, "", $lang->check_templates_info); - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->proceed); - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "utf8_conversion") -{ - if($db->type == "sqlite" || $db->type == "pgsql") - { - flash_message($lang->error_not_supported, 'error'); - admin_redirect("index.php?module=tools-system_health"); - } - - $plugins->run_hooks("admin_tools_system_health_utf8_conversion"); - - if($mybb->request_method == "post" || ($mybb->input['do'] == "all" && !empty($mybb->input['table']))) - { - if(!empty($mybb->input['mb4']) && version_compare($db->get_version(), '5.5.3', '<')) - { - flash_message($lang->error_utf8mb4_version, 'error'); - admin_redirect("index.php?module=tools-system_health&action=utf8_conversion"); - } - @set_time_limit(0); - - $old_table_prefix = $db->table_prefix; - $db->set_table_prefix(''); - - if(!$db->table_exists($db->escape_string($mybb->input['table']))) - { - $db->set_table_prefix($old_table_prefix); - flash_message($lang->error_invalid_table, 'error'); - admin_redirect("index.php?module=tools-system_health&action=utf8_conversion"); - } - - $db->set_table_prefix($old_table_prefix); - - $page->add_breadcrumb_item($lang->utf8_conversion, "index.php?module=tools-system_health&action=utf8_conversion"); - - $page->output_header($lang->system_health." - ".$lang->utf8_conversion); - - $sub_tabs['system_health'] = array( - 'title' => $lang->system_health, - 'link' => "index.php?module=tools-system_health", - 'description' => $lang->system_health_desc - ); - - $sub_tabs['utf8_conversion'] = array( - 'title' => $lang->utf8_conversion, - 'link' => "index.php?module=tools-system_health&action=utf8_conversion", - 'description' => $lang->utf8_conversion_desc2 - ); - - $page->output_nav_tabs($sub_tabs, 'utf8_conversion'); - - $old_table_prefix = $db->table_prefix; - $db->set_table_prefix(''); - - $table = new Table; - - $table1 = $db->show_create_table($db->escape_string($mybb->input['table'])); - preg_match("#CHARSET=([a-zA-Z0-9_]+)\s?#i", $table1, $matches); - $charset = $matches[1]; - - if(!empty($mybb->input['mb4'])) - { - $table->construct_cell("".$lang->sprintf($lang->converting_to_utf8mb4, $mybb->input['table'], $charset).""); - } - else - { - $table->construct_cell("".$lang->sprintf($lang->converting_to_utf8, $mybb->input['table'], $charset).""); - } - $table->construct_row(); - - $table->construct_cell($lang->please_wait); - $table->construct_row(); - - $table->output($converting_table." {$mybb->input['table']}"); - - $db->set_table_prefix($old_table_prefix); - - $page->output_footer(false); - - $old_table_prefix = $db->table_prefix; - $db->set_table_prefix(''); - - flush(); - - $types = array( - 'text' => 'blob', - 'mediumtext' => 'mediumblob', - 'longtext' => 'longblob', - 'char' => 'varbinary', - 'varchar' => 'varbinary', - 'tinytext' => 'tinyblob' - ); - - $blob_types = array( 'blob', 'tinyblob', 'mediumblog', 'longblob', 'text', 'tinytext', 'mediumtext', 'longtext' ); - - // Get next table in list - $convert_to_binary = ''; - $convert_to_utf8 = ''; - $comma = ''; - - if(!empty($mybb->input['mb4'])) - { - $character_set = 'utf8mb4'; - $collation = 'utf8mb4_general_ci'; - } - else - { - $character_set = 'utf8'; - $collation = 'utf8_general_ci'; - } - - // Set table default charset - $db->write_query("ALTER TABLE {$mybb->input['table']} DEFAULT CHARACTER SET {$character_set} COLLATE {$collation}"); - - // Fetch any fulltext keys - if($db->supports_fulltext($mybb->input['table'])) - { - $table_structure = $db->show_create_table($mybb->input['table']); - switch($db->type) - { - case "mysql": - case "mysqli": - preg_match_all("#FULLTEXT KEY `?([a-zA-Z0-9_]+)`? \(([a-zA-Z0-9_`,']+)\)#i", $table_structure, $matches); - if(is_array($matches)) - { - foreach($matches[0] as $key => $matched) - { - $db->write_query("ALTER TABLE {$mybb->input['table']} DROP INDEX {$matches[1][$key]}"); - $fulltext_to_create[$matches[1][$key]] = $matches[2][$key]; - } - } - } - } - - // Find out which columns need converting and build SQL statements - $query = $db->query("SHOW FULL COLUMNS FROM {$mybb->input['table']}"); - while($column = $db->fetch_array($query)) - { - list($type) = explode('(', $column['Type']); - if(array_key_exists($type, $types)) - { - // Build the actual strings for converting the columns - $names = "CHANGE `{$column['Field']}` `{$column['Field']}` "; - - if(($db->type == 'mysql' || $db->type == 'mysqli') && in_array($type, $blob_types)) - { - if($column['Null'] == 'YES') - { - $attributes = 'NULL'; - } - else - { - $attributes = 'NOT NULL'; - } - } - else - { - $attributes = " DEFAULT "; - if($column['Default'] == 'NULL') - { - $attributes .= "NULL "; - } - else - { - $attributes .= "'".$db->escape_string($column['Default'])."' "; - - if($column['Null'] == 'YES') - { - $attributes .= 'NULL'; - } - else - { - $attributes .= 'NOT NULL'; - } - } - } - - $convert_to_binary .= $comma.$names.preg_replace('/'.$type.'/i', $types[$type], $column['Type']).' '.$attributes; - $convert_to_utf8 .= "{$comma}{$names}{$column['Type']} CHARACTER SET {$character_set} COLLATE {$collation} {$attributes}"; - - $comma = ','; - } - } - - if(!empty($convert_to_binary)) - { - // This converts the columns to UTF-8 while also doing the same for data - $db->write_query("ALTER TABLE {$mybb->input['table']} {$convert_to_binary}"); - $db->write_query("ALTER TABLE {$mybb->input['table']} {$convert_to_utf8}"); - } - - // Any fulltext indexes to recreate? - if(is_array($fulltext_to_create)) - { - foreach($fulltext_to_create as $name => $fields) - { - $db->create_fulltext_index($mybb->input['table'], $fields, $name); - } - } - - $db->set_table_prefix($old_table_prefix); - - $plugins->run_hooks("admin_tools_system_health_utf8_conversion_commit"); - - // Log admin action - log_admin_action($mybb->input['table']); - - flash_message($lang->sprintf($lang->success_table_converted, $mybb->input['table']), 'success'); - - if($mybb->input['do'] == "all") - { - $old_table_prefix = $db->table_prefix; - $db->set_table_prefix(''); - - $tables = $db->list_tables($mybb->config['database']['database']); - foreach($tables as $key => $tablename) - { - if(substr($tablename, 0, strlen(TABLE_PREFIX)) == TABLE_PREFIX) - { - $table = $db->show_create_table($tablename); - preg_match("#CHARSET=([a-zA-Z0-9_]+)\s?#i", $table, $matches); - if(empty($mybb->input['mb4']) && (fetch_iconv_encoding($matches[1]) == 'utf-8' || $matches[1] == 'utf8mb4') && $mybb->input['table'] != $tablename) - { - continue; - } - elseif(!empty($mybb->input['mb4']) && fetch_iconv_encoding($matches[1]) != 'utf-8' && $mybb->input['table'] != $tablename) - { - continue; - } - - $mybb_tables[$key] = $tablename; - } - } - - asort($mybb_tables); - reset($mybb_tables); - - $is_next = false; - $nexttable = ""; - - foreach($mybb_tables as $key => $tablename) - { - if($is_next == true) - { - $nexttable = $tablename; - break; - } - else if($mybb->input['table'] == $tablename) - { - $is_next = true; - } - } - - $db->set_table_prefix($old_table_prefix); - - if($nexttable) - { - $nexttable = $db->escape_string($nexttable); - $mb4 = ''; - if(!empty($mybb->input['mb4'])) - { - $mb4 = "&mb4=1"; - } - admin_redirect("index.php?module=tools-system_health&action=utf8_conversion&do=all&table={$nexttable}{$mb4}"); - exit; - } - } - - admin_redirect("index.php?module=tools-system_health&action=utf8_conversion"); - - exit; - } - - if($mybb->input['table'] || $mybb->input['do'] == "all") - { - if(!empty($mybb->input['mb4']) && version_compare($db->get_version(), '5.5.3', '<')) - { - flash_message($lang->error_utf8mb4_version, 'error'); - admin_redirect("index.php?module=tools-system_health&action=utf8_conversion"); - } - - $old_table_prefix = $db->table_prefix; - $db->set_table_prefix(''); - - if($mybb->input['do'] != "all" && !$db->table_exists($db->escape_string($mybb->input['table']))) - { - $db->set_table_prefix($old_table_prefix); - flash_message($lang->error_invalid_table, 'error'); - admin_redirect("index.php?module=tools-system_health&action=utf8_conversion"); - } - - if($mybb->input['do'] == "all") - { - $tables = $db->list_tables($mybb->config['database']['database']); - foreach($tables as $key => $tablename) - { - if(substr($tablename, 0, strlen(TABLE_PREFIX)) == TABLE_PREFIX) - { - $table = $db->show_create_table($tablename); - preg_match("#CHARSET=([a-zA-Z0-9_]+)\s?#i", $table, $matches); - if(empty($mybb->input['mb4']) && (fetch_iconv_encoding($matches[1]) == 'utf-8' || $matches[1] == 'utf8mb4')) - { - continue; - } - elseif(!empty($mybb->input['mb4']) && fetch_iconv_encoding($matches[1]) != 'utf-8') - { - continue; - } - $mybb_tables[$key] = $tablename; - } - } - - if(is_array($mybb_tables)) - { - asort($mybb_tables); - reset($mybb_tables); - $nexttable = current($mybb_tables); - $table = $db->show_create_table($db->escape_string($nexttable)); - $mybb->input['table'] = $nexttable; - } - else - { - $db->set_table_prefix($old_table_prefix); - flash_message($lang->success_all_tables_already_converted, 'success'); - admin_redirect("index.php?module=tools-system_health"); - } - } - else - { - $table = $db->show_create_table($db->escape_string($mybb->input['table'])); - } - - $page->add_breadcrumb_item($lang->utf8_conversion, "index.php?module=tools-system_health&action=utf8_conversion"); - - $db->set_table_prefix($old_table_prefix); - - $page->output_header($lang->system_health." - ".$lang->utf8_conversion); - - $sub_tabs['system_health'] = array( - 'title' => $lang->system_health, - 'link' => "index.php?module=tools-system_health", - 'description' => $lang->system_health_desc - ); - - $sub_tabs['utf8_conversion'] = array( - 'title' => $lang->utf8_conversion, - 'link' => "index.php?module=tools-system_health&action=utf8_conversion", - 'description' => $lang->utf8_conversion_desc2 - ); - - $page->output_nav_tabs($sub_tabs, 'utf8_conversion'); - - $old_table_prefix = $db->table_prefix; - $db->set_table_prefix(''); - - preg_match("#CHARSET=([a-zA-Z0-9_]+)\s?#i", $table, $matches); - $charset = $matches[1]; - - $mb4 = ''; - if(!empty($mybb->input['mb4'])) - { - $mb4 = "&mb4=1"; - } - - $form = new Form("index.php?module=tools-system_health&action=utf8_conversion{$mb4}", "post", "utf8_conversion"); - echo $form->generate_hidden_field("table", $mybb->input['table']); - - if($mybb->input['do'] == "all") - { - echo $form->generate_hidden_field("do", "all"); - } - - $table = new Table; - - if(!empty($mybb->input['mb4'])) - { - $table->construct_cell("".$lang->sprintf($lang->convert_all_to_utf8mb4, $charset).""); - $lang->notice_process_long_time .= "

{$lang->notice_mb4_warning}"; - } - else - { - if($mybb->input['do'] == "all") - { - $table->construct_cell("".$lang->sprintf($lang->convert_all_to_utf, $charset).""); - } - else - { - $table->construct_cell("".$lang->sprintf($lang->convert_to_utf8, $mybb->input['table'], $charset).""); - } - } - - $table->construct_row(); - - $table->construct_cell($lang->notice_process_long_time); - $table->construct_row(); - - if($mybb->input['do'] == "all") - { - $table->output($lang->convert_tables); - $buttons[] = $form->generate_submit_button($lang->convert_database_tables); - } - else - { - $table->output($lang->convert_table.": {$mybb->input['table']}"); - $buttons[] = $form->generate_submit_button($lang->convert_database_table); - } - - $form->output_submit_wrapper($buttons); - - $form->end(); - - $db->set_table_prefix($old_table_prefix); - - $page->output_footer(); - - exit; - } - - if(!$mybb->config['database']['encoding']) - { - flash_message($lang->error_db_encoding_not_set, 'error'); - admin_redirect("index.php?module=tools-system_health"); - } - - $tables = $db->list_tables($mybb->config['database']['database']); - - $old_table_prefix = $db->table_prefix; - $db->set_table_prefix(''); - - $encodings = array(); - - foreach($tables as $key => $tablename) - { - if(substr($tablename, 0, strlen($old_table_prefix)) == $old_table_prefix) - { - $table = $db->show_create_table($tablename); - preg_match("#CHARSET=([a-zA-Z0-9_]+)\s?#i", $table, $matches); - $encodings[$key] = fetch_iconv_encoding($matches[1]); - $mybb_tables[$key] = $tablename; - } - } - - $db->set_table_prefix($old_table_prefix); - - $page->add_breadcrumb_item($lang->utf8_conversion, "index.php?module=tools-system_health&action=utf8_conversion"); - - $page->output_header($lang->system_health." - ".$lang->utf8_conversion); - - $page->output_nav_tabs($sub_tabs, 'utf8_conversion'); - - asort($mybb_tables); - - $unique = array_unique($encodings); - - $convert_utf8 = $convert_utf8mb4 = false; - foreach($unique as $encoding) - { - if($encoding == 'utf-8') - { - $convert_utf8mb4 = true; - } - elseif($encoding != 'utf8mb4') - { - $convert_utf8 = true; - } - } - - if(count($unique) > 1) - { - $page->output_error("

{$lang->warning_multiple_encodings}

"); - } - - if(in_array('utf8mb4', $unique) && $mybb->config['database']['encoding'] != 'utf8mb4') - { - $page->output_error("

{$lang->warning_utf8mb4_config}

"); - } - - $table = new Table; - $table->construct_header($lang->table); - $table->construct_header($lang->status_utf8, array("class" => "align_center")); - $table->construct_header($lang->status_utf8mb4, array("class" => "align_center")); - - $all_utf8 = $all_utf8mb4 = '-'; - if($convert_utf8) - { - $all_utf8 = "{$lang->convert_all}"; - } - if($convert_utf8mb4) - { - $all_utf8mb4 = "{$lang->convert_all}"; - } - $table->construct_cell("{$lang->all_tables}"); - $table->construct_cell($all_utf8, array("class" => "align_center", 'width' => '15%')); - $table->construct_cell($all_utf8mb4, array("class" => "align_center", 'width' => '25%')); - $table->construct_row(); - - $db_version = $db->get_version(); - - foreach($mybb_tables as $key => $tablename) - { - if($encodings[$key] != 'utf-8' && $encodings[$key] != 'utf8mb4') - { - $status = "style}/images/icons/cross.png) no-repeat; padding-left: 20px;\">{$lang->convert_now}"; - } - else - { - $status = "style}/images/icons/tick.png\" alt=\"{$lang->ok}\" />"; - } - if(version_compare($db_version, '5.5.3', '<')) - { - $utf8mb4 = $lang->not_available; - } - elseif($encodings[$key] == 'utf8mb4') - { - $utf8mb4 = "style}/images/icons/tick.png\" alt=\"{$lang->ok}\" />"; - } - elseif($encodings[$key] == 'utf-8') - { - $utf8mb4 = "style}/images/icons/cross.png) no-repeat; padding-left: 20px;\">{$lang->convert_now}"; - } - else - { - $utf8mb4 = "-"; - } - $table->construct_cell("{$tablename}"); - $table->construct_cell($status, array("class" => "align_center", 'width' => '15%')); - $table->construct_cell($utf8mb4, array("class" => "align_center", 'width' => '25%')); - $table->construct_row(); - } - - $table->output("
{$lang->utf8_conversion}
"); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->system_health); - - $plugins->run_hooks("admin_tools_system_health_start"); - - $page->output_nav_tabs($sub_tabs, 'system_health'); - - $table = new Table; - $table->construct_header($lang->totals, array("colspan" => 2)); - $table->construct_header($lang->attachments, array("colspan" => 2)); - - $query = $db->simple_select("attachments", "COUNT(*) AS numattachs, SUM(filesize) as spaceused, SUM(downloads*filesize) as bandwidthused", "visible='1' AND pid > '0'"); - $attachs = $db->fetch_array($query); - - $table->construct_cell("{$lang->total_database_size}", array('width' => '25%')); - $table->construct_cell(get_friendly_size($db->fetch_size()), array('width' => '25%')); - $table->construct_cell("{$lang->attachment_space_used}", array('width' => '200')); - $table->construct_cell(get_friendly_size((int)$attachs['spaceused']), array('width' => '200')); - $table->construct_row(); - - if($attachs['spaceused'] > 0) - { - $attach_average_size = round($attachs['spaceused']/$attachs['numattachs']); - $bandwidth_average_usage = round($attachs['bandwidthused']); - } - else - { - $attach_average_size = 0; - $bandwidth_average_usage = 0; - } - - $table->construct_cell("{$lang->total_cache_size}", array('width' => '25%')); - $table->construct_cell(get_friendly_size($cache->size_of()), array('width' => '25%')); - $table->construct_cell("{$lang->estimated_attachment_bandwidth_usage}", array('width' => '25%')); - $table->construct_cell(get_friendly_size($bandwidth_average_usage), array('width' => '25%')); - $table->construct_row(); - - - $table->construct_cell("{$lang->max_upload_post_size}", array('width' => '200')); - $table->construct_cell(@ini_get('upload_max_filesize').' / '.@ini_get('post_max_size'), array('width' => '200')); - $table->construct_cell("{$lang->average_attachment_size}", array('width' => '25%')); - $table->construct_cell(get_friendly_size($attach_average_size), array('width' => '25%')); - $table->construct_row(); - - $table->output($lang->stats); - - $table->construct_header($lang->task); - $table->construct_header($lang->run_time, array("width" => 200, "class" => "align_center")); - - $task_cache = $cache->read("tasks"); - $nextrun = $task_cache['nextrun']; - - $query = $db->simple_select("tasks", "*", "nextrun >= '{$nextrun}' AND enabled='1'", array("order_by" => "nextrun", "order_dir" => "asc", 'limit' => 3)); - while($task = $db->fetch_array($query)) - { - $task['title'] = htmlspecialchars_uni($task['title']); - $next_run = date($mybb->settings['dateformat'], $task['nextrun']).", ".date($mybb->settings['timeformat'], $task['nextrun']); - $table->construct_cell("{$task['title']}"); - $table->construct_cell($next_run, array("class" => "align_center")); - - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_tasks, array('colspan' => 2)); - $table->construct_row(); - } - - $table->output($lang->next_3_tasks); - - if(isset($mybb->admin['permissions']['tools']['backupdb']) && $mybb->admin['permissions']['tools']['backupdb'] == 1) - { - $backups = array(); - $dir = MYBB_ADMIN_DIR.'backups/'; - $handle = opendir($dir); - while(($file = readdir($handle)) !== false) - { - if(filetype(MYBB_ADMIN_DIR.'backups/'.$file) == 'file') - { - $ext = get_extension($file); - if($ext == 'gz' || $ext == 'sql') - { - $backups[@filemtime(MYBB_ADMIN_DIR.'backups/'.$file)] = array( - "file" => $file, - "time" => @filemtime(MYBB_ADMIN_DIR.'backups/'.$file), - "type" => $ext - ); - } - } - } - - $count = count($backups); - krsort($backups); - - $table = new Table; - $table->construct_header($lang->name); - $table->construct_header($lang->backup_time, array("width" => 200, "class" => "align_center")); - - $backupscnt = 0; - foreach($backups as $backup) - { - ++$backupscnt; - - if($backupscnt == 4) - { - break; - } - - $time = "-"; - if($backup['time']) - { - $time = my_date('relative', $backup['time']); - } - - $table->construct_cell("{$backup['file']}"); - $table->construct_cell($time, array("class" => "align_center")); - $table->construct_row(); - } - - if($count == 0) - { - $table->construct_cell($lang->no_backups, array('colspan' => 2)); - $table->construct_row(); - } - - $table->output($lang->existing_db_backups); - } - - if(is_writable(MYBB_ROOT.'inc/settings.php')) - { - $message_settings = "{$lang->writable}"; - } - else - { - $message_settings = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - if(is_writable(MYBB_ROOT.'inc/config.php')) - { - $message_config = "{$lang->writable}"; - } - else - { - $message_config = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - $uploadspath = $mybb->settings['uploadspath']; - if(my_substr($uploadspath, 0, 1) == '.') - { - $uploadspath = MYBB_ROOT . $mybb->settings['uploadspath']; - } - if(is_writable($uploadspath)) - { - $message_upload = "{$lang->writable}"; - } - else - { - $message_upload = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - $avataruploadpath = $mybb->settings['avataruploadpath']; - if(my_substr($avataruploadpath, 0, 1) == '.') - { - $avataruploadpath = MYBB_ROOT . $mybb->settings['avataruploadpath']; - } - if(is_writable($avataruploadpath)) - { - $message_avatar = "{$lang->writable}"; - } - else - { - $message_avatar = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - if(is_writable(MYBB_ROOT.'inc/languages/')) - { - $message_language = "{$lang->writable}"; - } - else - { - $message_language = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - if(is_writable(MYBB_ROOT.$config['admin_dir'].'/backups/')) - { - $message_backup = "{$lang->writable}"; - } - else - { - $message_backup = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - if(is_writable(MYBB_ROOT.'/cache/')) - { - $message_cache = "{$lang->writable}"; - } - else - { - $message_cache = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - if(is_writable(MYBB_ROOT.'/cache/themes/')) - { - $message_themes = "{$lang->writable}"; - } - else - { - $message_themes = "{$lang->not_writable}
{$lang->please_chmod_777}"; - ++$errors; - } - - if($errors) - { - $page->output_error("

{$errors} {$lang->error_chmod} {$lang->chmod_info} MyBB Docs.

"); - } - else - { - $page->output_success("

{$lang->success_chmod}

"); - } - - $table = new Table; - $table->construct_header($lang->file); - $table->construct_header($lang->location, array("colspan" => 2, 'width' => 250)); - - $table->construct_cell("{$lang->config_file}"); - $table->construct_cell("./inc/config.php"); - $table->construct_cell($message_config); - $table->construct_row(); - - $table->construct_cell("{$lang->settings_file}"); - $table->construct_cell("./inc/settings.php"); - $table->construct_cell($message_settings); - $table->construct_row(); - - $table->construct_cell("{$lang->file_upload_dir}"); - $table->construct_cell($mybb->settings['uploadspath']); - $table->construct_cell($message_upload); - $table->construct_row(); - - $table->construct_cell("{$lang->avatar_upload_dir}"); - $table->construct_cell($mybb->settings['avataruploadpath']); - $table->construct_cell($message_avatar); - $table->construct_row(); - - $table->construct_cell("{$lang->language_files}"); - $table->construct_cell("./inc/languages"); - $table->construct_cell($message_language); - $table->construct_row(); - - $table->construct_cell("{$lang->backup_dir}"); - $table->construct_cell('./'.$config['admin_dir'].'/backups'); - $table->construct_cell($message_backup); - $table->construct_row(); - - $table->construct_cell("{$lang->cache_dir}"); - $table->construct_cell('./cache'); - $table->construct_cell($message_cache); - $table->construct_row(); - - $table->construct_cell("{$lang->themes_dir}"); - $table->construct_cell('./cache/themes'); - $table->construct_cell($message_themes); - $table->construct_row(); - - $plugins->run_hooks("admin_tools_system_health_output_chmod_list"); - - $table->output($lang->chmod_files_and_dirs); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/tasks.php b/html/forums/admin/modules/tools/tasks.php deleted file mode 100644 index 930326a..0000000 --- a/html/forums/admin/modules/tools/tasks.php +++ /dev/null @@ -1,770 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -require_once MYBB_ROOT."/inc/functions_task.php"; - -$page->add_breadcrumb_item($lang->task_manager, "index.php?module=tools-tasks"); - -$plugins->run_hooks("admin_tools_tasks_begin"); - -/** - * Validates a string or array of values - * - * @param string|array $value Comma-separated list or array of values - * @param int $min Minimum value - * @param int $max Maximum value - * @param string $return_type Set "string" to return in a comma-separated list, or "array" to return in an array - * @return string|array String or array of valid values OR false if string/array is invalid - */ -function check_time_values($value, $min, $max, $return_type) -{ - // If the values aren't in an array form, make them into an array - if(!is_array($value)) - { - // Empty value == * - if($value === '') - { - return ($return_type == 'string') ? '*' : array('*'); - } - $implode = 1; - $value = explode(',', $value); - } - // If * is in the array, always return with * because it overrides all - if(in_array('*', $value)) - { - return ($return_type == 'string') ? '*' : array('*'); - } - // Validate each value in array - foreach($value as $time) - { - if($time < $min || $time > $max) - { - return false; - } - } - // Return based on return type - if($return_type == 'string') - { - $value = implode(',', $value); - } - return $value; -} - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_tools_tasks_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!trim($mybb->input['description'])) - { - $errors[] = $lang->error_missing_description; - } - - if(!file_exists(MYBB_ROOT."inc/tasks/".$mybb->input['file'].".php")) - { - $errors[] = $lang->error_invalid_task_file; - } - - $mybb->input['minute'] = check_time_values($mybb->input['minute'], 0, 59, 'string'); - if($mybb->input['minute'] === false) - { - $errors[] = $lang->error_invalid_minute; - } - - $mybb->input['hour'] = check_time_values($mybb->input['hour'], 0, 59, 'string'); - if($mybb->input['hour'] === false) - { - $errors[] = $lang->error_invalid_hour; - } - - if($mybb->input['day'] != "*" && $mybb->input['day'] != '') - { - $mybb->input['day'] = check_time_values($mybb->input['day'], 1, 31, 'string'); - if($mybb->input['day'] === false) - { - $errors[] = $lang->error_invalid_day; - } - $mybb->input['weekday'] = array('*'); - } - else - { - $mybb->input['weekday'] = check_time_values($mybb->input['weekday'], 0, 6, 'array'); - if($mybb->input['weekday'] === false) - { - $errors[] = $lang->error_invalid_weekday; - } - $mybb->input['day'] = '*'; - } - - $mybb->input['month'] = check_time_values($mybb->input['month'], 1, 12, 'array'); - if($mybb->input['month'] === false) - { - $errors[] = $lang->error_invalid_month; - } - - if(!$errors) - { - $new_task = array( - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "file" => $db->escape_string($mybb->input['file']), - "minute" => $db->escape_string($mybb->input['minute']), - "hour" => $db->escape_string($mybb->input['hour']), - "day" => $db->escape_string($mybb->input['day']), - "month" => $db->escape_string(implode(',', $mybb->input['month'])), - "weekday" => $db->escape_string(implode(',', $mybb->input['weekday'])), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "logging" => $mybb->get_input('logging', MyBB::INPUT_INT) - ); - - $new_task['nextrun'] = fetch_next_run($new_task); - $tid = $db->insert_query("tasks", $new_task); - - $plugins->run_hooks("admin_tools_tasks_add_commit"); - - $cache->update_tasks(); - - // Log admin action - log_admin_action($tid, htmlspecialchars_uni($mybb->input['title'])); - - flash_message($lang->success_task_created, 'success'); - admin_redirect("index.php?module=tools-tasks"); - } - } - $page->add_breadcrumb_item($lang->add_new_task); - $page->output_header($lang->scheduled_tasks." - ".$lang->add_new_task); - - - $sub_tabs['scheduled_tasks'] = array( - 'title' => $lang->scheduled_tasks, - 'link' => "index.php?module=tools-tasks" - ); - - $sub_tabs['add_task'] = array( - 'title' => $lang->add_new_task, - 'link' => "index.php?module=tools-tasks&action=add", - 'description' => $lang->add_new_task_desc - ); - - $sub_tabs['task_logs'] = array( - 'title' => $lang->view_task_logs, - 'link' => "index.php?module=tools-tasks&action=logs" - ); - - $page->output_nav_tabs($sub_tabs, 'add_task'); - $form = new Form("index.php?module=tools-tasks&action=add", "post", "add"); - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['minute'] = '*'; - $mybb->input['hour'] = '*'; - $mybb->input['day'] = '*'; - $mybb->input['weekday'] = '*'; - $mybb->input['month'] = '*'; - } - $form_container = new FormContainer($lang->add_new_task); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $task_list = array(); - $task_files = scandir(MYBB_ROOT."inc/tasks/"); - foreach($task_files as $task_file) - { - if(is_file(MYBB_ROOT."inc/tasks/{$task_file}") && get_extension($task_file) == "php") - { - $file_id = preg_replace("#\.".get_extension($task_file)."$#i", "$1", $task_file); - $task_list[$file_id] = $task_file; - } - } - $form_container->output_row($lang->task_file." *", $lang->task_file_desc, $form->generate_select_box("file", $task_list, $mybb->input['file'], array('id' => 'file')), 'file'); - $form_container->output_row($lang->time_minutes, $lang->time_minutes_desc, $form->generate_text_box('minute', $mybb->input['minute'], array('id' => 'minute')), 'minute'); - $form_container->output_row($lang->time_hours, $lang->time_hours_desc, $form->generate_text_box('hour', $mybb->input['hour'], array('id' => 'hour')), 'hour'); - $form_container->output_row($lang->time_days_of_month, $lang->time_days_of_month_desc, $form->generate_text_box('day', $mybb->input['day'], array('id' => 'day')), 'day'); - - $options = array( - "*" => $lang->every_weekday, - "0" => $lang->sunday, - "1" => $lang->monday, - "2" => $lang->tuesday, - "3" => $lang->wednesday, - "4" => $lang->thursday, - "5" => $lang->friday, - "6" => $lang->saturday - ); - $form_container->output_row($lang->time_weekdays, $lang->time_weekdays_desc, $form->generate_select_box('weekday[]', $options, $mybb->input['weekday'], array('id' => 'weekday', 'multiple' => true, 'size' => 8)), 'weekday'); - - $options = array( - "*" => $lang->every_month, - "1" => $lang->january, - "2" => $lang->february, - "3" => $lang->march, - "4" => $lang->april, - "5" => $lang->may, - "6" => $lang->june, - "7" => $lang->july, - "8" => $lang->august, - "9" => $lang->september, - "10" => $lang->october, - "11" => $lang->november, - "12" => $lang->december - ); - $form_container->output_row($lang->time_months, $lang->time_months_desc, $form->generate_select_box('month[]', $options, $mybb->input['month'], array('id' => 'month', 'multiple' => true, 'size' => 13)), 'month'); - - $form_container->output_row($lang->enable_logging." *", "", $form->generate_yes_no_radio("logging", $mybb->input['logging'], true)); - - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio("enabled", $mybb->input['enabled'], true)); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_task); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $task = $db->fetch_array($query); - - // Does the task not exist? - if(!$task['tid']) - { - flash_message($lang->error_invalid_task, 'error'); - admin_redirect("index.php?module=tools-tasks"); - } - - $plugins->run_hooks("admin_tools_tasks_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!trim($mybb->input['description'])) - { - $errors[] = $lang->error_missing_description; - } - - if(!file_exists(MYBB_ROOT."inc/tasks/".$mybb->input['file'].".php")) - { - $errors[] = $lang->error_invalid_task_file; - } - - $mybb->input['minute'] = check_time_values($mybb->input['minute'], 0, 59, 'string'); - if($mybb->input['minute'] === false) - { - $errors[] = $lang->error_invalid_minute; - } - - $mybb->input['hour'] = check_time_values($mybb->input['hour'], 0, 59, 'string'); - if($mybb->input['hour'] === false) - { - $errors[] = $lang->error_invalid_hour; - } - - if($mybb->input['day'] != "*" && $mybb->input['day'] != '') - { - $mybb->input['day'] = check_time_values($mybb->input['day'], 1, 31, 'string'); - if($mybb->input['day'] === false) - { - $errors[] = $lang->error_invalid_day; - } - $mybb->input['weekday'] = array('*'); - } - else - { - $mybb->input['weekday'] = check_time_values($mybb->input['weekday'], 0, 6, 'array'); - if($mybb->input['weekday'] === false) - { - $errors[] = $lang->error_invalid_weekday; - } - $mybb->input['day'] = '*'; - } - - $mybb->input['month'] = check_time_values($mybb->input['month'], 1, 12, 'array'); - if($mybb->input['month'] === false) - { - $errors[] = $lang->error_invalid_month; - } - - if(!$errors) - { - $enable_confirmation = false; - // Check if we need to ask the user to confirm turning on the task - if(($task['file'] == "backupdb" || $task['file'] == "checktables") && $task['enabled'] == 0 && $mybb->input['enabled'] == 1) - { - $mybb->input['enabled'] = 0; - $enable_confirmation = true; - } - - $updated_task = array( - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "file" => $db->escape_string($mybb->input['file']), - "minute" => $db->escape_string($mybb->input['minute']), - "hour" => $db->escape_string($mybb->input['hour']), - "day" => $db->escape_string($mybb->input['day']), - "month" => $db->escape_string(implode(',', $mybb->input['month'])), - "weekday" => $db->escape_string(implode(',', $mybb->input['weekday'])), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "logging" => $mybb->get_input('logging', MyBB::INPUT_INT) - ); - - $updated_task['nextrun'] = fetch_next_run($updated_task); - - $plugins->run_hooks("admin_tools_tasks_edit_commit"); - - $db->update_query("tasks", $updated_task, "tid='{$task['tid']}'"); - - $cache->update_tasks(); - - // Log admin action - log_admin_action($task['tid'], htmlspecialchars_uni($mybb->input['title'])); - - flash_message($lang->success_task_updated, 'success'); - - if($enable_confirmation == true) - { - admin_redirect("index.php?module=tools-tasks&action=enable&tid={$task['tid']}&my_post_key={$mybb->post_code}"); - } - else - { - admin_redirect("index.php?module=tools-tasks"); - } - } - } - - $page->add_breadcrumb_item($lang->edit_task); - $page->output_header($lang->scheduled_tasks." - ".$lang->edit_task); - - $sub_tabs['edit_task'] = array( - 'title' => $lang->edit_task, - 'description' => $lang->edit_task_desc, - 'link' => "index.php?module=tools-tasks&action=edit&tid={$task['tid']}" - ); - - $page->output_nav_tabs($sub_tabs, 'edit_task'); - - $form = new Form("index.php?module=tools-tasks&action=edit", "post"); - - if($errors) - { - $page->output_inline_error($errors); - $task_data = $mybb->input; - } - else - { - $task_data = $task; - $task_data['weekday'] = explode(',', $task['weekday']); - $task_data['month'] = explode(',', $task['month']); - } - - $form_container = new FormContainer($lang->edit_task); - echo $form->generate_hidden_field("tid", $task['tid']); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $task_data['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description." *", "", $form->generate_text_box('description', $task_data['description'], array('id' => 'description')), 'description'); - - $task_list = array(); - $task_files = scandir(MYBB_ROOT."inc/tasks/"); - foreach($task_files as $task_file) - { - if(is_file(MYBB_ROOT."inc/tasks/{$task_file}") && get_extension($task_file) == "php") - { - $file_id = preg_replace("#\.".get_extension($task_file)."$#i", "$1", $task_file); - $task_list[$file_id] = $task_file; - } - } - $form_container->output_row($lang->task." *", $lang->task_file_desc, $form->generate_select_box("file", $task_list, $task_data['file'], array('id' => 'file')), 'file'); - $form_container->output_row($lang->time_minutes, $lang->time_minutes_desc, $form->generate_text_box('minute', $task_data['minute'], array('id' => 'minute')), 'minute'); - $form_container->output_row($lang->time_hours, $lang->time_hours_desc, $form->generate_text_box('hour', $task_data['hour'], array('id' => 'hour')), 'hour'); - $form_container->output_row($lang->time_days_of_month, $lang->time_days_of_month_desc, $form->generate_text_box('day', $task_data['day'], array('id' => 'day')), 'day'); - - $options = array( - "*" => $lang->every_weekday, - "0" => $lang->sunday, - "1" => $lang->monday, - "2" => $lang->tuesday, - "3" => $lang->wednesday, - "4" => $lang->thursday, - "5" => $lang->friday, - "6" => $lang->saturday - ); - $form_container->output_row($lang->time_weekdays, $lang->time_weekdays_desc, $form->generate_select_box('weekday[]', $options, $task_data['weekday'], array('id' => 'weekday', 'multiple' => true)), 'weekday'); - - $options = array( - "*" => $lang->every_month, - "1" => $lang->january, - "2" => $lang->february, - "3" => $lang->march, - "4" => $lang->april, - "5" => $lang->may, - "6" => $lang->june, - "7" => $lang->july, - "8" => $lang->august, - "9" => $lang->september, - "10" => $lang->october, - "11" => $lang->november, - "12" => $lang->december - ); - $form_container->output_row($lang->time_months, $lang->time_months_desc, $form->generate_select_box('month[]', $options, $task_data['month'], array('id' => 'month', 'multiple' => true)), 'month'); - - $form_container->output_row($lang->enable_logging." *", "", $form->generate_yes_no_radio("logging", $task_data['logging'], true)); - - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio("enabled", $task_data['enabled'], true)); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_task); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $task = $db->fetch_array($query); - - // Does the task not exist? - if(!$task['tid']) - { - flash_message($lang->error_invalid_task, 'error'); - admin_redirect("index.php?module=tools-tasks"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=tools-tasks"); - } - - $plugins->run_hooks("admin_tools_tasks_delete"); - - if($mybb->request_method == "post") - { - // Delete the task & any associated task log entries - $db->delete_query("tasks", "tid='{$task['tid']}'"); - $db->delete_query("tasklog", "tid='{$task['tid']}'"); - - // Fetch next task run - - $plugins->run_hooks("admin_tools_tasks_delete_commit"); - - $cache->update_tasks(); - - // Log admin action - log_admin_action($task['tid'], htmlspecialchars_uni($task['title'])); - - flash_message($lang->success_task_deleted, 'success'); - admin_redirect("index.php?module=tools-tasks"); - } - else - { - $page->output_confirm_action("index.php?module=tools-tasks&action=delete&tid={$task['tid']}", $lang->confirm_task_deletion); - } -} - -if($mybb->input['action'] == "enable" || $mybb->input['action'] == "disable") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=tools-tasks"); - } - - $query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $task = $db->fetch_array($query); - - // Does the task not exist? - if(!$task['tid']) - { - flash_message($lang->error_invalid_task, 'error'); - admin_redirect("index.php?module=tools-tasks"); - } - - if($mybb->input['action'] == "enable") - { - $plugins->run_hooks("admin_tools_tasks_enable"); - } - else - { - $plugins->run_hooks("admin_tools_tasks_disable"); - } - - if($mybb->input['action'] == "enable") - { - if($task['file'] == "backupdb" || $task['file'] == "checktables") - { - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=tools-tasks"); - } - - if($mybb->request_method == "post") - { - $nextrun = fetch_next_run($task); - $db->update_query("tasks", array("nextrun" => $nextrun, "enabled" => 1), "tid='{$task['tid']}'"); - - $plugins->run_hooks("admin_tools_tasks_enable_commit"); - - $cache->update_tasks(); - - // Log admin action - log_admin_action($task['tid'], htmlspecialchars_uni($task['title']), $mybb->input['action']); - - flash_message($lang->success_task_enabled, 'success'); - admin_redirect("index.php?module=tools-tasks"); - } - else - { - $page->output_confirm_action("index.php?module=tools-tasks&action=enable&tid={$task['tid']}", $lang->confirm_task_enable); - } - } - else - { - $nextrun = fetch_next_run($task); - $db->update_query("tasks", array("nextrun" => $nextrun, "enabled" => 1), "tid='{$task['tid']}'"); - - $plugins->run_hooks("admin_tools_tasks_enable_commit"); - - $cache->update_tasks(); - - // Log admin action - log_admin_action($task['tid'], htmlspecialchars_uni($task['title']), $mybb->input['action']); - - flash_message($lang->success_task_enabled, 'success'); - admin_redirect("index.php?module=tools-tasks"); - } - } - else - { - $db->update_query("tasks", array("enabled" => 0), "tid='{$task['tid']}'"); - - $plugins->run_hooks("admin_tools_tasks_disable_commit"); - - $cache->update_tasks(); - - // Log admin action - log_admin_action($task['tid'], htmlspecialchars_uni($task['title']), htmlspecialchars_uni($mybb->input['action'])); - - flash_message($lang->success_task_disabled, 'success'); - admin_redirect("index.php?module=tools-tasks"); - } -} - -if($mybb->input['action'] == "run") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=tools-tasks"); - } - - ignore_user_abort(true); - @set_time_limit(0); - - $plugins->run_hooks("admin_tools_tasks_run"); - - $query = $db->simple_select("tasks", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."'"); - $task = $db->fetch_array($query); - - // Does the task not exist? - if(!$task['tid']) - { - flash_message($lang->error_invalid_task, 'error'); - admin_redirect("index.php?module=tools-tasks"); - } - - run_task($task['tid']); - - $plugins->run_hooks("admin_tools_tasks_run_commit"); - - // Log admin action - log_admin_action($task['tid'], htmlspecialchars_uni($task['title'])); - - flash_message($lang->success_task_run, 'success'); - admin_redirect("index.php?module=tools-tasks"); -} - -if($mybb->input['action'] == "logs") -{ - $plugins->run_hooks("admin_tools_tasks_logs"); - - $page->output_header($lang->task_logs); - - $sub_tabs['scheduled_tasks'] = array( - 'title' => $lang->scheduled_tasks, - 'link' => "index.php?module=tools-tasks" - ); - - $sub_tabs['add_task'] = array( - 'title' => $lang->add_new_task, - 'link' => "index.php?module=tools-tasks&action=add" - ); - - $sub_tabs['task_logs'] = array( - 'title' => $lang->view_task_logs, - 'link' => "index.php?module=tools-tasks&action=logs", - 'description' => $lang->view_task_logs_desc - ); - - $page->output_nav_tabs($sub_tabs, 'task_logs'); - - $table = new Table; - $table->construct_header($lang->task); - $table->construct_header($lang->date, array("class" => "align_center", "width" => 200)); - $table->construct_header($lang->data, array("width" => "60%")); - - $query = $db->simple_select("tasklog", "COUNT(*) AS log_count"); - $log_count = $db->fetch_field($query, "log_count"); - - $start = 0; - $per_page = 50; - $current_page = 1; - - if($mybb->input['page'] > 0) - { - $current_page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($current_page-1)*$per_page; - $pages = $log_count / $per_page; - $pages = ceil($pages); - if($current_page > $pages) - { - $start = 0; - $current_page = 1; - } - } - - $pagination = draw_admin_pagination($current_page, $per_page, $log_count, "index.php?module=tools-tasks&action=logs&page={page}"); - - $query = $db->query(" - SELECT l.*, t.title - FROM ".TABLE_PREFIX."tasklog l - LEFT JOIN ".TABLE_PREFIX."tasks t ON (t.tid=l.tid) - ORDER BY l.dateline DESC - LIMIT {$start}, {$per_page} - "); - while($log_entry = $db->fetch_array($query)) - { - $log_entry['title'] = htmlspecialchars_uni($log_entry['title']); - $log_entry['data'] = htmlspecialchars_uni($log_entry['data']); - - $date = my_date('relative', $log_entry['dateline']); - $table->construct_cell("{$log_entry['title']}"); - $table->construct_cell($date, array("class" => "align_center")); - $table->construct_cell($log_entry['data']); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_task_logs, array("colspan" => "3")); - $table->construct_row(); - } - - $table->output($lang->task_logs); - echo $pagination; - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->task_manager); - - $sub_tabs['scheduled_tasks'] = array( - 'title' => $lang->scheduled_tasks, - 'link' => "index.php?module=tools-tasks", - 'description' => $lang->scheduled_tasks_desc - ); - - $sub_tabs['add_task'] = array( - 'title' => $lang->add_new_task, - 'link' => "index.php?module=tools-tasks&action=add" - ); - - $sub_tabs['task_logs'] = array( - 'title' => $lang->view_task_logs, - 'link' => "index.php?module=tools-tasks&action=logs" - ); - - $plugins->run_hooks("admin_tools_tasks_start"); - - $page->output_nav_tabs($sub_tabs, 'scheduled_tasks'); - - $table = new Table; - $table->construct_header($lang->task); - $table->construct_header($lang->next_run, array("class" => "align_center", "width" => 200)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - $query = $db->simple_select("tasks", "*", "", array("order_by" => "title", "order_dir" => "asc")); - while($task = $db->fetch_array($query)) - { - $task['title'] = htmlspecialchars_uni($task['title']); - $task['description'] = htmlspecialchars_uni($task['description']); - $next_run = date($mybb->settings['dateformat'], $task['nextrun']).", ".date($mybb->settings['timeformat'], $task['nextrun']); - if($task['enabled'] == 1) - { - $icon = "style}/images/icons/bullet_on.png\" alt=\"({$lang->alt_enabled})\" title=\"{$lang->alt_enabled}\" style=\"vertical-align: middle;\" /> "; - } - else - { - $icon = "style}/images/icons/bullet_off.png\" alt=\"({$lang->alt_disabled})\" title=\"{$lang->alt_disabled}\" style=\"vertical-align: middle;\" /> "; - } - $table->construct_cell("
{$icon}{$task['title']}
{$task['description']}
"); - $table->construct_cell($next_run, array("class" => "align_center")); - - $popup = new PopupMenu("task_{$task['tid']}", $lang->options); - $popup->add_item($lang->edit_task, "index.php?module=tools-tasks&action=edit&tid={$task['tid']}"); - if($task['enabled'] == 1) - { - $popup->add_item($lang->run_task, "index.php?module=tools-tasks&action=run&tid={$task['tid']}&my_post_key={$mybb->post_code}"); - $popup->add_item($lang->disable_task, "index.php?module=tools-tasks&action=disable&tid={$task['tid']}&my_post_key={$mybb->post_code}"); - } - else - { - $popup->add_item($lang->enable_task, "index.php?module=tools-tasks&action=enable&tid={$task['tid']}&my_post_key={$mybb->post_code}"); - } - $popup->add_item($lang->delete_task, "index.php?module=tools-tasks&action=delete&tid={$task['tid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_task_deletion}')"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_tasks, array('colspan' => 3)); - $table->construct_row(); - } - - $table->output($lang->scheduled_tasks); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/tools/warninglog.php b/html/forums/admin/modules/tools/warninglog.php deleted file mode 100644 index 903255a..0000000 --- a/html/forums/admin/modules/tools/warninglog.php +++ /dev/null @@ -1,480 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->warning_logs, "index.php?module=tools-warninglog"); - -$plugins->run_hooks("admin_tools_warninglog_begin"); - -// Revoke a warning -if($mybb->input['action'] == "do_revoke" && $mybb->request_method == "post") -{ - $query = $db->simple_select("warnings", "*", "wid='".$mybb->get_input('wid', MyBB::INPUT_INT)."'"); - $warning = $db->fetch_array($query); - - if(!$warning['wid']) - { - flash_message($lang->error_invalid_warning, 'error'); - admin_redirect("index.php?module=tools-warninglog"); - } - else if($warning['daterevoked']) - { - flash_message($lang->error_already_revoked, 'error'); - admin_redirect("index.php?module=tools-warninglog&action=view&wid={$warning['wid']}"); - } - - $user = get_user($warning['uid']); - - $plugins->run_hooks("admin_tools_warninglog_do_revoke"); - - if(!trim($mybb->input['reason'])) - { - $warn_errors[] = $lang->error_no_revoke_reason; - $mybb->input['action'] = "view"; - } - else - { - // Warning is still active, lower users point count - if($warning['expired'] != 1) - { - $new_warning_points = $user['warningpoints']-$warning['points']; - if($new_warning_points < 0) - { - $new_warning_points = 0; - } - - // Update user - $updated_user = array( - "warningpoints" => $new_warning_points - ); - } - - // Update warning - $updated_warning = array( - "expired" => 1, - "daterevoked" => TIME_NOW, - "revokedby" => $mybb->user['uid'], - "revokereason" => $db->escape_string($mybb->input['reason']) - ); - - $plugins->run_hooks("admin_tools_warninglog_do_revoke_commit"); - - if($warning['expired'] != 1) - { - $db->update_query("users", $updated_user, "uid='{$warning['uid']}'"); - } - - $db->update_query("warnings", $updated_warning, "wid='{$warning['wid']}'"); - - flash_message($lang->redirect_warning_revoked, 'success'); - admin_redirect("index.php?module=tools-warninglog&action=view&wid={$warning['wid']}"); - } -} - -// Detailed view of a warning -if($mybb->input['action'] == "view") -{ - $query = $db->query(" - SELECT w.*, t.title AS type_title, u.username, p.subject AS post_subject - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=w.pid) - WHERE w.wid='".$mybb->get_input('wid', MyBB::INPUT_INT)."' - "); - $warning = $db->fetch_array($query); - - if(!$warning['wid']) - { - flash_message($lang->error_invalid_warning, 'error'); - admin_redirect("index.php?module=tools-warninglog"); - } - - $user = get_user((int)$warning['uid']); - - $plugins->run_hooks("admin_tools_warninglog_view"); - - $page->add_breadcrumb_item($lang->warning_details, "index.php?module=tools-warninglog&action=view&wid={$warning['wid']}"); - - $page->output_header($lang->warning_details); - - $user_link = build_profile_link(htmlspecialchars_uni($user['username']), $user['uid'], "_blank"); - - if(is_array($warn_errors)) - { - $page->output_inline_error($warn_errors); - $mybb->input['reason'] = htmlspecialchars_uni($mybb->input['reason']); - } - - $table = new Table; - - $post_link = ""; - if($warning['post_subject']) - { - if(!is_object($parser)) - { - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - } - - $warning['post_subject'] = $parser->parse_badwords($warning['post_subject']); - $warning['post_subject'] = htmlspecialchars_uni($warning['post_subject']); - $post_link = get_post_link($warning['pid']); - $table->construct_cell("{$lang->warned_user}

{$user_link}"); - $table->construct_cell("{$lang->post}

settings['bburl']}/{$post_link}\" target=\"_blank\">{$warning['post_subject']}"); - $table->construct_row(); - } - else - { - $table->construct_cell("{$lang->warned_user}

{$user_link}", array('colspan' => 2)); - $table->construct_row(); - } - - $issuedby = build_profile_link(htmlspecialchars_uni($warning['username']), $warning['issuedby'], "_blank"); - $notes = nl2br(htmlspecialchars_uni($warning['notes'])); - - $date_issued = my_date('relative', $warning['dateline']); - if($warning['type_title']) - { - $warning_type = $warning['type_title']; - } - else - { - $warning_type = $warning['title']; - } - $warning_type = htmlspecialchars_uni($warning_type); - if($warning['points'] > 0) - { - $warning['points'] = "+{$warning['points']}"; - } - - $points = $lang->sprintf($lang->warning_points, $warning['points']); - if($warning['expired'] != 1) - { - if($warning['expires'] == 0) - { - $expires = $lang->never; - } - else - { - $expires = my_date('relative', $warning['expires']); - } - $status = $lang->warning_active; - } - else - { - if($warning['daterevoked']) - { - $expires = $status = $lang->warning_revoked; - } - else if($warning['expires']) - { - $expires = $status = $lang->already_expired; - } - } - - $table->construct_cell("{$lang->warning}

{$warning_type} {$points}", array('width' => '50%')); - $table->construct_cell("{$lang->date_issued}

{$date_issued}", array('width' => '50%')); - $table->construct_row(); - - $table->construct_cell("{$lang->issued_by}

{$issuedby}", array('width' => '50%')); - $table->construct_cell("{$lang->expires}

{$expires}", array('width' => '50%')); - $table->construct_row(); - - $table->construct_cell("{$lang->warning_note}

{$notes}", array('colspan' => 2)); - $table->construct_row(); - - $table->output("
{$status}
".$lang->warning_details); - - if(!$warning['daterevoked']) - { - $form = new Form("index.php?module=tools-warninglog", "post"); - $form_container = new FormContainer($lang->revoke_warning); - echo $form->generate_hidden_field('action', 'do_revoke'); - echo $form->generate_hidden_field('wid', $warning['wid']); - $form_container->output_row("", $lang->revoke_warning_desc, $form->generate_text_area('reason', $mybb->input['reason'], array('id' => 'reason')), 'reason'); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->revoke_warning); - $form->output_submit_wrapper($buttons); - $form->end(); - } - else - { - $date_revoked = my_date('relative', $warning['daterevoked']); - $revoked_user = get_user($warning['revokedby']); - $revoked_by = build_profile_link(htmlspecialchars_uni($revoked_user['username']), $revoked_user['uid'], "_blank"); - $revoke_reason = nl2br(htmlspecialchars_uni($warning['revokereason'])); - - $revoke_table = new Table; - $revoke_table->construct_cell("{$lang->revoked_by}

{$revoked_by}", array('width' => '50%')); - $revoke_table->construct_cell("{$lang->date_revoked}

{$date_revoked}", array('width' => '50%')); - $revoke_table->construct_row(); - - $revoke_table->construct_cell("{$lang->reason}

{$revoke_reason}", array('colspan' => 2)); - $revoke_table->construct_row(); - - $revoke_table->output($lang->warning_is_revoked); - } - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_tools_warninglog_start"); - - $page->output_header($lang->warning_logs); - - $sub_tabs['warning_logs'] = array( - 'title' => $lang->warning_logs, - 'link' => "index.php?module=tools-warninglog", - 'description' => $lang->warning_logs_desc - ); - - $page->output_nav_tabs($sub_tabs, 'warning_logs'); - - // Filter options - $where_sql = ''; - if(!empty($mybb->input['filter']['username'])) - { - $search_user = get_user_by_username($mybb->input['filter']['username']); - - $mybb->input['filter']['uid'] = (int)$search_user['uid']; - $mybb->input['filter']['uid'] = $db->fetch_field($query, "uid"); - } - if($mybb->input['filter']['uid']) - { - $search['uid'] = (int)$mybb->input['filter']['uid']; - $where_sql .= " AND w.uid='{$search['uid']}'"; - if(!isset($mybb->input['search']['username'])) - { - $user = get_user($mybb->input['search']['uid']); - $mybb->input['search']['username'] = $user['username']; - } - } - if(!empty($mybb->input['filter']['mod_username'])) - { - $mod_user = get_user_by_username($mybb->input['filter']['mod_username']); - - $mybb->input['filter']['mod_uid'] = (int)$mod_user['uid']; - } - if($mybb->input['filter']['mod_uid']) - { - $search['mod_uid'] = (int)$mybb->input['filter']['mod_uid']; - $where_sql .= " AND w.issuedby='{$search['mod_uid']}'"; - if(!isset($mybb->input['search']['mod_username'])) - { - $mod_user = get_user($mybb->input['search']['uid']); - $mybb->input['search']['mod_username'] = $mod_user['username']; - } - } - if($mybb->input['filter']['reason']) - { - $search['reason'] = $db->escape_string_like($mybb->input['filter']['reason']); - $where_sql .= " AND (w.notes LIKE '%{$search['reason']}%' OR t.title LIKE '%{$search['reason']}%' OR w.title LIKE '%{$search['reason']}%')"; - } - $sortbysel = array(); - switch($mybb->input['filter']['sortby']) - { - case "username": - $sortby = "u.username"; - $sortbysel['username'] = ' selected="selected"'; - break; - case "expires": - $sortby = "w.expires"; - $sortbysel['expires'] = ' selected="selected"'; - break; - case "issuedby": - $sortby = "i.username"; - $sortbysel['issuedby'] = ' selected="selected"'; - break; - default: // "dateline" - $sortby = "w.dateline"; - $sortbysel['dateline'] = ' selected="selected"'; - } - $order = $mybb->input['filter']['order']; - $ordersel = array(); - if($order != "asc") - { - $order = "desc"; - $ordersel['desc'] = ' selected="selected"'; - } - else - { - $ordersel['asc'] = ' selected="selected"'; - } - - // Expire any warnings past their expiration date - require_once MYBB_ROOT.'inc/datahandlers/warnings.php'; - $warningshandler = new WarningsHandler('update'); - - $warningshandler->expire_warnings(); - - // Pagination stuff - $sql = " - SELECT COUNT(wid) as count - FROM - ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (w.tid=t.tid) - WHERE 1=1 - {$where_sql} - "; - $query = $db->query($sql); - $total_warnings = $db->fetch_field($query, 'count'); - $view_page = 1; - if(isset($mybb->input['page']) && $mybb->get_input('page', MyBB::INPUT_INT) > 0) - { - $view_page = $mybb->get_input('page', MyBB::INPUT_INT); - } - $per_page = 20; - if(isset($mybb->input['filter']['per_page']) && (int)$mybb->input['filter']['per_page'] > 0) - { - $per_page = (int)$mybb->input['filter']['per_page']; - } - $start = ($view_page-1) * $per_page; - // Build the base URL for pagination links - $url = 'index.php?module=tools-warninglog'; - if(is_array($mybb->input['filter']) && count($mybb->input['filter'])) - { - foreach($mybb->input['filter'] as $field => $value) - { - $value = urlencode($value); - $url .= "&filter[{$field}]={$value}"; - } - } - - // The actual query - $sql = " - SELECT - w.wid, w.title as custom_title, w.points, w.dateline, w.issuedby, w.expires, w.expired, w.daterevoked, w.revokedby, - t.title, - u.uid, u.username, u.usergroup, u.displaygroup, - i.uid as mod_uid, i.username as mod_username, i.usergroup as mod_usergroup, i.displaygroup as mod_displaygroup - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."users u on (w.uid=u.uid) - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (w.tid=t.tid) - LEFT JOIN ".TABLE_PREFIX."users i ON (i.uid=w.issuedby) - WHERE 1=1 - {$where_sql} - ORDER BY {$sortby} {$order} - LIMIT {$start}, {$per_page} - "; - $query = $db->query($sql); - - - $table = new Table; - $table->construct_header($lang->warned_user, array('width' => '15%')); - $table->construct_header($lang->warning, array("class" => "align_center", 'width' => '25%')); - $table->construct_header($lang->date_issued, array("class" => "align_center", 'width' => '20%')); - $table->construct_header($lang->expires, array("class" => "align_center", 'width' => '20%')); - $table->construct_header($lang->issued_by, array("class" => "align_center", 'width' => '15%')); - $table->construct_header($lang->options, array("class" => "align_center", 'width' => '5%')); - - while($row = $db->fetch_array($query)) - { - if(!$row['username']) - { - $row['username'] = $lang->guest; - } - - $trow = alt_trow(); - $username = format_name(htmlspecialchars_uni($row['username']), $row['usergroup'], $row['displaygroup']); - if(!$row['uid']) - { - $username_link = $username; - } - else - { - $username_link = build_profile_link($username, $row['uid'], "_blank"); - } - $mod_username = format_name(htmlspecialchars_uni($row['mod_username']), $row['mod_usergroup'], $row['mod_displaygroup']); - $mod_username_link = build_profile_link($mod_username, $row['mod_uid'], "_blank"); - $issued_date = my_date('relative', $row['dateline']); - $revoked_text = ''; - if($row['daterevoked'] > 0) - { - $revoked_date = my_date('relative', $row['daterevoked']); - $revoked_text = "
{$lang->revoked} {$revoked_date}"; - } - if($row['expires'] > 0) - { - $expire_date = my_date('relative', $row['expires']); - } - else - { - $expire_date = $lang->never; - } - $title = $row['title']; - if(empty($row['title'])) - { - $title = $row['custom_title']; - } - $title = htmlspecialchars_uni($title); - if($row['points'] > 0) - { - $points = '+'.$row['points']; - } - - $table->construct_cell($username_link); - $table->construct_cell("{$title} ({$points})"); - $table->construct_cell($issued_date, array("class" => "align_center")); - $table->construct_cell($expire_date.$revoked_text, array("class" => "align_center")); - $table->construct_cell($mod_username_link); - $table->construct_cell("{$lang->view}", array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_warning_logs, array("colspan" => "6")); - $table->construct_row(); - } - - $table->output($lang->warning_logs); - - // Do we need to construct the pagination? - if($total_warnings > $per_page) - { - echo draw_admin_pagination($view_page, $per_page, $total_warnings, $url)."
"; - } - - $sort_by = array( - 'expires' => $lang->expiry_date, - 'dateline' => $lang->issued_date, - 'username' => $lang->warned_user, - 'issuedby' => $lang->issued_by - ); - - $order_array = array( - 'asc' => $lang->asc, - 'desc' => $lang->desc - ); - - $form = new Form("index.php?module=tools-warninglog", "post"); - $form_container = new FormContainer($lang->filter_warning_logs); - $form_container->output_row($lang->filter_warned_user, "", $form->generate_text_box('filter[username]', $mybb->input['filter']['username'], array('id' => 'filter_username')), 'filter_username'); - $form_container->output_row($lang->filter_issued_by, "", $form->generate_text_box('filter[mod_username]', $mybb->input['filter']['mod_username'], array('id' => 'filter_mod_username')), 'filter_mod_username'); - $form_container->output_row($lang->filter_reason, "", $form->generate_text_box('filter[reason]', $mybb->input['filter']['reason'], array('id' => 'filter_reason')), 'filter_reason'); - $form_container->output_row($lang->sort_by, "", $form->generate_select_box('filter[sortby]', $sort_by, $mybb->input['filter']['sortby'], array('id' => 'filter_sortby'))." {$lang->in} ".$form->generate_select_box('filter[order]', $order_array, $order, array('id' => 'filter_order'))." {$lang->order}", 'filter_order'); - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('filter[per_page]', $per_page, array('id' => 'filter_per_page', 'min' => 1)), 'filter_per_page'); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->filter_warning_logs); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/user/admin_permissions.php b/html/forums/admin/modules/user/admin_permissions.php deleted file mode 100644 index a7c5380..0000000 --- a/html/forums/admin/modules/user/admin_permissions.php +++ /dev/null @@ -1,534 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->admin_permissions, "index.php?module=user-admin_permissions"); - -if(($mybb->input['action'] == "edit" && $mybb->input['uid'] == 0) || $mybb->input['action'] == "group" || !$mybb->input['action']) -{ - $sub_tabs['user_permissions'] = array( - 'title' => $lang->user_permissions, - 'link' => "index.php?module=user-admin_permissions", - 'description' => $lang->user_permissions_desc - ); - - $sub_tabs['group_permissions'] = array( - 'title' => $lang->group_permissions, - 'link' => "index.php?module=user-admin_permissions&action=group", - 'description' => $lang->group_permissions_desc - ); - - $sub_tabs['default_permissions'] = array( - 'title' => $lang->default_permissions, - 'link' => "index.php?module=user-admin_permissions&action=edit&uid=0", - 'description' => $lang->default_permissions_desc - ); -} - -$uid = $mybb->get_input('uid', MyBB::INPUT_INT); - -$plugins->run_hooks("admin_user_admin_permissions_begin"); - -if($mybb->input['action'] == "delete") -{ - if(is_super_admin($uid)) - { - flash_message($lang->error_super_admin, 'error'); - admin_redirect("index.php?module=user-admin_permissions"); - } - - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-admin_permissions"); - } - - if(!trim($mybb->input['uid'])) - { - flash_message($lang->error_delete_no_uid, 'error'); - admin_redirect("index.php?module=user-admin_permissions"); - } - - $query = $db->simple_select("adminoptions", "COUNT(uid) as adminoptions", "uid = '{$mybb->input['uid']}'"); - if($db->fetch_field($query, 'adminoptions') == 0) - { - flash_message($lang->error_delete_invalid_uid, 'error'); - admin_redirect("index.php?module=user-admin_permissions"); - } - - $plugins->run_hooks("admin_user_admin_permissions_delete"); - - if($mybb->request_method == "post") - { - $newperms = array( - "permissions" => '' - ); - - $plugins->run_hooks("admin_user_admin_permissions_delete_commit"); - - $db->update_query("adminoptions", $newperms, "uid = '{$uid}'"); - - // Log admin action - if($uid < 0) - { - $gid = abs($uid); - $query = $db->simple_select("usergroups", "title", "gid='{$gid}'"); - $group = $db->fetch_array($query); - log_admin_action($uid, $group['title']); - - } - elseif($uid == 0) - { - // Default - log_admin_action(0, $lang->default); - } - else - { - $user = get_user($uid); - log_admin_action($uid, $user['username']); - } - - flash_message($lang->success_perms_deleted, 'success'); - admin_redirect("index.php?module=user-admin_permissions"); - } - else - { - $page->output_confirm_action("index.php?module=user-admin_permissions&action=delete&uid={$mybb->input['uid']}", $lang->confirm_perms_deletion); - } -} - -if($mybb->input['action'] == "edit") -{ - if(is_super_admin($uid)) - { - flash_message($lang->error_super_admin, 'error'); - admin_redirect("index.php?module=user-admin_permissions"); - } - - $plugins->run_hooks("admin_user_admin_permissions_edit"); - - if($mybb->request_method == "post") - { - foreach($mybb->input['permissions'] as $module => $actions) - { - $no_access = 0; - foreach($actions as $action => $access) - { - if($access == 0) - { - ++$no_access; - } - } - // User can't access any actions in this module - just disallow it completely - if($no_access == count($actions)) - { - unset($mybb->input['permissions'][$module]); - } - } - - // Does an options row exist for this admin already? - $query = $db->simple_select("adminoptions", "COUNT(uid) AS existing_options", "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); - $existing_options = $db->fetch_field($query, "existing_options"); - if($existing_options > 0) - { - $db->update_query("adminoptions", array('permissions' => $db->escape_string(my_serialize($mybb->input['permissions']))), "uid = '".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); - } - else - { - $insert_array = array( - "uid" => $mybb->get_input('uid', MyBB::INPUT_INT), - "permissions" => $db->escape_string(my_serialize($mybb->input['permissions'])), - "notes" => '', - "defaultviews" => '' - ); - $db->insert_query("adminoptions", $insert_array); - } - - $plugins->run_hooks("admin_user_admin_permissions_edit_commit"); - - // Log admin action - if($uid > 0) - { - // Users - $user = get_user($uid); - log_admin_action($uid, $user['username']); - } - elseif($uid < 0) - { - // Groups - $gid = abs($uid); - $query = $db->simple_select("usergroups", "title", "gid='{$gid}'"); - $group = $db->fetch_array($query); - log_admin_action($uid, $group['title']); - } - else - { - // Default - log_admin_action(0); - } - - flash_message($lang->admin_permissions_updated, 'success'); - admin_redirect("index.php?module=user-admin_permissions"); - } - - if($uid > 0) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->query(" - SELECT u.uid, u.username, g.cancp, g.gid - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (((','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%') OR u.usergroup = g.gid)) - WHERE u.uid='$uid' - AND g.cancp=1 - LIMIT 1 - "); - break; - default: - $query = $db->query(" - SELECT u.uid, u.username, g.cancp, g.gid - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (((CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%')) OR u.usergroup = g.gid)) - WHERE u.uid='$uid' - AND g.cancp=1 - LIMIT 1 - "); - } - - $admin = $db->fetch_array($query); - $permission_data = get_admin_permissions($uid, $admin['gid']); - $title = htmlspecialchars_uni($admin['username']); - $page->add_breadcrumb_item($lang->user_permissions, "index.php?module=user-admin_permissions"); - } - elseif($uid < 0) - { - $gid = abs($uid); - $query = $db->simple_select("usergroups", "title", "gid='$gid'"); - $group = $db->fetch_array($query); - $permission_data = get_admin_permissions("", $gid); - $title = $group['title']; - $page->add_breadcrumb_item($lang->group_permissions, "index.php?module=user-admin_permissions&action=group"); - } - else - { - $query = $db->simple_select("adminoptions", "permissions", "uid='0'"); - $permission_data = my_unserialize($db->fetch_field($query, "permissions")); - $page->add_breadcrumb_item($lang->default_permissions); - $title = $lang->default; - } - - if($uid != 0) - { - $page->add_breadcrumb_item($lang->edit_permissions.": {$title}"); - } - - $page->output_header($lang->edit_permissions); - - if($uid != 0) - { - $sub_tabs['edit_permissions'] = array( - 'title' => $lang->edit_permissions, - 'link' => "index.php?module=user-admin_permissions&action=edit&uid={$uid}", - 'description' => $lang->edit_permissions_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_permissions'); - } - - $form = new Form("index.php?module=user-admin_permissions&action=edit", "post", "edit"); - - echo $form->generate_hidden_field("uid", $uid); - - // Fetch all of the modules we have - $modules_dir = MYBB_ADMIN_DIR."modules"; - $dir = opendir($modules_dir); - $modules = array(); - while(($module = readdir($dir)) !== false) - { - if(is_dir($modules_dir."/".$module) && !in_array($module, array(".", "..")) && file_exists($modules_dir."/".$module."/module_meta.php")) - { - require_once $modules_dir."/".$module."/module_meta.php"; - $meta_function = $module."_admin_permissions"; - - // Module has no permissions, skip it - if(function_exists($meta_function) && is_array($meta_function())) - { - $permission_modules[$module] = $meta_function(); - $modules[$permission_modules[$module]['disporder']][] = $module; - } - } - } - closedir($dir); - - ksort($modules); - foreach($modules as $disp_order => $mod) - { - if(!is_array($mod)) - { - continue; - } - - foreach($mod as $module) - { - $module_tabs[$module] = $permission_modules[$module]['name']; - } - } - $page->output_tab_control($module_tabs); - - foreach($permission_modules as $key => $module) - { - echo "
\n"; - $form_container = new FormContainer("{$module['name']}"); - foreach($module['permissions'] as $action => $title) - { - $form_container->output_row($title, "", $form->generate_yes_no_radio('permissions['.$key.']['.$action.']', (int)$permission_data[$key][$action], array('yes' => 1, 'no' => 0)), 'permissions['.$key.']['.$action.']'); - } - $form_container->end(); - echo "
\n"; - } - - $buttons[] = $form->generate_submit_button($lang->update_permissions); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "group") -{ - $plugins->run_hooks("admin_user_admin_permissions_group"); - - $page->add_breadcrumb_item($lang->group_permissions); - $page->output_header($lang->group_permissions); - - $page->output_nav_tabs($sub_tabs, 'group_permissions'); - - $table = new Table; - $table->construct_header($lang->group); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - // Get usergroups with ACP access - $query = $db->query(" - SELECT g.title, g.cancp, a.permissions, g.gid - FROM ".TABLE_PREFIX."usergroups g - LEFT JOIN ".TABLE_PREFIX."adminoptions a ON (a.uid = -g.gid) - WHERE g.cancp = 1 - ORDER BY g.title ASC - "); - while($group = $db->fetch_array($query)) - { - if($group['permissions'] != "") - { - $perm_type = "group"; - } - else - { - $perm_type = "default"; - } - $uid = -$group['gid']; - $table->construct_cell("
style}/images/icons/{$perm_type}.png\" title=\"{$lang->permissions_type_group}\" alt=\"{$perm_type}\" />
"); - - if($group['permissions'] != "") - { - $popup = new PopupMenu("groupperm_{$uid}", $lang->options); - $popup->add_item($lang->edit_permissions, "index.php?module=user-admin_permissions&action=edit&uid={$uid}"); - - // Check permissions for Revoke - $popup->add_item($lang->revoke_permissions, "index.php?module=user-admin_permissions&action=delete&uid={$uid}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, 'Are you sure you wish to revoke this group\'s permissions?')"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - } - else - { - $table->construct_cell("{$lang->set_permissions}", array("class" => "align_center")); - } - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_group_perms, array("colspan" => "3")); - $table->construct_row(); - } - - $table->output($lang->group_permissions); - - echo << -
-{$lang->legend} -{$lang->using_custom_perms} {$lang->using_custom_perms}
-{$lang->using_default_perms} {$lang->using_default_perms}
-LEGEND; - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_user_admin_permissions_start"); - - $page->add_breadcrumb_item($lang->user_permissions); - $page->output_header($lang->user_permissions); - - $page->output_nav_tabs($sub_tabs, 'user_permissions'); - - $table = new Table; - $table->construct_header($lang->user); - $table->construct_header($lang->last_active, array("class" => "align_center", "width" => 200)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - // Get usergroups with ACP access - $usergroups = array(); - $query = $db->simple_select("usergroups", "*", "cancp = 1"); - while($usergroup = $db->fetch_array($query)) - { - $usergroups[$usergroup['gid']] = $usergroup; - } - - if(!empty($usergroups)) - { - // Get users whose primary or secondary usergroup has ACP access - $comma = $primary_group_list = $secondary_group_list = ''; - foreach($usergroups as $gid => $group_info) - { - $primary_group_list .= $comma.$gid; - switch($db->type) - { - case "pgsql": - case "sqlite": - $secondary_group_list .= " OR ','|| u.additionalgroups||',' LIKE '%,{$gid},%'"; - break; - default: - $secondary_group_list .= " OR CONCAT(',', u.additionalgroups,',') LIKE '%,{$gid},%'"; - } - - $comma = ','; - } - - $group_list = implode(',', array_keys($usergroups)); - $secondary_groups = ','.$group_list.','; - - // Get usergroups with ACP access - $query = $db->query(" - SELECT g.title, g.cancp, a.permissions, g.gid - FROM ".TABLE_PREFIX."usergroups g - LEFT JOIN ".TABLE_PREFIX."adminoptions a ON (a.uid = -g.gid) - WHERE g.cancp = 1 - ORDER BY g.title ASC - "); - while($group = $db->fetch_array($query)) - { - $group_permissions[$group['gid']] = $group['permissions']; - } - - $query = $db->query(" - SELECT u.uid, u.username, u.lastactive, u.usergroup, u.additionalgroups, a.permissions - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."adminoptions a ON (a.uid=u.uid) - WHERE u.usergroup IN ({$primary_group_list}) {$secondary_group_list} - ORDER BY u.username ASC - "); - while($admin = $db->fetch_array($query)) - { - if($admin['permissions'] != "") - { - $perm_type = "user"; - } - else - { - $groups = explode(",", $admin['additionalgroups'].",".$admin['usergroup']); - foreach($groups as $group) - { - if($group == "") continue; - if($group_permissions[$group] != "") - { - $perm_type = "group"; - break; - } - } - - if(!$group_permissions) - { - $perm_type = "default"; - } - } - - $usergroup_list = array(); - - // Build a list of group memberships that have access to the Admin CP - // Primary usergroup? - if($usergroups[$admin['usergroup']]['cancp'] == 1) - { - $usergroup_list[] = "".$usergroups[$admin['usergroup']]['title'].""; - } - - // Secondary usergroups? - $additional_groups = explode(',', $admin['additionalgroups']); - if(is_array($additional_groups)) - { - foreach($additional_groups as $gid) - { - if($usergroups[$gid]['cancp'] == 1) - { - $usergroup_list[] = $usergroups[$gid]['title']; - } - } - } - $usergroup_list = implode($lang->comma, $usergroup_list); - - $username = htmlspecialchars_uni($admin['username']); - $table->construct_cell("
style}/images/icons/{$perm_type}.png\" title=\"{$lang->perms_type_user}\" alt=\"{$perm_type}\" />
edit_user}\">{$username}
{$usergroup_list}
"); - - $table->construct_cell(my_date('relative', $admin['lastactive']), array("class" => "align_center")); - - $popup = new PopupMenu("adminperm_{$admin['uid']}", $lang->options); - if(!is_super_admin($admin['uid'])) - { - if($admin['permissions'] != "") - { - $popup->add_item($lang->edit_permissions, "index.php?module=user-admin_permissions&action=edit&uid={$admin['uid']}"); - $popup->add_item($lang->revoke_permissions, "index.php?module=user-admin_permissions&action=delete&uid={$admin['uid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_perms_deletion2}')"); - } - else - { - $popup->add_item($lang->set_permissions, "index.php?module=user-admin_permissions&action=edit&uid={$admin['uid']}"); - } - } - $popup->add_item($lang->view_log, "index.php?module=tools-adminlog&uid={$admin['uid']}"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - $table->construct_row(); - } - } - - if(empty($usergroups) || $table->num_rows() == 0) - { - $table->construct_cell($lang->no_user_perms, array("colspan" => "3")); - $table->construct_row(); - } - - $table->output($lang->user_permissions); - - echo << -
-{$lang->legend} -{$lang->using_individual_perms} {$lang->using_individual_perms}
-{$lang->using_group_perms} {$lang->using_group_perms}
-{$lang->using_default_perms} {$lang->using_default_perms}
-LEGEND; - $page->output_footer(); -} - diff --git a/html/forums/admin/modules/user/awaiting_activation.php b/html/forums/admin/modules/user/awaiting_activation.php deleted file mode 100644 index 5432042..0000000 --- a/html/forums/admin/modules/user/awaiting_activation.php +++ /dev/null @@ -1,213 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->awaiting_activation, "index.php?module=user-awaiting_activation"); - -$sub_tabs['awaiting_activation'] = array( - 'title' => $lang->awaiting_activation, - 'link' => "index.php?module=user-awaiting_activation", - 'description' => $lang->awaiting_activation_desc -); - -$plugins->run_hooks("admin_user_awaiting_activation_begin"); - -if($mybb->input['action'] == "activate" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_user_awaiting_activation_activate"); - - $mybb->input['user'] = array_map('intval', $mybb->input['user']); - $user_ids = implode(", ", $mybb->input['user']); - - if(empty($user_ids)) - { - flash_message($lang->no_users_selected, 'error'); - admin_redirect("index.php?module=user-awaiting_activation"); - } - - $num_activated = $num_deleted = 0; - $users_to_delete = array(); - if($mybb->input['delete']) // Delete selected user(s) - { - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('delete'); - - $query = $db->simple_select("users", "uid, usergroup", "uid IN ({$user_ids})"); - while($user = $db->fetch_array($query)) - { - if($user['usergroup'] == 5) - { - ++$num_deleted; - $users_to_delete[] = (int)$user['uid']; - } - } - - if(!empty($users_to_delete)) - { - $userhandler->delete_user($users_to_delete, 1); - } - - $plugins->run_hooks("admin_user_awaiting_activation_activate_delete_commit"); - - // Log admin action - log_admin_action('deleted', $num_deleted); - - flash_message($lang->success_users_deleted, 'success'); - admin_redirect("index.php?module=user-awaiting_activation"); - } - else // Activate selected user(s) - { - $query = $db->simple_select("users", "uid, username, email, usergroup, coppauser", "uid IN ({$user_ids})"); - while($user = $db->fetch_array($query)) - { - ++$num_activated; - if($user['coppauser']) - { - $updated_user = array( - "coppauser" => 0 - ); - } - else - { - $db->delete_query("awaitingactivation", "uid='{$user['uid']}'"); - } - - // Move out of awaiting activation if they're in it. - if($user['usergroup'] == 5) - { - $updated_user['usergroup'] = 2; - } - - $db->update_query("users", $updated_user, "uid='{$user['uid']}'"); - - $message = $lang->sprintf($lang->email_adminactivateaccount, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl']); my_mail($user['email'], $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']), $message); - } - - $cache->update_awaitingactivation(); - - $plugins->run_hooks("admin_user_awaiting_activation_activate_commit"); - - // Log admin action - log_admin_action('activated', $num_activated); - - flash_message($lang->success_users_activated, 'success'); - admin_redirect("index.php?module=user-awaiting_activation"); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_user_awaiting_activation_start"); - - $per_page = 20; - - if($mybb->input['page'] && $mybb->input['page'] > 1) - { - $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($mybb->input['page']*$per_page)-$per_page; - } - else - { - $mybb->input['page'] = 1; - $start = 0; - } - - $page->output_header($lang->manage_awaiting_activation); - - $page->output_nav_tabs($sub_tabs, 'awaiting_activation'); - - $form = new Form("index.php?module=user-awaiting_activation&action=activate", "post"); - - $table = new Table; - $table->construct_header($form->generate_check_box("allbox", 1, '', array('class' => 'checkall'))); - $table->construct_header($lang->username, array('width' => '20%')); - $table->construct_header($lang->registered, array('width' => '15%', 'class' => 'align_center')); - $table->construct_header($lang->last_active, array('width' => '15%', 'class' => 'align_center')); - $table->construct_header($lang->email, array('width' => '15%', 'class' => 'align_center')); - $table->construct_header($lang->ipaddress, array('width' => '10%', 'class' => 'align_center')); - $table->construct_header($lang->type, array('class' => 'align_center')); - - $query = $db->query(" - SELECT u.uid, u.username, u.regdate, u.regip, u.lastactive, u.email, u.coppauser, a.type AS reg_type, a.validated - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."awaitingactivation a ON (a.uid=u.uid) - WHERE u.usergroup='5' - ORDER BY u.regdate DESC - LIMIT {$start}, {$per_page} - "); - while($user = $db->fetch_array($query)) - { - $trow = alt_trow(); - $user['username'] = htmlspecialchars_uni($user['username']); - $user['profilelink'] = build_profile_link($user['username'], $user['uid'], "_blank"); - $user['email'] = htmlspecialchars_uni($user['email']); - $user['regdate'] = my_date('relative', $user['regdate']); - $user['lastactive'] = my_date('relative', $user['lastactive']); - - if($user['reg_type'] == 'r' || $user['reg_type'] == 'b' && $user['validated'] == 0) - { - $user['type'] = $lang->email_activation; - } - elseif($user['coppauser'] == 1) - { - $user['type'] = $lang->admin_activation_coppa; - } - else - { - $user['type'] = $lang->administrator_activation; - } - - if(empty($user['regip'])) - { - $user['regip'] = $lang->na; - } - else - { - $user['regip'] = my_inet_ntop($db->unescape_binary($user['regip'])); - } - - $table->construct_cell($form->generate_check_box("user[{$user['uid']}]", $user['uid'], '')); - $table->construct_cell($user['profilelink']); - $table->construct_cell($user['regdate'], array("class" => "align_center")); - $table->construct_cell($user['lastactive'], array("class" => "align_center")); - $table->construct_cell($user['email'], array("class" => "align_center")); - $table->construct_cell($user['regip'], array("class" => "align_center")); - $table->construct_cell($user['type'], array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_users_awaiting_activation, array('colspan' => 7)); - $table->construct_row(); - $table->output($lang->manage_awaiting_activation); - } - else - { - $table->output($lang->manage_awaiting_activation); - $buttons[] = $form->generate_submit_button($lang->activate_users, array('onclick' => "return confirm('{$lang->confirm_activate_users}');")); - $buttons[] = $form->generate_submit_button($lang->delete_users, array('name' => 'delete', 'onclick' => "return confirm('{$lang->confirm_delete_users}');")); - $form->output_submit_wrapper($buttons); - } - - $form->end(); - - $query = $db->simple_select("users", "COUNT(uid) AS users", "usergroup='5'"); - $total_rows = $db->fetch_field($query, "users"); - - echo "
".draw_admin_pagination($mybb->input['page'], $per_page, $total_rows, "index.php?module=user-awaiting_activation&page={page}"); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/user/banning.php b/html/forums/admin/modules/user/banning.php deleted file mode 100644 index 4d8e9d1..0000000 --- a/html/forums/admin/modules/user/banning.php +++ /dev/null @@ -1,606 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->banning, "index.php?module=user-banning"); - - -$sub_tabs['ips'] = array( - 'title' => $lang->banned_ips, - 'link' => "index.php?module=config-banning", -); - -$sub_tabs['bans'] = array( - 'title' => $lang->banned_accounts, - 'link' => "index.php?module=user-banning", - 'description' => $lang->banned_accounts_desc -); - -$sub_tabs['usernames'] = array( - 'title' => $lang->disallowed_usernames, - 'link' => "index.php?module=config-banning&type=usernames", -); - -$sub_tabs['emails'] = array( - 'title' => $lang->disallowed_email_addresses, - 'link' => "index.php?module=config-banning&type=emails", -); - -// Fetch banned groups -$query = $db->simple_select("usergroups", "gid,title", "isbannedgroup=1", array('order_by' => 'title')); -while($group = $db->fetch_array($query)) -{ - $banned_groups[$group['gid']] = $group['title']; -} - -// Fetch ban times -$ban_times = fetch_ban_times(); - -$plugins->run_hooks("admin_user_banning_begin"); - -if($mybb->input['action'] == "prune") -{ - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-banning"); - } - - $query = $db->simple_select("banned", "*", "uid='{$mybb->input['uid']}'"); - $ban = $db->fetch_array($query); - - if(!$ban['uid']) - { - flash_message($lang->error_invalid_ban, 'error'); - admin_redirect("index.php?module=user-banning"); - } - - $user = get_user($ban['uid']); - - if(is_super_admin($user['uid']) && ($mybb->user['uid'] != $user['uid'] && !is_super_admin($mybb->user['uid']))) - { - flash_message($lang->cannot_perform_action_super_admin_general, 'error'); - admin_redirect("index.php?module=user-banning"); - } - - $plugins->run_hooks("admin_user_banning_prune"); - - if($mybb->request_method == "post") - { - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation(); - - $query = $db->simple_select("threads", "tid", "uid='{$user['uid']}'"); - while($thread = $db->fetch_array($query)) - { - $moderation->delete_thread($thread['tid']); - } - - $query = $db->simple_select("posts", "pid", "uid='{$user['uid']}'"); - while($post = $db->fetch_array($query)) - { - $moderation->delete_post($post['pid']); - } - - $plugins->run_hooks("admin_user_banning_prune_commit"); - - $cache->update_reportedcontent(); - - // Log admin action - log_admin_action($user['uid'], htmlspecialchars_uni($user['username'])); - - flash_message($lang->success_pruned, 'success'); - admin_redirect("index.php?module=user-banning"); - } - else - { - $page->output_confirm_action("index.php?module=user-banning&action=prune&uid={$user['uid']}", $lang->confirm_prune); - } -} - -if($mybb->input['action'] == "lift") -{ - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-banning"); - } - - $query = $db->simple_select("banned", "*", "uid='{$mybb->input['uid']}'"); - $ban = $db->fetch_array($query); - - if(!$ban['uid']) - { - flash_message($lang->error_invalid_ban, 'error'); - admin_redirect("index.php?module=user-banning"); - } - - $user = get_user($ban['uid']); - - if(is_super_admin($user['uid']) && ($mybb->user['uid'] != $user['uid'] && !is_super_admin($mybb->user['uid']))) - { - flash_message($lang->cannot_perform_action_super_admin_general, 'error'); - admin_redirect("index.php?module=user-banning"); - } - - $plugins->run_hooks("admin_user_banning_lift"); - - if($mybb->request_method == "post") - { - $updated_group = array( - 'usergroup' => $ban['oldgroup'], - 'additionalgroups' => $ban['oldadditionalgroups'], - 'displaygroup' => $ban['olddisplaygroup'] - ); - $db->delete_query("banned", "uid='{$ban['uid']}'"); - - $plugins->run_hooks("admin_user_banning_lift_commit"); - - $db->update_query("users", $updated_group, "uid='{$ban['uid']}'"); - - $cache->update_banned(); - $cache->update_moderators(); - - // Log admin action - log_admin_action($ban['uid'], htmlspecialchars_uni($user['username'])); - - flash_message($lang->success_ban_lifted, 'success'); - admin_redirect("index.php?module=user-banning"); - } - else - { - $page->output_confirm_action("index.php?module=user-banning&action=lift&uid={$ban['uid']}", $lang->confirm_lift_ban); - } -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("banned", "*", "uid='{$mybb->input['uid']}'"); - $ban = $db->fetch_array($query); - - $user = get_user($ban['uid']); - - if(!$ban['uid']) - { - flash_message($lang->error_invalid_ban, 'error'); - admin_redirect("index.php?module=user-banning"); - } - - $plugins->run_hooks("admin_user_banning_edit"); - - if($mybb->request_method == "post") - { - if(!$ban['uid']) - { - $errors[] = $lang->error_invalid_username; - } - // Is the user we're trying to ban a super admin and we're not? - else if(is_super_admin($ban['uid']) && !is_super_admin($ban['uid'])) - { - $errors[] = $lang->error_no_perm_to_ban; - } - - if($ban['uid'] == $mybb->user['uid']) - { - $errors[] = $lang->error_ban_self; - } - - // No errors? Update - if(!$errors) - { - // Ban the user - if($mybb->input['bantime'] == '---') - { - $lifted = 0; - } - else - { - $lifted = ban_date2timestamp($mybb->input['bantime'], $ban['dateline']); - } - - $reason = my_substr($mybb->input['reason'], 0, 255); - - if(count($banned_groups) == 1) - { - $group = array_keys($banned_groups); - $mybb->input['usergroup'] = $group[0]; - } - - $update_array = array( - 'gid' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'dateline' => TIME_NOW, - 'bantime' => $db->escape_string($mybb->input['bantime']), - 'lifted' => $db->escape_string($lifted), - 'reason' => $db->escape_string($reason) - ); - - $db->update_query('banned', $update_array, "uid='{$ban['uid']}'"); - - // Move the user to the banned group - $update_array = array( - 'usergroup' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'displaygroup' => 0, - 'additionalgroups' => '', - ); - $db->update_query('users', $update_array, "uid = {$ban['uid']}"); - - $plugins->run_hooks("admin_user_banning_edit_commit"); - - $cache->update_banned(); - - // Log admin action - log_admin_action($ban['uid'], htmlspecialchars_uni($user['username'])); - - flash_message($lang->success_ban_updated, 'success'); - admin_redirect("index.php?module=user-banning"); - } - } - $page->add_breadcrumb_item($lang->edit_ban); - $page->output_header($lang->edit_ban); - - $sub_tabs = array(); - $sub_tabs['edit'] = array( - 'title' => $lang->edit_ban, - 'description' => $lang->edit_ban_desc - ); - $page->output_nav_tabs($sub_tabs, "edit"); - - $form = new Form("index.php?module=user-banning&action=edit&uid={$ban['uid']}", "post"); - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, $ban); - } - - $form_container = new FormContainer($lang->edit_ban); - $form_container->output_row($lang->ban_username, "", htmlspecialchars_uni($user['username'])); - $form_container->output_row($lang->ban_reason, "", $form->generate_text_area('reason', $mybb->input['reason'], array('id' => 'reason', 'maxlength' => '255')), 'reason'); - if(count($banned_groups) > 1) - { - $form_container->output_row($lang->ban_group, $lang->ban_group_desc, $form->generate_select_box('usergroup', $banned_groups, $mybb->input['usergroup'], array('id' => 'usergroup')), 'usergroup'); - } - - if($mybb->input['bantime'] == 'perm' || $mybb->input['bantime'] == '' || $mybb->input['lifted'] == 'perm' ||$mybb->input['lifted'] == '') - { - $mybb->input['bantime'] = '---'; - $mybb->input['lifted'] = '---'; - } - - foreach($ban_times as $time => $period) - { - if($time != '---') - { - $friendly_time = my_date("D, jS M Y @ {$mybb->settings['timeformat']}", ban_date2timestamp($time)); - $period = "{$period} ({$friendly_time})"; - } - $length_list[$time] = $period; - } - $form_container->output_row($lang->ban_time, "", $form->generate_select_box('bantime', $length_list, $mybb->input['bantime'], array('id' => 'bantime')), 'bantime'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->update_ban); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $where_sql_full = $where_sql = ''; - - $plugins->run_hooks("admin_user_banning_start"); - - if($mybb->request_method == "post") - { - $options = array( - 'fields' => array('username', 'usergroup', 'additionalgroups', 'displaygroup') - ); - - $user = get_user_by_username($mybb->input['username'], $options); - - // Are we searching a user? - if(isset($mybb->input['search'])) - { - $where_sql = 'uid=\''.(int)$user['uid'].'\''; - $where_sql_full = 'WHERE b.uid=\''.(int)$user['uid'].'\''; - } - else - { - if(!$user['uid']) - { - $errors[] = $lang->error_invalid_username; - } - // Is the user we're trying to ban a super admin and we're not? - else if(is_super_admin($user['uid']) && !is_super_admin($mybb->user['uid'])) - { - $errors[] = $lang->error_no_perm_to_ban; - } - else - { - $query = $db->simple_select("banned", "uid", "uid='{$user['uid']}'"); - if($db->fetch_field($query, "uid")) - { - $errors[] = $lang->error_already_banned; - } - - // Get PRIMARY usergroup information - $usergroups = $cache->read("usergroups"); - if(!empty($usergroups[$user['usergroup']]) && $usergroups[$user['usergroup']]['isbannedgroup'] == 1) - { - $errors[] = $lang->error_already_banned; - } - } - - if($user['uid'] == $mybb->user['uid']) - { - $errors[] = $lang->error_ban_self; - } - - // No errors? Insert - if(!$errors) - { - // Ban the user - if($mybb->input['bantime'] == '---') - { - $lifted = 0; - } - else - { - $lifted = ban_date2timestamp($mybb->input['bantime']); - } - - $reason = my_substr($mybb->input['reason'], 0, 255); - - if(count($banned_groups) == 1) - { - $group = array_keys($banned_groups); - $mybb->input['usergroup'] = $group[0]; - } - - $insert_array = array( - 'uid' => $user['uid'], - 'gid' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'oldgroup' => $user['usergroup'], - 'oldadditionalgroups' => $user['additionalgroups'], - 'olddisplaygroup' => $user['displaygroup'], - 'admin' => (int)$mybb->user['uid'], - 'dateline' => TIME_NOW, - 'bantime' => $db->escape_string($mybb->input['bantime']), - 'lifted' => $db->escape_string($lifted), - 'reason' => $db->escape_string($reason) - ); - $db->insert_query('banned', $insert_array); - - // Move the user to the banned group - $update_array = array( - 'usergroup' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'displaygroup' => 0, - 'additionalgroups' => '', - ); - - $db->delete_query("forumsubscriptions", "uid = '{$user['uid']}'"); - $db->delete_query("threadsubscriptions", "uid = '{$user['uid']}'"); - - $plugins->run_hooks("admin_user_banning_start_commit"); - - $db->update_query('users', $update_array, "uid = '{$user['uid']}'"); - - $cache->update_banned(); - - // Log admin action - log_admin_action($user['uid'], htmlspecialchars_uni($user['username']), $lifted); - - flash_message($lang->success_banned, 'success'); - admin_redirect("index.php?module=user-banning"); - } - } - } - - $page->output_header($lang->banned_accounts); - - $page->output_nav_tabs($sub_tabs, "bans"); - - $query = $db->simple_select("banned", "COUNT(*) AS ban_count", $where_sql); - $ban_count = $db->fetch_field($query, "ban_count"); - - $per_page = 20; - - if($mybb->input['page'] > 0) - { - $current_page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($current_page-1)*$per_page; - $pages = $ban_count / $per_page; - $pages = ceil($pages); - if($current_page > $pages) - { - $start = 0; - $current_page = 1; - } - } - else - { - $start = 0; - $current_page = 1; - } - - $pagination = draw_admin_pagination($current_page, $per_page, $ban_count, "index.php?module=user-banning&page={page}"); - - $table = new Table; - $table->construct_header($lang->user); - $table->construct_header($lang->ban_lifts_on, array("class" => "align_center", "width" => 150)); - $table->construct_header($lang->time_left, array("class" => "align_center", "width" => 150)); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200)); - $table->construct_header($lang->moderation, array("class" => "align_center", "colspan" => 1, "width" => 200)); - - // Fetch bans - $query = $db->query(" - SELECT b.*, a.username AS adminuser, u.username - FROM ".TABLE_PREFIX."banned b - LEFT JOIN ".TABLE_PREFIX."users u ON (b.uid=u.uid) - LEFT JOIN ".TABLE_PREFIX."users a ON (b.admin=a.uid) - {$where_sql_full} - ORDER BY dateline DESC - LIMIT {$start}, {$per_page} - "); - - // Get the banned users - while($ban = $db->fetch_array($query)) - { - $profile_link = build_profile_link(htmlspecialchars_uni($ban['username']), $ban['uid'], "_blank"); - $ban_date = my_date($mybb->settings['dateformat'], $ban['dateline']); - if($ban['lifted'] == 'perm' || $ban['lifted'] == '' || $ban['bantime'] == 'perm' || $ban['bantime'] == '---') - { - $ban_period = $lang->permenantly; - $time_remaining = $lifts_on = $lang->na; - } - else - { - $ban_period = $lang->for." ".$ban_times[$ban['bantime']]; - - $remaining = $ban['lifted']-TIME_NOW; - $time_remaining = nice_time($remaining, array('short' => 1, 'seconds' => false)).""; - - if($remaining < 3600) - { - $time_remaining = "{$time_remaining}"; - } - else if($remaining < 86400) - { - $time_remaining = "{$time_remaining}"; - } - else if($remaining < 604800) - { - $time_remaining = "{$time_remaining}"; - } - - $lifts_on = my_date($mybb->settings['dateformat'], $ban['lifted']); - } - - if(!$ban['adminuser']) - { - if($ban['admin'] == 0) - { - $ban['adminuser'] = $lang->mybb_engine; - } - else - { - $ban['adminuser'] = $ban['admin']; - } - } - - $table->construct_cell($lang->sprintf($lang->bannedby_x_on_x, $profile_link, htmlspecialchars_uni($ban['adminuser']), $ban_date, $ban_period)); - $table->construct_cell($lifts_on, array("class" => "align_center")); - $table->construct_cell($time_remaining, array("class" => "align_center")); - $table->construct_cell("{$lang->edit}", array("class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_lift_ban}');\">{$lang->lift}", array("class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_prune}');\">{$lang->prune_threads_and_posts}", array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_banned_users, array("colspan" => "6")); - $table->construct_row(); - } - $table->output($lang->banned_accounts); - echo $pagination; - - $form = new Form("index.php?module=user-banning", "post"); - if($errors) - { - $page->output_inline_error($errors); - } - - if($mybb->input['uid'] && !$mybb->input['username']) - { - $user = get_user($mybb->input['uid']); - $mybb->input['username'] = $user['username']; - } - - $form_container = new FormContainer($lang->ban_a_user); - $form_container->output_row($lang->ban_username, $lang->autocomplete_enabled, $form->generate_text_box('username', $mybb->input['username'], array('id' => 'username')), 'username'); - $form_container->output_row($lang->ban_reason, "", $form->generate_text_area('reason', $mybb->input['reason'], array('id' => 'reason', 'maxlength' => '255')), 'reason'); - if(count($banned_groups) > 1) - { - $form_container->output_row($lang->ban_group, $lang->add_ban_group_desc, $form->generate_select_box('usergroup', $banned_groups, $mybb->input['usergroup'], array('id' => 'usergroup')), 'usergroup'); - } - foreach($ban_times as $time => $period) - { - if($time != "---") - { - $friendly_time = my_date("D, jS M Y @ {$mybb->settings['timeformat']}", ban_date2timestamp($time)); - $period = "{$period} ({$friendly_time})"; - } - $length_list[$time] = $period; - } - $form_container->output_row($lang->ban_time, "", $form->generate_select_box('bantime', $length_list, $mybb->input['bantime'], array('id' => 'bantime')), 'bantime'); - - $form_container->end(); - - // Autocompletion for usernames - echo ' - - - '; - - $buttons[] = $form->generate_submit_button($lang->ban_user); - $buttons[] = $form->generate_submit_button($lang->search_for_a_user, array('name' => 'search')); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/user/group_promotions.php b/html/forums/admin/modules/user/group_promotions.php deleted file mode 100644 index ca150e2..0000000 --- a/html/forums/admin/modules/user/group_promotions.php +++ /dev/null @@ -1,769 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->user_group_promotions, "index.php?module=user-group_promotions"); - -$sub_tabs['usergroup_promotions'] = array( - 'title' => $lang->user_group_promotions, - 'link' => "index.php?module=user-group_promotions", - 'description' => $lang->user_group_promotions_desc -); - -$sub_tabs['add_promotion'] = array( - 'title' => $lang->add_new_promotion, - 'link' => "index.php?module=user-group_promotions&action=add", - 'description' => $lang->add_new_promotion_desc -); - -$sub_tabs['promotion_logs'] = array( - 'title' => $lang->view_promotion_logs, - 'link' => "index.php?module=user-group_promotions&action=logs", - 'description' => $lang->view_promotion_logs_desc -); - -$plugins->run_hooks("admin_user_group_promotions_begin"); - -if($mybb->input['action'] == "disable") -{ - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-group_promotions"); - } - - if(!trim($mybb->input['pid'])) - { - flash_message($lang->error_no_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $query = $db->simple_select("promotions", "*", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $promotion = $db->fetch_array($query); - - if(!$promotion['pid']) - { - flash_message($lang->error_invalid_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $plugins->run_hooks("admin_user_group_promotions_disable"); - - if($mybb->request_method == "post") - { - $update_promotion = array( - "enabled" => 0 - ); - - $plugins->run_hooks("admin_user_group_promotions_disable_commit"); - - $db->update_query("promotions", $update_promotion, "pid = '{$promotion['pid']}'"); - - // Log admin action - log_admin_action($promotion['pid'], $promotion['title']); - - flash_message($lang->success_promo_disabled, 'success'); - admin_redirect("index.php?module=user-group_promotions"); - } - else - { - $page->output_confirm_action("index.php?module=user-group_promotions&action=disable&pid={$promotion['pid']}", $lang->confirm_promo_disable); - } -} - -if($mybb->input['action'] == "delete") -{ - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-group_promotions"); - } - - if(!trim($mybb->input['pid'])) - { - flash_message($lang->error_no_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $query = $db->simple_select("promotions", "*", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $promotion = $db->fetch_array($query); - - if(!$promotion['pid']) - { - flash_message($lang->error_invalid_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $plugins->run_hooks("admin_user_group_promotions_delete"); - - if($mybb->request_method == "post") - { - $db->delete_query("promotions", "pid = '{$promotion['pid']}'"); - - $plugins->run_hooks("admin_user_group_promotions_delete_commit"); - - // Log admin action - log_admin_action($promotion['pid'], $promotion['title']); - - flash_message($lang->success_promo_deleted, 'success'); - admin_redirect("index.php?module=user-group_promotions"); - } - else - { - $page->output_confirm_action("index.php?module=user-group_promotions&action=delete&pid={$mybb->input['pid']}", $lang->confirm_promo_deletion); - } -} - -if($mybb->input['action'] == "enable") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - if(!trim($mybb->input['pid'])) - { - flash_message($lang->error_no_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $query = $db->simple_select("promotions", "*", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $promotion = $db->fetch_array($query); - - if(!$promotion['pid']) - { - flash_message($lang->error_invalid_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $plugins->run_hooks("admin_user_group_promotions_enable"); - - $update_promotion = array( - "enabled" => 1 - ); - - $plugins->run_hooks("admin_user_group_promotions_enable_commit"); - - $db->update_query("promotions", $update_promotion, "pid = '{$promotion['pid']}'"); - - // Log admin action - log_admin_action($promotion['pid'], $promotion['title']); - - flash_message($lang->success_promo_enabled, 'success'); - admin_redirect("index.php?module=user-group_promotions"); -} - -if($mybb->input['action'] == "edit") -{ - if(!trim($mybb->input['pid'])) - { - flash_message($lang->error_no_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $query = $db->simple_select("promotions", "*", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $promotion = $db->fetch_array($query); - - if(!$promotion) - { - flash_message($lang->error_invalid_promo_id, 'error'); - admin_redirect("index.php?module=user-group_promotions"); - } - - $plugins->run_hooks("admin_user_group_promotions_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_no_title; - } - - if(!trim($mybb->input['description'])) - { - $errors[] = $lang->error_no_desc; - } - - if(empty($mybb->input['requirements'])) - { - $errors[] = $lang->error_no_requirements; - } - - if(empty($mybb->input['originalusergroup'])) - { - $errors[] = $lang->error_no_orig_usergroup; - } - - if(!trim($mybb->input['newusergroup'])) - { - $errors[] = $lang->error_no_new_usergroup; - } - - if(!trim($mybb->input['usergroupchangetype'])) - { - $errors[] = $lang->error_no_usergroup_change_type; - } - - if(!$errors) - { - if(in_array('*', $mybb->input['originalusergroup'])) - { - $mybb->input['originalusergroup'] = '*'; - } - else - { - $mybb->input['originalusergroup'] = implode(',', array_map('intval', $mybb->input['originalusergroup'])); - } - - $allowed_operators = array('>', '>=', '=', '<=', '<'); - $operator_fields = array('posttype', 'threadtype', 'reputationtype', 'referralstype', 'warningstype'); - - foreach($operator_fields as $field) - { - if(!in_array($mybb->get_input($field), $allowed_operators)) - { - $mybb->input[$field] = '='; - } - } - - $allowed_times = array('hours', 'days', 'weeks', 'months', 'years'); - $time_fields = array('timeregisteredtype', 'timeonlinetype'); - - foreach($time_fields as $field) - { - if(!in_array($mybb->get_input($field), $allowed_times)) - { - $mybb->input[$field] = 'days'; - } - } - - $update_promotion = array( - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "posts" => $mybb->get_input('postcount', MyBB::INPUT_INT), - "posttype" => $db->escape_string($mybb->input['posttype']), - "threads" => $mybb->get_input('threadcount', MyBB::INPUT_INT), - "threadtype" => $db->escape_string($mybb->input['threadtype']), - "registered" => $mybb->get_input('timeregistered', MyBB::INPUT_INT), - "registeredtype" => $db->escape_string($mybb->input['timeregisteredtype']), - "online" => $mybb->get_input('timeonline', MyBB::INPUT_INT), - "onlinetype" => $db->escape_string($mybb->input['timeonlinetype']), - "reputations" => $mybb->get_input('reputationcount', MyBB::INPUT_INT), - "reputationtype" => $db->escape_string($mybb->input['reputationtype']), - "referrals" => $mybb->get_input('referrals', MyBB::INPUT_INT), - "referralstype" => $db->escape_string($mybb->input['referralstype']), - "warnings" => $mybb->get_input('warnings', MyBB::INPUT_INT), - "warningstype" => $db->escape_string($mybb->input['warningstype']), - "requirements" => $db->escape_string(implode(",", $mybb->input['requirements'])), - "originalusergroup" => $db->escape_string($mybb->input['originalusergroup']), - "newusergroup" => $mybb->get_input('newusergroup', MyBB::INPUT_INT), - "usergrouptype" => $db->escape_string($mybb->input['usergroupchangetype']), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "logging" => $mybb->get_input('logging', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_user_group_promotions_edit_commit"); - - $db->update_query("promotions", $update_promotion, "pid = '{$promotion['pid']}'"); - - // Log admin action - log_admin_action($promotion['pid'], $mybb->input['title']); - - flash_message($lang->success_promo_updated, 'success'); - admin_redirect("index.php?module=user-group_promotions"); - } - } - - $page->add_breadcrumb_item($lang->edit_promotion); - $page->output_header($lang->user_group_promotions." - ".$lang->edit_promotion); - - $sub_tabs = array(); - $sub_tabs['edit_promotion'] = array( - 'title' => $lang->edit_promotion, - 'link' => "index.php?module=user-group_promotions&action=edit", - 'description' => $lang->edit_promotion_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_promotion'); - $form = new Form("index.php?module=user-group_promotions&action=edit", "post", "edit"); - echo $form->generate_hidden_field("pid", $promotion['pid']); - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['title'] = $promotion['title']; - $mybb->input['description'] = $promotion['description']; - $mybb->input['requirements'] = explode(',', $promotion['requirements']); - $mybb->input['reputationcount'] = $promotion['reputations']; - $mybb->input['reputationtype'] = $promotion['reputationtype']; - $mybb->input['postcount'] = $promotion['posts']; - $mybb->input['posttype'] = $promotion['posttype']; - $mybb->input['threadcount'] = $promotion['threads']; - $mybb->input['threadtype'] = $promotion['threadtype']; - $mybb->input['referrals'] = $promotion['referrals']; - $mybb->input['referralstype'] = $promotion['referralstype']; - $mybb->input['warnings'] = $promotion['warnings']; - $mybb->input['warningstype'] = $promotion['warningstype']; - $mybb->input['timeregistered'] = $promotion['registered']; - $mybb->input['timeregisteredtype'] = $promotion['registeredtype']; - $mybb->input['timeonline'] = $promotion['online']; - $mybb->input['timeonlinetype'] = $promotion['onlinetype']; - $mybb->input['originalusergroup'] = explode(',', $promotion['originalusergroup']); - $mybb->input['usergroupchangetype'] = $promotion['usergrouptype']; - $mybb->input['newusergroup'] = $promotion['newusergroup']; - $mybb->input['enabled'] = $promotion['enabled']; - $mybb->input['logging'] = $promotion['logging']; - } - - $form_container = new FormContainer($lang->edit_promotion); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_desc." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $options = array( - "postcount" => $lang->post_count, - "threadcount" => $lang->thread_count, - "reputation" => $lang->reputation, - "referrals" => $lang->referrals, - "warnings" => $lang->warning_points, - "timeregistered" => $lang->time_registered, - "timeonline" => $lang->time_online - ); - - $form_container->output_row($lang->promo_requirements." *", $lang->promo_requirements_desc, $form->generate_select_box('requirements[]', $options, $mybb->input['requirements'], array('id' => 'requirements', 'multiple' => true, 'size' => 5)), 'requirements'); - - $options_type = array( - ">" => $lang->greater_than, - ">=" => $lang->greater_than_or_equal_to, - "=" => $lang->equal_to, - "<=" => $lang->less_than_or_equal_to, - "<" => $lang->less_than - ); - - $form_container->output_row($lang->post_count, $lang->post_count_desc, $form->generate_numeric_field('postcount', $mybb->input['postcount'], array('id' => 'postcount', 'min' => 0))." ".$form->generate_select_box("posttype", $options_type, $mybb->input['posttype'], array('id' => 'posttype')), 'postcount'); - - $form_container->output_row($lang->thread_count, $lang->thread_count_desc, $form->generate_numeric_field('threadcount', $mybb->input['threadcount'], array('id' => 'threadcount', 'min' => 0))." ".$form->generate_select_box("threadtype", $options_type, $mybb->input['threadtype'], array('id' => 'threadtype')), 'threadcount'); - - $form_container->output_row($lang->reputation_count, $lang->reputation_count_desc, $form->generate_numeric_field('reputationcount', $mybb->input['reputationcount'], array('id' => 'reputationcount', 'min' => 0))." ".$form->generate_select_box("reputationtype", $options_type, $mybb->input['reputationtype'], array('id' => 'reputationtype')), 'reputationcount'); - - $options = array( - "hours" => $lang->hours, - "days" => $lang->days, - "weeks" => $lang->weeks, - "months" => $lang->months, - "years" => $lang->years - ); - - $form_container->output_row($lang->referral_count, $lang->referral_count_desc, $form->generate_numeric_field('referrals', $mybb->input['referrals'], array('id' => 'referrals', 'min' => 0))." ".$form->generate_select_box("referralstype", $options_type, $mybb->input['referralstype'], array('id' => 'referralstype')), 'referrals'); - - $form_container->output_row($lang->warning_points, $lang->warning_points_desc, $form->generate_numeric_field('warnings', $mybb->input['warnings'], array('id' => 'warnings', 'min' => 0))." ".$form->generate_select_box("warningstype", $options_type, $mybb->input['warningstype'], array('id' => 'warningstype')), 'warnings'); - - $form_container->output_row($lang->time_registered, $lang->time_registered_desc, $form->generate_numeric_field('timeregistered', $mybb->input['timeregistered'], array('id' => 'timeregistered', 'min' => 0))." ".$form->generate_select_box("timeregisteredtype", $options, $mybb->input['timeregisteredtype'], array('id' => 'timeregisteredtype')), 'timeregistered'); - - $form_container->output_row($lang->time_online, $lang->time_online_desc, $form->generate_numeric_field('timeonline', $mybb->input['timeonline'], array('id' => 'timeonline', 'min' => 0))." ".$form->generate_select_box("timeonlinetype", $options, $mybb->input['timeonlinetype'], array('id' => 'timeonlinetype')), 'timeonline'); - - $options = array(); - - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[(int)$usergroup['gid']] = $usergroup['title']; - } - - $form_container->output_row($lang->orig_user_group." *", $lang->orig_user_group_desc, $form->generate_select_box('originalusergroup[]', $options, $mybb->input['originalusergroup'], array('id' => 'originalusergroup', 'multiple' => true, 'size' => 5)), 'originalusergroup'); - - unset($options['*']); // Remove the all usergroups option - $form_container->output_row($lang->new_user_group." *", $lang->new_user_group_desc, $form->generate_select_box('newusergroup', $options, $mybb->input['newusergroup'], array('id' => 'newusergroup')), 'newusergroup'); - - $options = array( - 'primary' => $lang->primary_user_group, - 'secondary' => $lang->secondary_user_group - ); - - $form_container->output_row($lang->user_group_change_type." *", $lang->user_group_change_type_desc, $form->generate_select_box('usergroupchangetype', $options, $mybb->input['usergroupchangetype'], array('id' => 'usergroupchangetype')), 'usergroupchangetype'); - - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio("enabled", $mybb->input['enabled'], true)); - - $form_container->output_row($lang->enable_logging." *", "", $form->generate_yes_no_radio("logging", $mybb->input['logging'], true)); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->update_promotion); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_user_group_promotions_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_no_title; - } - - if(!trim($mybb->input['description'])) - { - $errors[] = $lang->error_no_desc; - } - - if(empty($mybb->input['requirements'])) - { - $errors[] = $lang->error_no_requirements; - } - - if(empty($mybb->input['originalusergroup'])) - { - $errors[] = $lang->error_no_orig_usergroup; - } - - if(!trim($mybb->input['newusergroup'])) - { - $errors[] = $lang->error_no_new_usergroup; - } - - if(!trim($mybb->input['usergroupchangetype'])) - { - $errors[] = $lang->error_no_usergroup_change_type; - } - - if(!$errors) - { - if(in_array('*', $mybb->input['originalusergroup'])) - { - $mybb->input['originalusergroup'] = '*'; - } - else - { - $mybb->input['originalusergroup'] = implode(',', array_map('intval', $mybb->input['originalusergroup'])); - } - - $allowed_operators = array('>', '>=', '=', '<=', '<'); - $operator_fields = array('posttype', 'threadtype', 'reputationtype', 'referralstype', 'warningstype'); - - foreach($operator_fields as $field) - { - if(!in_array($mybb->get_input($field), $allowed_operators)) - { - $mybb->input[$field] = '='; - } - } - - $allowed_times = array('hours', 'days', 'weeks', 'months', 'years'); - $time_fields = array('timeregisteredtype', 'timeonlinetype'); - - foreach($time_fields as $field) - { - if(!in_array($mybb->get_input($field), $allowed_times)) - { - $mybb->input[$field] = 'days'; - } - } - - $new_promotion = array( - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "posts" => $mybb->get_input('postcount', MyBB::INPUT_INT), - "posttype" => $db->escape_string($mybb->input['posttype']), - "threads" => $mybb->get_input('threadcount', MyBB::INPUT_INT), - "threadtype" => $db->escape_string($mybb->input['threadtype']), - "registered" => $mybb->get_input('timeregistered', MyBB::INPUT_INT), - "registeredtype" => $db->escape_string($mybb->input['timeregisteredtype']), - "online" => $mybb->get_input('timeonline', MyBB::INPUT_INT), - "onlinetype" => $db->escape_string($mybb->input['timeonlinetype']), - "reputations" => $mybb->get_input('reputationcount', MyBB::INPUT_INT), - "reputationtype" => $db->escape_string($mybb->input['reputationtype']), - "referrals" => $mybb->get_input('referrals', MyBB::INPUT_INT), - "referralstype" => $db->escape_string($mybb->input['referralstype']), - "warnings" => $mybb->get_input('warnings', MyBB::INPUT_INT), - "warningstype" => $db->escape_string($mybb->input['warningstype']), - "requirements" => $db->escape_string(implode(",", $mybb->input['requirements'])), - "originalusergroup" => $db->escape_string($mybb->input['originalusergroup']), - "usergrouptype" => $db->escape_string($mybb->input['usergroupchangetype']), - "newusergroup" => $mybb->get_input('newusergroup', MyBB::INPUT_INT), - "enabled" => $mybb->get_input('enabled', MyBB::INPUT_INT), - "logging" => $mybb->get_input('logging', MyBB::INPUT_INT) - ); - - $pid = $db->insert_query("promotions", $new_promotion); - - $plugins->run_hooks("admin_user_group_promotions_add_commit"); - - // Log admin action - log_admin_action($pid, $mybb->input['title']); - - flash_message($lang->success_promo_added, 'success'); - admin_redirect("index.php?module=user-group_promotions"); - } - } - $page->add_breadcrumb_item($lang->add_new_promotion); - $page->output_header($lang->user_group_promotions." - ".$lang->add_new_promotion); - - $sub_tabs['usergroup_promotions'] = array( - 'title' => $lang->user_group_promotions, - 'link' => "index.php?module=user-group_promotions" - ); - - $sub_tabs['add_promotion'] = array( - 'title' => $lang->add_new_promotion, - 'link' => "index.php?module=user-group_promotions&action=add", - 'description' => $lang->add_new_promotion_desc - ); - - $sub_tabs['promotion_logs'] = array( - 'title' => $lang->view_promotion_logs, - 'link' => "index.php?module=user-group_promotions&action=logs" - ); - - $page->output_nav_tabs($sub_tabs, 'add_promotion'); - $form = new Form("index.php?module=user-group_promotions&action=add", "post", "add"); - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input['reputationcount'] = '0'; - $mybb->input['referrals'] = '0'; - $mybb->input['warnings'] = '0'; - $mybb->input['postcount'] = '0'; - $mybb->input['threadcount'] = '0'; - $mybb->input['timeregistered'] = '0'; - $mybb->input['timeregisteredtype'] = 'days'; - $mybb->input['timeonline'] = '0'; - $mybb->input['timeonlinetype'] = 'days'; - $mybb->input['originalusergroup'] = '*'; - $mybb->input['newusergroup'] = '2'; - $mybb->input['enabled'] = '1'; - $mybb->input['logging'] = '1'; - } - $form_container = new FormContainer($lang->add_new_promotion); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_desc." *", "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - - $options = array( - "postcount" => $lang->post_count, - "threadcount" => $lang->thread_count, - "reputation" => $lang->reputation, - "referrals" => $lang->referrals, - "warnings" => $lang->warning_points, - "timeregistered" => $lang->time_registered, - "timeonline" => $lang->time_online - ); - - $form_container->output_row($lang->promo_requirements." *", $lang->promo_requirements_desc, $form->generate_select_box('requirements[]', $options, $mybb->input['requirements'], array('id' => 'requirements', 'multiple' => true, 'size' => 5)), 'requirements'); - - $options_type = array( - ">" => $lang->greater_than, - ">=" => $lang->greater_than_or_equal_to, - "=" => $lang->equal_to, - "<=" => $lang->less_than_or_equal_to, - "<" => $lang->less_than - ); - - $form_container->output_row($lang->post_count, $lang->post_count_desc, $form->generate_numeric_field('postcount', $mybb->input['postcount'], array('id' => 'postcount', 'min' => 0))." ".$form->generate_select_box("posttype", $options_type, $mybb->input['posttype'], array('id' => 'posttype')), 'postcount'); - - $form_container->output_row($lang->thread_count, $lang->thread_count_desc, $form->generate_numeric_field('threadcount', $mybb->input['threadcount'], array('id' => 'threadcount', 'min' => 0))." ".$form->generate_select_box("threadtype", $options_type, $mybb->input['threadtype'], array('id' => 'threadtype')), 'threadcount'); - - $form_container->output_row($lang->reputation_count, $lang->reputation_count_desc, $form->generate_numeric_field('reputationcount', $mybb->input['reputationcount'], array('id' => 'reputationcount', 'min' => 0))." ".$form->generate_select_box("reputationtype", $options_type, $mybb->input['reputationtype'], array('id' => 'reputationtype')), 'reputationcount'); - - $options = array( - "hours" => $lang->hours, - "days" => $lang->days, - "weeks" => $lang->weeks, - "months" => $lang->months, - "years" => $lang->years - ); - - $form_container->output_row($lang->referral_count, $lang->referral_count_desc, $form->generate_numeric_field('referrals', $mybb->input['referrals'], array('id' => 'referrals', 'min' => 0))." ".$form->generate_select_box("referralstype", $options_type, $mybb->input['referralstype'], array('id' => 'referralstype')), 'referrals'); - - $form_container->output_row($lang->warning_points, $lang->warning_points_desc, $form->generate_numeric_field('warnings', $mybb->input['warnings'], array('id' => 'warnings', 'min' => 0))." ".$form->generate_select_box("warningstype", $options_type, $mybb->input['warningstype'], array('id' => 'warningstype')), 'warnings'); - - $form_container->output_row($lang->time_registered, $lang->time_registered_desc, $form->generate_numeric_field('timeregistered', $mybb->input['timeregistered'], array('id' => 'timeregistered', 'min' => 0))." ".$form->generate_select_box("timeregisteredtype", $options, $mybb->input['timeregisteredtype'], array('id' => 'timeregisteredtype')), 'timeregistered'); - - $form_container->output_row($lang->time_online, $lang->time_online_desc, $form->generate_numeric_field('timeonline', $mybb->input['timeonline'], array('id' => 'timeonline', 'min' => 0))." ".$form->generate_select_box("timeonlinetype", $options, $mybb->input['timeonlinetype'], array('id' => 'timeonlinetype')), 'timeonline'); - $options = array(); - - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[(int)$usergroup['gid']] = $usergroup['title']; - } - - $form_container->output_row($lang->orig_user_group." *", $lang->orig_user_group_desc, $form->generate_select_box('originalusergroup[]', $options, $mybb->input['originalusergroup'], array('id' => 'originalusergroup', 'multiple' => true, 'size' => 5)), 'originalusergroup'); - - unset($options['*']); - $form_container->output_row($lang->new_user_group." *", $lang->new_user_group_desc, $form->generate_select_box('newusergroup', $options, $mybb->input['newusergroup'], array('id' => 'newusergroup')), 'newusergroup'); - - $options = array( - 'primary' => $lang->primary_user_group, - 'secondary' => $lang->secondary_user_group - ); - - $form_container->output_row($lang->user_group_change_type." *", $lang->user_group_change_type_desc, $form->generate_select_box('usergroupchangetype', $options, $mybb->input['usergroupchangetype'], array('id' => 'usergroupchangetype')), 'usergroupchangetype'); - - $form_container->output_row($lang->enabled." *", "", $form->generate_yes_no_radio("enabled", $mybb->input['enabled'], true)); - - $form_container->output_row($lang->enable_logging." *", "", $form->generate_yes_no_radio("logging", $mybb->input['logging'], true)); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->update_promotion); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "logs") -{ - $plugins->run_hooks("admin_user_group_promotions_logs"); - - if($mybb->get_input('page', MyBB::INPUT_INT) > 1) - { - $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($mybb->input['page']*20)-20; - } - else - { - $mybb->input['page'] = 1; - $start = 0; - } - - $page->add_breadcrumb_item($lang->promotion_logs); - $page->output_header($lang->user_group_promotions." - ".$lang->promotion_logs); - - $page->output_nav_tabs($sub_tabs, 'promotion_logs'); - - $table = new Table; - $table->construct_header($lang->promoted_user, array("class" => "align_center", "width" => '20%')); - $table->construct_header($lang->user_group_change_type, array("class" => "align_center", "width" => '20%')); - $table->construct_header($lang->orig_user_group, array("class" => "align_center", "width" => '20%')); - $table->construct_header($lang->new_user_group, array("class" => "align_center", "width" => '20%')); - $table->construct_header($lang->time_promoted, array("class" => "align_center", "width" => '20%')); - - $query = $db->query(" - SELECT pl.*,u.username - FROM ".TABLE_PREFIX."promotionlogs pl - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=pl.uid) - ORDER BY dateline DESC - LIMIT {$start}, 20 - "); - while($log = $db->fetch_array($query)) - { - $log['username'] = "".htmlspecialchars_uni($log['username']).""; - - if($log['type'] == "secondary" || (!empty($log['oldusergroup']) && strstr(",", $log['oldusergroup']))) - { - $log['oldusergroup'] = "".$lang->multiple_usergroups.""; - $log['newusergroup'] = htmlspecialchars_uni($groupscache[$log['newusergroup']]['title']); - } - else - { - $log['oldusergroup'] = htmlspecialchars_uni($groupscache[$log['oldusergroup']]['title']); - $log['newusergroup'] = htmlspecialchars_uni($groupscache[$log['newusergroup']]['title']); - } - - if($log['type'] == "secondary") - { - $log['type'] = $lang->secondary; - } - else - { - $log['type'] = $lang->primary; - } - - $log['dateline'] = date($mybb->settings['dateformat'], $log['dateline']).", ".date($mybb->settings['timeformat'], $log['dateline']); - $table->construct_cell($log['username']); - $table->construct_cell($log['type'], array('style' => 'text-align: center;')); - $table->construct_cell($log['oldusergroup'], array('style' => 'text-align: center;')); - $table->construct_cell($log['newusergroup'], array('style' => 'text-align: center;')); - $table->construct_cell($log['dateline'], array('style' => 'text-align: center;')); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_promotion_logs, array("colspan" => "5")); - $table->construct_row(); - } - - $table->output($lang->promotion_logs); - - $query = $db->simple_select("promotionlogs", "COUNT(plid) as promotionlogs"); - $total_rows = $db->fetch_field($query, "promotionlogs"); - - echo "
".draw_admin_pagination($mybb->input['page'], "20", $total_rows, "index.php?module=user-group_promotions&action=logs&page={page}"); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_user_group_promotions_start"); - - $page->output_header($lang->promotion_manager); - - $page->output_nav_tabs($sub_tabs, 'usergroup_promotions'); - - $table = new Table; - $table->construct_header($lang->promotion); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 150)); - - $query = $db->simple_select("promotions", "*", "", array("order_by" => "title", "order_dir" => "asc")); - while($promotion = $db->fetch_array($query)) - { - $promotion['title'] = htmlspecialchars_uni($promotion['title']); - $promotion['description'] = htmlspecialchars_uni($promotion['description']); - if($promotion['enabled'] == 1) - { - $icon = "style}/images/icons/bullet_on.png\" alt=\"({$lang->alt_enabled})\" title=\"{$lang->alt_enabled}\" style=\"vertical-align: middle;\" /> "; - } - else - { - $icon = "style}/images/icons/bullet_off.png\" alt=\"({$lang->alt_disabled})\" title=\"{$lang->alt_disabled}\" style=\"vertical-align: middle;\" /> "; - } - - $table->construct_cell("
{$icon}{$promotion['title']}
{$promotion['description']}
"); - - $popup = new PopupMenu("promotion_{$promotion['pid']}", $lang->options); - $popup->add_item($lang->edit_promotion, "index.php?module=user-group_promotions&action=edit&pid={$promotion['pid']}"); - if($promotion['enabled'] == 1) - { - $popup->add_item($lang->disable_promotion, "index.php?module=user-group_promotions&action=disable&pid={$promotion['pid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_promo_disable}')"); - } - else - { - $popup->add_item($lang->enable_promotion, "index.php?module=user-group_promotions&action=enable&pid={$promotion['pid']}&my_post_key={$mybb->post_code}"); - } - $popup->add_item($lang->delete_promotion, "index.php?module=user-group_promotions&action=delete&pid={$promotion['pid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_promo_deletion}')"); - $table->construct_cell($popup->fetch(), array("class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_promotions_set, array("colspan" => "2")); - $table->construct_row(); - } - - $table->output($lang->user_group_promotions); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/user/groups.php b/html/forums/admin/modules/user/groups.php deleted file mode 100644 index 1e57f62..0000000 --- a/html/forums/admin/modules/user/groups.php +++ /dev/null @@ -1,1546 +0,0 @@ - 0, - "canview" => 1, - "canviewthreads" => 1, - "canviewprofiles" => 1, - "candlattachments" => 1, - "canviewboardclosed" => 1, - "canpostthreads" => 1, - "canpostreplys" => 1, - "canpostattachments" => 1, - "canratethreads" => 1, - "modposts" => 0, - "modthreads" => 0, - "modattachments" => 0, - "mod_edit_posts" => 0, - "caneditposts" => 1, - "candeleteposts" => 1, - "candeletethreads" => 1, - "caneditattachments" => 1, - "canviewdeletionnotice" => 1, - "canpostpolls" => 1, - "canvotepolls" => 1, - "canundovotes" => 0, - "canusepms" => 1, - "cansendpms" => 1, - "cantrackpms" => 1, - "candenypmreceipts" => 1, - "pmquota" => 100, - "maxpmrecipients" => 5, - "cansendemail" => 1, - "cansendemailoverride" => 0, - "maxemails" => 4, - "emailfloodtime" => 5, - "canviewmemberlist" => 1, - "canviewcalendar" => 1, - "canaddevents" => 1, - "canbypasseventmod" => 0, - "canmoderateevents" => 0, - "canviewonline" => 1, - "canviewwolinvis" => 0, - "canviewonlineips" => 0, - "cancp" => 0, - "issupermod" => 0, - "cansearch" => 1, - "canusercp" => 1, - "canuploadavatars" => 1, - "canratemembers" => 1, - "canchangename" => 0, - "canbereported" => 0, - "canchangewebsite" => 1, - "showforumteam" => 0, - "usereputationsystem" => 1, - "cangivereputations" => 1, - "candeletereputations" => 1, - "reputationpower" => 1, - "maxreputationsday" => 5, - "maxreputationsperuser" => 0, - "maxreputationsperthread" => 0, - "candisplaygroup" => 0, - "attachquota" => 5000, - "cancustomtitle" => 0, - "canwarnusers" => 0, - "canreceivewarnings" => 1, - "maxwarningsday" => 0, - "canmodcp" => 0, - "showinbirthdaylist" => 0, - "canoverridepm" => 0, - "canusesig" => 0, - "canusesigxposts" => 0, - "signofollow" => 0, - "edittimelimit" => 0, - "maxposts" => 0, - "showmemberlist" => 1, - "canmanageannounce" => 0, - "canmanagemodqueue" => 0, - "canmanagereportedcontent" => 0, - "canviewmodlogs" => 0, - "caneditprofiles" => 0, - "canbanusers" => 0, - "canviewwarnlogs" => 0, - "canuseipsearch" => 0 -); - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->user_groups, "index.php?module=user-groups"); - -if($mybb->input['action'] == "add" || !$mybb->input['action']) -{ - $sub_tabs['manage_groups'] = array( - 'title' => $lang->manage_user_groups, - 'link' => "index.php?module=user-groups", - 'description' => $lang->manage_user_groups_desc - ); - $sub_tabs['add_group'] = array( - 'title' => $lang->add_user_group, - 'link' => "index.php?module=user-groups&action=add", - 'description' => $lang->add_user_group_desc - ); -} - -$plugins->run_hooks("admin_user_groups_begin"); - -if($mybb->input['action'] == "approve_join_request") -{ - $query = $db->simple_select("joinrequests", "*", "rid='".$mybb->input['rid']."'"); - $request = $db->fetch_array($query); - - if(!$request['rid']) - { - flash_message($lang->error_invalid_join_request, 'error'); - admin_redirect("index.php?module=user-groups"); - } - - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); - } - - $plugins->run_hooks("admin_user_groups_approve_join_request"); - - // Add the user to the group - join_usergroup($request['uid'], $request['gid']); - - // Delete the join request - $db->delete_query("joinrequests", "rid='{$request['rid']}'"); - - $plugins->run_hooks("admin_user_groups_approve_join_request_commit"); - - flash_message($lang->success_join_request_approved, "success"); - admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); -} - -if($mybb->input['action'] == "deny_join_request") -{ - $query = $db->simple_select("joinrequests", "*", "rid='".$mybb->input['rid']."'"); - $request = $db->fetch_array($query); - - if(!$request['rid']) - { - flash_message($lang->error_invalid_join_request, 'error'); - admin_redirect("index.php?module=user-groups"); - } - - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); - } - - $plugins->run_hooks("admin_user_groups_deny_join_request"); - - // Delete the join request - $db->delete_query("joinrequests", "rid='{$request['rid']}'"); - - $plugins->run_hooks("admin_user_groups_deny_join_request_commit"); - - flash_message($lang->success_join_request_denied, "success"); - admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); -} - -if($mybb->input['action'] == "join_requests") -{ - $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $group = $db->fetch_array($query); - - if(!$group['gid'] || $group['type'] != 4) - { - flash_message($lang->error_invalid_user_group, 'error'); - admin_redirect("index.php?module=user-groups"); - } - - $plugins->run_hooks("admin_user_groups_join_requests_start"); - - if($mybb->request_method == "post" && is_array($mybb->input['users'])) - { - $uid_in = implode(",", array_map('intval', $mybb->input['users'])); - - if(isset($mybb->input['approve'])) - { - foreach($mybb->input['users'] as $uid) - { - $uid = (int)$uid; - join_usergroup($uid, $group['gid']); - } - // Log admin action - log_admin_action("approve", htmlspecialchars_uni($group['title']), $group['gid']); - $message = $lang->success_selected_requests_approved; - } - else - { - // Log admin action - log_admin_action("deny", htmlspecialchars_uni($group['title']), $group['gid']); - $message = $lang->success_selected_requests_denied; - } - - $plugins->run_hooks("admin_user_groups_join_requests_commit"); - - // Go through and delete the join requests from the database - $db->delete_query("joinrequests", "uid IN ({$uid_in}) AND gid='{$group['gid']}'"); - - $plugins->run_hooks("admin_user_groups_join_requests_commit_end"); - - flash_message($message, 'success'); - admin_redirect("index.php?module=user-groups&action=join_requests&gid={$group['gid']}"); - } - - $page->add_breadcrumb_item($lang->join_requests_for.' '.htmlspecialchars_uni($group['title'])); - $page->output_header($lang->join_requests_for.' '.htmlspecialchars_uni($group['title'])); - - $sub_tabs = array(); - $sub_tabs['join_requests'] = array( - 'title' => $lang->group_join_requests, - 'link' => "index.php?module=user-groups&action=join_requests&gid={$group['gid']}", - 'description' => $lang->group_join_requests_desc - ); - - $page->output_nav_tabs($sub_tabs, 'join_requests'); - - $query = $db->simple_select("joinrequests", "COUNT(*) AS num_requests", "gid='{$group['gid']}'"); - $num_requests = $db->fetch_field($query, "num_requests"); - - $per_page = 20; - - if($mybb->input['page'] > 0) - { - $current_page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($current_page-1)*$per_page; - $pages = $num_requests / $per_page; - $pages = ceil($pages); - if($current_page > $pages) - { - $start = 0; - $current_page = 1; - } - } - else - { - $start = 0; - $current_page = 1; - } - - // Do we need to construct the pagination? - $pagination = ''; - if($num_requests > $per_page) - { - $pagination = draw_admin_pagination($page, $per_page, $num_requests, "index.php?module=user-groups&action=join_requests&gid={$group['gid']}"); - echo $pagination; - } - - $form = new Form("index.php?module=user-groups&action=join_requests&gid={$group['gid']}", "post"); - $table = new Table; - $table->construct_header($form->generate_check_box("checkall", 1, "", array('class' => 'checkall')), array('width' => 1)); - $table->construct_header($lang->users); - $table->construct_header($lang->reason); - $table->construct_header($lang->date_requested, array("class" => 'align_center', "width" => 200)); - $table->construct_header($lang->controls, array("class" => "align_center", "width" => 200)); - - $query = $db->query(" - SELECT j.*, u.username - FROM ".TABLE_PREFIX."joinrequests j - INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=j.uid) - WHERE j.gid='{$group['gid']}' - ORDER BY dateline ASC - LIMIT {$start}, {$per_page} - "); - - while($request = $db->fetch_array($query)) - { - $table->construct_cell($form->generate_check_box("users[]", $request['uid'], "")); - $table->construct_cell("".build_profile_link(htmlspecialchars_uni($request['username']), $request['uid'], "_blank").""); - $table->construct_cell(htmlspecialchars_uni($request['reason'])); - $table->construct_cell(my_date('relative', $request['dateline']), array('class' => 'align_center')); - - $popup = new PopupMenu("join_{$request['rid']}", $lang->options); - $popup->add_item($lang->approve, "index.php?module=user-groups&action=approve_join_request&rid={$request['rid']}&my_post_key={$mybb->post_code}"); - $popup->add_item($lang->deny, "index.php?module=user-groups&action=deny_join_request&rid={$request['rid']}&my_post_key={$mybb->post_code}"); - - $table->construct_cell($popup->fetch(), array('class' => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_join_requests, array("colspan" => 6)); - $table->construct_row(); - } - - $table->output($lang->join_requests_for.' '.htmlspecialchars_uni($group['title'])); - echo $pagination; - - $buttons[] = $form->generate_submit_button($lang->approve_selected_requests, array('name' => 'approve')); - $buttons[] = $form->generate_submit_button($lang->deny_selected_requests, array('name' => 'deny')); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} -if($mybb->input['action'] == "add_leader" && $mybb->request_method == "post") -{ - $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $group = $db->fetch_array($query); - - if(!$group['gid']) - { - flash_message($lang->error_invalid_user_group, 'error'); - admin_redirect("index.php?module=user-group"); - } - - $plugins->run_hooks("admin_user_groups_add_leader"); - - $user = get_user_by_username($mybb->input['username'], array('fields' => 'username')); - if(!$user['uid']) - { - $errors[] = $lang->error_invalid_username; - } - else - { - // Is this user already a leader of this group? - $query = $db->simple_select("groupleaders", "uid", "uid='{$user['uid']}' AND gid='{$group['gid']}'"); - $existing_leader = $db->fetch_field($query, "uid"); - if($existing_leader) - { - $errors[] = $lang->error_already_leader; - } - } - - // No errors, insert - if(!$errors) - { - $new_leader = array( - "gid" => $group['gid'], - "uid" => $user['uid'], - "canmanagemembers" => $mybb->get_input('canmanagemembers', MyBB::INPUT_INT), - "canmanagerequests" => $mybb->get_input('canmanagerequests', MyBB::INPUT_INT), - "caninvitemembers" => $mybb->get_input('caninvitemembers', MyBB::INPUT_INT) - ); - - $makeleadermember = $mybb->get_input('makeleadermember', MyBB::INPUT_INT); - if($makeleadermember == 1) - { - join_usergroup($user['uid'], $group['gid']); - } - - $plugins->run_hooks("admin_user_groups_add_leader_commit"); - - $db->insert_query("groupleaders", $new_leader); - - $cache->update_groupleaders(); - - // Log admin action - log_admin_action($user['uid'], htmlspecialchars_uni($user['username']), $group['gid'], htmlspecialchars_uni($group['title'])); - - $username = htmlspecialchars_uni($user['username']); - flash_message("{$username} ".$lang->success_user_made_leader, 'success'); - admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}"); - } - else - { - // Errors, show leaders page - $mybb->input['action'] = "leaders"; - } -} - -// Show a listing of group leaders -if($mybb->input['action'] == "leaders") -{ - $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $group = $db->fetch_array($query); - - if(!$group['gid']) - { - flash_message($lang->error_invalid_user_group, 'error'); - admin_redirect("index.php?module=user-groups"); - } - - $plugins->run_hooks("admin_user_groups_leaders"); - - $page->add_breadcrumb_item($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title'])); - $page->output_header($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title'])); - - $sub_tabs = array(); - $sub_tabs['group_leaders'] = array( - 'title' => $lang->manage_group_leaders, - 'link' => "index.php?module=user-groups&action=leaders&gid={$group['gid']}", - 'description' => $lang->manage_group_leaders_desc - ); - - $page->output_nav_tabs($sub_tabs, 'group_leaders'); - - $table = new Table; - $table->construct_header($lang->user); - $table->construct_header($lang->can_manage_members, array("class" => 'align_center', "width" => 200)); - $table->construct_header($lang->can_manage_join_requests, array("class" => 'align_center', "width" => 200)); - $table->construct_header($lang->can_invite_members, array("class" => 'align_center', "width" => 200)); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200)); - - $query = $db->query(" - SELECT g.*, u.username - FROM ".TABLE_PREFIX."groupleaders g - INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=g.uid) - WHERE g.gid='{$group['gid']}' - ORDER BY u.username ASC - "); - while($leader = $db->fetch_array($query)) - { - $leader['username'] = htmlspecialchars_uni($leader['username']); - if($leader['canmanagemembers']) - { - $canmanagemembers = $lang->yes; - } - else - { - $canmanagemembers = $lang->no; - } - - if($leader['canmanagerequests']) - { - $canmanagerequests = $lang->yes; - } - else - { - $canmanagerequests = $lang->no; - } - - if($leader['caninvitemembers']) - { - $caninvitemembers = $lang->yes; - } - else - { - $caninvitemembers = $lang->no; - } - - $table->construct_cell("".build_profile_link($leader['username'], $leader['uid'], "_blank").""); - $table->construct_cell($canmanagemembers, array("class" => "align_center")); - $table->construct_cell($canmanagerequests, array("class" => "align_center")); - $table->construct_cell($caninvitemembers, array("class" => "align_center")); - $table->construct_cell("{$lang->edit}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_group_leader_deletion}')\">{$lang->delete}", array("width" => 100, "class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_assigned_leaders, array("colspan" => 5)); - $table->construct_row(); - } - - $table->output($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title'])); - - $form = new Form("index.php?module=user-groups&action=add_leader&gid={$group['gid']}", "post"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, array( - "canmanagemembers" => 1, - "canmanagerequests" => 1, - "caninvitemembers" => 1, - "makeleadermember" => 0 - ) - ); - } - - $form_container = new FormContainer($lang->add_group_leader.' '.htmlspecialchars_uni($group['title'])); - $form_container->output_row($lang->username." *", "", $form->generate_text_box('username', htmlspecialchars_uni($mybb->get_input('username')), array('id' => 'username')), 'username'); - $form_container->output_row($lang->can_manage_group_members, $lang->can_manage_group_members_desc, $form->generate_yes_no_radio('canmanagemembers', $mybb->input['canmanagemembers'])); - $form_container->output_row($lang->can_manage_group_join_requests, $lang->can_manage_group_join_requests_desc, $form->generate_yes_no_radio('canmanagerequests', $mybb->input['canmanagerequests'])); - $form_container->output_row($lang->can_invite_group_members, $lang->can_invite_group_members_desc, $form->generate_yes_no_radio('caninvitemembers', $mybb->input['caninvitemembers'])); - $form_container->output_row($lang->make_user_member, $lang->make_user_member_desc, $form->generate_yes_no_radio('makeleadermember', $mybb->input['makeleadermember'])); - $form_container->end(); - - // Autocompletion for usernames - echo ' - - - '; - - $buttons[] = $form->generate_submit_button($lang->save_group_leader); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete_leader") -{ - $query = $db->query(" - SELECT l.*, u.username - FROM ".TABLE_PREFIX."groupleaders l - INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - WHERE l.lid='".$mybb->get_input('lid', MyBB::INPUT_INT)."'"); - $leader = $db->fetch_array($query); - - if(!$leader['lid']) - { - flash_message($lang->error_invalid_group_leader, 'error'); - admin_redirect("index.php?module=user-groups"); - } - - $query = $db->simple_select("usergroups", "*", "gid='{$leader['gid']}'"); - $group = $db->fetch_array($query); - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-groups"); - } - - $plugins->run_hooks("admin_user_groups_delete_leader"); - - if($mybb->request_method == "post") - { - $plugins->run_hooks("admin_user_groups_delete_leader_commit"); - - // Delete the leader - $db->delete_query("groupleaders", "lid='{$leader['lid']}'"); - - $plugins->run_hooks("admin_user_groups_delete_leader_commit_end"); - - $cache->update_groupleaders(); - - // Log admin action - log_admin_action($leader['uid'], htmlspecialchars_uni($leader['username']), $group['gid'], htmlspecialchars_uni($group['title'])); - - flash_message($lang->success_group_leader_deleted, 'success'); - admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}"); - } - else - { - $page->output_confirm_action("index.php?module=user-groups&action=delete_leader&lid={$leader['lid']}", $lang->confirm_group_leader_deletion); - } -} - -if($mybb->input['action'] == "edit_leader") -{ - $query = $db->query(" - SELECT l.*, u.username - FROM ".TABLE_PREFIX."groupleaders l - INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - WHERE l.lid='".$mybb->get_input('lid', MyBB::INPUT_INT)."' - "); - $leader = $db->fetch_array($query); - - if(!$leader['lid']) - { - flash_message($lang->error_invalid_group_leader, 'error'); - admin_redirect("index.php?module=user-groups"); - } - - $query = $db->simple_select("usergroups", "*", "gid='{$leader['gid']}'"); - $group = $db->fetch_array($query); - - $plugins->run_hooks("admin_user_groups_edit_leader"); - - if($mybb->request_method == "post") - { - $updated_leader = array( - "canmanagemembers" => $mybb->get_input('canmanagemembers', MyBB::INPUT_INT), - "canmanagerequests" => $mybb->get_input('canmanagerequests', MyBB::INPUT_INT), - "caninvitemembers" => $mybb->get_input('caninvitemembers', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_user_groups_edit_leader_commit"); - - $db->update_query("groupleaders", $updated_leader, "lid={$leader['lid']}"); - - $cache->update_groupleaders(); - - // Log admin action - log_admin_action($leader['uid'], htmlspecialchars_uni($leader['username']), $group['gid'], htmlspecialchars_uni($group['title'])); - - flash_message($lang->success_group_leader_updated, 'success'); - admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}"); - } - - if(!$errors) - { - $mybb->input = array_merge($mybb->input, $leader); - } - - $page->add_breadcrumb_item($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title']), "index.php?module=user-groups&action=leaders&gid={$group['gid']}"); - $leader['username'] = htmlspecialchars_uni($leader['username']); - $page->add_breadcrumb_item($lang->edit_leader." {$leader['username']}"); - - $page->output_header($lang->edit_group_leader); - - $sub_tabs = array(); - $sub_tabs['group_leaders'] = array( - 'title' => $lang->edit_group_leader, - 'link' => "index.php?module=user-groups&action=edit_leader&lid={$leader['lid']}", - 'description' => $lang->edit_group_leader_desc - ); - - $page->output_nav_tabs($sub_tabs, 'group_leaders'); - - $form = new Form("index.php?module=user-groups&action=edit_leader&lid={$leader['lid']}", "post"); - - $form_container = new FormContainer($lang->edit_group_leader); - $form_container->output_row($lang->username." *", "", $leader['username']); - - $form_container->output_row($lang->can_manage_group_members, $lang->can_manage_group_members_desc, $form->generate_yes_no_radio('canmanagemembers', $mybb->input['canmanagemembers'])); - $form_container->output_row($lang->can_manage_group_join_requests, $lang->can_manage_group_join_requests_desc, $form->generate_yes_no_radio('canmanagerequests', $mybb->input['canmanagerequests'])); - $form_container->output_row($lang->can_invite_group_members, $lang->can_invite_group_members_desc, $form->generate_yes_no_radio('caninvitemembers', $mybb->input['caninvitemembers'])); - $buttons[] = $form->generate_submit_button($lang->save_group_leader); - - $form_container->end(); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_user_groups_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(my_strpos($mybb->input['namestyle'], "{username}") === false) - { - $errors[] = $lang->error_missing_namestyle_username; - } - - if(!$errors) - { - if($mybb->input['stars'] < 1) - { - $mybb->input['stars'] = 0; - } - - if(!$mybb->input['starimage']) - { - $mybb->input['starimage'] = "images/star.png"; - } - - $new_usergroup = array( - "type" => 2, - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "namestyle" => $db->escape_string($mybb->input['namestyle']), - "usertitle" => $db->escape_string($mybb->input['usertitle']), - "stars" => $mybb->get_input('stars', MyBB::INPUT_INT), - "starimage" => $db->escape_string($mybb->input['starimage']), - "disporder" => 0 - ); - - // Set default permissions - if($mybb->input['copyfrom'] == 0) - { - $new_usergroup = array_merge($new_usergroup, $usergroup_permissions); - } - // Copying permissions from another group - else - { - $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('copyfrom', MyBB::INPUT_INT)."'"); - $existing_usergroup = $db->fetch_array($query); - foreach(array_keys($usergroup_permissions) as $field) - { - $new_usergroup[$field] = $existing_usergroup[$field]; - } - } - - $plugins->run_hooks("admin_user_groups_add_commit"); - - $gid = $db->insert_query("usergroups", $new_usergroup); - - $plugins->run_hooks("admin_user_groups_add_commit_end"); - - // Are we copying permissions? If so, copy all forum permissions too - if($mybb->input['copyfrom'] > 0) - { - $query = $db->simple_select("forumpermissions", "*", "gid='".$mybb->get_input('copyfrom', MyBB::INPUT_INT)."'"); - while($forum_permission = $db->fetch_array($query)) - { - unset($forum_permission['pid']); - $forum_permission['gid'] = $gid; - $db->insert_query("forumpermissions", $forum_permission); - } - } - - // Update the caches - $cache->update_usergroups(); - $cache->update_forumpermissions(); - - // Log admin action - log_admin_action($gid, htmlspecialchars_uni($mybb->input['title'])); - - flash_message($lang->success_group_created, 'success'); - admin_redirect("index.php?module=user-groups&action=edit&gid={$gid}"); - } - } - - $page->add_breadcrumb_item($lang->add_user_group); - $page->output_header($lang->add_user_group); - - $page->output_nav_tabs($sub_tabs, 'add_group'); - $form = new Form("index.php?module=user-groups&action=add", "post"); - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, array( - "namestyle" => "{username}" - ) - ); - } - - $form_container = new FormContainer($lang->add_user_group); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description, "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->username_style, $lang->username_style_desc, $form->generate_text_box('namestyle', $mybb->input['namestyle'], array('id' => 'namestyle')), 'namestyle'); - $form_container->output_row($lang->user_title, $lang->user_title_desc, $form->generate_text_box('usertitle', $mybb->input['usertitle'], array('id' => 'usertitle')), 'usertitle'); - - $options[0] = $lang->do_not_copy_permissions; - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - } - $form_container->output_row($lang->copy_permissions_from, $lang->copy_permissions_from_desc, $form->generate_select_box('copyfrom', $options, $mybb->input['copyfrom'], array('id' => 'copyfrom')), 'copyfrom'); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->save_user_group); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $usergroup = $db->fetch_array($query); - - if(!$usergroup['gid']) - { - flash_message($lang->error_invalid_user_group, 'error'); - admin_redirect("index.php?module=user-group"); - } - else - { - if(preg_match("#<((m[^a])|(b[^diloru>])|(s[^aemptu>]))(\s*[^>]*)>#si", $mybb->input['namestyle'])) - { - $errors[] = $lang->error_disallowed_namestyle_username; - $mybb->input['namestyle'] = $usergroup['namestyle']; - } - } - - $plugins->run_hooks("admin_user_groups_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(my_strpos($mybb->input['namestyle'], "{username}") === false) - { - $errors[] = $lang->error_missing_namestyle_username; - } - - if($mybb->input['moderate'] == 1 && $mybb->input['invite'] == 1) - { - $errors[] = $lang->error_cannot_have_both_types; - } - - if(!$errors) - { - if($mybb->input['joinable'] == 1) - { - if($mybb->input['moderate'] == 1) - { - $mybb->input['type'] = "4"; - } - elseif($mybb->input['invite'] == 1) - { - $mybb->input['type'] = "5"; - } - else - { - $mybb->input['type'] = "3"; - } - } - else - { - $mybb->input['type'] = "2"; - } - - if($usergroup['type'] == 1) - { - $mybb->input['type'] = 1; - } - - if($mybb->input['stars'] < 1) - { - $mybb->input['stars'] = 0; - } - - $updated_group = array( - "type" => $mybb->get_input('type', MyBB::INPUT_INT), - "title" => $db->escape_string($mybb->input['title']), - "description" => $db->escape_string($mybb->input['description']), - "namestyle" => $db->escape_string($mybb->input['namestyle']), - "usertitle" => $db->escape_string($mybb->input['usertitle']), - "stars" => $mybb->get_input('stars', MyBB::INPUT_INT), - "starimage" => $db->escape_string($mybb->input['starimage']), - "image" => $db->escape_string($mybb->input['image']), - "isbannedgroup" => $mybb->get_input('isbannedgroup', MyBB::INPUT_INT), - "canview" => $mybb->get_input('canview', MyBB::INPUT_INT), - "canviewthreads" => $mybb->get_input('canviewthreads', MyBB::INPUT_INT), - "canviewprofiles" => $mybb->get_input('canviewprofiles', MyBB::INPUT_INT), - "candlattachments" => $mybb->get_input('candlattachments', MyBB::INPUT_INT), - "canviewboardclosed" => $mybb->get_input('canviewboardclosed', MyBB::INPUT_INT), - "canpostthreads" => $mybb->get_input('canpostthreads', MyBB::INPUT_INT), - "canpostreplys" => $mybb->get_input('canpostreplys', MyBB::INPUT_INT), - "canpostattachments" => $mybb->get_input('canpostattachments', MyBB::INPUT_INT), - "canratethreads" => $mybb->get_input('canratethreads', MyBB::INPUT_INT), - "modposts" => $mybb->get_input('modposts', MyBB::INPUT_INT), - "modthreads" => $mybb->get_input('modthreads', MyBB::INPUT_INT), - "mod_edit_posts" => $mybb->get_input('mod_edit_posts', MyBB::INPUT_INT), - "modattachments" => $mybb->get_input('modattachments', MyBB::INPUT_INT), - "caneditposts" => $mybb->get_input('caneditposts', MyBB::INPUT_INT), - "candeleteposts" => $mybb->get_input('candeleteposts', MyBB::INPUT_INT), - "candeletethreads" => $mybb->get_input('candeletethreads', MyBB::INPUT_INT), - "caneditattachments" => $mybb->get_input('caneditattachments', MyBB::INPUT_INT), - "canviewdeletionnotice" => $mybb->get_input('canviewdeletionnotice', MyBB::INPUT_INT), - "canpostpolls" => $mybb->get_input('canpostpolls', MyBB::INPUT_INT), - "canvotepolls" => $mybb->get_input('canvotepolls', MyBB::INPUT_INT), - "canundovotes" => $mybb->get_input('canundovotes', MyBB::INPUT_INT), - "canusepms" => $mybb->get_input('canusepms', MyBB::INPUT_INT), - "cansendpms" => $mybb->get_input('cansendpms', MyBB::INPUT_INT), - "cantrackpms" => $mybb->get_input('cantrackpms', MyBB::INPUT_INT), - "candenypmreceipts" => $mybb->get_input('candenypmreceipts', MyBB::INPUT_INT), - "pmquota" => $mybb->get_input('pmquota', MyBB::INPUT_INT), - "maxpmrecipients" => $mybb->get_input('maxpmrecipients', MyBB::INPUT_INT), - "cansendemail" => $mybb->get_input('cansendemail', MyBB::INPUT_INT), - "cansendemailoverride" => $mybb->get_input('cansendemailoverride', MyBB::INPUT_INT), - "maxemails" => $mybb->get_input('maxemails', MyBB::INPUT_INT), - "emailfloodtime" => $mybb->get_input('emailfloodtime', MyBB::INPUT_INT), - "canviewmemberlist" => $mybb->get_input('canviewmemberlist', MyBB::INPUT_INT), - "canviewcalendar" => $mybb->get_input('canviewcalendar', MyBB::INPUT_INT), - "canaddevents" => $mybb->get_input('canaddevents', MyBB::INPUT_INT), - "canbypasseventmod" => $mybb->get_input('canbypasseventmod', MyBB::INPUT_INT), - "canmoderateevents" => $mybb->get_input('canmoderateevents', MyBB::INPUT_INT), - "canviewonline" => $mybb->get_input('canviewonline', MyBB::INPUT_INT), - "canviewwolinvis" => $mybb->get_input('canviewwolinvis', MyBB::INPUT_INT), - "canviewonlineips" => $mybb->get_input('canviewonlineips', MyBB::INPUT_INT), - "cancp" => $mybb->get_input('cancp', MyBB::INPUT_INT), - "issupermod" => $mybb->get_input('issupermod', MyBB::INPUT_INT), - "cansearch" => $mybb->get_input('cansearch', MyBB::INPUT_INT), - "canusercp" => $mybb->get_input('canusercp', MyBB::INPUT_INT), - "canuploadavatars" => $mybb->get_input('canuploadavatars', MyBB::INPUT_INT), - "canchangename" => $mybb->get_input('canchangename', MyBB::INPUT_INT), - "canbereported" => $mybb->get_input('canbereported', MyBB::INPUT_INT), - "canchangewebsite" => $mybb->get_input('canchangewebsite', MyBB::INPUT_INT), - "showforumteam" => $mybb->get_input('showforumteam', MyBB::INPUT_INT), - "usereputationsystem" => $mybb->get_input('usereputationsystem', MyBB::INPUT_INT), - "cangivereputations" => $mybb->get_input('cangivereputations', MyBB::INPUT_INT), - "candeletereputations" => $mybb->get_input('candeletereputations', MyBB::INPUT_INT), - "reputationpower" => $mybb->get_input('reputationpower', MyBB::INPUT_INT), - "maxreputationsday" => $mybb->get_input('maxreputationsday', MyBB::INPUT_INT), - "maxreputationsperuser" => $mybb->get_input('maxreputationsperuser', MyBB::INPUT_INT), - "maxreputationsperthread" => $mybb->get_input('maxreputationsperthread', MyBB::INPUT_INT), - "attachquota" => $mybb->get_input('attachquota', MyBB::INPUT_INT), - "cancustomtitle" => $mybb->get_input('cancustomtitle', MyBB::INPUT_INT), - "canwarnusers" => $mybb->get_input('canwarnusers', MyBB::INPUT_INT), - "canreceivewarnings" =>$mybb->get_input('canreceivewarnings', MyBB::INPUT_INT), - "maxwarningsday" => $mybb->get_input('maxwarningsday', MyBB::INPUT_INT), - "canmodcp" => $mybb->get_input('canmodcp', MyBB::INPUT_INT), - "showinbirthdaylist" => $mybb->get_input('showinbirthdaylist', MyBB::INPUT_INT), - "canoverridepm" => $mybb->get_input('canoverridepm', MyBB::INPUT_INT), - "canusesig" => $mybb->get_input('canusesig', MyBB::INPUT_INT), - "canusesigxposts" => $mybb->get_input('canusesigxposts', MyBB::INPUT_INT), - "signofollow" => $mybb->get_input('signofollow', MyBB::INPUT_INT), - "edittimelimit" => $mybb->get_input('edittimelimit', MyBB::INPUT_INT), - "maxposts" => $mybb->get_input('maxposts', MyBB::INPUT_INT), - "showmemberlist" => $mybb->get_input('showmemberlist', MyBB::INPUT_INT), - "canmanageannounce" => $mybb->get_input('canmanageannounce', MyBB::INPUT_INT), - "canmanagemodqueue" => $mybb->get_input('canmanagemodqueue', MyBB::INPUT_INT), - "canmanagereportedcontent" => $mybb->get_input('canmanagereportedcontent', MyBB::INPUT_INT), - "canviewmodlogs" => $mybb->get_input('canviewmodlogs', MyBB::INPUT_INT), - "caneditprofiles" => $mybb->get_input('caneditprofiles', MyBB::INPUT_INT), - "canbanusers" => $mybb->get_input('canbanusers', MyBB::INPUT_INT), - "canviewwarnlogs" => $mybb->get_input('canviewwarnlogs', MyBB::INPUT_INT), - "canuseipsearch" => $mybb->get_input('canuseipsearch', MyBB::INPUT_INT) - ); - - // Only update the candisplaygroup setting if not a default user group - if($usergroup['type'] != 1) - { - $updated_group['candisplaygroup'] = $mybb->get_input('candisplaygroup', MyBB::INPUT_INT); - } - - $plugins->run_hooks("admin_user_groups_edit_commit"); - - $db->update_query("usergroups", $updated_group, "gid='{$usergroup['gid']}'"); - - // Update the caches - $cache->update_usergroups(); - $cache->update_forumpermissions(); - - // Log admin action - log_admin_action($usergroup['gid'], htmlspecialchars_uni($mybb->input['title'])); - - flash_message($lang->success_group_updated, 'success'); - admin_redirect("index.php?module=user-groups"); - } - } - - $page->add_breadcrumb_item($lang->edit_user_group); - $page->output_header($lang->edit_user_group); - - $sub_tabs = array(); - $sub_tabs['edit_group'] = array( - 'title' => $lang->edit_user_group, - 'description' => $lang->edit_user_group_desc - ); - - $form = new Form("index.php?module=user-groups&action=edit&gid={$usergroup['gid']}", "post"); - - $page->output_nav_tabs($sub_tabs, 'edit_group'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - else - { - if($usergroup['type'] == "3") - { - $usergroup['joinable'] = 1; - $usergroup['moderate'] = 0; - $usergroup['invite'] = 0; - } - elseif($usergroup['type'] == "4") - { - $usergroup['joinable'] = 1; - $usergroup['moderate'] = 1; - $usergroup['invite'] = 0; - } - elseif($usergroup['type'] == "5") - { - $usergroup['joinable'] = 1; - $usergroup['moderate'] = 0; - $usergroup['invite'] = 1; - } - else - { - $usergroup['joinable'] = 0; - $usergroup['moderate'] = 0; - $usergroup['invite'] = 0; - } - $mybb->input = array_merge($mybb->input, $usergroup); - } - $tabs = array( - "general" => $lang->general, - "forums_posts" => $lang->forums_posts, - "users_permissions" => $lang->users_permissions, - "misc" => $lang->misc, - "modcp" => $lang->mod_cp - ); - $tabs = $plugins->run_hooks("admin_user_groups_edit_graph_tabs", $tabs); - $page->output_tab_control($tabs); - - echo "
"; - $form_container = new FormContainer($lang->general); - $form_container->output_row($lang->title." *", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->short_description, "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); - $form_container->output_row($lang->username_style, $lang->username_style_desc, $form->generate_text_box('namestyle', $mybb->input['namestyle'], array('id' => 'namestyle')), 'namestyle'); - $form_container->output_row($lang->user_title, $lang->user_title_desc, $form->generate_text_box('usertitle', $mybb->input['usertitle'], array('id' => 'usertitle')), 'usertitle'); - - $stars = ""; - $stars .= "
".$form->generate_numeric_field('stars', $mybb->input['stars'], array('class' => 'field50', 'id' => 'stars', 'min' => 0))."".$form->generate_text_box('starimage', $mybb->input['starimage'], array('id' => 'starimage'))."
{$lang->stars}{$lang->star_image}
"; - $form_container->output_row($lang->user_stars, $lang->user_stars_desc, $stars, "stars"); - - $form_container->output_row($lang->group_image, $lang->group_image_desc, $form->generate_text_box('image', $mybb->input['image'], array('id' => 'image')), 'image'); - - $general_options = array(); - $general_options[] = $form->generate_check_box("showmemberlist", 1, $lang->member_list, array("checked" => $mybb->input['showmemberlist'])); - if($usergroup['gid'] != "1" && $usergroup['gid'] != "5") - { - $general_options[] = $form->generate_check_box("showforumteam", 1, $lang->forum_team, array("checked" => $mybb->input['showforumteam'])); - } - $general_options[] = $form->generate_check_box("isbannedgroup", 1, $lang->is_banned_group, array("checked" => $mybb->input['isbannedgroup'])); - - $form_container->output_row($lang->general_options, "", "
".implode("
", $general_options)."
"); - - if($usergroup['type'] != 1) - { - $public_options = array( - $form->generate_check_box("joinable", 1, $lang->user_joinable, array("checked" => $mybb->input['joinable'])), - $form->generate_check_box("moderate", 1, $lang->moderate_join_requests, array("checked" => $mybb->input['moderate'])), - $form->generate_check_box("invite", 1, $lang->invite_only, array("checked" => $mybb->input['invite'])), - $form->generate_check_box("candisplaygroup", 1, $lang->can_set_as_display_group, array("checked" => $mybb->input['candisplaygroup'])), - ); - $form_container->output_row($lang->publicly_joinable_options, "", "
".implode("
", $public_options)."
"); - } - - $admin_options = array( - $form->generate_check_box("issupermod", 1, $lang->is_super_mod, array("checked" => $mybb->input['issupermod'])), - $form->generate_check_box("canmodcp", 1, $lang->can_access_mod_cp, array("checked" => $mybb->input['canmodcp'])), - $form->generate_check_box("cancp", 1, $lang->can_access_admin_cp, array("checked" => $mybb->input['cancp'])) - ); - $form_container->output_row($lang->moderation_administration_options, "", "
".implode("
", $admin_options)."
"); - - $form_container->end(); - echo "
"; - - // - // FORUMS AND POSTS - // - echo "
"; - $form_container = new FormContainer($lang->forums_posts); - - $viewing_options = array( - $form->generate_check_box("canview", 1, $lang->can_view_board, array("checked" => $mybb->input['canview'])), - $form->generate_check_box("canviewthreads", 1, $lang->can_view_threads, array("checked" => $mybb->input['canviewthreads'])), - $form->generate_check_box("cansearch", 1, $lang->can_search_forums, array("checked" => $mybb->input['cansearch'])), - $form->generate_check_box("canviewprofiles", 1, $lang->can_view_profiles, array("checked" => $mybb->input['canviewprofiles'])), - $form->generate_check_box("candlattachments", 1, $lang->can_download_attachments, array("checked" => $mybb->input['candlattachments'])), - $form->generate_check_box("canviewboardclosed", 1, $lang->can_view_board_closed, array("checked" => $mybb->input['canviewboardclosed'])) - ); - $form_container->output_row($lang->viewing_options, "", "
".implode("
", $viewing_options)."
"); - - $posting_options = array( - $form->generate_check_box("canpostthreads", 1, $lang->can_post_threads, array("checked" => $mybb->input['canpostthreads'])), - $form->generate_check_box("canpostreplys", 1, $lang->can_post_replies, array("checked" => $mybb->input['canpostreplys'])), - $form->generate_check_box("canratethreads", 1, $lang->can_rate_threads, array("checked" => $mybb->input['canratethreads'])), - "{$lang->max_posts_per_day}
{$lang->max_posts_per_day_desc}
".$form->generate_numeric_field('maxposts', $mybb->input['maxposts'], array('id' => 'maxposts', 'class' => 'field50', 'min' => 0)) - ); - $form_container->output_row($lang->posting_rating_options, "", "
".implode("
", $posting_options)."
"); - - $moderator_options = array( - $form->generate_check_box("modposts", 1, $lang->mod_new_posts, array("checked" => $mybb->input['modposts'])), - $form->generate_check_box("modthreads", 1, $lang->mod_new_threads, array("checked" => $mybb->input['modthreads'])), - $form->generate_check_box("modattachments", 1, $lang->mod_new_attachments, array("checked" => $mybb->input['modattachments'])), - $form->generate_check_box("mod_edit_posts", 1, $lang->mod_after_edit, array("checked" => $mybb->input['mod_edit_posts'])) - ); - $form_container->output_row($lang->moderation_options, "", "
".implode("
", $moderator_options)."
"); - - $poll_options = array( - $form->generate_check_box("canpostpolls", 1, $lang->can_post_polls, array("checked" => $mybb->input['canpostpolls'])), - $form->generate_check_box("canvotepolls", 1, $lang->can_vote_polls, array("checked" => $mybb->input['canvotepolls'])), - $form->generate_check_box("canundovotes", 1, $lang->can_undo_votes, array("checked" => $mybb->input['canundovotes'])) - ); - $form_container->output_row($lang->poll_options, "", "
".implode("
", $poll_options)."
"); - - $attachment_options = array( - $form->generate_check_box("canpostattachments", 1, $lang->can_post_attachments, array("checked" => $mybb->input['canpostattachments'])), - "{$lang->attach_quota}
{$lang->attach_quota_desc}
".$form->generate_numeric_field('attachquota', $mybb->input['attachquota'], array('id' => 'attachquota', 'class' => 'field50', 'min' => 0)). "KB" - ); - $form_container->output_row($lang->attachment_options, "", "
".implode("
", $attachment_options)."
"); - - $editing_options = array( - $form->generate_check_box("caneditposts", 1, $lang->can_edit_posts, array("checked" => $mybb->input['caneditposts'])), - $form->generate_check_box("candeleteposts", 1, $lang->can_delete_posts, array("checked" => $mybb->input['candeleteposts'])), - $form->generate_check_box("candeletethreads", 1, $lang->can_delete_threads, array("checked" => $mybb->input['candeletethreads'])), - $form->generate_check_box("caneditattachments", 1, $lang->can_edit_attachments, array("checked" => $mybb->input['caneditattachments'])), - $form->generate_check_box("canviewdeletionnotice", 1, $lang->can_view_deletion_notices, array("checked" => $mybb->input['canviewdeletionnotice'])), - "{$lang->edit_time_limit}
{$lang->edit_time_limit_desc}
".$form->generate_numeric_field('edittimelimit', $mybb->input['edittimelimit'], array('id' => 'edittimelimit', 'class' => 'field50', 'min' => 0)) - ); - $form_container->output_row($lang->editing_deleting_options, "", "
".implode("
", $editing_options)."
"); - - $form_container->end(); - echo "
"; - - // - // USERS AND PERMISSIONS - // - echo "
"; - $form_container = new FormContainer($lang->users_permissions); - - $account_options = array( - $form->generate_check_box("canbereported", 1, $lang->can_be_reported, array("checked" => $mybb->input['canbereported'])), - $form->generate_check_box("canusercp", 1, $lang->can_access_usercp, array("checked" => $mybb->input['canusercp'])), - $form->generate_check_box("canchangename", 1, $lang->can_change_username, array("checked" => $mybb->input['canchangename'])), - $form->generate_check_box("cancustomtitle", 1, $lang->can_use_usertitles, array("checked" => $mybb->input['cancustomtitle'])), - $form->generate_check_box("canuploadavatars", 1, $lang->can_upload_avatars, array("checked" => $mybb->input['canuploadavatars'])), - $form->generate_check_box("canusesig", 1, $lang->can_use_signature, array("checked" => $mybb->input['canusesig'])), - $form->generate_check_box("signofollow", 1, $lang->uses_no_follow, array("checked" => $mybb->input['signofollow'])), - $form->generate_check_box("canchangewebsite", 1, $lang->can_change_website, array("checked" => $mybb->input['canchangewebsite'])), - "{$lang->required_posts}
{$lang->required_posts_desc}
".$form->generate_numeric_field('canusesigxposts', $mybb->input['canusesigxposts'], array('id' => 'canusesigxposts', 'class' => 'field50', 'min' => 0)) - ); - $form_container->output_row($lang->account_management, "", "
".implode("
", $account_options)."
"); - - $reputation_options = array( - $form->generate_check_box("usereputationsystem", 1, $lang->show_reputations, array("checked" => $mybb->input['usereputationsystem'])), - $form->generate_check_box("cangivereputations", 1, $lang->can_give_reputation, array("checked" => $mybb->input['cangivereputations'])), - $form->generate_check_box("candeletereputations", 1, $lang->can_delete_own_reputation, array("checked" => $mybb->input['candeletereputations'])), - "{$lang->points_to_award_take}
{$lang->points_to_award_take_desc}
".$form->generate_numeric_field('reputationpower', $mybb->input['reputationpower'], array('id' => 'reputationpower', 'class' => 'field50', 'min' => 0)), - "{$lang->max_reputations_perthread}
{$lang->max_reputations_perthread_desc}
".$form->generate_numeric_field('maxreputationsperthread', $mybb->input['maxreputationsperthread'], array('id' => 'maxreputationsperthread', 'class' => 'field50', 'min' => 0)), - "{$lang->max_reputations_peruser}
{$lang->max_reputations_peruser_desc}
".$form->generate_numeric_field('maxreputationsperuser', $mybb->input['maxreputationsperuser'], array('id' => 'maxreputationsperuser', 'class' => 'field50', 'min' => 0)), - "{$lang->max_reputations_daily}
{$lang->max_reputations_daily_desc}
".$form->generate_numeric_field('maxreputationsday', $mybb->input['maxreputationsday'], array('id' => 'maxreputationsday', 'class' => 'field50', 'min' => 0)) - ); - $form_container->output_row($lang->reputation_system, "", "
".implode("
", $reputation_options)."
"); - - $warning_options = array( - $form->generate_check_box("canwarnusers", 1, $lang->can_send_warnings, array("checked" => $mybb->input['canwarnusers'])), - $form->generate_check_box("canreceivewarnings", 1, $lang->can_receive_warnings, array("checked" => $mybb->input['canreceivewarnings'])), - "{$lang->warnings_per_day}
".$form->generate_numeric_field('maxwarningsday', $mybb->input['maxwarningsday'], array('id' => 'maxwarningsday', 'class' => 'field50')) - ); - $form_container->output_row($lang->warning_system, "", "
".implode("
", $warning_options)."
"); - - $pm_options = array( - $form->generate_check_box("canusepms", 1, $lang->can_use_pms, array("checked" => $mybb->input['canusepms'])), - $form->generate_check_box("cansendpms", 1, $lang->can_send_pms, array("checked" => $mybb->input['cansendpms'])), - $form->generate_check_box("canoverridepm", 1, $lang->can_override_pms, array("checked" => $mybb->input['canoverridepm'])), - $form->generate_check_box("cantrackpms", 1, $lang->can_track_pms, array("checked" => $mybb->input['cantrackpms'])), - $form->generate_check_box("candenypmreceipts", 1, $lang->can_deny_reciept, array("checked" => $mybb->input['candenypmreceipts'])), - "{$lang->message_quota}
{$lang->message_quota_desc}
".$form->generate_numeric_field('pmquota', $mybb->input['pmquota'], array('id' => 'pmquota', 'class' => 'field50', 'min' => 0)), - "{$lang->max_recipients}
{$lang->max_recipients_desc}
".$form->generate_numeric_field('maxpmrecipients', $mybb->input['maxpmrecipients'], array('id' => 'maxpmrecipients', 'class' => 'field50', 'min' => 0)) - ); - $form_container->output_row($lang->private_messaging, "", "
".implode("
", $pm_options)."
"); - - $form_container->end(); - echo "
"; - - // - // MISC - // - echo "
"; - $form_container = new FormContainer($lang->misc); - - $calendar_options = array( - $form->generate_check_box("canviewcalendar", 1, $lang->can_view_calendar, array("checked" => $mybb->input['canviewcalendar'])), - $form->generate_check_box("canaddevents", 1, $lang->can_post_events, array("checked" => $mybb->input['canaddevents'])), - $form->generate_check_box("canbypasseventmod", 1, $lang->can_bypass_event_moderation, array("checked" => $mybb->input['canbypasseventmod'])), - $form->generate_check_box("canmoderateevents", 1, $lang->can_moderate_events, array("checked" => $mybb->input['canmoderateevents'])) - ); - $form_container->output_row($lang->calendar, "", "
".implode("
", $calendar_options)."
"); - - $wol_options = array( - $form->generate_check_box("canviewonline", 1, $lang->can_view_whos_online, array("checked" => $mybb->input['canviewonline'])), - $form->generate_check_box("canviewwolinvis", 1, $lang->can_view_invisible, array("checked" => $mybb->input['canviewwolinvis'])), - $form->generate_check_box("canviewonlineips", 1, $lang->can_view_ips, array("checked" => $mybb->input['canviewonlineips'])) - ); - $form_container->output_row($lang->whos_online, "", "
".implode("
", $wol_options)."
"); - - $misc_options = array( - $form->generate_check_box("canviewmemberlist", 1, $lang->can_view_member_list, array("checked" => $mybb->input['canviewmemberlist'])), - $form->generate_check_box("showinbirthdaylist", 1, $lang->show_in_birthday_list, array("checked" => $mybb->input['showinbirthdaylist'])), - $form->generate_check_box("cansendemail", 1, $lang->can_email_users, array("checked" => $mybb->input['cansendemail'])), - $form->generate_check_box("cansendemailoverride", 1, $lang->can_email_users_override, array("checked" => $mybb->input['cansendemailoverride'])), - "{$lang->max_emails_per_day}
{$lang->max_emails_per_day_desc}
".$form->generate_numeric_field('maxemails', $mybb->input['maxemails'], array('id' => 'maxemails', 'class' => 'field50', 'min' => 0)), - "{$lang->email_flood_time}
{$lang->email_flood_time_desc}
".$form->generate_numeric_field('emailfloodtime', $mybb->input['emailfloodtime'], array('id' => 'emailfloodtime', 'class' => 'field50', 'min' => 0)) - ); - $form_container->output_row($lang->misc, "", "
".implode("
", $misc_options)."
"); - - $form_container->end(); - echo "
"; - - // - // MODERATOR CP - // - echo "
"; - $form_container = new FormContainer($lang->mod_cp); - - $forum_post_options = array( - $form->generate_check_box("canmanageannounce", 1, $lang->can_manage_announce, array("checked" => $mybb->input['canmanageannounce'])), - $form->generate_check_box("canmanagemodqueue", 1, $lang->can_manage_mod_queue, array("checked" => $mybb->input['canmanagemodqueue'])), - $form->generate_check_box("canmanagereportedcontent", 1, $lang->can_manage_reported_content, array("checked" => $mybb->input['canmanagereportedcontent'])), - $form->generate_check_box("canviewmodlogs", 1, $lang->can_view_mod_logs, array("checked" => $mybb->input['canviewmodlogs'])) - ); - $form_container->output_row($lang->forum_post_options, "", "
".implode("
", $forum_post_options)."
"); - - $user_options = array( - $form->generate_check_box("caneditprofiles", 1, $lang->can_edit_profiles, array("checked" => $mybb->input['caneditprofiles'])), - $form->generate_check_box("canbanusers", 1, $lang->can_ban_users, array("checked" => $mybb->input['canbanusers'])), - $form->generate_check_box("canviewwarnlogs", 1, $lang->can_view_warnlogs, array("checked" => $mybb->input['canviewwarnlogs'])), - $form->generate_check_box("canuseipsearch", 1, $lang->can_use_ipsearch, array("checked" => $mybb->input['canuseipsearch'])) - ); - $form_container->output_row($lang->user_options, "", "
".implode("
", $user_options)."
"); - - $form_container->end(); - echo "
"; - - $plugins->run_hooks("admin_user_groups_edit_graph"); - - $buttons[] = $form->generate_submit_button($lang->save_user_group); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); - $usergroup = $db->fetch_array($query); - - if(!$usergroup['gid']) - { - flash_message($lang->error_invalid_user_group, 'error'); - admin_redirect("index.php?module=user-groups"); - } - if($usergroup['type'] == 1) - { - flash_message($lang->error_default_group_delete, 'error'); - admin_redirect("index.php?module=user-groups"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-groups"); - } - - $plugins->run_hooks("admin_user_groups_delete"); - - if($mybb->request_method == "post") - { - if($usergroup['isbannedgroup'] == 1) - { - // If banned group, move users to default banned group - $updated_users = array("usergroup" => 7); - } - else - { - // Move any users back to the registered group - $updated_users = array("usergroup" => 2); - } - - $db->update_query("users", $updated_users, "usergroup='{$usergroup['gid']}'"); - - $updated_users = array("displaygroup" => "usergroup"); - $plugins->run_hooks("admin_user_groups_delete_commit"); - - $db->update_query("users", $updated_users, "displaygroup='{$usergroup['gid']}'", "", true); // No quotes = displaygroup=usergroup - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("users", "uid", "','||additionalgroups||',' LIKE '%,{$usergroup['gid']},%'"); - break; - default: - $query = $db->simple_select("users", "uid", "CONCAT(',',additionalgroups,',') LIKE '%,{$usergroup['gid']},%'"); - } - while($user = $db->fetch_array($query)) - { - leave_usergroup($user['uid'], $usergroup['gid']); - } - - $db->update_query("banned", array("gid" => 7), "gid='{$usergroup['gid']}'"); - $db->update_query("banned", array("oldgroup" => 2), "oldgroup='{$usergroup['gid']}'"); - $db->update_query("banned", array("olddisplaygroup" => "oldgroup"), "olddisplaygroup='{$usergroup['gid']}'", "", true); // No quotes = displaygroup=usergroup - - $db->delete_query("forumpermissions", "gid='{$usergroup['gid']}'"); - $db->delete_query("calendarpermissions", "gid='{$usergroup['gid']}'"); - $db->delete_query("joinrequests", "gid='{$usergroup['gid']}'"); - $db->delete_query("moderators", "id='{$usergroup['gid']}' AND isgroup='1'"); - $db->delete_query("groupleaders", "gid='{$usergroup['gid']}'"); - $db->delete_query("usergroups", "gid='{$usergroup['gid']}'"); - - $plugins->run_hooks("admin_user_groups_delete_commit_end"); - - $cache->update_groupleaders(); - $cache->update_moderators(); - $cache->update_usergroups(); - $cache->update_forumpermissions(); - $cache->update_banned(); - - // Log admin action - log_admin_action($usergroup['gid'], htmlspecialchars_uni($usergroup['title'])); - - flash_message($lang->success_group_deleted, 'success'); - admin_redirect("index.php?module=user-groups"); - } - else - { - $page->output_confirm_action("index.php?module=user-groups&action=delete&gid={$usergroup['gid']}", $lang->confirm_group_deletion); - } -} - -if($mybb->input['action'] == "disporder" && $mybb->request_method == "post") -{ - $plugins->run_hooks("admin_user_groups_disporder"); - - foreach($mybb->input['disporder'] as $gid=>$order) - { - $gid = (int)$gid; - $order = (int)$order; - if($gid != 0 && $order != 0) - { - $sql_array = array( - 'disporder' => $order, - ); - $db->update_query('usergroups', $sql_array, "gid = '{$gid}'"); - } - } - - // Log admin action - log_admin_action(); - - $plugins->run_hooks("admin_user_groups_disporder_commit"); - - flash_message($lang->success_group_disporders_updated, 'success'); - admin_redirect("index.php?module=user-groups"); -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_user_groups_start"); - - if($mybb->request_method == "post") - { - if(!empty($mybb->input['disporder'])) - { - foreach($mybb->input['disporder'] as $gid => $order) - { - $db->update_query("usergroups", array('disporder' => (int)$order), "gid='".(int)$gid."'"); - } - - $plugins->run_hooks("admin_user_groups_start_commit"); - - $cache->update_usergroups(); - - flash_message($lang->success_groups_disporder_updated, 'success'); - admin_redirect("index.php?module=user-groups"); - } - } - - $page->output_header($lang->manage_user_groups); - $page->output_nav_tabs($sub_tabs, 'manage_groups'); - - $form = new Form("index.php?module=user-groups", "post", "groups"); - - $query = $db->query(" - SELECT g.gid, COUNT(u.uid) AS users - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=u.usergroup) - GROUP BY g.gid - "); - while($groupcount = $db->fetch_array($query)) - { - $primaryusers[$groupcount['gid']] = $groupcount['users']; - } - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->query(" - SELECT g.gid, COUNT(u.uid) AS users - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%') - WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid - "); - break; - default: - $query = $db->query(" - SELECT g.gid, COUNT(u.uid) AS users - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%')) - WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid - "); - } - while($groupcount = $db->fetch_array($query)) - { - $secondaryusers[$groupcount['gid']] = $groupcount['users']; - } - - $query = $db->query(" - SELECT g.gid, COUNT(r.uid) AS users - FROM ".TABLE_PREFIX."joinrequests r - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=r.gid) - GROUP BY g.gid - "); - - $joinrequests = array(); - while($joinrequest = $db->fetch_array($query)) - { - $joinrequests[$joinrequest['gid']] = $joinrequest['users']; - } - - // Fetch group leaders - $leaders = array(); - $query = $db->query(" - SELECT u.username, u.uid, l.gid - FROM ".TABLE_PREFIX."groupleaders l - INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - ORDER BY u.username ASC - "); - while($leader = $db->fetch_array($query)) - { - $leaders[$leader['gid']][] = build_profile_link(htmlspecialchars_uni($leader['username']), $leader['uid'], "_blank"); - } - - $form_container = new FormContainer($lang->user_groups); - $form_container->output_row_header($lang->group); - $form_container->output_row_header($lang->number_of_users, array("class" => "align_center", 'width' => '75')); - $form_container->output_row_header($lang->order, array("class" => "align_center", 'width' => '5%')); - $form_container->output_row_header($lang->controls, array("class" => "align_center")); - - $query = $db->simple_select("usergroups", "*", "", array('order_by' => 'disporder')); - while($usergroup = $db->fetch_array($query)) - { - if($usergroup['type'] > 1) - { - $icon = "\"{$lang-custom_user_group}\" style=\"vertical-align: middle;\" />"; - } - else - { - $icon = "\"{$lang-default_user_group}\" style=\"vertical-align: middle;\" />"; - } - - $leaders_list = ''; - if(isset($leaders[$usergroup['gid']])) - { - $leaders_list = "
{$lang->group_leaders}: ".implode($lang->comma, $leaders[$usergroup['gid']]); - } - - $join_requests = ''; - if($joinrequests[$usergroup['gid']] > 1 && $usergroup['type'] == 4) - { - $join_requests = " ({$joinrequests[$usergroup['gid']]} {$lang->outstanding_join_request})"; - } - else if($joinrequests[$usergroup['gid']] == 1 && $usergroup['type'] == 4) - { - $join_requests = " ({$joinrequests[$usergroup['gid']]} {$lang->outstanding_join_request})"; - } - - $form_container->output_cell("
{$icon}
".htmlspecialchars_uni($usergroup['title'])."{$join_requests}
".htmlspecialchars_uni($usergroup['description'])."{$leaders_list}
"); - - if(!$primaryusers[$usergroup['gid']]) - { - $primaryusers[$usergroup['gid']] = 0; - } - $numusers = $primaryusers[$usergroup['gid']]; - $numusers += $secondaryusers[$usergroup['gid']]; - - $form_container->output_cell(my_number_format($numusers), array("class" => "align_center")); - - if($usergroup['showforumteam'] == 1) - { - $form_container->output_cell("", array("class" => "align_center")); - } - else - { - $form_container->output_cell(" ", array("class" => "align_center")); - } - - $popup = new PopupMenu("usergroup_{$usergroup['gid']}", $lang->options); - $popup->add_item($lang->edit_group, "index.php?module=user-groups&action=edit&gid={$usergroup['gid']}"); - $popup->add_item($lang->list_users, "index.php?module=user-users&action=search&results=1&conditions[usergroup]={$usergroup['gid']}"); - if($joinrequests[$usergroup['gid']] > 0 && $usergroup['type'] == 4) - { - $popup->add_item($lang->join_requests, "index.php?module=user-groups&action=join_requests&gid={$usergroup['gid']}"); - } - $popup->add_item($lang->group_leaders, "index.php?module=user-groups&action=leaders&gid={$usergroup['gid']}"); - if($usergroup['type'] > 1) - { - $popup->add_item($lang->delete_group, "index.php?module=user-groups&action=delete&gid={$usergroup['gid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_group_deletion}')"); - } - $form_container->output_cell($popup->fetch(), array("class" => "align_center")); - $form_container->construct_row(); - } - - if($form_container->num_rows() == 0) - { - $form_container->output_cell($lang->no_groups, array('colspan' => 4)); - $form_container->construct_row(); - } - - $form_container->end(); - - $buttons = array(); - $buttons[] = $form->generate_submit_button($lang->update_groups_order); - $form->output_submit_wrapper($buttons); - - $form->end(); - - echo << -
-{$lang->legend} -{$lang->custom_user_group} {$lang->custom_user_group}
-{$lang->default_user_group} {$lang->default_user_group} -
-LEGEND; - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/user/index.html b/html/forums/admin/modules/user/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/modules/user/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/modules/user/mass_mail.php b/html/forums/admin/modules/user/mass_mail.php deleted file mode 100644 index c607bbb..0000000 --- a/html/forums/admin/modules/user/mass_mail.php +++ /dev/null @@ -1,1668 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -require_once MYBB_ROOT."/inc/functions_massmail.php"; - -$page->add_breadcrumb_item($lang->mass_mail, "index.php?module=user-mass_mail"); - -if($mybb->input['action'] == "send" || $mybb->input['action'] == "archive" || !$mybb->input['action']) -{ - $sub_tabs['mail_queue'] = array( - 'title' => $lang->mass_mail_queue, - 'link' => 'index.php?module=user-mass_mail', - 'description' => $lang->mass_mail_queue_desc - ); - - $sub_tabs['send_mass_mail'] = array( - 'title' => $lang->create_mass_mail, - 'link' => 'index.php?module=user-mass_mail&action=send', - 'description' => $lang->create_mass_mail_desc - ); - - $sub_tabs['archive'] = array( - 'title' => $lang->mass_mail_archive, - 'link' => 'index.php?module=user-mass_mail&action=archive', - 'description' => $lang->mass_mail_archive_desc - ); -} - -$plugins->run_hooks("admin_user_mass_email"); - -if($mybb->input['action'] == "edit") -{ - $page->add_breadcrumb_item($lang->edit_mass_mail); - - $query = $db->simple_select("massemails", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $email = $db->fetch_array($query); - if(!$email['mid']) - { - flash_message($lang->error_invalid_mid, 'error'); - admin_redirect("index.php?module=user-mass_mail"); - } - - $plugins->run_hooks("admin_user_mass_email_edit_start"); - - if($email['conditions'] != '') - { - $email['conditions'] = my_unserialize($email['conditions']); - } - - $sub_tabs['edit_mass_mail'] = array( - 'title' => $lang->edit_mass_mail, - 'link' => 'index.php?module=user-mass_mail&action=edit&mid='.$email['mid'], - 'description' => $lang->edit_mass_mail_desc - ); - - $replacement_fields = array( - "{username}" => $lang->username, - "{email}" => $lang->email_addr, - "{bbname}" => $lang->board_name, - "{bburl}" => $lang->board_url - ); - - $html_personalisation = $text_personalisation = "\n"; - $text_personalisation = substr($text_personalisation, 0, -2)."');\n// -->\n"; - - $localized_time_offset = (float)$mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - - // All done here - if($mybb->request_method == "post") - { - // Sending this message now - if($mybb->input['delivery_type'] == "now") - { - $delivery_date = TIME_NOW; - } - // Delivering in the future - else - { - if(stristr($mybb->input['deliverytime_time'], "pm")) - { - $mybb->input['deliveryhour'] += 12; - } - - $exploded = explode(':', $mybb->input['endtime_time']); - $mybb->input['deliveryhour'] = (int)$exploded[0]; - - $exploded = explode(' ', $exploded[1]); - $mybb->input['deliveryminute'] = (int)$exploded[0]; - - $delivery_date = gmmktime($mybb->input['deliveryhour'], $mybb->input['deliveryminute'], 0, $mybb->input['endtime_month'], $mybb->input['endtime_day'], $mybb->input['endtime_year']) - $localized_time_offset; - if($delivery_date <= TIME_NOW) - { - $errors[] = $lang->error_only_in_future; - } - } - - // Need to perform the search to fetch the number of users we're emailing - $member_query = build_mass_mail_query($mybb->input['conditions']); - $query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query); - $num = $db->fetch_field($query, "num"); - - if($num == 0) - { - $errors[] = $lang->error_no_users; - } - - if(!trim($mybb->input['subject'])) - { - $errors[] = $lang->error_missing_subject; - } - - if($mybb->input['type'] == 1) - { - if(!$mybb->input['message']) - { - $errors[] = $lang->error_missing_message; - } - } - else - { - if($mybb->input['format'] == 2 && $mybb->input['automatic_text'] == 0 && !$mybb->input['message']) - { - $errors[] = $lang->error_missing_plain_text; - } - - if(($mybb->input['format'] == 1 || $mybb->input['format'] == 2) && !$mybb->input['htmlmessage']) - { - $errors[] = $lang->error_missing_html; - } - else if($mybb->input['format'] == 0 && !$mybb->input['message']) - { - $errors[] = $lang->error_missing_plain_text; - } - } - - if(!$errors) - { - // Sending via a PM - if($mybb->input['type'] == 1) - { - $mybb->input['format'] = 0; - $mybb->input['htmlmessage'] = ''; - } - // Sending via email - else - { - // Do we need to generate a text based version? - if($mybb->input['format'] == 2 && $mybb->input['automatic_text']) - { - $mybb->input['message'] = create_text_message($mybb->input['htmlmessage']); - } - else if($mybb->input['format'] == 1) - { - $mybb->input['message'] = ''; - } - else if($mybb->input['format'] == 0) - { - $mybb->input['htmlmessage'] = ''; - } - } - - // Mark as queued for delivery - $updated_email = array( - "status" => 1, - "senddate" => $delivery_date, - "totalcount" => $num, - "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])), - "message" => $db->escape_string($mybb->input['message']), - "subject" => $db->escape_string($mybb->input['subject']), - "htmlmessage" => $db->escape_string($mybb->input['htmlmessage']), - "format" => $mybb->get_input('format', MyBB::INPUT_INT), - "type" => $mybb->get_input('type', MyBB::INPUT_INT), - "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_user_mass_email_edit_commit"); - - $db->update_query("massemails", $updated_email, "mid='{$email['mid']}'"); - - flash_message($lang->success_mass_mail_saved, 'success'); - admin_redirect("index.php?module=user-mass_mail"); - } - } - - $page->output_header($lang->edit_mass_mail); - - $page->output_nav_tabs($sub_tabs, 'edit_mass_mail'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - $input = $mybb->input; - } - else - { - $input = $email; - - if($email['senddate'] != 0) - { - if($email['senddate'] <= TIME_NOW) - { - $input['delivery_type'] = "now"; - $delivery_type_checked['now'] = " checked=\"checked\""; - } - else - { - // correct date by timezone and dst - $offset = - $input['delivery_type'] = "future"; - $time = gmdate("d-n-Y", $email['senddate'] + $localized_time_offset); - $time = explode('-', $time); - $input['deliverymonth'] = (int)$time[1]; - $input['deliveryday'] = (int)$time[0]; - $input['deliveryyear'] = (int)$time[2]; - $input['endtime_time'] = gmdate($mybb->settings['timeformat'], $email['senddate'] + $localized_time_offset); - $delivery_type_checked['future'] = " checked=\"checked\""; - } - } - else - { - $input['delivery_type'] = "now"; - $delivery_type_checked['now'] = " checked=\"checked\""; - } - } - - if(!$input['endtime_time']) - { - $input['endtime_time'] = gmdate($mybb->settings['timeformat'], TIME_NOW + $localized_time_offset); - } - - if(!$input['deliveryyear']) - { - $enddateyear = gmdate('Y', TIME_NOW + $localized_time_offset); - } - else - { - $enddateyear = (int)$input['deliveryyear']; - } - - if(!$input['deliverymonth']) - { - $input['enddatemonth'] = gmdate('n', TIME_NOW + $localized_time_offset); - } - else - { - $input['enddatemonth'] = (int)$input['deliverymonth']; - } - - if(!$input['deliveryday']) - { - $input['enddateday'] = gmdate('j', TIME_NOW + $localized_time_offset); - } - else - { - $input['enddateday'] = (int)$input['deliveryday']; - } - - $form = new Form("index.php?module=user-mass_mail&action=edit", "post"); - echo $form->generate_hidden_field("mid", $email['mid']); - - $mid_add = ''; - if($email['mid']) - { - $mid_add = "&mid={$email['mid']}"; - } - - $form_container = new FormContainer("{$lang->edit_mass_mail}: {$lang->message_settings}"); - - $form_container->output_row("{$lang->subject}: *", $lang->subject_desc, $form->generate_text_box('subject', $input['subject'], array('id' => 'subject')), 'subject'); - - if($input['type'] == 0) - { - $type_email_checked = true; - $type_pm_checked = false; - } - else if($input['type'] == 1) - { - $type_email_checked = false; - $type_pm_checked = true; - } - - $type_options = array( - $form->generate_radio_button("type", 0, $lang->send_via_email, array("id" => "type_email", "checked" => $type_email_checked)), - $form->generate_radio_button("type", 1, $lang->send_via_pm, array("id" => "type_pm", "checked" => $type_pm_checked)) - ); - $form_container->output_row("{$lang->message_type}: *", "", implode("
", $type_options)); - - $monthnames = array( - "offset", - $lang->january, - $lang->february, - $lang->march, - $lang->april, - $lang->may, - $lang->june, - $lang->july, - $lang->august, - $lang->september, - $lang->october, - $lang->november, - $lang->december, - ); - - $enddatemonth = ""; - foreach($monthnames as $key => $month) - { - if($month == "offset") - { - continue; - } - - if($key == $input['enddatemonth']) - { - $enddatemonth .= "\n"; - } - else - { - $enddatemonth .= "\n"; - } - } - - $enddateday = ""; - - // Construct option list for days - for($i = 1; $i <= 31; ++$i) - { - if($i == $input['enddateday']) - { - $enddateday .= "\n"; - } - else - { - $enddateday .= "\n"; - } - } - - $actions = " -
-
- -
-
- - - - -
\n   \n\n   \n\n - {$lang->time} ".$form->generate_text_box('endtime_time', $input['endtime_time'], array('id' => 'endtime_time', 'style' => 'width: 60px;'))."
-
-
- "; - $form_container->output_row("{$lang->delivery_date}: *", $lang->delivery_date_desc, $actions); - - $form_container->output_row("{$lang->per_page}: *", $lang->per_page_desc, $form->generate_numeric_field('perpage', $input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage'); - - $format_options = array( - 0 => $lang->plain_text_only, - 1 => $lang->html_only, - 2 => $lang->html_and_plain_text - ); - - $form_container->output_row("{$lang->message_format}: *", "", $form->generate_select_box('format', $format_options, $input['format'], array('id' => 'format')), 'format', null, array("id" => "format_container")); - - $form_container->end(); - - if($input['format'] == 2) - { - if($input['automatic_text'] && !$email['mid']) - { - $automatic_text_check = true; - $text_display = 'display: none'; - $automatic_display = 'display: none;'; - } - } - else if($input['format'] == 1 && $input['type'] != 1) - { - $text_display = 'display: none;'; - } - else if($input['format'] == 0 || $input['type'] == 1) - { - $html_display = 'display: none'; - } - - echo "
"; - $form_container = new FormContainer("{$lang->edit_mass_mail}: {$lang->define_html_message}"); - $form_container->output_row("{$lang->define_html_message_desc}:", $html_personalisation, $form->generate_text_area('htmlmessage', $input['htmlmessage'], array('id' => 'htmlmessage', 'rows' => 15, 'cols '=> 70, 'style' => 'width: 95%'))."
".$form->generate_check_box('automatic_text', 1, $lang->auto_gen_plain_text, array('checked' => $automatic_text_check, "id" => "automatic_text"))."
"); - $form_container->end(); - echo "
"; - - echo "
"; - $form_container = new FormContainer("{$lang->edit_mass_mail}: {$lang->define_text_version}"); - $form_container->output_row("{$lang->define_text_version_desc}:", $text_personalisation, $form->generate_text_area('message', $input['message'], array('id' => 'message', 'rows' => 15, 'cols '=> 70, 'style' => 'width: 95%'))); - $form_container->end(); - echo "
"; - - echo " - "; - - $form_container = new FormContainer("{$lang->edit_mass_mail}: {$lang->define_the_recipients}"); - - $form_container->output_row($lang->username_contains, "", $form->generate_text_box('conditions[username]', htmlspecialchars_uni($input['conditions']['username']), array('id' => 'username')), 'username'); - $form_container->output_row($lang->email_addr_contains, "", $form->generate_text_box('conditions[email]', $input['conditions']['email'], array('id' => 'email')), 'email'); - - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - - $options = array(); - while($usergroup = $db->fetch_array($query)) - { - $options[$usergroup['gid']] = $usergroup['title']; - } - - $form_container->output_row($lang->members_of, $lang->additional_user_groups_desc, $form->generate_select_box('conditions[usergroup][]', $options, $input['conditions']['usergroup'], array('id' => 'usergroups', 'multiple' => true, 'size' => 5)), 'usergroups'); - - $greater_options = array( - "greater_than" => $lang->greater_than, - "is_exactly" => $lang->is_exactly, - "less_than" => $lang->less_than - ); - $form_container->output_row($lang->post_count_is, "", $form->generate_select_box('conditions[postnum_dir]', $greater_options, $input['conditions']['postnum_dir'], array('id' => 'postnum_dir'))." ".$form->generate_numeric_field('conditions[postnum]', $input['conditions']['postnum'], array('id' => 'postnum', 'min' => 0)), 'postnum'); - - $more_options = array( - "more_than" => $lang->more_than, - "less_than" => $lang->less_than - ); - - $date_options = array( - "hours" => $lang->hours, - "days" => $lang->days, - "weeks" => $lang->weeks, - "months" => $lang->months, - "years" => $lang->years - ); - $form_container->output_row($lang->user_registered, "", $form->generate_select_box('conditions[regdate_dir]', $more_options, $input['conditions']['regdate_dir'], array('id' => 'regdate_dir'))." ".$form->generate_numeric_field('conditions[regdate]', $input['conditions']['regdate'], array('id' => 'regdate', 'min' => 0))." ".$form->generate_select_box('conditions[regdate_date]', $date_options, $input['conditions']['regdate_date'], array('id' => 'regdate_date'))." {$lang->ago}", 'regdate'); - - $form_container->output_row($lang->user_last_active, "", $form->generate_select_box('conditions[lastactive_dir]', $more_options, $input['conditions']['lastactive_dir'], array('id' => 'lastactive_dir'))." ".$form->generate_numeric_field('conditions[lastactive]', $input['conditions']['lastactive'], array('id' => 'lastactive', 'min' => 0))." ".$form->generate_select_box('conditions[lastactive_date]', $date_options, $input['conditions']['lastactive_date'], array('id' => 'lastactive_date'))." {$lang->ago}", 'lastactive'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_mass_mail); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); -} - -if($mybb->input['action'] == "send") -{ - $page->add_breadcrumb_item($lang->send_mass_mail); - - if($mybb->input['step']) - { - $query = $db->simple_select("massemails", "*", "status=0 and mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $email = $db->fetch_array($query); - if(!$email['mid'] && $mybb->input['step'] != 1) - { - flash_message($lang->error_invalid_mid, 'error'); - admin_redirect("index.php?module=user-mass_mail"); - } - } - - $replacement_fields = array( - "{username}" => $lang->username, - "{email}" => $lang->email_addr, - "{bbname}" => $lang->board_name, - "{bburl}" => $lang->board_url - ); - - $html_personalisation = $text_personalisation = "\n"; - $text_personalisation = substr($text_personalisation, 0, -2)."');\n// -->\n"; - - $plugins->run_hooks("admin_user_mass_email_send_start"); - - $localized_time_offset = (float)$mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - - if($mybb->input['step'] == 4) - { - // All done here - if($mybb->request_method == "post") - { - // Sending this message now - if($mybb->input['delivery_type'] == "now") - { - $delivery_date = TIME_NOW; - } - // Delivering in the future - else - { - if(stristr($mybb->input['deliverytime_time'], "pm")) - { - $mybb->input['deliveryhour'] += 12; - } - - $exploded = explode(':', $mybb->input['endtime_time']); - $mybb->input['deliveryhour'] = (int)$exploded[0]; - - $exploded = explode(' ', $exploded[1]); - $mybb->input['deliveryminute'] = (int)$exploded[0]; - - $delivery_date = gmmktime($mybb->input['deliveryhour'], $mybb->input['deliveryminute'], 0, $mybb->input['endtime_month'], $mybb->input['endtime_day'], $mybb->input['endtime_year'])- $localized_time_offset; - if($delivery_date <= TIME_NOW) - { - $errors[] = $lang->error_only_in_future; - } - } - - if(!$errors) - { - // Mark as queued for delivery - $updated_email = array( - "status" => 1, - "senddate" => $delivery_date - ); - - $plugins->run_hooks("admin_user_mass_email_send_finalize_commit"); - - $db->update_query("massemails", $updated_email, "mid='{$email['mid']}'"); - - flash_message($lang->success_mass_mail_saved, 'success'); - admin_redirect("index.php?module=user-mass_mail"); - } - } - - // Show summary of the mass email we've just been creating and allow the user to specify the delivery date - $page->output_header("{$lang->send_mass_mail}: {$lang->step_four}"); - - $page->output_nav_tabs($sub_tabs, 'send_mass_mail'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - $input = $mybb->input; - } - else - { - $input = array(); - if($email['senddate'] != 0) - { - if($email['senddate'] <= TIME_NOW) - { - $input['delivery_type'] = "now"; - $delivery_type_checked['now'] = " checked=\"checked\""; - } - else - { - $input['delivery_type'] = "future"; - $time = gmdate("d-n-Y", $email['senddate'] + $localized_time_offset); - $time = explode('-', $time); - $input['deliverymonth'] = (int)$time[1]; - $input['deliveryday'] = (int)$time[0]; - $input['deliveryyear'] = (int)$time[2]; - $input['endtime_time'] = gmdate($mybb->settings['timeformat'], $email['senddate'] + $localized_time_offset); - $delivery_type_checked['future'] = " checked=\"checked\""; - } - } - else - { - $input['delivery_type'] = "now"; - $delivery_type_checked['now'] = " checked=\"checked\""; - } - } - - $table = new Table; - $table->construct_cell("{$lang->delivery_method}:", array('width' => '25%')); - if($email['type'] == 1) - { - $delivery_type = $lang->private_message; - } - else if($email['type'] == 0) - { - $delivery_type = $lang->email; - } - $table->construct_cell($delivery_type); - $table->construct_row(); - - $table->construct_cell("{$lang->subject}:"); - $table->construct_cell(htmlspecialchars_uni($email['subject'])); - $table->construct_row(); - - $table->construct_cell("{$lang->message}:"); - $format_preview = ''; - if($email['format'] == 0 || $email['format'] == 2) - { - $format_preview .= "{$lang->text_based} - {$lang->preview}"; - } - if($email['format'] == 2) - { - $format_preview .= " {$lang->and}
"; - } - if($email['format'] == 1 || $email['format'] == 2) - { - $format_preview.= "{$lang->html_based} - {$lang->preview}"; - } - $table->construct_cell($format_preview); - $table->construct_row(); - - // Recipient counts & details - $table->construct_cell("{$lang->total_recipients}:"); - $table->construct_cell(my_number_format($email['totalcount'])." - {$lang->change_recipient_conds}"); - $table->construct_row(); - - $table->output("{$lang->send_mass_mail}: {$lang->step_four} - {$lang->review_message}"); - - if(!$input['endtime_time']) - { - $input['endtime_time'] = gmdate($mybb->settings['timeformat'], TIME_NOW + $localized_time_offset); - } - - if(!$input['deliveryyear']) - { - $enddateyear = gmdate('Y', TIME_NOW + $localized_time_offset); - } - else - { - $enddateyear = (int)$input['deliveryyear']; - } - - if(!$input['deliverymonth']) - { - $input['enddatemonth'] = gmdate('n', TIME_NOW + $localized_time_offset); - } - else - { - $input['enddatemonth'] = (int)$input['deliverymonth']; - } - - if(!$input['deliveryday']) - { - $input['enddateday'] = gmdate('j', TIME_NOW + $localized_time_offset); - } - else - { - $input['enddateday'] = (int)$input['deliveryday']; - } - - $monthnames = array( - "offset", - $lang->january, - $lang->february, - $lang->march, - $lang->april, - $lang->may, - $lang->june, - $lang->july, - $lang->august, - $lang->september, - $lang->october, - $lang->november, - $lang->december, - ); - - $enddatemonth = ""; - foreach($monthnames as $key => $month) - { - if($month == "offset") - { - continue; - } - - if($key == $input['enddatemonth']) - { - $enddatemonth .= "\n"; - } - else - { - $enddatemonth .= "\n"; - } - } - - $enddateday = ""; - - // Construct option list for days - for($i = 1; $i <= 31; ++$i) - { - if($i == $input['enddateday']) - { - $enddateday .= "\n"; - } - else - { - $enddateday .= "\n"; - } - } - - $form = new Form("index.php?module=user-mass_mail&action=send&step=4&mid={$email['mid']}", "post"); - $form_container = new FormContainer("{$lang->send_mass_mail}: {$lang->step_four} - {$lang->define_delivery_date}"); - - $actions = " -
-
- -
-
- - - - -
\n   \n\n   \n\n - {$lang->time} ".$form->generate_text_box('endtime_time', $input['endtime_time'], array('id' => 'endtime_time', 'style' => 'width: 60px;'))."
-
-
- "; - $form_container->output_row("{$lang->delivery_date}: *", $lang->delivery_date_desc, $actions); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->schedule_for_delivery); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); - } - elseif($mybb->input['step'] == 3) - { - // Define the recipients/conditions - if($mybb->request_method == "post") - { - // Need to perform the search to fetch the number of users we're emailing - $member_query = build_mass_mail_query($mybb->input['conditions']); - $query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query); - $num = $db->fetch_field($query, "num"); - - if($num == 0) - { - $errors[] = $lang->error_no_users; - } - // Got one or more results - else - { - $updated_email = array( - "totalcount" => $num, - "conditions" => $db->escape_string(my_serialize($mybb->input['conditions'])) - ); - - $plugins->run_hooks("admin_user_mass_email_send_define_commit"); - - $db->update_query("massemails", $updated_email, "mid='{$email['mid']}'"); - - // Take the user to the next step - admin_redirect("index.php?module=user-mass_mail&action=send&step=4&mid={$email['mid']}"); - } - } - - $page->output_header("{$lang->send_mass_mail}: {$lang->step_three}"); - - $form = new Form("index.php?module=user-mass_mail&action=send&step=3&mid={$email['mid']}", "post"); - $page->output_nav_tabs($sub_tabs, 'send_mass_mail'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - $input = $mybb->input; - } - else - { - if($email['conditions'] != '') - { - $input = array( - "conditions" => my_unserialize($email['conditions']) - ); - } - else - { - $input = array(); - } - } - - $options = array( - 'username', 'email', 'postnum_dir', 'postnum', 'regdate', 'regdate_date', 'regdate_dir', 'lastactive', 'lastactive_date', 'lastactive_dir' - ); - - foreach($options as $option) - { - if(!isset($input['conditions'][$option])) - { - $input['conditions'][$option] = ''; - } - } - if(!isset($input['conditions']['usergroup']) || !is_array($input['conditions']['usergroup'])) - { - $input['conditions']['usergroup'] = array(); - } - - $form_container = new FormContainer("{$lang->send_mass_mail}: {$lang->step_three} - {$lang->define_the_recipients}"); - - $form_container->output_row($lang->username_contains, "", $form->generate_text_box('conditions[username]', htmlspecialchars_uni($input['conditions']['username']), array('id' => 'username')), 'username'); - $form_container->output_row($lang->email_addr_contains, "", $form->generate_text_box('conditions[email]', $input['conditions']['email'], array('id' => 'email')), 'email'); - - $options = array(); - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[$usergroup['gid']] = $usergroup['title']; - } - - $form_container->output_row($lang->members_of, $lang->additional_user_groups_desc, $form->generate_select_box('conditions[usergroup][]', $options, $input['conditions']['usergroup'], array('id' => 'usergroups', 'multiple' => true, 'size' => 5)), 'usergroups'); - - $greater_options = array( - "greater_than" => $lang->greater_than, - "is_exactly" => $lang->is_exactly, - "less_than" => $lang->less_than - ); - $form_container->output_row($lang->post_count_is, "", $form->generate_select_box('conditions[postnum_dir]', $greater_options, $input['conditions']['postnum_dir'], array('id' => 'postnum_dir'))." ".$form->generate_numeric_field('conditions[postnum]', $input['conditions']['postnum'], array('id' => 'postnum', 'min' => 0)), 'postnum'); - - $more_options = array( - "more_than" => $lang->more_than, - "less_than" => $lang->less_than - ); - - $date_options = array( - "hours" => $lang->hours, - "days" => $lang->days, - "weeks" => $lang->weeks, - "months" => $lang->months, - "years" => $lang->years - ); - $form_container->output_row($lang->user_registered, "", $form->generate_select_box('conditions[regdate_dir]', $more_options, $input['conditions']['regdate_dir'], array('id' => 'regdate_dir'))." ".$form->generate_numeric_field('conditions[regdate]', $input['conditions']['regdate'], array('id' => 'regdate', 'min' => 0))." ".$form->generate_select_box('conditions[regdate_date]', $date_options, $input['conditions']['regdate_date'], array('id' => 'regdate_date'))." {$lang->ago}", 'regdate'); - - $form_container->output_row($lang->user_last_active, "", $form->generate_select_box('conditions[lastactive_dir]', $more_options, $input['conditions']['lastactive_dir'], array('id' => 'lastactive_dir'))." ".$form->generate_numeric_field('conditions[lastactive]', $input['conditions']['lastactive'], array('id' => 'lastactive', 'min' => 0))." ".$form->generate_select_box('conditions[lastactive_date]', $date_options, $input['conditions']['lastactive_date'], array('id' => 'lastactive_date'))." {$lang->ago}", 'lastactive'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->next_step); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); - } - // Reviewing the automatic text based version of the message. - elseif($mybb->input['step'] == 2) - { - // Update text based version - if($mybb->request_method == "post") - { - if(!trim($mybb->input['message'])) - { - $errors[] = $lang->error_missing_plain_text; - } - else - { - $updated_email = array( - "message" => $db->escape_string($mybb->input['message']) - ); - - $plugins->run_hooks("admin_user_mass_email_send_review_commit"); - - $db->update_query("massemails", $updated_email, "mid='{$email['mid']}'"); - - // Take the user to the next step - admin_redirect("index.php?module=user-mass_mail&action=send&step=3&mid={$email['mid']}"); - } - } - - $page->output_header("{$lang->send_mass_mail}: {$lang->step_two}"); - - $form = new Form("index.php?module=user-mass_mail&action=send&step=2&mid={$email['mid']}", "post"); - $page->output_nav_tabs($sub_tabs, 'send_mass_mail'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer("{$lang->send_mass_mail}: {$lang->step_two} - {$lang->review_text_version}"); - $form_container->output_row("{$lang->review_text_version_desc}:", $text_personalisation, $form->generate_text_area('message', $email['message'], array('id' => 'message', 'rows' => 15, 'cols '=> 70, 'style' => 'width: 95%'))); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->next_step); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); - } - elseif(!$mybb->input['step'] || $mybb->input['step'] == 1) - { - if($mybb->request_method == "post") - { - if(!trim($mybb->input['subject'])) - { - $errors[] = $lang->error_missing_subject; - } - - if($mybb->input['type'] == 1) - { - if(!$mybb->input['message']) - { - $errors[] = $lang->error_missing_message; - } - } - else - { - if($mybb->input['format'] == 2 && $mybb->input['automatic_text'] == 0 && !$mybb->input['message']) - { - $errors[] = $lang->error_missing_plain_text; - } - - if(($mybb->input['format'] == 1 || $mybb->input['format'] == 2) && !$mybb->input['htmlmessage']) - { - $errors[] = $lang->error_missing_html; - } - else if($mybb->input['format'] == 0 && !$mybb->input['message']) - { - $errors[] = $lang->error_missing_plain_text; - } - } - - // No errors, insert away - if(!$errors) - { - if(!$new_email['mid']) - { - // Sending via a PM - if($mybb->input['type'] == 1) - { - $mybb->input['format'] = 0; - $mybb->input['htmlmessage'] = ''; - } - // Sending via email - else - { - // Do we need to generate a text based version? - if($mybb->input['format'] == 2 && $mybb->input['automatic_text']) - { - $mybb->input['message'] = create_text_message($mybb->input['htmlmessage']); - } - else if($mybb->input['format'] == 1) - { - $mybb->input['message'] = ''; - } - else if($mybb->input['format'] == 0) - { - $mybb->input['htmlmessage'] = ''; - } - } - - $new_email = array( - "uid" => $mybb->user['uid'], - "subject" => $db->escape_string($mybb->input['subject']), - "message" => $db->escape_string($mybb->input['message']), - "htmlmessage" => $db->escape_string($mybb->input['htmlmessage']), - "format" => $mybb->get_input('format', MyBB::INPUT_INT), - "type" => $mybb->get_input('type', MyBB::INPUT_INT), - "dateline" => TIME_NOW, - "senddate" => 0, - "status" => 0, - "sentcount" => 0, - "totalcount" => 0, - "conditions" => "", - "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT) - ); - - $mid = $db->insert_query("massemails", $new_email); - - $plugins->run_hooks("admin_user_mass_email_send_insert_commit"); - } - // Updating an existing one - else - { - $updated_email = array( - "subject" => $db->escape_string($mybb->input['subject']), - "message" => $db->escape_string($mybb->input['message']), - "htmlmessage" => $db->escape_string($mybb->input['htmlmessage']), - "format" => $mybb->get_input('format', MyBB::INPUT_INT), - "type" => $mybb->get_input('type', MyBB::INPUT_INT), - "perpage" => $mybb->get_input('perpage', MyBB::INPUT_INT) - ); - - $plugins->run_hooks("admin_user_mass_email_send_update_commit"); - - $db->update_query("massemails", $updated_email, "mid='{$email['mid']}'"); - $mid = $email['mid']; - } - - if($mybb->input['format'] == 2 && $mybb->input['automatic_text'] == 1) - { - $next = 2; - } - else - { - $next = 3; - } - admin_redirect("index.php?module=user-mass_mail&action=send&step={$next}&mid={$mid}"); - } - } - - $page->output_header("{$lang->send_mass_mail}: {$lang->step_one}"); - - $mid_add = ''; - if($email['mid']) - { - $mid_add = "&mid={$email['mid']}"; - } - - $form = new Form("index.php?module=user-mass_mail&action=send{$mid_add}", "post"); - $page->output_nav_tabs($sub_tabs, 'send_mass_mail'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - $input = $mybb->input; - } - else if(!$email) - { - $input = array( - "type" => 0, - "format" => 2, - "automatic_text" => 1, - "perpage" => 50, - ); - } - else - { - $input = $email; - } - - $form_container = new FormContainer("{$lang->send_mass_mail}: {$lang->step_one} - {$lang->message_settings}"); - - $form_container->output_row("{$lang->subject}: *", $lang->subject_desc, $form->generate_text_box('subject', $input['subject'], array('id' => 'subject')), 'subject'); - - if($mybb->input['type'] == 0) - { - $type_email_checked = true; - $type_pm_checked = false; - } - else if($mybb->input['type'] == 1) - { - $type_email_checked = false; - $type_pm_checked = true; - } - - $type_options = array( - $form->generate_radio_button("type", 0, $lang->send_via_email, array("id" => "type_email", "checked" => $type_email_checked)), - $form->generate_radio_button("type", 1, $lang->send_via_pm, array("id" => "type_pm", "checked" => $type_pm_checked)) - ); - $form_container->output_row("{$lang->message_type}:", "", implode("
", $type_options)); - - $format_options = array( - 0 => $lang->plain_text_only, - 1 => $lang->html_only, - 2 => $lang->html_and_plain_text - ); - - $form_container->output_row("{$lang->message_format}:", "", $form->generate_select_box('format', $format_options, $input['format'], array('id' => 'format')), 'format', null, array("id" => "format_container")); - - $form_container->output_row("{$lang->per_page}: *", $lang->per_page_desc, $form->generate_numeric_field('perpage', $input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage'); - - $form_container->end(); - - if($mybb->input['format'] == 2) - { - if($mybb->input['automatic_text'] && !$email['mid']) - { - $automatic_text_check = true; - $text_display = 'display: none'; - $automatic_display = 'display: none;'; - } - } - else if($mybb->input['format'] == 1 && $mybb->input['type'] != 1) - { - $text_display = 'display: none;'; - } - else if($mybb->input['format'] == 0 || $mybb->input['type'] == 1) - { - $html_display = 'display: none'; - } - - echo "
"; - $form_container = new FormContainer("{$lang->send_mass_mail}: {$lang->step_one} - {$lang->define_html_message}"); - $form_container->output_row("{$lang->define_html_message_desc}:", $html_personalisation, $form->generate_text_area('htmlmessage', $input['htmlmessage'], array('id' => 'htmlmessage', 'rows' => 15, 'cols '=> 70, 'style' => 'width: 95%'))."
".$form->generate_check_box('automatic_text', 1, $lang->auto_gen_plain_text, array('checked' => $automatic_text_check, "id" => "automatic_text"))."
"); - $form_container->end(); - echo "
"; - - echo "
"; - $form_container = new FormContainer("{$lang->send_mass_mail}: {$lang->step_one} - {$lang->define_text_version}"); - $form_container->output_row("{$lang->define_text_version_desc}:", $text_personalisation, $form->generate_text_area('message', $input['message'], array('id' => 'message', 'rows' => 15, 'cols '=> 70, 'style' => 'width: 95%'))); - $form_container->end(); - echo "
"; - - echo " - "; - - $buttons[] = $form->generate_submit_button($lang->next_step); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); - } - - $plugins->run_hooks("admin_user_mass_email_preview_end"); -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("massemails", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $mass_email = $db->fetch_array($query); - - if(!$mass_email['mid']) - { - flash_message($lang->error_delete_invalid_mid, 'error'); - admin_redirect("index.php?module=user-mass_mail"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-mass_mail"); - } - - $plugins->run_hooks("admin_user_mass_email_delete_start"); - - if($mybb->request_method == "post") - { - $db->delete_query("massemails", "mid='{$mass_email['mid']}'"); - - $plugins->run_hooks("admin_user_mass_email_delete_commit"); - - // Log admin action - log_admin_action($mass_email['mid'], $mass_email['subject']); - - if($mybb->input['archive'] == 1) - { - flash_message($lang->success_mass_mail_deleted, 'success'); - admin_redirect("index.php?module=user-mass_mail&action=archive"); - } - else - { - flash_message($lang->success_mass_mail_deleted, 'success'); - admin_redirect("index.php?module=user-mass_mail"); - } - } - else - { - if($mybb->input['archive'] == 1) - { - $page->output_confirm_action("index.php?module=user-mass_mail&action=delete&mid={$mass_email['mid']}&archive=1", $lang->mass_mail_deletion_confirmation); - } - else - { - $page->output_confirm_action("index.php?module=user-mass_mail&action=delete&mid={$mass_email['mid']}", $lang->mass_mail_deletion_confirmation); - } - } -} - -if($mybb->input['action'] == "preview") -{ - $query = $db->simple_select("massemails", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $mass_email = $db->fetch_array($query); - - if(!$mass_email['mid']) - { - flash_message($lang->error_invalid_mid, 'error'); - admin_redirect("index.php?module=user-mass_mail"); - } - - $plugins->run_hooks("admin_user_mass_email_preview_start"); - - echo ''; - exit; -} - -if($mybb->input['action'] == "resend") -{ - // Copy and resend an email - $query = $db->simple_select("massemails", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $mass_email = $db->fetch_array($query); - - if(!$mass_email['mid']) - { - flash_message($lang->error_invalid_mid, 'error'); - admin_redirect("index.php?module=user-mass_mail"); - } - - $plugins->run_hooks("admin_user_mass_email_resend_start"); - - // Need to perform the search to fetch the number of users we're emailing - $member_query = build_mass_mail_query(my_unserialize($mass_email['conditions'])); - $query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query); - $total_recipients = $db->fetch_field($query, "num"); - - // Create the new email based off the old one. - $new_email = array( - "uid" => $mass_email['uid'], - "subject" => $db->escape_string($mass_email['subject']), - "message" => $db->escape_string($mass_email['message']), - "htmlmessage" => $db->escape_string($mass_email['htmlmessage']), - "type" => $db->escape_string($mass_email['type']), - "format" => $db->escape_string($mass_email['format']), - "dateline" => TIME_NOW, - "senddate" => '0', - "status" => 0, - "sentcount" => 0, - "totalcount" => $total_recipients, - "conditions" => $db->escape_string($mass_email['conditions']), - "perpage" => $mass_email['perpage'] - ); - - $mid = $db->insert_query("massemails", $new_email); - - $plugins->run_hooks("admin_user_mass_email_resend_end"); - - // Redirect the user to the summary page so they can select when to deliver this message - flash_message($lang->success_mass_mail_resent, 'success'); - admin_redirect("index.php?module=user-mass_mail&action=send&step=4&mid={$mid}"); - exit; -} - -if($mybb->input['action'] == "cancel") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=user-users"); - } - - // Cancel the delivery of a mass-email. - $query = $db->simple_select("massemails", "*", "mid='".$mybb->get_input('mid', MyBB::INPUT_INT)."'"); - $mass_email = $db->fetch_array($query); - - if(!$mass_email['mid']) - { - flash_message($lang->error_invalid_mid, 'error'); - admin_redirect("index.php?module=user-mass_mail"); - } - - $updated_email = array( - 'status' => 4 - ); - - $plugins->run_hooks("admin_user_mass_email_cancel"); - - $db->update_query("massemails", $updated_email, "mid='{$mass_email['mid']}'"); - - flash_message($lang->success_mass_mail_canceled, 'success'); - admin_redirect("index.php?module=user-mass_mail"); - exit; -} - -if($mybb->input['action'] == "archive") -{ - // View a list of archived email messages - $page->output_header($lang->mass_mail_archive); - - $plugins->run_hooks("admin_user_mass_email_archive_start"); - - $page->output_nav_tabs($sub_tabs, 'archive'); - - $table = new Table; - $table->construct_header($lang->subject); - $table->construct_header($lang->status, array('width' => '130', 'class' => 'align_center')); - $table->construct_header($lang->delivery_date, array('width' => '130', 'class' => 'align_center')); - $table->construct_header($lang->recipients, array('width' => '130', 'class' => 'align_center')); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200)); - - $query = $db->simple_select("massemails", "*", "status NOT IN (0, 1, 2)", array('order_by' => 'senddate')); - while($email = $db->fetch_array($query)) - { - $email['subject'] = htmlspecialchars_uni($email['subject']); - if($email['senddate'] < TIME_NOW) - { - $table->construct_cell("{$email['subject']}"); - } - if($email['status'] == 3) - { - $status = $lang->delivered; - } - else if($email['status'] == 4) - { - $status = $lang->canceled; - } - $table->construct_cell($status, array("class" => "align_center")); - - $delivery_date = my_date($mybb->settings['dateformat'], $email['senddate']); - - $table->construct_cell($delivery_date, array("class" => "align_center")); - $table->construct_cell(my_number_format($email['totalcount']), array("class" => "align_center")); - - $table->construct_cell("{$lang->resend}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("post_code}&archive=1\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->mass_mail_deletion_confirmation}')\">{$lang->delete}", array("width" => 100, "class" => "align_center")); - - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_archived_messages, array('colspan' => 6)); - $table->construct_row(); - $no_results = true; - } - - $plugins->run_hooks("admin_user_mass_email_archive_end"); - - $table->output($lang->mass_mail_archive); - - $page->output_footer(); -} - -if(!$mybb->input['action']) -{ - $page->output_header($lang->mass_mail_queue); - - $plugins->run_hooks("admin_user_mass_email_start"); - - $page->output_nav_tabs($sub_tabs, 'mail_queue'); - - $table = new Table; - $table->construct_header($lang->subject); - $table->construct_header($lang->status, array('width' => '130', 'class' => 'align_center')); - $table->construct_header($lang->delivery_date, array('width' => '130', 'class' => 'align_center')); - $table->construct_header($lang->recipients, array('width' => '130', 'class' => 'align_center')); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200)); - - $query = $db->simple_select("massemails", "*", "status IN (0, 1, 2)", array('order_by' => 'senddate')); - while($email = $db->fetch_array($query)) - { - $email['subject'] = htmlspecialchars_uni($email['subject']); - if(TIME_NOW >= $email['senddate'] && $email['status'] > 1) - { - $table->construct_cell("{$email['subject']}"); - } - else - { - $table->construct_cell("{$email['subject']}"); - } - if($email['status'] == 0) - { - $status = $lang->draft; - } - else if($email['status'] == 1) - { - $status = $lang->queued; - } - else if($email['status'] == 2) - { - $progress = ceil($email['sentcount']/$email['totalcount']*100); - if($progress > 100) - { - $progress = 100; - } - $status = "{$lang->delivering} ({$progress}%)"; - } - $table->construct_cell($status, array("class" => "align_center")); - - if($email['status'] != 0) - { - $delivery_date = my_date($mybb->settings['dateformat'], $email['senddate']); - } - else - { - $delivery_date = $lang->na; - } - - $table->construct_cell($delivery_date, array("class" => "align_center")); - $table->construct_cell(my_number_format($email['totalcount']), array("class" => "align_center")); - if(TIME_NOW >= $email['senddate'] && $email['status'] > 1) - { - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->mass_mail_cancel_confirmation}')\">{$lang->cancel}", array("width" => 100, "colspan" => 2, "class" => "align_center")); - } - else - { - $table->construct_cell("{$lang->edit}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->mass_mail_deletion_confirmation}')\">{$lang->delete}", array("width" => 100, "class" => "align_center")); - } - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_unsent_messages, array('colspan' => 6)); - $table->construct_row(); - $no_results = true; - } - - $plugins->run_hooks("admin_user_mass_email_end"); - - $table->output($lang->mass_mail_queue); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/user/module_meta.php b/html/forums/admin/modules/user/module_meta.php deleted file mode 100644 index a7b1707..0000000 --- a/html/forums/admin/modules/user/module_meta.php +++ /dev/null @@ -1,97 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -/** - * @return bool true - */ -function user_meta() -{ - global $page, $lang, $plugins; - - $sub_menu = array(); - $sub_menu['10'] = array("id" => "users", "title" => $lang->users, "link" => "index.php?module=user-users"); - $sub_menu['20'] = array("id" => "awaiting_activation", "title" => $lang->awaiting_activation, "link" => "index.php?module=user-awaiting_activation"); - $sub_menu['30'] = array("id" => "groups", "title" => $lang->groups, "link" => "index.php?module=user-groups"); - $sub_menu['40'] = array("id" => "titles", "title" => $lang->user_titles, "link" => "index.php?module=user-titles"); - $sub_menu['50'] = array("id" => "banning", "title" => $lang->banning, "link" => "index.php?module=user-banning"); - $sub_menu['60'] = array("id" => "admin_permissions", "title" => $lang->admin_permissions, "link" => "index.php?module=user-admin_permissions"); - $sub_menu['70'] = array("id" => "mass_mail", "title" => $lang->mass_mail, "link" => "index.php?module=user-mass_mail"); - $sub_menu['80'] = array("id" => "group_promotions", "title" => $lang->group_promotions, "link" => "index.php?module=user-group_promotions"); - - $sub_menu = $plugins->run_hooks("admin_user_menu", $sub_menu); - - $page->add_menu_item($lang->users_and_groups, "user", "index.php?module=user", 30, $sub_menu); - return true; -} - -/** - * @param string $action - * - * @return string - */ -function user_action_handler($action) -{ - global $page, $lang, $plugins; - - $page->active_module = "user"; - - $actions = array( - 'awaiting_activation' => array('active' => 'awaiting_activation', 'file' => 'awaiting_activation.php'), - 'group_promotions' => array('active' => 'group_promotions', 'file' => 'group_promotions.php'), - 'admin_permissions' => array('active' => 'admin_permissions', 'file' => 'admin_permissions.php'), - 'titles' => array('active' => 'titles', 'file' => 'titles.php'), - 'banning' => array('active' => 'banning', 'file' => 'banning.php'), - 'groups' => array('active' => 'groups', 'file' => 'groups.php'), - 'mass_mail' => array('active' => 'mass_mail', 'file' => 'mass_mail.php'), - 'users' => array('active' => 'users', 'file' => 'users.php') - ); - - $actions = $plugins->run_hooks("admin_user_action_handler", $actions); - - if(isset($actions[$action])) - { - $page->active_action = $actions[$action]['active']; - return $actions[$action]['file']; - } - else - { - $page->active_action = "users"; - return "users.php"; - } -} - -/** - * @return array - */ -function user_admin_permissions() -{ - global $lang, $plugins; - - $admin_permissions = array( - "users" => $lang->can_manage_users, - "awaiting_activation" => $lang->can_manage_awaiting_activation, - "groups" => $lang->can_manage_user_groups, - "titles" => $lang->can_manage_user_titles, - "banning" => $lang->can_manage_user_bans, - "admin_permissions" => $lang->can_manage_admin_permissions, - "mass_mail" => $lang->can_send_mass_mail, - "group_promotions" => $lang->can_manage_group_promotions - ); - - $admin_permissions = $plugins->run_hooks("admin_user_permissions", $admin_permissions); - - return array("name" => $lang->users_and_groups, "permissions" => $admin_permissions, "disporder" => 30); -} diff --git a/html/forums/admin/modules/user/titles.php b/html/forums/admin/modules/user/titles.php deleted file mode 100644 index d33e789..0000000 --- a/html/forums/admin/modules/user/titles.php +++ /dev/null @@ -1,280 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -$page->add_breadcrumb_item($lang->user_titles, "index.php?module=user-titles"); - -if($mybb->input['action'] == "add" || !$mybb->input['action']) -{ - $sub_tabs['manage_titles'] = array( - 'title' => $lang->user_titles, - 'link' => "index.php?module=user-titles", - 'description' => $lang->user_titles_desc - ); - $sub_tabs['add_title'] = array( - 'title' => $lang->add_new_user_title, - 'link' => "index.php?module=user-titles&action=add", - 'description' => $lang->add_new_user_title_desc - ); -} - -$plugins->run_hooks("admin_user_titles_begin"); - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_user_titles_add"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!isset($mybb->input['posts'])) - { - $errors[] = $lang->error_missing_posts; - } - - $query = $db->simple_select("usertitles", "utid", "posts= '".$mybb->get_input('posts', MyBB::INPUT_INT)."'"); - if($db->num_rows($query)) - { - $errors[] = $lang->error_cannot_have_same_posts; - } - - if(!$errors) - { - $new_title = array( - "title" => $db->escape_string($mybb->input['title']), - "posts" => $mybb->get_input('posts', MyBB::INPUT_INT), - "stars" => $mybb->get_input('stars', MyBB::INPUT_INT), - "starimage" => $db->escape_string($mybb->input['starimage']) - ); - - $utid = $db->insert_query("usertitles", $new_title); - - $plugins->run_hooks("admin_user_titles_add_commit"); - - $cache->update_usertitles(); - - // Log admin action - log_admin_action($utid, htmlspecialchars_uni($mybb->input['title']), $mybb->input['posts']); - - flash_message($lang->success_user_title_created, 'success'); - admin_redirect("index.php?module=user-titles"); - } - } - else - { - $mybb->input = array_merge($mybb->input, array( - 'stars' => '1', - 'starimage' => '{theme}/star.png', - ) - ); - } - - $page->add_breadcrumb_item($lang->add_new_user_title); - $page->output_header($lang->user_titles." - ".$lang->add_new_user_title); - - $page->output_nav_tabs($sub_tabs, 'add_title'); - $form = new Form("index.php?module=user-titles&action=add", "post"); - - - if($errors) - { - $page->output_inline_error($errors); - } - - $form_container = new FormContainer($lang->add_new_user_title); - $form_container->output_row($lang->title_to_assign."*", $lang->title_to_assign_desc, $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->minimum_posts, $lang->minimum_posts_desc, $form->generate_numeric_field('posts', $mybb->input['posts'], array('id' => 'posts', 'min' => 0)), 'posts'); - $form_container->output_row($lang->number_of_stars, $lang->number_of_stars_desc, $form->generate_numeric_field('stars', $mybb->input['stars'], array('id' => 'stars', 'min' => 0)), 'stars'); - $form_container->output_row($lang->star_image, $lang->star_image_desc, $form->generate_text_box('starimage', $mybb->input['starimage'], array('id' => 'starimage')), 'starimage'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_user_title); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $query = $db->simple_select("usertitles", "*", "utid='".$mybb->get_input('utid', MyBB::INPUT_INT)."'"); - $usertitle = $db->fetch_array($query); - - if(!$usertitle['utid']) - { - flash_message($lang->error_invalid_user_title, 'error'); - admin_redirect("index.php?module=user-titles"); - } - - $plugins->run_hooks("admin_user_titles_edit"); - - if($mybb->request_method == "post") - { - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - if(!isset($mybb->input['posts'])) - { - $errors[] = $lang->error_missing_posts; - } - - $query = $db->simple_select("usertitles", "utid", "posts= '".$mybb->get_input('posts', MyBB::INPUT_INT)."' AND utid!= '".$mybb->get_input('utid', MyBB::INPUT_INT)."'"); - if($db->num_rows($query)) - { - $errors[] = $lang->error_cannot_have_same_posts; - } - - if(!$errors) - { - $updated_title = array( - "title" => $db->escape_string($mybb->input['title']), - "posts" => $mybb->get_input('posts', MyBB::INPUT_INT), - "stars" => $mybb->get_input('stars', MyBB::INPUT_INT), - "starimage" => $db->escape_string($mybb->input['starimage']) - ); - - $plugins->run_hooks("admin_user_titles_edit_commit"); - - $db->update_query("usertitles", $updated_title, "utid='{$usertitle['utid']}'"); - - $cache->update_usertitles(); - - // Log admin action - log_admin_action($usertitle['utid'], htmlspecialchars_uni($mybb->input['title']), $mybb->input['posts']); - - flash_message($lang->success_user_title_updated, 'success'); - admin_redirect("index.php?module=user-titles"); - } - } - - $page->add_breadcrumb_item($lang->edit_user_title); - $page->output_header($lang->user_titles." - ".$lang->edit_user_title); - - $sub_tabs['edit_title'] = array( - 'title' => $lang->edit_user_title, - 'link' => "index.php?module=user-titles&action=edit&utid=".$usertitle['utid'], - 'description' => $lang->edit_user_title_desc - ); - - $page->output_nav_tabs($sub_tabs, 'edit_title'); - $form = new Form("index.php?module=user-titles&action=edit&utid={$usertitle['utid']}", "post"); - - - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, $usertitle); - } - - $form_container = new FormContainer($lang->edit_user_title); - $form_container->output_row($lang->title_to_assign."*", $lang->title_to_assign_desc, $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); - $form_container->output_row($lang->minimum_posts, $lang->minimum_posts_desc, $form->generate_numeric_field('posts', $mybb->input['posts'], array('id' => 'posts', 'min' => 0)), 'posts'); - $form_container->output_row($lang->number_of_stars, $lang->number_of_stars_desc, $form->generate_numeric_field('stars', $mybb->input['stars'], array('id' => 'stars', 'min' => 0)), 'stars'); - $form_container->output_row($lang->star_image, $lang->star_image_desc, $form->generate_text_box('starimage', $mybb->input['starimage'], array('id' => 'starimage')), 'starimage'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->save_user_title); - - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); - -} - -if($mybb->input['action'] == "delete") -{ - $query = $db->simple_select("usertitles", "*", "utid='".$mybb->get_input('utid', MyBB::INPUT_INT)."'"); - $usertitle = $db->fetch_array($query); - - if(!$usertitle['utid']) - { - flash_message($lang->error_invalid_user_title, 'error'); - admin_redirect("index.php?module=user-titles"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-titles"); - } - - $plugins->run_hooks("admin_user_titles_delete"); - - if($mybb->request_method == "post") - { - $db->delete_query("usertitles", "utid='{$usertitle['utid']}'"); - - $plugins->run_hooks("admin_user_titles_delete_commit"); - - $cache->update_usertitles(); - - // Log admin action - log_admin_action($usertitle['utid'], htmlspecialchars_uni($usertitle['title']), $usertitle['posts']); - - flash_message($lang->success_user_title_deleted, 'success'); - admin_redirect("index.php?module=user-titles"); - } - else - { - $page->output_confirm_action("index.php?module=user-titles&action=delete&utid={$usertitle['utid']}", $lang->user_title_deletion_confirmation); - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_user_titles_start"); - - $page->output_header($lang->manage_user_titles); - - $page->output_nav_tabs($sub_tabs, 'manage_titles'); - - $table = new Table; - $table->construct_header($lang->user_title); - $table->construct_header($lang->minimum_posts, array('width' => '130', 'class' => 'align_center')); - $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200)); - - $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts')); - while($usertitle = $db->fetch_array($query)) - { - $usertitle['title'] = htmlspecialchars_uni($usertitle['title']); - $table->construct_cell("{$usertitle['title']}"); - $table->construct_cell($usertitle['posts'], array("class" => "align_center")); - $table->construct_cell("{$lang->edit}", array("width" => 100, "class" => "align_center")); - $table->construct_cell("post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->user_title_deletion_confirmation}')\">{$lang->delete}", array("width" => 100, "class" => "align_center")); - $table->construct_row(); - } - - if($table->num_rows() == 0) - { - $table->construct_cell($lang->no_user_titles, array('colspan' => 4)); - $table->construct_row(); - $no_results = true; - } - - $table->output($lang->manage_user_titles); - - $page->output_footer(); -} diff --git a/html/forums/admin/modules/user/users.php b/html/forums/admin/modules/user/users.php deleted file mode 100644 index bb64038..0000000 --- a/html/forums/admin/modules/user/users.php +++ /dev/null @@ -1,4319 +0,0 @@ -
Please make sure IN_MYBB is defined."); -} - -require_once MYBB_ROOT."inc/functions_upload.php"; - -$page->add_breadcrumb_item($lang->users, "index.php?module=user-users"); - -if($mybb->input['action'] == "add" || $mybb->input['action'] == "merge" || $mybb->input['action'] == "search" || !$mybb->input['action']) -{ - $sub_tabs['browse_users'] = array( - 'title' => $lang->browse_users, - 'link' => "index.php?module=user-users", - 'description' => $lang->browse_users_desc - ); - - $sub_tabs['find_users'] = array( - 'title' => $lang->find_users, - 'link' => "index.php?module=user-users&action=search", - 'description' => $lang->find_users_desc - ); - - $sub_tabs['create_user'] = array( - 'title' => $lang->create_user, - 'link' => "index.php?module=user-users&action=add", - 'description' => $lang->create_user_desc - ); - - $sub_tabs['merge_users'] = array( - 'title' => $lang->merge_users, - 'link' => "index.php?module=user-users&action=merge", - 'description' => $lang->merge_users_desc - ); -} - -$user_view_fields = array( - "avatar" => array( - "title" => $lang->avatar, - "width" => "24", - "align" => "" - ), - - "username" => array( - "title" => $lang->username, - "width" => "", - "align" => "" - ), - - "email" => array( - "title" => $lang->email, - "width" => "", - "align" => "center" - ), - - "usergroup" => array( - "title" => $lang->primary_group, - "width" => "", - "align" => "center" - ), - - "additionalgroups" => array( - "title" => $lang->additional_groups, - "width" => "", - "align" => "center" - ), - - "regdate" => array( - "title" => $lang->registered, - "width" => "", - "align" => "center" - ), - - "lastactive" => array( - "title" => $lang->last_active, - "width" => "", - "align" => "center" - ), - - "postnum" => array( - "title" => $lang->post_count, - "width" => "", - "align" => "center" - ), - - "threadnum" => array( - "title" => $lang->thread_count, - "width" => "", - "align" => "center" - ), - - "reputation" => array( - "title" => $lang->reputation, - "width" => "", - "align" => "center" - ), - - "warninglevel" => array( - "title" => $lang->warning_level, - "width" => "", - "align" => "center" - ), - - "regip" => array( - "title" => $lang->registration_ip, - "width" => "", - "align" => "center" - ), - - "lastip" => array( - "title" => $lang->last_known_ip, - "width" => "", - "align" => "center" - ), - - "controls" => array( - "title" => $lang->controls, - "width" => "", - "align" => "center" - ) -); - -$sort_options = array( - "username" => $lang->username, - "regdate" => $lang->registration_date, - "lastactive" => $lang->last_active, - "numposts" => $lang->post_count, - "reputation" => $lang->reputation, - "warninglevel" => $lang->warning_level -); - -$plugins->run_hooks("admin_user_users_begin"); - -// Initialise the views manager for user based views -require MYBB_ADMIN_DIR."inc/functions_view_manager.php"; -if($mybb->input['action'] == "views") -{ - view_manager("index.php?module=user-users", "user", $user_view_fields, $sort_options, "user_search_conditions"); -} - -if($mybb->input['action'] == 'iplookup') -{ - $mybb->input['ipaddress'] = $mybb->get_input('ipaddress'); - $lang->ipaddress_misc_info = $lang->sprintf($lang->ipaddress_misc_info, htmlspecialchars_uni($mybb->input['ipaddress'])); - $ipaddress_location = $lang->na; - $ipaddress_host_name = $lang->na; - $modcp_ipsearch_misc_info = ''; - if(!strstr($mybb->input['ipaddress'], "*")) - { - // Return GeoIP information if it is available to us - if(function_exists('geoip_record_by_name')) - { - $ip_record = @geoip_record_by_name($mybb->input['ipaddress']); - if($ip_record) - { - $ipaddress_location = htmlspecialchars_uni(utf8_encode($ip_record['country_name'])); - if($ip_record['city']) - { - $ipaddress_location .= $lang->comma.htmlspecialchars_uni(utf8_encode($ip_record['city'])); - } - } - } - - $ipaddress_host_name = htmlspecialchars_uni(@gethostbyaddr($mybb->input['ipaddress'])); - - // gethostbyaddr returns the same ip on failure - if($ipaddress_host_name == $mybb->input['ipaddress']) - { - $ipaddress_host_name = $lang->na; - } - } - - ?> - -input['action'] == "activate_user") -{ - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=user-users"); - } - - $user = get_user($mybb->input['uid']); - - // Does the user not exist? - if(!$user['uid'] || $user['usergroup'] != 5) - { - flash_message($lang->error_invalid_user, 'error'); - admin_redirect("index.php?module=user-users"); - } - - $plugins->run_hooks("admin_user_users_coppa_activate"); - - $updated_user['usergroup'] = $user['usergroup']; - - // Update - if($user['coppauser']) - { - $updated_user = array( - "coppauser" => 0 - ); - } - else - { - $db->delete_query("awaitingactivation", "uid='{$user['uid']}'"); - } - - // Move out of awaiting activation if they're in it. - if($user['usergroup'] == 5) - { - $updated_user['usergroup'] = 2; - } - - $plugins->run_hooks("admin_user_users_coppa_activate_commit"); - - $db->update_query("users", $updated_user, "uid='{$user['uid']}'"); - - $cache->update_awaitingactivation(); - - $message = $lang->sprintf($lang->email_adminactivateaccount, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl']); - my_mail($user['email'], $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']), $message); - - // Log admin action - log_admin_action($user['uid'], htmlspecialchars_uni($user['username'])); - - if($mybb->input['from'] == "home") - { - if($user['coppauser']) - { - $message = $lang->success_coppa_activated; - } - else - { - $message = $lang->success_activated; - } - - update_admin_session('flash_message2', array('message' => $message, 'type' => 'success')); - } - else - { - if($user['coppauser']) - { - flash_message($lang->success_coppa_activated, 'success'); - } - else - { - flash_message($lang->success_activated, 'success'); - } - } - - if($admin_session['data']['last_users_url']) - { - $url = $admin_session['data']['last_users_url']; - update_admin_session('last_users_url', ''); - - if($mybb->input['from'] == "home") - { - update_admin_session('from', 'home'); - } - } - else - { - $url = "index.php?module=user-users&action=edit&uid={$user['uid']}"; - } - - $plugins->run_hooks("admin_user_users_coppa_end"); - - admin_redirect($url); -} - -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("admin_user_users_add"); - - if($mybb->request_method == "post") - { - // Determine the usergroup stuff - if(is_array($mybb->input['additionalgroups'])) - { - foreach($mybb->input['additionalgroups'] as $key => $gid) - { - if($gid == $mybb->input['usergroup']) - { - unset($mybb->input['additionalgroups'][$key]); - } - } - $additionalgroups = implode(",", $mybb->input['additionalgroups']); - } - else - { - $additionalgroups = ''; - } - - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler('insert'); - - // Set the data for the new user. - $new_user = array( - "uid" => $mybb->input['uid'], - "username" => $mybb->input['username'], - "password" => $mybb->input['password'], - "password2" => $mybb->input['confirm_password'], - "email" => $mybb->input['email'], - "email2" => $mybb->input['email'], - "usergroup" => $mybb->input['usergroup'], - "additionalgroups" => $additionalgroups, - "displaygroup" => $mybb->input['displaygroup'], - "profile_fields" => $mybb->input['profile_fields'], - "profile_fields_editable" => true, - ); - - // Set the data of the user in the datahandler. - $userhandler->set_data($new_user); - $errors = ''; - - // Validate the user and get any errors that might have occurred. - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - } - else - { - $user_info = $userhandler->insert_user(); - - $plugins->run_hooks("admin_user_users_add_commit"); - - // Log admin action - log_admin_action($user_info['uid'], htmlspecialchars_uni($user_info['username'])); - - flash_message($lang->success_user_created, 'success'); - admin_redirect("index.php?module=user-users&action=edit&uid={$user_info['uid']}"); - } - } - - // Fetch custom profile fields - only need required profile fields here - $query = $db->simple_select("profilefields", "*", "required=1", array('order_by' => 'disporder')); - - $profile_fields = array(); - while($profile_field = $db->fetch_array($query)) - { - $profile_fields['required'][] = $profile_field; - } - - $page->add_breadcrumb_item($lang->create_user); - $page->output_header($lang->create_user); - - $form = new Form("index.php?module=user-users&action=add", "post"); - - $page->output_nav_tabs($sub_tabs, 'create_user'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - else - { - $mybb->input = array_merge($mybb->input, array('usergroup' => 2)); - } - - $form_container = new FormContainer($lang->required_profile_info); - $form_container->output_row($lang->username." *", "", $form->generate_text_box('username', htmlspecialchars_uni($mybb->get_input('username')), array('id' => 'username')), 'username'); - $form_container->output_row($lang->password." *", "", $form->generate_password_box('password', $mybb->input['password'], array('id' => 'password', 'autocomplete' => 'off')), 'password'); - $form_container->output_row($lang->confirm_password." *", "", $form->generate_password_box('confirm_password', $mybb->input['confirm_password'], array('id' => 'confirm_new_password')), 'confirm_new_password'); - $form_container->output_row($lang->email_address." *", "", $form->generate_text_box('email', $mybb->input['email'], array('id' => 'email')), 'email'); - - $display_group_options[0] = $lang->use_primary_user_group; - $options = array(); - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - $display_group_options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - } - - $form_container->output_row($lang->primary_user_group." *", "", $form->generate_select_box('usergroup', $options, $mybb->input['usergroup'], array('id' => 'usergroup')), 'usergroup'); - $form_container->output_row($lang->additional_user_groups, $lang->additional_user_groups_desc, $form->generate_select_box('additionalgroups[]', $options, $mybb->input['additionalgroups'], array('id' => 'additionalgroups', 'multiple' => true, 'size' => 5)), 'additionalgroups'); - $form_container->output_row($lang->display_user_group." *", "", $form->generate_select_box('displaygroup', $display_group_options, $mybb->input['displaygroup'], array('id' => 'displaygroup')), 'displaygroup'); - - // Output custom profile fields - required - output_custom_profile_fields($profile_fields['required'], $mybb->input['profile_fields'], $form_container, $form); - - $form_container->end(); - $buttons[] = $form->generate_submit_button($lang->save_user); - $form->output_submit_wrapper($buttons); - - $form->end(); - $page->output_footer(); -} - -if($mybb->input['action'] == "edit") -{ - $user = get_user($mybb->input['uid']); - - // Does the user not exist? - if(!$user['uid']) - { - flash_message($lang->error_invalid_user, 'error'); - admin_redirect("index.php?module=user-users"); - } - - $plugins->run_hooks("admin_user_users_edit"); - - if($mybb->request_method == "post") - { - $plugins->run_hooks("admin_user_users_edit_start"); - if(is_super_admin($mybb->input['uid']) && $mybb->user['uid'] != $mybb->input['uid'] && !is_super_admin($mybb->user['uid'])) - { - flash_message($lang->error_no_perms_super_admin, 'error'); - admin_redirect("index.php?module=user-users"); - } - - // Determine the usergroup stuff - if(is_array($mybb->input['additionalgroups'])) - { - foreach($mybb->input['additionalgroups'] as $key => $gid) - { - if($gid == $mybb->input['usergroup']) - { - unset($mybb->input['additionalgroups'][$key]); - } - } - $additionalgroups = implode(",", $mybb->input['additionalgroups']); - } - else - { - $additionalgroups = ''; - } - - $returndate = ""; - if(!empty($mybb->input['away_day'])) - { - $awaydate = TIME_NOW; - // If the user has indicated that they will return on a specific day, but not month or year, assume it is current month and year - if(!$mybb->input['away_month']) - { - $mybb->input['away_month'] = my_date('n', $awaydate); - } - if(!$mybb->input['away_year']) - { - $mybb->input['away_year'] = my_date('Y', $awaydate); - } - - $return_month = (int)substr($mybb->input['away_month'], 0, 2); - $return_day = (int)substr($mybb->input['away_day'], 0, 2); - $return_year = min($mybb->get_input('away_year', MyBB::INPUT_INT), 9999); - - // Check if return date is after the away date. - $returntimestamp = gmmktime(0, 0, 0, $return_month, $return_day, $return_year); - $awaytimestamp = gmmktime(0, 0, 0, my_date('n', $awaydate), my_date('j', $awaydate), my_date('Y', $awaydate)); - if($return_year < my_date('Y', $awaydate) || ($returntimestamp < $awaytimestamp && $return_year == my_date('Y', $awaydate))) - { - $away_in_past = true; - } - - $returndate = "{$return_day}-{$return_month}-{$return_year}"; - } - - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler('update'); - - // Set the data for the new user. - $updated_user = array( - "uid" => $mybb->input['uid'], - "username" => $mybb->input['username'], - "email" => $mybb->input['email'], - "email2" => $mybb->input['email'], - "usergroup" => $mybb->input['usergroup'], - "additionalgroups" => $additionalgroups, - "displaygroup" => $mybb->input['displaygroup'], - "postnum" => $mybb->input['postnum'], - "threadnum" => $mybb->input['threadnum'], - "usertitle" => $mybb->input['usertitle'], - "timezone" => $mybb->input['timezone'], - "language" => $mybb->input['language'], - "profile_fields" => $mybb->input['profile_fields'], - "profile_fields_editable" => true, - "website" => $mybb->input['website'], - "icq" => $mybb->input['icq'], - "aim" => $mybb->input['aim'], - "yahoo" => $mybb->input['yahoo'], - "skype" => $mybb->input['skype'], - "google" => $mybb->input['google'], - "birthday" => array( - "day" => $mybb->input['bday1'], - "month" => $mybb->input['bday2'], - "year" => $mybb->input['bday3'] - ), - "style" => $mybb->input['style'], - "signature" => $mybb->input['signature'], - "dateformat" => $mybb->get_input('dateformat', MyBB::INPUT_INT), - "timeformat" => $mybb->get_input('timeformat', MyBB::INPUT_INT), - "usernotes" => $mybb->input['usernotes'], - "away" => array( - "away" => $mybb->input['away'], - "date" => TIME_NOW, - "returndate" => $returndate, - "awayreason" => $mybb->input['awayreason'] - ) - ); - - if($user['usergroup'] == 5 && $mybb->input['usergroup'] != 5) - { - if($user['coppauser'] == 1) - { - $updated_user['coppa_user'] = 0; - } - } - if($mybb->input['new_password']) - { - $updated_user['password'] = $mybb->input['new_password']; - $updated_user['password2'] = $mybb->input['confirm_new_password']; - } - - $updated_user['options'] = array( - "allownotices" => $mybb->input['allownotices'], - "hideemail" => $mybb->input['hideemail'], - "subscriptionmethod" => $mybb->input['subscriptionmethod'], - "invisible" => $mybb->input['invisible'], - "dstcorrection" => $mybb->input['dstcorrection'], - "threadmode" => $mybb->input['threadmode'], - "classicpostbit" => $mybb->input['classicpostbit'], - "showimages" => $mybb->input['showimages'], - "showvideos" => $mybb->input['showvideos'], - "showsigs" => $mybb->input['showsigs'], - "showavatars" => $mybb->input['showavatars'], - "showquickreply" => $mybb->input['showquickreply'], - "receivepms" => $mybb->input['receivepms'], - "receivefrombuddy" => $mybb->input['receivefrombuddy'], - "pmnotice" => $mybb->input['pmnotice'], - "daysprune" => $mybb->input['daysprune'], - "showcodebuttons" => $mybb->input['showcodebuttons'], - "sourceeditor" => $mybb->input['sourceeditor'], - "pmnotify" => $mybb->input['pmnotify'], - "buddyrequestspm" => $mybb->input['buddyrequestspm'], - "buddyrequestsauto" => $mybb->input['buddyrequestsauto'], - "showredirect" => $mybb->input['showredirect'] - ); - - if($mybb->settings['usertppoptions']) - { - $updated_user['options']['tpp'] = $mybb->get_input('tpp', MyBB::INPUT_INT); - } - - if($mybb->settings['userpppoptions']) - { - $updated_user['options']['ppp'] = $mybb->get_input('ppp', MyBB::INPUT_INT); - } - - // Set the data of the user in the datahandler. - $userhandler->set_data($updated_user); - $errors = ''; - - // Validate the user and get any errors that might have occurred. - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - } - else - { - // Are we removing an avatar from this user? - if($mybb->input['remove_avatar']) - { - $extra_user_updates = array( - "avatar" => "", - "avatardimensions" => "", - "avatartype" => "" - ); - remove_avatars($user['uid']); - } - - // Are we uploading a new avatar? - if($_FILES['avatar_upload']['name']) - { - $avatar = upload_avatar($_FILES['avatar_upload'], $user['uid']); - if($avatar['error']) - { - $errors = array($avatar['error']); - } - else - { - if($avatar['width'] > 0 && $avatar['height'] > 0) - { - $avatar_dimensions = $avatar['width']."|".$avatar['height']; - } - $extra_user_updates = array( - "avatar" => $avatar['avatar'].'?dateline='.TIME_NOW, - "avatardimensions" => $avatar_dimensions, - "avatartype" => "upload" - ); - } - } - // Are we setting a new avatar from a URL? - else if($mybb->input['avatar_url'] && $mybb->input['avatar_url'] != $user['avatar']) - { - if(!$mybb->settings['allowremoteavatars']) - { - $errors = array($lang->error_remote_avatar_not_allowed); - } - else - { - if(filter_var($mybb->input['avatar_url'], FILTER_VALIDATE_EMAIL) !== false) - { - // Gravatar - $email = md5(strtolower(trim($mybb->input['avatar_url']))); - - $s = ''; - if(!$mybb->settings['maxavatardims']) - { - $mybb->settings['maxavatardims'] = '100x100'; // Hard limit of 100 if there are no limits - } - - // Because Gravatars are square, hijack the width - list($maxwidth, $maxheight) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); - - $s = "?s={$maxwidth}"; - $maxheight = (int)$maxwidth; - - $extra_user_updates = array( - "avatar" => "https://www.gravatar.com/avatar/{$email}{$s}", - "avatardimensions" => "{$maxheight}|{$maxheight}", - "avatartype" => "gravatar" - ); - } - else - { - $mybb->input['avatar_url'] = preg_replace("#script:#i", "", $mybb->input['avatar_url']); - $ext = get_extension($mybb->input['avatar_url']); - - // Copy the avatar to the local server (work around remote URL access disabled for getimagesize) - $file = fetch_remote_file($mybb->input['avatar_url']); - if(!$file) - { - $avatar_error = $lang->error_invalidavatarurl; - } - else - { - $tmp_name = "../".$mybb->settings['avataruploadpath']."/remote_".md5(random_str()); - $fp = @fopen($tmp_name, "wb"); - if(!$fp) - { - $avatar_error = $lang->error_invalidavatarurl; - } - else - { - fwrite($fp, $file); - fclose($fp); - list($width, $height, $type) = @getimagesize($tmp_name); - @unlink($tmp_name); - echo $type; - if(!$type) - { - $avatar_error = $lang->error_invalidavatarurl; - } - } - } - - if(empty($avatar_error)) - { - if($width && $height && $mybb->settings['maxavatardims'] != "") - { - list($maxwidth, $maxheight) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); - if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)) - { - $lang->error_avatartoobig = $lang->sprintf($lang->error_avatartoobig, $maxwidth, $maxheight); - $avatar_error = $lang->error_avatartoobig; - } - } - } - - if(empty($avatar_error)) - { - if($width > 0 && $height > 0) - { - $avatar_dimensions = (int)$width."|".(int)$height; - } - $extra_user_updates = array( - "avatar" => $db->escape_string($mybb->input['avatar_url'].'?dateline='.TIME_NOW), - "avatardimensions" => $avatar_dimensions, - "avatartype" => "remote" - ); - remove_avatars($user['uid']); - } - else - { - $errors = array($avatar_error); - } - } - } - } - - // Moderator "Options" (suspend signature, suspend/moderate posting) - $moderator_options = array( - 1 => array( - "action" => "suspendsignature", // The moderator action we're performing - "period" => "action_period", // The time period we've selected from the dropdown box - "time" => "action_time", // The time we've entered - "update_field" => "suspendsignature", // The field in the database to update if true - "update_length" => "suspendsigtime" // The length of suspension field in the database - ), - 2 => array( - "action" => "moderateposting", - "period" => "modpost_period", - "time" => "modpost_time", - "update_field" => "moderateposts", - "update_length" => "moderationtime" - ), - 3 => array( - "action" => "suspendposting", - "period" => "suspost_period", - "time" => "suspost_time", - "update_field" => "suspendposting", - "update_length" => "suspensiontime" - ) - ); - - require_once MYBB_ROOT."inc/functions_warnings.php"; - foreach($moderator_options as $option) - { - if(!$mybb->input[$option['action']]) - { - if($user[$option['update_field']] == 1) - { - // We're revoking the suspension - $extra_user_updates[$option['update_field']] = 0; - $extra_user_updates[$option['update_length']] = 0; - } - - // Skip this option if we haven't selected it - continue; - } - - if($mybb->input[$option['action']]) - { - if((int)$mybb->input[$option['time']] == 0 && $mybb->input[$option['period']] != "never" && $user[$option['update_field']] != 1) - { - // User has selected a type of ban, but not entered a valid time frame - $string = $option['action']."_error"; - $errors[] = $lang->$string; - } - - if(!is_array($errors)) - { - $suspend_length = fetch_time_length((int)$mybb->input[$option['time']], $mybb->input[$option['period']]); - - if($user[$option['update_field']] == 1 && ($mybb->input[$option['time']] || $mybb->input[$option['period']] == "never")) - { - // We already have a suspension, but entered a new time - if($suspend_length == "-1") - { - // Permanent ban on action - $extra_user_updates[$option['update_length']] = 0; - } - elseif($suspend_length && $suspend_length != "-1") - { - // Temporary ban on action - $extra_user_updates[$option['update_length']] = TIME_NOW + $suspend_length; - } - } - elseif(!$user[$option['update_field']]) - { - // New suspension for this user... bad user! - $extra_user_updates[$option['update_field']] = 1; - if($suspend_length == "-1") - { - $extra_user_updates[$option['update_length']] = 0; - } - else - { - $extra_user_updates[$option['update_length']] = TIME_NOW + $suspend_length; - } - } - } - } - } - - if($extra_user_updates['moderateposts'] && $extra_user_updates['suspendposting']) - { - $errors[] = $lang->suspendmoderate_error; - } - - if(isset($away_in_past)) - { - $errors[] = $lang->error_acp_return_date_past; - } - - if(!$errors) - { - $user_info = $userhandler->update_user(); - - $plugins->run_hooks("admin_user_users_edit_commit_start"); - - $db->update_query("users", $extra_user_updates, "uid='{$user['uid']}'"); - - // if we're updating the user's signature preferences, do so now - if($mybb->input['update_posts'] == 'enable' || $mybb->input['update_posts'] == 'disable') - { - $update_signature = array( - 'includesig' => ($mybb->input['update_posts'] == 'enable' ? 1 : 0) - ); - $db->update_query("posts", $update_signature, "uid='{$user['uid']}'"); - } - - $plugins->run_hooks("admin_user_users_edit_commit"); - - if($user['usergroup'] == 5 && $mybb->input['usergroup'] != 5) - { - $cache->update_awaitingactivation(); - } - - // Log admin action - log_admin_action($user['uid'], htmlspecialchars_uni($mybb->input['username'])); - - flash_message($lang->success_user_updated, 'success'); - admin_redirect("index.php?module=user-users"); - } - $plugins->run_hooks("admin_user_users_edit_end"); - } - } - - if(!$errors) - { - $user['usertitle'] = htmlspecialchars_decode($user['usertitle']); - $mybb->input = array_merge($mybb->input, $user); - - $options = array( - 'bday1', 'bday2', 'bday3', - 'new_password', 'confirm_new_password', - 'action_time', 'action_period', - 'modpost_period', 'moderateposting', 'modpost_time', 'suspost_period', 'suspost_time' - ); - - foreach($options as $option) - { - if(!isset($input_user[$option])) - { - $mybb->input[$option] = ''; - } - } - - // We need to fetch this users profile field values - $query = $db->simple_select("userfields", "*", "ufid='{$user['uid']}'"); - $mybb->input['profile_fields'] = $db->fetch_array($query); - } - - if($mybb->input['bday1'] || $mybb->input['bday2'] || $mybb->input['bday3']) - { - $mybb->input['bday'][0] = $mybb->input['bday1']; - $mybb->input['bday'][1] = $mybb->input['bday2']; - $mybb->input['bday'][2] = $mybb->get_input('bday3', MyBB::INPUT_INT); - } - else - { - $mybb->input['bday'] = array(0, 0, ''); - - if($user['birthday']) - { - $mybb->input['bday'] = explode('-', $user['birthday']); - } - } - - if($mybb->input['away_day'] || $mybb->input['away_month'] || $mybb->input['away_year']) - { - $mybb->input['away_year'] = $mybb->get_input('away_year', MyBB::INPUT_INT); - } - else - { - $mybb->input['away_day'] = 0; - $mybb->input['away_month'] = 0; - $mybb->input['away_year'] = ''; - - if($user['returndate']) - { - list($mybb->input['away_day'], $mybb->input['away_month'], $mybb->input['away_year']) = explode('-', $user['returndate']); - } - } - - // Fetch custom profile fields - $query = $db->simple_select("profilefields", "*", "", array('order_by' => 'disporder')); - - $profile_fields = array(); - while($profile_field = $db->fetch_array($query)) - { - if($profile_field['required'] == 1) - { - $profile_fields['required'][] = $profile_field; - } - else - { - $profile_fields['optional'][] = $profile_field; - } - } - - $page->add_breadcrumb_item($lang->edit_user.": ".htmlspecialchars_uni($user['username'])); - - $page->extra_header .= << - - - -EOF; - $page->output_header($lang->edit_user); - - $sub_tabs['edit_user'] = array( - 'title' => $lang->edit_user, - 'description' => $lang->edit_user_desc - ); - - $form = new Form("index.php?module=user-users&action=edit&uid={$user['uid']}", "post", "", 1); - - $page->output_nav_tabs($sub_tabs, 'edit_user'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - - // Is this user a COPPA user? We show a warning & activate link - if($user['coppauser']) - { - echo $lang->sprintf($lang->warning_coppa_user, $user['uid']); - } - - $tabs = array( - "overview" => $lang->overview, - "profile" => $lang->profile, - "settings" => $lang->account_settings, - "signature" => $lang->signature, - "avatar" => $lang->avatar, - "modoptions" => $lang->mod_options - ); - $tabs = $plugins->run_hooks("admin_user_users_edit_graph_tabs", $tabs); - $page->output_tab_control($tabs); - - // - // OVERVIEW - // - echo "
\n"; - $table = new Table; - $table->construct_header($lang->avatar, array('class' => 'align_center')); - $table->construct_header($lang->general_account_stats, array('colspan' => '2', 'class' => 'align_center')); - - // Avatar - $avatar_dimensions = explode("|", $user['avatardimensions']); - if($user['avatar'] && (my_strpos($user['avatar'], '://') === false || $mybb->settings['allowremoteavatars'])) - { - if($user['avatardimensions']) - { - require_once MYBB_ROOT."inc/functions_image.php"; - list($width, $height) = explode("|", $user['avatardimensions']); - $scaled_dimensions = scale_image($width, $height, 120, 120); - } - else - { - $scaled_dimensions = array( - "width" => 120, - "height" => 120 - ); - } - if(!my_validate_url($user['avatar'])) - { - $user['avatar'] = "../{$user['avatar']}\n"; - } - } - else - { - if(my_validate_url($mybb->settings['useravatar'])) - { - $user['avatar'] = str_replace('{theme}', 'images', $mybb->settings['useravatar']); - } - else - { - $user['avatar'] = "../".str_replace('{theme}', 'images', $mybb->settings['useravatar']); - } - $scaled_dimensions = array( - "width" => 120, - "height" => 120 - ); - } - $avatar_top = ceil((126-$scaled_dimensions['height'])/2); - if($user['lastactive']) - { - $last_active = my_date('relative', $user['lastactive']); - } - else - { - $last_active = $lang->never; - } - $reg_date = my_date('relative', $user['regdate']); - if($user['dst'] == 1) - { - $timezone = (float)$user['timezone']+1; - } - else - { - $timezone = (float)$user['timezone']; - } - $local_date = gmdate($mybb->settings['dateformat'], TIME_NOW + ($timezone * 3600)); - $local_time = gmdate($mybb->settings['timeformat'], TIME_NOW + ($timezone * 3600)); - - $localtime = $lang->sprintf($lang->local_time_format, $local_date, $local_time); - $days_registered = (TIME_NOW - $user['regdate']) / (24*3600); - $posts_per_day = 0; - if($days_registered > 0) - { - $posts_per_day = round($user['postnum'] / $days_registered, 2); - if($posts_per_day > $user['postnum']) - { - $posts_per_day = $user['postnum']; - } - } - $posts_per_day = my_number_format($posts_per_day); - - $stats = $cache->read("stats"); - $posts = $stats['numposts']; - if($posts == 0) - { - $percent_posts = "0"; - } - else - { - $percent_posts = round($user['postnum']*100/$posts, 2); - } - - $user_permissions = user_permissions($user['uid']); - - // Fetch the reputation for this user - if($user_permissions['usereputationsystem'] == 1 && $mybb->settings['enablereputation'] == 1) - { - $reputation = get_reputation($user['reputation']); - } - else - { - $reputation = "-"; - } - - if($mybb->settings['enablewarningsystem'] != 0 && $user_permissions['canreceivewarnings'] != 0) - { - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - - $warning_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100); - if($warning_level > 100) - { - $warning_level = 100; - } - $warning_level = get_colored_warning_level($warning_level); - } - - $age = $lang->na; - if($user['birthday']) - { - $age = get_age($user['birthday']); - } - - $postnum = my_number_format($user['postnum']); - - $table->construct_cell("
\"\"
", array('rowspan' => 6, 'width' => 1)); - $table->construct_cell("{$lang->email_address}: ".htmlspecialchars_uni($user['email']).""); - $table->construct_cell("{$lang->last_active}: {$last_active}"); - $table->construct_row(); - $table->construct_cell("{$lang->registration_date}: {$reg_date}"); - $table->construct_cell("{$lang->local_time}: {$localtime}"); - $table->construct_row(); - $table->construct_cell("{$lang->posts}: {$postnum}"); - $table->construct_cell("{$lang->age}: {$age}"); - $table->construct_row(); - $table->construct_cell("{$lang->posts_per_day}: {$posts_per_day}"); - $table->construct_cell("{$lang->reputation}: {$reputation}"); - $table->construct_row(); - $table->construct_cell("{$lang->percent_of_total_posts}: {$percent_posts}"); - $table->construct_cell("{$lang->warning_level}: {$warning_level}"); - $table->construct_row(); - $table->construct_cell("{$lang->registration_ip}: ".my_inet_ntop($db->unescape_binary($user['regip']))); - $table->construct_cell("{$lang->last_known_ip}: ".my_inet_ntop($db->unescape_binary($user['lastip']))); - $table->construct_row(); - - $username = htmlspecialchars_uni($user['username']); - $table->output("{$lang->user_overview}: {$username}"); - $plugins->run_hooks("admin_user_users_edit_overview"); - echo "
\n"; - - // - // PROFILE - // - echo "
\n"; - - $form_container = new FormContainer($lang->required_profile_info.": ".htmlspecialchars_uni($user['username'])); - $form_container->output_row($lang->username." *", "", $form->generate_text_box('username', $mybb->input['username'], array('id' => 'username')), 'username'); - $form_container->output_row($lang->new_password, $lang->new_password_desc, $form->generate_password_box('new_password', $mybb->input['new_password'], array('id' => 'new_password', 'autocomplete' => 'off')), 'new_password'); - $form_container->output_row($lang->confirm_new_password, $lang->new_password_desc, $form->generate_password_box('confirm_new_password', $mybb->input['confirm_new_password'], array('id' => 'confirm_new_password')), 'confirm_new_password'); - $form_container->output_row($lang->email_address." *", "", $form->generate_text_box('email', $mybb->input['email'], array('id' => 'email')), 'email'); - - $display_group_options[0] = $lang->use_primary_user_group; - $options = array(); - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - $display_group_options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - } - - if(!is_array($mybb->input['additionalgroups'])) - { - $mybb->input['additionalgroups'] = explode(',', $mybb->input['additionalgroups']); - } - - $form_container->output_row($lang->primary_user_group." *", "", $form->generate_select_box('usergroup', $options, $mybb->input['usergroup'], array('id' => 'usergroup')), 'usergroup'); - $form_container->output_row($lang->additional_user_groups, $lang->additional_user_groups_desc, $form->generate_select_box('additionalgroups[]', $options, $mybb->input['additionalgroups'], array('id' => 'additionalgroups', 'multiple' => true, 'size' => 5)), 'additionalgroups'); - $form_container->output_row($lang->display_user_group." *", "", $form->generate_select_box('displaygroup', $display_group_options, $mybb->input['displaygroup'], array('id' => 'displaygroup')), 'displaygroup'); - $form_container->output_row($lang->post_count." *", "", $form->generate_numeric_field('postnum', $mybb->input['postnum'], array('id' => 'postnum', 'min' => 0)), 'postnum'); - $form_container->output_row($lang->thread_count." *", "", $form->generate_numeric_field('threadnum', $mybb->input['threadnum'], array('id' => 'threadnum', 'min' => 0)), 'threadnum'); - - // Output custom profile fields - required - if(!isset($profile_fields['required'])) - { - $profile_fields['required'] = array(); - } - output_custom_profile_fields($profile_fields['required'], $mybb->input['profile_fields'], $form_container, $form); - - $form_container->end(); - - $form_container = new FormContainer($lang->optional_profile_info.': '.htmlspecialchars_uni($user['username'])); - $form_container->output_row($lang->custom_user_title, $lang->custom_user_title_desc, $form->generate_text_box('usertitle', $mybb->input['usertitle'], array('id' => 'usertitle')), 'usertitle'); - $form_container->output_row($lang->website, "", $form->generate_text_box('website', $mybb->input['website'], array('id' => 'website')), 'website'); - $form_container->output_row($lang->icq_number, "", $form->generate_numeric_field('icq', $mybb->input['icq'], array('id' => 'icq', 'min' => 0)), 'icq'); - $form_container->output_row($lang->aim_handle, "", $form->generate_text_box('aim', $mybb->input['aim'], array('id' => 'aim')), 'aim'); - $form_container->output_row($lang->yahoo_messanger_handle, "", $form->generate_text_box('yahoo', $mybb->input['yahoo'], array('id' => 'yahoo')), 'yahoo'); - $form_container->output_row($lang->skype_handle, "", $form->generate_text_box('skype', $mybb->input['skype'], array('id' => 'skype')), 'skype'); - $form_container->output_row($lang->google_handle, "", $form->generate_text_box('google', $mybb->input['google'], array('id' => 'google')), 'google'); - - // Birthday - $birthday_days = array(0 => ''); - for($i = 1; $i <= 31; $i++) - { - $birthday_days[$i] = $i; - } - - $birthday_months = array( - 0 => '', - 1 => $lang->january, - 2 => $lang->february, - 3 => $lang->march, - 4 => $lang->april, - 5 => $lang->may, - 6 => $lang->june, - 7 => $lang->july, - 8 => $lang->august, - 9 => $lang->september, - 10 => $lang->october, - 11 => $lang->november, - 12 => $lang->december - ); - - $birthday_row = $form->generate_select_box('bday1', $birthday_days, $mybb->input['bday'][0], array('id' => 'bday_day')); - $birthday_row .= ' '.$form->generate_select_box('bday2', $birthday_months, $mybb->input['bday'][1], array('id' => 'bday_month')); - $birthday_row .= ' '.$form->generate_numeric_field('bday3', $mybb->input['bday'][2], array('id' => 'bday_year', 'style' => 'width: 4em;', 'min' => 0)); - - $form_container->output_row($lang->birthday, "", $birthday_row, 'birthday'); - - // Output custom profile fields - optional - output_custom_profile_fields($profile_fields['optional'], $mybb->input['profile_fields'], $form_container, $form); - - $form_container->end(); - - - if($mybb->settings['allowaway'] != 0) - { - $form_container = new FormContainer($lang->away_information.': '.htmlspecialchars_uni($user['username'])); - $awaycheck = array(false, true); - if($mybb->input['away'] == 1) - { - $awaycheck = array(true, false); - } - $form_container->output_row($lang->away_status, $lang->away_status_desc, $form->generate_radio_button('away', 1, $lang->im_away, array('id' => 'away', "checked" => $awaycheck[0]))." ".$form->generate_radio_button('away', 0, $lang->im_here, array('id' => 'away2', "checked" => $awaycheck[1])), 'away'); - $form_container->output_row($lang->away_reason, $lang->away_reason_desc, $form->generate_text_box('awayreason', $mybb->input['awayreason'], array('id' => 'awayreason')), 'awayreason'); - - //Return date (we can use the arrays from birthday) - $return_row = $form->generate_select_box('away_day', $birthday_days, $mybb->input['away_day'], array('id' => 'away_day')); - $return_row .= ' '.$form->generate_select_box('away_month', $birthday_months, $mybb->input['away_month'], array('id' => 'away_month')); - $return_row .= ' '.$form->generate_numeric_field('away_year', $mybb->input['away_year'], array('id' => 'away_year', 'style' => 'width: 4em;', 'min' => 0)); - - $form_container->output_row($lang->return_date, $lang->return_date_desc, $return_row, 'away_date'); - - $form_container->end(); - } - - $plugins->run_hooks("admin_user_users_edit_profile"); - echo "
\n"; - - // - // ACCOUNT SETTINGS - // - - // Plugin hook note - we should add hooks in above each output_row for the below so users can add their own options to each group :> - - echo "
\n"; - $form_container = new FormContainer($lang->account_settings.': '.htmlspecialchars_uni($user['username'])); - $login_options = array( - $form->generate_check_box("invisible", 1, $lang->hide_from_whos_online, array("checked" => $mybb->input['invisible'])), - ); - $form_container->output_row($lang->login_cookies_privacy, "", "
".implode("
", $login_options)."
"); - - if($mybb->input['pmnotice'] > 1) - { - $mybb->input['pmnotice'] = 1; - } - - $messaging_options = array( - $form->generate_check_box("allownotices", 1, $lang->recieve_admin_emails, array("checked" => $mybb->input['allownotices'])), - $form->generate_check_box("hideemail", 1, $lang->hide_email_from_others, array("checked" => $mybb->input['hideemail'])), - $form->generate_check_box("receivepms", 1, $lang->recieve_pms_from_others, array("checked" => $mybb->input['receivepms'])), - $form->generate_check_box("receivefrombuddy", 1, $lang->recieve_pms_from_buddy, array("checked" => $mybb->input['receivefrombuddy'])), - $form->generate_check_box("pmnotice", 1, $lang->alert_new_pms, array("checked" => $mybb->input['pmnotice'])), - $form->generate_check_box("pmnotify", 1, $lang->email_notify_new_pms, array("checked" => $mybb->input['pmnotify'])), - $form->generate_check_box("buddyrequestspm", 1, $lang->buddy_requests_pm, array("checked" => $mybb->input['buddyrequestspm'])), - $form->generate_check_box("buddyrequestsauto", 1, $lang->buddy_requests_auto, array("checked" => $mybb->input['buddyrequestsauto'])), - "
".$form->generate_select_box("subscriptionmethod", array($lang->do_not_subscribe, $lang->no_email_notification, $lang->instant_email_notification), $mybb->input['subscriptionmethod'], array('id' => 'subscriptionmethod')) - ); - $form_container->output_row($lang->messaging_and_notification, "", "
".implode("
", $messaging_options)."
"); - - $date_format_options = array($lang->use_default); - foreach($date_formats as $key => $format) - { - $date_format_options[$key] = my_date($format, TIME_NOW, "", 0); - } - - $time_format_options = array($lang->use_default); - foreach($time_formats as $key => $format) - { - $time_format_options[$key] = my_date($format, TIME_NOW, "", 0); - } - - $date_options = array( - "
".$form->generate_select_box("dateformat", $date_format_options, $mybb->input['dateformat'], array('id' => 'dateformat')), - "
".$form->generate_select_box("timeformat", $time_format_options, $mybb->input['timeformat'], array('id' => 'timeformat')), - "
".build_timezone_select("timezone", $mybb->input['timezone']), - "
".$form->generate_select_box("dstcorrection", array(2 => $lang->automatically_detect, 1 => $lang->always_use_dst_correction, 0 => $lang->never_use_dst_correction), $mybb->input['dstcorrection'], array('id' => 'dstcorrection')) - ); - $form_container->output_row($lang->date_and_time_options, "", "
".implode("
", $date_options)."
"); - - - $tpp_options = array($lang->use_default); - if($mybb->settings['usertppoptions']) - { - $explodedtpp = explode(",", $mybb->settings['usertppoptions']); - if(is_array($explodedtpp)) - { - foreach($explodedtpp as $tpp) - { - if($tpp <= 0) continue; - $tpp_options[$tpp] = $tpp; - } - } - } - - $thread_age_options = array( - 0 => $lang->use_default, - 1 => $lang->show_threads_last_day, - 5 => $lang->show_threads_last_5_days, - 10 => $lang->show_threads_last_10_days, - 20 => $lang->show_threads_last_20_days, - 50 => $lang->show_threads_last_50_days, - 75 => $lang->show_threads_last_75_days, - 100 => $lang->show_threads_last_100_days, - 365 => $lang->show_threads_last_year, - 9999 => $lang->show_all_threads - ); - - $forum_options = array( - "
".$form->generate_select_box("tpp", $tpp_options, $mybb->input['tpp'], array('id' => 'tpp')), - "
".$form->generate_select_box("daysprune", $thread_age_options, $mybb->input['daysprune'], array('id' => 'daysprune')) - ); - $form_container->output_row($lang->forum_display_options, "", "
".implode("
", $forum_options)."
"); - - $ppp_options = array($lang->use_default); - if($mybb->settings['userpppoptions']) - { - $explodedppp = explode(",", $mybb->settings['userpppoptions']); - if(is_array($explodedppp)) - { - foreach($explodedppp as $ppp) - { - if($ppp <= 0) continue; - $ppp_options[$ppp] = $ppp; - } - } - } - - $thread_options = array( - $form->generate_check_box("classicpostbit", 1, $lang->show_classic_postbit, array("checked" => $mybb->input['classicpostbit'])), - $form->generate_check_box("showimages", 1, $lang->display_images, array("checked" => $mybb->input['showimages'])), - $form->generate_check_box("showvideos", 1, $lang->display_videos, array("checked" => $mybb->input['showvideos'])), - $form->generate_check_box("showsigs", 1, $lang->display_users_sigs, array("checked" => $mybb->input['showsigs'])), - $form->generate_check_box("showavatars", 1, $lang->display_users_avatars, array("checked" => $mybb->input['showavatars'])), - $form->generate_check_box("showquickreply", 1, $lang->show_quick_reply, array("checked" => $mybb->input['showquickreply'])), - "
".$form->generate_select_box("ppp", $ppp_options, $mybb->input['ppp'], array('id' => 'ppp')), - "
".$form->generate_select_box("threadmode", array("" => $lang->use_default, "linear" => $lang->linear_mode, "threaded" => $lang->threaded_mode), $mybb->input['threadmode'], array('id' => 'threadmode')) - ); - $form_container->output_row($lang->thread_view_options, "", "
".implode("
", $thread_options)."
"); - - $languages = array_merge(array('' => $lang->use_default), $lang->get_languages()); - - $other_options = array( - $form->generate_check_box("showredirect", 1, $lang->show_redirect, array("checked" => $mybb->input['showredirect'])), - $form->generate_check_box("showcodebuttons", "1", $lang->show_code_buttons, array("checked" => $mybb->input['showcodebuttons'])), - $form->generate_check_box("sourceeditor", "1", $lang->source_editor, array("checked" => $mybb->input['sourceeditor'])), - "
".build_theme_select("style", $mybb->input['style'], 0, "", true, false, true), - "
".$form->generate_select_box("language", $languages, $mybb->input['language'], array('id' => 'language')) - ); - $form_container->output_row($lang->other_options, "", "
".implode("
", $other_options)."
"); - - $form_container->end(); - $plugins->run_hooks("admin_user_users_edit_settings"); - echo "
\n"; - - // - // SIGNATURE EDITOR - // - $signature_editor = $form->generate_text_area("signature", $mybb->input['signature'], array('id' => 'signature', 'rows' => 15, 'cols' => '70', 'style' => 'height: 250px; width: 95%')); - $sig_smilies = $lang->off; - if($mybb->settings['sigsmilies'] == 1) - { - $sig_smilies = $lang->on; - } - $sig_mycode = $lang->off; - if($mybb->settings['sigmycode'] == 1) - { - $sig_mycode = $lang->on; - $signature_editor .= build_mycode_inserter("signature"); - } - $sig_html = $lang->off; - if($mybb->settings['sightml'] == 1) - { - $sig_html = $lang->on; - } - $sig_imgcode = $lang->off; - if($mybb->settings['sigimgcode'] == 1) - { - $sig_imgcode = $lang->on; - } - echo "
\n"; - $form_container = new FormContainer($lang->signature.': '.htmlspecialchars_uni($user['username'])); - $form_container->output_row($lang->signature, $lang->sprintf($lang->signature_desc, $sig_mycode, $sig_smilies, $sig_imgcode, $sig_html), $signature_editor, 'signature'); - - $periods = array( - "hours" => $lang->expire_hours, - "days" => $lang->expire_days, - "weeks" => $lang->expire_weeks, - "months" => $lang->expire_months, - "never" => $lang->expire_permanent - ); - - // Are we already suspending the signature? - if($mybb->input['suspendsignature']) - { - $sig_checked = 1; - - // Display how much time is left on the ban for the user to extend it - if($user['suspendsigtime'] == "0") - { - // Permanent - $lang->suspend_expire_info = $lang->suspend_sig_perm; - } - else - { - // There's a limit to the suspension! - $remaining = $user['suspendsigtime']-TIME_NOW; - $expired = nice_time($remaining, array('seconds' => false)); - - $color = 'inherit'; - if($remaining < 3600) - { - $color = 'red'; - } - elseif($remaining < 86400) - { - $color = 'maroon'; - } - elseif($remaining < 604800) - { - $color = 'green'; - } - - $lang->suspend_expire_info = $lang->sprintf($lang->suspend_expire_info, $expired, $color); - } - $user_suspend_info = ' - - '.$lang->suspend_expire_info.'
'.$lang->suspend_sig_extend.' - '; - } - else - { - $sig_checked = 0; - $user_suspend_info = ''; - } - - $actions = ' - - -
-
'.$form->generate_check_box("suspendsignature", 1, $lang->suspend_sig_box, array('checked' => $sig_checked, 'onclick' => 'toggleAction();')).'
-
- '.$user_suspend_info.' - - - - -
'.$lang->expire_length.''.$form->generate_numeric_field('action_time', $mybb->input['action_time'], array('style' => 'width: 3em;', 'min' => 0)).' '.$form->generate_select_box('action_period', $periods, $mybb->input['action_period']).'
-
-
- - '; - - $form_container->output_row($lang->suspend_sig, $lang->suspend_sig_info, $actions); - - $signature_options = array( - $form->generate_radio_button("update_posts", "enable", $lang->enable_sig_in_all_posts, array("checked" => 0)), - $form->generate_radio_button("update_posts", "disable", $lang->disable_sig_in_all_posts, array("checked" => 0)), - $form->generate_radio_button("update_posts", "no", $lang->do_nothing, array("checked" => 1)) - ); - - $form_container->output_row($lang->signature_preferences, "", implode("
", $signature_options)); - - $form_container->end(); - $plugins->run_hooks("admin_user_users_edit_signatur"); - echo "
\n"; - - // - // AVATAR MANAGER - // - echo "
\n"; - $table = new Table; - $table->construct_header($lang->current_avatar, array('colspan' => 2)); - - $table->construct_cell("
\"\"
", array('width' => 1)); - - $avatar_url = ''; - if($user['avatartype'] == "upload" || stristr($user['avatar'], $mybb->settings['avataruploadpath'])) - { - $current_avatar_msg = "
{$lang->user_current_using_uploaded_avatar}"; - } - elseif($user['avatartype'] == "remote" || my_validate_url($user['avatar'])) - { - $current_avatar_msg = "
{$lang->user_current_using_remote_avatar}"; - $avatar_url = $user['avatar']; - } - - if($errors) - { - $avatar_url = htmlspecialchars_uni($mybb->input['avatar_url']); - } - - if($mybb->settings['maxavatardims'] != "") - { - list($max_width, $max_height) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); - $max_size = "
{$lang->max_dimensions_are} {$max_width}x{$max_height}"; - } - - if($mybb->settings['avatarsize']) - { - $maximum_size = get_friendly_size($mybb->settings['avatarsize']*1024); - $max_size .= "
{$lang->avatar_max_size} {$maximum_size}"; - } - - if($user['avatar']) - { - $remove_avatar = "

".$form->generate_check_box("remove_avatar", 1, "{$lang->remove_avatar}"); - } - - $table->construct_cell($lang->avatar_desc."{$remove_avatar}
{$max_size}"); - $table->construct_row(); - - $table->output($lang->avatar.': '.htmlspecialchars_uni($user['username'])); - - // Custom avatar - if($mybb->settings['avatarresizing'] == "auto") - { - $auto_resize = $lang->avatar_auto_resize; - } - else if($mybb->settings['avatarresizing'] == "user") - { - $auto_resize = " "; - } - $form_container = new FormContainer($lang->specify_custom_avatar); - $form_container->output_row($lang->upload_avatar, $auto_resize, $form->generate_file_upload_box('avatar_upload', array('id' => 'avatar_upload')), 'avatar_upload'); - if($mybb->settings['allowremoteavatars']) - { - $form_container->output_row($lang->or_specify_avatar_url, "", $form->generate_text_box('avatar_url', $avatar_url, array('id' => 'avatar_url')), 'avatar_url'); - } - $form_container->end(); - $plugins->run_hooks("admin_user_users_edit_avatar"); - echo "
\n"; - - // - // MODERATOR OPTIONS - // - $periods = array( - "hours" => $lang->expire_hours, - "days" => $lang->expire_days, - "weeks" => $lang->expire_weeks, - "months" => $lang->expire_months, - "never" => $lang->expire_permanent - ); - - echo "
\n"; - $form_container = new FormContainer($lang->mod_options.': '.htmlspecialchars_uni($user['username'])); - $form_container->output_row($lang->user_notes, '', $form->generate_text_area('usernotes', $mybb->input['usernotes'], array('id' => 'usernotes')), 'usernotes'); - - // Mod posts - // Generate check box - $modpost_options = $form->generate_select_box('modpost_period', $periods, $mybb->input['modpost_period'], array('id' => 'modpost_period')); - - // Do we have any existing suspensions here? - $existing_info = ''; - if($user['moderateposts'] || ($mybb->input['moderateposting'] && !empty($errors))) - { - $mybb->input['moderateposting'] = 1; - if($user['moderationtime'] != 0) - { - $remaining = $user['moderationtime']-TIME_NOW; - $expired = nice_time($remaining, array('seconds' => false)); - - $color = 'inherit'; - if($remaining < 3600) - { - $color = 'red'; - } - elseif($remaining < 86400) - { - $color = 'maroon'; - } - elseif($remaining < 604800) - { - $color = 'green'; - } - - $existing_info = $lang->sprintf($lang->moderate_length, $expired, $color); - } - else - { - $existing_info = $lang->moderated_perm; - } - } - - $modpost_div = '
'.$existing_info.''.$lang->moderate_for.' '.$form->generate_numeric_field("modpost_time", $mybb->input['modpost_time'], array('style' => 'width: 3em;', 'min' => 0)).' '.$modpost_options.'
'; - $lang->moderate_posts_info = $lang->sprintf($lang->moderate_posts_info, htmlspecialchars_uni($user['username'])); - $form_container->output_row($form->generate_check_box("moderateposting", 1, $lang->moderate_posts, array("id" => "moderateposting", "onclick" => "toggleBox('modpost');", "checked" => $mybb->input['moderateposting'])), $lang->moderate_posts_info, $modpost_div); - - // Suspend posts - // Generate check box - $suspost_options = $form->generate_select_box('suspost_period', $periods, $mybb->input['suspost_period'], array('id' => 'suspost_period')); - - // Do we have any existing suspensions here? - if($user['suspendposting'] || ($mybb->input['suspendposting'] && !empty($errors))) - { - $mybb->input['suspendposting'] = 1; - - if($user['suspensiontime'] == 0 || $mybb->input['suspost_period'] == "never") - { - $existing_info = $lang->suspended_perm; - } - else - { - $remaining = $user['suspensiontime']-TIME_NOW; - $suspost_date = nice_time($remaining, array('seconds' => false)); - - $color = 'inherit'; - if($remaining < 3600) - { - $color = 'red'; - } - elseif($remaining < 86400) - { - $color = 'maroon'; - } - elseif($remaining < 604800) - { - $color = 'green'; - } - - $existing_info = $lang->sprintf($lang->suspend_length, $suspost_date, $color); - } - } - - $suspost_div = '
'.$existing_info.''.$lang->suspend_for.' '.$form->generate_numeric_field("suspost_time", $mybb->input['suspost_time'], array('style' => 'width: 3em;', 'min' => 0)).' '.$suspost_options.'
'; - $lang->suspend_posts_info = $lang->sprintf($lang->suspend_posts_info, htmlspecialchars_uni($user['username'])); - $form_container->output_row($form->generate_check_box("suspendposting", 1, $lang->suspend_posts, array("id" => "suspendposting", "onclick" => "toggleBox('suspost');", "checked" => $mybb->input['suspendposting'])), $lang->suspend_posts_info, $suspost_div); - - - $form_container->end(); - $plugins->run_hooks("admin_user_users_edit_moderator_options"); - echo "
\n"; - - $plugins->run_hooks("admin_user_users_edit_graph"); - - $buttons[] = $form->generate_submit_button($lang->save_user); - $form->output_submit_wrapper($buttons); - - $form->end(); - - echo ''; - - $page->output_footer(); -} - -if($mybb->input['action'] == "delete") -{ - $user = get_user($mybb->input['uid']); - - // Does the user not exist? - if(!$user['uid']) - { - flash_message($lang->error_invalid_user, 'error'); - admin_redirect("index.php?module=user-users"); - } - - if(is_super_admin($mybb->input['uid']) && $mybb->user['uid'] != $mybb->input['uid'] && !is_super_admin($mybb->user['uid'])) - { - flash_message($lang->error_no_perms_super_admin, 'error'); - admin_redirect("index.php?module=user-users"); - } - - // User clicked no - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-users"); - } - - $plugins->run_hooks("admin_user_users_delete"); - - if($mybb->request_method == "post") - { - $plugins->run_hooks("admin_user_users_delete_commit"); - - // Set up user handler. - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('delete'); - - // Delete the user - if(!$userhandler->delete_user($user['uid'])) - { - flash_message($lang->error_cannot_delete_user, 'error'); - admin_redirect("index.php?module=user-users"); - } - - $cache->update_awaitingactivation(); - - $plugins->run_hooks("admin_user_users_delete_commit_end"); - - log_admin_action($user['uid'], htmlspecialchars_uni($user['username'])); - - flash_message($lang->success_user_deleted, 'success'); - admin_redirect("index.php?module=user-users"); - } - else - { - $page->output_confirm_action("index.php?module=user-users&action=delete&uid={$user['uid']}", $lang->user_deletion_confirmation); - } -} - -if($mybb->input['action'] == "referrers") -{ - $page->add_breadcrumb_item($lang->show_referrers); - $page->output_header($lang->show_referrers); - - $sub_tabs['referrers'] = array( - 'title' => $lang->show_referrers, - 'link' => "index.php?module=user-users&action=referrers&uid={$mybb->input['uid']}", - 'description' => $lang->show_referrers_desc - ); - - $plugins->run_hooks("admin_user_users_referrers"); - - $page->output_nav_tabs($sub_tabs, 'referrers'); - - // Fetch default admin view - $default_view = fetch_default_view("user"); - if(!$default_view) - { - $default_view = "0"; - } - $query = $db->simple_select("adminviews", "*", "type='user' AND (vid='{$default_view}' OR uid=0)", array("order_by" => "uid", "order_dir" => "desc")); - $admin_view = $db->fetch_array($query); - - if($mybb->input['type']) - { - $admin_view['view_type'] = $mybb->input['type']; - } - - $admin_view['conditions'] = my_unserialize($admin_view['conditions']); - $admin_view['conditions']['referrer'] = $mybb->input['uid']; - - $view = build_users_view($admin_view); - - // No referred users - if(!$view) - { - $table = new Table; - $table->construct_cell($lang->error_no_referred_users); - $table->construct_row(); - $table->output($lang->show_referrers); - } - else - { - echo $view; - } - - $page->output_footer(); -} - -if($mybb->input['action'] == "ipaddresses") -{ - $page->add_breadcrumb_item($lang->ip_addresses); - $page->output_header($lang->ip_addresses); - - $sub_tabs['ipaddresses'] = array( - 'title' => $lang->show_ip_addresses, - 'link' => "index.php?module=user-users&action=ipaddresses&uid={$mybb->input['uid']}", - 'description' => $lang->show_ip_addresses_desc - ); - - $plugins->run_hooks("admin_user_users_ipaddresses"); - - $page->output_nav_tabs($sub_tabs, 'ipaddresses'); - - $query = $db->simple_select("users", "uid, regip, username, lastip", "uid='{$mybb->input['uid']}'", array('limit' => 1)); - $user = $db->fetch_array($query); - - // Log admin action - log_admin_action($user['uid'], htmlspecialchars_uni($user['username'])); - - $table = new Table; - - $table->construct_header($lang->ip_address); - $table->construct_header($lang->controls, array('width' => 200, 'class' => "align_center")); - - if(empty($user['lastip'])) - { - $user['lastip'] = $lang->unknown; - $controls = ''; - } - else - { - $user['lastip'] = my_inet_ntop($db->unescape_binary($user['lastip'])); - $popup = new PopupMenu("user_last", $lang->options); - $popup->add_item($lang->show_users_regged_with_ip, - "index.php?module=user-users&action=search&results=1&conditions=".urlencode(my_serialize(array("regip" => $user['lastip'])))); - $popup->add_item($lang->show_users_posted_with_ip, "index.php?module=user-users&results=1&action=search&conditions=".urlencode(my_serialize(array("postip" => $user['lastip'])))); - $popup->add_item($lang->info_on_ip, "index.php?module=user-users&action=iplookup&ipaddress={$user['lastip']}", "MyBB.popupWindow('index.php?module=user-users&action=iplookup&ipaddress={$user['lastip']}', null, true); return false;"); - $popup->add_item($lang->ban_ip, "index.php?module=config-banning&filter={$user['lastip']}"); - $controls = $popup->fetch(); - } - $table->construct_cell("{$lang->last_known_ip}: ".$user['lastip']); - $table->construct_cell($controls, array('class' => "align_center")); - $table->construct_row(); - - if(empty($user['regip'])) - { - $user['regip'] = $lang->unknown; - $controls = ''; - } - else - { - $user['regip'] = my_inet_ntop($db->unescape_binary($user['regip'])); - $popup = new PopupMenu("user_reg", $lang->options); - $popup->add_item($lang->show_users_regged_with_ip, "index.php?module=user-users&results=1&action=search&conditions=".urlencode(my_serialize(array("regip" => $user['regip'])))); - $popup->add_item($lang->show_users_posted_with_ip, "index.php?module=user-users&results=1&action=search&conditions=".urlencode(my_serialize(array("postip" => $user['regip'])))); - $popup->add_item($lang->info_on_ip, "index.php?module=user-users&action=iplookup&ipaddress={$user['regip']}", "MyBB.popupWindow('index.php?module=user-users&action=iplookup&ipaddress={$user['regip']}', null, true); return false;"); - $popup->add_item($lang->ban_ip, "index.php?module=config-banning&filter={$user['regip']}"); - $controls = $popup->fetch(); - } - $table->construct_cell("{$lang->registration_ip}: ".$user['regip']); - $table->construct_cell($controls, array('class' => "align_center")); - $table->construct_row(); - - $counter = 0; - - $query = $db->simple_select("posts", "DISTINCT ipaddress", "uid='{$mybb->input['uid']}'"); - while($ip = $db->fetch_array($query)) - { - ++$counter; - $ip['ipaddress'] = my_inet_ntop($db->unescape_binary($ip['ipaddress'])); - $popup = new PopupMenu("id_{$counter}", $lang->options); - $popup->add_item($lang->show_users_regged_with_ip, "index.php?module=user-users&results=1&action=search&conditions=".urlencode(my_serialize(array("regip" => $ip['ipaddress'])))); - $popup->add_item($lang->show_users_posted_with_ip, "index.php?module=user-users&results=1&action=search&conditions=".urlencode(my_serialize(array("postip" => $ip['ipaddress'])))); - $popup->add_item($lang->info_on_ip, "index.php?module=user-users&action=iplookup&ipaddress={$ip['ipaddress']}", "MyBB.popupWindow('index.php?module=user-users&action=iplookup&ipaddress={$ip['ipaddress']}', null, true); return false;"); - $popup->add_item($lang->ban_ip, "index.php?module=config-banning&filter={$ip['ipaddress']}"); - $controls = $popup->fetch(); - - $table->construct_cell($ip['ipaddress']); - $table->construct_cell($controls, array('class' => "align_center")); - $table->construct_row(); - } - - $table->output($lang->ip_address_for.' '.htmlspecialchars_uni($user['username'])); - - $page->output_footer(); -} - -if($mybb->input['action'] == "merge") -{ - $plugins->run_hooks("admin_user_users_merge"); - - if($mybb->request_method == "post") - { - $source_user = get_user_by_username($mybb->input['source_username'], array('fields' => '*')); - if(!$source_user['uid']) - { - $errors[] = $lang->error_invalid_user_source; - } - - $destination_user = get_user_by_username($mybb->input['destination_username'], array('fields' => '*')); - if(!$destination_user['uid']) - { - $errors[] = $lang->error_invalid_user_destination; - } - - // If we're not a super admin and we're merging a source super admin or a destination super admin then dissallow this action - if(!is_super_admin($mybb->user['uid']) && (is_super_admin($source_user['uid']) || is_super_admin($destination_user['uid']))) - { - flash_message($lang->error_no_perms_super_admin, 'error'); - admin_redirect("index.php?module=user-users"); - } - - if($source_user['uid'] == $destination_user['uid']) - { - $errors[] = $lang->error_cannot_merge_same_account; - } - - if(empty($errors)) - { - // Begin to merge the accounts - $uid_update = array( - "uid" => $destination_user['uid'] - ); - $query = $db->simple_select("adminoptions", "uid", "uid='{$destination_user['uid']}'"); - $existing_admin_options = $db->fetch_field($query, "uid"); - - // Only carry over admin options/permissions if we don't already have them - if(!$existing_admin_options) - { - $db->update_query("adminoptions", $uid_update, "uid='{$source_user['uid']}'"); - } - - $db->update_query("adminlog", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("announcements", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("events", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("threadsubscriptions", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("forumsubscriptions", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("joinrequests", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("moderatorlog", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("pollvotes", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("posts", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("privatemessages", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("reportedcontent", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("threads", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("warnings", $uid_update, "uid='{$source_user['uid']}'"); - $db->update_query("warnings", array("revokedby" => $destination_user['uid']), "revokedby='{$source_user['uid']}'"); - $db->update_query("warnings", array("issuedby" => $destination_user['uid']), "issuedby='{$source_user['uid']}'"); - - // Thread ratings - merge_thread_ratings($source_user['uid'], $destination_user['uid']); - - // Banning - $db->update_query("banned", array('admin' => $destination_user['uid']), "admin = '{$source_user['uid']}'"); - - // Merging Reputation - // First, let's change all the details over to our new user... - $db->update_query("reputation", array("adduid" => $destination_user['uid']), "adduid = '".$source_user['uid']."'"); - $db->update_query("reputation", array("uid" => $destination_user['uid']), "uid = '".$source_user['uid']."'"); - - // Now that all the repuation is merged, figure out what to do with this user's comments... - $options = array( - "order_by" => "uid", - "order_dir" => "ASC" - ); - - $to_remove = array(); - $query = $db->simple_select("reputation", "*", "adduid = '".$destination_user['uid']."'"); - while($rep = $db->fetch_array($query)) - { - if($rep['pid'] == 0 && $mybb->settings['multirep'] == 0 && $last_result['uid'] == $rep['uid']) - { - // Multiple reputation is disallowed, and this isn't a post, so let's remove this comment - $to_remove[] = $rep['rid']; - } - - // Remove comments or posts liked by "me" - if($last_result['uid'] == $destination_user['uid'] || $rep['uid'] == $destination_user['uid']) - { - if(!in_array($rep['rid'], $to_remove)) - { - $to_remove[] = $rep['rid']; - continue; - } - } - - $last_result = array( - "rid" => $rep['rid'], - "uid" => $rep['uid'] - ); - } - - // Remove any reputations we've selected to remove... - if(!empty($to_remove)) - { - $imp = implode(",", $to_remove); - $db->delete_query("reputation", "rid IN (".$imp.")"); - } - - // Calculate the new reputation for this user... - $query = $db->simple_select("reputation", "SUM(reputation) as total_rep", "uid='{$destination_user['uid']}'"); - $total_reputation = $db->fetch_field($query, "total_rep"); - - $db->update_query("users", array('reputation' => (int)$total_reputation), "uid='{$destination_user['uid']}'"); - - // Calculate warning points - $query = $db->query(" - SELECT SUM(points) as warn_lev - FROM ".TABLE_PREFIX."warnings - WHERE uid='{$source_user['uid']}' AND expired='0' - "); - $original_warn_level = $db->fetch_field($query, "warn_lev"); - - $query = $db->query(" - SELECT SUM(points) as warn_lev - FROM ".TABLE_PREFIX."warnings - WHERE uid='{$destination_user['uid']}' AND expired='0' - "); - $new_warn_level = $db->fetch_field($query, "warn_lev"); - $db->update_query("users", array("warningpoints" => (int)$original_warn_level + $new_warn_level), "uid='{$destination_user['uid']}'"); - - // Additional updates for non-uid fields - $last_poster = array( - "lastposteruid" => $destination_user['uid'], - "lastposter" => $db->escape_string($destination_user['username']) - ); - $db->update_query("forums", $last_poster, "lastposteruid='{$source_user['uid']}'"); - $db->update_query("threads", $last_poster, "lastposteruid='{$source_user['uid']}'"); - $edit_uid = array( - "edituid" => $destination_user['uid'] - ); - $db->update_query("posts", $edit_uid, "edituid='{$source_user['uid']}'"); - - $from_uid = array( - "fromid" => $destination_user['uid'] - ); - $db->update_query("privatemessages", $from_uid, "fromid='{$source_user['uid']}'"); - $to_uid = array( - "toid" => $destination_user['uid'] - ); - $db->update_query("privatemessages", $to_uid, "toid='{$source_user['uid']}'"); - - // Buddy/ignore lists - $destination_buddies = explode(',', $destination_user['buddylist']); - $source_buddies = explode(',', $source_user['buddylist']); - $buddies = array_unique(array_merge($source_buddies, $destination_buddies)); - // Make sure the new buddy list doesn't contain either users - $buddies_array = array_diff($buddies, array($destination_user['uid'], $source_user['uid'])); - - $destination_ignored = explode(',', $destination_user['ignorelist']); - $source_ignored = explode(',', $destination_user['ignorelist']); - $ignored = array_unique(array_merge($source_ignored, $destination_ignored)); - // ... and the same for the new ignore list - $ignored_array = array_diff($ignored, array($destination_user['uid'], $source_user['uid'])); - - // Remove any ignored users from the buddy list - $buddies = array_diff($buddies_array, $ignored_array); - // implode the arrays so we get a nice neat list for each - $buddies = trim(implode(',', $buddies), ','); - $ignored = trim(implode(',', $ignored_array), ','); - - $lists = array( - "buddylist" => $buddies, - "ignorelist" => $ignored - ); - $db->update_query("users", $lists, "uid='{$destination_user['uid']}'"); - - // Get a list of forums where post count doesn't apply - $fids = array(); - $query = $db->simple_select("forums", "fid", "usepostcounts=0"); - while($fid = $db->fetch_field($query, "fid")) - { - $fids[] = $fid; - } - - $fids_not_in = ''; - if(!empty($fids)) - { - $fids_not_in = "AND fid NOT IN(".implode(',', $fids).")"; - } - - // Update user post count - $query = $db->simple_select("posts", "COUNT(*) AS postnum", "uid='".$destination_user['uid']."' {$fids_not_in}"); - $num = $db->fetch_array($query); - $updated_count = array( - "postnum" => $num['postnum'] - ); - $db->update_query("users", $updated_count, "uid='{$destination_user['uid']}'"); - - // Update user thread count - $query = $db->simple_select("threads", "COUNT(*) AS threadnum", "uid='".$destination_user['uid']."' {$fids_not_in}"); - $num = $db->fetch_array($query); - $updated_count = array( - "threadnum" => $num['threadnum'] - ); - $db->update_query("users", $updated_count, "uid='{$destination_user['uid']}'"); - - // Use the earliest registration date - if($destination_user['regdate'] > $source_user['regdate']) - { - $db->update_query("users", array('regdate' => $source_user['regdate']), "uid='{$destination_user['uid']}'"); - } - - $plugins->run_hooks("admin_user_users_merge_commit"); - - // Set up user handler. - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('delete'); - - // Delete the old user - $userhandler->delete_user($source_user['uid']); - - $cache->update_awaitingactivation(); - - // Log admin action - log_admin_action($source_user['uid'], htmlspecialchars_uni($source_user['username']), $destination_user['uid'], htmlspecialchars_uni($destination_user['username'])); - - // Redirect! - $username = htmlspecialchars_uni($source_user['username']); - $destination_username = htmlspecialchars_uni($destination_user['username']); - flash_message("{$username} {$lang->success_merged} {$destination_username}", "success"); - admin_redirect("index.php?module=user-users"); - exit; - } - } - - $page->add_breadcrumb_item($lang->merge_users); - $page->output_header($lang->merge_users); - - $page->output_nav_tabs($sub_tabs, 'merge_users'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=user-users&action=merge", "post"); - - $form_container = new FormContainer($lang->merge_users); - $form_container->output_row($lang->source_account." *", $lang->source_account_desc, $form->generate_text_box('source_username', $mybb->input['source_username'], array('id' => 'source_username')), 'source_username'); - $form_container->output_row($lang->destination_account." *", $lang->destination_account_desc, $form->generate_text_box('destination_username', $mybb->input['destination_username'], array('id' => 'destination_username')), 'destination_username'); - $form_container->end(); - - // Autocompletion for usernames - echo ' - - - '; - - $buttons[] = $form->generate_submit_button($lang->merge_user_accounts); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "search") -{ - $plugins->run_hooks("admin_user_users_search"); - - if($mybb->request_method == "post" || $mybb->input['results'] == 1) - { - // Build view options from incoming search options - if($mybb->input['vid']) - { - $query = $db->simple_select("adminviews", "*", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'"); - $admin_view = $db->fetch_array($query); - // View does not exist or this view is private and does not belong to the current user - if(!$admin_view['vid'] || ($admin_view['visibility'] == 1 && $admin_view['uid'] != $mybb->user['uid'])) - { - unset($admin_view); - } - } - - if($mybb->input['search_id'] && $admin_session['data']['user_views'][$mybb->input['search_id']]) - { - $admin_view = $admin_session['data']['user_views'][$mybb->input['search_id']]; - unset($admin_view['extra_sql']); - } - else - { - // Don't have a view? Fetch the default - if(!$admin_view['vid']) - { - $default_view = fetch_default_view("user"); - if(!$default_view) - { - $default_view = "0"; - } - $query = $db->simple_select("adminviews", "*", "type='user' AND (vid='{$default_view}' OR uid=0)", array("order_by" => "uid", "order_dir" => "desc")); - $admin_view = $db->fetch_array($query); - } - } - - // Override specific parts of the view - unset($admin_view['vid']); - - if($mybb->input['type']) - { - $admin_view['view_type'] = $mybb->input['type']; - } - - if($mybb->input['conditions']) - { - $admin_view['conditions'] = $mybb->input['conditions']; - } - - if($mybb->input['sortby']) - { - $admin_view['sortby'] = $mybb->input['sortby']; - } - - if($mybb->get_input('perpage', MyBB::INPUT_INT)) - { - $admin_view['perpage'] = $mybb->input['perpage']; - } - - if($mybb->input['order']) - { - $admin_view['sortorder'] = $mybb->input['order']; - } - - if($mybb->input['displayas']) - { - $admin_view['view_type'] = $mybb->input['displayas']; - } - - if($mybb->input['profile_fields']) - { - $admin_view['custom_profile_fields'] = $mybb->input['profile_fields']; - } - - $plugins->run_hooks("admin_user_users_search_commit"); - - $results = build_users_view($admin_view); - - if($results) - { - $page->output_header($lang->find_users); - echo ""; - $page->output_nav_tabs($sub_tabs, 'find_users'); - echo $results; - $page->output_footer(); - } - else - { - if($mybb->input['from'] == "home") - { - flash_message($lang->error_no_users_found, 'error'); - admin_redirect("index.php"); - exit; - } - else - { - $errors[] = $lang->error_no_users_found; - } - } - } - - $page->add_breadcrumb_item($lang->find_users); - $page->output_header($lang->find_users); - - $page->output_nav_tabs($sub_tabs, 'find_users'); - - // If we have any error messages, show them - if($errors) - { - $page->output_inline_error($errors); - } - - if(!$mybb->input['displayas']) - { - $mybb->input['displayas'] = "card"; - } - - $form = new Form("index.php?module=user-users&action=search", "post"); - - user_search_conditions($mybb->input, $form); - - $form_container = new FormContainer($lang->display_options); - $sort_directions = array( - "asc" => $lang->ascending, - "desc" => $lang->descending - ); - $form_container->output_row($lang->sort_results_by, "", $form->generate_select_box('sortby', $sort_options, $mybb->input['sortby'], array('id' => 'sortby'))." {$lang->in} ".$form->generate_select_box('order', $sort_directions, $mybb->input['order'], array('id' => 'order')), 'sortby'); - $form_container->output_row($lang->results_per_page, "", $form->generate_numeric_field('perpage', $mybb->input['perpage'], array('id' => 'perpage', 'min' => 1)), 'perpage'); - $form_container->output_row($lang->display_results_as, "", $form->generate_radio_button('displayas', 'table', $lang->table, array('checked' => ($mybb->input['displayas'] != "card" ? true : false)))."
".$form->generate_radio_button('displayas', 'card', $lang->business_card, array('checked' => ($mybb->input['displayas'] == "card" ? true : false)))); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->find_users); - $form->output_submit_wrapper($buttons); - $form->end(); - - $page->output_footer(); -} - -if($mybb->input['action'] == "inline_edit") -{ - $plugins->run_hooks("admin_user_users_inline"); - - if($mybb->input['vid'] || $mybb->cookies['acp_view']) - { - // We have a custom view - if(!$mybb->cookies['acp_view']) - { - // Set a cookie - my_setcookie("acp_view", $mybb->input['vid'], 60); - } - elseif($mybb->cookies['acp_view']) - { - // We already have a cookie, so let's use it... - $mybb->input['vid'] = $mybb->cookies['acp_view']; - } - - $vid_url = "&vid=".$mybb->input['vid']; - } - - // First, collect the user IDs that we're performing the moderation on - $ids = explode("|", $mybb->cookies['inlinemod_useracp']); - foreach($ids as $id) - { - if($id != '') - { - $selected[] = (int)$id; - } - } - - // Verify incoming POST request - if(!verify_post_check($mybb->input['my_post_key'])) - { - flash_message($lang->invalid_post_verify_key2, 'error'); - admin_redirect("index.php?module=user-user"); - } - $sub_tabs['manage_users'] = array( - "title" => $lang->manage_users, - "link" => "./", - "description" => $lang->manage_users_desc - ); - $page->add_breadcrumb_item($lang->manage_users); - - if(!is_array($selected)) - { - // Not selected any users, show error - flash_message($lang->error_inline_no_users_selected, 'error'); - admin_redirect("index.php?module=user-users".$vid_url); - } - - switch($mybb->input['inline_action']) - { - case 'multiactivate': - // Run through the activating users, so that users already registered (but have been selected) aren't affected - if(is_array($selected)) - { - $sql_array = implode(",", $selected); - $query = $db->simple_select("users", "uid, username, email", "usergroup = '5' AND uid IN (".$sql_array.")"); - $user_mail_data = array(); - while($user = $db->fetch_array($query)) - { - $to_update[] = $user['uid']; - $user_mail_data[] = array('username' => $user['username'], 'email' => $user['email']); - } - } - - if(is_array($to_update)) - { - $sql_array = implode(",", $to_update); - $db->write_query("UPDATE ".TABLE_PREFIX."users SET usergroup = '2' WHERE uid IN (".$sql_array.")"); - - $cache->update_awaitingactivation(); - - // send activation mail - foreach($user_mail_data as $mail_data) - { - $message = $lang->sprintf($lang->email_adminactivateaccount, $mail_data['username'], $mybb->settings['bbname'], $mybb->settings['bburl']); - my_mail($mail_data['email'], $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']), $message); - } - - // Action complete, grab stats and show success message - redirect user - $to_update_count = count($to_update); - $lang->inline_activated = $lang->sprintf($lang->inline_activated, my_number_format($to_update_count)); - - if($to_update_count != count($selected)) - { - // The update count is different to how many we selected! - $not_updated_count = count($selected) - $to_update_count; - $lang->inline_activated_more = $lang->sprintf($lang->inline_activated_more, my_number_format($not_updated_count)); - $lang->inline_activated = $lang->inline_activated."
".$lang->inline_activated_more; // Add these stats to the message - } - - $mybb->input['action'] = "inline_activated"; // Force a change to the action so we can add it to the adminlog - log_admin_action($to_update_count); // Add to adminlog - my_unsetcookie("inlinemod_useracp"); // Unset the cookie, so that the users aren't still selected when we're redirected - - flash_message($lang->inline_activated, 'success'); - admin_redirect("index.php?module=user-users".$vid_url); - } - else - { - // Nothing was updated, show an error - flash_message($lang->inline_activated_failed, 'error'); - admin_redirect("index.php?module=user-users".$vid_url); - } - break; - case 'multilift': - // Get the users that are banned, and check that they have been selected - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-users".$vid_url); // User clicked on 'No' - } - - if($mybb->request_method == "post") - { - $sql_array = implode(",", $selected); - $query = $db->simple_select("banned", "*", "uid IN (".$sql_array.")"); - $to_be_unbanned = $db->num_rows($query); - while($ban = $db->fetch_array($query)) - { - $updated_group = array( - "usergroup" => $ban['oldgroup'], - "additionalgroups" => $ban['oldadditionalgroups'], - "displaygroup" => $ban['olddisplaygroup'] - ); - $db->update_query("users", $updated_group, "uid = '".$ban['uid']."'"); - $db->delete_query("banned", "uid = '".$ban['uid']."'"); - } - - $cache->update_banned(); - $cache->update_moderators(); - - $mybb->input['action'] = "inline_lift"; - log_admin_action($to_be_unbanned); - my_unsetcookie("inlinemod_useracp"); - - $lang->success_ban_lifted = $lang->sprintf($lang->success_ban_lifted, my_number_format($to_be_unbanned)); - flash_message($lang->success_ban_lifted, 'success'); - admin_redirect("index.php?module=user-users".$vid_url); - } - else - { - $page->output_confirm_action("index.php?module=user-users&action=inline_edit&inline_action=multilift", $lang->confirm_multilift); - } - - break; - case 'multiban': - if($mybb->input['processed'] == 1) - { - // We've posted ban information! - // Build an array of users to ban, =D - $sql_array = implode(",", $selected); - // Build a cache array for this users that have been banned already - $query = $db->simple_select("banned", "uid", "uid IN (".$sql_array.")"); - while($user = $db->fetch_array($query)) - { - $bannedcache[] = "u_".$user['uid']; - } - - // Collect the users - $query = $db->simple_select("users", "uid, username, usergroup, additionalgroups, displaygroup", "uid IN (".$sql_array.")"); - - if($mybb->input['bantime'] == '---') - { - $lifted = 0; - } - else - { - $lifted = ban_date2timestamp($mybb->input['bantime']); - } - - $reason = my_substr($mybb->input['reason'], 0, 255); - - $banned_count = 0; - while($user = $db->fetch_array($query)) - { - if($user['uid'] == $mybb->user['uid'] || is_super_admin($user['uid'])) - { - // We remove ourselves and Super Admins from the mix - continue; - } - - if(is_array($bannedcache) && in_array("u_".$user['uid'], $bannedcache)) - { - // User already has a ban, update it! - $update_array = array( - "admin" => (int)$mybb->user['uid'], - "dateline" => TIME_NOW, - "bantime" => $db->escape_string($mybb->input['bantime']), - "lifted" => $db->escape_string($lifted), - "reason" => $db->escape_string($reason) - ); - $db->update_query("banned", $update_array, "uid = '".$user['uid']."'"); - } - else - { - // Not currently banned - insert the ban - $insert_array = array( - 'uid' => $user['uid'], - 'gid' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'oldgroup' => $user['usergroup'], - 'oldadditionalgroups' => $user['additionalgroups'], - 'olddisplaygroup' => $user['displaygroup'], - 'admin' => (int)$mybb->user['uid'], - 'dateline' => TIME_NOW, - 'bantime' => $db->escape_string($mybb->input['bantime']), - 'lifted' => $db->escape_string($lifted), - 'reason' => $db->escape_string($reason) - ); - $db->insert_query('banned', $insert_array); - } - - // Moved the user to the 'Banned' Group - $update_array = array( - 'usergroup' => 7, - 'displaygroup' => 0, - 'additionalgroups' => '', - ); - $db->update_query('users', $update_array, "uid = '{$user['uid']}'"); - - $db->delete_query("forumsubscriptions", "uid = '{$user['uid']}'"); - $db->delete_query("threadsubscriptions", "uid = '{$user['uid']}'"); - - $cache->update_banned(); - ++$banned_count; - } - $mybb->input['action'] = "inline_banned"; - log_admin_action($banned_count, $lifted); - my_unsetcookie("inlinemod_useracp"); // Remove the cookie of selected users as we've finished with them - - $lang->users_banned = $lang->sprintf($lang->users_banned, $banned_count); - flash_message($lang->users_banned, 'success'); - admin_redirect("index.php?module=user-users".$vid_url); - } - - $page->output_header($lang->manage_users); - $page->output_nav_tabs($sub_tabs, 'manage_users'); - - // Provide the user with a warning of what they're about to do - $table = new Table; - $lang->mass_ban_info = $lang->sprintf($lang->mass_ban_info, count($selected)); - $table->construct_cell($lang->mass_ban_info); - $table->construct_row(); - $table->output($lang->important); - - // If there's any errors, display inline - if($errors) - { - $page->output_inline_error($errors); - } - - $form = new Form("index.php?module=user-users", "post"); - echo $form->generate_hidden_field('action', 'inline_edit'); - echo $form->generate_hidden_field('inline_action', 'multiban'); - echo $form->generate_hidden_field('processed', '1'); - - $form_container = new FormContainer(''.$lang->mass_ban); - $form_container->output_row($lang->ban_reason, "", $form->generate_text_area('reason', $mybb->input['reason'], array('id' => 'reason', 'maxlength' => '255')), 'reason'); - $ban_times = fetch_ban_times(); - foreach($ban_times as $time => $period) - { - if($time != '---') - { - $friendly_time = my_date("D, jS M Y @ {$mybb->settings['timeformat']}", ban_date2timestamp($time)); - $period = "{$period} ({$friendly_time})"; - } - $length_list[$time] = $period; - } - $form_container->output_row($lang->ban_time, "", $form->generate_select_box('bantime', $length_list, $mybb->input['bantime'], array('id' => 'bantime')), 'bantime'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->ban_users); - $form->output_submit_wrapper($buttons); - $form->end(); - $page->output_footer(); - break; - case 'multidelete': - if($mybb->input['no']) - { - admin_redirect("index.php?module=user-users".$vid_url); // User clicked on 'No - } - else - { - if($mybb->input['processed'] == 1) - { - // Set up user handler. - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('delete'); - - // Delete users - $deleted = $userhandler->delete_user($selected); - $to_be_deleted = $deleted['deleted_users']; // Get the correct number of deleted users - - // Update forum stats, remove the cookie and redirect the user - my_unsetcookie("inlinemod_useracp"); - $mybb->input['action'] = "inline_delete"; - log_admin_action($to_be_deleted); - - $lang->users_deleted = $lang->sprintf($lang->users_deleted, $to_be_deleted); - - $cache->update_awaitingactivation(); - - flash_message($lang->users_deleted, 'success'); - admin_redirect("index.php?module=user-users".$vid_url); - } - - $to_be_deleted = count($selected); - $lang->confirm_multidelete = $lang->sprintf($lang->confirm_multidelete, my_number_format($to_be_deleted)); - $page->output_confirm_action("index.php?module=user-users&action=inline_edit&inline_action=multidelete&my_post_key={$mybb->post_code}&processed=1", $lang->confirm_multidelete); - } - break; - case 'multiprune': - if($mybb->input['processed'] == 1) - { - if(($mybb->input['day'] || $mybb->input['month'] || $mybb->input['year']) && $mybb->input['set']) - { - $errors[] = $lang->multi_selected_dates; - } - - $day = $mybb->get_input('day', MyBB::INPUT_INT); - $month = $mybb->get_input('month', MyBB::INPUT_INT); - $year = $mybb->get_input('year', MyBB::INPUT_INT); - - // Selected a date - check if the date the user entered is valid - if($mybb->input['day'] || $mybb->input['month'] || $mybb->input['year']) - { - // Is the date sort of valid? - if($day < 1 || $day > 31 || $month < 1 || $month > 12 || ($month == 2 && $day > 29)) - { - $errors[] = $lang->incorrect_date; - } - - // Check the month - $months = get_bdays($year); - if($day > $months[$month-1]) - { - $errors[] = $lang->incorrect_date; - } - - // Check the year - if($year != 0 && ($year < (date("Y")-100)) || $year > date("Y")) - { - $errors[] = $lang->incorrect_date; - } - - if(!$errors) - { - // No errors, so let's continue and set the date to delete from - $date = mktime(date('H'), date('i'), date('s'), $month, $day, $year); // Generate a unix time stamp - } - } - elseif($mybb->input['set'] > 0) - { - // Set options - // For this purpose, 1 month = 31 days - $base_time = 24 * 60 * 60; - - switch($mybb->input['set']) - { - case '1': - $threshold = $base_time * 31; // 1 month = 31 days, in the standard terms - break; - case '2': - $threshold = $base_time * 93; // 3 months = 31 days * 3 - break; - case '3': - $threshold = $base_time * 183; // 6 months = 365 days / 2 - break; - case '4': - $threshold = $base_time * 365; // 1 year = 365 days - break; - case '5': - $threshold = $base_time * 548; // 18 months = 365 + 183 - break; - case '6': - $threshold = $base_time * 730; // 2 years = 365 * 2 - break; - } - - if(!$threshold) - { - // An option was entered that isn't in the dropdown box - $errors[] = $lang->no_set_option; - } - else - { - $date = TIME_NOW - $threshold; - } - } - else - { - $errors[] = $lang->no_prune_option; - } - - if(!$errors) - { - $sql_array = implode(",", $selected); - $prune_array = array(); - $query = $db->simple_select("users", "uid", "uid IN (".$sql_array.")"); - while($user = $db->fetch_array($query)) - { - // Protect Super Admins - if(is_super_admin($user['uid']) && !is_super_admin($mybb->user['uid'])) - { - continue; - } - - $return_array = delete_user_posts($user['uid'], $date); // Delete user posts, and grab a list of threads to delete - if($return_array && is_array($return_array)) - { - $prune_array = array_merge_recursive($prune_array, $return_array); - } - } - - // No posts were found for the user, return error - if(!is_array($prune_array) || count($prune_array) == 0) - { - flash_message($lang->prune_fail, 'error'); - admin_redirect("index.php?module=user-users".$vid_url); - } - - // Require the rebuild functions - require_once MYBB_ROOT.'/inc/functions.php'; - require_once MYBB_ROOT.'/inc/functions_rebuild.php'; - - // We've finished deleting user's posts, so let's delete the threads - if(is_array($prune_array['to_delete']) && count($prune_array['to_delete']) > 0) - { - foreach($prune_array['to_delete'] as $tid) - { - $db->delete_query("threads", "tid='$tid'"); - $db->delete_query("threads", "closed='moved|$tid'"); - $db->delete_query("threadsubscriptions", "tid='$tid'"); - $db->delete_query("polls", "tid='$tid'"); - $db->delete_query("threadsread", "tid='$tid'"); - $db->delete_query("threadratings", "tid='$tid'"); - } - } - - // After deleting threads, rebuild the thread counters for the affected threads - if(is_array($prune_array['thread_update']) && count($prune_array['thread_update']) > 0) - { - $sql_array = implode(",", $prune_array['thread_update']); - $query = $db->simple_select("threads", "tid", "tid IN (".$sql_array.")", array('order_by' => 'tid', 'order_dir' => 'asc')); - while($thread = $db->fetch_array($query)) - { - rebuild_thread_counters($thread['tid']); - } - } - - // After updating thread counters, update the affected forum counters - if(is_array($prune_array['forum_update']) && count($prune_array['forum_update']) > 0) - { - $sql_array = implode(",", $prune_array['forum_update']); - $query = $db->simple_select("forums", "fid", "fid IN (".$sql_array.")", array('order_by' => 'fid', 'order_dir' => 'asc')); - while($forum = $db->fetch_array($query)) - { - // Because we have a recursive array merge, check to see if there isn't a duplicated forum to update - if($looped_forum == $forum['fid']) - { - continue; - } - $looped_forum = $forum['fid']; - rebuild_forum_counters($forum['fid']); - } - } - - //log_admin_action(); - my_unsetcookie("inlinemod_useracp"); // We've got our users, remove the cookie - flash_message($lang->prune_complete, 'success'); - admin_redirect("index.php?module=user-users".$vid_url); - } - } - - $page->output_header($lang->manage_users); - $page->output_nav_tabs($sub_tabs, 'manage_users'); - - // Display a table warning - $table = new Table; - $lang->mass_prune_info = $lang->sprintf($lang->mass_prune_info, count($selected)); - $table->construct_cell($lang->mass_prune_info); - $table->construct_row(); - $table->output($lang->important); - - if($errors) - { - $page->output_inline_error($errors); - } - - // Display the prune options - $form = new Form("index.php?module=user-users", "post"); - echo $form->generate_hidden_field('action', 'inline_edit'); - echo $form->generate_hidden_field('inline_action', 'multiprune'); - echo $form->generate_hidden_field('processed', '1'); - - $form_container = new FormContainer($lang->mass_prune_posts); - - // Generate a list of days (1 - 31) - $day_options = array(); - $day_options[] = " "; - for($i = 1; $i <= 31; ++$i) - { - $day_options[] = $i; - } - - // Generate a list of months (1 - 12) - $month_options = array(); - $month_options[] = " "; - for($i = 1; $i <= 12; ++$i) - { - $string = "month_{$i}"; - $month_options[] = $lang->$string; - } - $date_box = $form->generate_select_box('day', $day_options, $mybb->input['day']); - $month_box = $form->generate_select_box('month', $month_options, $mybb->input['month']); - $year_box = $form->generate_numeric_field('year', $mybb->input['year'], array('id' => 'year', 'style' => 'width: 50px;', 'min' => 0)); - - $prune_select = $date_box.$month_box.$year_box; - $form_container->output_row($lang->manual_date, "", $prune_select, 'date'); - - // Generate the set date box - $set_options = array(); - $set_options[] = $lang->set_an_option; - for($i = 1; $i <= 6; ++$i) - { - $string = "option_{$i}"; - $set_options[] = $lang->$string; - } - - $form_container->output_row($lang->relative_date, "", $lang->delete_posts." ".$form->generate_select_box('set', $set_options, $mybb->input['set']), 'set'); - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->prune_posts); - $form->output_submit_wrapper($buttons); - $form->end(); - $page->output_footer(); - break; - case 'multiusergroup': - if($mybb->input['processed'] == 1) - { - // Determine additional usergroups - if(is_array($mybb->input['additionalgroups'])) - { - foreach($mybb->input['additionalgroups'] as $key => $gid) - { - if($gid == $mybb->input['usergroup']) - { - unset($mybb->input['additionalgroups'][$key]); - } - } - - $additionalgroups = implode(",", array_map('intval', $mybb->input['additionalgroups'])); - } - else - { - $additionalgroups = ''; - } - - // Create an update array - $update_array = array( - "usergroup" => $mybb->get_input('usergroup', MyBB::INPUT_INT), - "additionalgroups" => $additionalgroups, - "displaygroup" => $mybb->get_input('displaygroup', MyBB::INPUT_INT) - ); - - // Do the usergroup update for all those selected - // If the a selected user is a super admin, don't update that user - foreach($selected as $user) - { - if(!is_super_admin($user)) - { - $users_to_update[] = $user; - } - } - - $to_update_count = count($users_to_update); - if($to_update_count > 0 && is_array($users_to_update)) - { - // Update the users in the database - $sql = implode(",", $users_to_update); - $db->update_query("users", $update_array, "uid IN (".$sql.")"); - - // Redirect the admin... - $mybb->input['action'] = "inline_usergroup"; - log_admin_action($to_update_count); - my_unsetcookie("inlinemod_useracp"); - flash_message($lang->success_mass_usergroups, 'success'); - admin_redirect("index.php?module=user-users".$vid_url); - } - else - { - // They tried to edit super admins! Uh-oh! - $errors[] = $lang->no_usergroup_changed; - } - } - - $page->output_header($lang->manage_users); - $page->output_nav_tabs($sub_tabs, 'manage_users'); - - // Display a table warning - $table = new Table; - $lang->usergroup_info = $lang->sprintf($lang->usergroup_info, count($selected)); - $table->construct_cell($lang->usergroup_info); - $table->construct_row(); - $table->output($lang->important); - - if($errors) - { - $page->output_inline_error($errors); - } - - // Display the usergroup options - $form = new Form("index.php?module=user-users", "post"); - echo $form->generate_hidden_field('action', 'inline_edit'); - echo $form->generate_hidden_field('inline_action', 'multiusergroup'); - echo $form->generate_hidden_field('processed', '1'); - - $form_container = new FormContainer($lang->mass_usergroups); - - // Usergroups - $display_group_options[0] = $lang->use_primary_user_group; - $options = array(); - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - $display_group_options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - } - - if(!is_array($mybb->input['additionalgroups'])) - { - $mybb->input['additionalgroups'] = explode(',', $mybb->input['additionalgroups']); - } - - $form_container->output_row($lang->primary_user_group, "", $form->generate_select_box('usergroup', $options, $mybb->input['usergroup'], array('id' => 'usergroup')), 'usergroup'); - $form_container->output_row($lang->additional_user_groups, $lang->additional_user_groups_desc, $form->generate_select_box('additionalgroups[]', $options, $mybb->input['additionalgroups'], array('id' => 'additionalgroups', 'multiple' => true, 'size' => 5)), 'additionalgroups'); - $form_container->output_row($lang->display_user_group, "", $form->generate_select_box('displaygroup', $display_group_options, $mybb->input['displaygroup'], array('id' => 'displaygroup')), 'displaygroup'); - - $form_container->end(); - - $buttons[] = $form->generate_submit_button($lang->alter_usergroups); - $form->output_submit_wrapper($buttons); - $form->end(); - $page->output_footer(); - break; - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("admin_user_users_start"); - - $page->output_header($lang->browse_users); - echo ""; - - $page->output_nav_tabs($sub_tabs, 'browse_users'); - - if(isset($mybb->input['search_id']) && $admin_session['data']['user_views'][$mybb->input['search_id']]) - { - $admin_view = $admin_session['data']['user_views'][$mybb->input['search_id']]; - unset($admin_view['extra_sql']); - } - else - { - // Showing a specific view - if(isset($mybb->input['vid'])) - { - $query = $db->simple_select("adminviews", "*", "vid='".$mybb->get_input('vid', MyBB::INPUT_INT)."'"); - $admin_view = $db->fetch_array($query); - // View does not exist or this view is private and does not belong to the current user - if(!$admin_view['vid'] || ($admin_view['visibility'] == 1 && $admin_view['uid'] != $mybb->user['uid'])) - { - unset($admin_view); - } - } - - // Don't have a view? Fetch the default - if(!isset($admin_view)) - { - $default_view = fetch_default_view("user"); - if(!$default_view) - { - $default_view = "0"; - } - $query = $db->simple_select("adminviews", "*", "type='user' AND (vid='{$default_view}' OR uid=0)", array("order_by" => "uid", "order_dir" => "desc")); - $admin_view = $db->fetch_array($query); - } - } - - // Fetch a list of all of the views for this user - $popup = new PopupMenu("views", $lang->views); - - $query = $db->simple_select("adminviews", "*", "type='user' AND (visibility=2 OR uid={$mybb->user['uid']})", array("order_by" => "title")); - while($view = $db->fetch_array($query)) - { - $popup->add_item(htmlspecialchars_uni($view['title']), "index.php?module=user-users&vid={$view['vid']}"); - } - $popup->add_item("{$lang->manage_views}", "index.php?module=user-users&action=views"); - $admin_view['popup'] = $popup->fetch(); - - if(isset($mybb->input['type'])) - { - $admin_view['view_type'] = $mybb->input['type']; - } - - $results = build_users_view($admin_view); - - if(!$results) - { - // If we came from the home page and clicked on the "Activate Users" link, send them back to here - if($admin_session['data']['from'] == "home") - { - flash_message($admin_session['data']['flash_message2']['message'], $admin_session['data']['flash_message2']['type']); - update_admin_session('flash_message2', ''); - update_admin_session('from', ''); - admin_redirect("index.php"); - exit; - } - else - { - $errors[] = $lang->error_no_users_found; - } - } - - // If we have any error messages, show them - if($errors) - { - if($inline != true) - { - echo "
{$admin_view['popup']}

\n"; - } - $page->output_inline_error($errors); - } - - echo $results; - - $page->output_footer(); -} - -/** - * @param array $view - * - * @return string - */ -function build_users_view($view) -{ - global $mybb, $db, $cache, $lang, $user_view_fields, $page; - - if($view['view_type'] != 'card') - { - $view['view_type'] = 'table'; - } - - $view_title = ''; - if($view['title']) - { - $title_string = "view_title_{$view['vid']}"; - - if($lang->$title_string) - { - $view['title'] = $lang->$title_string; - } - - $view_title .= " (".htmlspecialchars_uni($view['title']).")"; - } - - // Build the URL to this view - if(!isset($view['url'])) - { - $view['url'] = "index.php?module=user-users"; - } - if(!is_array($view['conditions'])) - { - $view['conditions'] = my_unserialize($view['conditions']); - } - if(!is_array($view['fields'])) - { - $view['fields'] = my_unserialize($view['fields']); - } - if(!is_array($view['custom_profile_fields'])) - { - $view['custom_profile_fields'] = my_unserialize($view['custom_profile_fields']); - } - if(isset($mybb->input['username'])) - { - $view['conditions']['username'] = $mybb->input['username']; - $view['url'] .= "&username=".urlencode(htmlspecialchars_uni($mybb->input['username'])); - } - if($view['vid']) - { - $view['url'] .= "&vid={$view['vid']}"; - } - else - { - // If this is a custom view we need to save everything ready to pass it on from page to page - global $admin_session; - if(!$mybb->input['search_id']) - { - $search_id = md5(random_str()); - $admin_session['data']['user_views'][$search_id] = $view; - update_admin_session('user_views', $admin_session['data']['user_views']); - $mybb->input['search_id'] = $search_id; - } - $view['url'] .= "&search_id=".htmlspecialchars_uni($mybb->input['search_id']); - } - - if(!isset($admin_session['data']['last_users_view']) || $admin_session['data']['last_users_view'] != str_replace("&", "&", $view['url'])) - { - update_admin_session('last_users_url', str_replace("&", "&", $view['url'])); - } - - if(isset($view['conditions']['referrer'])){ - $view['url'] .= "&action=referrers&uid=".htmlspecialchars_uni($view['conditions']['referrer']); - } - - // Do we not have any views? - if(empty($view)) - { - return false; - } - - $table = new Table; - - // Build header for table based view - if($view['view_type'] != "card") - { - foreach($view['fields'] as $field) - { - if(!$user_view_fields[$field]) - { - continue; - } - $view_field = $user_view_fields[$field]; - $field_options = array(); - if($view_field['width']) - { - $field_options['width'] = $view_field['width']; - } - if($view_field['align']) - { - $field_options['class'] = "align_".$view_field['align']; - } - $table->construct_header($view_field['title'], $field_options); - } - $table->construct_header(""); // Create a header for the "select" boxes - } - - $search_sql = '1=1'; - - // Build the search SQL for users - - // List of valid LIKE search fields - $user_like_fields = array("username", "email", "website", "icq", "aim", "yahoo", "skype", "google", "signature", "usertitle"); - foreach($user_like_fields as $search_field) - { - if(!empty($view['conditions'][$search_field]) && !$view['conditions'][$search_field.'_blank']) - { - $search_sql .= " AND u.{$search_field} LIKE '%".$db->escape_string_like($view['conditions'][$search_field])."%'"; - } - else if(!empty($view['conditions'][$search_field.'_blank'])) - { - $search_sql .= " AND u.{$search_field} != ''"; - } - } - - // EXACT matching fields - $user_exact_fields = array("referrer"); - foreach($user_exact_fields as $search_field) - { - if(!empty($view['conditions'][$search_field])) - { - $search_sql .= " AND u.{$search_field}='".$db->escape_string($view['conditions'][$search_field])."'"; - } - } - - // LESS THAN or GREATER THAN - $direction_fields = array("postnum", "threadnum"); - foreach($direction_fields as $search_field) - { - $direction_field = $search_field."_dir"; - if(isset($view['conditions'][$search_field]) && ($view['conditions'][$search_field] || $view['conditions'][$search_field] === '0') && $view['conditions'][$direction_field]) - { - switch($view['conditions'][$direction_field]) - { - case "greater_than": - $direction = ">"; - break; - case "less_than": - $direction = "<"; - break; - default: - $direction = "="; - } - $search_sql .= " AND u.{$search_field}{$direction}'".$db->escape_string($view['conditions'][$search_field])."'"; - } - } - - // Registration searching - $reg_fields = array("regdate"); - foreach($reg_fields as $search_field) - { - if(!empty($view['conditions'][$search_field]) && (int)$view['conditions'][$search_field]) - { - $threshold = TIME_NOW - ((int)$view['conditions'][$search_field] * 24 * 60 * 60); - - $search_sql .= " AND u.{$search_field} >= '{$threshold}'"; - } - } - - // IP searching - $ip_fields = array("regip", "lastip"); - foreach($ip_fields as $search_field) - { - if(!empty($view['conditions'][$search_field])) - { - $ip_range = fetch_ip_range($view['conditions'][$search_field]); - if(!is_array($ip_range)) - { - $ip_sql = "{$search_field}=".$db->escape_binary($ip_range); - } - else - { - $ip_sql = "{$search_field} BETWEEN ".$db->escape_binary($ip_range[0])." AND ".$db->escape_binary($ip_range[1]); - } - $search_sql .= " AND {$ip_sql}"; - } - } - - // Post IP searching - if(!empty($view['conditions']['postip'])) - { - $ip_range = fetch_ip_range($view['conditions']['postip']); - if(!is_array($ip_range)) - { - $ip_sql = "ipaddress=".$db->escape_binary($ip_range); - } - else - { - $ip_sql = "ipaddress BETWEEN ".$db->escape_binary($ip_range[0])." AND ".$db->escape_binary($ip_range[1]); - } - $ip_uids = array(0); - $query = $db->simple_select("posts", "uid", $ip_sql); - while($uid = $db->fetch_field($query, "uid")) - { - $ip_uids[] = $uid; - } - $search_sql .= " AND u.uid IN(".implode(',', $ip_uids).")"; - unset($ip_uids); - } - - // Custom Profile Field searching - if($view['custom_profile_fields']) - { - $userfield_sql = '1=1'; - foreach($view['custom_profile_fields'] as $column => $input) - { - if(is_array($input)) - { - foreach($input as $value => $text) - { - if($value == $column) - { - $value = $text; - } - - if($value == $lang->na) - { - continue; - } - - if(strpos($column, '_blank') !== false) - { - $column = str_replace('_blank', '', $column); - $userfield_sql .= ' AND '.$db->escape_string($column)." != ''"; - } - else - { - $userfield_sql .= ' AND '.$db->escape_string($column)."='".$db->escape_string($value)."'"; - } - } - } - else if(!empty($input)) - { - if($input == $lang->na) - { - continue; - } - - if(strpos($column, '_blank') !== false) - { - $column = str_replace('_blank', '', $column); - $userfield_sql .= ' AND '.$db->escape_string($column)." != ''"; - } - else - { - $userfield_sql .= ' AND '.$db->escape_string($column)." LIKE '%".$db->escape_string_like($input)."%'"; - } - } - } - - if($userfield_sql != '1=1') - { - $userfield_uids = array(0); - $query = $db->simple_select("userfields", "ufid", $userfield_sql); - while($userfield = $db->fetch_array($query)) - { - $userfield_uids[] = $userfield['ufid']; - } - $search_sql .= " AND u.uid IN(".implode(',', $userfield_uids).")"; - unset($userfield_uids); - } - } - - // Usergroup based searching - if(isset($view['conditions']['usergroup'])) - { - if(!is_array($view['conditions']['usergroup'])) - { - $view['conditions']['usergroup'] = array($view['conditions']['usergroup']); - } - - foreach($view['conditions']['usergroup'] as $usergroup) - { - $usergroup = (int)$usergroup; - - if(!$usergroup) - { - continue; - } - - $additional_sql = ''; - - switch($db->type) - { - case "pgsql": - case "sqlite": - $additional_sql .= " OR ','||additionalgroups||',' LIKE '%,{$usergroup},%'"; - break; - default: - $additional_sql .= "OR CONCAT(',',additionalgroups,',') LIKE '%,{$usergroup},%'"; - } - } - - $search_sql .= " AND (u.usergroup IN (".implode(",", array_map('intval', $view['conditions']['usergroup'])).") {$additional_sql})"; - } - - // COPPA users only? - if(isset($view['conditions']['coppa'])) - { - $search_sql .= " AND u.coppauser=1 AND u.usergroup=5"; - } - - // Extra SQL? - if(isset($view['extra_sql'])) - { - $search_sql .= $view['extra_sql']; - } - - // Lets fetch out how many results we have - $query = $db->query(" - SELECT COUNT(u.uid) AS num_results - FROM ".TABLE_PREFIX."users u - WHERE {$search_sql} - "); - $num_results = $db->fetch_field($query, "num_results"); - - // No matching results then return false - if(!$num_results) - { - return false; - } - // Generate the list of results - else - { - if(!$view['perpage']) - { - $view['perpage'] = 20; - } - $view['perpage'] = (int)$view['perpage']; - - // Establish which page we're viewing and the starting index for querying - if(!isset($mybb->input['page'])) - { - $mybb->input['page'] = 1; - } - else - { - $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); - } - - if($mybb->input['page']) - { - $start = ($mybb->input['page'] - 1) * $view['perpage']; - } - else - { - $start = 0; - $mybb->input['page'] = 1; - } - - $from_bit = ""; - if(isset($mybb->input['from']) && $mybb->input['from'] == "home") - { - $from_bit = "&from=home"; - } - - switch($view['sortby']) - { - case "regdate": - case "lastactive": - case "postnum": - case "reputation": - $view['sortby'] = $db->escape_string($view['sortby']); - break; - case "numposts": - $view['sortby'] = "postnum"; - break; - case "numthreads": - $view['sortby'] = "threadnum"; - break; - case "warninglevel": - $view['sortby'] = "warningpoints"; - break; - default: - $view['sortby'] = "username"; - } - - if($view['sortorder'] != "desc") - { - $view['sortorder'] = "asc"; - } - - $usergroups = $cache->read("usergroups"); - - // Fetch matching users - $query = $db->query(" - SELECT u.* - FROM ".TABLE_PREFIX."users u - WHERE {$search_sql} - ORDER BY {$view['sortby']} {$view['sortorder']} - LIMIT {$start}, {$view['perpage']} - "); - $users = ''; - while($user = $db->fetch_array($query)) - { - $comma = $groups_list = ''; - $user['username'] = htmlspecialchars_uni($user['username']); - $user['view']['username'] = "".format_name($user['username'], $user['usergroup'], $user['displaygroup']).""; - $user['view']['usergroup'] = htmlspecialchars_uni($usergroups[$user['usergroup']]['title']); - if($user['additionalgroups']) - { - $additional_groups = explode(",", $user['additionalgroups']); - - foreach($additional_groups as $group) - { - $groups_list .= $comma.htmlspecialchars_uni($usergroups[$group]['title']); - $comma = $lang->comma; - } - } - if(!$groups_list) - { - $groups_list = $lang->none; - } - $user['view']['additionalgroups'] = "{$groups_list}"; - $user['view']['email'] = "".htmlspecialchars_uni($user['email']).""; - $user['view']['regdate'] = my_date('relative', $user['regdate']); - $user['view']['lastactive'] = my_date('relative', $user['lastactive']); - - // Build popup menu - $popup = new PopupMenu("user_{$user['uid']}", $lang->options); - $popup->add_item($lang->view_profile, $mybb->settings['bburl'].'/'.get_profile_link($user['uid'])); - $popup->add_item($lang->edit_profile_and_settings, "index.php?module=user-users&action=edit&uid={$user['uid']}"); - - // Banning options... is this user banned? - if($usergroups[$user['usergroup']]['isbannedgroup'] == 1) - { - // Yes, so do we want to edit the ban or pardon his crime? - $popup->add_item($lang->edit_ban, "index.php?module=user-banning&uid={$user['uid']}#username"); - $popup->add_item($lang->lift_ban, "index.php?module=user-banning&action=lift&uid={$user['uid']}&my_post_key={$mybb->post_code}"); - } - else - { - // Not banned... but soon maybe! - $popup->add_item($lang->ban_user, "index.php?module=user-banning&uid={$user['uid']}#username"); - } - - if($user['usergroup'] == 5) - { - if($user['coppauser']) - { - $popup->add_item($lang->approve_coppa_user, "index.php?module=user-users&action=activate_user&uid={$user['uid']}&my_post_key={$mybb->post_code}{$from_bit}"); - } - else - { - $popup->add_item($lang->approve_user, "index.php?module=user-users&action=activate_user&uid={$user['uid']}&my_post_key={$mybb->post_code}{$from_bit}"); - } - } - - $popup->add_item($lang->delete_user, "index.php?module=user-users&action=delete&uid={$user['uid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->user_deletion_confirmation}')"); - $popup->add_item($lang->show_referred_users, "index.php?module=user-users&action=referrers&uid={$user['uid']}"); - $popup->add_item($lang->show_ip_addresses, "index.php?module=user-users&action=ipaddresses&uid={$user['uid']}"); - $popup->add_item($lang->show_attachments, "index.php?module=forum-attachments&results=1&username=".urlencode($user['username'])); - $user['view']['controls'] = $popup->fetch(); - - // Fetch the reputation for this user - if($usergroups[$user['usergroup']]['usereputationsystem'] == 1 && $mybb->settings['enablereputation'] == 1) - { - $user['view']['reputation'] = get_reputation($user['reputation']); - } - else - { - $reputation = "-"; - } - - if($mybb->settings['enablewarningsystem'] != 0 && $usergroups[$user['usergroup']]['canreceivewarnings'] != 0) - { - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - - $warning_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100); - if($warning_level > 100) - { - $warning_level = 100; - } - $user['view']['warninglevel'] = get_colored_warning_level($warning_level); - } - - if($user['avatar'] && !my_validate_url($user['avatar'])) - { - $user['avatar'] = "../{$user['avatar']}"; - } - if($view['view_type'] == "card") - { - $scaled_avatar = fetch_scaled_avatar($user, 80, 80); - } - else - { - $scaled_avatar = fetch_scaled_avatar($user, 34, 34); - } - if(!$user['avatar'] || (my_strpos($user['avatar'], '://') !== false && !$mybb->settings['allowremoteavatars'])) - { - if(my_validate_url($mybb->settings['useravatar'])) - { - $user['avatar'] = str_replace('{theme}', 'images', $mybb->settings['useravatar']); - } - else - { - $user['avatar'] = "../".str_replace('{theme}', 'images', $mybb->settings['useravatar']); - } - } - $user['view']['avatar'] = "\"\""; - - // Convert IP's to readable - $user['regip'] = my_inet_ntop($db->unescape_binary($user['regip'])); - $user['lastip'] = my_inet_ntop($db->unescape_binary($user['lastip'])); - - if($view['view_type'] == "card") - { - $users .= build_user_view_card($user, $view, $i); - } - else - { - build_user_view_table($user, $view, $table); - } - } - - // If card view, we need to output the results - if($view['view_type'] == "card") - { - $table->construct_cell($users); - $table->construct_row(); - } - } - - if(!isset($view['table_id'])) - { - $view['table_id'] = "users_list"; - } - - $switch_view = "
"; - $switch_url = $view['url']; - if($mybb->input['page'] > 0) - { - $switch_url .= "&page=".$mybb->get_input('page', MyBB::INPUT_INT); - } - if($view['view_type'] != "card") - { - $switch_view .= "{$lang->table_view} | {$lang->card_view}"; - } - else - { - $switch_view .= "{$lang->table_view} | {$lang->card_view}"; - } - $switch_view .= "
"; - - // Do we need to construct the pagination? - if($num_results > $view['perpage']) - { - $view_type = htmlspecialchars_uni($view['view_type']); - $pagination = draw_admin_pagination($mybb->input['page'], $view['perpage'], $num_results, $view['url']."&type={$view_type}"); - $search_class = "float_right"; - $search_style = ""; - } - else - { - $search_class = ''; - $search_style = "text-align: right;"; - } - - $search_action = $view['url']; - // stop &username= in the query string - if($view_upos = strpos($search_action, '&username=')) - { - $search_action = substr($search_action, 0, $view_upos); - } - $search_action = str_replace("&", "&", $search_action); - $search = new Form(htmlspecialchars_uni($search_action), 'post', 'search_form', 0, '', true); - $built_view = $search->construct_return; - $built_view .= "
"; - $built_view .= $search->generate_hidden_field('action', 'search')."\n"; - if(isset($view['conditions']['username'])) - { - $default_class = ''; - $value = $view['conditions']['username']; - } - else - { - $default_class = "search_default"; - $value = $lang->search_for_user; - } - $built_view .= $search->generate_text_box('username', htmlspecialchars_uni($value), array('id' => 'search_keywords', 'class' => "{$default_class} field150 field_small"))."\n"; - $built_view .= "search}\" />\n"; - if($view['popup']) - { - $built_view .= "
{$view['popup']}
\n"; - } - $built_view .= "\n"; - $built_view .= "
\n"; - - // Autocompletion for usernames - // TODO Select2 - - $built_view .= $search->end(); - - if(isset($pagination)) - { - $built_view .= $pagination; - } - if($view['view_type'] != "card") - { - $checkbox = ''; - } - else - { - $checkbox = " "; - } - $built_view .= $table->construct_html("{$switch_view}
{$checkbox}{$lang->users}{$view_title}
", 1, "", $view['table_id']); - if(isset($pagination)) - { - $built_view .= $pagination; - } - - $built_view .= ' - -
- - -
'.$lang->inline_edit.' - -  - -
-
-
-'; - - return $built_view; -} - -/** - * @param array $user - * @param array $view - * @param int $i - * - * @return string - */ -function build_user_view_card($user, $view, &$i) -{ - global $user_view_fields; - - ++$i; - if($i == 3) - { - $i = 1; - } - - // Loop through fields user wants to show - foreach($view['fields'] as $field) - { - if(!$user_view_fields[$field]) - { - continue; - } - - $view_field = $user_view_fields[$field]; - - // Special conditions for avatar - if($field == "avatar") - { - $avatar = $user['view']['avatar']; - } - else if($field == "controls") - { - $controls = $user['view']['controls']; - } - // Otherwise, just user data - else if($field != "username") - { - if(isset($user['view'][$field])) - { - $value = $user['view'][$field]; - } - else - { - $value = $user[$field]; - } - - if($field == "postnum") - { - $value = my_number_format($value); - } - - $user_details[] = "{$view_field['title']}: {$value}"; - } - - } - // Floated to the left or right? - if($i == 1) - { - $float = "left"; - } - else - { - $float = "right"; - } - - // And build the final card - $card = "
\n"; - $card .= " {$user['view']['username']}\n"; - if($avatar) - { - $card .= "
{$avatar}
\n"; - } - if($user_details) - { - $card .= "
".implode("
", $user_details)."
\n"; - } - if($controls) - { - $card .= "
{$controls}
\n"; - } - $card .= "
"; - return $card; - -} - -/** - * @param array $user - * @param array $view - * @param DefaultTable $table - */ -function build_user_view_table($user, $view, &$table) -{ - global $user_view_fields; - - foreach($view['fields'] as $field) - { - if(!$user_view_fields[$field]) - { - continue; - } - $view_field = $user_view_fields[$field]; - $field_options = array(); - if($view_field['align']) - { - $field_options['class'] = "align_".$view_field['align']; - } - if($user['view'][$field]) - { - $value = $user['view'][$field]; - } - else - { - $value = $user[$field]; - } - - if($field == "postnum") - { - $value = my_number_format($user[$field]); - } - $table->construct_cell($value, $field_options); - } - - $table->construct_cell(""); - - $table->construct_row(); -} - -/** - * @param array $user - * @param int $max_width - * @param int $max_height - * - * @return array - */ -function fetch_scaled_avatar($user, $max_width=80, $max_height=80) -{ - $scaled_dimensions = array( - "width" => $max_width, - "height" => $max_height, - ); - - global $mybb; - - if($user['avatar'] && (my_strpos($user['avatar'], '://') === false || $mybb->settings['allowremoteavatars'])) - { - if($user['avatardimensions']) - { - require_once MYBB_ROOT."inc/functions_image.php"; - list($width, $height) = explode("|", $user['avatardimensions']); - $scaled_dimensions = scale_image($width, $height, $max_width, $max_height); - } - } - - return array("width" => $scaled_dimensions['width'], "height" => $scaled_dimensions['height']); -} - -/** - * @param array $fields - * @param array $values - * @param DefaultFormContainer $form_container - * @param DefaultForm $form - * @param bool $search - */ -function output_custom_profile_fields($fields, $values, &$form_container, &$form, $search=false) -{ - global $lang; - - if(!is_array($fields)) - { - return; - } - foreach($fields as $profile_field) - { - $profile_field['name'] = htmlspecialchars_uni($profile_field['name']); - $profile_field['description'] = htmlspecialchars_uni($profile_field['description']); - list($type, $options) = explode("\n", $profile_field['type'], 2); - $type = trim($type); - $field_name = "fid{$profile_field['fid']}"; - - switch($type) - { - case "multiselect": - if(!is_array($values[$field_name])) - { - $user_options = explode("\n", $values[$field_name]); - } - else - { - $user_options = $values[$field_name]; - } - - $selected_options = array(); - foreach($user_options as $val) - { - $selected_options[$val] = htmlspecialchars_uni($val); - } - - $select_options = explode("\n", $options); - $options = array(); - if($search == true) - { - $select_options[''] = $lang->na; - } - - foreach($select_options as $val) - { - $val = htmlspecialchars_uni(trim($val)); - $options[$val] = $val; - } - if(!$profile_field['length']) - { - $profile_field['length'] = 3; - } - $code = $form->generate_select_box("profile_fields[{$field_name}][]", $options, $selected_options, array('id' => "profile_field_{$field_name}", 'multiple' => true, 'size' => $profile_field['length'])); - break; - case "select": - $select_options = array(); - if($search == true) - { - $select_options[''] = $lang->na; - } - $select_options += explode("\n", $options); - $options = array(); - foreach($select_options as $val) - { - $val = htmlspecialchars_uni(trim($val)); - $options[$val] = $val; - } - if(!$profile_field['length']) - { - $profile_field['length'] = 1; - } - if($search == true) - { - $code = $form->generate_select_box("profile_fields[{$field_name}][{$field_name}]", $options, htmlspecialchars_uni($values[$field_name]), array('id' => "profile_field_{$field_name}", 'size' => $profile_field['length'])); - } - else - { - $code = $form->generate_select_box("profile_fields[{$field_name}]", $options, htmlspecialchars_uni($values[$field_name]), array('id' => "profile_field_{$field_name}", 'size' => $profile_field['length'])); - } - break; - case "radio": - $radio_options = array(); - if($search == true) - { - $radio_options[''] = $lang->na; - } - $radio_options += explode("\n", $options); - $code = ''; - foreach($radio_options as $val) - { - $val = trim($val); - $code .= $form->generate_radio_button("profile_fields[{$field_name}]", $val, htmlspecialchars_uni($val), array('id' => "profile_field_{$field_name}", 'checked' => ($val == $values[$field_name] ? true : false)))."
"; - } - break; - case "checkbox": - if(!is_array($values[$field_name])) - { - $user_options = explode("\n", $values[$field_name]); - } - else - { - $user_options = $values[$field_name]; - } - foreach($user_options as $val) - { - $selected_options[$val] = $val; - } - $select_options = array(); - if($search == true) - { - $select_options[''] = $lang->na; - } - $select_options += explode("\n", $options); - $code = ''; - foreach($select_options as $val) - { - $val = trim($val); - $code .= $form->generate_check_box("profile_fields[{$field_name}][]", $val, htmlspecialchars_uni($val), array('id' => "profile_field_{$field_name}", 'checked' => ($val == $selected_options[$val] ? true : false)))."
"; - } - break; - case "textarea": - $extra = ''; - if(isset($mybb->input['action']) && $mybb->input['action'] == "search") - { - $extra = " {$lang->or} ".$form->generate_check_box("profile_fields[{$field_name}_blank]", 1, $lang->is_not_blank, array('id' => "{$field_name}_blank", 'checked' => $values[$field_name.'_blank'])); - } - - $code = $form->generate_text_area("profile_fields[{$field_name}]", $values[$field_name], array('id' => "profile_field_{$field_name}", 'rows' => 6, 'cols' => 50)).$extra; - break; - default: - $extra = ''; - if(isset($mybb->input['action']) && $mybb->input['action'] == "search") - { - $extra = " {$lang->or} ".$form->generate_check_box("profile_fields[{$field_name}_blank]", 1, $lang->is_not_blank, array('id' => "{$field_name}_blank", 'checked' => $values[$field_name.'_blank'])); - } - - $code = $form->generate_text_box("profile_fields[{$field_name}]", $values[$field_name], array('id' => "profile_field_{$field_name}", 'maxlength' => $profile_field['maxlength'], 'length' => $profile_field['length'])).$extra; - break; - } - - $form_container->output_row($profile_field['name'], $profile_field['description'], $code, "", array('id' => "profile_field_{$field_name}")); - $code = $user_options = $selected_options = $radio_options = $val = $options = ''; - } -} - -/** - * @param array $input - * @param DefaultForm $form - */ -function user_search_conditions($input=array(), &$form) -{ - global $mybb, $db, $lang; - - if(!$input) - { - $input = $mybb->input; - } - - if(!is_array($input['conditions'])) - { - $input['conditions'] = my_unserialize($input['conditions']); - } - - if(!is_array($input['profile_fields'])) - { - $input['profile_fields'] = my_unserialize($input['profile_fields']); - } - - if(!is_array($input['fields'])) - { - $input['fields'] = my_unserialize($input['fields']); - } - - $form_container = new FormContainer($lang->find_users_where); - $form_container->output_row($lang->username_contains, "", $form->generate_text_box('conditions[username]', htmlspecialchars_uni($input['conditions']['username']), array('id' => 'username')), 'username'); - $form_container->output_row($lang->email_address_contains, "", $form->generate_text_box('conditions[email]', $input['conditions']['email'], array('id' => 'email')), 'email'); - - $options = array(); - $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); - } - - $form_container->output_row($lang->is_member_of_groups, $lang->additional_user_groups_desc, $form->generate_select_box('conditions[usergroup][]', $options, $input['conditions']['usergroup'], array('id' => 'usergroups', 'multiple' => true, 'size' => 5)), 'usergroups'); - - $form_container->output_row($lang->website_contains, "", $form->generate_text_box('conditions[website]', $input['conditions']['website'], array('id' => 'website'))." {$lang->or} ".$form->generate_check_box('conditions[website_blank]', 1, $lang->is_not_blank, array('id' => 'website_blank', 'checked' => $input['conditions']['website_blank'])), 'website'); - $form_container->output_row($lang->icq_number_contains, "", $form->generate_text_box('conditions[icq]', $input['conditions']['icq'], array('id' => 'icq'))." {$lang->or} ".$form->generate_check_box('conditions[icq_blank]', 1, $lang->is_not_blank, array('id' => 'icq_blank', 'checked' => $input['conditions']['icq_blank'])), 'icq'); - $form_container->output_row($lang->aim_handle_contains, "", $form->generate_text_box('conditions[aim]', $input['conditions']['aim'], array('id' => 'aim'))." {$lang->or} ".$form->generate_check_box('conditions[aim_blank]', 1, $lang->is_not_blank, array('id' => 'aim_blank', 'checked' => $input['conditions']['aim_blank'])), 'aim'); - $form_container->output_row($lang->yahoo_contains, "", $form->generate_text_box('conditions[yahoo]', $input['conditions']['yahoo'], array('id' => 'yahoo'))." {$lang->or} ".$form->generate_check_box('conditions[yahoo_blank]', 1, $lang->is_not_blank, array('id' => 'yahoo_blank', 'checked' => $input['conditions']['yahoo_blank'])), 'yahoo'); - $form_container->output_row($lang->skype_contains, "", $form->generate_text_box('conditions[skype]', $input['conditions']['skype'], array('id' => 'skype'))." {$lang->or} ".$form->generate_check_box('conditions[skype_blank]', 1, $lang->is_not_blank, array('id' => 'skype_blank', 'checked' => $input['conditions']['skype_blank'])), 'skype'); - $form_container->output_row($lang->google_contains, "", $form->generate_text_box('conditions[google]', $input['conditions']['google'], array('id' => 'google'))." {$lang->or} ".$form->generate_check_box('conditions[google_blank]', 1, $lang->is_not_blank, array('id' => 'google_blank', 'checked' => $input['conditions']['google_blank'])), 'google'); - $form_container->output_row($lang->signature_contains, "", $form->generate_text_box('conditions[signature]', $input['conditions']['signature'], array('id' => 'signature'))." {$lang->or} ".$form->generate_check_box('conditions[signature_blank]', 1, $lang->is_not_blank, array('id' => 'signature_blank', 'checked' => $input['conditions']['signature_blank'])), 'signature'); - $form_container->output_row($lang->user_title_contains, "", $form->generate_text_box('conditions[usertitle]', $input['conditions']['usertitle'], array('id' => 'usertitle'))." {$lang->or} ".$form->generate_check_box('conditions[usertitle_blank]', 1, $lang->is_not_blank, array('id' => 'usertitle_blank', 'checked' => $input['conditions']['usertitle_blank'])), 'usertitle'); - $greater_options = array( - "greater_than" => $lang->greater_than, - "is_exactly" => $lang->is_exactly, - "less_than" => $lang->less_than - ); - $form_container->output_row($lang->post_count_is, "", $form->generate_select_box('conditions[postnum_dir]', $greater_options, $input['conditions']['postnum_dir'], array('id' => 'numposts_dir'))." ".$form->generate_text_box('conditions[postnum]', $input['conditions']['postnum'], array('id' => 'numposts')), 'numposts'); - $form_container->output_row($lang->thread_count_is, "", $form->generate_select_box('conditions[threadnum_dir]', $greater_options, $input['conditions']['threadnum_dir'], array('id' => 'numthreads_dir'))." ".$form->generate_text_box('conditions[threadnum]', $input['conditions']['threadnum'], array('id' => 'numthreads')), 'numthreads'); - - $form_container->output_row($lang->reg_in_x_days, '', $form->generate_text_box('conditions[regdate]', $input['conditions']['regdate'], array('id' => 'regdate')).' '.$lang->days, 'regdate'); - $form_container->output_row($lang->reg_ip_matches, $lang->wildcard, $form->generate_text_box('conditions[regip]', $input['conditions']['regip'], array('id' => 'regip')), 'regip'); - $form_container->output_row($lang->last_known_ip, $lang->wildcard, $form->generate_text_box('conditions[lastip]', $input['conditions']['lastip'], array('id' => 'lastip')), 'lastip'); - $form_container->output_row($lang->posted_with_ip, $lang->wildcard, $form->generate_text_box('conditions[postip]', $input['conditions']['postip'], array('id' => 'postip')), 'postip'); - - $form_container->end(); - - // Custom profile fields go here - $form_container = new FormContainer($lang->custom_profile_fields_match); - - // Fetch custom profile fields - $query = $db->simple_select("profilefields", "*", "", array('order_by' => 'disporder')); - - $profile_fields = array(); - while($profile_field = $db->fetch_array($query)) - { - if($profile_field['required'] == 1) - { - $profile_fields['required'][] = $profile_field; - } - else - { - $profile_fields['optional'][] = $profile_field; - } - } - - output_custom_profile_fields($profile_fields['required'], $input['profile_fields'], $form_container, $form, true); - output_custom_profile_fields($profile_fields['optional'], $input['profile_fields'], $form_container, $form, true); - - $form_container->end(); - - // Autocompletion for usernames - echo ' - - -'; -} - -/** - * @param int $source_uid - * @param int $destination_uid - */ -function merge_thread_ratings($source_uid, $destination_uid) -{ - global $db; - - $source_ratings = $dest_threads = $delete_list = $decrement_list = array(); - - // Get all thread ratings from both accounts - $query = $db->simple_select('threadratings', 'tid, uid, rid, rating', "uid IN ({$destination_uid}, {$source_uid})"); - while($rating = $db->fetch_array($query)) - { - if($rating['uid'] == $destination_uid) - { - $dest_threads[] = $rating['tid']; - } - else - { - $source_ratings[] = $rating; - } - } - - // If there are duplicates, mark them for deletion - foreach($source_ratings as $rating) - { - if(in_array($rating['tid'], $dest_threads)) - { - $delete_list[] = $rating['rid']; - $decrement_list[$rating['tid']][] = (int) $rating['rating']; - } - } - - // Attribute all of the source user's ratings to the destination user - $db->update_query("threadratings", array("uid" => $destination_uid), "uid='{$source_uid}'"); - - // Remove ratings previously given to recently acquired threads - $query = $db->query(" - SELECT tr.rid, tr.rating, t.tid - FROM {$db->table_prefix}threadratings tr - LEFT JOIN {$db->table_prefix}threads t ON (t.tid=tr.tid) - WHERE tr.uid='{$destination_uid}' AND tr.uid=t.uid - "); - while($rating = $db->fetch_array($query)) - { - $delete_list[] = $rating['rid']; - $decrement_list[$rating['tid']][] = (int) $rating['rating']; - } - - // Delete the duplicate/disallowed ratings - if(!empty($delete_list)) - { - $imp = implode(',', $delete_list); - $db->delete_query('threadratings', "rid IN ({$imp})"); - } - - // Correct the thread rating counters - if(!empty($decrement_list)) - { - foreach($decrement_list as $tid => $ratings) - { - $db->update_query('threads', array('numratings' => 'numratings-'.count($ratings), 'totalratings' => 'totalratings-'.array_sum($ratings)), "tid='{$tid}'", 1, true); - } - } -} diff --git a/html/forums/admin/styles/default/config.css b/html/forums/admin/styles/default/config.css deleted file mode 100644 index 421013c..0000000 --- a/html/forums/admin/styles/default/config.css +++ /dev/null @@ -1,77 +0,0 @@ -/* language editor issue icons */ -.langeditor_ok { - width: 16px; - height: 16px; - display: inline-block; - margin: 1px; - background: url(images/icons/tick.png) no-repeat; -} - -.langeditor_nothingtocompare { - width: 16px; - height: 16px; - display: inline-block; - margin: 1px; - background: url(images/icons/no_change.png) no-repeat; -} - -.langeditor_warning { - width: 16px; - height: 16px; - display: inline-block; - margin: 1px; - background: url(images/icons/warning.png) no-repeat; -} - -/* language editor file list rows */ -.langeditor_editwithfile, -.langeditor_phrases, -.langeditor_editfile, -.langeditor_issues, -.langeditor_edit { - font-weight: bold; - text-align: center; -} - -.langeditor_editwithfile, -.langeditor_editfile { - text-align: left; -} - -.langeditor_edit, -.langeditor_phrases { - font-weight: normal; -} - -/* language editor edit mode textareas */ -.langeditor_textarea_issue { - border: 1px solid red; -} - -.langeditor_textarea_editwith { - background: #E0E0E0; -} -.langeditor_textarea_edit, -.langeditor_textarea_editwith { - width: 98%; - padding: 4px; -} - -/* language editor main page */ -.langeditor_info_name { - font-weight: bold; -} - -.langeditor_info_author { - font-size: x-small; -} - -.langeditor_rtl { - direction: rtl; - unicode-bidi: bidi-override; -} - -.langeditor_ltr { - direction: ltr; - unicode-bidi: bidi-override; -} diff --git a/html/forums/admin/styles/default/forum.css b/html/forums/admin/styles/default/forum.css deleted file mode 100644 index 38d2c3f..0000000 --- a/html/forums/admin/styles/default/forum.css +++ /dev/null @@ -1,76 +0,0 @@ -/* Moderation Queue */ -.modqueue_message { - overflow: auto; - max-height: 250px; -} - -.modqueue_controls { - width: 270px; - float: right; - text-align: center; - border: 1px solid #ccc; - background: #fff; - padding: 6px; - font-weight: bold; -} - -.modqueue_controls label { - margin-right: 8px; -} - -.label_radio_ignore, .label_radio_delete, .label_radio_approve { - font-weight: bold; -} - -.modqueue_meta { - color: #444; - font-size: 95%; - margin-bottom: 8px; -} - -.modqueue_mass { - list-style: none; - margin: 0; - width: 150px; - padding: 0; -} - -.modqueue_mass li { - margin-bottom: 4px; - padding: 0; -} - -.modqueue_mass li a { - display: block; - padding: 4px; - border: 1px solid transparent; -} - -.modqueue_mass li a:hover { - background: #efefef; - border: 1px solid #ccc; - text-decoration: none; -} - -.forum_settings_bit { - margin-bottom: 8px; -} - -.forum_settings_bit input { - vertical-align: middle; - margin-right: 8px; -} - -.forum_settings_bit select, -.forum_settings_bit input.text_input, -.forum_settings_bit textarea { - margin-top: 8px; -} - -.forum_settings_bit label { - font-weight: normal; -} - -.forum_settings_bit small { - padding-left: 25px; -} \ No newline at end of file diff --git a/html/forums/admin/styles/default/home.css b/html/forums/admin/styles/default/home.css deleted file mode 100644 index e84dc60..0000000 --- a/html/forums/admin/styles/default/home.css +++ /dev/null @@ -1,15 +0,0 @@ -#left_menu div.left_menu_box ul.online_admins li a { - background: url('images/icons/user.png') no-repeat 15px 4px; - padding-left: 37px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -#left_menu div.left_menu_box ul.online_admins li.mobile_user a { - background: url('images/icons/mobile_user.png') no-repeat 15px 4px; - padding-left: 37px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} \ No newline at end of file diff --git a/html/forums/admin/styles/default/images/close.png b/html/forums/admin/styles/default/images/close.png deleted file mode 100644 index 6ca5558f30408653ee50348fb5f3b851f6865807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmV+z1n2vSP)&&;+9HW$4(qgat`zheJgS`pks1v z)j4rUyY6cu6I6Cml0DFAuf=+)uAgoHXUOf{KalV97B*RWB3j8uRjO|i#ZMuj% zoUSdng}Y-#&xx*?KC2T{qw~k0$g^A13lIx4YZJCvQ%86D`nt%;KqS49TPWN8;NQ9K zA33b^T4at-8* zJ}#-z&;+9-$X7p>R9TJMW|>Ztt7&1y2=pkSmJT9-}z z@;Q;ET1q>Q>Q#;IwqPXEhsH1OV?0`_WhWY%6^=b}iSD4)srGY`Pgij%HD=ezdxi3e zZ>(4AUK`WP92C*FuoF|z1^Mb?lwV0+vPS5uo8#Cw@7^Ci6N)eVuK%*{vhQ^tH;3}) zkB6SdKFmR1W~wWx9s^{cIR@zFSa;&eu@}DhM5@TQUtWF9a1}d=4q#U0W1yZP#2}Ns z^yRYFSPtQe;jQT7Qhh1Wcw*z(`u1>CI!b*3+x1vv=4K!;~x( zq7lt0000%-h$kf*NbO;SC&1@=+oR+d+dYHZT z!N(sHE}0yimfE;1bAblej&sUnb;IL@ z22DDrcU(Px&ryIyJT!EpiszE0y?5RxoD>ys@-hCsaN+57AL^ez4PZ`GW1bndtMN0? Op$wj`elF{r5}E*27g)0Z diff --git a/html/forums/admin/styles/default/images/icons/bullet_on.png b/html/forums/admin/styles/default/images/icons/bullet_on.png deleted file mode 100644 index 6a97d238ce8a889b1aa334eaabf8246ceacc62e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`TRmMILn;{G3T+iUY+!JD#wr72 zW8>tvm$ojyXml`k-?iE=GZoHkTasSKt#q$s|5Zm7Ax)RXfnwc9%~(3^ZZm2=FWT9h zD3LHrO?}4MH2x#@ryUgp5_YXSoVE4P#f+A{as0<08w&i_VYi!~zd1r@#|ft3l~-O) zJDuwHXS2+X7`+9XVt{{8ZsWuw`KLc%(Y3! k*fkJnW!(e0Ke956Q(E^KOX*hE13kdt>FVdQ&MBb@04z0JssI20 diff --git a/html/forums/admin/styles/default/images/icons/cross.png b/html/forums/admin/styles/default/images/icons/cross.png deleted file mode 100644 index ba0bce78b02706c738b39d845115041448d5e752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=38P)kdh48AmctB=n`vMMFWUd6nN*n z6DJoO7s2f(LTIX>@Kgvj7&x`U fpXB-6sFE82zTp!z>hC`j00000NkvXXu0mjfirlP< diff --git a/html/forums/admin/styles/default/images/icons/custom.png b/html/forums/admin/styles/default/images/icons/custom.png deleted file mode 100644 index 8f49806eacc954ca219bcc9618bcf97fa0cd908d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf{{Wv5*Z=?jhk!vqKtNz%Advj^ z>(|$>U%kD(%gV}Ly?T|HnCRo<^X%DEcX#&(4<4L8ed_7cCtJ2`dGh4RojZ5z?d^ku zgD+mZaN)xFd-v`>di2o3!ot$ha^b=SSFT)Mwrr`6j*gL$(U~)+_wV0#{P?j;moDk* z>S=3hA31Vl_wL=7FJCh-Fj7@jRZ&ryJbB9b^H(-)+GA{NCMzpzWMq8o*qOb158u4` zXzl3J3@sJ9e3qlarg9o1LBg z`t|3RFFyi$5e`^cS%KnkE}S7*HmeuN2`vfo3udrPx5||M|KEDT|Elc&xxkRQ{r|sA z9gzNSUwr5P^{HhbW_u-&XmYK&|NnfgLJvr!35Xy3_gwOSV(WjecBTLSS;V!C<2!XF zn0UmbYLw-AfEHAFx;TbZFy@|X7i=~VX-+iv)SoUmqsj2Z)-z{#cn-+C%zOFg3;zb$ zJN~jY9RGL?7ryb>*f`N-W1QB8?aGmkdsS8*P}p~ALSsl?>{MlK1IBZVoua3B4f-4^ zCnhq+Csz92E}m_`ocr=XOoEk1?#o;9%Xz|tG&dI;d}ol`%Dv>%#;M1%e?EHjAT#Ssl=sKm zS099X+(}D47V7vi()U_o)V=`oyJ@NCV*>a4n_o?e+UIY6J|V!luG;`brmc$y>mqNCu3Vt_`UugI)5%7WL)^Fqe&EK OD1)b~pUXO@geCw#gHq%G diff --git a/html/forums/admin/styles/default/images/icons/default.png b/html/forums/admin/styles/default/images/icons/default.png deleted file mode 100644 index 4f3e27d9cce04af0c06c584ff36660d244856c56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmV-30nGl1P)L08{{UBM-*_ zR&9#0GBMP-(9vXDQV^sN5qv@j32(*m8U>FExHSsb*5JBE z2INuzAp{=C0V{tAyuZ_(0@)joYyI0B1>n8U-hf=|OD3?^f?WIZ_{cbL&V7tzFM#y2 zyuEVpqFnY1vNF>DH#aXb0%=Yl<^{QmMExK?f2KG)0|3kW`64W~)jt3L002ovPDHLk FV1g62g^d6J diff --git a/html/forums/admin/styles/default/images/icons/delete.png b/html/forums/admin/styles/default/images/icons/delete.png deleted file mode 100644 index e07ffcff87e2c6010bbe8fa6ffb54dae610fdb01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)0Uw`zu_r|@qT{myM?6`H~W&5p?+MV*m2$=gs=udZ0v49v;vg7zpi)cJ~%f8y8S7sfOa1fn{0Pl{&^uS*{l! z6T!+BAamvXkf%YxR#RUeP7Ltj{3!e19tf%-M@Qo3PmOA5-G;_824j}zA>!Fo^6&1a-x{jw2ePC5uF68{O2@#HFRBtpfl= n4%@KngvsT%E4WLKCjI^fvHUJcab)XL00000NkvXXu0mjf-9{P< diff --git a/html/forums/admin/styles/default/images/icons/error.png b/html/forums/admin/styles/default/images/icons/error.png deleted file mode 100644 index c18dbc389791479a9c7cc8e2e2f761f33d0abab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ*P)}xt)ZahLJz;`rA3a){ zMvj!?UcKbg$Cx$Ss8Qk?Inq4h=a)r|HrS2*6?X1?hkq;W(?`hd?%lNkVqLEqI8bi2 zZheOuZLnRbBXt7@8d*Jh2qEWNx0Z(wABw}_kliscvNJML$llmkx!9tGL5()pjFZOS zts7ms$kq1kStLy%-UpIZ7CR!-Npd9 z1b7C|pFd};>ttU*z#VF|!6IDAaxbr}ocMUN7^^78&`m%wVO&gD4+}Gwd3t71qYcO$ zJdUN_-WBL|B9|YwV5v z(No6f4dOtXM5X%nQ)=!MrB0;dqzPlz*uzXa5KqmQ2A&`o#Dc`%5XV_+sC@?=%mrU= S<3L^j0000*?j2&Sd1n}BA+qP}nwu9PkP}>O3wr$(CZ6n(Lzw^Uh@>|Z#=~-J_Q`p$p zr~^mfvwK!Y&-XI8WeW=n4p(55Cm3!qq z?W4<;|3VXgpd8r&EiEng^qRp~G=Qh5Wi%P($PTEgs@}?Poyy+}qwh+rvS+Rg<;V`m z%gg)ZHVh@cAlCsKuUS3{mlCqML5}UHJ^1ZmY1dLxm=-rQheqke% z^QChuTkT`h3uXR+AyNGN0xu{iCQTUc1VEiJ9ZI5;>zLx|^K9N*r*&B)!|`+HMUA0{d){ujzpBw-wTf3*AE z-P4$wnwCG5wMm2c(AOCn8X9eCYUV0r$trsTigA|Cv*O-ow(}}HHUua874IJIL@x=-n-8u0G zoa?M|$E~GKn3$|j{0^S*HKrm|T^D77d(Zh|;`uacr+6JGOc7Y6!C~@zQZ)hjdn;^A1NRoG*6d#l)iH;2a}W@Hw6*DPG+@e^q{5SAE|< zmv{uH=bG$;b5GMvF!3^l6``B>7x2Q@a6OLf9wcb@y~r}h_Y$-QT^^8Q=>l6k zJUq;_)!i7ZdETf0NUG`;+Hr>#yn_}i+C+;L>%XgObawoU)iy~rk_Aamg)>ZXLqh{5 zCLgF(dtjw<7fcy%Oa)pXeH<;6BlEvxftzMp!!x_^LS|iJt&AtF|H=jB(+VcZ+YX&k zpbR%ABb{|QNOg4?D6Fi5W3w%Q=1o#(alLfWJg1@GtF{;G#6MuxCHAiC!xp&>11!#U z*XfgPmH@EyvrGb-EhO3~^$9l3c!|jeD&aRsU8czg=2;EcIPEDW_uy;L>jVwy<4y(C zDbIAo5)_R%q62sB+9d@HBbMN3>XcU+ecU;p+;M1%@4UL&zN4UZTmIAw zU8QT17TlbgwkR}gy2qiL2MSlkWh@DI@3Sdd9UnQ<%e+~?Wm{g!>IAO|ww5ghrE3zc zS`9Cze|iiwjj<%iFPOpM*^M+H$Ia8lF{FZVEx$9<0fvm7Y5)GO-u&*S)+dGu58fMd z|EUQz`|)ef#N+DmVbM$Ml&kkOW|&`{D{9LhUEO1I*Y@+X{E4cQ=0z~>vt?W|_tF$e Ppot8gu6{1-oD!M - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/styles/default/images/icons/logout.png b/html/forums/admin/styles/default/images/icons/logout.png deleted file mode 100644 index 2f86a302d32ca53e3ceccdd795c14eef92dddca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmV-m0iXVfP){P36mWrsfhFWC3-f7cnm;Xntd-xxu4u~-g5YOB)Q!Hci8EjZ})0h7S+rRz?v4QGhND4&$xRqzbcm4kl zq6Okt#gH5eoS_TOfH1pbCH`mx0%jl<1Y%_%HUwg05N5V6UdC*kTmoe40kJF)a|1CW yHUpS|m=lPFfLIcUrO>cA5c2~u8_0mclbHbBZbn?p7Dd2e3J~9A_b1IG8+si>NII2h@|}Xj*f-mw*1cCgJoAYtuw4Xb4Ir5J#Mip>n&Txph59tSQmt#IyCKjqFej5 zr{od&Ak`q%rTc7dRb=Re53rVeQRL@R?Mtq|mUL=6j$1ViA{mCE%+75}&)y5TUgA>a z8=xTM7v+PfG9|e361sGnOlDRCH2Y2vCJAX-jp)&LA(vkoRC*ftx>Tg#;?syOU8mxv z7or)>nqd%#Fpder5GTEew%ulO?&1azkpdGC`fKREphMRw*iJsa+G|OPW=(Agl)zJy zUJy{}Tl5{ig7maBzD!+xJ$X_ka%=t}Qp)@KEbu>h3w17epyfy?+A2!mTJ>!W%>47hHP=H)wfl(Mn1GH|f5F>rBkz%e%`Cj%EdI|B!h z%>k6xkBm&e3DJWv;P2nRN~>nhWDs;Ihlv33S1?8gR~bT0SQysN0+2D0@J=L*P`v7AV`G z{aqEPs}&HGJ)k{Epzp7sm0p5F1;a3SD>&M_)?0x&+yMhATR7NBpwG+x2Jp{^PAw(I zfievOV5S9z@1MDV`ow_T&mfaP27owg7A#nhz;I6B0m01t_30C+o<9I`U%PB{ICZZ8 O0000!VaUKEO z&_oQNtUE&B-2MIYL;PgU6Tl4(UZn&4CbjPTW{v#<58qm)(Y^256s`9V(B1D^^u{uc z;30!-@c_!}iI4 z|2{wU-#7WPLNMJ@kHP?*{NqVkSy_Ni{Pw^A-BgPtWKK)_C8L8be)agpZ{^R+_|YZ# zprV1p-<&BdEG!!w`s!3PfXoG1e?kXc3=HLmY`DbFeW=CHf2P7MdMm@0e)-8({Q5L_ z@Zg<*E&ugd(0;)~23d5_#XwDgZUVh?M-6WJuk{?YI$-10000{P36mWrsfhFWC3-f7cnm;Xntd-xxu4u~-g5YOB)Q!Hci8EjZ})0h7S+rRz?v4QGhND4&$xRqzbcm4kl zq6Okt#gH5eoS_TOfH1pbCH`mx0%jl<1Y%_%HUwg05N5V6UdC*kTmoe40kJF)a|1CW yHUpS|m=lPFfLIcUrO>cA5c2~u8_0mclbHbBZAk$%h zk&%(1wzl>PpmC~3h!_Zf6Zhcm+F%t?;Uo49M~m02c6Y!R<$_K#mGnTU*2Z{XJGzR@ib3;#mT?1&oc2A*v;xX$71)s?EHG z@$qp)wW$FwFE0w8@Y2!}5AIJ(oP1OO-?}YIb ZAcp7LB%OJ5{nS84d%F6$taD0e0suAID+2%k diff --git a/html/forums/admin/styles/default/images/icons/run_task.png b/html/forums/admin/styles/default/images/icons/run_task.png deleted file mode 100644 index 3262eaebe1b1e416b7d11473b547731dbbcac233..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)!pv8Qe&A1gxO8!5x)L`R=Q`l=XpAyJyDKizZByLUbqxY;EiZD55~Jf z+OlPfH2^d0aD!VoaA{RP+PZZ@>F5h5SF>a?vEI+mDy>yR`=X;o*$E&TLMB z1DEjfL5Le}I$esrT(@proC4JihWHQ<>Lqn)Qu*W*{l$FvLi>O+r2l^uFCtifC6B9rb)MW@^!LPV5VrefBt zS?6WWoOwiLqSn)imhU0DbdcyZK#du8Ir|>6A#~ZJ&MleDQLZtvTb; zoV|RRV{X~CINMJ1cDAkeslD~id+Jxe?|bkX{6~%&C{P2=Y;JCvo<4nw+1c4O(Vv$D zd;TLw4Yj`ua2-2#%Gf&T70|tYE+$i?H4^WpNM3|eK$M*I%CMITSlHp)a)AaNVHa0e;ZBh-G ze)HyyFpi5oD1-QU25;ZK#pL893WWlsM=pVzwB&R;vA3szPN#>-WdCIbx!P z3>MHMc^!Z&08(m+6SxMz$7268PY=C(%gf)FG9@?WKfqn=0_cqZc8vbd&>N0K00000 LNkvXXu0mjf%@XeR diff --git a/html/forums/admin/styles/default/images/icons/success.png b/html/forums/admin/styles/default/images/icons/success.png deleted file mode 100644 index 0402a486bf836fb226435a2c8ccd54f5b694944f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmV-g0;Tzmcrg;%-yZ-pc6vM*THNdje&^ald3iZ-&f(3QH=vwo0Zngp)5tLb2izlv zBuuSud$%7{RaJrCrS>46X$r#0CQw{ltOs7dehtEjCLo+{0=`$;)stfc_P9k3jGa_} zCg(C_Wo5yK4Ptct9=nU_C|CI5wMm&+W%*SFV8)mtR&9S`7=37P*G}rg&jIs8J7deds omWVUrfqa}40W1zx%LLL30Pv6;axz*9SO5S307*qoM6N<$f}kKBdH?_b diff --git a/html/forums/admin/styles/default/images/icons/tick.png b/html/forums/admin/styles/default/images/icons/tick.png deleted file mode 100644 index be250ec9fcfb5b356b43874b7dbafaef2b93f7d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmVJVH9AcX;v7uw(5v^mrLD%YC&R&qD?(Qin97fX#D z!~Fr~8>(S}fpz#e&<9k4+Clxb2BX2NWTMg5+tnP!h9vO}nc*)Gue4IR-D^TXXCofX+Bc_ zc1+gjV@)KCQB}ie6?2`;@!RCi#I^fVe-n&RAHg`aE6$mSrqXH{AY;n)*7t%T^0U;= z9&0KC5E30pOLC*2unXD>8FC651ISJ?5GOGaHIWiQ*bM|kPV~eUG}#eUw-5u-5T)Os fnwgOepa=s1Bl9!aulF1400000NkvXXu0mjf(CzHi diff --git a/html/forums/admin/styles/default/images/icons/user.png b/html/forums/admin/styles/default/images/icons/user.png deleted file mode 100644 index dd82fa654f8f6bc36bee2a00cde2efe102874e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)!VaUKEO z&_oQNtUE&B-2MIYL;PgU6Tl4(UZn&4CbjPTW{v#<58qm)(Y^256s`9V(B1D^^u{uc z;30!-@c_!}iI4 z|2{wU-#7WPLNMJ@kHP?*{NqVkSy_Ni{Pw^A-BgPtWKK)_C8L8be)agpZ{^R+_|YZ# zprV1p-<&BdEG!!w`s!3PfXoG1e?kXc3=HLmY`DbFeW=CHf2P7MdMm@0e)-8({Q5L_ z@Zg<*E&ugd(0;)~23d5_#XwDgZUVh?M-6WJuk{?YI$-1000098(I~Kc#}}wAhCAdYUZBi~ZM1gnS^}tZ;!ct<8{mMOIt5m* zcoXY4suw8{M=~#;loH@K}OFn_^UD%O)kTGU<& z^;=Ggm`zNsfm+NW;HxYkr{6sVZmS9YKIQGrUpD$4AF?4o*mnj6_)H;?nsgeVuE5WG zLcZCH`rnbM5d3c(NV)->UXGx7b3S_W{2} zl#hs^g;pWN7GMHU45Wd2g5YI5_uZhk-Q-V^zsp5s<8bX87L~eJUAWXa@un^Au6uUa z8}C25ZrA18+fQ6RB72p3SKL1fq#T#E#Zexm(kc=LSx3^+nPe&dwwES^*-(4dg@v&KKVMt z^l8orPe(Vsm4Nf4x* zGTn7PI}%9X`*LuA=RrV-AT0@M*AgqB90^g5g z89T`4bUG_;Cu~H}-s`lQ}mOAUPw0-`whOgGWH@Bunp7VBAb~iL0KyzT4qyQJ!2 - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/styles/default/images/login_logo.png b/html/forums/admin/styles/default/images/login_logo.png deleted file mode 100644 index 04ac67692f2f2e23e8851a9cc082764f4aa6184a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5998 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 diff --git a/html/forums/admin/styles/default/images/spinner_big.gif b/html/forums/admin/styles/default/images/spinner_big.gif deleted file mode 100644 index 3bfd6e24d719c2ac85c3c84a2018f182537f9785..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6586 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 diff --git a/html/forums/admin/styles/default/images/submit_bg.png b/html/forums/admin/styles/default/images/submit_bg.png deleted file mode 100644 index 688062ed8500a285a94757945eb370beea6171bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!2~3ezCWG-r1U*q978G?b=uek84MYkE&gQl z+28V6!xA%jZogjnjyGlAC#Gp9UNdG>XuJ5o^B}{u%bw4=_B%%awK90R`njxgN@xNA DRY@Re diff --git a/html/forums/admin/styles/default/images/tcat.png b/html/forums/admin/styles/default/images/tcat.png deleted file mode 100644 index 1d07e08f691747d1cee9ff7bce8f770c349b78f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^Oh9bI0U{4C`Lhm4xp=xbhEy<44QOU$FyJ{|5b&=) zZ(HE*t165c$vx?O(PuB8WWQ|S{(a&yw{!dA*NW|SnYAKuYxB<+?bZ9M&;InXFYi3V Yv@R`C@qN0wG|)T-Pgg&ebxsLQ0BGbbBme*a diff --git a/html/forums/admin/styles/default/images/thead.png b/html/forums/admin/styles/default/images/thead.png deleted file mode 100644 index 648f582d775a857b6e41846b502f74eedc17de13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmV;g15o^lP)4Tx05}naRNrgUP!#^!Wu36$i#lf!2|j3%Ze&w*L!7p2SGvtw>Nd9_NSmf@ zT$;ut?S8Na*^6&F#dq-sKKTa>*@JI;k`2ZbVfd_wB24xov!0tYO(#d#()tZ$I5%3%!zLYh@BH>w}XODA7?mkV}ap}jU$$3 zG&Mk)3Bm`(LOM&hKscCb;PVaG&Vdx+MpZJHTQ(R_;DA31$+jOGBoLXk_De?ey1m!ik&_4G zH9n^))_*|$z4!HUisgBd@awc5jn(v9k~&t~+vLrrBg4dZQ9lDnLV}JQWGLW~LJVP= zW5lZXOcog;N~F?hbX0k=IMzETla}oqM|jC!4!B+x^;@#I_Tc-T-6hwKycLDTx1-om z?X`jFy0R0R8-I0SrK4`)H@W4T8*Qr#2vPou<*`U!Wy(*2QP*`g=8#jD{B;Y@GL-Hm zb`n?&x~%YC_$q7)PlXr4m%r4=&fcvN%Ybn#KC7Nn&Bp8{(oE9pWVpYI^+LuN`H(R~ zTAjWmO`M83^4d@fCkA(d>*nHIFV_d2yUbnT`nd?LE^;G|!WZ>Ld?E0@Grm4ww{M7H zr`x{MWb30bTI;*hk-DO>dX$gbC-yy#suLNqvA(f>RtPJ!qGM`Gvvf}Y10`)vm-7Xa z?-7Ixe2A_siI1ydSCCID3U8SVUY86>uSnT0use_K1GZDvUFKY)t}F* z)!pahe+zh{{06Bb3f8*zZG`{;08B|lK~#7FV&cg<11KpD4if-^AclF}f6F&c0DWYg zHh1&NLT=KNk|oT_ R9)AD;002ovPDHLkV1hYVz<>Y% diff --git a/html/forums/admin/styles/default/index.html b/html/forums/admin/styles/default/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/styles/default/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/admin/styles/default/login.css b/html/forums/admin/styles/default/login.css deleted file mode 100644 index 7ac5cdc..0000000 --- a/html/forums/admin/styles/default/login.css +++ /dev/null @@ -1,191 +0,0 @@ -/* MyBB Admin CP - * - * Login CSS - */ - -body { - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - font-size: 12px; - background: #fff; - color: #000000; - margin: 0; -} - -a { - color: #0072BC; - text-decoration: none; -} - -a:hover { - color: #0072BC; - text-decoration: underline; -} - -.invisible { - display: none; -} - -#container { - width: 410px; - margin: 100px auto; -} - -#logo h1 { - height: 82px; - background: transparent url(images/login_logo.png) bottom left no-repeat; - margin: 10px; - padding: 0; -} - -#header h1 a { - float: left; - height: 82px; - width: 410px; -} - -#content { - border: 1px solid #ccc; - background: #fff; - padding: 1px; - border-radius: 6px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; -} - -p, form { - padding: 0 10px 10px 10px; -} - -form { - padding-bottom: 0; -} - -p { - margin-bottom: 0; -} - -form p { - padding: 0 0 10px 0; -} - -h2 { - background: #02426c url(images/thead.png) repeat-x top left; - border-bottom: 1px solid #263c30; - color:#fff; - margin: 0; - padding: 8px; - font-size: 14px; - border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; -} - -input.text_input { - border: 1px solid #aaa; - width: 255px; - padding: 4px; - font-size: 13px; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - outline: 0; -} - -input.text_input:focus { - border: 1px solid #777; -} - -#message { - margin: 10px 10px 0 10px; - padding: 10px; - font-weight: bold; - background: #efefef; - border: 1px solid #ccc; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -#message.error { - border: 1px solid #FC6; - background: #FFC; - color: #C00; -} - -#message.success { - border: #080 1px solid; - background-color: #E8FCDC; - color: #080; -} - -form .label { - margin-bottom: 3px; - width: 112px; - clear: left; - float: left; - padding: 15px 0 0 8px; - border-top: 1px solid #ddd; -} - -form label { - font-weight: bold; -} - -.form_container .field { - float: left; - padding: 8px 0; - border-top: 1px solid #ddd; -} - -p.submit { - clear: both; - background: #efefef; - border-top: 1px solid #ddd; - padding: 8px 10px; - margin: 8px -10px 0; - text-align: right; - border-radius: 0 0 5px 5px; - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; -} - -p.submit input { - border: 1px solid #999; - padding: 4px 7px; - background: #e3e3e3 url(images/submit_bg.png) repeat-x top; - color: #444; - font-weight: bold; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - margin-right: 3px; - font-size: 1.1em; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -p.submit input:hover { - border: 1px solid #666; - cursor: pointer; -} - -.forgot_password { - float: left; - padding-top: 8px; - font-size: 11px; -} - -.forgot_password a { - color: #555; -} - -.alert { - padding: 5px 10px; - border: #FC6 1px solid; - background-color: #ffc; - color: #900; - font-style: normal; - font-weight: bold; - padding-left: 10px; - display: block; -} \ No newline at end of file diff --git a/html/forums/admin/styles/default/main.css b/html/forums/admin/styles/default/main.css deleted file mode 100644 index bc24b75..0000000 --- a/html/forums/admin/styles/default/main.css +++ /dev/null @@ -1,1262 +0,0 @@ -/* MyBB Admin CP - * - * Main CSS - */ - -body, td { - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - font-size: 12px; - color: #333; - margin: 0; - margin-bottom: 20px; -} - -body { - overflow-y: scroll; -} - -a { - color: #0072BC; - text-decoration: none; -} - -a:hover { - color: #0072BC; - text-decoration: underline; -} - -.invisible { - display: none; -} - -#container { - background: #fff; -} - -#logo { - background: url(images/logo.png) 15px 15px no-repeat; - border-bottom: 1px solid #263C30; - height: 90px; -} - -#logo h1 { - display: none; -} - -#welcome { - position: absolute; - right: 20px; - top: 60px; - color: #999; - height: 20px; - font-size: 90%; -} - -#welcome a, -#welcome a:link, -#welcome a:visited -{ - color: #666; - min-height: 16px; -} - -#welcome .logout { - margin-left: 4px; - padding: 0 18px 2px 0; - background: url(images/icons/logout.png) no-repeat top right; -} - -#welcome .forum { - margin-left: 4px; - padding: 1px 0 2px 20px; - background: url(images/icons/world.png) no-repeat top left; -} - -#welcome .username { - margin-left: 4px; - padding: 0 0 2px 18px; - background: url(images/icons/user.png) no-repeat top left; -} - -/* Menu */ - -#menu ul { - margin: 0; - padding: 5px 5px 0; - list-style: none; - background: #0F0F0F url(images/tcat.png) repeat-x; - border-top: 1px solid #444; - border-bottom: 1px solid #000; -} - -#menu li { - font-size: 12px; - display: inline-block; - margin: 0 8px 0 8px; - padding: 0; - list-style: none; -} - -#menu a { - font-weight: bold; - float: left; - padding: 7px; - text-decoration: none; - color: #ddd; -} - -#menu a:hover { - color: #fff; -} - -#menu li a.active { - padding: 7px 11px 10px; - margin-bottom: -5px; - background: #fff; - border-radius: 5px 5px 0 0; - color: #222; - font-size: 1.1em; -} - -#page { - clear: both; - background: #fff; -} - -/* Main Content */ - -#content { - padding: 10px 15px; - margin: 0; - margin-left: 200px; -} - -#content p { - line-height: 150%; -} - -#content h2 { - font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Sans-Serif; - font-size: 170%; - letter-spacing: -1px; - font-weight: bold; - color: #666; - margin: 0 0 5px 0; -} - -#content h3 { - border-bottom: 1px solid #ccc; - font-size: 16px; - margin: 10px 0 7px 0; -} - -#content h4 { - font-size: 14px; - margin: 10px 0 -10px 0; -} - -/* Left Menu */ - -#page { - background: #fff; -} - -#left_menu { - width: 200px; - color: #333; - padding: 0; - margin: 0; - float: left; - font-size: 11px; -} - -#left_menu div.left_menu_box { - background: #fff; - list-style: none; - margin: 10px 10px 30px 10px; - padding: 0; -} - -#left_menu div.left_menu_box div.title { - font-weight: bold; - border-bottom: 1px solid #ccc; - padding-bottom: 5px; - font-size: 1.1em; -} - -#left_menu div.left_menu_box ul.menu { - padding: 0; - margin: 0; - list-style: none; -} - -#left_menu div.left_menu_box ul.menu li a { - display: block; - padding: 6px; - border-bottom: 1px solid #ddd; -} - -#left_menu div.left_menu_box ul.menu li a:hover { - text-decoration: none; - background-color: #f5f5f5; -} - -#left_menu div.left_menu_box ul.menu li.active a { - font-weight: bold; - font-size: 120%; - color: #000; -} -/* Fix IE. Hide from IE Mac \*/ -* html #left_menu li a, * html #left_menu li { - height: 1%; -} -/* End */ - - -/* Tables */ - -.border_wrapper { - margin: 0; - padding: 1px; - margin-bottom: 14px; - border: 1px solid #ccc; - border-radius: 6px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; -} - -* html .border_wrapper { - height: 1px; -} - -.border_wrapper div.title { - background: #0066a2 url(images/thead.png) top left repeat-x; - color: #ffffff; - border-bottom: 1px solid #263c30; - padding: 8px; - font-weight: bold; - text-align: left; - font-size: 120%; - border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; -} - -.border_wrapper div.title a { - color: #fff; - text-decoration: none; -} - -.border_wrapper div.title a:hover { - text-decoration: underline; -} - -table.general { - width: 100%; -} - -table.general td { - border-top: 1px solid #fafafa; - border-bottom: 1px solid #ccc; - border-right: 1px solid #ccc; - border-left: 1px solid #fafafa; -} - -table.general tr td:last-child { - border-right: 0; -} - -table.general tr td:first-child { - border-left: 0; -} - -table.general tr:last-child td { - border-bottom: 0; -} - -table.bottom_cell_border td { - border-right: 0; - border-left: 0; -} - -table.general td { - background: #f5f5f5; - padding: 6px; -/* vertical-align: top; */ -} - -table.general th { - background: #0f0f0f url(images/tcat.png) repeat-x; - color: #fff; - border-top: 1px solid #444; - border-bottom: 1px solid #000; - padding: 8px; - font-size: 96%; - font-weight: bold; - text-align: left; -} - -table.general th a, table.general th { - color: #fff; - text-decoration: none; -} - -table.general .alt_row td { - background: #f1f1f1; -} - -table.general tr:last-child td:first-child { - border-bottom-left-radius: 5px; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; -} - -table.general tr:last-child td:last-child { - border-bottom-right-radius: 5px; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; -} - -.tfixed { - table-layout: fixed; - word-wrap: break-word; - width: 100%; -} - -/* Page Footer */ -#footer { - clear: both; - border-top: 1px solid #ccc; - background: #eee; - border-bottom: 1px solid #ccc; -} - -#footer p { - padding: 12px; - color: #666; - margin: 0; - font-size: 11px; -} - -#footer .generation { - float: right; -} - -#footer a:link, #footer a:visited { - color: #666666; - font-weight: bold; -} -#footer a:hover, #footer a:active { - color: #444444; - font-weight: bold; - text-decoration: underline; -} -/* Popup Menus */ - -.popup_button { - color: #444; - text-align: right; - border: 1px solid #999; - padding: 3px 6px; - background: #e3e3e3 url(images/submit_bg.png) repeat-x top; - font-weight: bold; - margin-top: 3px; - margin-bottom: 3px; - margin-left: 3px; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -a.popup_button:link, -a.popup_button:visited, -a.popup_button:active, -a.popup_button:hover { - text-decoration: none; - color: #444; -} - -a.popup_button:active, -a.popup_button:hover { - text-decoration: none; - color: #444; - border: 1px solid #666; -} - -.popup_menu { - margin: 1px 0 0 1px; - background: #fff; - border: 1px solid #ccc; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.popup_menu .popup_item_container { - margin: 1px; - text-align: left; -} - -.popup_menu .popup_item { - display: block; - padding: 5px; - text-decoration: none; - white-space: nowrap; - background: #efefef; - color: #333; -} - -.popup_menu .popup_item_container:first-child .popup_item { - border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - -webkit-border-radius: 3px 3px 0 0; -} - -.popup_menu .popup_item_container:last-child .popup_item { - border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; - -webkit-border-radius: 0 0 3px 3px; -} - -.popup_menu a.popup_item:hover { - text-decoration: none; - background: #666; - color: #fff; -} - -.transparent, .transparent td { - background: transparent; -} - -.breadcrumb { - margin-bottom: 10px; - font-size: 96%; - color: #aaa; -} - -.breadcrumb a { - color: #666; -} - -.breadcrumb a:hover, -.breadcrumb a:active { - color: #444; - text-decoration: none; -} - -.breadcrumb .active { - font-weight: bold; - color: #222; -} - -.inline_message { - background: #FFF6BF; - border-top: 2px solid #FFD324; - border-bottom: 2px solid #FFD324; - text-align: center; - margin: 10px auto; - padding: 5px 20px; -} - -.notice { - background: #EFEFEF; - border-top: 2px solid #CCC; - border-bottom: 2px solid #CCC; - text-align: center; - margin: 10px auto; - padding: 5px 20px; -} - -table.individual_cell_border { - border-style: collapse; -} - -table.cell_border_bottom td { - border: 1px solid #CCC; - border-style: collapse; - border-spacing: 1px; -} - -/* Forms */ - -form { - border: 0; - margin: 0; -} - -form div.form_container, fieldset { - background: #efefef; - border: 1px solid #ccc; - padding: 2px 7px 5px; - margin-bottom: 10px; -} - -fieldset { - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.form_row { - margin: 5px 0; -} - -legend { - font-weight: bold; -} - -.form_container label { - font-weight: bold; -} - -.form_container .description, small { - font-size: 11px; - color: #444; -} - -input.text_input { - border: 1px solid #aaa; - width: 300px; - padding: 4px; - font-size: 13px; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - outline: 0; -} - -textarea { - border: 1px solid #aaa; - padding: 4px; - width: 400px; - font-size: 12px; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - outline: 0; -} - -textarea[disabled=disabled] { - border: 1px solid #ccc; - padding: 4px; - color: #666; - font-size: 12px; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -select { - border: 1px solid #aaa; - padding: 4px; - font-size: 12px; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - outline: 0; -} - -textarea:focus, input.text_input:focus, select:focus { - border-color: #777; -} - -input.inline_submit { - font-weight: bold; -} - -form p.legend { - margin-bottom: 10px; -} - -form p.legend em { - color: #C00; font-style: normal; -} - -.form_container label em, fieldset label em { - font-style: normal; - color: #C00; -} - -input.submit_button { - border: 1px solid #999; - padding: 4px 7px; - background: #e3e3e3 url(images/submit_bg.png) repeat-x top; - color: #444; - font-weight: bold; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - margin-right: 3px; - font-size: 1.1em; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - outline: 0; -} - -input.submit_button:hover { - border: 1px solid #666; - cursor: pointer; -} - -.form_button_wrapper { - margin-top: 5px; - text-align: center; - border: 1px solid #ccc; - background: #efefef; - padding: 3px; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.confirm_action { - margin: 10px 0; - padding: 10px; - font-weight: bold; - border: 1px solid #FC6; - background: #FFC; - color: #C00; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.confirm_action p { - margin: 0; -} - -input.button_yes, -input.button_yes:hover { - background: #D6ECA6; - border: 1px solid #8DC93E; - padding: 4px 6px; - font-weight: bold; - margin-right: 3px; -} - -input.button_no, -input.button_no:hover { - background: #ECA6D6; - border: 1px solid #C93E8D; - padding: 4px 6px; - font-weight: bold; -} - -.label_radio_yes, .label_radio_on, .label_radio_no, .label_radio_off { - padding: 4px 6px; - margin-right: 5px; - margin-top: 5px; - display: block; - width: 60px; - float: left; -} - -.label_radio_yes, .label_radio_on { - background: #D6ECA6; - border: 1px solid #8DC93E; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.label_radio_no, .label_radio_off { - background: #ECA6D6; - border: 1px solid #C93E8D; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -input.radio_input { - vertical-align: middle; - margin: 0; - margin-right: 9px; -} - -#flash_message { - margin: 10px 0; - padding: 10px 10px 10px 32px; - font-weight: bold; - background: #efefef; - border: 1px solid #ccc; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -#flash_message.error { - border: 1px solid #FC6; - background: #FFC url('images/icons/error.png') no-repeat 10px 8px; - color: #C00; -} - -#flash_message.success { - border: #080 1px solid; - color: #080; - background: #E8FCDC url('images/icons/success.png') no-repeat 10px 8px; -} - -.alert { - margin: 10px 0; - padding: 10px 10px 10px 32px; - border: #FC6 1px solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background: #ffc url('images/icons/warning.png') no-repeat 10px 8px; - color: #C00; - font-style: normal; - font-weight: bold; - display: block; -} - -div.error, div.success { - margin: 10px 0; - padding: 10px; -} - -div.error { - border: #FC6 1px solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background: #ffc; -} - -div.success { - border: #080 1px solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background: #E8FCDC; -} - -div.error p, div.success p { - margin: 0; - color: #000; - font-weight: normal; -} - -div.error p em, div.success p em { - font-style: normal; - font-weight: bold; - padding-left: 24px; - display: block; -} - -div.error p em { - color: #C00; - background: url('images/icons/error.png') no-repeat; -} - -div.success p em { - color: #080; - background: url('images/icons/success.png') no-repeat; -} - -div.success ul, div.error.ul { - margin-left: 24px; -} - -.nav_tabs { - margin-bottom: 10px; -} -.nav_tabs ul { - list-style: none; - padding: 0; - margin: 0 0 0 10px; - height: 32px; -} - -.nav_tabs li { - float: left; - padding-right: 5px; -} - -.nav_tabs li.right { - float: right; - padding-left: 5px; - padding-right: 0; -} - -.nav_tabs li a { - float: left; - border-bottom: 0; - display: block; - font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Sans-Serif; - font-size: 140%; - letter-spacing: -1px; - color: #888; - padding: 5px 8px 3px; - height: 24px; -} - -.nav_tabs li a:hover { - color: #666; - text-decoration: none; -} - -.nav_tabs li.active a { - color: #555; - font-size: 150%; - font-weight: bold; - padding-top: 5px; - border-bottom: 3px solid #555; -} - -.nav_tabs .tab_description { - background: #f3f3f3; - padding: 10px; - border: 1px solid #ddd; - border-top: 3px solid #bbb; - color: #555; - font-size: 95%; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -* html .nav_tabs .tab_description { - margin-left: 3px; -} -*.align_center, table.general th.align_center, input.align_center { - text-align: center; -} - -.float_right { - float: right; -} - -.float_left { - float: left; -} - -a img { - border: 0; -} - -option { - padding-right: 10px; -} - -ul.tabs { - width: 100%; - margin: 10px 0 0 10px; - padding: 0; - list-style: none; - height: 27px; -} - -ul.tabs li { - float: left; - margin: 0; - padding: 0; - list-style: none; -} - -ul.tabs a { - float: left; - padding: 6px 10px; - text-decoration: none; - color: #888; - border: 0; - margin: 0 5px; -} - -ul.tabs a:hover { - color: #666; -} - -ul.tabs li a.active { - color: #fff; - font-size: 100%; - text-align: left; - font-weight: bold; - color: #333; - border: 1px solid #ddd; - border-bottom: 1px solid #ccc; - margin-top: -1px; - background: #f5f5f5; - border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; -} - -.editor { - background: #f1f1f1; - border: 1px solid #ccc; -} - -.editor_control_bar { - background: #fff; - border: 1px solid #0f5c8e; -} - -.toolbar_normal { - background: #f0f0f0; - border: 1px solid #f0f0f0; -} - -.toolbar_hover { - background: #c1d2ee; - border: 1px solid #5296f7; -} - -.toolbar_clicked { - background: #e1F2fe; - border: 1px solid #5296f7; -} - -.user_avatar { - height: 80px; - width: 80px; - background: #fff; - border: 1px solid #ccc; - float: left; - clear: left; - margin-right: 5px; - text-align: center; -} - -.user_avatar img { - vertical-align: middle; -} - -.user_details { - float: left; - margin-left: 5px; - line-height: 1.7; -} - -.pagination { - font-size: 11px; - margin-bottom: 10px; - margin-top: 10px; -} - -.pagination .pages { - font-weight: bold; -} - -.pagination .pagination_current, .pagination a { - padding: 2px 6px; - margin-bottom: 3px; -} - -.pagination a { - background: #f3f3f3; - border: 1px solid #ddd; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.pagination .pagination_current { - background: #fff; - border: 1px solid #fff; - font-weight: bold; - font-size: 110%; -} - -.pagination a:hover { - background: #ddd; - text-decoration: none; - border: 1px solid #999; -} - -.view_fields .enabled, .view_fields .disabled { - width: 200px; - float: left; -} - -.view_fields .disabled { - margin-left: 20px; -} - -.view_fields .fields_title { - font-weight: bold; - font-size: 120%; -} - -.view_fields ul, .view_fields li { - list-style: none; - padding: 0; - margin: 0; -} - -.view_fields ul { - overflow: auto; // Scroll fix for Opera - overflow-y: auto; - overflow-x: hidden; - margin-top: 4px; -} - -.view_fields li { - -moz-border-radius: 3px; - padding: 4px; - background: #666; - color: #fff; - font-size: 11px; - margin-bottom: 2px; - margin-right: 5px; -} - -.quick_perm_fields .enabled, .quick_perm_fields .disabled { - width: 49%; - float: left; -} - -.quick_perm_fields .enabled { - border-right: 5px solid #666; -} - -.quick_perm_fields .disabled { - float: right; - margin-left: 0px; -} - -.quick_perm_fields .fields_title { - font-weight: bold; - font-size: 120%; -} - -.quick_perm_fields ul, .quick_perm_fields li { - list-style: none; - padding: 3px; - margin: 0; -} - -.quick_perm_fields ul { - overflow: auto; // Scroll fix for Opera - overflow-y: auto; - overflow-x: hidden; - height: 120px; - margin-top: 4px; -} - -.quick_perm_fields li { - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - padding: 4px; - background: #666; - color: #fff; - font-size: 11px; - margin-bottom: 2px; - margin-right: 10px; -} - -input.field50 { - width: 50px; -} -input.field150 { - width: 150px; -} - -input.field_small { - font-size: 13px; - padding: 3px; -} - -input.search_default { - text-align: center; - color: #aaa; - padding: 3px; -} - -input.image_button { - margin-left: 5px; - vertical-align: bottom; -} - -input.search_button { - background: #fff url(images/icons/search.png) no-repeat; - background-position: 4px 7px; - border: 0px; - padding: 4px; - padding-left: 23px; - font-size: 14px; - font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Sans-Serif; - color: #6F6F6F; - font-weight: bold; - height: 30px; -} - -.smalltext { - font-size: 11px; -} - -.inline_element { - font-weight: normal !important; -} - -.inline_selected { - background-color: #FFFBD9; -} - -/* Templates Differential page */ -.differential { - background: #FFF; - margin: 10px auto; - padding: 10px; - overflow: scroll; - height: 400px; - width: 980px; - border: 1px solid #ccc; -} - -/** jGrowl Start **/ - -/** Special IE6 Style Positioning **/ -.ie6 { - position: absolute; -} - -.ie6.top-right { - right: auto; - bottom: auto; - left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.top-left { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.bottom-right { - left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.bottom-left { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.center { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); - width: 100%; -} - - -/** jGrowl Styling **/ -.jGrowl { - z-index: 9999; - color: #fff; - font-size: 12px; - position: fixed; -} - -.jGrowl.top-left { - left: 0px; - top: 0px; -} - -.jGrowl.top-right { - right: 0px; - top: 0px; -} - -.jGrowl.bottom-left { - left: 0px; - bottom: 0px; -} - -.jGrowl.bottom-right { - right: 0px; - bottom: 0px; -} - -.jGrowl.center { - top: 0px; - width: 50%; - left: 25%; -} - -/** Cross Browser Styling **/ -.center .jGrowl-notification, .center .jGrowl-closer { - margin-left: auto; - margin-right: auto; -} - -.jGrowl .jGrowl-notification, .jGrowl .jGrowl-closer { - background-color: transparent; - opacity: .85; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)"; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85); - zoom: 1; - width: 235px; - padding: 10px; - margin-top: 5px; - margin-bottom: 5px; - font-family: Tahoma, Arial, Helvetica, sans-serif; - font-size: 1em; - text-align: left; - display: none; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} - -.jGrowl .jGrowl-notification { - min-height: 40px; -} - -.jGrowl .jGrowl-notification, -.jGrowl .jGrowl-closer { - margin: 10px; -} - -.jGrowl .jGrowl-notification .jGrowl-header { - font-weight: bold; - font-size: .85em; -} - -.jGrowl .jGrowl-notification .jGrowl-close { - z-index: 99; - float: right; - font-weight: bold; - font-size: 1em; - cursor: pointer; -} - -.jGrowl .jGrowl-closer { - padding-top: 4px; - padding-bottom: 4px; - cursor: pointer; - font-size: .9em; - font-weight: bold; - text-align: center; -} - -.jGrowl .jGrowl-notification.jgrowl_success { - background: lightgreen; - border: 1px solid lightgreen; - color: #333; -} - -.jGrowl .jGrowl-notification.jgrowl_error { - background: red; - border: 1px solid red; - color: #333; -} - -.jGrowl .jGrowl-notification.jgrowl_process, .jGrowl .jGrowl-closer { - background: yellow; - border: 1px solid yellow; - color: #333; -} - -/** Hide jGrowl when printing **/ -@media print { - .jGrowl { - display: none; - } -} - -/** jGrowl End **/ diff --git a/html/forums/admin/styles/default/modal.css b/html/forums/admin/styles/default/modal.css deleted file mode 100644 index 7695f30..0000000 --- a/html/forums/admin/styles/default/modal.css +++ /dev/null @@ -1,45 +0,0 @@ - -.modal { - display: none; - width: 400px; - text-align: left; - background: #fff; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - -o-border-radius: 8px; - -ms-border-radius: 8px; - border-radius: 8px; - -webkit-box-shadow: 0 0 10px #000; - -moz-box-shadow: 0 0 10px #000; - -o-box-shadow: 0 0 10px #000; - -ms-box-shadow: 0 0 10px #000; - box-shadow: 0 0 10px #000; -} - -.modal a.close-modal { - position: absolute; - top: -12.5px; - right: -12.5px; - display: block; - width: 30px; - height: 30px; - text-indent: -9999px; - background: url(images/close.png) no-repeat 0 0; -} - -.modal-spinner { - display: none; - width: 64px; - height: 64px; - position: fixed; - top: 50%; - left: 50%; - margin-right: -32px; - margin-top: -32px; - background: url(images/spinner.gif) #111 no-repeat center center; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - -o-border-radius: 8px; - -ms-border-radius: 8px; - border-radius: 8px; -} diff --git a/html/forums/admin/styles/default/popup.css b/html/forums/admin/styles/default/popup.css deleted file mode 100644 index f1e9506..0000000 --- a/html/forums/admin/styles/default/popup.css +++ /dev/null @@ -1,32 +0,0 @@ -body { - background: #f7f7f7; - padding: 5px; -} - -#popup_container { - background: #fff; - padding: 5px; -} - -#content { - margin: 0; - padding: 0; -} - -.popup_title { - font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Sans-Serif; - font-size: 170%; - letter-spacing: -1px; - font-weight: bold; - color: #666; - margin: 0 0 5px 0; - border-bottom: 2px solid #999; -} - -.close_link { - float: right; - font-size: 13px; - margin-top: 7px; - font-weight: normal; - letter-spacing: normal; -} \ No newline at end of file diff --git a/html/forums/admin/styles/default/style.css b/html/forums/admin/styles/default/style.css deleted file mode 100644 index 751470f..0000000 --- a/html/forums/admin/styles/default/style.css +++ /dev/null @@ -1,42 +0,0 @@ -#templatebox { - position: absolute; - top: 40px; - left: 0; - width: 100%; - z-index: 100; - text-align: center; - line-height: 0; -} - -#fader{ - position: absolute; - top: 0; - left: 0; - z-index: 90; - width: 100%; - height: 500px; - background-color: #000; - filter:alpha(opacity=60); - -moz-opacity: 0.6; - opacity: 0.6; -} - -#outerContainer { - position: relative; - background-color: #fff; - width: 70%; - height: 300px; - margin: 0 auto; -} - -ins, del { - color: #000; - padding: 2px; - line-height: 1.5em; - text-decoration: none; - background: #dfd; -} - -del { - background: #fdd; -} \ No newline at end of file diff --git a/html/forums/admin/styles/default/style.php b/html/forums/admin/styles/default/style.php deleted file mode 100644 index 40b1086..0000000 --- a/html/forums/admin/styles/default/style.php +++ /dev/null @@ -1,82 +0,0 @@ -{$title}"; - * } - * } - * - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

Please make sure IN_MYBB is defined."); -} - -class Page extends DefaultPage -{ - function _generate_breadcrumb() - { - if(!is_array($this->_breadcrumb_trail)) - { - return false; - } - $trail = ""; - foreach($this->_breadcrumb_trail as $key => $crumb) - { - if($this->_breadcrumb_trail[$key+1]) - { - $trail .= "".$crumb['name'].""; - if($this->_breadcrumb_trail[$key+2]) - { - $trail .= " » "; - } - } - else - { - $trail .= " » ".$crumb['name'].""; - } - } - return $trail; - } -} - -class SidebarItem extends DefaultSidebarItem -{ -} - -class PopupMenu extends DefaultPopupMenu -{ -} - -class Table extends DefaultTable -{ -} - -class Form extends DefaultForm -{ -} - -class FormContainer extends DefaultFormContainer -{ -} diff --git a/html/forums/admin/styles/default/user.css b/html/forums/admin/styles/default/user.css deleted file mode 100644 index 07c947d..0000000 --- a/html/forums/admin/styles/default/user.css +++ /dev/null @@ -1,57 +0,0 @@ -.user_settings_bit { - margin-bottom: 8px; -} - -.user_settings_bit input { - vertical-align: middle; - margin-right: 8px; -} - -.user_settings_bit select { - margin-top: 8px; -} - -.user_settings_bit label { - font-weight: normal; -} - -.group_settings_bit { - margin-bottom: 8px; -} - -.group_settings_bit input { - vertical-align: middle; - margin-right: 8px; -} - -.group_settings_bit select, -.group_settings_bit input.text_input, -.group_settings_bit textarea { - margin-top: 8px; -} - -.group_settings_bit label { - font-weight: normal; -} - -.group_settings_bit small { - padding-left: 25px; -} - -.group_settings_bit small.input { - padding-left: 0; -} -#tab_general td td { - border: 0; - padding: 0 4px; -} - -.view_fields #fields_enabled, .view_fields #fields_disabled { - min-height: 300px; -} - -#fields_enabled li, #fields_disabled li { - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; -} \ No newline at end of file diff --git a/html/forums/admin/styles/index.html b/html/forums/admin/styles/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/admin/styles/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/announcements.php b/html/forums/announcements.php deleted file mode 100644 index da6adcd..0000000 --- a/html/forums/announcements.php +++ /dev/null @@ -1,126 +0,0 @@ -load("announcements"); - -$aid = $mybb->get_input('aid', MyBB::INPUT_INT); - -// Get announcement fid -$query = $db->simple_select("announcements", "fid", "aid='$aid'"); -$announcement = $db->fetch_array($query); - -$plugins->run_hooks("announcements_start"); - -if(!$announcement) -{ - error($lang->error_invalidannouncement); -} - -// Get forum info -$fid = $announcement['fid']; -if($fid > 0) -{ - $forum = get_forum($fid); - - if(!$forum) - { - error($lang->error_invalidforum); - } - - // Make navigation - build_forum_breadcrumb($forum['fid']); - - // Permissions - $forumpermissions = forum_permissions($forum['fid']); - - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) - { - error_no_permission(); - } - - // Check if this forum is password protected and we have a valid password - check_forum_password($forum['fid']); -} -add_breadcrumb($lang->nav_announcements); - -$archive_url = build_archive_link("announcement", $aid); - -// Get announcement info -$time = TIME_NOW; - -$query = $db->query(" - SELECT u.*, u.username AS userusername, a.*, f.* - FROM ".TABLE_PREFIX."announcements a - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - WHERE a.startdate<='$time' AND (a.enddate>='$time' OR a.enddate='0') AND a.aid='$aid' -"); - -$announcementarray = $db->fetch_array($query); - -if(!$announcementarray) -{ - error($lang->error_invalidannouncement); -} - -// Gather usergroup data from the cache -// Field => Array Key -$data_key = array( - 'title' => 'grouptitle', - 'usertitle' => 'groupusertitle', - 'stars' => 'groupstars', - 'starimage' => 'groupstarimage', - 'image' => 'groupimage', - 'namestyle' => 'namestyle', - 'usereputationsystem' => 'usereputationsystem' -); - -foreach($data_key as $field => $key) -{ - $announcementarray[$key] = $groupscache[$announcementarray['usergroup']][$field]; -} - -$announcementarray['dateline'] = $announcementarray['startdate']; -$announcementarray['userusername'] = $announcementarray['username']; -$announcement = build_postbit($announcementarray, 3); -$announcementarray['subject'] = $parser->parse_badwords($announcementarray['subject']); -$lang->forum_announcement = $lang->sprintf($lang->forum_announcement, htmlspecialchars_uni($announcementarray['subject'])); - -if($announcementarray['startdate'] > $mybb->user['lastvisit']) -{ - $setcookie = true; - if(isset($mybb->cookies['mybb']['announcements']) && is_scalar($mybb->cookies['mybb']['announcements'])) - { - $cookie = my_unserialize(stripslashes($mybb->cookies['mybb']['announcements'])); - - if(isset($cookie[$announcementarray['aid']])) - { - $setcookie = false; - } - } - - if($setcookie) - { - my_set_array_cookie('announcements', $announcementarray['aid'], $announcementarray['startdate'], -1); - } -} - -$plugins->run_hooks("announcements_end"); - -eval("\$forumannouncement = \"".$templates->get("announcement")."\";"); -output_page($forumannouncement); diff --git a/html/forums/archive/global.php b/html/forums/archive/global.php deleted file mode 100644 index 2f6c09a..0000000 --- a/html/forums/archive/global.php +++ /dev/null @@ -1,229 +0,0 @@ -read("usergroups"); -if(!is_array($groupscache)) -{ - $cache->update_usergroups(); - $groupscache = $cache->read("usergroups"); -} -$fpermissioncache = $cache->read("forumpermissions"); - -// Send headers before anything else. -send_page_headers(); - -// If the installer has not been removed and no lock exists, die. -if(is_dir(MYBB_ROOT."install") && !file_exists(MYBB_ROOT."install/lock")) -{ - echo "Please remove the install directory from your server, or create a file called 'lock' in the install directory. Until you do so, your board will remain unaccessable"; - exit; -} - -// If the server OS is not Windows and not Apache or the PHP is running as a CGI or we have defined ARCHIVE_QUERY_STRINGS, use query strings - DIRECTORY_SEPARATOR checks if running windows -//if((DIRECTORY_SEPARATOR != '\\' && stripos($_SERVER['SERVER_SOFTWARE'], 'apache') == false) || stripos(SAPI_NAME, 'cgi') !== false || defined("ARCHIVE_QUERY_STRINGS")) -// http://dev.mybb.com/issues/1489 - remove automatic detection and rely on users to set the right option here -if($mybb->settings['seourls_archive'] == 1) -{ - if($_SERVER['REQUEST_URI']) - { - $url = $_SERVER['REQUEST_URI']; - } - elseif($_SERVER['REDIRECT_URL']) - { - $url = $_SERVER['REDIRECT_URL']; - } - elseif($_SERVER['PATH_INFO']) - { - $url = $_SERVER['PATH_INFO']; - } - else - { - $url = $_SERVER['PHP_SELF']; - } - $base_url = $mybb->settings['bburl']."/archive/index.php/"; - $endpart = my_substr(strrchr($url, "/"), 1); -} -else -{ - $url = $_SERVER['QUERY_STRING']; - $base_url = $mybb->settings['bburl']."/archive/index.php?"; - $endpart = $url; -} - -$action = "index"; - -// This seems to work the same as the block below except without the css bugs O_o -$archiveurl = $mybb->settings['bburl'].'/archive'; - -if($endpart != "index.php") -{ - $endpart = str_replace(".html", "", $endpart); - $todo = explode("-", $endpart, 3); - if($todo[0]) - { - $action = $action2 = $todo[0]; - } - if(!empty($todo[2])) - { - $page = (int)$todo[2]; - } - else - { - $page = 1; - } - if(!empty($todo[1])) - { - $id = (int)$todo[1]; - } - else - { - $id = 0; - } - - // Get the thread, announcement or forum information. - if($action == "announcement") - { - $time = TIME_NOW; - $query = $db->query(" - SELECT a.*, u.username - FROM ".TABLE_PREFIX."announcements a - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - WHERE a.aid='{$id}' AND startdate < '{$time}' AND (enddate > '{$time}' OR enddate = 0) - "); - $announcement = $db->fetch_array($query); - if(!$announcement['aid']) - { - $action = "404"; - } - } - elseif($action == "thread") - { - $query = $db->simple_select("threads", "*", "tid='{$id}' AND closed NOT LIKE 'moved|%'"); - $thread = $db->fetch_array($query); - if(!$thread['tid']) - { - $action = "404"; - } - } - elseif($action == "forum") - { - $query = $db->simple_select("forums", "*", "fid='{$id}' AND active!=0 AND password=''"); - $forum = $db->fetch_array($query); - if(!$forum['fid']) - { - $action = "404"; - } - } - elseif($action != 'index') - { - $action = "404"; - } -} - -// Define the full MyBB version location of this page. -if($action == "thread") -{ - define('MYBB_LOCATION', get_thread_link($id)); -} -elseif($action == "forum") -{ - define('MYBB_LOCATION', get_forum_link($id)); -} -elseif($action == "announcement") -{ - define('MYBB_LOCATION', get_announcement_link($id)); -} -else -{ - define('MYBB_LOCATION', INDEX_URL); -} - -// Initialise session -$session = new session; -$session->init(); - -if(!$mybb->settings['bblanguage']) -{ - $mybb->settings['bblanguage'] = "english"; -} -$lang->set_language($mybb->settings['bblanguage']); - -// Load global language phrases -$lang->load("global"); -$lang->load("messages"); -$lang->load("archive"); - -// Draw up the basic part of our naviagation -$navbits[0]['name'] = $mybb->settings['bbname_orig']; -$navbits[0]['url'] = $mybb->settings['bburl']."/archive/index.php"; - -// Check banned ip addresses -if(is_banned_ip($session->ipaddress)) -{ - archive_error($lang->error_banned); -} - -// If our board is closed.. -if($mybb->settings['boardclosed'] == 1) -{ - if($mybb->usergroup['canviewboardclosed'] != 1) - { - if(!$mybb->settings['boardclosed_reason']) - { - $mybb->settings['boardclosed_reason'] = $lang->boardclosed_reason; - } - - $lang->error_boardclosed .= "
".$mybb->settings['boardclosed_reason']."
"; - archive_error($lang->error_boardclosed); - } -} - -// Do we require users to login? -if($mybb->settings['forcelogin'] == 1) -{ - if($mybb->user['uid'] == 0) - { - archive_error($lang->error_mustlogin); - } -} - -// Load Limiting - DIRECTORY_SEPARATOR checks if running windows -if(DIRECTORY_SEPARATOR != '\\') -{ - if($uptime = @exec('uptime')) - { - preg_match("/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/", $uptime, $regs); - $load = $regs[1]; - if($mybb->usergroup['cancp'] != 1 && $load > $mybb->settings['load'] && $mybb->settings['load'] > 0) - { - archive_error($lang->error_loadlimit); - } - } -} - -if($mybb->usergroup['canview'] == 0) -{ - archive_error_no_permission(); -} diff --git a/html/forums/archive/index.php b/html/forums/archive/index.php deleted file mode 100644 index e1b44fb..0000000 --- a/html/forums/archive/index.php +++ /dev/null @@ -1,524 +0,0 @@ -load("index"); - -$plugins->run_hooks("archive_start"); - -switch($action) -{ - // Display an announcement. - case "announcement": - // Fetch the forum this thread is in - if($announcement['fid'] != -1) - { - $forum = get_forum($announcement['fid']); - if(!$forum['fid'] || $forum['password'] != '') - { - archive_error($lang->error_invalidforum); - } - - // Check if we have permission to view this thread - $forumpermissions = forum_permissions($forum['fid']); - if($forumpermissions['canview'] != 1 || $forumpermissions['canviewthreads'] != 1) - { - archive_error_no_permission(); - } - - check_forum_password_archive($forum['fid']); - } - - $announcement['subject'] = htmlspecialchars_uni($parser->parse_badwords($announcement['subject'])); - - $parser_options = array( - "allow_html" => $announcement['allowhtml'], - "allow_mycode" => $announcement['allowmycode'], - "allow_smilies" => $announcement['allowsmilies'], - "allow_imgcode" => 1, - "allow_videocode" => 1, - "me_username" => $announcement['username'], - "filter_badwords" => 1 - ); - - $announcement['message'] = $parser->parse_message($announcement['message'], $parser_options); - - $profile_link = build_profile_link(htmlspecialchars_uni($announcement['username']), $announcement['uid']); - - // Build the navigation - add_breadcrumb($announcement['subject']); - archive_header($announcement['subject'], $announcement['subject'], $mybb->settings['bburl']."/announcements.php?aid={$id}"); - - // Format announcement contents. - $announcement['startdate'] = my_date('relative', $announcement['startdate']); - - $plugins->run_hooks("archive_announcement_start"); - - echo "
\n
\n

{$announcement['subject']} - {$profile_link}

"; - echo "
{$announcement['startdate']}
\n
\n
{$announcement['message']}
\n
\n"; - - $plugins->run_hooks("archive_announcement_end"); - - archive_footer(); - break; - - // Display a thread. - case "thread": - $thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - - // Fetch the forum this thread is in - $forum = get_forum($thread['fid']); - if(!$forum['fid'] || $forum['password'] != '') - { - archive_error($lang->error_invalidforum); - } - - // Check if we have permission to view this thread - $forumpermissions = forum_permissions($forum['fid']); - if($forumpermissions['canview'] != 1 || $forumpermissions['canviewthreads'] != 1) - { - archive_error_no_permission(); - } - - if($thread['visible'] != 1) - { - if(is_moderator($forum['fid'], "canviewunapprove")) - { - archive_error($lang->sprintf($lang->error_unapproved_thread, $mybb->settings['bburl']."/".get_thread_link($thread['tid'], $page))); - } - else - { - archive_error($lang->error_invalidthread); - } - } - - if(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] == 1 && $thread['uid'] != $mybb->user['uid']) - { - archive_error_no_permission(); - } - - check_forum_password_archive($forum['fid']); - - // Build the navigation - build_forum_breadcrumb($forum['fid'], 1); - add_breadcrumb($thread['subject']); - - archive_header($thread['subject'], $thread['subject'], $mybb->settings['bburl']."/".get_thread_link($thread['tid'], $page)); - - $plugins->run_hooks("archive_thread_start"); - - // Paginate this thread - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - $perpage = $mybb->settings['postsperpage']; - $postcount = (int)$thread['replies']+1; - $pages = ceil($postcount/$perpage); - - if($page > $pages) - { - $page = 1; - } - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $pids = array(); - // Fetch list of post IDs to be shown - $query = $db->simple_select("posts", "pid", "tid='{$id}' AND visible='1'", array('order_by' => 'dateline', 'limit_start' => $start, 'limit' => $perpage)); - while($post = $db->fetch_array($query)) - { - $pids[$post['pid']] = $post['pid']; - } - - if(empty($pids)) - { - archive_error($lang->error_invalidthread); - } - - archive_multipage($postcount, $perpage, $page, "{$base_url}thread-$id"); - - $pids = implode(",", $pids); - - if($pids && $mybb->settings['enableattachments'] == 1) - { - // Build attachments cache - $query = $db->simple_select("attachments", "*", "pid IN ({$pids})"); - while($attachment = $db->fetch_array($query)) - { - $acache[$attachment['pid']][$attachment['aid']] = $attachment; - } - } - - // Start fetching the posts - $query = $db->query(" - SELECT u.*, u.username AS userusername, p.* - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.pid IN ({$pids}) - ORDER BY p.dateline - "); - while($post = $db->fetch_array($query)) - { - $post['date'] = my_date('relative', $post['dateline']); - if($post['userusername']) - { - $post['username'] = $post['userusername']; - } - - // Parse the message - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "me_username" => $post['username'], - "filter_badwords" => 1 - ); - if($post['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - $post['message'] = $parser->parse_message($post['message'], $parser_options); - - // Is there an attachment in this post? - if($mybb->settings['enableattachments'] == 1 && isset($acache[$post['pid']]) && is_array($acache[$post['pid']])) - { - foreach($acache[$post['pid']] as $aid => $attachment) - { - $post['message'] = str_replace("[attachment={$attachment['aid']}]", "[settings['bburl']."/attachment.php?aid={$attachment['aid']}\">attachment={$attachment['aid']}]", $post['message']); - } - } - - // Damn thats a lot of parsing, now to determine which username to show.. - if($post['userusername']) - { - $post['username'] = $post['userusername']; - } - $post['username'] = build_profile_link(htmlspecialchars_uni($post['username']), $post['uid']); - - $plugins->run_hooks("archive_thread_post"); - - // Finally show the post - echo "
\n
\n

{$post['username']}

"; - echo "
{$post['date']}
\n
\n
{$post['message']}
\n
\n"; - } - archive_multipage($postcount, $perpage, $page, "{$base_url}thread-$id"); - - $plugins->run_hooks("archive_thread_end"); - - archive_footer(); - break; - - // Display a category or a forum. - case "forum": - // Check if we have permission to view this forum - $forumpermissions = forum_permissions($forum['fid']); - if($forumpermissions['canview'] != 1) - { - archive_error_no_permission(); - } - - check_forum_password_archive($forum['fid']); - - $useronly = ""; - if(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] == 1) - { - $useronly = "AND uid={$mybb->user['uid']}"; - } - - // Paginate this forum - $query = $db->simple_select("threads", "COUNT(tid) AS threads", "fid='{$id}' AND visible='1' {$useronly}"); - $threadcount = $db->fetch_field($query, "threads"); - - // Build the navigation - build_forum_breadcrumb($forum['fid'], 1); - - // No threads and not a category? Error! - if($forum['type'] != 'c') - { - if($forumpermissions['canviewthreads'] != 1) - { - archive_header(strip_tags($forum['name']), $forum['name'], $mybb->settings['bburl']."/".get_forum_link($id, $page).""); - archive_error($lang->error_nopermission); - } - - if($threadcount < 1 && $forumpermissions['canviewthreads'] == 1) - { - archive_header(strip_tags($forum['name']), $forum['name'], $mybb->settings['bburl']."/".get_forum_link($id, $page).""); - archive_error($lang->error_nothreads); - } - } - - // Build the archive header. - archive_header(strip_tags($forum['name']), $forum['name'], $mybb->settings['bburl']."/".get_forum_link($id, $page), 1); - - $plugins->run_hooks("archive_forum_start"); - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $perpage = $mybb->settings['threadsperpage']; - $pages = ceil($threadcount/$perpage); - if($page > $pages) - { - $page = 1; - } - - if($page > 0) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - // Decide what type of listing to show. - if($forum['type'] == 'f') - { - echo "
\n

{$forum['name']}

\n"; - } - elseif($forum['type'] == 'c') - { - echo "
\n

{$forum['name']}

\n"; - } - - // Show subforums. - $query = $db->simple_select("forums", "COUNT(fid) AS subforums", "pid='{$id}'"); - $subforumcount = $db->fetch_field($query, "subforums"); - if($subforumcount > 0) - { - echo "
\n"; - echo "

{$lang->subforums}

\n"; - echo "
    \n"; - $forums = build_archive_forumbits($forum['fid']); - echo $forums; - echo "
\n
\n"; - } - - archive_multipage($threadcount, $perpage, $page, "{$base_url}forum-$id"); - - // Get the announcements if the forum is not a category. - if($forum['type'] == 'f') - { - $sql = build_parent_list($forum['fid'], "fid", "OR", $forum['parentlist']); - $time = TIME_NOW; - $query = $db->simple_select("announcements", "*", "startdate < '{$time}' AND (enddate > '{$time}' OR enddate=0) AND ({$sql} OR fid='-1')"); - if($db->num_rows($query) > 0) - { - echo "
\n"; - echo "

{$lang->forumbit_announcements}

"; - echo "
    \n"; - while($announcement = $db->fetch_array($query)) - { - $announcement['subject'] = $parser->parse_badwords($announcement['subject']); - echo "
  1. ".htmlspecialchars_uni($announcement['subject'])."
  2. "; - } - echo "
\n
\n"; - } - - } - - // Get the stickies if the forum is not a category. - if($forum['type'] == 'f') - { - $options = array( - 'order_by' => 'sticky, lastpost', - 'order_dir' => 'desc', - 'limit_start' => $start, - 'limit' => $perpage - ); - $query = $db->simple_select("threads", "*", "fid='{$id}' AND visible='1' AND sticky='1' AND closed NOT LIKE 'moved|%' {$useronly}", $options); - if($db->num_rows($query) > 0) - { - echo "
\n"; - echo "

{$lang->forumbit_stickies}

"; - echo "
    \n"; - while($sticky = $db->fetch_array($query)) - { - $sticky['subject'] = htmlspecialchars_uni($parser->parse_badwords($sticky['subject'])); - if($sticky['replies'] != 1) - { - $lang_reply_text = $lang->archive_replies; - } - else - { - $lang_reply_text = $lang->archive_reply; - } - - $plugins->run_hooks("archive_forum_thread"); - - $sticky['replies'] = my_number_format($sticky['replies']); - - echo "
  1. {$sticky['subject']}"; - echo " ({$sticky['replies']} {$lang_reply_text})
  2. "; - } - echo "
\n
\n"; - } - } - - // Get the threads if the forum is not a category. - if($forum['type'] == 'f') - { - $options = array( - 'order_by' => 'sticky, lastpost', - 'order_dir' => 'desc', - 'limit_start' => $start, - 'limit' => $perpage - ); - $query = $db->simple_select("threads", "*", "fid='{$id}' AND visible='1' AND sticky='0' AND closed NOT LIKE 'moved|%' {$useronly}", $options); - if($db->num_rows($query) > 0) - { - echo "
\n"; - echo "

{$lang->forumbit_threads}

"; - echo "
    \n"; - while($thread = $db->fetch_array($query)) - { - $thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - if($thread['replies'] != 1) - { - $lang_reply_text = $lang->archive_replies; - } - else - { - $lang_reply_text = $lang->archive_reply; - } - - $plugins->run_hooks("archive_forum_thread"); - - $thread['replies'] = my_number_format($thread['replies']); - - echo "
  1. {$thread['subject']}"; - echo " ({$thread['replies']} {$lang_reply_text})
  2. "; - } - echo "
\n
\n"; - } - } - - echo "
\n"; - - archive_multipage($threadcount, $perpage, $page, "{$base_url}forum-$id"); - - $plugins->run_hooks("archive_forum_end"); - - archive_footer(); - break; - - // Display the board home. - case "index": - // Build our forum listing - $forums = build_archive_forumbits(0); - archive_header("", $mybb->settings['bbname_orig'], $mybb->settings['bburl']."/index.php"); - - $plugins->run_hooks("archive_index_start"); - - echo "
\n
{$mybb->settings['bbname']}
\n
\n
    \n"; - echo $forums; - echo "\n
\n
\n
"; - - $plugins->run_hooks("archive_index_end"); - - archive_footer(); - break; - default: - header("HTTP/1.0 404 Not Found"); - switch($action2) - { - case "announcement": - archive_error($lang->error_invalidannouncement); - case "thread": - archive_error($lang->error_invalidthread); - case "forum": - archive_error($lang->error_invalidforum); - default: - archive_error($lang->archive_not_found); - } -} - -$plugins->run_hooks("archive_end"); - -/** -* Gets a list of forums and possibly subforums. -* -* @param int $pid The parent forum to get the childforums for. -* @return array Array of information regarding the child forums of this parent forum -*/ -function build_archive_forumbits($pid=0) -{ - global $db, $forumpermissions, $mybb, $base_url; - - // Sort out the forum cache first. - static $fcache; - if(!is_array($fcache)) - { - // Fetch forums - $query = $db->simple_select("forums", "*", "active!=0 AND password=''", array('order_by' =>'pid, disporder')); - while($forum = $db->fetch_array($query)) - { - $fcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - $forumpermissions = forum_permissions(); - } - - $forums = ''; - - // Start the process. - if(is_array($fcache[$pid])) - { - foreach($fcache[$pid] as $key => $main) - { - foreach($main as $key => $forum) - { - $perms = $forumpermissions[$forum['fid']]; - if(($perms['canview'] == 1 || $mybb->settings['hideprivateforums'] == 0) && $forum['active'] != 0) - { - if($forum['linkto']) - { - $forums .= "
  • {$forum['name']}"; - } - elseif($forum['type'] == "c") - { - $forums .= "
  • {$forum['name']}"; - } - else - { - $forums .= "
  • {$forum['name']}"; - } - if(!empty($fcache[$forum['fid']])) - { - $forums .= "\n
      \n"; - $forums .= build_archive_forumbits($forum['fid']); - $forums .= "
    \n"; - } - $forums .= "
  • \n"; - } - } - } - } - return $forums; -} diff --git a/html/forums/archive/print.css b/html/forums/archive/print.css deleted file mode 100644 index fc76cea..0000000 --- a/html/forums/archive/print.css +++ /dev/null @@ -1,144 +0,0 @@ -body { - background: #fff; - color: #000; - font: small Verdana; -} - -#container { - border: 1px solid #ccc; - background: #fff; - padding: 20px; -} - -h1 { - font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; - font-weight: bold; - color: #000; -} -h1 a { - color: #000; - text-decoration: none; -} - -.navigation { - border: 1px solid #ccc; - background: #F5F5F4; - padding: 4px; - margin-bottom: 10px; - font-size: 13px; -} - -#infobox { - padding: 4px; - color: #777; - font-size: 0.8em; - margin-bottom: 10px; -} - -#fullversion { - font-size: 1.1em; -} - -.post { - border: 1px solid #ccc; - padding: 1px; - background: #F5F5F4; - margin-bottom: 10px; -} - -.post .header { - background: #F5F5F4; -} - -.post .header .author a { - color: #000; - text-decoration: none; -} - -.post .header .dateline { - padding: 4px; - color: #777; - float: right; - margin-top: -20px; -} - -.post .message { - background: #fff; - padding: 4px; -} - -.listing { - border: 1px solid #ccc; - margin-bottom: 10px; -} - -.header { - background: #F5F5F4; - font-weight: bold; - padding: 4px; - border-bottom: 1px solid #ccc; -} - -.threadlist .threads { - padding: 4px; -} - -.threadlist .threads .replycount { - color: #777; - font-size: 0.8em; -} - -.header h2 { - font-size: 1.0em; - margin: 0; -} - -h3 { - font-size: 1.0em; - margin: 5px 0 0 10px; -} - -.forumlist .forums ul { - list-style: none; -} - -.error { - border: 1px solid #ccc; - margin-bottom: 10px; -} - -.error .header { - background: #F5F5F4; - font-weight: bold; - padding: 4px; - border-bottom: 1px solid #ccc; -} - -.error .message { - padding: 4px; -} - -.multipage { - background: #F5F5F4; - border: 1px solid #ccc; - margin-bottom: 10px; - padding: 4px; -} - -#printinfo { - display: none; -} - -#footer { - padding-top: 10px; - text-align: center; - font-size: 0.8em; -} - -#footer a { - color: #000; -} - -.quote_body, .code_body { - margin-left: 18px; -} \ No newline at end of file diff --git a/html/forums/archive/screen.css b/html/forums/archive/screen.css deleted file mode 100644 index fc76cea..0000000 --- a/html/forums/archive/screen.css +++ /dev/null @@ -1,144 +0,0 @@ -body { - background: #fff; - color: #000; - font: small Verdana; -} - -#container { - border: 1px solid #ccc; - background: #fff; - padding: 20px; -} - -h1 { - font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; - font-weight: bold; - color: #000; -} -h1 a { - color: #000; - text-decoration: none; -} - -.navigation { - border: 1px solid #ccc; - background: #F5F5F4; - padding: 4px; - margin-bottom: 10px; - font-size: 13px; -} - -#infobox { - padding: 4px; - color: #777; - font-size: 0.8em; - margin-bottom: 10px; -} - -#fullversion { - font-size: 1.1em; -} - -.post { - border: 1px solid #ccc; - padding: 1px; - background: #F5F5F4; - margin-bottom: 10px; -} - -.post .header { - background: #F5F5F4; -} - -.post .header .author a { - color: #000; - text-decoration: none; -} - -.post .header .dateline { - padding: 4px; - color: #777; - float: right; - margin-top: -20px; -} - -.post .message { - background: #fff; - padding: 4px; -} - -.listing { - border: 1px solid #ccc; - margin-bottom: 10px; -} - -.header { - background: #F5F5F4; - font-weight: bold; - padding: 4px; - border-bottom: 1px solid #ccc; -} - -.threadlist .threads { - padding: 4px; -} - -.threadlist .threads .replycount { - color: #777; - font-size: 0.8em; -} - -.header h2 { - font-size: 1.0em; - margin: 0; -} - -h3 { - font-size: 1.0em; - margin: 5px 0 0 10px; -} - -.forumlist .forums ul { - list-style: none; -} - -.error { - border: 1px solid #ccc; - margin-bottom: 10px; -} - -.error .header { - background: #F5F5F4; - font-weight: bold; - padding: 4px; - border-bottom: 1px solid #ccc; -} - -.error .message { - padding: 4px; -} - -.multipage { - background: #F5F5F4; - border: 1px solid #ccc; - margin-bottom: 10px; - padding: 4px; -} - -#printinfo { - display: none; -} - -#footer { - padding-top: 10px; - text-align: center; - font-size: 0.8em; -} - -#footer a { - color: #000; -} - -.quote_body, .code_body { - margin-left: 18px; -} \ No newline at end of file diff --git a/html/forums/attachment.php b/html/forums/attachment.php deleted file mode 100644 index ae1b75f..0000000 --- a/html/forums/attachment.php +++ /dev/null @@ -1,217 +0,0 @@ -settings['enableattachments'] != 1) -{ - error($lang->attachments_disabled); -} - -// Find the AID we're looking for -if(isset($mybb->input['thumbnail'])) -{ - $aid = $mybb->get_input('thumbnail', MyBB::INPUT_INT); -} -else -{ - $aid = $mybb->get_input('aid', MyBB::INPUT_INT); -} - -$pid = $mybb->get_input('pid', MyBB::INPUT_INT); - -// Select attachment data from database -if($aid) -{ - $query = $db->simple_select("attachments", "*", "aid='{$aid}'"); -} -else -{ - $query = $db->simple_select("attachments", "*", "pid='{$pid}'"); -} -$attachment = $db->fetch_array($query); - -$plugins->run_hooks("attachment_start"); - -if(!$attachment) -{ - error($lang->error_invalidattachment); -} - -if($attachment['thumbnail'] == '' && isset($mybb->input['thumbnail'])) -{ - error($lang->error_invalidattachment); -} - -$attachtypes = (array)$cache->read('attachtypes'); -$ext = get_extension($attachment['filename']); - -if(empty($attachtypes[$ext])) -{ - error($lang->error_invalidattachment); -} - -$attachtype = $attachtypes[$ext]; - -$pid = $attachment['pid']; - -// Don't check the permissions on preview -if($pid || $attachment['uid'] != $mybb->user['uid']) -{ - $post = get_post($pid); - $thread = get_thread($post['tid']); - - if(!$thread && !isset($mybb->input['thumbnail'])) - { - error($lang->error_invalidthread); - } - $fid = $thread['fid']; - - // Get forum info - $forum = get_forum($fid); - - // Permissions - $forumpermissions = forum_permissions($fid); - - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid']) || ($forumpermissions['candlattachments'] == 0 && !$mybb->input['thumbnail'])) - { - error_no_permission(); - } - - // Error if attachment is invalid or not visible - if(!$attachment['attachname'] || (!is_moderator($fid, "canviewunapprove") && ($attachment['visible'] != 1 || $thread['visible'] != 1 || $post['visible'] != 1))) - { - error($lang->error_invalidattachment); - } - - if($attachtype['forums'] != -1 && strpos(','.$attachtype['forums'].',', ','.$fid.',') === false) - { - error_no_permission(); - } -} - -if(!isset($mybb->input['thumbnail'])) // Only increment the download count if this is not a thumbnail -{ - if(!is_member($attachtype['groups'])) - { - error_no_permission(); - } - - $attachupdate = array( - "downloads" => $attachment['downloads']+1, - ); - $db->update_query("attachments", $attachupdate, "aid='{$attachment['aid']}'"); -} - -// basename isn't UTF-8 safe. This is a workaround. -$attachment['filename'] = ltrim(basename(' '.$attachment['filename'])); - -$plugins->run_hooks("attachment_end"); - -if(isset($mybb->input['thumbnail'])) -{ - if(!file_exists($mybb->settings['uploadspath']."/".$attachment['thumbnail'])) - { - error($lang->error_invalidattachment); - } - - $ext = get_extension($attachment['thumbnail']); - switch($ext) - { - case "gif": - $type = "image/gif"; - break; - case "bmp": - $type = "image/bmp"; - break; - case "png": - $type = "image/png"; - break; - case "jpg": - case "jpeg": - case "jpe": - $type = "image/jpeg"; - break; - default: - $type = "image/unknown"; - break; - } - - header("Content-disposition: filename=\"{$attachment['filename']}\""); - header("Content-type: ".$type); - $thumb = $mybb->settings['uploadspath']."/".$attachment['thumbnail']; - header("Content-length: ".@filesize($thumb)); - $handle = fopen($thumb, 'rb'); - while(!feof($handle)) - { - echo fread($handle, 8192); - } - fclose($handle); -} -else -{ - if(!file_exists($mybb->settings['uploadspath']."/".$attachment['attachname'])) - { - error($lang->error_invalidattachment); - } - - $ext = get_extension($attachment['filename']); - - switch($attachment['filetype']) - { - case "application/pdf": - case "image/bmp": - case "image/gif": - case "image/jpeg": - case "image/pjpeg": - case "image/png": - case "text/plain": - header("Content-type: {$attachment['filetype']}"); - $disposition = "inline"; - break; - - default: - $filetype = $attachment['filetype']; - - if(!$filetype) - { - $filetype = 'application/force-download'; - } - - header("Content-type: {$filetype}"); - $disposition = "attachment"; - } - - if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), "msie") !== false) - { - header("Content-disposition: attachment; filename=\"{$attachment['filename']}\""); - } - else - { - header("Content-disposition: {$disposition}; filename=\"{$attachment['filename']}\""); - } - - if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0") !== false) - { - header("Expires: -1"); - } - - header("Content-length: {$attachment['filesize']}"); - header("Content-range: bytes=0-".($attachment['filesize']-1)."/".$attachment['filesize']); - $handle = fopen($mybb->settings['uploadspath']."/".$attachment['attachname'], 'rb'); - while(!feof($handle)) - { - echo fread($handle, 8192); - } - fclose($handle); -} diff --git a/html/forums/cache/index.html b/html/forums/cache/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/cache/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/cache/themes/index.html b/html/forums/cache/themes/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/cache/themes/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/calendar.php b/html/forums/calendar.php deleted file mode 100644 index 6533e1b..0000000 --- a/html/forums/calendar.php +++ /dev/null @@ -1,2531 +0,0 @@ -load("calendar"); - -if($mybb->settings['enablecalendar'] == 0) -{ - error($lang->calendar_disabled); -} - -if($mybb->usergroup['canviewcalendar'] == 0) -{ - error_no_permission(); -} - -$monthnames = array( - "offset", - $lang->alt_month_1, - $lang->alt_month_2, - $lang->alt_month_3, - $lang->alt_month_4, - $lang->alt_month_5, - $lang->alt_month_6, - $lang->alt_month_7, - $lang->alt_month_8, - $lang->alt_month_9, - $lang->alt_month_10, - $lang->alt_month_11, - $lang->alt_month_12 -); - -$plugins->run_hooks("calendar_start"); - -// Make navigation -add_breadcrumb($lang->nav_calendar, "calendar.php"); - -$mybb->input['calendar'] = $mybb->get_input('calendar', MyBB::INPUT_INT); -$calendars = cache_calendars(); - -$calendar_jump = ''; -if(count($calendars) > 1) -{ - $calendar_jump = build_calendar_jump($mybb->input['calendar']); -} - -$mybb->input['action'] = $mybb->get_input('action'); -// Add an event -if($mybb->input['action'] == "do_addevent" && $mybb->request_method == "post") -{ - $query = $db->simple_select("calendars", "*", "cid='{$mybb->input['calendar']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar or post events? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) - { - error_no_permission(); - } - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("calendar_do_addevent_start"); - - // Set up event handler. - require_once MYBB_ROOT."inc/datahandler.php"; - require_once MYBB_ROOT."inc/datahandlers/event.php"; - $eventhandler = new EventDataHandler("insert"); - - $mybb->input['type'] = $mybb->get_input('type'); - - // Prepare an array for the eventhandler. - $event = array( - "cid" => $calendar['cid'], - "uid" => $mybb->user['uid'], - "name" => $mybb->get_input('name'), - "description" => $mybb->get_input('description'), - "private" => $mybb->get_input('private', MyBB::INPUT_INT), - "type" => $mybb->input['type'] - ); - - // Now we add in our date/time info depending on the type of event - if($mybb->input['type'] == "single") - { - $event['start_date'] = array( - "day" => $mybb->get_input('single_day', MyBB::INPUT_INT), - "month" => $mybb->get_input('single_month', MyBB::INPUT_INT), - "year" => $mybb->get_input('single_year', MyBB::INPUT_INT) - ); - $event['repeats'] = ''; - } - else if($mybb->input['type'] == "ranged") - { - $event['start_date'] = array( - "day" => $mybb->get_input('start_day', MyBB::INPUT_INT), - "month" => $mybb->get_input('start_month', MyBB::INPUT_INT), - "year" => $mybb->get_input('start_year', MyBB::INPUT_INT), - "time" => $mybb->get_input('start_time') - ); - $event['end_date'] = array( - "day" => $mybb->get_input('end_day', MyBB::INPUT_INT), - "month" => $mybb->get_input('end_month', MyBB::INPUT_INT), - "year" => $mybb->get_input('end_year', MyBB::INPUT_INT), - "time" => $mybb->get_input('end_time') - ); - $event['timezone'] = $mybb->get_input('timezone'); - $event['ignoretimezone'] = $mybb->get_input('ignoretimezone', MyBB::INPUT_INT); - $repeats = array(); - switch($mybb->input['repeats']) - { - case 1: - $repeats['repeats'] = 1; - $repeats['days'] = $mybb->get_input('repeats_1_days', MyBB::INPUT_INT); - break; - case 2: - $repeats['repeats'] = 2; - break; - case 3: - $repeats['repeats'] = 3; - $repeats['weeks'] = $mybb->get_input('repeats_3_weeks', MyBB::INPUT_INT); - $mybb->input['repeats_3_days'] = $mybb->get_input('repeats_3_days', MyBB::INPUT_ARRAY); - ksort($mybb->input['repeats_3_days']); - $days = array(); - foreach($mybb->input['repeats_3_days'] as $weekday => $value) - { - if($value != 1) - { - continue; - } - $days[] = $weekday; - } - $repeats['days'] = $days; - break; - case 4: - $repeats['repeats'] = 4; - if($mybb->get_input('repeats_4_type', MyBB::INPUT_INT) == 1) - { - $repeats['day'] = $mybb->get_input('repeats_4_day', MyBB::INPUT_INT); - $repeats['months'] = $mybb->get_input('repeats_4_months', MyBB::INPUT_INT); - } - else - { - $repeats['months'] = $mybb->get_input('repeats_4_months2', MyBB::INPUT_INT); - $repeats['occurance'] = $mybb->get_input('repeats_4_occurance'); - $repeats['weekday'] = $mybb->get_input('repeats_4_weekday', MyBB::INPUT_INT); - } - break; - case 5: - $repeats['repeats'] = 5; - if($mybb->get_input('repeats_5_type', MyBB::INPUT_INT) == 1) - { - $repeats['day'] = $mybb->get_input('repeats_5_day', MyBB::INPUT_INT); - $repeats['month'] = $mybb->get_input('repeats_5_month', MyBB::INPUT_INT); - $repeats['years'] = $mybb->get_input('repeats_5_years', MyBB::INPUT_INT); - } - else - { - $repeats['occurance'] = $mybb->get_input('repeats_5_occurance'); - $repeats['weekday'] = $mybb->get_input('repeats_5_weekday', MyBB::INPUT_INT); - $repeats['month'] = $mybb->get_input('repeats_5_month2', MyBB::INPUT_INT); - $repeats['years'] = $mybb->get_input('repeats_5_years', MyBB::INPUT_INT); - } - break; - default: - $repeats['repeats'] = 0; - } - $event['repeats'] = $repeats; - } - - $eventhandler->set_data($event); - - // Now let the eventhandler do all the hard work. - if(!$eventhandler->validate_event()) - { - $event_errors = $eventhandler->get_friendly_errors(); - $event_errors = inline_error($event_errors); - $mybb->input['action'] = "addevent"; - } - else - { - $details = $eventhandler->insert_event(); - $plugins->run_hooks("calendar_do_addevent_end"); - if($details['visible'] == 1) - { - redirect(get_event_link($details['eid']), $lang->redirect_eventadded); - } - else - { - redirect(get_calendar_link($event['cid']), $lang->redirect_eventadded_moderation); - } - } -} - -if($mybb->input['action'] == "addevent") -{ - $query = $db->simple_select("calendars", "*", "cid='".$mybb->input['calendar']."'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar['cid']) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar or post events? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) - { - error_no_permission(); - } - - add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); - add_breadcrumb($lang->nav_addevent); - - $plugins->run_hooks("calendar_addevent_start"); - - // If MyCode is on for this forum and the MyCode editor is enabled inthe Admin CP, draw the code buttons and smilie inserter. - if($mybb->settings['bbcodeinserter'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0) && $calendar['allowmycode'] == 1) - { - $codebuttons = build_mycode_inserter("message", $calendar['allowsmilies']); - if($calendar['allowsmilies'] == 1) - { - $smilieinserter = build_clickable_smilies(); - } - } - - // Previous selections - $name = $description = ''; - if(isset($mybb->input['name'])) - { - $name = htmlspecialchars_uni($mybb->get_input('name')); - } - - if(isset($mybb->input['description'])) - { - $description = htmlspecialchars_uni($mybb->get_input('description')); - } - - $single_month = $start_month = $end_month = $repeats_sel = $repeats_3_days = $repeats_4_occurance = $repeats_4_weekday = $repeats_5_month = $repeats_5_occurance = $repeats_5_weekday = $repeats_5_month2 = array(); - foreach(range(1, 12) as $number) - { - $single_month[$number] = $start_month[$number] = $end_month[$number] = $repeats_5_month[$number] = $repeats_5_month2[$number] = ''; - } - foreach(range(1, 5) as $number) - { - $repeats_sel[$number] = ''; - } - foreach(range(0, 6) as $number) - { - $repeats_3_days[$number] = $repeats_4_weekday[$number] = $repeats_5_weekday[$number] = ''; - } - foreach(range(1, 4) as $number) - { - $repeats_4_occurance[$number] = $repeats_5_occurance[$number] = ''; - } - $repeats_4_occurance['last'] = $repeats_5_occurance['last'] = ''; - $repeats_4_type = array(1 => '', 2 => ''); - $repeats_5_type = array(1 => '', 2 => ''); - - if($mybb->request_method == "post") - { - $single_day = $mybb->get_input('single_day', MyBB::INPUT_INT); - $single_month[$mybb->get_input('single_month', MyBB::INPUT_INT)] = " selected=\"selected\""; - $single_year = $mybb->get_input('single_year', MyBB::INPUT_INT); - $start_day = $mybb->get_input('start_day', MyBB::INPUT_INT); - $start_month[$mybb->get_input('start_month', MyBB::INPUT_INT)] = " selected=\"selected\""; - $start_year = $mybb->get_input('start_year', MyBB::INPUT_INT); - $start_time = htmlspecialchars_uni($mybb->get_input('start_time')); - $end_day = $mybb->get_input('end_day', MyBB::INPUT_INT); - $end_month[$mybb->get_input('end_month', MyBB::INPUT_INT)] = " selected=\"selected\""; - $end_year = $mybb->get_input('end_year', MyBB::INPUT_INT); - $end_time = htmlspecialchars_uni($mybb->get_input('end_time')); - if($mybb->get_input('type') == "single") - { - $type_single = "checked=\"checked\""; - $type_ranged = ''; - $type = "single"; - } - else - { - $type_ranged = "checked=\"checked\""; - $type_single = ''; - $type = "ranged"; - } - if(!empty($mybb->input['repeats'])) - { - $repeats_sel[$mybb->get_input('repeats', MyBB::INPUT_INT)] = " selected=\"selected\""; - } - $repeats_1_days = $mybb->get_input('repeats_1_days', MyBB::INPUT_INT); - $repeats_3_weeks = $mybb->get_input('repeats_3_weeks', MyBB::INPUT_INT); - foreach($mybb->get_input('repeats_3_days', MyBB::INPUT_ARRAY) as $day => $val) - { - if($val != 1) - { - continue; - } - $day = (int)$day; - $repeats_3_days[$day] = " checked=\"checked\""; - } - $repeats_4_type = array(); - if($mybb->get_input('repeats_4_type', MyBB::INPUT_INT) == 1) - { - $repeats_4_type[1] = "checked=\"checked\""; - $repeats_4_type[2] = ''; - } - else - { - $repeats_4_type[2] = "checked=\"checked\""; - $repeats_4_type[1] = ''; - } - $repeats_4_day = $mybb->get_input('repeats_4_day', MyBB::INPUT_INT); - $repeats_4_months = $mybb->get_input('repeats_4_months', MyBB::INPUT_INT); - $repeats_4_occurance[$mybb->get_input('repeats_4_occurance')] = "selected=\"selected\""; - $repeats_4_weekday[$mybb->get_input('repeats_4_weekday', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_4_months2 = $mybb->get_input('repeats_4_months2', MyBB::INPUT_INT); - if($mybb->get_input('repeats_5_type', MyBB::INPUT_INT) == 1) - { - $repeats_5_type[1] = "checked=\"checked\""; - } - else - { - $repeats_5_type[2] = "checked=\"checked\""; - } - $repeats_5_day = $mybb->get_input('repeats_5_day', MyBB::INPUT_INT); - $repeats_5_month[$mybb->get_input('repeats_5_month', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_5_years = $mybb->get_input('repeats_5_years', MyBB::INPUT_INT); - $repeats_5_occurance[$mybb->get_input('repeats_5_occurance')] = "selected=\"selected\""; - $repeats_5_weekday[$mybb->get_input('repeats_5_weekday', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_5_month2[$mybb->get_input('repeats_5_month2', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_5_years2 = $mybb->get_input('repeats_5_years2', MyBB::INPUT_INT); - - $timezone = $mybb->get_input('timezone', MyBB::INPUT_INT); - } - else - { - if(!empty($mybb->input['day'])) - { - $single_day = $start_day = $end_day = $mybb->get_input('day', MyBB::INPUT_INT); - } - else - { - $single_day = $start_day = $end_day = my_date("j"); - } - if(!empty($mybb->input['month'])) - { - $month = $mybb->get_input('month', MyBB::INPUT_INT); - } - else - { - $month = my_date("n"); - } - $single_month[$month] = $start_month[$month] = $end_month[$month] = "selected=\"selected\""; - if(!empty($mybb->input['year'])) - { - $single_year = $start_year = $end_year = $mybb->get_input('year', MyBB::INPUT_INT); - } - else - { - $single_year = $start_year = $end_year = my_date("Y"); - } - $start_time = $end_time = ""; - $type_single = "checked=\"checked\""; - $type_ranged = ''; - $type = "single"; - $repeats_1_days = 1; - $repeats_3_weeks = 1; - $repeats_4_type[1] = "checked=\"checked\""; - $repeats_4_day = 1; - $repeats_4_months = 1; - $repeats_4_occurance[1] = "selected=\"selected\""; - $repeats_4_weekday[0] = "selected=\"selected\""; - $repeats_4_months2 = 1; - $repeats_5_type[1] = "checked=\"checked\""; - $repeats_5_day = 1; - $repeats_5_month[1] = "selected=\"selected\""; - $repeats_5_years = 1; - $repeats_5_occurance[1] = "selected=\"selected\""; - $repeats_5_weekday[0] = "selected=\"selected\""; - $repeats_5_month2[1] = "selected=\"selected\""; - $repeats_5_years2 = 1; - $timezone = $mybb->user['timezone']; - } - - $single_years = $start_years = $end_years = ''; - - // Construct option list for years - for($year = my_date('Y'); $year < (my_date('Y') + 5); ++$year) - { - if($year == $single_year) - { - $selected = "selected=\"selected\""; - eval("\$single_years .= \"".$templates->get("calendar_year")."\";"); - } - else - { - $selected = ""; - eval("\$single_years .= \"".$templates->get("calendar_year")."\";"); - } - - if($year == $start_year) - { - $selected = "selected=\"selected\""; - eval("\$start_years .= \"".$templates->get("calendar_year")."\";"); - } - else - { - $selected = ""; - eval("\$start_years .= \"".$templates->get("calendar_year")."\";"); - } - - if($year == $end_year) - { - $selected = "selected=\"selected\""; - eval("\$end_years .= \"".$templates->get("calendar_year")."\";"); - } - else - { - $selected = ""; - eval("\$end_years .= \"".$templates->get("calendar_year")."\";"); - } - } - - $single_days = $start_days = $end_days = ''; - - // Construct option list for days - for($day = 1; $day <= 31; ++$day) - { - if($day == $single_day) - { - $selected = "selected=\"selected\""; - eval("\$single_days .= \"".$templates->get("calendar_day")."\";"); - } - else - { - $selected = ""; - eval("\$single_days .= \"".$templates->get("calendar_day")."\";"); - } - - if($day == $start_day) - { - $selected = "selected=\"selected\""; - eval("\$start_days .= \"".$templates->get("calendar_day")."\";"); - } - else - { - $selected = ""; - eval("\$start_days .= \"".$templates->get("calendar_day")."\";"); - } - - if($day == $end_day) - { - $selected = "selected=\"selected\""; - eval("\$end_days .= \"".$templates->get("calendar_day")."\";"); - } - else - { - $selected = ""; - eval("\$end_days .= \"".$templates->get("calendar_day")."\";"); - } - } - - $timezones = build_timezone_select("timezone", $timezone); - - if($mybb->get_input('ignoretimezone', MyBB::INPUT_INT) == 1) - { - $ignore_timezone = "checked=\"checked\""; - } - else - { - $ignore_timezone = ''; - } - - if($mybb->get_input('private', MyBB::INPUT_INT) == 1) - { - $privatecheck = " checked=\"checked\""; - } - else - { - $privatecheck = ''; - } - - $select_calendar = $calendar_select = ''; - $calendarcount = 0; - - // Build calendar select - $calendar_permissions = get_calendar_permissions(); - $query = $db->simple_select("calendars", "*", "", array("order_by" => "name", "order_dir" => "asc")); - while($calendar_option = $db->fetch_array($query)) - { - if($calendar_permissions[$calendar['cid']]['canviewcalendar'] == 1) - { - $calendar_option['name'] = htmlspecialchars_uni($calendar_option['name']); - if($calendar_option['cid'] == $mybb->input['calendar']) - { - $selected = " selected=\"selected\""; - } - else - { - $selected = ""; - } - - ++$calendarcount; - eval("\$select_calendar .= \"".$templates->get("calendar_select")."\";"); - } - } - - if($calendarcount > 1) - { - eval("\$calendar_select .= \"".$templates->get("calendar_addevent_calendarselect")."\";"); - } - else - { - eval("\$calendar_select .= \"".$templates->get("calendar_addevent_calendarselect_hidden")."\";"); - } - - if(!isset($event_errors)) - { - $event_errors = ''; - } - - $plugins->run_hooks("calendar_addevent_end"); - - eval("\$addevent = \"".$templates->get("calendar_addevent")."\";"); - output_page($addevent); -} - -// Delete an event -if($mybb->input['action'] == "do_deleteevent" && $mybb->request_method == "post") -{ - $query = $db->simple_select("events", "*", "eid='{$mybb->input['eid']}'"); - $event = $db->fetch_array($query); - - if(!$event) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar or post events? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) - { - error_no_permission(); - } - - if(($event['uid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0) && $calendar_permissions['canmoderateevents'] != 1) - { - error_no_permission(); - } - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("calendar_do_deleteevent_start"); - - // Is the checkbox set? - if($mybb->get_input('delete', MyBB::INPUT_INT) == 1) - { - $db->delete_query("events", "eid='{$event['eid']}'"); - $plugins->run_hooks("calendar_do_deleteevent_end"); - - // Redirect back to the main calendar view. - redirect("calendar.php", $lang->redirect_eventdeleted); - } - else - { - error($lang->delete_no_checkbox); - } -} - -// Edit an event -if($mybb->input['action'] == "do_editevent" && $mybb->request_method == "post") -{ - $query = $db->simple_select("events", "*", "eid='{$mybb->input['eid']}'"); - $event = $db->fetch_array($query); - - if(!$event) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar or post events? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) - { - error_no_permission(); - } - - if(($event['uid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0) && $calendar_permissions['canmoderateevents'] != 1) - { - error_no_permission(); - } - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("calendar_do_editevent_start"); - - // Set up event handler. - require_once MYBB_ROOT."inc/datahandler.php"; - require_once MYBB_ROOT."inc/datahandlers/event.php"; - $eventhandler = new EventDataHandler("update"); - $mybb->input['type'] = $mybb->get_input('type'); - - // Prepare an array for the eventhandler. - $event = array( - "eid" => $event['eid'], - "name" => $mybb->get_input('name'), - "description" => $mybb->get_input('description'), - "private" => $mybb->get_input('private', MyBB::INPUT_INT), - "type" => $mybb->input['type'] - ); - - // Now we add in our date/time info depending on the type of event - if($mybb->input['type'] == "single") - { - $event['start_date'] = array( - "day" => $mybb->get_input('single_day', MyBB::INPUT_INT), - "month" => $mybb->get_input('single_month', MyBB::INPUT_INT), - "year" => $mybb->get_input('single_year', MyBB::INPUT_INT) - ); - $event['repeats'] = ''; - } - else if($mybb->input['type'] == "ranged") - { - $event['start_date'] = array( - "day" => $mybb->get_input('start_day', MyBB::INPUT_INT), - "month" => $mybb->get_input('start_month', MyBB::INPUT_INT), - "year" => $mybb->get_input('start_year', MyBB::INPUT_INT), - "time" => $mybb->get_input('start_time') - ); - $event['end_date'] = array( - "day" => $mybb->get_input('end_day', MyBB::INPUT_INT), - "month" => $mybb->get_input('end_month', MyBB::INPUT_INT), - "year" => $mybb->get_input('end_year', MyBB::INPUT_INT), - "time" => $mybb->get_input('end_time') - ); - $event['timezone'] = $mybb->get_input('timezone'); - $event['ignoretimezone'] = $mybb->get_input('ignoretimezone', MyBB::INPUT_INT); - $repeats = array(); - switch($mybb->input['repeats']) - { - case 1: - $repeats['repeats'] = 1; - $repeats['days'] = $mybb->get_input('repeats_1_days', MyBB::INPUT_INT); - break; - case 2: - $repeats['repeats'] = 2; - break; - case 3: - $repeats['repeats'] = 3; - $repeats['weeks'] = $mybb->get_input('repeats_3_weeks', MyBB::INPUT_INT); - $mybb->input['repeats_3_days'] = $mybb->get_input('repeats_3_days', MyBB::INPUT_ARRAY); - ksort($mybb->input['repeats_3_days']); - $days = array(); - foreach($mybb->input['repeats_3_days'] as $weekday => $value) - { - if($value != 1) - { - continue; - } - $days[] = $weekday; - } - $repeats['days'] = $days; - break; - case 4: - $repeats['repeats'] = 4; - if($mybb->get_input('repeats_4_type', MyBB::INPUT_INT) == 1) - { - $repeats['day'] = $mybb->get_input('repeats_4_day', MyBB::INPUT_INT); - $repeats['months'] = $mybb->get_input('repeats_4_months', MyBB::INPUT_INT); - } - else - { - $repeats['months'] = $mybb->get_input('repeats_4_months2', MyBB::INPUT_INT); - $repeats['occurance'] = $mybb->get_input('repeats_4_occurance'); - $repeats['weekday'] = $mybb->get_input('repeats_4_weekday', MyBB::INPUT_INT); - } - break; - case 5: - $repeats['repeats'] = 5; - if($mybb->get_input('repeats_5_type', MyBB::INPUT_INT) == 1) - { - $repeats['day'] = $mybb->get_input('repeats_5_day', MyBB::INPUT_INT); - $repeats['month'] = $mybb->get_input('repeats_5_month', MyBB::INPUT_INT); - $repeats['years'] = $mybb->get_input('repeats_5_years', MyBB::INPUT_INT); - } - else - { - $repeats['occurance'] = $mybb->get_input('repeats_5_occurance'); - $repeats['weekday'] = $mybb->get_input('repeats_5_weekday', MyBB::INPUT_INT); - $repeats['month'] = $mybb->get_input('repeats_5_month2', MyBB::INPUT_INT); - $repeats['years'] = $mybb->get_input('repeats_5_years', MyBB::INPUT_INT); - } - break; - default: - $repeats['repeats'] = 0; - } - $event['repeats'] = $repeats; - } - - $eventhandler->set_data($event); - - // Now let the eventhandler do all the hard work. - if(!$eventhandler->validate_event()) - { - $event_errors = $eventhandler->get_friendly_errors(); - $event_errors = inline_error($event_errors); - $mybb->input['action'] = "editevent"; - } - else - { - $details = $eventhandler->update_event(); - $plugins->run_hooks("calendar_do_editevent_end"); - redirect(get_event_link($event['eid']), $lang->redirect_eventupdated); - } -} - -if($mybb->input['action'] == "editevent") -{ - // Event already fetched in do_editevent? - if(!isset($event)) - { - $query = $db->simple_select("events", "*", "eid='{$mybb->input['eid']}'"); - $event = $db->fetch_array($query); - - if(!$event) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar['cid']) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar or post events? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) - { - error_no_permission(); - } - - if(($event['uid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0) && $calendar_permissions['canmoderateevents'] != 1) - { - error_no_permission(); - } - } - - $event['name'] = htmlspecialchars_uni($event['name']); - $event['timezone'] = (float)$event['timezone']; - - add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); - add_breadcrumb($event['name'], get_event_link($event['eid'])); - add_breadcrumb($lang->nav_editevent); - - $plugins->run_hooks("calendar_editevent_start"); - - // If MyCode is on for this forum and the MyCode editor is enabled inthe Admin CP, draw the code buttons and smilie inserter. - if($mybb->settings['bbcodeinserter'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0) && $calendar['allowmycode'] == 1) - { - $codebuttons = build_mycode_inserter("message", $calendar['allowsmilies']); - if($calendar['allowsmilies'] == 1) - { - $smilieinserter = build_clickable_smilies(); - } - } - - $single_month = $start_month = $end_month = $repeats_sel = $repeats_3_days = $repeats_4_occurance = $repeats_4_weekday = $repeats_5_month = $repeats_5_occurance = $repeats_5_weekday = $repeats_5_month2 = array(); - foreach(range(1, 12) as $number) - { - $single_month[$number] = $start_month[$number] = $end_month[$number] = $repeats_5_month[$number] = $repeats_5_month2[$number] = ''; - } - foreach(range(1, 5) as $number) - { - $repeats_sel[$number] = ''; - } - foreach(range(0, 6) as $number) - { - $repeats_3_days[$number] = $repeats_4_weekday[$number] = $repeats_5_weekday[$number] = ''; - } - foreach(range(1, 4) as $number) - { - $repeats_4_occurance[$number] = $repeats_5_occurance[$number] = ''; - } - $repeats_4_occurance['last'] = $repeats_5_occurance['last'] = ''; - $repeats_4_type = array(1 => '', 2 => ''); - $repeats_5_type = array(1 => '', 2 => ''); - - // Previous selections - if(isset($event_errors)) - { - $name = htmlspecialchars_uni($mybb->get_input('name')); - $description = htmlspecialchars_uni($mybb->get_input('description')); - $single_day = $mybb->get_input('single_day', MyBB::INPUT_INT); - $single_month[$mybb->get_input('single_month', MyBB::INPUT_INT)] = " selected=\"selected\""; - $single_year = $mybb->get_input('single_year', MyBB::INPUT_INT); - $start_day = $mybb->get_input('start_day', MyBB::INPUT_INT); - $start_month[$mybb->get_input('start_month', MyBB::INPUT_INT)] = " selected=\"selected\""; - $start_year = $mybb->get_input('start_year', MyBB::INPUT_INT); - $start_time = htmlspecialchars_uni($mybb->get_input('start_time')); - $end_day = $mybb->get_input('end_day', MyBB::INPUT_INT); - $end_month[$mybb->get_input('end_month', MyBB::INPUT_INT)] = " selected=\"selected\""; - $end_year = $mybb->get_input('end_year', MyBB::INPUT_INT); - $end_time = htmlspecialchars_uni($mybb->get_input('end_time')); - if($mybb->get_input('type') == "single") - { - $type_single = "checked=\"checked\""; - $type_ranged = ''; - $type = "single"; - } - else - { - $type_ranged = "checked=\"checked\""; - $type_single = ''; - $type = "ranged"; - } - if(!empty($mybb->input['repeats'])) - { - $repeats_sel[$mybb->get_input('repeats', MyBB::INPUT_INT)] = " selected=\"selected\""; - } - $repeats_1_days = $mybb->get_input('repeats_1_days', MyBB::INPUT_INT); - $repeats_3_weeks = $mybb->get_input('repeats_3_weeks', MyBB::INPUT_INT); - foreach($mybb->get_input('repeats_3_days', MyBB::INPUT_ARRAY) as $day => $val) - { - if($val != 1) - { - continue; - } - $day = (int)$day; - $repeats_3_days[$day] = " checked=\"checked\""; - } - $repeats_4_type = array(); - if($mybb->get_input('repeats_4_type', MyBB::INPUT_INT) == 1) - { - $repeats_4_type[1] = "checked=\"checked\""; - $repeats_4_type[2] = ''; - } - else - { - $repeats_4_type[2] = "checked=\"checked\""; - $repeats_4_type[1] = ''; - } - $repeats_4_day = $mybb->get_input('repeats_4_day', MyBB::INPUT_INT); - $repeats_4_months = $mybb->get_input('repeats_4_months', MyBB::INPUT_INT); - $repeats_4_occurance[$mybb->get_input('repeats_4_occurance')] = "selected=\"selected\""; - $repeats_4_weekday[$mybb->get_input('repeats_4_weekday', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_4_months2 = $mybb->get_input('repeats_4_months2', MyBB::INPUT_INT); - if($mybb->get_input('repeats_5_type', MyBB::INPUT_INT) == 1) - { - $repeats_5_type[1] = "checked=\"checked\""; - } - else - { - $repeats_5_type[2] = "checked=\"checked\""; - } - $repeats_5_day = $mybb->get_input('repeats_5_day', MyBB::INPUT_INT); - $repeats_5_month[$mybb->get_input('repeats_5_month', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_5_years = $mybb->get_input('repeats_5_years', MyBB::INPUT_INT); - $repeats_5_occurance[$mybb->get_input('repeats_5_occurance')] = "selected=\"selected\""; - $repeats_5_weekday[$mybb->get_input('repeats_5_weekday', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_5_month2[$mybb->get_input('repeats_5_month2', MyBB::INPUT_INT)] = "selected=\"selected\""; - $repeats_5_years2 = $mybb->get_input('repeats_5_years2', MyBB::INPUT_INT); - - if($mybb->get_input('private', MyBB::INPUT_INT) == 1) - { - $privatecheck = " checked=\"checked\""; - } - else - { - $privatecheck = ''; - } - - if($mybb->get_input('ignoretimezone', MyBB::INPUT_INT) == 1) - { - $ignore_timezone = "checked=\"checked\""; - } - else - { - $ignore_timezone = ''; - } - - $timezone = $mybb->get_input('timezone'); - } - else - { - $event_errors = ''; - $mybb->input['calendar'] = $event['cid']; - $name = htmlspecialchars_uni($event['name']); - $description = htmlspecialchars_uni($event['description']); - if($event['private'] == 1) - { - $privatecheck = " checked=\"checked\""; - } - else - { - $privatecheck = ''; - } - $start_date = explode("-", gmdate("j-n-Y", $event['starttime']+$event['timezone']*3600)); - $single_day = $start_date[0]; - $single_month[$start_date[1]] = " selected=\"selected\""; - $single_year = $start_date[2]; - $start_day = $start_date[0]; - $start_month[$start_date[1]] = " selected=\"selected\""; - $start_year = $start_date[2]; - if($event['usingtime']) - { - $start_time = gmdate($mybb->settings['timeformat'], $event['starttime']+$event['timezone']*3600); - } - else - { - $start_time = ''; - } - if($event['endtime']) - { - $end_date = explode("-", gmdate("j-n-Y", $event['endtime']+$event['timezone']*3600)); - $end_day = $end_date[0]; - $end_month[$end_date[1]] = " selected=\"selected\""; - $end_year = $end_date[2]; - if($event['usingtime']) - { - $end_time = gmdate($mybb->settings['timeformat'], $event['endtime']+$event['timezone']*3600); - } - else - { - $end_time = ''; - } - $type_ranged = "checked=\"checked\""; - $type_single = ''; - $type = "ranged"; - $repeats = my_unserialize($event['repeats']); - if($repeats['repeats'] >= 0) - { - $repeats_sel[$repeats['repeats']] = " selected=\"selected\""; - switch($repeats['repeats']) - { - case 1: - $repeats_1_days = $repeats['days']; - $repeats_3_weeks = 1; - $repeats_4_type[1] = "checked=\"checked\""; - $repeats_4_day = 1; - $repeats_4_months = 1; - $repeats_4_months2 = 1; - $repeats_5_type[1] = "checked=\"checked\""; - $repeats_5_day = 1; - $repeats_5_years = $repeats_5_years2 = 1; - break; - case 3: - $repeats_1_days = 1; - $repeats_3_weeks = $repeats['weeks']; - if(is_array($repeats['days'])) - { - foreach($repeats['days'] as $weekday) - { - $repeats_3_days[$weekday] = " checked=\"checked\""; - } - } - $repeats_4_type[1] = "checked=\"checked\""; - $repeats_4_day = 1; - $repeats_4_months = 1; - $repeats_4_months2 = 1; - $repeats_5_type[1] = "checked=\"checked\""; - $repeats_5_day = 1; - $repeats_5_years = $repeats_5_years2 = 1; - break; - case 4: - $repeats_1_days = 1; - $repeats_3_weeks = 1; - if($repeats['day']) - { - $repeats_4_type[1] = "checked=\"checked\""; - $repeats_4_day = $repeats['day']; - $repeats_4_months = $repeats_4_months2 = $repeats['months']; - } - else - { - $repeats_4_type[2] = "checked=\"checked\""; - $repeats_4_day = 1; - $repeats_4_months2 = $repeats_4_months = $repeats['months']; - $repeats_4_occurance[$repeats['occurance']] = "selected=\"selected\""; - $repeats_4_weekday[$repeats['weekday']] = "selected=\"selected\""; - } - $repeats_5_type[1] = "checked=\"checked\""; - $repeats_5_day = 1; - $repeats_5_years = $repeats_5_years2 = 1; - break; - case 5: - $repeats_1_days = 1; - $repeats_3_weeks = 1; - $repeats_4_type[1] = "checked=\"checked\""; - $repeats_4_day = 1; - $repeats_4_months = 1; - $repeats_4_months2 = 1; - if($repeats['day']) - { - $repeats_5_type[1] = "checked=\"checked\""; - $repeats_5_day = $repeats['day']; - $repeats_5_month[$repeats['month']] = $repeats_5_month2[$repeats['month']] = "selected=\"selected\""; - $repeats_5_years = $repeats_5_years2 = $repeats['years']; - } - else - { - $repeats_5_type[2] = "checked=\"checked\""; - $repeats_5_occurance[$repeats['occurance']] = "selected=\"selected\""; - $repeats_5_weekday[$repeats['weekday']] = "selected=\"selected\""; - $repeats_5_month[$repeats['month']] = $repeats_5_month2[$repeats['month']] = "selected=\"selected\""; - $repeats_5_years = $repeats_5_years2 = $repeats['years']; - } - break; - } - } - if($event['ignoretimezone']) - { - $timezone = 0; - $ignore_timezone = "checked=\"checked\""; - } - else - { - $timezone = $event['timezone']; - $ignore_timezone = ''; - } - } - else - { - $type_single = "checked=\"checked\""; - $type_ranged = $ignore_timezone = $repeats_1_days = $repeats_3_weeks = $repeats_4_day = $repeats_4_months = $repeats_4_months2 = $repeats_5_day = $repeats_5_years = $timezone = $end_time = ''; - $type = "single"; - // set some defaults if the user wants to make a ranged event - $end_day = $start_day; - $end_month = $start_month; - $end_year = $start_year; - } - } - - $single_years = $start_years = $end_years = ''; - - // Construct option list for years - for($year = my_date('Y'); $year < (my_date('Y') + 5); ++$year) - { - if($year == $single_year) - { - $selected = "selected=\"selected\""; - eval("\$single_years .= \"".$templates->get("calendar_year")."\";"); - } - else - { - $selected = ""; - eval("\$single_years .= \"".$templates->get("calendar_year")."\";"); - } - - if($year == $start_year) - { - $selected = "selected=\"selected\""; - eval("\$start_years .= \"".$templates->get("calendar_year")."\";"); - } - else - { - $selected = ""; - eval("\$start_years .= \"".$templates->get("calendar_year")."\";"); - } - - if($year == $end_year) - { - $selected = "selected=\"selected\""; - eval("\$end_years .= \"".$templates->get("calendar_year")."\";"); - } - else - { - $selected = ""; - eval("\$end_years .= \"".$templates->get("calendar_year")."\";"); - } - } - - $single_days = $start_days = $end_days = ''; - - // Construct option list for days - for($day = 1; $day <= 31; ++$day) - { - if($day == $single_day) - { - $selected = "selected=\"selected\""; - eval("\$single_days .= \"".$templates->get("calendar_day")."\";"); - } - else - { - $selected = ""; - eval("\$single_days .= \"".$templates->get("calendar_day")."\";"); - } - - if($day == $start_day) - { - $selected = "selected=\"selected\""; - eval("\$start_days .= \"".$templates->get("calendar_day")."\";"); - } - else - { - $selected = ""; - eval("\$start_days .= \"".$templates->get("calendar_day")."\";"); - } - - if($day == $end_day) - { - $selected = "selected=\"selected\""; - eval("\$end_days .= \"".$templates->get("calendar_day")."\";"); - } - else - { - $selected = ""; - eval("\$end_days .= \"".$templates->get("calendar_day")."\";"); - } - } - - $timezones = build_timezone_select("timezone", $timezone); - - $plugins->run_hooks("calendar_editevent_end"); - - eval("\$editevent = \"".$templates->get("calendar_editevent")."\";"); - output_page($editevent); -} - -// Move an event to another calendar -if($mybb->input['action'] == "move") -{ - $query = $db->simple_select("events", "*", "eid='{$mybb->input['eid']}'"); - $event = $db->fetch_array($query); - - if(!$event) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar or post events? - $calendar_permissions = get_calendar_permissions(); - if($calendar_permissions[$calendar['cid']]['canviewcalendar'] != 1) - { - error_no_permission(); - } - - if($calendar_permissions[$calendar['cid']]['canmoderateevents'] != 1) - { - error_no_permission(); - } - - $event['name'] = htmlspecialchars_uni($event['name']); - - add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); - add_breadcrumb($event['name'], get_event_link($event['eid'])); - add_breadcrumb($lang->nav_move_event); - - $plugins->run_hooks("calendar_move_start"); - - $calendar_select = $selected = ''; - - // Build calendar select - $query = $db->simple_select("calendars", "*", "", array("order_by" => "name", "order_dir" => "asc")); - while($calendar_option = $db->fetch_array($query)) - { - if($calendar_permissions[$calendar['cid']]['canviewcalendar'] == 1) - { - $calendar_option['name'] = htmlspecialchars_uni($calendar_option['name']); - eval("\$calendar_select .= \"".$templates->get("calendar_select")."\";"); - } - } - - $plugins->run_hooks("calendar_move_end"); - - eval("\$moveevent = \"".$templates->get("calendar_move")."\";"); - output_page($moveevent); -} - -// Actually move the event -if($mybb->input['action'] == "do_move" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $query = $db->simple_select("events", "*", "eid='{$mybb->input['eid']}'"); - $event = $db->fetch_array($query); - - if(!$event) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar? - $calendar_permissions = get_calendar_permissions(); - if($calendar_permissions[$calendar['cid']]['canviewcalendar'] != 1) - { - error_no_permission(); - } - - if($calendar_permissions[$calendar['cid']]['canmoderateevents'] != 1) - { - error_no_permission(); - } - - $query = $db->simple_select("calendars", "*", "cid='".$mybb->get_input('new_calendar', MyBB::INPUT_INT)."'"); - $new_calendar = $db->fetch_array($query); - - if(!$new_calendar) - { - error($lang->invalid_calendar); - } - - if($calendar_permissions[$mybb->input['new_calendar']]['canviewcalendar'] != 1) - { - error_no_permission(); - } - - $updated_event = array( - "cid" => $new_calendar['cid'] - ); - - $plugins->run_hooks("calendar_do_move_start"); - - $db->update_query("events", $updated_event, "eid='{$event['eid']}'"); - - $plugins->run_hooks("calendar_do_move_end"); - - redirect(get_event_link($event['eid']), $lang->redirect_eventmoved); -} - -// Approve an event -if($mybb->input['action'] == "approve") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $query = $db->simple_select("events", "*", "eid='{$mybb->input['eid']}'"); - $event = $db->fetch_array($query); - - if(!$event) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1) - { - error_no_permission(); - } - - if($calendar_permissions['canmoderateevents'] != 1) - { - error_no_permission(); - } - - $updated_event = array( - "visible" => 1 - ); - - $plugins->run_hooks("calendar_approve_start"); - - $db->update_query("events", $updated_event, "eid='{$event['eid']}'"); - - $plugins->run_hooks("calendar_approve_end"); - - redirect(get_event_link($event['eid']), $lang->redirect_eventapproved); -} - -// Unapprove an event -if($mybb->input['action'] == "unapprove") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $query = $db->simple_select("events", "*", "eid='{$mybb->input['eid']}'"); - $event = $db->fetch_array($query); - - if(!$event) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1) - { - error_no_permission(); - } - - if($calendar_permissions['canmoderateevents'] != 1) - { - error_no_permission(); - } - - $updated_event = array( - "visible" => 0 - ); - - $plugins->run_hooks("calendar_unapprove_start"); - - $db->update_query("events", $updated_event, "eid='{$event['eid']}'"); - - $plugins->run_hooks("calendar_unapprove_end"); - - redirect(get_event_link($event['eid']), $lang->redirect_eventunapproved); -} - -// Showing specific event -if($mybb->input['action'] == "event") -{ - $query = $db->query(" - SELECT u.*, e.* - FROM ".TABLE_PREFIX."events e - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=e.uid) - WHERE e.eid='{$mybb->input['eid']}' - "); - $event = $db->fetch_array($query); - - if(!$event || ($event['private'] == 1 && $event['uid'] != $mybb->user['uid'])) - { - error($lang->error_invalidevent); - } - - $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); - $calendar = $db->fetch_array($query); - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1 || ($calendar_permissions['canmoderateevents'] != 1 && $event['visible'] == 0)) - { - error_no_permission(); - } - - $event['name'] = htmlspecialchars_uni($event['name']); - - add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); - add_breadcrumb($event['name'], get_event_link($event['eid'])); - - $plugins->run_hooks("calendar_event_start"); - - $event_parser_options = array( - "allow_html" => $calendar['allowhtml'], - "allow_mycode" => $calendar['allowmycode'], - "allow_smilies" => $calendar['allowsmilies'], - "allow_imgcode" => $calendar['allowimgcode'], - "allow_videocode" => $calendar['allowvideocode'] - ); - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $event_parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $event_parser_options['allow_videocode'] = 0; - } - - $event['description'] = $parser->parse_message($event['description'], $event_parser_options); - - // Get the usergroup - if($event['username']) - { - if(!$event['displaygroup']) - { - $event['displaygroup'] = $event['usergroup']; - } - $user_usergroup = $groupscache[$event['displaygroup']]; - } - else - { - $user_usergroup = $groupscache[1]; - } - - $titles_cache = $cache->read("usertitles"); - - // Event made by registered user - if($event['uid'] > 0 && $event['username']) - { - $event['username'] = htmlspecialchars_uni($event['username']); - $event['profilelink'] = build_profile_link(format_name($event['username'], $event['usergroup'], $event['displaygroup']), $event['uid']); - - if(trim($event['usertitle']) != "") - { - // Do nothing, no need for an extra variable.. - } - elseif($user_usergroup['usertitle'] != "") - { - $event['usertitle'] = $user_usergroup['usertitle']; - } - elseif(is_array($titles_cache) && !$user_usergroup['usertitle']) - { - reset($titles_cache); - foreach($titles_cache as $title) - { - if($event['postnum'] >= $title['posts']) - { - $event['usertitle'] = $title['title']; - $event['stars'] = $title['stars']; - $event['starimage'] = $title['starimage']; - break; - } - } - } - - if($user_usergroup['stars']) - { - $event['stars'] = $user_usergroup['stars']; - } - - if(empty($event['starimage'])) - { - $event['starimage'] = $user_usergroup['starimage']; - } - $event['starimage'] = str_replace("{theme}", $theme['imgdir'], $event['starimage']); - - $event['userstars'] = ''; - for($i = 0; $i < $event['stars']; ++$i) - { - eval("\$event['userstars'] .= \"".$templates->get("calendar_event_userstar", 1, 0)."\";"); - } - - if($event['userstars'] && $event['starimage'] && $event['stars']) - { - $event['userstars'] .= "
    "; - } - } - // Created by a guest or an unknown user - else - { - if(!$event['username']) - { - $event['username'] = $lang->guest; - } - - $event['username'] = htmlspecialchars_uni($event['username']); - $event['profilelink'] = format_name($event['username'], 1); - - if($user_usergroup['usertitle']) - { - $event['usertitle'] = $user_usergroup['usertitle']; - } - else - { - $event['usertitle'] = $lang->guest; - } - $event['userstars'] = ''; - } - - $event['usertitle'] = htmlspecialchars_uni($event['usertitle']); - - if($event['ignoretimezone'] == 0) - { - $offset = (float)$event['timezone']; - } - else - { - $offset = (float)$mybb->user['timezone']; - } - - $event['starttime_user'] = $event['starttime']+$offset*3600; - - // Events over more than one day - $time_period = ''; - if($event['endtime'] > 0 && $event['endtime'] != $event['starttime']) - { - $event['endtime_user'] = $event['endtime']+$offset*3600; - $start_day = adodb_gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user'])); - $end_day = adodb_gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user'])); - $start_time = gmdate("Hi", $event['starttime_user']); - $end_time = gmdate("Hi", $event['endtime_user']); - - $event['repeats'] = my_unserialize($event['repeats']); - - // Event only runs over one day - if($start_day == $end_day && $event['repeats']['repeats'] == 0) - { - $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); - // Event runs all day - if($start_time != 0000 && $end_time != 2359) - { - $time_period .= $lang->comma.gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); - } - else - { - $time_period .= $lang->comma.$lang->all_day; - } - } - else - { - $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']).", ".gmdate($mybb->settings['timeformat'], $event['starttime_user']); - $time_period .= " - "; - $time_period .= gmdate($mybb->settings['dateformat'], $event['endtime_user']).", ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); - } - } - else - { - $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); - } - - $repeats = fetch_friendly_repetition($event); - if($repeats) - { - eval("\$repeats = \"".$templates->get("calendar_repeats")."\";"); - } - - $event_class = ''; - if($calendar_permissions['canmoderateevents'] == 1 || ($mybb->user['uid'] > 0 && $mybb->user['uid'] == $event['uid'])) - { - eval("\$edit_event = \"".$templates->get("calendar_event_editbutton")."\";"); - if($calendar_permissions['canmoderateevents'] == 1) - { - if($event['visible'] == 1) - { - $approve = $lang->unapprove_event; - $approve_value = "unapprove"; - } - else - { - $approve = $lang->approve_event; - $approve_value = "approve"; - } - eval("\$moderator_options = \"".$templates->get("calendar_event_modoptions")."\";"); - } - - if($event['visible'] == 0) - { - $event_class = " trow_shaded"; - } - } - - $month = my_date("n"); - - $yearsel = ''; - for($year_sel = my_date("Y"); $year_sel < (my_date("Y") + 5); ++$year_sel) - { - eval("\$yearsel .= \"".$templates->get("calendar_year_sel")."\";"); - } - - $addevent = ''; - if($mybb->usergroup['canaddevents'] == 1) - { - eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); - } - - // Now output the page - $plugins->run_hooks("calendar_event_end"); - eval("\$event = \"".$templates->get("calendar_event")."\";"); - output_page($event); -} - -// View all events on a specific day. -if($mybb->input['action'] == "dayview") -{ - // Showing a particular calendar - if($mybb->input['calendar']) - { - $query = $db->simple_select("calendars", "*", "cid='{$mybb->input['calendar']}'"); - $calendar = $db->fetch_array($query); - } - // Showing the default calendar - else - { - $query = $db->simple_select("calendars", "*", "disporder='1'"); - $calendar = $db->fetch_array($query); - } - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1) - { - error_no_permission(); - } - - // Incoming year? - if(isset($mybb->input['year']) && $mybb->get_input('year', MyBB::INPUT_INT) <= my_date("Y")+5) - { - $year = $mybb->get_input('year', MyBB::INPUT_INT); - } - else - { - $year = my_date("Y"); - } - - // Then the month - $mybb->input['month'] = $mybb->get_input('month', MyBB::INPUT_INT); - if($mybb->input['month'] >= 1 && $mybb->input['month'] <= 12) - { - $month = $mybb->input['month']; - } - else - { - $month = my_date("n"); - } - - // And day? - $mybb->input['day'] = $mybb->get_input('day', MyBB::INPUT_INT); - if($mybb->input['day'] && $mybb->input['day'] <= gmdate("t", adodb_gmmktime(0, 0, 0, $month, 1, $year))) - { - $day = $mybb->input['day']; - } - else - { - $day = my_date("j"); - } - - add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); - add_breadcrumb("$day $monthnames[$month] $year", get_calendar_link($calendar['cid'], $year, $month, $day)); - - $plugins->run_hooks("calendar_dayview_start"); - - // Load Birthdays for this day - $birthday_list = $birthdays = ''; - if($calendar['showbirthdays']) - { - $birthdays2 = get_birthdays($month, $day); - $bdayhidden = 0; - if(is_array($birthdays2)) - { - foreach($birthdays2 as $birthday) - { - if($birthday['birthdayprivacy'] == 'all') - { - $bday = explode("-", $birthday['birthday']); - if($bday[2] && $bday[2] < $year) - { - $age = $year - $bday[2]; - $age = " (".$lang->sprintf($lang->years_old, $age).")"; - } - else - { - $age = ''; - } - - $birthday['username'] = format_name(htmlspecialchars_uni($birthday['username']), $birthday['usergroup'], $birthday['displaygroup']); - $birthday['profilelink'] = build_profile_link($birthday['username'], $birthday['uid']); - eval("\$birthday_list .= \"".$templates->get("calendar_dayview_birthdays_bday", 1, 0)."\";"); - $comma = $lang->comma; - } - else - { - ++$bdayhidden; - } - } - } - if($bdayhidden > 0) - { - if($birthday_list) - { - $birthday_list .= " - "; - } - $birthday_list .= "{$bdayhidden} {$lang->birthdayhidden}"; - } - if($birthday_list) - { - $bdaydate = my_date($mybb->settings['dateformat'], adodb_gmmktime(0, 0, 0, $month, $day, $year), 0, 0); - $lang->birthdays_on_day = $lang->sprintf($lang->birthdays_on_day, $bdaydate); - eval("\$birthdays = \"".$templates->get("calendar_dayview_birthdays", 1, 0)."\";"); - } - } - - // So now we fetch events for this month - $start_timestamp = adodb_gmmktime(0, 0, 0, $month, $day, $year); - $end_timestamp = adodb_gmmktime(23, 59, 59, $month, $day, $year); - - $events_cache = get_events($calendar, $start_timestamp, $end_timestamp, $calendar_permissions['canmoderateevents']); - - $events = ''; - if(isset($events_cache["$day-$month-$year"]) && is_array($events_cache["$day-$month-$year"])) - { - foreach($events_cache["$day-$month-$year"] as $event) - { - $event['name'] = htmlspecialchars_uni($event['name']); - - $event_parser_options = array( - "allow_html" => $calendar['allowhtml'], - "allow_mycode" => $calendar['allowmycode'], - "allow_smilies" => $calendar['allowsmilies'], - "allow_imgcode" => $calendar['allowimgcode'], - "allow_videocode" => $calendar['allowvideocode'] - ); - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $event_parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $event_parser_options['allow_videocode'] = 0; - } - - $event['description'] = $parser->parse_message($event['description'], $event_parser_options); - - // Get the usergroup - if($event['username']) - { - if(!$event['displaygroup']) - { - $event['displaygroup'] = $event['usergroup']; - } - $user_usergroup = $groupscache[$event['displaygroup']]; - } - else - { - $user_usergroup = $groupscache[1]; - } - - $titles_cache = $cache->read("usertitles"); - - // Event made by registered user - if($event['uid'] > 0 && $event['username']) - { - $event['username'] = htmlspecialchars_uni($event['username']); - $event['profilelink'] = build_profile_link(format_name($event['username'], $event['usergroup'], $event['displaygroup']), $event['uid']); - - if(trim($event['usertitle']) != "") - { - // Do nothing, no need for an extra variable.. - } - elseif($user_usergroup['usertitle'] != "") - { - $event['usertitle'] = $user_usergroup['usertitle']; - } - elseif(is_array($titles_cache) && !$user_usergroup['usertitle']) - { - reset($titles_cache); - foreach($titles_cache as $title) - { - if($event['postnum'] >= $title['posts']) - { - $event['usertitle'] = $title['title']; - $event['stars'] = $title['stars']; - $event['starimage'] = $title['starimage']; - break; - } - } - } - - if($user_usergroup['stars']) - { - $event['stars'] = $user_usergroup['stars']; - } - - if(empty($event['starimage'])) - { - $event['starimage'] = $user_usergroup['starimage']; - } - - $event['userstars'] = ''; - for($i = 0; $i < $event['stars']; ++$i) - { - eval("\$event['userstars'] .= \"".$templates->get("calendar_event_userstar", 1, 0)."\";"); - } - - if($event['userstars'] && $event['starimage'] && $event['stars']) - { - $event['userstars'] .= "
    "; - } - } - // Created by a guest or an unknown user - else - { - if(!$event['username']) - { - $event['username'] = $lang->guest; - } - - $event['username'] = htmlspecialchars_uni($event['username']); - $event['profilelink'] = format_name($event['username'], 1); - - if($user_usergroup['usertitle']) - { - $event['usertitle'] = $user_usergroup['usertitle']; - } - else - { - $event['usertitle'] = $lang->guest; - } - $event['userstars'] = ''; - } - - $event['usertitle'] = htmlspecialchars_uni($event['usertitle']); - - if($event['ignoretimezone'] == 0) - { - $offset = (float)$event['timezone']; - } - else - { - $offset = (float)$mybb->user['timezone']; - } - - $event['starttime_user'] = $event['starttime']+$offset*3600; - - // Events over more than one day - $time_period = ''; - if($event['endtime'] > 0 && $event['endtime'] != $event['starttime']) - { - $event['endtime_user'] = $event['endtime']+$offset*3600; - $start_day = adodb_gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user'])); - $end_day = adodb_gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user'])); - $start_time = gmdate("Hi", $event['starttime_user']); - $end_time = gmdate("Hi", $event['endtime_user']); - - // Event only runs over one day - if($start_day == $end_day && $event['repeats']['repeats'] == 0) - { - $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); - // Event runs all day - if($start_time != 0000 && $end_time != 2359) - { - $time_period .= $lang->comma.gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); - } - else - { - $time_period .= $lang->comma.$lang->all_day; - } - } - else - { - $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']).", ".gmdate($mybb->settings['timeformat'], $event['starttime_user']); - $time_period .= " - "; - $time_period .= gmdate($mybb->settings['dateformat'], $event['endtime_user']).", ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); - } - } - else - { - $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); - } - - $repeats = fetch_friendly_repetition($event); - if($repeats) - { - eval("\$repeats = \"".$templates->get("calendar_repeats")."\";"); - } - - $edit_event = $moderator_options = $event_class = ""; - if($calendar_permissions['canmoderateevents'] == 1 || ($mybb->user['uid'] > 0 && $mybb->user['uid'] == $event['uid'])) - { - eval("\$edit_event = \"".$templates->get("calendar_event_editbutton")."\";"); - if($calendar_permissions['canmoderateevents'] == 1) - { - if($event['visible'] == 1) - { - $approve = $lang->unapprove_event; - $approve_value = "unapprove"; - } - else - { - $approve = $lang->approve_event; - $approve_value = "approve"; - } - eval("\$moderator_options = \"".$templates->get("calendar_event_modoptions")."\";"); - } - if($event['visible'] == 0) - { - $event_class = " trow_shaded"; - } - } - eval("\$events .= \"".$templates->get("calendar_dayview_event")."\";"); - } - } - - $yearsel = ''; - for($year_sel = my_date("Y"); $year_sel < (my_date("Y") + 5); ++$year_sel) - { - eval("\$yearsel .= \"".$templates->get("calendar_year_sel")."\";"); - } - - $addevent = ''; - if($mybb->usergroup['canaddevents'] == 1) - { - eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); - } - - if(!$events) - { - $lang->no_events = $lang->sprintf($lang->no_events, $calendar['cid'], $day, $month, $year); - eval("\$events = \"".$templates->get("calendar_dayview_noevents")."\";"); - } - - // Now output the page - $plugins->run_hooks("calendar_dayview_end"); - - eval("\$day_view = \"".$templates->get("calendar_dayview")."\";"); - output_page($day_view); -} - -// View all events for a specific week -if($mybb->input['action'] == "weekview") -{ - // Showing a particular calendar - if($mybb->input['calendar']) - { - $query = $db->simple_select("calendars", "*", "cid='{$mybb->input['calendar']}'"); - $calendar = $db->fetch_array($query); - } - // Showing the default calendar - else - { - $query = $db->simple_select("calendars", "*", "disporder='1'"); - $calendar = $db->fetch_array($query); - } - - // Invalid calendar? - if(!$calendar) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - if($calendar_permissions['canviewcalendar'] != 1) - { - error_no_permission(); - } - - $weekdays = fetch_weekday_structure($calendar['startofweek']); - - $yearsel = ''; - for($year_sel = my_date("Y"); $year_sel < (my_date("Y") + 5); ++$year_sel) - { - eval("\$yearsel .= \"".$templates->get("calendar_year_sel")."\";"); - } - - // No incoming week, show THIS week - if(empty($mybb->input['week'])) - { - list($day, $month, $year) = explode("-", my_date("j-n-Y")); - $php_weekday = gmdate("w", adodb_gmmktime(0, 0, 0, $month, $day, $year)); - $my_weekday = array_search($php_weekday, $weekdays); - // So now we have the start day of this week to show - $start_day = $day-$my_weekday; - $mybb->input['week'] = adodb_gmmktime(0, 0, 0, $month, $start_day, $year); - } - else - { - $mybb->input['week'] = (int)str_replace("n", "-", $mybb->get_input('week')); - // No negative years please ;) - if($mybb->input['week'] < -62167219200) - { - $mybb->input['week'] = -62167219200; - } - } - - // This is where we've come from and where we're headed - $week_from = explode("-", gmdate("j-n-Y", $mybb->input['week'])); - $week_from_one = $week_from[1]; - $friendly_week_from = gmdate($mybb->settings['dateformat'], $mybb->input['week']); - $week_to_stamp = adodb_gmmktime(0, 0, 0, $week_from[1], $week_from[0]+6, $week_from[2]); - $week_to = explode("-", gmdate("j-n-Y-t", $week_to_stamp)); - $friendly_week_to = gmdate($mybb->settings['dateformat'], $week_to_stamp); - - add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); - add_breadcrumb("{$monthnames[$week_from[1]]} {$week_from[2]}", get_calendar_link($calendar['cid'], $week_from[2], $week_from[1])); - add_breadcrumb($lang->weekly_overview); - - $plugins->run_hooks("calendar_weekview_start"); - - // Establish if we have a month ending in this week - if($week_from[1] != $week_to[1]) - { - $different_months = true; - $week_months = array(array($week_from[1], $week_from[2]), array($week_to[1], $week_to[2])); - $bday_months = array($week_from[1], $week_to[1]); - } - else - { - $week_months = array(array($week_from[1], $week_from[2])); - $bday_months = array($week_from[1]); - } - - // Load Birthdays for this month - if($calendar['showbirthdays'] == 1) - { - $birthdays = get_birthdays($bday_months); - } - - // We load events for the entire month date range - for our mini calendars too - $events_from = adodb_gmmktime(0, 0, 0, $week_from[1], 1, $week_from[2]); - $events_to = adodb_gmmktime(0, 0, 0, $week_to[1], $week_to[3], $week_to[2]); - - $events_cache = get_events($calendar, $events_from, $events_to, $calendar_permissions['canmoderateevents']); - - $today = my_date("dnY"); - - $next_week = $mybb->input['week'] + 604800; - $next_link = get_calendar_week_link($calendar['cid'], $next_week); - $prev_week = $mybb->input['week'] - 604800; - $prev_link = get_calendar_week_link($calendar['cid'], $prev_week); - - $weekday_date = $mybb->input['week']; - - while($weekday_date <= $week_to_stamp) - { - $weekday = gmdate("w", $weekday_date); - $weekday_name = fetch_weekday_name($weekday); - $weekday_month = gmdate("n", $weekday_date); - $weekday_year = gmdate("Y", $weekday_date); - $weekday_day = gmdate("j", $weekday_date); - - // Special shading for today - $day_shaded = ''; - if(gmdate("dnY", $weekday_date) == $today) - { - $day_shaded = ' trow_shaded'; - } - - $day_events = ''; - - // Any events on this specific day? - if(is_array($events_cache) && array_key_exists("{$weekday_day}-{$weekday_month}-{$weekday_year}", $events_cache)) - { - foreach($events_cache["$weekday_day-$weekday_month-$weekday_year"] as $event) - { - $event['eventlink'] = get_event_link($event['eid']); - $event['name'] = htmlspecialchars_uni($event['name']); - $event['fullname'] = $event['name']; - if(my_strlen($event['name']) > 50) - { - $event['name'] = my_substr($event['name'], 0, 50) . "..."; - } - // Events over more than one day - $time_period = ''; - if($event['endtime'] > 0 && $event['endtime'] != $event['starttime']) - { - $start_day = adodb_gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user'])); - $end_day = adodb_gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user'])); - $start_time = gmdate("Hi", $event['starttime_user']); - $end_time = gmdate("Hi", $event['endtime_user']); - // Event only runs over one day - if($start_day == $end_day || $event['repeats'] > 0) - { - // Event runs all day - if($start_time == 0000 && $end_time == 2359) - { - $time_period = $lang->all_day; - } - else - { - $time_period = gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); - } - } - // Event starts on this day - else if($start_day == $weekday_date) - { - // Event runs all day - if($start_time == 0000) - { - $time_period = $lang->all_day; - } - else - { - $time_period = $lang->starts.gmdate($mybb->settings['timeformat'], $event['starttime_user']); - } - } - // Event finishes on this day - else if($end_day == $weekday_date) - { - // Event runs all day - if($end_time == 2359) - { - $time_period = $lang->all_day; - } - else - { - $time_period = $lang->finishes.gmdate($mybb->settings['timeformat'], $event['endtime_user']); - } - } - // Event is in the middle - else - { - $time_period = $lang->all_day; - } - } - $event_time = ''; - if($time_period) - { - eval("\$event_time = \"".$templates->get("calendar_weekview_day_event_time")."\";"); - } - if($event['private'] == 1) - { - $event_class = " private_event"; - } - else - { - $event_class = " public_event"; - } - if($event['visible'] == 0) - { - $event_class .= " trow_shaded"; - } - eval("\$day_events .= \"".$templates->get("calendar_weekview_day_event")."\";"); - } - } - - // Birthdays on this day? - $day_birthdays = $calendar_link = $birthday_lang = ''; - if($calendar['showbirthdays'] && is_array($birthdays) && array_key_exists("{$weekday_day}-{$weekday_month}", $birthdays)) - { - $bday_count = count($birthdays["$weekday_day-$weekday_month"]); - if($bday_count > 1) - { - $birthday_lang = $lang->birthdays; - } - else - { - $birthday_lang = $lang->birthday; - } - - $calendar_link = get_calendar_link($calendar['cid'], $weekday_year, $weekday_month, $weekday_day); - eval("\$day_birthdays = \"".$templates->get("calendar_weekview_day_birthdays")."\";"); - } - - $day_link = get_calendar_link($calendar['cid'], $weekday_year, $weekday_month, $weekday_day); - if(!isset($day_bits[$weekday_month])) - { - $day_bits[$weekday_month] = ''; - } - eval("\$day_bits[$weekday_month] .= \"".$templates->get("calendar_weekview_day")."\";"); - $day_events = $day_birthdays = ""; - $weekday_date = adodb_gmmktime(0, 0, 0, $weekday_month, $weekday_day+1, $weekday_year); - } - - // Now we build our month headers - $mini_calendars = $weekday_bits = ''; - foreach($week_months as $month) - { - $weekday_month = $monthnames[$month[0]]; - $weekday_year = $month[1]; - - // Fetch mini calendar for each month in this week - $mini_calendars .= build_mini_calendar($calendar, $month[0], $weekday_year, $events_cache)."
    "; - - // Fetch out the days for this month - $days = $day_bits[$month[0]]; - - eval("\$weekday_bits .= \"".$templates->get("calendar_weekview_month")."\";"); - } - - $addevent = ''; - if($mybb->usergroup['canaddevents'] == 1) - { - eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); - } - - // Now output the page - $plugins->run_hooks("calendar_weekview_end"); - - eval("\$weekview = \"".$templates->get("calendar_weekview")."\";"); - output_page($weekview); -} - -// Showing a calendar -if(!$mybb->input['action']) -{ - // Showing a particular calendar - if($mybb->input['calendar']) - { - $query = $db->simple_select("calendars", "*", "cid='{$mybb->input['calendar']}'"); - $calendar = $db->fetch_array($query); - } - // Showing the default calendar - else - { - $query = $db->simple_select("calendars", "*", "", array('order_by' => 'disporder', 'limit' => 1)); - $calendar = $db->fetch_array($query); - } - - // Invalid calendar? - if(!$calendar['cid']) - { - error($lang->invalid_calendar); - } - - // Do we have permission to view this calendar? - $calendar_permissions = get_calendar_permissions($calendar['cid']); - - if($calendar_permissions['canviewcalendar'] != 1) - { - error_no_permission(); - } - - $plugins->run_hooks("calendar_main_view"); - - // Incoming year? - if(isset($mybb->input['year']) && $mybb->get_input('year', MyBB::INPUT_INT) <= my_date("Y")+5) - { - $year = $mybb->get_input('year', MyBB::INPUT_INT); - } - else - { - $year = my_date("Y"); - } - - // Then the month - $mybb->input['month'] = $mybb->get_input('month', MyBB::INPUT_INT); - if($mybb->input['month'] >= 1 && $mybb->input['month'] <= 12) - { - $month = $mybb->input['month']; - } - else - { - $month = my_date("n"); - } - - add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); - add_breadcrumb("$monthnames[$month] $year", get_calendar_link($calendar['cid'], $year, $month)); - - $next_month = get_next_month($month, $year); - $prev_month = get_prev_month($month, $year); - - $prev_link = get_calendar_link($calendar['cid'], $prev_month['year'], $prev_month['month']); - $next_link = get_calendar_link($calendar['cid'], $next_month['year'], $next_month['month']); - - // Start constructing the calendar - - $weekdays = fetch_weekday_structure($calendar['startofweek']); - - $month_start_weekday = gmdate("w", adodb_gmmktime(0, 0, 0, $month, $calendar['startofweek']+1, $year)); - - $prev_month_days = gmdate("t", adodb_gmmktime(0, 0, 0, $prev_month['month'], 1, $prev_month['year'])); - - // This is if we have days in the previous month to show - if($month_start_weekday != $weekdays[0] || $calendar['startofweek'] != 0) - { - $prev_days = $day = gmdate("t", adodb_gmmktime(0, 0, 0, $prev_month['month'], 1, $prev_month['year'])); - $day -= array_search(($month_start_weekday), $weekdays); - $day += $calendar['startofweek']+1; - if($day > $prev_month_days+1) - { - // Go one week back - $day -= 7; - } - $calendar_month = $prev_month['month']; - $calendar_year = $prev_month['year']; - } - else - { - $day = $calendar['startofweek']+1; - $calendar_month = $month; - $calendar_year = $year; - } - - // So now we fetch events for this month (nb, cache events for past month, current month and next month for mini calendars too) - $start_timestamp = adodb_gmmktime(0, 0, 0, $calendar_month, $day, $calendar_year); - $num_days = gmdate("t", adodb_gmmktime(0, 0, 0, $month, 1, $year)); - - $month_end_weekday = gmdate("w", adodb_gmmktime(0, 0, 0, $month, $num_days, $year)); - $next_days = 6-$month_end_weekday+$calendar['startofweek']; - - // More than a week? Go one week back - if($next_days >= 7) - { - $next_days -= 7; - } - if($next_days > 0) - { - $end_timestamp = adodb_gmmktime(23, 59, 59, $next_month['month'], $next_days, $next_month['year']); - } - else - { - // We don't need days from the next month - $end_timestamp = adodb_gmmktime(23, 59, 59, $month, $num_days, $year); - } - - $events_cache = get_events($calendar, $start_timestamp, $end_timestamp, $calendar_permissions['canmoderateevents']); - - // Fetch birthdays - if($calendar['showbirthdays']) - { - $bday_months = array($month, $prev_month['month'], $next_month['month']); - $birthdays = get_birthdays($bday_months); - } - - $today = my_date("dnY"); - $weekday_headers = ''; - - // Build weekday headers - foreach($weekdays as $weekday) - { - $weekday_name = fetch_weekday_name($weekday); - eval("\$weekday_headers .= \"".$templates->get("calendar_weekdayheader")."\";"); - } - - $in_month = 0; - $day_bits = $calendar_rows = ''; - for($row = 0; $row < 6; ++$row) // Iterate weeks (each week gets a row) - { - foreach($weekdays as $weekday_id => $weekday) - { - // Current month always starts on 1st row - if($row == 0 && $day == $calendar['startofweek']+1) - { - $in_month = 1; - $calendar_month = $month; - $calendar_year = $year; - } - else if($calendar_month == $prev_month['month'] && $day > $prev_month_days) - { - $day = 1; - $in_month = 1; - $calendar_month = $month; - $calendar_year = $year; - } - else if($day > $num_days && $calendar_month != $prev_month['month']) - { - $in_month = 0; - $calendar_month = $next_month['month']; - $calendar_year = $next_month['year']; - $day = 1; - if($calendar_month == $month) - { - $in_month = 1; - } - } - - if($weekday_id == 0) - { - $week_stamp = adodb_gmmktime(0, 0, 0, $calendar_month, $day, $calendar_year); - $week_link = get_calendar_week_link($calendar['cid'], $week_stamp); - } - - if($weekday_id == 0 && $calendar_month == $next_month['month']) - { - break; - } - - // Any events on this specific day? - $day_events = $event_lang = ''; - if(is_array($events_cache) && array_key_exists("{$day}-{$calendar_month}-{$calendar_year}", $events_cache)) - { - $total_events = count($events_cache["$day-$calendar_month-$calendar_year"]); - if($total_events > $calendar['eventlimit'] && $calendar['eventlimit'] != 0) - { - if($total_events > 1) - { - $event_lang = $lang->events; - } - else - { - $event_lang = $lang->event; - } - - $calendar['link'] = get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day); - eval("\$day_events = \"".$templates->get("calendar_weekrow_day_events")."\";"); - } - else - { - foreach($events_cache["$day-$calendar_month-$calendar_year"] as $event) - { - $event['eventlink'] = get_event_link($event['eid']); - $event['fullname'] = htmlspecialchars_uni($event['name']); - if(my_strlen($event['name']) > 15) - { - $event['name'] = my_substr($event['name'], 0, 15) . "..."; - } - $event['name'] = htmlspecialchars_uni($event['name']); - if($event['private'] == 1) - { - $event_class = " private_event"; - } - else - { - $event_class = " public_event"; - } - if($event['visible'] == 0) - { - $event_class .= " trow_shaded"; - } - eval("\$day_events .= \"".$templates->get("calendar_eventbit")."\";"); - } - } - } - - // Birthdays on this day? - $day_birthdays = $birthday_lang = ''; - if($calendar['showbirthdays'] && is_array($birthdays) && array_key_exists("$day-$calendar_month", $birthdays)) - { - $bday_count = count($birthdays["$day-$calendar_month"]); - if($bday_count > 1) - { - $birthday_lang = $lang->birthdays; - } - else - { - $birthday_lang = $lang->birthday; - } - - $calendar['link'] = get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day); - eval("\$day_birthdays = \"".$templates->get("calendar_weekrow_day_birthdays")."\";"); - } - - $day_link = get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day); - - // Is the current day - if($day.$calendar_month.$year == $today && $month == $calendar_month) - { - $day_class = "trow_sep"; - } - // Not in this month - else if($in_month == 0) - { - $day_class = "trow1"; - } - // Just a normal day in this month - else - { - $day_class = "trow2"; - } - eval("\$day_bits .= \"".$templates->get("calendar_weekrow_day")."\";"); - $day_birthdays = $day_events = ""; - ++$day; - } - if($day_bits) - { - eval("\$calendar_rows .= \"".$templates->get("calendar_weekrow")."\";"); - } - $day_bits = ""; - } - - $yearsel = ''; - for($year_sel = my_date("Y"); $year_sel < (my_date("Y") + 5); ++$year_sel) - { - eval("\$yearsel .= \"".$templates->get("calendar_year_sel")."\";"); - } - - $addevent = ''; - if($mybb->usergroup['canaddevents'] == 1) - { - eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); - } - - $plugins->run_hooks("calendar_end"); - - eval("\$calendar = \"".$templates->get("calendar")."\";"); - output_page($calendar); -} diff --git a/html/forums/captcha.php b/html/forums/captcha.php deleted file mode 100644 index 5ae4ec4..0000000 --- a/html/forums/captcha.php +++ /dev/null @@ -1,311 +0,0 @@ -input['imagehash'] = $mybb->get_input('imagehash'); -if($mybb->input['imagehash']) -{ - $query = $db->simple_select("captcha", "*", "imagehash='".$db->escape_string($mybb->get_input('imagehash'))."' AND used=0", array("limit" => 1)); - $regimage = $db->fetch_array($query); - if(!$regimage) - { - exit; - } - // Mark captcha as used - $db->update_query('captcha', array('used' => 1), "imagehash='".$db->escape_string($regimage['imagehash'])."'"); - $imagestring = $regimage['imagestring']; -} -else -{ - exit; -} - -$ttf_fonts = array(); - -// We have support for true-type fonts (FreeType 2) -if(function_exists("imagefttext")) -{ - // Get a list of the files in the 'catpcha_fonts' directory - $ttfdir = @opendir(MYBB_ROOT."inc/captcha_fonts"); - if($ttfdir !== false) - { - while(($file = readdir($ttfdir)) !== false) - { - // If this file is a ttf file, add it to the list - if(is_file(MYBB_ROOT."inc/captcha_fonts/".$file) && get_extension($file) == "ttf") - { - $ttf_fonts[] = MYBB_ROOT."inc/captcha_fonts/".$file; - } - } - closedir($ttfdir); - } -} - -// Have one or more TTF fonts in our array, we can use TTF captha's -if(count($ttf_fonts) > 0) -{ - $use_ttf = 1; -} -else -{ - $use_ttf = 0; -} - -// Check for GD >= 2, create base image -if(gd_version() >= 2) -{ - $im = imagecreatetruecolor($img_width, $img_height); -} -else -{ - $im = imagecreate($img_width, $img_height); -} - -// No GD support, die. -if(!$im) -{ - die("No GD support."); -} - -// Fill the background with white -$bg_color = imagecolorallocate($im, 255, 255, 255); -imagefill($im, 0, 0, $bg_color); - -// Draw random circles, squares or lines? -$to_draw = rand(0, 2); -if($to_draw == 1) -{ - draw_circles($im); -} -else if($to_draw == 2) -{ - draw_squares($im); -} -else -{ - draw_lines($im); -} - -// Draw dots on the image -draw_dots($im); - -// Write the image string to the image -draw_string($im, $imagestring); - -// Draw a nice border around the image -$border_color = imagecolorallocate($im, 0, 0, 0); -imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color); - -// Output the image -header("Content-type: image/png"); -imagepng($im); -imagedestroy($im); - -/** - * Draws a random number of lines on the image. - * - * @param resource $im The image. - */ -function draw_lines(&$im) -{ - global $img_width, $img_height; - - for($i = 10; $i < $img_width; $i += 10) - { - $color = imagecolorallocate($im, rand(150, 255), rand(150, 255), rand(150, 255)); - imageline($im, $i, 0, $i, $img_height, $color); - } - for($i = 10; $i < $img_height; $i += 10) - { - $color = imagecolorallocate($im, rand(150, 255), rand(150, 255), rand(150, 255)); - imageline($im, 0, $i, $img_width, $i, $color); - } -} - -/** - * Draws a random number of circles on the image. - * - * @param resource $im The image. - */ -function draw_circles(&$im) -{ - global $img_width, $img_height; - - $circles = $img_width*$img_height / 100; - for($i = 0; $i <= $circles; ++$i) - { - $color = imagecolorallocate($im, rand(180, 255), rand(180, 255), rand(180, 255)); - $pos_x = rand(1, $img_width); - $pos_y = rand(1, $img_height); - $circ_width = ceil(rand(1, $img_width)/2); - $circ_height = rand(1, $img_height); - imagearc($im, $pos_x, $pos_y, $circ_width, $circ_height, 0, rand(200, 360), $color); - } -} - -/** - * Draws a random number of dots on the image. - * - * @param resource $im The image. - */ -function draw_dots(&$im) -{ - global $img_width, $img_height; - - $dot_count = $img_width*$img_height/5; - for($i = 0; $i <= $dot_count; ++$i) - { - $color = imagecolorallocate($im, rand(200, 255), rand(200, 255), rand(200, 255)); - imagesetpixel($im, rand(0, $img_width), rand(0, $img_height), $color); - } -} - -/** - * Draws a random number of squares on the image. - * - * @param resource $im The image. - */ -function draw_squares(&$im) -{ - global $img_width, $img_height; - - $square_count = 30; - for($i = 0; $i <= $square_count; ++$i) - { - $color = imagecolorallocate($im, rand(150, 255), rand(150, 255), rand(150, 255)); - $pos_x = rand(1, $img_width); - $pos_y = rand(1, $img_height); - $sq_width = $sq_height = rand(10, 20); - $pos_x2 = $pos_x + $sq_height; - $pos_y2 = $pos_y + $sq_width; - imagefilledrectangle($im, $pos_x, $pos_y, $pos_x2, $pos_y2, $color); - } -} - -/** - * Writes text to the image. - * - * @param resource $im The image. - * @param string $string The string to be written - * - * @return bool False if string is empty, true otherwise - */ -function draw_string(&$im, $string) -{ - global $use_ttf, $min_size, $max_size, $min_angle, $max_angle, $ttf_fonts, $img_height, $img_width; - - if(empty($string)) - { - return false; - } - - $spacing = $img_width / my_strlen($string); - $string_length = my_strlen($string); - for($i = 0; $i < $string_length; ++$i) - { - // Using TTF fonts - if($use_ttf) - { - // Select a random font size - $font_size = rand($min_size, $max_size); - - // Select a random font - $font = array_rand($ttf_fonts); - $font = $ttf_fonts[$font]; - - // Select a random rotation - $rotation = rand($min_angle, $max_angle); - - // Set the colour - $r = rand(0, 200); - $g = rand(0, 200); - $b = rand(0, 200); - $color = imagecolorallocate($im, $r, $g, $b); - - // Fetch the dimensions of the character being added - $dimensions = imageftbbox($font_size, $rotation, $font, $string[$i], array()); - $string_width = $dimensions[2] - $dimensions[0]; - $string_height = $dimensions[3] - $dimensions[5]; - - // Calculate character offsets - //$pos_x = $pos_x + $string_width + ($string_width/4); - $pos_x = $spacing / 4 + $i * $spacing; - $pos_y = ceil(($img_height-$string_height/2)); - - // Draw a shadow - $shadow_x = rand(-3, 3) + $pos_x; - $shadow_y = rand(-3, 3) + $pos_y; - $shadow_color = imagecolorallocate($im, $r+20, $g+20, $b+20); - imagefttext($im, $font_size, $rotation, $shadow_x, $shadow_y, $shadow_color, $font, $string[$i], array()); - - // Write the character to the image - imagefttext($im, $font_size, $rotation, $pos_x, $pos_y, $color, $font, $string[$i], array()); - } - else - { - // Get width/height of the character - $string_width = imagefontwidth(5); - $string_height = imagefontheight(5); - - // Calculate character offsets - $pos_x = $spacing / 4 + $i * $spacing; - $pos_y = $img_height / 2 - $string_height -10 + rand(-3, 3); - - // Create a temporary image for this character - if(gd_version() >= 2) - { - $temp_im = imagecreatetruecolor(15, 20); - } - else - { - $temp_im = imagecreate(15, 20); - } - $bg_color = imagecolorallocate($temp_im, 255, 255, 255); - imagefill($temp_im, 0, 0, $bg_color); - imagecolortransparent($temp_im, $bg_color); - - // Set the colour - $r = rand(0, 200); - $g = rand(0, 200); - $b = rand(0, 200); - $color = imagecolorallocate($temp_im, $r, $g, $b); - - // Draw a shadow - $shadow_x = rand(-1, 1); - $shadow_y = rand(-1, 1); - $shadow_color = imagecolorallocate($temp_im, $r+50, $g+50, $b+50); - imagestring($temp_im, 5, 1+$shadow_x, 1+$shadow_y, $string[$i], $shadow_color); - - imagestring($temp_im, 5, 1, 1, $string[$i], $color); - - // Copy to main image - imagecopyresized($im, $temp_im, $pos_x, $pos_y, 0, 0, 40, 55, 15, 20); - imagedestroy($temp_im); - } - } - return true; -} - diff --git a/html/forums/contact.php b/html/forums/contact.php deleted file mode 100644 index fb2f450..0000000 --- a/html/forums/contact.php +++ /dev/null @@ -1,296 +0,0 @@ -load("contact"); - -$plugins->run_hooks('contact_start'); - -// Make navigation -add_breadcrumb($lang->contact, "contact.php"); - -if($mybb->settings['contact'] != 1 || (!$mybb->user['uid'] && $mybb->settings['contact_guests'] == 1)) -{ - error_no_permission(); -} - -if($mybb->settings['contactemail']) -{ - $contactemail = $mybb->settings['contactemail']; -} -else -{ - $contactemail = $mybb->settings['adminemail']; -} - -// Check group limits -if($mybb->usergroup['maxemails'] > 0) -{ - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $query = $db->simple_select("maillogs", "COUNT(mid) AS sent_count", "{$user_check} AND dateline >= ".(TIME_NOW - (60*60*24))); - $sent_count = $db->fetch_field($query, "sent_count"); - if($sent_count >= $mybb->usergroup['maxemails']) - { - $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']); - error($lang->error_max_emails_day); - } -} - -// Check email flood control -if($mybb->usergroup['emailfloodtime'] > 0) -{ - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $timecut = TIME_NOW-$mybb->usergroup['emailfloodtime']*60; - - $query = $db->simple_select("maillogs", "mid, dateline", "{$user_check} AND dateline > '{$timecut}'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_email = $db->fetch_array($query); - - // Users last email was within the flood time, show the error - if($last_email['mid']) - { - $remaining_time = ($mybb->usergroup['emailfloodtime']*60)-(TIME_NOW-$last_email['dateline']); - - if($remaining_time == 1) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_second, $mybb->usergroup['emailfloodtime']); - } - elseif($remaining_time < 60) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_seconds, $mybb->usergroup['emailfloodtime'], $remaining_time); - } - elseif($remaining_time > 60 && $remaining_time < 120) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_minute, $mybb->usergroup['emailfloodtime']); - } - else - { - $remaining_time_minutes = ceil($remaining_time/60); - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_minutes, $mybb->usergroup['emailfloodtime'], $remaining_time_minutes); - } - - error($lang->error_emailflooding); - } -} - -$errors = array(); - -$mybb->input['message'] = trim_blank_chrs($mybb->get_input('message')); -$mybb->input['subject'] = trim_blank_chrs($mybb->get_input('subject')); -$mybb->input['email'] = trim_blank_chrs($mybb->get_input('email')); - -if($mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks('contact_do_start'); - - // Validate input - if(empty($mybb->input['subject'])) - { - $errors[] = $lang->contact_no_subject; - } - - if(strlen($mybb->input['subject']) > $mybb->settings['contact_maxsubjectlength'] && $mybb->settings['contact_maxsubjectlength'] > 0) - { - $errors[] = $lang->sprintf($lang->subject_too_long, $mybb->settings['contact_maxsubjectlength'], strlen($mybb->input['subject'])); - } - - if(empty($mybb->input['message'])) - { - $errors[] = $lang->contact_no_message; - } - - if(strlen($mybb->input['message']) > $mybb->settings['contact_maxmessagelength'] && $mybb->settings['contact_maxmessagelength'] > 0) - { - $errors[] = $lang->sprintf($lang->message_too_long, $mybb->settings['contact_maxmessagelength'], strlen($mybb->input['message'])); - } - - if(strlen($mybb->input['message']) < $mybb->settings['contact_minmessagelength'] && $mybb->settings['contact_minmessagelength'] > 0) - { - $errors[] = $lang->sprintf($lang->message_too_short, $mybb->settings['contact_minmessagelength'], strlen($mybb->input['message'])); - } - - if(empty($mybb->input['email'])) - { - $errors[] = $lang->contact_no_email; - } - else - { - // Validate email - if(!validate_email_format($mybb->input['email'])) - { - $errors[] = $lang->contact_no_email; - } - } - - // Should we have a CAPTCHA? Perhaps yes, but only for guests like in other pages... - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - $captcha = new captcha; - - if($captcha->validate_captcha() == false) - { - // CAPTCHA validation failed - foreach($captcha->get_errors() as $error) - { - $errors[] = $error; - } - } - } - - if(!$mybb->user['uid'] && $mybb->settings['stopforumspam_on_contact']) - { - require_once MYBB_ROOT . '/inc/class_stopforumspamchecker.php'; - - $stop_forum_spam_checker = new StopForumSpamChecker( - $plugins, - $mybb->settings['stopforumspam_min_weighting_before_spam'], - $mybb->settings['stopforumspam_check_usernames'], - $mybb->settings['stopforumspam_check_emails'], - $mybb->settings['stopforumspam_check_ips'], - $mybb->settings['stopforumspam_log_blocks'] - ); - - try { - if($stop_forum_spam_checker->is_user_a_spammer('', $mybb->input['email'], get_ip())) - { - $errors[] = $lang->sprintf($lang->error_stop_forum_spam_spammer, - $stop_forum_spam_checker->getErrorText(array( - 'stopforumspam_check_emails', - 'stopforumspam_check_ips'))); - } - } - catch (Exception $e) - { - if($mybb->settings['stopforumspam_block_on_error']) - { - $errors[] = $lang->error_stop_forum_spam_fetching; - } - } - } - - if(empty($errors)) - { - if($mybb->settings['contact_badwords'] == 1) - { - // Load the post parser - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - - $mybb->input['subject'] = $parser->parse_badwords($mybb->input['subject']); - $mybb->input['message'] = $parser->parse_badwords($mybb->input['message']); - } - - $user = $lang->na; - if($mybb->user['uid']) - { - $user = htmlspecialchars_uni($mybb->user['username']).' - '.$mybb->settings['bburl'].'/'.get_profile_link($mybb->user['uid']); - } - - $subject = $lang->sprintf($lang->email_contact_subject, $mybb->input['subject']); - $message = $lang->sprintf($lang->email_contact, $mybb->input['email'], $user, $session->ipaddress, $mybb->input['message']); - - // Email the administrator - my_mail($contactemail, $subject, $message, $mybb->input['email']); - - $plugins->run_hooks('contact_do_end'); - - if($mybb->settings['mail_logging'] > 0) - { - // Log the message - $log_entry = array( - "subject" => $db->escape_string($subject), - "message" => $db->escape_string($message), - "dateline" => TIME_NOW, - "fromuid" => $mybb->user['uid'], - "fromemail" => $db->escape_string($mybb->input['email']), - "touid" => 0, - "toemail" => $db->escape_string($contactemail), - "tid" => 0, - "ipaddress" => $db->escape_binary($session->packedip), - "type" => 3 - ); - $db->insert_query("maillogs", $log_entry); - } - - if($mybb->usergroup['emailfloodtime'] > 0 || (isset($sent_count) && $sent_count + 1 >= $mybb->usergroup['maxemails'])) - { - redirect('index.php', $lang->contact_success_message, '', true); - } - else - { - redirect('contact.php', $lang->contact_success_message, '', true); - } - } - else - { - $errors = inline_error($errors); - } -} - -if(empty($errors)) -{ - $errors = ''; -} - -// Generate CAPTCHA? -$captcha = ''; - -if($mybb->settings['captchaimage'] && !$mybb->user['uid']) -{ - $post_captcha = new captcha(true, "post_captcha"); - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } -} - -$mybb->input['subject'] = htmlspecialchars_uni($mybb->input['subject']); -$mybb->input['message'] = htmlspecialchars_uni($mybb->input['message']); - -if($mybb->user['uid'] && !$mybb->get_input('email')) -{ - $mybb->input['email'] = htmlspecialchars_uni($mybb->user['email']); -} -else -{ - $mybb->input['email'] = htmlspecialchars_uni($mybb->get_input('email')); -} - -$plugins->run_hooks('contact_end'); - -eval("\$page = \"".$templates->get("contact")."\";"); -output_page($page); diff --git a/html/forums/css.php b/html/forums/css.php deleted file mode 100644 index 565f548..0000000 --- a/html/forums/css.php +++ /dev/null @@ -1,40 +0,0 @@ -get_input('stylesheet', MyBB::INPUT_INT); - -if($stylesheet) -{ - $options = array( - "limit" => 1 - ); - $query = $db->simple_select("themestylesheets", "stylesheet", "sid=".$stylesheet, $options); - $stylesheet = $db->fetch_field($query, "stylesheet"); - - $plugins->run_hooks("css_start"); - - if(!empty($mybb->settings['minifycss'])) - { - $stylesheet = minify_stylesheet($stylesheet); - } - - $plugins->run_hooks("css_end"); - - header("Content-type: text/css"); - echo $stylesheet; -} -exit; diff --git a/html/forums/editpost.php b/html/forums/editpost.php deleted file mode 100644 index e290eff..0000000 --- a/html/forums/editpost.php +++ /dev/null @@ -1,947 +0,0 @@ -load("editpost"); - -$plugins->run_hooks("editpost_start"); - -// No permission for guests -if(!$mybb->user['uid']) -{ - error_no_permission(); -} - -// Get post info -$pid = $mybb->get_input('pid', MyBB::INPUT_INT); - -// if we already have the post information... -if(isset($style) && $style['pid'] == $pid && $style['type'] != 'f') -{ - $post = &$style; -} -else -{ - $post = get_post($pid); -} - -if(!$post) -{ - error($lang->error_invalidpost); -} - -// Get thread info -$tid = $post['tid']; -$thread = get_thread($tid); - -if(!$thread) -{ - error($lang->error_invalidthread); -} - -$thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - -// Get forum info -$fid = $post['fid']; -$forum = get_forum($fid); - -if($thread['visible'] == 0 && !is_moderator($fid, "canviewunapprove") || $thread['visible'] == -1 && !is_moderator($fid, "canviewdeleted") || ($thread['visible'] < -1 && $thread['uid'] != $mybb->user['uid'])) -{ - error($lang->error_invalidthread); -} -if(!$forum || $forum['type'] != "f") -{ - error($lang->error_closedinvalidforum); -} -if(($forum['open'] == 0 && !is_moderator($fid, "caneditposts")) || $mybb->user['suspendposting'] == 1) -{ - error_no_permission(); -} - -// Add prefix to breadcrumb -$breadcrumbprefix = ''; -if($thread['prefix']) -{ - $threadprefixes = build_prefixes(); - if(!empty($threadprefixes[$thread['prefix']])) - { - $breadcrumbprefix = $threadprefixes[$thread['prefix']]['displaystyle'].' '; - } -} - -// Make navigation -build_forum_breadcrumb($fid); -add_breadcrumb($breadcrumbprefix.$thread['subject'], get_thread_link($thread['tid'])); -add_breadcrumb($lang->nav_editpost); - -$forumpermissions = forum_permissions($fid); - -if($mybb->settings['bbcodeinserter'] != 0 && $forum['allowmycode'] != 0 && $mybb->user['showcodebuttons'] != 0) -{ - $codebuttons = build_mycode_inserter("message", $mybb->settings['smilieinserter']); -} -if($mybb->settings['smilieinserter'] != 0) -{ - $smilieinserter = build_clickable_smilies(); -} - -$mybb->input['action'] = $mybb->get_input('action'); -if(!$mybb->input['action'] || isset($mybb->input['previewpost'])) -{ - $mybb->input['action'] = "editpost"; -} - -if($mybb->input['action'] == "deletepost" && $mybb->request_method == "post") -{ - if(!is_moderator($fid, "candeleteposts") && !is_moderator($fid, "cansoftdeleteposts") && $pid != $thread['firstpost'] || !is_moderator($fid, "candeletethreads") && !is_moderator($fid, "cansoftdeletethreads") && $pid == $thread['firstpost']) - { - if($thread['closed'] == 1) - { - error($lang->redirect_threadclosed); - } - if($forumpermissions['candeleteposts'] == 0 && $pid != $thread['firstpost'] || $forumpermissions['candeletethreads'] == 0 && $pid == $thread['firstpost']) - { - error_no_permission(); - } - if($mybb->user['uid'] != $post['uid']) - { - error_no_permission(); - } - // User can't delete unapproved post - if($post['visible'] == 0) - { - error_no_permission(); - } - } - if($post['visible'] == -1 && $mybb->settings['soft_delete'] == 1) - { - error($lang->error_already_deleted); - } -} -elseif($mybb->input['action'] == "restorepost" && $mybb->request_method == "post") -{ - if(!is_moderator($fid, "canrestoreposts") && $pid != $thread['firstpost'] || !is_moderator($fid, "canrestorethreads") && $pid == $thread['firstpost'] || $post['visible'] != -1) - { - error_no_permission(); - } -} -else -{ - if(!is_moderator($fid, "caneditposts")) - { - if($thread['closed'] == 1) - { - error($lang->redirect_threadclosed); - } - if($forumpermissions['caneditposts'] == 0) - { - error_no_permission(); - } - if($mybb->user['uid'] != $post['uid']) - { - error_no_permission(); - } - // Edit time limit - $time = TIME_NOW; - if($mybb->usergroup['edittimelimit'] != 0 && $post['dateline'] < ($time-($mybb->usergroup['edittimelimit']*60))) - { - $lang->edit_time_limit = $lang->sprintf($lang->edit_time_limit, $mybb->usergroup['edittimelimit']); - error($lang->edit_time_limit); - } - // User can't edit unapproved post - if($post['visible'] == 0 || $post['visible'] == -1) - { - error_no_permission(); - } - } -} - -// Check if this forum is password protected and we have a valid password -check_forum_password($forum['fid']); - -if((empty($_POST) && empty($_FILES)) && $mybb->get_input('processed', MyBB::INPUT_INT) == '1') -{ - error($lang->error_cannot_upload_php_post); -} - -$attacherror = ''; -if($mybb->settings['enableattachments'] == 1 && !$mybb->get_input('attachmentaid', MyBB::INPUT_INT) && ($mybb->get_input('newattachment') || $mybb->get_input('updateattachment') || ($mybb->input['action'] == "do_editpost" && isset($mybb->input['submit']) && $_FILES['attachment']))) -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - // If there's an attachment, check it and upload it - if($_FILES['attachment']['size'] > 0 && $forumpermissions['canpostattachments'] != 0) - { - $query = $db->simple_select("attachments", "aid", "filename='".$db->escape_string($_FILES['attachment']['name'])."' AND pid='{$pid}'"); - $updateattach = $db->fetch_field($query, "aid"); - - $update_attachment = false; - if($updateattach > 0 && $mybb->get_input('updateattachment') && ($mybb->usergroup['caneditattachments'] || $forumpermissions['caneditattachments'])) - { - $update_attachment = true; - } - $attachedfile = upload_attachment($_FILES['attachment'], $update_attachment); - } - if(!empty($attachedfile['error'])) - { - eval("\$attacherror = \"".$templates->get("error_attacherror")."\";"); - $mybb->input['action'] = "editpost"; - } - if(!isset($mybb->input['submit'])) - { - $mybb->input['action'] = "editpost"; - } -} - -if($mybb->settings['enableattachments'] == 1 && $mybb->get_input('attachmentaid', MyBB::INPUT_INT) && isset($mybb->input['attachmentact']) && $mybb->input['action'] == "do_editpost" && $mybb->request_method == "post") // Lets remove/approve/unapprove the attachment -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $mybb->input['attachmentaid'] = $mybb->get_input('attachmentaid', MyBB::INPUT_INT); - if($mybb->input['attachmentact'] == "remove") - { - remove_attachment($pid, "", $mybb->input['attachmentaid']); - } - elseif($mybb->get_input('attachmentact') == "approve" && is_moderator($fid, 'canapproveunapproveattachs')) - { - $update_sql = array("visible" => 1); - $db->update_query("attachments", $update_sql, "aid='{$mybb->input['attachmentaid']}'"); - update_thread_counters($post['tid'], array('attachmentcount' => "+1")); - } - elseif($mybb->get_input('attachmentact') == "unapprove" && is_moderator($fid, 'canapproveunapproveattachs')) - { - $update_sql = array("visible" => 0); - $db->update_query("attachments", $update_sql, "aid='{$mybb->input['attachmentaid']}'"); - update_thread_counters($post['tid'], array('attachmentcount' => "-1")); - } - if(!isset($mybb->input['submit'])) - { - $mybb->input['action'] = "editpost"; - } -} - -if($mybb->input['action'] == "deletepost" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("editpost_deletepost"); - - if($mybb->get_input('delete', MyBB::INPUT_INT) == 1) - { - $query = $db->simple_select("posts", "pid", "tid='{$tid}'", array("limit" => 1, "order_by" => "dateline", "order_dir" => "asc")); - $firstcheck = $db->fetch_array($query); - if($firstcheck['pid'] == $pid) - { - $firstpost = 1; - } - else - { - $firstpost = 0; - } - - $modlogdata['fid'] = $fid; - $modlogdata['tid'] = $tid; - if($firstpost) - { - if($forumpermissions['candeletethreads'] == 1 || is_moderator($fid, "candeletethreads") || is_moderator($fid, "cansoftdeletethreads")) - { - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - - if($mybb->settings['soft_delete'] == 1 || is_moderator($fid, "cansoftdeletethreads")) - { - $modlogdata['pid'] = $pid; - - $moderation->soft_delete_threads(array($tid)); - log_moderator_action($modlogdata, $lang->thread_soft_deleted); - } - else - { - $moderation->delete_thread($tid); - mark_reports($tid, "thread"); - log_moderator_action($modlogdata, $lang->thread_deleted); - } - - if($mybb->input['ajax'] == 1) - { - header("Content-type: application/json; charset={$lang->settings['charset']}"); - if(is_moderator($fid, "canviewdeleted")) - { - echo json_encode(array("data" => '1')); - } - else - { - echo json_encode(array("data" => '3', "url" => get_forum_link($fid))); - } - } - else - { - redirect(get_forum_link($fid), $lang->redirect_threaddeleted); - } - } - else - { - error_no_permission(); - } - } - else - { - if($forumpermissions['candeleteposts'] == 1 || is_moderator($fid, "candeleteposts") || is_moderator($fid, "cansoftdeleteposts")) - { - // Select the first post before this - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - - if($mybb->settings['soft_delete'] == 1 || is_moderator($fid, "cansoftdeleteposts")) - { - $modlogdata['pid'] = $pid; - - $moderation->soft_delete_posts(array($pid)); - log_moderator_action($modlogdata, $lang->post_soft_deleted); - } - else - { - $moderation->delete_post($pid); - mark_reports($pid, "post"); - log_moderator_action($modlogdata, $lang->post_deleted); - } - - $query = $db->simple_select("posts", "pid", "tid='{$tid}' AND dateline <= '{$post['dateline']}'", array("limit" => 1, "order_by" => "dateline", "order_dir" => "desc")); - $next_post = $db->fetch_array($query); - if($next_post['pid']) - { - $redirect = get_post_link($next_post['pid'], $tid)."#pid{$next_post['pid']}"; - } - else - { - $redirect = get_thread_link($tid); - } - - if($mybb->input['ajax'] == 1) - { - header("Content-type: application/json; charset={$lang->settings['charset']}"); - if(is_moderator($fid, "canviewdeleted")) - { - echo json_encode(array("data" => '1')); - } - else - { - echo json_encode(array("data" => '2')); - } - } - else - { - redirect($redirect, $lang->redirect_postdeleted); - } - } - else - { - error_no_permission(); - } - } - } - else - { - error($lang->redirect_nodelete); - } -} - -if($mybb->input['action'] == "restorepost" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("editpost_restorepost"); - - if($mybb->get_input('restore', MyBB::INPUT_INT) == 1) - { - $query = $db->simple_select("posts", "pid", "tid='{$tid}'", array("limit" => 1, "order_by" => "dateline", "order_dir" => "asc")); - $firstcheck = $db->fetch_array($query); - if($firstcheck['pid'] == $pid) - { - $firstpost = 1; - } - else - { - $firstpost = 0; - } - - $modlogdata['fid'] = $fid; - $modlogdata['tid'] = $tid; - $modlogdata['pid'] = $pid; - if($firstpost) - { - if(is_moderator($fid, "canrestorethreads")) - { - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - $moderation->restore_threads(array($tid)); - log_moderator_action($modlogdata, $lang->thread_restored); - if($mybb->input['ajax'] == 1) - { - header("Content-type: application/json; charset={$lang->settings['charset']}"); - echo json_encode(array("data" => '1')); - } - else - { - redirect(get_forum_link($fid), $lang->redirect_threadrestored); - } - } - else - { - error_no_permission(); - } - } - else - { - if(is_moderator($fid, "canrestoreposts")) - { - // Select the first post before this - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - $moderation->restore_posts(array($pid)); - log_moderator_action($modlogdata, $lang->post_restored); - $redirect = get_post_link($pid, $tid)."#pid{$pid}"; - - if($mybb->input['ajax'] == 1) - { - header("Content-type: application/json; charset={$lang->settings['charset']}"); - echo json_encode(array("data" => '1')); - } - else - { - redirect($redirect, $lang->redirect_postrestored); - } - } - else - { - error_no_permission(); - } - } - } - else - { - error($lang->redirect_norestore); - } -} - -if($mybb->input['action'] == "do_editpost" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("editpost_do_editpost_start"); - - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("update"); - $posthandler->action = "post"; - - // Set the post data that came from the input to the $post array. - $post = array( - "pid" => $mybb->input['pid'], - "prefix" => $mybb->get_input('threadprefix', MyBB::INPUT_INT), - "subject" => $mybb->get_input('subject'), - "icon" => $mybb->get_input('icon', MyBB::INPUT_INT), - "uid" => $post['uid'], - "username" => $post['username'], - "edit_uid" => $mybb->user['uid'], - "message" => $mybb->get_input('message'), - "editreason" => $mybb->get_input('editreason'), - ); - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(!isset($postoptions['signature'])) - { - $postoptions['signature'] = 0; - } - if(!isset($postoptions['subscriptionmethod'])) - { - $postoptions['subscriptionmethod'] = 0; - } - if(!isset($postoptions['disablesmilies'])) - { - $postoptions['disablesmilies'] = 0; - } - - // Set up the post options from the input. - $post['options'] = array( - "signature" => $postoptions['signature'], - "subscriptionmethod" => $postoptions['subscriptionmethod'], - "disablesmilies" => $postoptions['disablesmilies'] - ); - - $posthandler->set_data($post); - - // Now let the post handler do all the hard work. - if(!$posthandler->validate_post()) - { - $post_errors = $posthandler->get_friendly_errors(); - $post_errors = inline_error($post_errors); - $mybb->input['action'] = "editpost"; - } - // No errors were found, we can call the update method. - else - { - $postinfo = $posthandler->update_post(); - $visible = $postinfo['visible']; - $first_post = $postinfo['first_post']; - - // Help keep our attachments table clean. - $db->delete_query("attachments", "filename='' OR filesize<1"); - - // Did the user choose to post a poll? Redirect them to the poll posting page. - if($mybb->get_input('postpoll', MyBB::INPUT_INT) && $forumpermissions['canpostpolls']) - { - $url = "polls.php?action=newpoll&tid=$tid&polloptions=".$mybb->get_input('numpolloptions', MyBB::INPUT_INT); - $lang->redirect_postedited = $lang->redirect_postedited_poll; - } - else if($visible == 0 && $first_post && !is_moderator($fid, "canviewunapprove", $mybb->user['uid'])) - { - // Moderated post - $lang->redirect_postedited .= $lang->redirect_thread_moderation; - $url = get_forum_link($fid); - } - else if($visible == 0 && !is_moderator($fid, "canviewunapprove", $mybb->user['uid'])) - { - $lang->redirect_postedited .= $lang->redirect_post_moderation; - $url = get_thread_link($tid); - } - // Otherwise, send them back to their post - else - { - $lang->redirect_postedited .= $lang->redirect_postedited_redirect; - $url = get_post_link($pid, $tid)."#pid{$pid}"; - } - $plugins->run_hooks("editpost_do_editpost_end"); - - redirect($url, $lang->redirect_postedited); - } -} - -if(!$mybb->input['action'] || $mybb->input['action'] == "editpost") -{ - $plugins->run_hooks("editpost_action_start"); - - if(!isset($mybb->input['previewpost'])) - { - $icon = $post['icon']; - } - - if($forum['allowpicons'] != 0) - { - $posticons = get_post_icons(); - } - - $mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); - eval("\$loginbox = \"".$templates->get("changeuserbox")."\";"); - - $deletebox = ''; - // Can we delete posts? - if($post['visible'] != -1 && (is_moderator($fid, "candeleteposts") || $forumpermissions['candeleteposts'] == 1 && $mybb->user['uid'] == $post['uid'])) - { - eval("\$deletebox = \"".$templates->get("editpost_delete")."\";"); - } - - $bgcolor = "trow1"; - if($mybb->settings['enableattachments'] != 0 && $forumpermissions['canpostattachments'] != 0) - { // Get a listing of the current attachments, if there are any - $attachcount = 0; - $query = $db->simple_select("attachments", "*", "pid='{$pid}'"); - $attachments = ''; - while($attachment = $db->fetch_array($query)) - { - $attachment['size'] = get_friendly_size($attachment['filesize']); - $attachment['icon'] = get_attachment_icon(get_extension($attachment['filename'])); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - - if($mybb->settings['bbcodeinserter'] != 0 && $forum['allowmycode'] != 0 && $mybb->user['showcodebuttons'] != 0) - { - eval("\$postinsert = \"".$templates->get("post_attachments_attachment_postinsert")."\";"); - } - // Moderating options - $attach_mod_options = ''; - if(is_moderator($fid)) - { - if($attachment['visible'] == 1) - { - eval("\$attach_mod_options = \"".$templates->get("post_attachments_attachment_mod_unapprove")."\";"); - } - else - { - eval("\$attach_mod_options = \"".$templates->get("post_attachments_attachment_mod_approve")."\";"); - } - } - - // Remove Attachment - eval("\$attach_rem_options = \"".$templates->get("post_attachments_attachment_remove")."\";"); - - if($attachment['visible'] != 1) - { - eval("\$attachments .= \"".$templates->get("post_attachments_attachment_unapproved")."\";"); - } - else - { - eval("\$attachments .= \"".$templates->get("post_attachments_attachment")."\";"); - } - $attachcount++; - } - $query = $db->simple_select("attachments", "SUM(filesize) AS ausage", "uid='".$mybb->user['uid']."'"); - $usage = $db->fetch_array($query); - if($usage['ausage'] > ($mybb->usergroup['attachquota']*1024) && $mybb->usergroup['attachquota'] != 0) - { - $noshowattach = 1; - } - else - { - $noshowattach = 0; - } - if($mybb->usergroup['attachquota'] == 0) - { - $friendlyquota = $lang->unlimited; - } - else - { - $friendlyquota = get_friendly_size($mybb->usergroup['attachquota']*1024); - } - $friendlyusage = get_friendly_size($usage['ausage']); - $lang->attach_quota = $lang->sprintf($lang->attach_quota, $friendlyusage, $friendlyquota); - if($mybb->settings['maxattachments'] == 0 || ($mybb->settings['maxattachments'] != 0 && $attachcount < $mybb->settings['maxattachments']) && !$noshowattach) - { - eval("\$attach_add_options = \"".$templates->get("post_attachments_add")."\";"); - } - - if(($mybb->usergroup['caneditattachments'] || $forumpermissions['caneditattachments']) && $attachcount > 0) - { - eval("\$attach_update_options = \"".$templates->get("post_attachments_update")."\";"); - } - - if($attach_add_options || $attach_update_options) - { - eval("\$newattach = \"".$templates->get("post_attachments_new")."\";"); - } - eval("\$attachbox = \"".$templates->get("post_attachments")."\";"); - } - if(!$mybb->get_input('attachmentaid', MyBB::INPUT_INT) && !$mybb->get_input('newattachment') && !$mybb->get_input('updateattachment') && !isset($mybb->input['previewpost'])) - { - $message = $post['message']; - $subject = $post['subject']; - $reason = htmlspecialchars_uni($post['editreason']); - } - else - { - $message = $mybb->get_input('message'); - $subject = $mybb->get_input('subject'); - $reason = htmlspecialchars_uni($mybb->get_input('editreason')); - } - - if(!isset($post_errors)) - { - $post_errors = ''; - } - - $postoptions_subscriptionmethod_dont = $postoptions_subscriptionmethod_none = $postoptions_subscriptionmethod_email = $postoptions_subscriptionmethod_pm = ''; - $postoptionschecked = array('signature' => '', 'disablesmilies' => ''); - - if(!empty($mybb->input['previewpost']) || $post_errors) - { - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("update"); - $posthandler->action = "post"; - - // Set the post data that came from the input to the $post array. - $post = array( - "pid" => $mybb->input['pid'], - "prefix" => $mybb->get_input('threadprefix', MyBB::INPUT_INT), - "subject" => $mybb->get_input('subject'), - "icon" => $mybb->get_input('icon', MyBB::INPUT_INT), - "uid" => $post['uid'], - "username" => $post['username'], - "edit_uid" => $mybb->user['uid'], - "message" => $mybb->get_input('message'), - ); - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(!isset($postoptions['signature'])) - { - $postoptions['signature'] = 0; - } - if(!isset($postoptions['emailnotify'])) - { - $postoptions['emailnotify'] = 0; - } - if(!isset($postoptions['disablesmilies'])) - { - $postoptions['disablesmilies'] = 0; - } - - // Set up the post options from the input. - $post['options'] = array( - "signature" => $postoptions['signature'], - "emailnotify" => $postoptions['emailnotify'], - "disablesmilies" => $postoptions['disablesmilies'] - ); - - $posthandler->set_data($post); - - // Now let the post handler do all the hard work. - if(!$posthandler->validate_post()) - { - $post_errors = $posthandler->get_friendly_errors(); - $post_errors = inline_error($post_errors); - $mybb->input['action'] = "editpost"; - $mybb->input['previewpost'] = 0; - } - else - { - $previewmessage = $message; - $previewsubject = $subject; - $message = htmlspecialchars_uni($message); - $subject = htmlspecialchars_uni($subject); - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - - if(isset($postoptions['signature']) && $postoptions['signature'] == 1) - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - - if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "none") - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "email") - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "pm") - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - - if(isset($postoptions['disablesmilies']) && $postoptions['disablesmilies'] == 1) - { - $postoptionschecked['disablesmilies'] = " checked=\"checked\""; - } - } - } - - if(!empty($mybb->input['previewpost'])) - { - if(!$post['uid']) - { - $query = $db->simple_select('posts', 'username, dateline', "pid='{$pid}'"); - $postinfo = $db->fetch_array($query); - } - else - { - // Figure out the poster's other information. - $query = $db->query(" - SELECT u.*, f.*, p.dateline - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.uid=u.uid) - WHERE u.uid='{$post['uid']}' AND p.pid='{$pid}' - LIMIT 1 - "); - $postinfo = $db->fetch_array($query); - $postinfo['userusername'] = $postinfo['username']; - } - - $query = $db->simple_select("attachments", "*", "pid='{$pid}'"); - while($attachment = $db->fetch_array($query)) - { - $attachcache[0][$attachment['aid']] = $attachment; - } - - if(!isset($postoptions['disablesmilies'])) - { - $postoptions['disablesmilies'] = 0; - } - - // Set the values of the post info array. - $postinfo['message'] = $previewmessage; - $postinfo['subject'] = $previewsubject; - $postinfo['icon'] = $icon; - $postinfo['smilieoff'] = $postoptions['disablesmilies']; - - $postbit = build_postbit($postinfo, 1); - eval("\$preview = \"".$templates->get("previewpost")."\";"); - } - else if(!$post_errors) - { - $message = htmlspecialchars_uni($message); - $subject = htmlspecialchars_uni($subject); - - $preview = ''; - - if($post['includesig'] != 0) - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - - if($post['smilieoff'] == 1) - { - $postoptionschecked['disablesmilies'] = " checked=\"checked\""; - } - - $query = $db->simple_select("threadsubscriptions", "notification", "tid='{$tid}' AND uid='{$mybb->user['uid']}'"); - if($db->num_rows($query) > 0) - { - $notification = $db->fetch_field($query, 'notification'); - - if($notification == 0) - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if($notification == 1) - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if($notification == 2) - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - } - } - - // Generate thread prefix selector if this is the first post of the thread - if($thread['firstpost'] == $pid) - { - if(!$mybb->get_input('threadprefix', MyBB::INPUT_INT)) - { - $mybb->input['threadprefix'] = $thread['prefix']; - } - - $prefixselect = build_prefix_select($forum['fid'], $mybb->get_input('threadprefix', MyBB::INPUT_INT), 0, $thread['prefix']); - } - else - { - $prefixselect = ""; - } - - $editreason = ''; - if($mybb->settings['alloweditreason'] == 1) - { - eval("\$editreason = \"".$templates->get("editpost_reason")."\";"); - $bgcolor = "trow2"; - $bgcolor2 = "trow1"; - } - else - { - $bgcolor = "trow1"; - $bgcolor2 = "trow2"; - } - - // Fetch subscription select box - eval("\$subscriptionmethod = \"".$templates->get("post_subscription_method")."\";"); - - $query = $db->simple_select("posts", "*", "tid='{$tid}'", array("limit" => 1, "order_by" => "dateline", "order_dir" => "asc")); - $firstcheck = $db->fetch_array($query); - - $time = TIME_NOW; - if($firstcheck['pid'] == $pid && $forumpermissions['canpostpolls'] != 0 && $thread['poll'] < 1 && (is_moderator($fid, "canmanagepolls") || $thread['dateline'] > ($time-($mybb->settings['polltimelimit']*60*60)) || $mybb->settings['polltimelimit'] == 0)) - { - $lang->max_options = $lang->sprintf($lang->max_options, $mybb->settings['maxpolloptions']); - $numpolloptions = $mybb->get_input('numpolloptions', MyBB::INPUT_INT); - $postpollchecked = ''; - - if($numpolloptions < 1) - { - $numpolloptions = 2; - } - - if($mybb->get_input('postpoll', MyBB::INPUT_INT) == 1) - { - $postpollchecked = 'checked="checked"'; - } - - eval("\$pollbox = \"".$templates->get("newthread_postpoll")."\";"); - } - else - { - $pollbox = ''; - } - - // Hide signature option if no permission - $signature = ''; - if($mybb->usergroup['canusesig'] == 1 && !$mybb->user['suspendsignature']) - { - eval("\$signature = \"".$templates->get('editpost_signature')."\";"); - } - - // Can we disable smilies or are they disabled already? - $disablesmilies = ''; - if($forum['allowsmilies'] != 0) - { - eval("\$disablesmilies = \"".$templates->get("editpost_disablesmilies")."\";"); - } - - $postoptions = ''; - if(!empty($signature) || !empty($disablesmilies)) - { - eval("\$postoptions = \"".$templates->get("editpost_postoptions")."\";"); - } - - $moderation_notice = ''; - if(!is_moderator($forum['fid'], "canapproveunapproveattachs")) - { - if($forumpermissions['modattachments'] == 1 && $forumpermissions['canpostattachments'] != 0) - { - $moderation_text = $lang->moderation_forum_attachments; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - - if(!is_moderator($forum['fid'], "canapproveunapproveposts")) - { - if($forumpermissions['mod_edit_posts'] == 1) - { - $moderation_text = $lang->moderation_forum_edits; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - - $plugins->run_hooks("editpost_end"); - - $forum['name'] = strip_tags($forum['name']); - - eval("\$editpost = \"".$templates->get("editpost")."\";"); - output_page($editpost); -} diff --git a/html/forums/forumdisplay.php b/html/forums/forumdisplay.php deleted file mode 100644 index fc49efc..0000000 --- a/html/forums/forumdisplay.php +++ /dev/null @@ -1,1498 +0,0 @@ - '', 'subject' => '', 'starter' => '', 'started' => '', 'replies' => '', 'views' => '', 'lastpost' => ''); -$ordersel = array('asc' => '', 'desc' => ''); -$datecutsel = array(1 => '', 5 => '', 10 => '', 20 => '', 50 => '', 75 => '', 100 => '', 365 => '', 9999 => ''); -$rules = ''; - -// Load global language phrases -$lang->load("forumdisplay"); - -$plugins->run_hooks("forumdisplay_start"); - -$fid = $mybb->get_input('fid', MyBB::INPUT_INT); -if($fid < 0) -{ - switch($fid) - { - case "-1": - $location = "index.php"; - break; - case "-2": - $location = "search.php"; - break; - case "-3": - $location = "usercp.php"; - break; - case "-4": - $location = "private.php"; - break; - case "-5": - $location = "online.php"; - break; - } - if($location) - { - header("Location: ".$location); - exit; - } -} - -// Get forum info -$foruminfo = get_forum($fid); -if(!$foruminfo) -{ - error($lang->error_invalidforum); -} - -$archive_url = build_archive_link("forum", $fid); - -$currentitem = $fid; -build_forum_breadcrumb($fid); -$parentlist = $foruminfo['parentlist']; - -// To validate, turn & to & but support unicode -$foruminfo['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $foruminfo['name']); - -$forumpermissions = forum_permissions(); -$fpermissions = $forumpermissions[$fid]; - -if($fpermissions['canview'] != 1) -{ - error_no_permission(); -} - -if($mybb->user['uid'] == 0) -{ - // Cookie'd forum read time - $forumsread = array(); - if(isset($mybb->cookies['mybb']['forumread'])) - { - $forumsread = my_unserialize($mybb->cookies['mybb']['forumread']); - } - - if(is_array($forumsread) && empty($forumsread)) - { - if(isset($mybb->cookies['mybb']['readallforums'])) - { - $forumsread[$fid] = $mybb->cookies['mybb']['lastvisit']; - } - else - { - $forumsread = array(); - } - } - - $query = $db->simple_select("forums", "*", "active != 0", array("order_by" => "pid, disporder")); -} -else -{ - // Build a forum cache from the database - $query = $db->query(" - SELECT f.*, fr.dateline AS lastread - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') - WHERE f.active != 0 - ORDER BY pid, disporder - "); -} - -while($forum = $db->fetch_array($query)) -{ - if($mybb->user['uid'] == 0 && isset($forumsread[$forum['fid']])) - { - $forum['lastread'] = $forumsread[$forum['fid']]; - } - - $fcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; -} - -// Get the forum moderators if the setting is enabled. -if($mybb->settings['modlist'] != 0) -{ - $moderatorcache = $cache->read("moderators"); -} - -$bgcolor = "trow1"; -if($mybb->settings['subforumsindex'] != 0) -{ - $showdepth = 3; -} -else -{ - $showdepth = 2; -} - -$subforums = ''; -$child_forums = build_forumbits($fid, 2); -$forums = $child_forums['forum_list']; - -if($forums) -{ - $lang->sub_forums_in = $lang->sprintf($lang->sub_forums_in, $foruminfo['name']); - eval("\$subforums = \"".$templates->get("forumdisplay_subforums")."\";"); -} - -$excols = "forumdisplay"; - -// Password protected forums -check_forum_password($foruminfo['fid']); - -if($foruminfo['linkto']) -{ - header("Location: {$foruminfo['linkto']}"); - exit; -} - -// Make forum jump... -if($mybb->settings['enableforumjump'] != 0) -{ - $forumjump = build_forum_jump("", $fid, 1); -} - -if($foruminfo['type'] == "f" && $foruminfo['open'] != 0 && $fpermissions['canpostthreads'] != 0 && $mybb->user['suspendposting'] == 0) -{ - eval("\$newthread = \"".$templates->get("forumdisplay_newthread")."\";"); -} - -if($fpermissions['cansearch'] != 0 && $foruminfo['type'] == "f") -{ - eval("\$searchforum = \"".$templates->get("forumdisplay_searchforum")."\";"); -} - -// Gather forum stats -$has_announcements = $has_modtools = false; -$forum_stats = $cache->read("forumsdisplay"); - -if(is_array($forum_stats)) -{ - if(!empty($forum_stats[-1]['modtools']) || !empty($forum_stats[$fid]['modtools'])) - { - // Mod tools are specific to forums, not parents - $has_modtools = true; - } - - if(!empty($forum_stats[-1]['announcements']) || !empty($forum_stats[$fid]['announcements'])) - { - // Global or forum-specific announcements - $has_announcements = true; - } -} - -$done_moderators = array( - "users" => array(), - "groups" => array() -); - -$moderators = ''; -$parentlistexploded = explode(",", $parentlist); - -foreach($parentlistexploded as $mfid) -{ - // This forum has moderators - if(is_array($moderatorcache[$mfid])) - { - // Fetch each moderator from the cache and format it, appending it to the list - foreach($moderatorcache[$mfid] as $modtype) - { - foreach($modtype as $moderator) - { - if($moderator['isgroup']) - { - if(in_array($moderator['id'], $done_moderators['groups'])) - { - continue; - } - - $moderator['title'] = htmlspecialchars_uni($moderator['title']); - - eval("\$moderators .= \"".$templates->get("forumbit_moderators_group", 1, 0)."\";"); - $done_moderators['groups'][] = $moderator['id']; - } - else - { - if(in_array($moderator['id'], $done_moderators['users'])) - { - continue; - } - - $moderator['profilelink'] = get_profile_link($moderator['id']); - $moderator['username'] = format_name(htmlspecialchars_uni($moderator['username']), $moderator['usergroup'], $moderator['displaygroup']); - - eval("\$moderators .= \"".$templates->get("forumbit_moderators_user", 1, 0)."\";"); - $done_moderators['users'][] = $moderator['id']; - } - $comma = $lang->comma; - } - } - } - - if(!empty($forum_stats[$mfid]['announcements'])) - { - $has_announcements = true; - } -} -$comma = ''; - -// If we have a moderators list, load the template -if($moderators) -{ - eval("\$moderatedby = \"".$templates->get("forumdisplay_moderatedby")."\";"); -} -else -{ - $moderatedby = ''; -} - -// Get the users browsing this forum. -if($mybb->settings['browsingthisforum'] != 0) -{ - $timecut = TIME_NOW - $mybb->settings['wolcutoff']; - - $comma = ''; - $guestcount = 0; - $membercount = 0; - $inviscount = 0; - $onlinemembers = ''; - $doneusers = array(); - - $query = $db->query(" - SELECT s.ip, s.uid, u.username, s.time, u.invisible, u.usergroup, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."sessions s - LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid) - WHERE s.time > '$timecut' AND location1='$fid' AND nopermission != 1 - ORDER BY u.username ASC, s.time DESC - "); - - while($user = $db->fetch_array($query)) - { - if($user['uid'] == 0) - { - ++$guestcount; - } - else - { - if(empty($doneusers[$user['uid']]) || $doneusers[$user['uid']] < $user['time']) - { - $doneusers[$user['uid']] = $user['time']; - ++$membercount; - if($user['invisible'] == 1) - { - $invisiblemark = "*"; - ++$inviscount; - } - else - { - $invisiblemark = ''; - } - - if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid']) - { - $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); - $user['profilelink'] = build_profile_link($user['username'], $user['uid']); - eval("\$onlinemembers .= \"".$templates->get("forumdisplay_usersbrowsing_user", 1, 0)."\";"); - $comma = $lang->comma; - } - } - } - } - - $guestsonline = ''; - if($guestcount) - { - $guestsonline = $lang->sprintf($lang->users_browsing_forum_guests, $guestcount); - } - - $invisonline = ''; - if($mybb->user['invisible'] == 1) - { - // the user was counted as invisible user --> correct the inviscount - $inviscount -= 1; - } - if($inviscount && $mybb->usergroup['canviewwolinvis'] != 1) - { - $invisonline = $lang->sprintf($lang->users_browsing_forum_invis, $inviscount); - } - - - $onlinesep = ''; - if($invisonline != '' && $onlinemembers) - { - $onlinesep = $lang->comma; - } - - $onlinesep2 = ''; - if($invisonline != '' && $guestcount || $onlinemembers && $guestcount) - { - $onlinesep2 = $lang->comma; - } - - eval("\$usersbrowsing = \"".$templates->get("forumdisplay_usersbrowsing")."\";"); -} - -// Do we have any forum rules to show for this forum? -$forumrules = ''; -if($foruminfo['rulestype'] != 0 && $foruminfo['rules']) -{ - if(!$foruminfo['rulestitle']) - { - $foruminfo['rulestitle'] = $lang->sprintf($lang->forum_rules, $foruminfo['name']); - } - - $rules_parser = array( - "allow_html" => 1, - "allow_mycode" => 1, - "allow_smilies" => 1, - "allow_imgcode" => 1 - ); - - $foruminfo['rules'] = $parser->parse_message($foruminfo['rules'], $rules_parser); - if($foruminfo['rulestype'] == 1 || $foruminfo['rulestype'] == 3) - { - eval("\$rules = \"".$templates->get("forumdisplay_rules")."\";"); - } - else if($foruminfo['rulestype'] == 2) - { - eval("\$rules = \"".$templates->get("forumdisplay_rules_link")."\";"); - } -} - -$bgcolor = "trow1"; - -// Set here to fetch only approved/deleted topics (and then below for a moderator we change this). -if($fpermissions['canviewdeletionnotice'] != 0) -{ - $visibleonly = "AND visible IN (-1,1)"; - $tvisibleonly = "AND t.visible IN (-1,1)"; -} -else -{ - $visibleonly = "AND visible='1'"; - $tvisibleonly = "AND t.visible='1'"; -} - -// Check if the active user is a moderator and get the inline moderation tools. -if(is_moderator($fid)) -{ - eval("\$inlinemodcol = \"".$templates->get("forumdisplay_inlinemoderation_col")."\";"); - $ismod = true; - $inlinecount = "0"; - $inlinemod = ''; - $inlinecookie = "inlinemod_forum".$fid; - - if(is_moderator($fid, "canviewdeleted") == true || is_moderator($fid, "canviewunapprove") == true) - { - if(is_moderator($fid, "canviewunapprove") == true && is_moderator($fid, "canviewdeleted") == false) - { - $visibleonly = "AND visible IN (0,1)"; - $tvisibleonly = "AND t.visible IN (0,1)"; - } - elseif(is_moderator($fid, "canviewdeleted") == true && is_moderator($fid, "canviewunapprove") == false) - { - $visibleonly = "AND visible IN (-1,1)"; - $tvisibleonly = "AND t.visible IN (-1,1)"; - } - else - { - $visibleonly = " AND visible IN (-1,0,1)"; - $tvisibleonly = " AND t.visible IN (-1,0,1)"; - } - } -} -else -{ - $inlinemod = $inlinemodcol = ''; - $ismod = false; -} - -if(is_moderator($fid, "caneditposts") || $fpermissions['caneditposts'] == 1) -{ - $can_edit_titles = 1; -} -else -{ - $can_edit_titles = 0; -} - -unset($rating); - -// Pick out some sorting options. -// First, the date cut for the threads. -$datecut = 9999; -if(empty($mybb->input['datecut'])) -{ - // If the user manually set a date cut, use it. - if(!empty($mybb->user['daysprune'])) - { - $datecut = $mybb->user['daysprune']; - } - else - { - // If the forum has a non-default date cut, use it. - if(!empty($foruminfo['defaultdatecut'])) - { - $datecut = $foruminfo['defaultdatecut']; - } - } -} -// If there was a manual date cut override, use it. -else -{ - $datecut = $mybb->get_input('datecut', MyBB::INPUT_INT); -} - -$datecutsel[(int)$datecut] = ' selected="selected"'; -if($datecut > 0 && $datecut != 9999) -{ - $checkdate = TIME_NOW - ($datecut * 86400); - $datecutsql = "AND (lastpost >= '$checkdate' OR sticky = '1')"; - $datecutsql2 = "AND (t.lastpost >= '$checkdate' OR t.sticky = '1')"; -} -else -{ - $datecutsql = ''; - $datecutsql2 = ''; -} - -// Sort by thread prefix -$tprefix = $mybb->get_input('prefix', MyBB::INPUT_INT); -if($tprefix > 0) -{ - $prefixsql = "AND prefix = {$tprefix}"; - $prefixsql2 = "AND t.prefix = {$tprefix}"; -} -else if($tprefix == -1) -{ - $prefixsql = "AND prefix = 0"; - $prefixsql2 = "AND t.prefix = 0"; -} -else if($tprefix == -2) -{ - $prefixsql = "AND prefix != 0"; - $prefixsql2 = "AND t.prefix != 0"; -} -else -{ - $prefixsql = $prefixsql2 = ''; -} - -// Pick the sort order. -if(!isset($mybb->input['order']) && !empty($foruminfo['defaultsortorder'])) -{ - $mybb->input['order'] = $foruminfo['defaultsortorder']; -} -else -{ - $mybb->input['order'] = $mybb->get_input('order'); -} - -$mybb->input['order'] = htmlspecialchars_uni($mybb->get_input('order')); - -switch(my_strtolower($mybb->input['order'])) -{ - case "asc": - $sortordernow = "asc"; - $ordersel['asc'] = ' selected="selected"'; - $oppsort = $lang->desc; - $oppsortnext = "desc"; - break; - default: - $sortordernow = "desc"; - $ordersel['desc'] = ' selected="selected"'; - $oppsort = $lang->asc; - $oppsortnext = "asc"; - break; -} - -// Sort by which field? -if(!isset($mybb->input['sortby']) && !empty($foruminfo['defaultsortby'])) -{ - $mybb->input['sortby'] = $foruminfo['defaultsortby']; -} -else -{ - $mybb->input['sortby'] = $mybb->get_input('sortby'); -} - -$t = 't.'; -$sortfield2 = ''; - -$sortby = htmlspecialchars_uni($mybb->input['sortby']); - -switch($mybb->input['sortby']) -{ - case "subject": - $sortfield = "subject"; - break; - case "replies": - $sortfield = "replies"; - break; - case "views": - $sortfield = "views"; - break; - case "starter": - $sortfield = "username"; - break; - case "rating": - $t = ""; - $sortfield = "averagerating"; - $sortfield2 = ", t.totalratings DESC"; - break; - case "started": - $sortfield = "dateline"; - break; - default: - $sortby = "lastpost"; - $sortfield = "lastpost"; - $mybb->input['sortby'] = "lastpost"; - break; -} - -$sortsel['rating'] = ''; // Needs to be initialized in order to speed-up things. Fixes #2031 -$sortsel[$mybb->input['sortby']] = ' selected="selected"'; - -// Pick the right string to join the sort URL -if($mybb->seo_support == true) -{ - $string = "?"; -} -else -{ - $string = "&"; -} - -// Are we viewing a specific page? -$mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); -if($mybb->input['page'] > 1) -{ - $sorturl = get_forum_link($fid, $mybb->input['page']).$string."datecut=$datecut&prefix=$tprefix"; -} -else -{ - $sorturl = get_forum_link($fid).$string."datecut=$datecut&prefix=$tprefix"; -} - -eval("\$orderarrow['$sortby'] = \"".$templates->get("forumdisplay_orderarrow")."\";"); - -$threadcount = 0; -$useronly = $tuseronly = ""; -if(isset($fpermissions['canonlyviewownthreads']) && $fpermissions['canonlyviewownthreads'] == 1) -{ - $useronly = "AND uid={$mybb->user['uid']}"; - $tuseronly = "AND t.uid={$mybb->user['uid']}"; -} - -if($fpermissions['canviewthreads'] != 0) -{ - // How many posts are there? - if(($datecut > 0 && $datecut != 9999) || isset($fpermissions['canonlyviewownthreads']) && $fpermissions['canonlyviewownthreads'] == 1) - { - $query = $db->simple_select("threads", "COUNT(tid) AS threads", "fid = '$fid' $useronly $visibleonly $datecutsql $prefixsql"); - $threadcount = $db->fetch_field($query, "threads"); - } - else - { - $query = $db->simple_select("forums", "threads, unapprovedthreads, deletedthreads", "fid = '{$fid}'", array('limit' => 1)); - $forum_threads = $db->fetch_array($query); - $threadcount = $forum_threads['threads']; - if($ismod == true) - { - $threadcount += $forum_threads['unapprovedthreads'] + $forum_threads['deletedthreads']; - } - - // If we have 0 threads double check there aren't any "moved" threads - if($threadcount == 0) - { - $query = $db->simple_select("threads", "COUNT(tid) AS threads", "fid = '$fid' $useronly $visibleonly", array('limit' => 1)); - $threadcount = $db->fetch_field($query, "threads"); - } - } -} - -// How many pages are there? -if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) -{ - $mybb->settings['threadsperpage'] = 20; -} - -$perpage = $mybb->settings['threadsperpage']; - -if($mybb->input['page'] > 0) -{ - $page = $mybb->input['page']; - $start = ($page-1) * $perpage; - $pages = $threadcount / $perpage; - $pages = ceil($pages); - if($page > $pages || $page <= 0) - { - $start = 0; - $page = 1; - } -} -else -{ - $start = 0; - $page = 1; -} - -$end = $start + $perpage; -$lower = $start + 1; -$upper = $end; - -if($upper > $threadcount) -{ - $upper = $threadcount; -} - -// Assemble page URL -if($mybb->input['sortby'] || $mybb->input['order'] || $mybb->input['datecut'] || $mybb->input['prefix']) // Ugly URL -{ - $page_url = str_replace("{fid}", $fid, FORUM_URL_PAGED); - - if($mybb->seo_support == true) - { - $q = "?"; - $and = ''; - } - else - { - $q = ''; - $and = "&"; - } - - if((!empty($foruminfo['defaultsortby']) && $sortby != $foruminfo['defaultsortby']) || (empty($foruminfo['defaultsortby']) && $sortby != "lastpost")) - { - $page_url .= "{$q}{$and}sortby={$sortby}"; - $q = ''; - $and = "&"; - } - - if($sortordernow != "desc") - { - $page_url .= "{$q}{$and}order={$sortordernow}"; - $q = ''; - $and = "&"; - } - - if($datecut > 0 && $datecut != 9999) - { - $page_url .= "{$q}{$and}datecut={$datecut}"; - $q = ''; - $and = "&"; - } - - if($tprefix != 0) - { - $page_url .= "{$q}{$and}prefix={$tprefix}"; - } -} -else -{ - $page_url = str_replace("{fid}", $fid, FORUM_URL_PAGED); -} -$multipage = multipage($threadcount, $perpage, $page, $page_url); - -if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0 && $fpermissions['canviewthreads'] != 0) -{ - $lang->load("ratethread"); - - switch($db->type) - { - case "pgsql": - $ratingadd = "CASE WHEN t.numratings=0 THEN 0 ELSE t.totalratings/t.numratings::numeric END AS averagerating, "; - break; - default: - $ratingadd = "(t.totalratings/t.numratings) AS averagerating, "; - } - - $lpbackground = "trow2"; - eval("\$ratingcol = \"".$templates->get("forumdisplay_threadlist_rating")."\";"); - eval("\$ratingsort = \"".$templates->get("forumdisplay_threadlist_sortrating")."\";"); - $colspan = "7"; -} -else -{ - if($sortfield == "averagerating") - { - $t = "t."; - $sortfield = "lastpost"; - } - $ratingadd = ''; - $lpbackground = "trow1"; - $colspan = "6"; -} - -if($ismod) -{ - ++$colspan; -} - -// Get Announcements -$announcementlist = ''; -if($has_announcements == true) -{ - $limit = ''; - $announcements = ''; - if($mybb->settings['announcementlimit']) - { - $limit = "LIMIT 0, ".$mybb->settings['announcementlimit']; - } - - $sql = build_parent_list($fid, "fid", "OR", $parentlist); - $time = TIME_NOW; - $query = $db->query(" - SELECT a.*, u.username - FROM ".TABLE_PREFIX."announcements a - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) - WHERE a.startdate<='$time' AND (a.enddate>='$time' OR a.enddate='0') AND ($sql OR fid='-1') - ORDER BY a.startdate DESC $limit - "); - - // See if this announcement has been read in our announcement array - $cookie = array(); - if(isset($mybb->cookies['mybb']['announcements'])) - { - $cookie = my_unserialize(stripslashes($mybb->cookies['mybb']['announcements'])); - } - - $announcementlist = ''; - $bgcolor = alt_trow(true); // Reset the trow colors - while($announcement = $db->fetch_array($query)) - { - if($announcement['startdate'] > $mybb->user['lastvisit'] && !$cookie[$announcement['aid']]) - { - $new_class = ' class="subject_new"'; - $folder = "newfolder"; - } - else - { - $new_class = ' class="subject_old"'; - $folder = "folder"; - } - - // Mmm, eat those announcement cookies if they're older than our last visit - if(isset($cookie[$announcement['aid']]) && $cookie[$announcement['aid']] < $mybb->user['lastvisit']) - { - unset($cookie[$announcement['aid']]); - } - - $announcement['announcementlink'] = get_announcement_link($announcement['aid']); - $announcement['subject'] = $parser->parse_badwords($announcement['subject']); - $announcement['subject'] = htmlspecialchars_uni($announcement['subject']); - $postdate = my_date('relative', $announcement['startdate']); - - $announcement['username'] = htmlspecialchars_uni($announcement['username']); - - $announcement['profilelink'] = build_profile_link($announcement['username'], $announcement['uid']); - - if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0 && $fpermissions['canviewthreads'] != 0) - { - eval("\$rating = \"".$templates->get("forumdisplay_announcement_rating")."\";"); - $lpbackground = "trow2"; - } - else - { - $rating = ''; - $lpbackground = "trow1"; - } - - if($ismod) - { - eval("\$modann = \"".$templates->get("forumdisplay_announcements_announcement_modbit")."\";"); - } - else - { - $modann = ''; - } - - $plugins->run_hooks("forumdisplay_announcement"); - eval("\$announcements .= \"".$templates->get("forumdisplay_announcements_announcement")."\";"); - $bgcolor = alt_trow(); - } - - if($announcements) - { - eval("\$announcementlist = \"".$templates->get("forumdisplay_announcements")."\";"); - $shownormalsep = true; - } - - if(empty($cookie)) - { - // Clean up cookie crumbs - my_setcookie('mybb[announcements]', 0, (TIME_NOW - (60*60*24*365))); - } - else if(!empty($cookie)) - { - my_setcookie("mybb[announcements]", addslashes(my_serialize($cookie)), -1); - } -} -else -{ - $announcementlist = ''; -} - -$tids = $threadcache = array(); -$icon_cache = $cache->read("posticons"); - -if($fpermissions['canviewthreads'] != 0) -{ - $plugins->run_hooks("forumdisplay_get_threads"); - - // Start Getting Threads - $query = $db->query(" - SELECT t.*, {$ratingadd}t.username AS threadusername, u.username - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) - WHERE t.fid='$fid' $tuseronly $tvisibleonly $datecutsql2 $prefixsql2 - ORDER BY t.sticky DESC, {$t}{$sortfield} $sortordernow $sortfield2 - LIMIT $start, $perpage - "); - - $ratings = false; - $moved_threads = array(); - while($thread = $db->fetch_array($query)) - { - $threadcache[$thread['tid']] = $thread; - - if($thread['numratings'] > 0 && $ratings == false) - { - $ratings = true; // Looks for ratings in the forum - } - - // If this is a moved thread - set the tid for participation marking and thread read marking to that of the moved thread - if(substr($thread['closed'], 0, 5) == "moved") - { - $tid = substr($thread['closed'], 6); - if(!isset($tids[$tid])) - { - $moved_threads[$tid] = $thread['tid']; - $tids[$thread['tid']] = $tid; - } - } - // Otherwise - set it to the plain thread ID - else - { - $tids[$thread['tid']] = $thread['tid']; - if(isset($moved_threads[$thread['tid']])) - { - unset($moved_threads[$thread['tid']]); - } - } - } - - if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0 && $mybb->user['uid'] && !empty($threadcache) && $ratings == true) - { - // Check if we've rated threads on this page - // Guests get the pleasure of not being ID'd, but will be checked when they try and rate - $imp = implode(",", array_keys($threadcache)); - $query = $db->simple_select("threadratings", "tid, uid", "tid IN ({$imp}) AND uid = '{$mybb->user['uid']}'"); - - while($rating = $db->fetch_array($query)) - { - $threadcache[$rating['tid']]['rated'] = 1; - } - } -} - -// If user has moderation tools available, prepare the Select All feature -$selectall = ''; -if(is_moderator($fid) && $threadcount > $perpage) -{ - $lang->page_selected = $lang->sprintf($lang->page_selected, count($threadcache)); - $lang->select_all = $lang->sprintf($lang->select_all, (int)$threadcount); - $lang->all_selected = $lang->sprintf($lang->all_selected, (int)$threadcount); - eval("\$selectall = \"".$templates->get("forumdisplay_inlinemoderation_selectall")."\";"); -} - -if(!empty($tids)) -{ - $tids = implode(",", $tids); -} - -// Check participation by the current user in any of these threads - for 'dot' folder icons -if($mybb->settings['dotfolders'] != 0 && $mybb->user['uid'] && !empty($threadcache)) -{ - $query = $db->simple_select("posts", "DISTINCT tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids}) {$visibleonly}"); - while($post = $db->fetch_array($query)) - { - if(!empty($moved_threads[$post['tid']])) - { - $post['tid'] = $moved_threads[$post['tid']]; - } - if($threadcache[$post['tid']]) - { - $threadcache[$post['tid']]['doticon'] = 1; - } - } -} - -// Read threads -if($mybb->user['uid'] && $mybb->settings['threadreadcut'] > 0 && !empty($threadcache)) -{ - $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); - while($readthread = $db->fetch_array($query)) - { - if(!empty($moved_threads[$readthread['tid']])) - { - $readthread['tid'] = $moved_threads[$readthread['tid']]; - } - if($threadcache[$readthread['tid']]) - { - $threadcache[$readthread['tid']]['lastread'] = $readthread['dateline']; - } - } -} - -if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) -{ - $query = $db->simple_select("forumsread", "dateline", "fid='{$fid}' AND uid='{$mybb->user['uid']}'"); - $forum_read = $db->fetch_field($query, "dateline"); - - $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($forum_read == 0 || $forum_read < $read_cutoff) - { - $forum_read = $read_cutoff; - } -} -else -{ - $forum_read = my_get_array_cookie("forumread", $fid); - - if(isset($mybb->cookies['mybb']['readallforums']) && !$forum_read) - { - $forum_read = $mybb->cookies['mybb']['lastvisit']; - } -} - -$unreadpost = 0; -$threads = ''; -if(!empty($threadcache) && is_array($threadcache)) -{ - if(!$mybb->settings['maxmultipagelinks']) - { - $mybb->settings['maxmultipagelinks'] = 5; - } - - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - foreach($threadcache as $thread) - { - $plugins->run_hooks("forumdisplay_thread"); - - $moved = explode("|", $thread['closed']); - - if($thread['visible'] == 0) - { - $bgcolor = "trow_shaded"; - } - elseif($thread['visible'] == -1 && is_moderator($fid, "canviewdeleted")) - { - $bgcolor = "trow_shaded trow_deleted"; - } - else - { - $bgcolor = alt_trow(); - } - - if($thread['sticky'] == 1) - { - $thread_type_class = " forumdisplay_sticky"; - } - else - { - $thread_type_class = " forumdisplay_regular"; - } - - $folder = ''; - $prefix = ''; - - $thread['author'] = $thread['uid']; - if(!$thread['username']) - { - $thread['username'] = $thread['profilelink'] = htmlspecialchars_uni($thread['threadusername']); - } - else - { - $thread['username'] = htmlspecialchars_uni($thread['username']); - $thread['profilelink'] = build_profile_link($thread['username'], $thread['uid']); - } - - // If this thread has a prefix, insert a space between prefix and subject - $thread['threadprefix'] = $threadprefix = ''; - if($thread['prefix'] != 0) - { - $threadprefix = build_prefixes($thread['prefix']); - if(!empty($threadprefix)) - { - $thread['threadprefix'] = $threadprefix['displaystyle'].' '; - } - } - - $thread['subject'] = $parser->parse_badwords($thread['subject']); - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - - if($thread['icon'] > 0 && $icon_cache[$thread['icon']]) - { - $icon = $icon_cache[$thread['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("forumdisplay_thread_icon")."\";"); - } - else - { - $icon = " "; - } - - $prefix = ''; - if($thread['poll']) - { - $prefix = $lang->poll_prefix; - } - - if($thread['sticky'] == "1" && !isset($donestickysep)) - { - eval("\$threads .= \"".$templates->get("forumdisplay_sticky_sep")."\";"); - $shownormalsep = true; - $donestickysep = true; - } - else if($thread['sticky'] == 0 && !empty($shownormalsep)) - { - eval("\$threads .= \"".$templates->get("forumdisplay_threads_sep")."\";"); - $shownormalsep = false; - } - - $rating = ''; - if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0) - { - if($moved[0] == "moved" || ($fpermissions['canviewdeletionnotice'] != 0 && $thread['visible'] == -1)) - { - eval("\$rating = \"".$templates->get("forumdisplay_thread_rating_moved")."\";"); - } - else - { - $thread['averagerating'] = (float)round($thread['averagerating'], 2); - $thread['width'] = (int)round($thread['averagerating'])*20; - $thread['numratings'] = (int)$thread['numratings']; - - $not_rated = ''; - if(!isset($thread['rated']) || empty($thread['rated'])) - { - $not_rated = ' star_rating_notrated'; - } - - $ratingvotesav = $lang->sprintf($lang->rating_votes_average, $thread['numratings'], $thread['averagerating']); - eval("\$rating = \"".$templates->get("forumdisplay_thread_rating")."\";"); - } - } - - $thread['pages'] = 0; - $thread['multipage'] = ''; - $threadpages = ''; - $morelink = ''; - $thread['posts'] = $thread['replies'] + 1; - - if($thread['unapprovedposts'] > 0 && $ismod) - { - $thread['posts'] += $thread['unapprovedposts'] + $thread['deletedposts']; - } - - if($thread['posts'] > $mybb->settings['postsperpage']) - { - $thread['pages'] = $thread['posts'] / $mybb->settings['postsperpage']; - $thread['pages'] = ceil($thread['pages']); - - if($thread['pages'] > $mybb->settings['maxmultipagelinks']) - { - $pagesstop = $mybb->settings['maxmultipagelinks'] - 1; - $page_link = get_thread_link($thread['tid'], $thread['pages']); - eval("\$morelink = \"".$templates->get("forumdisplay_thread_multipage_more")."\";"); - } - else - { - $pagesstop = $thread['pages']; - } - - for($i = 1; $i <= $pagesstop; ++$i) - { - $page_link = get_thread_link($thread['tid'], $i); - eval("\$threadpages .= \"".$templates->get("forumdisplay_thread_multipage_page")."\";"); - } - - eval("\$thread['multipage'] = \"".$templates->get("forumdisplay_thread_multipage")."\";"); - } - else - { - $threadpages = ''; - $morelink = ''; - $thread['multipage'] = ''; - } - - if($ismod) - { - if(isset($mybb->cookies[$inlinecookie]) && my_strpos($mybb->cookies[$inlinecookie], "|{$thread['tid']}|")) - { - $inlinecheck = "checked=\"checked\""; - ++$inlinecount; - } - else - { - $inlinecheck = ''; - } - - $multitid = $thread['tid']; - eval("\$modbit = \"".$templates->get("forumdisplay_thread_modbit")."\";"); - } - else - { - $modbit = ''; - } - - if($moved[0] == "moved") - { - $prefix = $lang->moved_prefix; - $thread['tid'] = $moved[1]; - $thread['replies'] = "-"; - $thread['views'] = "-"; - } - - $thread['threadlink'] = get_thread_link($thread['tid']); - $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); - - // Determine the folder - $folder = ''; - $folder_label = ''; - - if(isset($thread['doticon'])) - { - $folder = "dot_"; - $folder_label .= $lang->icon_dot; - } - - $gotounread = ''; - $isnew = 0; - $donenew = 0; - - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid'] && $thread['lastpost'] > $forum_read) - { - if(!empty($thread['lastread'])) - { - $last_read = $thread['lastread']; - } - else - { - $last_read = $read_cutoff; - } - } - else - { - $last_read = my_get_array_cookie("threadread", $thread['tid']); - } - - if($forum_read > $last_read) - { - $last_read = $forum_read; - } - - if($thread['lastpost'] > $last_read && $moved[0] != "moved") - { - $folder .= "new"; - $folder_label .= $lang->icon_new; - $new_class = "subject_new"; - $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); - eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); - $unreadpost = 1; - } - else - { - $folder_label .= $lang->icon_no_new; - $new_class = "subject_old"; - } - - if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews']) - { - $folder .= "hot"; - $folder_label .= $lang->icon_hot; - } - - if($thread['closed'] == 1) - { - $folder .= "lock"; - $folder_label .= $lang->icon_lock; - } - - if($moved[0] == "moved") - { - $folder = "move"; - $gotounread = ''; - } - - $folder .= "folder"; - - $inline_edit_tid = $thread['tid']; - - // If this user is the author of the thread and it is not closed or they are a moderator, they can edit - $inline_edit_class = ''; - if(($thread['uid'] == $mybb->user['uid'] && $thread['closed'] != 1 && $mybb->user['uid'] != 0 && $can_edit_titles == 1) || $ismod == true) - { - $inline_edit_class = "subject_editable"; - } - - $lastposter = htmlspecialchars_uni($thread['lastposter']); - $lastposteruid = $thread['lastposteruid']; - $lastpostdate = my_date('relative', $thread['lastpost']); - - // Don't link to guest's profiles (they have no profile). - if($lastposteruid == 0) - { - $lastposterlink = $lastposter; - } - else - { - $lastposterlink = build_profile_link($lastposter, $lastposteruid); - } - - $thread['replies'] = my_number_format($thread['replies']); - $thread['views'] = my_number_format($thread['views']); - - // Threads and posts requiring moderation - if($thread['unapprovedposts'] > 0 && is_moderator($fid, "canviewunapprove")) - { - if($thread['unapprovedposts'] > 1) - { - $unapproved_posts_count = $lang->sprintf($lang->thread_unapproved_posts_count, $thread['unapprovedposts']); - } - else - { - $unapproved_posts_count = $lang->sprintf($lang->thread_unapproved_post_count, 1); - } - - $thread['unapprovedposts'] = my_number_format($thread['unapprovedposts']); - eval("\$unapproved_posts = \"".$templates->get("forumdisplay_thread_unapproved_posts")."\";"); - } - else - { - $unapproved_posts = ''; - } - - // If this thread has 1 or more attachments show the papperclip - if($mybb->settings['enableattachments'] == 1 && $thread['attachmentcount'] > 0) - { - if($thread['attachmentcount'] > 1) - { - $attachment_count = $lang->sprintf($lang->attachment_count_multiple, $thread['attachmentcount']); - } - else - { - $attachment_count = $lang->attachment_count; - } - - eval("\$attachment_count = \"".$templates->get("forumdisplay_thread_attachment_count")."\";"); - } - else - { - $attachment_count = ''; - } - - $plugins->run_hooks("forumdisplay_thread_end"); - - if($fpermissions['canviewdeletionnotice'] != 0 && $thread['visible'] == -1 && !is_moderator($fid, "canviewdeleted")) - { - eval("\$threads .= \"".$templates->get("forumdisplay_thread_deleted")."\";"); - } - else - { - eval("\$threads .= \"".$templates->get("forumdisplay_thread")."\";"); - } - } - - $customthreadtools = $standardthreadtools = ''; - if($ismod) - { - if(is_moderator($fid, "canusecustomtools") && $has_modtools == true) - { - $gids = explode(',', $mybb->user['additionalgroups']); - $gids[] = $mybb->user['usergroup']; - $gids = array_filter(array_unique($gids)); - - $gidswhere = ''; - switch($db->type) - { - case "pgsql": - case "sqlite": - foreach($gids as $gid) - { - $gid = (int)$gid; - $gidswhere .= " OR ','||groups||',' LIKE '%,{$gid},%'"; - } - $query = $db->simple_select("modtools", 'tid, name', "(','||forums||',' LIKE '%,$fid,%' OR ','||forums||',' LIKE '%,-1,%' OR forums='') AND (groups='' OR ','||groups||',' LIKE '%,-1,%'{$gidswhere}) AND type = 't'"); - break; - default: - foreach($gids as $gid) - { - $gid = (int)$gid; - $gidswhere .= " OR CONCAT(',',groups,',') LIKE '%,{$gid},%'"; - } - $query = $db->simple_select("modtools", 'tid, name', "(CONCAT(',',forums,',') LIKE '%,$fid,%' OR CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='') AND (groups='' OR CONCAT(',',groups,',') LIKE '%,-1,%'{$gidswhere}) AND type = 't'"); - break; - } - - while($tool = $db->fetch_array($query)) - { - eval("\$customthreadtools .= \"".$templates->get("forumdisplay_inlinemoderation_custom_tool")."\";"); - } - - if($customthreadtools) - { - eval("\$customthreadtools = \"".$templates->get("forumdisplay_inlinemoderation_custom")."\";"); - } - } - - $inlinemodopenclose = $inlinemodstickunstick = $inlinemodsoftdelete = $inlinemodrestore = $inlinemoddelete = $inlinemodmanage = $inlinemodapproveunapprove = ''; - - if(is_moderator($fid, "canopenclosethreads")) - { - eval("\$inlinemodopenclose = \"".$templates->get("forumdisplay_inlinemoderation_openclose")."\";"); - } - - if(is_moderator($fid, "canstickunstickthreads")) - { - eval("\$inlinemodstickunstick = \"".$templates->get("forumdisplay_inlinemoderation_stickunstick")."\";"); - } - - if(is_moderator($fid, "cansoftdeletethreads")) - { - eval("\$inlinemodsoftdelete = \"".$templates->get("forumdisplay_inlinemoderation_softdelete")."\";"); - } - - if(is_moderator($fid, "canrestorethreads")) - { - eval("\$inlinemodrestore = \"".$templates->get("forumdisplay_inlinemoderation_restore")."\";"); - } - - if(is_moderator($fid, "candeletethreads")) - { - eval("\$inlinemoddelete = \"".$templates->get("forumdisplay_inlinemoderation_delete")."\";"); - } - - if(is_moderator($fid, "canmanagethreads")) - { - eval("\$inlinemodmanage = \"".$templates->get("forumdisplay_inlinemoderation_manage")."\";"); - } - - if(is_moderator($fid, "canapproveunapprovethreads")) - { - eval("\$inlinemodapproveunapprove = \"".$templates->get("forumdisplay_inlinemoderation_approveunapprove")."\";"); - } - - if(!empty($inlinemodopenclose) || !empty($inlinemodstickunstick) || !empty($inlinemodsoftdelete) || !empty($inlinemodrestore) || !empty($inlinemoddelete) || !empty($inlinemodmanage) || !empty($inlinemodapproveunapprove)) - { - eval("\$standardthreadtools = \"".$templates->get("forumdisplay_inlinemoderation_standard")."\";"); - } - - // Only show inline mod menu if there's options to show - if(!empty($standardthreadtools) || !empty($customthreadtools)) - { - eval("\$inlinemod = \"".$templates->get("forumdisplay_inlinemoderation")."\";"); - } - } -} - -// If there are no unread threads in this forum and no unread child forums - mark it as read -require_once MYBB_ROOT."inc/functions_indicators.php"; - -$unread_threads = fetch_unread_count($fid); -if($unread_threads !== false && $unread_threads == 0 && empty($unread_forums)) -{ - mark_forum_read($fid); -} - -// Subscription status -$add_remove_subscription = 'add'; -$add_remove_subscription_text = $lang->subscribe_forum; - -if($mybb->user['uid']) -{ - $query = $db->simple_select("forumsubscriptions", "fid", "fid='".$fid."' AND uid='{$mybb->user['uid']}'", array('limit' => 1)); - - if($db->fetch_field($query, 'fid')) - { - $add_remove_subscription = 'remove'; - $add_remove_subscription_text = $lang->unsubscribe_forum; - } -} - -$inline_edit_js = $clearstoredpass = ''; - -// Is this a real forum with threads? -if($foruminfo['type'] != "c") -{ - if($fpermissions['canviewthreads'] != 1) - { - eval("\$threads = \"".$templates->get("forumdisplay_nopermission")."\";"); - } - - if(!$threadcount && $fpermissions['canviewthreads'] == 1) - { - eval("\$threads = \"".$templates->get("forumdisplay_nothreads")."\";"); - } - - $clearstoredpass = ''; - if($foruminfo['password'] != '') - { - eval("\$clearstoredpass = \"".$templates->get("forumdisplay_threadlist_clearpass")."\";"); - } - - $prefixselect = build_forum_prefix_select($fid, $tprefix); - - $lang->rss_discovery_forum = $lang->sprintf($lang->rss_discovery_forum, htmlspecialchars_uni(strip_tags($foruminfo['name']))); - eval("\$rssdiscovery = \"".$templates->get("forumdisplay_rssdiscovery")."\";"); - eval("\$threadslist = \"".$templates->get("forumdisplay_threadlist")."\";"); -} -else -{ - $rssdiscovery = ''; - $threadslist = ''; - - if(empty($forums)) - { - error($lang->error_containsnoforums); - } -} - -$plugins->run_hooks("forumdisplay_end"); - -$foruminfo['name'] = strip_tags($foruminfo['name']); - -eval("\$forums = \"".$templates->get("forumdisplay")."\";"); -output_page($forums); \ No newline at end of file diff --git a/html/forums/global.php b/html/forums/global.php deleted file mode 100644 index c6c2170..0000000 --- a/html/forums/global.php +++ /dev/null @@ -1,1138 +0,0 @@ -read('usergroups'); - -// If the groups cache doesn't exist, update it and re-read it -if(!is_array($groupscache)) -{ - $cache->update_usergroups(); - $groupscache = $cache->read('usergroups'); -} - -if(!defined('THIS_SCRIPT')) -{ - define('THIS_SCRIPT', ''); -} - -$current_page = my_strtolower(basename(THIS_SCRIPT)); - -// Send page headers - don't send no-cache headers for attachment.php -if($current_page != 'attachment.php') -{ - send_page_headers(); -} - -// Do not use session system for defined pages -if((isset($mybb->input['action']) && isset($nosession[$mybb->input['action']])) || (isset($mybb->input['thumbnail']) && $current_page == 'attachment.php')) -{ - define('NO_ONLINE', 1); -} - -// Create session for this user -require_once MYBB_ROOT.'inc/class_session.php'; -$session = new session; -$session->init(); -$mybb->session = &$session; - -$mybb->user['ismoderator'] = is_moderator(0, '', $mybb->user['uid']); - -// Set our POST validation code here -$mybb->post_code = generate_post_check(); - -// Set and load the language -if(isset($mybb->input['language']) && $lang->language_exists($mybb->get_input('language')) && verify_post_check($mybb->get_input('my_post_key'), true)) -{ - $mybb->settings['bblanguage'] = $mybb->get_input('language'); - // If user is logged in, update their language selection with the new one - if($mybb->user['uid']) - { - if(isset($mybb->cookies['mybblang'])) - { - my_unsetcookie('mybblang'); - } - - $db->update_query('users', array('language' => $db->escape_string($mybb->settings['bblanguage'])), "uid = '{$mybb->user['uid']}'"); - } - // Guest = cookie - else - { - my_setcookie('mybblang', $mybb->settings['bblanguage']); - } - $mybb->user['language'] = $mybb->settings['bblanguage']; -} -// Cookied language! -else if(!$mybb->user['uid'] && !empty($mybb->cookies['mybblang']) && $lang->language_exists($mybb->cookies['mybblang'])) -{ - $mybb->settings['bblanguage'] = $mybb->cookies['mybblang']; -} -else if(!isset($mybb->settings['bblanguage'])) -{ - $mybb->settings['bblanguage'] = 'english'; -} - -// Load language -$lang->set_language($mybb->settings['bblanguage']); -$lang->load('global'); -$lang->load('messages'); - -// Run global_start plugin hook now that the basics are set up -$plugins->run_hooks('global_start'); - -if(function_exists('mb_internal_encoding') && !empty($lang->settings['charset'])) -{ - @mb_internal_encoding($lang->settings['charset']); -} - -// Select the board theme to use. -$loadstyle = ''; -$load_from_forum = $load_from_user = 0; -$style = array(); - -// The user used our new quick theme changer -if(isset($mybb->input['theme']) && verify_post_check($mybb->get_input('my_post_key'), true)) -{ - // Set up user handler. - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('update'); - - $user = array( - 'uid' => $mybb->user['uid'], - 'style' => $mybb->get_input('theme', MyBB::INPUT_INT), - 'usergroup' => $mybb->user['usergroup'], - 'additionalgroups' => $mybb->user['additionalgroups'] - ); - - $userhandler->set_data($user); - - // validate_user verifies the style if it is set in the data array. - if($userhandler->validate_user()) - { - $mybb->user['style'] = $user['style']; - - // If user is logged in, update their theme selection with the new one - if($mybb->user['uid']) - { - if(isset($mybb->cookies['mybbtheme'])) - { - my_unsetcookie('mybbtheme'); - } - - $userhandler->update_user(); - } - // Guest = cookie - else - { - my_setcookie('mybbtheme', $user['style']); - } - } -} -// Cookied theme! -else if(!$mybb->user['uid'] && !empty($mybb->cookies['mybbtheme'])) -{ - $mybb->user['style'] = (int)$mybb->cookies['mybbtheme']; -} - -// This user has a custom theme set in their profile -if(isset($mybb->user['style']) && (int)$mybb->user['style'] != 0) -{ - $mybb->user['style'] = (int)$mybb->user['style']; - - $loadstyle = "tid = '{$mybb->user['style']}'"; - $load_from_user = 1; -} - -$valid = array( - 'showthread.php', - 'forumdisplay.php', - 'newthread.php', - 'newreply.php', - 'ratethread.php', - 'editpost.php', - 'polls.php', - 'sendthread.php', - 'printthread.php', - 'moderation.php' -); - -if(in_array($current_page, $valid)) -{ - cache_forums(); - - // If we're accessing a post, fetch the forum theme for it and if we're overriding it - if(isset($mybb->input['pid']) && THIS_SCRIPT != "polls.php") - { - $query = $db->simple_select("posts", "fid", "pid = '{$mybb->input['pid']}'", array("limit" => 1)); - $fid = $db->fetch_field($query, 'fid'); - - if($fid) - { - $style = $forum_cache[$fid]; - $load_from_forum = 1; - } - } - // We have a thread id and a forum id, we can easily fetch the theme for this forum - else if(isset($mybb->input['tid'])) - { - $query = $db->simple_select('threads', 'fid', "tid = '{$mybb->input['tid']}'", array('limit' => 1)); - $fid = $db->fetch_field($query, 'fid'); - - if($fid) - { - $style = $forum_cache[$fid]; - $load_from_forum = 1; - } - } - // If we're accessing poll results, fetch the forum theme for it and if we're overriding it - else if(isset($mybb->input['pid']) && THIS_SCRIPT == "polls.php") - { - $query = $db->simple_select('threads', 'fid', "poll = '{$mybb->input['pid']}'", array('limit' => 1)); - $fid = $db->fetch_field($query, 'fid'); - - if($fid) - { - $style = $forum_cache[$fid]; - $load_from_forum = 1; - } - } - // We have a forum id - simply load the theme from it - else if(isset($mybb->input['fid']) && isset($forum_cache[$mybb->input['fid']])) - { - $style = $forum_cache[$mybb->input['fid']]; - $load_from_forum = 1; - } -} -unset($valid); - -// From all of the above, a theme was found -if(isset($style['style']) && $style['style'] > 0) -{ - $style['style'] = (int)$style['style']; - - // This theme is forced upon the user, overriding their selection - if($style['overridestyle'] == 1 || !isset($mybb->user['style'])) - { - $loadstyle = "tid = '{$style['style']}'"; - } -} - -// After all of that no theme? Load the board default -if(empty($loadstyle)) -{ - $loadstyle = "def='1'"; -} - -// Fetch the theme to load from the cache -if($loadstyle != "def='1'") -{ - $query = $db->simple_select('themes', 'name, tid, properties, stylesheets, allowedgroups', $loadstyle, array('limit' => 1)); - $theme = $db->fetch_array($query); - - if(isset($theme['tid']) && !$load_from_forum && !is_member($theme['allowedgroups']) && $theme['allowedgroups'] != 'all') - { - if($load_from_user == 1) - { - $db->update_query('users', array('style' => 0), "style='{$mybb->user['style']}' AND uid='{$mybb->user['uid']}'"); - } - - if(isset($mybb->cookies['mybbtheme'])) - { - my_unsetcookie('mybbtheme'); - } - - $loadstyle = "def='1'"; - } -} - -if($loadstyle == "def='1'") -{ - if(!$cache->read('default_theme')) - { - $cache->update_default_theme(); - } - - $theme = $cache->read('default_theme'); - - $load_from_forum = $load_from_user = 0; -} - -// No theme was found - we attempt to load the master or any other theme -if(!isset($theme['tid']) || isset($theme['tid']) && !$theme['tid']) -{ - // Missing theme was from a forum, run a query to set any forums using the theme to the default - if($load_from_forum == 1) - { - $db->update_query('forums', array('style' => 0), "style = '{$style['style']}'"); - } - // Missing theme was from a user, run a query to set any users using the theme to the default - else if($load_from_user == 1) - { - $db->update_query('users', array('style' => 0), "style = '{$mybb->user['style']}'"); - } - - // Attempt to load the master or any other theme if the master is not available - $query = $db->simple_select('themes', 'name, tid, properties, stylesheets', '', array('order_by' => 'tid', 'limit' => 1)); - $theme = $db->fetch_array($query); -} -$theme = @array_merge($theme, my_unserialize($theme['properties'])); - -// Fetch all necessary stylesheets -$stylesheets = ''; -$theme['stylesheets'] = my_unserialize($theme['stylesheets']); -$stylesheet_scripts = array("global", basename($_SERVER['PHP_SELF'])); -if(!empty($theme['color'])) -{ - $stylesheet_scripts[] = $theme['color']; -} -$stylesheet_actions = array("global"); -if(!empty($mybb->input['action'])) -{ - $stylesheet_actions[] = $mybb->get_input('action'); -} -foreach($stylesheet_scripts as $stylesheet_script) -{ - // Load stylesheets for global actions and the current action - foreach($stylesheet_actions as $stylesheet_action) - { - if(!$stylesheet_action) - { - continue; - } - - if(!empty($theme['stylesheets'][$stylesheet_script][$stylesheet_action])) - { - // Actually add the stylesheets to the list - foreach($theme['stylesheets'][$stylesheet_script][$stylesheet_action] as $page_stylesheet) - { - if(!empty($already_loaded[$page_stylesheet])) - { - continue; - } - - if(strpos($page_stylesheet, 'css.php') !== false) - { - $stylesheet_url = $mybb->settings['bburl'] . '/' . $page_stylesheet; - } - else - { - $stylesheet_url = $mybb->get_asset_url($page_stylesheet); - } - - if($mybb->settings['minifycss']) - { - $stylesheet_url = str_replace('.css', '.min.css', $stylesheet_url); - } - - if(strpos($page_stylesheet, 'css.php') !== false) - { - // We need some modification to get it working with the displayorder - $query_string = parse_url($stylesheet_url, PHP_URL_QUERY); - $id = (int) my_substr($query_string, 11); - $query = $db->simple_select("themestylesheets", "name", "sid={$id}"); - $real_name = $db->fetch_field($query, "name"); - $theme_stylesheets[$real_name] = "\n"; - } - else - { - $theme_stylesheets[basename($page_stylesheet)] = "\n"; - } - - $already_loaded[$page_stylesheet] = 1; - } - } - } -} -unset($actions); - -if(!empty($theme_stylesheets) && is_array($theme['disporder'])) -{ - foreach($theme['disporder'] as $style_name => $order) - { - if(!empty($theme_stylesheets[$style_name])) - { - $stylesheets .= $theme_stylesheets[$style_name]; - } - } -} - -// Are we linking to a remote theme server? -if(my_validate_url($theme['imgdir'])) -{ - // If a language directory for the current language exists within the theme - we use it - if(!empty($mybb->user['language'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->user['language']; - } - else - { - // Check if a custom language directory exists for this theme - if(!empty($mybb->settings['bblanguage'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->settings['bblanguage']; - } - // Otherwise, the image language directory is the same as the language directory for the theme - else - { - $theme['imglangdir'] = $theme['imgdir']; - } - } -} -else -{ - $img_directory = $theme['imgdir']; - - if($mybb->settings['usecdn'] && !empty($mybb->settings['cdnpath'])) - { - $img_directory = rtrim($mybb->settings['cdnpath'], '/') . '/' . ltrim($theme['imgdir'], '/'); - } - - if(!@is_dir($img_directory)) - { - $theme['imgdir'] = 'images'; - } - - // If a language directory for the current language exists within the theme - we use it - if(!empty($mybb->user['language']) && is_dir($img_directory.'/'.$mybb->user['language'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->user['language']; - } - else - { - // Check if a custom language directory exists for this theme - if(is_dir($img_directory.'/'.$mybb->settings['bblanguage'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->settings['bblanguage']; - } - // Otherwise, the image language directory is the same as the language directory for the theme - else - { - $theme['imglangdir'] = $theme['imgdir']; - } - } - - $theme['imgdir'] = $mybb->get_asset_url($theme['imgdir']); - $theme['imglangdir'] = $mybb->get_asset_url($theme['imglangdir']); -} - -// Theme logo - is it a relative URL to the forum root? Append bburl -if(!preg_match("#^(\.\.?(/|$)|([a-z0-9]+)://)#i", $theme['logo']) && substr($theme['logo'], 0, 1) != '/') -{ - $theme['logo'] = $mybb->get_asset_url($theme['logo']); -} - -// Load Main Templates and Cached Templates -if(isset($templatelist)) -{ - $templatelist .= ','; -} -else -{ - $templatelist = ''; -} - -$templatelist .= "headerinclude,header,footer,gobutton,htmldoctype,header_welcomeblock_member,header_welcomeblock_member_user,header_welcomeblock_member_moderator,header_welcomeblock_member_admin,error"; -$templatelist .= ",global_pending_joinrequests,global_awaiting_activation,nav,nav_sep,nav_bit,nav_sep_active,nav_bit_active,footer_languageselect,footer_themeselect,global_unreadreports,footer_contactus"; -$templatelist .= ",global_boardclosed_warning,global_bannedwarning,error_inline,error_nopermission_loggedin,error_nopermission,global_pm_alert,header_menu_search,header_menu_portal,redirect,footer_languageselect_option"; -$templatelist .= ",video_dailymotion_embed,video_facebook_embed,video_liveleak_embed,video_metacafe_embed,video_myspacetv_embed,video_veoh_embed,video_vimeo_embed,video_yahoo_embed,video_youtube_embed,debug_summary"; -$templatelist .= ",smilieinsert_row,smilieinsert_row_empty,smilieinsert,smilieinsert_getmore,smilieinsert_smilie,global_board_offline_modal,footer_themeselector,task_image,usercp_themeselector_option"; -$templatelist .= ",mycode_code,mycode_email,mycode_img,mycode_php,mycode_quote_post,mycode_size_int,mycode_url,global_no_permission_modal,global_boardclosed_reason,nav_dropdown,global_remote_avatar_notice"; -$templatelist .= ",header_welcomeblock_member_pms,header_welcomeblock_member_search,header_welcomeblock_guest,header_menu_calendar,header_menu_memberlist,global_dst_detection,header_quicksearch,smilie"; -$templates->cache($db->escape_string($templatelist)); - -// Set the current date and time now -$datenow = my_date($mybb->settings['dateformat'], TIME_NOW, '', false); -$timenow = my_date($mybb->settings['timeformat'], TIME_NOW); -$lang->welcome_current_time = $lang->sprintf($lang->welcome_current_time, $datenow . $lang->comma . $timenow); - -// Format the last visit date of this user appropriately -if(isset($mybb->user['lastvisit'])) -{ - $lastvisit = my_date('relative', $mybb->user['lastvisit'], '', 2); -} -// Otherwise, they've never visited before -else -{ - $lastvisit = $lang->lastvisit_never; -} - -$plugins->run_hooks('global_intermediate'); - -// If the board is closed and we have a usergroup allowed to view the board when closed, then show board closed warning -$bbclosedwarning = ''; -if($mybb->settings['boardclosed'] == 1 && $mybb->usergroup['canviewboardclosed'] == 1) -{ - eval('$bbclosedwarning = "'.$templates->get('global_boardclosed_warning').'";'); -} - -// Prepare the main templates for use -$admincplink = $modcplink = $usercplink = ''; - -// Load appropriate welcome block for the current logged in user -if($mybb->user['uid'] != 0) -{ - // User can access the admin cp and we're not hiding admin cp links, fetch it - if($mybb->usergroup['cancp'] == 1 && $mybb->config['hide_admin_links'] != 1) - { - $admin_dir = $config['admin_dir']; - eval('$admincplink = "'.$templates->get('header_welcomeblock_member_admin').'";'); - } - - if($mybb->usergroup['canmodcp'] == 1) - { - eval('$modcplink = "'.$templates->get('header_welcomeblock_member_moderator').'";'); - } - - if($mybb->usergroup['canusercp'] == 1) - { - eval('$usercplink = "'.$templates->get('header_welcomeblock_member_user').'";'); - } - - // Format the welcome back message - $lang->welcome_back = $lang->sprintf($lang->welcome_back, build_profile_link(htmlspecialchars_uni($mybb->user['username']), $mybb->user['uid']), $lastvisit); - - $searchlink = ''; - if($mybb->usergroup['cansearch'] == 1) - { - eval('$searchlink = "'.$templates->get('header_welcomeblock_member_search').'";'); - } - - // Tell the user their PM usage - $pmslink = ''; - if($mybb->settings['enablepms'] != 0 && $mybb->usergroup['canusepms'] == 1) - { - $lang->welcome_pms_usage = $lang->sprintf($lang->welcome_pms_usage, my_number_format($mybb->user['pms_unread']), my_number_format($mybb->user['pms_total'])); - - eval('$pmslink = "'.$templates->get('header_welcomeblock_member_pms').'";'); - } - - eval('$welcomeblock = "'.$templates->get('header_welcomeblock_member').'";'); -} -// Otherwise, we have a guest -else -{ - switch($mybb->settings['username_method']) - { - case 0: - $login_username = $lang->login_username; - break; - case 1: - $login_username = $lang->login_username1; - break; - case 2: - $login_username = $lang->login_username2; - break; - default: - $login_username = $lang->login_username; - break; - } - eval('$welcomeblock = "'.$templates->get('header_welcomeblock_guest').'";'); -} - -// Display menu links and quick search if user has permission -$menu_search = $menu_memberlist = $menu_portal = $menu_calendar = $quicksearch = ''; -if($mybb->usergroup['cansearch'] == 1) -{ - eval('$menu_search = "'.$templates->get('header_menu_search').'";'); - eval('$quicksearch = "'.$templates->get('header_quicksearch').'";'); -} - -if($mybb->settings['enablememberlist'] == 1 && $mybb->usergroup['canviewmemberlist'] == 1) -{ - eval('$menu_memberlist = "'.$templates->get('header_menu_memberlist').'";'); -} - -if($mybb->settings['enablecalendar'] == 1 && $mybb->usergroup['canviewcalendar'] == 1) -{ - eval('$menu_calendar = "'.$templates->get('header_menu_calendar').'";'); -} - -if($mybb->settings['portal'] == 1) -{ - eval('$menu_portal = "'.$templates->get('header_menu_portal').'";'); -} - -// See if there are any pending join requests for group leaders -$pending_joinrequests = ''; -$groupleaders = $cache->read('groupleaders'); -if($mybb->user['uid'] != 0 && is_array($groupleaders) && array_key_exists($mybb->user['uid'], $groupleaders)) -{ - $groupleader = $groupleaders[$mybb->user['uid']]; - - $gids = "'0'"; - foreach($groupleader as $user) - { - if($user['canmanagerequests'] != 1) - { - continue; - } - - $user['gid'] = (int)$user['gid']; - $gids .= ",'{$user['gid']}'"; - } - - $query = $db->simple_select('joinrequests', 'COUNT(uid) as total', "gid IN ({$gids}) AND invite='0'"); - $total_joinrequests = $db->fetch_field($query, 'total'); - - if($total_joinrequests > 0) - { - if($total_joinrequests == 1) - { - $lang->pending_joinrequests = $lang->pending_joinrequest; - } - else - { - $total_joinrequests = my_number_format($total_joinrequests); - $lang->pending_joinrequests = $lang->sprintf($lang->pending_joinrequests, $total_joinrequests); - } - - eval('$pending_joinrequests = "'.$templates->get('global_pending_joinrequests').'";'); - } -} - -$unreadreports = ''; -// This user is a moderator, super moderator or administrator -if($mybb->settings['reportmethod'] == "db" && ($mybb->usergroup['cancp'] == 1 || ($mybb->user['ismoderator'] && $mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canmanagereportedcontent'] == 1))) -{ - // Only worth checking if we are here because we have ACP permissions and the other condition fails - if($mybb->usergroup['cancp'] == 1 && !($mybb->user['ismoderator'] && $mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canmanagereportedcontent'] == 1)) - { - // First we check if the user's a super admin: if yes, we don't care about permissions - $can_access_moderationqueue = true; - $is_super_admin = is_super_admin($mybb->user['uid']); - if(!$is_super_admin) - { - // Include admin functions - if(!file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php")) - { - $can_access_moderationqueue = false; - } - - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; - - // Verify if we have permissions to access forum-moderation_queue - require_once MYBB_ROOT.$mybb->config['admin_dir']."/modules/forum/module_meta.php"; - if(function_exists("forum_admin_permissions")) - { - // Get admin permissions - $adminperms = get_admin_permissions($mybb->user['uid']); - - $permissions = forum_admin_permissions(); - if(array_key_exists('moderation_queue', $permissions['permissions']) && $adminperms['forum']['moderation_queue'] != 1) - { - $can_access_moderationqueue = false; - } - } - } - } - else - { - $can_access_moderationqueue = false; - } - - if($can_access_moderationqueue || ($mybb->user['ismoderator'] && $mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canmanagereportedcontent'] == 1)) - { - // Read the reported content cache - $reported = $cache->read('reportedcontent'); - - // 0 or more reported items currently exist - if($reported['unread'] > 0) - { - // We want to avoid one extra query for users that can moderate any forum - if($mybb->usergroup['cancp'] || $mybb->usergroup['issupermod']) - { - $unread = (int)$reported['unread']; - } - else - { - $unread = 0; - $query = $db->simple_select('reportedcontent', 'id3', "reportstatus='0' AND (type = 'post' OR type = '')"); - - while($fid = $db->fetch_field($query, 'id3')) - { - if(is_moderator($fid, "canmanagereportedposts")) - { - ++$unread; - } - } - } - - if($unread > 0) - { - if($unread == 1) - { - $lang->unread_reports = $lang->unread_report; - } - else - { - $lang->unread_reports = $lang->sprintf($lang->unread_reports, my_number_format($unread)); - } - - eval('$unreadreports = "'.$templates->get('global_unreadreports').'";'); - } - } - } -} - -// Got a character set? -$charset = 'UTF-8'; -if(isset($lang->settings['charset']) && $lang->settings['charset']) -{ - $charset = $lang->settings['charset']; -} - -// Is this user apart of a banned group? -$bannedwarning = ''; -if($mybb->usergroup['isbannedgroup'] == 1) -{ - // Fetch details on their ban - $query = $db->simple_select('banned', '*', "uid = '{$mybb->user['uid']}'", array('limit' => 1)); - $ban = $db->fetch_array($query); - - if($ban['uid']) - { - // Format their ban lift date and reason appropriately - $banlift = $lang->banned_lifted_never; - $reason = htmlspecialchars_uni($ban['reason']); - - if($ban['lifted'] > 0) - { - $banlift = my_date($mybb->settings['dateformat'], $ban['lifted']) . $lang->comma . my_date($mybb->settings['timeformat'], $ban['lifted']); - } - } - - if(empty($reason)) - { - $reason = $lang->unknown; - } - - if(empty($banlift)) - { - $banlift = $lang->unknown; - } - - // Display a nice warning to the user - eval('$bannedwarning = "'.$templates->get('global_bannedwarning').'";'); -} - -$lang->ajax_loading = str_replace("'", "\\'", $lang->ajax_loading); - -// Check if this user has a new private message. -$pm_notice = ''; -if(isset($mybb->user['pmnotice']) && $mybb->user['pmnotice'] == 2 && $mybb->user['pms_unread'] > 0 && $mybb->settings['enablepms'] != 0 && $mybb->usergroup['canusepms'] != 0 && $mybb->usergroup['canview'] != 0 && ($current_page != "private.php" || $mybb->get_input('action') != "read")) -{ - if(!isset($parser)) - { - require_once MYBB_ROOT.'inc/class_parser.php'; - $parser = new postParser; - } - - $query = $db->query(" - SELECT pm.subject, pm.pmid, fu.username AS fromusername, fu.uid AS fromuid - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users fu on (fu.uid=pm.fromid) - WHERE pm.folder = '1' AND pm.uid = '{$mybb->user['uid']}' AND pm.status = '0' - ORDER BY pm.dateline DESC - LIMIT 1 - "); - - $pm = $db->fetch_array($query); - $pm['subject'] = $parser->parse_badwords($pm['subject']); - - if($pm['fromuid'] == 0) - { - $pm['fromusername'] = $lang->mybb_engine; - $user_text = $pm['fromusername']; - } - else - { - $pm['fromusername'] = htmlspecialchars_uni($pm['fromusername']); - $user_text = build_profile_link($pm['fromusername'], $pm['fromuid']); - } - - if($mybb->user['pms_unread'] == 1) - { - $privatemessage_text = $lang->sprintf($lang->newpm_notice_one, $user_text, $mybb->settings['bburl'], $pm['pmid'], htmlspecialchars_uni($pm['subject'])); - } - else - { - $privatemessage_text = $lang->sprintf($lang->newpm_notice_multiple, $mybb->user['pms_unread'], $user_text, $mybb->settings['bburl'], $pm['pmid'], htmlspecialchars_uni($pm['subject'])); - } - eval('$pm_notice = "'.$templates->get('global_pm_alert').'";'); -} - -$remote_avatar_notice = ''; -if(($mybb->user['avatartype'] === 'remote' || $mybb->user['avatartype'] === 'gravatar') && !$mybb->settings['allowremoteavatars']) -{ - eval('$remote_avatar_notice = "'.$templates->get('global_remote_avatar_notice').'";'); -} - -if($mybb->settings['awactialert'] == 1 && $mybb->usergroup['cancp'] == 1) -{ - $awaitingusers = $cache->read('awaitingactivation'); - - if(isset($awaitingusers['time']) && $awaitingusers['time'] + 86400 < TIME_NOW) - { - $cache->update_awaitingactivation(); - $awaitingusers = $cache->read('awaitingactivation'); - } - - if(!empty($awaitingusers['users'])) - { - $awaitingusers = (int)$awaitingusers['users']; - } - else - { - $awaitingusers = 0; - } - - if($awaitingusers < 1) - { - $awaitingusers = 0; - } - else - { - $awaitingusers = my_number_format($awaitingusers); - } - - if($awaitingusers > 0) - { - if($awaitingusers == 1) - { - $awaiting_message = $lang->awaiting_message_single; - } - else - { - $awaiting_message = $lang->sprintf($lang->awaiting_message_plural, $awaitingusers); - } - - if($admincplink) - { - $awaiting_message .= $lang->sprintf($lang->awaiting_message_link, $mybb->settings['bburl'], $admin_dir); - } - - eval('$awaitingusers = "'.$templates->get('global_awaiting_activation').'";'); - } - else - { - $awaitingusers = ''; - } -} - -// Set up some of the default templates -eval('$headerinclude = "'.$templates->get('headerinclude').'";'); -eval('$gobutton = "'.$templates->get('gobutton').'";'); -eval('$htmldoctype = "'.$templates->get('htmldoctype', 1, 0).'";'); -eval('$header = "'.$templates->get('header').'";'); - -$copy_year = my_date('Y', TIME_NOW); - -// Are we showing version numbers in the footer? -$mybbversion = ''; -if($mybb->settings['showvernum'] == 1) -{ - $mybbversion = ' '.$mybb->version; -} - -// Check to see if we have any tasks to run -$task_image = ''; -$task_cache = $cache->read('tasks'); -if(!$task_cache['nextrun']) -{ - $task_cache['nextrun'] = TIME_NOW; -} - -if($task_cache['nextrun'] <= TIME_NOW) -{ - eval("\$task_image = \"".$templates->get("task_image")."\";"); -} - -// Post code -$post_code_string = ''; -if($mybb->user['uid']) -{ - $post_code_string = '&my_post_key='.$mybb->post_code; -} - -// Are we showing the quick language selection box? -$lang_select = $lang_options = ''; -if($mybb->settings['showlanguageselect'] != 0) -{ - $languages = $lang->get_languages(); - - if(count($languages) > 1) - { - foreach($languages as $key => $language) - { - $language = htmlspecialchars_uni($language); - - // Current language matches - if($lang->language == $key) - { - $selected = " selected=\"selected\""; - } - else - { - $selected = ''; - } - - eval('$lang_options .= "'.$templates->get('footer_languageselect_option').'";'); - } - - $lang_redirect_url = get_current_location(true, 'language'); - eval('$lang_select = "'.$templates->get('footer_languageselect').'";'); - } -} - -// Are we showing the quick theme selection box? -$theme_select = $theme_options = ''; -if($mybb->settings['showthemeselect'] != 0) -{ - $theme_options = build_theme_select("theme", $mybb->user['style'], 0, '', false, true); - - if(!empty($theme_options)) - { - $theme_redirect_url = get_current_location(true, 'theme'); - eval('$theme_select = "'.$templates->get('footer_themeselect').'";'); - } -} - -// If we use the contact form, show 'Contact Us' link when appropriate -$contact_us = ''; -if(($mybb->settings['contactlink'] == "contact.php" && $mybb->settings['contact'] == 1 && ($mybb->settings['contact_guests'] != 1 && $mybb->user['uid'] == 0 || $mybb->user['uid'] > 0)) || $mybb->settings['contactlink'] != "contact.php") -{ - if(!my_validate_url($mybb->settings['contactlink'], true) && my_substr($mybb->settings['contactlink'], 0, 7) != 'mailto:') - { - $mybb->settings['contactlink'] = $mybb->settings['bburl'].'/'.$mybb->settings['contactlink']; - } - - eval('$contact_us = "'.$templates->get('footer_contactus').'";'); -} - -// DST Auto detection enabled? -$auto_dst_detection = ''; -if($mybb->user['uid'] > 0 && $mybb->user['dstcorrection'] == 2) -{ - $timezone = (float)$mybb->user['timezone'] + $mybb->user['dst']; - eval('$auto_dst_detection = "'.$templates->get('global_dst_detection').'";'); -} - -eval('$footer = "'.$templates->get('footer').'";'); - -// Add our main parts to the navigation -$navbits = array(); -$navbits[0]['name'] = $mybb->settings['bbname_orig']; -$navbits[0]['url'] = $mybb->settings['bburl'].'/index.php'; - -// Set the link to the archive. -$archive_url = build_archive_link(); - -// Check banned ip addresses -if(is_banned_ip($session->ipaddress, true)) -{ - if($mybb->user['uid']) - { - $db->delete_query('sessions', "ip = ".$db->escape_binary($session->packedip)." OR uid='{$mybb->user['uid']}'"); - } - else - { - $db->delete_query('sessions', "ip = ".$db->escape_binary($session->packedip)); - } - error($lang->error_banned); -} - -$closed_bypass = array( - 'member.php' => array( - 'login', - 'do_login', - 'logout', - ), - 'captcha.php', -); - -// If the board is closed, the user is not an administrator and they're not trying to login, show the board closed message -if($mybb->settings['boardclosed'] == 1 && $mybb->usergroup['canviewboardclosed'] != 1 && !in_array($current_page, $closed_bypass) && (!is_array($closed_bypass[$current_page]) || !in_array($mybb->get_input('action'), $closed_bypass[$current_page]))) -{ - // Show error - if(!$mybb->settings['boardclosed_reason']) - { - $mybb->settings['boardclosed_reason'] = $lang->boardclosed_reason; - } - - eval('$reason = "'.$templates->get('global_boardclosed_reason').'";'); - $lang->error_boardclosed .= $reason; - - if(!$mybb->get_input('modal')) - { - error($lang->error_boardclosed); - } - else - { - $output = ''; - eval('$output = "'.$templates->get('global_board_offline_modal', 1, 0).'";'); - echo($output); - } - exit; -} - -$force_bypass = array( - 'member.php' => array( - 'login', - 'do_login', - 'logout', - 'register', - 'do_register', - 'lostpw', - 'do_lostpw', - 'activate', - 'resendactivation', - 'do_resendactivation', - 'resetpassword', - ), - 'captcha.php', -); - -// If the board forces user to login/register, and the user is a guest, show the force login message -if($mybb->settings['forcelogin'] == 1 && $mybb->user['uid'] == 0 && !in_array($current_page, $force_bypass) && (!is_array($force_bypass[$current_page]) || !in_array($mybb->get_input('action'), $force_bypass[$current_page]))) -{ - // Show error - error_no_permission(); - exit; -} - -// Load Limiting -if($mybb->usergroup['cancp'] != 1 && $mybb->settings['load'] > 0 && ($load = get_server_load()) && $load != $lang->unknown && $load > $mybb->settings['load']) -{ - // User is not an administrator and the load limit is higher than the limit, show an error - error($lang->error_loadlimit); -} - -// If there is a valid referrer in the URL, cookie it -if(!$mybb->user['uid'] && $mybb->settings['usereferrals'] == 1 && (isset($mybb->input['referrer']) || isset($mybb->input['referrername']))) -{ - if(isset($mybb->input['referrername'])) - { - $condition = "username = '".$db->escape_string($mybb->get_input('referrername'))."'"; - } - else - { - $condition = "uid = '".$mybb->get_input('referrer', MyBB::INPUT_INT)."'"; - } - - $query = $db->simple_select('users', 'uid', $condition, array('limit' => 1)); - $referrer = $db->fetch_array($query); - - if($referrer['uid']) - { - my_setcookie('mybb[referrer]', $referrer['uid']); - } -} - -$output = ''; -$notallowed = false; -if($mybb->usergroup['canview'] != 1) -{ - // Check pages allowable even when not allowed to view board - if(defined('ALLOWABLE_PAGE')) - { - if(is_string(ALLOWABLE_PAGE)) - { - $allowable_actions = explode(',', ALLOWABLE_PAGE); - if(!in_array($mybb->get_input('action'), $allowable_actions)) - { - $notallowed = true; - } - - unset($allowable_actions); - } - else if(ALLOWABLE_PAGE !== 1) - { - $notallowed = true; - } - } - else - { - $notallowed = true; - } - - if($notallowed == true) - { - if(!$mybb->get_input('modal')) - { - error_no_permission(); - } - else - { - eval('$output = "'.$templates->get('global_no_permission_modal', 1, 0).'";'); - echo($output); - exit; - } - } -} - -// Find out if this user of ours is using a banned email address. -// If they are, redirect them to change it -if($mybb->user['uid'] && is_banned_email($mybb->user['email']) && $mybb->settings['emailkeep'] != 1) -{ - if(THIS_SCRIPT != 'usercp.php' || THIS_SCRIPT == 'usercp.php' && $mybb->get_input('action') != 'email' && $mybb->get_input('action') != 'do_email') - { - redirect('usercp.php?action=email'); - } - else if($mybb->request_method != 'post') - { - $banned_email_error = inline_error(array($lang->banned_email_warning)); - } -} - -// work out which items the user has collapsed -$colcookie = ''; -if(!empty($mybb->cookies['collapsed'])) -{ - $colcookie = $mybb->cookies['collapsed']; -} - -// set up collapsable items (to automatically show them us expanded) -$collapsed = array('boardstats' => '', 'boardstats_e' => '', 'quickreply' => '', 'quickreply_e' => ''); -$collapsedimg = $collapsed; - -if($colcookie) -{ - $col = explode("|", $colcookie); - if(!is_array($col)) - { - $col[0] = $colcookie; // only one item - } - unset($collapsed); - foreach($col as $key => $val) - { - $ex = $val."_e"; - $co = $val."_c"; - $collapsed[$co] = "display: show;"; - $collapsed[$ex] = "display: none;"; - $collapsedimg[$val] = "_collapsed"; - $collapsedthead[$val] = " thead_collapsed"; - } -} - -// Run hooks for end of global.php -$plugins->run_hooks('global_end'); - -$globaltime = $maintimer->getTime(); diff --git a/html/forums/htaccess-nginx.txt b/html/forums/htaccess-nginx.txt deleted file mode 100644 index 753003b..0000000 --- a/html/forums/htaccess-nginx.txt +++ /dev/null @@ -1,28 +0,0 @@ -# Note: You are able to choose a different name in the Admin CP. If you've done that you need to change it here too -location ~ /error.log -{ - deny all; -} - -# Note: You are able to rename the admin directory. If you've done that, you need to change it here too -location /admin/backups { - deny all; -} - -rewrite ^/forum-([0-9]+).html$ /forumdisplay.php?fid=$1 last; -rewrite ^/forum-([0-9]+)-page-([0-9]+).html$ /forumdisplay.php?fid=$1&page=$2 last; -rewrite ^/thread-([0-9]+).html$ /showthread.php?tid=$1 last; -rewrite ^/thread-([0-9]+)-page-([0-9]+).html$ /showthread.php?tid=$1&page=$2 last; -rewrite ^/thread-([0-9]+)-lastpost.html$ /showthread.php?tid=$1&action=lastpost last; -rewrite ^/thread-([0-9]+)-nextnewest.html$ /showthread.php?tid=$1&action=nextnewest last; -rewrite ^/thread-([0-9]+)-nextoldest.html$ /showthread.php?tid=$1&action=nextoldest last; -rewrite ^/thread-([0-9]+)-newpost.html$ /showthread.php?tid=$1&action=newpost last; -rewrite ^/thread-([0-9]+)-post-([0-9]+).html$ /showthread.php?tid=$1&pid=$2 last; -rewrite ^/post-([0-9]+).html$ /showthread.php?pid=$1 last; -rewrite ^/announcement-([0-9]+).html$ /announcements.php?aid=$1 last; -rewrite ^/user-([0-9]+).html$ /member.php?action=profile&uid=$1 last; -rewrite ^/calendar-([0-9]+).html$ /calendar.php?calendar=$1 last; -rewrite ^/calendar-([0-9]+)-year-([0-9]+)-month-([0-9]+).html$ /calendar.php?calendar=$1&year=$2&month=$3 last; -rewrite ^/calendar-([0-9]+)-year-([0-9]+)-month-([0-9]+)-day-([0-9]+).html$ /calendar.php?action=dayview&calendar=$1&year=$2&month=$3&day=$4 last; -rewrite ^/calendar-([0-9]+)-week-(n?[0-9]+).html$ /calendar.php?action=weekview&calendar=$1&week=$2 last; -rewrite ^/event-([0-9]+).html$ /calendar.php?action=event&eid=$1 last; diff --git a/html/forums/htaccess.txt b/html/forums/htaccess.txt deleted file mode 100644 index 341e884..0000000 --- a/html/forums/htaccess.txt +++ /dev/null @@ -1,67 +0,0 @@ -Options -MultiViews +FollowSymlinks -Indexes - -# -# If mod_security is enabled, attempt to disable it. -# - Note, this will work on the majority of hosts but on -# MediaTemple, it is known to cause random Internal Server -# errors. For MediaTemple, please remove the block below -# - - # Turn off mod_security filtering. - SecFilterEngine Off - - # The below probably isn't needed, but better safe than sorry. - SecFilterScanPOST Off - - -# -# MyBB "search engine friendly" URL rewrites -# - Note, for these to work with MyBB please make sure you have -# the setting enabled in the Admin CP and you have this file -# named .htaccess -# - - RewriteEngine on - RewriteRule ^forum-([0-9]+)\.html$ forumdisplay.php?fid=$1 [L,QSA] - RewriteRule ^forum-([0-9]+)-page-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2 [L,QSA] - - RewriteRule ^thread-([0-9]+)\.html$ showthread.php?tid=$1 [L,QSA] - RewriteRule ^thread-([0-9]+)-page-([0-9]+)\.html$ showthread.php?tid=$1&page=$2 [L,QSA] - RewriteRule ^thread-([0-9]+)-lastpost\.html$ showthread.php?tid=$1&action=lastpost [L,QSA] - RewriteRule ^thread-([0-9]+)-nextnewest\.html$ showthread.php?tid=$1&action=nextnewest [L,QSA] - RewriteRule ^thread-([0-9]+)-nextoldest\.html$ showthread.php?tid=$1&action=nextoldest [L,QSA] - RewriteRule ^thread-([0-9]+)-newpost\.html$ showthread.php?tid=$1&action=newpost [L,QSA] - RewriteRule ^thread-([0-9]+)-post-([0-9]+)\.html$ showthread.php?tid=$1&pid=$2 [L,QSA] - - RewriteRule ^post-([0-9]+)\.html$ showthread.php?pid=$1 [L,QSA] - - RewriteRule ^announcement-([0-9]+)\.html$ announcements.php?aid=$1 [L,QSA] - - RewriteRule ^user-([0-9]+)\.html$ member.php?action=profile&uid=$1 [L,QSA] - - RewriteRule ^calendar-([0-9]+)\.html$ calendar.php?calendar=$1 [L,QSA] - RewriteRule ^calendar-([0-9]+)-year-([0-9]+)-month-([0-9]+)\.html$ calendar.php?calendar=$1&year=$2&month=$3 [L,QSA] - RewriteRule ^calendar-([0-9]+)-year-([0-9]+)-month-([0-9]+)-day-([0-9]+)\.html$ calendar.php?action=dayview&calendar=$1&year=$2&month=$3&day=$4 [L,QSA] - RewriteRule ^calendar-([0-9]+)-week-(n?[0-9]+)\.html$ calendar.php?action=weekview&calendar=$1&week=$2 [L,QSA] - - RewriteRule ^event-([0-9]+)\.html$ calendar.php?action=event&eid=$1 [L,QSA] - - - SetEnv SEO_SUPPORT 1 - - - -# -# If Apache is compiled with built in mod_deflade/GZIP support -# then GZIP Javascript, CSS, HTML and XML so they're sent to -# the client faster. -# - - AddOutputFilterByType DEFLATE text/css text/html application/xhtml+xml text/xml application/xml text/plain text/x-component application/javascript application/x-javascript application/rss+xml application/atom+xml application/json application/manifest+json application/x-web-app-manifest+json application/vnd.ms-fontobject application/font-sfnt application/font-woff application/font-woff2 image/svg+xml image/x-icon - - -# Note: You are able to choose a different name in the Admin CP. If you've done that you need to change it here too - - Order Deny,Allow - Deny from all - diff --git a/html/forums/images/arrow_down.png b/html/forums/images/arrow_down.png deleted file mode 100644 index ab288119e4473c28c47c31920e806fa07b4864fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmV++0p9+JP))Ia_+<6s(`)>XH zpSJ7$Gmu)49uzMa_uUlLYrnKEdFzX3^{2o8PhS7(f8^2!|NUoQ`|mmR;{Sv-cmD@3 zz5fiP2Ba2i7-%+}7FDi1ye@d@ooBI|9{;zVdKrv^R^I>bI_ugqkQ_)2-awQs+#@QH zwRN5O^lQ(|wtW0=u<^rx-APxTfy6*^M8$$o@;Xu8nC0svdoMqe=(+q1#0H6x6pfsr n3q)B1X0HQb5SxbSVAKErm^Rf_A%R&n00000NkvXXu0mjfU)6^@ diff --git a/html/forums/images/attachtypes/blank.png b/html/forums/images/attachtypes/blank.png deleted file mode 100644 index be471b149962189ad182307313e68097ff990310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4+?P)!NYRIJel@9}l$4R_W!`@8KsGiUDVH)kc7Szab9 zW*$Xpqh#F~V;-nLLAIf_Za-dGIs8+KgtgYBj3EPC#c@o>*VnUXGIU=KP>KN|B?Kt| z{!ss6(TD!tm?!b2augW9Z$I wEZ~1)pI*NFz@x3*!9WD~_x<|^kRFiF0UCALO(K5}~x60Yr*as+qSL3&zKi}5Op4|s%jI5QW z2*N0OzaGck5?t34>;-U-cq%-{5+uVR!8O8NCc>Rj*dF%6FSE6Js@iXzwm0wISwn&} zNlGhfwe??u0Nt=12M5lcJ^9S{kD8X{4+)|;#*aq%)k82!1jjF2xISjgm=_!m3BoYM zAFXlk!2^)-YZhn^v!0dGEywScU=Hvf!}THr#>2G3NyYE(nnc6AFdZt9O3* z{Q0ZaI_p}pEZcYZ@Fkf(eH(x=09+BzE2|kZwxdt7Ab70by}JY82Y_FH0iXKH?Ct>c QKL7v#07*qoM6N<$f@;9k`v3p{ diff --git a/html/forums/images/attachtypes/doc.png b/html/forums/images/attachtypes/doc.png deleted file mode 100644 index 80a9f93888a215b90400d456c0b0329311d66ac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)(TM~m( zpuoRd)J zcAPv3e%el(HiRfBg4Ux?Be{p?FTQ@os_ol_f=!#w5JBTX$MNWu4;;4~c@sNI|IPRB zUfi)}b^eXs`>xpoJzqk7DMs+gQ8(IXJGN$bFvs z6h$Qb>(m=MbhHTaSKW$Vzf833bsV+Z9mJjcUnO#%=K)m}$xmHJt$_o_iXeCCjqv## zeE)7FfcrcTX_`p*e^RY)-*FWSc~=DV zq$9FruTo_m0EmQeSwyhNA`Ft5RP!$1@GT265hc>)%{wkbv0{r;1Ml(;-~I-m>YTf~ S3{RH;0000P>Z#b49X^xpvA^E&kD(q&Xm zaWTSVm?pNJJ$v%~w{QD3UH|qQ;J7Xdk}e7dpu7kUUbt|(V#SIdx&95XZ5xqT3?MTAC}IA@j$0E7TVL73z}!0)u}I8a5PDGGAa({Xt7X85*Evu2MoW|$2E zoMclIfm>9B6Z`g|NB{n)RH+ipnmx{#VKxZxJP)d(;Pta-Xxg$R+I8#*T~%q;>~Y2n zvq3 zaRz3X4g3P4QKQ(l5sSsps7VtnTeF5g!f(Tx4I3aoYXX@42XOM>!FFSZ4eR^-<45Q` zwywjZ4FlFsbIrbhg7xQHt5$8-wr9_YS9a|hU%g6|$_NurvuoG&8M9_BkEf%7uXb7V-c9002ovPDHLkV1jZB>Qn## diff --git a/html/forums/images/attachtypes/image.png b/html/forums/images/attachtypes/image.png deleted file mode 100644 index 3696cf90215be227c8edffd4fba86f4092d57e49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmV6+=ImR4fNd*x z+A7DPt9Gjg6LRP^?p+>%VXUBM1X}a>>0`!;aa22O^a-<>QjaH#Q}A*J z$F6B@rRiBgx9c}b(HWe{r;(7+&oS2q9+IU`De{7{C@IU5s;m%I-51Yb{^Xf#nVVqP zA2nDoeHU>YlOzdwo>NsNLR5?&U-yqbEDGv6r6?lFAZj~WC@DSnN%J>1Z0b@BZc zQu>UJYQB7FNYm67vSy{iu;IYx&v6h%Tt9V!KZ^od1W}A(y<*X#lYXAh;UA*L#-4jX k42%Op{w@+2`0v&D6=U1QOhV5H-2eap07*qoM6N<$f^$ja3;+NC diff --git a/html/forums/images/attachtypes/pdf.png b/html/forums/images/attachtypes/pdf.png deleted file mode 100644 index a12adf816b18a6424bef1a670d32b2ccc2994d61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_@5P)cH_EHZ3jh+r>M4VMvYT9u5ARxdZYK^tj$jsJF8japZqdDm*GFa z%TGReJ&v~X`sKl=pPrD41ibk8<0J1s`Q*F(x;9vwrct-8HU_3lnd1E)e;gH&ho60R zJOPtvbgtb xj=+ind*g`Z^X4tx@60n_vK!TOI!kc`sx{R`;YdkuOX>gs002ovPDHLkV1h;c3>E+Y diff --git a/html/forums/images/attachtypes/php.png b/html/forums/images/attachtypes/php.png deleted file mode 100644 index a3625ed4b195615772a443f3ace019944cb0e692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_@5P)BgyT+xFkKxmH-)T7|W3+qT_j-M(Kj$&^XX@a7DK@gC1NCV0Ig9CH6d ziywIgYm9Td^CZ*62Tj9kS;jL_#N#ht@aXer0-FvW24x&ve-w;qY|Q_n>v$`Qc=72I z9=v^vTQ6VY+VkhQ`s^8E+qVM%DCgkf1UWg$9tGve8y@d|)Ya{Q+p`a|=N-Y}vv-(e z{)P<<*N`F2OpuNF+}xOyNL+^?2>4T7T%6+Wgf4bKNl6J4OqekD%<|+~%sC}VFaX*9ld3o!w_s~VWmn0^6 zttjZ3lT*RHLg&uKJq8SKyp@)=7?UQ=2i5fr>v7`D4SZGD++t#&y9BX%WF*PPxgAeQQzu3j)KGJda?3RK- zf1vx!64oQ0t5#yT>@(a1%DJ=5a4%&ZSRfyAtBg% z>=-!OPMbDFP*4h@=9R*q2J;U>L$Q9(9!bHbO=n0!*tDYXTnARvYeaACftYQ5;Xk?* zJTuPxlkjj*!aL#Pw3skqxD>n_mmjWeAYy$daIZeP2s03c*!}atIAgD(qoss`CS%8r zkb;*(bHLFRyc$y&-0MLf{I^ddWK~Bn&RCe=FC~1j4M&a~DFsh^XMm-|;my1z5PJ#F zjB_8YC{n_&Q*Y?d(NgfBQ!1E#am$ad;Kj6hc+@Kkxbn<6^RcQbC6T(0S_21;m4Z91 zlE4W@!-xz23C5ZCX_}PqKdIKY?>H&A*)+k0n@!^5cRZR<7Xe+Dl7MBQa*rMpe)<#3 zcj+?81K_wWY=P-GFl-x|XiyA8N`m6d+MfiaJ9L-~0G{XlQKE`7Ykv|HYT9%<1%H!h zV$WJB5F@D|Q|2mF=CN5y1TIAaiY$R4WTrT?mObpHAf2E@(!6=cB`;QN@xQ=Y_OSN@ XZ2qk#x`VC#00000NkvXXu0mjf3p()) diff --git a/html/forums/images/attachtypes/psd.png b/html/forums/images/attachtypes/psd.png deleted file mode 100644 index dbfc427a543f0bc63e0028d32e1a32dbb61a3eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmV<30V4j1P)S4ccn8X-87ccH;&?pxwk;GAS zTd-hsoJNCil?p-e@$ij_fmd`iJfot7u0DGPdb-V@U(zD6M6U-MD-3ysDkI)Wv0u9H z6BOxw56h2##8*E*oV;}l3>yfIwZ?uxqp3g8Z02v)>B7O!05F*6mw3bYPQx6xOv!%J(RY!y z>K=r~#!3iZ#{xhDx9RB#u_DFx=3~E+tmb~CD6^RW3E>mh8#;8F1kgYux0)#Sr8plE z7bhY7Cl-KY`Ic-j=QV;0(gHeE@$K0j?md>9qmmu2W|jWY`B$Y}0E4$WWoe$n@pPt#(KB8uJnWOEESx T*D)G&00000NkvXXu0mjf<$KK4 diff --git a/html/forums/images/attachtypes/tar.png b/html/forums/images/attachtypes/tar.png deleted file mode 100644 index 3fc5485616aa1f908fd9ab45f129355c551293c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf(g2?j*Z=?j?@wYm07eZC4EqvU z&eUkV-_!YScgO4u(>)0+H>db6FL7K_Xty(-<^HnlXPXXx=AW15e?BpFcSq>v2Hy=)%-_z<{%~aCs&bcQ#SUvCm_MDI_GW+2iZJGP zhx%XcYF`q<^lEp<)2&Sl0-2s{X?(b$c8V9{gLT#S*H!_YmS)V@?!pLUK!EzIC!9c* zc}b98Fat|Q_Zj7-KzF+z`Tsxn0gy5EFOZl4#Q$f5i248jFaH03+5i8m|Nr0d|G(V4 zqx|AhQ>H8b0~!(H>Eakt!Ps+RD9FZS~U ziCU~^kx`hUFv0n@&=M2J&s?F?Dj8Vc8UJADJ1p05e?eYbf}K-KtE4Z(;ol5vx-=Fu TxuzWen$O_r>gTe~DWM4f69uz{ diff --git a/html/forums/images/attachtypes/txt.png b/html/forums/images/attachtypes/txt.png deleted file mode 100644 index 097687967ce7e035c74a5f68eef4fe58cc9e48a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmVqbUR}TbqM|jbEMuUpg_R=u`}^_g)29p668vZ;&^j<| zs#c+epdw>MDJWw|f?O_#ceif6ID7f>MF^re{!vT7rXTc=pbbCx87bVV%Dr#C=?3Vv~C?qaOB7l?qmA&>G;s!Ki(8Ui30)F zNrQ2=XV0FENl8-c#NTZq&`L1^{`~nvb&QUVk_5k{IL@3o6UAZ?+qZA$-IfH5fVFGa zdUfZ-7uS*8;oas4vPs&%fB*h(^iDW(%{N)Pa3NGn0!FBDQ2P$G^CS$RT1Kc=!`e6C z&&I}D^@$TFVwE`H-IfvPV9lB}AgIR1W%76=GBRfcK>G;JfwxQ572*J58}26*mDUl8 z`8?-1ws$YAQ?md^NV_Kq++9x~|L@5FrY}5nXd)aKg-Rp}I64v|B!N_Ve0-wxEdY=u t6A2b%1_x8qwr+hO^R6((Vv0Rd>L0Z6IYlcpcRv6C002ovPDHLkV1mJA=Dh#_ diff --git a/html/forums/images/attachtypes/unknown.png b/html/forums/images/attachtypes/unknown.png deleted file mode 100644 index 48aef594b1cf2fa11e9e86b09ea0dacadb380e74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmVSD6hPHUt6r zene?LckWz(kB?6pk{HMkGoV-sLCt5+o(*t!cTWSdjX^X_{OHl6K0tmHUd^XZpAK+z zbOdXTiHRu$0u^L&yqZs*JQ-kRWd+t89v)tplar%@B#vM6i4!LROiWC`nt=gTn4X@l zf-VlCQFS8x7ND!E3s&Uq?Om9Zl%#@9Tu)C=1w-@U!-oS@RaL=?TwPrYf&Ny(Ca$KY zhN=0`p+f=k^70@>x*i@L=|F$0potsX+uIi^C@834bGk9mhOCf~5MB^lLP8=9r1`*s z0|8LBv8APDp`@gw3a)@N5)~Cq1ttt;AX{qLvSqQ!$;nMZLPAl{04o$07FNL*@>)hl zMzP%7+>+=n)7RH8bsc|H6+fe*@FOx3%!!*f!97Ht$kU*~WD!i<)gG?zf_LWA-G!*! zGwpX|=RBYPMMQ{%|JXW1h71uwx3yIeW`|+sk^bN_bMMPF#OHYrR#lPk)2TUNz%UWC zT~QiARuHz{Tq1BTKF@oorimobFi^EmpAjNxx}-3I-C+DT|EGZSTo2cEk??y`u}6=Q zB51HM-}U+n^CB%q?d^m}!w^ZNZKGW0&ZASjiKW`NAL|2fJr53H(OYRc4s;q&O;aRM zbm!g_f?};(j{}A8`{_zFx^r&|LEZ)pCV?U&iB4zk6#+#iB1g{hInYiYF;gF$LRdO&&sLWiJ?(fHTb00000NkvXXu0mjf DW4rBc diff --git a/html/forums/images/attachtypes/zip.png b/html/forums/images/attachtypes/zip.png deleted file mode 100644 index 56cbc7106181574a8ecd900a029e47e0c97fbf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmV;c0aX5pP)QKvzvoo#`wY;}V>4wqM+aRvJm9xaEKU2g zI!qq0yfmLNJ3oiy0d(Q;fcIW;I>+KJJ58ph$~GR^_IaCpFDxBj_1!?KIA zYzTlXo2yLR_amGGbm8!T>rVY!TgqQ*i2BU@87@U0tVUL z`PwHQ5JJ4b!_})-srM~%e?SnbtE(w1D~sad;_zme$`Ky;w_dYFInU`fNf#on4CmKo zYd?A5(+brq*Wo7R*x%?E=)!@EZ~T$z>Yt~J)bN1-2QCJN8H_L(JwQgl?HR?{833)) VeZ0L!QU3q{002ovPDHLkV1oJm&=UXv diff --git a/html/forums/images/buddies.png b/html/forums/images/buddies.png deleted file mode 100644 index 1bc4970a394266b98c012d1cb151578f5f370aa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmV;W0$TlvP)Rfg)raJ2^z{zt<-r@lbdb-q&2Q)mZ- z2F9}=@P#hYY zKP`E-uF}@e>(BE1mZ85DRo_k02g141^8;3L{m=1|fW%=Rw!9IoHqxAG1lOWf$D~C6 zEE2D=zo!$g1Cf!DKqyh`c<)Q^T`qLD&5|^yjo&^e*mF`~sq=~Ns}l4MfDO-Ix3%Kb zhfS`8fmpT$OioU+X?isrRBGHucPA(`(rnhNK3S#-=B}g(=4m~yt9#_T=0)bQk_(E zj(|yK$LKM~hB`7wn!XrBJMJH*n{WpVl3RcXk<-yQED6LCEf)x_iDj@J6_s8 z+idEfOAJ>+5bP>&;0-DX43zsSEBzvxg7QX>9w?vAbGq7>{!6K>GSiJzfW#P{J(O^_5X$Q z4sd+svd>?TJYEAf&0?JY@Otd$8<#EqqvOkGOg@9;@fxsl5<~K#jfyuO-!%LG=(;`} zKfJE@fB#yM8z6bS1}y1i;9JniFm>-L;oJAlDSmx%Q}yp%AiZ~`z-^E?NS diff --git a/html/forums/images/buddy_delete.png b/html/forums/images/buddy_delete.png deleted file mode 100644 index a06c560c9ac70bc4d82c11a372e08cb2b11eec2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#7oP)??1qkT0Kin88H^{yss#n;N}L2aflVH?L}!{R@k}Uk(!RrbbWG zCmiY}pL2M!KFIC$4iMhdH2;JBJw&&MOPU(kKi&Yso0{eUWzvU&TRV$y57zbq;Z04$ z0L$;2sI1yOySJ0gz11MRsnJV!KpFRRQ5XL7%j z_r$;pSH+NP=jzw5Kb45V*UqcjHG0f2%TDxQVL%ZE0G7yt!0sCJO8@`>07*qoM6N<$ Ef?ucpasU7T diff --git a/html/forums/images/buddy_offline.png b/html/forums/images/buddy_offline.png deleted file mode 100644 index d7d4c7ddfdddee65cfb26ae504934fa47cffa07f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)^( zaNxlI{rmU--??+=|1Dd#{NJ=`)BkPTwmkvK<2At1(J|-LsZ+l|npUh>^?&KoWpKQD z^_pKGdAtT#Sy?4+*|PoV>eUuzic{h+H2?rb0J}j&*#9R00000x(hQ%U$3`<33X&kb;?|&!pTjZmxzkat9 zzNsCwyblrw$>TR*p>U?!UW@zw*AxD`oePI!->Y%|m3Erk2g&0%V7AaY=W`+7EDm`7 zH{0j_Uw^y9e~k^6|JB!9{MX;*@C_u7-+-wC$DK|G|5e{?@n3A2`hUSiN^mT>QtK~B z9=`#7eCxFKT7MJV1k{9%*C~Ai$>TSmoi~$jk?ei3V?f)FDk1O@rT^^nMDK&-@f*<0 z!^cp=HH&ku$bJ4}^4|n6DgEU;D))_juJC=3I7pswIw)Z0V@PJn1mbl-d>l$=g2X9K ciNn+Y0J-gzh=|YUhX4Qo07*qoM6N<$f?*(>NB{r; diff --git a/html/forums/images/buttons_bg.png b/html/forums/images/buttons_bg.png deleted file mode 100644 index f39ea8ff843aa6bf06087fe0e557638b709ad4f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!2~3ezCWG-q;x!8978G?bA4KQ84Ng-fB%2< zQ10;Bx55+I8D_g|F*ct6xmEPxyItlkXX-K}=K4v!w5UDD4%Els>FVdQ&MBb@062Uf AfB*mh diff --git a/html/forums/images/buttons_sprite.png b/html/forums/images/buttons_sprite.png deleted file mode 100644 index 51ff894fa185ac51fa8871037bbe2e7e04c6d4b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3619 zcmW+&cR1CL7yew7m55}NJzP6CEuFbUy*_Z5fk*uz) zlv&p0etzma&w0*y&-*^-Ip=xKA14lGs7*t~N(BG_jjoP{$z`Mi01|Nu(#x!c{kFj+ zScVyxXIasAc6+U%; zmZYUE%rCsg#7xJ`Qdv=7U;lArWONpXfv0jnp_hQ00+90%+LR>c#6$i< z4zLx5_^1IoP6#~@59zq|G03$~0L$?D(Z<2y1qhxkES%Lf|4Pb#-_*47>(}DIz}))! z9|A$i9JYIWoQ_8G`QfHl@eR1mmZ8tHi}StH)2}je?rLc@l2IoDKwAIzv@2I%0syU6 zfxe9Jjfd#l9;1F$E5%bKvHg9pbX?Y2j%{fJoo->sbQq^yUFzoy-Z4tRT58qsQd4LaF z8T#LH_u~*DZnF9M)us_?l|=oiLDIXKU_DB@doy0RH>+_4sGp*@5`2P@jL~9 zOcKg>Bowv4l`eox7XThN*jl5_Z7Sg!VJhzRuHyjLB&pz;tLr-e=w_B!;!z&TA?pkQ z)_b(;a)Itz;B+q#ZfpCwmuh-~WOWuez`6e#K{kE}+nfyC+*&F{d$rULXLz-VvRMV_ z6iETL*8EWeiHA}4Rppt3(g32;2j^%UQ&d!L*?ZAbXfRi=sLlygG&P;PNISHB@k8$k zUfz060yf2X|06k*l^fUgO=*%8I;9OmJ3G6|%BmnTvQtq}brO=3f`WY-nl%udB_}_l zJKVTD@qJ$tLsNi3+JP?@GdEZ>IEzID^y`2TJ|IX0b0ia4L81p1%>55}UaNXpQ3P8x zwnw)?cwkbQw#y7A0Q_f{M+btQAUOCBo%r_S!1SpxO0)NuUCzPtx8P3@%)I0V{_@+G zUJjm-TCKhXFM5Pu?EEeMGa?8con@0w8VieUKh;fON#*Q6Q-H088o3!Q~3W%AwMH$ujkBf7V?7;79B{IC>1t z!ic}dahJo4>uzoB5qpdG_n1B?#rrm<6yM@@3TC5sKZT&%GmK^qsD(*l{ZLypYW#e` zp33A~1R=*LuGfTbf1lh>|(Do zt|e%%7nAbE2RJJiUgmSJ_b9L>fq{ z$+a>JRHveA@oFD!Ce?NJRW@eTQ@l8?gTxmh5*ZH>+;+kgcPNm8td!bT9$C-?KG14j zG+>ju2c!cdP1KorwAWOLktuq&tBO)4p$KfDyxIn(IGatZ!mbvdjzkRoL2gwn)mGKh z;ykoP8Jk1`6vYBD<}D-n`efTXur&IB%HoR__2VkKc^BeU3l(RD?4G3+BHP*f_s#6~ zy(WFxk>WSkRY`gJ45)3i@k#&n6@rPu*4?AYykoe$W9uWLO$}gEQxHJhh*yt%^{$hG zU%sFA;D5$Poq_M<7{t`0Qo=~n)2zh#BWFzHgdAI@U#D69D2ECT{U~vj+o*RfuXg(( zyxrQ>bbWD5R?2;sxdg-h;C@cwenOX)@2XUClJV`^20z7xSMe`6SITgOjjOU;nf=ae zjk|>Tr2cixSlA-zjD!9MAqJ_0L9qN00Hl{+D36|7IIou}nj1{(OD?&W?~2HqV}*~({%@CB|NP!AP7l>Sk>BPLsp!zVR@6gPJyg6O+J(A7Eb zg`Ma+@tUXz@f|5z)|QSHBb#qKR|%}(fl?xcQ$qlOOtgGj=Z z0^`ByIUcEuLzj_py^|Lad5}h*S53CY_&A}>7M^XUIrf!XuiUMyvO2LWs4-e|?JOE= zVLzugMl%o7nsMF64OgNZdpI1c%sY~Y-&keQ!cMJf8&U_$bV6KZlp;L0UW%^vbqy>w ztM5K~bbfDH!;!&?o+0uXw8x3DW8P*&z~9We{PYE;&w!l=YAu|BN8T7@uAsmoQyF1+ zQ8H@oO8@zCCiv=c46q9Dd@(2njLtFI0pikA>NRhbJ^$Hj1 z#>N=q8mcNj{u53EJw5vFfxzvNC(H`+^22=R_dMIyMn+{A5;U%M`%`qVYWYz9sja|g zX6ctD(D=zmGcq4w?$CWqPJJ$c`QgW|w7dRmL4RyTbpWDul>j5!%X(ngP!z2_k4sTW zA|fN$Ldw$jggRB{#ln55q*)2A z_iak29EJ@`mDrt2^L3}Ue=AOG6`|;l<+c6dufn&FL^MiW5WexziN;$B`=4UA?m})A z^q#SoEWZqb#4|nX>!lzoHSDs#^@;Iq0ZabNuHZl2pUW`IVw|E7PxqmtUjl}2T09{y z`|M@?Nyg>0oWm;wK~fnN{VL{Mdvg$y+fiSsk;qC@ogDh8!p6pIre253c*g>LB*a$) zyL(JhYk}sz@(d*i6eElA(Ayz7wjHrk!jhbCutgP=QY}I7E zV4Jm{nEtH}E;T{ee-g=4}WIdBy8<==M8**>#4#MFJUR+tS zQ97V$1UZHNrQ4K!!Xk|toWoWuV*LodOpBg9L$b3&=*+quIh5bg{CWEFv-7d$(S)0n z5>V68!9m_wj?>A7tP0CiOACj1y;F|D75yO}{dzs`A^kvuYd057dE@AAjZaUS(t@1+~htC4u|x9C@DGecep^b*R{8!DV4)sYe1pW!E#E{uWuG> zA44Bi;GXb;9Gp_o;pZd~dQn7|(D57tXN+z|RL4WB+Nc@FI{5JBSLCFg>aZ2$7WKLN z)$jp{2=M626l7e`+&Fg;5~s zCE9aIdIOY|@6FTdE-pwLuHtc6tVP_#^@fH1=H>1fv6k~2>VwcYl(C_1s%A)vq^?Pl zg5QsFgV)(mx*NeUG1`s7)cAqMJW>cY>_+7EmBh)b~e$5*jEJHJZo0HyxBtIcuH{J#Si8r%S0xo z8FH~5hQOe4afJ%RGg?+(jL@M_IOlL@*<^KS3)Rwv^^Nhb5keS@c=hP^Zyz#=_k!_u z9VG9>2w77RN(dI#r*e)bdC4_HHSOSM_k*F`HpUE6!$XYzIHZ@cTKzKyS1F8Jqpmm={B>p>^oYM&aW_u1&fd)BFMbJ003QGT?GXNVq#+Q z^76X6y4>8{e0+Qc1_nGlJfowd0000H5fM*MPkw%WCMG6-e}6kWJLu@>0RaKd&d$HT zzX1UO0RaIdBqa0m^Q5GtkB^Ve&dvY;02db*YHDf$0RaL60(yFSo}Qiu2L}TK1FfyC z85tQ_Sy_yXj43H82FK8kQG@~HCYy%{tJ7k=!OXZmaWUqR`^aG+4c6!4*yfwagt`6yeMH+ zn#0NcT+3mMrp+#04{SLlXXR=QEhm*JNVvbvE;=!qdgLyuD|g4gHe4X{y^~UEqISmScy4}ui+&H{z%|^ zyvRoY5vx6dZ^D1CK)WBG!iD04KAsT`-?$u3WnzfGQLn<|Kw_6h5~;Kz&ZLlhJ8@Df zfvnMj^%?(+gYl2p<~$B(E?+n}XWZu_|Ak_Hk4sPZ!EA&k=)cU)#8KH{ov%c|KR(7~ z`~=fLwPttNRcPBJfNz}#dy-PxzoC+ux-@_^Tlet*{rvV`JmRaoc3`QRnA14lfif{8V@GT zsL3hG>%7Q1ZKJJbP1I~fZCZ1YFV8^faN1arNr$!K8C;47=JM?1aygw&$A9S`6s=kr Tt1-&x00000NkvXXu0mjfW{bY{ diff --git a/html/forums/images/collapse.png b/html/forums/images/collapse.png deleted file mode 100644 index b005ef3298f2c923c38c99baac64ef4cf71c5ed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmV-%0gnEOP);STG*^WvU# zyziUUnR)j8631~VJTC%~)}JRQC%rT}a1UIS%VkS&T{o4!1;D{8wOXyfGaPi0W!d#)GP%;AYPGr_MbT*-$H&cPvxR4p zBtZ}ac#gqdnx>cM=jUAs@_m1Y;UgBcHk%EeFOK72yN~t#Jz0qDkHH9=&kw7XDn_yjb$rS^LA!UMs9leg0qaPI2Sx zZNFdD8kEm}n)6M!-1wtu%jrF}I{91G)2*&wj-HqHBcZM?{igr@sqcA>zZPqz=)dp= P+RNbS>gTe~DWM4f{m4O# diff --git a/html/forums/images/colors/black_tcat.png b/html/forums/images/colors/black_tcat.png deleted file mode 100644 index 22d5997eb43fed013fa2f6c179332a63b83169fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!2~3ezCWG-q)a?r978G?ZF^b;4>0gBS$>

    ^2J94%E-!>FVdQ I&MBb@059kwhyVZp diff --git a/html/forums/images/colors/black_thead.png b/html/forums/images/colors/black_thead.png deleted file mode 100644 index 125d1e5cb2d2d55a68e556a7c5fde4ca0a1f3066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQnsEhjv*C{p*`)K3=SO3&5L*b z_u1**_pL#-w5*&#-RDF=;p4M^SG-(3uS3>7U+o6_{P1BzSb7TATCEY%sZ~rb+!+m9UdxMK2)xZ9~r^;XE z`F(G?aev97{%ubtY?3&fbWWn;%)PfAIcpO02@4w-W!~_U>o+Zj!(7D@QFG P&|U^lS3j3^P62=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/calm_thead.png b/html/forums/images/colors/calm_thead.png deleted file mode 100644 index 85f712cdd3dec62c06b2e1497a9906d12f830bab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQg)s$jv*C{NnBZ{7(xui+!z=P zIUe7rPy3`->Z@yTLdlr<{PRCwXX#Cz5uE+r_;+>txt_n~vzHoK`K&o{F;zp5Fr3rak&yt=bwg5dngsRiASPbRy+kcJ O%HZkh=d#Wzp$Pz1??SQw diff --git a/html/forums/images/colors/dawn_tcat.png b/html/forums/images/colors/dawn_tcat.png deleted file mode 100644 index 7f6787358cbdc97b91b0af9716f81d527003c01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!2~3ezCWG-q)a?r978G?Lwj0983K6@Rrp-_ z+wOht>2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/dawn_thead.png b/html/forums/images/colors/dawn_thead.png deleted file mode 100644 index c877b44f64ef9ba664cee1906d3a6c80446e0b9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQjVT3jv*C{Nk6u16}j*<;s%2N zgJREy|EI3+%a&Pw@sLTxQpr_UHXb_Y*xIJg-mhlnb8)xwyjycB*OrU#*ORWWd%&dm XD*eF3y+=<04P)?h^>bP0l+XkK&v`4g diff --git a/html/forums/images/colors/earth_header.png b/html/forums/images/colors/earth_header.png deleted file mode 100644 index 5fa53997416bda084d735e8e779981aab84d955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?*0TxvHe%xdy{wicdy#X94u|mom3Q)9`XL}9)_m;^h*9Ksii<` O89ZJ6T-G@yGywo5W2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/earth_thead.png b/html/forums/images/colors/earth_thead.png deleted file mode 100644 index 8388eb572b3886364a604fe80c439db27cde3d39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQqG<(jv*C{Nhf$qSw&RE*aesw zcow~}FSb}&tEBMskjJ5kty3oUZaz3IrcO0xUG{X|<43D%WwzaH)Me)0SyO1{VflkW XUBjE%Tk-uzpm7YIu6{1-oD!M2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/flame_thead.png b/html/forums/images/colors/flame_thead.png deleted file mode 100644 index a280975a08fd4040ea195d9d7faa3fa1cdae7e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQfi(qjv*C{$q`2m9QY#7{g3?! tkAT!c_oaqcm2YrJ#oDU5ok)De%+TJUc=UyO&vu{=22WQ%mvv4FO#mI&8omGk diff --git a/html/forums/images/colors/leaf_header.png b/html/forums/images/colors/leaf_header.png deleted file mode 100644 index 32fb41d6c861ec6d358a4bd9e6b201b93ebef843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?%)9d`wJCyM zGE6y--!5PL>iV!db3FI&I~=$9#@c5$vXAG@ul`@Jznro5-G2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/leaf_thead.png b/html/forums/images/colors/leaf_thead.png deleted file mode 100644 index 0cc5b1908a377d5e33425d37965b2af2d062d0ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQcj*Ojv*C{NnKI-JTIbjaugVt zB(7}ue~SIR)apZ0mRd%iw9U&FIeq`P?!pY``TNChuQ+~<^S^oRAL)7G)~|kUoW7qS XPc%%@aZ%X~plJ-Au6{1-oD!M2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/night_thead.png b/html/forums/images/colors/night_thead.png deleted file mode 100644 index 4b1048d7ba3197ccd03a23eecd8e7800e7144eaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQkI@Bjv*C{NlBZ$SWFB>O&Ayq zI`-B--F?1*V-?E^WvQ!yO!~89o?6*Y{-8czzViO(_@AlogYV5(lPYC4+0d}obq~-G N22WQ%mvv4FO#oHOBL@Hg diff --git a/html/forums/images/colors/sun_header.png b/html/forums/images/colors/sun_header.png deleted file mode 100644 index 52d6dff67705394a41c6b434d6cb4edeae07d962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?jv*C{Nq_!l@d+<@ztM_; zfx}Vbo&D$1y|4L2H!KY}JBjt+)q;lWvlbrw`ttW#)B3X$!@KHEZxo&@_36olhriEk o)_e2q&(u44S@j2gcGvQ{|JV`t(aqIP9cVa%r>mdKI;Vst0Py8G5dZ)H diff --git a/html/forums/images/colors/sun_tcat.png b/html/forums/images/colors/sun_tcat.png deleted file mode 100644 index 7f6787358cbdc97b91b0af9716f81d527003c01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!2~3ezCWG-q)a?r978G?Lwj0983K6@Rrp-_ z+wOht>2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/sun_thead.png b/html/forums/images/colors/sun_thead.png deleted file mode 100644 index 72f787f5b9d31d50cb8958f92371b1bd3961f01f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQbwLGjv*C{$-n+*@d+~@wpVNW z?{MaW{E@a#iAnVnk338=_{#C~|BV;*Gk)05IVN&EgqcBliCJ~SQ=KnB-3*?telF{r G5}E*D1tk9f diff --git a/html/forums/images/colors/twilight_header.png b/html/forums/images/colors/twilight_header.png deleted file mode 100644 index 59a9ceacc6318adafd802c4e56921c2747dce28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?was^e{)w?%$j-h;)xP= z|GiG1FYKE&A#35DlK3~@&K`a1`+7IK(Jb+_Cl6Q8dcylSt)}4Q$($CTeGHzielF{r G5}E)Ft~^Ho diff --git a/html/forums/images/colors/twilight_tcat.png b/html/forums/images/colors/twilight_tcat.png deleted file mode 100644 index 7f6787358cbdc97b91b0af9716f81d527003c01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!2~3ezCWG-q)a?r978G?Lwj0983K6@Rrp-_ z+wOht>2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/twilight_thead.png b/html/forums/images/colors/twilight_thead.png deleted file mode 100644 index c4807037da43e8ebfb238eb6fe52e3662a6c51c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQg)s$jv*C{slBX%2N(nnS4}k2 z6gK>Mb_Ty(7tdoCp`6a3?`xBecuiRn5%}Lq_1iw}W6k>a?i~O8;oHqfp}_QS^Adh> Tm0GC)O=9qL^>bP0l+XkKjwdKQ diff --git a/html/forums/images/colors/water_header.png b/html/forums/images/colors/water_header.png deleted file mode 100644 index 3a132e17b4e3d3b11f7d575b9f0865812552a470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?vxzRJX84fZ`oy@>5{+1SD8oi?)b|%ZF=qc U-#Y1*K&u%%UHx3vIVCg!0JLaB$p8QV diff --git a/html/forums/images/colors/water_tcat.png b/html/forums/images/colors/water_tcat.png deleted file mode 100644 index 7f6787358cbdc97b91b0af9716f81d527003c01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!2~3ezCWG-q)a?r978G?Lwj0983K6@Rrp-_ z+wOht>2=l@XF}FilsP%Ci(Ivi)AU}ww9e`KPv6fpd9r>xqu?_C+?s~=G@yP4Pgg&e IbxsLQ0JTdce*gdg diff --git a/html/forums/images/colors/water_thead.png b/html/forums/images/colors/water_thead.png deleted file mode 100644 index 869e72962092f1edbdd2826002b1f24a3982b953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQZAk@jv*C{u05@y%!VR|zwGfp zes;&!KBoDBKYImL6EYsZ_1LhHE$v#s;(gXu`6chHCH>ki-n_g)(w3((|L6zvGuG$d Zv$m^*n4kS{^fb^s22WQ%mvv4FO#lczERg^J diff --git a/html/forums/images/default_avatar.png b/html/forums/images/default_avatar.png deleted file mode 100644 index 6af480cbfcb1eed7ae69044149a3e09270ff3c9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)TCIR(Ef8P3aNA;am_9Smf&TNMpB( zNIe?7^hnGEhzRtVBw9o~KYK;Qdg?AMGPcDb8M)KtX_2A1fyli$W3))$I7H;$&b_oq z&m`@BD|!81ph6Fpo9ddk-n*m$jz_3w8+R(P#VIAVVM${9R`1f(S1D>2R*ctcZMC4hYphx8M6CyI&YcN0( znmGw6ng$Gz_SYG~SO(lv2FO&CBmI)28;JoT9i9=smuyMN3=k00jaMV(of->7ZtGVs zUkis*WP(UHDgohxjW0Py_mko7$qOF2vs-425IN43u^()iU$(L|pKXNXyb=iexO9;Z=1EnIc8&9}!q^ zO_(A{9FjYjvP7igV~ANCt$l_FC~akM7dcII$_NpM8TYp37K1#UbH=Os6i_3>%n7G* z7XU<<9{UmFSA(x9P$8oTzvoKbLc*DT;5BHD8q&ImP`mlAy68MXL~J2s^`9--Ay@+u z%O|_0(8Cfb2VWb`9ZPilQDmIAeYd1!41w>talWPT^u-S#)2wC7UVp?8gtwUlxV`HZ zcqamy4$j$pMITNK>-IvEcOgPprK>)oby`fXzFPb5L4xYb2efXm!MTRYNb&Ra6I#Dz zk@Em0Wa_lOAe!a@ouGu&wPlE?ntbglAxU0Bbj^1P3JAD4enXVm!U~Aw4nbPv@7^fmY)3F+%wh`#Y&n}jq>6GY#WCQm~0775X}vAAB@7RcC8mR2Jtb;tsFa8?M&Vf=*!GPC~XO@0QGWB3~7*B|cy O0000Vv;m8OiZ==hUU(WF{`q}c+TSN(VV^e$2wVV(6J@|$ zpp7?ueLtUaa{9mD-2DG8BcuOE%*{W8#ECLsD$v>gf#A%UGyl(@KmY&HqeuVWy?gf` zDo)sd9-vLD#KgX@6B7ErR#5Q&S|GiQpZ|Lgu`Xx<`n8XR<-!30fzRgz1^@2nYmEQ^ diff --git a/html/forums/images/error.png b/html/forums/images/error.png deleted file mode 100644 index 599be74ab77cf2775244971705fe4252394783e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 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 diff --git a/html/forums/images/forum_icon_sprite.png b/html/forums/images/forum_icon_sprite.png deleted file mode 100644 index 0944c69657d418456c59be0c96b45a19b1211f41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1130 zcmV-w1eN=VP)0003&P)t-s0001> zprF0Iy`rL{+}z#X-QL~Z-KnXn!ok9*ND=RBQLqp%+-yt9&*w@%iO-?74qobs@wzlEm;WINcN=ZsyUSHVQ*vrbwWMpJQLP9VwFiJ{FbaZqn zDJpn)ct=M^D=RFbqN3T^+1lCKNJmK9+S|Ihy1l%;+}qs0zreS*w@OM%NJvTD+}*Ua zw6U?VtgNiBuCLzR-r3pOsi~SA4kkixDva+&wcXyndo0XN7o}Qj;Y;0s?WI{qhIyySm z*4A@#b5UOjx&QzGI&@M_Qve4H{AX00N##L_t(Y$L*EtQrbWmhJyhSkDwqb zf{Kb-wdGK&C4dx2g9s9uwr(hdLpaI(UqCkqUlMlt)#*&FK4g;}p8a+wlYM8Ie*;U< z<;!M$uAqfxV;9*m7coLEy0Qjbi&NH_HQ_XSsD*l?4d!x*95Ctz4ceC@@agtCF)2>y zy=%~(1O*Rhf1jfD+0P#agFc>CBR6{D6)r$OXlO%VmVSRQFjP}G*Vq0|!4KN~gMu6M z%})w93~*H;xMFm?rAn!U8@|R=yo`ZBX^MdPd;5Qx@K5iDrEdn7zyjW*i9GUBcd9pV zgk8XEVO|v$+xklN-O9R+`re!K)k2|Atrn{Dn}po4@&%qRV0iqq?wIY|S~|`1JZ{gd z&6%_{nKolJT3d1im(;Nt^fLEMQok?jb}Js|?zwmzH;%i9_X_Sg);^? z{z`Dn=-358XbKw8u`>o7cT+gb-}@wQ;$)67dq>fL11xZGSRQkDK;5bK(^ZyTJ+=RD z34M#;Uya~xTS2NYD}rU2MTnKRXGBnJcZb7nJ2oSN!%i=i>UBIbBG^@XnM_ZOP$P)s zp497RFS`*>kP<;T)y$VWk|-i&pAtb?Gh(YH%hEn2f~IORf~IORg2U-*h~Q@}f|q)A zlp%4aGD5zLkfNw=nhv<5p2(6$lzADvCG;g8l5ObZX@?~0OgiX*a!4XoW%B~=i1kk& z$wN{p3T;J{FsVoIdO}(8u9z2^cxaK$guz2XMX|_g^)gN(8zvH3mRgFUAcO~?@HQo( wYO8x03WX#w1eQD`osttQ1t(Z49b%7 diff --git a/html/forums/images/fw_pm.png b/html/forums/images/fw_pm.png deleted file mode 100644 index 13200cd4753fbea5c482c2195471b14673af9e8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!96aP)gNJnPSR&i5rpxOSGHbzEi$ zqKK{{!6ZUZ6M&m+zW)3dHFT0@+NgtQHDWLY_8VO3W1(SN_5_D*-D7ZfJ;ccE5jXlp z-4Hty7&HVEX$@zr!9FKbNen&FclwdtiD4@jYb~yXBo#oZf*PBOT!Pl>O9zH;UZ0qC?zk;I;SdFuHw&&* z7Hj_{S4}GtleZqMQGk%fDMAoPee7=JO6#Lr&;i!>M!@{w*b%n8c>k6 z3=lZPW&_Mce9ucFp8OEdtLqfJDEQTu7G#-N9Z~cjyaJDZ>yeWhK!G$&F3MI39)1IQ z_nr;2H2}__F&chRD234yK#%^5aqrIMdXSNPuu0h+=+$pF^hOU@ZCioNE;4(pND_V* zS>dqF@H(AnonQa{;a4sPlUag+$>k0LRmIoezw7%q==I2#N@yMa#{cSWWic>@c7ke^ zWC{i3ibVu{K2&8HoyBgm;q|WqK4dZwB9lh|ml_1wOxE!1?I(Bw5qvI+$d*<7E2+rv z$x8J6B zcx`%{%c`^3EgGZQEb5I0B5Jf?Nn3#bTRi8;*%>VMCX5nUTS4iY7l;Lb7?eQ7pjZM* zi-PhP$QPjCFiY|>J~eOKSzt`fS|sQ_3!EE?1wr?ho&nJy&1>Z&XMw|jfdugL>({eD g>g-mXv{^7Q0J-b#4~I$H{{R3007*qoM6N<$f*(FaGXMYp diff --git a/html/forums/images/groupimages/english/team-administrator.png b/html/forums/images/groupimages/english/team-administrator.png deleted file mode 100644 index d1335404ad1824f82187739c070ae71c01301c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1279 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 Y0fUF7i39VOqW}N^07*qoM6N<$f{_~k+yDRo diff --git a/html/forums/images/groupimages/english/team-developer.png b/html/forums/images/groupimages/english/team-developer.png deleted file mode 100644 index 32710a2595a811556b871e5806ba62488960cc22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmV<410np0P)gvD0!T0v};^N}o-rYDjI5ILaQBhHsmzVPL@_>MVadC0>_V%Zzr$$Fd zdU|@r#mAtap^uM`Vq#)FJw1kohV=CG$;r^}?(XsM@z>Yo@9*#F!lHKo000PdQchC< z9H!>~|KK!WA5qc(00Qz!L_t(|0kn+?j)pJ@M*FK>C>3|_f7E%IkZ=MY`v*-^`c3ol zA-Pok$W8i(NXs=%t*dqoRe|KCW8~OiE|JJ_;e%JQtF5GYtSd((#eovUM2CmaW6|Rz z#CRn+ExH-x3|JW4~ji%tt;EIV9iDeYSQ|vWN^}OFd{0dUrs2cOj3^jv>JCNB4B#$_m3k zm5uZY5{S??#l&<7WV!$8zD@S)^@+=PWHTaaOh0aTl}wU4Ns8w7QZ-F=zcs~ck|eK* z(%M)c$^*p*S{FrnTs|UUf#v$+h%1{Q*4T7H+?(buMAsng)V1nT+YgACAWb!ibrMVK zu;xc=1gc0AbzZF_y*7EgfR_o5(^QDOZF5mf(})a}A$B^&%=B|PJ0t?>vJNSml*8Iv z#Kjs@NR0A4xmD5^e}YXUN_(qDF{7NtSluj2DKC>o=dk84OLx;R(zWQeavR7*PDW%p zMPo#v8~K#=EF>ZY7x|wuV-qj!n30Jj6CzeJR3`n4&MUobW|3xk(R-=f<`lHfFSN5* zG<4E;$0di>(3Ph|P9*Lz3X)8`_t`v8qO!IU(>!M$z-{o&GVy))A=4eD^uUie;i_Z;gml}h$8kKWeM{kj>creTIMyy4cWBgN0hXbJ6j}#^ zx$jDVG51QRAM#&dlK`RJ^KshuY0USQ)DS>vW$Xc=Se5D^INb!e8Knjo9F&XFv}fF^ z2MCu;e-h{n0zImcGl?cFccC<2cTvaIT=nLDI=Rk~qa4XP&}&Y#H^Z{`2N| z&e7!GXbxBym_=!AhbSuplO(Mzkz@llBqT*?>JLd)cA7Vdn3)(E08h~F*mRd2CjbBd M07*qoM6N<$f}4i%asU7T diff --git a/html/forums/images/groupimages/english/team-management.png b/html/forums/images/groupimages/english/team-management.png deleted file mode 100644 index 672c573f7ac6134aa63c5bf093a45888ff9dd324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1342 zcmV-E1;P4>P)`{r&Uu z^7Zxg@bK~e|Ni&*`2YX@@bB;R^z`uY@%8rhFfcGdK|wh=IsE+0&?-``D5P3Pz5)Y8(mwX}3}bYx^?;^X4O!@{PPmQ++!VNg)Jyu7Tftbc!hMn*=J zm6eBtgteumshpgfo12V`jB;yhabRCtTU++bn2(Q-mV<-jwSmc^e0h0!ppTF4z>T_# zS+9aqn`%3vz~184$#j~*nWnSZ#v`lL+tM-Q}bkLdbo1FT4{HIe$aQiSR+VOAMowH;lZ2PPJ;}OC_UJ zg~LH!HL3=X#{eBnXa-t|N(@nBh$NpcRr4UAMQrpz3o1WD5hblGCFSujfL^#VejE}?*q zL4DYnN(rV}i$HvCM6PSN=LdD{DitI_Di#aHLZQ$fuGhmpk|J3V9>&2_US!>DfF$dj zvn>DrEpL;^{r!CrHU$0-k?@)z7b(dM2MM{%<6g;EVithw19*tY6}f_qzfZf}>9>3@ zqn6JiD7a+>UEngf2H?tu=ZDiOS(ijqT6_BQW4HV9=TuQ;4lfiT7duV4f+<{u)6@!i znF=z3%UtJLcxdTZcqM{3d;xYL>1 zj;DK3PnWSfo4MPbuI}A|uO_iS9gNkv<4z%}+qMo7-PQs7+spCz@{M}D_C{f3x;>|< z3rXU(^+`AiroOI7Y&OuBsqM!)bKA*wY{!Gv(&;ohsV;ay;00Z09n4%)4BH~@#U&Bb z)Pd;j_4O^%FYu)8xHo7*BpA=9dwsGs&Ca7P_GW9Ryh=?!)qCN5zD><|r8k_OId=8^ zbUvTXy3R-soQ4^Wu*SrpUt*djGtJiG^>}<;w5VXHJ;_fWmrbV;gtOjYZ%#T4BIab< z_MLKf8m}eR4%_W^&y0Pu=>%--n)3k~Lf2`T5MkknZw4U3fZ*Zj;q%w8pAiDa;Yr=l zYc`yQ?^;2)XAohXN9OwC#8F0ZGhs~e{Ib|!vCo=L3nEPNB-Tx+2%tLkSq2iZSnqK7 zzF?m|vBmepp~uj%z)w>PBF%v}=&YB_QdU9o%xy%M{M zg}|TJq9_|cL{XGYzyI*m{rR)|1d)wW!%=EA1j@=Nkdez$FmfB2pxOMOL?#6Td~Q8XVoLqw%G>wn^mXz+Z4A z-WZV}+%?1-qmjdhMB}EvC29yCZ~jS?yLGkb Avj6}9 diff --git a/html/forums/images/groupimages/english/team-mod.png b/html/forums/images/groupimages/english/team-mod.png deleted file mode 100644 index a97ae6b1960edbc42d22e7175a832ccf643c920f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmV<410np0P)+7AJovp2{ zR#sL^OG`pRLUeR=mX?-0Jw0DvU$wQhe0+Qc1_mG?AR?KonE(I)2Xs zf>*8G0008{Nkld9`5LAv`UBn7l3Ic@g!;E4>B{naD$7#|r#zRZb6)1>{9K}(P+WMcB5A*?!qE@qLW&}z zMHm~~jEz%row6cX>$V{2$%O<-aO$vO0JdjW!g6;J0v7ZkL-&_nkCueI86o;x-3q%% zqY8H0=gkzuwi{h^i(M|M*_W~C>vbV_9la}Dyg&&Z7D5Cp0qQRLB1F>17t+$ofv>u5 zt94Xn6IyD$8ZjQ-wDPu|Z6|c9WgE-uAjY||QhC=Qr1;S;gcHP6Cl?fP?Hew*kjXLW zS=CBQhJ?5`oNq=PN8i`Ft*;z!N3=p(E)KjrF6072_zmVB2mx1|U+V4Np(Rm4%VadS z5h2sgxRyh2DvqFeyI!wtTQ{6f>!fSVrLFifR@Kpyi?`Te22h2Nig2s<`^Z>Tv5L7R zlUD8uAxci&%~W=8)MD5;E2b)pW7W1*Q*GHgvg$UgL^jR^!h|pkj1UHxKg+#m-ysub z4u%jmt@VC*oMk$BENZC90zd%TursmIlH;kn~@KXp!R62BE zv?xOdLI)aB#{=XL!|~TcLp#hs2xXZ2oIVc-iPQUrj2KAqVPU7#`o>eJPD6zS3jV)u z;-Gy<+~4Q;nMk5&h@Xt1iC$FvWT@ZKYong}w+yOzfBH|N=;ih8FGRqJ(pp&f>Hq)$ M07*qoM6N<$f)8i;EC2ui diff --git a/html/forums/images/groupimages/english/team-supermod.png b/html/forums/images/groupimages/english/team-supermod.png deleted file mode 100644 index da7847b525d65d0dd9222ed0d506159388b33423..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1201 zcmV;i1Wx;jP)lr1`T76<|Nj2}{r>*_{Qdm>{JFWgyu7@~$jH^z z)avT$_xSkx`}@Pg!}j&{*xA_k_xJhw`k9%T?d|Qfw6yW?@%#GvuCK4%-QB6FsgjbC zL_|a|Ffdb7Q(9VD;^N{;N=lxdo-{Nx_4f8XJw5L3?uCSeWo2cgrKE9jaeaJ!#g~`D zGBV3^bMo@?I5{}<^z@<%3jc)6CPfy^1fgc|q1Ox<}cX#-3 zaPRK#&q6})@9*@KCrkhU00?waPE!CJrsn_u;51+#QPKba1A0kBK~#7Fv`qz)!$1t% za=qZ9(_T3L|Kv&WF%DG$;fzCAELZCXVzb@h#%3?^fsp-X7nb{!Q^cDXC2-CeQ3jx0 zp<_XnxMA|Xh`zvwIytjKgEa29VI`$t!yjG%q>1c@ii?z}=B0O$%sBH1q3C^`l$I4D zl}%V{DXLly$J6<8wW0+*GPHOVe!fqp1f1xx2Ha;Sjums`!q4hDtj(&!$;$0g9goNR zlYNF-v7ey-uHF+Isq3cgYT$Of@2g`!)V0-wSZ#w0G*o7647uRXm>3{fb1tO$lR2{i zJ+?R^GB%r0MCxgr?x#wCE505H(<{lr*i)wujaScfjfax6AQXkC$c&k?MKcb;5K2d5=B?15u7W5)0nsECnMX%B#KH`U z%6$+r9TOpOO$iMjyK9ilU4mgaoDKzb5GaXqI3rgiCqq`nm0E?Amh^ujRiWsJrJ9!K zYo)}LzvUohNz3Gl)htSq=9*nn8b`%ISf;8B($Lp=+D2uWq}dJi^_6CLLeh0!(rlwC z`qieUN>*!$mSbYYt{fbYxWvMQ?QWmMrPtI6qLF%K%86LUMEJf~FB=_`YBK32zL1xG zS(aY4ka3VM(C@B@UX@7}EJTi3$AOsd>exZ7jiJ@;-TebPvxW>OCa<)AgeVckOEF1w z)1=H7mo~=oy0BX&kANhtwfH5AZJJv=#yps{WekS^fg5X?czS+$d3C`U3xz2I#9TRu zU5el_o6TlKiNHdD*frDMLfg#%kv7YX$=LALoMxarLd>AeTlN02`+Rvd2YKWxNTX?W z6Rw3)ViP9Xc%5eyh{QlhW>IOgz}I<8nVUzct_2`}Yk+XW*Khj0G5g);_bW%2^Mw|= z;ha_7V*$vz=vLe`MOAsfK*BD;Mb00qqE#l)g=`r&ZU6)yiUS0>eUtAk_Wk`pIVj}3 z=X^RvxfCRvBJf`E--Mo19iE>2eFy>4_w8Hzo_+Pu{{C*a@6X~K<{;c15Ah4ePl2Dz zjf5ZLS*`}8{(4)#XMGLzH7NHeFbm;W)c$&j0s+bGL*j4GtAeX+}r7y$-q;B4` z`Y2Gg^^Z{-urM$S>(LkpvobI#(%KS5Hef?SQJALwP-JDNd6S5liID*SEDagUQJo3y P00000NkvXXu0mjf(v@pi diff --git a/html/forums/images/groupimages/english/team-support.png b/html/forums/images/groupimages/english/team-support.png deleted file mode 100644 index 7ea7bde0447d4226680e449d5e560b6b6fcc5254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmV;U1zh@xP)U!`}_Ov@9*&O@%Hxi@bK{Y`uh0! z`StbnFfcIl^z`!b^ZNMs|Nj5||Ni^>`s(ZJ{{8>HzP|hX{P_3z=H}+#-`|;;nNChl z{{8(%Mn>G++|ba_J3BjNWo1D@K{PZp@9*w|gM;qv?X9h?baZrETU+Dfh9*$$jHdx)wtZju;JCM+03NHLKoR*a+D)AJ(iV1V&Fc)=*FzQb!ok3_RKq-m}f!9dg zfEZeL)}V2+GLllgtJb%pF~s%a>Zl;cm3BxCWt^V(#|+Gm`*Rxc2TE`k%P*o@k2a~v zd7Liu`*pqDuCMoena14ZoV%b5YTd#F#YDb>e$lUV_y+vs!_@S*Gz{kfHd%F`AnG4}|8L?Yg6uVSy_fecPs(SKNk4othCY$>EK?aksY#77 zfu!L}4G+u=aW~AEOV*7N=k0E{JwtQ1`9LCm{0324BpHvf zWH5lxNbZ(Uk_{shibbJh*x@49rIoB3Bn}bc>1Q{_?s7a{IvnqQo`kT%)w&v45x^Z$ zT!T=cwOpf8ShRB;kPDs#SrNVLK;qTFV#wQ9f9~7}VC1@U|MkY6RhzHwGXWs309Wl# z@OdCbbJ9(d#Or_4)xaSDo0nmGoUjg)<92x206^Df+?#p@4|P`5>zVK1;OEot60*g# zb^!jc^m9F}Rd_hp0739M-1=!1WLM3cn=LyQVu*Sj`ioMa051LT8m95GK8<0oOPJ_l zr5DY-f=BK4{u|cSlT5YS1 z!%#5YT~>aPYOtgiA@Bt|jvdQ(Qa5c9=RzQ9pb3E{(Ek6A>_}z*pc$+=lIDyCKL{k` z;bnFU01@0~F9%_5a+)WTInM$Y@*HG*-j^h()5kUzK^q52h4xY-1JE4QwpGR7123+) zeoT%cgRL$gAVi3#{eHHd+q38E*?#{dgb0LCX^arDv>{qVe9@Oi)P+c5Ax1}$Owm?q z;h;IFZTh~C>SFuObpRO_^g}?16synmYq(rUxmbp;>(7;x(i_r6p-sM34WC5(LmgAu z^KCf#kX0Lb`A{ZPw53xf1*+ztxQ*moHjS*gwlYFwT|htxW2f^~N8#aiJA{$Go==Ri zKILh}Se)loiIAqux2!HkW$H;a%FBx36y|irm}HtWDJP>cPko){O{>{=2t4R=A(zfO zE^!laAD2h3yD$rweV-YFX~c)h_|_0I-%5lzV4;+6ivt9!`^rghyNZGkN_U2Oo3}Oa zw(+Rh`4q6^e-lFNq%OYK_8VIb!?7Cx`2VJZTYwQlXty)n`RlsbT))np*>!}BDJ5e9 zP)x|A$q4Fm<*e9*PJD_zkX@r4p7GduAfiwxPQ*S!P`lmbwCarMR;LRxej46jpvaw} xhJ%NU+!@(lJS4Ka{)@_nfA0Py8a({^{SOiN$UGCYs!jj^002ovPDHLkV1oB!{#^h7 diff --git a/html/forums/images/groupimages/english/team-tester.png b/html/forums/images/groupimages/english/team-tester.png deleted file mode 100644 index 5c8d2708a94f46d385d88f8360afdb163e8dbebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1266 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 M07*qoM6N<$f}KLUbpQYW diff --git a/html/forums/images/icons/bell.png b/html/forums/images/icons/bell.png deleted file mode 100644 index 309aec72f1d86186806390b628079bf3f50c3faa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)0wa=Y9{>~gmMEDzvy6~+| z9}GiQhRWeDaQwoOZk(^}C+Zy;CylTs@()CirZi_;7I)#THVzd0--6Fni!-NbU7*o~ zZsps}XxXIOz~W82^sJC%wzuV+Rr;?$(@-*Bg=Ph0#H4n;c_Y7ic!S4=UL_W*P$jFX zqA-3z!Y`;Q%r-|l+pEV<@%-6yxZE0?EPYkLdnuL4DdJtp2HGw53mNeJi;&KVF=SY%9Mq^iOEcY#7FO^$R)q^f!b zxM1P2NPbQ6Bgtej_=8CCuYycwM{0|fED(|ahSoNhowTmnR- z%xX3)UBl~Vwe$^ihzPyQvSFv!bh-TM%6z(UY%*QkF@lb*?n`?XwxL~f8q@xT4e8YK zMs#^=Q+j@^C7oJS;RUp+nfT?(AI# zfN^M~cwV@iAD>GCFTWMoYv_#&ULck)AoTdhz$~hVqGAX0O^OI@9jywHH+ctCXIjhGXLI8+}or2;!xC!L$RA1q^?e7_r;kt5m@7=q1ckkZ4r-tF>R?CB35|?(i|NZ;-_U+pn3K))bh`ruq zzOhl^(Y3u7E?oHZ>C@6whDAvXH|FWyUtzYZTYLZV()-s>96GpfRusehc$TZPjoU(}D|Nx%?;01+OB5CeuTe}*X`AT>ZP9*}Hc znFf?DE(!7rX5jLhx#yJXiklyP{Zrlh`ackGtpHR1{ceGH|NqbY0HOE%0@J7dfhh9Gr6dK}B064N2U;KF>Eakt!B~2BDWemkgzLlN zg6uVJ%7!A!7b1GyD&Ogu*X@sC4Bc$hQ1C*LW#>)jZ^w5#pQzh?St5cpbP0l+XkKNI5~; diff --git a/html/forums/images/icons/brick.png b/html/forums/images/icons/brick.png deleted file mode 100644 index 02effd16719348ae67856bcc706db809e4bdf803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmV<20VDp2P)6b9g(wQHL}^;EUpUi%)~<{Z>>a&1lA`(A(dDpu`DzRaJctpNNNMRfR*F~T@= zk^O0%3uBJ+77Gg-;4FiGSm%OketsRD&Kx+);2+i%9o~H_noWY49H0vnru{q0rs<7F zvtXR}(~j~5qVQqb9mqzLU?$&Ebe@unn~RumCPc1Q!s4QXiHQYK%ayRXxCm!rLYyZ` zDmqIAd(B2`wk3S=5NvxEt=1b6_l2-#+n8;_+(qJz7hy23uNhuu%{KKlc3xk7l@ z)rC(zf7pX?*oE${#|XQ8U}fuYa4D^qS)JAOJFjM24AU`kBe* zMncd}+rSue^X#Wj@NV>e8E|pHA2K!lWCwJ8D%tL9m&`jR@5At>@X!7i`eVw|DIinR zXCB>;KQPK{HzQ3$ySqKC=KPv(hMpga@wdmvfSNvY_SlaHYDsHFZmA~wT+>}Y+U#tD?uWZ0xF|>lHGSsnvCngfK0yoPEA_AR zvDuzx=ya?T!mGm|Q`2Xj>^~5vF4vaJIqT(oUTk}@P)y#WvDJTboez)N=^UB%Nj#k?bxS5t63B9Q6I37@gqkdI56?`3M!)}3`47!FRzLhxUUk$zJ8%WDd zM2+K+n{;^~{Z7nyJgx9RZ0TLBGfqQ~MHdPDbkoR(evM%YV#^-lSxqSJ#7zcWkx`d? z=AR44lFKnzrJsb!hrBU#izPwdHHPFv&)rJBL@d4(4LWp1h93_(>Q|xOa?LM)2h7r; zE7EVLzVzLm_$^+%c!8@|uY&bAq1#mb2V08V96MkD_$-Y(cLX5nFs%kL~zhV#6g7zD0(TnD>@R^oN>ntvvlb4m6|EqG59;sq5B#gxjJ9)i;_wJ0000< KMNUMnLSTZjk_1iw diff --git a/html/forums/images/icons/exclamation.png b/html/forums/images/icons/exclamation.png deleted file mode 100644 index c18dbc389791479a9c7cc8e2e2f761f33d0abab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ*P)}xt)ZahLJz;`rA3a){ zMvj!?UcKbg$Cx$Ss8Qk?Inq4h=a)r|HrS2*6?X1?hkq;W(?`hd?%lNkVqLEqI8bi2 zZheOuZLnRbBXt7@8d*Jh2qEWNx0Z(wABw}_kliscvNJML$llmkx!9tGL5()pjFZOS zts7ms$kq1kStLy%-UpIZ7CR!-Npd9 z1b7C|pFd};>ttU*z#VF|!6IDAaxbr}ocMUN7^^78&`m%wVO&gD4+}Gwd3t71qYcO$ zJdUN_-WBL|B9|YwV5v z(No6f4dOtXM5X%nQ)=!MrB0;dqzPlz*uzXa5KqmQ2A&`o#Dc`%5XV_+sC@?=%mrU= S<3L^j00004%P)NF5xc?I;PW%s)+Dohf@#*R5*H*1s^?&Bfng2UFI{y3m`n~{4wGnH8zN4e#ZkXos z^78)%1_n2PQjWwLzz)Pc$OZtzU@K6Hi zp%{qHRT>~8L`TIJRs3frl|d>C6IH+FUD3AUn4#}`5H_0)zRx(H&+)R+kN)rAkbM;# z&PkHs1CZSx5ayc>hr^AP;y6a0=cwx%ZQG*jI-ylniQaoJ z9nqh0k|1pO$jrY2<6ct?0j__*@JhfF-6syjQY2t;Sjq$dL>Aq<*)#S>00000NkvXX Hu0mjffcm`d diff --git a/html/forums/images/icons/heart.png b/html/forums/images/icons/heart.png deleted file mode 100644 index 1f5ae8e6a5e8bba17c411a603829be9a3eb8e35b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)=8%BHqk`pD!>^t+#!Q3I_V28l1u%Y=CS9$k6Q4Bmu=^-!{&UxWfgx><{bd%uS4g2 z=B3*i8D!Bxm(G%t;v6~c{?dQy=byc%@V8oh_*^+}&2^R3q;KBICz zg)SW@d-Vy0{qc`&hy8sNUXLGz)lK#|vH`y++vd;nGOhnSj;xsOTlZg^JUb9M=Q)HIwA6c6ORMf{Q-FbLwyeic8Xll~#@BdcCleaqc{ zQlc5(^eE3~%_I4Ugbx??&EceZ1Rpo_zmHD(f?Z@`yIXC2^kJ!{UoV=3@>vP$bFNqb zU$Bn)x=U$!6rJ=1u$9c}@6G3U;el`YUpFOqLkgMQlvi}qH0;-Ijm-sQv;2@?0~ssU zlX2JGdF`$|wU7Jtq^LhXkzz6_KQajXwM%Pt1sP;>EP%CSq+CS?J+|vCFTXJk{`Fpp z@T!RKukC8{%eX@ZS-lHjF%?zLqyoLxY7DM?E$s6L)~XGzV1_$=|Aib{lTI~)G?RAc zGQJNuW2P^gaUfEP0>Vg`*bw>lBRT*$VQfXyd`!fw00000NkvXXu0mjfN69#v diff --git a/html/forums/images/icons/information.png b/html/forums/images/icons/information.png deleted file mode 100644 index 3ad15eaa5c22f42f5832dfda5c32c1a7d9e5b386..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0QPP)k32s2 z-CRmKfhlEh#tS$UpIi&rUeW8gJd4J#S(Hi&PR~i!{wXQCyd*h?X9SQ9rpNTc`CK6X zAY}T^iUGWm)q)h#_KP3|=hu{;o=zDV86@xYiWFSlj)DCEoX-WacS8NQmJFKCO(r#; zXj1WtBqfg!$W&NZh>Y1dn*Onaa6T7E-MDVEIJ-}4dKzg4jiBZi2bpSXYmqSt34$A}7}g(ajvuNaWl^bE+<(b0j7**GHR!If}67l>XEo+y1a*l2z!%Vb$2 znJjG}y}3n@sk5^a88blIGmBX~QdfiFj28e7q0=r?YN+qRRnZQHhO^JB2~?jSBr-o#o=)oJ&6cdEMxg76Qa*U=2% zWXN@NC-@q=8*~kw4!nwH{qO7_6F4k^OPdolCcmyNFbL<^fV{?fvs@zmUSyQ=7(3q<7`BOUm{(UsXaemUu%I8I;rH6>7Mk_i(d4jh4d9+1{*chTFW6a zDU}{0#L6`_>U3+9A7OERsJ+g9JiSeUh{Z9y&rf--6T^7c!f#M@b-Faq2iCeipXZ~o z7ateTv@0+?gq8FTV3mTH=SfXX)>TbSmQ^`X&r+3lV!byzu~LTu5va7x_2ps@hHUZO8qU_x1{4S+53`^=x>tt5?{g&3Hhk1tQa?O*Px# diff --git a/html/forums/images/icons/lightning.png b/html/forums/images/icons/lightning.png deleted file mode 100644 index 8e838e89e0772471a97a3d49a4c73af46965220e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVZ5z+F&EK}Y-P+E~7bk0mi2ub8H)9_`nYhPr`&az( zgP4afsxWbM3_2d7&w7Knj_7=fI{9J!tII|FLvQnrKm8!`9`LC9aLlSZt#v8aqf5CC z-MW3KmF|D{nCSRR6TO|co(qMZhM7(jIVtq($O!X`!jGO=f+OV zv8r~VNxJR>Yu}A}@j6H7-Kqh8S75+TKX`hsNYI^QJoM^59&vFOMCB*Wz>M%gn3pia z9dNT+*ozA=@sIN0!AagV=uWK|LGo}EB#-n3-L4h;_zcYX<3zfD0_G(8H7`_T^~3N7 zwbN+5=HV%TKmOp>VRliJ+|m^Lyk-H-58ge>iv4jaU)js*+&NY>D#@>gl;)SOA7JJF zsus@gU=wa1EtYU$7d%=yht>S6Vxm^*_(pc%)Mn;4elY7v>#A?}h;l?}q6ATt;6MAI y5q%KbzZ;uO^R`5bw|hiwq6$&&!zV>PzIg-s;*2=i0%U0b000040%+qP}nwry*0ZFf-Hwr!hZ)V8hce*IIg&SvI~^F*f)0EsU81D)AY7pYxQ=BY~^Iz@-4xOTpN{*!Kxosh)wujup5bD!{c69_oIw5GHWaUC09ys0Wna z#Lr2s%T+V5*SZ21`~>X?6IiFyir(A3F-kr#?MI^sAl^A2Il%ajY+#!S#|Gvq2$;Z} ze@$#)lOdP@J)tPD)1+$8UaQ8q{WctTz)pz$cHmgRj9;yyz-pzG!V@kvxD~8D0wbXjPe%qh4t(_%m-Y1T@MNc{H fvsL7gp?w6)Rh|yg(00000NkvXXu0mjf@|eu& diff --git a/html/forums/images/icons/pencil.png b/html/forums/images/icons/pencil.png deleted file mode 100644 index 517874a85d76e17f50a36c36c9139310000182c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)Hw?@04{QJh6X=> z{(M*2)~y1&R8_wW5+V@h{g`dz;nMt(QV6Ic) z&Whh$Y#_xXn<-G@mg28${1Md!Ayro#mdDOgkRkmGZjzNOoxgBC()ml=KuZEv=hzMNzJ^4RPlSV4 zv_SF$D2uAaO9Xlv7Q{w+rB^qTkl0*IX7^_1-03+va(>_h-|m8CStCi$uObD5tO4^1 lRPi4m{tcqxYy|xmh5;*q^BU=nhA#jB002ovPDHLkV1h#`%VYom diff --git a/html/forums/images/icons/photo.png b/html/forums/images/icons/photo.png deleted file mode 100644 index 3696cf90215be227c8edffd4fba86f4092d57e49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmV6+=ImR4fNd*x z+A7DPt9Gjg6LRP^?p+>%VXUBM1X}a>>0`!;aa22O^a-<>QjaH#Q}A*J z$F6B@rRiBgx9c}b(HWe{r;(7+&oS2q9+IU`De{7{C@IU5s;m%I-51Yb{^Xf#nVVqP zA2nDoeHU>YlOzdwo>NsNLR5?&U-yqbEDGv6r6?lFAZj~WC@DSnN%J>1Z0b@BZc zQu>UJYQB7FNYm67vSy{iu;IYx&v6h%Tt9V!KZ^od1W}A(y<*X#lYXAh;UA*L#-4jX k42%Op{w@+2`0v&D6=U1QOhV5H-2eap07*qoM6N<$f^$ja3;+NC diff --git a/html/forums/images/icons/question.png b/html/forums/images/icons/question.png deleted file mode 100644 index a4d200527bd0bb932314f79b65d8d60a14552845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmV-*0*d{KP)f;OK8q71|=?t!GuL(uT9 z-oebVK>S9rckcMUSwtHcg*1b*TRBMDJ_DcBa_H>rhHLj5LBjemNZ33@aKDe4V}a4pC; z(h43S>qISpPUJkO1r8nwu*Mmp>^nrJ75cjfGe-i1lIuqsCb54SHA1GzhKbu?K%nf? ziC~R@TF?}kQS_fiyuI)%Q!oYF(z1V1CZu09tr0v+HcEPVfMAU?+~Li+uS`5@0!{*1 z5~YwSiQ2W0L=%6TM3YjBV2v}}5jXM#T$nj2pd?@>;2_|63!He18O*){fUG;u+{=67 P00000NkvXXu0mjfwYDaF diff --git a/html/forums/images/icons/rainbow.png b/html/forums/images/icons/rainbow.png deleted file mode 100644 index 0620a85be8caa600d813c7c4efa6507584dff50c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)Y11O9f8m@}MFuKm&xcY2n+cqW{lRV4~bIto9*-dl9 zY}@uV&hE{w!_nH0PGmLzhXO#wm)A!Vqn0?;WC8Sl;4+{)5Tt>(4CWo3QIz8W@`C;c z+!g3gF=-|W+=o=$D07@5y^qqsEkfQVK>r0E0gR#papv$QUaB%Xs7!95%09&?Y?&g` z@Mi}C4+Cb=o0NP5w?g6ETAF9CdeIcc9TQZIw%C@6nEw3$fm;BJ>3|YAelk?VN}A_i z*~&bP)6=M~3GNWHk9}SFo!Cx^vJ%*P6>fwUOY%G}Pe-ogl3h+d zdEe&xOA|`w0?g_8lY^1K5GInA%tmZ$QPu)0?vzu1?0tUN;XA34MCM(yD8bgXs9z&2 zqJao~Fj81hG6%)B6=f^18ny2hH7=JOUPr9L^6IA<#eNrHAcOH`Dl2X0DC!uL%t5go z6lE*08Cwex#S7pb@a9JcqtOKEjFX*xnaZbTbdEcOx}1C(7TZx#jtU$D_OPz!QviSf z05FtV4CR=8lv>$2glQSEkNg5DtXMLai|yJY_fKy45eCqn=at{<(xshO;FSLa&iOgg zksvO9!xf!)$BQSoT&CQ)jU&_!Qc>syf6R&002ovPDHLkV1kwP4`~1Z diff --git a/html/forums/images/icons/sad.png b/html/forums/images/icons/sad.png deleted file mode 100644 index 82e869979455306f40fe3b434739d0b3e13fb5c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47?T2gLR=p$VtBEF;ngYxdcK?i zh~Dip`T3yf@0*4HKdpPbnBnOP&aYR~|G$~}|JBU@uNVG*v-s{@hWqmwzFdm_|ES{K znanc_Z13)f`S*PKtyv6DH);I4mw9J{!_ld_H`lv=Je&FNe(lw%44==1{Jr4w;jsIk zKR=DrW_~yt{P$|Yg$WElFGv14<@|o1ZQ9H;@Ao_ZIpck*i{a0u(BDVxejj!CeGG^k zkF+p+JMQ)Cpw+K~*1rzf{5oX!>#+T=!w!3D7+!9*{JGcS=YH#72ONGKa`|=G?bl)V z4FwEGI>dhNxBt1%;pZXGSKC~6cPK4QWmuHNaAThC&jTL6j)vY|>GbJH?5{H!v!WR0 z$Fp3WZT$0C^sm!tzs}|SI+s`Az%VtGVPlEp-Q_MH_C@_To&*d!2oT|62r*#j@@JS5 z0#XCy;sKB6Oqc?cE-MN03ufT*o4Mzd>WZ5me*IJ3`}#i+aIFAS|NU-(c>n*;`~ac% z`~uUb{(&ec2QCR!4AToW3Sus^n3iSMqP?fg6?vGrMWrMK*`f|h)Bs(O;_2cTQo&ez zW-B9;qX@%A$vZ|}%F2tByc8B&DBU?9d+mFzV8B;-UWXYXADAK|5BzV+KK;SIH!XC5 z?7Yhya+@WVd2RXW|IfwX<@-Q}6oa*?CzkQJx8yRi7lcpgDLJ39auSay)8d@?w(3Q; QlAr+bboFyt=akR{04S_d2><{9 diff --git a/html/forums/images/icons/shield.png b/html/forums/images/icons/shield.png deleted file mode 100644 index 47323e99fb7c21c0816cedd84dcc1073a29afdd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmV-(0*w8MP)Q5QS^oZkM%f+qP}n-R7=iJGpjj+vYNxdQ(kjVm^G|e=&3Z^V|&pI_1cbBcqV> z1YLKP>vVYV;KBZf4jnob9v&V~&^68mc3H50|Nhg+wtf5d4M)b}^>LPErP|tBsHv#| zQ4|fFouVCOC`(Rr!Ja*PuE)p6mz+I&_R;zC=N~JI5>-)A0a;mD^^}*FgQ}`==gysb zeCEuVM-dSbCFC?0?A*EYT2)om@8aTOC@Lzdml6{b+mMlw0eN|Okeize1qB7a(P=5z zwr$>>gxXjs{yuNlE!hPIJMgO`Fc7rKQz{g@r*Ax~>Dua^U0R3mzU`;O6F0fA;qF z14&Zq$Z0NEw{G1bl!{0+3s#O~q zhB5JjqG#z;^7CV{n1|qC8Q#2kZ=$oIxnS9{Wizf{zwXHMQm0a2poF3VEUSSeg~G*) zR~^Y|E?Bs5VgJR87eD4W>1$^a&zm3!p(sb-z4?{0%^ytxJVy|AkcJ}Gh=Z&46 zLk+_?*3dQ0Xos1xlqIKiL9fQeEMyVUy?gg%D7_%)x^Yg-LB^3o?tcxdRhmc>DQo}$ N002ovPDHLkV1k(jGG_n) diff --git a/html/forums/images/icons/shocked.png b/html/forums/images/icons/shocked.png deleted file mode 100644 index 761f08320fe56d0073d1b9210cf1589e19808e59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU`q6KaSW+oOqtAlLC#m8<@@%t zBFVS6<$}Z5_0_9*Q?j;%CWB?uSzX=MM0ft=x6{?MUbP~sdBvpFry5q= z;s}28VPZ4$|8)xP?SE%1KYnJm@b!?XY-^O(&z{@r)%1PBt~adDtobc1KI{-?ojEI~ zt~2?(Pw6|oRs9iOuJgE8oT%0`J@Q7W^q!^9#>4J>d^Yb~98Vc9yC|}IOPr|v^jFPk z6M{4^PIxO7BEP96L{r-ED4#sUu#fyRw@=yP73Su*(CU66)17sKzNK}+9+I}~5GVCp z2MScqcGVJ|zEV{2@yo4hlaxeeeet{TP`UlUV?Pm=_|$uA6E~+?CYYRLO!nZDIc+-c z$pX$8VZ)7w#UVD_OP}f1dU{3G$#fOZI++jiJ(iXo)_f9J{%P;!sfXr$Sz`2C@PjMZ z$&G&<&Fp_X+dp&CeU?czmLeA2Ievc~H^!aU)V7`Ys5WlG**zNICpV&`+G9fjk_*cGG*LEe>YUZgbQIj9H{%`GvsI{53I?{YEZ~X5i8N4ee zIb9D}dD@Aq^3wd8_a%!rq%*HPQ!0267-)ae{~tQox#srf)H8P;X0-RnY+m{G>%P@b zzil|1$<=2HzR%%dfj1cI!nE*^_3tzdW@5sL32TXGep00i_>zopr0C~?l(*OVf diff --git a/html/forums/images/icons/smile.png b/html/forums/images/icons/smile.png deleted file mode 100644 index e5597efb8d728d1aa65e8725c877a3d2e071d518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU<&qhaSW+oOqrZqa5qrEefzfD z+YprZX2~{bAp6SO$KU?FYyV(hoK{*kS>4NIY0V}1z^7-_O=1@)ZxE|cTI42QT+w>c z|I(Tja~}k*%e~Lx`sZc-tQ=w0{}l^eU3%@Feeja;Fj`!u*{^l;58urRM{io4nc1Wx z{4B>`6Q;islH~{u14xqJ1?{uzv52s7a6Zv~JDh7x-K~<8X7oZKXoc z^kvKUyp&kkd-ur7Ym+Tsp62n}H1BlgH}44Pa-P6zFOvEA?Y=!}oKU^w^X2k)=Dq(z z{yj5kyqd-OJ#ziw`!UZpsHLbbT66KZj9kr|lg$6jPeuuD@mTpy=5XbAJ=X$t#oV&=-fU42mgyxH;H^Ug0X z*8Op^G3w7J4_>g+1FPqn-2IvK*Q50=$GMuT^W$Y#AAi`W7xTmM@3RVK%XYAFN3B-n z?3yLlDqVIu=!XB3H~y1vdM`J>9sjyvzuw~QdGhB3YtKA9cs%Z(d0@HWR^zC^Yicg* z{ihu&<<#DLZS$q_)d|)R-~AEV-#S-$<=wrNUtWB@=O$|K_+s5hB zr@fmuZyxUPcy=hxD6TW%==dgUU>_Vjc(D7?qeqv0{rdGzW@cvL$B!R7zJ2=^VZzbz z$^EZjz~RG(cjo5i#)d+nXfPO*%F0U70;a&x@yU_53tTQ&Kyl^Ot5=1cot@Ir(P1M# zKK>7mPmVl$reM<8v15}?ojN5gEiKZ}&>&4sO&p75Sxh)O$3l)gdlWdFPUrPqyLL64 zJ$qK(y?ZD5`T3HRlq9QHueJe4$0tXgJyT#kdGe&KuC7i}Q&Z*My?e4?!2&|EZrwTx z;OO{5jy!u5IJ{o(b$w8gf`S6hBIV`fGGoRJS+!~v(*`;|Ir8jLz;AzgdU~6_DgpYW z<^KKqGJpPjnKo^j06026AkUsDSo!0}kAjSh3=Cm%&nz0ifA`6=X9`Bon>X*NURsn( za zn;04h1isImJGYi6Us6)?$0ftj@yU_@`%|W5h~n<>;lmTJU%y_d%PsogB1||sJ~^`k z`0?LcF-kE(18Wu6^mwmg7ZZ+-|8pR}L)A0G3}6CcZm6IX5m*$eo(W_C0N5$fKdJ&B Q9{>OV07*qoM6N<$g4sb5a{vGU diff --git a/html/forums/images/icons/star.png b/html/forums/images/icons/star.png deleted file mode 100644 index 6ca853b5f3a01bafdff22016e9dfc84a02ce0eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)uWj459n}rWpk}Pvwr$(i+4il@_Wd@e-_+KVJlVlJn-6|R%yVuo3I7TG z;4lgQL-aGQmEhOzHAyx6E8&m1S$X38}1mEXQn9EOT&1EOGRKvgEe~W7! z`MjmCU2_uc>f;#syoE2#ej4_=#=ZKPa`+TkpSKeAxhqf#9WVbX2VU1zEtn^w-}Z?$ zl%BL$G^f#6yc3N@+fkFTj6_4hMl|HFXR~dn&R%Vadet$OZs-;WR`AT3zPGD;WhKnX z)8}u%lC%YwEzLkBVKNFaUi?VbB-}CV`m(r7FsKum_C?t;fY;yEy zHSH(^zvJd1I4VYs)MQHi@N1L8duwP1zvJ>AsB~>VA6T3=*j=2~6-(0lU`bj}EKco; zg-SQ~wf$TmW#Cs_*a`ifp06orv$|t}*xCO0Y<1!B*{VW;(8jLGXpc|MRTU@$zv9d` zSQ7N8eqNk+lhTX3`G~XIVLnN9tXIR*phtD{CY)%^~vf!nmB3}xx&<1MH@4!WG&3^5C)!RpGDpeO6wGg~m5Guu?D4BZz@hgFoJ c?8h6`JH#0(c$hVT(EtDd07*qoM6N<$f>BEi9{>OV diff --git a/html/forums/images/icons/thumbsdown.png b/html/forums/images/icons/thumbsdown.png deleted file mode 100644 index de08ba1acf4b69a7b40e050ea0c69c2d53612fa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)-@?Bx z75hpNFTv;~MQS~yXx%3iXYia7O!xu!W$_3zEN-Qi!vJ zs@)|Iv9shWbD4saZc@0$eTvb0N(siVD9ipEY3^q{tJTjW!>8GKxWp>KSn~LP zhJ2(hQh@w53RSsHQMjTwMAC5;*bx%~?^bY2!L&*&E;+~UD+MWBCwBzAB`=V_>=g=D zyg?DTiUh+K6e@crQDJ+le?mZdE0YY9JDZqk`GIN+kh@Cm|4x&a_&M^GzC;1i=X1^O z&TvxL(^(Ze5;9xaTp{p#1Jm-uKz&#g0-j=L$?N~gJh5#Z_5N;T_x^2U!}!H2qED;2 zgCACLW>s(-makTIaJBllkBnb!C)Zy`^S^EEXvxp<3-#6c@q8&a8p}2z3Req5@eo55 zt`*|9+vCNe6IC-U1@7tGo*x#WdWS;fuNJ&p)4>7%9jl&cDe!g$rxU7pEuRl)U!Ups zW(D`6?m`QJFRMA#0P&Nlu^M;s`0uMmbNyNj;ME%X!-TbC+5YcqnLH2Q_u;?sFd7Cy x4`>gpetyT)rf>CFDu0{&ljJ{d!Bm|dugZ6>P z-1_-+AOW z+6ed?Kq`$L-gdX0((yRTac~NSZo!Vl*wS$bMk3tu+9#K#nj2D+K6&n|i+|9Q0A#_% zs~rco9F(FGw8pqD7*olY+t)8!)H34x_h+@O-mw$Q(Z*Nqpvv3sGT0b{fpWew`EL6h zu;o?vzi{$)5mEKnF= z=j=`M>cw+*X|Aivq!P`Ubi5@4xI$P0fmOOh5ef#0#sulcRXO=ST7!z5{#4 z{2c7{u+Q!>w%R_zmI29D9*dX&DIj7XJ7GQFja&E}xKlv&-6B&7=mZu2OdAUdziLmwt}% zu9LjnBFopS%~SSxdZFx%%AM0jtS(=DlD4Er@&dDeL9SpZQL{^x}*>WMc}`?=K4UTFS0x%sBl&F=T_ zGqoW`{eK%T5j~x2?Q56WW&UT%{+4+hp00m*_iOpyzp*nee3-cSdnx+^?*%8;Xv{NI z4SgLktxZ4Q`Cqnm(2OXHMo!-Nr=cAh^Oc_Vvp>=f(lFB8^uIl)tEB5l1lxQDk8}rh UcYf7qU@BwqboFyt=akR{0Le5niU0rr diff --git a/html/forums/images/icons/user.png b/html/forums/images/icons/user.png deleted file mode 100644 index dd82fa654f8f6bc36bee2a00cde2efe102874e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)!VaUKEO z&_oQNtUE&B-2MIYL;PgU6Tl4(UZn&4CbjPTW{v#<58qm)(Y^256s`9V(B1D^^u{uc z;30!-@c_!}iI4 z|2{wU-#7WPLNMJ@kHP?*{NqVkSy_Ni{Pw^A-BgPtWKK)_C8L8be)agpZ{^R+_|YZ# zprV1p-<&BdEG!!w`s!3PfXoG1e?kXc3=HLmY`DbFeW=CHf2P7MdMm@0e)-8({Q5L_ z@Zg<*E&ugd(0;)~23d5_#XwDgZUVh?M-6WJuk{?YI$-10000%A_P)_+Q2pKTjs+xE<7+qP}p;;dunS$3vI9+I8|u&&G~q2!hq+2Vpl0-%k~@$E)(LCq z_OGFf(CJ%6hj$gVx=Bz+@cDo?lgadx?SL`91$l4{vfwJZd@E>oEuz6Zjc-*6ywCB1 zI?UDb0X<_#;aWw5eh#(jY1C;aA@@w9-Z+Gh6%oA4@qs#m&j*a@bedL2yPa!jwJn1_ zzA3hbSaJ@5_%zBigZNUF0(F>cYNF)Zxc1kLho=_wb$)QLj+WHylFxSQhoQ$~^*8v(GhbYqSB44#5fIQ_ka^xGJ zj^OhFcQhKM)kRtO94+2cR9cUIp~7+q>M+;M2YiebS?CINmJ`(2PSD`FprFoqhAJ{# zs@nl|1fLHC!{IRfJsYjo3sk6&Q7qd>e#bVlTi21>v4$qsK01O&pbm3`d?3o$Yq8#- zN_&nnA5Ei5~w5i5CUZBce~vqWP9Cgy+^b29bCL@rRk@U)q61oeHudgYi-H@Z6C3R z2OoDL!0j@VNuF~|7KdS!su&;wR^D-J`JtcK!-J1I5%6LKtNC;(d+qnIL!zV_ zO(y*ea=g=3ylJwt&B=J96GeU|x+O}6d1P{2NhX)| zoQh>zie;hAN*=~TAE_6DbKjnhKe3@?BT&L1b>w{^*L?p z)@FUCcV=tPPGV25PiJy|;DCxAbH4Azy(XO6B?BsQYH{ju{!fYkmIPu!AZCLZ001=! VMHI`GX(0dr002ovPDHLkV1fb`LDv8P diff --git a/html/forums/images/index.html b/html/forums/images/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/images/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/images/invalid.png b/html/forums/images/invalid.png deleted file mode 100644 index 13d9a99ff66bfc314c40edc0c852b0bcaf5284c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmV-Y0j>UtP)4gY#r5Crn6ce08)NpEYtFW9+inRkY6Zav z8RwdazQrCJRRG911qTz?+<(nZeSBWCrv=IYu7iST-pq{7{rrggh!Ka|d#gv*#qa$&jvt(&WJT{@Pe>=wRyKj&WkOyJS)|R?dRcTa`s8>US zijT_%FA=8LP?2ujMSK&4Sa3{0FMh(o{+cZQvd(}07*qoM6N<$f`WOOL;wH) diff --git a/html/forums/images/jump.png b/html/forums/images/jump.png deleted file mode 100644 index 930134ac71f601a61ac31903df2b93f33a69384d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmV-10nYx3P)DBzg0pD|Q*kQT&{=EV@_ zg%Ib25N7#cr5N~+{X$-pg52$McGd;}J3kv4RY?IsmIr=@+k2wpC;Ex*TJ|;mFWQ>_ zKW$yo|Hi#_|3T{f`n)g=@Mv|J>E7yc1{==anDM`OYr%gI+oRPvhNM7rth7IqxgqU8 zh<2#5jUhP}Z1SznfUs@86?xHUo^Co5h;b&QVUU>sXpzq7x33E900000NkvXXu0mjf DRD6&J diff --git a/html/forums/images/logo.png b/html/forums/images/logo.png deleted file mode 100644 index 531dc806eb2f43edebb1336f1a596844d436ed20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10233 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

    x`yN3VmCRgIA>Ce>EAuzh z2u}DJP&ULZK*n-dENhjINw+^um%|P_YA4s z6ri2mZk*%ipMMs%Cnl_t8EXvzew|1G65i!(vtpR>5C{Z;azd%#UKEr?XRg5dmxlor zNkar^!~_F@d+na1|DGEM23H@$oxaLu{ySdb#sd_IM}T}jAE)8Z#KC)7=Lv9R4^72q zcz-Ht?SOK?Nq{!jL~ucg?g8oo|k#0lee9vJG*-F+5atRBdB2f&l&B2-w3t0kzR$5vnclPc}PvdqG zpH5rramXR^;!7{d;YS}MhhknhYu0RGW0l07FQzW8&n5Zy>hIcjE z`!RAuzh{O7P_aOVe!&+VS2S}!fr_S~0%XxJN2plO^F}yOtY9@atGfAEi|4LP$4v<+ zje9R>?jo9Oe4lyKF~7EFT_oP)!x>7!W5zLN=_Eo5mUF|*9zFI2$`ZG6zyMae&g`+T zz9uFt@IBz`WY!bY{OCb;GrBX@nUj-qG*B9LzW14EO-CUbOuhAT(WRGZSO0btp-(Qq z>MA)BP8H^wvcf{=g+AvXK#tt>ijEpHRwCN)1Pf4`p?z&*Y~gSjoi#w&k&5#&XwAP9 z9URXJd(HtWnuZFHc>TcvwiO+E4i^ZV3X~OA%Vdy%F=FSw$z%ecG;RgRIH1$~lcp_& zgZKOmZwLz05DXOrkRb#VVdr~HB3e;V z5rg8ogKsw|q7ag=jjxCWPMA1R3y{_Kj@QR@wSEHzh}pJ+zR3_E7hI(oYIhxGa>)OrrQ(A(02N6x%8?YzOU}P> zUi%f&%#qOJ3-kjjnq(wnbI#9_F&9DkKT=b}`vXIOy+ECqZQZ(ca^WSHYA@sV7NKd5 z9*VeNzOYqQRk7Nh*XNkxcFS$IiP>tvG06}hS_^c_k7HcRRE}~$MbncVDHM7l`hA8| zq262@Q(4g%0ix}Mk?K8%xZ6Z4Gc+Y7ltuH?@;SlKYAdHxG6YEYI+#RG;XABezRW5q zI~f8bT(5?ERydiXnSOt7C73Ilo1d%@v$6Vs#kMKBgKuXT?>h!g7*=DjVYv#JrdK=O zAUHzabjz(`wnC7a3;~jCZ}_qpH<4nz*{1^)P1}r&cKExKwiRHon45N8#AFf9KJouo4GSbPMgYydgf{Z6-_b) zNSLzb!sPp|BkB@?(j-%WTr`Vo!#H_;d1F>Mumj#K5$(&bzK&czaJ#~~!Q1oljPM9s z{@+tMH{`WBny%yCe_zaY4^YVxAZy;dev4Eu?VJeYPPgh@R_j~xXUtLV1A1FH-D?s84b?u2P{tBCOP!Ly*5=IHrF?ytf@FG-<& z_EHZ|<1M$}!FkknH$RVqkXEl*Bf2*6taH!P}H zYyl#6=!L*GIQ69f_GAD`lS~0}F<@3sIIUU3X@J7PKtv7!MPjz^fA~=^HL=}1pu7Q$ z!6Ht&efs(5;xz;9vF3iKpLMpZ$6OI@9moYL*#b1Yi~i7Cv6e05s0Wm;POyBO&vz40 zF-V923D?%dS~K%8Gi2H&c#B9@N&Xj`> zKY}J-ljnkRc|(>Z={9=o%M_pOh|KvaYYIn=86#%<4(#5P0%S%6o-^A%K|Ay|P~6Og zb$;8LeBp0g?6{jS0dj?DuD}+fqts+!Pdq&KQ@>5{Jp9;Ii~s`yyBMRBEoJPF8#P9KI2`@zSP>7D0|^r#G55R>JGcpo z*Id-eB3@X4g12;_>`1l%eSU|P$Vk&VVK_}VT;E`0VN{Obuni(|I@qGie|q=pN0Tt= z0eAk5E3UrUSgKIp06zHeBX0U)S%9lYOODbXee|(j&VD^O9;odhKvo7-E#M+p%Kd9Dga$b4Owb}$sXzia~u$TJ?KKA$%vcatT<5p$-nIjw5i?JGk`P`Gw zI722)o~$b+N|8!;2T*a6FaaufFj?5j=h>9ER9K`>*|_qPYl0HhOSMD?ecA3@u{OYD zg#u8qNR|NU(9#9QE*5I~A=EsS9@6%43Y zBx`>_jJ}_`d5`Idc`p7fEkK4G^v0egAAImZSD+fOB3VKONY5Mt z*{(Y?T>QFN(*+3^AQ#w$NPhR{y1!{~MQos)h^HKh)&o${@Ej0bC*1gZatVBxodvFL zaAuNtdV1IgR3weuBc9+qUH4;MAQI}YU>~tbE3_?K?nR3S2TLMs`#flZOuCx*xsMN`*DOd>` zizlT$GYgCA=8FP5Jup>v88k!G1Jk7C{Zr-Cx0lP5wYA15{P1Isvr=5A%JHj_I>&~^ zm|g%1Z5Q+UTWk*jwr+jI-mDsT(@E&c=TdjtmEY7RsIHK}>%WW7b7_9oqnPvzpqy|m zKsb81{tcJSfY9z^j;FC2xKU{mnuzyk0Yf}IkK5~{V+&!HfmZ#%Wkq~F-j`2UL&@|& zT-)Qgj+elzOiW;GmjdV1!tFKbg@fsg14{7_jd{U41NFrhUj#7%F4vU^7h|_uj%<;x ze>!QVV&|eN>>0RhLy3Gkf3ti%Z?k+dAK>e!^NVHdw9WGL9~?wGPkucsNHBIvR_T};u zbQmqq%gf6(=Tfco&Ol8qK!UQno1&}S?LOqJP?w8;c0o9R!sDnHzzN47K382+EqugR3yY=4h`A6G_Z5tQA|ezS_irHlp8NUP zZMMnB5BT?S*-y`uE3iM|RE&ZUVEvXYTQ)6Qw#+EFO@~R!g5BxUrwdx`oH=tIHCG_s zhp$14u;~Tp3-ir(-b6CIM0@Dmk_-W|l0DjaWWVuC=sEi}SDed{l1PLgLZ8H%quL8F zIp`%jGO@(~P#PXI(c;?+%jI>NJ$v@|dM%b0UK(YLevH+fch4 zo%P_i-+ntD**dj9{`8X(rs&+lAr- z`wbj8@N}4Vn+@}`q*TsEB6PdXDRMQo6)RZ0SSLtV%$zxM*@lgqO4gTFZCz4aFP|+e zliuH~l;d7qB;H|jr5&~p+wYpPXwF&RIQhZedfF>+IGo)!%3V zwgkHa{zv-{Km73N|6dY*g5mHO`0&GevlN#5Y`*Tg>lln3c;t~szBqE^upj2low=}R z<;o3ZrKQzezlA%>7nF$nzN$_>EvS?a7F5Xl^U92`pX2A>SJld*QjrP~sjIESlK91y zMJrdVpE+a3!bcx@xZfwSp8X~~X*oumK{poW>o!8v1s*4Axc+e?tJcr%6 zxj`mS@xUEzX}UQ$5XJ)K7QXM?sD=9l^7)M+a{W?f=+K#AIJ@Bf?;H$f1LYPbnCsWn zC_=dr9@Ef9hErGz$RInHo79U!*}+4k_;xi%j1CxWx+6e6PbiGKT6yZ3=j7Gb-;lcc zI$@hMY0^BHdPDKpyTOCtK5!4XA1>pkF1zfqQ4c)uz_@qceDjAdKL2dek3W1fYy1!2 z&-?w?2@B`XoxS|`@jox%&p&?u&8#mz{p8O#UVZgDjA-v(c;SUF;F_M`dCc?iyaP=h zq!3N+H|dYju>YVzgI*~tEG#m2Q7Z4Z9JFNxqZG+PoUx@Gt}igTk&zl zG>_*TpxnauoR$CjS{p<-JP_W@+dZD(Roq66yHjzFt=HOV2wW8aH--oG&c5-&-Gyng zGZ&SgW2Uitaqgj=I^}lmp?d5BT>axA((Ac9Xbn0-3^!My>4lIMEL^D5!|LG~{SBS# zUOeu0&^LNeVWjPkCDI4Lk?;V&^5;GG+_N8lZ$9TXKF9pNx5c^p zSkT*i-ZiJ6e)@f%fByM5vu4f8hxqeM0k#KwI|-02S^KCb^PGu3H+L7ZAN_Ktv)UV| zc;PiQf@HN8jU=HLqUV0?KsxqoA4l(JM5CL(Y}BYxueNO2@(MiWa&Q&6(gphQc3eT6 z&f{?IOTanc)cyD0|EN9o*n@YLY|sYm33hfAU~_9hr;y#;(%hm;HIq1uLxl5XZ_vgM zZw(4s7f3{dIl5}dkRgxb_a}mrO-}j`!0R~y90!g8hk~vk2XqAcInM#vnj2T9_WHM7 zc2GMM;3+>6sKn7sr1!IxIse-iCgyd>1FaLY6%-Wwjyc^$_+1y!-R$7GAp9R82m-(d zvOx-Hr^V+kGp4!GTSsSt&AKnY>y^b4M>9M`nxK19fS5;Jj1{scg5Uo7>#xy=9(w2@ z`2RGJ0a8IHb9CwOAECV|xHjMbQ+RuW-L&cHXty`Fow&fTT`@7!!+=UG&F~QIgxMFg zHam6-zeaTK{moHwukFm97VN?6H$~UVq@}w_b8~|iFNZ5STM3YfItb4W zyq7jdBLuex*wuVY%l{xdX_^HWe>2LV!nu~~zA)CNGfNUnGy0oI5w;bxwKMn%;R%hG(+qP}nwvDrG+qP}hw(Ycy zmYJLO?HQXQ>1p2k1dHER^S;{vs6ox4C=Wpvzl7a35Q?}Gk`xS4jD;$jNTotZVl=p& z`qX{dWq7>Miv8BnoWY6c+(J4$l?S${Y%1mz>E4Bf9;0yD3Dg^ z>%B);P#qE~;8w~v`h6QPQ#|dWN%RBVPff^!1S3`X2XYl;`2(oZbcpt7Xo}6IIFMsi z5nCX_Khuis2_@JPUwq7t#1aH#TDf0Bo=t;Yb%15GKr~0dZl4O^4Z4E7NN};&$OPvT zOPxt@gVq#)@}<{#RKOvq`e>9&i|GSuPC_}{K_aR?MRb^Y(@m}}V14=s4##p9E*(s= z8JHbn!jJ3I@Ysx4+%hr@odyM?N#8)!?BNfe?mDW~BLGdgo%?a?sBkjNKCJrZ2xRVsw@k?98#+~9T6E*J2e@u!bSaMJB$gKLvRQ|OASE?`|i z{v5J=(BXhJPXy+K7U7vWap*8O7`0h0;V)l0O!PNj|LX_gzcb)=?$?jyGx2<`6N0xF zCt^`}2{<58dL3Tx0DTCcPIVVh&uTYJXAhc7xLiQPSZFZSa%%yN6GS&wMFG9&MaZ^2 zYy{#=GP-ZgK-b}6@YIV`R;vH~;X$6=sRv(o_vdyxrF=Yw`>DH*xQ*xQ$NuA6w(gZ9 z!q9zNCadF+b z4J4@#G+9n9Q88$D7Oo!^2I0@cU{P3{Q;SqqAnw;E8;j)qzd!MrJW31pw>}~H`h;^& zFC^FDakyec2!`#=LZ(FnG{pp`b*{N3sRG`Me>~iqVG)@Y#xFbmDp*|M1*WdXdjSFQPB5 z9TAG95&G}LA^QQir5X#k82S&@MOG6ofdWRJ<6nzrbURHU5zb{lHK=3(75exr=hvdH z^f`r>W5T~#o&tK%>(G>fJQ4VGMH0OATg?+Eo}h1Q*eehZPL08k0|f}<328Y6hzt+K z#&v5jX4D7_8qgmD`}f7z(Ic>7?P?^%#h}P+L5>}m9*~cRr$xi7bgh33CL*s@i?^;{ zuS!ON3_uf;0QDsjDz3r>ETC&iaDmR0LZ_yLOcz-Jqp7LET0Zn6*SA0#P5T`VP1>1kInv%)05_F>Z9ElP+_kv7EbuMvTHKw**N_%nq_nuZ%evt1 zuu{CVOG}XoPN9Zvm9}Y{p6}sI?))>ETxs?u>CEPt`AsFcH@9$~`=0llSE&4|V7}QM zgjNXPXUgkyo4z^`L4QZ{-$8e72hfa}GpR|l<}g@QHeRJ_)fvHjRch3v8g=SYt$OwO z`*JX1-A13#vK1>R?jOGY=_+av4K{~xODAPQ2Y?3v)!TfZZoEn%TrW&QQ!QY?Q{W#C4>Q;|Gi7cf>5_#9mRZyJzksPJY#2b`>AKqs()5t)oxS+OhFqDwvLq*0y6O8jhB5?1YKTfWbqk$*0Yz zYRy_yxq1z%Ub_x|U!h7B8aL^4diU-v5p+B9165sn51-8@l!OyB>+exOjFu2CClOI+ zl?}KLdeMn!6hWIrE*+TiAY*nmaA36fVZ$YUJ?GD8()a8toVDFZejoi_9l z!n!&rq9apj(Aor0nH6_vnQt^DXmv!;QwO?$qTu#_*MN)<$?L9_4cG*{RxpCf z!?Xc)x;X?bMGL2y?XOR?0HpuN9C=1DNw^*;DmscLPxC;FSA)aH>a}W9+YTMM#fyxL zq#HMH(r^3r(eAx_>BpabqO<4DajTb_YC3rp79LLh2My-r3_?<>)1V>!@#kM8C^1b- zK~YKM?fV8Li+kKRG-*U6h#U}(uDupZJa$H>^8gw}$Qv*}=p_+iB!dn>qXKondyyx4 zaZt=|Kw7S_6yah;12zS3NLoo?gee0yBwc3IO(Zi)ExQBL@n{v49Rg_9`InTOt|N$z zGp9W- zJkZFX)PQc_7Kv-2N~3e8lWA?xpTBrE4Cn+LBvE0woCr?9*#ZW123ts8KUgmd%CrMX z3dV=FFgBnA*rbKW`v3NrZ)}tsC>L&K&$AJvMQH(|XV0Ed?|%KLY^BN^E&}em)&Hb1 zw^}eIhobl$zh+1^w309u_YvKD^`--d4pAcddWH%N3`8R5|MUr*di0m?WrDcxxM|B) z4skbaSWmH0ujodUmU{pCgj~G-X44rbWkwu&Mmpl_{sK6t5P}v`a5G&2B~=JNF9Bm| zK~JCoB@`IY2RMOoUb3n%y9z1d{7>o+ho7aI-;zZXS# zom)9D23gSuAt7X_&0Du|QU(bb`f~CV!K4)X`Zcv_-+@ZHm7})!dgAC|O3|j%(Xa$^ zTWM4#!QW5-h5ElDJ`fTzcZsNs3I;3!G@uJemWc1W{YwM30dGY5Go`X=KnH~_#af^- zlOIW3t3fXQs;&V$fe$3DSD>;L4VVw?BYF9l8VNH|mqlp(o^rAUeJuL?_;dPzuu}*R zd-dzjEf@@>3f1e><<_us_wER5!${CSs0H>NIFOCrpm7rl3<@GaOO`L^Bn=FT7P1b_ zo->=?#zbPSVH$P%?jc{h5R&3=;8qYlK|<$qB+y8r+2@y7s2qY80H;Y_D}jR*4LDfALm>iGH#T5i%1AqX_e}jR2POectvlap!uq)BWDA+%HxZVh|&?T5_iBNDV9;c3;HHMyp^di{D5 zbi>aNrfkgpPJP*ej|~mEPyc9%#$l+O6Zc&KzE)mymm(5%gum|)hmWeXfXp_KB{5OA zw3+71FH&Gn2E)xXpewkjpg7#$jO*CPo6vxT0!d3rw^4W zUy=F^9K^Llh_qTQ4IMs$`^mQDQ*lh2RJ?rbrbAe~M&3 z+x<%eI)LvK%qDN1jqB|tlj$p9#ToIb;3#OE!!Q)HuUOvXSKiR5X zdwPnbQF3|~4gT#3j}d)^{w!8u+X^&dm|?)C;GNi0&x}>cT7guNVsfE>XF#U2g1K}{ zlqQg5mdWt8(vlP}!A{T_zlc-fR^sY zrqCzbLn!QBI^l#TfJO{63|LTRvh0OyPSjmYrnMAkR4`x(aFwKW6BIIko+2wAG_jHa zBlYL*2nyy918TtqFbY%zj?xB9OMQIlNg~ZS_mYIN!!3V*6xJIcEabkQRY8W6i~6^3 z2hy(HyOD^gz=OTtynRCu_YtQ|^I!v-Iv$}ZpX1LzIhvytm!m28H5>4(x&~w>%Zzxa zt2Fy5VyG0*LL~z_fO#aX6omju{p03L&P*$hiJfU2ezWxDYI zYeGDHhxb59Ny#+La|UM`ZD2lO*cuWl&1lEYoz${zJ8F)8;k|qJ3F282>o;sWUkHMnwbW2EKrlBv3@C0-j5RgpJG`jQt2y z1Vunm{nyf( zLV^(Ly``ZeMhdBZ8=9~djT$qCS|h1~v8Fu3LKqjiPR4*}xj8GkYtLRX&}Q`w$jks4 z5}C!O3MQ8Zi4@2CscS%Hj?ARdc;KGRWikZ)4Dy?4z%T{<&pe3hr!qU6}7<2SFQ*KVn+LQ(9UY&$h?)$qsS*YVu^m zVL)JvNwrsih1mx@*|xlJgWDFa_q9V32D35rebgj`reozE5Zpq3@zvLc zh4BiOF(5ON#FYSgiX2x8_=z0zf0i*IGg!f>lqM#Q`;5eO9ynXifJ`~?h~)LP^$f@? zB6$UZ;=-^hp`OL{x3%lnvjMG^1(gXU`(dK)`}gmKJ}MXJ@q0F)R0}xI%Zv0n3tTK{ zz{=n`iEFFKaa}-$NDJg@K?Ayh5R%puqim+LM9ZlIQ>{EBUSJc+>jKDYMFZ9b2@1mF zp27iNl7UX2IcvClpe^BfgHt>_xI98oz~6z~H^jBchOYY$9we5q2#)0pm`i4;*Bz0Y zYn#O01{w<*&{@F}dMAvE+m$6kt2dy5jSM(Y;TX}1Ry1HyaE;`(%4BT+?D-2Un%kPg zKU*8H3Z^9;JARx5ZQQ&?E@vKuMreK`{PBt=NW00j_Do|%D8ZbB5L-P95Fp;nquyn{Yel=yPtuvt< zW_E;;Vq#-Sn48$A{{Ue+k{CRkZOiuUhBFDAtzf{iGHK{_M%OV=B%Qw>$13JnKP!0lR6wFTe0%$C6KxU&%7V$6O2tEao5?RLT zHZ))@g~j>dRyN=|lGl6V1Lpz~hJ1aAR?tQTdHtF&lQA$nQJAF5lXGD(iO{na&mX+$ z=Vv%9N@E=ZG9y5eM15_rLGAFFNcdUTiUw>gQ^WiR)B&?3iuZefs|^jh(@-lKP{F#btWdEhO2q#L zX8$0p0cs8Naf{m$!_ThYxIu!j;4iN|YHDUaT4!$gs=%`u&w$LAB&{g$R$^FHB^w)XAD|qTglVa82EVV^33`HfVfv5f%$Xb# zTDaiOpD}vuSYfF`egGUge1tcB5hmc8Xf3&wK62!!u$=u{&G+;h(Q=%W3 z0(A1Je5)DI34BZ0R~i^^!=>rVfUBfTmq0!%8E}%qf#O=wTk>QW6*KSSO-)dAObm@3 zKM{rTYP_S7$Xq;83@6LN$Y|}V;A;)8H_n|upF-~4B|$HrJ*K6Ly{T`XUNn5@AnNYk zooeb^JA(%R@5Zzg8@cF}79Jk%0W@Zyq5+vXlznk3-}(k*+(9~JPftKO8}1KyoRn*t z6^5b}1Cv1_}|`HUsh5Tw0;34Gri9u2c5(qsp7Jgn@h#=O_!> zgT>%6DOU`rrT!lAOkvOnj0UIq{mL~5I7yk$5qy*rMwDD6y>=qYDD3BFXgti>8QcmlUbdV!e-Vbt;VTcFg9wW;Z3h}C7jOg)HZouV zaDbHSd*EtA13H4)q+B}COJxJT1xvv^Fdu9JyTMU#1%!hnGnT9H1`cK#PzR3b%`y)x z2Rp&{;5-P@8$64$r(j{50nwHZI0Mb8Q>W@;AHNsEOoU;hMsdq#koxB&O<+(UrF}@I z=kF5fcvu`A4UMB?VE|u`hb7S7pg3B6<2_A27fn5WeNOeahf{&YcX;%Da9)}058m#I*ZJZ8+`JQ;gxmOU!(Zz!kXo z`}Y#782lY8^x|Xl<%)o@szot(}b~~W*9Kg0tT!HVij!rTq=hd zFax{-dyFSC%NQ_~EUP4N9ZV3WcF7sg3FHAqLFt1B53c^-lJJ)~;o*%X0fo&{kerE| zFk!+kc&~Ts)~$DJ-MZ;gXh`rwY*YO%IVnkt^;>wqrpJl6is(!_{y3Emg{RQL&}9C4 z5B*Mr2$^A1d4$?3Jf?{;)!_4OaoSz*|IpooXs)ihrF?tnK_8~ z7)fid8Ry(c>M8|9fnaa|Oa|4md0n4c;34oHgoA5fE$A+>C=_FCK37l>lyP%&Ym5SQ zDDgr_8MJE6I{N;{pD0t8Nf7z@`Gq3X+lcpm0~Uh$U@lltqehKYBS((h<>lqIf8WnP zUpjg6gx~L%&ffFAbTRbW)yogDo!E=(fBhN$@#o(!p1pVK*s+^GegFLhv}pT=3>mV$ zLWK$|KAuN^zWKmg&qCm(XMvtsXbori`1pJm5fKrk-$m(zr>Ez5yjB&I0{Ml^sDuG) zfq5o&dR-1i3jdI1Fa|6IK1M7B!^}KqUhpMY4tzw;-QLV|50IH7*e{#sa|B(4Yc&&Z zFa?YO{Xr*C-^_=ifE!pS{C}IlA}||F1j9g2&>WP@&NBJNS5v({R;f~@d3fIxFvAE>Fbz!6;{m1@E?jtK(V|6XA&i_;y?S-8k6%Cj4D-zV z_`3d>$zY29druSRo^Aq9{c+>m-QDM(JbCgQ5-|bu=g;@h8?ZDeAY(w5rS?&`!a3DE z_duDM{Y6#3UU@VY!ojN7C1XIL?^g;`!hY@hVKy=p()`K0cJ2D!$;oLn-ZKh}0iP*= z-!H*vM&>*+=N=CF0rw(BinPg_H*XVsUk#K1`G7MU&@Qtw3pneXaE~o=)foh;UC?%Lr z@yHmv0VhZdr@C&uvX~w9L(qJn5c*NWutN3~aP8KuTf3V#Z{7^QuLvrG3ZN`-17&gu zrS*m@0gCC3R{-P&&Vu^ugZu{`m*! z?CczEZ*SMTyStB(=%Lc^@bLNe_BO@iaR)gxG;|)2@rLE)Wty3pDT$)Uf*_P6Ng{BM z*woZ?3Ta?qfWPmFi3tYxi1qdL`qb1EVfcN!ze3<1v9`8$6x)#TStL3*<^j39yj-uS zs5nLjrT;&Y$>eA{oz}D2>@gBOR8kb>oSDhJ9VB`{jz**U^Yb%3K0fl^-X7bw&4-7F z1nv=cc6Ls0Zf+b^Raus0#%-D=gL}lawKYAT&l854rZLi8B5;qmxVSiqZOgK#SS&h7 zbny3Kcql3=$}2cHco{GX&wywke>7%BV}=?aYwJ_ztgTO)+K;>vLKY8M`JgFm)x#vX zK>Fq4Tx04R}-Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p zm2dw{w3j2fjAY$ z;%2ph9kZs-khJ&>LR>Qz>SML|{)I%D(Aj3F0&y~Ev6m+9`Ek-D7D{@;M&eo+^Y`$O zmA}l8L8cE!DG)eOO~6MR?Ehx$SQg07U2SFgFOfoAGsZn{XJ_%ZYp_OvII-AIixZ{~ zA1+M1aCDo@^r|KT4;=;L0)Z2aX#LrUS9dbS ztWS|<`n)L{`rFCoa93$tA4Z%x%vB(8qVRwZN9W(aC@*iG7WyHmzAW$ch5R*E?^8cm5wD#CC%7jA-B`F#J{`yl_v|aZVCd?1T(qSef4e`h3X>HMi zd#dy?vkd~548^9K$zfM-r3`zSz9%^U_id(!bNV4}P6+%J3WH@}YCHTRb8nZdoaB*m zZdVV9oog#u+Z-irOXI7vdSaqNVXzELY=s5p^ApS$c85yrJRjNcjg6dIZY4QKOy=k= zh*l`X;sp5Hm_RJa%lf+D`0Dl&7vm>vaB!ZLJWuv5i0pt_&4F?XM4Sx6TjK9CI$=eA z*4L7C0U#K|zK1-fne-uc+`^of$bqlYA|Fv<3xY~<)-E4d$Q zFWY9mkuctbjtWG^g0DZKDZV}z+voa|Q={d=?p|_uxk+~ZVk5^E+sL&Y){?p2HhZ`i zrZ5+lBceGPPwH5H*^{*K1^15)6E=un>La^;wUwkrHga*JmE4MTD$sA|qJd4&NP)m9 z)D>^{aYxj}Lj!M`FHV=I=cme@Q^O@=cSkwB!Aml>HkRx-Pq~-qDH$8BZZMZM3g8rM zk8!)_no_TwoFJ!mMaY3wA+l|5u&j#ml@-$)$+{>HeJ1X5bh*1^?RJ-)k#DB5Mgg2! ze2U(FA7M>9yK)J^F4fPscdUMq@-rvPhHpKktz(T#?Nod2*&^QeW2|M3VsY_!7vl9k zHWAkf#o<&Y|6L7UH&_o;I0>{%2Da=04jcfQDHO)Z631UoXpa;i=KMP!9Df+n=gHGS zgJm6%vIA(YpcE$y$$-si;Jb{fwGZCw5Pa`muMoN5?JFmoT_oGTg=_>8HUY8PEN&6- zGjt*x0sfu>j5~`8dvE&(WIya1CRwIHIqBvhhrYCyxQ{-O{hxd$=iEKzK|r9)1romn z{IC+JaT@5Swr0C~UdSChBtNHDsQliru_RjCN}Lw$`}k8y{K863IXKDVpjHwM9GMQZ zP{3MX!73nSg<7H(sM+eOufOn7<3IaClIycI6esoP#{i4{Gtge<+e6S zb#arMK7NwhrkzX!l8xfh8c?(*{-8~cc{CIjPtmneT$ToF_3FDU5c4j~86Y!CD5g@2 z@9mo?GaF;aC?|L;6r*ThMGH7B4#1q7yGF_MM%Zc;m!-kCP2l!jGtAA}I7lXXVC^sm zG*>8%u^8JBO~<)m<@r_pWvCN24RMB-LTSiY40ghSv?ZbPl_TN@+M|U+Ss06O2L!1z z{q?9&R>cPYzcuiVh-l>>9^T(KJiNDmL_}v@n|#8;?A%SJ8VWq}oN?|mkNK=qK*h#O zV?@XESFc{&did~eYF1X}>bSU_{lEKWjPJmKj{PGe$E?uv-!*J;ALK(Jbm#(9z1<2Hy=KfwCgt>^O4eT-hO;LH&=3=KbNO3U&;&3V*}PHpn_-2 zV#@|Ma&jc|#tqpVA1{|4Jdj%&vuwaRr42mhEiI|R`hELKY`{9D4cvZRUQ&Zqdwwgi z0qYb{-ucIsB{f*KeS3)wSf{js(+_J(Y7nz=V~Gt|r?i1X)cTSd%v!ao#0IQWKsmb^ zn@VaBy>w}b4OpkNf$ik2B{hgzu%N^StW(`wapLxt@9sYyI>ruZSq8o%^e_1eBfjAL(`I0h@27Pcq zfjDvWPuFkTCjEv*MMX)0eqGZqn~TM-@!KIdpg^1m&BDUM^R@6*US6q~qxlC5Hz@K9 zUg(b|_2ScF@kjSocN|n8P6W?x-3IZes@MHeG3TwWIHW+Fiadj-&z{MtjK{@#o}VXg z1mlnbaUwXiZ$FH`_lIV4shCr*9pV*;Q;}zIKQ~uSq&_Ov6MY%=S|dS$I1y}2rcu1= z+4EVQTExZQ|7%2b7!CK>D8W}4x;h)Y)*rbIrWyLv}n!jZT1BHD1^F>&?kB279+OC!I|GU)pw^2eP!vUtlDl5L5JvNkrBF%s6W7N7h3 zkG`h2alEb5qk-p!V)l4sEk5z~9`~nSL{qO_lab$jyRSln2IF|-xuKXn*02_DJ33Ce zuCM3v!-sNTM0n04&ke=wv4-cU{^5sVRX_M3lK2SKKK|I7N1jt@d#q)Hf0zHP2Cp0F zs8R>$qm~fYjG?TfHZZ{9{r6Ax>CnO4vvq5;Rf7hn7*nvosi<1O4qq3S7ae?kC8$Xg z@wBpf!I**tPQ^;wH+P^sN|;8%HDhIJFwGOw->h0K$DH!5JdB@8!Zl;uQz#6UfvF8K zv#&jpSa@geI1;WIM+5!Z|< zSmI=fqy8W#99jI8lMvU8p^T%Y+8NfQ&W-e?y@kRW*SWzM_ev{tQZXu-e_R5ZILP&# zBZ+HajC;&su4QrODpjha)~{dxwx_2jlf}WoL1JQJNbK$H858a?hqPQn~L&tr`;##JWS*w`2iKKtx5xpL(SacwkU4s%(f zj4@6Xs9beh{h?An{P4qm1RzaaR(BM0@>zrb>Erc?TY#De*I)y2txyb3C0L1mm(RML zxqR034A%<9C_cD%3EoZIge`gIpI_veqhD~%n1UrvMJ>m~?98BxFYiUj%lqMyo#A(p zF$D`n13MPOK5-jjUp$)c}wN*ded!!KzYk{;dYC-*LSNvl?^h--P6-9_|SBr!*U$XG-VM`b;( zxPGx+&fN=MaxK$cKK}S)savaCxH?OB-~=Ch|Er%x$$>sAPHZAd-}^SasC z&Kd=9TJa-BCG5h5i|LTevoHW;oE!FU!3EYRV9qprvUV2YuVf(aiZ&>W#bg=3d=`1D ze?dHJF?%W&AKr}{w=O_#od1`eK4?o^7m>6JH&~0vQJDM9NF4vSU@aT`dsqZsH{h7A zHu4C|QTm=SHidtuuvjFD$IDbno6%n2Tb@&Ow6)Nl;LrczK!lCtZ5>>`7b;_u95?E6tnx z3Ug7+_$@p7`r5mTx3{<6f!Ij3YSk_l=Hufd-MV#?cJ11!U}23i#-ZN5drMGD zlkizIZ0IX`BXzlQ<;ot!b)P!H(DOz;oeMGql}T*t5+{EnOg8ZNE5t73;$Fg zu0ujX^gU=PZf>snel!u*C}SMy-o3l{`}^{iP7|6*rAn2qDG=8^di3BYq&Hzs`XCL3 zHOd$#_y?qQ>sEXZ#Lq8KDpss`LxH&FK0iiZUtbj3dA*E zntqhVK5LXQ{^;1TqXY&9>POa0zexT}xNGd{Iyg93TDA<*z2?%qnXj-$8Do>WWnr7K i%eCb`YyM-#>+#Q1|ARhZC@tgw0000EaOCM*VRa$u-P$7e-tDnm{r-UW|Rq7Yk diff --git a/html/forums/images/new_pm.png b/html/forums/images/new_pm.png deleted file mode 100644 index 4aa7ca8034ef55bcd346901f1e36a24da603a90c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfx&WUL*Z=?jht}5vQBY0Ij*}Jm0_|P&w{>}IAkKet! z`|{<l`2W8c zLY0E43J_Tb#3^k|_pfXOn&Ru};uuoF*xJ|1=wirm)T8u&>+H+#+pP8FIBz_ewncB{ zQU;x!OPQAC+s)v5VcnkjNc!KIn1&1S3z=tdu>aDZ(e$Byi|jqQhPMm$e{GCg_1h$^ TaF%%|&|n5nS3j3^P6bn?p7Dd2e3J~9A_b1IG8+si>NII2h@|}Xj*f-mw*1cCgJoAYtuw4Xb4Ir5J#Mip>n&Txph59tSQmt#IyCKjqFej5 zr{od&Ak`q%rTc7dRb=Re53rVeQRL@R?Mtq|mUL=6j$1ViA{mCE%+75}&)y5TUgA>a z8=xTM7v+PfG9|e361sGnOlDRCH2Y2vCJAX-jp)&LA(vkoRC*ftx>Tg#;?syOU8mxv z7or)>nqd%#Fpder5GTEew%ulO?&1azkpdGC`fKREphMRw*iJsa+G|OPW=(Agl)zJy zUJy{}Tl5{ig7maBzD!+xJ$X_ka%=t}Qp)@KEbu>h3wb|Ns9lbn)WFfT>fbwsv%MRL8}|1qBBO0~jT1#fV`TfEMQ4$_!4XGBYzOW$;pF z@SkPPbj{dplRBxVHgdjX?E$leun!KJg+UsVlg;6I(p4x zGRX|GXWUnpqtPhr?(V+gdQ#3A?)7?)aDRvU%5pdyhV}Jzk~!xB3(M!3*s^jk7=(p| z1(L6?uf_NGH_PXF@uhMg5P+$vDU$I;iMO{mR?OvGoFMaTFg!d=L5GKj;_>m3mE$8L zBP`=(Ww+Z6ilR`^_V%{moU?LVRn?44on)8G1--q!GH7^jZ|@DCn-%fN)zwwe*VjjK zae_&_!so@sg-x#8+S*>F>~J^$*Cfx+&x`iuy=M2it)eSQ5xUS3|XW_$(+uUxs(M@dO3fsc<* zs;Q}o^YP=yc3N6mg&Z6lI5nfkg7EtF>pg&}tu!??wMAWBy^xui8KRl60hD0?cV=l^ TmyhuV00000NkvXXu0mjf)!5^9 diff --git a/html/forums/images/pollbar.png b/html/forums/images/pollbar.png deleted file mode 100644 index 7dadc5aa32de30d9fdfa235f6c274854a98c6b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1155 zcmV-}1bq96P)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000QNklBG+S)!Pd4~>lGh0O^e8>WIe}A`nsi2~vfh7a( zgpb2ap8`ESJz0HyeGLgGd3pJafPerD2Q$plp)2U<=u8X^4UH-;E{3zSGvean5D^hE zfbj5eL`O%1nLmI2AUHTUimsrpu0B6EH+SEsPoH3HY>dFbKsY)&!ph1DIy$=8xl_c( zjhnD$&046asDhd6*Y6@eK4BkSK}ktz+v(G%?>>M29HJ;nvJ(^)Rj_H(Hc8yt2T@dJ z2ItS;L{?VeUAn^d?c0r?J$v@`&Ye40zI-_h4b35n8iS&!sL2c*;fQ0$E`OyfY}l~D z1#@VxHL04G0a%I4S2aj;>+%>qlc_B5m5Xs2} zNJ=W~MNu~{E*HvKv2sd;*b^lS>8w zwL)OeQ{c$6ci0|nhh(**&67peP%A*TQU002ovPDHLkV1jiD6PW-2 diff --git a/html/forums/images/re_pm.png b/html/forums/images/re_pm.png deleted file mode 100644 index 20ce3dfc154cf291632539da50b31d2bb4d4c92b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)t#I2YgWVr0GOU0gviVrt zdI4IO{$W^c@u3gz76sZZC2oB^!o&t3tQ$&Hz{az5DjR5WR z`u#Av=)@9T5gi_mZ)31nV6fYvRQVw%dEiIE-IFiz@X8D1X_W%GOa_PBjc-Hygm?4S zXhd>+{PzOggYev!_TGcb^*b@2S=TSR4IW>Ernbwg(6H2Ww;EXr5q}y2KR42fx}=|fxkWE6F2BoZ_u8FSugz|9o9zat!SO*r?~YbR-W^eN({iQ(Gqeqr+6(e6-MLyX}vp=q!TE^#;vN1|A?5t&~Ym_&zjm* e0-!MdGamsR0tfQ`x_CYS0000Jm0_|P&w{>}IAkKet! z`|{<l`2W8c zLY0E43J_Tb#3^k|_pfXOn&Ru};uuoF*xJ|1=wirm)T8u&>+H+#+pP8FIBz_ewncB{ zQU;x!OPQAC+s)v5VcnkjNc!KIn1&1S3z=tdu>aDZ(e$Byi|jqQhPMm$e{GCg_1h$^ TaF%%|&|n5nS3j3^P6S1e1ww#1aANX@$vEh|Nr~_{m{_R_xJbY zgw<2(Za&Qy1KgC&AEMjeKa&X_WS$u^Yh;E z@zT=L)yTA^rKNOqg<@i2*y!h~s;X^mZR+#$+w1Dg;NR%p${&Woy}iA)wY9Oav8}DG zJUmE3LPabrFWd0&=kM<1?(N{<;MmyMzR}SsmC?(~%g4vZv&Y8W(!ayDqH1btRaIAY z!ZOg|;N9KbOiWDjMNB;BK`Ev#Ww0jG03G`J`t14n=Joa8=jS%4<=f=s)ZgFB+1V|e z*d>t5;n>8jtihKQaC;3y=PD8LpdrXMCth!@EK7rX!ujk*6lfB%-e z%rsz^CRB80Pi5O41UG&tHSc+XYj$ zv=Sn1YUNHOT)t5>q)T%f`gHR$gsMbCy8CWJB1I^$3Ri5|9=6U-7O<9<5*Z|fvDs|i z>sN0k-@Q%8$1p(QJj6$be?9EDM;QDyIJvho;L~N`F$`Tkz%g_g`5wkD0|z+##*xN! z7kuDzAS7MV+}kWcR<>rD>Df_`6}Uq6}-S85(LGvI8~8MQ6>_JSgw#k9iAx-#BfTGDyq=cOr)m5Qey5@`iG-7URe_*LCR0#bj*ll@ zAuCIeMbpESW5Yp0C{J2gS6EQF<=EM9oV`GTI13NaJCBI704%YzSgfin_&hzmJspK7 zB2FBN+K!3T`8e|IL*m@8 z3BNr-*Y9~xh$7%6?2o z^Q^6%guWhs@bBn$hl&1y!R`(Web%{|+BJ8u_F=Hd=WA=%Oxg+iz`opq!D^kaefi#` zowPgmtyX{FTDmcOFttzG2Yz&0xWM9aV`5^WqoYqFE|&#I;U{|59UynN>L&mI002ov JPDHLkV1jsQ!eRgb diff --git a/html/forums/images/smilies/angel.png b/html/forums/images/smilies/angel.png deleted file mode 100644 index b78abb1c8d9510eb8e5dee5231d73ff3dabc6c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVF{@*?Q%N+jMHUIzr{lN?U#uEO} zCH=z>@bvrj_x#lJ|Nhb_{>~xy`ThReIsVo!{m2*K=lAFA`ThO=`uqN5MF{=I7F|da z{nIV};z5054r5t0N;?$l@A_R$BfXb0KMrhVK)Q zUl-Z0A!$$;_SiX^l!M~QJcxm7kar%-u`%VW2fDw^g>+PQa#Y2`yTq_S&z%a^qzs&g zF7wSUW>+fp=%V)CQ|G}Y{`brF^z-(|9dKbT{pMt~tcm^XjK#g2>f^)y^tz6NJ-?S4 zi_?f=8m1zgYSX+Wu7y0=W++(g{o-*#xkn{&z;JJ<9&*u#zUmTRDlaa-HO?Ei1m;C+lcov#v z>|xexE^nQD$rtuNJqClJyGU1e&M!U2?3H|EklaNA9sT^E3KX;bh6HRhV550R>p&s$ zu0<14>-!B2U>?~K2t3>yEh!Pz-Vqs$$ZEBX1{A=L4m9b8Dl=qophYG5S!`BV8$}cq zc97{7#b;THYQRB)kyt8=#t(`DK~RX?f5u}BCD2G}OpK{1A6v=~fNKFnnE8lPMM9&J zPG!kFz3x`u^`QwW8j+?p-9z)jOs7aU71?5{44{>BWB^|o+mOjLGyqvOc5jIPSIQR- zV;g|b&fs;vfQtVCJGUQ2CgWiFI5%eUz~BqUZ#Yk`5bdv=j`JQtDA)fpADL5x#$6A3 q$wHy9&3*9E)ERm_F3>T~@gO0000@LNRhhez*&M(v?V?u|$8e@5<=Nbqk(?U_jLYensxNbh$>?vY3ArAh3mN$^%g zxP(8MNH?!ZIig!Ra8WbNVm{7JJ+W3h)RshmT{h8$Ld$nSvUfh`Ttb6EG>vIEO(Uu_yYPBE`K;{{o&7A!If8{n1Svik;)qN;7rmsk}(%IY- zoyyld&p*nR7JsNvnde!SJ)H{(oz`Oha9x$jQ1!`v0XQQeT*%|7 Q9RL6T07*qoM6N<$g0KhPL;wH) diff --git a/html/forums/images/smilies/arrow.png b/html/forums/images/smilies/arrow.png deleted file mode 100644 index 1accfc05784a82f237c24e5b4c53c27996e2df21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 zcmV;E0&M+>P)mBs*E0UxH~rKt{@yzN*f0LoD*eY2{^CJoLAS}(w!4~%jV;>tg0 zRUx5>5oJjYU|KcBu|1b_5#y~2@V5)UrZ?)!9ZxFFU7p3*YQ<5$INzwoS0VqjCK~xyiMbPJVfeTk#M#Q?@G90&UJ*iX2y`4YrEa`k>S1o6=5Bq1q0j;44Rz9u@#@ z-W!3wOeW(FFG)1>m4%qoAOm8zS1R?fN;AVe*i%xi;9V1+QFlL}u2C1JY3jQEfGjc0 zOa_%@S>>_xpAUxdP}i&?ES~QCV7Et;uKk8uu2e*h>my32-v!7liHagOCW!hOhlHvS zy&r3u-fW?IasnW>RLZ_`T$|^8UF88Fr_OOUQhbA)225%+kF?dIhvahzZ?>U&D;y1z t&Ww(S^Y3}@TDNJqBu5ob+Nnr|_6H%LF?|uPa2o&s002ovPDHLkV1jnu9svLV diff --git a/html/forums/images/smilies/at.png b/html/forums/images/smilies/at.png deleted file mode 100644 index 194020f780865dac42495fd96317a731743d97b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 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 Eg42^IuK)l5 diff --git a/html/forums/images/smilies/lightbulb.png b/html/forums/images/smilies/lightbulb.png deleted file mode 100644 index c6897aed473e50452dea6108d421313e3d5cb959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)3Wee3VFL&DC>e=a~btC@O<8@kdS7 zY)NoUdcAYPbZ3z6GgkYw3&6UH@`P&AA2f7`0UXdo)GyS9YBHSycuafPbw^z5fYD^C zpH=d(G^sxR(@BoxyQbN{(KjPcNM^|u*=9N^9!kH9eP8zz43I5zRpnnxlJrMoQCBUgVXjLJ| zu{W1<5oA~`9rH@)k5;O2=T@t^35@sgDtm`7L|J*poJdRtReK$GR~n9j)OgYXdSqnE7`$7 zrg#K}UIbr10jrH59ekMC0000IbW%=J04-tHOlpA;Ge3PD!ljt?#FDbN?#=)J0X9iQ zK~xyiUC-xof>00z;H$>iODMt>1;r~Rf|1yJZ?UJB_kWM9K+KHi=Qn3}XOR=HuU4y> zrq7H1bJN__pPBpOrrQuge|Rg^#RtHAp2`}Fu#2;)cu~I9@Z00k5{n`O3Yg{Tjt~TG z*JTVHEN>W`T8^RiQpWH4ff?)C#xi*8 zC9QV8k+haE8S3m|s8RdUzQm;qEdfawi-hQXy{l0v-CBV@fv&Ma$ndC*Kr1CUcJ8)6 zu<}NF*3W2QYg#RI66kJ@6|J`&^d03uKf}l)DM~KKvYE^ymEvi8Z3Lm{{7NS=_&6d} z9i<#C3jqWP0fRyn6flVF1e>$1tE-9NL2d%^=B{@dpNz&LejdNLKWUm~((l?Y0Jb%e T2EanG00000NkvXXu0mjf(Q-0o diff --git a/html/forums/images/smilies/rolleyes.png b/html/forums/images/smilies/rolleyes.png deleted file mode 100644 index 79cefe51e670144947a2ca5264d05ea7d4c2ecb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)ZR8A~hPb5}8 z3qv#z{lpLb#uNU`9R0!z{?{+m^Z)+aIQ_^M{nRb~;6DD{I{wci{m&--*fnQiIR4cq zWJCo0(JB7oLH^Dk{@y(O$r@iwAG(VP{@XKTS1bSj|KiF&X;mIzS~X@&5vqL%mva&0 ztqSnB4E?_e*{>nLrZ=#iJp0{2@6|%dur%_@DPTee!Iu`qpdp!qEz_O`qm(-I(lXh> zK-Z-Xj)OhHu0h7KKdqHAg#U^ zC^`TD0Uk+2K~xyiP0-hNfTS7y zzG;9f4aGOBjv9U1ngduSYeP}+dU*8Rwlz=yKi)(^{%(=dhiyBc%;!qp1VQ%NBnmKK z0Ez-5)CH==3 z{@gVF-#`7_JN?lq{@yugVL4`8GP;WiU|BP&eF);pKk&B;Wl0TaRw9>k5oJ#rzos{^ zojmW=Ld38@*P{xkl{WLwG0Ctr<*Wzau^GXa7Q~<-nS(9XtRY`a9NED@j)Oh%$0CJZ z1kaiV9J^{(0000GbW%=J06D@PmQ2YIW-x($rS(AE-$p(v0003LNkljte*%?wrc+T^@EZYLP7cek8CyGD(0IjtiUpcsD=KB; zYyhL5ocn=Cbu6GNW1{#yB#jm4W*||yQb2LmCvnPsb6lxHUC`0mA>kVojN!BC#86a* z`VQ**=Ic!@&^gXls!b=bf@_H*oQ*%sJ7uUp1JYU|O0>#VlOE}Yptu6mDlWCKwn<21 zi3O-w3!3!d;%2nCQ@FwD5XeKcz{M&B>>?s>w)JB31h7u06`hXf{rOO2Eqwm(Li~xP^Z)+L9sblT{@yxcLj?WUH2u~v{n9D^;z4FyF=t^p z{?sS_*)LyAAG(VPU|2H7usZ+$|F4=js(lD(Rw9>k5%9MQ3?JN&p-?zq9epE+t2g}Px` zm*b?y?=RLUrQ2#Ct_KI^I1t;R4l$+L$(2yk%wrCiCWL%YO-|;x`ssNL%=OxQ3{6&k z#-x)81w3NNvXV?mdhi%i0i*Mwp`Kh4ykV`n1bEdA0LpcX>M^b>8`Ywyin8ImSn#a4 zo4#{}T7m2Dob+>EumoE-3=0vpn2=E*YFEHRQL%PJNGER}6Ix91$3uVjq=`Eu7|GwY ziYTE8&d;@O3M{QNocXuw{qKIMjx%w+@xdaF diff --git a/html/forums/images/smilies/sick.png b/html/forums/images/smilies/sick.png deleted file mode 100644 index 70186feeb562ba2747cb991acd00c075430de29d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XJcP)>q}iwXYSHsZ=ZXk9Uva}ndM3e}(p@V5)U zrZ=#iJp0{2X;dBW)k3U*3ujg%$gwx5l{UeyL1s-9!Iu`qpdp!qE!(mq*}*{Z$0GF7 zGLC~irg#K}UIg;YG1aLag(+Dw0000IbW%=J0K#E?YRQ2#4@@UOn5Fd>+>*czUETly z0USw0K~xyiMbOuFf zRaE<6nc5UwRB*X0cf&STzbsVHbueh4sy_`@I9L{<=jqw#cGa-O>_}8SppdF+>agGq zbpSem1UPZQ>kM^eYQ4b=fFVr)IO*KSuF(D%RpC7E+V5FcD9EH~n>CkakGi-)p#`Yl zB~}ksLJe?1$=B8yD=bOJAW@fe)4~^b>_v|jpmIPBof^Yb;{{!Tl*?*JpCj1b|K=B) xZyZ9AS~I?!uh+j*a(u3_dphNc>$;V4ZvU71EElSs7=Qo(002ovPDHLkV1lW-6cqpf diff --git a/html/forums/images/smilies/sleepy.png b/html/forums/images/smilies/sleepy.png deleted file mode 100644 index a462de1b457f34a0a6a5a6a9b42661fd904b7226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0I}uMwDN#ZgR5=7$I|5xl0$fid{lpIa$QJ(3 zA^pV@{@^}CG!XsE9{t)l{nRf0-Z}l(G5*md{>>Ww*);vrEB@Ls{?sV_(JB4iJ^jH6 z{mC2s&LwAIIsW28VL}D|)-GjSGRLqwXjLF)MFhKy3gXH?U|2F{Oc9rJ5%9MQU`!mp zrZ=#iJgk5V@6|%rqYCoMDc`Xf<*WypgDt_A7Q~<-)~q3;lsehLK=jfwj)Og|l`^Jy z1hL0TM|>K~xyi zRnX~nf-n#T;85ADO92yhMJWP>$|h>nx^!>f|Ajh<&>rXKcW!PbL6_;>J;Ib+5B<+= zaY*01hw1KA#d3=`NopB@Q_XdcWxv6f95Z!5)qN#Wl*1fj%VVm$s=8ftL5nnkC{>MS zM@lw?o8F@c6T>4=OI($V6y;k+9f)F!5Od;a8X>BpC|?7V?1z(FY3&79hBDc z2zAzf8Zg}q;Kfq7x>_NNCH6hZYHXVA3K@J3n{M*4YZhB>VjeXk3CZDf-k*eegmNlJdLyhp00000NkvXXu0mjfVhaO* diff --git a/html/forums/images/smilies/smile.png b/html/forums/images/smilies/smile.png deleted file mode 100644 index 91fe67f501230626ed985c46d6f7c5bf5888904f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 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 diff --git a/html/forums/images/spinner_big.gif b/html/forums/images/spinner_big.gif deleted file mode 100644 index 0ca7ada960568fff04400cda966fbdcb106abfa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6820 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 diff --git a/html/forums/images/star.png b/html/forums/images/star.png deleted file mode 100644 index 86950eed2bf3489df6f076a04bb8662cce114159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507 zcmVq& z0H+YI0>r+how$H*pAdX|93b))U0A>`OD*7+rsCV<0HM$5d0pj2g|6a)0^c452z*F8 zN5AXnZ<1dClk6Nszw6+SvMK}k+@&9@LX4avstPuMDt|o);nPJ&cEsmi^$v{lv0sM7 ztIIFw_3}%gDLnw1l6@f0T8n_XXa}eZw=vmXkmYXD$9(J=k3Q&&WnhqMj0OIW>igs* zEiO zC{6DR#Zo`p-D5NuZ5#%;et-;nbFCq#$mtJ7d~egMEA_coSL$*_To;o(t2?~DT9-o` zhXF3{C96YTHZMrz%R^o^EkGNG0WR()m+u^}nZoY7jBbC( xyP*tqXyY)zg7C@cT~002ovPDHLkV1j`->!<(# diff --git a/html/forums/images/star_rating.png b/html/forums/images/star_rating.png deleted file mode 100644 index 20abef19d25cfd613ac1ae63db85bcf5335eb318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3751 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 e_;?hWX@@Un=4V$fC=&Gz}VPs7t%Cl#{+~$xt^8 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 mvj;;w(-|ObL6^)#5e5KTt9?=0a^4950000_getBase32LookupTable(); - - // Valid secret lengths are 80 to 640 bits - if ($secretLength < 16 || $secretLength > 128) { - throw new Exception('Bad secret length'); - } - $secret = ''; - $rnd = false; - if (function_exists('random_bytes')) { - $rnd = random_bytes($secretLength); - } elseif (function_exists('mcrypt_create_iv')) { - $rnd = mcrypt_create_iv($secretLength, MCRYPT_DEV_URANDOM); - } elseif (function_exists('openssl_random_pseudo_bytes')) { - $rnd = openssl_random_pseudo_bytes($secretLength, $cryptoStrong); - if (!$cryptoStrong) { - $rnd = false; - } - } - if ($rnd !== false) { - for ($i = 0; $i < $secretLength; ++$i) { - $secret .= $validChars[ord($rnd[$i]) & 31]; - } - } else { - throw new Exception('No source of secure random'); - } - - return $secret; - } - - /** - * Calculate the code, with given secret and point in time. - * - * @param string $secret - * @param int|null $timeSlice - * - * @return string - */ - public function getCode($secret, $timeSlice = null) - { - if ($timeSlice === null) { - $timeSlice = floor(time() / 30); - } - - $secretkey = $this->_base32Decode($secret); - - // Pack time into binary string - $time = chr(0).chr(0).chr(0).chr(0).pack('N*', $timeSlice); - // Hash it with users secret key - $hm = hash_hmac('SHA1', $time, $secretkey, true); - // Use last nipple of result as index/offset - $offset = ord(substr($hm, -1)) & 0x0F; - // grab 4 bytes of the result - $hashpart = substr($hm, $offset, 4); - - // Unpak binary value - $value = unpack('N', $hashpart); - $value = $value[1]; - // Only 32 bits - $value = $value & 0x7FFFFFFF; - - $modulo = pow(10, $this->_codeLength); - - return str_pad($value % $modulo, $this->_codeLength, '0', STR_PAD_LEFT); - } - - /** - * Get QR-Code URL for image, from google charts. - * - * @param string $name - * @param string $secret - * @param string $title - * @param array $params - * - * @return string - */ - public function getQRCodeGoogleUrl($name, $secret, $title = null, $params = array()) - { - $width = !empty($params['width']) && (int) $params['width'] > 0 ? (int) $params['width'] : 200; - $height = !empty($params['height']) && (int) $params['height'] > 0 ? (int) $params['height'] : 200; - $level = !empty($params['level']) && array_search($params['level'], array('L', 'M', 'Q', 'H')) !== false ? $params['level'] : 'M'; - - $urlencoded = urlencode('otpauth://totp/'.$name.'?secret='.$secret.''); - if (isset($title)) { - $urlencoded .= urlencode('&issuer='.urlencode($title)); - } - - return 'https://chart.googleapis.com/chart?chs='.$width.'x'.$height.'&chld='.$level.'|0&cht=qr&chl='.$urlencoded.''; - } - - /** - * Check if the code is correct. This will accept codes starting from $discrepancy*30sec ago to $discrepancy*30sec from now. - * - * @param string $secret - * @param string $code - * @param int $discrepancy This is the allowed time drift in 30 second units (8 means 4 minutes before or after) - * @param int|null $currentTimeSlice time slice if we want use other that time() - * - * @return bool - */ - public function verifyCode($secret, $code, $discrepancy = 1, $currentTimeSlice = null) - { - if ($currentTimeSlice === null) { - $currentTimeSlice = floor(time() / 30); - } - - if (strlen($code) != 6) { - return false; - } - - for ($i = -$discrepancy; $i <= $discrepancy; ++$i) { - $calculatedCode = $this->getCode($secret, $currentTimeSlice + $i); - if ($this->timingSafeEquals($calculatedCode, $code)) { - return true; - } - } - - return false; - } - - /** - * Set the code length, should be >=6. - * - * @param int $length - * - * @return PHPGangsta_GoogleAuthenticator - */ - public function setCodeLength($length) - { - $this->_codeLength = $length; - - return $this; - } - - /** - * Helper class to decode base32. - * - * @param $secret - * - * @return bool|string - */ - protected function _base32Decode($secret) - { - if (empty($secret)) { - return ''; - } - - $base32chars = $this->_getBase32LookupTable(); - $base32charsFlipped = array_flip($base32chars); - - $paddingCharCount = substr_count($secret, $base32chars[32]); - $allowedValues = array(6, 4, 3, 1, 0); - if (!in_array($paddingCharCount, $allowedValues)) { - return false; - } - for ($i = 0; $i < 4; ++$i) { - if ($paddingCharCount == $allowedValues[$i] && - substr($secret, -($allowedValues[$i])) != str_repeat($base32chars[32], $allowedValues[$i])) { - return false; - } - } - $secret = str_replace('=', '', $secret); - $secret = str_split($secret); - $binaryString = ''; - for ($i = 0; $i < count($secret); $i = $i + 8) { - $x = ''; - if (!in_array($secret[$i], $base32chars)) { - return false; - } - for ($j = 0; $j < 8; ++$j) { - $x .= str_pad(base_convert(@$base32charsFlipped[@$secret[$i + $j]], 10, 2), 5, '0', STR_PAD_LEFT); - } - $eightBits = str_split($x, 8); - for ($z = 0; $z < count($eightBits); ++$z) { - $binaryString .= (($y = chr(base_convert($eightBits[$z], 2, 10))) || ord($y) == 48) ? $y : ''; - } - } - - return $binaryString; - } - - /** - * Get array with all 32 characters for decoding from/encoding to base32. - * - * @return array - */ - protected function _getBase32LookupTable() - { - return array( - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 7 - 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 15 - 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 23 - 'Y', 'Z', '2', '3', '4', '5', '6', '7', // 31 - '=', // padding char - ); - } - - /** - * A timing safe equals comparison - * more info here: http://blog.ircmaxell.com/2014/11/its-all-about-time.html. - * - * @param string $safeString The internal (safe) value to be checked - * @param string $userString The user submitted (unsafe) value - * - * @return bool True if the two strings are identical - */ - private function timingSafeEquals($safeString, $userString) - { - if (function_exists('hash_equals')) { - return hash_equals($safeString, $userString); - } - $safeLen = strlen($safeString); - $userLen = strlen($userString); - - if ($userLen != $safeLen) { - return false; - } - - $result = 0; - - for ($i = 0; $i < $userLen; ++$i) { - $result |= (ord($safeString[$i]) ^ ord($userString[$i])); - } - - // They are only identical strings if $result is exactly 0... - return $result === 0; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff.php b/html/forums/inc/3rdparty/diff/Diff.php deleted file mode 100644 index 2ce1329..0000000 --- a/html/forums/inc/3rdparty/diff/Diff.php +++ /dev/null @@ -1,261 +0,0 @@ -, and is used/adapted with his permission. - * - * Copyright 2004 Geoffrey T. Dairiki - * Copyright 2004-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @package Text_Diff - * @author Geoffrey T. Dairiki - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff -{ - /** - * Array of changes. - * - * @var array - */ - protected $_edits; - - /** - * Computes diffs between sequences of strings. - * - * @param string $engine Name of the diffing engine to use. 'auto' - * will automatically select the best. - * @param array $params Parameters to pass to the diffing engine. - * Normally an array of two arrays, each - * containing the lines from a file. - */ - public function __construct($engine, $params) - { - if ($engine == 'auto') { - $engine = extension_loaded('xdiff') ? 'Xdiff' : 'Native'; - } else { - $engine = Horde_String::ucfirst(basename($engine)); - } - - // Fugly; Include operational classes required for Text_Diff - $classes = array( - 'String.php', - "Engine/{$engine}.php", - 'Renderer/Inline.php', - 'Op/Base.php', - 'Op/Copy.php', - 'Op/Change.php', - 'Op/Add.php', - 'Op/Delete.php' - ); - - foreach($classes as $class) - { - require_once MYBB_ROOT."inc/3rdparty/diff/Diff/{$class}"; - } - - $class = 'Horde_Text_Diff_Engine_' . $engine; - $diff_engine = new $class(); - - $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params); - } - - /** - * Returns the array of differences. - */ - public function getDiff() - { - return $this->_edits; - } - - /** - * returns the number of new (added) lines in a given diff. - * - * @since Text_Diff 1.1.0 - * - * @return integer The number of new lines - */ - public function countAddedLines() - { - $count = 0; - foreach ($this->_edits as $edit) { - if ($edit instanceof Horde_Text_Diff_Op_Add || - $edit instanceof Horde_Text_Diff_Op_Change) { - $count += $edit->nfinal(); - } - } - return $count; - } - - /** - * Returns the number of deleted (removed) lines in a given diff. - * - * @since Text_Diff 1.1.0 - * - * @return integer The number of deleted lines - */ - public function countDeletedLines() - { - $count = 0; - foreach ($this->_edits as $edit) { - if ($edit instanceof Horde_Text_Diff_Op_Delete || - $edit instanceof Horde_Text_Diff_Op_Change) { - $count += $edit->norig(); - } - } - return $count; - } - - /** - * Computes a reversed diff. - * - * Example: - * - * $diff = new Horde_Text_Diff($lines1, $lines2); - * $rev = $diff->reverse(); - * - * - * @return Horde_Text_Diff A Diff object representing the inverse of the - * original diff. Note that we purposely don't return a - * reference here, since this essentially is a clone() - * method. - */ - public function reverse() - { - if (version_compare(zend_version(), '2', '>')) { - $rev = clone($this); - } else { - $rev = $this; - } - $rev->_edits = array(); - foreach ($this->_edits as $edit) { - $rev->_edits[] = $edit->reverse(); - } - return $rev; - } - - /** - * Checks for an empty diff. - * - * @return boolean True if two sequences were identical. - */ - public function isEmpty() - { - foreach ($this->_edits as $edit) { - if (!($edit instanceof Horde_Text_Diff_Op_Copy)) { - return false; - } - } - return true; - } - - /** - * Computes the length of the Longest Common Subsequence (LCS). - * - * This is mostly for diagnostic purposes. - * - * @return integer The length of the LCS. - */ - public function lcs() - { - $lcs = 0; - foreach ($this->_edits as $edit) { - if ($edit instanceof Horde_Text_Diff_Op_Copy) { - $lcs += count($edit->orig); - } - } - return $lcs; - } - - /** - * Gets the original set of lines. - * - * This reconstructs the $from_lines parameter passed to the constructor. - * - * @return array The original sequence of strings. - */ - public function getOriginal() - { - $lines = array(); - foreach ($this->_edits as $edit) { - if ($edit->orig) { - array_splice($lines, count($lines), 0, $edit->orig); - } - } - return $lines; - } - - /** - * Gets the final set of lines. - * - * This reconstructs the $to_lines parameter passed to the constructor. - * - * @return array The sequence of strings. - */ - public function getFinal() - { - $lines = array(); - foreach ($this->_edits as $edit) { - if ($edit->final) { - array_splice($lines, count($lines), 0, $edit->final); - } - } - return $lines; - } - - /** - * Removes trailing newlines from a line of text. This is meant to be used - * with array_walk(). - * - * @param string $line The line to trim. - * @param integer $key The index of the line in the array. Not used. - */ - static public function trimNewlines(&$line, $key) - { - $line = str_replace(array("\n", "\r"), '', $line); - } - - /** - * Checks a diff for validity. - * - * This is here only for debugging purposes. - */ - protected function _check($from_lines, $to_lines) - { - if (serialize($from_lines) != serialize($this->getOriginal())) { - trigger_error("Reconstructed original doesn't match", E_USER_ERROR); - } - if (serialize($to_lines) != serialize($this->getFinal())) { - trigger_error("Reconstructed final doesn't match", E_USER_ERROR); - } - - $rev = $this->reverse(); - if (serialize($to_lines) != serialize($rev->getOriginal())) { - trigger_error("Reversed original doesn't match", E_USER_ERROR); - } - if (serialize($from_lines) != serialize($rev->getFinal())) { - trigger_error("Reversed final doesn't match", E_USER_ERROR); - } - - $prevtype = null; - foreach ($this->_edits as $edit) { - if ($prevtype == get_class($edit)) { - trigger_error("Edit sequence is non-optimal", E_USER_ERROR); - } - $prevtype = get_class($edit); - } - - return true; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Engine/Native.php b/html/forums/inc/3rdparty/diff/Diff/Engine/Native.php deleted file mode 100644 index e1db345..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Engine/Native.php +++ /dev/null @@ -1,442 +0,0 @@ - 2, and some optimizations) are from - * Geoffrey T. Dairiki . The original PHP version of this - * code was written by him, and is used/adapted with his permission. - * - * Copyright 2004-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @author Geoffrey T. Dairiki - * @package Text_Diff - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Engine_Native -{ - public function diff($from_lines, $to_lines) - { - array_walk($from_lines, array('Horde_Text_Diff', 'trimNewlines')); - array_walk($to_lines, array('Horde_Text_Diff', 'trimNewlines')); - - $n_from = count($from_lines); - $n_to = count($to_lines); - - $this->xchanged = $this->ychanged = array(); - $this->xv = $this->yv = array(); - $this->xind = $this->yind = array(); - unset($this->seq); - unset($this->in_seq); - unset($this->lcs); - - // Skip leading common lines. - for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) { - if ($from_lines[$skip] !== $to_lines[$skip]) { - break; - } - $this->xchanged[$skip] = $this->ychanged[$skip] = false; - } - - // Skip trailing common lines. - $xi = $n_from; $yi = $n_to; - for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) { - if ($from_lines[$xi] !== $to_lines[$yi]) { - break; - } - $this->xchanged[$xi] = $this->ychanged[$yi] = false; - } - - // Ignore lines which do not exist in both files. - for ($xi = $skip; $xi < $n_from - $endskip; $xi++) { - $xhash[$from_lines[$xi]] = 1; - } - for ($yi = $skip; $yi < $n_to - $endskip; $yi++) { - $line = $to_lines[$yi]; - if (($this->ychanged[$yi] = empty($xhash[$line]))) { - continue; - } - $yhash[$line] = 1; - $this->yv[] = $line; - $this->yind[] = $yi; - } - for ($xi = $skip; $xi < $n_from - $endskip; $xi++) { - $line = $from_lines[$xi]; - if (($this->xchanged[$xi] = empty($yhash[$line]))) { - continue; - } - $this->xv[] = $line; - $this->xind[] = $xi; - } - - // Find the LCS. - $this->_compareseq(0, count($this->xv), 0, count($this->yv)); - - // Merge edits when possible. - $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged); - $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged); - - // Compute the edit operations. - $edits = array(); - $xi = $yi = 0; - while ($xi < $n_from || $yi < $n_to) { - assert($yi < $n_to || $this->xchanged[$xi]); - assert($xi < $n_from || $this->ychanged[$yi]); - - // Skip matching "snake". - $copy = array(); - while ($xi < $n_from && $yi < $n_to - && !$this->xchanged[$xi] && !$this->ychanged[$yi]) { - $copy[] = $from_lines[$xi++]; - ++$yi; - } - if ($copy) { - $edits[] = new Horde_Text_Diff_Op_Copy($copy); - } - - // Find deletes & adds. - $delete = array(); - while ($xi < $n_from && $this->xchanged[$xi]) { - $delete[] = $from_lines[$xi++]; - } - - $add = array(); - while ($yi < $n_to && $this->ychanged[$yi]) { - $add[] = $to_lines[$yi++]; - } - - if ($delete && $add) { - $edits[] = new Horde_Text_Diff_Op_Change($delete, $add); - } elseif ($delete) { - $edits[] = new Horde_Text_Diff_Op_Delete($delete); - } elseif ($add) { - $edits[] = new Horde_Text_Diff_Op_Add($add); - } - } - - return $edits; - } - - /** - * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF, - * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized - * segments. - * - * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an array of - * NCHUNKS+1 (X, Y) indexes giving the diving points between sub - * sequences. The first sub-sequence is contained in (X0, X1), (Y0, Y1), - * the second in (X1, X2), (Y1, Y2) and so on. Note that (X0, Y0) == - * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM). - * - * This public function assumes that the first lines of the specified portions of - * the two files do not match, and likewise that the last lines do not - * match. The caller must trim matching lines from the beginning and end - * of the portions it is going to specify. - */ - protected function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks) - { - $flip = false; - - if ($xlim - $xoff > $ylim - $yoff) { - /* Things seems faster (I'm not sure I understand why) when the - * shortest sequence is in X. */ - $flip = true; - list ($xoff, $xlim, $yoff, $ylim) - = array($yoff, $ylim, $xoff, $xlim); - } - - if ($flip) { - for ($i = $ylim - 1; $i >= $yoff; $i--) { - $ymatches[$this->xv[$i]][] = $i; - } - } else { - for ($i = $ylim - 1; $i >= $yoff; $i--) { - $ymatches[$this->yv[$i]][] = $i; - } - } - - $this->lcs = 0; - $this->seq[0]= $yoff - 1; - $this->in_seq = array(); - $ymids[0] = array(); - - $numer = $xlim - $xoff + $nchunks - 1; - $x = $xoff; - for ($chunk = 0; $chunk < $nchunks; $chunk++) { - if ($chunk > 0) { - for ($i = 0; $i <= $this->lcs; $i++) { - $ymids[$i][$chunk - 1] = $this->seq[$i]; - } - } - - $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks); - for (; $x < $x1; $x++) { - $line = $flip ? $this->yv[$x] : $this->xv[$x]; - if (empty($ymatches[$line])) { - continue; - } - $matches = $ymatches[$line]; - reset($matches); - while (list(, $y) = each($matches)) { - if (empty($this->in_seq[$y])) { - $k = $this->_lcsPos($y); - assert($k > 0); - $ymids[$k] = $ymids[$k - 1]; - break; - } - } - while (list(, $y) = each($matches)) { - if ($y > $this->seq[$k - 1]) { - assert($y <= $this->seq[$k]); - /* Optimization: this is a common case: next match is - * just replacing previous match. */ - $this->in_seq[$this->seq[$k]] = false; - $this->seq[$k] = $y; - $this->in_seq[$y] = 1; - } elseif (empty($this->in_seq[$y])) { - $k = $this->_lcsPos($y); - assert($k > 0); - $ymids[$k] = $ymids[$k - 1]; - } - } - } - } - - $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff); - $ymid = $ymids[$this->lcs]; - for ($n = 0; $n < $nchunks - 1; $n++) { - $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks); - $y1 = $ymid[$n] + 1; - $seps[] = $flip ? array($y1, $x1) : array($x1, $y1); - } - $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim); - - return array($this->lcs, $seps); - } - - protected function _lcsPos($ypos) - { - $end = $this->lcs; - if ($end == 0 || $ypos > $this->seq[$end]) { - $this->seq[++$this->lcs] = $ypos; - $this->in_seq[$ypos] = 1; - return $this->lcs; - } - - $beg = 1; - while ($beg < $end) { - $mid = (int)(($beg + $end) / 2); - if ($ypos > $this->seq[$mid]) { - $beg = $mid + 1; - } else { - $end = $mid; - } - } - - assert($ypos != $this->seq[$end]); - - $this->in_seq[$this->seq[$end]] = false; - $this->seq[$end] = $ypos; - $this->in_seq[$ypos] = 1; - return $end; - } - - /** - * Finds LCS of two sequences. - * - * The results are recorded in the vectors $this->{x,y}changed[], by - * storing a 1 in the element for each line that is an insertion or - * deletion (ie. is not in the LCS). - * - * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1. - * - * Note that XLIM, YLIM are exclusive bounds. All line numbers are - * origin-0 and discarded lines are not counted. - */ - protected function _compareseq ($xoff, $xlim, $yoff, $ylim) - { - /* Slide down the bottom initial diagonal. */ - while ($xoff < $xlim && $yoff < $ylim - && $this->xv[$xoff] == $this->yv[$yoff]) { - ++$xoff; - ++$yoff; - } - - /* Slide up the top initial diagonal. */ - while ($xlim > $xoff && $ylim > $yoff - && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) { - --$xlim; - --$ylim; - } - - if ($xoff == $xlim || $yoff == $ylim) { - $lcs = 0; - } else { - /* This is ad hoc but seems to work well. $nchunks = - * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks = - * max(2,min(8,(int)$nchunks)); */ - $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1; - list($lcs, $seps) - = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks); - } - - if ($lcs == 0) { - /* X and Y sequences have no common subsequence: mark all - * changed. */ - while ($yoff < $ylim) { - $this->ychanged[$this->yind[$yoff++]] = 1; - } - while ($xoff < $xlim) { - $this->xchanged[$this->xind[$xoff++]] = 1; - } - } else { - /* Use the partitions to split this problem into subproblems. */ - reset($seps); - $pt1 = $seps[0]; - while ($pt2 = next($seps)) { - $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]); - $pt1 = $pt2; - } - } - } - - /** - * Adjusts inserts/deletes of identical lines to join changes as much as - * possible. - * - * We do something when a run of changed lines include a line at one end - * and has an excluded, identical line at the other. We are free to - * choose which identical line is included. `compareseq' usually chooses - * the one at the beginning, but usually it is cleaner to consider the - * following identical line to be the "change". - * - * This is extracted verbatim from analyze.c (GNU diffutils-2.7). - */ - protected function _shiftBoundaries($lines, &$changed, $other_changed) - { - $i = 0; - $j = 0; - - assert('count($lines) == count($changed)'); - $len = count($lines); - $other_len = count($other_changed); - - while (1) { - /* Scan forward to find the beginning of another run of - * changes. Also keep track of the corresponding point in the - * other file. - * - * Throughout this code, $i and $j are adjusted together so that - * the first $i elements of $changed and the first $j elements of - * $other_changed both contain the same number of zeros (unchanged - * lines). - * - * Furthermore, $j is always kept so that $j == $other_len or - * $other_changed[$j] == false. */ - while ($j < $other_len && $other_changed[$j]) { - $j++; - } - - while ($i < $len && ! $changed[$i]) { - assert('$j < $other_len && ! $other_changed[$j]'); - $i++; $j++; - while ($j < $other_len && $other_changed[$j]) { - $j++; - } - } - - if ($i == $len) { - break; - } - - $start = $i; - - /* Find the end of this run of changes. */ - while (++$i < $len && $changed[$i]) { - continue; - } - - do { - /* Record the length of this run of changes, so that we can - * later determine whether the run has grown. */ - $runlength = $i - $start; - - /* Move the changed region back, so long as the previous - * unchanged line matches the last changed one. This merges - * with previous changed regions. */ - while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) { - $changed[--$start] = 1; - $changed[--$i] = false; - while ($start > 0 && $changed[$start - 1]) { - $start--; - } - assert('$j > 0'); - while ($other_changed[--$j]) { - continue; - } - assert('$j >= 0 && !$other_changed[$j]'); - } - - /* Set CORRESPONDING to the end of the changed run, at the - * last point where it corresponds to a changed run in the - * other file. CORRESPONDING == LEN means no such point has - * been found. */ - $corresponding = $j < $other_len ? $i : $len; - - /* Move the changed region forward, so long as the first - * changed line matches the following unchanged one. This - * merges with following changed regions. Do this second, so - * that if there are no merges, the changed region is moved - * forward as far as possible. */ - while ($i < $len && $lines[$start] == $lines[$i]) { - $changed[$start++] = false; - $changed[$i++] = 1; - while ($i < $len && $changed[$i]) { - $i++; - } - - assert('$j < $other_len && ! $other_changed[$j]'); - $j++; - if ($j < $other_len && $other_changed[$j]) { - $corresponding = $i; - while ($j < $other_len && $other_changed[$j]) { - $j++; - } - } - } - } while ($runlength != $i - $start); - - /* If possible, move the fully-merged run of changes back to a - * corresponding run in the other file. */ - while ($corresponding < $i) { - $changed[--$start] = 1; - $changed[--$i] = 0; - assert('$j > 0'); - while ($other_changed[--$j]) { - continue; - } - assert('$j >= 0 && !$other_changed[$j]'); - } - } - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Engine/Shell.php b/html/forums/inc/3rdparty/diff/Diff/Engine/Shell.php deleted file mode 100644 index 601b965..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Engine/Shell.php +++ /dev/null @@ -1,165 +0,0 @@ - - * @package Text_Diff - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Engine_Shell -{ - /** - * Path to the diff executable - * - * @var string - */ - protected $_diffCommand = 'diff'; - - /** - * Returns the array of differences. - * - * @param array $from_lines lines of text from old file - * @param array $to_lines lines of text from new file - * - * @return array all changes made (array with Horde_Text_Diff_Op_* objects) - */ - public function diff($from_lines, $to_lines) - { - array_walk($from_lines, array('Horde_Text_Diff', 'trimNewlines')); - array_walk($to_lines, array('Horde_Text_Diff', 'trimNewlines')); - - // Execute gnu diff or similar to get a standard diff file. - $from_file = Horde_Util::getTempFile('Horde_Text_Diff'); - $to_file = Horde_Util::getTempFile('Horde_Text_Diff'); - $fp = fopen($from_file, 'w'); - fwrite($fp, implode("\n", $from_lines)); - fclose($fp); - $fp = fopen($to_file, 'w'); - fwrite($fp, implode("\n", $to_lines)); - fclose($fp); - $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file); - unlink($from_file); - unlink($to_file); - - if (is_null($diff)) { - // No changes were made - return array(new Horde_Text_Diff_Op_Copy($from_lines)); - } - - $from_line_no = 1; - $to_line_no = 1; - $edits = array(); - - // Get changed lines by parsing something like: - // 0a1,2 - // 1,2c4,6 - // 1,5d6 - preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff, - $matches, PREG_SET_ORDER); - - foreach ($matches as $match) { - if (!isset($match[5])) { - // This paren is not set every time (see regex). - $match[5] = false; - } - - if ($match[3] == 'a') { - $from_line_no--; - } - - if ($match[3] == 'd') { - $to_line_no--; - } - - if ($from_line_no < $match[1] || $to_line_no < $match[4]) { - // copied lines - assert('$match[1] - $from_line_no == $match[4] - $to_line_no'); - array_push($edits, - new Horde_Text_Diff_Op_Copy( - $this->_getLines($from_lines, $from_line_no, $match[1] - 1), - $this->_getLines($to_lines, $to_line_no, $match[4] - 1))); - } - - switch ($match[3]) { - case 'd': - // deleted lines - array_push($edits, - new Horde_Text_Diff_Op_Delete( - $this->_getLines($from_lines, $from_line_no, $match[2]))); - $to_line_no++; - break; - - case 'c': - // changed lines - array_push($edits, - new Horde_Text_Diff_Op_Change( - $this->_getLines($from_lines, $from_line_no, $match[2]), - $this->_getLines($to_lines, $to_line_no, $match[5]))); - break; - - case 'a': - // added lines - array_push($edits, - new Horde_Text_Diff_Op_Add( - $this->_getLines($to_lines, $to_line_no, $match[5]))); - $from_line_no++; - break; - } - } - - if (!empty($from_lines)) { - // Some lines might still be pending. Add them as copied - array_push($edits, - new Horde_Text_Diff_Op_Copy( - $this->_getLines($from_lines, $from_line_no, - $from_line_no + count($from_lines) - 1), - $this->_getLines($to_lines, $to_line_no, - $to_line_no + count($to_lines) - 1))); - } - - return $edits; - } - - /** - * Get lines from either the old or new text - * - * @access private - * - * @param array &$text_lines Either $from_lines or $to_lines - * @param int &$line_no Current line number - * @param int $end Optional end line, when we want to chop more - * than one line. - * - * @return array The chopped lines - */ - protected function _getLines(&$text_lines, &$line_no, $end = false) - { - if (!empty($end)) { - $lines = array(); - // We can shift even more - while ($line_no <= $end) { - array_push($lines, array_shift($text_lines)); - $line_no++; - } - } else { - $lines = array(array_shift($text_lines)); - $line_no++; - } - - return $lines; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Engine/String.php b/html/forums/inc/3rdparty/diff/Diff/Engine/String.php deleted file mode 100644 index 38d942c..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Engine/String.php +++ /dev/null @@ -1,254 +0,0 @@ - - * $patch = file_get_contents('example.patch'); - * $diff = new Horde_Text_Diff('string', array($patch)); - * $renderer = new Horde_Text_Diff_Renderer_inline(); - * echo $renderer->render($diff); - * - * - * Copyright 2005 Örjan Persson - * Copyright 2005-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @author Örjan Persson - * @package Text_Diff - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Engine_String -{ - /** - * Parses a unified or context diff. - * - * First param contains the whole diff and the second can be used to force - * a specific diff type. If the second parameter is 'autodetect', the - * diff will be examined to find out which type of diff this is. - * - * @param string $diff The diff content. - * @param string $mode The diff mode of the content in $diff. One of - * 'context', 'unified', or 'autodetect'. - * - * @return array List of all diff operations. - * @throws Horde_Text_Diff_Exception - */ - public function diff($diff, $mode = 'autodetect') - { - // Detect line breaks. - $lnbr = "\n"; - if (strpos($diff, "\r\n") !== false) { - $lnbr = "\r\n"; - } elseif (strpos($diff, "\r") !== false) { - $lnbr = "\r"; - } - - // Make sure we have a line break at the EOF. - if (substr($diff, -strlen($lnbr)) != $lnbr) { - $diff .= $lnbr; - } - - if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') { - throw new Horde_Text_Diff_Exception('Type of diff is unsupported'); - } - - if ($mode == 'autodetect') { - $context = strpos($diff, '***'); - $unified = strpos($diff, '---'); - if ($context === $unified) { - throw new Horde_Text_Diff_Exception('Type of diff could not be detected'); - } elseif ($context === false || $unified === false) { - $mode = $context !== false ? 'context' : 'unified'; - } else { - $mode = $context < $unified ? 'context' : 'unified'; - } - } - - // Split by new line and remove the diff header, if there is one. - $diff = explode($lnbr, $diff); - if (($mode == 'context' && strpos($diff[0], '***') === 0) || - ($mode == 'unified' && strpos($diff[0], '---') === 0)) { - array_shift($diff); - array_shift($diff); - } - - if ($mode == 'context') { - return $this->parseContextDiff($diff); - } else { - return $this->parseUnifiedDiff($diff); - } - } - - /** - * Parses an array containing the unified diff. - * - * @param array $diff Array of lines. - * - * @return array List of all diff operations. - */ - public function parseUnifiedDiff($diff) - { - $edits = array(); - $end = count($diff) - 1; - for ($i = 0; $i < $end;) { - $diff1 = array(); - switch (substr($diff[$i], 0, 1)) { - case ' ': - do { - $diff1[] = substr($diff[$i], 1); - } while (++$i < $end && substr($diff[$i], 0, 1) == ' '); - $edits[] = new Horde_Text_Diff_Op_Copy($diff1); - break; - - case '+': - // get all new lines - do { - $diff1[] = substr($diff[$i], 1); - } while (++$i < $end && substr($diff[$i], 0, 1) == '+'); - $edits[] = new Horde_Text_Diff_Op_Add($diff1); - break; - - case '-': - // get changed or removed lines - $diff2 = array(); - do { - $diff1[] = substr($diff[$i], 1); - } while (++$i < $end && substr($diff[$i], 0, 1) == '-'); - - while ($i < $end && substr($diff[$i], 0, 1) == '+') { - $diff2[] = substr($diff[$i++], 1); - } - if (count($diff2) == 0) { - $edits[] = new Horde_Text_Diff_Op_Delete($diff1); - } else { - $edits[] = new Horde_Text_Diff_Op_Change($diff1, $diff2); - } - break; - - default: - $i++; - break; - } - } - - return $edits; - } - - /** - * Parses an array containing the context diff. - * - * @param array $diff Array of lines. - * - * @return array List of all diff operations. - */ - public function parseContextDiff(&$diff) - { - $edits = array(); - $i = $max_i = $j = $max_j = 0; - $end = count($diff) - 1; - while ($i < $end && $j < $end) { - while ($i >= $max_i && $j >= $max_j) { - // Find the boundaries of the diff output of the two files - for ($i = $j; - $i < $end && substr($diff[$i], 0, 3) == '***'; - $i++); - for ($max_i = $i; - $max_i < $end && substr($diff[$max_i], 0, 3) != '---'; - $max_i++); - for ($j = $max_i; - $j < $end && substr($diff[$j], 0, 3) == '---'; - $j++); - for ($max_j = $j; - $max_j < $end && substr($diff[$max_j], 0, 3) != '***'; - $max_j++); - } - - // find what hasn't been changed - $array = array(); - while ($i < $max_i && - $j < $max_j && - strcmp($diff[$i], $diff[$j]) == 0) { - $array[] = substr($diff[$i], 2); - $i++; - $j++; - } - - while ($i < $max_i && ($max_j-$j) <= 1) { - if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') { - break; - } - $array[] = substr($diff[$i++], 2); - } - - while ($j < $max_j && ($max_i-$i) <= 1) { - if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') { - break; - } - $array[] = substr($diff[$j++], 2); - } - if (count($array) > 0) { - $edits[] = new Horde_Text_Diff_Op_Copy($array); - } - - if ($i < $max_i) { - $diff1 = array(); - switch (substr($diff[$i], 0, 1)) { - case '!': - $diff2 = array(); - do { - $diff1[] = substr($diff[$i], 2); - if ($j < $max_j && substr($diff[$j], 0, 1) == '!') { - $diff2[] = substr($diff[$j++], 2); - } - } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!'); - $edits[] = new Horde_Text_Diff_Op_Change($diff1, $diff2); - break; - - case '+': - do { - $diff1[] = substr($diff[$i], 2); - } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+'); - $edits[] = new Horde_Text_Diff_Op_Add($diff1); - break; - - case '-': - do { - $diff1[] = substr($diff[$i], 2); - } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-'); - $edits[] = new Horde_Text_Diff_Op_Delete($diff1); - break; - } - } - - if ($j < $max_j) { - $diff2 = array(); - switch (substr($diff[$j], 0, 1)) { - case '+': - do { - $diff2[] = substr($diff[$j++], 2); - } while ($j < $max_j && substr($diff[$j], 0, 1) == '+'); - $edits[] = new Horde_Text_Diff_Op_Add($diff2); - break; - - case '-': - do { - $diff2[] = substr($diff[$j++], 2); - } while ($j < $max_j && substr($diff[$j], 0, 1) == '-'); - $edits[] = new Horde_Text_Diff_Op_Delete($diff2); - break; - } - } - } - - return $edits; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Engine/Xdiff.php b/html/forums/inc/3rdparty/diff/Diff/Engine/Xdiff.php deleted file mode 100644 index 949e71d..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Engine/Xdiff.php +++ /dev/null @@ -1,74 +0,0 @@ - - * @package Text_Diff - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Engine_Xdiff -{ - /** - */ - public function diff($from_lines, $to_lines) - { - if (!extension_loaded('xdiff')) { - throw new Horde_Text_Diff_Exception('The xdiff extension is required for this diff engine'); - } - - array_walk($from_lines, array('Horde_Text_Diff', 'trimNewlines')); - array_walk($to_lines, array('Horde_Text_Diff', 'trimNewlines')); - - /* Convert the two input arrays into strings for xdiff processing. */ - $from_string = implode("\n", $from_lines); - $to_string = implode("\n", $to_lines); - - /* Diff the two strings and convert the result to an array. */ - $diff = xdiff_string_diff($from_string, $to_string, count($to_lines)); - $diff = explode("\n", $diff); - - /* Walk through the diff one line at a time. We build the $edits - * array of diff operations by reading the first character of the - * xdiff output (which is in the "unified diff" format). - * - * Note that we don't have enough information to detect "changed" - * lines using this approach, so we can't add Horde_Text_Diff_Op_Changed - * instances to the $edits array. The result is still perfectly - * valid, albeit a little less descriptive and efficient. */ - $edits = array(); - foreach ($diff as $line) { - if (!strlen($line)) { - continue; - } - switch ($line[0]) { - case ' ': - $edits[] = new Horde_Text_Diff_Op_Copy(array(substr($line, 1))); - break; - - case '+': - $edits[] = new Horde_Text_Diff_Op_Add(array(substr($line, 1))); - break; - - case '-': - $edits[] = new Horde_Text_Diff_Op_Delete(array(substr($line, 1))); - break; - } - } - - return $edits; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Engine/index.html b/html/forums/inc/3rdparty/diff/Diff/Engine/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Engine/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/diff/Diff/Exception.php b/html/forums/inc/3rdparty/diff/Diff/Exception.php deleted file mode 100644 index 48ea410..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Exception.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @category Horde - * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 - * @package Text_Diff - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Exception extends Horde_Exception_Wrapped -{ -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Mapped.php b/html/forums/inc/3rdparty/diff/Diff/Mapped.php deleted file mode 100644 index 36a6cdc..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Mapped.php +++ /dev/null @@ -1,59 +0,0 @@ - - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Mapped extends Horde_Text_Diff -{ - /** - * Computes a diff between sequences of strings. - * - * This can be used to compute things like case-insensitve diffs, or diffs - * which ignore changes in white-space. - * - * @param array $from_lines An array of strings. - * @param array $to_lines An array of strings. - * @param array $mapped_from_lines This array should have the same size - * number of elements as $from_lines. The - * elements in $mapped_from_lines and - * $mapped_to_lines are what is actually - * compared when computing the diff. - * @param array $mapped_to_lines This array should have the same number - * of elements as $to_lines. - */ - public function __construct($from_lines, $to_lines, - $mapped_from_lines, $mapped_to_lines) - { - assert(count($from_lines) == count($mapped_from_lines)); - assert(count($to_lines) == count($mapped_to_lines)); - - parent::__construct($mapped_from_lines, $mapped_to_lines); - - $xi = $yi = 0; - for ($i = 0; $i < count($this->_edits); $i++) { - $orig = &$this->_edits[$i]->orig; - if (is_array($orig)) { - $orig = array_slice($from_lines, $xi, count($orig)); - $xi += count($orig); - } - - $final = &$this->_edits[$i]->final; - if (is_array($final)) { - $final = array_slice($to_lines, $yi, count($final)); - $yi += count($final); - } - } - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Op/Add.php b/html/forums/inc/3rdparty/diff/Diff/Op/Add.php deleted file mode 100644 index c8c26b5..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Op/Add.php +++ /dev/null @@ -1,34 +0,0 @@ -, and is used/adapted with his permission. - * - * Copyright 2004 Geoffrey T. Dairiki - * Copyright 2004-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @package Text_Diff - * @author Geoffrey T. Dairiki - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Op_Add extends Horde_Text_Diff_Op_Base -{ - public function __construct($lines) - { - $this->final = $lines; - $this->orig = false; - } - - public function reverse() - { - return new Horde_Text_Diff_Op_Delete($this->final); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Op/Base.php b/html/forums/inc/3rdparty/diff/Diff/Op/Base.php deleted file mode 100644 index 3a63c4b..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Op/Base.php +++ /dev/null @@ -1,38 +0,0 @@ -, and is used/adapted with his permission. - * - * Copyright 2004 Geoffrey T. Dairiki - * Copyright 2004-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @package Text_Diff - * @author Geoffrey T. Dairiki - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -abstract class Horde_Text_Diff_Op_Base -{ - public $orig; - public $final; - - abstract public function reverse(); - - public function norig() - { - return $this->orig ? count($this->orig) : 0; - } - - public function nfinal() - { - return $this->final ? count($this->final) : 0; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Op/Change.php b/html/forums/inc/3rdparty/diff/Diff/Op/Change.php deleted file mode 100644 index 6512989..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Op/Change.php +++ /dev/null @@ -1,34 +0,0 @@ -, and is used/adapted with his permission. - * - * Copyright 2004 Geoffrey T. Dairiki - * Copyright 2004-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @package Text_Diff - * @author Geoffrey T. Dairiki - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Op_Change extends Horde_Text_Diff_Op_Base -{ - public function __construct($orig, $final) - { - $this->orig = $orig; - $this->final = $final; - } - - public function reverse() - { - return new Horde_Text_Diff_Op_Change($this->final, $this->orig); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Op/Copy.php b/html/forums/inc/3rdparty/diff/Diff/Op/Copy.php deleted file mode 100644 index a3e8f4a..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Op/Copy.php +++ /dev/null @@ -1,37 +0,0 @@ -, and is used/adapted with his permission. - * - * Copyright 2004 Geoffrey T. Dairiki - * Copyright 2004-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @package Text_Diff - * @author Geoffrey T. Dairiki - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Op_Copy extends Horde_Text_Diff_Op_Base -{ - public function __construct($orig, $final = false) - { - if (!is_array($final)) { - $final = $orig; - } - $this->orig = $orig; - $this->final = $final; - } - - public function reverse() - { - return new Horde_Text_Diff_Op_Copy($this->final, $this->orig); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Op/Delete.php b/html/forums/inc/3rdparty/diff/Diff/Op/Delete.php deleted file mode 100644 index 3fbf3b9..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Op/Delete.php +++ /dev/null @@ -1,34 +0,0 @@ -, and is used/adapted with his permission. - * - * Copyright 2004 Geoffrey T. Dairiki - * Copyright 2004-2011 Horde LLC (http://www.horde.org/) - * - * See the enclosed file COPYING for license information (LGPL). If you did - * not receive this file, see http://www.horde.org/licenses/lgpl21. - * - * @package Text_Diff - * @author Geoffrey T. Dairiki - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Op_Delete extends Horde_Text_Diff_Op_Base -{ - public function __construct($lines) - { - $this->orig = $lines; - $this->final = false; - } - - public function reverse() - { - return new Horde_Text_Diff_Op_Add($this->orig); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Op/index.html b/html/forums/inc/3rdparty/diff/Diff/Op/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Op/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/diff/Diff/Renderer.php b/html/forums/inc/3rdparty/diff/Diff/Renderer.php deleted file mode 100644 index 3afcf6c..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Renderer.php +++ /dev/null @@ -1,241 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Renderer -{ - /** - * Number of leading context "lines" to preserve. - * - * This should be left at zero for this class, but subclasses may want to - * set this to other values. - */ - protected $_leading_context_lines = 0; - - /** - * Number of trailing context "lines" to preserve. - * - * This should be left at zero for this class, but subclasses may want to - * set this to other values. - */ - protected $_trailing_context_lines = 0; - - /** - * Constructor. - */ - public function __construct($params = array()) - { - foreach ($params as $param => $value) { - $v = '_' . $param; - if (isset($this->$v)) { - $this->$v = $value; - } - } - } - - /** - * Get any renderer parameters. - * - * @return array All parameters of this renderer object. - */ - public function getParams() - { - $params = array(); - foreach (get_object_vars($this) as $k => $v) { - if ($k[0] == '_') { - $params[substr($k, 1)] = $v; - } - } - - return $params; - } - - /** - * Renders a diff. - * - * @param Horde_Text_Diff $diff A Horde_Text_Diff object. - * - * @return string The formatted output. - */ - public function render($diff) - { - $xi = $yi = 1; - $block = false; - $context = array(); - - $nlead = $this->_leading_context_lines; - $ntrail = $this->_trailing_context_lines; - - $output = $this->_startDiff(); - - $diffs = $diff->getDiff(); - foreach ($diffs as $i => $edit) { - /* If these are unchanged (copied) lines, and we want to keep - * leading or trailing context lines, extract them from the copy - * block. */ - if ($edit instanceof Horde_Text_Diff_Op_Copy) { - /* Do we have any diff blocks yet? */ - if (is_array($block)) { - /* How many lines to keep as context from the copy - * block. */ - $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail; - if (count($edit->orig) <= $keep) { - /* We have less lines in the block than we want for - * context => keep the whole block. */ - $block[] = $edit; - } else { - if ($ntrail) { - /* Create a new block with as many lines as we need - * for the trailing context. */ - $context = array_slice($edit->orig, 0, $ntrail); - $block[] = new Horde_Text_Diff_Op_Copy($context); - } - /* @todo */ - $output .= $this->_block($x0, $ntrail + $xi - $x0, - $y0, $ntrail + $yi - $y0, - $block); - $block = false; - } - } - /* Keep the copy block as the context for the next block. */ - $context = $edit->orig; - } else { - /* Don't we have any diff blocks yet? */ - if (!is_array($block)) { - /* Extract context lines from the preceding copy block. */ - $context = array_slice($context, count($context) - $nlead); - $x0 = $xi - count($context); - $y0 = $yi - count($context); - $block = array(); - if ($context) { - $block[] = new Horde_Text_Diff_Op_Copy($context); - } - } - $block[] = $edit; - } - - if ($edit->orig) { - $xi += count($edit->orig); - } - if ($edit->final) { - $yi += count($edit->final); - } - } - - if (is_array($block)) { - $output .= $this->_block($x0, $xi - $x0, - $y0, $yi - $y0, - $block); - } - - return $output . $this->_endDiff(); - } - - protected function _block($xbeg, $xlen, $ybeg, $ylen, &$edits) - { - $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen)); - - foreach ($edits as $edit) { - switch (get_class($edit)) { - case 'Horde_Text_Diff_Op_Copy': - $output .= $this->_context($edit->orig); - break; - - case 'Horde_Text_Diff_Op_Add': - $output .= $this->_added($edit->final); - break; - - case 'Horde_Text_Diff_Op_Delete': - $output .= $this->_deleted($edit->orig); - break; - - case 'Horde_Text_Diff_Op_Change': - $output .= $this->_changed($edit->orig, $edit->final); - break; - } - } - - return $output . $this->_endBlock(); - } - - protected function _startDiff() - { - return ''; - } - - protected function _endDiff() - { - return ''; - } - - protected function _blockHeader($xbeg, $xlen, $ybeg, $ylen) - { - if ($xlen > 1) { - $xbeg .= ',' . ($xbeg + $xlen - 1); - } - if ($ylen > 1) { - $ybeg .= ',' . ($ybeg + $ylen - 1); - } - - // this matches the GNU Diff behaviour - if ($xlen && !$ylen) { - $ybeg--; - } elseif (!$xlen) { - $xbeg--; - } - - return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg; - } - - protected function _startBlock($header) - { - return $header . "\n"; - } - - protected function _endBlock() - { - return ''; - } - - protected function _lines($lines, $prefix = ' ') - { - return $prefix . implode("\n$prefix", $lines) . "\n"; - } - - protected function _context($lines) - { - return $this->_lines($lines, ' '); - } - - protected function _added($lines) - { - return $this->_lines($lines, '> '); - } - - protected function _deleted($lines) - { - return $this->_lines($lines, '< '); - } - - protected function _changed($orig, $final) - { - return $this->_deleted($orig) . "---\n" . $this->_added($final); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Renderer/Context.php b/html/forums/inc/3rdparty/diff/Diff/Renderer/Context.php deleted file mode 100644 index 6fc37ad..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Renderer/Context.php +++ /dev/null @@ -1,75 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Renderer_Context extends Horde_Text_Diff_Renderer -{ - /** - * Number of leading context "lines" to preserve. - */ - protected $_leading_context_lines = 4; - - /** - * Number of trailing context "lines" to preserve. - */ - protected $_trailing_context_lines = 4; - - protected $_second_block = ''; - - protected function _blockHeader($xbeg, $xlen, $ybeg, $ylen) - { - if ($xlen != 1) { - $xbeg .= ',' . $xlen; - } - if ($ylen != 1) { - $ybeg .= ',' . $ylen; - } - $this->_second_block = "--- $ybeg ----\n"; - return "***************\n*** $xbeg ****"; - } - - protected function _endBlock() - { - return $this->_second_block; - } - - protected function _context($lines) - { - $this->_second_block .= $this->_lines($lines, ' '); - return $this->_lines($lines, ' '); - } - - protected function _added($lines) - { - $this->_second_block .= $this->_lines($lines, '+ '); - return ''; - } - - protected function _deleted($lines) - { - return $this->_lines($lines, '- '); - } - - protected function _changed($orig, $final) - { - $this->_second_block .= $this->_lines($final, '! '); - return $this->_lines($orig, '! '); - } - -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Renderer/Inline.php b/html/forums/inc/3rdparty/diff/Diff/Renderer/Inline.php deleted file mode 100644 index cf829c8..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Renderer/Inline.php +++ /dev/null @@ -1,200 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Renderer_Inline extends Horde_Text_Diff_Renderer -{ - /** - * Number of leading context "lines" to preserve. - * - * @var integer - */ - protected $_leading_context_lines = 10000; - - /** - * Number of trailing context "lines" to preserve. - * - * @var integer - */ - protected $_trailing_context_lines = 10000; - - /** - * Prefix for inserted text. - * - * @var string - */ - protected $_ins_prefix = ''; - - /** - * Suffix for inserted text. - * - * @var string - */ - protected $_ins_suffix = ''; - - /** - * Prefix for deleted text. - * - * @var string - */ - protected $_del_prefix = ''; - - /** - * Suffix for deleted text. - * - * @var string - */ - protected $_del_suffix = ''; - - /** - * Header for each change block. - * - * @var string - */ - protected $_block_header = ''; - - /** - * Whether to split down to character-level. - * - * @var boolean - */ - protected $_split_characters = false; - - /** - * What are we currently splitting on? Used to recurse to show word-level - * or character-level changes. - * - * @var string - */ - protected $_split_level = 'lines'; - - protected function _blockHeader($xbeg, $xlen, $ybeg, $ylen) - { - return $this->_block_header; - } - - protected function _startBlock($header) - { - return $header; - } - - protected function _lines($lines, $prefix = ' ', $encode = true) - { - if ($encode) { - array_walk($lines, array(&$this, '_encode')); - } - - if ($this->_split_level == 'lines') { - return implode("\n", $lines) . "\n"; - } else { - return implode('', $lines); - } - } - - protected function _added($lines) - { - array_walk($lines, array(&$this, '_encode')); - $lines[0] = $this->_ins_prefix . $lines[0]; - $lines[count($lines) - 1] .= $this->_ins_suffix; - return $this->_lines($lines, ' ', false); - } - - protected function _deleted($lines, $words = false) - { - array_walk($lines, array(&$this, '_encode')); - $lines[0] = $this->_del_prefix . $lines[0]; - $lines[count($lines) - 1] .= $this->_del_suffix; - return $this->_lines($lines, ' ', false); - } - - protected function _changed($orig, $final) - { - /* If we've already split on characters, just display. */ - if ($this->_split_level == 'characters') { - return $this->_deleted($orig) - . $this->_added($final); - } - - /* If we've already split on words, just display. */ - if ($this->_split_level == 'words') { - $prefix = ''; - while ($orig[0] !== false && $final[0] !== false && - substr($orig[0], 0, 1) == ' ' && - substr($final[0], 0, 1) == ' ') { - $prefix .= substr($orig[0], 0, 1); - $orig[0] = substr($orig[0], 1); - $final[0] = substr($final[0], 1); - } - return $prefix . $this->_deleted($orig) . $this->_added($final); - } - - $text1 = implode("\n", $orig); - $text2 = implode("\n", $final); - - /* Non-printing newline marker. */ - $nl = "\0"; - - if ($this->_split_characters) { - $diff = new Horde_Text_Diff('native', - array(preg_split('//', $text1), - preg_split('//', $text2))); - } else { - /* We want to split on word boundaries, but we need to preserve - * whitespace as well. Therefore we split on words, but include - * all blocks of whitespace in the wordlist. */ - $diff = new Horde_Text_Diff('native', - array($this->_splitOnWords($text1, $nl), - $this->_splitOnWords($text2, $nl))); - } - - /* Get the diff in inline format. */ - $renderer = new Horde_Text_Diff_Renderer_inline - (array_merge($this->getParams(), - array('split_level' => $this->_split_characters ? 'characters' : 'words'))); - - /* Run the diff and get the output. */ - return str_replace($nl, "\n", $renderer->render($diff)) . "\n"; - } - - protected function _splitOnWords($string, $newlineEscape = "\n") - { - // Ignore \0; otherwise the while loop will never finish. - $string = str_replace("\0", '', $string); - - $words = array(); - $length = strlen($string); - $pos = 0; - - while ($pos < $length) { - // Eat a word with any preceding whitespace. - $spaces = strspn(substr($string, $pos), " \n"); - $nextpos = strcspn(substr($string, $pos + $spaces), " \n"); - $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos)); - $pos += $spaces + $nextpos; - } - - return $words; - } - - protected function _encode(&$string) - { - $string = htmlspecialchars($string); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Renderer/Unified.php b/html/forums/inc/3rdparty/diff/Diff/Renderer/Unified.php deleted file mode 100644 index d19f2ce..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Renderer/Unified.php +++ /dev/null @@ -1,64 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_Renderer_Unified extends Horde_Text_Diff_Renderer -{ - /** - * Number of leading context "lines" to preserve. - */ - protected $_leading_context_lines = 4; - - /** - * Number of trailing context "lines" to preserve. - */ - protected $_trailing_context_lines = 4; - - protected function _blockHeader($xbeg, $xlen, $ybeg, $ylen) - { - if ($xlen != 1) { - $xbeg .= ',' . $xlen; - } - if ($ylen != 1) { - $ybeg .= ',' . $ylen; - } - return "@@ -$xbeg +$ybeg @@"; - } - - protected function _context($lines) - { - return $this->_lines($lines, ' '); - } - - protected function _added($lines) - { - return $this->_lines($lines, '+'); - } - - protected function _deleted($lines) - { - return $this->_lines($lines, '-'); - } - - protected function _changed($orig, $final) - { - return $this->_deleted($orig) . $this->_added($final); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/Renderer/index.html b/html/forums/inc/3rdparty/diff/Diff/Renderer/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/Renderer/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/diff/Diff/String.php b/html/forums/inc/3rdparty/diff/Diff/String.php deleted file mode 100644 index a6101ca..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/String.php +++ /dev/null @@ -1,778 +0,0 @@ - - * @category Horde - * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 - * @package Util - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_String -{ - /** - * lower() cache. - * - * @var array - */ - static protected $_lowers = array(); - - /** - * upper() cache. - * - * @var array - */ - static protected $_uppers = array(); - - /** - * Converts a string from one charset to another. - * - * Uses the iconv or the mbstring extensions. - * The original string is returned if conversion failed or none - * of the extensions were available. - * - * @param mixed $input The data to be converted. If $input is an an - * array, the array's values get converted - * recursively. - * @param string $from The string's current charset. - * @param string $to The charset to convert the string to. - * @param boolean $force Force conversion? - * - * @return mixed The converted input data. - */ - static public function convertCharset($input, $from, $to, $force = false) - { - /* Don't bother converting numbers. */ - if (is_numeric($input)) { - return $input; - } - - /* If the from and to character sets are identical, return now. */ - if (!$force && $from == $to) { - return $input; - } - $from = self::lower($from); - $to = self::lower($to); - if (!$force && $from == $to) { - return $input; - } - - if (is_array($input)) { - $tmp = array(); - reset($input); - while (list($key, $val) = each($input)) { - $tmp[self::_convertCharset($key, $from, $to)] = self::convertCharset($val, $from, $to, $force); - } - return $tmp; - } - - if (is_object($input)) { - // PEAR_Error/Exception objects are almost guaranteed to contain - // recursion, which will cause a segfault in PHP. We should never - // reach this line, but add a check. - if (($input instanceof Exception) || - ($input instanceof PEAR_Error)) { - return ''; - } - - $input = Horde_Util::cloneObject($input); - $vars = get_object_vars($input); - while (list($key, $val) = each($vars)) { - $input->$key = self::convertCharset($val, $from, $to, $force); - } - return $input; - } - - if (!is_string($input)) { - return $input; - } - - return self::_convertCharset($input, $from, $to); - } - - /** - * Internal function used to do charset conversion. - * - * @param string $input See self::convertCharset(). - * @param string $from See self::convertCharset(). - * @param string $to See self::convertCharset(). - * - * @return string The converted string. - */ - static protected function _convertCharset($input, $from, $to) - { - /* Use utf8_[en|de]code() if possible and if the string isn't too - * large (less than 16 MB = 16 * 1024 * 1024 = 16777216 bytes) - these - * functions use more memory. */ - if (Horde_Util::extensionExists('xml') && - ((strlen($input) < 16777216) || - !Horde_Util::extensionExists('iconv') || - !Horde_Util::extensionExists('mbstring'))) { - if (($to == 'utf-8') && - in_array($from, array('iso-8859-1', 'us-ascii', 'utf-8'))) { - return utf8_encode($input); - } - - if (($from == 'utf-8') && - in_array($to, array('iso-8859-1', 'us-ascii', 'utf-8'))) { - return utf8_decode($input); - } - } - - /* Try UTF7-IMAP conversions. */ - if (($from == 'utf7-imap') || ($to == 'utf7-imap')) { - try { - if ($from == 'utf7-imap') { - return self::convertCharset(Horde_Imap_Client_Utf7imap::Utf7ImapToUtf8($input), 'UTF-8', $to); - } else { - if ($from == 'utf-8') { - $conv = $input; - } else { - $conv = self::convertCharset($input, $from, 'UTF-8'); - } - return Horde_Imap_Client_Utf7imap::Utf8ToUtf7Imap($conv); - } - } catch (Horde_Imap_Client_Exception $e) { - return $input; - } - } - - /* Try iconv with transliteration. */ - if (Horde_Util::extensionExists('iconv')) { - unset($php_errormsg); - ini_set('track_errors', 1); - $out = @iconv($from, $to . '//TRANSLIT', $input); - $errmsg = isset($php_errormsg); - ini_restore('track_errors'); - if (!$errmsg) { - return $out; - } - } - - /* Try mbstring. */ - if (Horde_Util::extensionExists('mbstring')) { - $out = @mb_convert_encoding($input, $to, self::_mbstringCharset($from)); - if (!empty($out)) { - return $out; - } - } - - return $input; - } - - /** - * Makes a string lowercase. - * - * @param string $string The string to be converted. - * @param boolean $locale If true the string will be converted based on - * a given charset, locale independent else. - * @param string $charset If $locale is true, the charset to use when - * converting. - * - * @return string The string with lowercase characters. - */ - static public function lower($string, $locale = false, $charset = null) - { - if ($locale) { - if (Horde_Util::extensionExists('mbstring')) { - if (is_null($charset)) { - throw new InvalidArgumentException('$charset argument must not be null'); - } - $ret = @mb_strtolower($string, self::_mbstringCharset($charset)); - if (!empty($ret)) { - return $ret; - } - } - return strtolower($string); - } - - if (!isset(self::$_lowers[$string])) { - $language = setlocale(LC_CTYPE, 0); - setlocale(LC_CTYPE, 'C'); - self::$_lowers[$string] = strtolower($string); - setlocale(LC_CTYPE, $language); - } - - return self::$_lowers[$string]; - } - - /** - * Makes a string uppercase. - * - * @param string $string The string to be converted. - * @param boolean $locale If true the string will be converted based on a - * given charset, locale independent else. - * @param string $charset If $locale is true, the charset to use when - * converting. If not provided the current charset. - * - * @return string The string with uppercase characters. - */ - static public function upper($string, $locale = false, $charset = null) - { - if ($locale) { - if (Horde_Util::extensionExists('mbstring')) { - if (is_null($charset)) { - throw new InvalidArgumentException('$charset argument must not be null'); - } - $ret = @mb_strtoupper($string, self::_mbstringCharset($charset)); - if (!empty($ret)) { - return $ret; - } - } - return strtoupper($string); - } - - if (!isset(self::$_uppers[$string])) { - $language = setlocale(LC_CTYPE, 0); - setlocale(LC_CTYPE, 'C'); - self::$_uppers[$string] = strtoupper($string); - setlocale(LC_CTYPE, $language); - } - - return self::$_uppers[$string]; - } - - /** - * Returns a string with the first letter capitalized if it is - * alphabetic. - * - * @param string $string The string to be capitalized. - * @param boolean $locale If true the string will be converted based on a - * given charset, locale independent else. - * @param string $charset The charset to use, defaults to current charset. - * - * @return string The capitalized string. - */ - static public function ucfirst($string, $locale = false, $charset = null) - { - if ($locale) { - if (is_null($charset)) { - throw new InvalidArgumentException('$charset argument must not be null'); - } - $first = self::substr($string, 0, 1, $charset); - if (self::isAlpha($first, $charset)) { - $string = self::upper($first, true, $charset) . self::substr($string, 1, null, $charset); - } - } else { - $string = self::upper(substr($string, 0, 1), false) . substr($string, 1); - } - - return $string; - } - - /** - * Returns a string with the first letter of each word capitalized if it is - * alphabetic. - * - * Sentences are splitted into words at whitestrings. - * - * @param string $string The string to be capitalized. - * @param boolean $locale If true the string will be converted based on a - * given charset, locale independent else. - * @param string $charset The charset to use, defaults to current charset. - * - * @return string The capitalized string. - */ - static public function ucwords($string, $locale = false, $charset = null) - { - $words = preg_split('/(\s+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); - for ($i = 0, $c = count($words); $i < $c; $i += 2) { - $words[$i] = self::ucfirst($words[$i], $locale, $charset); - } - return implode('', $words); - } - - /** - * Returns part of a string. - * - * @param string $string The string to be converted. - * @param integer $start The part's start position, zero based. - * @param integer $length The part's length. - * @param string $charset The charset to use when calculating the part's - * position and length, defaults to current - * charset. - * - * @return string The string's part. - */ - static public function substr($string, $start, $length = null, - $charset = 'UTF-8') - { - if (is_null($length)) { - $length = self::length($string, $charset) - $start; - } - - if ($length == 0) { - return ''; - } - - /* Try mbstring. */ - if (Horde_Util::extensionExists('mbstring')) { - $ret = @mb_substr($string, $start, $length, self::_mbstringCharset($charset)); - - /* mb_substr() returns empty string on failure. */ - if (strlen($ret)) { - return $ret; - } - } - - /* Try iconv. */ - if (Horde_Util::extensionExists('iconv')) { - $ret = @iconv_substr($string, $start, $length, $charset); - - /* iconv_substr() returns false on failure. */ - if ($ret !== false) { - return $ret; - } - } - - return substr($string, $start, $length); - } - - /** - * Returns the character (not byte) length of a string. - * - * @param string $string The string to return the length of. - * @param string $charset The charset to use when calculating the string's - * length. - * - * @return integer The string's length. - */ - static public function length($string, $charset = 'UTF-8') - { - $charset = self::lower($charset); - - if ($charset == 'utf-8' || $charset == 'utf8') { - return strlen(utf8_decode($string)); - } - - if (Horde_Util::extensionExists('mbstring')) { - $ret = @mb_strlen($string, self::_mbstringCharset($charset)); - if (!empty($ret)) { - return $ret; - } - } - - return strlen($string); - } - - /** - * Returns the numeric position of the first occurrence of $needle - * in the $haystack string. - * - * @param string $haystack The string to search through. - * @param string $needle The string to search for. - * @param integer $offset Allows to specify which character in haystack - * to start searching. - * @param string $charset The charset to use when searching for the - * $needle string. - * - * @return integer The position of first occurrence. - */ - static public function pos($haystack, $needle, $offset = 0, - $charset = 'UTF-8') - { - if (Horde_Util::extensionExists('mbstring')) { - $track_errors = ini_set('track_errors', 1); - $ret = @mb_strpos($haystack, $needle, $offset, self::_mbstringCharset($charset)); - ini_set('track_errors', $track_errors); - if (!isset($php_errormsg)) { - return $ret; - } - } - - return strpos($haystack, $needle, $offset); - } - - /** - * Returns the numeric position of the last occurrence of $needle - * in the $haystack string. - * - * @param string $haystack The string to search through. - * @param string $needle The string to search for. - * @param integer $offset Allows to specify which character in haystack - * to start searching. - * @param string $charset The charset to use when searching for the - * $needle string. - * - * @return integer The position of first occurrence. - */ - static public function rpos($haystack, $needle, $offset = 0, - $charset = 'UTF-8') - { - if (Horde_Util::extensionExists('mbstring')) { - $track_errors = ini_set('track_errors', 1); - $ret = @mb_strrpos($haystack, $needle, $offset, self::_mbstringCharset($charset)); - ini_set('track_errors', $track_errors); - if (!isset($php_errormsg)) { - return $ret; - } - } - - return strrpos($haystack, $needle, $offset); - } - - /** - * Returns a string padded to a certain length with another string. - * This method behaves exactly like str_pad() but is multibyte safe. - * - * @param string $input The string to be padded. - * @param integer $length The length of the resulting string. - * @param string $pad The string to pad the input string with. Must - * be in the same charset like the input string. - * @param const $type The padding type. One of STR_PAD_LEFT, - * STR_PAD_RIGHT, or STR_PAD_BOTH. - * @param string $charset The charset of the input and the padding - * strings. - * - * @return string The padded string. - */ - static public function pad($input, $length, $pad = ' ', - $type = STR_PAD_RIGHT, $charset = 'UTF-8') - { - $mb_length = self::length($input, $charset); - $sb_length = strlen($input); - $pad_length = self::length($pad, $charset); - - /* Return if we already have the length. */ - if ($mb_length >= $length) { - return $input; - } - - /* Shortcut for single byte strings. */ - if ($mb_length == $sb_length && $pad_length == strlen($pad)) { - return str_pad($input, $length, $pad, $type); - } - - switch ($type) { - case STR_PAD_LEFT: - $left = $length - $mb_length; - $output = self::substr(str_repeat($pad, ceil($left / $pad_length)), 0, $left, $charset) . $input; - break; - - case STR_PAD_BOTH: - $left = floor(($length - $mb_length) / 2); - $right = ceil(($length - $mb_length) / 2); - $output = self::substr(str_repeat($pad, ceil($left / $pad_length)), 0, $left, $charset) . - $input . - self::substr(str_repeat($pad, ceil($right / $pad_length)), 0, $right, $charset); - break; - - case STR_PAD_RIGHT: - $right = $length - $mb_length; - $output = $input . self::substr(str_repeat($pad, ceil($right / $pad_length)), 0, $right, $charset); - break; - } - - return $output; - } - - /** - * Wraps the text of a message. - * - * @param string $string String containing the text to wrap. - * @param integer $width Wrap the string at this number of - * characters. - * @param string $break Character(s) to use when breaking lines. - * @param boolean $cut Whether to cut inside words if a line - * can't be wrapped. - * @param boolean $line_folding Whether to apply line folding rules per - * RFC 822 or similar. The correct break - * characters including leading whitespace - * have to be specified too. - * - * @return string String containing the wrapped text. - */ - static public function wordwrap($string, $width = 75, $break = "\n", - $cut = false, $line_folding = false) - { - $wrapped = ''; - - while (self::length($string, 'UTF-8') > $width) { - $line = self::substr($string, 0, $width, 'UTF-8'); - $string = self::substr($string, self::length($line, 'UTF-8'), null, 'UTF-8'); - - // Make sure we didn't cut a word, unless we want hard breaks - // anyway. - if (!$cut && preg_match('/^(.+?)((\s|\r?\n).*)/us', $string, $match)) { - $line .= $match[1]; - $string = $match[2]; - } - - // Wrap at existing line breaks. - if (preg_match('/^(.*?)(\r?\n)(.*)$/su', $line, $match)) { - $wrapped .= $match[1] . $match[2]; - $string = $match[3] . $string; - continue; - } - - // Wrap at the last colon or semicolon followed by a whitespace if - // doing line folding. - if ($line_folding && - preg_match('/^(.*?)(;|:)(\s+.*)$/u', $line, $match)) { - $wrapped .= $match[1] . $match[2] . $break; - $string = $match[3] . $string; - continue; - } - - // Wrap at the last whitespace of $line. - $sub = $line_folding - ? '(.+[^\s])' - : '(.*)'; - - if (preg_match('/^' . $sub . '(\s+)(.*)$/u', $line, $match)) { - $wrapped .= $match[1] . $break; - $string = ($line_folding ? $match[2] : '') . $match[3] . $string; - continue; - } - - // Hard wrap if necessary. - if ($cut) { - $wrapped .= $line . $break; - continue; - } - - $wrapped .= $line; - } - - return $wrapped . $string; - } - - /** - * Wraps the text of a message. - * - * @param string $text String containing the text to wrap. - * @param integer $length Wrap $text at this number of characters. - * @param string $break_char Character(s) to use when breaking lines. - * @param boolean $quote Ignore lines that are wrapped with the '>' - * character (RFC 2646)? If true, we don't - * remove any padding whitespace at the end of - * the string. - * - * @return string String containing the wrapped text. - */ - static public function wrap($text, $length = 80, $break_char = "\n", - $quote = false) - { - $paragraphs = array(); - - foreach (preg_split('/\r?\n/', $text) as $input) { - if ($quote && (strpos($input, '>') === 0)) { - $line = $input; - } else { - /* We need to handle the Usenet-style signature line - * separately; since the space after the two dashes is - * REQUIRED, we don't want to trim the line. */ - if ($input != '-- ') { - $input = rtrim($input); - } - $line = self::wordwrap($input, $length, $break_char); - } - - $paragraphs[] = $line; - } - - return implode($break_char, $paragraphs); - } - - /** - * Return a truncated string, suitable for notifications. - * - * @param string $text The original string. - * @param integer $length The maximum length. - * - * @return string The truncated string, if longer than $length. - */ - static public function truncate($text, $length = 100) - { - return (self::length($text) > $length) - ? rtrim(self::substr($text, 0, $length - 3)) . '...' - : $text; - } - - /** - * Return an abbreviated string, with characters in the middle of the - * excessively long string replaced by '...'. - * - * @param string $text The original string. - * @param integer $length The length at which to abbreviate. - * - * @return string The abbreviated string, if longer than $length. - */ - static public function abbreviate($text, $length = 20) - { - return (self::length($text) > $length) - ? rtrim(self::substr($text, 0, round(($length - 3) / 2))) . '...' . ltrim(self::substr($text, (($length - 3) / 2) * -1)) - : $text; - } - - /** - * Returns the common leading part of two strings. - * - * @param string $str1 A string. - * @param string $str2 Another string. - * - * @return string The start of $str1 and $str2 that is identical in both. - */ - static public function common($str1, $str2) - { - for ($result = '', $i = 0; - isset($str1[$i]) && isset($str2[$i]) && $str1[$i] == $str2[$i]; - $i++) { - $result .= $str1[$i]; - } - return $result; - } - - /** - * Returns true if the every character in the parameter is an alphabetic - * character. - * - * @param string $string The string to test. - * @param string $charset The charset to use when testing the string. - * - * @return boolean True if the parameter was alphabetic only. - */ - static public function isAlpha($string, $charset) - { - if (!Horde_Util::extensionExists('mbstring')) { - return ctype_alpha($string); - } - - $charset = self::_mbstringCharset($charset); - $old_charset = mb_regex_encoding(); - - if ($charset != $old_charset) { - @mb_regex_encoding($charset); - } - $alpha = !@mb_ereg_match('[^[:alpha:]]', $string); - if ($charset != $old_charset) { - @mb_regex_encoding($old_charset); - } - - return $alpha; - } - - /** - * Returns true if ever character in the parameter is a lowercase letter in - * the current locale. - * - * @param string $string The string to test. - * @param string $charset The charset to use when testing the string. - * - * @return boolean True if the parameter was lowercase. - */ - static public function isLower($string, $charset) - { - return ((self::lower($string, true, $charset) === $string) && - self::isAlpha($string, $charset)); - } - - /** - * Returns true if every character in the parameter is an uppercase letter - * in the current locale. - * - * @param string $string The string to test. - * @param string $charset The charset to use when testing the string. - * - * @return boolean True if the parameter was uppercase. - */ - static public function isUpper($string, $charset) - { - return ((self::upper($string, true, $charset) === $string) && - self::isAlpha($string, $charset)); - } - - /** - * Performs a multibyte safe regex match search on the text provided. - * - * @param string $text The text to search. - * @param array $regex The regular expressions to use, without perl - * regex delimiters (e.g. '/' or '|'). - * @param string $charset The character set of the text. - * - * @return array The matches array from the first regex that matches. - */ - static public function regexMatch($text, $regex, $charset = null) - { - if (!empty($charset)) { - $regex = self::convertCharset($regex, $charset, 'utf-8'); - $text = self::convertCharset($text, $charset, 'utf-8'); - } - - $matches = array(); - foreach ($regex as $val) { - if (preg_match('/' . $val . '/u', $text, $matches)) { - break; - } - } - - if (!empty($charset)) { - $matches = self::convertCharset($matches, 'utf-8', $charset); - } - - return $matches; - } - - /** - * Check to see if a string is valid UTF-8. - * - * @since 1.1.0 - * - * @param string $text The text to check. - * - * @return boolean True if valid UTF-8. - */ - static public function validUtf8($text) - { - /* Regex from: - * http://stackoverflow.com/questions/1523460/ensuring-valid-utf-8-in-php - */ - return preg_match('/^(?: - [\x09\x0A\x0D\x20-\x7E] # ASCII - | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte - | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs - | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte - | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates - | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 - | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 - | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 - )*$/xs', $text); - } - - /** - * Workaround charsets that don't work with mbstring functions. - * - * @param string $charset The original charset. - * - * @return string The charset to use with mbstring functions. - */ - static protected function _mbstringCharset($charset) - { - /* mbstring functions do not handle the 'ks_c_5601-1987' & - * 'ks_c_5601-1989' charsets. However, these charsets are used, for - * example, by various versions of Outlook to send Korean characters. - * Use UHC (CP949) encoding instead. See, e.g., - * http://lists.w3.org/Archives/Public/ietf-charsets/2001AprJun/0030.html */ - if ($charset == 'UTF-8' || $charset == 'utf-8') { - return $charset; - } - if (in_array(self::lower($charset), array('ks_c_5601-1987', 'ks_c_5601-1989'))) { - $charset = 'UHC'; - } - - return $charset; - } - -} diff --git a/html/forums/inc/3rdparty/diff/Diff/ThreeWay.php b/html/forums/inc/3rdparty/diff/Diff/ThreeWay.php deleted file mode 100644 index 83560ff..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/ThreeWay.php +++ /dev/null @@ -1,150 +0,0 @@ - - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_ThreeWay -{ - /** - * Array of changes. - * - * @var array - */ - protected $_edits; - - /** - * Conflict counter. - * - * @var integer - */ - protected $_conflictingBlocks = 0; - - /** - * Computes diff between 3 sequences of strings. - * - * @param array $orig The original lines to use. - * @param array $final1 The first version to compare to. - * @param array $final2 The second version to compare to. - */ - public function __construct($orig, $final1, $final2) - { - if (extension_loaded('xdiff')) { - $engine = new Horde_Text_Diff_Engine_Xdiff(); - } else { - $engine = new Horde_Text_Diff_Engine_Native(); - } - - $this->_edits = $this->_diff3($engine->diff($orig, $final1), - $engine->diff($orig, $final2)); - } - - /** - */ - public function mergedOutput($label1 = false, $label2 = false) - { - $lines = array(); - foreach ($this->_edits as $edit) { - if ($edit->isConflict()) { - /* FIXME: this should probably be moved somewhere else. */ - $lines = array_merge($lines, - array('<<<<<<<' . ($label1 ? ' ' . $label1 : '')), - $edit->final1, - array("======="), - $edit->final2, - array('>>>>>>>' . ($label2 ? ' ' . $label2 : ''))); - $this->_conflictingBlocks++; - } else { - $lines = array_merge($lines, $edit->merged()); - } - } - - return $lines; - } - - /** - */ - protected function _diff3($edits1, $edits2) - { - $edits = array(); - $bb = new Horde_Text_Diff_ThreeWay_BlockBuilder(); - - $e1 = current($edits1); - $e2 = current($edits2); - while ($e1 || $e2) { - if ($e1 && $e2 && - $e1 instanceof Horde_Text_Diff_Op_Copy && - $e2 instanceof Horde_Text_Diff_Op_Copy) { - /* We have copy blocks from both diffs. This is the (only) - * time we want to emit a diff3 copy block. Flush current - * diff3 diff block, if any. */ - if ($edit = $bb->finish()) { - $edits[] = $edit; - } - - $ncopy = min($e1->norig(), $e2->norig()); - assert($ncopy > 0); - $edits[] = new Horde_Text_Diff_ThreeWay_Op_Copy(array_slice($e1->orig, 0, $ncopy)); - - if ($e1->norig() > $ncopy) { - array_splice($e1->orig, 0, $ncopy); - array_splice($e1->final, 0, $ncopy); - } else { - $e1 = next($edits1); - } - - if ($e2->norig() > $ncopy) { - array_splice($e2->orig, 0, $ncopy); - array_splice($e2->final, 0, $ncopy); - } else { - $e2 = next($edits2); - } - } else { - if ($e1 && $e2) { - if ($e1->orig && $e2->orig) { - $norig = min($e1->norig(), $e2->norig()); - $orig = array_splice($e1->orig, 0, $norig); - array_splice($e2->orig, 0, $norig); - $bb->input($orig); - } - - if ($e1 instanceof Horde_Text_Diff_Op_Copy) { - $bb->out1(array_splice($e1->final, 0, $norig)); - } - - if ($e2 instanceof Horde_Text_Diff_Op_Copy) { - $bb->out2(array_splice($e2->final, 0, $norig)); - } - } - - if ($e1 && ! $e1->orig) { - $bb->out1($e1->final); - $e1 = next($edits1); - } - if ($e2 && ! $e2->orig) { - $bb->out2($e2->final); - $e2 = next($edits2); - } - } - } - - if ($edit = $bb->finish()) { - $edits[] = $edit; - } - - return $edits; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/BlockBuilder.php b/html/forums/inc/3rdparty/diff/Diff/ThreeWay/BlockBuilder.php deleted file mode 100644 index 639c59e..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/BlockBuilder.php +++ /dev/null @@ -1,71 +0,0 @@ - - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_ThreeWay_BlockBuilder -{ - public function __construct() - { - $this->_init(); - } - - public function input($lines) - { - if ($lines) { - $this->_append($this->orig, $lines); - } - } - - public function out1($lines) - { - if ($lines) { - $this->_append($this->final1, $lines); - } - } - - public function out2($lines) - { - if ($lines) { - $this->_append($this->final2, $lines); - } - } - - public function isEmpty() - { - return !$this->orig && !$this->final1 && !$this->final2; - } - - public function finish() - { - if ($this->isEmpty()) { - return false; - } else { - $edit = new Horde_Text_Diff_ThreeWay_Op_Base($this->orig, $this->final1, $this->final2); - $this->_init(); - return $edit; - } - } - - protected function _init() - { - $this->orig = $this->final1 = $this->final2 = array(); - } - - protected function _append(&$array, $lines) - { - array_splice($array, sizeof($array), 0, $lines); - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Base.php b/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Base.php deleted file mode 100644 index c10466c..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Base.php +++ /dev/null @@ -1,48 +0,0 @@ - - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_ThreeWay_Op_Base -{ - public function __construct($orig = false, $final1 = false, $final2 = false) - { - $this->orig = $orig ? $orig : array(); - $this->final1 = $final1 ? $final1 : array(); - $this->final2 = $final2 ? $final2 : array(); - } - - public function merged() - { - if (!isset($this->_merged)) { - if ($this->final1 === $this->final2) { - $this->_merged = &$this->final1; - } elseif ($this->final1 === $this->orig) { - $this->_merged = &$this->final2; - } elseif ($this->final2 === $this->orig) { - $this->_merged = &$this->final1; - } else { - $this->_merged = false; - } - } - - return $this->_merged; - } - - public function isConflict() - { - return $this->merged() === false; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Copy.php b/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Copy.php deleted file mode 100644 index 15f7a83..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/Copy.php +++ /dev/null @@ -1,36 +0,0 @@ - - */ - -// Disallow direct access to this file for security reasons -if(!defined("IN_MYBB")) -{ - die("Direct initialization of this file is not allowed.

    Please make sure IN_MYBB is defined."); -} - -class Horde_Text_Diff_ThreeWay_Op_Copy extends Horde_Text_Diff_ThreeWay_Op_Base -{ - public function __construct($lines = false) - { - $this->orig = $lines ? $lines : array(); - $this->final1 = &$this->orig; - $this->final2 = &$this->orig; - } - - public function merged() - { - return $this->orig; - } - - public function isConflict() - { - return false; - } -} diff --git a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/index.html b/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/Op/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/index.html b/html/forums/inc/3rdparty/diff/Diff/ThreeWay/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/ThreeWay/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/diff/Diff/index.html b/html/forums/inc/3rdparty/diff/Diff/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/diff/Diff/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/diff/index.html b/html/forums/inc/3rdparty/diff/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/diff/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/index.html b/html/forums/inc/3rdparty/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/json/index.html b/html/forums/inc/3rdparty/json/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/3rdparty/json/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/3rdparty/json/json.php b/html/forums/inc/3rdparty/json/json.php deleted file mode 100644 index 4540e95..0000000 --- a/html/forums/inc/3rdparty/json/json.php +++ /dev/null @@ -1,822 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * Converts to and from JSON format. - * - * JSON (JavaScript Object Notation) is a lightweight data-interchange - * format. It is easy for humans to read and write. It is easy for machines - * to parse and generate. It is based on a subset of the JavaScript - * Programming Language, Standard ECMA-262 3rd Edition - December 1999. - * This feature can also be found in Python. JSON is a text format that is - * completely language independent but uses conventions that are familiar - * to programmers of the C-family of languages, including C, C++, C#, Java, - * JavaScript, Perl, TCL, and many others. These properties make JSON an - * ideal data-interchange language. - * - * This package provides a simple encoder and decoder for JSON notation. It - * is intended for use with client-side Javascript applications that make - * use of HTTPRequest to perform server communication functions - data can - * be encoded into JSON notation for use in a client-side javascript, or - * decoded from incoming Javascript requests. JSON format is native to - * Javascript, and can be directly eval()'ed with no further parsing - * overhead - * - * All strings should be in ASCII or UTF-8 format! - * - * LICENSE: 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 ``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 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. - * - * @category - * @package Services_JSON - * @author Michal Migurski - * @author Matt Knapp - * @author Brett Stimmerman - * @copyright 2005 Michal Migurski - * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 - */ - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_SLICE', 1); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_STR', 2); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_ARR', 3); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_OBJ', 4); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_CMT', 5); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_LOOSE_TYPE', 16); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_SUPPRESS_ERRORS', 32); - -/** - * Converts to and from JSON format. - * - * Brief example of use: - * - * - * // create a new instance of Services_JSON - * $json = new Services_JSON(); - * - * // convert a complexe value to JSON notation, and send it to the browser - * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); - * $output = $json->encode($value); - * - * print($output); - * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] - * - * // accept incoming POST data, assumed to be in JSON notation - * $input = file_get_contents('php://input', 1000000); - * $value = $json->decode($input); - * - */ -class Services_JSON -{ - /** - * constructs a new JSON instance - * - * @param int $use object behavior flags; combine with boolean-OR - * - * possible values: - * - SERVICES_JSON_LOOSE_TYPE: loose typing. - * "{...}" syntax creates associative arrays - * instead of objects in decode(). - * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. - * Values which can't be encoded (e.g. resources) - * appear as NULL instead of throwing errors. - * By default, a deeply-nested resource will - * bubble up with an error, so all return values - * from encode() should be checked with isError() - */ - function Services_JSON($use = 0) - { - $this->use = $use; - } - - /** - * convert a string from one UTF-16 char to one UTF-8 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf16 UTF-16 character - * @return string UTF-8 character - * @access private - */ - function utf162utf8($utf16) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); - } - - $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); - - switch(true) { - case ((0x7F & $bytes) == $bytes): - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x7F & $bytes); - - case (0x07FF & $bytes) == $bytes: - // return a 2-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xC0 | (($bytes >> 6) & 0x1F)) - . chr(0x80 | ($bytes & 0x3F)); - - case (0xFFFF & $bytes) == $bytes: - // return a 3-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xE0 | (($bytes >> 12) & 0x0F)) - . chr(0x80 | (($bytes >> 6) & 0x3F)) - . chr(0x80 | ($bytes & 0x3F)); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * convert a string from one UTF-8 char to one UTF-16 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf8 UTF-8 character - * @return string UTF-16 character - * @access private - */ - function utf82utf16($utf8) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); - } - - switch(strlen($utf8)) { - case 1: - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return $utf8; - - case 2: - // return a UTF-16 character from a 2-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x07 & (ord($utf8{0}) >> 2)) - . chr((0xC0 & (ord($utf8{0}) << 6)) - | (0x3F & ord($utf8{1}))); - - case 3: - // return a UTF-16 character from a 3-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr((0xF0 & (ord($utf8{0}) << 4)) - | (0x0F & (ord($utf8{1}) >> 2))) - . chr((0xC0 & (ord($utf8{1}) << 6)) - | (0x7F & ord($utf8{2}))); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * encodes an arbitrary variable into JSON format - * - * @param mixed $var any number, boolean, string, array, or object to be encoded. - * see argument 1 to Services_JSON() above for array-parsing behavior. - * if var is a strng, note that encode() always expects it - * to be in ASCII or UTF-8 format! - * - * @return mixed JSON string representation of input var or an error if a problem occurs - * @access public - */ - function encode($var) - { - switch (gettype($var)) { - case 'boolean': - return $var ? 'true' : 'false'; - - case 'NULL': - return 'null'; - - case 'integer': - return (int) $var; - - case 'double': - case 'float': - return (float) $var; - - case 'string': - // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT - $ascii = ''; - $strlen_var = strlen($var); - - /* - * Iterate over every character in the string, - * escaping with a slash or encoding to UTF-8 where necessary - */ - for ($c = 0; $c < $strlen_var; ++$c) { - - $ord_var_c = ord($var{$c}); - - switch (true) { - case $ord_var_c == 0x08: - $ascii .= '\b'; - break; - case $ord_var_c == 0x09: - $ascii .= '\t'; - break; - case $ord_var_c == 0x0A: - $ascii .= '\n'; - break; - case $ord_var_c == 0x0C: - $ascii .= '\f'; - break; - case $ord_var_c == 0x0D: - $ascii .= '\r'; - break; - - case $ord_var_c == 0x22: - case $ord_var_c == 0x2F: - case $ord_var_c == 0x5C: - // double quote, slash, slosh - $ascii .= '\\'.$var{$c}; - break; - - case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): - // characters U-00000000 - U-0000007F (same as ASCII) - $ascii .= $var{$c}; - break; - - case (($ord_var_c & 0xE0) == 0xC0): - // characters U-00000080 - U-000007FF, mask 110XXXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, ord($var{$c + 1})); - $c += 1; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF0) == 0xE0): - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2})); - $c += 2; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF8) == 0xF0): - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3})); - $c += 3; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFC) == 0xF8): - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4})); - $c += 4; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFE) == 0xFC): - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4}), - ord($var{$c + 5})); - $c += 5; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - } - } - - return '"'.$ascii.'"'; - - case 'array': - /* - * As per JSON spec if any array key is not an integer - * we must treat the the whole array as an object. We - * also try to catch a sparsely populated associative - * array with numeric keys here because some JS engines - * will create an array with empty indexes up to - * max_index which can cause memory issues and because - * the keys, which may be relevant, will be remapped - * otherwise. - * - * As per the ECMA and JSON specification an object may - * have any string as a property. Unfortunately due to - * a hole in the ECMA specification if the key is a - * ECMA reserved word or starts with a digit the - * parameter is only accessible using ECMAScript's - * bracket notation. - */ - - // treat as a JSON object - if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { - $properties = array_map(array($this, 'name_value'), - array_keys($var), - array_values($var)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - } - - // treat it like a regular array - $elements = array_map(array($this, 'encode'), $var); - - foreach($elements as $element) { - if(Services_JSON::isError($element)) { - return $element; - } - } - - return '[' . join(',', $elements) . ']'; - - case 'object': - $vars = get_object_vars($var); - - $properties = array_map(array($this, 'name_value'), - array_keys($vars), - array_values($vars)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - - default: - return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) - ? 'null' - : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); - } - } - - /** - * array-walking function for use in generating JSON-formatted name-value pairs - * - * @param string $name name of key to use - * @param mixed $value reference to an array element to be encoded - * - * @return string JSON-formatted name-value pair, like '"name":value' - * @access private - */ - function name_value($name, $value) - { - $encoded_value = $this->encode($value); - - if(Services_JSON::isError($encoded_value)) { - return $encoded_value; - } - - return $this->encode((string)$name) . ':' . $encoded_value; - } - - /** - * reduce a string by removing leading and trailing comments and whitespace - * - * @param $str string string value to strip of comments and whitespace - * - * @return string string value stripped of comments and whitespace - * @access private - */ - function reduce_string($str) - { - $str = preg_replace(array( - - // eliminate single line comments in '// ...' form - '#^\s*//(.+)$#m', - - // eliminate multi-line comments in '/* ... */' form, at start of string - '#^\s*/\*(.+)\*/#Us', - - // eliminate multi-line comments in '/* ... */' form, at end of string - '#/\*(.+)\*/\s*$#Us' - - ), '', $str); - - // eliminate extraneous space - return trim($str); - } - - /** - * decodes a JSON string into appropriate variable - * - * @param string $str JSON-formatted string - * - * @return mixed number, boolean, string, array, or object - * corresponding to given JSON input string. - * See argument 1 to Services_JSON() above for object-output behavior. - * Note that decode() always returns strings - * in ASCII or UTF-8 format! - * @access public - */ - function decode($str) - { - $str = $this->reduce_string($str); - - switch (strtolower($str)) { - case 'true': - return true; - - case 'false': - return false; - - case 'null': - return null; - - default: - $m = array(); - - if (is_numeric($str)) { - // Lookie-loo, it's a number - - // This would work on its own, but I'm trying to be - // good about returning integers where appropriate: - // return (float)$str; - - // Return float or int, as appropriate - return ((float)$str == (integer)$str) - ? (integer)$str - : (float)$str; - - } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { - // STRINGS RETURNED IN UTF-8 FORMAT - $delim = substr($str, 0, 1); - $chrs = substr($str, 1, -1); - $utf8 = ''; - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c < $strlen_chrs; ++$c) { - - $substr_chrs_c_2 = substr($chrs, $c, 2); - $ord_chrs_c = ord($chrs{$c}); - - switch (true) { - case $substr_chrs_c_2 == '\b': - $utf8 .= chr(0x08); - ++$c; - break; - case $substr_chrs_c_2 == '\t': - $utf8 .= chr(0x09); - ++$c; - break; - case $substr_chrs_c_2 == '\n': - $utf8 .= chr(0x0A); - ++$c; - break; - case $substr_chrs_c_2 == '\f': - $utf8 .= chr(0x0C); - ++$c; - break; - case $substr_chrs_c_2 == '\r': - $utf8 .= chr(0x0D); - ++$c; - break; - - case $substr_chrs_c_2 == '\\"': - case $substr_chrs_c_2 == '\\\'': - case $substr_chrs_c_2 == '\\\\': - case $substr_chrs_c_2 == '\\/': - if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || - ($delim == "'" && $substr_chrs_c_2 != '\\"')) { - $utf8 .= $chrs{++$c}; - } - break; - - case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): - // single, escaped unicode character - $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) - . chr(hexdec(substr($chrs, ($c + 4), 2))); - $utf8 .= $this->utf162utf8($utf16); - $c += 5; - break; - - case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): - $utf8 .= $chrs{$c}; - break; - - case ($ord_chrs_c & 0xE0) == 0xC0: - // characters U-00000080 - U-000007FF, mask 110XXXXX - //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 2); - ++$c; - break; - - case ($ord_chrs_c & 0xF0) == 0xE0: - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 3); - $c += 2; - break; - - case ($ord_chrs_c & 0xF8) == 0xF0: - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 4); - $c += 3; - break; - - case ($ord_chrs_c & 0xFC) == 0xF8: - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 5); - $c += 4; - break; - - case ($ord_chrs_c & 0xFE) == 0xFC: - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 6); - $c += 5; - break; - - } - - } - - return $utf8; - - } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { - // array, or object notation - - if ($str{0} == '[') { - $stk = array(SERVICES_JSON_IN_ARR); - $arr = array(); - } else { - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = array(); - } else { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = new stdClass(); - } - } - - array_push($stk, array('what' => SERVICES_JSON_SLICE, - 'where' => 0, - 'delim' => false)); - - $chrs = substr($str, 1, -1); - $chrs = $this->reduce_string($chrs); - - if ($chrs == '') { - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } else { - return $obj; - - } - } - - //print("\nparsing {$chrs}\n"); - - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c <= $strlen_chrs; ++$c) { - - $top = end($stk); - $substr_chrs_c_2 = substr($chrs, $c, 2); - - if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { - // found a comma that is not inside a string, array, etc., - // OR we've reached the end of the character list - $slice = substr($chrs, $top['where'], ($c - $top['where'])); - array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); - //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - // we are in an array, so just push an element onto the stack - array_push($arr, $this->decode($slice)); - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - // we are in an object, so figure - // out the property name and set an - // element in an associative array, - // for now - $parts = array(); - - if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // "name":value pair - $key = $this->decode($parts[1]); - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // name:value pair, where name is unquoted - $key = $parts[1]; - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } - - } - - } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { - // found a quote, and we are not inside a string - array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); - //print("Found start of string at {$c}\n"); - - } elseif (($chrs{$c} == $top['delim']) && - ($top['what'] == SERVICES_JSON_IN_STR) && - ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { - // found a quote, we're in a string, and it's not escaped - // we know that it's not escaped becase there is _not_ an - // odd number of backslashes at the end of the string so far - array_pop($stk); - //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '[') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-bracket, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); - //print("Found start of array at {$c}\n"); - - } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { - // found a right-bracket, and we're in an array - array_pop($stk); - //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '{') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-brace, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); - //print("Found start of object at {$c}\n"); - - } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { - // found a right-brace, and we're in an object - array_pop($stk); - //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($substr_chrs_c_2 == '/*') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a comment start, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); - $c++; - //print("Found start of comment at {$c}\n"); - - } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { - // found a comment end, and we're in one now - array_pop($stk); - $c++; - - for ($i = $top['where']; $i <= $c; ++$i) - $chrs = substr_replace($chrs, ' ', $i, 1); - - //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } - - } - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - return $obj; - - } - - } - } - } - - /** - * @todo Ultimately, this should just call PEAR::isError() - */ - function isError($data, $code = null) - { - if (class_exists('pear')) { - return PEAR::isError($data, $code); - } elseif (is_object($data) && (get_class($data) == 'services_json_error' || - is_subclass_of($data, 'services_json_error'))) { - return true; - } - - return false; - } -} - -if (class_exists('PEAR_Error')) { - - class Services_JSON_Error extends PEAR_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - parent::PEAR_Error($message, $code, $mode, $options, $userinfo); - } - } - -} else { - - /** - * @todo Ultimately, this class shall be descended from PEAR_Error - */ - class Services_JSON_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - - } - } - -} - -function json_encode($var) -{ - $JSON = new Services_JSON; - return $JSON->encode($var); -} - -function json_decode($var) -{ - $JSON = new Services_JSON; - return $JSON->decode($var); -} \ No newline at end of file diff --git a/html/forums/inc/adminfunctions_templates.php b/html/forums/inc/adminfunctions_templates.php deleted file mode 100644 index 1d7e4c6..0000000 --- a/html/forums/inc/adminfunctions_templates.php +++ /dev/null @@ -1,94 +0,0 @@ - 0 (based off master) - defaults to 1 - * @param mixed $sid Template SID to modify, false for every SID > 0 and SID = -1 - * @param int $limit The maximum possible replacements for the regular expression - * @return boolean true if updated one or more templates, false if not. - */ - -function find_replace_templatesets($title, $find, $replace, $autocreate=1, $sid=false, $limit=-1) -{ - global $db, $mybb; - - $return = false; - $template_sets = array(-2, -1); - - // Select all templates with that title (including global) if not working on a specific template set - $sqlwhere = '>0 OR sid=-1'; - $sqlwhere2 = '>0'; - - // Otherwise select just templates from that specific set - if($sid !== false) - { - $sid = (int)$sid; - $sqlwhere2 = $sqlwhere = "=$sid"; - } - - // Select all other modified templates with that title - $query = $db->simple_select("templates", "tid, sid, template", "title = '".$db->escape_string($title)."' AND (sid{$sqlwhere})"); - while($template = $db->fetch_array($query)) - { - // Keep track of which templates sets have a modified version of this template already - $template_sets[] = $template['sid']; - - // Update the template if there is a replacement term or a change - $new_template = preg_replace($find, $replace, $template['template'], $limit); - if($new_template == $template['template']) - { - continue; - } - - // The template is a custom template. Replace as normal. - $updated_template = array( - "template" => $db->escape_string($new_template) - ); - $db->update_query("templates", $updated_template, "tid='{$template['tid']}'"); - - $return = true; - } - - // Add any new templates if we need to and are allowed to - if($autocreate != 0) - { - // Select our master template with that title - $query = $db->simple_select("templates", "title, template", "title='".$db->escape_string($title)."' AND sid='-2'", array('limit' => 1)); - $master_template = $db->fetch_array($query); - $master_template['new_template'] = preg_replace($find, $replace, $master_template['template'], $limit); - - if($master_template['new_template'] != $master_template['template']) - { - // Update the rest of our template sets that are currently inheriting this template from our master set - $query = $db->simple_select("templatesets", "sid", "sid NOT IN (".implode(',', $template_sets).") AND (sid{$sqlwhere2})"); - while($template = $db->fetch_array($query)) - { - $insert_template = array( - "title" => $db->escape_string($master_template['title']), - "template" => $db->escape_string($master_template['new_template']), - "sid" => $template['sid'], - "version" => $mybb->version_code, - "status" => '', - "dateline" => TIME_NOW - ); - $db->insert_query("templates", $insert_template); - - $return = true; - } - } - } - - return $return; -} diff --git a/html/forums/inc/cachehandlers/apc.php b/html/forums/inc/cachehandlers/apc.php deleted file mode 100644 index 3fda52d..0000000 --- a/html/forums/inc/cachehandlers/apc.php +++ /dev/null @@ -1,114 +0,0 @@ -trigger_generic_error("apc_load_error"); - die; - } - } - } - - /** - * Connect and initialize this handler. - * - * @return boolean True if successful, false on failure - */ - function connect() - { - // Set a unique identifier for all queries in case other forums on this server also use this cache handler - $this->unique_id = md5(MYBB_ROOT); - - return true; - } - - /** - * Connect and initialize this handler. - * - * @param string $name - * @return boolean True if successful, false on failure - */ - function fetch($name) - { - if(apc_exists($this->unique_id."_".$name)) - { - $data = apc_fetch($this->unique_id."_".$name); - return unserialize($data); - } - - return false; - } - - /** - * Write an item to the cache. - * - * @param string $name The name of the cache - * @param mixed $contents The data to write to the cache item - * @return boolean True on success, false on failure - */ - function put($name, $contents) - { - $status = apc_store($this->unique_id."_".$name, serialize($contents)); - return $status; - } - - /** - * Delete a cache - * - * @param string $name The name of the cache - * @return boolean True on success, false on failure - */ - function delete($name) - { - return apc_delete($this->unique_id."_".$name); - } - - /** - * Disconnect from the cache - * - * @return bool - */ - function disconnect() - { - return true; - } - - /** - * @param string $name - * - * @return string - */ - function size_of($name='') - { - global $lang; - - return $lang->na; - } -} diff --git a/html/forums/inc/cachehandlers/disk.php b/html/forums/inc/cachehandlers/disk.php deleted file mode 100644 index 030ac47..0000000 --- a/html/forums/inc/cachehandlers/disk.php +++ /dev/null @@ -1,126 +0,0 @@ -trigger_generic_error("cache_no_write"); - return false; - } - - $cache_file = fopen(MYBB_ROOT."cache/{$name}.php", "w") or $mybb->trigger_generic_error("cache_no_write"); - flock($cache_file, LOCK_EX); - $cache_contents = ""; - fwrite($cache_file, $cache_contents); - flock($cache_file, LOCK_UN); - fclose($cache_file); - - return true; - } - - /** - * Delete a cache - * - * @param string $name The name of the cache - * @return boolean True on success, false on failure - */ - function delete($name) - { - return @unlink(MYBB_ROOT."/cache/{$name}.php"); - } - - /** - * Disconnect from the cache - * - * @return bool - */ - function disconnect() - { - return true; - } - - /** - * Select the size of the disk cache - * - * @param string $name The name of the cache - * @return integer the size of the disk cache - */ - function size_of($name='') - { - if($name != '') - { - return @filesize(MYBB_ROOT."/cache/{$name}.php"); - } - else - { - $total = 0; - $dir = opendir(MYBB_ROOT."/cache"); - while(($file = readdir($dir)) !== false) - { - if($file == "." || $file == ".." || $file == ".svn" || !is_file(MYBB_ROOT."/cache/{$file}")) - { - continue; - } - - $total += filesize(MYBB_ROOT."/cache/{$file}"); - } - return $total; - } - } -} diff --git a/html/forums/inc/cachehandlers/eaccelerator.php b/html/forums/inc/cachehandlers/eaccelerator.php deleted file mode 100644 index 808a007..0000000 --- a/html/forums/inc/cachehandlers/eaccelerator.php +++ /dev/null @@ -1,116 +0,0 @@ -trigger_generic_error("eaccelerator_load_error"); - die; - } - } - } - - /** - * Connect and initialize this handler. - * - * @return boolean True if successful, false on failure - */ - function connect() - { - // Set a unique identifier for all queries in case other forums on this server also use this cache handler - $this->unique_id = md5(MYBB_ROOT); - - return true; - } - - /** - * Retrieve an item from the cache. - * - * @param string $name The name of the cache - * @return mixed Cache data if successful, false if failure - */ - function fetch($name) - { - $data = eaccelerator_get($this->unique_id."_".$name); - if($data === false) - { - return false; - } - - return unserialize($data); - } - - /** - * Write an item to the cache. - * - * @param string $name The name of the cache - * @param mixed $contents The data to write to the cache item - * @return boolean True on success, false on failure - */ - function put($name, $contents) - { - eaccelerator_lock($this->unique_id."_".$name); - $status = eaccelerator_put($this->unique_id."_".$name, serialize($contents)); - eaccelerator_unlock($this->unique_id."_".$name); - return $status; - } - - /** - * Delete a cache - * - * @param string $name The name of the cache - * @return boolean True on success, false on failure - */ - function delete($name) - { - return eaccelerator_rm($this->unique_id."_".$name); - } - - /** - * Disconnect from the cache - * - * @return bool - */ - function disconnect() - { - return true; - } - - /** - * @param string $name - * - * @return string - */ - function size_of($name='') - { - global $lang; - - return $lang->na; - } -} diff --git a/html/forums/inc/cachehandlers/index.html b/html/forums/inc/cachehandlers/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/cachehandlers/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/cachehandlers/interface.php b/html/forums/inc/cachehandlers/interface.php deleted file mode 100644 index ddceac8..0000000 --- a/html/forums/inc/cachehandlers/interface.php +++ /dev/null @@ -1,61 +0,0 @@ -trigger_generic_error("memcache_load_error"); - die; - } - } - } - - /** - * Connect and initialize this handler. - * - * @return boolean True if successful, false on failure - */ - function connect() - { - global $mybb, $error_handler; - - $this->memcache = new Memcache; - - if($mybb->config['memcache']['host']) - { - $mybb->config['memcache'][0] = $mybb->config['memcache']; - unset($mybb->config['memcache']['host']); - unset($mybb->config['memcache']['port']); - } - - foreach($mybb->config['memcache'] as $memcache) - { - if(!$memcache['host']) - { - $message = "Please configure the memcache settings in inc/config.php before attempting to use this cache handler"; - $error_handler->trigger($message, MYBB_CACHEHANDLER_LOAD_ERROR); - die; - } - - if(!isset($memcache['port'])) - { - $memcache['port'] = "11211"; - } - - $this->memcache->addServer($memcache['host'], $memcache['port']); - - if(!$this->memcache) - { - $message = "Unable to connect to the memcache server on {$memcache['memcache_host']}:{$memcache['memcache_port']}. Are you sure it is running?"; - $error_handler->trigger($message, MYBB_CACHEHANDLER_LOAD_ERROR); - die; - } - } - - // Set a unique identifier for all queries in case other forums are using the same memcache server - $this->unique_id = md5(MYBB_ROOT); - - return true; - } - - /** - * Retrieve an item from the cache. - * - * @param string $name The name of the cache - * @return mixed Cache data if successful, false if failure - */ - function fetch($name) - { - $data = $this->memcache->get($this->unique_id."_".$name); - - if($data === false) - { - return false; - } - else - { - return $data; - } - } - - /** - * Write an item to the cache. - * - * @param string $name The name of the cache - * @param mixed $contents The data to write to the cache item - * @return boolean True on success, false on failure - */ - function put($name, $contents) - { - return $this->memcache->set($this->unique_id."_".$name, $contents); - } - - /** - * Delete a cache - * - * @param string $name The name of the cache - * @return boolean True on success, false on failure - */ - function delete($name) - { - return $this->memcache->delete($this->unique_id."_".$name); - } - - /** - * Disconnect from the cache - */ - function disconnect() - { - @$this->memcache->close(); - } - - /** - * @param string $name - * - * @return string - */ - function size_of($name='') - { - global $lang; - - return $lang->na; - } -} - diff --git a/html/forums/inc/cachehandlers/memcached.php b/html/forums/inc/cachehandlers/memcached.php deleted file mode 100644 index d4c8870..0000000 --- a/html/forums/inc/cachehandlers/memcached.php +++ /dev/null @@ -1,157 +0,0 @@ -trigger_generic_error("memcached_load_error"); - die; - } - } - } - - /** - * Connect and initialize this handler. - * - * @return boolean True if successful, false on failure - */ - function connect() - { - global $mybb, $error_handler; - - $this->memcached = new Memcached; - - if($mybb->config['memcache']['host']) - { - $mybb->config['memcache'][0] = $mybb->config['memcache']; - unset($mybb->config['memcache']['host']); - unset($mybb->config['memcache']['port']); - } - - foreach($mybb->config['memcache'] as $memcached) - { - if(!$memcached['host']) - { - $message = "Please configure the memcache settings in inc/config.php before attempting to use this cache handler"; - $error_handler->trigger($message, MYBB_CACHEHANDLER_LOAD_ERROR); - die; - } - - if(!isset($memcached['port'])) - { - $memcached['port'] = "11211"; - } - - $this->memcached->addServer($memcached['host'], $memcached['port']); - - if(!$this->memcached) - { - $message = "Unable to connect to the memcached server on {$memcached['memcache_host']}:{$memcached['memcache_port']}. Are you sure it is running?"; - $error_handler->trigger($message, MYBB_CACHEHANDLER_LOAD_ERROR); - die; - } - } - - // Set a unique identifier for all queries in case other forums are using the same memcache server - $this->unique_id = md5(MYBB_ROOT); - - return true; - } - - /** - * Retrieve an item from the cache. - * - * @param string $name The name of the cache - * @return mixed Cache data if successful, false if failure - */ - function fetch($name) - { - $data = $this->memcached->get($this->unique_id."_".$name); - - if($data === false) - { - return false; - } - else - { - return $data; - } - } - - /** - * Write an item to the cache. - * - * @param string $name The name of the cache - * @param mixed $contents The data to write to the cache item - * @return boolean True on success, false on failure - */ - function put($name, $contents) - { - return $this->memcached->set($this->unique_id."_".$name, $contents); - } - - /** - * Delete a cache - * - * @param string $name The name of the cache - * @return boolean True on success, false on failure - */ - function delete($name) - { - return $this->memcached->delete($this->unique_id."_".$name); - } - - /** - * Disconnect from the cache - */ - function disconnect() - { - @$this->memcached->quit(); - } - - /** - * @param string $name - * - * @return string - */ - function size_of($name='') - { - global $lang; - - return $lang->na; - } -} - diff --git a/html/forums/inc/cachehandlers/xcache.php b/html/forums/inc/cachehandlers/xcache.php deleted file mode 100644 index def8e14..0000000 --- a/html/forums/inc/cachehandlers/xcache.php +++ /dev/null @@ -1,111 +0,0 @@ -trigger_generic_error("xcache_load_error"); - die; - } - } - } - - /** - * Connect and initialize this handler. - * - * @return boolean True if successful, false on failure - */ - function connect() - { - // Set a unique identifier for all queries in case other forums on this server also use this cache handler - $this->unique_id = md5(MYBB_ROOT); - - return true; - } - - /** - * Retrieve an item from the cache. - * - * @param string $name The name of the cache - * @return mixed Cache data if successful, false if failure - */ - function fetch($name) - { - if(!xcache_isset($this->unique_id."_".$name)) - { - return false; - } - return xcache_get($this->unique_id."_".$name); - } - - /** - * Write an item to the cache. - * - * @param string $name The name of the cache - * @param mixed $contents The data to write to the cache item - * @return boolean True on success, false on failure - */ - function put($name, $contents) - { - return xcache_set($this->unique_id."_".$name, $contents); - } - - /** - * Delete a cache - * - * @param string $name The name of the cache - * @return boolean True on success, false on failure - */ - function delete($name) - { - return xcache_set($this->unique_id."_".$name, "", 1); - } - - /** - * Disconnect from the cache - * - * @return bool - */ - function disconnect() - { - return true; - } - - /** - * @param string $name - * - * @return string - */ - function size_of($name='') - { - global $lang; - - return $lang->na; - } -} diff --git a/html/forums/inc/captcha_fonts/MINYN___.ttf b/html/forums/inc/captcha_fonts/MINYN___.ttf deleted file mode 100644 index 0ab1fea16e801a19075061c089bb1f885a8c0be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84264 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 diff --git a/html/forums/inc/captcha_fonts/edmunds.ttf b/html/forums/inc/captcha_fonts/edmunds.ttf deleted file mode 100644 index 5258ef512dd1e0f69938cbb65fb67f2f1e18c665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48092 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 diff --git a/html/forums/inc/captcha_fonts/index.html b/html/forums/inc/captcha_fonts/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/captcha_fonts/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/captcha_fonts/read_me.html b/html/forums/inc/captcha_fonts/read_me.html deleted file mode 100644 index 25f2dae..0000000 --- a/html/forums/inc/captcha_fonts/read_me.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - Larabie Fonts "read me" file, license and FAQ - - - - - -

    - LARABIE FONTS README.TXT -

    -

    - All Larabie Fonts in this file are free to use for personal and/or commercial purposes. No - payment is necessary to use these fonts for personal or commercial use. For Software Products - who want to include Larabie Fonts see the License Agreement below. You can add this font to a - website but do not combine fonts into a single archive or alter them in any way. -

    -

    - All Larabie Fonts are free for commercial use but a sample of your product would be - gratefully appreciated so I can see how the font looks in use. Contact www.larabiefonts.com/donation.html for - mailing information. -

    -

    - Some Larabie Fonts have enhanced and expanded families available for sale at www.typodermic.com. -

    -

    - If you'd like to make a voluntary donation to Larabie Fonts for the use of the free fonts in - any amount please go to www.larabiefonts.com/donation.html -

    -

    - I accept CDs, magazines, t-shirts, a sample of your merchandise or anything featuring Larabie - Fonts. Please remember to list your item as a gift on the customs form or I will have to - pay import duties and taxes on the item. Mailing information is provided at the link above. -

    -

    - Font installation help is available at www.larabiefonts.com/help.html -

    -

    - LARABIE FONTS FREQUENTLY ASKED QUESTIONS -

    -
      -
    • Q: How do use these fonts in my favourite software? -
    • -
    • A: In Windows, you take the fonts out of the ZIP archive and place them in your fonts - folder which can be found in your Control Panel. The next time you run your software, the - font will be available. For example: If you install a new font, the next time you run - Microsoft Word, that font will be available in the menu under Format / Font. For anything - more complicated, or Mac installation, visit - www.larabiefonts.com/help.html -
    • -
    -
      -
    • Q: How can I use this font in AOL Instant - Messenger, MSN Messenger, Outlook, Outlook Express, Euodora or any other email software? -
    • -
    • A: At the time of this writing (Feb 2004) you cant. After installing one of my fonts, - you may be able to select it in the above applications but the person at the other end wont - see that same thing unless they have the font installed. If you really want to use my fonts - in these applications, make sure the people at the other end have the same fonts installed. -
    • -
    -
      -
    • Q: How can I use these fonts on a web page? -
    • -
    • A: If youre creating a web page using Flash, its easy. Consult your Flash manual. If - youre using Acrobat, make sure the font - embedding settings are turned on. Consult your Acrobat manual. For anything else there are - limitations: If you want to use one of my fonts as your main, text font youre pretty much - out of luck unless you explore a font embedding tool such as WEFT but I dont recommend it. - To use my fonts as headings or titles, use image creation software such as The Gimp, Photoshop, Paint Shop Pro, Pixia etc. Save the images as GIF files and place - them on your web page. Theres a lot more to it than can be explained here but there are - countless books available on web page design. -
    • -
    -
      -
    • Q: How can I make these fonts bigger? -
    • -
    • A: All my fonts are infinitely scalable; the limitations are in your software. A common - problem is scaling fonts in Microsoft Word. If you choose Format / Font you can type in any - number you like under size. -
    • -
    -
      -
    • Q: Are these fonts really free? -
    • -
    • A: Yes they are. Some fonts such as Neuropol have expanded font families available - for sale at www.typodermic.com but the version you - downloaded at Larabie Fonts is free. -
    • -
    -
      -
    • Q: Your licence agreement states that the fonts cant be altered. Does that mean I cant - mess around with your fonts in Photoshop/Illustrator/Publisher etc? -
    • -
    • A: Those license restrictions refer to altering the actual fonts themselves, not what you - make with them. As long as you dont alter the font files in font creation software such as - FontLab or Fontographer youre free to create anything you like with them. -
    • -
    -
      -
    • Q: Can I use your fonts in a logo? -
    • -
    • A: Yes. But check with a lawyer if youre not sure. Its okay with me if you use it but - do so at your own risk. -
    • -
    -
      -
    • Q: Can I send you a sample of the nifty thing I created with your fonts? -
    • -
    • A: Of course. Check www.larabiefonts.com/donation.html for my - current email or mailing address. -
    • -
    -
      -
    • Q: Can you make a custom font for me? -
    • -
    • A: Possibly. Check typodermic.com/custom.html for details. Keep in mind - that making fonts is my full-time job so no freebies. -
    • -
    - -
      -
    • Q: I want to sell rubber stamp alphabets, alphabet punches or stencil alphabets using - your font designs. -
    • -
    • A: Contact me first at www.larabiefonts.com/email.html. -
    • -
    -
      -
    • Q: My software wont let me embed one of your fonts. -
    • -
    • A: You may have an old version of one of my fonts. Uninstall it and install a current - version on Larabie Fonts. -
    • -
    -
      -
    • Q: Can you help me find a font? -
    • -
    • A: I really dont have the time but if you send a donation, I can give it a try. If not. - post your question on my font forum: www.larabiefonts.com/info.html. -
    • -
    -

    - LARABIE FONTS END-USER LICENSE AGREEMENT FOR SOFTWARE PRODUCTS -

    -

    - SOFTWARE PRODUCT LICENSE -

    -

    - The SOFTWARE PRODUCT is protected by copyright laws and International copyright treaties, as - well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not - sold. -

    -
    - 1. GRANT OF LICENSE. This document grants you the following rights: -
    -

    - - Installation and Use. You may install and use an unlimited number of copies of the SOFTWARE - PRODUCT. You may copy and distribute unlimited copies of the SOFTWARE PRODUCT as you receive - them, in any medium, provided that you publish on each copy an appropriate copyright notice. - Keep intact all the notices that refer to this License and give any other recipients of the - fonts a copy of this License along with the fonts. -

    -
    - 2. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS. -
    -

    - - You may modify your copy or copies of the SOFTWARE PRODUCT or any portion of it, provided - that you also meet all of these rules: -

    -

    - a) Do not alter in any way alphanumeric characters (A-Z, a-z, 1-9) contained in the font. An - exception is converting between formats, here is allowed the nominal distortion that occurs - during conversion from second order to third order quadratic curves (TrueType to Postscript) - and vice versa. -

    -

    - b) Extra characters may be added; here it is allowed to use curves (shapes) from alphanumeric - characters in fonts under same license. -

    -

    - c) It is allowed to modify and remove analpahbetics (punctuation, special characters, - ligatures and symbols). -

    -

    - d) The original font name must be retained but can be augmented. (ie. a Font named Blue - Highway can be renamed Blue Highway Cyrillic or Blue Highway ANSI, etc.) -

    -

    - e) Character mapping may be altered. -

    -

    - f) If the kerning information is altered or discarded it must be stated in the user notes or - documentation. -

    -

    - g) All modifications must be released under this license. -

    -

    - -

    LIMITED WARRANTY NO WARRANTIES. Larabie Fonts expressly disclaims any warranty for the - SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation is provided "as is" - without warranty of any kind, either express or implied, including, without limitation, the - implied warranties or merchantability, fitness for a particular purpose, or non-infringement. - The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you. -

    - -

    -

    - NO LIABILITY FOR CONSEQUENTIAL DAMAGES. In no event shall Larabie Fonts be liable for any - damages whatsoever (including, without limitation, damages for loss of business profits, - business interruption, loss of business information, or any other pecuniary loss) arising out - of the use of or inability to use this product, even if Larabie Fonts has been advised of the - possibility of such damages. -

    -
    - 3. MISCELLANEOUS -
    -

    - Should you have any questions concerning this document, or if you desire to contact Larabie - Fonts for any reason, please email www.larabiefonts.com/email.html. -

    - - \ No newline at end of file diff --git a/html/forums/inc/class_captcha.php b/html/forums/inc/class_captcha.php deleted file mode 100644 index 82d727a..0000000 --- a/html/forums/inc/class_captcha.php +++ /dev/null @@ -1,467 +0,0 @@ -type = $mybb->settings['captchaimage']; - - $args = array( - 'this' => &$this, - 'build' => &$build, - 'template' => &$template, - ); - - $plugins->run_hooks('captcha_build_start', $args); - - // Prepare the build template - if($template) - { - $this->captcha_template = $template; - - if($this->type == 2) - { - $this->captcha_template .= "_recaptcha"; - } - else if($this->type == 4){ - $this->captcha_template .= "_nocaptcha"; - } - } - - // Work on which CAPTCHA we've got installed - if($this->type == 2 && $mybb->settings['captchapublickey'] && $mybb->settings['captchaprivatekey']) - { - // We want to use reCAPTCHA, set the server options - $this->server = "//www.google.com/recaptcha/api"; - $this->verify_server = "www.google.com"; - - if($build == true) - { - $this->build_recaptcha(); - } - } - else if($this->type == 4 && $mybb->settings['captchapublickey'] && $mybb->settings['captchaprivatekey']) - { - // We want to use reCAPTCHA, set the server options - $this->server = "//www.google.com/recaptcha/api.js"; - $this->verify_server = "https://www.google.com/recaptcha/api/siteverify"; - - if($build == true) - { - $this->build_recaptcha(); - } - } - else if($this->type == 1) - { - if(!function_exists("imagecreatefrompng")) - { - // We want to use the default CAPTCHA, but it's not installed - return; - } - else if($build == true) - { - $this->build_captcha(); - } - } - - $plugins->run_hooks('captcha_build_end', $args); - } - - /** - * @param bool $return Not used - */ - function build_captcha($return = false) - { - global $db, $lang, $templates, $theme, $mybb; - - // This will build a MyBB CAPTCHA - $randomstr = random_str(5); - $imagehash = md5(random_str(12)); - - $insert_array = array( - "imagehash" => $imagehash, - "imagestring" => $randomstr, - "dateline" => TIME_NOW - ); - - $db->insert_query("captcha", $insert_array); - eval("\$this->html = \"".$templates->get($this->captcha_template)."\";"); - //eval("\$this->html = \"".$templates->get("member_register_regimage")."\";"); - } - - function build_recaptcha() - { - global $lang, $mybb, $templates; - - // This will build a reCAPTCHA - $server = $this->server; - $public_key = $mybb->settings['captchapublickey']; - - eval("\$this->html = \"".$templates->get($this->captcha_template, 1, 0)."\";"); - //eval("\$this->html = \"".$templates->get("member_register_regimage_recaptcha")."\";"); - } - - /** - * @return string - */ - function build_hidden_captcha() - { - global $db, $mybb, $templates; - - $field = array(); - - if($this->type == 1) - { - // Names - $hash = "imagehash"; - $string = "imagestring"; - - // Values - $field['hash'] = $db->escape_string($mybb->input['imagehash']); - $field['string'] = $db->escape_string($mybb->input['imagestring']); - } - else if($this->type == 2) - { - // Names - $hash = "recaptcha_challenge_field"; - $string = "recaptcha_response_field"; - - // Values - $field['hash'] = $mybb->input['recaptcha_challenge_field']; - $field['string'] = $mybb->input['recaptcha_response_field']; - } - else if($this->type == 3) - { - // Are You a Human can't be built as a hidden captcha - return ''; - } - - eval("\$this->html = \"".$templates->get("post_captcha_hidden")."\";"); - return $this->html; - } - - /** - * @return bool - */ - function validate_captcha() - { - global $db, $lang, $mybb, $session, $plugins; - - $plugins->run_hooks('captcha_validate_start', $this); - - if($this->type == 1) - { - // We have a normal CAPTCHA to handle - $imagehash = $db->escape_string($mybb->input['imagehash']); - $imagestring = $db->escape_string(my_strtolower($mybb->input['imagestring'])); - - switch($db->type) - { - case 'mysql': - case 'mysqli': - $field = 'imagestring'; - break; - default: - $field = 'LOWER(imagestring)'; - break; - } - - $query = $db->simple_select("captcha", "*", "imagehash = '{$imagehash}' AND {$field} = '{$imagestring}'"); - $imgcheck = $db->fetch_array($query); - - if(!$imgcheck) - { - $this->set_error($lang->invalid_captcha_verify); - $db->delete_query("captcha", "imagehash = '{$imagehash}'"); - } - } - elseif($this->type == 2) - { - $challenge = $mybb->input['recaptcha_challenge_field']; - $response = $mybb->input['recaptcha_response_field']; - - if(!$challenge || strlen($challenge) == 0 || !$response || strlen($response) == 0) - { - $this->set_error($lang->invalid_captcha); - } - else - { - // We have a reCAPTCHA to handle - $data = $this->_qsencode(array( - 'privatekey' => $mybb->settings['captchaprivatekey'], - 'remoteip' => $session->ipaddress, - 'challenge' => $challenge, - 'response' => $response - )); - - // Contact Google and see if our reCAPTCHA was successful - $http_request = "POST /recaptcha/api/verify HTTP/1.0\r\n"; - $http_request .= "Host: $this->verify_server\r\n"; - $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; - $http_request .= "Content-Length: ".strlen($data)."\r\n"; - $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; - $http_request .= "\r\n"; - $http_request .= $data; - - $fs = @fsockopen($this->verify_server, 80, $errno, $errstr, 10); - - if($fs == false) - { - $this->set_error($lang->invalid_captcha_transmit); - } - else - { - // We connected, but is it correct? - fwrite($fs, $http_request); - - while(!feof($fs)) - { - $response .= fgets($fs, 1160); - } - - fclose($fs); - - $response = explode("\r\n\r\n", $response, 2); - $answer = explode("\n", $response[1]); - - if(trim($answer[0]) != 'true') - { - // We got it wrong! Oh no... - $this->set_error($lang->invalid_captcha_verify); - } - } - } - } - elseif($this->type == 4) - { - $response = $mybb->input['g-recaptcha-response']; - if(!$response || strlen($response) == 0) - { - $this->set_error($lang->invalid_nocaptcha); - } - else - { - // We have a noCAPTCHA to handle - // Contact Google and see if our reCAPTCHA was successful - $response = fetch_remote_file($this->verify_server, array( - 'secret' => $mybb->settings['captchaprivatekey'], - 'remoteip' => $session->ipaddress, - 'response' => $response - )); - - if($response == false) - { - $this->set_error($lang->invalid_nocaptcha_transmit); - } - else - { - $answer = json_decode($response, true); - - if($answer['success'] != 'true') - { - // We got it wrong! Oh no... - $this->set_error($lang->invalid_nocaptcha); - } - } - } - } - - $plugins->run_hooks('captcha_validate_end', $this); - - if(count($this->errors) > 0) - { - return false; - } - else - { - return true; - } - } - - function invalidate_captcha() - { - global $db, $mybb, $plugins; - - if($this->type == 1) - { - // We have a normal CAPTCHA to handle - $imagehash = $db->escape_string($mybb->input['imagehash']); - if($imagehash) - { - $db->delete_query("captcha", "imagehash = '{$imagehash}'"); - } - } - // Not necessary for reCAPTCHA or Are You a Human - - $plugins->run_hooks('captcha_invalidate_end', $this); - } - - /** - * Add an error to the error array. - * - * @param string $error - * @param string $data - */ - function set_error($error, $data='') - { - $this->errors[$error] = array( - "error_code" => $error, - "data" => $data - ); - } - - /** - * Returns the error(s) that occurred when handling data - * in a format that MyBB can handle. - * - * @return array An array of errors in a MyBB format. - */ - function get_errors() - { - global $lang; - - $errors = array(); - foreach($this->errors as $error) - { - $lang_string = $error['error_code']; - - if(!$lang_string) - { - if($lang->invalid_captcha_verify) - { - $lang_string = 'invalid_captcha_verify'; - } - else - { - $lang_string = 'unknown_error'; - } - } - - if(!isset($lang->$lang_string)) - { - $errors[] = $error['error_code']; - continue; - } - - if(!empty($error['data']) && !is_array($error['data'])) - { - $error['data'] = array($error['data']); - } - - if(is_array($error['data'])) - { - array_unshift($error['data'], $lang->$lang_string); - $errors[] = call_user_func_array(array($lang, "sprintf"), $error['data']); - } - else - { - $errors[] = $lang->$lang_string; - } - } - - return $errors; - } - - /** - * @param array $data - * - * @return string - */ - private function _qsencode($data) - { - $req = ''; - foreach($data as $key => $value) - { - $req .= $key.'='.urlencode(stripslashes($value)).'&'; - } - - $req = substr($req, 0, (strlen($req) - 1)); - - return $req; - } -} diff --git a/html/forums/inc/class_core.php b/html/forums/inc/class_core.php deleted file mode 100644 index c5743c9..0000000 --- a/html/forums/inc/class_core.php +++ /dev/null @@ -1,625 +0,0 @@ - array( - "tid", "pid", "uid", - "eid", "pmid", "fid", - "aid", "rid", "sid", - "vid", "cid", "bid", - "hid", "gid", "mid", - "wid", "lid", "iid", - "did", "qid", "id" - ), - "pos" => array( - "page", "perpage" - ), - "a-z" => array( - "sortby", "order" - ) - ); - - /** - * Variables that are to be ignored from cleansing process - * - * @var array - */ - public $ignore_clean_variables = array(); - - /** - * Using built in shutdown functionality provided by register_shutdown_function for < PHP 5? - * - * @var bool - */ - public $use_shutdown = true; - - /** - * Debug mode? - * - * @var bool - */ - public $debug_mode = false; - - /** - * Binary database fields need to be handled differently - * - * @var array - */ - public $binary_fields = array( - 'adminlog' => array('ipaddress' => true), - 'adminsessions' => array('ip' => true), - 'maillogs' => array('ipaddress' => true), - 'moderatorlog' => array('ipaddress' => true), - 'posts' => array('ipaddress' => true), - 'privatemessages' => array('ipaddress' => true), - 'searchlog' => array('ipaddress' => true), - 'sessions' => array('ip' => true), - 'threadratings' => array('ipaddress' => true), - 'users' => array('regip' => true, 'lastip' => true), - 'spamlog' => array('ipaddress' => true), - ); - - /** - * The cache instance to use. - * - * @var datacache - */ - public $cache; - - /** - * The base URL to assets. - * - * @var string - */ - public $asset_url = null; - /** - * String input constant for use with get_input(). - * - * @see get_input - */ - const INPUT_STRING = 0; - /** - * Integer input constant for use with get_input(). - * - * @see get_input - */ - const INPUT_INT = 1; - /** - * Array input constant for use with get_input(). - * - * @see get_input - */ - const INPUT_ARRAY = 2; - /** - * Float input constant for use with get_input(). - * - * @see get_input - */ - const INPUT_FLOAT = 3; - /** - * Boolean input constant for use with get_input(). - * - * @see get_input - */ - const INPUT_BOOL = 4; - - /** - * Constructor of class. - */ - function __construct() - { - // Set up MyBB - $protected = array("_GET", "_POST", "_SERVER", "_COOKIE", "_FILES", "_ENV", "GLOBALS"); - foreach($protected as $var) - { - if(isset($_POST[$var]) || isset($_GET[$var]) || isset($_COOKIE[$var]) || isset($_FILES[$var])) - { - die("Hacking attempt"); - } - } - - if(defined("IGNORE_CLEAN_VARS")) - { - if(!is_array(IGNORE_CLEAN_VARS)) - { - $this->ignore_clean_variables = array(IGNORE_CLEAN_VARS); - } - else - { - $this->ignore_clean_variables = IGNORE_CLEAN_VARS; - } - } - - // Determine Magic Quotes Status (< PHP 6.0) - if(version_compare(PHP_VERSION, '6.0', '<')) - { - if(@get_magic_quotes_gpc()) - { - $this->magicquotes = 1; - $this->strip_slashes_array($_POST); - $this->strip_slashes_array($_GET); - $this->strip_slashes_array($_COOKIE); - } - @set_magic_quotes_runtime(0); - @ini_set("magic_quotes_gpc", 0); - @ini_set("magic_quotes_runtime", 0); - } - - // Determine input - $this->parse_incoming($_GET); - $this->parse_incoming($_POST); - - if($_SERVER['REQUEST_METHOD'] == "POST") - { - $this->request_method = "post"; - } - else if($_SERVER['REQUEST_METHOD'] == "GET") - { - $this->request_method = "get"; - } - - // If we've got register globals on, then kill them too - if(@ini_get("register_globals") == 1) - { - $this->unset_globals($_POST); - $this->unset_globals($_GET); - $this->unset_globals($_FILES); - $this->unset_globals($_COOKIE); - } - $this->clean_input(); - - $safe_mode_status = @ini_get("safe_mode"); - if($safe_mode_status == 1 || strtolower($safe_mode_status) == 'on') - { - $this->safemode = true; - } - - // Are we running on a development server? - if(isset($_SERVER['MYBB_DEV_MODE']) && $_SERVER['MYBB_DEV_MODE'] == 1) - { - $this->dev_mode = 1; - } - - // Are we running in debug mode? - if(isset($this->input['debug']) && $this->input['debug'] == 1) - { - $this->debug_mode = true; - } - - if(isset($this->input['action']) && $this->input['action'] == "mybb_logo") - { - require_once dirname(__FILE__)."/mybb_group.php"; - output_logo(); - } - - if(isset($this->input['intcheck']) && $this->input['intcheck'] == 1) - { - die("MYBB"); - } - } - - /** - * Parses the incoming variables. - * - * @param array $array The array of incoming variables. - */ - function parse_incoming($array) - { - if(!is_array($array)) - { - return; - } - - foreach($array as $key => $val) - { - $this->input[$key] = $val; - } - } - - /** - * Parses the incoming cookies - * - */ - function parse_cookies() - { - if(!is_array($_COOKIE)) - { - return; - } - - $prefix_length = strlen($this->settings['cookieprefix']); - - foreach($_COOKIE as $key => $val) - { - if($prefix_length && substr($key, 0, $prefix_length) == $this->settings['cookieprefix']) - { - $key = substr($key, $prefix_length); - - // Fixes conflicts with one board having a prefix and another that doesn't on the same domain - // Gives priority to our cookies over others (overwrites them) - if($this->cookies[$key]) - { - unset($this->cookies[$key]); - } - } - - if(empty($this->cookies[$key])) - { - $this->cookies[$key] = $val; - } - } - } - - /** - * Strips slashes out of a given array. - * - * @param array $array The array to strip. - */ - function strip_slashes_array(&$array) - { - foreach($array as $key => $val) - { - if(is_array($array[$key])) - { - $this->strip_slashes_array($array[$key]); - } - else - { - $array[$key] = stripslashes($array[$key]); - } - } - } - - /** - * Unsets globals from a specific array. - * - * @param array $array The array to unset from. - */ - function unset_globals($array) - { - if(!is_array($array)) - { - return; - } - - foreach(array_keys($array) as $key) - { - unset($GLOBALS[$key]); - unset($GLOBALS[$key]); // Double unset to circumvent the zend_hash_del_key_or_index hole in PHP <4.4.3 and <5.1.4 - } - } - - /** - * Cleans predefined input variables. - * - */ - function clean_input() - { - foreach($this->clean_variables as $type => $variables) - { - foreach($variables as $var) - { - // If this variable is in the ignored array, skip and move to next. - if(in_array($var, $this->ignore_clean_variables)) - { - continue; - } - - if(isset($this->input[$var])) - { - switch($type) - { - case "int": - $this->input[$var] = $this->get_input($var, MyBB::INPUT_INT); - break; - case "a-z": - $this->input[$var] = preg_replace("#[^a-z\.\-_]#i", "", $this->get_input($var)); - break; - case "pos": - if(($this->input[$var] < 0 && $var != "page") || ($var == "page" && $this->input[$var] != "last" && $this->input[$var] < 0)) - $this->input[$var] = 0; - break; - } - } - } - } - } - - /** - * Checks the input data type before usage. - * - * @param string $name Variable name ($mybb->input) - * @param int $type The type of the variable to get. Should be one of MyBB::INPUT_INT, MyBB::INPUT_ARRAY or MyBB::INPUT_STRING. - * - * @return int|float|array|string Checked data. Type depending on $type - */ - function get_input($name, $type = MyBB::INPUT_STRING) - { - switch($type) - { - case MyBB::INPUT_ARRAY: - if(!isset($this->input[$name]) || !is_array($this->input[$name])) - { - return array(); - } - return $this->input[$name]; - case MyBB::INPUT_INT: - if(!isset($this->input[$name]) || !is_numeric($this->input[$name])) - { - return 0; - } - return (int)$this->input[$name]; - case MyBB::INPUT_FLOAT: - if(!isset($this->input[$name]) || !is_numeric($this->input[$name])) - { - return 0.0; - } - return (float)$this->input[$name]; - case MyBB::INPUT_BOOL: - if(!isset($this->input[$name]) || !is_scalar($this->input[$name])) - { - return false; - } - return (bool)$this->input[$name]; - default: - if(!isset($this->input[$name]) || !is_scalar($this->input[$name])) - { - return ''; - } - return $this->input[$name]; - } - } - - /** - * Get the path to an asset using the CDN URL if configured. - * - * @param string $path The path to the file. - * @param bool $use_cdn Whether to use the configured CDN options. - * - * @return string The complete URL to the asset. - */ - public function get_asset_url($path = '', $use_cdn = true) - { - $path = (string) $path; - $path = ltrim($path, '/'); - - if(substr($path, 0, 4) != 'http') - { - if(substr($path, 0, 2) == './') - { - $path = substr($path, 2); - } - - if($use_cdn && $this->settings['usecdn'] && !empty($this->settings['cdnurl'])) - { - $base_path = rtrim($this->settings['cdnurl'], '/'); - } - else - { - $base_path = rtrim($this->settings['bburl'], '/'); - } - - $url = $base_path; - - if(!empty($path)) - { - $url = $base_path . '/' . $path; - } - } - else - { - $url = $path; - } - - return $url; - } - - /** - * Triggers a generic error. - * - * @param string $code The error code. - */ - function trigger_generic_error($code) - { - global $error_handler; - - switch($code) - { - case "cache_no_write": - $message = "The data cache directory (cache/) needs to exist and be writable by the web server. Change its permissions so that it is writable (777 on Unix based servers)."; - $error_code = MYBB_CACHE_NO_WRITE; - break; - case "install_directory": - $message = "The install directory (install/) still exists on your server and is not locked. To access MyBB please either remove this directory or create an empty file in it called 'lock'."; - $error_code = MYBB_INSTALL_DIR_EXISTS; - break; - case "board_not_installed": - $message = "Your board has not yet been installed and configured. Please do so before attempting to browse it."; - $error_code = MYBB_NOT_INSTALLED; - break; - case "board_not_upgraded": - $message = "Your board has not yet been upgraded. Please do so before attempting to browse it."; - $error_code = MYBB_NOT_UPGRADED; - break; - case "sql_load_error": - $message = "MyBB was unable to load the SQL extension. Please contact the MyBB Group for support. MyBB Website"; - $error_code = MYBB_SQL_LOAD_ERROR; - break; - case "apc_load_error": - $message = "APC needs to be configured with PHP to use the APC cache support."; - $error_code = MYBB_CACHEHANDLER_LOAD_ERROR; - break; - case "eaccelerator_load_error": - $message = "eAccelerator needs to be configured with PHP to use the eAccelerator cache support."; - $error_code = MYBB_CACHEHANDLER_LOAD_ERROR; - break; - case "memcache_load_error": - $message = "Your server does not have memcache support enabled."; - $error_code = MYBB_CACHEHANDLER_LOAD_ERROR; - break; - case "memcached_load_error": - $message = "Your server does not have memcached support enabled."; - $error_code = MYBB_CACHEHANDLER_LOAD_ERROR; - break; - case "xcache_load_error": - $message = "Xcache needs to be configured with PHP to use the Xcache cache support."; - $error_code = MYBB_CACHEHANDLER_LOAD_ERROR; - break; - default: - $message = "MyBB has experienced an internal error. Please contact the MyBB Group for support. MyBB Website"; - $error_code = MYBB_GENERAL; - } - $error_handler->trigger($message, $error_code); - } - - function __destruct() - { - // Run shutdown function - if(function_exists("run_shutdown")) - { - run_shutdown(); - } - } -} - -/** - * Do this here because the core is used on every MyBB page - */ - -$grouppermignore = array("gid", "type", "title", "description", "namestyle", "usertitle", "stars", "starimage", "image"); -$groupzerogreater = array("pmquota", "maxpmrecipients", "maxreputationsday", "attachquota", "maxemails", "maxwarningsday", "maxposts", "edittimelimit", "canusesigxposts", "maxreputationsperuser", "maxreputationsperthread", "emailfloodtime"); -$displaygroupfields = array("title", "description", "namestyle", "usertitle", "stars", "starimage", "image"); - -// These are fields in the usergroups table that are also forum permission specific. -$fpermfields = array( - 'canview', - 'canviewthreads', - 'candlattachments', - 'canpostthreads', - 'canpostreplys', - 'canpostattachments', - 'canratethreads', - 'caneditposts', - 'candeleteposts', - 'candeletethreads', - 'caneditattachments', - 'canviewdeletionnotice', - 'modposts', - 'modthreads', - 'modattachments', - 'mod_edit_posts', - 'canpostpolls', - 'canvotepolls', - 'cansearch' -); diff --git a/html/forums/inc/class_custommoderation.php b/html/forums/inc/class_custommoderation.php deleted file mode 100644 index 7516ef7..0000000 --- a/html/forums/inc/class_custommoderation.php +++ /dev/null @@ -1,496 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * Used to execute a custom moderation tool - * - */ - -class CustomModeration extends Moderation -{ - /** - * Get info on a tool - * - * @param int $tool_id Tool ID - * @return array|bool Returns tool data (tid, type, name, description) in an array, otherwise boolean false. - */ - function tool_info($tool_id) - { - global $db; - - // Get tool info - $query = $db->simple_select("modtools", "*", 'tid="'.(int)$tool_id.'"'); - $tool = $db->fetch_array($query); - if(!$tool['tid']) - { - return false; - } - else - { - return $tool; - } - } - - /** - * Execute Custom Moderation Tool - * - * @param int $tool_id Tool ID - * @param int|array Thread ID(s) - * @param int|array Post ID(s) - * @return string 'forum' or 'default' indicating where to redirect - */ - function execute($tool_id, $tids=0, $pids=0) - { - global $db; - - // Get tool info - $query = $db->simple_select("modtools", '*', 'tid="'.(int)$tool_id.'"'); - $tool = $db->fetch_array($query); - if(!$tool['tid']) - { - return false; - } - - // Format single tid and pid - if(!is_array($tids)) - { - $tids = array($tids); - } - if(!is_array($pids)) - { - $pids = array($pids); - } - - // Unserialize custom moderation - $post_options = my_unserialize($tool['postoptions']); - $thread_options = my_unserialize($tool['threadoptions']); - - // If the tool type is a post tool, then execute the post moderation - $deleted_thread = 0; - if($tool['type'] == 'p') - { - $deleted_thread = $this->execute_post_moderation($post_options, $pids, $tids); - } - // Always execute thead moderation - $this->execute_thread_moderation($thread_options, $tids); - - // If the thread is deleted, indicate to the calling script to redirect to the forum, and not the nonexistant thread - if($thread_options['deletethread'] == 1 || $deleted_thread === 1) - { - return 'forum'; - } - return 'default'; - } - - /** - * Execute Inline Post Moderation - * - * @param array $post_options Moderation information - * @param array $pids Post IDs - * @param array|int $tid Thread IDs (in order of dateline ascending). Only the first one will be used - * @return boolean true - */ - function execute_post_moderation($post_options, $pids, $tid) - { - global $db, $mybb, $lang; - - if(is_array($tid)) - { - $tid = (int)$tid[0]; // There's only 1 thread when doing inline post moderation - // The thread chosen is the first thread in the array of tids. - // It is recommended that this be the tid of the oldest post - } - - // Get the information about thread - $thread = get_thread($tid); - - // If deleting posts, only do that - if($post_options['deleteposts'] == 1) - { - foreach($pids as $pid) - { - $this->delete_post($pid); - } - - $delete_tids = array(); - $imploded_pids = implode(",", array_map("intval", $pids)); - $query = $db->simple_select("threads", "tid", "firstpost IN ({$imploded_pids})"); - while($threadid = $db->fetch_field($query, "tid")) - { - $delete_tids[] = $threadid; - } - if(!empty($delete_tids)) - { - foreach($delete_tids as $delete_tid) - { - $this->delete_thread($delete_tid); - } - // return true here so the code in execute() above knows to redirect to the forum - return true; - } - } - else - { - if($post_options['mergeposts'] == 1) // Merge posts - { - $this->merge_posts($pids); - } - - if($post_options['approveposts'] == 'approve') // Approve posts - { - $this->approve_posts($pids); - } - elseif($post_options['approveposts'] == 'unapprove') // Unapprove posts - { - $this->unapprove_posts($pids); - } - elseif($post_options['approveposts'] == 'toggle') // Toggle post visibility - { - $this->toggle_post_visibility($pids); - } - - if($post_options['softdeleteposts'] == 'softdelete') // Soft delete posts - { - $this->soft_delete_posts($pids); - } - elseif($post_options['softdeleteposts'] == 'restore') // Restore posts - { - $this->restore_posts($pids); - } - elseif($post_options['softdeleteposts'] == 'toggle') // Toggle post visibility - { - $this->toggle_post_softdelete($pids); - } - - if($post_options['splitposts'] > 0 || $post_options['splitposts'] == -2) // Split posts - { - $query = $db->simple_select("posts", "COUNT(*) AS totalposts", "tid='{$tid}'"); - $count = $db->fetch_array($query); - - if($count['totalposts'] == 1) - { - error($lang->error_cantsplitonepost); - } - - if($count['totalposts'] == count($pids)) - { - error($lang->error_cantsplitall); - } - - if($post_options['splitposts'] == -2) - { - $post_options['splitposts'] = $thread['fid']; - } - if(empty($post_options['splitpostsnewsubject'])) - { - // Enter in a subject if a predefined one does not exist. - $post_options['splitpostsnewsubject'] = "{$lang->split_thread_subject} {$thread['subject']}"; - } - $new_subject = str_ireplace('{subject}', $thread['subject'], $post_options['splitpostsnewsubject']); - $new_tid = $this->split_posts($pids, $tid, $post_options['splitposts'], $new_subject); - if($post_options['splitpostsclose'] == 'close') // Close new thread - { - $this->close_threads($new_tid); - } - if($post_options['splitpostsstick'] == 'stick') // Stick new thread - { - $this->stick_threads($new_tid); - } - if($post_options['splitpostsunapprove'] == 'unapprove') // Unapprove new thread - { - $this->unapprove_threads($new_tid, $thread['fid']); - } - if($post_options['splitthreadprefix'] != '0') - { - $this->apply_thread_prefix($new_tid, $post_options['splitthreadprefix']); // Add thread prefix to new thread - } - if(!empty($post_options['splitpostsaddreply'])) // Add reply to new thread - { - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("insert"); - - if(empty($post_options['splitpostsreplysubject'])) - { - $post_options['splitpostsreplysubject'] = 'RE: '.$new_subject; - } - else - { - $post_options['splitpostsreplysubject'] = str_ireplace('{username}', $mybb->user['username'], $post_options['splitpostsreplysubject']); - $post_options['splitpostsreplysubject'] = str_ireplace('{subject}', $new_subject, $post_options['splitpostsreplysubject']); - } - - // Set the post data that came from the input to the $post array. - $post = array( - "tid" => $new_tid, - "fid" => $post_options['splitposts'], - "subject" => $post_options['splitpostsreplysubject'], - "uid" => $mybb->user['uid'], - "username" => $mybb->user['username'], - "message" => $post_options['splitpostsaddreply'], - "ipaddress" => my_inet_pton(get_ip()), - ); - // Set up the post options from the input. - $post['options'] = array( - "signature" => 1, - "emailnotify" => 0, - "disablesmilies" => 0 - ); - - $posthandler->set_data($post); - - if($posthandler->validate_post($post)) - { - $posthandler->insert_post($post); - } - } - } - } - return true; - } - - /** - * Execute Normal and Inline Thread Moderation - * - * @param array $thread_options Moderation information - * @param array Thread IDs. Only the first one will be used, but it needs to be an array - * @return boolean true - */ - function execute_thread_moderation($thread_options, $tids) - { - global $db, $mybb; - - $tid = (int)$tids[0]; // Take the first thread to get thread data from - $query = $db->simple_select("threads", 'fid', "tid='$tid'"); - $thread = $db->fetch_array($query); - - // If deleting threads, only do that - if($thread_options['deletethread'] == 1) - { - foreach($tids as $tid) - { - $this->delete_thread($tid); - } - } - else - { - if($thread_options['mergethreads'] == 1 && count($tids) > 1) // Merge Threads (ugly temp code until find better fix) - { - $tid_list = implode(',', $tids); - $options = array('order_by' => 'dateline', 'order_dir' => 'DESC'); - $query = $db->simple_select("threads", 'tid, subject', "tid IN ($tid_list)", $options); // Select threads from newest to oldest - $last_tid = 0; - while($tid = $db->fetch_array($query)) - { - if($last_tid != 0) - { - $this->merge_threads($last_tid, $tid['tid'], $tid['subject']); // And keep merging them until we get down to one thread. - } - $last_tid = $tid['tid']; - } - } - if($thread_options['deletepoll'] == 1) // Delete poll - { - foreach($tids as $tid) - { - $this->delete_poll($tid); - } - } - if($thread_options['removeredirects'] == 1) // Remove redirects - { - foreach($tids as $tid) - { - $this->remove_redirects($tid); - } - } - - if($thread_options['removesubscriptions'] == 1) // Remove thread subscriptions - { - $this->remove_thread_subscriptions($tids, true); - } - - if($thread_options['approvethread'] == 'approve') // Approve thread - { - $this->approve_threads($tids, $thread['fid']); - } - elseif($thread_options['approvethread'] == 'unapprove') // Unapprove thread - { - $this->unapprove_threads($tids, $thread['fid']); - } - elseif($thread_options['approvethread'] == 'toggle') // Toggle thread visibility - { - $this->toggle_thread_visibility($tids, $thread['fid']); - } - - if($thread_options['softdeletethread'] == 'softdelete') // Soft delete thread - { - $this->soft_delete_threads($tids); - } - elseif($thread_options['softdeletethread'] == 'restore') // Restore thread - { - $this->restore_threads($tids); - } - elseif($thread_options['softdeletethread'] == 'toggle') // Toggle thread visibility - { - $this->toggle_thread_softdelete($tids); - } - - if($thread_options['openthread'] == 'open') // Open thread - { - $this->open_threads($tids); - } - elseif($thread_options['openthread'] == 'close') // Close thread - { - $this->close_threads($tids); - } - elseif($thread_options['openthread'] == 'toggle') // Toggle thread visibility - { - $this->toggle_thread_status($tids); - } - - if($thread_options['stickthread'] == 'stick') // Stick thread - { - $this->stick_threads($tids); - } - elseif($thread_options['stickthread'] == 'unstick') // Unstick thread - { - $this->unstick_threads($tids); - } - elseif($thread_options['stickthread'] == 'toggle') // Toggle thread importance - { - $this->toggle_thread_importance($tids); - } - - if($thread_options['threadprefix'] != '-1') - { - $this->apply_thread_prefix($tids, $thread_options['threadprefix']); // Update thread prefix - } - - if(my_strtolower(trim($thread_options['newsubject'])) != '{subject}') // Update thread subjects - { - $this->change_thread_subject($tids, $thread_options['newsubject']); - } - if(!empty($thread_options['addreply'])) // Add reply to thread - { - $tid_list = implode(',', $tids); - $query = $db->simple_select("threads", 'uid, fid, subject, tid, firstpost, closed', "tid IN ($tid_list) AND closed NOT LIKE 'moved|%'"); - require_once MYBB_ROOT."inc/datahandlers/post.php"; - - // Loop threads adding a reply to each one - while($thread = $db->fetch_array($query)) - { - $posthandler = new PostDataHandler("insert"); - - if(empty($thread_options['replysubject'])) - { - $new_subject = 'RE: '.$thread['subject']; - } - else - { - $new_subject = str_ireplace('{username}', $mybb->user['username'], $thread_options['replysubject']); - $new_subject = str_ireplace('{subject}', $thread['subject'], $new_subject); - } - - // Set the post data that came from the input to the $post array. - $post = array( - "tid" => $thread['tid'], - "replyto" => $thread['firstpost'], - "fid" => $thread['fid'], - "subject" => $new_subject, - "uid" => $mybb->user['uid'], - "username" => $mybb->user['username'], - "message" => $thread_options['addreply'], - "ipaddress" => my_inet_pton(get_ip()), - ); - - // Set up the post options from the input. - $post['options'] = array( - "signature" => 1, - "emailnotify" => 0, - "disablesmilies" => 0 - ); - - if($thread['closed'] == 1) - { - // Keep this thread closed - $post['modoptions']['closethread'] = 1; - } - - $posthandler->set_data($post); - if($posthandler->validate_post($post)) - { - $posthandler->insert_post($post); - } - } - } - if($thread_options['movethread'] > 0 && $thread_options['movethread'] != $thread['fid']) // Move thread - { - if($thread_options['movethreadredirect'] == 1) // Move Thread with redirect - { - $time = TIME_NOW + ($thread_options['movethreadredirectexpire'] * 86400); - foreach($tids as $tid) - { - $this->move_thread($tid, $thread_options['movethread'], 'redirect', $time); - } - } - else // Normal move - { - $this->move_threads($tids, $thread_options['movethread']); - } - } - if($thread_options['copythread'] > 0 || $thread_options['copythread'] == -2) // Copy thread - { - if($thread_options['copythread'] == -2) - { - $thread_options['copythread'] = $thread['fid']; - } - foreach($tids as $tid) - { - $new_tid = $this->move_thread($tid, $thread_options['copythread'], 'copy'); - } - } - if(!empty($thread_options['recountrebuild'])) - { - require_once MYBB_ROOT.'/inc/functions_rebuild.php'; - - foreach($tids as $tid) - { - rebuild_thread_counters($tid); - } - } - } - - // Do we have a PM subject and PM message? - if(isset($thread_options['pm_subject']) && $thread_options['pm_subject'] != '' && isset($thread_options['pm_message']) && $thread_options['pm_message'] != '') - { - $tid_list = implode(',', $tids); - - // For each thread, we send a PM to the author - $query = $db->simple_select("threads", 'uid', "tid IN ($tid_list)"); - while($uid = $db->fetch_field($query, 'uid')) - { - // Let's send our PM - $pm = array( - 'subject' => $thread_options['pm_subject'], - 'message' => $thread_options['pm_message'], - 'touid' => $uid - ); - send_pm($pm, $mybb->user['uid'], 1); - } - } - - return true; - } -} diff --git a/html/forums/inc/class_datacache.php b/html/forums/inc/class_datacache.php deleted file mode 100644 index 074eb51..0000000 --- a/html/forums/inc/class_datacache.php +++ /dev/null @@ -1,1338 +0,0 @@ -config['cache_store']) - { - // Disk cache - case "files": - require_once MYBB_ROOT."/inc/cachehandlers/disk.php"; - $this->handler = new diskCacheHandler(); - break; - // Memcache cache - case "memcache": - require_once MYBB_ROOT."/inc/cachehandlers/memcache.php"; - $this->handler = new memcacheCacheHandler(); - break; - // Memcached cache - case "memcached": - require_once MYBB_ROOT."/inc/cachehandlers/memcached.php"; - $this->handler = new memcachedCacheHandler(); - break; - // eAccelerator cache - case "eaccelerator": - require_once MYBB_ROOT."/inc/cachehandlers/eaccelerator.php"; - $this->handler = new eacceleratorCacheHandler(); - break; - // Xcache cache - case "xcache": - require_once MYBB_ROOT."/inc/cachehandlers/xcache.php"; - $this->handler = new xcacheCacheHandler(); - break; - // APC cache - case "apc": - require_once MYBB_ROOT."/inc/cachehandlers/apc.php"; - $this->handler = new apcCacheHandler(); - break; - } - - if($this->handler instanceof CacheHandlerInterface) - { - if(!$this->handler->connect()) - { - $this->handler = null; - } - } - else - { - // Database cache - $query = $db->simple_select("datacache", "title,cache"); - while($data = $db->fetch_array($query)) - { - $this->cache[$data['title']] = unserialize($data['cache']); - } - } - } - - /** - * Read cache from files or db. - * - * @param string $name The cache component to read. - * @param boolean $hard If true, cannot be overwritten during script execution. - * @return mixed - */ - function read($name, $hard=false) - { - global $db, $mybb; - - // Already have this cache and we're not doing a hard refresh? Return cached copy - if(isset($this->cache[$name]) && $hard == false) - { - return $this->cache[$name]; - } - // If we're not hard refreshing, and this cache doesn't exist, return false - // It would have been loaded pre-global if it did exist anyway... - else if($hard == false && !($this->handler instanceof CacheHandlerInterface)) - { - return false; - } - - if($this->handler instanceof CacheHandlerInterface) - { - get_execution_time(); - - $data = $this->handler->fetch($name); - - $call_time = get_execution_time(); - $this->call_time += $call_time; - $this->call_count++; - - if($mybb->debug_mode) - { - $hit = true; - if($data === false) - { - $hit = false; - } - $this->debug_call('read:'.$name, $call_time, $hit); - } - - // No data returned - cache gone bad? - if($data === false) - { - // Fetch from database - $query = $db->simple_select("datacache", "title,cache", "title='".$db->escape_string($name)."'"); - $cache_data = $db->fetch_array($query); - $data = unserialize($cache_data['cache']); - - // Update cache for handler - get_execution_time(); - - $hit = $this->handler->put($name, $data); - - $call_time = get_execution_time(); - $this->call_time += $call_time; - $this->call_count++; - - if($mybb->debug_mode) - { - $this->debug_call('set:'.$name, $call_time, $hit); - } - } - } - // Else, using internal database cache - else - { - $query = $db->simple_select("datacache", "title,cache", "title='$name'"); - $cache_data = $db->fetch_array($query); - - if(!$cache_data['title']) - { - $data = false; - } - else - { - $data = unserialize($cache_data['cache']); - } - } - - // Cache locally - $this->cache[$name] = $data; - - if($data !== false) - { - return $data; - } - else - { - return false; - } - } - - /** - * Update cache contents. - * - * @param string $name The cache content identifier. - * @param string $contents The cache content. - */ - function update($name, $contents) - { - global $db, $mybb; - - $this->cache[$name] = $contents; - - // We ALWAYS keep a running copy in the db just incase we need it - $dbcontents = $db->escape_string(serialize($contents)); - - $replace_array = array( - "title" => $db->escape_string($name), - "cache" => $dbcontents - ); - $db->replace_query("datacache", $replace_array, "", false); - - // Do we have a cache handler we're using? - if($this->handler instanceof CacheHandlerInterface) - { - get_execution_time(); - - $hit = $this->handler->put($name, $contents); - - $call_time = get_execution_time(); - $this->call_time += $call_time; - $this->call_count++; - - if($mybb->debug_mode) - { - $this->debug_call('update:'.$name, $call_time, $hit); - } - } - } - - /** - * Delete cache contents. - * Originally from frostschutz's PluginLibrary - * github.com/frostschutz - * - * @param string $name Cache name or title - * @param boolean $greedy To delete a cache starting with name_ - */ - function delete($name, $greedy = false) - { - global $db, $mybb, $cache; - - // Prepare for database query. - $dbname = $db->escape_string($name); - $where = "title = '{$dbname}'"; - - // Delete on-demand or handler cache - if($this->handler instanceof CacheHandlerInterface) - { - get_execution_time(); - - $hit = $this->handler->delete($name); - - $call_time = get_execution_time(); - $this->call_time += $call_time; - $this->call_count++; - - if($mybb->debug_mode) - { - $this->debug_call('delete:'.$name, $call_time, $hit); - } - } - - // Greedy? - if($greedy) - { - $name .= '_'; - $names = array(); - $keys = array_keys($cache->cache); - - foreach($keys as $key) - { - if(strpos($key, $name) === 0) - { - $names[$key] = 0; - } - } - - $ldbname = strtr($dbname, - array( - '%' => '=%', - '=' => '==', - '_' => '=_' - ) - ); - - $where .= " OR title LIKE '{$ldbname}=_%' ESCAPE '='"; - - if($this->handler instanceof CacheHandlerInterface) - { - $query = $db->simple_select("datacache", "title", $where); - - while($row = $db->fetch_array($query)) - { - $names[$row['title']] = 0; - } - - // ...from the filesystem... - $start = strlen(MYBB_ROOT."cache/"); - foreach((array)@glob(MYBB_ROOT."cache/{$name}*.php") as $filename) - { - if($filename) - { - $filename = substr($filename, $start, strlen($filename)-4-$start); - $names[$filename] = 0; - } - } - - foreach($names as $key => $val) - { - get_execution_time(); - - $hit = $this->handler->delete($key); - - $call_time = get_execution_time(); - $this->call_time += $call_time; - $this->call_count++; - - if($mybb->debug_mode) - { - $this->debug_call('delete:'.$name, $call_time, $hit); - } - } - } - } - - // Delete database cache - $db->delete_query("datacache", $where); - } - - /** - * Debug a cache call to a non-database cache handler - * - * @param string $string The cache key - * @param string $qtime The time it took to perform the call. - * @param boolean $hit Hit or miss status - */ - function debug_call($string, $qtime, $hit) - { - global $mybb, $plugins; - - $debug_extra = ''; - if($plugins->current_hook) - { - $debug_extra = "
    (Plugin Hook: {$plugins->current_hook})
    "; - } - - if($hit) - { - $hit_status = 'HIT'; - } - else - { - $hit_status = 'MISS'; - } - - $cache_data = explode(':', $string); - $cache_method = $cache_data[0]; - $cache_key = $cache_data[1]; - - $this->cache_debug = " - - - - - - - - - -
    {$debug_extra}
    #{$this->call_count} - ".ucfirst($cache_method)." Call
    ({$mybb->config['cache_store']}) [{$hit_status}] ".htmlspecialchars_uni($cache_key)."
    Call Time: ".format_time_duration($qtime)."
    -
    \n"; - - $this->calllist[$this->call_count]['key'] = $string; - $this->calllist[$this->call_count]['time'] = $qtime; - } - - /** - * Select the size of the cache - * - * @param string $name The name of the cache - * @return integer the size of the cache - */ - function size_of($name='') - { - global $db; - - if($this->handler instanceof CacheHandlerInterface) - { - $size = $this->handler->size_of($name); - if(!$size) - { - if($name) - { - $query = $db->simple_select("datacache", "cache", "title='{$name}'"); - return strlen($db->fetch_field($query, "cache")); - } - else - { - return $db->fetch_size("datacache"); - } - } - else - { - return $size; - } - } - // Using MySQL as cache - else - { - if($name) - { - $query = $db->simple_select("datacache", "cache", "title='{$name}'"); - return strlen($db->fetch_field($query, "cache")); - } - else - { - return $db->fetch_size("datacache"); - } - } - } - - /** - * Update the MyBB version in the cache. - * - */ - function update_version() - { - global $mybb; - - $version = array( - "version" => $mybb->version, - "version_code" => $mybb->version_code - ); - - $this->update("version", $version); - } - - /** - * Update the attachment type cache. - * - */ - function update_attachtypes() - { - global $db; - - $types = array(); - - $query = $db->simple_select('attachtypes', '*', 'enabled=1'); - while($type = $db->fetch_array($query)) - { - $type['extension'] = my_strtolower($type['extension']); - $types[$type['extension']] = $type; - } - - $this->update("attachtypes", $types); - } - - /** - * Update the smilies cache. - * - */ - function update_smilies() - { - global $db; - - $smilies = array(); - - $query = $db->simple_select("smilies", "*", "", array('order_by' => 'disporder', 'order_dir' => 'ASC')); - while($smilie = $db->fetch_array($query)) - { - $smilies[$smilie['sid']] = $smilie; - } - - $this->update("smilies", $smilies); - } - - /** - * Update the posticon cache. - * - */ - function update_posticons() - { - global $db; - - $icons = array(); - - $query = $db->simple_select("icons", "iid, name, path"); - while($icon = $db->fetch_array($query)) - { - $icons[$icon['iid']] = $icon; - } - - $this->update("posticons", $icons); - } - - /** - * Update the badwords cache. - * - */ - function update_badwords() - { - global $db; - - $badwords = array(); - - $query = $db->simple_select("badwords", "*"); - while($badword = $db->fetch_array($query)) - { - $badwords[$badword['bid']] = $badword; - } - - $this->update("badwords", $badwords); - } - - /** - * Update the usergroups cache. - * - */ - function update_usergroups() - { - global $db; - - $query = $db->simple_select("usergroups"); - - $gs = array(); - while($g = $db->fetch_array($query)) - { - $gs[$g['gid']] = $g; - } - - $this->update("usergroups", $gs); - } - - /** - * Update the forum permissions cache. - * - * @return bool When failed, returns false. - */ - function update_forumpermissions() - { - global $forum_cache, $db; - - $this->built_forum_permissions = array(0); - - // Get our forum list - cache_forums(true); - if(!is_array($forum_cache)) - { - return false; - } - - reset($forum_cache); - $fcache = array(); - - // Resort in to the structure we require - foreach($forum_cache as $fid => $forum) - { - $this->forum_permissions_forum_cache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - - // Sort children - foreach($fcache as $pid => $value) - { - ksort($fcache[$pid]); - } - ksort($fcache); - - // Fetch forum permissions from the database - $query = $db->simple_select("forumpermissions"); - while($forum_permission = $db->fetch_array($query)) - { - $this->forum_permissions[$forum_permission['fid']][$forum_permission['gid']] = $forum_permission; - } - - $this->build_forum_permissions(); - $this->update("forumpermissions", $this->built_forum_permissions); - - return true; - } - - /** - * Build the forum permissions array - * - * @access private - * @param array $permissions An optional permissions array. - * @param int $pid An optional permission id. - */ - private function build_forum_permissions($permissions=array(), $pid=0) - { - $usergroups = array_keys($this->read("usergroups", true)); - if($this->forum_permissions_forum_cache[$pid]) - { - foreach($this->forum_permissions_forum_cache[$pid] as $main) - { - foreach($main as $forum) - { - $perms = $permissions; - foreach($usergroups as $gid) - { - if($this->forum_permissions[$forum['fid']][$gid]) - { - $perms[$gid] = $this->forum_permissions[$forum['fid']][$gid]; - } - if($perms[$gid]) - { - $perms[$gid]['fid'] = $forum['fid']; - $this->built_forum_permissions[$forum['fid']][$gid] = $perms[$gid]; - } - } - $this->build_forum_permissions($perms, $forum['fid']); - } - } - } - } - - /** - * Update the stats cache (kept for the sake of being able to rebuild this cache via the cache interface) - * - */ - function update_stats() - { - require_once MYBB_ROOT."inc/functions_rebuild.php"; - rebuild_stats(); - } - - /** - * Update the statistics cache - * - */ - function update_statistics() - { - global $db; - - $query = $db->simple_select('users', 'uid, username, referrals', 'referrals>0', array('order_by' => 'referrals', 'order_dir' => 'DESC', 'limit' => 1)); - $topreferrer = $db->fetch_array($query); - - $timesearch = TIME_NOW - 86400; - switch($db->type) - { - case 'pgsql': - $group_by = $db->build_fields_string('users', 'u.'); - break; - default: - $group_by = 'p.uid'; - break; - } - - $query = $db->query(' - SELECT u.uid, u.username, COUNT(pid) AS poststoday - FROM '.TABLE_PREFIX.'posts p - LEFT JOIN '.TABLE_PREFIX.'users u ON (p.uid=u.uid) - WHERE p.dateline>'.$timesearch.' - GROUP BY '.$group_by.' ORDER BY poststoday DESC - LIMIT 1 - '); - $topposter = $db->fetch_array($query); - - $query = $db->simple_select('users', 'COUNT(uid) AS posters', 'postnum>0'); - $posters = $db->fetch_field($query, 'posters'); - - $statistics = array( - 'time' => TIME_NOW, - 'top_referrer' => (array)$topreferrer, - 'top_poster' => (array)$topposter, - 'posters' => $posters - ); - - $this->update('statistics', $statistics); - } - - /** - * Update the moderators cache. - * - * @return bool Returns false on failure - */ - function update_moderators() - { - global $forum_cache, $db; - - $this->built_moderators = array(0); - - // Get our forum list - cache_forums(true); - if(!is_array($forum_cache)) - { - return false; - } - - reset($forum_cache); - $fcache = array(); - - // Resort in to the structure we require - foreach($forum_cache as $fid => $forum) - { - $this->moderators_forum_cache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - - // Sort children - foreach($fcache as $pid => $value) - { - ksort($fcache[$pid]); - } - ksort($fcache); - - $this->moderators = array(); - - // Fetch moderators from the database - $query = $db->query(" - SELECT m.*, u.username, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."moderators m - LEFT JOIN ".TABLE_PREFIX."users u ON (m.id=u.uid) - WHERE m.isgroup = '0' - ORDER BY u.username - "); - while($moderator = $db->fetch_array($query)) - { - $this->moderators[$moderator['fid']]['users'][$moderator['id']] = $moderator; - } - - if(!function_exists("sort_moderators_by_usernames")) - { - function sort_moderators_by_usernames($a, $b) - { - return strcasecmp($a['username'], $b['username']); - } - } - - //Fetch moderating usergroups from the database - $query = $db->query(" - SELECT m.*, u.title - FROM ".TABLE_PREFIX."moderators m - LEFT JOIN ".TABLE_PREFIX."usergroups u ON (m.id=u.gid) - WHERE m.isgroup = '1' - ORDER BY u.title - "); - while($moderator = $db->fetch_array($query)) - { - $this->moderators[$moderator['fid']]['usergroups'][$moderator['id']] = $moderator; - } - - if(is_array($this->moderators)) - { - foreach(array_keys($this->moderators) as $fid) - { - uasort($this->moderators[$fid], 'sort_moderators_by_usernames'); - } - } - - $this->build_moderators(); - - $this->update("moderators", $this->built_moderators); - - return true; - } - - /** - * Update the users awaiting activation cache. - * - */ - function update_awaitingactivation() - { - global $db; - - $query = $db->simple_select('users', 'COUNT(uid) AS awaitingusers', 'usergroup=\'5\''); - $awaitingusers = (int)$db->fetch_field($query, 'awaitingusers'); - - $data = array( - 'users' => $awaitingusers, - 'time' => TIME_NOW - ); - - $this->update('awaitingactivation', $data); - } - - /** - * Build the moderators array - * - * @access private - * @param array $moderators An optional moderators array (moderators of the parent forum for example). - * @param int $pid An optional parent ID. - */ - private function build_moderators($moderators=array(), $pid=0) - { - if(isset($this->moderators_forum_cache[$pid])) - { - foreach($this->moderators_forum_cache[$pid] as $main) - { - foreach($main as $forum) - { - $forum_mods = ''; - if(count($moderators)) - { - $forum_mods = $moderators; - } - // Append - local settings override that of a parent - array_merge works here - if(isset($this->moderators[$forum['fid']])) - { - if(is_array($forum_mods) && count($forum_mods)) - { - $forum_mods = array_merge($forum_mods, $this->moderators[$forum['fid']]); - } - else - { - $forum_mods = $this->moderators[$forum['fid']]; - } - } - $this->built_moderators[$forum['fid']] = $forum_mods; - $this->build_moderators($forum_mods, $forum['fid']); - } - } - } - } - - /** - * Update the forums cache. - * - */ - function update_forums() - { - global $db; - - $forums = array(); - - // Things we don't want to cache - $exclude = array("unapprovedthreads", "unapprovedposts", "threads", "posts", "lastpost", "lastposter", "lastposttid", "lastposteruid", "lastpostsubject", "deletedthreads", "deletedposts"); - - $query = $db->simple_select("forums", "*", "", array('order_by' => 'pid,disporder')); - while($forum = $db->fetch_array($query)) - { - foreach($forum as $key => $val) - { - if(in_array($key, $exclude)) - { - unset($forum[$key]); - } - } - $forums[$forum['fid']] = $forum; - } - - $this->update("forums", $forums); - } - - /** - * Update usertitles cache. - * - */ - function update_usertitles() - { - global $db; - - $usertitles = array(); - $query = $db->simple_select("usertitles", "utid, posts, title, stars, starimage", "", array('order_by' => 'posts', 'order_dir' => 'DESC')); - while($usertitle = $db->fetch_array($query)) - { - $usertitles[] = $usertitle; - } - - $this->update("usertitles", $usertitles); - } - - /** - * Update reported content cache. - * - */ - function update_reportedcontent() - { - global $db, $mybb; - - $query = $db->simple_select("reportedcontent", "COUNT(rid) AS unreadcount", "reportstatus='0'"); - $num = $db->fetch_array($query); - - $query = $db->simple_select("reportedcontent", "COUNT(rid) AS reportcount"); - $total = $db->fetch_array($query); - - $query = $db->simple_select("reportedcontent", "dateline", "reportstatus='0'", array('order_by' => 'dateline', 'order_dir' => 'DESC')); - $latest = $db->fetch_array($query); - - $reports = array( - "unread" => $num['unreadcount'], - "total" => $total['reportcount'], - "lastdateline" => $latest['dateline'] - ); - - $this->update("reportedcontent", $reports); - } - - /** - * Update mycode cache. - * - */ - function update_mycode() - { - global $db; - - $mycodes = array(); - $query = $db->simple_select("mycode", "regex, replacement", "active=1", array('order_by' => 'parseorder')); - while($mycode = $db->fetch_array($query)) - { - $mycodes[] = $mycode; - } - - $this->update("mycode", $mycodes); - } - - /** - * Update the mailqueue cache - * - * @param int $last_run - * @param int $lock_time - */ - function update_mailqueue($last_run=0, $lock_time=0) - { - global $db; - - $query = $db->simple_select("mailqueue", "COUNT(*) AS queue_size"); - $queue_size = $db->fetch_field($query, "queue_size"); - - $mailqueue = $this->read("mailqueue"); - if(!is_array($mailqueue)) - { - $mailqueue = array(); - } - $mailqueue['queue_size'] = $queue_size; - if($last_run > 0) - { - $mailqueue['last_run'] = $last_run; - } - $mailqueue['locked'] = $lock_time; - - $this->update("mailqueue", $mailqueue); - } - - /** - * Update update_check cache (dummy function used by upgrade/install scripts) - */ - function update_update_check() - { - $update_cache = array( - "dateline" => TIME_NOW - ); - - $this->update("update_check", $update_cache); - } - - /** - * Update default_theme cache - */ - function update_default_theme() - { - global $db; - - $query = $db->simple_select("themes", "name, tid, properties, stylesheets", "def='1'", array('limit' => 1)); - $theme = $db->fetch_array($query); - $this->update("default_theme", $theme); - } - - /** - * Updates the tasks cache saving the next run time - */ - function update_tasks() - { - global $db; - - $query = $db->simple_select("tasks", "nextrun", "enabled=1", array("order_by" => "nextrun", "order_dir" => "asc", "limit" => 1)); - $next_task = $db->fetch_array($query); - - $task_cache = $this->read("tasks"); - if(!is_array($task_cache)) - { - $task_cache = array(); - } - $task_cache['nextrun'] = $next_task['nextrun']; - - if(!$task_cache['nextrun']) - { - $task_cache['nextrun'] = TIME_NOW+3600; - } - - $this->update("tasks", $task_cache); - } - - /** - * Updates the banned IPs cache - */ - function update_bannedips() - { - global $db; - - $banned_ips = array(); - $query = $db->simple_select("banfilters", "fid,filter", "type=1"); - while($banned_ip = $db->fetch_array($query)) - { - $banned_ips[$banned_ip['fid']] = $banned_ip; - } - $this->update("bannedips", $banned_ips); - } - - /** - * Updates the banned emails cache - */ - function update_bannedemails() - { - global $db; - - $banned_emails = array(); - $query = $db->simple_select("banfilters", "fid, filter", "type = '3'"); - - while($banned_email = $db->fetch_array($query)) - { - $banned_emails[$banned_email['fid']] = $banned_email; - } - - $this->update("bannedemails", $banned_emails); - } - - /** - * Updates the search engine spiders cache - */ - function update_spiders() - { - global $db; - - $spiders = array(); - $query = $db->simple_select("spiders", "sid, name, useragent, usergroup", "", array("order_by" => "LENGTH(useragent)", "order_dir" => "DESC")); - while($spider = $db->fetch_array($query)) - { - $spiders[$spider['sid']] = $spider; - } - $this->update("spiders", $spiders); - } - - function update_most_replied_threads() - { - global $db, $mybb; - - $threads = array(); - - $query = $db->simple_select("threads", "tid, subject, replies, fid, uid", "visible='1'", array('order_by' => 'replies', 'order_dir' => 'DESC', 'limit_start' => 0, 'limit' => $mybb->settings['statslimit'])); - while($thread = $db->fetch_array($query)) - { - $threads[] = $thread; - } - - $this->update("most_replied_threads", $threads); - } - - function update_most_viewed_threads() - { - global $db, $mybb; - - $threads = array(); - - $query = $db->simple_select("threads", "tid, subject, views, fid, uid", "visible='1'", array('order_by' => 'views', 'order_dir' => 'DESC', 'limit_start' => 0, 'limit' => $mybb->settings['statslimit'])); - while($thread = $db->fetch_array($query)) - { - $threads[] = $thread; - } - - $this->update("most_viewed_threads", $threads); - } - - function update_banned() - { - global $db; - - $bans = array(); - - $query = $db->simple_select("banned"); - while($ban = $db->fetch_array($query)) - { - $bans[$ban['uid']] = $ban; - } - - $this->update("banned", $bans); - } - - function update_birthdays() - { - global $db; - - $birthdays = array(); - - // Get today, yesterday, and tomorrow's time (for different timezones) - $bdaytime = TIME_NOW; - $bdaydate = my_date("j-n", $bdaytime, '', 0); - $bdaydatetomorrow = my_date("j-n", ($bdaytime+86400), '', 0); - $bdaydateyesterday = my_date("j-n", ($bdaytime-86400), '', 0); - - $query = $db->simple_select("users", "uid, username, usergroup, displaygroup, birthday, birthdayprivacy", "birthday LIKE '$bdaydate-%' OR birthday LIKE '$bdaydateyesterday-%' OR birthday LIKE '$bdaydatetomorrow-%'"); - while($bday = $db->fetch_array($query)) - { - // Pop off the year from the birthday because we don't need it. - $bday['bday'] = explode('-', $bday['birthday']); - array_pop($bday['bday']); - $bday['bday'] = implode('-', $bday['bday']); - - if($bday['birthdayprivacy'] != 'all') - { - ++$birthdays[$bday['bday']]['hiddencount']; - continue; - } - - // We don't need any excess caleries in the cache - unset($bday['birthdayprivacy']); - - $birthdays[$bday['bday']]['users'][] = $bday; - } - - $this->update("birthdays", $birthdays); - } - - function update_groupleaders() - { - global $db; - - $groupleaders = array(); - - $query = $db->simple_select("groupleaders"); - while($groupleader = $db->fetch_array($query)) - { - $groupleaders[$groupleader['uid']][] = $groupleader; - } - - $this->update("groupleaders", $groupleaders); - } - - function update_threadprefixes() - { - global $db; - - $prefixes = array(); - $query = $db->simple_select("threadprefixes", "*", "", array('order_by' => 'prefix', 'order_dir' => 'ASC')); - - while($prefix = $db->fetch_array($query)) - { - $prefixes[$prefix['pid']] = $prefix; - } - - $this->update("threadprefixes", $prefixes); - } - - function update_forumsdisplay() - { - global $db; - - $fd_statistics = array(); - - $time = TIME_NOW; // Look for announcements that don't end, or that are ending some time in the future - $query = $db->simple_select("announcements", "fid", "enddate = '0' OR enddate > '{$time}'", array("order_by" => "aid")); - - if($db->num_rows($query)) - { - while($forum = $db->fetch_array($query)) - { - if(!isset($fd_statistics[$forum['fid']]['announcements'])) - { - $fd_statistics[$forum['fid']]['announcements'] = 1; - } - } - } - - // Do we have any mod tools to use in our forums? - $query = $db->simple_select("modtools", "forums, tid", '', array("order_by" => "tid")); - - if($db->num_rows($query)) - { - unset($forum); - while($tool = $db->fetch_array($query)) - { - $forums = explode(",", $tool['forums']); - - foreach($forums as $forum) - { - if(!$forum) - { - $forum = -1; - } - - if(!isset($fd_statistics[$forum]['modtools'])) - { - $fd_statistics[$forum]['modtools'] = 1; - } - } - } - } - - $this->update("forumsdisplay", $fd_statistics); - } - - /** - * Update profile fields cache. - * - */ - function update_profilefields() - { - global $db; - - $fields = array(); - $query = $db->simple_select("profilefields", "*", "", array('order_by' => 'disporder')); - while($field = $db->fetch_array($query)) - { - $fields[] = $field; - } - - $this->update("profilefields", $fields); - } - - /** - * Update the report reasons cache. - * - */ - function update_reportreasons($no_plugins = false) - { - global $db; - - $content_types = array('post', 'profile', 'reputation'); - if(!$no_plugins) - { - global $plugins; - $content_types = $plugins->run_hooks("report_content_types", $content_types); - } - - $reasons = array(); - - $query = $db->simple_select("reportreasons", "*", "", array('order_by' => 'disporder')); - while($reason = $db->fetch_array($query)) - { - if($reason['appliesto'] == 'all') - { - foreach($content_types as $content) - { - $reasons[$content][] = array( - 'rid' => $reason['rid'], - 'title' => $reason['title'], - 'extra' => $reason['extra'], - ); - } - } - elseif($reason['appliesto'] != '') - { - $appliesto = explode(",", $reason['appliesto']); - foreach($appliesto as $content) - { - $reasons[$content][] = array( - 'rid' => $reason['rid'], - 'title' => $reason['title'], - 'extra' => $reason['extra'], - ); - } - } - } - - $this->update("reportreasons", $reasons); - } - - /* Other, extra functions for reloading caches if we just changed to another cache extension (i.e. from db -> xcache) */ - function reload_mostonline() - { - global $db; - - $query = $db->simple_select("datacache", "title,cache", "title='mostonline'"); - $this->update("mostonline", unserialize($db->fetch_field($query, "cache"))); - } - - function reload_plugins() - { - global $db; - - $query = $db->simple_select("datacache", "title,cache", "title='plugins'"); - $this->update("plugins", unserialize($db->fetch_field($query, "cache"))); - } - - function reload_last_backup() - { - global $db; - - $query = $db->simple_select("datacache", "title,cache", "title='last_backup'"); - $this->update("last_backup", unserialize($db->fetch_field($query, "cache"))); - } - - function reload_internal_settings() - { - global $db; - - $query = $db->simple_select("datacache", "title,cache", "title='internal_settings'"); - $this->update("internal_settings", unserialize($db->fetch_field($query, "cache"))); - } - - function reload_version_history() - { - global $db; - - $query = $db->simple_select("datacache", "title,cache", "title='version_history'"); - $this->update("version_history", unserialize($db->fetch_field($query, "cache"))); - } - - function reload_modnotes() - { - global $db; - - $query = $db->simple_select("datacache", "title,cache", "title='modnotes'"); - $this->update("modnotes", unserialize($db->fetch_field($query, "cache"))); - } - - function reload_adminnotes() - { - global $db; - - $query = $db->simple_select("datacache", "title,cache", "title='adminnotes'"); - $this->update("adminnotes", unserialize($db->fetch_field($query, "cache"))); - } - - function reload_mybb_credits() - { - admin_redirect('index.php?module=home-credits&fetch_new=-2'); - } -} diff --git a/html/forums/inc/class_error.php b/html/forums/inc/class_error.php deleted file mode 100644 index 5abe51b..0000000 --- a/html/forums/inc/class_error.php +++ /dev/null @@ -1,623 +0,0 @@ - 'Error', - E_WARNING => 'Warning', - E_PARSE => 'Parsing Error', - E_NOTICE => 'Notice', - E_CORE_ERROR => 'Core Error', - E_CORE_WARNING => 'Core Warning', - E_COMPILE_ERROR => 'Compile Error', - E_COMPILE_WARNING => 'Compile Warning', - E_DEPRECATED => 'Deprecated Warning', - E_USER_ERROR => 'User Error', - E_USER_WARNING => 'User Warning', - E_USER_NOTICE => 'User Notice', - E_USER_DEPRECATED => 'User Deprecated Warning', - E_STRICT => 'Runtime Notice', - E_RECOVERABLE_ERROR => 'Catchable Fatal Error', - MYBB_SQL => 'MyBB SQL Error', - MYBB_TEMPLATE => 'MyBB Template Error', - MYBB_GENERAL => 'MyBB Error', - MYBB_NOT_INSTALLED => 'MyBB Error', - MYBB_NOT_UPGRADED => 'MyBB Error', - MYBB_INSTALL_DIR_EXISTS => 'MyBB Error', - MYBB_SQL_LOAD_ERROR => 'MyBB Error', - MYBB_CACHE_NO_WRITE => 'MyBB Error', - MYBB_CACHEHANDLER_LOAD_ERROR => 'MyBB Error', - ); - - /** - * Array of MyBB error types - * - * @var array - */ - public $mybb_error_types = array( - MYBB_SQL, - MYBB_TEMPLATE, - MYBB_GENERAL, - MYBB_NOT_INSTALLED, - MYBB_NOT_UPGRADED, - MYBB_INSTALL_DIR_EXISTS, - MYBB_SQL_LOAD_ERROR, - MYBB_CACHE_NO_WRITE, - MYBB_CACHEHANDLER_LOAD_ERROR, - ); - - /** - * Array of all of the error types to ignore - * - * @var array - */ - public $ignore_types = array( - E_DEPRECATED, - E_NOTICE, - E_USER_NOTICE, - E_STRICT - ); - - /** - * String of all the warnings collected - * - * @var string - */ - public $warnings = ""; - - /** - * Is MyBB in an errornous state? (Have we received an error?) - * - * @var boolean - */ - public $has_errors = false; - - /** - * Initializes the error handler - * - */ - function __construct() - { - // Lets set the error handler in here so we can just do $handler = new errorHandler() and be all set up. - $error_types = E_ALL; - foreach($this->ignore_types as $bit) - { - $error_types = $error_types & ~$bit; - } - error_reporting($error_types); - set_error_handler(array(&$this, "error"), $error_types); - } - - /** - * Parses a error for processing. - * - * @param string $type The error type (i.e. E_ERROR, E_FATAL) - * @param string $message The error message - * @param string $file The error file - * @param integer $line The error line - * @return boolean True if parsing was a success, otherwise assume a error - */ - function error($type, $message, $file=null, $line=0) - { - global $mybb; - - // Error reporting turned off (either globally or by @ before erroring statement) - if(error_reporting() == 0) - { - return true; - } - - if(in_array($type, $this->ignore_types)) - { - return true; - } - - $file = str_replace(MYBB_ROOT, "", $file); - - $this->has_errors = true; - - // For some reason in the installer this setting is set to "<" - $accepted_error_types = array('both', 'error', 'warning', 'none'); - if(!in_array($mybb->settings['errortypemedium'], $accepted_error_types)) - { - $mybb->settings['errortypemedium'] = "both"; - } - - if(defined("IN_TASK")) - { - global $task; - - require_once MYBB_ROOT."inc/functions_task.php"; - - $filestr = ''; - if($file) - { - $filestr = " - Line: $line - File: $file"; - } - - add_task_log($task, "{$this->error_types[$type]} - [$type] ".var_export($message, true)."{$filestr}"); - } - - // Saving error to log file. - if($mybb->settings['errorlogmedium'] == "log" || $mybb->settings['errorlogmedium'] == "both") - { - $this->log_error($type, $message, $file, $line); - } - - // Are we emailing the Admin a copy? - if($mybb->settings['errorlogmedium'] == "mail" || $mybb->settings['errorlogmedium'] == "both") - { - $this->email_error($type, $message, $file, $line); - } - - // SQL Error - if($type == MYBB_SQL) - { - $this->output_error($type, $message, $file, $line); - } - else - { - // Do we have a PHP error? - if(my_strpos(my_strtolower($this->error_types[$type]), 'warning') === false) - { - $this->output_error($type, $message, $file, $line); - } - // PHP Error - else - { - if($mybb->settings['errortypemedium'] == "none" || $mybb->settings['errortypemedium'] == "error") - { - echo "
    MyBB Internal: One or more warnings occurred. Please contact your administrator for assistance.
    "; - } - else - { - global $templates; - - $warning = "{$this->error_types[$type]} [$type] $message - Line: $line - File: $file PHP ".PHP_VERSION." (".PHP_OS.")
    \n"; - if(is_object($templates) && method_exists($templates, "get") && !defined("IN_ADMINCP")) - { - $this->warnings .= $warning; - $this->warnings .= $this->generate_backtrace(); - } - else - { - echo "
    {$warning}".$this->generate_backtrace()."
    "; - } - } - } - } - - return true; - } - - /** - * Returns all the warnings - * - * @return string|bool The warnings or false if no warnings exist - */ - function show_warnings() - { - global $lang, $templates; - - if(empty($this->warnings)) - { - return false; - } - - // Incase a template fails and we're receiving a blank page. - if(MANUAL_WARNINGS) - { - echo $this->warnings."
    "; - } - - if(!$lang->warnings) - { - $lang->warnings = "The following warnings occurred:"; - } - - $template_exists = false; - - if(!is_object($templates) || !method_exists($templates, 'get')) - { - if(@file_exists(MYBB_ROOT."inc/class_templates.php")) - { - @require_once MYBB_ROOT."inc/class_templates.php"; - $templates = new templates; - $template_exists = true; - } - } - else - { - $template_exists = true; - } - - $warning = ''; - if($template_exists == true) - { - eval("\$warning = \"".$templates->get("php_warnings")."\";"); - } - - return $warning; - } - - /** - * Triggers a user created error - * Example: $error_handler->trigger("Some Warning", E_USER_ERROR); - * - * @param string $message Message - * @param string|int $type Type - */ - function trigger($message="", $type=E_USER_ERROR) - { - global $lang; - - if(!$message) - { - $message = $lang->unknown_user_trigger; - } - - if(in_array($type, $this->mybb_error_types)) - { - $this->error($type, $message); - } - else - { - trigger_error($message, $type); - } - } - - /** - * Logs the error in the specified error log file. - * - * @param string $type Warning type - * @param string $message Warning message - * @param string $file Warning file - * @param integer $line Warning line - */ - function log_error($type, $message, $file, $line) - { - global $mybb; - - if($type == MYBB_SQL) - { - $message = "SQL Error: {$message['error_no']} - {$message['error']}\nQuery: {$message['query']}"; - } - - // Do not log something that might be executable - $message = str_replace('\n"; - $error_data .= "\t".TIME_NOW."\n"; - $error_data .= "\t\n"; - $error_data .= "\t".$line."\n"; - $error_data .= "\t".$type."\n"; - $error_data .= "\t".$this->error_types[$type]."\n"; - $error_data .= "\t".$message."\n"; - $error_data .= "\n\n"; - - if(trim($mybb->settings['errorloglocation']) != "") - { - @error_log($error_data, 3, $mybb->settings['errorloglocation']); - } - else - { - @error_log($error_data, 0); - } - } - - /** - * Emails the error in the specified error log file. - * - * @param string $type Warning type - * @param string $message Warning message - * @param string $file Warning file - * @param integer $line Warning line - * @return bool returns false if no admin email is set - */ - function email_error($type, $message, $file, $line) - { - global $mybb; - - if(!$mybb->settings['adminemail']) - { - return false; - } - - if($type == MYBB_SQL) - { - $message = "SQL Error: {$message['error_no']} - {$message['error']}\nQuery: {$message['query']}"; - } - - $message = "Your copy of MyBB running on {$mybb->settings['bbname']} ({$mybb->settings['bburl']}) has experienced an error. Details of the error include:\n---\nType: $type\nFile: $file (Line no. $line)\nMessage\n$message"; - - @my_mail($mybb->settings['adminemail'], "MyBB error on {$mybb->settings['bbname']}", $message, $mybb->settings['adminemail']); - - return true; - } - - /** - * @param string $type - * @param string $message - * @param string $file - * @param int $line - */ - function output_error($type, $message, $file, $line) - { - global $mybb, $parser, $lang; - - if(!$mybb->settings['bbname']) - { - $mybb->settings['bbname'] = "MyBB"; - } - - if($type == MYBB_SQL) - { - $title = "MyBB SQL Error"; - $error_message = "

    MyBB has experienced an internal SQL error and cannot continue.

    "; - if($mybb->settings['errortypemedium'] == "both" || $mybb->settings['errortypemedium'] == "error" || defined("IN_INSTALL") || defined("IN_UPGRADE")) - { - $message['query'] = htmlspecialchars_uni($message['query']); - $message['error'] = htmlspecialchars_uni($message['error']); - $error_message .= "
    \n"; - $error_message .= "
    SQL Error:
    \n
    {$message['error_no']} - {$message['error']}
    \n"; - if($message['query'] != "") - { - $error_message .= "
    Query:
    \n
    {$message['query']}
    \n"; - } - $error_message .= "
    \n"; - } - } - else - { - $title = "MyBB Internal Error"; - $error_message = "

    MyBB has experienced an internal error and cannot continue.

    "; - if($mybb->settings['errortypemedium'] == "both" || $mybb->settings['errortypemedium'] == "error" || defined("IN_INSTALL") || defined("IN_UPGRADE")) - { - $error_message .= "
    \n"; - $error_message .= "
    Error Type:
    \n
    {$this->error_types[$type]} ($type)
    \n"; - $error_message .= "
    Error Message:
    \n
    {$message}
    \n"; - if(!empty($file)) - { - $error_message .= "
    Location:
    File: {$file}
    Line: {$line}
    \n"; - if(!@preg_match('#config\.php|settings\.php#', $file) && @file_exists($file)) - { - $code_pre = @file($file); - - $code = ""; - - if(isset($code_pre[$line-4])) - { - $code .= $line-3 . ". ".$code_pre[$line-4]; - } - - if(isset($code_pre[$line-3])) - { - $code .= $line-2 . ". ".$code_pre[$line-3]; - } - - if(isset($code_pre[$line-2])) - { - $code .= $line-1 . ". ".$code_pre[$line-2]; - } - - $code .= $line . ". ".$code_pre[$line-1]; // The actual line. - - if(isset($code_pre[$line])) - { - $code .= $line+1 . ". ".$code_pre[$line]; - } - - if(isset($code_pre[$line+1])) - { - $code .= $line+2 . ". ".$code_pre[$line+1]; - } - - if(isset($code_pre[$line+2])) - { - $code .= $line+3 . ". ".$code_pre[$line+2]; - } - - unset($code_pre); - - $parser_exists = false; - - if(!is_object($parser) || !method_exists($parser, 'mycode_parse_php')) - { - if(@file_exists(MYBB_ROOT."inc/class_parser.php")) - { - @require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - $parser_exists = true; - } - } - else - { - $parser_exists = true; - } - - if($parser_exists) - { - $code = $parser->mycode_parse_php($code, true); - } - else - { - $code = @nl2br($code); - } - - $error_message .= "
    Code:
    {$code}
    \n"; - } - } - $backtrace = $this->generate_backtrace(); - if($backtrace && !in_array($type, $this->mybb_error_types)) - { - $error_message .= "
    Backtrace:
    {$backtrace}
    \n"; - } - $error_message .= "
    \n"; - } - } - - if(isset($lang->settings['charset'])) - { - $charset = $lang->settings['charset']; - } - else - { - $charset = 'UTF-8'; - } - - if(!headers_sent() && !defined("IN_INSTALL") && !defined("IN_UPGRADE")) - { - @header('HTTP/1.1 503 Service Temporarily Unavailable'); - @header('Status: 503 Service Temporarily Unavailable'); - @header('Retry-After: 1800'); - @header("Content-type: text/html; charset={$charset}"); - $file_name = htmlspecialchars_uni(basename($_SERVER['SCRIPT_FILENAME'])); - - echo << - - - - {$mybb->settings['bbname']} - Internal Error - - - -
    - - -
    -

    {$title}

    - -
    - {$error_message} - -
    -
    -
    - - -EOF; - } - else - { - echo << - #mybb_error_content { border: 1px solid #026CB1; background: #fff; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } - #mybb_error_content a:link { color: #026CB1; text-decoration: none; } - #mybb_error_content a:visited { color: #026CB1; text-decoration: none; } - #mybb_error_content a:hover, a:active { color: #000; text-decoration: underline; } - #mybb_error_content h2 { font-size: 12px; padding: 4px; background: #026CB1; color: #fff; margin: 0; border-bottom: none; } - #mybb_error_error { padding: 6px; } - #mybb_error_footer { font-size: 12px; border-top: 1px dotted #DDDDDD; padding-top: 10px; } - #mybb_error_content dt { font-weight: bold; } - -
    -

    {$title}

    -
    - {$error_message} - -
    -
    -EOF; - } - exit(1); - } - - /** - * Generates a backtrace if the server supports it. - * - * @return string The generated backtrace - */ - function generate_backtrace() - { - $backtrace = ''; - if(function_exists("debug_backtrace")) - { - $trace = debug_backtrace(); - $backtrace = "\n"; - $backtrace .= "\n"; - $backtrace .= "\n"; - $backtrace .= "\n"; - $backtrace .= "\n"; - $backtrace .= "\n\n"; - - // Strip off this function from trace - array_shift($trace); - - foreach($trace as $call) - { - if(empty($call['file'])) $call['file'] = "[PHP]"; - if(empty($call['line'])) $call['line'] = " "; - if(!empty($call['class'])) $call['function'] = $call['class'].$call['type'].$call['function']; - $call['file'] = str_replace(MYBB_ROOT, "/", $call['file']); - $backtrace .= "\n"; - $backtrace .= "\n"; - $backtrace .= "\n"; - $backtrace .= "\n"; - $backtrace .= "\n"; - } - $backtrace .= "
    FileLineFunction
    {$call['file']}{$call['line']}{$call['function']}
    \n"; - } - return $backtrace; - } -} diff --git a/html/forums/inc/class_feedgeneration.php b/html/forums/inc/class_feedgeneration.php deleted file mode 100644 index a6b4f76..0000000 --- a/html/forums/inc/class_feedgeneration.php +++ /dev/null @@ -1,224 +0,0 @@ -feed_format = 'atom1.0'; - } - else - { - $this->feed_format = 'rss2.0'; - } - } - - /** - * Sets the channel information for the RSS feed. - * - * @param array $channel The channel information - */ - function set_channel($channel) - { - $this->channel = $channel; - } - - /** - * Adds an item to the RSS feed. - * - * @param array $item The item. - */ - function add_item($item) - { - $this->items[] = $item; - } - - /** - * Generate and echo XML for the feed. - * - */ - function generate_feed() - { - global $lang; - - // First, add the feed metadata. - switch($this->feed_format) - { - // Ouput an Atom 1.0 formatted feed. - case "atom1.0": - $this->channel['date'] = gmdate("Y-m-d\TH:i:s\Z", $this->channel['date']); - $this->xml .= "settings['charset']}\"?>\n"; - $this->xml .= "\n"; - $this->xml .= "\t<![CDATA[".$this->sanitize_content($this->channel['title'])."]]>\n"; - $this->xml .= "\tsanitize_content($this->channel['description'])."]]>\n"; - $this->xml .= "\tchannel['link']}syndication.php\"/>\n"; - $this->xml .= "\t{$this->channel['link']}\n"; - $this->xml .= "\tchannel['link']}\"/>\n"; - $this->xml .= "\t{$this->channel['date']}\n"; - $this->xml .= "\tMyBB\n"; - break; - // The default is the RSS 2.0 format. - default: - $this->channel['date'] = gmdate("D, d M Y H:i:s O", $this->channel['date']); - $this->xml .= "settings['charset']}\"?>\n"; - $this->xml .= "\n"; - $this->xml .= "\t\n"; - $this->xml .= "\t\t<![CDATA[".$this->sanitize_content($this->channel['title'])."]]>\n"; - $this->xml .= "\t\t".$this->channel['link']."\n"; - $this->xml .= "\t\tsanitize_content($this->channel['description'])."]]>\n"; - $this->xml .= "\t\t".$this->channel['date']."\n"; - $this->xml .= "\t\tMyBB\n"; - } - - // Now loop through all of the items and add them to the feed XML. - foreach($this->items as $item) - { - if(!$item['date']) - { - $item['date'] = TIME_NOW; - } - switch($this->feed_format) - { - // Output Atom 1.0 format feed. - case "atom1.0": - $item['date'] = date("Y-m-d\TH:i:s\Z", $item['date']); - $this->xml .= "\t\n"; - if(!empty($item['author'])) - { - $this->xml .= "\t\t\n"; - $this->xml .= "\t\t\tsanitize_content($item['author'])."]]>\n"; - $this->xml .= "\t\t\n"; - } - $this->xml .= "\t\t{$item['date']}\n"; - if(empty($item['updated'])) - { - $item['updated'] = $item['date']; - } - else - { - $item['updated'] = date("Y-m-d\TH:i:s\Z", $item['updated']); - } - $this->xml .= "\t\t{$item['updated']}\n"; - $this->xml .= "\t\t\n"; - $this->xml .= "\t\t{$item['link']}\n"; - $this->xml .= "\t\t<![CDATA[".$this->sanitize_content($item['title'])."]]>\n"; - $this->xml .= "\t\tsanitize_content($item['description'])."]]>\n"; - $this->xml .= "\t\tfalse\n"; - $this->xml .= "\t\n"; - break; - - // The default is the RSS 2.0 format. - default: - $item['date'] = date("D, d M Y H:i:s O", $item['date']); - $this->xml .= "\t\t\n"; - $this->xml .= "\t\t\t<![CDATA[".$this->sanitize_content($item['title'])."]]>\n"; - $this->xml .= "\t\t\t".$item['link']."\n"; - $this->xml .= "\t\t\t".$item['date']."\n"; - if(!empty($item['author'])) - { - $this->xml .= "\t\t\tsanitize_content($item['author'])."]]>\n"; - } - $this->xml .= "\t\t\t".$item['link']."\n"; - $this->xml .= "\t\t\t\n"; - $this->xml .= "\t\t\t\n"; - $this->xml .= "\t\t\n"; - break; - } - } - - // Now, neatly end the feed XML. - switch($this->feed_format) - { - case "atom1.0": - $this->xml .= ""; - break; - default: - $this->xml .= "\t\n"; - $this->xml .= ""; - } - } - - /** - * Sanitize content suitable for RSS feeds. - * - * @param string $string The string we wish to sanitize. - * @return string The cleaned string. - */ - function sanitize_content($content) - { - $content = preg_replace("#&[^\s]([^\#])(?![a-z1-4]{1,10});#i", "&$1", $content); - $content = str_replace("]]>", "]]]]>", $content); - - return $content; - } - - /** - * Output the feed XML. - */ - function output_feed() - { - global $lang; - // Send an appropriate header to the browser. - switch($this->feed_format) - { - case "atom1.0": - header("Content-Type: application/atom+xml; charset=\"{$lang->settings['charset']}\""); - break; - default: - header("Content-Type: text/xml; charset=\"{$lang->settings['charset']}\""); - } - - // Output the feed XML. If the feed hasn't been generated, do so. - if($this->xml) - { - echo $this->xml; - } - else - { - $this->generate_feed(); - echo $this->xml; - } - } -} diff --git a/html/forums/inc/class_feedparser.php b/html/forums/inc/class_feedparser.php deleted file mode 100644 index b1833f1..0000000 --- a/html/forums/inc/class_feedparser.php +++ /dev/null @@ -1,242 +0,0 @@ -")+1 !== strlen($contents)) - { - $contents = substr($contents, 0, strrpos($contents, ">")+1); - } - - // Could not load the feed, return an error - if(!$contents) - { - $this->error = "invalid_file"; - return false; - } - - // Parse the feed and get the tree - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - // If the feed is invalid, throw back an error - if($tree == false) - { - $this->error = "invalid_feed_xml"; - return false; - } - - // Change array key names to lower case - $tree = $this->keys_to_lowercase($tree); - - // This is an RSS feed, parse it - if(array_key_exists("rss", $tree)) - { - $this->parse_rss($tree['rss']); - } - - // We don't know how to parse this feed - else - { - $this->error = "unknown_feed_type"; - return false; - } - - return true; - } - - /** - * Parses an XML structure in the format of an RSS feed - * - * @param array $feed_contents PHP XML parser structure - * @return boolean true - */ - function parse_rss($feed_contents) - { - foreach(array('title', 'link', 'description', 'pubdate') as $value) - { - if(!isset($feed_contents['channel'][$value]['value'])) - { - $feed_contents['channel'][$value]['value'] = ''; - } - } - - // Fetch channel information from the parsed feed - $this->channel = array( - "title" => $feed_contents['channel']['title']['value'], - "link" => $feed_contents['channel']['link']['value'], - "description" => $feed_contents['channel']['description']['value'], - "date" => $feed_contents['channel']['pubdate']['value'], - "date_timestamp" => $this->get_rss_timestamp($feed_contents['channel']['pubdate']['value']) - ); - - // The XML parser does not create a multidimensional array of items if there is one item, so fake it - if(!array_key_exists("0", $feed_contents['channel']['item'])) - { - $feed_contents['channel']['item'] = array($feed_contents['channel']['item']); - } - - // Loop through each of the items in the feed - foreach($feed_contents['channel']['item'] as $feed_item) - { - // Here is a nice long stretch of code for parsing items, we do it this way because most elements are optional in an - // item and we only want to assign what we have. - - $item = array(); - - - // Set the item title if we have it - if(array_key_exists("title", $feed_item)) - { - $item['title'] = $feed_item['title']['value']; - } - - if(array_key_exists("description", $feed_item)) - { - $item['description'] = $feed_item['description']['value']; - } - - if(array_key_exists("link", $feed_item)) - { - $item['link'] = $feed_item['link']['value']; - } - - // If we have a pub date, store it and attempt to generate a unix timestamp from it - if(array_key_exists("pubdate", $feed_item)) - { - $item['date'] = $feed_item['pubdate']['value']; - $item['date_timestamp'] = $this->get_rss_timestamp($item['date']); - } - - // If we have a GUID - if(array_key_exists("guid", $feed_item)) - { - $item['guid'] = $feed_item['guid']['value']; - } - // Otherwise, attempt to generate one from the link and item title - else - { - $item['guid'] = md5($item['link'].$item['title']); - } - - // If we have some content, set it - if(array_key_exists("content:encoded", $feed_item)) - { - $item['content'] = $feed_item['content:encoded']['value']; - } - else if(array_key_exists("content", $feed_item)) - { - $item['content'] = $feed_item['content']['value']; - } - - // We have a DC based creator, set it - if(array_key_exists("dc:creator", $feed_item)) - { - $item['author'] = $feed_item['dc:creator']['value']; - } - // Otherwise, attempt to use the author if we have it - else if(array_key_exists("author", $feed_item)) - { - $item['author'] = $feed_item['author']['value']; - } - - // Assign the item to our list of items - $this->items[] = $item; - } - return true; - } - - /** - * Convert all array keys within an array to lowercase - * - * @param array $array The array to be converted - * @return array The converted array - */ - function keys_to_lowercase($array) - { - $new_array = array(); - foreach($array as $key => $value) - { - $new_key = strtolower($key); - if(is_array($value)) - { - $new_array[$new_key] = $this->keys_to_lowercase($value); - } - else - { - $new_array[$new_key] = $value; - } - } - return $new_array; - } - - /** - * Converts an RSS date stamp in to a unix timestamp - * - * @param string $date The RSS date - * @return integer The unix timestamp (if successful), 0 if unsuccessful - */ - function get_rss_timestamp($date) - { - $stamp = strtotime($date); - if($stamp <= 0) - { - if(preg_match("#\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}#", $date, $result)) - { - $date = str_replace(array("T", "+"), array(" ", " +"), $date); - $date[23] = ""; - } - $stamp = strtotime($date); - } - return $stamp; - } -} diff --git a/html/forums/inc/class_graph.php b/html/forums/inc/class_graph.php deleted file mode 100644 index f686e66..0000000 --- a/html/forums/inc/class_graph.php +++ /dev/null @@ -1,337 +0,0 @@ -= 2, create base image - if(gd_version() >= 2) - { - $this->im = imagecreatetruecolor($this->img_width, $this->img_height); - } - else - { - $this->im = imagecreate($this->img_width, $this->img_height); - } - - // No GD support, die. - if(!$this->im) - { - return; - } - - if(function_exists("imageantialias")) - { - imageantialias($this->im, true); - } - - // Fill the background - imagefill($this->im, 0, 0, $this->color(239, 239, 239)); - - // Create our internal working graph box - $inside_end_x = $this->inside_x+$this->inside_width; - $inside_end_y = $this->inside_y+$this->inside_height; - $this->image_create_rectangle($this->inside_x, $this->inside_y, $inside_end_x, $inside_end_y, 4, $this->color(254, 254, 254)); - - // Draw our three lines inside our internal working graph area - for($i = 1; $i < 4; ++$i) - { - $y_value = $this->inside_y+(($this->inside_height/4)*$i); - imageline($this->im, $this->inside_x, $y_value, $inside_end_x, $y_value, $this->color(185, 185, 185)); - } - } - - /** - * Select and allocate a color to the internal image resource - * - * @param integer $red The red value - * @param integer $green The green value - * @param integer $blue The blue value - * @return integer A color identifier - */ - private function color($red, $green, $blue) - { - return imagecolorallocate($this->im, $red, $green, $blue); - } - - /** - * Creates a filled rectangle with optional rounded corners - * - * @param integer $x1 The initial x value - * @param integer $y1 The initial y value - * @param integer $x2 The ending x value - * @param integer $y2 The ending y value - * @param integer $radius The optional radius - * @param integer $color The optional rectangle color (defaults to black) - */ - private function image_create_rectangle($x1, $y1, $x2, $y2, $radius=1, $color=null) - { - if($color == null) - { - $color = $this->color(0, 0, 0); - } - - // Draw our rectangle - imagefilledrectangle($this->im, $x1, $y1+$radius, $x2, $y2-$radius, $color); - imagefilledrectangle($this->im, $x1+$radius, $y1, $x2-$radius, $y2, $color); - - if($radius > 0) - { - $diameter = $radius*2; - - // Now draw our four corners on the rectangle - imagefilledellipse($this->im, $x1+$radius, $y1+$radius, $diameter, $diameter, $color); - imagefilledellipse($this->im, $x1+$radius, $y2-$radius, $diameter, $diameter, $color); - imagefilledellipse($this->im, $x2-$radius, $y2-$radius, $diameter, $diameter, $color); - imagefilledellipse($this->im, $x2-$radius, $y1+$radius, $diameter, $diameter, $color); - } - } - - /** - * Creates a nicer thick line for angled lines - * - * @param integer $x1 The initial x value - * @param integer $y1 The initial y value - * @param integer $x2 The ending x value - * @param integer $y2 The ending y value - * @param integer $color The optional rectangle color (defaults to black) - * @param integer $thick The optional thickness (defaults to 1) - * @return int - */ - private function imagelinethick($x1, $y1, $x2, $y2, $color, $thick = 1) - { - if($thick == 1) - { - return imageline($this->im, $x1, $y1, $x2, $y2, $color); - } - - $t = $thick / 2 - 0.5; - if($x1 == $x2 || $y1 == $y2) - { - return imagefilledrectangle($this->im, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color); - } - - $k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q - $a = $t / sqrt(1 + pow($k, 2)); - $points = array( - round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a), - round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a), - round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a), - round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a), - ); - imagefilledpolygon($this->im, $points, 4, $color); - - return imagepolygon($this->im, $points, 4, $color); - } - - /** - * Adds an array of x, y points to the internal points array - * - * @param array $points The array of x, y points to add - */ - public function add_points($points) - { - $this->points = array_merge($this->points, $points); - } - - /** - * Adds an array of x labels to the internal labels array - * - * @param array $labels The array of x labels to add - */ - public function add_x_labels($labels) - { - $this->x_labels = array_merge($this->x_labels, $labels); - } - - /** - * Sets a bottom label - * - * @param string $label The bottom label to set - */ - public function set_bottom_label($label) - { - $this->bottom_label = $label; - } - - /** - * Renders the graph to memory - * - */ - public function render() - { - // Get our max's and min's - $asorted = $this->points; - sort($asorted, SORT_NUMERIC); - $min = $asorted[0]; - $max = $asorted[count($asorted)-1]; - - // Scale based on how many points we need to shove into 930 pixels of width - $x_delta = $this->inside_width/count($this->points); - - // Scale our y axis to 220 pixels - $y_scale_factor = ($max-$min)/$this->inside_height; - - // Get our Y initial - $y_initial = $this->inside_y+$this->inside_height; - - // Get our scale for finding our points of reference to place our x axis labels - $x_label_scale = ceil(count($this->points)/20); - $x_label_points = array(); - $next_y_scaled = 0; - - foreach($this->points as $x => $y) - { - if(($x_label_scale == 0 || (($x+1) % $x_label_scale) == 0) && $x != 0) - { - $x_label_points[] = $x; - - imagedashedline($this->im, $this->inside_x+($x_delta*$x), 30, $this->inside_x+($x_delta*$x), $y_initial, $this->color(185, 185, 185)); - - imagefilledellipse($this->im, $this->inside_x+($x_delta*$x), $y_initial-$next_y_scaled+0.5, 8, 8, $this->color(84, 92, 209)); - } - - // Look ahead to find our next point, if there is one - if(!array_key_exists($x+1, $this->points)) - { - break; - } - $next_y = $this->points[$x+1]; - - if($y_scale_factor == 0) - { - $y_scaled = $next_y_scaled = 0; - } - else - { - $y_scaled = ($y-$min)/$y_scale_factor; - $next_y_scaled = ($next_y-$min)/$y_scale_factor; - } - - // Draw our line - $this->imagelinethick($this->inside_x+($x_delta*$x), $y_initial-$y_scaled, $this->inside_x+($x_delta*($x+1)), $y_initial-$next_y_scaled, $this->color(84, 92, 209), 3); - } - - // Draw our x labels - foreach($x_label_points as $x) - { - $label = $this->x_labels[$x]; - $text_width = imagefontwidth(2)*strlen($label); - $x = $this->inside_x+($x_delta*$x)-($text_width/2); - - imagestring($this->im, 2, $x, $y_initial+5, $label, $this->color(0, 0, 0)); - } - - // Draw our bottom label - imagestring($this->im, 2, ($this->img_width / 2), $y_initial+25, $this->bottom_label, $this->color(0, 0, 0)); - - if($max > 4) - { - // Draw our y labels - for($i = 1; $i < 4; ++$i) - { - $y_value = $this->inside_y+(($this->inside_height/4)*$i); - imagestring($this->im, 2, 5, $y_value-7, my_number_format(round($min+(($max-$min)/4)*(4-$i))), $this->color(0, 0, 0)); - } - } - imagestring($this->im, 2, 5, $this->inside_y+$this->inside_height-7, my_number_format($min), $this->color(0, 0, 0)); - imagestring($this->im, 2, 5, $this->inside_y-7, my_number_format($max), $this->color(0, 0, 0)); - } - - /** - * Outputs the graph to the screen in PNG format - * - */ - public function output() - { - // Output the image - header("Content-type: image/png"); - imagepng($this->im); - imagedestroy($this->im); - exit; - } -} - diff --git a/html/forums/inc/class_language.php b/html/forums/inc/class_language.php deleted file mode 100644 index a864a96..0000000 --- a/html/forums/inc/class_language.php +++ /dev/null @@ -1,242 +0,0 @@ -path = $path; - } - - /** - * Check if a specific language exists. - * - * @param string $language The language to check for. - * @return boolean True when exists, false when does not exist. - */ - function language_exists($language) - { - $language = preg_replace("#[^a-z0-9\-_]#i", "", $language); - if(file_exists($this->path."/".$language.".php")) - { - return true; - } - else - { - return false; - } - } - - /** - * Set the language for an area. - * - * @param string $language The language to use. - * @param string $area The area to set the language for. - */ - function set_language($language="english", $area="user") - { - global $mybb; - - $language = preg_replace("#[^a-z0-9\-_]#i", "", $language); - - // Default language is English. - if($language == "") - { - $language = "english"; - } - - // Check if the language exists. - if(!$this->language_exists($language)) - { - die("Language $language ($this->path/$language) is not installed"); - } - - $this->language = $language; - require $this->path."/".$language.".php"; - $this->settings = $langinfo; - - // Load the admin language files as well, if needed. - if($area == "admin") - { - if(!is_dir($this->path."/".$language."/{$area}")) - { - if(!is_dir($this->path."/".$mybb->settings['cplanguage']."/{$area}")) - { - if(!is_dir($this->path."/english/{$area}")) - { - die("Your forum does not contain an Administration set. Please reupload the english language administration pack."); - } - else - { - $language = "english"; - } - } - else - { - $language = $mybb->settings['cplanguage']; - } - } - $this->language = $language."/{$area}"; - $this->fallback = $this->fallback."/{$area}"; - } - } - - /** - * Load the language variables for a section. - * - * @param string $section The section name. - * @param boolean $isdatahandler Is this a datahandler? - * @param boolean $supress_error supress the error if the file doesn't exist? - */ - function load($section, $isdatahandler=false, $supress_error=false) - { - // Assign language variables. - // Datahandlers are never in admin lang directory. - if($isdatahandler === true) - { - $lfile = $this->path."/".str_replace('/admin', '', $this->language)."/".$section.".lang.php"; - } - else - { - $lfile = $this->path."/".$this->language."/".$section.".lang.php"; - } - - if(file_exists($lfile)) - { - require_once $lfile; - } - elseif(file_exists($this->path."/".$this->fallback."/".$section.".lang.php")) - { - require_once $this->path."/".$this->fallback."/".$section.".lang.php"; - } - else - { - if($supress_error != true) - { - die("$lfile does not exist"); - } - } - - // We must unite and protect our language variables! - $lang_keys_ignore = array('language', 'path', 'settings'); - - if(isset($l) && is_array($l)) - { - foreach($l as $key => $val) - { - if((empty($this->$key) || $this->$key != $val) && !in_array($key, $lang_keys_ignore)) - { - $this->$key = $val; - } - } - } - } - - /** - * @param string $string - * - * @return string - */ - function sprintf($string) - { - $arg_list = func_get_args(); - $num_args = count($arg_list); - - for($i = 1; $i < $num_args; $i++) - { - $string = str_replace('{'.$i.'}', $arg_list[$i], $string); - } - - return $string; - } - - /** - * Get the language variables for a section. - * - * @param boolean $admin Admin variables when true, user when false. - * @return array The language variables. - */ - function get_languages($admin=false) - { - $dir = @opendir($this->path); - while($lang = readdir($dir)) - { - $ext = my_strtolower(get_extension($lang)); - if($lang != "." && $lang != ".." && $ext == "php") - { - $lname = str_replace(".".$ext, "", $lang); - require $this->path."/".$lang; - if(!$admin || ($admin && $langinfo['admin'])) - { - $languages[$lname] = $langinfo['name']; - } - } - } - @ksort($languages); - return $languages; - } - - /** - * Parse contents for language variables. - * - * @param string $contents The contents to parse. - * @return string The parsed contents. - */ - function parse($contents) - { - $contents = preg_replace_callback("##", array($this, 'parse_replace'), $contents); - return $contents; - } - - /** - * Replace content with language variable. - * - * @param array $matches Matches. - * @return string Language variable. - */ - function parse_replace($matches) - { - return $this->{$matches[1]}; - } -} diff --git a/html/forums/inc/class_mailhandler.php b/html/forums/inc/class_mailhandler.php deleted file mode 100644 index ee6bd3f..0000000 --- a/html/forums/inc/class_mailhandler.php +++ /dev/null @@ -1,437 +0,0 @@ -settings['returnemail'])) - { - $email = $mybb->settings['returnemail']; - } - else - { - $email = $mybb->settings['adminemail']; - } - - return $email; - } - - /** - * Builds the whole mail. - * To be used by the different email classes later. - * - * @param string $to to email. - * @param string $subject subject of email. - * @param string $message message of email. - * @param string $from from email. - * @param string $charset charset of email. - * @param string $headers headers of email. - * @param string $format format of the email (HTML, plain text, or both?). - * @param string $message_text plain text version of the email. - * @param string $return_email the return email address. - */ - function build_message($to, $subject, $message, $from="", $charset="", $headers="", $format="text", $message_text="", $return_email="") - { - global $parser, $lang, $mybb; - - $this->message = ''; - $this->headers = $headers; - - if($from) - { - $this->from = $from; - } - else - { - if($mybb->settings['mail_handler'] == 'smtp') - { - $this->from = $this->get_from_email(); - } - else - { - $this->from = '"'.$this->utf8_encode($mybb->settings['bbname']).'"'; - $this->from .= " <".$this->get_from_email().">"; - } - } - - if($return_email) - { - $this->return_email = $return_email; - } - else - { - $this->return_email = ""; - $this->return_email = $this->get_from_email(); - } - - $this->set_to($to); - $this->set_subject($subject); - - if($charset) - { - $this->set_charset($charset); - } - - $this->parse_format = $format; - $this->set_common_headers(); - $this->set_message($message, $message_text); - } - - /** - * Sets the charset. - * - * @param string $charset charset - */ - function set_charset($charset) - { - global $lang; - - if(empty($charset)) - { - $this->charset = $lang->settings['charset']; - } - else - { - $this->charset = $charset; - } - } - - /** - * Sets and formats the email message. - * - * @param string $message message - * @param string $message_text - */ - function set_message($message, $message_text="") - { - $message = $this->cleanup_crlf($message); - - if($message_text) - { - $message_text = $this->cleanup_crlf($message_text); - } - - if($this->parse_format == "html" || $this->parse_format == "both") - { - $this->set_html_headers($message, $message_text); - } - else - { - $this->message = $message; - $this->set_plain_headers(); - } - } - - /** - * Sets and formats the email subject. - * - * @param string $subject - */ - function set_subject($subject) - { - $this->orig_subject = $this->cleanup($subject); - $this->subject = $this->utf8_encode($this->orig_subject); - } - - /** - * Sets and formats the recipient address. - * - * @param string $to - */ - function set_to($to) - { - $to = $this->cleanup($to); - - $this->to = $this->cleanup($to); - } - - /** - * Sets the plain headers, text/plain - */ - function set_plain_headers() - { - $this->headers .= "Content-Type: text/plain; charset={$this->charset}{$this->delimiter}"; - } - - /** - * Sets the alternative headers, text/html and text/plain. - * - * @param string $message - * @param string $message_text - */ - function set_html_headers($message, $message_text="") - { - if(!$message_text && $this->parse_format == 'both') - { - $message_text = strip_tags($message); - } - - if($this->parse_format == 'both') - { - $mime_boundary = "=_NextPart".md5(TIME_NOW); - - $this->headers .= "Content-Type: multipart/alternative; boundary=\"{$mime_boundary}\"{$this->delimiter}"; - $this->message = "This is a multi-part message in MIME format.{$this->delimiter}{$this->delimiter}"; - - $this->message .= "--{$mime_boundary}{$this->delimiter}"; - $this->message .= "Content-Type: text/plain; charset=\"{$this->charset}\"{$this->delimiter}"; - $this->message .= "Content-Transfer-Encoding: 8bit{$this->delimiter}{$this->delimiter}"; - $this->message .= $message_text."{$this->delimiter}{$this->delimiter}"; - - $this->message .= "--{$mime_boundary}{$this->delimiter}"; - - $this->message .= "Content-Type: text/html; charset=\"{$this->charset}\"{$this->delimiter}"; - $this->message .= "Content-Transfer-Encoding: 8bit{$this->delimiter}{$this->delimiter}"; - $this->message .= $message."{$this->delimiter}{$this->delimiter}"; - - $this->message .= "--{$mime_boundary}--{$this->delimiter}{$this->delimiter}"; - } - else - { - $this->headers .= "Content-Type: text/html; charset=\"{$this->charset}\"{$this->delimiter}"; - $this->headers .= "Content-Transfer-Encoding: 8bit{$this->delimiter}{$this->delimiter}"; - $this->message = $message."{$this->delimiter}{$this->delimiter}"; - } - } - - /** - * Sets the common headers. - */ - function set_common_headers() - { - global $mybb; - - // Build mail headers - $this->headers .= "From: {$this->from}{$this->delimiter}"; - - if($this->return_email) - { - $this->headers .= "Return-Path: {$this->return_email}{$this->delimiter}"; - $this->headers .= "Reply-To: {$this->return_email}{$this->delimiter}"; - } - - if(isset($_SERVER['SERVER_NAME'])) - { - $http_host = $_SERVER['SERVER_NAME']; - } - else if(isset($_SERVER['HTTP_HOST'])) - { - $http_host = $_SERVER['HTTP_HOST']; - } - else - { - $http_host = "unknown.local"; - } - - $msg_id = md5(uniqid(TIME_NOW, true)) . "@" . $http_host; - - if($mybb->settings['mail_message_id']) - { - $this->headers .= "Message-ID: <{$msg_id}>{$this->delimiter}"; - } - $this->headers .= "Content-Transfer-Encoding: 8bit{$this->delimiter}"; - $this->headers .= "X-Priority: 3{$this->delimiter}"; - $this->headers .= "X-Mailer: MyBB{$this->delimiter}"; - $this->headers .= "MIME-Version: 1.0{$this->delimiter}"; - } - - /** - * Log a fatal error message to the database. - * - * @param string $error The error message - */ - function fatal_error($error) - { - global $db; - - $mail_error = array( - "subject" => $db->escape_string($this->orig_subject), - "message" => $db->escape_string($this->message), - "toaddress" => $db->escape_string($this->to), - "fromaddress" => $db->escape_string($this->from), - "dateline" => TIME_NOW, - "error" => $db->escape_string($error), - "smtperror" => $db->escape_string($this->data), - "smtpcode" => (int)$this->code - ); - $db->insert_query("mailerrors", $mail_error); - - // Another neat feature would be the ability to notify the site administrator via email - but wait, with email down, how do we do that? How about private message and hope the admin checks their PMs? - } - - /** - * Rids pesky characters from subjects, recipients, from addresses etc (prevents mail injection too) - * - * @param string $string The string being checked - * @return string The cleaned string - */ - function cleanup($string) - { - $string = str_replace(array("\r", "\n", "\r\n"), "", $string); - $string = trim($string); - return $string; - } - - /** - * Converts message text to suit the correct delimiter - * See dev.mybb.com/issues/1735 (Jorge Oliveira) - * - * @param string $text The text being converted - * @return string The converted string - */ - function cleanup_crlf($text) - { - $text = str_replace("\r\n", "\n", $text); - $text = str_replace("\r", "\n", $text); - $text = str_replace("\n", "\r\n", $text); - - return $text; - } - - /** - * Encode a string based on the character set enabled. Used to encode subjects - * and recipients in email messages going out so that they show up correctly - * in email clients. - * - * @param string $string The string to be encoded. - * @return string The encoded string. - */ - function utf8_encode($string) - { - if(strtolower($this->charset) == 'utf-8' && preg_match('/[^\x20-\x7E]/', $string)) - { - $chunk_size = 47; // Derived from floor((75 - strlen("=?UTF-8?B??=")) * 0.75); - $len = strlen($string); - $output = ''; - $pos = 0; - - while($pos < $len) - { - $newpos = min($pos + $chunk_size, $len); - - while(ord($string[$newpos]) >= 0x80 && ord($string[$newpos]) < 0xC0) - { - // Reduce len until it's safe to split UTF-8. - $newpos--; - } - - $chunk = substr($string, $pos, $newpos - $pos); - $pos = $newpos; - - $output .= " =?UTF-8?B?".base64_encode($chunk)."?=\n"; - } - return trim($output); - } - return $string; - } -} diff --git a/html/forums/inc/class_moderation.php b/html/forums/inc/class_moderation.php deleted file mode 100644 index 0c8835f..0000000 --- a/html/forums/inc/class_moderation.php +++ /dev/null @@ -1,3773 +0,0 @@ -run_hooks("class_moderation_close_threads", $tids); - - $tid_list = implode(',', $tids); - - $openthread = array( - "closed" => 1, - ); - $db->update_query("threads", $openthread, "tid IN ($tid_list) AND closed NOT LIKE 'moved|%'"); - - return true; - } - - /** - * Open one or more threads - * - * @param array|int $tids Thread ID(s) - * @return boolean - */ - - function open_threads($tids) - { - global $db, $plugins; - - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $plugins->run_hooks("class_moderation_open_threads", $tids); - - $tid_list = implode(',', $tids); - - $closethread = array( - "closed" => 0, - ); - $db->update_query("threads", $closethread, "tid IN ($tid_list)"); - - return true; - } - - /** - * Stick one or more threads - * - * @param array|int $tids Thread ID(s) - * @return boolean - */ - function stick_threads($tids) - { - global $db, $plugins; - - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $plugins->run_hooks("class_moderation_stick_threads", $tids); - - $tid_list = implode(',', $tids); - - $stickthread = array( - "sticky" => 1, - ); - $db->update_query("threads", $stickthread, "tid IN ($tid_list)"); - - return true; - } - - /** - * Unstick one or more thread - * - * @param array|int $tids Thread ID(s) - * @return boolean - */ - function unstick_threads($tids) - { - global $db, $plugins; - - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $plugins->run_hooks("class_moderation_unstick_threads", $tids); - - $tid_list = implode(',', $tids); - - $unstickthread = array( - "sticky" => 0, - ); - $db->update_query("threads", $unstickthread, "tid IN ($tid_list)"); - - return true; - } - - /** - * Remove redirects that redirect to the specified thread - * - * @param int $tid Thread ID of the thread - * @return boolean - */ - function remove_redirects($tid) - { - global $db, $plugins; - - $plugins->run_hooks("class_moderation_remove_redirects", $tid); - - // Delete the redirects - $tid = (int)$tid; - if(empty($tid)) - { - return false; - } - - $query = $db->simple_select('threads', 'tid', "closed='moved|$tid'"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $this->delete_thread($redirect_tid); - } - - return true; - } - - /** - * Delete a thread - * - * @param int $tid Thread ID of the thread - * @return boolean - */ - function delete_thread($tid) - { - global $db, $cache, $plugins; - - $tid = (int)$tid; - - $plugins->run_hooks("class_moderation_delete_thread_start", $tid); - - $thread = get_thread($tid); - if(!$thread) - { - return false; - } - $forum = get_forum($thread['fid']); - - $userposts = array(); - - // Find the pid, uid, visibility, and forum post count status - $query = $db->simple_select('posts', 'pid, uid, visible', "tid='{$tid}'"); - $pids = array(); - $num_unapproved_posts = $num_approved_posts = $num_deleted_posts = 0; - while($post = $db->fetch_array($query)) - { - $pids[] = $post['pid']; - - if(!function_exists("remove_attachments")) - { - require_once MYBB_ROOT."inc/functions_upload.php"; - } - - // Remove attachments - remove_attachments($post['pid']); - - // If the post is unapproved, count it! - if(($post['visible'] == 0 && $thread['visible'] != -1) || $thread['visible'] == 0) - { - $num_unapproved_posts++; - } - elseif($post['visible'] == -1 || $thread['visible'] == -1) - { - $num_deleted_posts++; - } - else - { - $num_approved_posts++; - - // Count the post counts for each user to be subtracted - if($forum['usepostcounts'] != 0) - { - if(!isset($userposts[$post['uid']]['num_posts'])) - { - $userposts[$post['uid']]['num_posts'] = 0; - } - ++$userposts[$post['uid']]['num_posts']; - } - } - } - - if($forum['usethreadcounts'] != 0 && substr($thread['closed'], 0, 6) != 'moved|') - { - if(!isset($userposts[$thread['uid']]['num_threads'])) - { - $userposts[$thread['uid']]['num_threads'] = 0; - } - ++$userposts[$thread['uid']]['num_threads']; - } - - // Remove post count from users - if($thread['visible'] == 1) - { - if(!empty($userposts)) - { - foreach($userposts as $uid => $subtract) - { - $update_array = array( - "postnum" => "-{$subtract['num_posts']}", - "threadnum" => "-{$subtract['num_threads']}", - ); - update_user_counters($uid, $update_array); - } - } - } - // Delete posts and their attachments - if(!empty($pids)) - { - $pids = implode(',', $pids); - $db->delete_query("posts", "pid IN ($pids)"); - $db->delete_query("attachments", "pid IN ($pids)"); - $db->delete_query("reportedcontent", "id IN ($pids) AND (type = 'post' OR type = '')"); - } - - // Delete threads, redirects, subscriptions, polls, and poll votes - $db->delete_query("threads", "tid='$tid'"); - $query = $db->simple_select('threads', 'tid', "closed='moved|$tid'"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $this->delete_thread($redirect_tid); - } - $db->delete_query("threadsubscriptions", "tid='$tid'"); - $db->delete_query("polls", "tid='$tid'"); - $db->delete_query("pollvotes", "pid='".$thread['poll']."'"); - $db->delete_query("threadsread", "tid='$tid'"); - $db->delete_query("threadratings", "tid='$tid'"); - - $updated_counters = array( - "posts" => "-{$num_approved_posts}", - "unapprovedposts" => "-{$num_unapproved_posts}", - "deletedposts" => "-{$num_deleted_posts}" - ); - - if($thread['visible'] == 1) - { - $updated_counters['threads'] = -1; - } - elseif($thread['visible'] == -1) - { - $updated_counters['deletedthreads'] = -1; - } - else - { - $updated_counters['unapprovedthreads'] = -1; - } - - if(strpos($thread['closed'], 'moved|') !== false) - { - // Redirect - if($thread['visible'] == 1) - { - $updated_counters['posts'] = -1; - } - elseif($thread['visible'] == -1) - { - $updated_counters['deletedposts'] = -1; - } - else - { - $updated_counters['unapprovedposts'] = -1; - } - } - - // Update forum count - update_forum_counters($thread['fid'], $updated_counters); - update_forum_lastpost($thread['fid']); - mark_reports($tid, 'thread'); - - $plugins->run_hooks("class_moderation_delete_thread", $tid); - - return true; - } - - /** - * Delete a poll - * - * @param int $pid Poll id - * @return boolean - */ - function delete_poll($pid) - { - global $db, $plugins; - - $pid = (int)$pid; - - if(empty($pid)) - { - return false; - } - - $plugins->run_hooks("class_moderation_delete_poll", $pid); - - $db->delete_query("polls", "pid='$pid'"); - $db->delete_query("pollvotes", "pid='$pid'"); - $pollarray = array( - 'poll' => '0', - ); - $db->update_query("threads", $pollarray, "poll='$pid'"); - - return true; - } - - /** - * Approve one or more threads - * - * @param array|int $tids Thread ID(s) - * @return boolean - */ - function approve_threads($tids) - { - global $db, $cache, $plugins; - - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $tid_list = $forum_counters = $user_counters = $posts_to_approve = array(); - - foreach($tids as $tid) - { - $thread = get_thread($tid); - if(!$thread || $thread['visible'] == 1 || $thread['visible'] == -1) - { - continue; - } - $tid_list[] = $thread['tid']; - - $forum = get_forum($thread['fid']); - - if(!isset($forum_counters[$forum['fid']])) - { - $forum_counters[$forum['fid']] = array( - 'num_posts' => 0, - 'num_threads' => 0, - 'num_deleted_posts' => 0, - 'num_unapproved_posts' => 0 - ); - } - - if(!isset($user_counters[$thread['uid']])) - { - $user_counters[$thread['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - - ++$forum_counters[$forum['fid']]['num_threads']; - $forum_counters[$forum['fid']]['num_posts'] += $thread['replies']+1; // Remove implied visible from count - $forum_counters[$forum['fid']]['num_deleted_posts'] += $thread['deletedposts']; - $forum_counters[$forum['fid']]['num_unapproved_posts'] += $thread['deletedposts']+$thread['replies']+1; - - if($forum['usepostcounts'] != 0) - { - // On approving thread restore user post counts - $query = $db->simple_select("posts", "COUNT(pid) as posts, uid", "tid='{$tid}' AND (visible='1' OR pid='{$thread['firstpost']}') AND uid > 0 GROUP BY uid"); - while($counter = $db->fetch_array($query)) - { - $user_counters[$counter['uid']]['num_posts'] += $counter['posts']; - } - } - - if($forum['usethreadcounts'] != 0 && substr($thread['closed'], 0, 6) != 'moved|') - { - ++$user_counters[$thread['uid']]['num_threads']; - } - - $posts_to_approve[] = $thread['firstpost']; - } - - if(!empty($tid_list)) - { - $tid_moved_list = ""; - $comma = ""; - foreach($tid_list as $tid) - { - $tid_moved_list .= "{$comma}'moved|{$tid}'"; - $comma = ","; - } - $tid_list = implode(',', $tid_list); - $approve = array( - "visible" => 1 - ); - $db->update_query("threads", $approve, "tid IN ($tid_list)"); - // Approve redirects, too - $redirect_tids = array(); - $query = $db->simple_select('threads', 'tid', "closed IN ({$tid_moved_list})"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $redirect_tids[] = $redirect_tid; - } - if(!empty($redirect_tids)) - { - $this->approve_threads($redirect_tids); - } - if(!empty($posts_to_approve)) - { - $db->update_query("posts", $approve, "pid IN (".implode(',', $posts_to_approve).")"); - } - - $plugins->run_hooks("class_moderation_approve_threads", $tids); - - if(!empty($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - // Update stats - $update_array = array( - "threads" => "+{$counters['num_threads']}", - "unapprovedthreads" => "-{$counters['num_threads']}", - "posts" => "+{$counters['num_posts']}", - "unapprovedposts" => "-{$counters['num_unapproved_posts']}", - "deletedposts" => "+{$counters['num_deleted_posts']}" - ); - update_forum_counters($fid, $update_array); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counters) - { - $update_array = array( - "postnum" => "+{$counters['num_posts']}", - "threadnum" => "+{$counters['num_threads']}", - ); - update_user_counters($uid, $update_array); - } - } - } - return true; - } - - /** - * Unapprove one or more threads - * - * @param array|int $tids Thread ID(s) - * @return boolean - */ - function unapprove_threads($tids) - { - global $db, $cache, $plugins; - - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $tid_list = implode(',', $tids); - $tid_moved_list = ""; - $comma = ""; - foreach($tids as $tid) - { - $tid_moved_list .= "{$comma}'moved|{$tid}'"; - $comma = ","; - } - - $forum_counters = $user_counters = $posts_to_unapprove = array(); - - foreach($tids as $tid) - { - $thread = get_thread($tid); - $forum = get_forum($thread['fid']); - - if($thread['visible'] == 1 || $thread['visible'] == -1) - { - if(!isset($forum_counters[$forum['fid']])) - { - $forum_counters[$forum['fid']] = array( - 'num_threads' => 0, - 'num_posts' => 0, - 'num_unapprovedthreads' => 0, - 'num_unapprovedposts' => 0, - 'num_deletedthreads' => 0, - 'num_deletedposts' => 0 - ); - } - - if(!isset($user_counters[$thread['uid']])) - { - $user_counters[$thread['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - - ++$forum_counters[$forum['fid']]['num_unapprovedthreads']; - $forum_counters[$forum['fid']]['num_unapprovedposts'] += $thread['replies']+$thread['deletedposts']+1; - - if($thread['visible'] == 1) - { - ++$forum_counters[$forum['fid']]['num_threads']; - $forum_counters[$forum['fid']]['num_posts'] += $thread['replies']+1; // Add implied invisible to count - $forum_counters[$forum['fid']]['num_deletedposts'] += $thread['deletedposts']; - } - else - { - ++$forum_counters[$forum['fid']]['num_deletedthreads']; - $forum_counters[$forum['fid']]['num_deletedposts'] += $thread['replies']+$thread['unapprovedposts']+$thread['deletedposts']+1; // Add implied invisible to count - $forum_counters[$forum['fid']]['num_unapprovedposts'] += $thread['unapprovedposts']; - } - - // On unapproving thread update user post counts - if($thread['visible'] == 1 && $forum['usepostcounts'] != 0) - { - $query = $db->simple_select("posts", "COUNT(pid) AS posts, uid", "tid='{$tid}' AND (visible='1' OR pid='{$thread['firstpost']}') AND uid > 0 GROUP BY uid"); - while($counter = $db->fetch_array($query)) - { - $user_counters[$counter['uid']]['num_posts'] += $counter['posts']; - } - } - - if($thread['visible'] == 1 && $forum['usethreadcounts'] != 0 && substr($thread['closed'], 0, 6) != 'moved|') - { - ++$user_counters[$thread['uid']]['num_threads']; - } - - } - $posts_to_unapprove[] = $thread['firstpost']; - } - - $approve = array( - "visible" => 0 - ); - $db->update_query("threads", $approve, "tid IN ($tid_list)"); - // Unapprove redirects, too - $redirect_tids = array(); - $query = $db->simple_select('threads', 'tid', "closed IN ({$tid_moved_list})"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $redirect_tids[] = $redirect_tid; - } - if(!empty($redirect_tids)) - { - $this->unapprove_threads($redirect_tids); - } - if(!empty($posts_to_unapprove)) - { - $db->update_query("posts", $approve, "pid IN (".implode(',', $posts_to_unapprove).")"); - } - - $plugins->run_hooks("class_moderation_unapprove_threads", $tids); - - if(!empty($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - // Update stats - $update_array = array( - "threads" => "-{$counters['num_threads']}", - "unapprovedthreads" => "+{$counters['num_unapprovedthreads']}", - "posts" => "-{$counters['num_posts']}", - "unapprovedposts" => "+{$counters['num_unapprovedposts']}", - "deletedthreads" => "-{$counters['num_deletedthreads']}", - "deletedposts" => "-{$counters['num_deletedposts']}" - ); - update_forum_counters($fid, $update_array); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counters) - { - $update_array = array( - "postnum" => "-{$counters['num_posts']}", - "threadnum" => "-{$counters['num_threads']}", - ); - update_user_counters($uid, $update_array); - } - } - - return true; - } - - /** - * Delete a specific post - * - * @param int $pid Post ID - * @return boolean - */ - function delete_post($pid) - { - global $db, $cache, $plugins; - - $pid = $plugins->run_hooks("class_moderation_delete_post_start", $pid); - // Get pid, uid, fid, tid, visibility, forum post count status of post - $pid = (int)$pid; - $query = $db->query(" - SELECT p.pid, p.uid, p.fid, p.tid, p.visible, t.visible as threadvisible - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid='$pid' - "); - $post = $db->fetch_array($query); - if(!$post) - { - return false; - } - - $forum = get_forum($post['fid']); - // If post counts enabled in this forum and it hasn't already been unapproved, remove 1 - if($forum['usepostcounts'] != 0 && $post['visible'] != -1 && $post['visible'] != 0 && $post['threadvisible'] != 0 && $post['threadvisible'] != -1) - { - update_user_counters($post['uid'], array('postnum' => "-1")); - } - - if(!function_exists("remove_attachments")) - { - require MYBB_ROOT."inc/functions_upload.php"; - } - - // Remove attachments - remove_attachments($pid); - - // Delete the post - $db->delete_query("posts", "pid='$pid'"); - - // Remove any reports attached to this post - $db->delete_query("reportedcontent", "id='{$pid}' AND (type = 'post' OR type = '')"); - - // Update unapproved post count - if($post['visible'] == 0) - { - $update_array = array( - "unapprovedposts" => "-1" - ); - } - elseif($post['visible'] == -1) - { - $update_array = array( - "deletedposts" => "-1" - ); - } - else - { - $update_array = array( - "replies" => "-1" - ); - } - - $plugins->run_hooks("class_moderation_delete_post", $post['pid']); - - update_thread_counters($post['tid'], $update_array); - update_last_post($post['tid']); - - // Update unapproved post count - if(($post['visible'] == 0 && $post['threadvisible'] != -1) || $post['threadvisible'] == 0) - { - $update_array = array( - "unapprovedposts" => "-1" - ); - } - elseif($post['visible'] == -1 || $post['threadvisible'] == -1) - { - $update_array = array( - "deletedposts" => "-1" - ); - } - else - { - $update_array = array( - "posts" => "-1" - ); - } - - update_forum_counters($post['fid'], $update_array); - update_forum_lastpost($post['fid']); - - return true; - } - - /** - * Merge posts within thread - * - * @param array $pids Post IDs to be merged - * @param int $tid Thread ID (Set to 0 if posts from multiple threads are selected) - * @return int ID of the post into which all other posts are merged - */ - function merge_posts($pids, $tid=0, $sep="new_line") - { - global $db, $plugins; - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - if(empty($pids) || count($pids) < 2) - { - return false; - } - - $pidin = implode(',', $pids); - $attachment_count = 0; - - $first = 1; - // Get the messages to be merged - $query = $db->query(" - SELECT p.pid, p.uid, p.fid, p.tid, p.visible, p.message, t.visible AS threadvisible, t.replies AS threadreplies, t.firstpost AS threadfirstpost, t.unapprovedposts AS threadunapprovedposts, COUNT(a.aid) AS attachmentcount - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."attachments a ON (a.pid=p.pid AND a.visible=1) - WHERE p.pid IN($pidin) - GROUP BY p.pid - ORDER BY p.dateline ASC - "); - $message = ''; - $threads = $forum_counters = $thread_counters = $user_counters = array(); - while($post = $db->fetch_array($query)) - { - $threads[$post['tid']] = $post['tid']; - if(!isset($thread_counters[$post['tid']])) - { - $thread_counters[$post['tid']] = array( - 'replies' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0, - 'attachmentcount' => 0 - ); - } - if($first == 1) - { // all posts will be merged into this one - $masterpid = $post['pid']; - $message = $post['message']; - $fid = $post['fid']; - $mastertid = $post['tid']; - $first = 0; - $visible = $post['visible']; - } - else - { - // these are the selected posts - if($sep == "new_line") - { - $message .= "\n\n {$post['message']}"; - } - else - { - $message .= "[hr]{$post['message']}"; - } - - if(!isset($forum_counters[$post['fid']])) - { - $forum_counters[$post['fid']] = array( - 'num_posts' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0 - ); - } - - if($post['visible'] == 1) - { - --$thread_counters[$post['tid']]['replies']; - $forum = get_forum($post['fid']); - if(!isset($user_counters[$post['uid']])) - { - $user_counters[$post['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - // Subtract 1 from user's post count - if($forum['usepostcounts'] != 0 && $post['threadvisible'] == 1) - { - // Update post count of the user of the merged posts - --$user_counters[$post['uid']]['num_posts']; - } - if($post['threadfirstpost'] == $post['pid'] && $forum['usethreadcounts'] != 0 && $post['threadvisible'] == 1) - { - --$user_counters[$post['uid']]['num_threads']; - } - $thread_counters[$post['tid']]['attachmentcount'] -= $post['attachmentcount']; - } - elseif($post['visible'] == 0) - { - // Subtract 1 unapproved post from post's thread - --$thread_counters[$post['tid']]['unapprovedposts']; - } - elseif($post['visible'] == -1) - { - // Subtract 1 deleted post from post's thread - --$thread_counters[$post['tid']]['deletedposts']; - } - - // Subtract 1 post from post's forum - if($post['threadvisible'] == 1 && $post['visible'] == 1) - { - --$forum_counters[$post['fid']]['num_posts']; - } - elseif($post['threadvisible'] == 0 || ($post['visible'] == 0 && $post['threadvisible'] != -1)) - { - --$forum_counters[$post['fid']]['unapprovedposts']; - } - else - { - --$forum_counters[$post['fid']]['deletedposts']; - } - - // Add attachment count to thread - if($visible == 1) - { - $thread_counters[$mastertid]['attachmentcount'] += $post['attachmentcount']; - } - } - } - - // Update the message - $mergepost = array( - "message" => $db->escape_string($message), - ); - $db->update_query("posts", $mergepost, "pid = '{$masterpid}'"); - - // Delete the extra posts - $db->delete_query("posts", "pid IN({$pidin}) AND pid != '{$masterpid}'"); - - // Update pid for attachments - $mergepost2 = array( - "pid" => $masterpid, - ); - $db->update_query("attachments", $mergepost2, "pid IN({$pidin})"); - - // If the first post of a thread is merged out, the first should be updated - $query = $db->simple_select("threads", "tid, uid, fid, visible", "firstpost IN({$pidin}) AND firstpost != '{$masterpid}'"); - while($thread = $db->fetch_array($query)) - { - // In some cases the first post of a thread changes - // Therefore resync the visible field to make sure they're the same if they're not - $query = $db->simple_select("posts", "pid, uid, visible", "tid='{$thread['tid']}'", array('order_by' => 'dateline', 'order_dir' => 'asc', 'limit' => 1)); - $new_firstpost = $db->fetch_array($query); - if($thread['visible'] != $new_firstpost['visible']) - { - $db->update_query("posts", array('visible' => $thread['visible']), "pid='{$new_firstpost['pid']}'"); - // Correct counters - if($new_firstpost['visible'] == 1) - { - --$thread_counters[$thread['tid']]['replies']; - } - elseif($new_firstpost['visible'] == -1) - { - --$thread_counters[$thread['tid']]['deletedposts']; - } - else - { - --$thread_counters[$thread['tid']]['unapprovedposts']; - } - if($thread['visible'] == 1) - { - ++$thread_counters[$thread['tid']]['replies']; - } - elseif($thread['visible'] == -1) - { - ++$thread_counters[$thread['tid']]['deletedposts']; - } - else - { - ++$thread_counters[$thread['tid']]['unapprovedposts']; - } - } - - if($new_firstpost['uid'] != $thread['uid'] && $forum['usethreadcounts'] != 0 && $thread['visible'] == 1) - { - if(!isset($user_counters[$new_firstpost['uid']])) - { - $user_counters[$new_firstpost['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - ++$user_counters[$new_firstpost['uid']]['num_threads']; - } - update_first_post($thread['tid']); - } - - $arguments = array("pids" => $pids, "tid" => $tid); - $plugins->run_hooks("class_moderation_merge_posts", $arguments); - - if(!empty($thread_counters)) - { - foreach($thread_counters as $tid => $counters) - { - $counters = array( - 'replies' => signed($counters['replies']), - 'unapprovedposts' => signed($counters['unapprovedposts']), - 'deletedposts' => signed($counters['deletedposts']), - 'attachmentcount' => signed($counters['attachmentcount']) - ); - update_thread_counters($tid, $counters); - update_last_post($tid); - } - } - - if(!empty($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - $updated_forum_stats = array( - 'posts' => signed($counters['num_posts']), - 'unapprovedposts' => signed($counters['unapprovedposts']), - 'deletedposts' => signed($counters['deletedposts']) - ); - update_forum_counters($fid, $updated_forum_stats); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counters) - { - $update_array = array( - "postnum" => "+{$counters['num_posts']}", - "threadnum" => "+{$counters['num_threads']}" - ); - update_user_counters($uid, $update_array); - } - } - - return $masterpid; - } - - /** - * Move/copy thread - * - * @param int $tid Thread to be moved - * @param int $new_fid Destination forum - * @param string $method Method of movement (redirect, copy, move) - * @param int $redirect_expire Expiry timestamp for redirect - * @return int Thread ID - */ - function move_thread($tid, $new_fid, $method="redirect", $redirect_expire=0) - { - global $db, $plugins; - - // Get thread info - $tid = (int)$tid; - $new_fid = (int)$new_fid; - $redirect_expire = (int)$redirect_expire; - - $thread = get_thread($tid, true); - - $newforum = get_forum($new_fid); - if(!$thread || !$newforum) - { - return false; - } - $fid = $thread['fid']; - $forum = get_forum($fid); - - $num_threads = $num_unapproved_threads = $num_posts = $num_unapproved_posts = $num_deleted_posts = $num_deleted_threads = 0; - - if($thread['visible'] == 1) - { - $num_threads++; - $num_posts = $thread['replies']+1; - $num_unapproved_posts = $thread['unapprovedposts']; - $num_deleted_posts = $thread['deletedposts']; - } - elseif($thread['visible'] == -1) - { - $num_deleted_threads++; - // Implied forum deleted count for deleted threads - $num_deleted_posts = $thread['replies']+$thread['deletedposts']+$thread['unapprovedposts']+1; - } - else - { - $num_unapproved_threads++; - // Implied forum unapproved count for unapproved threads - $num_unapproved_posts = $thread['replies']+$thread['unapprovedposts']+$thread['deletedposts']+1; - } - - switch($method) - { - case "redirect": // move (and leave redirect) thread - $arguments = array("tid" => $tid, "new_fid" => $new_fid); - $plugins->run_hooks("class_moderation_move_thread_redirect", $arguments); - - $query = $db->simple_select('threads', 'tid', "closed='moved|$tid' AND fid='$new_fid'"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $this->delete_thread($redirect_tid); - } - $changefid = array( - "fid" => $new_fid, - ); - $db->update_query("threads", $changefid, "tid='$tid'"); - $db->update_query("posts", $changefid, "tid='$tid'"); - - // If the thread has a prefix and the destination forum doesn't accept that prefix, remove the prefix - if($thread['prefix'] != 0) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(','||forums||',' LIKE '%,$new_fid,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - break; - default: - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(CONCAT(',',forums,',') LIKE '%,$new_fid,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - } - if($db->fetch_field($query, "num_prefixes") == 0) - { - $sqlarray = array( - "prefix" => 0, - ); - $db->update_query("threads", $sqlarray, "tid='$tid'"); - } - } - - $threadarray = array( - "fid" => $thread['fid'], - "subject" => $db->escape_string($thread['subject']), - "icon" => $thread['icon'], - "uid" => $thread['uid'], - "username" => $db->escape_string($thread['username']), - "dateline" => $thread['dateline'], - "lastpost" => $thread['lastpost'], - "lastposteruid" => $thread['lastposteruid'], - "lastposter" => $db->escape_string($thread['lastposter']), - "views" => 0, - "replies" => 0, - "closed" => "moved|$tid", - "sticky" => $thread['sticky'], - "visible" => (int)$thread['visible'], - "notes" => '' - ); - $redirect_tid = $db->insert_query("threads", $threadarray); - if($redirect_expire) - { - $this->expire_thread($redirect_tid, $redirect_expire); - } - - // If we're moving back to a forum where we left a redirect, delete the rediect - $query = $db->simple_select("threads", "tid", "closed LIKE 'moved|".(int)$tid."' AND fid='".(int)$new_fid."'"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $this->delete_thread($redirect_tid); - } - break; - case "copy":// copy thread - - $threadarray = array( - "fid" => $new_fid, - "subject" => $db->escape_string($thread['subject']), - "icon" => $thread['icon'], - "uid" => $thread['uid'], - "username" => $db->escape_string($thread['username']), - "dateline" => $thread['dateline'], - "firstpost" => 0, - "lastpost" => $thread['lastpost'], - "lastposteruid" => $thread['lastposteruid'], - "lastposter" => $db->escape_string($thread['lastposter']), - "views" => $thread['views'], - "replies" => $thread['replies'], - "closed" => $thread['closed'], - "sticky" => $thread['sticky'], - "visible" => (int)$thread['visible'], - "unapprovedposts" => $thread['unapprovedposts'], - "deletedposts" => $thread['deletedposts'], - "attachmentcount" => $thread['attachmentcount'], - "prefix" => $thread['prefix'], - "notes" => '' - ); - - $arguments = array("tid" => $tid, "new_fid" => $new_fid); - $plugins->run_hooks("class_moderation_copy_thread", $arguments); - - // If the thread has a prefix and the destination forum doesn't accept that prefix, don't copy the prefix - if($threadarray['prefix'] != 0) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(','||forums||',' LIKE '%,$new_fid,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - break; - default: - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(CONCAT(',',forums,',') LIKE '%,$new_fid,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - } - if($db->fetch_field($query, "num_prefixes") == 0) - { - $threadarray['prefix'] = 0; - } - } - - $newtid = $db->insert_query("threads", $threadarray); - - if($thread['poll'] != 0) - { - $query = $db->simple_select("polls", "*", "tid = '{$thread['tid']}'"); - $poll = $db->fetch_array($query); - - $poll_array = array( - 'tid' => $newtid, - 'question' => $db->escape_string($poll['question']), - 'dateline' => $poll['dateline'], - 'options' => $db->escape_string($poll['options']), - 'votes' => $poll['votes'], - 'numoptions' => $poll['numoptions'], - 'numvotes' => $poll['numvotes'], - 'timeout' => $poll['timeout'], - 'closed' => $poll['closed'], - 'multiple' => $poll['multiple'], - 'public' => $poll['public'] - ); - $new_pid = $db->insert_query("polls", $poll_array); - - $query = $db->simple_select("pollvotes", "*", "pid = '{$poll['pid']}'"); - while($pollvote = $db->fetch_array($query)) - { - $pollvote_array = array( - 'pid' => $new_pid, - 'uid' => $pollvote['uid'], - 'voteoption' => $pollvote['voteoption'], - 'dateline' => $pollvote['dateline'], - ); - $db->insert_query("pollvotes", $pollvote_array); - } - - $db->update_query("threads", array('poll' => $new_pid), "tid='{$newtid}'"); - } - - $query = $db->simple_select("posts", "*", "tid = '{$thread['tid']}'"); - while($post = $db->fetch_array($query)) - { - $post_array = array( - 'tid' => $newtid, - 'fid' => $new_fid, - 'subject' => $db->escape_string($post['subject']), - 'icon' => $post['icon'], - 'uid' => $post['uid'], - 'username' => $db->escape_string($post['username']), - 'dateline' => $post['dateline'], - 'ipaddress' => $db->escape_binary($post['ipaddress']), - 'includesig' => $post['includesig'], - 'smilieoff' => $post['smilieoff'], - 'edituid' => $post['edituid'], - 'edittime' => $post['edittime'], - 'visible' => $post['visible'], - 'message' => $db->escape_string($post['message']), - ); - $pid = $db->insert_query("posts", $post_array); - - // Properly set our new firstpost in our new thread - if($thread['firstpost'] == $post['pid']) - { - $db->update_query("threads", array('firstpost' => $pid), "tid='{$newtid}'"); - } - - // Insert attachments for this post - $query2 = $db->simple_select("attachments", "*", "pid = '{$post['pid']}'"); - while($attachment = $db->fetch_array($query2)) - { - $attachment_array = array( - 'pid' => $pid, - 'uid' => $attachment['uid'], - 'filename' => $db->escape_string($attachment['filename']), - 'filetype' => $db->escape_string($attachment['filetype']), - 'filesize' => $attachment['filesize'], - 'attachname' => $db->escape_string($attachment['attachname']), - 'downloads' => $attachment['downloads'], - 'visible' => $attachment['visible'], - 'thumbnail' => $db->escape_string($attachment['thumbnail']) - ); - $new_aid = $db->insert_query("attachments", $attachment_array); - - $post['message'] = str_replace("[attachment={$attachment['aid']}]", "[attachment={$new_aid}]", $post['message']); - } - - if(strpos($post['message'], "[attachment=") !== false) - { - $db->update_query("posts", array('message' => $db->escape_string($post['message'])), "pid='{$pid}'"); - } - } - - update_thread_data($newtid); - - $the_thread = $newtid; - break; - default: - case "move": // plain move thread - $arguments = array("tid" => $tid, "new_fid" => $new_fid); - $plugins->run_hooks("class_moderation_move_simple", $arguments); - - $sqlarray = array( - "fid" => $new_fid, - ); - $db->update_query("threads", $sqlarray, "tid='$tid'"); - $db->update_query("posts", $sqlarray, "tid='$tid'"); - - // If the thread has a prefix and the destination forum doesn't accept that prefix, remove the prefix - if($thread['prefix'] != 0) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(','||forums||',' LIKE '%,$new_fid,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - break; - default: - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(CONCAT(',',forums,',') LIKE '%,$new_fid,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - } - if($db->fetch_field($query, "num_prefixes") == 0) - { - $sqlarray = array( - "prefix" => 0, - ); - $db->update_query("threads", $sqlarray, "tid='$tid'"); - } - } - - // If we're moving back to a forum where we left a redirect, delete the rediect - $query = $db->simple_select("threads", "tid", "closed LIKE 'moved|".(int)$tid."' AND fid='".(int)$new_fid."'"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $this->delete_thread($redirect_tid); - } - break; - } - - // Do post and thread count changes if changing between countable and non-countable forums - $query = $db->query(" - SELECT COUNT(p.pid) AS posts, u.uid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid='$tid' AND p.visible=1 - GROUP BY u.uid - ORDER BY posts DESC - "); - while($posters = $db->fetch_array($query)) - { - $pcount = 0; - if($forum['usepostcounts'] == 1 && $method != 'copy' && $newforum['usepostcounts'] == 0 && $thread['visible'] == 1) - { - $pcount -= $posters['posts']; - } - if(($forum['usepostcounts'] == 0 || $method == 'copy') && $newforum['usepostcounts'] == 1 && $thread['visible'] == 1) - { - $pcount += $posters['posts']; - } - - if($pcount > 0) - { - update_user_counters($posters['uid'], array('postnum' => "+$pcount")); - } - elseif($pcount < 0) - { - update_user_counters($posters['uid'], array('postnum' => $pcount)); - } - } - - if($forum['usethreadcounts'] == 1 && $method != 'copy' && $newforum['usethreadcounts'] == 0 && $thread['visible'] == 1) - { - update_user_counters($thread['uid'], array('threadnum' => "-1")); - } - elseif(($forum['usethreadcounts'] == 0 || $method == 'copy') && $newforum['usethreadcounts'] == 1 && $thread['visible'] == 1) - { - update_user_counters($thread['uid'], array('threadnum' => "+1")); - } - - // Update forum counts - $update_array = array( - "threads" => "+{$num_threads}", - "unapprovedthreads" => "+{$num_unapproved_threads}", - "posts" => "+{$num_posts}", - "unapprovedposts" => "+{$num_unapproved_posts}", - "deletedthreads" => "+{$num_deleted_threads}", - "deletedposts" => "+{$num_deleted_posts}" - ); - update_forum_counters($new_fid, $update_array); - update_forum_lastpost($new_fid); - - if($method != "copy") - { - // The redirect needs to be counted, too - if($method == "redirect") - { - if($thread['visible'] == -1) - { - --$num_deleted_threads; - --$num_deleted_posts; - } - elseif($thread['visible'] == 0) - { - --$num_unapproved_threads; - --$num_unapproved_posts; - } - else - { - --$num_threads; - --$num_posts; - } - } - $update_array = array( - "threads" => "-{$num_threads}", - "unapprovedthreads" => "-{$num_unapproved_threads}", - "posts" => "-{$num_posts}", - "unapprovedposts" => "-{$num_unapproved_posts}", - "deletedthreads" => "-{$num_deleted_threads}", - "deletedposts" => "-{$num_deleted_posts}" - ); - update_forum_counters($fid, $update_array); - update_forum_lastpost($fid); - } - - if(isset($newtid)) - { - return $newtid; - } - else - { - // Remove thread subscriptions for the users who no longer have permission to view the thread - $this->remove_thread_subscriptions($tid, false, $new_fid); - - return $tid; - } - } - - /** - * Merge one thread into another - * - * @param int $mergetid Thread that will be merged into destination - * @param int $tid Destination thread - * @param string $subject New thread subject - * @return boolean - */ - function merge_threads($mergetid, $tid, $subject) - { - global $db, $mybb, $mergethread, $thread, $plugins, $cache; - - $mergetid = (int)$mergetid; - $tid = (int)$tid; - - if(!isset($mergethread['tid']) || $mergethread['tid'] != $mergetid) - { - $mergethread = get_thread($mergetid); - } - if(!isset($thread['tid']) || $thread['tid'] != $tid) - { - $thread = get_thread($tid); - } - - if(!$mergethread || !$thread) - { - return false; - } - - $forum_cache = $cache->read('forums'); - - $threadarray = array(); - if(!$thread['poll'] && $mergethread['poll']) - { - $threadarray['poll'] = $mergethread['poll']; - $sqlarray = array( - "tid" => $tid, - ); - $db->update_query("polls", $sqlarray, "tid='".(int)$mergethread['tid']."'"); - } - // Both the old and the new thread have polls? Remove one - elseif($mergethread['poll']) - { - $db->delete_query("polls", "pid='{$mergethread['poll']}'"); - $db->delete_query("pollvotes", "pid='{$mergethread['poll']}'"); - } - - $subject = $db->escape_string($subject); - $threadarray['subject'] = $subject; - - $user_posts = array(); - if($thread['visible'] != $mergethread['visible'] || $forum_cache[$thread['fid']]['usepostcounts'] != $forum_cache[$mergethread['fid']]['usepostcounts']) - { - $query = $db->query(" - SELECT uid, COUNT(pid) AS postnum - FROM ".TABLE_PREFIX."posts - WHERE tid='{$mergetid}' AND visible=1 - GROUP BY uid - "); - while($post = $db->fetch_array($query)) - { - // Update user counters - if($mergethread['visible'] == 1 && $forum_cache[$mergethread['fid']]['usepostcounts'] == 1) - { - $user_posts[$post['uid']]['postnum'] -= $post['postnum']; - } - elseif($thread['visible'] == 1 && $forum_cache[$thread['fid']]['usepostcounts'] == 1) - { - $user_posts[$post['uid']]['postnum'] += $post['postnum']; - } - } - } - - $sqlarray = array( - "tid" => $tid, - "fid" => $thread['fid'], - "replyto" => 0, - ); - $db->update_query("posts", $sqlarray, "tid='{$mergetid}'"); - - $sqlarray = array( - "closed" => "moved|{$tid}", - ); - $db->update_query("threads", $sqlarray, "closed='moved|{$mergetid}'"); - $sqlarray = array( - "tid" => $tid, - ); - - // Update the thread ratings - $new_numrating = $thread['numratings'] + $mergethread['numratings']; - $new_threadrating = $thread['totalratings'] + $mergethread['totalratings']; - - $threadarray["numratings"] = $new_numrating; - $threadarray["totalratings"] = $new_threadrating; - $db->update_query("threads", $threadarray, "tid = '{$tid}'"); - - // Check if we have a thread subscription already for our new thread - $subscriptions = array(); - - $query = $db->simple_select("threadsubscriptions", "tid, uid", "tid='{$mergetid}' OR tid='{$tid}'"); - while($subscription = $db->fetch_array($query)) - { - if(!isset($subscriptions[$subscription['tid']])) - { - $subscriptions[$subscription['tid']] = array(); - } - $subscriptions[$subscription['tid']][] = $subscription['uid']; - } - - // Update any subscriptions for the merged thread - if(!empty($subscriptions[$mergetid])) - { - $update_users = array(); - foreach($subscriptions[$mergetid] as $user) - { - if(!isset($subscriptions[$tid]) || !in_array($user, $subscriptions[$tid])) - { - // User doesn't have a $tid subscription - $update_users[] = $user; - } - } - - if(!empty($update_users)) - { - $update_array = array( - "tid" => $tid - ); - - $update_users = implode(",", $update_users); - $db->update_query("threadsubscriptions", $update_array, "tid = '{$mergetid}' AND uid IN ({$update_users})"); - } - } - - // Remove source thread subscriptions - $db->delete_query("threadsubscriptions", "tid = '{$mergetid}'"); - - $arguments = array("mergetid" => $mergetid, "tid" => $tid, "subject" => $subject); - $plugins->run_hooks("class_moderation_merge_threads", $arguments); - - $this->delete_thread($mergetid); - - // Add the former first post - if($mergethread['visible'] == 1) - { - ++$mergethread['replies']; - } - elseif($mergethread['visible'] == -1) - { - ++$mergethread['deletedposts']; - } - else - { - ++$mergethread['unapprovedposts']; - } - - // In some cases the thread we may be merging with may cause us to have a new firstpost if it is an older thread - // Therefore resync the visible field to make sure they're the same if they're not - $query = $db->simple_select("posts", "pid, uid, visible", "tid='{$tid}'", array('order_by' => 'dateline', 'order_dir' => 'asc', 'limit' => 1)); - $new_firstpost = $db->fetch_array($query); - if($thread['visible'] != $new_firstpost['visible']) - { - $db->update_query("posts", array('visible' => $thread['visible']), "pid='{$new_firstpost['pid']}'"); - if($new_firstpost['visible'] == 1 && $forum_cache[$thread['fid']]['usepostcounts'] == 1) - { - --$user_posts[$post['uid']]['postnum']; - } - elseif($thread['visible'] == 1 && $forum_cache[$thread['fid']]['usepostcounts'] == 1) - { - ++$user_posts[$post['uid']]['postnum']; - } - } - // Update first post if needed - if($new_firstpost['pid'] != $thread['firstpost']) - { - update_first_post($thread['tid']); - } - - // Update thread count if thread has a new firstpost and is visible - if($thread['uid'] != $new_firstpost['uid'] && $thread['visible'] == 1 && $forum_cache[$thread['fid']]['usethreadcounts'] == 1) - { - if(!isset($user_posts[$thread['uid']]['threadnum'])) - { - $user_posts[$thread['uid']]['threadnum'] = 0; - } - --$user_posts[$thread['uid']]['threadnum']; - if(!isset($user_posts[$new_firstpost['uid']]['threadnum'])) - { - $user_posts[$new_firstpost['uid']]['threadnum'] = 0; - } - ++$user_posts[$new_firstpost['uid']]['threadnum']; - } - - // Thread is not in current forum - if($mergethread['fid'] != $thread['fid']) - { - // If new thread is unapproved, implied counter comes in to effect - if($thread['visible'] == 0) - { - $updated_stats = array( - "unapprovedposts" => '+'.($mergethread['replies']+$mergethread['unapprovedposts']+$mergethread['deletedposts']) - ); - } - elseif($thread['visible'] == -1) - { - $updated_stats = array( - "deletedposts" => '+'.($mergethread['replies']+$mergethread['deletedposts']+$mergethread['unapprovedposts']) - ); - } - else - { - $updated_stats = array( - "posts" => "+{$mergethread['replies']}", - "unapprovedposts" => "+{$mergethread['unapprovedposts']}", - "deletedposts" => "+{$mergethread['deletedposts']}" - ); - } - update_forum_counters($thread['fid'], $updated_stats); - - // If old thread is unapproved, implied counter comes in to effect - if($mergethread['visible'] == 0) - { - $updated_stats = array( - "unapprovedposts" => '-'.($mergethread['replies']+$mergethread['unapprovedposts']+$mergethread['deletedposts']) - ); - } - elseif($mergethread['visible'] == -1) - { - $updated_stats = array( - "deletedposts" => '-'.($mergethread['replies']+$mergethread['deletedposts']+$mergethread['unapprovedposts']) - ); - } - else - { - $updated_stats = array( - "posts" => "-{$mergethread['replies']}", - "unapprovedposts" => "-{$mergethread['unapprovedposts']}", - "deletedposts" => "-{$mergethread['deletedposts']}" - ); - } - update_forum_counters($mergethread['fid'], $updated_stats); - update_forum_lastpost($mergethread['fid']); - } - // Visibility changed - elseif($mergethread['visible'] != $thread['visible']) - { - $updated_stats = array( - 'posts' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0 - ); - - // If old thread is unapproved, implied counter comes in to effect - if($mergethread['visible'] == 0) - { - $updated_stats['unapprovedposts'] -= $mergethread['replies']+$mergethread['deletedposts']; - $updated_stats['posts'] += $mergethread['replies']; - $updated_stats['deletedposts'] += $mergethread['deletedposts']; - } - elseif($mergethread['visible'] == -1) - { - $updated_stats['deletedposts'] -= $mergethread['replies']+$mergethread['unapprovedposts']; - $updated_stats['posts'] += $mergethread['replies']; - $updated_stats['unapprovedposts'] += $mergethread['unapprovedposts']; - } - - // If new thread is unapproved, implied counter comes in to effect - if($thread['visible'] == 0) - { - $updated_stats['unapprovedposts'] += $mergethread['replies']+$mergethread['deletedposts']; - $updated_stats['posts'] -= $mergethread['replies']; - $updated_stats['deletedposts'] -= $mergethread['deletedposts']; - } - elseif($thread['visible'] == -1) - { - $updated_stats['deletedposts'] += $mergethread['replies']+$mergethread['unapprovedposts']; - $updated_stats['posts'] -= $mergethread['replies']; - $updated_stats['unapprovedposts'] -= $mergethread['unapprovedposts']; - } - - $new_stats = array(); - if($updated_stats['posts'] < 0) - { - $new_stats['posts'] = $updated_stats['posts']; - } - elseif($updated_stats['posts'] > 0) - { - $new_stats['posts'] = "+{$updated_stats['posts']}"; - } - - if($updated_stats['unapprovedposts'] < 0) - { - $new_stats['unapprovedposts'] = $updated_stats['unapprovedposts']; - } - elseif($updated_stats['unapprovedposts'] > 0) - { - $new_stats['unapprovedposts'] = "+{$updated_stats['unapprovedposts']}"; - } - - if($updated_stats['deletedposts'] < 0) - { - $new_stats['deletedposts'] = $updated_stats['deletedposts']; - } - elseif($updated_stats['deletedposts'] > 0) - { - $new_stats['deletedposts'] = "+{$updated_stats['deletedposts']}"; - } - - if(!empty($new_stats)) - { - update_forum_counters($mergethread['fid'], $new_stats); - update_forum_lastpost($mergethread['fid']); - } - } - - if($thread['visible'] != $new_firstpost['visible']) - { - // Correct counters - if($new_firstpost['visible'] == 1) - { - --$mergethread['replies']; - } - elseif($new_firstpost['visible'] == -1) - { - --$mergethread['deletedposts']; - } - else - { - --$mergethread['unapprovedposts']; - } - if($thread['visible'] == 1) - { - ++$mergethread['replies']; - } - elseif($thread['visible'] == -1) - { - ++$mergethread['deletedposts']; - } - else - { - ++$mergethread['unapprovedposts']; - } - } - - // Update user counters - foreach($user_posts as $uid => $counters) - { - $update_array = array( - "postnum" => "+{$counters['postnum']}", - "threadnum" => "+{$counters['threadnum']}", - ); - update_user_counters($uid, $update_array); - } - - $updated_stats = array( - "replies" => "+{$mergethread['replies']}", - "attachmentcount" => "+{$mergethread['attachmentcount']}", - "unapprovedposts" => "+{$mergethread['unapprovedposts']}", - "deletedposts" => "+{$mergethread['unapprovedposts']}", - "deletedposts" => "+{$mergethread['deletedposts']}" - ); - update_thread_counters($tid, $updated_stats); - update_last_post($tid); - - // Forum last post has to be updated after thread - update_forum_lastpost($thread['fid']); - return true; - } - - /** - * Split posts into a new/existing thread - * - * @param array $pids PIDs of posts to split - * @param int $tid Original thread ID (this is only used as a base for the new - * thread; it can be set to 0 when the posts specified are coming from more - * than 1 thread) - * @param int $moveto Destination forum - * @param string $newsubject New thread subject - * @param int $destination_tid TID if moving into existing thread - * @return int|bool New thread ID or false on failure - */ - function split_posts($pids, $tid, $moveto, $newsubject, $destination_tid=0) - { - global $db, $thread, $plugins, $cache; - - $tid = (int)$tid; - $moveto = (int)$moveto; - $newtid = (int)$destination_tid; - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - $pids_list = implode(',', $pids); - - // Get forum infos - $forum_cache = $cache->read('forums'); - - if(empty($pids) || !$forum_cache[$moveto]) - { - return false; - } - - // Get the first split post - $query = $db->simple_select('posts', 'pid,uid,visible,icon,username,dateline', 'pid IN ('.$pids_list.')', array('order_by' => 'dateline', 'order_dir' => 'asc', 'limit' => 1)); - - $post_info = $db->fetch_array($query); - - $visible = $post_info['visible']; - - $forum_counters[$moveto] = array( - 'threads' => 0, - 'deletedthreads' => 0, - 'unapprovedthreads' => 0, - 'posts' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0 - ); - - if($destination_tid == 0) - { - // Splitting into a new thread - // Create the new thread - $newsubject = $db->escape_string($newsubject); - $newthread = array( - "fid" => $moveto, - "subject" => $newsubject, - "icon" => (int)$post_info['icon'], - "uid" => (int)$post_info['uid'], - "username" => $db->escape_string($post_info['username']), - "dateline" => (int)$post_info['dateline'], - "firstpost" => $post_info['pid'], - "lastpost" => 0, - "lastposter" => '', - "visible" => (int)$visible, - "notes" => '' - ); - $newtid = $db->insert_query("threads", $newthread); - - if($visible == 1) - { - ++$forum_counters[$moveto]['threads']; - if(!isset($user_counters[$newthread['uid']])) - { - $user_counters[$newthread['uid']] = array( - 'postnum' => 0, - 'threadnum' => 0 - ); - } - ++$user_counters[$newthread['uid']]['threadnum']; - } - elseif($visible == -1) - { - ++$forum_counters[$moveto]['deletedthreads']; - } - else - { - // Unapproved thread? - ++$forum_counters[$moveto]['unapprovedthreads']; - } - } - else - { - $newthread = get_thread($newtid); - if(!$newthread) - { - return false; - } - $moveto = $newthread['fid']; - } - - // Get selected posts before moving forums to keep old fid - $original_posts_query = $db->query(" - SELECT p.pid, p.tid, p.fid, p.visible, p.uid, p.dateline, t.visible as threadvisible, t.firstpost, COUNT(a.aid) as postattachmentcount - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (p.tid=t.tid) - LEFT JOIN ".TABLE_PREFIX."attachments a ON (a.pid=p.pid AND a.visible=1) - WHERE p.pid IN ($pids_list) - GROUP BY p.pid - "); - - // Move the selected posts over - $sqlarray = array( - "tid" => $newtid, - "fid" => $moveto, - "replyto" => 0 - ); - $db->update_query("posts", $sqlarray, "pid IN ($pids_list)"); - - $thread_counters[$newtid] = array( - 'replies' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0, - 'attachmentcount' => 0 - ); - - // Get posts being merged - while($post = $db->fetch_array($original_posts_query)) - { - if(!isset($thread_counters[$post['tid']])) - { - $thread_counters[$post['tid']] = array( - 'replies' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0, - 'attachmentcount' => 0 - ); - } - if(!isset($forum_counters[$post['fid']])) - { - $forum_counters[$post['fid']] = array( - 'posts' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0 - ); - } - if(!isset($user_counters[$post['uid']])) - { - $user_counters[$post['uid']] = array( - 'postnum' => 0, - 'threadnum' => 0 - ); - } - if($post['visible'] == 1) - { - // Modify users' post counts - if($post['threadvisible'] == 1 && $forum_cache[$post['fid']]['usepostcounts'] == 1 && ($forum_cache[$moveto]['usepostcounts'] == 0 || $newthread['visible'] != 1)) - { - // Moving into a forum that doesn't count post counts - --$user_counters[$post['uid']]['postnum']; - } - - // Subtract 1 from the old thread's replies - --$thread_counters[$post['tid']]['replies']; - } - elseif($post['visible'] == 0) - { - // Unapproved post - // Subtract 1 from the old thread's unapproved posts - --$thread_counters[$post['tid']]['unapprovedposts']; - } - elseif($post['visible'] == -1) - { - // Soft deleted post - // Subtract 1 from the old thread's deleted posts - --$thread_counters[$post['tid']]['deletedposts']; - } - - // Subtract 1 from the old forum's posts - if($post['threadvisible'] == 1 && $post['visible'] == 1) - { - --$forum_counters[$post['fid']]['posts']; - } - elseif($post['threadvisible'] == 0 || ($post['visible'] == 0 && $post['threadvisible'] == 1)) - { - --$forum_counters[$post['fid']]['unapprovedposts']; - } - else - { - --$forum_counters[$post['fid']]['deletedposts']; - } - - // Subtract attachment counts from old thread and add to new thread (which are counted regardless of post or attachment unapproval at time of coding) - $thread_counters[$post['tid']]['attachmentcount'] -= $post['postattachmentcount']; - $thread_counters[$newtid]['attachmentcount'] += $post['postattachmentcount']; - - if($post['firstpost'] == $post['pid']) - { - // In some cases the first post of a thread changes - // Therefore resync the visible field to make sure they're the same if they're not - $query = $db->simple_select("posts", "pid, visible, uid", "tid='{$post['tid']}'", array('order_by' => 'dateline', 'order_dir' => 'asc', 'limit' => 1)); - $new_firstpost = $db->fetch_array($query); - - if(!isset($user_counters[$new_firstpost['uid']])) - { - $user_counters[$new_firstpost['uid']] = array( - 'postnum' => 0, - 'threadnum' => 0 - ); - } - - // Update post counters if visibility changes - if($post['threadvisible'] != $new_firstpost['visible']) - { - $db->update_query("posts", array('visible' => $post['threadvisible']), "pid='{$new_firstpost['pid']}'"); - // Subtract new first post - if($new_firstpost['visible'] == 1) - { - --$thread_counters[$post['tid']]['replies']; - if($post['threadvisible'] == 1 && $forum_cache[$post['fid']]['usepostcounts'] == 1) - { - --$user_counters[$new_firstpost['uid']]['postnum']; - } - } - elseif($new_firstpost['visible'] == -1) - { - --$thread_counters[$post['tid']]['deletedposts']; - } - else - { - --$thread_counters[$post['tid']]['unapprovedposts']; - } - if($post['threadvisible'] == 0 || ($new_firstpost['visible'] == 0 && $post['threadvisible'] == 1)) - { - --$forum_counters[$post['fid']]['unapprovedposts']; - } - else - { - --$forum_counters[$post['fid']]['deletedposts']; - } - - // Add old first post - if($post['threadvisible'] == 1) - { - ++$thread_counters[$post['tid']]['replies']; - ++$forum_counters[$post['fid']]['posts']; - if($forum_cache[$post['fid']]['usepostcounts'] == 1) - { - ++$user_counters[$new_firstpost['uid']]['postnum']; - } - } - elseif($post['threadvisible'] == -1) - { - ++$thread_counters[$post['tid']]['deletedposts']; - ++$forum_counters[$post['fid']]['deletedposts']; - } - else - { - ++$thread_counters[$post['tid']]['unapprovedposts']; - ++$forum_counters[$post['fid']]['unapprovedposts']; - } - } - - // Update user thread counter if thread opener changes - if($post['threadvisible'] == 1 && $forum_cache[$post['fid']]['usethreadcounts'] == 1 && $post['uid'] != $new_firstpost['uid']) - { - // Subtract thread from old thread opener - --$user_counters[$post['uid']]['threadnum']; - // Add thread to new thread opener - ++$user_counters[$new_firstpost['uid']]['threadnum']; - } - update_first_post($post['tid']); - } - - // This is the new first post of an existing thread? - if($post['pid'] == $post_info['pid'] && $post['dateline'] < $newthread['dateline']) - { - // Update post counters if visibility changes - if($post['visible'] != $newthread['visible']) - { - $db->update_query("posts", array('visible' => $newthread['visible']), "pid='{$post['pid']}'"); - - // This is needed to update the forum counters correctly - $post['visible'] = $newthread['visible']; - } - - // Update user thread counter if thread opener changes - if($newthread['visible'] == 1 && $forum_cache[$newthread['fid']]['usethreadcounts'] == 1 && $post['uid'] != $newthread['uid']) - { - // Add thread to new thread opener - ++$user_counters[$post['uid']]['threadnum']; - if(!isset($user_counters[$newthread['uid']])) - { - $user_counters[$newthread['uid']] = array( - 'postnum' => 0, - 'threadnum' => 0 - ); - } - // Subtract thread from old thread opener - --$user_counters[$newthread['uid']]['threadnum']; - } - update_first_post($newtid); - } - - if($post['visible'] == 1) - { - // Modify users' post counts - if($newthread['visible'] == 1 && ($forum_cache[$post['fid']]['usepostcounts'] == 0 || $post['threadvisible'] != 1) && $forum_cache[$moveto]['usepostcounts'] == 1) - { - // Moving into a forum that does count post counts - ++$user_counters[$post['uid']]['postnum']; - } - - // Add 1 to the new thread's replies - ++$thread_counters[$newtid]['replies']; - } - elseif($post['visible'] == 0) - { - // Unapproved post - // Add 1 to the new thread's unapproved posts - ++$thread_counters[$newtid]['unapprovedposts']; - } - elseif($post['visible'] == -1) - { - // Soft deleted post - // Add 1 to the new thread's deleted posts - ++$thread_counters[$newtid]['deletedposts']; - } - - // Add 1 to the new forum's posts - if($newthread['visible'] == 1 && $post['visible'] == 1) - { - ++$forum_counters[$moveto]['posts']; - } - elseif($newthread['visible'] == 0 || ($post['visible'] == 0 && $newthread['visible'] == 1)) - { - ++$forum_counters[$moveto]['unapprovedposts']; - } - else - { - ++$forum_counters[$moveto]['deletedposts']; - } - } - - if($destination_tid == 0 && $newthread['visible'] == 1) - { - // If splitting into a new thread, subtract one from the thread's reply count to compensate for the original post - --$thread_counters[$newtid]['replies']; - } - elseif($destination_tid == 0 && $newthread['visible'] == 0) - { - // If splitting into a new thread, subtract one from the thread's reply count to compensate for the original post - --$thread_counters[$newtid]['unapprovedposts']; - } - elseif($destination_tid == 0 && $newthread['visible'] == -1) - { - // If splitting into a new thread, subtract one from the thread's reply count to compensate for the original post - --$thread_counters[$newtid]['deletedposts']; - } - - $arguments = array("pids" => $pids, "tid" => $tid, "moveto" => $moveto, "newsubject" => $newsubject, "destination_tid" => $destination_tid); - $plugins->run_hooks("class_moderation_split_posts", $arguments); - - // Update user post counts - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counters) - { - foreach($counters as $key => $counter) - { - if($counter >= 0) - { - $counters[$key] = "+{$counter}"; // add the addition operator for query - } - } - update_user_counters($uid, $counters); - } - } - - // Update thread counters - if(is_array($thread_counters)) - { - foreach($thread_counters as $tid => $counters) - { - if($tid == $newtid) - { - // Update the subject of the first post in the new thread - $query = $db->simple_select("posts", "pid", "tid='$newtid'", array('order_by' => 'dateline', 'limit' => 1)); - $newthread = $db->fetch_array($query); - $sqlarray = array( - "subject" => $newsubject, - "replyto" => 0 - ); - $db->update_query("posts", $sqlarray, "pid='{$newthread['pid']}'"); - } - else - { - // Update the subject of the first post in the old thread - $query = $db->query(" - SELECT p.pid, t.subject - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (p.tid=t.tid) - WHERE p.tid='{$tid}' - ORDER BY p.dateline ASC - LIMIT 1 - "); - $oldthread = $db->fetch_array($query); - $sqlarray = array( - "subject" => $db->escape_string($oldthread['subject']), - "replyto" => 0 - ); - $db->update_query("posts", $sqlarray, "pid='{$oldthread['pid']}'"); - } - - foreach($counters as $key => $counter) - { - if($counter >= 0) - { - $counters[$key] = "+{$counter}"; - } - } - update_thread_counters($tid, $counters); - update_last_post($tid); - } - } - - // Update forum counters - if(!empty($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - foreach($counters as $key => $counter) - { - if($counter >= 0) - { - $counters[$key] = "+{$counter}"; - } - } - update_forum_counters($fid, $counters); - update_forum_lastpost($fid); - } - } - - return $newtid; - } - - /** - * Move multiple threads to new forum - * - * @param array $tids Thread IDs - * @param int $moveto Destination forum - * @return boolean - */ - function move_threads($tids, $moveto) - { - global $db, $plugins; - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $tid_list = implode(',', $tids); - - $moveto = (int)$moveto; - - $newforum = get_forum($moveto); - - if(empty($tids) || !$newforum) - { - return false; - } - - $total_posts = $total_unapproved_posts = $total_deleted_posts = $total_threads = $total_unapproved_threads = $total_deleted_threads = 0; - $forum_counters = $user_counters = array(); - $query = $db->simple_select("threads", "fid, visible, replies, unapprovedposts, deletedposts, tid, uid", "tid IN ($tid_list)"); - while($thread = $db->fetch_array($query)) - { - $forum = get_forum($thread['fid']); - - if(!isset($forum_counters[$thread['fid']])) - { - $forum_counters[$thread['fid']] = array( - 'posts' => 0, - 'threads' => 0, - 'unapprovedposts' => 0, - 'unapprovedthreads' => 0, - 'deletedthreads' => 0, - 'deletedposts' => 0 - ); - } - - if(!isset($user_counters[$thread['uid']])) - { - $user_counters[$thread['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - - if($thread['visible'] == 1) - { - $total_posts += $thread['replies']+1; - $total_unapproved_posts += $thread['unapprovedposts']; - $total_deleted_posts += $thread['deletedposts']; - $forum_counters[$thread['fid']]['posts'] += $thread['replies']+1; - $forum_counters[$thread['fid']]['unapprovedposts'] += $thread['unapprovedposts']; - $forum_counters[$thread['fid']]['deletedposts'] += $thread['deletedposts']; - - $forum_counters[$thread['fid']]['threads']++; - ++$total_threads; - - if($newforum['usethreadcounts'] == 1 && $forum['usethreadcounts'] == 0) - { - ++$user_counters[$thread['uid']]['num_threads']; - } - else if($newforum['usethreadcounts'] == 0 && $forum['usethreadcounts'] == 1) - { - --$user_counters[$thread['uid']]['num_threads']; - } - - $query1 = $db->query(" - SELECT COUNT(p.pid) AS posts, u.uid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid = '{$thread['tid']}' AND p.visible=1 - GROUP BY u.uid - ORDER BY posts DESC - "); - while($posters = $db->fetch_array($query1)) - { - if(!isset($user_counters[$posters['uid']])) - { - $user_counters[$posters['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - - if($newforum['usepostcounts'] != 0 && $forum['usepostcounts'] == 0) - { - $user_counters[$posters['uid']]['num_posts'] += $posters['posts']; - } - else if($newforum['usepostcounts'] == 0 && $forum['usepostcounts'] != 0) - { - $user_counters[$posters['uid']]['num_posts'] -= $posters['posts']; - } - } - } - elseif($thread['visible'] == -1) - { - $total_deleted_posts += $thread['replies']+$thread['unapprovedposts']+$thread['deletedposts']+1; - - $forum_counters[$thread['fid']]['deletedposts'] += $thread['replies']+$thread['unapprovedposts']+$thread['deletedposts']+1; // Implied deleted posts counter for deleted threads - - $forum_counters[$thread['fid']]['deletedthreads']++; - ++$total_deleted_threads; - } - else - { - $total_unapproved_posts += $thread['replies']+$thread['unapprovedposts']+$thread['deletedposts']+1; - - $forum_counters[$thread['fid']]['unapprovedposts'] += $thread['replies']+$thread['unapprovedposts']+$thread['deletedposts']+1; // Implied unapproved posts counter for unapproved threads - - $forum_counters[$thread['fid']]['unapprovedthreads']++; - ++$total_unapproved_threads; - } - - // Remove old redirects - $redirects_query = $db->simple_select('threads', 'tid', "closed='moved|{$thread['tid']}' AND fid='$moveto'"); - while($redirect_tid = $db->fetch_field($redirects_query, 'tid')) - { - $this->delete_thread($redirect_tid); - } - } - - $sqlarray = array( - "fid" => $moveto, - ); - $db->update_query("threads", $sqlarray, "tid IN ($tid_list)"); - $db->update_query("posts", $sqlarray, "tid IN ($tid_list)"); - - // If any of the thread has a prefix and the destination forum doesn't accept that prefix, remove the prefix - $query = $db->simple_select("threads", "tid, prefix", "tid IN ($tid_list) AND prefix != 0"); - while($thread = $db->fetch_array($query)) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(','||forums||',' LIKE '%,$moveto,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - break; - default: - $query = $db->simple_select("threadprefixes", "COUNT(*) as num_prefixes", "(CONCAT(',',forums,',') LIKE '%,$moveto,%' OR forums='-1') AND pid='".$thread['prefix']."'"); - } - if($db->fetch_field($query, "num_prefixes") == 0) - { - $sqlarray = array( - "prefix" => 0, - ); - $db->update_query("threads", $sqlarray, "tid = '{$thread['tid']}'"); - } - } - - $arguments = array("tids" => $tids, "moveto" => $moveto); - $plugins->run_hooks("class_moderation_move_threads", $arguments); - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counters) - { - $update_array = array( - "postnum" => "+{$counters['num_posts']}", - "threadnum" => "+{$counters['num_threads']}", - ); - update_user_counters($uid, $update_array); - } - } - - if(is_array($forum_counters)) - { - foreach($forum_counters as $fid => $counter) - { - $updated_count = array( - 'posts' => "-{$counter['posts']}", - 'threads' => "-{$counter['threads']}", - 'unapprovedposts' => "-{$counter['unapprovedposts']}", - 'unapprovedthreads' => "-{$counter['unapprovedthreads']}", - 'deletedposts' => "-{$counter['deletedposts']}", - 'deletedthreads' => "-{$counter['deletedthreads']}" - - ); - update_forum_counters($fid, $updated_count); - update_forum_lastpost($fid); - } - } - - $updated_count = array( - "threads" => "+{$total_threads}", - "unapprovedthreads" => "+{$total_unapproved_threads}", - "posts" => "+{$total_posts}", - "unapprovedposts" => "+{$total_unapproved_posts}", - 'deletedposts' => "+{$total_deleted_posts}", - "deletedthreads" => "+{$total_deleted_threads}" - ); - - update_forum_counters($moveto, $updated_count); - update_forum_lastpost($moveto); - - // Remove thread subscriptions for the users who no longer have permission to view the thread - $this->remove_thread_subscriptions($tid_list, false, $moveto); - - return true; - } - - /** - * Approve multiple posts - * - * @param array $pids PIDs - * @return boolean - */ - function approve_posts($pids) - { - global $db, $cache, $plugins; - - $num_posts = 0; - - if(empty($pids)) - { - return false; - } - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - $pid_list = implode(',', $pids); - $pids = $threads_to_update = array(); - - // Make visible - $approve = array( - "visible" => 1, - ); - - // We have three cases we deal with in these code segments: - // 1) We're approving specific unapproved posts - // 1.1) if the thread is approved - // 1.2) if the thread is unapproved - // 2) We're approving the firstpost of the thread, therefore approving the thread itself - // 3) We're doing both 1 and 2 - $query = $db->query(" - SELECT p.tid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ($pid_list) AND p.visible = '0' AND t.firstpost = p.pid AND t.visible = 0 - "); - while($post = $db->fetch_array($query)) - { - // This is the first post in the thread so we're approving the whole thread. - $threads_to_update[] = $post['tid']; - } - - if(!empty($threads_to_update)) - { - $this->approve_threads($threads_to_update); - } - - $thread_counters = $forum_counters = $user_counters = array(); - - $query = $db->query(" - SELECT p.pid, p.tid, p.fid, p.uid, t.visible AS threadvisible - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ($pid_list) AND p.visible = '0' AND t.firstpost != p.pid - "); - while($post = $db->fetch_array($query)) - { - $pids[] = $post['pid']; - - if(!isset($thread_counters[$post['tid']])) - { - $thread_counters[$post['tid']] = array( - 'replies' => 0 - ); - } - - ++$thread_counters[$post['tid']]['replies']; - - // If the thread of this post is unapproved then we've already taken into account this counter as implied. - // Updating it again would cause it to double count - if($post['threadvisible'] == 1) - { - if(!isset($forum_counters[$post['fid']])) - { - $forum_counters[$post['fid']] = array( - 'num_posts' => 0 - ); - } - ++$forum_counters[$post['fid']]['num_posts']; - } - - $forum = get_forum($post['fid']); - - // If post counts enabled in this forum and the thread is approved, add 1 - if($forum['usepostcounts'] != 0 && $post['threadvisible'] == 1) - { - if(!isset($user_counters[$post['uid']])) - { - $user_counters[$post['uid']] = 0; - } - ++$user_counters[$post['uid']]; - } - } - - if(empty($pids) && empty($threads_to_update)) - { - return false; - } - - if(!empty($pids)) - { - $where = "pid IN (".implode(',', $pids).")"; - $db->update_query("posts", $approve, $where); - } - - $plugins->run_hooks("class_moderation_approve_posts", $pids); - - if(!empty($thread_counters)) - { - foreach($thread_counters as $tid => $counters) - { - $counters_update = array( - "unapprovedposts" => "-".$counters['replies'], - "replies" => "+".$counters['replies'] - ); - update_thread_counters($tid, $counters_update); - update_last_post($tid); - } - } - - if(!empty($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - $updated_forum_stats = array( - 'posts' => "+{$counters['num_posts']}", - 'unapprovedposts' => "-{$counters['num_posts']}", - ); - update_forum_counters($fid, $updated_forum_stats); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counter) - { - update_user_counters($uid, array('postnum' => "+{$counter}")); - } - } - - return true; - } - - /** - * Unapprove multiple posts - * - * @param array $pids PIDs - * @return boolean - */ - function unapprove_posts($pids) - { - global $db, $cache, $plugins; - - if(empty($pids)) - { - return false; - } - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - $pid_list = implode(',', $pids); - $pids = $threads_to_update = array(); - - // Make invisible - $approve = array( - "visible" => 0, - ); - - // We have three cases we deal with in these code segments: - // 1) We're unapproving specific approved posts - // 1.1) if the thread is approved - // 1.2) if the thread is unapproved - // 1.3) if the thread is deleted - // 2) We're unapproving the firstpost of the thread, therefore unapproving the thread itself - // 3) We're doing both 1 and 2 - $query = $db->query(" - SELECT p.tid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ($pid_list) AND p.visible IN (-1,1) AND t.firstpost = p.pid AND t.visible IN (-1,1) - "); - while($post = $db->fetch_array($query)) - { - // This is the first post in the thread so we're unapproving the whole thread. - $threads_to_update[] = $post['tid']; - } - - if(!empty($threads_to_update)) - { - $this->unapprove_threads($threads_to_update); - } - - $thread_counters = $forum_counters = $user_counters = array(); - - $query = $db->query(" - SELECT p.pid, p.tid, p.visible, p.fid, p.uid, t.visible AS threadvisible - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ($pid_list) AND p.visible IN (-1,1) AND t.firstpost != p.pid - "); - while($post = $db->fetch_array($query)) - { - $pids[] = $post['pid']; - - if(!isset($thread_counters[$post['tid']])) - { - $thread_counters[$post['tid']] = array( - 'replies' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0 - ); - } - - ++$thread_counters[$post['tid']]['unapprovedposts']; - if($post['visible'] == 1) - { - ++$thread_counters[$post['tid']]['replies']; - } - else - { - ++$thread_counters[$post['tid']]['deletedposts']; - } - - if(!isset($forum_counters[$post['fid']])) - { - $forum_counters[$post['fid']] = array( - 'num_posts' => 0, - 'num_unapproved_posts' => 0, - 'num_deleted_posts' => 0 - ); - } - - // If the thread of this post is unapproved then we've already taken into account this counter as implied. - // Updating it again would cause it to double count - if($post['threadvisible'] != 0) - { - ++$forum_counters[$post['fid']]['num_unapproved_posts']; - if($post['visible'] == 1) - { - ++$forum_counters[$post['fid']]['num_posts']; - } - else - { - ++$forum_counters[$post['fid']]['num_deleted_posts']; - } - } - - $forum = get_forum($post['fid']); - - // If post counts enabled in this forum and the thread is approved, subtract 1 - if($forum['usepostcounts'] != 0 && $post['visible'] == 1 && $post['threadvisible'] == 1) - { - if(!isset($user_counters[$post['uid']])) - { - $user_counters[$post['uid']] = 0; - } - --$user_counters[$post['uid']]; - } - } - - if(empty($pids) && empty($threads_to_update)) - { - return false; - } - - if(!empty($pids)) - { - $where = "pid IN (".implode(',', $pids).")"; - $db->update_query("posts", $approve, $where); - } - - $plugins->run_hooks("class_moderation_unapprove_posts", $pids); - - if(!empty($thread_counters)) - { - foreach($thread_counters as $tid => $counters) - { - $counters_update = array( - "unapprovedposts" => "+".$counters['unapprovedposts'], - "replies" => "-".$counters['replies'], - "deletedposts" => "-".$counters['deletedposts'] - ); - - update_thread_counters($tid, $counters_update); - update_last_post($tid); - } - } - - if(!empty($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - $updated_forum_stats = array( - 'posts' => "-{$counters['num_posts']}", - 'unapprovedposts' => "+{$counters['num_unapproved_posts']}", - 'deletedposts' => "-{$counters['num_deleted_posts']}" - ); - update_forum_counters($fid, $updated_forum_stats); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counter) - { - update_user_counters($uid, array('postnum' => "{$counter}")); - } - } - - return true; - } - - /** - * Change thread subject - * - * @param int|array $tids Thread ID(s) - * @param string $format Format of new subject (with {subject}) - * @return boolean - */ - function change_thread_subject($tids, $format) - { - global $db, $mybb, $plugins; - - // Get tids into list - if(!is_array($tids)) - { - $tids = array($tids); - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - if(empty($tids)) - { - return false; - } - - $tid_list = implode(',', $tids); - - // Get original subject - $query = $db->simple_select("threads", "subject, tid", "tid IN ($tid_list)"); - while($thread = $db->fetch_array($query)) - { - // Update threads and first posts with new subject - $subject = str_replace('{username}', $mybb->user['username'], $format); - $subject = str_replace('{subject}', $thread['subject'], $subject); - $new_subject = array( - "subject" => $db->escape_string($subject) - ); - $db->update_query("threads", $new_subject, "tid='{$thread['tid']}'"); - $db->update_query("posts", $new_subject, "tid='{$thread['tid']}' AND replyto='0'"); - } - - $arguments = array("tids" => $tids, "format" => $format); - $plugins->run_hooks("class_moderation_change_thread_subject", $arguments); - - return true; - } - - /** - * Add thread expiry - * - * @param int $tid Thread ID - * @param int $deletetime Timestamp when the thread is deleted - * @return boolean - */ - function expire_thread($tid, $deletetime) - { - global $db, $plugins; - - $tid = (int)$tid; - - if(empty($tid)) - { - return false; - } - - $update_thread = array( - "deletetime" => (int)$deletetime - ); - $db->update_query("threads", $update_thread, "tid='{$tid}'"); - - $arguments = array("tid" => $tid, "deletetime" => $deletetime); - $plugins->run_hooks("class_moderation_expire_thread", $arguments); - - return true; - } - - /** - * Toggle post visibility (approved/unapproved) - * - * @param array $pids Post IDs - * @return boolean true - */ - function toggle_post_visibility($pids) - { - global $db; - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - $pid_list = implode(',', $pids); - $query = $db->simple_select("posts", 'pid, visible', "pid IN ($pid_list)"); - while($post = $db->fetch_array($query)) - { - if($post['visible'] != 0) - { - $unapprove[] = $post['pid']; - } - else - { - $approve[] = $post['pid']; - } - } - if(is_array($unapprove)) - { - $this->unapprove_posts($unapprove); - } - if(is_array($approve)) - { - $this->approve_posts($approve); - } - return true; - } - - /** - * Toggle post visibility (deleted/restored) - * - * @param array $pids Post IDs - * @return boolean true - */ - function toggle_post_softdelete($pids) - { - global $db; - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - $pid_list = implode(',', $pids); - $query = $db->simple_select("posts", 'pid, visible', "pid IN ($pid_list)"); - while($post = $db->fetch_array($query)) - { - if($post['visible'] != -1) - { - $delete[] = $post['pid']; - } - else - { - $restore[] = $post['pid']; - } - } - if(is_array($delete)) - { - $this->soft_delete_posts($delete); - } - if(is_array($restore)) - { - $this->restore_posts($restore); - } - return true; - } - - /** - * Toggle thread visibility (approved/unapproved) - * - * @param array $tids Thread IDs - * @param int $fid Forum ID - * @return boolean true - */ - function toggle_thread_visibility($tids, $fid) - { - global $db; - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - $fid = (int)$fid; - - $tid_list = implode(',', $tids); - $query = $db->simple_select("threads", 'tid, visible', "tid IN ($tid_list)"); - while($thread = $db->fetch_array($query)) - { - if($thread['visible'] != 0) - { - $unapprove[] = $thread['tid']; - } - else - { - $approve[] = $thread['tid']; - } - } - if(is_array($unapprove)) - { - $this->unapprove_threads($unapprove, $fid); - } - if(is_array($approve)) - { - $this->approve_threads($approve, $fid); - } - return true; - } - - /** - * Toggle thread visibility (deleted/restored) - * - * @param array $tids Thread IDs - * @return boolean true - */ - function toggle_thread_softdelete($tids) - { - global $db; - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $tid_list = implode(',', $tids); - $query = $db->simple_select("threads", 'tid, visible', "tid IN ($tid_list)"); - while($thread = $db->fetch_array($query)) - { - if($thread['visible'] != -1) - { - $delete[] = $thread['tid']; - } - else - { - $restore[] = $thread['tid']; - } - } - if(is_array($delete)) - { - $this->soft_delete_threads($delete); - } - if(is_array($restore)) - { - $this->restore_threads($restore); - } - return true; - } - - /** - * Toggle threads open/closed - * - * @param array $tids Thread IDs - * @return boolean true - */ - function toggle_thread_status($tids) - { - global $db; - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $tid_list = implode(',', $tids); - $query = $db->simple_select("threads", 'tid, closed', "tid IN ($tid_list)"); - while($thread = $db->fetch_array($query)) - { - if($thread['closed'] == 1) - { - $open[] = $thread['tid']; - } - elseif($thread['closed'] == 0) - { - $close[] = $thread['tid']; - } - } - if(is_array($open)) - { - $this->open_threads($open); - } - if(is_array($close)) - { - $this->close_threads($close); - } - return true; - } - - /** - * Toggle threads stick/unstick - * - * @param array $tids Thread IDs - * @return boolean true - */ - function toggle_thread_importance($tids) - { - global $db; - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $stick = array(); - $unstick = array(); - - $tid_list = implode(',', $tids); - $query = $db->simple_select("threads", 'tid, sticky', "tid IN ($tid_list)"); - while($thread = $db->fetch_array($query)) - { - if($thread['sticky'] == 0) - { - $stick[] = $thread['tid']; - } - elseif($thread['sticky'] == 1) - { - $unstick[] = $thread['tid']; - } - } - if(!empty($stick)) - { - $this->stick_threads($stick); - } - if(!empty($unstick)) - { - $this->unstick_threads($unstick); - } - return true; - } - - /** - * Remove thread subscriptions (from one or multiple threads in the same forum) - * - * @param int|array $tids Thread ID, or an array of thread IDs from the same forum. - * @param boolean $all True (default) to delete all subscriptions, false to only delete subscriptions from users with no permission to read the thread - * @param int $fid (Only applies if $all is false) The forum ID of the thread - * @return boolean - */ - function remove_thread_subscriptions($tids, $all = true, $fid = 0) - { - global $db, $plugins; - - // Format thread IDs - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - $fid = (int)$fid; - - $tids_csv = implode(',', $tids); - - // Delete only subscriptions from users who no longer have permission to read the thread. - if(!$all) - { - // Get groups that cannot view the forum or its threads - $forum_parentlist = get_parent_list($fid); - $query = $db->simple_select("forumpermissions", "gid", "fid IN ({$forum_parentlist}) AND (canview=0 OR canviewthreads=0)"); - $groups = array(); - $additional_groups = ''; - while($group = $db->fetch_array($query)) - { - $groups[] = $group['gid']; - switch($db->type) - { - case "pgsql": - case "sqlite": - $additional_groups .= " OR ','||u.additionalgroups||',' LIKE ',{$group['gid']},'"; - break; - default: - $additional_groups .= " OR CONCAT(',',u.additionalgroups,',') LIKE ',{$group['gid']},'"; - } - } - // If there are groups found, delete subscriptions from users in these groups - if(count($groups) > 0) - { - $groups_csv = implode(',', $groups); - $query = $db->query(" - SELECT s.tid, u.uid - FROM ".TABLE_PREFIX."threadsubscriptions s - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=s.uid) - WHERE s.tid IN ({$tids_csv}) - AND (u.usergroup IN ({$groups_csv}){$additional_groups}) - "); - while($subscription = $db->fetch_array($query)) - { - $db->delete_query("threadsubscriptions", "uid='{$subscription['uid']}' AND tid='{$subscription['tid']}'"); - } - } - } - // Delete all subscriptions of this thread - else - { - $db->delete_query("threadsubscriptions", "tid IN ({$tids_csv})"); - } - - $arguments = array("tids" => $tids, "all" => $all, "fid" => $fid); - $plugins->run_hooks("class_moderation_remove_thread_subscriptions", $arguments); - - return true; - } - - /** - * Apply a thread prefix (to one or multiple threads in the same forum) - * - * @param int|array $tids Thread ID, or an array of thread IDs from the same forum. - * @param int $prefix Prefix ID to apply to the threads - * @return bool - */ - function apply_thread_prefix($tids, $prefix = 0) - { - global $db, $plugins; - - // Format thread IDs - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - $tids_csv = implode(',', $tids); - - $update_thread = array('prefix' => (int)$prefix); - $db->update_query('threads', $update_thread, "tid IN ({$tids_csv})"); - - $arguments = array('tids' => $tids, 'prefix' => $prefix); - - $plugins->run_hooks('class_moderation_apply_thread_prefix', $arguments); - - return true; - } - - /** - * Soft delete multiple posts - * - * @param array $pids PIDs - * @return boolean - */ - function soft_delete_posts($pids) - { - global $db, $cache, $plugins; - - if(empty($pids)) - { - return false; - } - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - $pid_list = implode(',', $pids); - $pids = $threads_to_update = array(); - - // Make invisible - $update = array( - "visible" => -1, - ); - - // We have three cases we deal with in these code segments: - // 1) We're deleting specific approved posts - // 1.1) if the thread is approved - // 1.2) if the thread is unapproved - // 1.3) if the thread is deleted - // 2) We're deleting the firstpost of the thread, therefore deleting the thread itself - // 3) We're doing both 1 and 2 - $query = $db->query(" - SELECT p.tid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ($pid_list) AND p.visible IN (0,1) AND t.firstpost = p.pid AND t.visible IN (0,1) - "); - while($post = $db->fetch_array($query)) - { - // This is the first post in the thread so we're deleting the whole thread. - $threads_to_update[] = $post['tid']; - } - - if(!empty($threads_to_update)) - { - $this->soft_delete_threads($threads_to_update); - } - - $thread_counters = $forum_counters = $user_counters = array(); - - $query = $db->query(" - SELECT p.pid, p.tid, p.visible, f.fid, f.usepostcounts, p.uid, t.visible AS threadvisible - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=p.fid) - WHERE p.pid IN ($pid_list) AND p.visible IN (0,1) AND t.firstpost != p.pid - "); - while($post = $db->fetch_array($query)) - { - $pids[] = $post['pid']; - - if(!isset($thread_counters[$post['tid']])) - { - $thread_counters[$post['tid']] = array( - 'replies' => 0, - 'unapprovedposts' => 0, - 'deletedposts' => 0 - ); - } - - ++$thread_counters[$post['tid']]['deletedposts']; - if($post['visible'] == 1) - { - ++$thread_counters[$post['tid']]['replies']; - } - else - { - ++$thread_counters[$post['tid']]['unapprovedposts']; - } - - if(!isset($forum_counters[$post['fid']])) - { - $forum_counters[$post['fid']] = array( - 'num_posts' => 0, - 'num_unapproved_posts' => 0, - 'num_deleted_posts' => 0 - ); - } - - // If the thread of this post is deleted then we've already taken into account this counter as implied. - // Updating it again would cause it to double count - if($post['threadvisible'] == 1) - { - ++$forum_counters[$post['fid']]['num_deleted_posts']; - if($post['visible'] == 1) - { - ++$forum_counters[$post['fid']]['num_posts']; - } - else - { - ++$forum_counters[$post['fid']]['num_unapproved_posts']; - } - } - - // If post counts enabled in this forum and the thread is approved, subtract 1 - if($post['usepostcounts'] != 0 && $post['threadvisible'] == 1 && $post['visible'] == 1) - { - if(!isset($user_counters[$post['uid']])) - { - $user_counters[$post['uid']] = 0; - } - --$user_counters[$post['uid']]; - } - } - - if(empty($pids) && empty($threads_to_update)) - { - return false; - } - - if(!empty($pids)) - { - $where = "pid IN (".implode(',', $pids).")"; - $db->update_query("posts", $update, $where); - mark_reports($pids, "posts"); - } - - $plugins->run_hooks("class_moderation_soft_delete_posts", $pids); - - if(is_array($thread_counters)) - { - foreach($thread_counters as $tid => $counters) - { - $counters_update = array( - "unapprovedposts" => "-".$counters['unapprovedposts'], - "replies" => "-".$counters['replies'], - "deletedposts" => "+".$counters['deletedposts'] - ); - - update_thread_counters($tid, $counters_update); - update_last_post($tid); - } - } - - if(is_array($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - $updated_forum_stats = array( - 'posts' => "-{$counters['num_posts']}", - 'unapprovedposts' => "-{$counters['num_unapproved_posts']}", - 'deletedposts' => "+{$counters['num_deleted_posts']}" - ); - update_forum_counters($fid, $updated_forum_stats); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counter) - { - update_user_counters($uid, array('postnum' => "{$counter}")); - } - } - - return true; - } - - /** - * Restore multiple posts - * - * @param array $pids PIDs - * @return boolean - */ - function restore_posts($pids) - { - global $db, $cache, $plugins; - - $num_posts = 0; - - if(empty($pids)) - { - return false; - } - - // Make sure we only have valid values - $pids = array_map('intval', $pids); - - $pid_list = implode(',', $pids); - $pids = $threads_to_update = array(); - - // Make visible - $update = array( - "visible" => 1, - ); - - // We have three cases we deal with in these code segments: - // 1) We're approving specific restored posts - // 1.1) if the thread is deleted - // 1.2) if the thread is restored - // 2) We're restoring the firstpost of the thread, therefore restoring the thread itself - // 3) We're doing both 1 and 2 - $query = $db->query(" - SELECT p.tid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ($pid_list) AND p.visible = '-1' AND t.firstpost = p.pid AND t.visible = -1 - "); - while($post = $db->fetch_array($query)) - { - // This is the first post in the thread so we're approving the whole thread. - $threads_to_update[] = $post['tid']; - } - - if(!empty($threads_to_update)) - { - $this->restore_threads($threads_to_update); - } - - $thread_counters = $forum_counters = $user_counters = array(); - - $query = $db->query(" - SELECT p.pid, p.tid, f.fid, f.usepostcounts, p.uid, t.visible AS threadvisible - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=p.fid) - WHERE p.pid IN ($pid_list) AND p.visible = '-1' AND t.firstpost != p.pid - "); - while($post = $db->fetch_array($query)) - { - $pids[] = $post['pid']; - - if(!isset($thread_counters[$post['tid']])) - { - $thread_counters[$post['tid']] = array( - 'replies' => 0 - ); - } - - ++$thread_counters[$post['tid']]['replies']; - - // If the thread of this post is deleted then we've already taken into account this counter as implied. - // Updating it again would cause it to double count - if($post['threadvisible'] == 1) - { - if(!isset($forum_counters[$post['fid']])) - { - $forum_counters[$post['fid']] = array( - 'num_posts' => 0 - ); - } - ++$forum_counters[$post['fid']]['num_posts']; - } - - // If post counts enabled in this forum and the thread is approved, add 1 - if($post['usepostcounts'] != 0 && $post['threadvisible'] == 1) - { - if(!isset($user_counters[$post['uid']])) - { - $user_counters[$post['uid']] = 0; - } - ++$user_counters[$post['uid']]; - - } - } - - if(empty($pids) && empty($threads_to_update)) - { - return false; - } - - if(!empty($pids)) - { - $where = "pid IN (".implode(',', $pids).")"; - $db->update_query("posts", $update, $where); - } - - $plugins->run_hooks("class_moderation_restore_posts", $pids); - - if(is_array($thread_counters)) - { - foreach($thread_counters as $tid => $counters) - { - $counters_update = array( - "deletedposts" => "-".$counters['replies'], - "replies" => "+".$counters['replies'] - ); - update_thread_counters($tid, $counters_update); - update_last_post($tid); - } - } - - if(is_array($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - $updated_forum_stats = array( - 'posts' => "+{$counters['num_posts']}", - 'deletedposts' => "-{$counters['num_posts']}" - ); - update_forum_counters($fid, $updated_forum_stats); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counter) - { - update_user_counters($uid, array('postnum' => "+{$counter}")); - } - } - - return true; - } - - /** - * Restore one or more threads - * - * @param array|int $tids Thread ID(s) - * @return boolean true - */ - function restore_threads($tids) - { - global $db, $cache, $plugins; - - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $tid_list = $forum_counters = $user_counters = $posts_to_restore = array(); - - foreach($tids as $tid) - { - $thread = get_thread($tid); - if(!$thread || $thread['visible'] != -1) - { - continue; - } - $tid_list[] = $thread['tid']; - - $forum = get_forum($thread['fid']); - - if(!isset($forum_counters[$forum['fid']])) - { - $forum_counters[$forum['fid']] = array( - 'num_posts' => 0, - 'num_threads' => 0, - 'num_deleted_posts' => 0, - 'num_unapproved_posts' => 0 - ); - } - - if(!isset($user_counters[$thread['uid']])) - { - $user_counters[$thread['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - - ++$forum_counters[$forum['fid']]['num_threads']; - $forum_counters[$forum['fid']]['num_posts'] += $thread['replies']+1; // Remove implied visible from count - $forum_counters[$forum['fid']]['num_deleted_posts'] += $thread['replies']+$thread['unapprovedposts']+1; - $forum_counters[$forum['fid']]['num_unapproved_posts'] += $thread['unapprovedposts']; - - if($forum['usepostcounts'] != 0) - { - // On approving thread restore user post counts - $query = $db->simple_select("posts", "COUNT(pid) as posts, uid", "tid='{$tid}' AND (visible='1' OR pid='{$thread['firstpost']}') AND uid > 0 GROUP BY uid"); - while($counter = $db->fetch_array($query)) - { - if(!isset($user_counters[$counter['uid']]['num_posts'])) - { - $user_counters[$counter['uid']]['num_posts'] = 0; - } - $user_counters[$counter['uid']]['num_posts'] += $counter['posts']; - } - } - - if($forum['usethreadcounts'] != 0 && substr($thread['closed'], 0, 6) != 'moved|') - { - ++$user_counters[$thread['uid']]['num_threads']; - } - - $posts_to_restore[] = $thread['firstpost']; - } - - if(!empty($tid_list)) - { - $tid_moved_list = ""; - $comma = ""; - foreach($tid_list as $tid) - { - $tid_moved_list .= "{$comma}'moved|{$tid}'"; - $comma = ","; - } - $tid_list = implode(',', $tid_list); - $update = array( - "visible" => 1 - ); - $db->update_query("threads", $update, "tid IN ($tid_list)"); - // Restore redirects, too - $redirect_tids = array(); - $query = $db->simple_select('threads', 'tid', "closed IN ({$tid_moved_list})"); - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $redirect_tids[] = $redirect_tid; - } - if(!empty($redirect_tids)) - { - $this->restore_threads($redirect_tids); - } - if(!empty($posts_to_restore)) - { - $db->update_query("posts", $update, "pid IN (".implode(',', $posts_to_restore).")"); - } - - $plugins->run_hooks("class_moderation_restore_threads", $tids); - - if(is_array($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - // Update stats - $update_array = array( - "threads" => "+{$counters['num_threads']}", - "posts" => "+{$counters['num_posts']}", - "unapprovedposts" => "+{$counters['num_unapproved_posts']}", - "deletedposts" => "-{$counters['num_deleted_posts']}", - "deletedthreads" => "-{$counters['num_threads']}" - ); - update_forum_counters($fid, $update_array); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counters) - { - $update_array = array( - "postnum" => "+{$counters['num_posts']}", - "threadnum" => "+{$counters['num_threads']}", - ); - update_user_counters($uid, $update_array); - } - } - } - return true; - } - - /** - * Soft delete one or more threads - * - * @param array|int Thread ID(s) - * @return boolean - */ - function soft_delete_threads($tids) - { - global $db, $cache, $plugins; - - if(!is_array($tids)) - { - $tids = array($tids); - } - - if(empty($tids)) - { - return false; - } - - // Make sure we only have valid values - $tids = array_map('intval', $tids); - - $tid_list = implode(',', $tids); - $tid_moved_list = ""; - $comma = ""; - foreach($tids as $tid) - { - $tid_moved_list .= "{$comma}'moved|{$tid}'"; - $comma = ","; - } - - $forum_counters = $user_counters = $posts_to_delete = array(); - - foreach($tids as $tid) - { - $thread = get_thread($tid); - $forum = get_forum($thread['fid']); - - if($thread['visible'] == 1 || $thread['visible'] == 0) - { - if(!isset($forum_counters[$forum['fid']])) - { - $forum_counters[$forum['fid']] = array( - 'num_posts' => 0, - 'num_threads' => 0, - 'num_deleted_threads' => 0, - 'num_deleted_posts' => 0, - 'unapproved_threads' => 0, - 'unapproved_posts' => 0 - ); - } - - if(!isset($user_counters[$thread['uid']])) - { - $user_counters[$thread['uid']] = array( - 'num_posts' => 0, - 'num_threads' => 0 - ); - } - - ++$forum_counters[$forum['fid']]['num_deleted_threads']; - $forum_counters[$forum['fid']]['num_deleted_posts'] += $thread['replies']+$thread['unapprovedposts']+1; - - if($thread['visible'] == 1) - { - ++$forum_counters[$forum['fid']]['num_threads']; - $forum_counters[$forum['fid']]['num_posts'] += $thread['replies']+1; // Add implied invisible to count - $forum_counters[$forum['fid']]['unapproved_posts'] += $thread['unapprovedposts']; - } - else - { - ++$forum_counters[$forum['fid']]['unapproved_threads']; - $forum_counters[$forum['fid']]['unapproved_posts'] += $thread['replies']+$thread['deletedposts']+$thread['unapprovedposts']+1; // Add implied invisible to count - $forum_counters[$forum['fid']]['num_deleted_posts'] += $thread['deletedposts']; - } - - // On unapproving thread update user post counts - if($thread['visible'] == 1 && $forum['usepostcounts'] != 0) - { - $query = $db->simple_select("posts", "COUNT(pid) AS posts, uid", "tid='{$tid}' AND (visible='1' OR pid='{$thread['firstpost']}') AND uid > 0 GROUP BY uid"); - while($counter = $db->fetch_array($query)) - { - if(!isset($user_counters[$counter['uid']]['num_posts'])) - { - $user_counters[$counter['uid']]['num_posts'] = 0; - } - $user_counters[$counter['uid']]['num_posts'] += $counter['posts']; - } - } - - if($thread['visible'] == 1 && $forum['usethreadcounts'] != 0 && substr($thread['closed'], 0, 6) != 'moved|') - { - ++$user_counters[$thread['uid']]['num_threads']; - } - } - $posts_to_delete[] = $thread['firstpost']; - } - - $update = array( - "visible" => -1 - ); - $db->update_query("threads", $update, "tid IN ($tid_list)"); - // Soft delete redirects, too - $redirect_tids = array(); - $query = $db->simple_select('threads', 'tid', "closed IN ({$tid_moved_list})"); - - mark_reports($tids, "threads"); - - while($redirect_tid = $db->fetch_field($query, 'tid')) - { - $redirect_tids[] = $redirect_tid; - } - if(!empty($redirect_tids)) - { - $this->soft_delete_threads($redirect_tids); - } - if(!empty($posts_to_delete)) - { - $db->update_query("posts", $update, "pid IN (".implode(',', $posts_to_delete).")"); - } - - $plugins->run_hooks("class_moderation_soft_delete_threads", $tids); - - if(is_array($forum_counters)) - { - foreach($forum_counters as $fid => $counters) - { - // Update stats - $update_array = array( - "threads" => "-{$counters['num_threads']}", - "unapprovedthreads" => "-{$counters['unapproved_threads']}", - "posts" => "-{$counters['num_posts']}", - "unapprovedposts" => "-{$counters['unapproved_posts']}", - "deletedposts" => "+{$counters['num_deleted_posts']}", - "deletedthreads" => "+{$counters['num_deleted_threads']}" - ); - update_forum_counters($fid, $update_array); - update_forum_lastpost($fid); - } - } - - if(!empty($user_counters)) - { - foreach($user_counters as $uid => $counters) - { - $update_array = array( - "postnum" => "-{$counters['num_posts']}", - "threadnum" => "-{$counters['num_threads']}", - ); - update_user_counters($uid, $update_array); - } - } - - return true; - } -} diff --git a/html/forums/inc/class_parser.php b/html/forums/inc/class_parser.php deleted file mode 100644 index 22c70d7..0000000 --- a/html/forums/inc/class_parser.php +++ /dev/null @@ -1,1728 +0,0 @@ - with clear: both be added at the end of the parsed message - * - * @access public - * @var boolean - */ - public $clear_needed = false; - - /** - * Parses a message with the specified options. - * - * @param string $message The message to be parsed. - * @param array $options Array of yes/no options - allow_html,filter_badwords,allow_mycode,allow_smilies,nl2br,me_username,filter_cdata. - * @return string The parsed message. - */ - function parse_message($message, $options=array()) - { - global $plugins, $mybb; - - $this->clear_needed = false; - - // Set base URL for parsing smilies - $this->base_url = $mybb->settings['bburl']; - - if($this->base_url != "") - { - if(my_substr($this->base_url, my_strlen($this->base_url) -1) != "/") - { - $this->base_url = $this->base_url."/"; - } - } - - // Set the options - $this->options = $options; - - $message = $plugins->run_hooks("parse_message_start", $message); - - // Get rid of carriage returns for they are the workings of the devil - $message = str_replace("\r", "", $message); - - // Filter bad words if requested. - if(!empty($this->options['filter_badwords'])) - { - $message = $this->parse_badwords($message); - } - - // Filter CDATA tags if requested (syndication.php). - if(!empty($this->options['filter_cdata'])) - { - $message = $this->parse_cdata($message); - } - - // If MyCode needs to be replaced, first filter out [code] and [php] tags. - if(!empty($this->options['allow_mycode']) && $mybb->settings['allowcodemycode'] == 1) - { - // This code is reserved and could break codes - $message = str_replace("\n", "\n", $message); - - preg_match_all("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", $message, $code_matches, PREG_SET_ORDER); - $message = preg_replace("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", "\n", $message); - } - - if(empty($this->options['allow_html'])) - { - $message = $this->parse_html($message); - $message = str_replace("<mybb-code>\n", "\n", $message); - } - else - { - // Replace base, meta,script and style tags in our post - these are > dangerous < - $message = preg_replace('#<(/?)(base|meta|script|style)([^>]*)>#i', '<$1$2$3>', $message); - $message = $this->fix_javascript($message); - - $find = array("
    \n", "
    \n"); - $replace = array("\n", "\n"); - $message = str_replace($find, $replace, $message); - } - - // Replace "me" code and slaps if we have a username - if(!empty($this->options['me_username']) && $mybb->settings['allowmemycode'] == 1) - { - global $lang; - - $message = preg_replace('#(>|^|\r|\n)/me ([^\r\n<]*)#i', "\\1* {$this->options['me_username']} \\2", $message); - $message = preg_replace('#(>|^|\r|\n)/slap ([^\r\n<]*)#i', "\\1* {$this->options['me_username']} {$lang->slaps} \\2 {$lang->with_trout}", $message); - } - - // If we can, parse smilies - if(!empty($this->options['allow_smilies'])) - { - $message = $this->parse_smilies($message, $this->options['allow_html']); - } - - // Replace MyCode if requested. - if(!empty($this->options['allow_mycode'])) - { - $message = $this->parse_mycode($message); - } - - // Parse Highlights - if(!empty($this->options['highlight'])) - { - $message = $this->highlight_message($message, $this->options['highlight']); - } - - // Run plugin hooks - $message = $plugins->run_hooks("parse_message", $message); - - if(!empty($this->options['allow_mycode'])) - { - // Now that we're done, if we split up any code tags, parse them and glue it all back together - if(count($code_matches) > 0) - { - foreach($code_matches as $text) - { - if(my_strtolower($text[1]) == "code") - { - // Fix up HTML inside the code tags so it is clean - $text[2] = $this->parse_html($text[2]); - - $code = $this->mycode_parse_code($text[2]); - } - elseif(my_strtolower($text[1]) == "php") - { - $code = $this->mycode_parse_php($text[2]); - } - $message = preg_replace("#\\n?#", $code, $message, 1); - } - } - } - - if(!isset($this->options['nl2br']) || $this->options['nl2br'] != 0) - { - $message = nl2br($message); - // Fix up new lines and block level elements - $message = preg_replace("#(]*>)\s*
    #i", "$1", $message); - $message = preg_replace("#( )+(]*>)#i", "$2", $message); - } - - if($this->clear_needed) - { - $message .= '
    '; - } - - $message = $plugins->run_hooks("parse_message_end", $message); - - return $message; - } - - /** - * Converts HTML in a message to their specific entities whilst allowing unicode characters. - * - * @param string $message The message to be parsed. - * @return string The formatted message. - */ - function parse_html($message) - { - $message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // fix & but allow unicode - $message = str_replace("<","<",$message); - $message = str_replace(">",">",$message); - return $message; - } - - /** - * Generates a cache of MyCode, both standard and custom. - * - * @access private - */ - function cache_mycode() - { - global $cache, $lang, $mybb; - $this->mycode_cache = array(); - - $standard_mycode = $callback_mycode = $nestable_mycode = array(); - $standard_count = $callback_count = $nestable_count = 0; - - if($mybb->settings['allowbasicmycode'] == 1) - { - $standard_mycode['b']['regex'] = "#\[b\](.*?)\[/b\]#si"; - $standard_mycode['b']['replacement'] = "$1"; - - $standard_mycode['u']['regex'] = "#\[u\](.*?)\[/u\]#si"; - $standard_mycode['u']['replacement'] = "$1"; - - $standard_mycode['i']['regex'] = "#\[i\](.*?)\[/i\]#si"; - $standard_mycode['i']['replacement'] = "$1"; - - $standard_mycode['s']['regex'] = "#\[s\](.*?)\[/s\]#si"; - $standard_mycode['s']['replacement'] = "$1"; - - $standard_mycode['hr']['regex'] = "#\[hr\]#si"; - $standard_mycode['hr']['replacement'] = "
    "; - - ++$standard_count; - } - - if($mybb->settings['allowsymbolmycode'] == 1) - { - $standard_mycode['copy']['regex'] = "#\(c\)#i"; - $standard_mycode['copy']['replacement'] = "©"; - - $standard_mycode['tm']['regex'] = "#\(tm\)#i"; - $standard_mycode['tm']['replacement'] = "™"; - - $standard_mycode['reg']['regex'] = "#\(r\)#i"; - $standard_mycode['reg']['replacement'] = "®"; - - ++$standard_count; - } - - if($mybb->settings['allowlinkmycode'] == 1) - { - $callback_mycode['url_simple']['regex'] = "#\[url\]((?!javascript)[a-z]+?://)([^\r\n\"<]+?)\[/url\]#si"; - $callback_mycode['url_simple']['replacement'] = array($this, 'mycode_parse_url_callback1'); - - $callback_mycode['url_simple2']['regex'] = "#\[url\]((?!javascript:)[^\r\n\"<]+?)\[/url\]#i"; - $callback_mycode['url_simple2']['replacement'] = array($this, 'mycode_parse_url_callback2'); - - $callback_mycode['url_complex']['regex'] = "#\[url=((?!javascript)[a-z]+?://)([^\r\n\"<]+?)\](.+?)\[/url\]#si"; - $callback_mycode['url_complex']['replacement'] = array($this, 'mycode_parse_url_callback1'); - - $callback_mycode['url_complex2']['regex'] = "#\[url=((?!javascript:)[^\r\n\"<]+?)\](.+?)\[/url\]#si"; - $callback_mycode['url_complex2']['replacement'] = array($this, 'mycode_parse_url_callback2'); - - ++$callback_count; - } - - if($mybb->settings['allowemailmycode'] == 1) - { - $callback_mycode['email_simple']['regex'] = "#\[email\]((?:[a-zA-Z0-9-_\+\.]+?)@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+(?:\?.*?)?)\[/email\]#i"; - $callback_mycode['email_simple']['replacement'] = array($this, 'mycode_parse_email_callback'); - - $callback_mycode['email_complex']['regex'] = "#\[email=((?:[a-zA-Z0-9-_\+\.]+?)@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+(?:\?.*?)?)\](.*?)\[/email\]#i"; - $callback_mycode['email_complex']['replacement'] = array($this, 'mycode_parse_email_callback'); - - ++$callback_count; - } - - if($mybb->settings['allowcolormycode'] == 1) - { - $nestable_mycode['color']['regex'] = "#\[color=([a-zA-Z]*|\#?[\da-fA-F]{3}|\#?[\da-fA-F]{6})](.*?)\[/color\]#si"; - $nestable_mycode['color']['replacement'] = "$2"; - - ++$nestable_count; - } - - if($mybb->settings['allowsizemycode'] == 1) - { - $nestable_mycode['size']['regex'] = "#\[size=(xx-small|x-small|small|medium|large|x-large|xx-large)\](.*?)\[/size\]#si"; - $nestable_mycode['size']['replacement'] = "$2"; - - $callback_mycode['size_int']['regex'] = "#\[size=([0-9\+\-]+?)\](.*?)\[/size\]#si"; - $callback_mycode['size_int']['replacement'] = array($this, 'mycode_handle_size_callback'); - - ++$nestable_count; - ++$callback_count; - } - - if($mybb->settings['allowfontmycode'] == 1) - { - $nestable_mycode['font']['regex'] = "#\[font=([a-z0-9 ,\-_'\"]+)\](.*?)\[/font\]#si"; - $nestable_mycode['font']['replacement'] = "$2"; - - ++$nestable_count; - } - - if($mybb->settings['allowalignmycode'] == 1) - { - $nestable_mycode['align']['regex'] = "#\[align=(left|center|right|justify)\](.*?)\[/align\]#si"; - $nestable_mycode['align']['replacement'] = "
    $2
    "; - - ++$nestable_count; - } - - $custom_mycode = $cache->read("mycode"); - - // If there is custom MyCode, load it. - if(is_array($custom_mycode)) - { - foreach($custom_mycode as $key => $mycode) - { - $mycode['regex'] = str_replace("\x0", "", $mycode['regex']); - $custom_mycode[$key]['regex'] = "#".$mycode['regex']."#si"; - - ++$standard_count; - } - $mycode = array_merge($standard_mycode, $custom_mycode); - } - else - { - $mycode = $standard_mycode; - } - - // Assign the MyCode to the cache. - foreach($mycode as $code) - { - $this->mycode_cache['standard']['find'][] = $code['regex']; - $this->mycode_cache['standard']['replacement'][] = $code['replacement']; - } - - // Assign the nestable MyCode to the cache. - foreach($nestable_mycode as $code) - { - $this->mycode_cache['nestable'][] = array('find' => $code['regex'], 'replacement' => $code['replacement']); - } - - // Assign the nestable MyCode to the cache. - foreach($callback_mycode as $code) - { - $this->mycode_cache['callback'][] = array('find' => $code['regex'], 'replacement' => $code['replacement']); - } - - $this->mycode_cache['standard_count'] = $standard_count; - $this->mycode_cache['callback_count'] = $callback_count; - $this->mycode_cache['nestable_count'] = $nestable_count; - } - - /** - * Parses MyCode tags in a specific message with the specified options. - * - * @param string $message The message to be parsed. - * @param array $options Array of options in yes/no format. Options are allow_imgcode. - * @return string The parsed message. - */ - function parse_mycode($message, $options=array()) - { - global $lang, $mybb; - - if(empty($this->options)) - { - $this->options = $options; - } - - // Cache the MyCode globally if needed. - if($this->mycode_cache == 0) - { - $this->cache_mycode(); - } - - // Parse quotes first - $message = $this->mycode_parse_quotes($message); - - $message = $this->mycode_auto_url($message); - - $message = str_replace('$', '$', $message); - - // Replace the rest - if($this->mycode_cache['standard_count'] > 0) - { - $message = preg_replace($this->mycode_cache['standard']['find'], $this->mycode_cache['standard']['replacement'], $message); - } - - if($this->mycode_cache['callback_count'] > 0) - { - foreach($this->mycode_cache['callback'] as $replace) - { - $message = preg_replace_callback($replace['find'], $replace['replacement'], $message); - } - } - - // Replace the nestable mycode's - if($this->mycode_cache['nestable_count'] > 0) - { - foreach($this->mycode_cache['nestable'] as $mycode) - { - while(preg_match($mycode['find'], $message)) - { - $message = preg_replace($mycode['find'], $mycode['replacement'], $message); - } - } - } - - // Reset list cache - if($mybb->settings['allowlistmycode'] == 1) - { - $this->list_elements = array(); - $this->list_count = 0; - - // Find all lists - $message = preg_replace_callback("#(\[list(=(a|A|i|I|1))?\]|\[/list\])#si", array($this, 'mycode_prepare_list'), $message); - - // Replace all lists - for($i = $this->list_count; $i > 0; $i--) - { - // Ignores missing end tags - $message = preg_replace_callback("#\s?\[list(=(a|A|i|I|1))?&{$i}\](.*?)(\[/list&{$i}\]|$)(\r\n?|\n?)#si", array($this, 'mycode_parse_list_callback'), $message, 1); - } - } - - // Convert images when allowed. - if(!empty($this->options['allow_imgcode'])) - { - $message = preg_replace_callback("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_callback1'), $message); - $message = preg_replace_callback("#\[img=([1-9][0-9]*)x([1-9][0-9]*)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_callback2'), $message); - $message = preg_replace_callback("#\[img align=(left|right)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_callback3'), $message); - $message = preg_replace_callback("#\[img=([1-9][0-9]*)x([1-9][0-9]*) align=(left|right)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_callback4'), $message); - } - else - { - $message = preg_replace_callback("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_disabled_callback1'), $message); - $message = preg_replace_callback("#\[img=([1-9][0-9]*)x([1-9][0-9]*)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_disabled_callback2'), $message); - $message = preg_replace_callback("#\[img align=(left|right)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_disabled_callback3'), $message); - $message = preg_replace_callback("#\[img=([1-9][0-9]*)x([1-9][0-9]*) align=(left|right)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this, 'mycode_parse_img_disabled_callback4'), $message); - } - - // Convert videos when allow. - if(!empty($this->options['allow_videocode'])) - { - $message = preg_replace_callback("#\[video=(.*?)\](.*?)\[/video\]#i", array($this, 'mycode_parse_video_callback'), $message); - } - else - { - $message = preg_replace_callback("#\[video=(.*?)\](.*?)\[/video\]#i", array($this, 'mycode_parse_video_disabled_callback'), $message); - } - - return $message; - } - - /** - * Generates a cache of smilies - * - * @access private - */ - function cache_smilies() - { - global $cache, $mybb, $theme, $templates; - $this->smilies_cache = array(); - - $smilies = $cache->read("smilies"); - if(is_array($smilies)) - { - $extra_class = $onclick = ''; - foreach($smilies as $sid => $smilie) - { - $smilie['find'] = explode("\n", $smilie['find']); - $smilie['image'] = str_replace("{theme}", $theme['imgdir'], $smilie['image']); - $smilie['image'] = htmlspecialchars_uni($mybb->get_asset_url($smilie['image'])); - $smilie['name'] = htmlspecialchars_uni($smilie['name']); - - foreach($smilie['find'] as $s) - { - $s = $this->parse_html($s); - eval("\$smilie_template = \"".$templates->get("smilie", 1, 0)."\";"); - $this->smilies_cache[$s] = $smilie_template; - // workaround for smilies starting with ; - if($s[0] == ";") - { - $this->smilies_cache += array( - "&$s" => "&$s", - "<$s" => "<$s", - ">$s" => ">$s", - ); - } - } - } - } - } - - /** - * Parses smilie code in the specified message. - * - * @param string $message $message The message being parsed. - * @param int $allow_html not used - * @return string The parsed message. - */ - function parse_smilies($message, $allow_html=0) - { - if($this->smilies_cache == 0) - { - $this->cache_smilies(); - } - - // No smilies? - if(!count($this->smilies_cache)) - { - return $message; - } - - // First we take out any of the tags we don't want parsed between (url= etc) - preg_match_all("#\[(url(=[^\]]*)?\]|quote=([^\]]*)?\])|(http|ftp)(s|)://[^\s]*#i", $message, $bad_matches, PREG_PATTERN_ORDER); - if(count($bad_matches[0]) > 0) - { - $message = preg_replace("#\[(url(=[^\]]*)?\]|quote=([^\]]*)?\])|(http|ftp)(s|)://[^\s]*#si", "", $message); - } - - $message = strtr($message, $this->smilies_cache); - - // If we matched any tags previously, swap them back in - if(count($bad_matches[0]) > 0) - { - $message = explode("", $message); - $i = 0; - foreach($bad_matches[0] as $match) - { - $message[$i] .= $match; - $i++; - } - $message = implode("", $message); - } - - return $message; - } - - /** - * Generates a cache of badwords filters. - * - * @access private - */ - function cache_badwords() - { - global $cache; - $this->badwords_cache = array(); - $this->badwords_cache = $cache->read("badwords"); - } - - /** - * Parses a list of filtered/badwords in the specified message. - * - * @param string $message The message to be parsed. - * @param array $options Array of parser options in yes/no format. - * @return string The parsed message. - */ - function parse_badwords($message, $options=array()) - { - if(empty($this->options)) - { - $this->options = $options; - } - - if($this->badwords_cache == 0) - { - $this->cache_badwords(); - } - if(is_array($this->badwords_cache)) - { - reset($this->badwords_cache); - foreach($this->badwords_cache as $bid => $badword) - { - if(!$badword['replacement']) - { - $badword['replacement'] = "*****"; - } - - // Take into account the position offset for our last replacement. - $badword['badword'] = str_replace('\*', '([a-zA-Z0-9_]{1})', preg_quote($badword['badword'], "#")); - - // Ensure we run the replacement enough times but not recursively (i.e. not while(preg_match..)) - $message = preg_replace("#(^|\W)".$badword['badword']."(?=\W|$)#i", '\1'.$badword['replacement'], $message); - } - } - if(!empty($this->options['strip_tags'])) - { - $message = strip_tags($message); - } - return $message; - } - - /** - * Resolves nested CDATA tags in the specified message. - * - * @param string $message The message to be parsed. - * @return string The parsed message. - */ - function parse_cdata($message) - { - $message = str_replace(']]>', ']]]]>', $message); - - return $message; - } - - /** - * Attempts to move any javascript references in the specified message. - * - * @param string The message to be parsed. - * @return string The parsed message. - */ - function fix_javascript($message) - { - $js_array = array( - "#(&\#(0*)106;?|&\#(0*)74;?|&\#x(0*)4a;?|&\#x(0*)6a;?|j)((&\#(0*)97;?|&\#(0*)65;?|a)(&\#(0*)118;?|&\#(0*)86;?|v)(&\#(0*)97;?|&\#(0*)65;?|a)(\s)?(&\#(0*)115;?|&\#(0*)83;?|s)(&\#(0*)99;?|&\#(0*)67;?|c)(&\#(0*)114;?|&\#(0*)82;?|r)(&\#(0*)105;?|&\#(0*)73;?|i)(&\#112;?|&\#(0*)80;?|p)(&\#(0*)116;?|&\#(0*)84;?|t)(&\#(0*)58;?|\:))#i", - "#([\s\"']on)([a-z]+\s*=)#i", - ); - - // Add invisible white space - $message = preg_replace($js_array, "$1\xE2\x80\x8C$2$6", $message); - - return $message; - } - - /** - * Handles fontsize. - * - * @param int $size The original size. - * @param string $text The text within a size tag. - * @return string The parsed text. - */ - function mycode_handle_size($size, $text) - { - global $templates; - - $size = (int)$size; - - if($size < 1) - { - $size = 1; - } - - if($size > 50) - { - $size = 50; - } - - $text = str_replace("\'", "'", $text); - - eval("\$mycode_size = \"".$templates->get("mycode_size_int", 1, 0)."\";"); - return $mycode_size; - } - - /** - * Handles fontsize. - * - * @param array $matches Matches. - * @return string The parsed text. - */ - function mycode_handle_size_callback($matches) - { - return $this->mycode_handle_size($matches[1], $matches[2]); - } - - /** - * Parses quote MyCode. - * - * @param string $message The message to be parsed - * @param boolean $text_only Are we formatting as text? - * @return string The parsed message. - */ - function mycode_parse_quotes($message, $text_only=false) - { - global $lang, $templates, $theme, $mybb; - - // Assign pattern and replace values. - $pattern = "#\[quote\](.*?)\[\/quote\](\r\n?|\n?)#si"; - $pattern_callback = "#\[quote=([\"']|"|)(.*?)(?:\\1)(.*?)(?:[\"']|")?\](.*?)\[/quote\](\r\n?|\n?)#si"; - - if($text_only == false) - { - $replace = "
    $lang->quote$1
    \n"; - $replace_callback = array($this, 'mycode_parse_post_quotes_callback1'); - } - else - { - $replace = "\n{$lang->quote}\n--\n$1\n--\n"; - $replace_callback = array($this, 'mycode_parse_post_quotes_callback2'); - } - - do - { - // preg_replace has erased the message? Restore it... - $previous_message = $message; - $message = preg_replace($pattern, $replace, $message, -1, $count); - $message = preg_replace_callback($pattern_callback, $replace_callback, $message, -1, $count_callback); - if(!$message) - { - $message = $previous_message; - break; - } - } while($count || $count_callback); - - if($text_only == false) - { - $find = array( - "#(\r\n*|\n*)<\/cite>(\r\n*|\n*)#", - "#(\r\n*|\n*)<\/blockquote>#" - ); - - $replace = array( - "
    ", - "" - ); - $message = preg_replace($find, $replace, $message); - } - return $message; - } - - /** - * Parses quotes with post id and/or dateline. - * - * @param string $message The message to be parsed - * @param string $username The username to be parsed - * @param boolean $text_only Are we formatting as text? - * @return string The parsed message. - */ - function mycode_parse_post_quotes($message, $username, $text_only=false) - { - global $lang, $templates, $theme, $mybb; - - $linkback = $date = ""; - - $message = trim($message); - $message = preg_replace("#(^|$)#i", "", $message); - - if(!$message) - { - return ''; - } - - $username .= "'"; - $delete_quote = true; - - preg_match("#pid=(?:"|\"|')?([0-9]+)[\"']?(?:"|\"|')?#i", $username, $match); - if((int)$match[1]) - { - $pid = (int)$match[1]; - $url = $mybb->settings['bburl']."/".get_post_link($pid)."#pid$pid"; - if(defined("IN_ARCHIVE")) - { - $linkback = " [ -> ]"; - } - else - { - eval("\$linkback = \" ".$templates->get("postbit_gotopost", 1, 0)."\";"); - } - - $username = preg_replace("#(?:"|\"|')? pid=(?:"|\"|')?[0-9]+[\"']?(?:"|\"|')?#i", '', $username); - $delete_quote = false; - } - - unset($match); - preg_match("#dateline=(?:"|\"|')?([0-9]+)(?:"|\"|')?#i", $username, $match); - if((int)$match[1]) - { - if($match[1] < TIME_NOW) - { - $postdate = my_date('relative', (int)$match[1]); - $date = " ({$postdate})"; - } - $username = preg_replace("#(?:"|\"|')? dateline=(?:"|\"|')?[0-9]+(?:"|\"|')?#i", '', $username); - $delete_quote = false; - } - - if($delete_quote) - { - $username = my_substr($username, 0, my_strlen($username)-1); - } - - if(!empty($this->options['allow_html'])) - { - $username = htmlspecialchars_uni($username); - } - - if($text_only) - { - return "\n{$username} {$lang->wrote}{$date}\n--\n{$message}\n--\n"; - } - else - { - $span = ""; - if(!$delete_quote) - { - $span = "{$date}"; - } - - eval("\$mycode_quote = \"".$templates->get("mycode_quote_post", 1, 0)."\";"); - return $mycode_quote; - } - } - - /** - * Parses quotes with post id and/or dateline. - * - * @param array $matches Matches. - * @return string The parsed message. - */ - function mycode_parse_post_quotes_callback1($matches) - { - return $this->mycode_parse_post_quotes($matches[4],$matches[2].$matches[3]); - } - - /** - * Parses quotes with post id and/or dateline. - * - * @param array $matches Matches. - * @return string The parsed message. - */ - function mycode_parse_post_quotes_callback2($matches) - { - return $this->mycode_parse_post_quotes($matches[4],$matches[2].$matches[3], true); - } - - /** - * Parses code MyCode. - * - * @param string $code The message to be parsed - * @param boolean $text_only Are we formatting as text? - * @return string The parsed message. - */ - function mycode_parse_code($code, $text_only=false) - { - global $lang, $templates; - - if($text_only == true) - { - return "\n{$lang->code}\n--\n{$code}\n--\n"; - } - - // Clean the string before parsing. - $code = preg_replace('#^(\t*)(\n|\r|\0|\x0B| )*#', '\\1', $code); - $code = rtrim($code); - $original = preg_replace('#^\t*#', '', $code); - - if(empty($original)) - { - return; - } - - $code = str_replace('$', '$', $code); - $code = preg_replace('#\$([0-9])#', '\\\$\\1', $code); - $code = str_replace('\\', '\', $code); - $code = str_replace("\t", '    ', $code); - $code = str_replace(" ", '  ', $code); - - eval("\$mycode_code = \"".$templates->get("mycode_code", 1, 0)."\";"); - return $mycode_code; - } - - /** - * Parses code MyCode. - * - * @param array $matches Matches. - * @return string The parsed message. - */ - function mycode_parse_code_callback($matches) - { - return $this->mycode_parse_code($matches[1], true); - } - - /** - * Parses PHP code MyCode. - * - * @param string $str The message to be parsed - * @param boolean $bare_return Whether or not it should return it as pre-wrapped in a div or not. - * @param boolean $text_only Are we formatting as text? - * @return string The parsed message. - */ - function mycode_parse_php($str, $bare_return = false, $text_only = false) - { - global $lang, $templates; - - if($text_only == true) - { - return "\n{$lang->php_code}\n--\n$str\n--\n"; - } - - // Clean the string before parsing except tab spaces. - $str = preg_replace('#^(\t*)(\n|\r|\0|\x0B| )*#', '\\1', $str); - $str = rtrim($str); - - $original = preg_replace('#^\t*#', '', $str); - - if(empty($original)) - { - return; - } - - // See if open and close tags are provided. - $added_open_tag = false; - if(!preg_match("#^\s*<\?#si", $str)) - { - $added_open_tag = true; - $str = "\s*$#si", $str)) - { - $added_end_tag = true; - $str = $str." \n?>"; - } - - $code = @highlight_string($str, true); - - // Do the actual replacing. - $code = preg_replace('#\s*\s*#i', "", $code); - $code = preg_replace("#\s*#", "", $code); - $code = preg_replace("#(\r\n?|\n?)#", "", $code); - $code = str_replace("\\", '\', $code); - $code = str_replace('$', '$', $code); - $code = preg_replace("#&\#([0-9]+);#si", "&#$1;", $code); - - if($added_open_tag) - { - $code = preg_replace("#<\?php( | )(
    ?)#", "", $code); - } - - if($added_end_tag) - { - $code = str_replace("?>", "
    ", $code); - // Wait a minute. It fails highlighting? Stupid highlighter. - $code = str_replace("?>", "", $code); - } - - $code = preg_replace("##", "", $code); - $code = str_replace("", "
    ", $code); - $code = str_replace("", "
    ", $code); - $code = preg_replace("# *$#", "", $code); - - if($bare_return) - { - return $code; - } - - // Send back the code all nice and pretty - eval("\$mycode_php = \"".$templates->get("mycode_php", 1, 0)."\";"); - return $mycode_php; - } - - /** - * Parses PHP code MyCode. - * - * @param array $matches Matches. - * @return string The parsed message. - */ - function mycode_parse_php_callback($matches) - { - return $this->mycode_parse_php($matches[1], false, true); - } - - /** - * Parses URL MyCode. - * - * @param string $url The URL to link to. - * @param string $name The name of the link. - * @return string The built-up link. - */ - function mycode_parse_url($url, $name="") - { - global $templates; - if(!preg_match("#^[a-z0-9]+://#i", $url)) - { - $url = "http://".$url; - } - - if(!empty($this->options['allow_html'])) - { - $url = $this->parse_html($url); - } - - if(!$name) - { - $name = $url; - } - - if($name == $url && (!isset($this->options['shorten_urls']) || !empty($this->options['shorten_urls']))) - { - $name = htmlspecialchars_decode($name); - if(my_strlen($name) > 55) - { - $name = my_substr($name , 0, 40).'...'.my_substr($name , -10); - } - $name = htmlspecialchars_uni($name); - } - - $nofollow = ''; - if(!empty($this->options['nofollow_on'])) - { - $nofollow = " rel=\"nofollow\""; - } - - // Fix some entities in URLs - $entities = array('$' => '%24', '$' => '%24', '^' => '%5E', '`' => '%60', '[' => '%5B', ']' => '%5D', '{' => '%7B', '}' => '%7D', '"' => '%22', '<' => '%3C', '>' => '%3E', ' ' => '%20'); - $url = str_replace(array_keys($entities), array_values($entities), $url); - - $name = preg_replace("#&\#([0-9]+);#si", "&#$1;", $name); // Fix & but allow unicode - - eval("\$mycode_url = \"".$templates->get("mycode_url", 1, 0)."\";"); - return $mycode_url; - } - - /** - * Parses URL MyCode. - * - * @param array $matches Matches. - * @return string The built-up link. - */ - function mycode_parse_url_callback1($matches) - { - if(!isset($matches[3])) - { - $matches[3] = ''; - } - return $this->mycode_parse_url($matches[1].$matches[2], $matches[3]); - } - - /** - * Parses URL MyCode. - * - * @param array $matches Matches. - * @return string The built-up link. - */ - function mycode_parse_url_callback2($matches) - { - if(!isset($matches[2])) - { - $matches[2] = ''; - } - return $this->mycode_parse_url($matches[1], $matches[2]); - } - - /** - * Parses IMG MyCode. - * - * @param string $url The URL to the image - * @param array $dimensions Optional array of dimensions - * @param string $align - * @return string - */ - function mycode_parse_img($url, $dimensions=array(), $align='') - { - global $lang, $templates; - $url = trim($url); - $url = str_replace("\n", "", $url); - $url = str_replace("\r", "", $url); - - if(!empty($this->options['allow_html'])) - { - $url = $this->parse_html($url); - } - - $css_align = ''; - if($align == "right") - { - $css_align = ' style="float: right;"'; - } - else if($align == "left") - { - $css_align = ' style="float: left;"'; - } - - if($align) - { - $this->clear_needed = true; - } - - $alt = basename($url); - $alt = htmlspecialchars_decode($alt); - if(my_strlen($alt) > 55) - { - $alt = my_substr($alt, 0, 40).'...'.my_substr($alt, -10); - } - $alt = htmlspecialchars_uni($alt); - - $alt = $lang->sprintf($lang->posted_image, $alt); - $width = $height = ''; - if(isset($dimensions[0]) && $dimensions[0] > 0 && isset($dimensions[1]) && $dimensions[1] > 0) - { - $width = " width=\"{$dimensions[0]}\""; - $height = " height=\"{$dimensions[1]}\""; - } - - eval("\$mycode_img = \"".$templates->get("mycode_img", 1, 0)."\";"); - return $mycode_img; - } - - /** - * Parses IMG MyCode. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_callback1($matches) - { - return $this->mycode_parse_img($matches[2]); - } - - /** - * Parses IMG MyCode. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_callback2($matches) - { - return $this->mycode_parse_img($matches[4], array($matches[1], $matches[2])); - } - - /** - * Parses IMG MyCode. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_callback3($matches) - { - return $this->mycode_parse_img($matches[3], array(), $matches[1]); - } - - /** - * Parses IMG MyCode. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_callback4($matches) - { - return $this->mycode_parse_img($matches[5], array($matches[1], $matches[2]), $matches[3]); - } - - /** - * Parses IMG MyCode disabled. - * - * @param string $url The URL to the image - * @return string - */ - function mycode_parse_img_disabled($url) - { - global $lang; - $url = trim($url); - $url = str_replace("\n", "", $url); - $url = str_replace("\r", "", $url); - $url = str_replace("\'", "'", $url); - - $image = $lang->sprintf($lang->posted_image, $this->mycode_parse_url($url)); - return $image; - } - - /** - * Parses IMG MyCode disabled. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_disabled_callback1($matches) - { - return $this->mycode_parse_img_disabled($matches[2]); - } - - /** - * Parses IMG MyCode disabled. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_disabled_callback2($matches) - { - return $this->mycode_parse_img_disabled($matches[4]); - } - - /** - * Parses IMG MyCode disabled. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_disabled_callback3($matches) - { - return $this->mycode_parse_img_disabled($matches[3]); - } - - /** - * Parses IMG MyCode disabled. - * - * @param array $matches Matches. - * @return string Image code. - */ - function mycode_parse_img_disabled_callback4($matches) - { - return $this->mycode_parse_img_disabled($matches[5]); - } - - /** - * Parses email MyCode. - * - * @param string $email The email address to link to. - * @param string $name The name for the link. - * @return string The built-up email link. - */ - function mycode_parse_email($email, $name="") - { - global $templates; - - if(!$name) - { - $name = $email; - } - if(preg_match("/^([a-zA-Z0-9-_\+\.]+?)@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+$/si", $email)) - { - $email = $email; - } - elseif(preg_match("/^([a-zA-Z0-9-_\+\.]+?)@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+\?(.*?)$/si", $email)) - { - $email = htmlspecialchars_uni($email); - } - - eval("\$mycode_email = \"".$templates->get("mycode_email", 1, 0)."\";"); - return $mycode_email; - } - - /** - * Parses email MyCode. - * - * @param array $matches Matches - * @return string The built-up email link. - */ - function mycode_parse_email_callback($matches) - { - if(!isset($matches[2])) - { - $matches[2] = ''; - } - return $this->mycode_parse_email($matches[1], $matches[2]); - } - - /** - * Parses video MyCode. - * - * @param string $video The video provider. - * @param string $url The video to link to. - * @return string The built-up video code. - */ - function mycode_parse_video($video, $url) - { - global $templates; - - if(empty($video) || empty($url)) - { - return "[video={$video}]{$url}[/video]"; - } - - $parsed_url = @parse_url(urldecode($url)); - if($parsed_url == false) - { - return "[video={$video}]{$url}[/video]"; - } - - $fragments = array(); - if($parsed_url['fragment']) - { - $fragments = explode("&", $parsed_url['fragment']); - } - - $queries = explode("&", $parsed_url['query']); - - $input = array(); - foreach($queries as $query) - { - list($key, $value) = explode("=", $query); - $key = str_replace("amp;", "", $key); - $input[$key] = $value; - } - - $path = explode('/', $parsed_url['path']); - - switch($video) - { - case "dailymotion": - list($id) = explode('_', $path[2], 2); // http://www.dailymotion.com/video/fds123_title-goes-here - break; - case "metacafe": - $id = $path[2]; // http://www.metacafe.com/watch/fds123/title_goes_here/ - $title = htmlspecialchars_uni($path[3]); - break; - case "myspacetv": - $id = $path[4]; // http://www.myspace.com/video/fds/fds/123 - break; - case "facebook": - if(isset($input['v'])) - { - $id = $input['v']; // http://www.facebook.com/video/video.php?v=123 - } - elseif(substr($path[3], 0, 3) == 'vb.') - { - $id = $path[4]; // https://www.facebook.com/fds/videos/vb.123/123/ - } - else - { - $id = $path[3]; // https://www.facebook.com/fds/videos/123/ - } - break; - case "veoh": - $id = $path[2]; // http://www.veoh.com/watch/123 - break; - case "liveleak": - $id = $input['i']; // http://www.liveleak.com/view?i=123 - break; - case "yahoo": - if(isset($path[2])) - { - $id = $path[2]; // http://xy.screen.yahoo.com/fds/fds-123.html - } - else - { - $id = $path[1]; // http://xy.screen.yahoo.com/fds-123.html - } - // Support for localized portals - $domain = explode('.', $parsed_url['host']); - if($domain[0] != 'screen' && preg_match('#^([a-z-]+)$#', $domain[0])) - { - $local = "{$domain[0]}."; - } - else - { - $local = ''; - } - break; - case "vimeo": - if(isset($path[3])) - { - $id = $path[3]; // http://vimeo.com/fds/fds/fds123 - } - else - { - $id = $path[1]; // http://vimeo.com/fds123 - } - break; - case "youtube": - if($fragments[0]) - { - $id = str_replace('!v=', '', $fragments[0]); // http://www.youtube.com/watch#!v=fds123 - } - elseif($input['v']) - { - $id = $input['v']; // http://www.youtube.com/watch?v=fds123 - } - else - { - $id = $path[1]; // http://www.youtu.be/fds123 - } - break; - case "twitch": - if(isset($path[3])) - { - $id = $path[3]; // https://www.twitch.tv/giantbomb/v/100048090 - } - break; - default: - return "[video={$video}]{$url}[/video]"; - } - - if(empty($id)) - { - return "[video={$video}]{$url}[/video]"; - } - - $id = htmlspecialchars_uni($id); - - eval("\$video_code = \"".$templates->get("video_{$video}_embed")."\";"); - return $video_code; - } - - /** - * Parses video MyCode. - * - * @param array $matches Matches. - * @return string The built-up video code. - */ - function mycode_parse_video_callback($matches) - { - return $this->mycode_parse_video($matches[1], $matches[2]); - } - - /** - * Parses video MyCode disabled. - * - * @param string $url The URL to the video - * @return string - */ - function mycode_parse_video_disabled($url) - { - global $lang; - $url = trim($url); - $url = str_replace("\n", "", $url); - $url = str_replace("\r", "", $url); - $url = str_replace("\'", "'", $url); - - $video = $lang->sprintf($lang->posted_video, $this->mycode_parse_url($url)); - return $video; - } - - /** - * Parses video MyCode disabled. - * - * @param array $matches Matches. - * @return string The built-up video code. - */ - function mycode_parse_video_disabled_callback($matches) - { - return $this->mycode_parse_video_disabled($matches[2]); - } - - /** - * Parses URLs automatically. - * - * @param string $message The message to be parsed - * @return string The parsed message. - */ - function mycode_auto_url($message) - { - $message = " ".$message; - // Links should end with slashes, numbers, characters and braces but not with dots, commas or question marks - $message = preg_replace_callback("#([\>\s\(\)])(http|https|ftp|news|irc|ircs|irc6){1}://([^\/\"\s\<\[\.]+\.([^\/\"\s\<\[\.]+\.)*[\w]+(:[0-9]+)?(/([^\"\s<\[]|\[\])*)?([\w\/\)]))#iu", array($this, 'mycode_auto_url_callback'), $message); - $message = preg_replace_callback("#([\>\s\(\)])(www|ftp)\.(([^\/\"\s\<\[\.]+\.)*[\w]+(:[0-9]+)?(/([^\"\s<\[]|\[\])*)?([\w\/\)]))#iu", array($this, 'mycode_auto_url_callback'), $message); - $message = my_substr($message, 1); - - return $message; - } - - /** - * Parses URLs automatically. - * - * @param array $matches Matches - * @return string The parsed message. - */ - function mycode_auto_url_callback($matches) - { - $external = ''; - // Allow links like http://en.wikipedia.org/wiki/PHP_(disambiguation) but detect mismatching braces - while(my_substr($matches[3], -1) == ')') - { - if(substr_count($matches[3], ')') > substr_count($matches[3], '(')) - { - $matches[3] = my_substr($matches[3], 0, -1); - $external = ')'.$external; - } - else - { - break; - } - - // Example: ([...] http://en.wikipedia.org/Example_(disambiguation).) - $last_char = my_substr($matches[3], -1); - while($last_char == '.' || $last_char == ',' || $last_char == '?' || $last_char == '!') - { - $matches[3] = my_substr($matches[3], 0, -1); - $external = $last_char.$external; - $last_char = my_substr($matches[3], -1); - } - } - if($matches[2] == 'www' || $matches[2] == 'ftp') - { - return "{$matches[1]}[url]{$matches[2]}.{$matches[3]}[/url]{$external}"; - } - else - { - return "{$matches[1]}[url]{$matches[2]}://{$matches[3]}[/url]{$external}"; - } - } - - /** - * Parses list MyCode. - * - * @param string $message The message to be parsed - * @param string $type The list type - * @return string The parsed message. - */ - function mycode_parse_list($message, $type="") - { - // No list elements? That's invalid HTML - if(strpos($message, '[*]') === false) - { - $message = "[*]{$message}"; - } - - $message = preg_replace("#[^\S\n\r]*\[\*\]\s*#", "\n
  • ", $message); - $message .= "
  • "; - - if($type) - { - $list = "\n
      $message
    \n"; - } - else - { - $list = "
      $message
    \n"; - } - $list = preg_replace("#<(ol type=\"$type\"|ul)>\s*#", "<$1>", $list); - return $list; - } - - /** - * Parses list MyCode. - * - * @param array $matches Matches - * @return string The parsed message. - */ - function mycode_parse_list_callback($matches) - { - return $this->mycode_parse_list($matches[3], $matches[2]); - } - - /** - * Prepares list MyCode by finding the matching list tags. - * - * @param array $matches Matches - * @return string Temporary replacements. - */ - function mycode_prepare_list($matches) - { - // Append number to identify matching list tags - if(strcasecmp($matches[1], '[/list]') == 0) - { - $count = array_pop($this->list_elements); - if($count !== NULL) - { - return "[/list&{$count}]"; - } - else - { - // No open list tag... - return $matches[0]; - } - } - else - { - ++$this->list_count; - $this->list_elements[] = $this->list_count; - if(!empty($matches[2])) - { - return "[list{$matches[2]}&{$this->list_count}]"; - } - else - { - return "[list&{$this->list_count}]"; - } - } - } - - /** - * Strips smilies from a string - * - * @param string $message The message for smilies to be stripped from - * @return string The message with smilies stripped - */ - function strip_smilies($message) - { - if($this->smilies_cache == 0) - { - $this->cache_smilies(); - } - if(is_array($this->smilies_cache)) - { - $message = str_replace($this->smilies_cache, array_keys($this->smilies_cache), $message); - } - return $message; - } - - /** - * Highlights a string - * - * @param string $message The message to be highligted - * @param string $highlight The highlight keywords - * @return string The message with highlight bbcodes - */ - function highlight_message($message, $highlight) - { - if(empty($this->highlight_cache)) - { - $this->highlight_cache = build_highlight_array($highlight); - } - - if(is_array($this->highlight_cache) && !empty($this->highlight_cache)) - { - $message = preg_replace(array_keys($this->highlight_cache), $this->highlight_cache, $message); - } - - return $message; - } - - /** - * Parses message to plain text equivalents of MyCode. - * - * @param string $message The message to be parsed - * @param array $options - * @return string The parsed message. - */ - function text_parse_message($message, $options=array()) - { - global $plugins; - - if(empty($this->options)) - { - $this->options = $options; - } - - // Filter bad words if requested. - if(!empty($this->options['filter_badwords'])) - { - $message = $this->parse_badwords($message); - } - - // Parse quotes first - $message = $this->mycode_parse_quotes($message, true); - - $message = preg_replace_callback("#\[php\](.*?)\[/php\](\r\n?|\n?)#is", array($this, 'mycode_parse_php_callback'), $message); - $message = preg_replace_callback("#\[code\](.*?)\[/code\](\r\n?|\n?)#is", array($this, 'mycode_parse_code_callback'), $message); - - $find = array( - "#\[(b|u|i|s|url|email|color|img)\](.*?)\[/\\1\]#is", - "#\[img=([1-9][0-9]*)x([1-9][0-9]*)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", - "#\[url=((?!javascript)[a-z]+?://)([^\r\n\"<]+?)\](.+?)\[/url\]#si", - "#\[url=((?!javascript:)[^\r\n\"<&\(\)]+?)\](.+?)\[/url\]#si", - ); - - $replace = array( - "$2", - "$4", - "$3 ($1$2)", - "$2 ($1)", - ); - $message = preg_replace($find, $replace, $message); - - // Replace "me" code and slaps if we have a username - if(!empty($this->options['me_username'])) - { - global $lang; - - $message = preg_replace('#(>|^|\r|\n)/me ([^\r\n<]*)#i', "\\1* {$this->options['me_username']} \\2", $message); - $message = preg_replace('#(>|^|\r|\n)/slap ([^\r\n<]*)#i', "\\1* {$this->options['me_username']} {$lang->slaps} \\2 {$lang->with_trout}", $message); - } - - // Reset list cache - $this->list_elements = array(); - $this->list_count = 0; - - // Find all lists - $message = preg_replace_callback("#(\[list(=(a|A|i|I|1))?\]|\[/list\])#si", array($this, 'mycode_prepare_list'), $message); - - // Replace all lists - for($i = $this->list_count; $i > 0; $i--) - { - // Ignores missing end tags - $message = preg_replace_callback("#\s?\[list(=(a|A|i|I|1))?&{$i}\](.*?)(\[/list&{$i}\]|$)(\r\n?|\n?)#si", array($this, 'mycode_parse_list_callback'), $message, 1); - } - - // Run plugin hooks - $message = $plugins->run_hooks("text_parse_message", $message); - - return $message; - } -} diff --git a/html/forums/inc/class_plugins.php b/html/forums/inc/class_plugins.php deleted file mode 100644 index 3cb492d..0000000 --- a/html/forums/inc/class_plugins.php +++ /dev/null @@ -1,245 +0,0 @@ -read("plugins"); - if(!empty($plugin_list['active']) && is_array($plugin_list['active'])) - { - foreach($plugin_list['active'] as $plugin) - { - if($plugin != "" && file_exists(MYBB_ROOT."inc/plugins/".$plugin.".php")) - { - require_once MYBB_ROOT."inc/plugins/".$plugin.".php"; - } - } - } - } - - /** - * Add a hook onto which a plugin can be attached. - * - * @param string $hook The hook name. - * @param array|string $function The function of this hook. - * @param int $priority The priority this hook has. - * @param string $file The optional file belonging to this hook. - * @return boolean Whether the hook was added. - */ - function add_hook($hook, $function, $priority=10, $file="") - { - if(is_array($function)) - { - if(!count($function) == 2) - { // must be an array of two items! - return false; - } - - if(is_string($function[0])) - { // Static class method - $method_representation = sprintf('%s::%s', $function[0], $function[1]); - } - elseif(is_object($function[0])) - { // Instance class method - $method_representation = sprintf('%s->%s', get_class($function[0]), $function[1]); - } - else - { // Unknown array type - return false; - } - - // Check to see if we already have this hook running at this priority - if(!empty($this->hooks[$hook][$priority][$method_representation]) && is_array($this->hooks[$hook][$priority][$method_representation])) - { - return true; - } - - // Add the hook - $this->hooks[$hook][$priority][$method_representation] = array( - 'class_method' => $function, - 'file' => $file - ); - } - else - { - // Check to see if we already have this hook running at this priority - if(!empty($this->hooks[$hook][$priority][$function]) && is_array($this->hooks[$hook][$priority][$function])) - { - return true; - } - - // Add the hook - $this->hooks[$hook][$priority][$function] = array( - 'function' => $function, - 'file' => $file - ); - } - - return true; - } - - /** - * Run the hooks that have plugins. - * - * @param string $hook The name of the hook that is run. - * @param mixed $arguments The argument for the hook that is run. The passed value MUST be a variable - * @return mixed The arguments for the hook. - */ - function run_hooks($hook, &$arguments="") - { - if(!isset($this->hooks[$hook]) || !is_array($this->hooks[$hook])) - { - return $arguments; - } - $this->current_hook = $hook; - ksort($this->hooks[$hook]); - foreach($this->hooks[$hook] as $priority => $hooks) - { - if(is_array($hooks)) - { - foreach($hooks as $key => $hook) - { - if($hook['file']) - { - require_once $hook['file']; - } - - if(array_key_exists('class_method', $hook)) - { - $return_args = call_user_func_array($hook['class_method'], array(&$arguments)); - } - else - { - $func = $hook['function']; - - $return_args = $func($arguments); - } - - if($return_args) - { - $arguments = $return_args; - } - } - } - } - $this->current_hook = ''; - - return $arguments; - } - - /** - * Remove a specific hook. - * - * @param string $hook The name of the hook. - * @param array|string $function The function of the hook. - * @param string $file The filename of the plugin. - * @param int $priority The priority of the hook. - * @return bool Whether the hook was removed successfully. - */ - function remove_hook($hook, $function, $file="", $priority=10) - { - if(is_array($function)) - { - if(is_string($function[0])) - { // Static class method - $method_representation = sprintf('%s::%s', $function[0], $function[1]); - } - elseif(is_object($function[0])) - { // Instance class method - $method_representation = sprintf('%s->%s', get_class($function[0]), $function[1]); - } - else - { // Unknown array type - return false; - } - - if(!isset($this->hooks[$hook][$priority][$method_representation])) - { - return true; - } - unset($this->hooks[$hook][$priority][$method_representation]); - } - else - { - // Check to see if we don't already have this hook running at this priority - if(!isset($this->hooks[$hook][$priority][$function])) - { - return true; - } - unset($this->hooks[$hook][$priority][$function]); - } - - return true; - } - - /** - * Establishes if a particular plugin is compatible with this version of MyBB. - * - * @param string $plugin The name of the plugin. - * @return boolean TRUE if compatible, FALSE if incompatible. - */ - function is_compatible($plugin) - { - global $mybb; - - // Ignore potentially missing plugins. - if(!file_exists(MYBB_ROOT."inc/plugins/".$plugin.".php")) - { - return true; - } - - require_once MYBB_ROOT."inc/plugins/".$plugin.".php"; - - $info_func = "{$plugin}_info"; - if(!function_exists($info_func)) - { - return false; - } - $plugin_info = $info_func(); - - // No compatibility set or compatibility = * - assume compatible - if(!$plugin_info['compatibility'] || $plugin_info['compatibility'] == "*") - { - return true; - } - $compatibility = explode(",", $plugin_info['compatibility']); - foreach($compatibility as $version) - { - $version = trim($version); - $version = str_replace("*", ".+", preg_quote($version)); - $version = str_replace("\.+", ".+", $version); - if(preg_match("#{$version}#i", $mybb->version_code)) - { - return true; - } - } - - // Nothing matches - return false; - } -} - diff --git a/html/forums/inc/class_session.php b/html/forums/inc/class_session.php deleted file mode 100644 index faa585e..0000000 --- a/html/forums/inc/class_session.php +++ /dev/null @@ -1,570 +0,0 @@ -ipaddress = get_ip(); - $this->packedip = my_inet_pton($this->ipaddress); - - // Find out the user agent. - $this->useragent = $_SERVER['HTTP_USER_AGENT']; - - // Attempt to find a session id in the cookies. - if(isset($mybb->cookies['sid']) && !defined('IN_UPGRADE')) - { - $sid = $db->escape_string($mybb->cookies['sid']); - // Load the session - $query = $db->simple_select("sessions", "*", "sid='{$sid}' AND ip=".$db->escape_binary($this->packedip)); - $session = $db->fetch_array($query); - if($session['sid']) - { - $this->sid = $session['sid']; - } - } - - // If we have a valid session id and user id, load that users session. - if(!empty($mybb->cookies['mybbuser'])) - { - $logon = explode("_", $mybb->cookies['mybbuser'], 2); - $this->load_user($logon[0], $logon[1]); - } - - // If no user still, then we have a guest. - if(!isset($mybb->user['uid'])) - { - // Detect if this guest is a search engine spider. (bots don't get a cookied session ID so we first see if that's set) - if(!$this->sid) - { - $spiders = $cache->read("spiders"); - if(is_array($spiders)) - { - foreach($spiders as $spider) - { - if(my_strpos(my_strtolower($this->useragent), my_strtolower($spider['useragent'])) !== false) - { - $this->load_spider($spider['sid']); - } - } - } - } - - // Still nothing? JUST A GUEST! - if(!$this->is_spider) - { - $this->load_guest(); - } - } - - // As a token of our appreciation for getting this far (and they aren't a spider), give the user a cookie - if($this->sid && (!isset($mybb->cookies['sid']) || $mybb->cookies['sid'] != $this->sid) && $this->is_spider != true) - { - my_setcookie("sid", $this->sid, -1, true); - } - } - - /** - * Load a user via the user credentials. - * - * @param int $uid The user id. - * @param string $loginkey The user's loginkey. - * @return bool - */ - function load_user($uid, $loginkey='') - { - global $mybb, $db, $time, $lang, $mybbgroups, $cache; - - // Read the banned cache - $bannedcache = $cache->read("banned"); - - // If the banned cache doesn't exist, update it and re-read it - if(!is_array($bannedcache)) - { - $cache->update_banned(); - $bannedcache = $cache->read("banned"); - } - - $uid = (int)$uid; - $query = $db->query(" - SELECT u.*, f.* - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - WHERE u.uid='$uid' - LIMIT 1 - "); - $mybb->user = $db->fetch_array($query); - - if(!empty($bannedcache[$uid])) - { - $banned_user = $bannedcache[$uid]; - $mybb->user['bandate'] = $banned_user['dateline']; - $mybb->user['banlifted'] = $banned_user['lifted']; - $mybb->user['banoldgroup'] = $banned_user['oldgroup']; - $mybb->user['banolddisplaygroup'] = $banned_user['olddisplaygroup']; - $mybb->user['banoldadditionalgroups'] = $banned_user['oldadditionalgroups']; - } - - // Check the password if we're not using a session - if(empty($loginkey) || $loginkey !== $mybb->user['loginkey'] || !$mybb->user['uid']) - { - unset($mybb->user); - $this->uid = 0; - return false; - } - $this->uid = $mybb->user['uid']; - - // Set the logout key for this user - $mybb->user['logoutkey'] = md5($mybb->user['loginkey']); - - // Sort out the private message count for this user. - if(($mybb->user['totalpms'] == -1 || $mybb->user['unreadpms'] == -1) && $mybb->settings['enablepms'] != 0) // Forced recount - { - $update = 0; - if($mybb->user['totalpms'] == -1) - { - $update += 1; - } - if($mybb->user['unreadpms'] == -1) - { - $update += 2; - } - - require_once MYBB_ROOT."inc/functions_user.php"; - $pmcount = update_pm_count('', $update); - if(is_array($pmcount)) - { - $mybb->user = array_merge($mybb->user, $pmcount); - } - } - $mybb->user['pms_total'] = $mybb->user['totalpms']; - $mybb->user['pms_unread'] = $mybb->user['unreadpms']; - - if($mybb->user['lastip'] != $this->packedip && array_key_exists('lastip', $mybb->user) && !defined('IN_UPGRADE')) - { - $lastip_add = ", lastip=".$db->escape_binary($this->packedip); - } - else - { - $lastip_add = ''; - } - - // If the last visit was over 900 seconds (session time out) ago then update lastvisit. - $time = TIME_NOW; - if($time - $mybb->user['lastactive'] > 900) - { - $db->shutdown_query("UPDATE ".TABLE_PREFIX."users SET lastvisit='{$mybb->user['lastactive']}', lastactive='$time'{$lastip_add} WHERE uid='{$mybb->user['uid']}'"); - $mybb->user['lastvisit'] = $mybb->user['lastactive']; - require_once MYBB_ROOT."inc/functions_user.php"; - update_pm_count('', 2); - } - else - { - $timespent = TIME_NOW - $mybb->user['lastactive']; - $db->shutdown_query("UPDATE ".TABLE_PREFIX."users SET lastactive='$time', timeonline=timeonline+$timespent{$lastip_add} WHERE uid='{$mybb->user['uid']}'"); - } - - // Sort out the language and forum preferences. - if($mybb->user['language'] && $lang->language_exists($mybb->user['language'])) - { - $mybb->settings['bblanguage'] = $mybb->user['language']; - } - if($mybb->user['dateformat'] != 0 && $mybb->user['dateformat'] != '') - { - global $date_formats; - if($date_formats[$mybb->user['dateformat']]) - { - $mybb->settings['dateformat'] = $date_formats[$mybb->user['dateformat']]; - } - } - - // Choose time format. - if($mybb->user['timeformat'] != 0 && $mybb->user['timeformat'] != '') - { - global $time_formats; - if($time_formats[$mybb->user['timeformat']]) - { - $mybb->settings['timeformat'] = $time_formats[$mybb->user['timeformat']]; - } - } - - // Find out the threads per page preference. - if($mybb->user['tpp']) - { - $mybb->settings['threadsperpage'] = $mybb->user['tpp']; - } - - // Find out the posts per page preference. - if($mybb->user['ppp']) - { - $mybb->settings['postsperpage'] = $mybb->user['ppp']; - } - - // Does this user prefer posts in classic mode? - if($mybb->user['classicpostbit']) - { - $mybb->settings['postlayout'] = 'classic'; - } - else - { - $mybb->settings['postlayout'] = 'horizontal'; - } - - // Check if this user is currently banned and if we have to lift it. - if(!empty($mybb->user['bandate']) && (isset($mybb->user['banlifted']) && !empty($mybb->user['banlifted'])) && $mybb->user['banlifted'] < $time) // hmmm...bad user... how did you get banned =/ - { - // must have been good.. bans up :D - $db->shutdown_query("UPDATE ".TABLE_PREFIX."users SET usergroup='".(int)$mybb->user['banoldgroup']."', additionalgroups='".$mybb->user['banoldadditionalgroups']."', displaygroup='".(int)$mybb->user['banolddisplaygroup']."' WHERE uid='".$mybb->user['uid']."'"); - $db->shutdown_query("DELETE FROM ".TABLE_PREFIX."banned WHERE uid='".$mybb->user['uid']."'"); - // we better do this..otherwise they have dodgy permissions - $mybb->user['usergroup'] = $mybb->user['banoldgroup']; - $mybb->user['displaygroup'] = $mybb->user['banolddisplaygroup']; - $mybb->user['additionalgroups'] = $mybb->user['banoldadditionalgroups']; - $cache->update_banned(); - - $mybbgroups = $mybb->user['usergroup']; - if($mybb->user['additionalgroups']) - { - $mybbgroups .= ','.$mybb->user['additionalgroups']; - } - } - else if(!empty($mybb->user['bandate']) && (empty($mybb->user['banlifted']) || !empty($mybb->user['banlifted']) && $mybb->user['banlifted'] > $time)) - { - $mybbgroups = $mybb->user['usergroup']; - } - else - { - // Gather a full permission set for this user and the groups they are in. - $mybbgroups = $mybb->user['usergroup']; - if($mybb->user['additionalgroups']) - { - $mybbgroups .= ','.$mybb->user['additionalgroups']; - } - } - - $mybb->usergroup = usergroup_permissions($mybbgroups); - if(!$mybb->user['displaygroup']) - { - $mybb->user['displaygroup'] = $mybb->user['usergroup']; - } - - $mydisplaygroup = usergroup_displaygroup($mybb->user['displaygroup']); - if(is_array($mydisplaygroup)) - { - $mybb->usergroup = array_merge($mybb->usergroup, $mydisplaygroup); - } - - if(!$mybb->user['usertitle']) - { - $mybb->user['usertitle'] = $mybb->usergroup['usertitle']; - } - - // Update or create the session. - if(!defined("NO_ONLINE") && !defined('IN_UPGRADE')) - { - if(!empty($this->sid)) - { - $this->update_session($this->sid, $mybb->user['uid']); - } - else - { - $this->create_session($mybb->user['uid']); - } - } - return true; - } - - /** - * Load a guest user. - * - */ - function load_guest() - { - global $mybb, $time, $db, $lang; - - // Set up some defaults - $time = TIME_NOW; - $mybb->user['usergroup'] = 1; - $mybb->user['username'] = ''; - $mybb->user['uid'] = 0; - $mybbgroups = 1; - $mybb->user['displaygroup'] = 1; - - // Has this user visited before? Lastvisit need updating? - if(isset($mybb->cookies['mybb']['lastvisit'])) - { - if(!isset($mybb->cookies['mybb']['lastactive'])) - { - $mybb->user['lastactive'] = $time; - $mybb->cookies['mybb']['lastactive'] = $mybb->user['lastactive']; - } - else - { - $mybb->user['lastactive'] = (int)$mybb->cookies['mybb']['lastactive']; - } - if($time - $mybb->cookies['mybb']['lastactive'] > 900) - { - my_setcookie("mybb[lastvisit]", $mybb->user['lastactive']); - $mybb->user['lastvisit'] = $mybb->user['lastactive']; - } - else - { - $mybb->user['lastvisit'] = (int)$mybb->cookies['mybb']['lastactive']; - } - } - - // No last visit cookie, create one. - else - { - my_setcookie("mybb[lastvisit]", $time); - $mybb->user['lastvisit'] = $time; - } - - // Update last active cookie. - my_setcookie("mybb[lastactive]", $time); - - // Gather a full permission set for this guest - $mybb->usergroup = usergroup_permissions($mybbgroups); - $mydisplaygroup = usergroup_displaygroup($mybb->user['displaygroup']); - - $mybb->usergroup = array_merge($mybb->usergroup, $mydisplaygroup); - - // Update the online data. - if(!defined("NO_ONLINE") && !defined('IN_UPGRADE')) - { - if(!empty($this->sid)) - { - $this->update_session($this->sid); - } - else - { - $this->create_session(); - } - } - } - - /** - * Load a search engine spider. - * - * @param int $spider_id The ID of the search engine spider - */ - function load_spider($spider_id) - { - global $mybb, $time, $db, $lang; - - // Fetch the spider preferences from the database - $query = $db->simple_select("spiders", "*", "sid='{$spider_id}'"); - $spider = $db->fetch_array($query); - - // Set up some defaults - $time = TIME_NOW; - $this->is_spider = true; - if($spider['usergroup']) - { - $mybb->user['usergroup'] = $spider['usergroup']; - } - else - { - $mybb->user['usergroup'] = 1; - } - $mybb->user['username'] = ''; - $mybb->user['uid'] = 0; - $mybb->user['displaygroup'] = $mybb->user['usergroup']; - - // Set spider language - if($spider['language'] && $lang->language_exists($spider['language'])) - { - $mybb->settings['bblanguage'] = $spider['language']; - } - - // Set spider theme - if($spider['theme']) - { - $mybb->user['style'] = $spider['theme']; - } - - // Gather a full permission set for this spider. - $mybb->usergroup = usergroup_permissions($mybb->user['usergroup']); - $mydisplaygroup = usergroup_displaygroup($mybb->user['displaygroup']); - $mybb->usergroup = array_merge($mybb->usergroup, $mydisplaygroup); - - // Update spider last minute (only do so on two minute intervals - decrease load for quick spiders) - if($spider['lastvisit'] < TIME_NOW-120) - { - $updated_spider = array( - "lastvisit" => TIME_NOW - ); - $db->update_query("spiders", $updated_spider, "sid='{$spider_id}'"); - } - - // Update the online data. - if(!defined("NO_ONLINE") && !defined('IN_UPGRADE')) - { - $this->sid = "bot=".$spider_id; - $this->create_session(); - } - - } - - /** - * Update a user session. - * - * @param int $sid The session id. - * @param int $uid The user id. - */ - function update_session($sid, $uid=0) - { - global $db; - - // Find out what the special locations are. - $speciallocs = $this->get_special_locations(); - if($uid) - { - $onlinedata['uid'] = $uid; - } - else - { - $onlinedata['uid'] = 0; - } - $onlinedata['time'] = TIME_NOW; - - $onlinedata['location'] = $db->escape_string(substr(get_current_location(), 0, 150)); - $onlinedata['useragent'] = $db->escape_string(my_substr($this->useragent, 0, 200)); - - $onlinedata['location1'] = (int)$speciallocs['1']; - $onlinedata['location2'] = (int)$speciallocs['2']; - $onlinedata['nopermission'] = 0; - $sid = $db->escape_string($sid); - - $db->update_query("sessions", $onlinedata, "sid='{$sid}'"); - } - - /** - * Create a new session. - * - * @param int $uid The user id to bind the session to. - */ - function create_session($uid=0) - { - global $db; - $speciallocs = $this->get_special_locations(); - - // If there is a proper uid, delete by uid. - if($uid > 0) - { - $db->delete_query("sessions", "uid='{$uid}'"); - $onlinedata['uid'] = $uid; - } - // Is a spider - delete all other spider references - else if($this->is_spider == true) - { - $db->delete_query("sessions", "sid='{$this->sid}'"); - } - // Else delete by ip. - else - { - $db->delete_query("sessions", "ip=".$db->escape_binary($this->packedip)); - $onlinedata['uid'] = 0; - } - - // If the user is a search enginge spider, ... - if($this->is_spider == true) - { - $onlinedata['sid'] = $this->sid; - } - else - { - $onlinedata['sid'] = md5(random_str(50)); - } - $onlinedata['time'] = TIME_NOW; - $onlinedata['ip'] = $db->escape_binary($this->packedip); - - $onlinedata['location'] = $db->escape_string(substr(get_current_location(), 0, 150)); - $onlinedata['useragent'] = $db->escape_string(my_substr($this->useragent, 0, 200)); - - $onlinedata['location1'] = (int)$speciallocs['1']; - $onlinedata['location2'] = (int)$speciallocs['2']; - $onlinedata['nopermission'] = 0; - $db->replace_query("sessions", $onlinedata, "sid", false); - $this->sid = $onlinedata['sid']; - $this->uid = $onlinedata['uid']; - } - - /** - * Find out the special locations. - * - * @return array Special locations array. - */ - function get_special_locations() - { - global $mybb; - $array = array('1' => '', '2' => ''); - if(preg_match("#forumdisplay.php#", $_SERVER['PHP_SELF']) && $mybb->get_input('fid', MyBB::INPUT_INT) > 0) - { - $array[1] = $mybb->get_input('fid', MyBB::INPUT_INT); - $array[2] = ''; - } - elseif(preg_match("#showthread.php#", $_SERVER['PHP_SELF'])) - { - global $db; - - if($mybb->get_input('tid', MyBB::INPUT_INT) > 0) - { - $array[2] = $mybb->get_input('tid', MyBB::INPUT_INT); - } - - // If there is no tid but a pid, trick the system into thinking there was a tid anyway. - elseif(isset($mybb->input['pid']) && !empty($mybb->input['pid'])) - { - $options = array( - "limit" => 1 - ); - $query = $db->simple_select("posts", "tid", "pid=".$mybb->get_input('pid', MyBB::INPUT_INT), $options); - $post = $db->fetch_array($query); - $array[2] = $post['tid']; - } - - $thread = get_thread($array[2]); - $array[1] = $thread['fid']; - } - return $array; - } -} diff --git a/html/forums/inc/class_stopforumspamchecker.php b/html/forums/inc/class_stopforumspamchecker.php deleted file mode 100644 index 0b9ae72..0000000 --- a/html/forums/inc/class_stopforumspamchecker.php +++ /dev/null @@ -1,204 +0,0 @@ -plugins = $plugins; - $this->min_weighting_before_spam = (double)$min_weighting_before_spam; - $this->check_usernames = (bool)$check_usernames; - $this->check_emails = (bool)$check_emails; - $this->check_ips = (bool)$check_ips; - $this->log_blocks = (bool)$log_blocks; - } - - /** - * Check a user against the 3rd party service to determine whether they are a spammer. - * - * @param string $username The username of the user to check. - * @param string $email The email address of the user to check. - * @param string $ip_address The IP address sof the user to check. - * @return bool Whether the user is considered a spammer or not. - * @throws Exception Thrown when there's an error fetching from the StopForumSpam API or when the data cannot be decoded. - */ - public function is_user_a_spammer($username = '', $email = '', $ip_address = '') - { - $is_spammer = false; - $confidence = 0; - - if(filter_var($email, FILTER_VALIDATE_EMAIL) && filter_var($ip_address, FILTER_VALIDATE_IP)) // Calls to the API with invalid email/ip formats cause issues - { - $username_encoded = urlencode($username); - $email_encoded = urlencode($email); - - $check_url = sprintf(self::STOP_FORUM_SPAM_API_URL_FORMAT, $username_encoded, $email_encoded, $ip_address); - - $result = fetch_remote_file($check_url); - - if($result !== false) - { - $result_json = @json_decode($result); - - if($result_json != null && !isset($result_json->error)) - { - if($this->check_usernames && $result_json->username->appears) - { - $confidence += $result_json->username->confidence; - } - - if($this->check_emails && $result_json->email->appears) - { - $confidence += $result_json->email->confidence; - } - - if($this->check_ips && $result_json->ip->appears) - { - $confidence += $result_json->ip->confidence; - } - - if($confidence > $this->min_weighting_before_spam) - { - $is_spammer = true; - } - } - else - { - throw new Exception('stopforumspam_error_decoding'); - } - } - else - { - throw new Exception('stopforumspam_error_retrieving'); - } - } - - if($this->plugins) - { - $params = array( - 'username' => &$username, - 'email' => &$email, - 'ip_address' => &$ip_address, - 'is_spammer' => &$is_spammer, - 'confidence' => &$confidence, - ); - - $this->plugins->run_hooks('stopforumspam_check_spammer_pre_return', $params); - } - - if($this->log_blocks && $is_spammer) - { - log_spam_block( - $username, $email, $ip_address, array( - 'confidence' => (double)$confidence, - ) - ); - } - - return $is_spammer; - } - - /** - * @param array $sfsSettingsEnabled - * - * @return string - */ - public function getErrorText($sfsSettingsEnabled) - { - global $mybb, $lang; - - foreach($sfsSettingsEnabled as $setting) - { - if($setting == 'stopforumspam_check_usernames' && $mybb->settings[$setting]) - { - $settingsenabled[] = $lang->sfs_error_username; - continue; - } - - if($setting == 'stopforumspam_check_emails' && $mybb->settings[$setting]) - { - $settingsenabled[] = $lang->sfs_error_email; - continue; - } - - if($setting = 'stopforumspam_check_ips' && $mybb->settings[$setting]) - { - $settingsenabled[] = $lang->sfs_error_ip; - continue; - } - } - - if(sizeof($settingsenabled) > 1) - { - $lastsetting = $settingsenabled[sizeof($settingsenabled)-1]; - unset($settingsenabled[sizeof($settingsenabled)-1]); - - $stopforumspamerror = implode($lang->comma, $settingsenabled) . " {$lang->sfs_error_or} " . $lastsetting; - } - else - { - $stopforumspamerror = $settingsenabled[0]; - } - return $stopforumspamerror; - } -} diff --git a/html/forums/inc/class_templates.php b/html/forums/inc/class_templates.php deleted file mode 100644 index 0126591..0000000 --- a/html/forums/inc/class_templates.php +++ /dev/null @@ -1,163 +0,0 @@ - $title) - { - $sql .= " ,'".trim($title)."'"; - } - - $query = $db->simple_select("templates", "title,template", "title IN (''$sql) AND sid IN ('-2','-1','".$theme['templateset']."')", array('order_by' => 'sid', 'order_dir' => 'asc')); - while($template = $db->fetch_array($query)) - { - $this->cache[$template['title']] = $template['template']; - } - } - - /** - * Gets templates. - * - * @param string $title The title of the template to get. - * @param boolean|int $eslashes True if template contents must be escaped, false if not. - * @param boolean|int $htmlcomments True to output HTML comments, false to not output. - * @return string The template HTML. - */ - function get($title, $eslashes=1, $htmlcomments=1) - { - global $db, $theme, $mybb; - - // - // DEVELOPMENT MODE - // - if($mybb->dev_mode == 1) - { - $template = $this->dev_get($title); - if($template !== false) - { - $this->cache[$title] = $template; - } - } - - if(!isset($this->cache[$title])) - { - // Only load master and global templates if template is needed in Admin CP - if(empty($theme['templateset'])) - { - $query = $db->simple_select("templates", "template", "title='".$db->escape_string($title)."' AND sid IN ('-2','-1')", array('order_by' => 'sid', 'order_dir' => 'DESC', 'limit' => 1)); - } - else - { - $query = $db->simple_select("templates", "template", "title='".$db->escape_string($title)."' AND sid IN ('-2','-1','".$theme['templateset']."')", array('order_by' => 'sid', 'order_dir' => 'DESC', 'limit' => 1)); - } - - $gettemplate = $db->fetch_array($query); - if($mybb->debug_mode) - { - $this->uncached_templates[$title] = $title; - } - - if(!$gettemplate) - { - $gettemplate['template'] = ""; - } - - $this->cache[$title] = $gettemplate['template']; - } - $template = $this->cache[$title]; - - if($htmlcomments) - { - if($mybb->settings['tplhtmlcomments'] == 1) - { - $template = "\n{$template}\n"; - } - else - { - $template = "\n{$template}\n"; - } - } - - if($eslashes) - { - $template = str_replace("\\'", "'", addslashes($template)); - } - return $template; - } - - /** - * Prepare a template for rendering to a variable. - * - * @param string $template The name of the template to get. - * @param boolean $eslashes True if template contents must be escaped, false if not. - * @param boolean $htmlcomments True to output HTML comments, false to not output. - * @return string The eval()-ready PHP code for rendering the template - */ - function render($template, $eslashes=true, $htmlcomments=true) - { - return 'return "'.$this->get($template, $eslashes, $htmlcomments).'";'; - } - - /** - * Fetch a template directly from the install/resources/mybb_theme.xml directory if it exists (DEVELOPMENT MODE) - * - * @param string $title - * @return string|bool - */ - function dev_get($title) - { - static $template_xml; - - if(!$template_xml) - { - if(@file_exists(MYBB_ROOT."install/resources/mybb_theme.xml")) - { - $template_xml = simplexml_load_file(MYBB_ROOT."install/resources/mybb_theme.xml"); - } - else - { - return false; - } - } - $res = $template_xml->xpath("//template[@name='{$title}']"); - return $res[0]; - } -} diff --git a/html/forums/inc/class_timers.php b/html/forums/inc/class_timers.php deleted file mode 100644 index 8f31170..0000000 --- a/html/forums/inc/class_timers.php +++ /dev/null @@ -1,133 +0,0 @@ -add(); - } - - /** - * Starts the timer. - * - */ - function add() - { - if(!$this->start) - { - $this->start = microtime(true); - } - } - - /** - * Gets the time for which the timer has run up until this point. - * - * @return string|boolean The formatted time up until now or false when timer is no longer running. - */ - function getTime() - { - if($this->end) // timer has been stopped - { - return $this->totaltime; - } - elseif($this->start && !$this->end) // timer is still going - { - $currenttime = microtime(true); - $totaltime = $currenttime - $this->start; - return $this->format($totaltime); - } - else - { - return false; - } - } - - /** - * Stops the timer. - * - * @return string The formatted total time. - */ - function stop() - { - if($this->start) - { - $this->end = microtime(true); - $totaltime = $this->end - $this->start; - $this->totaltime = $totaltime; - $this->formatted = $this->format($totaltime); - return $this->formatted; - } - return ''; - } - - /** - * Removes the timer. - * - */ - function remove() - { - $this->name = ""; - $this->start = ""; - $this->end = ""; - $this->totaltime = ""; - $this->formatted = ""; - } - - /** - * Formats the timer time in a pretty way. - * - * @param string $string The time string. - * @return string The formatted time string. - */ - function format($string) - { - return number_format($string, 7); - } -} diff --git a/html/forums/inc/class_xml.php b/html/forums/inc/class_xml.php deleted file mode 100644 index a53e516..0000000 --- a/html/forums/inc/class_xml.php +++ /dev/null @@ -1,182 +0,0 @@ -data = $data; - } - - /** - * Build a tree based structure based from the parsed data - * - * @return array The tree based structure - */ - function get_tree() - { - $parser = xml_parser_create(); - xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 0); - xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); - if(!xml_parse_into_struct($parser, $this->data, $vals, $index)) - { - return false; - } - - $i = -1; - return $this->get_children($vals, $i); - } - - /** - * Private: Build a completed tag by fetching all child nodes and attributes - * - * @param array $thisvals Array of values from the current tag - * @param array $vals Array of child nodes - * @param int $i Internal counter - * @param string $type Type of tag. Complete is a single line tag with attributes - * @return array Completed tag array - */ - function build_tag($thisvals, $vals, &$i, $type) - { - $tag = array('tag' => $thisvals['tag']); - - if(isset($thisvals['attributes'])) - { - $tag['attributes'] = $thisvals['attributes']; - } - - if($type == "complete") - { - if(isset($thisvals['value'])) - { - $tag['value'] = $thisvals['value']; - } - } - else - { - $tag = array_merge($tag, $this->get_children($vals, $i)); - } - return $tag; - } - - /** - * Fetch the children for from a specific node array - * - * @param array $vals Array of children - * @param int $i Internal counter - * @return array Array of child nodes - */ - function get_children($vals, &$i) - { - $children = array(); - - if($i > -1 && isset($vals[$i]['value'])) - { - $children['value'] = $vals[$i]['value']; - } - - while(++$i < count($vals)) - { - $type = $vals[$i]['type']; - if($type == "cdata") - { - $children['value'] .= $vals[$i]['value']; - } - elseif($type == "complete" || $type == "open") - { - $tag = $this->build_tag($vals[$i], $vals, $i, $type); - if($this->index_numeric) - { - $tag['tag'] = $vals[$i]['tag']; - $children[] = $tag; - } - else - { - $children[$tag['tag']][] = $tag; - } - } - else if($type == "close") - { - break; - } - } - if($this->collapse_dups) - { - foreach($children as $key => $value) - { - if(is_array($value) && (count($value) == 1)) - { - $children[$key] = $value[0]; - } - } - } - return $children; - } -} - -/** - * Kill off unnecessary tags and return a clean array of XML data - * - * @param array $array Array of parsed XML data - * @return array Cleaned array of XML data - */ -function kill_tags($array) -{ - foreach($array as $key => $val) - { - if($key == "tag" || $key == "value") - { - unset($array[$key]); - } - else if(is_array($val)) - { - // kill any nested tag or value indexes - $array[$key] = kill_tags($val); - - // if the array no longer has any key/val sets - // and therefore is at the deepest level, then - // store the string value - if(count($array[$key]) <= 0) - { - $array[$key] = $val['value']; - } - } - } - - return $array; -} diff --git a/html/forums/inc/config.default.php b/html/forums/inc/config.default.php deleted file mode 100644 index e69de29..0000000 diff --git a/html/forums/inc/datahandler.php b/html/forums/inc/datahandler.php deleted file mode 100644 index 69e8144..0000000 --- a/html/forums/inc/datahandler.php +++ /dev/null @@ -1,217 +0,0 @@ -method = $method; - } - - /** - * Sets the data to be used for the data handler - * - * @param array $data The data. - * @return bool - */ - function set_data($data) - { - if(!is_array($data)) - { - return false; - } - $this->data = $data; - return true; - } - - /** - * Add an error to the error array. - * - * @param string $error The error name. - * @param string $data - */ - function set_error($error, $data='') - { - $this->errors[$error] = array( - "error_code" => $error, - "data" => $data - ); - } - - /** - * Returns the error(s) that occurred when handling data. - * - * @return array An array of errors. - */ - function get_errors() - { - return $this->errors; - } - - /** - * Returns the error(s) that occurred when handling data - * in a format that MyBB can handle. - * - * @return array An array of errors in a MyBB format. - */ - function get_friendly_errors() - { - global $lang; - - // Load the language pack we need - if($this->language_file) - { - $lang->load($this->language_file, true); - } - // Prefix all the error codes with the language prefix. - $errors = array(); - foreach($this->errors as $error) - { - $lang_string = $this->language_prefix.'_'.$error['error_code']; - if(!$lang->$lang_string) - { - $errors[] = $error['error_code']; - continue; - } - - if(!empty($error['data']) && !is_array($error['data'])) - { - $error['data'] = array($error['data']); - } - - if(is_array($error['data'])) - { - array_unshift($error['data'], $lang->$lang_string); - $errors[] = call_user_func_array(array($lang, "sprintf"), $error['data']); - } - else - { - $errors[] = $lang->$lang_string; - } - } - return $errors; - } - - /** - * Sets whether or not we are done validating. - * - * @param boolean True when done, false when not done. - */ - function set_validated($validated = true) - { - $this->is_validated = $validated; - } - - /** - * Returns whether or not we are done validating. - * - * @return boolean True when done, false when not done. - */ - function get_validated() - { - if($this->is_validated == true) - { - return true; - } - else - { - return false; - } - } - - /** - * Verifies if yes/no options haven't been modified. - * - * @param array $options The user options array. - * @param string $option The specific option to check. - * @param int|bool $default Optionally specify if the default should be used. - */ - function verify_yesno_option(&$options, $option, $default=1) - { - if($this->method == "insert" || array_key_exists($option, $options)) - { - if(isset($options[$option]) && $options[$option] != $default && $options[$option] != "") - { - if($default == 1) - { - $options[$option] = 0; - } - else - { - $options[$option] = 1; - } - } - else if(@array_key_exists($option, $options) && $options[$option] == '') - { - $options[$option] = 0; - } - else - { - $options[$option] = $default; - } - } - } -} diff --git a/html/forums/inc/datahandlers/event.php b/html/forums/inc/datahandlers/event.php deleted file mode 100644 index 93ef3f0..0000000 --- a/html/forums/inc/datahandlers/event.php +++ /dev/null @@ -1,643 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * Event handling class, provides common structure to handle event data. - * - */ -class EventDataHandler extends DataHandler -{ - /** - * The language file used in the data handler. - * - * @var string - */ - public $language_file = 'datahandler_event'; - - /** - * The prefix for the language variables used in the data handler. - * - * @var string - */ - public $language_prefix = 'eventdata'; - - /** - * Array of data inserted in to an event. - * - * @var array - */ - public $event_insert_data = array(); - - /** - * Array of data used to update an event. - * - * @var array - */ - public $event_update_data = array(); - - /** - * Event ID currently being manipulated by the datahandlers. - * - * @var int - */ - public $eid = 0; - - /** - * Values to be returned after inserting/updating an event. - * - * @var array - */ - public $return_values = array(); - - /** - * Verifies if an event name is valid or not and attempts to fix it - * - * @return boolean True if valid, false if invalid. - */ - function verify_name() - { - $name = &$this->data['name']; - $name = trim($name); - if(!$name) - { - $this->set_error("missing_name"); - return false; - } - return true; - } - - /** - * Verifies if an event description is valid or not and attempts to fix it - * - * @return boolean True if valid, false if invalid. - */ - function verify_description() - { - $description = &$this->data['description']; - $description = trim($description); - if(!$description) - { - $this->set_error("missing_description"); - return false; - } - return true; - } - - /** - * Verifies if an event date is valid or not and attempts to fix it - * - * @return boolean True if valid, false if invalid. - */ - function verify_date() - { - $event = &$this->data; - - // All types of events require a start date - if(!$event['start_date']['day'] || !$event['start_date']['month'] || !$event['start_date']['year']) - { - $this->set_error("invalid_start_date"); - return false; - } - - $event['start_date']['day'] = (int)$event['start_date']['day']; - $event['start_date']['month'] = (int)$event['start_date']['month']; - $event['start_date']['year'] = (int)$event['start_date']['year']; - - if($event['start_date']['day'] > date("t", mktime(0, 0, 0, $event['start_date']['month'], 1, $event['start_date']['year']))) - { - $this->set_error("invalid_start_date"); - return false; - } - - // Calendar events can only be within the next 5 years - if($event['start_date']['year'] > date("Y") + 5) - { - $this->set_error("invalid_start_year"); - return false; - } - - //Check to see if the month is within 1 and 12 - if($event['start_date']['month'] > 12 || $event['start_date']['month'] < 1) - { - $this->set_error("invalid_start_month"); - return false; - } - - // For ranged events, we check the end date & times too - if($event['type'] == "ranged") - { - if(!$event['end_date']['day'] || !$event['end_date']['month'] || !$event['end_date']['year']) - { - $this->set_error("invalid_end_date"); - return false; - } - - $event['end_date']['day'] = (int)$event['end_date']['day']; - $event['end_date']['month'] = (int)$event['end_date']['month']; - $event['end_date']['year'] = (int)$event['end_date']['year']; - - if($event['end_date']['day'] > date("t", mktime(0, 0, 0, $event['end_date']['month'], 1, $event['end_date']['year']))) - { - $this->set_error("invalid_end_date"); - return false; - } - - // Calendar events can only be within the next 5 years - if($event['end_date']['year'] > date("Y") + 5) - { - $this->set_error("invalid_end_year"); - return false; - } - - //Check to see if the month is within 1 and 12 - if($event['end_date']['month'] > 12 || $event['end_date']['month'] < 1) - { - $this->set_error("invalid_end_month"); - return false; - } - - // Validate time input - if($event['start_date']['time'] || $event['end_date']['time']) - { - if(($event['start_date']['time'] && !$event['end_date']['time']) || ($event['end_date']['time'] && !$event['start_date']['time'])) - { - $this->set_error("cant_specify_one_time"); - return false; - } - - // Begin start time validation - $start_time = $this->verify_time($event['start_date']['time']); - if(!is_array($start_time)) - { - $this->set_error("start_time_invalid"); - return false; - } - - // End time validation - $end_time = $this->verify_time($event['end_date']['time']); - if(!is_array($end_time)) - { - $this->set_error("end_time_invalid"); - return false; - } - $event['usingtime'] = 1; - } - else - { - $start_time = array("hour" => 0, "min" => 0); - $end_time = array("hour" => 23, "min" => 59); - $event['usingtime'] = 0; - } - } - - if(array_key_exists('timezone', $event)) - { - $event['timezone'] = (float)$event['timezone']; - if($event['timezone'] > 12 || $event['timezone'] < -12) - { - $this->set_error("invalid_timezone"); - return false; - } - $start_time['hour'] -= $event['timezone']; - $end_time['hour'] -= $event['timezone']; - } - - if(!isset($start_time)) - { - $start_time = array("hour" => 0, "min" => 0); - } - - $start_timestamp = gmmktime($start_time['hour'], $start_time['min'], 0, $event['start_date']['month'], $event['start_date']['day'], $event['start_date']['year']); - - if($event['type'] == "ranged") - { - $end_timestamp = gmmktime($end_time['hour'], $end_time['min'], 0, $event['end_date']['month'], $event['end_date']['day'], $event['end_date']['year']); - - if($end_timestamp <= $start_timestamp) - { - $this->set_error("end_in_past"); - return false; - } - } - - if(!isset($end_timestamp)) - { - $end_timestamp = 0; - } - - // Save our time stamps for saving - $event['starttime'] = $start_timestamp; - $event['endtime'] = $end_timestamp; - - return true; - } - - /** - * @param string $time - * - * @return array|bool - */ - function verify_time($time) - { - preg_match('#^(0?[1-9]|1[012])\s?([:\.]?)\s?([0-5][0-9])?(\s?[ap]m)|([01][0-9]|2[0-3])\s?([:\.])\s?([0-5][0-9])$#i', $time, $matches); - if(count($matches) == 0) - { - return false; - } - - // 24h time - if(count($matches) == 8) - { - $hour = $matches[5]; - $min = $matches[7]; - } - // 12 hour time - else - { - $hour = $matches[1]; - $min = (int)$matches[3]; - $matches[4] = trim($matches[4]); - if(my_strtolower($matches[4]) == "pm" && $hour != 12) - { - $hour += 12; - } - else if(my_strtolower($matches[4]) == "am" && $hour == 12) - { - $hour = 0; - } - } - return array("hour" => $hour, "min" => $min); - } - - /** - * @return bool - */ - function verify_repeats() - { - $event = &$this->data; - - if(!is_array($event['repeats']) || !$event['repeats']['repeats']) - { - return true; - } - - if(!$event['endtime']) - { - $this->set_error("only_ranged_events_repeat"); - return false; - } - - switch($event['repeats']['repeats']) - { - case 1: - $event['repeats']['days'] = (int)$event['repeats']['days']; - if($event['repeats']['days'] <= 0) - { - $this->set_error("invalid_repeat_day_interval"); - return false; - } - case 2: - break; - case 3: - $event['repeats']['weeks'] = (int)$event['repeats']['weeks']; - if($event['repeats']['weeks'] <= 0) - { - $this->set_error("invalid_repeat_week_interval"); - return false; - } - if(count($event['repeats']['days']) == 0) - { - $this->set_error("invalid_repeat_weekly_days"); - return false; - } - asort($event['repeats']['days']); - break; - case 4: - if($event['repeats']['day']) - { - $event['repeats']['day'] = (int)$event['repeats']['day']; - if($event['repeats']['day'] <= 0 || $event['repeats']['day'] > 31) - { - $this->set_error("invalid_repeat_day_interval"); - return false; - } - } - else - { - if($event['repeats']['occurance'] != "last") - { - $event['repeats']['occurance'] = (int)$event['repeats']['occurance']; - } - $event['repeats']['weekday'] = (int)$event['repeats']['weekday']; - } - $event['repeats']['months'] = (int)$event['repeats']['months']; - if($event['repeats']['months'] <= 0 || $event['repeats']['months'] > 12) - { - $this->set_error("invalid_repeat_month_interval"); - return false; - } - break; - case 5: - if($event['repeats']['day']) - { - $event['repeats']['day'] = (int)$event['repeats']['day']; - if($event['repeats']['day'] <= 0 || $event['repeats']['day'] > 31) - { - $this->set_error("invalid_repeat_day_interval"); - return false; - } - } - else - { - if($event['repeats']['occurance'] != "last") - { - $event['repeats']['occurance'] = (int)$event['repeats']['occurance']; - } - $event['repeats']['weekday'] = (int)$event['repeats']['weekday']; - } - $event['repeats']['month'] = (int)$event['repeats']['month']; - if($event['repeats']['month'] <= 0 || $event['repeats']['month'] > 12) - { - $this->set_error("invalid_repeat_month_interval"); - return false; - } - $event['repeats']['years'] = (int)$event['repeats']['years']; - if($event['repeats']['years'] <= 0 || $event['repeats']['years'] > 4) - { - $this->set_error("invalid_repeat_year_interval"); - return false; - } - break; - default: - $event['repeats'] = array(); - } - require_once MYBB_ROOT."inc/functions_calendar.php"; - $event['starttime_user'] = $event['starttime']; - $event['endtime_user'] = $event['endtime']; - $next_occurance = fetch_next_occurance($event, array('start' => $event['starttime'], 'end' => $event['endtime']), $event['starttime'], true); - if($next_occurance > $event['endtime']) - { - $this->set_error("event_wont_occur"); - return false; - } - return true; - } - - /** - * Validate an event. - * - * @return bool - */ - function validate_event() - { - global $plugins; - - $event = &$this->data; - - if($this->method == "insert" || array_key_exists('name', $event)) - { - $this->verify_name(); - } - - if($this->method == "insert" || array_key_exists('description', $event)) - { - $this->verify_description(); - } - - if($this->method == "insert" || array_key_exists('start_date', $event) || array_key_exists('end_date', $event)) - { - $this->verify_date(); - } - - if(($this->method == "insert" && $event['endtime']) || array_key_exists('repeats', $event)) - { - $this->verify_repeats(); - } - - $plugins->run_hooks("datahandler_event_validate", $this); - - // We are done validating, return. - $this->set_validated(true); - if(count($this->get_errors()) > 0) - { - return false; - } - else - { - return true; - } - } - - /** - * Insert an event into the database. - * - * @return array Array of new event details, eid and private. - */ - function insert_event() - { - global $db, $mybb, $plugins; - - // Yes, validating is required. - if(!$this->get_validated()) - { - die("The event needs to be validated before inserting it into the DB."); - } - - if(count($this->get_errors()) > 0) - { - die("The event is not valid."); - } - - $event = &$this->data; - - $query = $db->simple_select("calendars", "*", "cid='".(int)$event['cid']."'"); - $calendar_moderation = $db->fetch_field($query, "moderation"); - if($calendar_moderation == 1 && (int)$event['private'] != 1) - { - $visible = 0; - if($event['uid'] == $mybb->user['uid']) - { - $calendar_permissions = get_calendar_permissions($event['cid']); - if($calendar_permissions['canbypasseventmod'] == 1) - { - $visible = 1; - } - } - } - else - { - $visible = 1; - } - - // Prepare an array for insertion into the database. - $this->event_insert_data = array( - 'cid' => (int)$event['cid'], - 'uid' => (int)$event['uid'], - 'name' => $db->escape_string($event['name']), - 'description' => $db->escape_string($event['description']), - 'visible' => $visible, - 'private' => (int)$event['private'], - 'dateline' => TIME_NOW, - 'starttime' => (int)$event['starttime'], - 'endtime' => (int)$event['endtime'] - ); - - if(isset($event['timezone'])) - { - $this->event_insert_data['timezone'] = $db->escape_string((float)$event['timezone']); - } - - if(isset($event['ignoretimezone'])) - { - $this->event_insert_data['ignoretimezone'] = (int)$event['ignoretimezone']; - } - - if(isset($event['usingtime'])) - { - $this->event_insert_data['usingtime'] = (int)$event['usingtime']; - } - - if(isset($event['repeats'])) - { - $this->event_insert_data['repeats'] = $db->escape_string(my_serialize($event['repeats'])); - } - else - { - $this->event_insert_data['repeats'] = ''; - } - - $plugins->run_hooks("datahandler_event_insert", $this); - - $this->eid = $db->insert_query("events", $this->event_insert_data); - - // Return the event's eid and whether or not it is private. - $this->return_values = array( - 'eid' => $this->eid, - 'private' => $event['private'], - 'visible' => $visible - ); - - $plugins->run_hooks("datahandler_event_insert_end", $this); - - return $this->return_values; - } - - /** - * Updates an event that is already in the database. - * - * @return array - */ - function update_event() - { - global $db, $plugins; - - // Yes, validating is required. - if(!$this->get_validated()) - { - die("The event needs to be validated before inserting it into the DB."); - } - - if(count($this->get_errors()) > 0) - { - die("The event is not valid."); - } - - $event = &$this->data; - - $this->eid = $event['eid']; - - if(isset($event['cid'])) - { - $this->event_update_data['cid'] = $db->escape_string($event['cid']); - } - - if(isset($event['name'])) - { - $this->event_update_data['name'] = $db->escape_string($event['name']); - } - - if(isset($event['description'])) - { - $this->event_update_data['description'] = $db->escape_string($event['description']); - } - - if(isset($event['starttime'])) - { - $this->event_update_data['starttime'] = (int)$event['starttime']; - $this->event_update_data['usingtime'] = (int)$event['usingtime']; - } - - if(isset($event['endtime'])) - { - $this->event_update_data['endtime'] = (int)$event['endtime']; - $this->event_update_data['usingtime'] = (int)$event['usingtime']; - } - else - { - $this->event_update_data['endtime'] = 0; - $this->event_update_data['usingtime'] = 0; - } - - if(isset($event['repeats'])) - { - if(!empty($event['repeats'])) - { - $event['repeats'] = my_serialize($event['repeats']); - } - $this->event_update_data['repeats'] = $db->escape_string($event['repeats']); - } - - if(isset($event['timezone'])) - { - $this->event_update_data['timezone'] = $db->escape_string((float)$event['timezone']); - } - - if(isset($event['ignoretimezone'])) - { - $this->event_update_data['ignoretimezone'] = (int)$event['ignoretimezone']; - } - - if(isset($event['private'])) - { - $this->event_update_data['private'] = (int)$event['private']; - } - - if(isset($event['visible'])) - { - $this->event_update_data['visible'] = $db->escape_string($event['visible']); - } - - if(isset($event['uid'])) - { - $this->event_update_data['uid'] = (int)$event['uid']; - } - - $plugins->run_hooks("datahandler_event_update", $this); - - $db->update_query("events", $this->event_update_data, "eid='".(int)$event['eid']."'"); - - // Return the event's eid and whether or not it is private. - $this->return_values = array( - 'eid' => $event['eid'], - 'private' => $event['private'] - ); - - $plugins->run_hooks("datahandler_event_update_end", $this); - - return $this->return_values; - } -} - diff --git a/html/forums/inc/datahandlers/index.html b/html/forums/inc/datahandlers/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/datahandlers/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/datahandlers/login.php b/html/forums/inc/datahandlers/login.php deleted file mode 100644 index 9012aed..0000000 --- a/html/forums/inc/datahandlers/login.php +++ /dev/null @@ -1,340 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * Login handling class, provides common structure to handle login events. - * - */ -class LoginDataHandler extends DataHandler -{ - /** - * The language file used in the data handler. - * - * @var string - */ - public $language_file = 'datahandler_login'; - - /** - * The prefix for the language variables used in the data handler. - * - * @var string - */ - public $language_prefix = 'logindata'; - - /** - * Array of data used via login events. - * - * @var array - */ - public $login_data = array(); - - /** - * @var bool - */ - public $captcha_verified = true; - - /** - * @var bool|captcha - */ - private $captcha = false; - - /** - * @var int - */ - public $username_method = null; - - /** - * @param int $check_captcha - */ - function verify_attempts($check_captcha = 0) - { - global $db, $mybb; - - $user = &$this->data; - - if($check_captcha) - { - if(!isset($mybb->cookies['loginattempts'])) - { - $mybb->cookies['loginattempts'] = 0; - } - if($mybb->settings['failedcaptchalogincount'] > 0 && ($user['loginattempts'] > $mybb->settings['failedcaptchalogincount'] || (int)$mybb->cookies['loginattempts'] > $mybb->settings['failedcaptchalogincount'])) - { - $this->captcha_verified = false; - $this->verify_captcha(); - } - } - } - - /** - * @return bool - */ - function verify_captcha() - { - global $db, $mybb; - - $user = &$this->data; - - if($user['imagestring'] || $mybb->settings['captchaimage'] != 1) - { - // Check their current captcha input - if correct, hide the captcha input area - require_once MYBB_ROOT.'inc/class_captcha.php'; - $this->captcha = new captcha; - - if($this->captcha->validate_captcha() == false) - { - // CAPTCHA validation failed - foreach($this->captcha->get_errors() as $error) - { - $this->set_error($error); - } - return false; - } - else - { - $this->captcha_verified = true; - return true; - } - } - else if($mybb->input['quick_login'] == 1 && $mybb->input['quick_password'] && $mybb->input['quick_username']) - { - $this->set_error('regimagerequired'); - return false; - } - else - { - $this->set_error('regimageinvalid'); - return false; - } - } - - /** - * @return bool - */ - function verify_username() - { - $this->get_login_data(); - - if(!$this->login_data['uid']) - { - $this->invalid_combination(); - return false; - } - - return true; - } - - /** - * @param bool $strict - * - * @return bool - */ - function verify_password($strict = true) - { - global $db, $mybb, $plugins; - - $this->get_login_data(); - - if(empty($this->login_data['username'])) - { - // Username must be validated to apply a password to - $this->invalid_combination(); - return false; - } - - $args = array( - 'this' => &$this, - 'strict' => &$strict, - ); - - $plugins->run_hooks('datahandler_login_verify_password_start', $args); - - $user = &$this->data; - - if(!$this->login_data['uid'] || $this->login_data['uid'] && !$this->login_data['salt'] && $strict == false) - { - $this->invalid_combination(); - } - - if($strict == true) - { - if(!$this->login_data['salt']) - { - // Generate a salt for this user and assume the password stored in db is a plain md5 password - $password_fields = create_password($this->login_data['password']); - $this->login_data = array_merge($this->login_data, $password_fields); - $db->update_query("users", $password_fields, "uid = '{$this->login_data['uid']}'"); - } - - if(!$this->login_data['loginkey']) - { - $this->login_data['loginkey'] = generate_loginkey(); - - $sql_array = array( - "loginkey" => $this->login_data['loginkey'] - ); - - $db->update_query("users", $sql_array, "uid = '{$this->login_data['uid']}'"); - } - } - - $plugins->run_hooks('datahandler_login_verify_password_end', $args); - - if(!verify_user_password($this->login_data, $user['password'])) - { - $this->invalid_combination(true); - return false; - } - - return true; - } - - /** - * @param bool $show_login_attempts - */ - function invalid_combination($show_login_attempts = false) - { - global $db, $lang, $mybb; - - // Don't show an error when the captcha was wrong! - if(!$this->captcha_verified) - { - return; - } - - $login_text = ''; - if($show_login_attempts) - { - if($mybb->settings['failedlogincount'] != 0 && $mybb->settings['failedlogintext'] == 1) - { - $logins = login_attempt_check(false) + 1; - $login_text = $lang->sprintf($lang->failed_login_again, $mybb->settings['failedlogincount'] - $logins); - } - } - - switch($mybb->settings['username_method']) - { - case 1: - $this->set_error('invalidpwordusernameemail', $login_text); - break; - case 2: - $this->set_error('invalidpwordusernamecombo', $login_text); - break; - default: - $this->set_error('invalidpwordusername', $login_text); - break; - } - } - - function get_login_data() - { - global $db, $settings; - - $user = &$this->data; - - $options = array( - 'fields' => '*', - 'username_method' => (int)$settings['username_method'] - ); - - if($this->username_method !== null) - { - $options['username_method'] = (int)$this->username_method; - } - - $this->login_data = get_user_by_username($user['username'], $options); - } - - /** - * @return bool - */ - function validate_login() - { - global $plugins, $mybb; - - $user = &$this->data; - - $plugins->run_hooks('datahandler_login_validate_start', $this); - - if(!defined('IN_ADMINCP')) - { - $this->verify_attempts($mybb->settings['captchaimage']); - } - - if(array_key_exists('username', $user)) - { - $this->verify_username(); - } - - if(array_key_exists('password', $user)) - { - $this->verify_password(); - } - - $plugins->run_hooks('datahandler_login_validate_end', $this); - - $this->set_validated(true); - if(count($this->get_errors()) > 0) - { - return false; - } - - return true; - } - - /** - * @return bool true - */ - function complete_login() - { - global $plugins, $db, $mybb, $session; - - $user = &$this->login_data; - - $plugins->run_hooks('datahandler_login_complete_start', $this); - - // Login to MyBB - my_setcookie('loginattempts', 1); - my_setcookie("sid", $session->sid, -1, true); - - $ip_address = $db->escape_binary($session->packedip); - $db->delete_query("sessions", "ip = {$ip_address} AND sid != '{$session->sid}'"); - - $newsession = array( - "uid" => $user['uid'], - ); - - $db->update_query("sessions", $newsession, "sid = '{$session->sid}'"); - $db->update_query("users", array("loginattempts" => 1), "uid = '{$user['uid']}'"); - - $remember = null; - if(!isset($mybb->input['remember']) || $mybb->input['remember'] != "yes") - { - $remember = -1; - } - - my_setcookie("mybbuser", $user['uid']."_".$user['loginkey'], $remember, true); - - if($this->captcha !== false) - { - $this->captcha->invalidate_captcha(); - } - - $plugins->run_hooks('datahandler_login_complete_end', $this); - - return true; - } -} diff --git a/html/forums/inc/datahandlers/pm.php b/html/forums/inc/datahandlers/pm.php deleted file mode 100644 index a41e6d2..0000000 --- a/html/forums/inc/datahandlers/pm.php +++ /dev/null @@ -1,755 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * PM handling class, provides common structure to handle private messaging data. - * - */ -class PMDataHandler extends DataHandler -{ - /** - * The language file used in the data handler. - * - * @var string - */ - public $language_file = 'datahandler_pm'; - - /** - * The prefix for the language variables used in the data handler. - * - * @var string - */ - public $language_prefix = 'pmdata'; - - /** - * Array of data inserted in to a private message. - * - * @var array - */ - public $pm_insert_data = array(); - - /** - * Array of data used to update a private message. - * - * @var array - */ - public $pm_update_data = array(); - - /** - * PM ID currently being manipulated by the datahandlers. - * - * @var int - */ - public $pmid = 0; - - /** - * Values to be returned after inserting a PM. - * - * @var array - */ - public $return_values = array(); - - /** - * Verifies a private message subject. - * - * @return boolean True when valid, false when invalid. - */ - function verify_subject() - { - $subject = &$this->data['subject']; - - // Subject is over 85 characters, too long. - if(my_strlen($subject) > 85) - { - $this->set_error("too_long_subject"); - return false; - } - // No subject, apply the default [no subject] - if(!trim_blank_chrs($subject)) - { - $this->set_error("missing_subject"); - return false; - } - return true; - } - - /** - * Verifies if a message for a PM is valid. - * - * @return boolean True when valid, false when invalid. - */ - function verify_message() - { - $message = &$this->data['message']; - - // No message, return an error. - if(trim_blank_chrs($message) == '') - { - $this->set_error("missing_message"); - return false; - } - return true; - } - - /** - * Verifies if the specified sender is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_sender() - { - global $db, $mybb, $lang; - - $pm = &$this->data; - - // Return if we've already validated - if(!empty($pm['sender'])) - { - return true; - } - - // Fetch the senders profile data. - $sender = get_user($pm['fromid']); - - // Collect user permissions for the sender. - $sender_permissions = user_permissions($pm['fromid']); - - // Check if the sender is over their quota or not - if they are, disable draft sending - if(isset($pm['options']['savecopy']) && $pm['options']['savecopy'] != 0 && empty($pm['saveasdraft'])) - { - if($sender_permissions['pmquota'] != "0" && $sender['totalpms'] >= $sender_permissions['pmquota'] && $this->admin_override != true) - { - $pm['options']['savecopy'] = 0; - } - } - - // Assign the sender information to the data. - $pm['sender'] = array( - "uid" => $sender['uid'], - "username" => $sender['username'] - ); - - return true; - } - - /** - * Verifies if an array of recipients for a private message are valid - * - * @return boolean True when valid, false when invalid. - */ - function verify_recipient() - { - global $cache, $db, $mybb, $lang; - - $pm = &$this->data; - - $recipients = array(); - - $invalid_recipients = array(); - // We have our recipient usernames but need to fetch user IDs - if(array_key_exists("to", $pm)) - { - foreach(array("to", "bcc") as $recipient_type) - { - if(!isset($pm[$recipient_type])) - { - $pm[$recipient_type] = array(); - } - if(!is_array($pm[$recipient_type])) - { - $pm[$recipient_type] = array($pm[$recipient_type]); - } - - $pm[$recipient_type] = array_map('trim', $pm[$recipient_type]); - $pm[$recipient_type] = array_filter($pm[$recipient_type]); - - // No recipients? Skip query - if(empty($pm[$recipient_type])) - { - if($recipient_type == 'to' && !$pm['saveasdraft']) - { - $this->set_error("no_recipients"); - return false; - } - continue; - } - - $recipientUsernames = array_map(array($db, 'escape_string'), $pm[$recipient_type]); - $recipientUsernames = "'".implode("','", $recipientUsernames)."'"; - - $query = $db->simple_select('users', '*', 'username IN('.$recipientUsernames.')'); - - $validUsernames = array(); - - while($user = $db->fetch_array($query)) - { - if($recipient_type == "bcc") - { - $user['bcc'] = 1; - } - - $recipients[] = $user; - $validUsernames[] = $user['username']; - } - - foreach($pm[$recipient_type] as $username) - { - if(!in_array($username, $validUsernames)) - { - $invalid_recipients[] = $username; - } - } - } - } - // We have recipient IDs - else - { - foreach(array("toid", "bccid") as $recipient_type) - { - if(!isset($pm[$recipient_type])) - { - $pm[$recipient_type] = array(); - } - if(!is_array($pm[$recipient_type])) - { - $pm[$recipient_type] = array($pm[$recipient_type]); - } - $pm[$recipient_type] = array_map('intval', $pm[$recipient_type]); - $pm[$recipient_type] = array_filter($pm[$recipient_type]); - - // No recipients? Skip query - if(empty($pm[$recipient_type])) - { - if($recipient_type == 'toid' && !$pm['saveasdraft']) - { - $this->set_error("no_recipients"); - return false; - } - continue; - } - - $recipientUids = "'".implode("','", $pm[$recipient_type])."'"; - - $query = $db->simple_select('users', '*', 'uid IN('.$recipientUids.')'); - - $validUids = array(); - - while($user = $db->fetch_array($query)) - { - if($recipient_type == "bccid") - { - $user['bcc'] = 1; - } - - $recipients[] = $user; - $validUids[] = $user['uid']; - } - - foreach($pm[$recipient_type] as $uid) - { - if(!in_array($uid, $validUids)) - { - $invalid_recipients[] = $uid; - } - } - } - } - - // If we have one or more invalid recipients and we're not saving a draft, error - if(count($invalid_recipients) > 0) - { - $invalid_recipients = implode($lang->comma, array_map("htmlspecialchars_uni", $invalid_recipients)); - $this->set_error("invalid_recipients", array($invalid_recipients)); - return false; - } - - $sender_permissions = user_permissions($pm['fromid']); - - // Are we trying to send this message to more users than the permissions allow? - if($sender_permissions['maxpmrecipients'] > 0 && count($recipients) > $sender_permissions['maxpmrecipients'] && $this->admin_override != true) - { - $this->set_error("too_many_recipients", array($sender_permissions['maxpmrecipients'])); - } - - // Now we're done with that we loop through each recipient - foreach($recipients as $user) - { - // Collect group permissions for this recipient. - $recipient_permissions = user_permissions($user['uid']); - - // See if the sender is on the recipients ignore list and that either - // - admin_override is set or - // - sender is an administrator - if($this->admin_override != true && $sender_permissions['canoverridepm'] != 1) - { - if(!empty($user['ignorelist']) && strpos(','.$user['ignorelist'].',', ','.$pm['fromid'].',') !== false) - { - $this->set_error("recipient_is_ignoring", array(htmlspecialchars_uni($user['username']))); - } - - // Is the recipient only allowing private messages from their buddy list? - if($mybb->settings['allowbuddyonly'] == 1 && $user['receivefrombuddy'] == 1 && !empty($user['buddylist']) && strpos(','.$user['buddylist'].',', ','.$pm['fromid'].',') === false) - { - $this->set_error('recipient_has_buddy_only', array(htmlspecialchars_uni($user['username']))); - } - - // Can the recipient actually receive private messages based on their permissions or user setting? - if(($user['receivepms'] == 0 || $recipient_permissions['canusepms'] == 0) && empty($pm['saveasdraft'])) - { - $this->set_error("recipient_pms_disabled", array(htmlspecialchars_uni($user['username']))); - return false; - } - } - - // Check to see if the user has reached their private message quota - if they have, email them. - if($recipient_permissions['pmquota'] != "0" && $user['totalpms'] >= $recipient_permissions['pmquota'] && $recipient_permissions['cancp'] != 1 && $sender_permissions['cancp'] != 1 && empty($pm['saveasdraft']) && !$this->admin_override) - { - if(trim($user['language']) != '' && $lang->language_exists($user['language'])) - { - $uselang = trim($user['language']); - } - elseif($mybb->settings['bblanguage']) - { - $uselang = $mybb->settings['bblanguage']; - } - else - { - $uselang = "english"; - } - if($uselang == $mybb->settings['bblanguage'] || !$uselang) - { - $emailsubject = $lang->emailsubject_reachedpmquota; - $emailmessage = $lang->email_reachedpmquota; - } - else - { - $userlang = new MyLanguage; - $userlang->set_path(MYBB_ROOT."inc/languages"); - $userlang->set_language($uselang); - $userlang->load("messages"); - $emailsubject = $userlang->emailsubject_reachedpmquota; - $emailmessage = $userlang->email_reachedpmquota; - } - $emailmessage = $lang->sprintf($emailmessage, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl']); - $emailsubject = $lang->sprintf($emailsubject, $mybb->settings['bbname'], $pm['subject']); - - $new_email = array( - "mailto" => $db->escape_string($user['email']), - "mailfrom" => '', - "subject" => $db->escape_string($emailsubject), - "message" => $db->escape_string($emailmessage), - "headers" => '' - ); - - $db->insert_query("mailqueue", $new_email); - $cache->update_mailqueue(); - - if($this->admin_override != true) - { - $this->set_error("recipient_reached_quota", array(htmlspecialchars_uni($user['username']))); - } - } - - // Everything looks good, assign some specifics about the recipient - $pm['recipients'][$user['uid']] = array( - "uid" => $user['uid'], - "username" => $user['username'], - "email" => $user['email'], - "lastactive" => $user['lastactive'], - "pmnotice" => $user['pmnotice'], - "pmnotify" => $user['pmnotify'], - "language" => $user['language'] - ); - - // If this recipient is defined as a BCC recipient, save it - if(isset($user['bcc']) && $user['bcc'] == 1) - { - $pm['recipients'][$user['uid']]['bcc'] = 1; - } - } - return true; - } - - /** - * Verify that the user is not flooding the system. - * - * @return boolean - */ - function verify_pm_flooding() - { - global $mybb, $db; - - $pm = &$this->data; - - // Check if post flooding is enabled within MyBB or if the admin override option is specified. - if($mybb->settings['pmfloodsecs'] > 0 && $pm['fromid'] != 0 && $this->admin_override == false && !is_moderator(0, '', $pm['fromid'])) - { - // Fetch the senders profile data. - $sender = get_user($pm['fromid']); - - // Calculate last post - $query = $db->simple_select("privatemessages", "dateline", "fromid='".$db->escape_string($pm['fromid'])."' AND toid != '0'", array('order_by' => 'dateline', 'order_dir' => 'desc', 'limit' => 1)); - $sender['lastpm'] = $db->fetch_field($query, "dateline"); - - // A little bit of calculation magic and moderator status checking. - if(TIME_NOW-$sender['lastpm'] <= $mybb->settings['pmfloodsecs']) - { - // Oops, user has been flooding - throw back error message. - $time_to_wait = ($mybb->settings['pmfloodsecs'] - (TIME_NOW-$sender['lastpm'])) + 1; - if($time_to_wait == 1) - { - $this->set_error("pm_flooding_one_second"); - } - else - { - $this->set_error("pm_flooding", array($time_to_wait)); - } - return false; - } - } - // All is well that ends well - return true. - return true; - } - - /** - * Verifies if the various 'options' for sending PMs are valid. - * - * @return boolean True when valid, false when invalid. - */ - function verify_options() - { - $options = &$this->data['options']; - - $this->verify_yesno_option($options, 'signature', 1); - $this->verify_yesno_option($options, 'savecopy', 1); - $this->verify_yesno_option($options, 'disablesmilies', 0); - - // Requesting a read receipt? - if(isset($options['readreceipt']) && $options['readreceipt'] == 1) - { - $options['readreceipt'] = 1; - } - else - { - $options['readreceipt'] = 0; - } - return true; - } - - /** - * Validate an entire private message. - * - * @return boolean True when valid, false when invalid. - */ - function validate_pm() - { - global $plugins; - - $pm = &$this->data; - - if(empty($pm['savedraft'])) - { - $this->verify_pm_flooding(); - } - - // Verify all PM assets. - $this->verify_subject(); - - $this->verify_sender(); - - $this->verify_recipient(); - - $this->verify_message(); - - $this->verify_options(); - - $plugins->run_hooks("datahandler_pm_validate", $this); - - // Choose the appropriate folder to save in. - if(!empty($pm['saveasdraft'])) - { - $pm['folder'] = 3; - } - else - { - $pm['folder'] = 1; - } - - // We are done validating, return. - $this->set_validated(true); - if(count($this->get_errors()) > 0) - { - return false; - } - else - { - return true; - } - } - - /** - * Insert a new private message. - * - * @return array Array of PM useful data. - */ - function insert_pm() - { - global $cache, $db, $mybb, $plugins, $lang; - - // Yes, validating is required. - if(!$this->get_validated()) - { - die("The PM needs to be validated before inserting it into the DB."); - } - if(count($this->get_errors()) > 0) - { - die("The PM is not valid."); - } - - // Assign data to common variable - $pm = &$this->data; - - if(empty($pm['pmid'])) - { - $pm['pmid'] = 0; - } - $pm['pmid'] = (int)$pm['pmid']; - - if(empty($pm['icon']) || $pm['icon'] < 0) - { - $pm['icon'] = 0; - } - - $uid = 0; - - if(!is_array($pm['recipients'])) - { - $recipient_list = array(); - } - else - { - // Build recipient list - foreach($pm['recipients'] as $recipient) - { - if(!empty($recipient['bcc'])) - { - $recipient_list['bcc'][] = $recipient['uid']; - } - else - { - $recipient_list['to'][] = $recipient['uid']; - $uid = $recipient['uid']; - } - } - } - - $this->pm_insert_data = array( - 'fromid' => (int)$pm['sender']['uid'], - 'folder' => $pm['folder'], - 'subject' => $db->escape_string($pm['subject']), - 'icon' => (int)$pm['icon'], - 'message' => $db->escape_string($pm['message']), - 'dateline' => TIME_NOW, - 'status' => 0, - 'includesig' => $pm['options']['signature'], - 'smilieoff' => $pm['options']['disablesmilies'], - 'receipt' => (int)$pm['options']['readreceipt'], - 'readtime' => 0, - 'recipients' => $db->escape_string(my_serialize($recipient_list)), - 'ipaddress' => $db->escape_binary($pm['ipaddress']) - ); - - // Check if we're updating a draft or not. - $query = $db->simple_select("privatemessages", "pmid, deletetime", "folder='3' AND uid='".(int)$pm['sender']['uid']."' AND pmid='{$pm['pmid']}'"); - $draftcheck = $db->fetch_array($query); - - // This PM was previously a draft - if($draftcheck['pmid']) - { - if($draftcheck['deletetime']) - { - // This draft was a reply to a PM - $pm['pmid'] = $draftcheck['deletetime']; - $pm['do'] = "reply"; - } - - // Delete the old draft as we no longer need it - $db->delete_query("privatemessages", "pmid='{$draftcheck['pmid']}'"); - } - - // Saving this message as a draft - if(!empty($pm['saveasdraft'])) - { - $this->pm_insert_data['uid'] = $pm['sender']['uid']; - - // If this is a reply, then piggyback into the deletetime to let us know in the future - if($pm['do'] == "reply" || $pm['do'] == "replyall") - { - $this->pm_insert_data['deletetime'] = $pm['pmid']; - } - - $plugins->run_hooks("datahandler_pm_insert_updatedraft", $this); - $db->insert_query("privatemessages", $this->pm_insert_data); - - // If this is a draft, end it here - below deals with complete messages - return array( - "draftsaved" => 1 - ); - } - - $this->pmid = array(); - - // Save a copy of the PM for each of our recipients - foreach($pm['recipients'] as $recipient) - { - // Send email notification of new PM if it is enabled for the recipient - $query = $db->simple_select("privatemessages", "dateline", "uid='".$recipient['uid']."' AND folder='1'", array('order_by' => 'dateline', 'order_dir' => 'desc', 'limit' => 1)); - $lastpm = $db->fetch_array($query); - if($recipient['pmnotify'] == 1 && $recipient['lastactive'] > $lastpm['dateline']) - { - if($recipient['language'] != "" && $lang->language_exists($recipient['language'])) - { - $uselang = $recipient['language']; - } - elseif($mybb->settings['bblanguage']) - { - $uselang = $mybb->settings['bblanguage']; - } - else - { - $uselang = "english"; - } - if($uselang == $mybb->settings['bblanguage'] && !empty($lang->emailsubject_newpm)) - { - $emailsubject = $lang->emailsubject_newpm; - $emailmessage = $lang->email_newpm; - } - else - { - $userlang = new MyLanguage; - $userlang->set_path(MYBB_ROOT."inc/languages"); - $userlang->set_language($uselang); - $userlang->load("messages"); - $emailsubject = $userlang->emailsubject_newpm; - $emailmessage = $userlang->email_newpm; - } - - if(!$pm['sender']['username']) - { - $pm['sender']['username'] = $lang->mybb_engine; - } - - require_once MYBB_ROOT.'inc/class_parser.php'; - $parser = new Postparser; - - $parser_options = array( - 'me_username' => $pm['sender']['username'], - 'filter_badwords' => 1 - ); - - $pm['message'] = $parser->text_parse_message($pm['message'], $parser_options); - - $emailmessage = $lang->sprintf($emailmessage, $recipient['username'], $pm['sender']['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $pm['message']); - $emailsubject = $lang->sprintf($emailsubject, $mybb->settings['bbname'], $pm['subject']); - - $new_email = array( - "mailto" => $db->escape_string($recipient['email']), - "mailfrom" => '', - "subject" => $db->escape_string($emailsubject), - "message" => $db->escape_string($emailmessage), - "headers" => '' - ); - - $db->insert_query("mailqueue", $new_email); - $cache->update_mailqueue(); - } - - $this->pm_insert_data['uid'] = $recipient['uid']; - $this->pm_insert_data['toid'] = $recipient['uid']; - - $plugins->run_hooks("datahandler_pm_insert", $this); - $this->pmid[] = $db->insert_query("privatemessages", $this->pm_insert_data); - - // If PM noices/alerts are on, show! - if($recipient['pmnotice'] == 1) - { - $updated_user = array( - "pmnotice" => 2 - ); - $db->update_query("users", $updated_user, "uid='{$recipient['uid']}'"); - } - - // Update private message count (total, new and unread) for recipient - require_once MYBB_ROOT."/inc/functions_user.php"; - update_pm_count($recipient['uid'], 7, $recipient['lastactive']); - } - - // Are we replying or forwarding an existing PM? - if($pm['pmid']) - { - if($pm['do'] == "reply" || $pm['do'] == "replyall") - { - $sql_array = array( - 'status' => 3, - 'statustime' => TIME_NOW - ); - $db->update_query("privatemessages", $sql_array, "pmid={$pm['pmid']} AND uid={$pm['sender']['uid']}"); - } - elseif($pm['do'] == "forward") - { - $sql_array = array( - 'status' => 4, - 'statustime' => TIME_NOW - ); - $db->update_query("privatemessages", $sql_array, "pmid={$pm['pmid']} AND uid={$pm['sender']['uid']}"); - } - } - - // If we're saving a copy - if($pm['options']['savecopy'] != 0) - { - if(isset($recipient_list['to']) && count($recipient_list['to']) == 1) - { - $this->pm_insert_data['toid'] = $uid; - } - else - { - $this->pm_insert_data['toid'] = 0; - } - $this->pm_insert_data['uid'] = (int)$pm['sender']['uid']; - $this->pm_insert_data['folder'] = 2; - $this->pm_insert_data['status'] = 1; - $this->pm_insert_data['receipt'] = 0; - - $plugins->run_hooks("datahandler_pm_insert_savedcopy", $this); - $db->insert_query("privatemessages", $this->pm_insert_data); - - // Because the sender saved a copy, update their total pm count - require_once MYBB_ROOT."/inc/functions_user.php"; - update_pm_count($pm['sender']['uid'], 1); - } - - // Return back with appropriate data - $this->return_values = array( - "messagesent" => 1, - "pmids" => $this->pmid - ); - - $plugins->run_hooks("datahandler_pm_insert_end", $this); - - return $this->return_values; - } -} diff --git a/html/forums/inc/datahandlers/post.php b/html/forums/inc/datahandlers/post.php deleted file mode 100644 index 6ce60cf..0000000 --- a/html/forums/inc/datahandlers/post.php +++ /dev/null @@ -1,1894 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/* -EXAMPLE USE: - -$post = get from POST data -$thread = get from DB using POST data id - -$postHandler = new postDataHandler(); -if($postHandler->validate_post($post)) -{ - $postHandler->insert_post($post); -} - -*/ - -/** - * Post handling class, provides common structure to handle post data. - * - */ -class PostDataHandler extends DataHandler -{ - /** - * The language file used in the data handler. - * - * @var string - */ - public $language_file = 'datahandler_post'; - - /** - * The prefix for the language variables used in the data handler. - * - * @var string - */ - public $language_prefix = 'postdata'; - - /** - * What are we performing? - * post = New post - * thread = New thread - * edit = Editing a thread or post - * - * @var string - */ - public $action; - - /** - * Array of data inserted in to a post. - * - * @var array - */ - public $post_insert_data = array(); - - /** - * Array of data used to update a post. - * - * @var array - */ - public $post_update_data = array(); - - /** - * Post ID currently being manipulated by the datahandlers. - * - * @var int - */ - public $pid = 0; - - /** - * Array of data inserted in to a thread. - * - * @var array - */ - public $thread_insert_data = array(); - - /** - * Array of data used to update a thread. - * - * @var array - */ - public $thread_update_data = array(); - - /** - * Thread ID currently being manipulated by the datahandlers. - * - * @var int - */ - public $tid = 0; - - /** - * Values to be returned after inserting/updating a post/thread. - * - * @var array - */ - public $return_values = array(); - - /** - * Is this the first post of a thread when editing - * - * @var boolean - */ - public $first_post = false; - - /** - * Verifies the author of a post and fetches the username if necessary. - * - * @return boolean True if the author information is valid, false if invalid. - */ - function verify_author() - { - global $mybb, $lang; - - $post = &$this->data; - - // Don't have a user ID at all - not good (note, a user id of 0 will still work). - if(!isset($post['uid'])) - { - $this->set_error("invalid_user_id"); - return false; - } - // If we have a user id but no username then fetch the username. - else if($post['uid'] > 0 && empty($post['username'])) - { - $user = get_user($post['uid']); - $post['username'] = $user['username']; - } - // if the uid is 0 verify the username - else if($post['uid'] == 0 && $post['username'] != $lang->guest) - { - // Set up user handler - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler(); - - $data_array = array('username' => $post['username']); - $userhandler->set_data($data_array); - - if(!$userhandler->verify_username()) - { - // invalid username - $this->errors = array_merge($this->errors, $userhandler->get_errors()); - return false; - } - - if($userhandler->verify_username_exists()) - { - // username is in use - $this->errors = array_merge($this->errors, $userhandler->get_errors()); - return false; - } - } - - // After all of this, if we still don't have a username, force the username as "Guest" (Note, this is not translatable as it is always a fallback) - if(!$post['username']) - { - $post['username'] = "Guest"; - } - - return true; - } - - /** - * Verifies a post subject. - * - * @return boolean True when valid, false when not valid. - */ - function verify_subject() - { - global $db; - $post = &$this->data; - $subject = &$post['subject']; - $subject = trim_blank_chrs($subject); - - if($this->method == "update" && $post['pid']) - { - // If this is the first post there needs to be a subject, else make it the default one. - if(my_strlen($subject) == 0 && $this->first_post) - { - $this->set_error("firstpost_no_subject"); - return false; - } - elseif(my_strlen($subject) == 0) - { - $thread = get_thread($post['tid']); - $subject = "RE: ".$thread['subject']; - } - } - - // This is a new post - else if($this->action == "post") - { - if(my_strlen($subject) == 0) - { - $thread = get_thread($post['tid']); - $subject = "RE: ".$thread['subject']; - } - } - - // This is a new thread and we require that a subject is present. - else - { - if(my_strlen($subject) == 0) - { - $this->set_error("missing_subject"); - return false; - } - } - - // If post is reply and begins with "RE: ", remove 4 from subject length. - $subject_length = my_strlen($subject); - if($this->action == "post") - { - $position_re = my_strpos($subject, "RE: "); - if($position_re !== false && $position_re == 0) - { - $subject_length = $subject_length - 4; - } - } - - if($subject_length > 85) - { - // Subject is too long - $this->set_error('subject_too_long', my_strlen($subject)); - return false; - } - - // Subject is valid - return true. - return true; - } - - /** - * Verifies a post message. - * - * @return bool - */ - function verify_message() - { - global $mybb; - - $post = &$this->data; - $post['message'] = trim_blank_chrs($post['message']); - - // Do we even have a message at all? - if(my_strlen($post['message']) == 0) - { - $this->set_error("missing_message"); - return false; - } - - // If this board has a maximum message length check if we're over it. Use strlen because SQL limits are in bytes - else if(strlen($post['message']) > $mybb->settings['maxmessagelength'] && $mybb->settings['maxmessagelength'] > 0 && !is_moderator($post['fid'], "", $post['uid'])) - { - $this->set_error("message_too_long", array($mybb->settings['maxmessagelength'], strlen($post['message']))); - return false; - } - - // And if we've got a minimum message length do we meet that requirement too? - else - { - if(!isset($post['fid'])) - { - $post['fid'] = 0; - } - if(!$mybb->settings['mycodemessagelength']) - { - // Check to see of the text is full of MyCode - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - - $message = $parser->text_parse_message($post['message']); - - if(my_strlen($message) < $mybb->settings['minmessagelength'] && $mybb->settings['minmessagelength'] > 0 && !is_moderator($post['fid'], "", $post['uid'])) - { - $this->set_error("message_too_short", array($mybb->settings['minmessagelength'])); - return false; - } - } - else if(my_strlen($post['message']) < $mybb->settings['minmessagelength'] && $mybb->settings['minmessagelength'] > 0 && !is_moderator($post['fid'], "", $post['uid'])) - { - $this->set_error("message_too_short", array($mybb->settings['minmessagelength'])); - return false; - } - } - return true; - } - - /** - * Verifies the specified post options are correct. - * - * @return boolean True - */ - function verify_options() - { - $options = &$this->data['options']; - - // Verify yes/no options. - $this->verify_yesno_option($options, 'signature', 0); - $this->verify_yesno_option($options, 'disablesmilies', 0); - - return true; - } - - /** - * Verify that the user is not flooding the system. - * - * @return boolean - */ - function verify_post_flooding() - { - global $mybb; - - $post = &$this->data; - - // Check if post flooding is enabled within MyBB or if the admin override option is specified. - if($mybb->settings['postfloodcheck'] == 1 && $post['uid'] != 0 && $this->admin_override == false) - { - if($this->verify_post_merge(true) !== true) - { - return true; - } - - // Fetch the user information for this post - used to check their last post date. - $user = get_user($post['uid']); - - // A little bit of calculation magic and moderator status checking. - if(TIME_NOW-$user['lastpost'] <= $mybb->settings['postfloodsecs'] && !is_moderator($post['fid'], "", $user['uid'])) - { - // Oops, user has been flooding - throw back error message. - $time_to_wait = ($mybb->settings['postfloodsecs'] - (TIME_NOW-$user['lastpost'])) + 1; - if($time_to_wait == 1) - { - $this->set_error("post_flooding_one_second"); - } - else - { - $this->set_error("post_flooding", array($time_to_wait)); - } - return false; - } - } - // All is well that ends well - return true. - return true; - } - - /** - * @param bool $simple_mode - * - * @return array|bool - */ - function verify_post_merge($simple_mode=false) - { - global $mybb, $db, $session; - - $post = &$this->data; - - // Are we starting a new thread? - if(empty($post['tid'])) - { - return true; - } - - // Are we even turned on? - if(empty($mybb->settings['postmergemins'])) - { - return true; - } - - // Assign a default separator if none is specified - if(trim($mybb->settings['postmergesep']) == "") - { - $mybb->settings['postmergesep'] = "[hr]"; - } - - // Check to see if this person is in a usergroup that is excluded - if(is_member($mybb->settings['postmergeuignore'], $post['uid'])) - { - return true; - } - - // Select the lastpost and fid information for this thread - $query = $db->simple_select("threads", "lastpost,fid", "lastposteruid='".$post['uid']."' AND tid='".$post['tid']."'", array('limit' => '1')); - $thread = $db->fetch_array($query); - - // Check to see if the same author has posted within the merge post time limit - if(((int)$mybb->settings['postmergemins'] != 0 && trim($mybb->settings['postmergemins']) != "") && (TIME_NOW-$thread['lastpost']) > ((int)$mybb->settings['postmergemins']*60)) - { - return true; - } - - if($mybb->settings['postmergefignore'] == -1) - { - return true; - } - elseif($mybb->settings['postmergefignore'] != '') - { - $fids = explode(',', (string)$mybb->settings['postmergefignore']); - - if(is_array($fids)) - { - foreach($fids as &$fid) - { - $fid = (int)$fid; - } - unset($fid); - - if(in_array($thread['fid'], $fids)) - { - return true; - } - } - } - - if($simple_mode == true) - { - return false; - } - - if($post['uid']) - { - $user_check = "uid='".$post['uid']."'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $query = $db->simple_select("posts", "pid,message,visible", "{$user_check} AND tid='".$post['tid']."' AND dateline='".$thread['lastpost']."'", array('order_by' => 'pid', 'order_dir' => 'DESC', 'limit' => 1)); - return $db->fetch_array($query); - } - - /** - * Verifies the image count. - * - * @return boolean True when valid, false when not valid. - */ - function verify_image_count() - { - global $mybb, $db; - - $post = &$this->data; - - // Get the permissions of the user who is making this post or thread - $permissions = user_permissions($post['uid']); - - // Fetch the forum this post is being made in - if(!$post['fid']) - { - $query = $db->simple_select('posts', 'fid', "pid = '{$post['pid']}'"); - $post['fid'] = $db->fetch_field($query, 'fid'); - } - $forum = get_forum($post['fid']); - - // Check if this post contains more images than the forum allows - if((!isset($post['savedraft']) || $post['savedraft'] != 1) && $mybb->settings['maxpostimages'] != 0 && $permissions['cancp'] != 1) - { - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - - // Parse the message. - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "filter_badwords" => 1 - ); - - if($post['options']['disablesmilies'] != 1) - { - $parser_options['allow_smilies'] = $forum['allowsmilies']; - } - else - { - $parser_options['allow_smilies'] = 0; - } - - $image_check = $parser->parse_message($post['message'], $parser_options); - - // And count the number of image tags in the message. - $image_count = substr_count($image_check, " $mybb->settings['maxpostimages']) - { - // Throw back a message if over the count with the number of images as well as the maximum number of images per post. - $this->set_error("too_many_images", array(1 => $image_count, 2 => $mybb->settings['maxpostimages'])); - return false; - } - } - - return true; - } - - /** - * Verifies the video count. - * - * @return boolean True when valid, false when not valid. - */ - function verify_video_count() - { - global $mybb, $db; - - $post = &$this->data; - - // Get the permissions of the user who is making this post or thread - $permissions = user_permissions($post['uid']); - - // Check if this post contains more videos than the forum allows - if((!isset($post['savedraft']) || $post['savedraft'] != 1) && $mybb->settings['maxpostvideos'] != 0 && $permissions['cancp'] != 1) - { - // And count the number of video tags in the message. - $video_count = substr_count($post['message'], "[video="); - if($video_count > $mybb->settings['maxpostvideos']) - { - // Throw back a message if over the count with the number of images as well as the maximum number of images per post. - $this->set_error("too_many_videos", array(1 => $video_count, 2 => $mybb->settings['maxpostvideos'])); - return false; - } - } - - return true; - } - - /** - * Verify the reply-to post. - * - * @return boolean True when valid, false when not valid. - */ - function verify_reply_to() - { - global $db; - $post = &$this->data; - - // Check if the post being replied to actually exists in this thread. - if($post['replyto']) - { - $query = $db->simple_select("posts", "pid", "pid='".(int)$post['replyto']."'"); - $valid_post = $db->fetch_array($query); - if(!$valid_post['pid']) - { - $post['replyto'] = 0; - } - else - { - return true; - } - } - - // If this post isn't a reply to a specific post, attach it to the first post. - if(!$post['replyto']) - { - $options = array( - "limit_start" => 0, - "limit" => 1, - "order_by" => "dateline", - "order_dir" => "asc" - ); - $query = $db->simple_select("posts", "pid", "tid='{$post['tid']}'", $options); - $reply_to = $db->fetch_array($query); - $post['replyto'] = $reply_to['pid']; - } - - return true; - } - - /** - * Verify the post icon. - * - * @return boolean True when valid, false when not valid. - */ - function verify_post_icon() - { - global $cache; - - $post = &$this->data; - - $posticons_cache = $cache->read("posticons"); - - // If we don't have a post icon assign it as 0. - if(empty($post['icon']) || !isset($posticons_cache[$post['icon']])) - { - $post['icon'] = 0; - } - return true; - } - - /** - * Verify the dateline. - * - * @return boolean True when valid, false when not valid. - */ - function verify_dateline() - { - $dateline = &$this->data['dateline']; - - // The date has to be numeric and > 0. - if($dateline < 0 || is_numeric($dateline) == false) - { - $dateline = TIME_NOW; - } - } - - /** - * Verify thread prefix. - * - * @return boolean True when valid, false when not valid. - */ - function verify_prefix() - { - $prefix = &$this->data['prefix']; - - // If a valid prefix isn't supplied, don't assign one. - if(empty($prefix)) - { - $prefix = 0; - } - else - { - if(!empty($this->data['tid'])) - { - // Fetch the thread - $thread = get_thread($this->data['tid']); - } - - $prefix_cache = build_prefixes($prefix); - - if(empty($prefix_cache)) - { - $this->set_error('invalid_prefix'); - return false; - } - if($prefix_cache['groups'] != "-1") - { - if(!empty($this->data['edit_uid'])) - { - // Post is being edited - $user = get_user($this->data['edit_uid']); - } - else - { - $user = get_user($this->data['uid']); - } - - if(!is_member($prefix_cache['groups'], array('usergroup' => $user['usergroup'], 'additionalgroups' => $user['additionalgroups'])) && (empty($this->data['tid']) || $prefix != $thread['prefix'])) - { - $this->set_error('invalid_prefix'); - return false; - } - } - if($prefix_cache['forums'] != "-1") - { - // Decide whether this prefix can be used in our forum - $forums = explode(",", $prefix_cache['forums']); - - if(!in_array($this->data['fid'], $forums) && (empty($this->data['tid']) || $prefix != $thread['prefix'])) - { - $this->set_error('invalid_prefix'); - return false; - } - } - } - - // Does this forum require a prefix? - $forum = get_forum($this->data['fid']); - - if($forum['requireprefix'] == 1) - { - $num_prefixes = false; - - // Go through each of our prefixes and decide if there are any possible prefixes to use. - if(!empty($this->data['edit_uid'])) - { - // Post is being edited - $user = get_user($this->data['edit_uid']); - } - else - { - $user = get_user($this->data['uid']); - } - - $prefix_cache = build_prefixes(); - - if(!empty($prefix_cache)) - { - foreach($prefix_cache as $required) - { - if($required['forums'] != "-1") - { - // Decide whether this prefix can be used in our forum - $forums = explode(",", $required['forums']); - - if(!in_array($forum['fid'], $forums)) - { - continue; - } - } - - if(is_member($required['groups'], array('usergroup' => $user['usergroup'], 'additionalgroups' => $user['additionalgroups']))) - { - $num_prefixes = true; - } - } - } - - if($prefix == 0 && $num_prefixes) - { - $this->set_error('require_prefix'); - return false; - } - } - - return true; - } - - /** - * Validate a post. - * - * @return boolean True when valid, false when invalid. - */ - function validate_post() - { - global $mybb, $db, $plugins; - - $post = &$this->data; - $time = TIME_NOW; - - $this->action = "post"; - - if($this->method != "update" && !$post['savedraft']) - { - $this->verify_post_flooding(); - } - - // Are we editing an existing thread or post? - if($this->method == "update") - { - if(empty($post['tid'])) - { - $query = $db->simple_select("posts", "tid", "pid='".(int)$post['pid']."'"); - $post['tid'] = $db->fetch_field($query, "tid"); - } - // Here we determine if we're editing the first post of a thread or not. - $options = array( - "limit" => 1, - "limit_start" => 0, - "order_by" => "dateline", - "order_dir" => "asc" - ); - $query = $db->simple_select("posts", "pid", "tid='".$post['tid']."'", $options); - $first_check = $db->fetch_array($query); - if($first_check['pid'] == $post['pid']) - { - $this->first_post = true; - } - } - - // Verify all post assets. - - if($this->method == "insert" || array_key_exists('uid', $post)) - { - $this->verify_author(); - } - - if($this->method == "insert" || array_key_exists('subject', $post)) - { - $this->verify_subject(); - } - - if($this->method == "insert" || array_key_exists('message', $post)) - { - $this->verify_message(); - $this->verify_image_count(); - $this->verify_video_count(); - } - - if($this->method == "insert" || array_key_exists('dateline', $post)) - { - $this->verify_dateline(); - } - - if($this->method == "insert" || array_key_exists('replyto', $post)) - { - $this->verify_reply_to(); - } - - if($this->method == "insert" || array_key_exists('icon', $post)) - { - $this->verify_post_icon(); - } - - if($this->method == "insert" || array_key_exists('options', $post)) - { - $this->verify_options(); - } - - if($this->method == "update" && $this->first_post) - { - $this->verify_prefix(); - } - - $plugins->run_hooks("datahandler_post_validate_post", $this); - - // We are done validating, return. - $this->set_validated(true); - if(count($this->get_errors()) > 0) - { - return false; - } - else - { - return true; - } - } - - /** - * Insert a post into the database. - * - * @return array Array of new post details, pid and visibility. - */ - function insert_post() - { - global $db, $mybb, $plugins, $cache, $lang; - - $post = &$this->data; - - // Yes, validating is required. - if(!$this->get_validated()) - { - die("The post needs to be validated before inserting it into the DB."); - } - if(count($this->get_errors()) > 0) - { - die("The post is not valid."); - } - - // Fetch the thread - $thread = get_thread($post['tid']); - - $closed = $thread['closed']; - - // This post is being saved as a draft. - if($post['savedraft']) - { - $visible = -2; - } - - // Otherwise this post is being made now and we have a bit to do. - else - { - // Automatic subscription to the thread - if($post['options']['subscriptionmethod'] != "" && $post['uid'] > 0) - { - switch($post['options']['subscriptionmethod']) - { - case "pm": - $notification = 2; - break; - case "email": - $notification = 1; - break; - default: - $notification = 0; - } - - require_once MYBB_ROOT."inc/functions_user.php"; - add_subscribed_thread($post['tid'], $notification, $post['uid']); - } - - // Perform any selected moderation tools. - $ismod = is_moderator($post['fid'], "", $post['uid']); - if($ismod && isset($post['modoptions'])) - { - $lang->load($this->language_file, true); - - $modoptions = $post['modoptions']; - $modlogdata['fid'] = $thread['fid']; - $modlogdata['tid'] = $thread['tid']; - - $modoptions_update = array(); - - // Close the thread. - if(!empty($modoptions['closethread']) && $thread['closed'] != 1 && is_moderator($post['fid'], "canopenclosethreads", $post['uid'])) - { - $modoptions_update['closed'] = $closed = 1; - log_moderator_action($modlogdata, $lang->thread_closed); - } - - // Open the thread. - if(empty($modoptions['closethread']) && $thread['closed'] == 1 && is_moderator($post['fid'], "canopenclosethreads", $post['uid'])) - { - $modoptions_update['closed'] = $closed = 0; - log_moderator_action($modlogdata, $lang->thread_opened); - } - - // Stick the thread. - if(!empty($modoptions['stickthread']) && $thread['sticky'] != 1 && is_moderator($post['fid'], "canstickunstickthreads", $post['uid'])) - { - $modoptions_update['sticky'] = 1; - log_moderator_action($modlogdata, $lang->thread_stuck); - } - - // Unstick the thread. - if(empty($modoptions['stickthread']) && $thread['sticky'] == 1 && is_moderator($post['fid'], "canstickunstickthreads", $post['uid'])) - { - $modoptions_update['sticky'] = 0; - log_moderator_action($modlogdata, $lang->thread_unstuck); - } - - // Execute moderation options. - if($modoptions_update) - { - $db->update_query('threads', $modoptions_update, "tid='{$thread['tid']}'"); - } - } - - // Fetch the forum this post is being made in - $forum = get_forum($post['fid']); - - // Decide on the visibility of this post. - $forumpermissions = forum_permissions($post['fid'], $post['uid']); - if($forumpermissions['modposts'] == 1 && !$ismod) - { - $visible = 0; - } - else - { - $visible = 1; - } - - // Are posts from this user being moderated? Change visibility - if($mybb->user['uid'] == $post['uid'] && $mybb->user['moderateposts'] == 1) - { - $visible = 0; - } - } - - if(!isset($post['pid'])) - { - $post['pid'] = 0; - } - - $post['pid'] = (int)$post['pid']; - $post['uid'] = (int)$post['uid']; - - if($post['pid'] > 0) - { - $query = $db->simple_select("posts", "tid", "pid='{$post['pid']}' AND uid='{$post['uid']}' AND visible='-2'"); - $draft_check = $db->fetch_field($query, "tid"); - } - else - { - $draft_check = false; - } - - if($this->method != "update" && $visible == 1) - { - $double_post = $this->verify_post_merge(); - - // Only combine if they are both invisible (mod queue'd forum) or both visible - if($double_post !== true && $double_post['visible'] == $visible) - { - $this->pid = $double_post['pid']; - - $post['message'] = $double_post['message'] .= "\n".$mybb->settings['postmergesep']."\n".$post['message']; - $update_query = array( - "message" => $db->escape_string($double_post['message']) - ); - $update_query['edituid'] = (int)$post['uid']; - $update_query['edittime'] = TIME_NOW; - $db->update_query("posts", $update_query, "pid='".$double_post['pid']."'"); - - if($draft_check) - { - $db->delete_query("posts", "pid='".$post['pid']."'"); - } - - if($post['posthash']) - { - // Assign any uploaded attachments with the specific posthash to the merged post. - $post['posthash'] = $db->escape_string($post['posthash']); - - $query = $db->simple_select("attachments", "COUNT(aid) AS attachmentcount", "pid='0' AND visible='1' AND posthash='{$post['posthash']}'"); - $attachmentcount = $db->fetch_field($query, "attachmentcount"); - - if($attachmentcount > 0) - { - // Update forum count - update_thread_counters($post['tid'], array('attachmentcount' => "+{$attachmentcount}")); - } - - $attachmentassign = array( - "pid" => $double_post['pid'], - "posthash" => '' - ); - $db->update_query("attachments", $attachmentassign, "posthash='{$post['posthash']}' AND pid='0'"); - } - - // Return the post's pid and whether or not it is visible. - $this->return_values = array( - "pid" => $double_post['pid'], - "visible" => $visible, - "merge" => true - ); - - $plugins->run_hooks("datahandler_post_insert_merge", $this); - - return $this->return_values; - } - } - - if($visible == 1) - { - $now = TIME_NOW; - - // Yes, the value to the lastpost key in this array has single quotes within double quotes. It's not a bug. - $update_array = array( - 'lastpost' => "'{$now}'" - ); - if($forum['usepostcounts'] != 0 && $thread['visible'] == 1) - { - $update_array['postnum'] = 'postnum+1'; - } - - $db->update_query("users", $update_array, "uid='{$post['uid']}'", 1, true); - } - - // Are we updating a post which is already a draft? Perhaps changing it into a visible post? - if($draft_check) - { - // Update a post that is a draft - $this->post_update_data = array( - "subject" => $db->escape_string($post['subject']), - "icon" => (int)$post['icon'], - "uid" => $post['uid'], - "username" => $db->escape_string($post['username']), - "dateline" => (int)$post['dateline'], - "message" => $db->escape_string($post['message']), - "ipaddress" => $db->escape_binary($post['ipaddress']), - "includesig" => $post['options']['signature'], - "smilieoff" => $post['options']['disablesmilies'], - "visible" => $visible - ); - - $plugins->run_hooks("datahandler_post_insert_post", $this); - - $db->update_query("posts", $this->post_update_data, "pid='{$post['pid']}'"); - $this->pid = $post['pid']; - } - else - { - // Insert the post. - $this->post_insert_data = array( - "tid" => (int)$post['tid'], - "replyto" => (int)$post['replyto'], - "fid" => (int)$post['fid'], - "subject" => $db->escape_string($post['subject']), - "icon" => (int)$post['icon'], - "uid" => $post['uid'], - "username" => $db->escape_string($post['username']), - "dateline" => $post['dateline'], - "message" => $db->escape_string($post['message']), - "ipaddress" => $db->escape_binary($post['ipaddress']), - "includesig" => $post['options']['signature'], - "smilieoff" => $post['options']['disablesmilies'], - "visible" => $visible - ); - - $plugins->run_hooks("datahandler_post_insert_post", $this); - - $this->pid = $db->insert_query("posts", $this->post_insert_data); - } - - // Assign any uploaded attachments with the specific posthash to the newly created post. - if($post['posthash']) - { - $post['posthash'] = $db->escape_string($post['posthash']); - $attachmentassign = array( - "pid" => $this->pid, - "posthash" => '' - ); - $db->update_query("attachments", $attachmentassign, "posthash='{$post['posthash']}' AND pid='0'"); - } - - $thread_update = array(); - if($visible == 1 && $thread['visible'] == 1) - { - require_once MYBB_ROOT.'inc/class_parser.php'; - $parser = new Postparser; - - $done_users = array(); - - $subject = $parser->parse_badwords($thread['subject']); - - $parser_options = array( - 'me_username' => $post['username'], - 'filter_badwords' => 1 - ); - - $excerpt = $parser->text_parse_message($post['message'], $parser_options); - $excerpt = my_substr($excerpt, 0, $mybb->settings['subscribeexcerpt']).$lang->emailbit_viewthread; - - // Fetch any users subscribed to this thread receiving instant notification and queue up their subscription notices - $query = $db->query(" - SELECT u.username, u.email, u.uid, u.language, u.loginkey, u.salt, u.regdate, s.notification - FROM ".TABLE_PREFIX."threadsubscriptions s - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=s.uid) - WHERE (s.notification='1' OR s.notification='2') AND s.tid='{$post['tid']}' - AND s.uid != '{$post['uid']}' - AND u.lastactive>'{$thread['lastpost']}' - "); - - $args = array( - 'this' => &$this, - 'done_users' => &$done_users, - 'users' => array() - ); - - while($subscribedmember = $db->fetch_array($query)) - { - if($done_users[$subscribedmember['uid']]) - { - continue; - } - - $args['users'][$subscribedmember['uid']] = (int)$subscribedmember['uid']; - - $done_users[$subscribedmember['uid']] = 1; - - $forumpermissions = forum_permissions($thread['fid'], $subscribedmember['uid']); - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) - { - continue; - } - - if($thread['uid'] != $subscribedmember['uid'] && $forumpermissions['canonlyviewownthread'] == 1 && !is_moderator($thread['fid'], "", $subscribedmember['uid'])) - { - // User isn't a moderator or the author of the thread... - continue; - } - - if($subscribedmember['language'] != '' && $lang->language_exists($subscribedmember['language'])) - { - $uselang = $subscribedmember['language']; - } - elseif($mybb->settings['orig_bblanguage']) - { - $uselang = $mybb->settings['orig_bblanguage']; - } - else - { - $uselang = "english"; - } - - if($uselang == $mybb->settings['bblanguage']) - { - if($subscribedmember['notification'] == 1) - { - $emailsubject = $lang->emailsubject_subscription; - $emailmessage = $lang->email_subscription; - } - } - else - { - if($subscribedmember['notification'] == 1) - { - if(!isset($langcache[$uselang]['emailsubject_subscription'])) - { - $userlang = new MyLanguage; - $userlang->set_path(MYBB_ROOT."inc/languages"); - $userlang->set_language($uselang); - $userlang->load("messages"); - $langcache[$uselang]['emailsubject_subscription'] = $userlang->emailsubject_subscription; - $langcache[$uselang]['email_subscription'] = $userlang->email_subscription; - unset($userlang); - } - $emailsubject = $langcache[$uselang]['emailsubject_subscription']; - $emailmessage = $langcache[$uselang]['email_subscription']; - } - } - - if($subscribedmember['notification'] == 1) - { - $emailsubject = $lang->sprintf($emailsubject, $subject); - - $post_code = md5($subscribedmember['loginkey'].$subscribedmember['salt'].$subscribedmember['regdate']); - $emailmessage = $lang->sprintf($emailmessage, $subscribedmember['username'], $post['username'], $mybb->settings['bbname'], $subject, $excerpt, $mybb->settings['bburl'], str_replace("&", "&", get_thread_link($thread['tid'], 0, "newpost")), $thread['tid'], $post_code); - $new_email = array( - "mailto" => $db->escape_string($subscribedmember['email']), - "mailfrom" => '', - "subject" => $db->escape_string($emailsubject), - "message" => $db->escape_string($emailmessage), - "headers" => '' - ); - $db->insert_query("mailqueue", $new_email); - unset($userlang); - $queued_email = 1; - } - elseif($subscribedmember['notification'] == 2) - { - $post_code = md5($subscribedmember['loginkey'].$subscribedmember['salt'].$subscribedmember['regdate']); - $pm = array( - 'subject' => array('pmsubject_subscription', $subject), - 'message' => array('pm_subscription', $subscribedmember['username'], $post['username'], $subject, $excerpt, $mybb->settings['bburl'], str_replace("&", "&", get_thread_link($thread['tid'], 0, "newpost")), $thread['tid'], $post_code), - 'touid' => $subscribedmember['uid'], - 'language' => $subscribedmember['language'], - 'language_file' => 'messages' - ); - send_pm($pm, -1, true); - } - } - - $plugins->run_hooks('datahandler_post_insert_subscribed', $args); - - // Have one or more emails been queued? Update the queue count - if(isset($queued_email) && $queued_email == 1) - { - $cache->update_mailqueue(); - } - - $thread_update = array('replies' => '+1'); - - // Update counters - update_last_post($post['tid']); - update_forum_counters($post['fid'], array("posts" => "+1")); - update_forum_lastpost($thread['fid']); - } - // Post is stuck in moderation queue - else if($visible == 0) - { - // Update the unapproved posts count for the current thread and current forum - $thread_update = array('unapprovedposts' => '+1'); - update_thread_counters($post['tid'], array("unapprovedposts" => "+1")); - update_forum_counters($post['fid'], array("unapprovedposts" => "+1")); - } - else if($thread['visible'] == 0) - { - // Update the unapproved posts count for the current forum - $thread_update = array('replies' => '+1'); - update_forum_counters($post['fid'], array("unapprovedposts" => "+1")); - } - else if($thread['visible'] == -1) - { - // Update the unapproved posts count for the current forum - $thread_update = array('replies' => '+1'); - update_forum_counters($post['fid'], array("deletedposts" => "+1")); - } - - // Update last poster - if($visible == 1 && $thread['visible'] != 1) - { - update_last_post($post['tid']); - } - - $query = $db->simple_select("attachments", "COUNT(aid) AS attachmentcount", "pid='{$this->pid}' AND visible='1'"); - $attachmentcount = $db->fetch_field($query, "attachmentcount"); - if($attachmentcount > 0) - { - $thread_update['attachmentcount'] = "+{$attachmentcount}"; - } - update_thread_counters($post['tid'], $thread_update); - - // Return the post's pid and whether or not it is visible. - $this->return_values = array( - "pid" => $this->pid, - "visible" => $visible, - "closed" => $closed - ); - - $plugins->run_hooks("datahandler_post_insert_post_end", $this); - - return $this->return_values; - } - - /** - * Validate a thread. - * - * @return boolean True when valid, false when invalid. - */ - function validate_thread() - { - global $mybb, $db, $plugins; - - $thread = &$this->data; - - // Validate all thread assets. - - if(!$thread['savedraft']) - { - $this->verify_post_flooding(); - } - - if($this->method == "insert" || array_key_exists('uid', $thread)) - { - $this->verify_author(); - } - - if($this->method == "insert" || array_key_exists('prefix', $thread)) - { - $this->verify_prefix(); - } - - if($this->method == "insert" || array_key_exists('subject', $thread)) - { - $this->verify_subject(); - } - - if($this->method == "insert" || array_key_exists('message', $thread)) - { - $this->verify_message(); - $this->verify_image_count(); - $this->verify_video_count(); - } - - if($this->method == "insert" || array_key_exists('dateline', $thread)) - { - $this->verify_dateline(); - } - - if($this->method == "insert" || array_key_exists('icon', $thread)) - { - $this->verify_post_icon(); - } - - if($this->method == "insert" || array_key_exists('options', $thread)) - { - $this->verify_options(); - } - - $plugins->run_hooks("datahandler_post_validate_thread", $this); - - // We are done validating, return. - $this->set_validated(true); - if(count($this->get_errors()) > 0) - { - return false; - } - else - { - return true; - } - } - - /** - * Insert a thread into the database. - * - * @return array Array of new thread details, tid and visibility. - */ - function insert_thread() - { - global $db, $mybb, $plugins, $cache, $lang; - - // Yes, validating is required. - if(!$this->get_validated()) - { - die("The thread needs to be validated before inserting it into the DB."); - } - if(count($this->get_errors()) > 0) - { - die("The thread is not valid."); - } - - $thread = &$this->data; - - // Fetch the forum this thread is being made in - $forum = get_forum($thread['fid']); - - // This thread is being saved as a draft. - if($thread['savedraft']) - { - $visible = -2; - } - - // Thread is being made now and we have a bit to do. - else - { - $forumpermissions = forum_permissions($thread['fid'], $thread['uid']); - // Decide on the visibility of this post. - if($forumpermissions['modthreads'] == 1 && !is_moderator($thread['fid'], "", $thread['uid'])) - { - $visible = 0; - } - else - { - $visible = 1; - } - - // Are posts from this user being moderated? Change visibility - if($mybb->user['uid'] == $thread['uid'] && $mybb->user['moderateposts'] == 1) - { - $visible = 0; - } - } - - // Have a post ID but not a thread ID - fetch thread ID - if(!empty($thread['pid']) && !$thread['tid']) - { - $query = $db->simple_select("posts", "tid", "pid='{$thread['pid']}"); - $thread['tid'] = $db->fetch_field($query, "tid"); - } - - if(isset($thread['pid']) && $thread['pid'] > 0) - { - $query = $db->simple_select("posts", "pid", "pid='{$thread['pid']}' AND uid='{$thread['uid']}' AND visible='-2'"); - $draft_check = $db->fetch_field($query, "pid"); - } - else - { - $draft_check = false; - } - - // Are we updating a post which is already a draft? Perhaps changing it into a visible post? - if($draft_check) - { - $this->thread_insert_data = array( - "subject" => $db->escape_string($thread['subject']), - "icon" => (int)$thread['icon'], - "username" => $db->escape_string($thread['username']), - "dateline" => (int)$thread['dateline'], - "lastpost" => (int)$thread['dateline'], - "lastposter" => $db->escape_string($thread['username']), - "visible" => $visible - ); - - $plugins->run_hooks("datahandler_post_insert_thread", $this); - - $db->update_query("threads", $this->thread_insert_data, "tid='{$thread['tid']}'"); - - $this->post_insert_data = array( - "subject" => $db->escape_string($thread['subject']), - "icon" => (int)$thread['icon'], - "username" => $db->escape_string($thread['username']), - "dateline" => (int)$thread['dateline'], - "message" => $db->escape_string($thread['message']), - "ipaddress" => $db->escape_binary(my_inet_pton(get_ip())), - "includesig" => $thread['options']['signature'], - "smilieoff" => $thread['options']['disablesmilies'], - "visible" => $visible - ); - $plugins->run_hooks("datahandler_post_insert_thread_post", $this); - - $db->update_query("posts", $this->post_insert_data, "pid='{$thread['pid']}'"); - $this->tid = $thread['tid']; - $this->pid = $thread['pid']; - } - - // Inserting a new thread into the database. - else - { - $this->thread_insert_data = array( - "fid" => $thread['fid'], - "subject" => $db->escape_string($thread['subject']), - "prefix" => (int)$thread['prefix'], - "icon" => (int)$thread['icon'], - "uid" => $thread['uid'], - "username" => $db->escape_string($thread['username']), - "dateline" => (int)$thread['dateline'], - "lastpost" => (int)$thread['dateline'], - "lastposter" => $db->escape_string($thread['username']), - "lastposteruid" => $thread['uid'], - "views" => 0, - "replies" => 0, - "visible" => $visible, - "notes" => '' - ); - - $plugins->run_hooks("datahandler_post_insert_thread", $this); - - $this->tid = $db->insert_query("threads", $this->thread_insert_data); - - $this->post_insert_data = array( - "tid" => $this->tid, - "fid" => $thread['fid'], - "subject" => $db->escape_string($thread['subject']), - "icon" => (int)$thread['icon'], - "uid" => $thread['uid'], - "username" => $db->escape_string($thread['username']), - "dateline" => (int)$thread['dateline'], - "message" => $db->escape_string($thread['message']), - "ipaddress" => $db->escape_binary(my_inet_pton(get_ip())), - "includesig" => $thread['options']['signature'], - "smilieoff" => $thread['options']['disablesmilies'], - "visible" => $visible - ); - $plugins->run_hooks("datahandler_post_insert_thread_post", $this); - - $this->pid = $db->insert_query("posts", $this->post_insert_data); - - // Now that we have the post id for this first post, update the threads table. - $firstpostup = array("firstpost" => $this->pid); - $db->update_query("threads", $firstpostup, "tid='{$this->tid}'"); - } - - // If we're not saving a draft there are some things we need to check now - if(!$thread['savedraft']) - { - if($thread['options']['subscriptionmethod'] != "" && $thread['uid'] > 0) - { - switch($thread['options']['subscriptionmethod']) - { - case "pm": - $notification = 2; - break; - case "email": - $notification = 1; - break; - default: - $notification = 0; - } - - require_once MYBB_ROOT."inc/functions_user.php"; - add_subscribed_thread($this->tid, $notification, $thread['uid']); - } - - // Perform any selected moderation tools. - if(is_moderator($thread['fid'], "", $thread['uid']) && isset($thread['modoptions'])) - { - $lang->load($this->language_file, true); - - $modoptions = $thread['modoptions']; - $modlogdata['fid'] = $thread['fid']; - if(isset($thread['tid'])) - { - $modlogdata['tid'] = $thread['tid']; - } - - $modoptions_update = array(); - - // Close the thread. - if(!empty($modoptions['closethread']) && is_moderator($thread['fid'], "canopenclosethreads", $thread['uid'])) - { - $modoptions_update['closed'] = 1; - log_moderator_action($modlogdata, $lang->thread_closed); - } - - // Stick the thread. - if(!empty($modoptions['stickthread']) && is_moderator($thread['fid'], "canstickunstickthreads", $thread['uid'])) - { - $modoptions_update['sticky'] = 1; - log_moderator_action($modlogdata, $lang->thread_stuck); - } - - // Execute moderation options. - if($modoptions_update) - { - $db->update_query('threads', $modoptions_update, "tid='{$this->tid}'"); - } - } - if($visible == 1) - { - // If we have a registered user then update their post count and last post times. - if($thread['uid'] > 0) - { - $user = get_user($thread['uid']); - $update_query = array(); - // Only update the lastpost column of the user if the date of the thread is newer than their last post. - if($thread['dateline'] > $user['lastpost']) - { - // Yes this has a single quote within a double quote. It's not a bug. - $update_query['lastpost'] = "'{$thread['dateline']}'"; - } - // Update the post count if this forum allows post counts to be tracked - if($forum['usepostcounts'] != 0) - { - $update_query['postnum'] = "postnum+1"; - } - if($forum['usethreadcounts'] != 0) - { - $update_query['threadnum'] = 'threadnum+1'; - } - - // Only update the table if we need to. - if(!empty($update_query)) - { - $db->update_query("users", $update_query, "uid='{$thread['uid']}'", 1, true); - } - } - - if(!isset($forum['lastpost'])) - { - $forum['lastpost'] = 0; - } - - $done_users = array(); - - // Queue up any forum subscription notices to users who are subscribed to this forum. - $excerpt = my_substr($thread['message'], 0, $mybb->settings['subscribeexcerpt']).$lang->emailbit_viewthread; - - // Parse badwords - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - $excerpt = $parser->parse_badwords($excerpt); - - $query = $db->query(" - SELECT u.username, u.email, u.uid, u.language, u.loginkey, u.salt, u.regdate - FROM ".TABLE_PREFIX."forumsubscriptions fs - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=fs.uid) - LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=u.usergroup) - WHERE fs.fid='".(int)$thread['fid']."' - AND fs.uid != '".(int)$thread['uid']."' - AND u.lastactive > '{$forum['lastpost']}' - AND g.isbannedgroup != 1 - "); - while($subscribedmember = $db->fetch_array($query)) - { - if($done_users[$subscribedmember['uid']]) - { - continue; - } - $done_users[$subscribedmember['uid']] = 1; - - $forumpermissions = forum_permissions($thread['fid'], $subscribedmember['uid']); - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) - { - continue; - } - - if(!is_moderator($thread['fid'], "", $subscribedmember['uid']) && $forumpermissions['canonlyviewownthreads'] == 1) - { - // In a 'view own only' forum and not a moderator - continue; - } - - // Determine the language pack we'll be using to send this email in and load it if it isn't already. - if($subscribedmember['language'] != '' && $lang->language_exists($subscribedmember['language'])) - { - $uselang = $subscribedmember['language']; - } - else if($mybb->settings['bblanguage']) - { - $uselang = $mybb->settings['bblanguage']; - } - else - { - $uselang = "english"; - } - - if($uselang == $mybb->settings['bblanguage']) - { - $emailsubject = $lang->emailsubject_forumsubscription; - $emailmessage = $lang->email_forumsubscription; - } - else - { - if(!isset($langcache[$uselang]['emailsubject_forumsubscription'])) - { - $userlang = new MyLanguage; - $userlang->set_path(MYBB_ROOT."inc/languages"); - $userlang->set_language($uselang); - $userlang->load("messages"); - $langcache[$uselang]['emailsubject_forumsubscription'] = $userlang->emailsubject_forumsubscription; - $langcache[$uselang]['email_forumsubscription'] = $userlang->email_forumsubscription; - unset($userlang); - } - $emailsubject = $langcache[$uselang]['emailsubject_forumsubscription']; - $emailmessage = $langcache[$uselang]['email_forumsubscription']; - } - $emailsubject = $lang->sprintf($emailsubject, $forum['name']); - - $post_code = md5($subscribedmember['loginkey'].$subscribedmember['salt'].$subscribedmember['regdate']); - $emailmessage = $lang->sprintf($emailmessage, $subscribedmember['username'], $thread['username'], $forum['name'], $mybb->settings['bbname'], $thread['subject'], $excerpt, $mybb->settings['bburl'], get_thread_link($this->tid), $thread['fid'], $post_code); - $new_email = array( - "mailto" => $db->escape_string($subscribedmember['email']), - "mailfrom" => '', - "subject" => $db->escape_string($emailsubject), - "message" => $db->escape_string($emailmessage), - "headers" => '' - ); - $db->insert_query("mailqueue", $new_email); - unset($userlang); - $queued_email = 1; - } - // Have one or more emails been queued? Update the queue count - if(isset($queued_email) && $queued_email == 1) - { - $cache->update_mailqueue(); - } - } - } - - // Assign any uploaded attachments with the specific posthash to the newly created post. - if($thread['posthash']) - { - $thread['posthash'] = $db->escape_string($thread['posthash']); - $attachmentassign = array( - "pid" => $this->pid, - "posthash" => '' - ); - $db->update_query("attachments", $attachmentassign, "posthash='{$thread['posthash']}' AND pid='0'"); - } - - if($visible == 1) - { - update_last_post($this->tid); - update_forum_counters($thread['fid'], array("threads" => "+1", "posts" => "+1")); - update_forum_lastpost($thread['fid']); - } - else if($visible == 0) - { - update_forum_counters($thread['fid'], array("unapprovedthreads" => "+1", "unapprovedposts" => "+1")); - } - - $query = $db->simple_select("attachments", "COUNT(aid) AS attachmentcount", "pid='{$this->pid}' AND visible='1'"); - $attachmentcount = $db->fetch_field($query, "attachmentcount"); - if($attachmentcount > 0) - { - update_thread_counters($this->tid, array("attachmentcount" => "+{$attachmentcount}")); - } - - // Return the post's pid and whether or not it is visible. - $this->return_values = array( - "pid" => $this->pid, - "tid" => $this->tid, - "visible" => $visible - ); - - $plugins->run_hooks("datahandler_post_insert_thread_end", $this); - - return $this->return_values; - } - - /** - * Updates a post that is already in the database. - * - * @return array - */ - function update_post() - { - global $db, $mybb, $plugins; - - // Yes, validating is required. - if($this->get_validated() != true) - { - die("The post needs to be validated before inserting it into the DB."); - } - if(count($this->get_errors()) > 0) - { - die("The post is not valid."); - } - - $post = &$this->data; - - $post['pid'] = (int)$post['pid']; - - $existing_post = get_post($post['pid']); - $post['tid'] = $existing_post['tid']; - $post['fid'] = $existing_post['fid']; - - $forum = get_forum($post['fid']); - $forumpermissions = forum_permissions($post['fid'], $post['uid']); - - // Decide on the visibility of this post. - $ismod = is_moderator($post['fid'], "", $post['uid']); - - // Keep visibility for unapproved and deleted posts - if($existing_post['visible'] == 0) - { - $visible = 0; - } - elseif($existing_post['visible'] == -1) - { - $visible = -1; - } - elseif($forumpermissions['mod_edit_posts'] == 1 && !$ismod) - { - $visible = 0; - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - $moderation->unapprove_posts(array($post['pid'])); - } - else - { - $visible = 1; - } - - // Update the thread details that might have been changed first. - if($this->first_post) - { - $this->tid = $post['tid']; - - if(isset($post['prefix'])) - { - $this->thread_update_data['prefix'] = (int)$post['prefix']; - } - - if(isset($post['subject'])) - { - $this->thread_update_data['subject'] = $db->escape_string($post['subject']); - } - - if(isset($post['icon'])) - { - $this->thread_update_data['icon'] = (int)$post['icon']; - } - if(count($this->thread_update_data) > 0) - { - $plugins->run_hooks("datahandler_post_update_thread", $this); - - $db->update_query("threads", $this->thread_update_data, "tid='".(int)$post['tid']."'"); - } - } - - // Prepare array for post updating. - - $this->pid = $post['pid']; - - if(isset($post['subject'])) - { - $this->post_update_data['subject'] = $db->escape_string($post['subject']); - } - - if(isset($post['message'])) - { - $this->post_update_data['message'] = $db->escape_string($post['message']); - } - - if(isset($post['editreason']) && trim($post['editreason']) != '') - { - $this->post_update_data['editreason'] = $db->escape_string(trim($post['editreason'])); - } - - if(isset($post['icon'])) - { - $this->post_update_data['icon'] = (int)$post['icon']; - } - - if(isset($post['options'])) - { - if(isset($post['options']['disablesmilies'])) - { - $this->post_update_data['smilieoff'] = $db->escape_string($post['options']['disablesmilies']); - } - if(isset($post['options']['signature'])) - { - $this->post_update_data['includesig'] = $db->escape_string($post['options']['signature']); - } - } - - // If we need to show the edited by, let's do so. - if(($mybb->settings['showeditedby'] == 1 && !is_moderator($post['fid'], "caneditposts", $post['edit_uid'])) || ($mybb->settings['showeditedbyadmin'] == 1 && is_moderator($post['fid'], "caneditposts", $post['edit_uid']))) - { - $this->post_update_data['edituid'] = (int)$post['edit_uid']; - $this->post_update_data['edittime'] = TIME_NOW; - } - - $plugins->run_hooks("datahandler_post_update", $this); - - $db->update_query("posts", $this->post_update_data, "pid='".(int)$post['pid']."'"); - - // Automatic subscription to the thread - if($post['options']['subscriptionmethod'] != "" && $post['uid'] > 0) - { - switch($post['options']['subscriptionmethod']) - { - case "pm": - $notification = 2; - break; - case "email": - $notification = 1; - break; - default: - $notification = 0; - } - require_once MYBB_ROOT."inc/functions_user.php"; - add_subscribed_thread($post['tid'], $notification, $post['uid']); - } - else - { - $db->delete_query("threadsubscriptions", "uid='".(int)$post['uid']."' AND tid='".(int)$post['tid']."'"); - } - - update_forum_lastpost($post['fid']); - update_last_post($post['tid']); - - // Return the thread's first post id and whether or not it is visible. - $this->return_values = array( - 'visible' => $visible, - 'first_post' => $this->first_post - ); - - $plugins->run_hooks("datahandler_post_update_end", $this); - - return $this->return_values; - } -} \ No newline at end of file diff --git a/html/forums/inc/datahandlers/user.php b/html/forums/inc/datahandlers/user.php deleted file mode 100644 index 940e089..0000000 --- a/html/forums/inc/datahandlers/user.php +++ /dev/null @@ -1,1854 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * User handling class, provides common structure to handle user data. - * - */ -class UserDataHandler extends DataHandler -{ - /** - * The language file used in the data handler. - * - * @var string - */ - public $language_file = 'datahandler_user'; - - /** - * The prefix for the language variables used in the data handler. - * - * @var string - */ - public $language_prefix = 'userdata'; - - /** - * Array of data inserted in to a user. - * - * @var array - */ - public $user_insert_data = array(); - - /** - * Array of data used to update a user. - * - * @var array - */ - public $user_update_data = array(); - - /** - * User ID currently being manipulated by the datahandlers. - * - * @var int - */ - public $uid = 0; - - /** - * Values to be returned after inserting/deleting an user. - * - * @var array - */ - public $return_values = array(); - - /** - * @var array - */ - var $delete_uids = array(); - - /** - * @var int - */ - var $deleted_users = 0; - - /** - * Verifies if a username is valid or invalid. - * - * @return boolean True when valid, false when invalid. - */ - function verify_username() - { - global $mybb; - - $username = &$this->data['username']; - require_once MYBB_ROOT.'inc/functions_user.php'; - - // Fix bad characters - $username = trim_blank_chrs($username); - $username = str_replace(array(unichr(160), unichr(173), unichr(0xCA), dec_to_utf8(8238), dec_to_utf8(8237), dec_to_utf8(8203)), array(" ", "-", "", "", "", ""), $username); - - // Remove multiple spaces from the username - $username = preg_replace("#\s{2,}#", " ", $username); - - // Check if the username is not empty. - if($username == '') - { - $this->set_error('missing_username'); - return false; - } - - // Check if the username belongs to the list of banned usernames. - if(is_banned_username($username, true)) - { - $this->set_error('banned_username'); - return false; - } - - // Check for certain characters in username (<, >, &, commas and slashes) - if(strpos($username, "<") !== false || strpos($username, ">") !== false || strpos($username, "&") !== false || my_strpos($username, "\\") !== false || strpos($username, ";") !== false || strpos($username, ",") !== false || !validate_utf8_string($username, false, false)) - { - $this->set_error("bad_characters_username"); - return false; - } - - // Check if the username is of the correct length. - if(($mybb->settings['maxnamelength'] != 0 && my_strlen($username) > $mybb->settings['maxnamelength']) || ($mybb->settings['minnamelength'] != 0 && my_strlen($username) < $mybb->settings['minnamelength'])) - { - $this->set_error('invalid_username_length', array($mybb->settings['minnamelength'], $mybb->settings['maxnamelength'])); - return false; - } - - return true; - } - - /** - * Verifies if a usertitle is valid or invalid. - * - * @return boolean True when valid, false when invalid. - */ - function verify_usertitle() - { - global $mybb; - - $usertitle = &$this->data['usertitle']; - - // Check if the usertitle is of the correct length. - if($mybb->settings['customtitlemaxlength'] != 0 && my_strlen($usertitle) > $mybb->settings['customtitlemaxlength']) - { - $this->set_error('invalid_usertitle_length', $mybb->settings['customtitlemaxlength']); - return false; - } - - return true; - } - - /** - * Verifies if a username is already in use or not. - * - * @return boolean False when the username is not in use, true when it is. - */ - function verify_username_exists() - { - $username = &$this->data['username']; - - $user = get_user_by_username(trim($username)); - - if(!empty($this->data['uid']) && !empty($user['uid']) && $user['uid'] == $this->data['uid']) - { - unset($user); - } - - if(!empty($user['uid'])) - { - $this->set_error("username_exists", array($username)); - return true; - } - - return false; - } - - /** - * Verifies if a new password is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_password() - { - global $mybb; - - $user = &$this->data; - - // Always check for the length of the password. - if(my_strlen($user['password']) < $mybb->settings['minpasswordlength'] || my_strlen($user['password']) > $mybb->settings['maxpasswordlength']) - { - $this->set_error('invalid_password_length', array($mybb->settings['minpasswordlength'], $mybb->settings['maxpasswordlength'])); - return false; - } - - // Has the user tried to use their email address or username as a password? - if($user['email'] === $user['password'] || $user['username'] === $user['password']) - { - $this->set_error('bad_password_security'); - return false; - } - - // See if the board has "require complex passwords" enabled. - if($mybb->settings['requirecomplexpasswords'] == 1) - { - // Complex passwords required, do some extra checks. - // First, see if there is one or more complex character(s) in the password. - if(!preg_match("/^.*(?=.{".$mybb->settings['minpasswordlength'].",})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $user['password'])) - { - $this->set_error('no_complex_characters', array($mybb->settings['minpasswordlength'])); - return false; - } - } - - // If we have a "password2" check if they both match - if(isset($user['password2']) && $user['password'] !== $user['password2']) - { - $this->set_error("passwords_dont_match"); - return false; - } - - // Generate the user login key - $user['loginkey'] = generate_loginkey(); - - // Combine the password and salt - $password_fields = create_password($user['password'], false, $user); - $user = array_merge($user, $password_fields); - - return true; - } - - /** - * Verifies usergroup selections and other group details. - * - * @return boolean True when valid, false when invalid. - */ - function verify_usergroup() - { - return true; - } - /** - * Verifies if an email address is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_email() - { - global $mybb; - - $user = &$this->data; - - // Check if an email address has actually been entered. - if(trim_blank_chrs($user['email']) == '') - { - $this->set_error('missing_email'); - return false; - } - - // Check if this is a proper email address. - if(!validate_email_format($user['email'])) - { - $this->set_error('invalid_email_format'); - return false; - } - - // Check banned emails - if(is_banned_email($user['email'], true)) - { - $this->set_error('banned_email'); - return false; - } - - // Check signed up emails - // Ignore the ACP because the Merge System sometimes produces users with duplicate email addresses (Not A Bug) - if($mybb->settings['allowmultipleemails'] == 0 && !defined("IN_ADMINCP")) - { - $uid = 0; - if(isset($user['uid'])) - { - $uid = $user['uid']; - } - if(email_already_in_use($user['email'], $uid)) - { - $this->set_error('email_already_in_use'); - return false; - } - } - - // If we have an "email2", verify it matches the existing email - if(isset($user['email2']) && $user['email'] != $user['email2']) - { - $this->set_error("emails_dont_match"); - return false; - } - - return true; - } - - /** - * Verifies if a website is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_website() - { - $website = &$this->data['website']; - - if(!empty($website) && !my_validate_url($website)) - { - $website = 'http://'.$website; - } - - if(!empty($website) && !my_validate_url($website)) - { - $this->set_error('invalid_website'); - return false; - } - - return true; - } - - /** - * Verifies if an ICQ number is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_icq() - { - $icq = &$this->data['icq']; - - if($icq != '' && !is_numeric($icq)) - { - $this->set_error("invalid_icq_number"); - return false; - } - $icq = (int)$icq; - return true; - } - - /** - * Verifies if a birthday is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_birthday() - { - global $mybb; - - $user = &$this->data; - $birthday = &$user['birthday']; - - if(!is_array($birthday)) - { - return true; - } - - // Sanitize any input we have - $birthday['day'] = (int)$birthday['day']; - $birthday['month'] = (int)$birthday['month']; - $birthday['year'] = (int)$birthday['year']; - - // Error if a day and month exists, and the birthday day and range is not in range - if($birthday['day'] != 0 || $birthday['month'] != 0) - { - if($birthday['day'] < 1 || $birthday['day'] > 31 || $birthday['month'] < 1 || $birthday['month'] > 12 || ($birthday['month'] == 2 && $birthday['day'] > 29)) - { - $this->set_error("invalid_birthday"); - return false; - } - } - - // Check if the day actually exists. - $months = get_bdays($birthday['year']); - if($birthday['month'] != 0 && $birthday['day'] > $months[$birthday['month']-1]) - { - $this->set_error("invalid_birthday"); - return false; - } - - // Error if a year exists and the year is out of range - if($birthday['year'] != 0 && ($birthday['year'] < (date("Y")-100)) || $birthday['year'] > date("Y")) - { - $this->set_error("invalid_birthday"); - return false; - } - else if($birthday['year'] == date("Y")) - { - // Error if birth date is in future - if($birthday['month'] > date("m") || ($birthday['month'] == date("m") && $birthday['day'] > date("d"))) - { - $this->set_error("invalid_birthday"); - return false; - } - } - - // Error if COPPA is on, and the user hasn't verified their age / under 13 - if($mybb->settings['coppa'] == "enabled" && ($birthday['year'] == 0 || !$birthday['year'])) - { - $this->set_error("invalid_birthday_coppa"); - return false; - } - elseif(($mybb->settings['coppa'] == "deny" && $birthday['year'] > (date("Y")-13)) && !is_moderator()) - { - $this->set_error("invalid_birthday_coppa2"); - return false; - } - - // Make the user's birthday field - if($birthday['year'] != 0) - { - // If the year is specified, put together a d-m-y string - $user['bday'] = $birthday['day']."-".$birthday['month']."-".$birthday['year']; - } - elseif($birthday['day'] && $birthday['month']) - { - // If only a day and month are specified, put together a d-m string - $user['bday'] = $birthday['day']."-".$birthday['month']."-"; - } - else - { - // No field is specified, so return an empty string for an unknown birthday - $user['bday'] = ''; - } - return true; - } - - /** - * Verifies if the birthday privacy option is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_birthday_privacy() - { - $birthdayprivacy = &$this->data['birthdayprivacy']; - $accepted = array( - 'none', - 'age', - 'all'); - - if(!in_array($birthdayprivacy, $accepted)) - { - $this->set_error("invalid_birthday_privacy"); - return false; - } - return true; - } - - /** - * Verifies if the post count field is filled in correctly. - * - * @return boolean True when valid, false when invalid. - */ - function verify_postnum() - { - $user = &$this->data; - - if(isset($user['postnum']) && $user['postnum'] < 0) - { - $this->set_error("invalid_postnum"); - return false; - } - - return true; - } - - /** - * Verifies if the thread count field is filled in correctly. - * - * @return boolean True when valid, false when invalid. - */ - function verify_threadnum() - { - $user = &$this->data; - - if(isset($user['threadnum']) && $user['threadnum'] < 0) - { - $this->set_error("invalid_threadnum"); - return false; - } - - return true; - } - - /** - * Verifies if a profile fields are filled in correctly. - * - * @return boolean True when valid, false when invalid. - */ - function verify_profile_fields() - { - global $db, $cache; - - $user = &$this->data; - $profile_fields = &$this->data['profile_fields']; - - // Loop through profile fields checking if they exist or not and are filled in. - - // Fetch all profile fields first. - $pfcache = $cache->read('profilefields'); - - if(is_array($pfcache)) - { - // Then loop through the profile fields. - foreach($pfcache as $profilefield) - { - if(isset($this->data['profile_fields_editable']) || isset($this->data['registration']) && ($profilefield['required'] == 1 || $profilefield['registration'] == 1)) - { - $profilefield['editableby'] = -1; - } - - if(!is_member($profilefield['editableby'], array('usergroup' => $user['usergroup'], 'additionalgroups' => $user['additionalgroups']))) - { - continue; - } - - // Does this field have a minimum post count? - if(!isset($this->data['profile_fields_editable']) && !empty($profilefield['postnum']) && $profilefield['postnum'] > $user['postnum']) - { - continue; - } - - $profilefield['type'] = htmlspecialchars_uni($profilefield['type']); - $profilefield['name'] = htmlspecialchars_uni($profilefield['name']); - $thing = explode("\n", $profilefield['type'], "2"); - $type = trim($thing[0]); - $field = "fid{$profilefield['fid']}"; - - if(!isset($profile_fields[$field])) - { - $profile_fields[$field] = ''; - } - - // If the profile field is required, but not filled in, present error. - if($type != "multiselect" && $type != "checkbox") - { - if(trim($profile_fields[$field]) == "" && $profilefield['required'] == 1 && !defined('IN_ADMINCP') && THIS_SCRIPT != "modcp.php") - { - $this->set_error('missing_required_profile_field', array($profilefield['name'])); - } - } - elseif(($type == "multiselect" || $type == "checkbox") && $profile_fields[$field] == "" && $profilefield['required'] == 1 && !defined('IN_ADMINCP') && THIS_SCRIPT != "modcp.php") - { - $this->set_error('missing_required_profile_field', array($profilefield['name'])); - } - - // Sort out multiselect/checkbox profile fields. - $options = ''; - if(($type == "multiselect" || $type == "checkbox") && is_array($profile_fields[$field])) - { - $expoptions = explode("\n", $thing[1]); - $expoptions = array_map('trim', $expoptions); - foreach($profile_fields[$field] as $value) - { - if(!in_array(htmlspecialchars_uni($value), $expoptions)) - { - $this->set_error('bad_profile_field_values', array($profilefield['name'])); - } - if($options) - { - $options .= "\n"; - } - $options .= $db->escape_string($value); - } - } - elseif($type == "select" || $type == "radio") - { - $expoptions = explode("\n", $thing[1]); - $expoptions = array_map('trim', $expoptions); - if(!in_array(htmlspecialchars_uni($profile_fields[$field]), $expoptions) && trim($profile_fields[$field]) != "") - { - $this->set_error('bad_profile_field_values', array($profilefield['name'])); - } - $options = $db->escape_string($profile_fields[$field]); - } - else - { - if($profilefield['maxlength'] > 0 && my_strlen($profile_fields[$field]) > $profilefield['maxlength']) - { - $this->set_error('max_limit_reached', array($profilefield['name'], $profilefield['maxlength'])); - } - - if(!empty($profilefield['regex']) && !preg_match("#".$profilefield['regex']."#i", $profile_fields[$field])) - { - $this->set_error('bad_profile_field_value', array($profilefield['name'])); - } - - $options = $db->escape_string($profile_fields[$field]); - } - $user['user_fields'][$field] = $options; - } - } - - return true; - } - - /** - * Verifies if an optionally entered referrer exists or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_referrer() - { - global $db, $mybb; - - $user = &$this->data; - - // Does the referrer exist or not? - if($mybb->settings['usereferrals'] == 1 && $user['referrer'] != '') - { - $referrer = get_user_by_username($user['referrer']); - - if(empty($referrer['uid'])) - { - $this->set_error('invalid_referrer', array($user['referrer'])); - return false; - } - - $user['referrer_uid'] = $referrer['uid']; - } - else - { - $user['referrer_uid'] = 0; - } - - return true; - } - - /** - * Verifies user options. - * - * @return boolean True when valid, false when invalid. - */ - function verify_options() - { - global $mybb; - - $options = &$this->data['options']; - - // Verify yes/no options. - $this->verify_yesno_option($options, 'allownotices', 1); - $this->verify_yesno_option($options, 'hideemail', 0); - $this->verify_yesno_option($options, 'receivepms', 1); - $this->verify_yesno_option($options, 'receivefrombuddy', 0); - $this->verify_yesno_option($options, 'pmnotice', 1); - $this->verify_yesno_option($options, 'pmnotify', 1); - $this->verify_yesno_option($options, 'invisible', 0); - $this->verify_yesno_option($options, 'showimages', 1); - $this->verify_yesno_option($options, 'showvideos', 1); - $this->verify_yesno_option($options, 'showsigs', 1); - $this->verify_yesno_option($options, 'showavatars', 1); - $this->verify_yesno_option($options, 'showquickreply', 1); - $this->verify_yesno_option($options, 'showredirect', 1); - $this->verify_yesno_option($options, 'showcodebuttons', 1); - $this->verify_yesno_option($options, 'sourceeditor', 0); - $this->verify_yesno_option($options, 'buddyrequestspm', 1); - $this->verify_yesno_option($options, 'buddyrequestsauto', 0); - - if($mybb->settings['postlayout'] == 'classic') - { - $this->verify_yesno_option($options, 'classicpostbit', 1); - } - else - { - $this->verify_yesno_option($options, 'classicpostbit', 0); - } - - if(array_key_exists('subscriptionmethod', $options)) - { - // Value out of range - $options['subscriptionmethod'] = (int)$options['subscriptionmethod']; - if($options['subscriptionmethod'] < 0 || $options['subscriptionmethod'] > 3) - { - $options['subscriptionmethod'] = 0; - } - } - - if(array_key_exists('dstcorrection', $options)) - { - // Value out of range - $options['dstcorrection'] = (int)$options['dstcorrection']; - if($options['dstcorrection'] < 0 || $options['dstcorrection'] > 2) - { - $options['dstcorrection'] = 0; - } - } - - if($options['dstcorrection'] == 1) - { - $options['dst'] = 1; - } - else if($options['dstcorrection'] == 0) - { - $options['dst'] = 0; - } - - if($this->method == "insert" || (isset($options['threadmode']) && $options['threadmode'] != "linear" && $options['threadmode'] != "threaded")) - { - if($mybb->settings['threadusenetstyle']) - { - $options['threadmode'] = 'threaded'; - } - else - { - $options['threadmode'] = 'linear'; - } - } - - // Verify the "threads per page" option. - if($this->method == "insert" || (array_key_exists('tpp', $options) && $mybb->settings['usertppoptions'])) - { - if(!isset($options['tpp'])) - { - $options['tpp'] = 0; - } - $explodedtpp = explode(",", $mybb->settings['usertppoptions']); - if(is_array($explodedtpp)) - { - @asort($explodedtpp); - $biggest = $explodedtpp[count($explodedtpp)-1]; - // Is the selected option greater than the allowed options? - if($options['tpp'] > $biggest) - { - $options['tpp'] = $biggest; - } - } - $options['tpp'] = (int)$options['tpp']; - } - // Verify the "posts per page" option. - if($this->method == "insert" || (array_key_exists('ppp', $options) && $mybb->settings['userpppoptions'])) - { - if(!isset($options['ppp'])) - { - $options['ppp'] = 0; - } - $explodedppp = explode(",", $mybb->settings['userpppoptions']); - if(is_array($explodedppp)) - { - @asort($explodedppp); - $biggest = $explodedppp[count($explodedppp)-1]; - // Is the selected option greater than the allowed options? - if($options['ppp'] > $biggest) - { - $options['ppp'] = $biggest; - } - } - $options['ppp'] = (int)$options['ppp']; - } - // Is our selected "days prune" option valid or not? - if($this->method == "insert" || array_key_exists('daysprune', $options)) - { - if(!isset($options['daysprune'])) - { - $options['daysprune'] = 0; - } - $options['daysprune'] = (int)$options['daysprune']; - if($options['daysprune'] < 0) - { - $options['daysprune'] = 0; - } - } - $this->data['options'] = $options; - } - - /** - * Verifies if a registration date is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_regdate() - { - $regdate = &$this->data['regdate']; - - $regdate = (int)$regdate; - // If the timestamp is below 0, set it to the current time. - if($regdate <= 0) - { - $regdate = TIME_NOW; - } - return true; - } - - /** - * Verifies if a last visit date is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_lastvisit() - { - $lastvisit = &$this->data['lastvisit']; - - $lastvisit = (int)$lastvisit; - // If the timestamp is below 0, set it to the current time. - if($lastvisit <= 0) - { - $lastvisit = TIME_NOW; - } - return true; - - } - - /** - * Verifies if a last active date is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_lastactive() - { - $lastactive = &$this->data['lastactive']; - - $lastactive = (int)$lastactive; - // If the timestamp is below 0, set it to the current time. - if($lastactive <= 0) - { - $lastactive = TIME_NOW; - } - return true; - - } - - /** - * Verifies if an away mode status is valid or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_away() - { - global $mybb; - - $user = &$this->data; - // If the board does not allow "away mode" or the user is marking as not away, set defaults. - if($mybb->settings['allowaway'] == 0 || !isset($user['away']['away']) || $user['away']['away'] != 1) - { - $user['away']['away'] = 0; - $user['away']['date'] = 0; - $user['away']['returndate'] = 0; - $user['away']['awayreason'] = ''; - return true; - } - else if($user['away']['returndate']) - { - list($returnday, $returnmonth, $returnyear) = explode('-', $user['away']['returndate']); - if(!$returnday || !$returnmonth || !$returnyear) - { - $this->set_error("missing_returndate"); - return false; - } - - // Validate the return date lengths - $user['away']['returndate'] = substr($returnday, 0, 2).'-'.substr($returnmonth, 0, 2).'-'.substr($returnyear, 0, 4); - } - return true; - } - - /** - * Verifies if a language is valid for this user or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_language() - { - global $lang; - - $language = &$this->data['language']; - - // An invalid language has been specified? - if($language != '' && !$lang->language_exists($language)) - { - $this->set_error("invalid_language"); - return false; - } - return true; - } - - /** - * Verifies if a style is valid for this user or not. - * - * @return boolean True when valid, false when invalid. - */ - function verify_style() - { - global $lang; - - $user = &$this->data; - - if($user['style']) - { - $theme = get_theme($user['style']); - - if(empty($theme) || !is_member($theme['allowedgroups'], $user) && $theme['allowedgroups'] != 'all') - { - $this->set_error('invalid_style'); - return false; - } - } - - return true; - } - - /** - * Verifies if this is coming from a spam bot or not - * - * @return boolean True when valid, false when invalid. - */ - function verify_checkfields() - { - $user = &$this->data; - - // An invalid language has been specified? - if($user['regcheck1'] !== "" || $user['regcheck2'] !== "true") - { - $this->set_error("invalid_checkfield"); - return false; - } - return true; - } - - /** - * Verifies if the user timezone is valid. - * If the timezone is invalid, the board default is used. - * - * @return boolean True when timezone was valid, false otherwise - */ - function verify_timezone() - { - $user = &$this->data; - - $timezones = get_supported_timezones(); - - if(!array_key_exists($user['timezone'], $timezones)) - { - $user['timezone'] = $mybb->settings['timezoneoffset']; - return false; - } - - return true; - } - - /** - * Validate all user assets. - * - * @return boolean True when valid, false when invalid. - */ - function validate_user() - { - global $mybb, $plugins; - - $user = &$this->data; - - // First, grab the old user details if this user exists - if(!empty($user['uid'])) - { - $old_user = get_user($user['uid']); - } - - if($this->method == "insert" || array_key_exists('username', $user)) - { - // If the username is the same - no need to verify - if(!isset($old_user['username']) || $user['username'] != $old_user['username']) - { - $this->verify_username(); - $this->verify_username_exists(); - } - else - { - unset($user['username']); - } - } - if($this->method == "insert" || array_key_exists('usertitle', $user)) - { - $this->verify_usertitle(); - } - if($this->method == "insert" || array_key_exists('password', $user)) - { - $this->verify_password(); - } - if($this->method == "insert" || array_key_exists('usergroup', $user)) - { - $this->verify_usergroup(); - } - if($this->method == "insert" || array_key_exists('email', $user)) - { - $this->verify_email(); - } - if($this->method == "insert" || array_key_exists('website', $user)) - { - $this->verify_website(); - } - if($this->method == "insert" || array_key_exists('icq', $user)) - { - $this->verify_icq(); - } - if($this->method == "insert" || (isset($user['birthday']) && is_array($user['birthday']))) - { - $this->verify_birthday(); - } - if($this->method == "insert" || array_key_exists('postnum', $user)) - { - $this->verify_postnum(); - } - if($this->method == "insert" || array_key_exists('threadnum', $user)) - { - $this->verify_threadnum(); - } - if($this->method == "insert" || array_key_exists('profile_fields', $user)) - { - $this->verify_profile_fields(); - } - if($this->method == "insert" || array_key_exists('referrer', $user)) - { - $this->verify_referrer(); - } - if($this->method == "insert" || array_key_exists('options', $user)) - { - $this->verify_options(); - } - if($this->method == "insert" || array_key_exists('regdate', $user)) - { - $this->verify_regdate(); - } - if($this->method == "insert" || array_key_exists('lastvisit', $user)) - { - $this->verify_lastvisit(); - } - if($this->method == "insert" || array_key_exists('lastactive', $user)) - { - $this->verify_lastactive(); - } - if($this->method == "insert" || array_key_exists('away', $user)) - { - $this->verify_away(); - } - if($this->method == "insert" || array_key_exists('language', $user)) - { - $this->verify_language(); - } - if($this->method == "insert" || array_key_exists('timezone', $user)) - { - $this->verify_timezone(); - } - if($this->method == "insert" && array_key_exists('regcheck1', $user) && array_key_exists('regcheck2', $user)) - { - $this->verify_checkfields(); - } - if(array_key_exists('birthdayprivacy', $user)) - { - $this->verify_birthday_privacy(); - } - if($this->method == "insert" || array_key_exists('style', $user)) - { - $this->verify_style(); - } - if($this->method == "insert" || array_key_exists('signature', $user)) - { - $this->verify_signature(); - } - - $plugins->run_hooks("datahandler_user_validate", $this); - - // We are done validating, return. - $this->set_validated(true); - if(count($this->get_errors()) > 0) - { - return false; - } - else - { - return true; - } - } - - /** - * Inserts a user into the database. - * - * @return array - */ - function insert_user() - { - global $db, $cache, $plugins; - - // Yes, validating is required. - if(!$this->get_validated()) - { - die("The user needs to be validated before inserting it into the DB."); - } - if(count($this->get_errors()) > 0) - { - die("The user is not valid."); - } - - $user = &$this->data; - - $array = array('postnum', 'threadnum', 'avatar', 'avatartype', 'additionalgroups', 'displaygroup', 'icq', 'aim', 'yahoo', 'skype', 'google', 'bday', 'signature', 'style', 'dateformat', 'timeformat', 'notepad'); - foreach($array as $value) - { - if(!isset($user[$value])) - { - $user[$value] = ''; - } - } - - $this->user_insert_data = array( - "username" => $db->escape_string($user['username']), - "password" => $user['password'], - "salt" => $user['salt'], - "loginkey" => $user['loginkey'], - "email" => $db->escape_string($user['email']), - "postnum" => (int)$user['postnum'], - "threadnum" => (int)$user['threadnum'], - "avatar" => $db->escape_string($user['avatar']), - "avatartype" => $db->escape_string($user['avatartype']), - "usergroup" => (int)$user['usergroup'], - "additionalgroups" => $db->escape_string($user['additionalgroups']), - "displaygroup" => (int)$user['displaygroup'], - "usertitle" => $db->escape_string(htmlspecialchars_uni($user['usertitle'])), - "regdate" => (int)$user['regdate'], - "lastactive" => (int)$user['lastactive'], - "lastvisit" => (int)$user['lastvisit'], - "website" => $db->escape_string($user['website']), - "icq" => (int)$user['icq'], - "aim" => $db->escape_string($user['aim']), - "yahoo" => $db->escape_string($user['yahoo']), - "skype" => $db->escape_string($user['skype']), - "google" => $db->escape_string($user['google']), - "birthday" => $user['bday'], - "signature" => $db->escape_string($user['signature']), - "allownotices" => (int)$user['options']['allownotices'], - "hideemail" => (int)$user['options']['hideemail'], - "subscriptionmethod" => (int)$user['options']['subscriptionmethod'], - "receivepms" => (int)$user['options']['receivepms'], - "receivefrombuddy" => (int)$user['options']['receivefrombuddy'], - "pmnotice" => (int)$user['options']['pmnotice'], - "pmnotify" => (int)$user['options']['pmnotify'], - "showimages" => (int)$user['options']['showimages'], - "showvideos" => (int)$user['options']['showvideos'], - "showsigs" => (int)$user['options']['showsigs'], - "showavatars" => (int)$user['options']['showavatars'], - "showquickreply" => (int)$user['options']['showquickreply'], - "showredirect" => (int)$user['options']['showredirect'], - "tpp" => (int)$user['options']['tpp'], - "ppp" => (int)$user['options']['ppp'], - "invisible" => (int)$user['options']['invisible'], - "style" => (int)$user['style'], - "timezone" => $db->escape_string($user['timezone']), - "dstcorrection" => (int)$user['options']['dstcorrection'], - "threadmode" => $user['options']['threadmode'], - "daysprune" => (int)$user['options']['daysprune'], - "dateformat" => $db->escape_string($user['dateformat']), - "timeformat" => $db->escape_string($user['timeformat']), - "regip" => $db->escape_binary($user['regip']), - "language" => $db->escape_string($user['language']), - "showcodebuttons" => (int)$user['options']['showcodebuttons'], - "sourceeditor" => (int)$user['options']['sourceeditor'], - "buddyrequestspm" => (int)$user['options']['buddyrequestspm'], - "buddyrequestsauto" => (int)$user['options']['buddyrequestsauto'], - "away" => (int)$user['away']['away'], - "awaydate" => (int)$user['away']['date'], - "returndate" => $user['away']['returndate'], - "awayreason" => $db->escape_string($user['away']['awayreason']), - "notepad" => $db->escape_string($user['notepad']), - "referrer" => (int)$user['referrer_uid'], - "referrals" => 0, - "buddylist" => '', - "ignorelist" => '', - "pmfolders" => '', - "notepad" => '', - "warningpoints" => 0, - "moderateposts" => 0, - "moderationtime" => 0, - "suspendposting" => 0, - "suspensiontime" => 0, - "coppauser" => (int)$user['coppa_user'], - "classicpostbit" => (int)$user['options']['classicpostbit'], - "usernotes" => '' - ); - - if($user['options']['dstcorrection'] == 1) - { - $this->user_insert_data['dst'] = 1; - } - else if($user['options']['dstcorrection'] == 0) - { - $this->user_insert_data['dst'] = 0; - } - - $plugins->run_hooks("datahandler_user_insert", $this); - - $this->uid = $db->insert_query("users", $this->user_insert_data); - - $user['user_fields']['ufid'] = $this->uid; - - $pfcache = $cache->read('profilefields'); - - if(is_array($pfcache)) - { - foreach($pfcache as $profile_field) - { - if(array_key_exists("fid{$profile_field['fid']}", $user['user_fields'])) - { - continue; - } - $user['user_fields']["fid{$profile_field['fid']}"] = ''; - } - } - - $db->insert_query("userfields", $user['user_fields'], false); - - if($this->user_insert_data['referrer'] != 0) - { - $db->write_query(" - UPDATE ".TABLE_PREFIX."users - SET referrals=referrals+1 - WHERE uid='{$this->user_insert_data['referrer']}' - "); - } - - // Update forum stats - update_stats(array('numusers' => '+1')); - - if((int)$user['usergroup'] == 5) - { - $cache->update_awaitingactivation(); - } - - $this->return_values = array( - "uid" => $this->uid, - "username" => $user['username'], - "loginkey" => $user['loginkey'], - "email" => $user['email'], - "password" => $user['password'], - "usergroup" => $user['usergroup'] - ); - - $plugins->run_hooks("datahandler_user_insert_end", $this); - - return $this->return_values; - } - - /** - * Updates a user in the database. - * - * @return bool - */ - function update_user() - { - global $db, $plugins, $cache; - - // Yes, validating is required. - if(!$this->get_validated()) - { - die("The user needs to be validated before inserting it into the DB."); - } - if(count($this->get_errors()) > 0) - { - die("The user is not valid."); - } - - $user = &$this->data; - $user['uid'] = (int)$user['uid']; - $this->uid = $user['uid']; - - // Set up the update data. - if(isset($user['username'])) - { - $this->user_update_data['username'] = $db->escape_string($user['username']); - } - if(isset($user['password'])) - { - $this->user_update_data['password'] = $user['password']; - } - if(isset($user['salt'])) - { - $this->user_update_data['salt'] = $user['salt']; - } - if(isset($user['loginkey'])) - { - $this->user_update_data['loginkey'] = $user['loginkey']; - } - if(isset($user['email'])) - { - $this->user_update_data['email'] = $user['email']; - } - if(isset($user['postnum'])) - { - $this->user_update_data['postnum'] = (int)$user['postnum']; - } - if(isset($user['threadnum'])) - { - $this->user_update_data['threadnum'] = (int)$user['threadnum']; - } - if(isset($user['avatar'])) - { - $this->user_update_data['avatar'] = $db->escape_string($user['avatar']); - $this->user_update_data['avatartype'] = $db->escape_string($user['avatartype']); - } - if(isset($user['usergroup'])) - { - $this->user_update_data['usergroup'] = (int)$user['usergroup']; - } - if(isset($user['additionalgroups'])) - { - $this->user_update_data['additionalgroups'] = $db->escape_string($user['additionalgroups']); - } - if(isset($user['displaygroup'])) - { - $this->user_update_data['displaygroup'] = (int)$user['displaygroup']; - } - if(isset($user['usertitle'])) - { - $this->user_update_data['usertitle'] = $db->escape_string($user['usertitle']); - } - if(isset($user['regdate'])) - { - $this->user_update_data['regdate'] = (int)$user['regdate']; - } - if(isset($user['lastactive'])) - { - $this->user_update_data['lastactive'] = (int)$user['lastactive']; - } - if(isset($user['lastvisit'])) - { - $this->user_update_data['lastvisit'] = (int)$user['lastvisit']; - } - if(isset($user['signature'])) - { - $this->user_update_data['signature'] = $db->escape_string($user['signature']); - } - if(isset($user['website'])) - { - $this->user_update_data['website'] = $db->escape_string($user['website']); - } - if(isset($user['icq'])) - { - $this->user_update_data['icq'] = (int)$user['icq']; - } - if(isset($user['aim'])) - { - $this->user_update_data['aim'] = $db->escape_string($user['aim']); - } - if(isset($user['yahoo'])) - { - $this->user_update_data['yahoo'] = $db->escape_string($user['yahoo']); - } - if(isset($user['skype'])) - { - $this->user_update_data['skype'] = $db->escape_string($user['skype']); - } - if(isset($user['google'])) - { - $this->user_update_data['google'] = $db->escape_string($user['google']); - } - if(isset($user['bday'])) - { - $this->user_update_data['birthday'] = $user['bday']; - } - if(isset($user['birthdayprivacy'])) - { - $this->user_update_data['birthdayprivacy'] = $db->escape_string($user['birthdayprivacy']); - } - if(isset($user['style'])) - { - $this->user_update_data['style'] = (int)$user['style']; - } - if(isset($user['timezone'])) - { - $this->user_update_data['timezone'] = $db->escape_string($user['timezone']); - } - if(isset($user['dateformat'])) - { - $this->user_update_data['dateformat'] = $db->escape_string($user['dateformat']); - } - if(isset($user['timeformat'])) - { - $this->user_update_data['timeformat'] = $db->escape_string($user['timeformat']); - } - if(isset($user['regip'])) - { - $this->user_update_data['regip'] = $db->escape_string($user['regip']); - } - if(isset($user['language'])) - { - $this->user_update_data['language'] = $db->escape_string($user['language']); - } - if(isset($user['away'])) - { - $this->user_update_data['away'] = (int)$user['away']['away']; - $this->user_update_data['awaydate'] = $db->escape_string($user['away']['date']); - $this->user_update_data['returndate'] = $db->escape_string($user['away']['returndate']); - $this->user_update_data['awayreason'] = $db->escape_string($user['away']['awayreason']); - } - if(isset($user['notepad'])) - { - $this->user_update_data['notepad'] = $db->escape_string($user['notepad']); - } - if(isset($user['usernotes'])) - { - $this->user_update_data['usernotes'] = $db->escape_string($user['usernotes']); - } - if(isset($user['options']) && is_array($user['options'])) - { - foreach($user['options'] as $option => $value) - { - $this->user_update_data[$option] = $value; - } - } - if(array_key_exists('coppa_user', $user)) - { - $this->user_update_data['coppauser'] = (int)$user['coppa_user']; - } - // First, grab the old user details for later use. - $old_user = get_user($user['uid']); - - // If old user has new pmnotice and new user has = yes, keep old value - if($old_user['pmnotice'] == "2" && $this->user_update_data['pmnotice'] == 1) - { - unset($this->user_update_data['pmnotice']); - } - - $plugins->run_hooks("datahandler_user_update", $this); - - if(count($this->user_update_data) < 1 && empty($user['user_fields'])) - { - return false; - } - - if(count($this->user_update_data) > 0) - { - // Actual updating happens here. - $db->update_query("users", $this->user_update_data, "uid='{$user['uid']}'"); - } - - $cache->update_moderators(); - if(isset($user['bday']) || isset($user['username'])) - { - $cache->update_birthdays(); - } - - if(isset($user['usergroup']) && (int)$user['usergroup'] == 5) - { - $cache->update_awaitingactivation(); - } - - // Maybe some userfields need to be updated? - if(isset($user['user_fields']) && is_array($user['user_fields'])) - { - $query = $db->simple_select("userfields", "*", "ufid='{$user['uid']}'"); - $fields = $db->fetch_array($query); - if(!$fields['ufid']) - { - $user_fields = array( - 'ufid' => $user['uid'] - ); - - $fields_array = $db->show_fields_from("userfields"); - foreach($fields_array as $field) - { - if($field['Field'] == 'ufid') - { - continue; - } - $user_fields[$field['Field']] = ''; - } - $db->insert_query("userfields", $user_fields); - } - $db->update_query("userfields", $user['user_fields'], "ufid='{$user['uid']}'", false); - } - - // Let's make sure the user's name gets changed everywhere in the db if it changed. - if(!empty($this->user_update_data['username']) && $this->user_update_data['username'] != $old_user['username']) - { - $username_update = array( - "username" => $this->user_update_data['username'] - ); - $lastposter_update = array( - "lastposter" => $this->user_update_data['username'] - ); - - $db->update_query("posts", $username_update, "uid='{$user['uid']}'"); - $db->update_query("threads", $username_update, "uid='{$user['uid']}'"); - $db->update_query("threads", $lastposter_update, "lastposteruid='{$user['uid']}'"); - $db->update_query("forums", $lastposter_update, "lastposteruid='{$user['uid']}'"); - - $stats = $cache->read("stats"); - if($stats['lastuid'] == $user['uid']) - { - // User was latest to register, update stats - update_stats(array("numusers" => "+0")); - } - } - - return true; - } - - /** - * Provides a method to completely delete a user. - * - * @param array $delete_uids Array of user information - * @param integer $prunecontent Whether if delete threads/posts or not - * @return array - */ - function delete_user($delete_uids, $prunecontent=0) - { - global $db, $plugins, $mybb, $cache; - - // Yes, validating is required. - if(count($this->get_errors()) > 0) - { - die('The user is not valid.'); - } - - $this->delete_uids = array_map('intval', (array)$delete_uids); - - foreach($this->delete_uids as $key => $uid) - { - if(!$uid || is_super_admin($uid) || $uid == $mybb->user['uid']) - { - // Remove super admins - unset($this->delete_uids[$key]); - } - } - - $plugins->run_hooks('datahandler_user_delete_start', $this); - - $this->delete_uids = implode(',', $this->delete_uids); - - if(empty($this->delete_uids)) - { - $this->deleted_users = 0; - $this->return_values = array( - "deleted_users" => $this->deleted_users - ); - - return $this->return_values; - } - - $this->delete_content(); - - // Delete the user - $query = $db->delete_query('users', "uid IN({$this->delete_uids})"); - $this->deleted_users = $db->affected_rows($query); - - // Are we removing the posts/threads of a user? - if((int)$prunecontent == 1) - { - $this->delete_posts(); - $db->delete_query('announcements', "uid IN({$this->delete_uids})"); - } - else - { - // We're just updating the UID - $db->update_query('pollvotes', array('uid' => 0), "uid IN({$this->delete_uids})"); - $db->update_query('posts', array('uid' => 0), "uid IN({$this->delete_uids})"); - $db->update_query('threads', array('uid' => 0), "uid IN({$this->delete_uids})"); - $db->update_query('attachments', array('uid' => 0), "uid IN({$this->delete_uids})"); - $db->update_query('announcements', array('uid' => 0), "uid IN({$this->delete_uids})"); - } - - $db->update_query('privatemessages', array('fromid' => 0), "fromid IN({$this->delete_uids})"); - $db->update_query('users', array('referrer' => 0), "referrer IN({$this->delete_uids})"); - - // Update thread ratings - $query = $db->query(" - SELECT r.*, t.numratings, t.totalratings - FROM ".TABLE_PREFIX."threadratings r - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=r.tid) - WHERE r.uid IN({$this->delete_uids}) - "); - while($rating = $db->fetch_array($query)) - { - $update_thread = array( - "numratings" => $rating['numratings'] - 1, - "totalratings" => $rating['totalratings'] - $rating['rating'] - ); - $db->update_query("threads", $update_thread, "tid='{$rating['tid']}'"); - } - - $db->delete_query('threadratings', "uid IN({$this->delete_uids})"); - - // Update forums & threads if user is the lastposter - $db->update_query('forums', array('lastposteruid' => 0), "lastposteruid IN({$this->delete_uids})"); - $db->update_query('threads', array('lastposteruid' => 0), "lastposteruid IN({$this->delete_uids})"); - - // Update forum stats - update_stats(array('numusers' => '-'.$this->deleted_users)); - - $this->return_values = array( - "deleted_users" => $this->deleted_users - ); - - $plugins->run_hooks("datahandler_user_delete_end", $this); - - // Update cache - $cache->update_banned(); - $cache->update_moderators(); - $cache->update_forumsdisplay(); - $cache->update_reportedcontent(); - $cache->update_awaitingactivation(); - $cache->update_birthdays(); - - return $this->return_values; - } - - /** - * Provides a method to delete users' content - * - * @param array|bool $delete_uids Array of user ids, false if they're already set (eg when using the delete_user function) - */ - function delete_content($delete_uids=false) - { - global $db, $plugins, $mybb; - - if($delete_uids != false) - { - $this->delete_uids = array_map('intval', (array)$delete_uids); - - foreach($this->delete_uids as $key => $uid) - { - if(!$uid || is_super_admin($uid) || $uid == $mybb->user['uid']) - { - // Remove super admins - unset($this->delete_uids[$key]); - } - } - - $this->delete_uids = implode(',', $this->delete_uids); - } - - $plugins->run_hooks('datahandler_user_delete_content', $this); - - if(empty($this->delete_uids)) - { - return; - } - - $db->delete_query('userfields', "ufid IN({$this->delete_uids})"); - $db->delete_query('privatemessages', "uid IN({$this->delete_uids})"); - $db->delete_query('events', "uid IN({$this->delete_uids})"); - $db->delete_query('moderators', "id IN({$this->delete_uids}) AND isgroup = 0"); - $db->delete_query('forumsubscriptions', "uid IN({$this->delete_uids})"); - $db->delete_query('threadsubscriptions', "uid IN({$this->delete_uids})"); - $db->delete_query('forumsread', "uid IN({$this->delete_uids})"); - $db->delete_query('threadsread', "uid IN({$this->delete_uids})"); - $db->delete_query('adminviews', "uid IN({$this->delete_uids})"); - $db->delete_query('adminoptions', "uid IN({$this->delete_uids})"); - $db->delete_query('adminsessions', "uid IN({$this->delete_uids})"); - $db->delete_query('sessions', "uid IN({$this->delete_uids})"); - $db->delete_query('banned', "uid IN({$this->delete_uids})"); - $db->delete_query('joinrequests', "uid IN({$this->delete_uids})"); - $db->delete_query('groupleaders', "uid IN({$this->delete_uids})"); - $db->delete_query('awaitingactivation', "uid IN({$this->delete_uids})"); - $db->delete_query('warnings', "uid IN({$this->delete_uids})"); - $db->delete_query('reputation', "uid IN({$this->delete_uids}) OR adduid IN({$this->delete_uids})"); - $db->delete_query('buddyrequests', "uid IN({$this->delete_uids}) OR touid IN({$this->delete_uids})"); - $db->delete_query('posts', "uid IN({$this->delete_uids}) AND visible = -2"); - $db->delete_query('threads', "uid IN({$this->delete_uids}) AND visible = -2"); - - // Delete reports made to the profile or reputation of the deleted users (i.e. made by them) - $db->delete_query('reportedcontent', "type='reputation' AND id3 IN({$this->delete_uids}) OR type='reputation' AND id2 IN({$this->delete_uids})"); - $db->delete_query('reportedcontent', "type='profile' AND id IN({$this->delete_uids})"); - - // Update the reports made by the deleted users by setting the uid to 0 - $db->update_query('reportedcontent', array('uid' => 0), "uid IN({$this->delete_uids})"); - - // Remove any of the user(s) uploaded avatars - require_once MYBB_ROOT.'inc/functions_upload.php'; - foreach(explode(',', $this->delete_uids) as $uid) - { - remove_avatars($uid); - } - } - - /** - * Provides a method to delete an users posts and threads - * - * @param array|bool $delete_uids Array of user ids, false if they're already set (eg when using the delete_user function) - */ - function delete_posts($delete_uids=false) - { - global $db, $plugins, $mybb; - - if($delete_uids != false) - { - $this->delete_uids = array_map('intval', (array)$delete_uids); - - foreach($this->delete_uids as $key => $uid) - { - if(!$uid || is_super_admin($uid) || $uid == $mybb->user['uid']) - { - // Remove super admins - unset($this->delete_uids[$key]); - } - } - - $this->delete_uids = implode(',', $this->delete_uids); - } - - require_once MYBB_ROOT.'inc/class_moderation.php'; - $moderation = new Moderation(); - - $plugins->run_hooks('datahandler_user_delete_posts', $this); - - if(empty($this->delete_uids)) - { - return; - } - - // Threads - $query = $db->simple_select('threads', 'tid', "uid IN({$this->delete_uids})"); - while($tid = $db->fetch_field($query, 'tid')) - { - $moderation->delete_thread($tid); - } - - // Posts - $query = $db->simple_select('posts', 'pid', "uid IN({$this->delete_uids})"); - while($pid = $db->fetch_field($query, 'pid')) - { - $moderation->delete_post($pid); - } - } - - /** - * Provides a method to clear an users profile - * - * @param array|bool $delete_uids Array of user ids, false if they're already set (eg when using the delete_user function) - * @param int $gid The new usergroup if the users should be moved (additional usergroups are always removed) - */ - function clear_profile($delete_uids=false, $gid=0) - { - global $db, $plugins, $mybb; - - // delete_uids isn't a nice name, but it's used as the functions above use the same - if($delete_uids != false) - { - $this->delete_uids = array_map('intval', (array)$delete_uids); - - foreach($this->delete_uids as $key => $uid) - { - if(!$uid || is_super_admin($uid) || $uid == $mybb->user['uid']) - { - // Remove super admins - unset($this->delete_uids[$key]); - } - } - - $this->delete_uids = implode(',', $this->delete_uids); - } - - $update = array( - "website" => "", - "birthday" => "", - "icq" => "", - "aim" => "", - "yahoo" => "", - "skype" => "", - "google" => "", - "usertitle" => "", - "away" => 0, - "awaydate" => 0, - "returndate" => "", - "awayreason" => "", - "additionalgroups" => "", - "displaygroup" => 0, - "signature" => "", - "avatar" => "", - 'avatardimensions' => '', - 'avatartype' => '' - ); - - if($gid > 0) - { - $update["usergroup"] = (int)$gid; - } - - $plugins->run_hooks('datahandler_user_clear_profile', $this); - - if(empty($this->delete_uids)) - { - return; - } - - $db->update_query("users", $update, "uid IN({$this->delete_uids})"); - $db->delete_query('userfields', "ufid IN({$this->delete_uids})"); - - // Remove any of the user(s) uploaded avatars - require_once MYBB_ROOT.'inc/functions_upload.php'; - foreach(explode(',', $this->delete_uids) as $uid) - { - remove_avatars($uid); - } - } - - public function verify_signature() - { - global $mybb, $parser; - - if(!isset($parser)) - { - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - } - - $parser_options = array( - 'allow_html' => $mybb->settings['sightml'], - 'filter_badwords' => 1, - 'allow_mycode' => $mybb->settings['sigmycode'], - 'allow_smilies' => $mybb->settings['sigsmilies'], - 'allow_imgcode' => $mybb->settings['sigimgcode'], - "filter_badwords" => 1 - ); - - $parsed_sig = $parser->parse_message($this->data['signature'], $parser_options); - - if((($mybb->settings['sigimgcode'] == 0 && $mybb->settings['sigsmilies'] != 1) && - substr_count($parsed_sig, " 0) || - (($mybb->settings['sigimgcode'] == 1 || $mybb->settings['sigsmilies'] == 1) && - substr_count($parsed_sig, " $mybb->settings['maxsigimages']) - ) - { - $imgsallowed = 0; - - if($mybb->settings['sigimgcode'] == 1) - { - $imgsallowed = $mybb->settings['maxsigimages']; - } - - $this->set_error('too_many_sig_images2', array($imgsallowed)); - } - - if($mybb->settings['sigcountmycode'] == 0) - { - $parsed_sig = $parser->text_parse_message($this->data['signature']); - } - else - { - $parsed_sig = $this->data['signature']; - } - - $parsed_sig = preg_replace("#\s#", "", $parsed_sig); - $sig_length = my_strlen($parsed_sig); - - if($sig_length > $mybb->settings['siglength']) - { - $this->set_error('sig_too_long', array($mybb->settings['siglength'])); - - if($sig_length - $mybb->settings['siglength'] > 1) - { - $this->set_error('sig_remove_chars_plural', array($sig_length-$mybb->settings['siglength'])); - } - else - { - $this->set_error('sig_remove_chars_singular'); - } - } - - if(count($this->get_errors()) > 0) - { - return false; - } - return true; - } -} diff --git a/html/forums/inc/datahandlers/warnings.php b/html/forums/inc/datahandlers/warnings.php deleted file mode 100644 index 97d9a85..0000000 --- a/html/forums/inc/datahandlers/warnings.php +++ /dev/null @@ -1,741 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * Login handling class, provides common structure to handle login events. - * - */ -class WarningsHandler extends DataHandler -{ - /** - * The language file used in the data handler. - * - * @var string - */ - public $language_file = 'datahandler_warnings'; - - /** - * The prefix for the language variables used in the data handler. - * - * @var string - */ - public $language_prefix = 'warnings'; - - /** - * The stored data for the warning being written. - * - * @var array - */ - public $write_warning_data = array(); - - /** - * The stored data for the warning being retrieved. - * - * @var array - */ - private $read_warning_data = array(); - - /** - * Friendly redirect action after inserting a new warning. - * - * @var string - */ - public $friendly_action = ''; - - /** - * Validate a warning user assets. - * - * @return boolean True when valid, false when invalid. - */ - function validate_user() - { - global $mybb; - - $warning = &$this->data; - - $user = get_user($warning['uid']); - - if(!$user['uid']) - { - $this->set_error('error_invalid_user'); - return false; - } - - if($user['uid'] == $mybb->user['uid']) - { - $this->set_error('error_cannot_warn_self'); - return false; - } - - if($user['warningpoints'] >= $mybb->settings['maxwarningpoints']) - { - $this->set_error('error_user_reached_max_warning'); - return false; - } - - return true; - } - - /** - * Validate a warning post. - * - * @return boolean True when valid, false when invalid. - */ - function validate_post() - { - $warning = &$this->data; - - $post = get_post($warning['pid']); - - if(!$post['pid']) - { - $this->set_error('error_invalid_post'); - return false; - } - - return true; - } - - /** - * Validate a warning notes. - * - * @return boolean True when valid, false when invalid. - */ - function validate_notes() - { - $warning = &$this->data; - - if(!trim($warning['notes'])) - { - $this->set_error('error_no_note'); - return false; - } - - return true; - } - - /** - * Validate maximum warnings per day for current user. - * - * @return boolean True when valid, false when invalid. - */ - function validate_maximum() - { - global $mybb, $db, $lang; - - if($mybb->usergroup['maxwarningsday'] != 0) - { - $timecut = TIME_NOW-60*60*24; - $query = $db->simple_select("warnings", "COUNT(wid) AS given_today", "issuedby='{$mybb->user['uid']}' AND dateline>'$timecut'"); - $given_today = $db->fetch_field($query, "given_today"); - if($given_today >= $mybb->usergroup['maxwarningsday']) - { - $this->set_error('reached_max_warnings_day', array(my_number_format($mybb->usergroup['maxwarningsday']))); - return false; - } - } - - return true; - } - - /** - * Validate warnings type. - * - * @return boolean True when valid, false when invalid. - */ - function validate_type() - { - global $mybb, $db; - - $warning = &$this->data; - - // Issuing a custom warning - if($warning['type'] == 'custom') - { - if($mybb->settings['allowcustomwarnings'] == 0) - { - $this->set_error('error_cant_custom_warn'); - return false; - } - - if(!$warning['custom_reason']) - { - $this->set_error('error_no_custom_reason'); - return false; - } - - $warning['title'] = $warning['custom_reason']; - - if(!$warning['custom_points'] || $warning['custom_points'] > $mybb->settings['maxwarningpoints'] || $warning['custom_points'] < 0) - { - $this->set_error('error_invalid_custom_points', array(my_number_format($mybb->settings['maxwarningpoints']))); - return false; - } - - $warning['points'] = round($warning['custom_points']); - - // Build expiry date - if($warning['expires_period'] == "hours") - { - $warning['expires'] = $warning['expires']*3600 + TIME_NOW; - } - else if($warning['expires_period'] == "days") - { - $warning['expires'] = $warning['expires']*86400 + TIME_NOW; - } - else if($warning['expires_period'] == "weeks") - { - $warning['expires'] = $warning['expires']*604800 + TIME_NOW; - } - else if($warning['expires_period'] == "months") - { - $warning['expires'] = $warning['expires']*2592000 + TIME_NOW; - } - else if($warning['expires_period'] == "never") - { - $warning['expires'] = 0; - } - else - { - // unkown expires_period - $this->set_error('error_invalid_expires_period'); - return false; - } - } - // Using a predefined warning type - else - { - $query = $db->simple_select("warningtypes", "*", "tid='".(int)$warning['type']."'"); - $this->warning_type = $db->fetch_array($query); - - if(!$this->warning_type) - { - $this->set_error('error_invalid_type'); - return false; - } - - $warning['points'] = $this->warning_type['points']; - $warning['title'] = ''; - $warning['expires'] = 0; - - if($this->warning_type['expirationtime']) - { - $warning['expires'] = TIME_NOW+$this->warning_type['expirationtime']; - } - } - - return true; - } - - /** - * Validate a warning. - * - * @return boolean True when valid, false when invalid. - */ - function validate_warning() - { - global $plugins; - - $warning = &$this->data; - - // Verify all warning assets. - $this->validate_user(); - $this->validate_maximum(); - $this->validate_notes(); - - if(array_key_exists('pid', $warning)) - { - $this->validate_post(); - } - if(array_key_exists('type', $warning)) - { - $this->validate_type(); - } - - $plugins->run_hooks("datahandler_warnings_validate_warning", $this); - - // We are done validating, return. - $this->set_validated(true); - - if(count($this->get_errors()) > 0) - { - return false; - } - - return true; - } - - /** - * Gets a valid warning from the DB engine. - * - * @param int $wid - * @return array|bool array when valid, boolean false when invalid. - */ - function get($wid) - { - global $db; - - $wid = (int)$wid; - if($wid <= 0) - { - return false; - } - - $query = $db->simple_select("warnings", "*", "wid='".$wid."'"); - $this->read_warning_data = $db->fetch_array($query); - - if(!$this->read_warning_data['wid']) - { - return false; - } - - return $this->read_warning_data; - } - - /** - * Expire old warnings in the database. - * - * @return boolean True when finished. - */ - function expire_warnings() - { - global $db; - - $users = array(); - - $query = $db->query(" - SELECT w.wid, w.uid, w.points, u.warningpoints - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.uid) - WHERE expires<".TIME_NOW." AND expires!=0 AND expired!=1 - "); - while($warning = $db->fetch_array($query)) - { - $updated_warning = array( - "expired" => 1 - ); - $db->update_query("warnings", $updated_warning, "wid='{$warning['wid']}'"); - - if(array_key_exists($warning['uid'], $users)) - { - $users[$warning['uid']] -= $warning['points']; - } - else - { - $users[$warning['uid']] = $warning['warningpoints']-$warning['points']; - } - } - - foreach($users as $uid => $warningpoints) - { - if($warningpoints < 0) - { - $warningpoints = 0; - } - - $updated_user = array( - "warningpoints" => (int)$warningpoints - ); - $db->update_query("users", $updated_user, "uid='".(int)$uid."'"); - } - - return true; - } - - /** - * Updates an user warning details. - * - * @return array Updated user details. - */ - function update_user($method='insert') - { - global $db, $mybb, $lang, $cache, $groupscache; - - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - - if(!is_array($groupscache)) - { - $groupscache = $cache->read("usergroups"); - } - - $warning = &$this->data; - - $user = get_user($warning['uid']); - - if($method == 'insert') - { - // Build warning level & ensure it doesn't go over 100. - $current_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100); - $this->new_warning_level = round(($user['warningpoints']+$warning['points'])/$mybb->settings['maxwarningpoints']*100); - if($this->new_warning_level > 100) - { - $this->new_warning_level = 100; - } - - // Update user - $this->updated_user = array( - "warningpoints" => $user['warningpoints']+$warning['points'] - ); - - // Fetch warning level - $query = $db->simple_select("warninglevels", "*", "percentage<={$this->new_warning_level}", array("order_by" => "percentage", "order_dir" => "desc")); - $new_level = $db->fetch_array($query); - - if($new_level['lid']) - { - $expiration = 0; - $action = my_unserialize($new_level['action']); - - if($action['length'] > 0) - { - $expiration = TIME_NOW+$action['length']; - } - - switch($action['type']) - { - // Ban the user for a specified time - case 1: - // Fetch any previous bans for this user - $query = $db->simple_select("banned", "*", "uid='{$user['uid']}' AND gid='{$action['usergroup']}' AND lifted>".TIME_NOW); - $existing_ban = $db->fetch_array($query); - - // Only perform if no previous ban or new ban expires later than existing ban - if(($expiration > $existing_ban['lifted'] && $existing_ban['lifted'] != 0) || $expiration == 0 || !$existing_ban['uid']) - { - if(!$warning['title']) - { - $warning['title'] = $this->warning_type['title']; - } - - // Never lift the ban? - if($action['length'] <= 0) - { - $bantime = '---'; - } - else - { - $bantimes = fetch_ban_times(); - foreach($bantimes as $date => $string) - { - if($date == '---') - { - continue; - } - - $time = 0; - list($day, $month, $year) = explode('-', $date); - if($day > 0) - { - $time += 60*60*24*$day; - } - - if($month > 0) - { - $time += 60*60*24*30*$month; - } - - if($year > 0) - { - $time += 60*60*24*365*$year; - } - - if($time == $action['length']) - { - $bantime = $date; - break; - } - } - } - - $new_ban = array( - "uid" => $user['uid'], - "gid" => $action['usergroup'], - "oldgroup" => $user['usergroup'], - "oldadditionalgroups" => $user['additionalgroups'], - "olddisplaygroup" => $user['displaygroup'], - "admin" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "bantime" => $db->escape_string($bantime), - "lifted" => $expiration, - "reason" => $db->escape_string($warning['title']) - ); - // Delete old ban for this user, taking details - if($existing_ban['uid']) - { - $db->delete_query("banned", "uid='{$user['uid']}' AND gid='{$action['usergroup']}'"); - // Override new ban details with old group info - $new_ban['oldgroup'] = $existing_ban['oldgroup']; - $new_ban['oldadditionalgroups'] = $existing_ban['oldadditionalgroups']; - $new_ban['olddisplaygroup'] = $existing_ban['olddisplaygroup']; - } - - $period = $lang->expiration_never; - $ban_length = fetch_friendly_expiration($action['length']); - - if($ban_length['time']) - { - $lang_str = "expiration_".$ban_length['period']; - $period = $lang->sprintf($lang->result_period, $ban_length['time'], $lang->$lang_str); - } - - $group_name = $groupscache[$action['usergroup']]['title']; - $this->friendly_action = $lang->sprintf($lang->redirect_warned_banned, $group_name, $period); - - $db->insert_query("banned", $new_ban); - $this->updated_user['usergroup'] = $action['usergroup']; - $this->updated_user['additionalgroups'] = ''; - $this->updated_user['displaygroup'] = 0; - } - break; - // Suspend posting privileges - case 2: - // Only perform if the expiration time is greater than the users current suspension period - if($expiration == 0 || $expiration > $user['suspensiontime']) - { - if(($user['suspensiontime'] != 0 && $user['suspendposting']) || !$user['suspendposting']) - { - $period = $lang->expiration_never; - $ban_length = fetch_friendly_expiration($action['length']); - - if($ban_length['time']) - { - $lang_str = "expiration_".$ban_length['period']; - $period = $lang->sprintf($lang->result_period, $ban_length['time'], $lang->$lang_str); - } - - $this->friendly_action = $lang->sprintf($lang->redirect_warned_suspended, $period); - - $this->updated_user['suspensiontime'] = $expiration; - $this->updated_user['suspendposting'] = 1; - } - } - break; - // Moderate new posts - case 3: - // Only perform if the expiration time is greater than the users current suspension period - if($expiration == 0 || $expiration > $user['moderationtime']) - { - if(($user['moderationtime'] != 0 && $user['moderateposts']) || !$user['suspendposting']) - { - $period = $lang->expiration_never; - $ban_length = fetch_friendly_expiration($action['length']); - - if($ban_length['time']) - { - $lang_str = "expiration_".$ban_length['period']; - $period = $lang->sprintf($lang->result_period, $ban_length['time'], $lang->$lang_str); - } - - $this->friendly_action = $lang->sprintf($lang->redirect_warned_moderate, $period); - - $this->updated_user['moderationtime'] = $expiration; - $this->updated_user['moderateposts'] = 1; - } - } - break; - } - } - } - else - { - // Warning is still active, lower users point count - if($warning['expired'] != 1) - { - $new_warning_points = $user['warningpoints']-$warning['points']; - if($new_warning_points < 0) - { - $new_warning_points = 0; - } - - $this->updated_user = array( - "warningpoints" => $new_warning_points - ); - - - // check if we need to revoke any consequences with this warning - $current_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100); - $this->new_warning_level = round($new_warning_points/$mybb->settings['maxwarningpoints']*100); - $query = $db->simple_select("warninglevels", "action", "percentage>{$this->new_warning_level} AND percentage<=$current_level"); - if($db->num_rows($query)) - { - // we have some warning levels we need to revoke - $max_expiration_times = $check_levels = array(); - find_warnlevels_to_check($query, $max_expiration_times, $check_levels); - - // now check warning levels already applied to this user to see if we need to lower any expiration times - $query = $db->simple_select("warninglevels", "action", "percentage<={$this->new_warning_level}"); - $lower_expiration_times = $lower_levels = array(); - find_warnlevels_to_check($query, $lower_expiration_times, $lower_levels); - - // now that we've got all the info, do necessary stuff - for($i = 1; $i <= 3; ++$i) - { - if($check_levels[$i]) - { - switch($i) - { - case 1: // Ban - // we'll have to resort to letting the admin/mod remove the ban manually, since there's an issue if stacked bans are in force... - continue; - case 2: // Revoke posting - $current_expiry_field = 'suspensiontime'; - $current_inforce_field = 'suspendposting'; - break; - case 3: - $current_expiry_field = 'moderationtime'; - $current_inforce_field = 'moderateposts'; - break; - } - - // if the thing isn't in force, don't bother with trying to update anything - if(!$user[$current_inforce_field]) - { - continue; - } - - if($lower_levels[$i]) - { - // lessen the expiration time if necessary - - if(!$lower_expiration_times[$i]) - { - // doesn't expire - enforce this - $this->updated_user[$current_expiry_field] = 0; - continue; - } - - if($max_expiration_times[$i]) - { - // if the old level did have an expiry time... - if($max_expiration_times[$i] <= $lower_expiration_times[$i]) - { - // if the lower expiration time is actually higher than the upper expiration time -> skip - continue; - } - // both new and old max expiry times aren't infinite, so we can take a difference - $expire_offset = ($lower_expiration_times[$i] - $max_expiration_times[$i]); - } - else - { - // the old level never expired, not much we can do but try to estimate a new expiry time... which will just happen to be starting from today... - $expire_offset = TIME_NOW + $lower_expiration_times[$i]; - // if the user's expiry time is already less than what we're going to set it to, skip - if($user[$current_expiry_field] <= $expire_offset) - { - continue; - } - } - - $this->updated_user[$current_expiry_field] = $user[$current_expiry_field] + $expire_offset; - // double-check if it's expired already - if($this->updated_user[$current_expiry_field] < TIME_NOW) - { - $this->updated_user[$current_expiry_field] = 0; - $this->updated_user[$current_inforce_field] = 0; - } - } - else - { - // there's no lower level for this type - remove the consequence entirely - $this->updated_user[$current_expiry_field] = 0; - $this->updated_user[$current_inforce_field] = 0; - } - } - } - } - } - } - - // Save updated details - $db->update_query("users", $this->updated_user, "uid='{$user['uid']}'"); - - $mybb->cache->update_moderators(); - - return $this->updated_user; - } - - /** - * Inserts a warning into the database - * - * @return array Warning database details. - */ - function insert_warning() - { - global $db, $mybb, $plugins; - - $warning = &$this->data; - - $this->write_warning_data = array( - "uid" => (int)$warning['uid'], - "tid" => (int)$warning['type'], - "pid" => (int)$warning['pid'], - "title" => $db->escape_string($warning['title']), - "points" => (int)$warning['points'], - "dateline" => TIME_NOW, - "issuedby" => $mybb->user['uid'], - "expires" => (int)$warning['expires'], - "expired" => 0, - "revokereason" => '', - "notes" => $db->escape_string($warning['notes']) - ); - - $this->write_warning_data['wid'] = $db->insert_query("warnings", $this->write_warning_data); - - $this->update_user(); - - $plugins->run_hooks("datahandler_warnings_insert_warning", $this); - - return $this->write_warning_data; - } - - /** - * Updates a warning in the database - * - * @return array Warning database details. - */ - function update_warning() - { - global $db, $mybb, $plugins; - - $warning = &$this->data; - - $warning['wid'] = (int)$warning['wid']; - if($warning['wid'] <= 0) - { - return false; - } - - $this->write_warning_data = array( - "expired" => 1, - "daterevoked" => TIME_NOW, - "revokedby" => $mybb->user['uid'], - "revokereason" => $db->escape_string($warning['reason']) - ); - - $plugins->run_hooks("datahandler_warnings_update_warning", $this); - - $db->update_query("warnings", $this->write_warning_data, "wid='{$warning['wid']}'"); - - $this->update_user('update'); - - return $this->write_warning_data; - } - -} - diff --git a/html/forums/inc/db_base.php b/html/forums/inc/db_base.php deleted file mode 100644 index 29d4122..0000000 --- a/html/forums/inc/db_base.php +++ /dev/null @@ -1,449 +0,0 @@ - write; 0 => read - * - * @var int - */ - - protected $last_query_type = 0; - - /** - * Connect to the database server. - * - * @param array $config Array of DBMS connection details. - * @return resource The DB connection resource. Returns false on fail or -1 on a db connect failure. - */ - function connect($config) - { - // Simple connection to one server - if(array_key_exists('hostname', $config)) - { - $connections['read'][] = $config; - } - // Connecting to more than one server - else - { - // Specified multiple servers, but no specific read/write servers - if(!array_key_exists('read', $config)) - { - foreach($config as $key => $settings) - { - if(is_int($key)) - { - $connections['read'][] = $settings; - } - } - } - // Specified both read & write servers - else - { - $connections = $config; - } - } - - $this->db_encoding = $config['encoding']; - - // Actually connect to the specified servers - foreach(array('read', 'write') as $type) - { - if(!isset($connections[$type]) || !is_array($connections[$type])) - { - break; - } - - if(array_key_exists('hostname', $connections[$type])) - { - $details = $connections[$type]; - unset($connections); - $connections[$type][] = $details; - } - - // Shuffle the connections - shuffle($connections[$type]); - - // Loop-de-loop - foreach($connections[$type] as $single_connection) - { - $connect_function = "mysql_connect"; - if(isset($single_connection['pconnect'])) - { - $connect_function = "mysql_pconnect"; - } - - $link = "{$type}_link"; - - get_execution_time(); - - $this->$link = @$connect_function($single_connection['hostname'], $single_connection['username'], $single_connection['password'], 1); - - $time_spent = get_execution_time(); - $this->query_time += $time_spent; - - // Successful connection? break down brother! - if($this->$link) - { - $this->connections[] = "[".strtoupper($type)."] {$single_connection['username']}@{$single_connection['hostname']} (Connected in ".format_time_duration($time_spent).")"; - break; - } - else - { - $this->connections[] = "[FAILED] [".strtoupper($type)."] {$single_connection['username']}@{$single_connection['hostname']}"; - } - } - } - - // No write server was specified (simple connection or just multiple servers) - mirror write link - if(!array_key_exists('write', $connections)) - { - $this->write_link = &$this->read_link; - } - - // Have no read connection? - if(!$this->read_link) - { - $this->error("[READ] Unable to connect to MySQL server"); - return false; - } - // No write? - else if(!$this->write_link) - { - $this->error("[WRITE] Unable to connect to MySQL server"); - return false; - } - - // Select databases - if(!$this->select_db($config['database'])) - { - return -1; - } - - $this->current_link = &$this->read_link; - return $this->read_link; - } - - /** - * Selects the database to use. - * - * @param string $database The database name. - * @return boolean True when successfully connected, false if not. - */ - function select_db($database) - { - $this->database = $database; - - $this->current_link = &$this->read_link; - $read_success = @mysql_select_db($database, $this->read_link) or $this->error("[READ] Unable to select database", $this->read_link); - if($this->write_link) - { - $this->current_link = &$this->write_link; - $write_success = @mysql_select_db($database, $this->write_link) or $this->error("[WRITE] Unable to select database", $this->write_link); - $success = ($read_success && $write_success ? true : false); - } - else - { - $success = $read_success; - } - - if($success && $this->db_encoding) - { - // A little magic to support PHP 5.2.0, 5.2.1 and 5.2.2 - if(version_compare(PHP_VERSION, '5.2.3', '>=')) { - @mysql_set_charset($this->db_encoding, $this->read_link); - } - else - { - $this->query("SET NAMES '{$this->db_encoding}'"); - } - - if($write_success && count($this->connections) > 1) - { - if(version_compare(PHP_VERSION, '5.2.3', '>=')) { - @mysql_set_charset($this->db_encoding, $this->write_link); - } - else - { - $this->write_query("SET NAMES '{$this->db_encoding}'"); - } - } - } - return $success; - } - - /** - * Query the database. - * - * @param string $string The query SQL. - * @param integer $hide_errors 1 if hide errors, 0 if not. - * @param integer $write_query 1 if executes on master database, 0 if not. - * @return resource The query data. - */ - function query($string, $hide_errors=0, $write_query=0) - { - global $mybb; - - get_execution_time(); - - // Only execute write queries on master database - if(($write_query || $this->last_query_type) && $this->write_link) - { - $this->current_link = &$this->write_link; - $query = @mysql_query($string, $this->write_link); - } - else - { - $this->current_link = &$this->read_link; - $query = @mysql_query($string, $this->read_link); - } - - if($this->error_number() && !$hide_errors) - { - $this->error($string); - exit; - } - - if($write_query) - { - $this->last_query_type = 1; - } - else - { - $this->last_query_type = 0; - } - - $query_time = get_execution_time(); - $this->query_time += $query_time; - $this->query_count++; - - if($mybb->debug_mode) - { - $this->explain_query($string, $query_time); - } - - return $query; - } - - /** - * Execute a write query on the master database - * - * @param string $query The query SQL. - * @param boolean|int $hide_errors 1 if hide errors, 0 if not. - * @return resource The query data. - */ - function write_query($query, $hide_errors=0) - { - return $this->query($query, $hide_errors, 1); - } - - /** - * Explain a query on the database. - * - * @param string $string The query SQL. - * @param string $qtime The time it took to perform the query. - */ - function explain_query($string, $qtime) - { - global $plugins; - - $debug_extra = ''; - if($plugins->current_hook) - { - $debug_extra = "
    (Plugin Hook: {$plugins->current_hook})
    "; - } - if(preg_match("#^\s*select#i", $string)) - { - $query = mysql_query("EXPLAIN $string", $this->current_link); - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n"; - - while($table = mysql_fetch_array($query)) - { - $this->explain .= - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n"; - } - $this->explain .= - "\n". - "\n". - "\n". - "
    {$debug_extra}
    #".$this->query_count." - Select Query
    ".htmlspecialchars_uni($string)."
    TableTypePossible KeysKeyKey LengthRefRowsExtra
    ".$table['table']."".$table['type']."".$table['possible_keys']."".$table['key']."".$table['key_len']."".$table['ref']."".$table['rows']."".$table['Extra']."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - else - { - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "
    {$debug_extra}
    #".$this->query_count." - Write Query
    ".htmlspecialchars_uni($string)."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - - $this->querylist[$this->query_count]['query'] = $string; - $this->querylist[$this->query_count]['time'] = $qtime; - } - - /** - * Return a result array for a query. - * - * @param resource $query The query ID. - * @param int $resulttype The type of array to return. Either MYSQL_NUM, MYSQL_BOTH or MYSQL_ASSOC - * @return array The array of results. - */ - function fetch_array($query, $resulttype=MYSQL_ASSOC) - { - switch($resulttype) - { - case MYSQL_NUM: - case MYSQL_BOTH: - break; - default: - $resulttype = MYSQL_ASSOC; - break; - } - - $array = mysql_fetch_array($query, $resulttype); - - return $array; - } - - /** - * Return a specific field from a query. - * - * @param resource $query The query ID. - * @param string $field The name of the field to return. - * @param int|bool $row The number of the row to fetch it from. - * @return mixed - */ - function fetch_field($query, $field, $row=false) - { - if($row === false) - { - $array = $this->fetch_array($query); - return $array[$field]; - } - else - { - return mysql_result($query, $row, $field); - } - } - - /** - * Moves internal row pointer to the next row - * - * @param resource $query The query ID. - * @param int $row The pointer to move the row to. - * @return bool - */ - function data_seek($query, $row) - { - return mysql_data_seek($query, $row); - } - - /** - * Return the number of rows resulting from a query. - * - * @param resource $query The query ID. - * @return int The number of rows in the result. - */ - function num_rows($query) - { - return mysql_num_rows($query); - } - - /** - * Return the last id number of inserted data. - * - * @return int The id number. - */ - function insert_id() - { - return mysql_insert_id($this->current_link); - } - - /** - * Close the connection with the DBMS. - * - */ - function close() - { - @mysql_close($this->read_link); - if($this->write_link) - { - @mysql_close($this->write_link); - } - } - - /** - * Return an error number. - * - * @return int The error number of the current error. - */ - function error_number() - { - if($this->current_link) - { - return @mysql_errno($this->current_link); - } - else - { - return @mysql_errno(); - } - } - - /** - * Return an error string. - * - * @return string The explanation for the current error. - */ - function error_string() - { - if($this->current_link) - { - return @mysql_error($this->current_link); - } - else - { - return @mysql_error(); - } - } - - /** - * Output a database error. - * - * @param string $string The string to present as an error. - * @return bool Returns false if error reporting is disabled, otherwise true - */ - function error($string="") - { - if($this->error_reporting) - { - if(class_exists("errorHandler")) - { - global $error_handler; - - if(!is_object($error_handler)) - { - require_once MYBB_ROOT."inc/class_error.php"; - $error_handler = new errorHandler(); - } - - $error = array( - "error_no" => $this->error_number(), - "error" => $this->error_string(), - "query" => $string - ); - $error_handler->error(MYBB_SQL, $error); - } - else - { - trigger_error("[SQL] [".$this->error_number()."] ".$this->error_string()."
    {$string}", E_USER_ERROR); - } - - return true; - } - else - { - return false; - } - } - - /** - * Returns the number of affected rows in a query. - * - * @return int The number of affected rows. - */ - function affected_rows() - { - return mysql_affected_rows($this->current_link); - } - - /** - * Return the number of fields. - * - * @param resource $query The query ID. - * @return int The number of fields. - */ - function num_fields($query) - { - return mysql_num_fields($query); - } - - /** - * Lists all tables in the database. - * - * @param string $database The database name. - * @param string $prefix Prefix of the table (optional) - * @return array The table list. - */ - function list_tables($database, $prefix='') - { - if($prefix) - { - if(version_compare($this->get_version(), '5.0.2', '>=')) - { - $query = $this->query("SHOW FULL TABLES FROM `$database` WHERE table_type = 'BASE TABLE' AND `Tables_in_$database` LIKE '".$this->escape_string($prefix)."%'"); - } - else - { - $query = $this->query("SHOW TABLES FROM `$database` LIKE '".$this->escape_string($prefix)."%'"); - } - } - else - { - if(version_compare($this->get_version(), '5.0.2', '>=')) - { - $query = $this->query("SHOW FULL TABLES FROM `$database` WHERE table_type = 'BASE TABLE'"); - } - else - { - $query = $this->query("SHOW TABLES FROM `$database`"); - } - } - - $tables = array(); - while(list($table) = mysql_fetch_array($query)) - { - $tables[] = $table; - } - - return $tables; - } - - /** - * Check if a table exists in a database. - * - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function table_exists($table) - { - // Execute on master server to ensure if we've just created a table that we get the correct result - if(version_compare($this->get_version(), '5.0.2', '>=')) - { - $query = $this->query("SHOW FULL TABLES FROM `".$this->database."` WHERE table_type = 'BASE TABLE' AND `Tables_in_".$this->database."` = '{$this->table_prefix}$table'"); - } - else - { - $query = $this->query("SHOW TABLES LIKE '{$this->table_prefix}$table'"); - } - - $exists = $this->num_rows($query); - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Check if a field exists in a database. - * - * @param string $field The field name. - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function field_exists($field, $table) - { - $query = $this->write_query(" - SHOW COLUMNS - FROM {$this->table_prefix}$table - LIKE '$field' - "); - $exists = $this->num_rows($query); - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Add a shutdown query. - * - * @param resource $query The query data. - * @param string $name An optional name for the query. - */ - function shutdown_query($query, $name="") - { - global $shutdown_queries; - if($name) - { - $shutdown_queries[$name] = $query; - } - else - { - $shutdown_queries[] = $query; - } - } - /** - * Performs a simple select query. - * - * @param string $table The table name to be queried. - * @param string $fields Comma delimetered list of fields to be selected. - * @param string $conditions SQL formatted list of conditions to be matched. - * @param array $options List of options: group by, order by, order direction, limit, limit start. - * @return resource The query data. - */ - function simple_select($table, $fields="*", $conditions="", $options=array()) - { - $query = "SELECT ".$fields." FROM {$this->table_prefix}{$table}"; - if($conditions != "") - { - $query .= " WHERE ".$conditions; - } - - if(isset($options['group_by'])) - { - $query .= " GROUP BY ".$options['group_by']; - } - - if(isset($options['order_by'])) - { - $query .= " ORDER BY ".$options['order_by']; - if(isset($options['order_dir'])) - { - $query .= " ".my_strtoupper($options['order_dir']); - } - } - - if(isset($options['limit_start']) && isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit_start'].", ".$options['limit']; - } - elseif(isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit']; - } - - return $this->query($query); - } - - /** - * Build an insert query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @return int The insert ID if available - */ - function insert_query($table, $array) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $array[$field] = $value; - } - else - { - $array[$field] = $this->quote_val($value); - } - } - - $fields = "`".implode("`,`", array_keys($array))."`"; - $values = implode(",", $array); - $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} (".$fields.") - VALUES (".$values.") - "); - return $this->insert_id(); - } - - /** - * Build one query for multiple inserts from a multidimensional array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of inserts. - * @return void - */ - function insert_query_multiple($table, $array) - { - global $mybb; - - if(!is_array($array)) - { - return; - } - - // Field names - $fields = array_keys($array[0]); - $fields = "`".implode("`,`", $fields)."`"; - - $insert_rows = array(); - foreach($array as $values) - { - foreach($values as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $values[$field] = $value; - } - else - { - $values[$field] = $this->quote_val($value); - } - } - $insert_rows[] = "(".implode(",", $values).")"; - } - $insert_rows = implode(", ", $insert_rows); - - $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} ({$fields}) - VALUES {$insert_rows} - "); - } - - /** - * Build an update query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @param boolean $no_quote An option to quote incoming values of the array. - * @return resource The query data. - */ - function update_query($table, $array, $where="", $limit="", $no_quote=false) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - $comma = ""; - $query = ""; - $quote = "'"; - - if($no_quote == true) - { - $quote = ""; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $query .= $comma."`".$field."`={$value}"; - } - else - { - $quoted_val = $this->quote_val($value, $quote); - - $query .= $comma."`".$field."`={$quoted_val}"; - } - $comma = ', '; - } - - if(!empty($where)) - { - $query .= " WHERE $where"; - } - - if(!empty($limit)) - { - $query .= " LIMIT $limit"; - } - - return $this->write_query(" - UPDATE {$this->table_prefix}$table - SET $query - "); - } - - /** - * @param int|string $value - * @param string $quote - * - * @return int|string - */ - private function quote_val($value, $quote="'") - { - if(is_int($value)) - { - $quoted = $value; - } - else - { - $quoted = $quote . $value . $quote; - } - - return $quoted; - } - - /** - * Build a delete query. - * - * @param string $table The table name to perform the query on. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @return resource The query data. - */ - function delete_query($table, $where="", $limit="") - { - $query = ""; - if(!empty($where)) - { - $query .= " WHERE $where"; - } - - if(!empty($limit)) - { - $query .= " LIMIT $limit"; - } - - return $this->write_query(" - DELETE - FROM {$this->table_prefix}$table - $query - "); - } - - /** - * Escape a string according to the MySQL escape format. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string($string) - { - if($this->db_encoding == 'utf8') - { - $string = validate_utf8_string($string, false); - } - elseif($this->db_encoding == 'utf8mb4') - { - $string = validate_utf8_string($string); - } - - if(function_exists("mysql_real_escape_string") && $this->read_link) - { - $string = mysql_real_escape_string($string, $this->read_link); - } - else - { - $string = addslashes($string); - } - return $string; - } - - /** - * Frees the resources of a MySQLi query. - * - * @param resource $query The query to destroy. - * @return boolean Returns true on success, false on faliure - */ - function free_result($query) - { - return mysql_free_result($query); - } - - /** - * Escape a string used within a like command. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string_like($string) - { - return $this->escape_string(str_replace(array('%', '_') , array('\\%' , '\\_') , $string)); - } - - /** - * Gets the current version of MySQL. - * - * @return string Version of MySQL. - */ - function get_version() - { - if($this->version) - { - return $this->version; - } - - $query = $this->query("SELECT VERSION() as version"); - $ver = $this->fetch_array($query); - $version = $ver['version']; - - if($version) - { - $version = explode(".", $version, 3); - $this->version = (int)$version[0].".".(int)$version[1].".".(int)$version[2]; - } - return $this->version; - } - - /** - * Optimizes a specific table. - * - * @param string $table The name of the table to be optimized. - */ - function optimize_table($table) - { - $this->write_query("OPTIMIZE TABLE {$this->table_prefix}{$table}"); - } - - /** - * Analyzes a specific table. - * - * @param string $table The name of the table to be analyzed. - */ - function analyze_table($table) - { - $this->write_query("ANALYZE TABLE {$this->table_prefix}{$table}"); - } - - /** - * Show the "create table" command for a specific table. - * - * @param string $table The name of the table. - * @return string The MySQL command to create the specified table. - */ - function show_create_table($table) - { - $query = $this->write_query("SHOW CREATE TABLE {$this->table_prefix}{$table}"); - $structure = $this->fetch_array($query); - return $structure['Create Table']; - } - - /** - * Show the "show fields from" command for a specific table. - * - * @param string $table The name of the table. - * @return array Field info for that table - */ - function show_fields_from($table) - { - $query = $this->write_query("SHOW FIELDS FROM {$this->table_prefix}{$table}"); - $field_info = array(); - while($field = $this->fetch_array($query)) - { - $field_info[] = $field; - } - return $field_info; - } - - /** - * Returns whether or not the table contains a fulltext index. - * - * @param string $table The name of the table. - * @param string $index Optionally specify the name of the index. - * @return boolean True or false if the table has a fulltext index or not. - */ - function is_fulltext($table, $index="") - { - $structure = $this->show_create_table($table); - if($index != "") - { - if(preg_match("#FULLTEXT KEY (`?)$index(`?)#i", $structure)) - { - return true; - } - else - { - return false; - } - } - if(preg_match('#FULLTEXT KEY#i', $structure)) - { - return true; - } - return false; - } - - /** - * Returns whether or not this database engine supports fulltext indexing. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - - function supports_fulltext($table) - { - $version = $this->get_version(); - $query = $this->write_query("SHOW TABLE STATUS LIKE '{$this->table_prefix}$table'"); - $status = $this->fetch_array($query); - if($status['Engine']) - { - $table_type = my_strtoupper($status['Engine']); - } - else - { - $table_type = my_strtoupper($status['Type']); - } - if(version_compare($version, '3.23.23', '>=') && ($table_type == 'MYISAM' || $table_type == 'ARIA')) - { - return true; - } - elseif(version_compare($version, '5.6', '>=') && $table_type == 'INNODB') - { - return true; - } - return false; - } - - /** - * Checks to see if an index exists on a specified table - * - * @param string $table The name of the table. - * @param string $index The name of the index. - * @return bool Whether or not the index exists in that table - */ - function index_exists($table, $index) - { - $index_exists = false; - $query = $this->write_query("SHOW INDEX FROM {$this->table_prefix}{$table}"); - while($ukey = $this->fetch_array($query)) - { - if($ukey['Key_name'] == $index) - { - $index_exists = true; - break; - } - } - - if($index_exists) - { - return true; - } - - return false; - } - - /** - * Returns whether or not this database engine supports boolean fulltext matching. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - function supports_fulltext_boolean($table) - { - $version = $this->get_version(); - $supports_fulltext = $this->supports_fulltext($table); - if(version_compare($version, '4.0.1', '>=') && $supports_fulltext == true) - { - return true; - } - return false; - } - - /** - * Creates a fulltext index on the specified column in the specified table with optional index name. - * - * @param string $table The name of the table. - * @param string $column Name of the column to be indexed. - * @param string $name The index name, optional. - */ - function create_fulltext_index($table, $column, $name="") - { - $this->write_query(" - ALTER TABLE {$this->table_prefix}$table - ADD FULLTEXT $name ($column) - "); - } - - /** - * Drop an index with the specified name from the specified table - * - * @param string $table The name of the table. - * @param string $name The name of the index. - */ - function drop_index($table, $name) - { - $this->write_query(" - ALTER TABLE {$this->table_prefix}$table - DROP INDEX $name - "); - } - - /** - * Drop an table with the specified table - * - * @param string $table The table to drop - * @param boolean $hard hard drop - no checking - * @param boolean $table_prefix use table prefix - */ - function drop_table($table, $hard=false, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - if($hard == false) - { - $this->write_query('DROP TABLE IF EXISTS '.$table_prefix.$table); - } - else - { - $this->write_query('DROP TABLE '.$table_prefix.$table); - } - } - - /** - * Renames a table - * - * @param string $old_table The old table name - * @param string $new_table the new table name - * @param boolean $table_prefix use table prefix - * @return resource - */ - function rename_table($old_table, $new_table, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - return $this->write_query("RENAME TABLE {$table_prefix}{$old_table} TO {$table_prefix}{$new_table}"); - } - - /** - * Replace contents of table with values - * - * @param string $table The table - * @param array $replacements The replacements - * @return resource|bool - */ - function replace_query($table, $replacements=array()) - { - global $mybb; - - $values = ''; - $comma = ''; - foreach($replacements as $column => $value) - { - if(isset($mybb->binary_fields[$table][$column]) && $mybb->binary_fields[$table][$column]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $values .= $comma."`".$column."`=".$value; - } - else - { - $values .= $comma."`".$column."`=".$this->quote_val($value); - } - - $comma = ','; - } - - if(empty($replacements)) - { - return false; - } - - return $this->write_query("REPLACE INTO {$this->table_prefix}{$table} SET {$values}"); - } - - /** - * Drops a column - * - * @param string $table The table - * @param string $column The column name - * @return resource - */ - function drop_column($table, $column) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} DROP {$column}"); - } - - /** - * Adds a column - * - * @param string $table The table - * @param string $column The column name - * @param string $definition the new column definition - * @return resource - */ - function add_column($table, $column, $definition) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ADD {$column} {$definition}"); - } - - /** - * Modifies a column - * - * @param string $table The table - * @param string $column The column name - * @param string $new_definition the new column definition - * @return resource - */ - function modify_column($table, $column, $new_definition) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} MODIFY {$column} {$new_definition}"); - } - - /** - * Renames a column - * - * @param string $table The table - * @param string $old_column The old column name - * @param string $new_column the new column name - * @param string $new_definition the new column definition - * @return resource - */ - function rename_column($table, $old_column, $new_column, $new_definition) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} CHANGE {$old_column} {$new_column} {$new_definition}"); - } - - /** - * Sets the table prefix used by the simple select, insert, update and delete functions - * - * @param string $prefix The new table prefix - */ - function set_table_prefix($prefix) - { - $this->table_prefix = $prefix; - } - - /** - * Fetched the total size of all mysql tables or a specific table - * - * @param string $table The table (optional) - * @return integer the total size of all mysql tables or a specific table - */ - function fetch_size($table='') - { - if($table != '') - { - $query = $this->query("SHOW TABLE STATUS LIKE '".$this->table_prefix.$table."'"); - } - else - { - $query = $this->query("SHOW TABLE STATUS"); - } - $total = 0; - while($table = $this->fetch_array($query)) - { - $total += $table['Data_length']+$table['Index_length']; - } - return $total; - } - - /** - * Fetch a list of database character sets this DBMS supports - * - * @return array|bool Array of supported character sets with array key being the name, array value being display name. False if unsupported - */ - function fetch_db_charsets() - { - if($this->write_link && version_compare($this->get_version(), "4.1", "<")) - { - return false; - } - return array( - 'big5' => 'Big5 Traditional Chinese', - 'dec8' => 'DEC West European', - 'cp850' => 'DOS West European', - 'hp8' => 'HP West European', - 'koi8r' => 'KOI8-R Relcom Russian', - 'latin1' => 'ISO 8859-1 Latin 1', - 'latin2' => 'ISO 8859-2 Central European', - 'swe7' => '7bit Swedish', - 'ascii' => 'US ASCII', - 'ujis' => 'EUC-JP Japanese', - 'sjis' => 'Shift-JIS Japanese', - 'hebrew' => 'ISO 8859-8 Hebrew', - 'tis620' => 'TIS620 Thai', - 'euckr' => 'EUC-KR Korean', - 'koi8u' => 'KOI8-U Ukrainian', - 'gb2312' => 'GB2312 Simplified Chinese', - 'greek' => 'ISO 8859-7 Greek', - 'cp1250' => 'Windows Central European', - 'gbk' => 'GBK Simplified Chinese', - 'latin5' => 'ISO 8859-9 Turkish', - 'armscii8' => 'ARMSCII-8 Armenian', - 'utf8' => 'UTF-8 Unicode', - 'utf8mb4' => '4-Byte UTF-8 Unicode (requires MySQL 5.5.3 or above)', - 'ucs2' => 'UCS-2 Unicode', - 'cp866' => 'DOS Russian', - 'keybcs2' => 'DOS Kamenicky Czech-Slovak', - 'macce' => 'Mac Central European', - 'macroman' => 'Mac West European', - 'cp852' => 'DOS Central European', - 'latin7' => 'ISO 8859-13 Baltic', - 'cp1251' => 'Windows Cyrillic', - 'cp1256' => 'Windows Arabic', - 'cp1257' => 'Windows Baltic', - 'geostd8' => 'GEOSTD8 Georgian', - 'cp932' => 'SJIS for Windows Japanese', - 'eucjpms' => 'UJIS for Windows Japanese', - ); - } - - /** - * Fetch a database collation for a particular database character set - * - * @param string $charset The database character set - * @return string|bool The matching database collation, false if unsupported - */ - function fetch_charset_collation($charset) - { - $collations = array( - 'big5' => 'big5_chinese_ci', - 'dec8' => 'dec8_swedish_ci', - 'cp850' => 'cp850_general_ci', - 'hp8' => 'hp8_english_ci', - 'koi8r' => 'koi8r_general_ci', - 'latin1' => 'latin1_swedish_ci', - 'latin2' => 'latin2_general_ci', - 'swe7' => 'swe7_swedish_ci', - 'ascii' => 'ascii_general_ci', - 'ujis' => 'ujis_japanese_ci', - 'sjis' => 'sjis_japanese_ci', - 'hebrew' => 'hebrew_general_ci', - 'tis620' => 'tis620_thai_ci', - 'euckr' => 'euckr_korean_ci', - 'koi8u' => 'koi8u_general_ci', - 'gb2312' => 'gb2312_chinese_ci', - 'greek' => 'greek_general_ci', - 'cp1250' => 'cp1250_general_ci', - 'gbk' => 'gbk_chinese_ci', - 'latin5' => 'latin5_turkish_ci', - 'armscii8' => 'armscii8_general_ci', - 'utf8' => 'utf8_general_ci', - 'utf8mb4' => 'utf8mb4_general_ci', - 'ucs2' => 'ucs2_general_ci', - 'cp866' => 'cp866_general_ci', - 'keybcs2' => 'keybcs2_general_ci', - 'macce' => 'macce_general_ci', - 'macroman' => 'macroman_general_ci', - 'cp852' => 'cp852_general_ci', - 'latin7' => 'latin7_general_ci', - 'cp1251' => 'cp1251_general_ci', - 'cp1256' => 'cp1256_general_ci', - 'cp1257' => 'cp1257_general_ci', - 'geostd8' => 'geostd8_general_ci', - 'cp932' => 'cp932_japanese_ci', - 'eucjpms' => 'eucjpms_japanese_ci', - ); - if($collations[$charset]) - { - return $collations[$charset]; - } - return false; - } - - /** - * Fetch a character set/collation string for use with CREATE TABLE statements. Uses current DB encoding - * - * @return string The built string, empty if unsupported - */ - function build_create_table_collation() - { - if(!$this->db_encoding) - { - return ''; - } - - $collation = $this->fetch_charset_collation($this->db_encoding); - if(!$collation) - { - return ''; - } - return " CHARACTER SET {$this->db_encoding} COLLATE {$collation}"; - } - - /** - * Time how long it takes for a particular piece of code to run. Place calls above & below the block of code. - * - * @deprecated - */ - function get_execution_time() - { - return get_execution_time(); - } - - /** - * Binary database fields require special attention. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function escape_binary($string) - { - return "X'".$this->escape_string(bin2hex($string))."'"; - } - - /** - * Unescape binary data. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function unescape_binary($string) - { - // Nothing to do - return $string; - } -} - diff --git a/html/forums/inc/db_mysqli.php b/html/forums/inc/db_mysqli.php deleted file mode 100644 index 845dbcb..0000000 --- a/html/forums/inc/db_mysqli.php +++ /dev/null @@ -1,1569 +0,0 @@ - write; 0 => read - * - * @var int - */ - protected $last_query_type = 0; - - /** - * Connect to the database server. - * - * @param array $config Array of DBMS connection details. - * @return mysqli The DB connection resource. Returns false on fail or -1 on a db connect failure. - */ - function connect($config) - { - // Simple connection to one server - if(array_key_exists('hostname', $config)) - { - $connections['read'][] = $config; - } - else - // Connecting to more than one server - { - // Specified multiple servers, but no specific read/write servers - if(!array_key_exists('read', $config)) - { - foreach($config as $key => $settings) - { - if(is_int($key)) - { - $connections['read'][] = $settings; - } - } - } - // Specified both read & write servers - else - { - $connections = $config; - } - } - - $this->db_encoding = $config['encoding']; - - // Actually connect to the specified servers - foreach(array('read', 'write') as $type) - { - if(!isset($connections[$type]) || !is_array($connections[$type])) - { - break; - } - - if(array_key_exists('hostname', $connections[$type])) - { - $details = $connections[$type]; - unset($connections); - $connections[$type][] = $details; - } - - // Shuffle the connections - shuffle($connections[$type]); - - // Loop-de-loop - foreach($connections[$type] as $single_connection) - { - $connect_function = "mysqli_connect"; - $persist = ""; - if(!empty($single_connection['pconnect']) && version_compare(PHP_VERSION, '5.3.0', '>=')) - { - $persist = 'p:'; - } - - $link = "{$type}_link"; - - get_execution_time(); - - // Specified a custom port for this connection? - $port = 0; - if(strstr($single_connection['hostname'],':')) - { - list($hostname, $port) = explode(":", $single_connection['hostname'], 2); - } - - if($port) - { - $this->$link = @$connect_function($persist.$hostname, $single_connection['username'], $single_connection['password'], "", $port); - } - else - { - $this->$link = @$connect_function($persist.$single_connection['hostname'], $single_connection['username'], $single_connection['password']); - } - - $time_spent = get_execution_time(); - $this->query_time += $time_spent; - - // Successful connection? break down brother! - if($this->$link) - { - $this->connections[] = "[".strtoupper($type)."] {$single_connection['username']}@{$single_connection['hostname']} (Connected in ".format_time_duration($time_spent).")"; - break; - } - else - { - $this->connections[] = "[FAILED] [".strtoupper($type)."] {$single_connection['username']}@{$single_connection['hostname']}"; - } - } - } - - // No write server was specified (simple connection or just multiple servers) - mirror write link - if(!array_key_exists('write', $connections)) - { - $this->write_link = &$this->read_link; - } - - // Have no read connection? - if(!$this->read_link) - { - $this->error("[READ] Unable to connect to MySQL server"); - return false; - } - // No write? - else if(!$this->write_link) - { - $this->error("[WRITE] Unable to connect to MySQL server"); - return false; - } - - // Select databases - if(!$this->select_db($config['database'])) - { - return -1; - } - - $this->current_link = &$this->read_link; - return $this->read_link; - } - - /** - * Selects the database to use. - * - * @param string $database The database name. - * @return boolean True when successfully connected, false if not. - */ - function select_db($database) - { - $this->database = $database; - - $master_success = @mysqli_select_db($this->read_link, $database) or $this->error("[READ] Unable to select database", $this->read_link); - if($this->write_link) - { - $slave_success = @mysqli_select_db($this->write_link, $database) or $this->error("[WRITE] Unable to select slave database", $this->write_link); - - $success = ($master_success && $slave_success ? true : false); - } - else - { - $success = $master_success; - } - - if($success && $this->db_encoding) - { - @mysqli_set_charset($this->read_link, $this->db_encoding); - - if($slave_success && count($this->connections) > 1) - { - @mysqli_set_charset($this->write_link, $this->db_encoding); - } - } - return $success; - } - - /** - * Query the database. - * - * @param string $string The query SQL. - * @param boolean|int $hide_errors 1 if hide errors, 0 if not. - * @param integer $write_query 1 if executes on master database, 0 if not. - * @return mysqli_result The query data. - */ - function query($string, $hide_errors=0, $write_query=0) - { - global $mybb; - - get_execution_time(); - - // Only execute write queries on master server - if(($write_query || $this->last_query_type) && $this->write_link) - { - $this->current_link = &$this->write_link; - $query = @mysqli_query($this->write_link, $string); - } - else - { - $this->current_link = &$this->read_link; - $query = @mysqli_query($this->read_link, $string); - } - - if($this->error_number() && !$hide_errors) - { - $this->error($string); - exit; - } - - if($write_query) - { - $this->last_query_type = 1; - } - else - { - $this->last_query_type = 0; - } - - $query_time = get_execution_time(); - $this->query_time += $query_time; - $this->query_count++; - - if($mybb->debug_mode) - { - $this->explain_query($string, $query_time); - } - return $query; - } - - /** - * Execute a write query on the master database - * - * @param string $query The query SQL. - * @param boolean|int $hide_errors 1 if hide errors, 0 if not. - * @return mysqli_result The query data. - */ - function write_query($query, $hide_errors=0) - { - return $this->query($query, $hide_errors, 1); - } - - /** - * Explain a query on the database. - * - * @param string $string The query SQL. - * @param string $qtime The time it took to perform the query. - */ - function explain_query($string, $qtime) - { - global $plugins; - - $debug_extra = ''; - if($plugins->current_hook) - { - $debug_extra = "
    (Plugin Hook: {$plugins->current_hook})
    "; - } - if(preg_match("#^\s*select#i", $string)) - { - $query = mysqli_query($this->current_link, "EXPLAIN $string"); - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n"; - - while($table = mysqli_fetch_assoc($query)) - { - $this->explain .= - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n"; - } - $this->explain .= - "\n". - "\n". - "\n". - "
    {$debug_extra}
    #".$this->query_count." - Select Query
    ".htmlspecialchars_uni($string)."
    TableTypePossible KeysKeyKey LengthRefRowsExtra
    ".$table['table']."".$table['type']."".$table['possible_keys']."".$table['key']."".$table['key_len']."".$table['ref']."".$table['rows']."".$table['Extra']."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - else - { - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "
    {$debug_extra}
    #".$this->query_count." - Write Query
    ".htmlspecialchars_uni($string)."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - - $this->querylist[$this->query_count]['query'] = $string; - $this->querylist[$this->query_count]['time'] = $qtime; - } - - /** - * Return a result array for a query. - * - * @param mysqli_result $query The query data. - * @param int $resulttype The type of array to return. Either MYSQLI_NUM, MYSQLI_BOTH or MYSQLI_ASSOC - * @return array The array of results. - */ - function fetch_array($query, $resulttype=MYSQLI_ASSOC) - { - switch($resulttype) - { - case MYSQLI_NUM: - case MYSQLI_BOTH: - break; - default: - $resulttype = MYSQLI_ASSOC; - break; - } - - $array = mysqli_fetch_array($query, $resulttype); - - return $array; - } - - /** - * Return a specific field from a query. - * - * @param mysqli_result $query The query ID. - * @param string $field The name of the field to return. - * @param int|bool $row The number of the row to fetch it from. - */ - function fetch_field($query, $field, $row=false) - { - if($row !== false) - { - $this->data_seek($query, $row); - } - $array = $this->fetch_array($query); - return $array[$field]; - } - - /** - * Moves internal row pointer to the next row - * - * @param mysqli_result $query The query ID. - * @param int $row The pointer to move the row to. - * @return bool - */ - function data_seek($query, $row) - { - return mysqli_data_seek($query, $row); - } - - /** - * Return the number of rows resulting from a query. - * - * @param mysqli_result $query The query data. - * @return int The number of rows in the result. - */ - function num_rows($query) - { - return mysqli_num_rows($query); - } - - /** - * Return the last id number of inserted data. - * - * @return int The id number. - */ - function insert_id() - { - $id = mysqli_insert_id($this->current_link); - return $id; - } - - /** - * Close the connection with the DBMS. - * - */ - function close() - { - @mysqli_close($this->read_link); - if($this->write_link) - { - @mysqli_close($this->write_link); - } - } - - /** - * Return an error number. - * - * @return int The error number of the current error. - */ - function error_number() - { - if($this->current_link) - { - return mysqli_errno($this->current_link); - } - else - { - return mysqli_connect_errno(); - } - } - - /** - * Return an error string. - * - * @return string The explanation for the current error. - */ - function error_string() - { - if($this->current_link) - { - return mysqli_error($this->current_link); - } - else - { - return mysqli_connect_error(); - } - } - - /** - * Output a database error. - * - * @param string $string The string to present as an error. - * @return bool Whether error reporting is enabled or not - */ - function error($string="") - { - if($this->error_reporting) - { - if(class_exists("errorHandler")) - { - global $error_handler; - - if(!is_object($error_handler)) - { - require_once MYBB_ROOT."inc/class_error.php"; - $error_handler = new errorHandler(); - } - - $error = array( - "error_no" => $this->error_number(), - "error" => $this->error_string(), - "query" => $string - ); - $error_handler->error(MYBB_SQL, $error); - } - else - { - trigger_error("[SQL] [".$this->error_number()."] ".$this->error_string()."
    {$string}", E_USER_ERROR); - } - - return true; - } - else - { - return false; - } - } - - /** - * Returns the number of affected rows in a query. - * - * @return int The number of affected rows. - */ - function affected_rows() - { - return mysqli_affected_rows($this->current_link); - } - - /** - * Return the number of fields. - * - * @param mysqli_result $query The query data. - * @return int The number of fields. - */ - function num_fields($query) - { - return mysqli_num_fields($query); - } - - /** - * Lists all tables in the database. - * - * @param string $database The database name. - * @param string $prefix Prefix of the table (optional) - * @return array The table list. - */ - function list_tables($database, $prefix='') - { - if($prefix) - { - if(version_compare($this->get_version(), '5.0.2', '>=')) - { - $query = $this->query("SHOW FULL TABLES FROM `$database` WHERE table_type = 'BASE TABLE' AND `Tables_in_$database` LIKE '".$this->escape_string($prefix)."%'"); - } - else - { - $query = $this->query("SHOW TABLES FROM `$database` LIKE '".$this->escape_string($prefix)."%'"); - } - } - else - { - if(version_compare($this->get_version(), '5.0.2', '>=')) - { - $query = $this->query("SHOW FULL TABLES FROM `$database` WHERE table_type = 'BASE TABLE'"); - } - else - { - $query = $this->query("SHOW TABLES FROM `$database`"); - } - } - - $tables = array(); - while(list($table) = mysqli_fetch_array($query)) - { - $tables[] = $table; - } - - return $tables; - } - - /** - * Check if a table exists in a database. - * - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function table_exists($table) - { - // Execute on master server to ensure if we've just created a table that we get the correct result - if(version_compare($this->get_version(), '5.0.2', '>=')) - { - $query = $this->query("SHOW FULL TABLES FROM `".$this->database."` WHERE table_type = 'BASE TABLE' AND `Tables_in_".$this->database."` = '{$this->table_prefix}$table'"); - } - else - { - $query = $this->query("SHOW TABLES LIKE '{$this->table_prefix}$table'"); - } - - $exists = $this->num_rows($query); - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Check if a field exists in a database. - * - * @param string $field The field name. - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function field_exists($field, $table) - { - $query = $this->write_query(" - SHOW COLUMNS - FROM {$this->table_prefix}$table - LIKE '$field' - "); - $exists = $this->num_rows($query); - - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Add a shutdown query. - * - * @param mysqli_result $query The query data. - * @param string $name An optional name for the query. - */ - function shutdown_query($query, $name="") - { - global $shutdown_queries; - if($name) - { - $shutdown_queries[$name] = $query; - } - else - { - $shutdown_queries[] = $query; - } - } - - /** - * Performs a simple select query. - * - * @param string $table The table name to be queried. - * @param string $fields Comma delimetered list of fields to be selected. - * @param string $conditions SQL formatted list of conditions to be matched. - * @param array $options List of options: group by, order by, order direction, limit, limit start. - * @return mysqli_result The query data. - */ - function simple_select($table, $fields="*", $conditions="", $options=array()) - { - $query = "SELECT ".$fields." FROM ".$this->table_prefix.$table; - - if($conditions != "") - { - $query .= " WHERE ".$conditions; - } - - if(isset($options['group_by'])) - { - $query .= " GROUP BY ".$options['group_by']; - } - - if(isset($options['order_by'])) - { - $query .= " ORDER BY ".$options['order_by']; - if(isset($options['order_dir'])) - { - $query .= " ".my_strtoupper($options['order_dir']); - } - } - - if(isset($options['limit_start']) && isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit_start'].", ".$options['limit']; - } - else if(isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit']; - } - - return $this->query($query); - } - - /** - * Build an insert query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @return int The insert ID if available - */ - function insert_query($table, $array) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $array[$field] = $value; - } - else - { - $array[$field] = $this->quote_val($value); - } - } - - $fields = "`".implode("`,`", array_keys($array))."`"; - $values = implode(",", $array); - $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} (".$fields.") - VALUES (".$values.") - "); - return $this->insert_id(); - } - - /** - * Build one query for multiple inserts from a multidimensional array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of inserts. - * @return void - */ - function insert_query_multiple($table, $array) - { - global $mybb; - - if(!is_array($array)) - { - return; - } - // Field names - $fields = array_keys($array[0]); - $fields = "`".implode("`,`", $fields)."`"; - - $insert_rows = array(); - foreach($array as $values) - { - foreach($values as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $values[$field] = $value; - } - else - { - $values[$field] = $this->quote_val($value); - } - } - $insert_rows[] = "(".implode(",", $values).")"; - } - $insert_rows = implode(", ", $insert_rows); - - $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} ({$fields}) - VALUES {$insert_rows} - "); - } - - /** - * Build an update query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @param boolean $no_quote An option to quote incoming values of the array. - * @return mysqli_result The query data. - */ - function update_query($table, $array, $where="", $limit="", $no_quote=false) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - $comma = ""; - $query = ""; - $quote = "'"; - - if($no_quote == true) - { - $quote = ""; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $query .= $comma."`".$field."`={$value}"; - } - else - { - $quoted_value = $this->quote_val($value, $quote); - - $query .= $comma."`".$field."`={$quoted_value}"; - } - $comma = ', '; - } - - if(!empty($where)) - { - $query .= " WHERE $where"; - } - - if(!empty($limit)) - { - $query .= " LIMIT $limit"; - } - - return $this->write_query(" - UPDATE {$this->table_prefix}$table - SET $query - "); - } - - /** - * @param int|string $value - * @param string $quote - * - * @return int|string - */ - private function quote_val($value, $quote="'") - { - if(is_int($value)) - { - $quoted = $value; - } - else - { - $quoted = $quote . $value . $quote; - } - - return $quoted; - } - - /** - * Build a delete query. - * - * @param string $table The table name to perform the query on. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @return mysqli_result The query data. - */ - function delete_query($table, $where="", $limit="") - { - $query = ""; - if(!empty($where)) - { - $query .= " WHERE $where"; - } - if(!empty($limit)) - { - $query .= " LIMIT $limit"; - } - return $this->write_query("DELETE FROM {$this->table_prefix}$table $query"); - } - - /** - * Escape a string according to the MySQL escape format. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string($string) - { - if($this->db_encoding == 'utf8') - { - $string = validate_utf8_string($string, false); - } - elseif($this->db_encoding == 'utf8mb4') - { - $string = validate_utf8_string($string); - } - - if(function_exists("mysqli_real_escape_string") && $this->read_link) - { - $string = mysqli_real_escape_string($this->read_link, $string); - } - else - { - $string = addslashes($string); - } - return $string; - } - - /** - * Frees the resources of a MySQLi query. - * - * @param mysqli_result $query The query to destroy. - * @return boolean Returns true - */ - function free_result($query) - { - mysqli_free_result($query); - return true; // Kept for compatibility reasons - } - - /** - * Escape a string used within a like command. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string_like($string) - { - return $this->escape_string(str_replace(array('%', '_') , array('\\%' , '\\_') , $string)); - } - - /** - * Gets the current version of MySQL. - * - * @return string Version of MySQL. - */ - function get_version() - { - if($this->version) - { - return $this->version; - } - - $query = $this->query("SELECT VERSION() as version"); - $ver = $this->fetch_array($query); - $version = $ver['version']; - - if($version) - { - $version = explode(".", $version, 3); - $this->version = (int)$version[0].".".(int)$version[1].".".(int)$version[2]; - } - return $this->version; - } - - /** - * Optimizes a specific table. - * - * @param string $table The name of the table to be optimized. - */ - function optimize_table($table) - { - $this->write_query("OPTIMIZE TABLE ".$this->table_prefix.$table.""); - } - - /** - * Analyzes a specific table. - * - * @param string $table The name of the table to be analyzed. - */ - function analyze_table($table) - { - $this->write_query("ANALYZE TABLE ".$this->table_prefix.$table.""); - } - - /** - * Show the "create table" command for a specific table. - * - * @param string $table The name of the table. - * @return string The MySQL command to create the specified table. - */ - function show_create_table($table) - { - $query = $this->write_query("SHOW CREATE TABLE ".$this->table_prefix.$table.""); - $structure = $this->fetch_array($query); - - return $structure['Create Table']; - } - - /** - * Show the "show fields from" command for a specific table. - * - * @param string $table The name of the table. - * @return array Field info for that table - */ - function show_fields_from($table) - { - $query = $this->write_query("SHOW FIELDS FROM ".$this->table_prefix.$table.""); - $field_info = array(); - while($field = $this->fetch_array($query)) - { - $field_info[] = $field; - } - return $field_info; - } - - /** - * Returns whether or not the table contains a fulltext index. - * - * @param string $table The name of the table. - * @param string $index Optionally specify the name of the index. - * @return boolean True or false if the table has a fulltext index or not. - */ - function is_fulltext($table, $index="") - { - $structure = $this->show_create_table($table); - if($index != "") - { - if(preg_match("#FULLTEXT KEY (`?)$index(`?)#i", $structure)) - { - return true; - } - else - { - return false; - } - } - if(preg_match('#FULLTEXT KEY#i', $structure)) - { - return true; - } - return false; - } - - /** - * Returns whether or not this database engine supports fulltext indexing. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - - function supports_fulltext($table) - { - $version = $this->get_version(); - $query = $this->write_query("SHOW TABLE STATUS LIKE '{$this->table_prefix}$table'"); - $status = $this->fetch_array($query); - $table_type = my_strtoupper($status['Engine']); - if(version_compare($version, '3.23.23', '>=') && ($table_type == 'MYISAM' || $table_type == 'ARIA')) - { - return true; - } - elseif(version_compare($version, '5.6', '>=') && $table_type == 'INNODB') - { - return true; - } - return false; - } - - /** - * Returns whether or not this database engine supports boolean fulltext matching. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - function supports_fulltext_boolean($table) - { - $version = $this->get_version(); - $supports_fulltext = $this->supports_fulltext($table); - if(version_compare($version, '4.0.1', '>=') && $supports_fulltext == true) - { - return true; - } - return false; - } - - /** - * Checks to see if an index exists on a specified table - * - * @param string $table The name of the table. - * @param string $index The name of the index. - * @return bool Returns whether index exists - */ - function index_exists($table, $index) - { - $index_exists = false; - $query = $this->write_query("SHOW INDEX FROM {$this->table_prefix}{$table}"); - while($ukey = $this->fetch_array($query)) - { - if($ukey['Key_name'] == $index) - { - $index_exists = true; - break; - } - } - - if($index_exists) - { - return true; - } - - return false; - } - - /** - * Creates a fulltext index on the specified column in the specified table with optional index name. - * - * @param string $table The name of the table. - * @param string $column Name of the column to be indexed. - * @param string $name The index name, optional. - */ - function create_fulltext_index($table, $column, $name="") - { - $this->write_query("ALTER TABLE {$this->table_prefix}$table ADD FULLTEXT $name ($column)"); - } - - /** - * Drop an index with the specified name from the specified table - * - * @param string $table The name of the table. - * @param string $name The name of the index. - */ - function drop_index($table, $name) - { - $this->write_query("ALTER TABLE {$this->table_prefix}$table DROP INDEX $name"); - } - - /** - * Drop an table with the specified table - * - * @param string $table The table to drop - * @param boolean $hard hard drop - no checking - * @param boolean $table_prefix use table prefix - */ - function drop_table($table, $hard=false, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - if($hard == false) - { - $this->write_query('DROP TABLE IF EXISTS '.$table_prefix.$table); - } - else - { - $this->write_query('DROP TABLE '.$table_prefix.$table); - } - } - - /** - * Renames a table - * - * @param string $old_table The old table name - * @param string $new_table the new table name - * @param boolean $table_prefix use table prefix - * @return mysqli_result - */ - function rename_table($old_table, $new_table, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - return $this->write_query("RENAME TABLE {$table_prefix}{$old_table} TO {$table_prefix}{$new_table}"); - } - - /** - * Replace contents of table with values - * - * @param string $table The table - * @param array $replacements The replacements - * @return mysqli_result|bool - */ - function replace_query($table, $replacements=array()) - { - global $mybb; - - $values = ''; - $comma = ''; - foreach($replacements as $column => $value) - { - if(isset($mybb->binary_fields[$table][$column]) && $mybb->binary_fields[$table][$column]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $values .= $comma."`".$column."`=".$value; - } - else - { - $values .= $comma."`".$column."`=".$this->quote_val($value); - } - - $comma = ','; - } - - if(empty($replacements)) - { - return false; - } - - return $this->write_query("REPLACE INTO {$this->table_prefix}{$table} SET {$values}"); - } - - /** - * Drops a column - * - * @param string $table The table - * @param string $column The column name - * @return mysqli_result - */ - function drop_column($table, $column) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} DROP {$column}"); - } - - /** - * Adds a column - * - * @param string $table The table - * @param string $column The column name - * @param string $definition the new column definition - * @return mysqli_result - */ - function add_column($table, $column, $definition) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ADD {$column} {$definition}"); - } - - /** - * Modifies a column - * - * @param string $table The table - * @param string $column The column name - * @param string $new_definition the new column definition - * @return mysqli_result - */ - function modify_column($table, $column, $new_definition) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} MODIFY {$column} {$new_definition}"); - } - - /** - * Renames a column - * - * @param string $table The table - * @param string $old_column The old column name - * @param string $new_column the new column name - * @param string $new_definition the new column definition - * @return mysqli_result - */ - function rename_column($table, $old_column, $new_column, $new_definition) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} CHANGE {$old_column} {$new_column} {$new_definition}"); - } - - /** - * Sets the table prefix used by the simple select, insert, update and delete functions - * - * @param string $prefix The new table prefix - */ - function set_table_prefix($prefix) - { - $this->table_prefix = $prefix; - } - - /** - * Fetched the total size of all mysql tables or a specific table - * - * @param string $table The table (optional) - * @return integer the total size of all mysql tables or a specific table - */ - function fetch_size($table='') - { - if($table != '') - { - $query = $this->query("SHOW TABLE STATUS LIKE '".$this->table_prefix.$table."'"); - } - else - { - $query = $this->query("SHOW TABLE STATUS"); - } - $total = 0; - while($table = $this->fetch_array($query)) - { - $total += $table['Data_length']+$table['Index_length']; - } - return $total; - } - - /** - * Fetch a list of database character sets this DBMS supports - * - * @return array|bool Array of supported character sets with array key being the name, array value being display name. False if unsupported - */ - function fetch_db_charsets() - { - if($this->write_link && version_compare($this->get_version(), "4.1", "<")) - { - return false; - } - return array( - 'big5' => 'Big5 Traditional Chinese', - 'dec8' => 'DEC West European', - 'cp850' => 'DOS West European', - 'hp8' => 'HP West European', - 'koi8r' => 'KOI8-R Relcom Russian', - 'latin1' => 'ISO 8859-1 Latin 1', - 'latin2' => 'ISO 8859-2 Central European', - 'swe7' => '7bit Swedish', - 'ascii' => 'US ASCII', - 'ujis' => 'EUC-JP Japanese', - 'sjis' => 'Shift-JIS Japanese', - 'hebrew' => 'ISO 8859-8 Hebrew', - 'tis620' => 'TIS620 Thai', - 'euckr' => 'EUC-KR Korean', - 'koi8u' => 'KOI8-U Ukrainian', - 'gb2312' => 'GB2312 Simplified Chinese', - 'greek' => 'ISO 8859-7 Greek', - 'cp1250' => 'Windows Central European', - 'gbk' => 'GBK Simplified Chinese', - 'latin5' => 'ISO 8859-9 Turkish', - 'armscii8' => 'ARMSCII-8 Armenian', - 'utf8' => 'UTF-8 Unicode', - 'utf8mb4' => '4-Byte UTF-8 Unicode (requires MySQL 5.5.3 or above)', - 'ucs2' => 'UCS-2 Unicode', - 'cp866' => 'DOS Russian', - 'keybcs2' => 'DOS Kamenicky Czech-Slovak', - 'macce' => 'Mac Central European', - 'macroman' => 'Mac West European', - 'cp852' => 'DOS Central European', - 'latin7' => 'ISO 8859-13 Baltic', - 'cp1251' => 'Windows Cyrillic', - 'cp1256' => 'Windows Arabic', - 'cp1257' => 'Windows Baltic', - 'geostd8' => 'GEOSTD8 Georgian', - 'cp932' => 'SJIS for Windows Japanese', - 'eucjpms' => 'UJIS for Windows Japanese', - ); - } - - /** - * Fetch a database collation for a particular database character set - * - * @param string $charset The database character set - * @return string|bool The matching database collation, false if unsupported - */ - function fetch_charset_collation($charset) - { - $collations = array( - 'big5' => 'big5_chinese_ci', - 'dec8' => 'dec8_swedish_ci', - 'cp850' => 'cp850_general_ci', - 'hp8' => 'hp8_english_ci', - 'koi8r' => 'koi8r_general_ci', - 'latin1' => 'latin1_swedish_ci', - 'latin2' => 'latin2_general_ci', - 'swe7' => 'swe7_swedish_ci', - 'ascii' => 'ascii_general_ci', - 'ujis' => 'ujis_japanese_ci', - 'sjis' => 'sjis_japanese_ci', - 'hebrew' => 'hebrew_general_ci', - 'tis620' => 'tis620_thai_ci', - 'euckr' => 'euckr_korean_ci', - 'koi8u' => 'koi8u_general_ci', - 'gb2312' => 'gb2312_chinese_ci', - 'greek' => 'greek_general_ci', - 'cp1250' => 'cp1250_general_ci', - 'gbk' => 'gbk_chinese_ci', - 'latin5' => 'latin5_turkish_ci', - 'armscii8' => 'armscii8_general_ci', - 'utf8' => 'utf8_general_ci', - 'utf8mb4' => 'utf8mb4_general_ci', - 'ucs2' => 'ucs2_general_ci', - 'cp866' => 'cp866_general_ci', - 'keybcs2' => 'keybcs2_general_ci', - 'macce' => 'macce_general_ci', - 'macroman' => 'macroman_general_ci', - 'cp852' => 'cp852_general_ci', - 'latin7' => 'latin7_general_ci', - 'cp1251' => 'cp1251_general_ci', - 'cp1256' => 'cp1256_general_ci', - 'cp1257' => 'cp1257_general_ci', - 'geostd8' => 'geostd8_general_ci', - 'cp932' => 'cp932_japanese_ci', - 'eucjpms' => 'eucjpms_japanese_ci', - ); - if($collations[$charset]) - { - return $collations[$charset]; - } - return false; - } - - /** - * Fetch a character set/collation string for use with CREATE TABLE statements. Uses current DB encoding - * - * @return string The built string, empty if unsupported - */ - function build_create_table_collation() - { - if(!$this->db_encoding) - { - return ''; - } - - $collation = $this->fetch_charset_collation($this->db_encoding); - if(!$collation) - { - return ''; - } - return " CHARACTER SET {$this->db_encoding} COLLATE {$collation}"; - } - - /** - * Time how long it takes for a particular piece of code to run. Place calls above & below the block of code. - * - * @deprecated - */ - function get_execution_time() - { - return get_execution_time(); - } - - /** - * Binary database fields require special attention. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function escape_binary($string) - { - return "X'".$this->escape_string(bin2hex($string))."'"; - } - - /** - * Unescape binary data. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function unescape_binary($string) - { - // Nothing to do - return $string; - } -} - diff --git a/html/forums/inc/db_pdo.php b/html/forums/inc/db_pdo.php deleted file mode 100644 index 52a129b..0000000 --- a/html/forums/inc/db_pdo.php +++ /dev/null @@ -1,234 +0,0 @@ -db = new PDO($dsn, $username, $password, $driver_options); - } - catch(PDOException $exception) - { - die('Connection failed: '.$exception->getMessage()); - } - - $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - } - - /** - * Query the database. - * - * @param string $string The query SQL. - * @return PDOStatement The query data. - */ - function query($string) - { - ++$this->queries; - - $query = $this->db->query($string, PDO::FETCH_BOTH); - $this->last_query = $query; - - $query->guid = $this->queries; - - return $query; - } - - /** - * Return a result array for a query. - * - * @param PDOStatement $query The query resource. - * @param int $resulttype One of PDO's constants: FETCH_ASSOC, FETCH_BOUND, FETCH_CLASS, FETCH_INTO, FETCH_LAZY, FETCH_NAMED, FETCH_NUM, FETCH_OBJ or FETCH_BOTH - * @return array The array of results. - */ - function fetch_array($query, $resulttype=PDO::FETCH_BOTH) - { - switch($resulttype) - { - case PDO::FETCH_ASSOC: - case PDO::FETCH_BOUND: - case PDO::FETCH_CLASS: - case PDO::FETCH_INTO: - case PDO::FETCH_LAZY: - case PDO::FETCH_NAMED: - case PDO::FETCH_NUM: - case PDO::FETCH_OBJ: - break; - default: - $resulttype = PDO::FETCH_BOTH; - break; - } - - if($this->seek_array[$query->guid]) - { - $array = $query->fetch($resulttype, $this->seek_array[$query->guid]['offset'], $this->seek_array[$query->guid]['row']); - } - else - { - $array = $query->fetch($resulttype); - } - - return $array; - } - - /** - * Moves internal row pointer to the next row - * - * @param PDOStatement $query The query resource. - * @param int $row The pointer to move the row to. - */ - function seek($query, $row) - { - $this->seek_array[$query->guid] = array('offset' => PDO::FETCH_ORI_ABS, 'row' => $row); - } - - /** - * Return the number of rows resulting from a query. - * - * @param PDOStatement $query The query resource. - * @return int The number of rows in the result. - */ - function num_rows($query) - { - if(stripos($query->queryString, 'SELECT') !== false) - { - $query = $this->db->query($query->queryString); - $result = $query->fetchAll(); - return count($result); - } - else - { - return $query->rowCount(); - } - } - - /** - * Return the last id number of inserted data. - * - * @param string $name The name of the insert id to check. (Optional) - * @return int The id number. - */ - function insert_id($name="") - { - return $this->db->lastInsertId($name); - } - - /** - * Return an error number. - * - * @param PDOStatement $query The query resource. - * @return int The error number of the current error. - */ - function error_number($query) - { - if(!method_exists($query, "errorCode")) - { - return 0; - } - - $errorcode = $query->errorCode(); - - return $errorcode; - } - - /** - * Return an error string. - * - * @param PDOStatement $query The query resource. - * @return array The error string of the current error. - */ - function error_string($query) - { - if(!method_exists($query, "errorInfo")) - { - return $this->db->errorInfo(); - } - return $query->errorInfo(); - } - - /** - * Returns the number of affected rows in a query. - * - * @param PDOStatement $query - * @return int The number of affected rows. - */ - function affected_rows($query) - { - return $query->rowCount(); - } - - /** - * Return the number of fields. - * - * @param PDOStatement $query The query resource. - * @return int The number of fields. - */ - function num_fields($query) - { - return $query->columnCount(); - } - - /** - * Escape a string according to the pdo escape format. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string($string) - { - $string = $this->db->quote($string); - - // Remove ' from the begginging of the string and at the end of the string, because we already use it in insert_query - $string = substr($string, 1); - $string = substr($string, 0, -1); - - return $string; - } - - /** - * Return a selected attribute - * - * @param string $attribute The attribute to check. - * @return string The value of the attribute. - */ - function get_attribute($attribute) - { - $attribute = $this->db->getAttribute(constant("PDO::".$attribute."")); - - return $attribute; - } -} diff --git a/html/forums/inc/db_pgsql.php b/html/forums/inc/db_pgsql.php deleted file mode 100644 index 5bde4f9..0000000 --- a/html/forums/inc/db_pgsql.php +++ /dev/null @@ -1,1582 +0,0 @@ - $settings) - { - if(is_int($key)) $connections['read'][] = $settings; - } - } - // Specified both read & write servers - else - { - $connections = $config; - } - } - - $this->db_encoding = $config['encoding']; - - // Actually connect to the specified servers - foreach(array('read', 'write') as $type) - { - if(!isset($connections[$type]) || !is_array($connections[$type])) - { - break; - } - - if(array_key_exists('hostname', $connections[$type])) - { - $details = $connections[$type]; - unset($connections); - $connections[$type][] = $details; - } - - // Shuffle the connections - shuffle($connections[$type]); - - // Loop-de-loop - foreach($connections[$type] as $single_connection) - { - $connect_function = "pg_connect"; - if(isset($single_connection['pconnect'])) - { - $connect_function = "pg_pconnect"; - } - - $link = $type."_link"; - - get_execution_time(); - - $this->connect_string = "dbname={$single_connection['database']} user={$single_connection['username']}"; - - if(strpos($single_connection['hostname'], ':') !== false) - { - list($single_connection['hostname'], $single_connection['port']) = explode(':', $single_connection['hostname']); - } - - if($single_connection['port']) - { - $this->connect_string .= " port={$single_connection['port']}"; - } - - if($single_connection['hostname'] != "") - { - $this->connect_string .= " host={$single_connection['hostname']}"; - } - - if($single_connection['password']) - { - $this->connect_string .= " password={$single_connection['password']}"; - } - $this->$link = @$connect_function($this->connect_string); - - $time_spent = get_execution_time(); - $this->query_time += $time_spent; - - // Successful connection? break down brother! - if($this->$link) - { - $this->connections[] = "[".strtoupper($type)."] {$single_connection['username']}@{$single_connection['hostname']} (Connected in ".format_time_duration($time_spent).")"; - break; - } - else - { - $this->connections[] = "[FAILED] [".strtoupper($type)."] {$single_connection['username']}@{$single_connection['hostname']}"; - } - } - } - - // No write server was specified (simple connection or just multiple servers) - mirror write link - if(!array_key_exists('write', $connections)) - { - $this->write_link = &$this->read_link; - } - - // Have no read connection? - if(!$this->read_link) - { - $this->error("[READ] Unable to connect to PgSQL server"); - return false; - } - // No write? - else if(!$this->write_link) - { - $this->error("[WRITE] Unable to connect to PgSQL server"); - return false; - } - - $this->current_link = &$this->read_link; - return $this->read_link; - } - - /** - * Query the database. - * - * @param string $string The query SQL. - * @param boolean|int $hide_errors 1 if hide errors, 0 if not. - * @param integer $write_query 1 if executes on slave database, 0 if not. - * @return resource The query data. - */ - function query($string, $hide_errors=0, $write_query=0) - { - global $mybb; - - $string = preg_replace("#LIMIT (\s*)([0-9]+),(\s*)([0-9]+)$#im", "LIMIT $4 OFFSET $2", trim($string)); - - $this->last_query = $string; - - get_execution_time(); - - if(strtolower(substr(ltrim($string), 0, 5)) == 'alter') - { - $string = preg_replace("#\sAFTER\s([a-z_]+?)(;*?)$#i", "", $string); - if(strstr($string, 'CHANGE') !== false) - { - $string = str_replace(' CHANGE ', ' ALTER ', $string); - } - } - - if($write_query && $this->write_link) - { - while(pg_connection_busy($this->write_link)); - $this->current_link = &$this->write_link; - pg_send_query($this->current_link, $string); - $query = pg_get_result($this->current_link); - } - else - { - while(pg_connection_busy($this->read_link)); - $this->current_link = &$this->read_link; - pg_send_query($this->current_link, $string); - $query = pg_get_result($this->current_link); - } - - if((pg_result_error($query) && !$hide_errors)) - { - $this->error($string, $query); - exit; - } - - $query_time = get_execution_time(); - $this->query_time += $query_time; - $this->query_count++; - $this->last_result = $query; - - if($mybb->debug_mode) - { - $this->explain_query($string, $query_time); - } - return $query; - } - - /** - * Execute a write query on the slave database - * - * @param string $query The query SQL. - * @param boolean|int $hide_errors 1 if hide errors, 0 if not. - * @return resource The query data. - */ - function write_query($query, $hide_errors=0) - { - return $this->query($query, $hide_errors, 1); - } - - /** - * Explain a query on the database. - * - * @param string $string The query SQL. - * @param string $qtime The time it took to perform the query. - */ - function explain_query($string, $qtime) - { - if(preg_match("#^\s*select#i", $string)) - { - $query = pg_query($this->current_link, "EXPLAIN $string"); - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n"; - - while($table = pg_fetch_assoc($query)) - { - $this->explain .= - "\n". - "\n". - "\n"; - } - $this->explain .= - "\n". - "\n". - "\n". - "
    #".$this->query_count." - Select Query
    ".htmlspecialchars_uni($string)."
    Info
    ".$table['QUERY PLAN']."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - else - { - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "
    #".$this->query_count." - Write Query
    ".htmlspecialchars_uni($string)."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - - $this->querylist[$this->query_count]['query'] = $string; - $this->querylist[$this->query_count]['time'] = $qtime; - } - - /** - * Return a result array for a query. - * - * @param resource $query The query ID. - * @param int $resulttype The type of array to return. Either PGSQL_NUM, PGSQL_BOTH or PGSQL_ASSOC - * @return array The array of results. Note that all fields are returned as string: http://php.net/manual/en/function.pg-fetch-array.php - */ - function fetch_array($query, $resulttype=PGSQL_ASSOC) - { - switch($resulttype) - { - case PGSQL_NUM: - case PGSQL_BOTH: - break; - default: - $resulttype = PGSQL_ASSOC; - break; - } - - $array = pg_fetch_array($query, NULL, $resulttype); - - return $array; - } - - /** - * Return a specific field from a query. - * - * @param resource $query The query ID. - * @param string $field The name of the field to return. - * @param int|bool The number of the row to fetch it from. - * @return string|bool|null As per http://php.net/manual/en/function.pg-fetch-result.php - */ - function fetch_field($query, $field, $row=false) - { - if($row === false) - { - $array = $this->fetch_array($query); - return $array[$field]; - } - else - { - return pg_fetch_result($query, $row, $field); - } - } - - /** - * Moves internal row pointer to the next row - * - * @param resource $query The query ID. - * @param int $row The pointer to move the row to. - * @return bool - */ - function data_seek($query, $row) - { - return pg_result_seek($query, $row); - } - - /** - * Return the number of rows resulting from a query. - * - * @param resource $query The query ID. - * @return int The number of rows in the result. - */ - function num_rows($query) - { - return pg_num_rows($query); - } - - /** - * Return the last id number of inserted data. - * - * @return int The id number. - */ - function insert_id() - { - $this->last_query = str_replace(array("\r", "\t"), '', $this->last_query); - $this->last_query = str_replace("\n", ' ', $this->last_query); - preg_match('#INSERT INTO ([a-zA-Z0-9_\-]+)#i', $this->last_query, $matches); - - $table = $matches[1]; - - $query = $this->query("SELECT column_name FROM information_schema.constraint_column_usage WHERE table_name = '{$table}' and constraint_name = '{$table}_pkey' LIMIT 1"); - $field = $this->fetch_field($query, 'column_name'); - - // Do we not have a primary field? - if(!$field) - { - return 0; - } - - $id = $this->write_query("SELECT currval(pg_get_serial_sequence('{$table}', '{$field}')) AS last_value"); - return $this->fetch_field($id, 'last_value'); - } - - /** - * Close the connection with the DBMS. - * - */ - function close() - { - @pg_close($this->read_link); - if($this->write_link) - { - @pg_close($this->write_link); - } - } - - /** - * Return an error number. - * - * @param resource $query - * @return int The error number of the current error. - */ - function error_number($query=null) - { - if($query != null || !function_exists("pg_result_error_field")) - { - return 0; - } - - return pg_result_error_field($query, PGSQL_DIAG_SQLSTATE); - } - - /** - * Return an error string. - * - * @param resource $query - * @return string The explanation for the current error. - */ - function error_string($query=null) - { - if($query != null) - { - return pg_result_error($query); - } - - if($this->current_link) - { - return pg_last_error($this->current_link); - } - else - { - return pg_last_error(); - } - } - - /** - * Output a database error. - * - * @param string $string The string to present as an error. - * @param resource $query - */ - function error($string="", $query=null) - { - if($this->error_reporting) - { - if(class_exists("errorHandler")) - { - global $error_handler; - - if(!is_object($error_handler)) - { - require_once MYBB_ROOT."inc/class_error.php"; - $error_handler = new errorHandler(); - } - - $error = array( - "error_no" => $this->error_number($query), - "error" => $this->error_string($query), - "query" => $string - ); - $error_handler->error(MYBB_SQL, $error); - } - else - { - trigger_error("[SQL] [".$this->error_number()."] ".$this->error_string()."
    {$string}", E_USER_ERROR); - } - } - } - - /** - * Returns the number of affected rows in a query. - * - * @return int The number of affected rows. - */ - function affected_rows() - { - return pg_affected_rows($this->last_result); - } - - /** - * Return the number of fields. - * - * @param resource $query The query ID. - * @return int The number of fields. - */ - function num_fields($query) - { - return pg_num_fields($query); - } - - /** - * Lists all tables in the database. - * - * @param string $database The database name. - * @param string $prefix Prefix of the table (optional) - * @return array The table list. - */ - function list_tables($database, $prefix='') - { - if($prefix) - { - $query = $this->query("SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_name LIKE '".$this->escape_string($prefix)."%'"); - } - else - { - $query = $this->query("SELECT table_name FROM information_schema.tables WHERE table_schema='public'"); - } - - $tables = array(); - while($table = $this->fetch_array($query)) - { - $tables[] = $table['table_name']; - } - - return $tables; - } - - /** - * Check if a table exists in a database. - * - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function table_exists($table) - { - // Execute on master server to ensure if we've just created a table that we get the correct result - $query = $this->write_query("SELECT COUNT(table_name) as table_names FROM information_schema.tables WHERE table_schema = 'public' AND table_name='{$this->table_prefix}{$table}'"); - - $exists = $this->fetch_field($query, 'table_names'); - - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Check if a field exists in a database. - * - * @param string $field The field name. - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function field_exists($field, $table) - { - $query = $this->write_query("SELECT COUNT(column_name) as column_names FROM information_schema.columns WHERE table_name='{$this->table_prefix}{$table}' AND column_name='{$field}'"); - - $exists = $this->fetch_field($query, "column_names"); - - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Add a shutdown query. - * - * @param resource $query The query data. - * @param string $name An optional name for the query. - */ - function shutdown_query($query, $name="") - { - global $shutdown_queries; - if($name) - { - $shutdown_queries[$name] = $query; - } - else - { - $shutdown_queries[] = $query; - } - } - - /** - * Performs a simple select query. - * - * @param string $table The table name to be queried. - * @param string $fields Comma delimetered list of fields to be selected. - * @param string $conditions SQL formatted list of conditions to be matched. - * @param array $options List of options: group by, order by, order direction, limit, limit start. - * @return resource The query data. - */ - function simple_select($table, $fields="*", $conditions="", $options=array()) - { - $query = "SELECT ".$fields." FROM ".$this->table_prefix.$table; - if($conditions != "") - { - $query .= " WHERE ".$conditions; - } - - if(isset($options['group_by'])) - { - $query .= " GROUP BY ".$options['group_by']; - } - - if(isset($options['order_by'])) - { - $query .= " ORDER BY ".$options['order_by']; - if(isset($options['order_dir'])) - { - $query .= " ".my_strtoupper($options['order_dir']); - } - } - - if(isset($options['limit_start']) && isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit_start'].", ".$options['limit']; - } - else if(isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit']; - } - - return $this->query($query); - } - - /** - * Build an insert query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @param boolean $insert_id Whether or not to return an insert id. True by default - * @return int|bool The insert ID if available. False on failure and true if $insert_id is false - */ - function insert_query($table, $array, $insert_id=true) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - $array[$field] = $value; - } - else - { - $array[$field] = $this->quote_val($value); - } - } - - $fields = implode(",", array_keys($array)); - $values = implode(",", $array); - $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} (".$fields.") - VALUES (".$values.") - "); - - if($insert_id != false) - { - return $this->insert_id(); - } - else - { - return true; - } - } - - /** - * Build one query for multiple inserts from a multidimensional array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of inserts. - * @return void - */ - function insert_query_multiple($table, $array) - { - global $mybb; - - if(!is_array($array)) - { - return; - } - // Field names - $fields = array_keys($array[0]); - $fields = implode(",", $fields); - - $insert_rows = array(); - foreach($array as $values) - { - foreach($values as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - $values[$field] = $value; - } - else - { - $values[$field] = $this->quote_val($value); - } - } - $insert_rows[] = "(".implode(",", $values).")"; - } - $insert_rows = implode(", ", $insert_rows); - - $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} ({$fields}) - VALUES {$insert_rows} - "); - } - - /** - * Build an update query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @param boolean $no_quote An option to quote incoming values of the array. - * @return resource The query data. - */ - function update_query($table, $array, $where="", $limit="", $no_quote=false) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - $comma = ""; - $query = ""; - $quote = "'"; - - if($no_quote == true) - { - $quote = ""; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - $query .= $comma.$field."={$value}"; - } - else - { - $quoted_value = $this->quote_val($value, $quote); - - $query .= $comma.$field."={$quoted_value}"; - } - $comma = ', '; - } - if(!empty($where)) - { - $query .= " WHERE $where"; - } - return $this->write_query(" - UPDATE {$this->table_prefix}$table - SET $query - "); - } - - /** - * @param int|string $value - * @param string $quote - * - * @return int|string - */ - private function quote_val($value, $quote="'") - { - if(is_int($value)) - { - $quoted = $value; - } - else - { - $quoted = $quote . $value . $quote; - } - - return $quoted; - } - - /** - * Build a delete query. - * - * @param string $table The table name to perform the query on. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @return resource The query data. - */ - function delete_query($table, $where="", $limit="") - { - $query = ""; - if(!empty($where)) - { - $query .= " WHERE $where"; - } - - return $this->write_query(" - DELETE - FROM {$this->table_prefix}$table - $query - "); - } - - /** - * Escape a string according to the pg escape format. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string($string) - { - if(function_exists("pg_escape_string")) - { - $string = pg_escape_string($string); - } - else - { - $string = addslashes($string); - } - return $string; - } - - /** - * Frees the resources of a PgSQL query. - * - * @param resource $query The query to destroy. - * @return boolean Returns true on success, false on failure - */ - function free_result($query) - { - return pg_free_result($query); - } - - /** - * Escape a string used within a like command. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string_like($string) - { - return $this->escape_string(str_replace(array('%', '_') , array('\\%' , '\\_') , $string)); - } - - /** - * Gets the current version of PgSQL. - * - * @return string Version of PgSQL. - */ - function get_version() - { - if($this->version) - { - return $this->version; - } - - $version = pg_version($this->current_link); - - $this->version = $version['server']; - - return $this->version; - } - - /** - * Optimizes a specific table. - * - * @param string $table The name of the table to be optimized. - */ - function optimize_table($table) - { - $this->write_query("VACUUM ".$this->table_prefix.$table.""); - } - - /** - * Analyzes a specific table. - * - * @param string $table The name of the table to be analyzed. - */ - function analyze_table($table) - { - $this->write_query("ANALYZE ".$this->table_prefix.$table.""); - } - - /** - * Show the "create table" command for a specific table. - * - * @param string $table The name of the table. - * @return string The pg command to create the specified table. - */ - function show_create_table($table) - { - $query = $this->write_query(" - SELECT a.attnum, a.attname as field, t.typname as type, a.attlen as length, a.atttypmod as lengthvar, a.attnotnull as notnull - FROM pg_class c - LEFT JOIN pg_attribute a ON (a.attrelid = c.oid) - LEFT JOIN pg_type t ON (a.atttypid = t.oid) - WHERE c.relname = '{$this->table_prefix}{$table}' AND a.attnum > 0 - ORDER BY a.attnum - "); - - $lines = array(); - $table_lines = "CREATE TABLE {$this->table_prefix}{$table} (\n"; - - while($row = $this->fetch_array($query)) - { - // Get the data from the table - $query2 = $this->write_query(" - SELECT pg_get_expr(d.adbin, d.adrelid) as rowdefault - FROM pg_attrdef d - LEFT JOIN pg_class c ON (c.oid = d.adrelid) - WHERE c.relname = '{$this->table_prefix}{$table}' AND d.adnum = '{$row['attnum']}' - "); - - if(!$query2) - { - unset($row['rowdefault']); - } - else - { - $row['rowdefault'] = $this->fetch_field($query2, 'rowdefault'); - } - - if($row['type'] == 'bpchar') - { - // Stored in the engine as bpchar, but in the CREATE TABLE statement it's char - $row['type'] = 'char'; - } - - $line = " {$row['field']} {$row['type']}"; - - if(strpos($row['type'], 'char') !== false) - { - if($row['lengthvar'] > 0) - { - $line .= '('.($row['lengthvar'] - 4).')'; - } - } - - if(strpos($row['type'], 'numeric') !== false) - { - $line .= '('.sprintf("%s,%s", (($row['lengthvar'] >> 16) & 0xffff), (($row['lengthvar'] - 4) & 0xffff)).')'; - } - - if(!empty($row['rowdefault'])) - { - $line .= " DEFAULT {$row['rowdefault']}"; - } - - if($row['notnull'] == 't') - { - $line .= ' NOT NULL'; - } - - $lines[] = $line; - } - - // Get the listing of primary keys. - $query = $this->write_query(" - SELECT ic.relname as index_name, bc.relname as tab_name, ta.attname as column_name, i.indisunique as unique_key, i.indisprimary as primary_key - FROM pg_class bc - LEFT JOIN pg_index i ON (bc.oid = i.indrelid) - LEFT JOIN pg_class ic ON (ic.oid = i.indexrelid) - LEFT JOIN pg_attribute ia ON (ia.attrelid = i.indexrelid) - LEFT JOIN pg_attribute ta ON (ta.attrelid = bc.oid AND ta.attrelid = i.indrelid AND ta.attnum = i.indkey[ia.attnum-1]) - WHERE bc.relname = '{$this->table_prefix}{$table}' - ORDER BY index_name, tab_name, column_name - "); - - $primary_key = array(); - $primary_key_name = ''; - - $unique_keys = array(); - - // We do this in two steps. It makes placing the comma easier - while($row = $this->fetch_array($query)) - { - if($row['primary_key'] == 't') - { - $primary_key[] = $row['column_name']; - $primary_key_name = $row['index_name']; - } - - if($row['unique_key'] == 't') - { - $unique_keys[$row['index_name']][] = $row['column_name']; - } - } - - if(!empty($primary_key)) - { - $lines[] = " CONSTRAINT $primary_key_name PRIMARY KEY (".implode(', ', $primary_key).")"; - } - - foreach($unique_keys as $key_name => $key_columns) - { - $lines[] = " CONSTRAINT $key_name UNIQUE (".implode(', ', $key_columns).")"; - } - - $table_lines .= implode(", \n", $lines); - $table_lines .= "\n)\n"; - - return $table_lines; - } - - /** - * Show the "show fields from" command for a specific table. - * - * @param string $table The name of the table. - * @return array Field info for that table - */ - function show_fields_from($table) - { - $query = $this->write_query("SELECT column_name FROM information_schema.constraint_column_usage WHERE table_name = '{$this->table_prefix}{$table}' and constraint_name = '{$this->table_prefix}{$table}_pkey' LIMIT 1"); - $primary_key = $this->fetch_field($query, 'column_name'); - - $query = $this->write_query(" - SELECT column_name as Field, data_type as Extra - FROM information_schema.columns - WHERE table_name = '{$this->table_prefix}{$table}' - "); - $field_info = array(); - while($field = $this->fetch_array($query)) - { - if($field['field'] == $primary_key) - { - $field['extra'] = 'auto_increment'; - } - - $field_info[] = array('Extra' => $field['extra'], 'Field' => $field['field']); - } - - return $field_info; - } - - /** - * Returns whether or not the table contains a fulltext index. - * - * @param string $table The name of the table. - * @param string $index Optionally specify the name of the index. - * @return boolean True or false if the table has a fulltext index or not. - */ - function is_fulltext($table, $index="") - { - return false; - } - - /** - * Returns whether or not this database engine supports fulltext indexing. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - - function supports_fulltext($table) - { - return false; - } - - /** - * Returns whether or not this database engine supports boolean fulltext matching. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - function supports_fulltext_boolean($table) - { - return false; - } - - /** - * Creates a fulltext index on the specified column in the specified table with optional index name. - * - * @param string $table The name of the table. - * @param string $column Name of the column to be indexed. - * @param string $name The index name, optional. - * @return bool - */ - function create_fulltext_index($table, $column, $name="") - { - return false; - } - - /** - * Drop an index with the specified name from the specified table - * - * @param string $table The name of the table. - * @param string $name The name of the index. - */ - function drop_index($table, $name) - { - $this->write_query(" - ALTER TABLE {$this->table_prefix}$table - DROP INDEX $name - "); - } - - /** - * Checks to see if an index exists on a specified table - * - * @param string $table The name of the table. - * @param string $index The name of the index. - * @return bool Returns whether index exists - */ - function index_exists($table, $index) - { - $err = $this->error_reporting; - $this->error_reporting = 0; - - $query = $this->write_query("SELECT * FROM pg_indexes WHERE tablename='".$this->escape_string($this->table_prefix.$table)."'"); - - $exists = $this->fetch_field($query, $index); - $this->error_reporting = $err; - - if($exists) - { - return true; - } - else - { - return false; - } - } - - /** - * Drop an table with the specified table - * - * @param string $table The name of the table. - * @param boolean $hard hard drop - no checking - * @param boolean $table_prefix use table prefix - */ - function drop_table($table, $hard=false, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - if($hard == false) - { - if($this->table_exists($table)) - { - $this->write_query('DROP TABLE '.$table_prefix.$table); - } - } - else - { - $this->write_query('DROP TABLE '.$table_prefix.$table); - } - - $query = $this->query("SELECT column_name FROM information_schema.constraint_column_usage WHERE table_name = '{$table}' and constraint_name = '{$table}_pkey' LIMIT 1"); - $field = $this->fetch_field($query, 'column_name'); - - // Do we not have a primary field? - if($field) - { - $this->write_query('DROP SEQUENCE {$table}_{$field}_id_seq'); - } - } - - /** - * Renames a table - * - * @param string $old_table The old table name - * @param string $new_table the new table name - * @param boolean $table_prefix use table prefix - * @return resource - */ - function rename_table($old_table, $new_table, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - return $this->write_query("ALTER TABLE {$table_prefix}{$old_table} RENAME TO {$table_prefix}{$new_table}"); - } - - /** - * Replace contents of table with values - * - * @param string $table The table - * @param array $replacements The replacements - * @param string|array $default_field The default field(s) - * @param boolean $insert_id Whether or not to return an insert id. True by default - * @return int|resource|bool Returns either the insert id (if a new row is inserted and $insert_id is true), a boolean (if $insert_id is wrong) or the query resource (if a row is updated) - */ - function replace_query($table, $replacements=array(), $default_field="", $insert_id=true) - { - global $mybb; - - if($default_field == "") - { - $query = $this->write_query("SELECT column_name FROM information_schema.constraint_column_usage WHERE table_name = '{$this->table_prefix}{$table}' and constraint_name = '{$this->table_prefix}{$table}_pkey' LIMIT 1"); - $main_field = $this->fetch_field($query, 'column_name'); - } - else - { - $main_field = $default_field; - } - - $update = false; - $search_bit = array(); - - if(!is_array($main_field)) - { - $main_field = array($main_field); - } - - foreach($main_field as $field) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - $search_bit[] = "{$field} = ".$replacements[$field]; - } - else - { - $search_bit[] = "{$field} = ".$this->quote_val($replacements[$field]); - } - } - $search_bit = implode(" AND ", $search_bit); - $query = $this->write_query("SELECT COUNT(".$main_field[0].") as count FROM {$this->table_prefix}{$table} WHERE {$search_bit} LIMIT 1"); - if($this->fetch_field($query, "count") == 1) - { - $update = true; - } - - if($update === true) - { - return $this->update_query($table, $replacements, $search_bit); - } - else - { - return $this->insert_query($table, $replacements, $insert_id); - } - } - - /** - * @param string $table - * @param string $append - * - * @return string - */ - function build_fields_string($table, $append="") - { - $fields = $this->show_fields_from($table); - $comma = $fieldstring = ''; - - foreach($fields as $key => $field) - { - $fieldstring .= $comma.$append.$field['Field']; - $comma = ','; - } - - return $fieldstring; - } - - /** - * Drops a column - * - * @param string $table The table - * @param string $column The column name - * @return resource - */ - function drop_column($table, $column) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} DROP {$column}"); - } - - /** - * Adds a column - * - * @param string $table The table - * @param string $column The column name - * @param string $definition the new column definition - * @return resource - */ - function add_column($table, $column, $definition) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ADD {$column} {$definition}"); - } - - /** - * Modifies a column - * - * @param string $table The table - * @param string $column The column name - * @param string $new_definition the new column definition - * @param boolean $new_not_null Whether to drop or set a column - * @param boolean $new_default_value The new default value (if one is to be set) - * @return bool Returns true if all queries are executed successfully or false if one of them failed - */ - function modify_column($table, $column, $new_definition, $new_not_null=false, $new_default_value=false) - { - $result1 = $result2 = $result3 = true; - - if($new_definition !== false) - { - $result1 = $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ALTER COLUMN {$column} TYPE {$new_definition}"); - } - - if($new_not_null !== false) - { - $set_drop = "DROP"; - - if(strtolower($new_not_null) == "set") - { - $set_drop = "SET"; - } - - $result2 = $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ALTER COLUMN {$column} {$set_drop} NOT NULL"); - } - - if($new_default_value !== false) - { - $result3 = $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ALTER COLUMN {$column} SET DEFAULT {$new_default_value}"); - } - else - { - $result3 = $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ALTER COLUMN {$column} DROP DEFAULT"); - } - - return $result1 && $result2 && $result3; - } - - /** - * Renames a column - * - * @param string $table The table - * @param string $old_column The old column name - * @param string $new_column the new column name - * @param string $new_definition the new column definition - * @param boolean $new_not_null Whether to drop or set a column - * @param boolean $new_default_value The new default value (if one is to be set) - * @return bool Returns true if all queries are executed successfully - */ - function rename_column($table, $old_column, $new_column, $new_definition, $new_not_null=false, $new_default_value=false) - { - $result1 = $this->write_query("ALTER TABLE {$this->table_prefix}{$table} RENAME COLUMN {$old_column} TO {$new_column}"); - $result2 = $this->modify_column($table, $new_column, $new_definition, $new_not_null, $new_default_value); - return ($result1 && $result2); - } - - /** - * Sets the table prefix used by the simple select, insert, update and delete functions - * - * @param string $prefix The new table prefix - */ - function set_table_prefix($prefix) - { - $this->table_prefix = $prefix; - } - - /** - * Fetched the total size of all mysql tables or a specific table - * - * @param string $table The table (optional) - * @return integer the total size of all mysql tables or a specific table - */ - function fetch_size($table='') - { - if($table != '') - { - $query = $this->query("SELECT reltuples, relpages FROM pg_class WHERE relname = '".$this->table_prefix.$table."'"); - } - else - { - $query = $this->query("SELECT reltuples, relpages FROM pg_class"); - } - $total = 0; - while($table = $this->fetch_array($query)) - { - $total += $table['relpages']+$table['reltuples']; - } - return $total; - } - - /** - * Fetch a list of database character sets this DBMS supports - * - * @return array|bool Array of supported character sets with array key being the name, array value being display name. False if unsupported - */ - function fetch_db_charsets() - { - return false; - } - - /** - * Fetch a database collation for a particular database character set - * - * @param string $charset The database character set - * @return string|bool The matching database collation, false if unsupported - */ - function fetch_charset_collation($charset) - { - return false; - } - - /** - * Fetch a character set/collation string for use with CREATE TABLE statements. Uses current DB encoding - * - * @return string The built string, empty if unsupported - */ - function build_create_table_collation() - { - return ''; - } - - /** - * Time how long it takes for a particular piece of code to run. Place calls above & below the block of code. - * - * @deprecated - */ - function get_execution_time() - { - return get_execution_time(); - } - - /** - * Binary database fields require special attention. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function escape_binary($string) - { - return "'".pg_escape_bytea($string)."'"; - } - - /** - * Unescape binary data. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function unescape_binary($string) - { - // hex format - if(substr($string, 0, 2) == '\x') - { - return pack('H*', substr($string, 2)); - } - // escape format - else - { - return pg_unescape_bytea($string); - } - } -} - diff --git a/html/forums/inc/db_sqlite.php b/html/forums/inc/db_sqlite.php deleted file mode 100644 index 052b8c9..0000000 --- a/html/forums/inc/db_sqlite.php +++ /dev/null @@ -1,1534 +0,0 @@ -db = new dbpdoEngine("sqlite:{$config['database']}"); - - $query_time = get_execution_time(); - - $this->query_time += $query_time; - - $this->connections[] = "[WRITE] {$config['database']} (Connected in ".format_time_duration($query_time).")"; - - if($this->db) - { - $this->query('PRAGMA short_column_names = 1'); - return true; - } - else - { - return false; - } - } - - /** - * Query the database. - * - * @param string $string The query SQL. - * @param boolean|int $hide_errors 1 if hide errors, 0 if not. - * @param integer $write_query 1 if executes on master database, 0 if not. - * @return PDOStatement The query data. - */ - function query($string, $hide_errors=0, $write_query=0) - { - global $mybb; - - get_execution_time(); - - if(strtolower(substr(ltrim($string), 0, 5)) == 'alter') - { - $string = preg_replace("#\sAFTER\s([a-z_]+?)(;*?)$#i", "", $string); - - $queryparts = preg_split("/[\s]+/", $string, 4, PREG_SPLIT_NO_EMPTY); - $tablename = $queryparts[2]; - $alterdefs = $queryparts[3]; - if(strtolower($queryparts[1]) != 'table' || $queryparts[2] == '') - { - $this->error_msg = "near \"{$queryparts[0]}\": syntax error"; - } - else - { - // SQLITE 3 supports ADD and RENAME TO alter statements - if(strtolower(substr(ltrim($alterdefs), 0, 3)) == 'add' || strtolower(substr(ltrim($alterdefs), 0, 9)) == "rename to") - { - $query = $this->db->query($string); - $query->closeCursor(); - } - else - { - $query = $this->alter_table_parse($tablename, $alterdefs, $string); - } - } - } - else - { - try - { - $query = $this->db->query($string); - } - catch(PDOException $exception) - { - $error = array( - "message" => $exception->getMessage(), - "code" => $exception->getCode() - ); - - $this->error($error['message'], $error['code']); - } - } - - $this->query_objects[] = $query; - - if($this->error_number($query) > 0 && !$hide_errors) - { - $this->error($string, $query); - exit; - } - - $query_time = get_execution_time(); - $this->query_time += $query_time; - $this->query_count++; - - if($mybb->debug_mode) - { - $this->explain_query($string, $query_time); - } - - if(strtolower(substr(ltrim($string), 0, 6)) == "create") - { - $query->closeCursor(); - return null; - } - - return $query; - } - - /** - * Explain a query on the database. - * - * @param string $string The query SQL. - * @param string $qtime The time it took to perform the query. - */ - function explain_query($string, $qtime) - { - if(preg_match("#^\s*select#i", $string)) - { - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "
    #".$this->query_count." - Select Query
    ".htmlspecialchars_uni($string)."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - else - { - $this->explain .= "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "\n". - "
    #".$this->query_count." - Write Query
    ".htmlspecialchars_uni($string)."
    Query Time: ".format_time_duration($qtime)."
    \n". - "
    \n"; - } - - $this->querylist[$this->query_count]['query'] = $string; - $this->querylist[$this->query_count]['time'] = $qtime; - } - - /** - * Execute a write query on the database - * - * @param string $query The query SQL. - * @param boolean|int $hide_errors 1 if hide errors, 0 if not. - * @return PDOStatement The query data. - */ - function write_query($query, $hide_errors=0) - { - return $this->query($query, $hide_errors); - } - - /** - * Return a result array for a query. - * - * @param PDOStatement $query The result data. - * @param int $resulttype One of PDO's constants: FETCH_ASSOC, FETCH_BOUND, FETCH_CLASS, FETCH_INTO, FETCH_LAZY, FETCH_NAMED, FETCH_NUM, FETCH_OBJ or FETCH_BOTH - * @return array The array of results. - */ - function fetch_array($query, $resulttype=PDO::FETCH_BOTH) - { - $array = $this->db->fetch_array($query, $resulttype); - return $array; - } - - /** - * Return a specific field from a query. - * - * @param PDOStatement $query The query ID. - * @param string $field The name of the field to return. - * @param int|bool $row The number of the row to fetch it from. - * @return mixed - */ - function fetch_field($query, $field, $row=false) - { - if($row !== false) - { - $this->data_seek($query, $row); - } - $array = $this->fetch_array($query); - return $array[$field]; - } - - /** - * Moves internal row pointer to the next row - * - * @param PDOStatement $query The query ID. - * @param int $row The pointer to move the row to. - */ - function data_seek($query, $row) - { - $this->db->seek($query, $row); - } - - /** - * Closes cursors of registered queries. - * - */ - function close_cursors() - { - $result = true; - - foreach($this->query_objects as $query) - { - if(!$query->closeCursor()) - { - $result = false; - } - } - - return $result; - } - - /** - * Return the number of rows resulting from a query. - * - * @param PDOStatement $query The query data. - * @return int The number of rows in the result. - */ - function num_rows($query) - { - return $this->db->num_rows($query); - } - - /** - * Return the last id number of inserted data. - * - * @param string $name - * @return int The id number. - */ - function insert_id($name="") - { - return $this->db->insert_id($name); - } - - /** - * Close the connection with the DBMS. - * - */ - function close() - { - return; - } - - /** - * Return an error number. - * - * @param PDOStatement $query - * @return int The error number of the current error. - */ - function error_number($query=null) - { - if($query == null) - { - $query = $this->db->last_query; - } - - $this->error_number = $this->db->error_number($query); - - return $this->error_number; - } - - /** - * Return an error string. - * - * @param PDOStatement $query - * @return string The explanation for the current error. - */ - function error_string($query=null) - { - if($this->error_number != "") - { - if($query == null) - { - $query = $this->db->last_query; - } - - $error_string = $this->db->error_string($query); - $this->error_number = ""; - - return $error_string; - } - - return ''; - } - - /** - * Output a database error. - * - * @param string $string The string to present as an error. - * @param PDOStatement $query - * @param string $error - * @param int $error_no - */ - function error($string="", $query=null, $error="", $error_no=0) - { - if($this->error_reporting) - { - if($query == null) - { - $query = $this->db->last_query; - } - - if($error_no == 0) - { - $error_no = $this->error_number($query); - } - - if($error == "") - { - $error = $this->error_string($query); - } - - if(class_exists("errorHandler")) - { - global $error_handler; - - if(!is_object($error_handler)) - { - require_once MYBB_ROOT."inc/class_error.php"; - $error_handler = new errorHandler(); - } - - $error = array( - "error_no" => $error_no, - "error" => $error, - "query" => $string - ); - $error_handler->error(MYBB_SQL, $error); - } - else - { - trigger_error("[SQL] [{$error_no}] {$error}
    {$string}", E_USER_ERROR); - } - } - } - - /** - * Returns the number of affected rows in a query. - * - * @param PDOStatement $query - * @return int The number of affected rows. - */ - function affected_rows($query=null) - { - if($query == null) - { - $query = $this->db->last_query; - } - - return $this->db->affected_rows($query); - } - - /** - * Return the number of fields. - * - * @param PDOStatement $query The query data. - * @return int The number of fields. - */ - function num_fields($query) - { - if(!$query) - { - $query = $this->db->last_query; - } - - return $this->db->num_fields($query); - } - - /** - * Lists all tables in the database. - * - * @param string $database The database name. - * @param string $prefix Prefix of the table (optional) - * @return array The table list. - */ - function list_tables($database, $prefix='') - { - if($prefix) - { - $query = $this->query("SELECT tbl_name FROM sqlite_master WHERE type = 'table' AND tbl_name LIKE '".$this->escape_string($prefix)."%'"); - } - else - { - $query = $this->query("SELECT tbl_name FROM sqlite_master WHERE type = 'table'"); - } - - $tables = array(); - while($table = $this->fetch_array($query)) - { - $tables[] = $table['tbl_name']; - } - $query->closeCursor(); - return $tables; - } - - /** - * Check if a table exists in a database. - * - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function table_exists($table) - { - $query = $this->query("SELECT COUNT(name) as count FROM sqlite_master WHERE type='table' AND name='{$this->table_prefix}{$table}'"); - $exists = $this->fetch_field($query, "count"); - $query->closeCursor(); - - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Check if a field exists in a database. - * - * @param string $field The field name. - * @param string $table The table name. - * @return boolean True when exists, false if not. - */ - function field_exists($field, $table) - { - $query = $this->query("PRAGMA table_info('{$this->table_prefix}{$table}')"); - - $exists = 0; - - while($row = $this->fetch_array($query)) - { - if($row['name'] == $field) - { - ++$exists; - } - } - - $query->closeCursor(); - - if($exists > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Add a shutdown query. - * - * @param PDOStatement $query The query data. - * @param string $name An optional name for the query. - */ - function shutdown_query($query, $name="") - { - global $shutdown_queries; - if($name) - { - $shutdown_queries[$name] = $query; - } - else - { - $shutdown_queries[] = $query; - } - } - - /** - * Performs a simple select query. - * - * @param string $table The table name to be queried. - * @param string $fields Comma delimetered list of fields to be selected. - * @param string $conditions SQL formatted list of conditions to be matched. - * @param array $options List of options: group by, order by, order direction, limit, limit start. - * @return PDOStatement The query data. - */ - function simple_select($table, $fields="*", $conditions="", $options=array()) - { - $query = "SELECT ".$fields." FROM ".$this->table_prefix.$table; - - if($conditions != "") - { - $query .= " WHERE ".$conditions; - } - - if(isset($options['group_by'])) - { - $query .= " GROUP BY ".$options['group_by']; - } - - if(isset($options['order_by'])) - { - $query .= " ORDER BY ".$options['order_by']; - - if(isset($options['order_dir'])) - { - $query .= " ".strtoupper($options['order_dir']); - } - } - - if(isset($options['limit_start']) && isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit_start'].", ".$options['limit']; - } - else if(isset($options['limit'])) - { - $query .= " LIMIT ".$options['limit']; - } - - return $this->query($query); - } - - /** - * Build an insert query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @return int|bool The insert ID if available or false if an error is found - */ - function insert_query($table, $array) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $array[$field] = $value; - } - else - { - $array[$field] = $this->quote_val($value); - } - } - - $fields = implode(",", array_keys($array)); - $values = implode(",", $array); - $query = $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} (".$fields.") - VALUES (".$values.") - "); - $query->closeCursor(); - return $this->insert_id(); - } - - /** - * Build one query for multiple inserts from a multidimensional array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of inserts. - * @return void - */ - function insert_query_multiple($table, $array) - { - global $mybb; - - if(!is_array($array)) - { - return; - } - // Field names - $fields = array_keys($array[0]); - $fields = implode(",", $fields); - - $insert_rows = array(); - foreach($array as $values) - { - foreach($values as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $values[$field] = $value; - } - else - { - $values[$field] = $this->quote_val($value); - } - } - $insert_rows[] = "(".implode(",", $values).")"; - } - $insert_rows = implode(", ", $insert_rows); - - $query = $this->write_query(" - INSERT - INTO {$this->table_prefix}{$table} ({$fields}) - VALUES {$insert_rows} - "); - $query->closeCursor(); - } - - /** - * Build an update query from an array. - * - * @param string $table The table name to perform the query on. - * @param array $array An array of fields and their values. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @param boolean $no_quote An option to quote incoming values of the array. - * @return PDOStatement The query data. - */ - function update_query($table, $array, $where="", $limit="", $no_quote=false) - { - global $mybb; - - if(!is_array($array)) - { - return false; - } - - $comma = ""; - $query = ""; - $quote = "'"; - - if($no_quote == true) - { - $quote = ""; - } - - foreach($array as $field => $value) - { - if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $query .= $comma.$field."=".$value; - } - else - { - $quoted_value = $this->quote_val($value, $quote); - - $query .= $comma.$field."={$quoted_value}"; - } - $comma = ', '; - } - - if(!empty($where)) - { - $query .= " WHERE $where"; - } - - $query = $this->query("UPDATE {$this->table_prefix}$table SET $query"); - $query->closeCursor(); - return $query; - } - - /** - * @param int|string $value - * @param string $quote - * - * @return int|string - */ - private function quote_val($value, $quote="'") - { - if(is_int($value)) - { - $quoted = $value; - } - else - { - $quoted = $quote . $value . $quote; - } - - return $quoted; - } - - /** - * Build a delete query. - * - * @param string $table The table name to perform the query on. - * @param string $where An optional where clause for the query. - * @param string $limit An optional limit clause for the query. - * @return PDOStatement The query data. - */ - function delete_query($table, $where="", $limit="") - { - $query = ""; - if(!empty($where)) - { - $query .= " WHERE $where"; - } - - $query = $this->query("DELETE FROM {$this->table_prefix}$table $query"); - $query->closeCursor(); - return $query; - } - - /** - * Escape a string - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string($string) - { - $string = $this->db->escape_string($string); - return $string; - } - - /** - * Serves no purposes except compatibility - * - * @param PDOStatement $query - * @return boolean Returns true on success, false on failure - */ - function free_result($query) - { - return true; - } - - /** - * Escape a string used within a like command. - * - * @param string $string The string to be escaped. - * @return string The escaped string. - */ - function escape_string_like($string) - { - return $this->escape_string(str_replace(array('%', '_') , array('\\%' , '\\_') , $string)); - } - - /** - * Gets the current version of SQLLite. - * - * @return string Version of MySQL. - */ - function get_version() - { - if($this->version) - { - return $this->version; - } - $this->version = $this->db->get_attribute("ATTR_SERVER_VERSION"); - - return $this->version; - } - - /** - * Optimizes a specific table. - * - * @param string $table The name of the table to be optimized. - */ - function optimize_table($table) - { - $query = $this->query("VACUUM ".$this->table_prefix.$table.""); - $query->closeCursor(); - } - - /** - * Analyzes a specific table. - * - * @param string $table The name of the table to be analyzed. - */ - function analyze_table($table) - { - $query = $this->query("ANALYZE ".$this->table_prefix.$table.""); - $query->closeCursor(); - } - - /** - * Show the "create table" command for a specific table. - * - * @param string $table The name of the table. - * @return string The SQLite command to create the specified table. - */ - function show_create_table($table) - { - $old_tbl_prefix = $this->table_prefix; - $this->set_table_prefix(""); - $query = $this->simple_select("sqlite_master", "sql", "type = 'table' AND name = '{$old_tbl_prefix}{$table}' ORDER BY type DESC, name"); - $this->set_table_prefix($old_tbl_prefix); - - $result = $this->fetch_field($query, 'sql'); - - $query->closeCursor(); - - return $result; - } - - /** - * Show the "show fields from" command for a specific table. - * - * @param string $table The name of the table. - * @return array Field info for that table - */ - function show_fields_from($table) - { - $old_tbl_prefix = $this->table_prefix; - $this->set_table_prefix(""); - $query = $this->simple_select("sqlite_master", "sql", "type = 'table' AND name = '{$old_tbl_prefix}{$table}'"); - $this->set_table_prefix($old_tbl_prefix); - $table = trim(preg_replace('#CREATE\s+TABLE\s+"?'.$this->table_prefix.$table.'"?#i', '', $this->fetch_field($query, "sql"))); - $query->closeCursor(); - - preg_match('#\((.*)\)#s', $table, $matches); - - $field_info = array(); - $table_cols = explode(',', trim($matches[1])); - foreach($table_cols as $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - $column_name = preg_replace('/"?([^"]+)"?/', '\1', $entities[0]); - - $field_info[] = array('Extra' => $entities[1], 'Field' => $column_name); - } - - return $field_info; - } - - /** - * Returns whether or not the table contains a fulltext index. - * - * @param string $table The name of the table. - * @param string $index Optionally specify the name of the index. - * @return boolean True or false if the table has a fulltext index or not. - */ - function is_fulltext($table, $index="") - { - return false; - } - - /** - * Returns whether or not this database engine supports fulltext indexing. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - - function supports_fulltext($table) - { - return false; - } - - /** - * Returns whether or not this database engine supports boolean fulltext matching. - * - * @param string $table The table to be checked. - * @return boolean True or false if supported or not. - */ - function supports_fulltext_boolean($table) - { - return false; - } - - /** - * Creates a fulltext index on the specified column in the specified table with optional index name. - * - * @param string $table The name of the table. - * @param string $column Name of the column to be indexed. - * @param string $name The index name, optional. - * @return bool - */ - function create_fulltext_index($table, $column, $name="") - { - return false; - } - - /** - * Drop an index with the specified name from the specified table - * - * @param string $table The name of the table. - * @param string $name The name of the index. - */ - function drop_index($table, $name) - { - $query = $this->query("ALTER TABLE {$this->table_prefix}$table DROP INDEX $name"); - $query->closeCursor(); - } - - /** - * Checks to see if an index exists on a specified table - * - * @param string $table The name of the table. - * @param string $index The name of the index. - * @return bool Returns whether index exists - */ - function index_exists($table, $index) - { - return false; - } - - /** - * Drop an table with the specified table - * - * @param string $table The name of the table. - * @param boolean $hard hard drop - no checking - * @param boolean $table_prefix use table prefix - */ - function drop_table($table, $hard=false, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - if($hard == false) - { - if($this->table_exists($table)) - { - $query = $this->query('DROP TABLE '.$table_prefix.$table); - } - } - else - { - $query = $this->query('DROP TABLE '.$table_prefix.$table); - } - - if(isset($query)) - { - $query->closeCursor(); - } - } - - /** - * Renames a table - * - * @param string $old_table The old table name - * @param string $new_table the new table name - * @param boolean $table_prefix use table prefix - * @return PDOStatement - */ - function rename_table($old_table, $new_table, $table_prefix=true) - { - if($table_prefix == false) - { - $table_prefix = ""; - } - else - { - $table_prefix = $this->table_prefix; - } - - $query = $this->write_query("ALTER TABLE {$table_prefix}{$old_table} RENAME TO {$table_prefix}{$new_table}"); - $query->closeCursor(); - return $query; - } - - /** - * Replace contents of table with values - * - * @param string $table The table - * @param array $replacements The replacements - * @param mixed $default_field The default field(s) - * @return int|PDOStatement|bool Returns either the insert id (if a new row is inserted), the query resource (if a row is updated) or false on failure - */ - function replace_query($table, $replacements=array(), $default_field="") - { - global $mybb; - - $columns = ''; - $values = ''; - $comma = ''; - foreach($replacements as $column => $value) - { - $columns .= $comma.$column; - if(isset($mybb->binary_fields[$table][$column]) && $mybb->binary_fields[$table][$column]) - { - if($value[0] != 'X') // Not escaped? - { - $value = $this->escape_binary($value); - } - - $values .= $comma.$value; - } - else - { - $values .= $comma.$this->quote_val($value); - } - - $comma = ','; - } - - if(empty($columns) || empty($values)) - { - return false; - } - - if($default_field == "") - { - $query = $this->query("REPLACE INTO {$this->table_prefix}{$table} ({$columns}) VALUES({$values})"); - $query->closeCursor(); - return $query; - } - else - { - $update = false; - if(is_array($default_field) && !empty($default_field)) - { - $search_bit = array(); - foreach($default_field as $field) - { - $search_bit[] = "{$field} = '".$replacements[$field]."'"; - } - - $search_bit = implode(" AND ", $search_bit); - $query = $this->write_query("SELECT COUNT(".$default_field[0].") as count FROM {$this->table_prefix}{$table} WHERE {$search_bit} LIMIT 1"); - if($this->fetch_field($query, "count") == 1) - { - $update = true; - } - } - else - { - $query = $this->write_query("SELECT {$default_field} FROM {$this->table_prefix}{$table}"); - $search_bit = "{$default_field}='".$replacements[$default_field]."'"; - - while($column = $this->fetch_array($query)) - { - if($column[$default_field] == $replacements[$default_field]) - { - $update = true; - break; - } - } - } - - if($update === true) - { - return $this->update_query($table, $replacements, $search_bit); - } - else - { - return $this->insert_query($table, $replacements); - } - } - } - - /** - * Sets the table prefix used by the simple select, insert, update and delete functions - * - * @param string $prefix The new table prefix - */ - function set_table_prefix($prefix) - { - $this->table_prefix = $prefix; - } - - /** - * Fetched the total size of all mysql tables or a specific table - * - * @param string $table The table (optional) (ignored) - * @return integer the total size of all mysql tables or a specific table - */ - function fetch_size($table='') - { - global $config, $lang; - - $total = @filesize($config['database']['database']); - if(!$total || $table != '') - { - $total = $lang->na; - } - return $total; - } - - /** - * Perform an "Alter Table" query in SQLite < 3.2.0 - Code taken from http://code.jenseng.com/db/ - * - * @param string $table The table (optional) - * @param string $alterdefs - * @param string $fullquery - * @return bool True on success, false on failure - */ - function alter_table_parse($table, $alterdefs, $fullquery="") - { - if(!$fullquery) - { - $fullquery = " ... {$alterdefs}"; - } - - if(!defined("TIME_NOW")) - { - define("TIME_NOW", time()); - } - - if($alterdefs != '') - { - $result = $this->query("SELECT sql,name,type FROM sqlite_master WHERE tbl_name = '{$table}' ORDER BY type DESC"); - if($this->num_rows($result) > 0) - { - $row = $this->fetch_array($result); // Table sql - $result->closeCursor(); - $tmpname = 't'.TIME_NOW; - $origsql = trim(preg_replace("/[\s]+/", " ", str_replace(",", ", ", preg_replace("/[\(]/","( ", $row['sql'], 1)))); - $createtemptableSQL = 'CREATE TEMPORARY '.substr(trim(preg_replace("'".$table."'", $tmpname, $origsql, 1)), 6); - $defs = preg_split("/[,]+/", $alterdefs, -1, PREG_SPLIT_NO_EMPTY); - $prevword = $table; - $oldcols = preg_split("/[,]+/", substr(trim($createtemptableSQL), strpos(trim($createtemptableSQL), '(')+1), -1, PREG_SPLIT_NO_EMPTY); - $newcols = array(); - - for($i = 0; $i < sizeof($oldcols); $i++) - { - $colparts = preg_split("/[\s]+/", $oldcols[$i], -1, PREG_SPLIT_NO_EMPTY); - $oldcols[$i] = $colparts[0]; - $newcols[$colparts[0]] = $colparts[0]; - } - - $newcolumns = ''; - $oldcolumns = ''; - reset($newcols); - - foreach($newcols as $key => $val) - { - $newcolumns .= ($newcolumns ? ', ' : '').$val; - $oldcolumns .= ($oldcolumns ? ', ' : '').$key; - } - - $copytotempsql = 'INSERT INTO '.$tmpname.'('.$newcolumns.') SELECT '.$oldcolumns.' FROM '.$table; - $dropoldsql = 'DROP TABLE '.$table; - $createtesttableSQL = $createtemptableSQL; - - foreach($defs as $def) - { - $defparts = preg_split("/[\s]+/", $def, -1, PREG_SPLIT_NO_EMPTY); - $action = strtolower($defparts[0]); - - switch($action) - { - case 'change': - if(sizeof($defparts) <= 3) - { - $this->error($alterdefs, 'near "'.$defparts[0].($defparts[1] ? ' '.$defparts[1] : '').($defparts[2] ? ' '.$defparts[2] : '').'": syntax error', E_USER_WARNING); - return false; - } - - if($severpos = strpos($createtesttableSQL, ' '.$defparts[1].' ')) - { - if($newcols[$defparts[1]] != $defparts[1]) - { - $this->error($alterdefs, 'unknown column "'.$defparts[1].'" in "'.$table.'"'); - return false; - } - - $newcols[$defparts[1]] = $defparts[2]; - $nextcommapos = strpos($createtesttableSQL, ',', $severpos); - $insertval = ''; - - for($i = 2; $i < sizeof($defparts); $i++) - { - $insertval .= ' '.$defparts[$i]; - } - - if($nextcommapos) - { - $createtesttableSQL = substr($createtesttableSQL, 0, $severpos).$insertval.substr($createtesttableSQL, $nextcommapos); - } - else - { - $createtesttableSQL = substr($createtesttableSQL, 0, $severpos-(strpos($createtesttableSQL, ',') ? 0 : 1)).$insertval.')'; - } - } - else - { - $this->error($fullquery, 'unknown column "'.$defparts[1].'" in "'.$table.'"', E_USER_WARNING); - return false; - } - break; - case 'drop': - if(sizeof($defparts) < 2) - { - $this->error($fullquery, 'near "'.$defparts[0].($defparts[1] ? ' '.$defparts[1] : '').'": syntax error'); - return false; - } - - if($severpos = strpos($createtesttableSQL, ' '.$defparts[1].' ')) - { - $nextcommapos = strpos($createtesttableSQL, ',', $severpos); - - if($nextcommapos) - { - $createtesttableSQL = substr($createtesttableSQL, 0, $severpos).substr($createtesttableSQL, $nextcommapos + 1); - } - else - { - $createtesttableSQL = substr($createtesttableSQL, 0, $severpos-(strpos($createtesttableSQL, ',') ? 0 : 1) - 1).')'; - } - - unset($newcols[$defparts[1]]); - } - else - { - $this->error($fullquery, 'unknown column "'.$defparts[1].'" in "'.$table.'"'); - return false; - } - break; - default: - $this->error($fullquery, 'near "'.$prevword.'": syntax error'); - return false; - } - - $prevword = $defparts[sizeof($defparts)-1]; - } - - // This block of code generates a test table simply to verify that the columns specifed are valid in an sql statement - // This ensures that no reserved words are used as columns, for example - $this->query($createtesttableSQL); - - $droptempsql = 'DROP TABLE '.$tmpname; - $query = $this->query($droptempsql, 0); - if($query === false) - { - return false; - } - $query->closeCursor(); - // End block - - - $createnewtableSQL = 'CREATE '.substr(trim(preg_replace("'{$tmpname}'", $table, $createtesttableSQL, 1)), 17); - $newcolumns = ''; - $oldcolumns = ''; - reset($newcols); - - foreach($newcols as $key => $val) - { - $newcolumns .= ($newcolumns ? ', ' : '').$val; - $oldcolumns .= ($oldcolumns ? ', ' : '').$key; - } - - $copytonewsql = 'INSERT INTO '.$table.'('.$newcolumns.') SELECT '.$oldcolumns.' FROM '.$tmpname; - - - $this->query($createtemptableSQL); // Create temp table - $query = $this->query($copytotempsql); // Copy to table - $query->closeCursor(); - $query = $this->query($dropoldsql); // Drop old table - $query->closeCursor(); - - $this->query($createnewtableSQL); // Recreate original table - $query = $this->query($copytonewsql); // Copy back to original table - $query->closeCursor(); - $query = $this->query($droptempsql); // Drop temp table - $query->closeCursor(); - } - else - { - $this->error($fullquery, 'no such table: '.$table); - return false; - } - } - return true; - } - - /** - * Drops a column - * - * @param string $table The table - * @param string $column The column name - * @return PDOStatement - */ - function drop_column($table, $column) - { - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} DROP {$column}"); - } - - /** - * Adds a column - * - * @param string $table The table - * @param string $column The column name - * @param string $definition the new column definition - * @return PDOStatement - */ - function add_column($table, $column, $definition) - { - $query = $this->write_query("ALTER TABLE {$this->table_prefix}{$table} ADD {$column} {$definition}"); - $query->closeCursor(); - return $query; - } - - /** - * Modifies a column - * - * @param string $table The table - * @param string $column The column name - * @param string $new_definition the new column definition - */ - function modify_column($table, $column, $new_definition) - { - // We use a rename query as both need to duplicate the table etc... - $this->rename_column($table, $column, $column, $new_definition); - } - - /** - * Renames a column - * - * @param string $table The table - * @param string $old_column The old column name - * @param string $new_column the new column name - * @param string $new_definition the new column definition - * @return PDOStatement - */ - function rename_column($table, $old_column, $new_column, $new_definition) - { - // This will trigger the "alter_table_parse" function which will copy the table and rename the column - return $this->write_query("ALTER TABLE {$this->table_prefix}{$table} CHANGE {$old_column} {$new_column} {$new_definition}"); - } - - /** - * Fetch a list of database character sets this DBMS supports - * - * @return array|bool Array of supported character sets with array key being the name, array value being display name. False if unsupported - */ - function fetch_db_charsets() - { - return false; - } - - /** - * Fetch a database collation for a particular database character set - * - * @param string $charset The database character set - * @return string|bool The matching database collation, false if unsupported - */ - function fetch_charset_collation($charset) - { - return false; - } - - /** - * Fetch a character set/collation string for use with CREATE TABLE statements. Uses current DB encoding - * - * @return string The built string, empty if unsupported - */ - function build_create_table_collation() - { - return ''; - } - - /** - * Time how long it takes for a particular piece of code to run. Place calls above & below the block of code. - * - * @deprecated - */ - function get_execution_time() - { - return get_execution_time(); - } - - /** - * Binary database fields require special attention. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function escape_binary($string) - { - return "X'".$this->escape_string(bin2hex($string))."'"; - } - - /** - * Unescape binary data. - * - * @param string $string Binary value - * @return string Encoded binary value - */ - function unescape_binary($string) - { - // Nothing to do - return $string; - } -} - diff --git a/html/forums/inc/functions.php b/html/forums/inc/functions.php deleted file mode 100644 index 6305b67..0000000 --- a/html/forums/inc/functions.php +++ /dev/null @@ -1,8676 +0,0 @@ -stop()); - $contents = $plugins->run_hooks("pre_output_page", $contents); - - if($mybb->usergroup['cancp'] == 1 || $mybb->dev_mode == 1) - { - if($mybb->settings['extraadmininfo'] != 0) - { - $phptime = $maintimer->totaltime - $db->query_time; - $query_time = $db->query_time; - - if($maintimer->totaltime > 0) - { - $percentphp = number_format((($phptime/$maintimer->totaltime) * 100), 2); - $percentsql = number_format((($query_time/$maintimer->totaltime) * 100), 2); - } - else - { - // if we've got a super fast script... all we can do is assume something - $percentphp = 0; - $percentsql = 0; - } - - $serverload = get_server_load(); - - if(my_strpos(getenv("REQUEST_URI"), "?")) - { - $debuglink = htmlspecialchars_uni(getenv("REQUEST_URI")) . "&debug=1"; - } - else - { - $debuglink = htmlspecialchars_uni(getenv("REQUEST_URI")) . "?debug=1"; - } - - $memory_usage = get_memory_usage(); - - if($memory_usage) - { - $memory_usage = $lang->sprintf($lang->debug_memory_usage, get_friendly_size($memory_usage)); - } - else - { - $memory_usage = ''; - } - // MySQLi is still MySQL, so present it that way to the user - $database_server = $db->short_title; - - if($database_server == 'MySQLi') - { - $database_server = 'MySQL'; - } - $generated_in = $lang->sprintf($lang->debug_generated_in, $totaltime); - $debug_weight = $lang->sprintf($lang->debug_weight, $percentphp, $percentsql, $database_server); - $sql_queries = $lang->sprintf($lang->debug_sql_queries, $db->query_count); - $server_load = $lang->sprintf($lang->debug_server_load, $serverload); - - eval("\$debugstuff = \"".$templates->get("debug_summary")."\";"); - $contents = str_replace("", $debugstuff, $contents); - } - - if($mybb->debug_mode == true) - { - debug_page(); - } - } - - $contents = str_replace("", "", $contents); - - if($mybb->settings['gzipoutput'] == 1) - { - $contents = gzip_encode($contents, $mybb->settings['gziplevel']); - } - - @header("Content-type: text/html; charset={$lang->settings['charset']}"); - - echo $contents; - - $plugins->run_hooks("post_output_page"); -} - -/** - * Adds a function or class to the list of code to run on shutdown. - * - * @param string|array $name The name of the function. - * @param mixed $arguments Either an array of arguments for the function or one argument - * @return boolean True if function exists, otherwise false. - */ -function add_shutdown($name, $arguments=array()) -{ - global $shutdown_functions; - - if(!is_array($shutdown_functions)) - { - $shutdown_functions = array(); - } - - if(!is_array($arguments)) - { - $arguments = array($arguments); - } - - if(is_array($name) && method_exists($name[0], $name[1])) - { - $shutdown_functions[] = array('function' => $name, 'arguments' => $arguments); - return true; - } - else if(!is_array($name) && function_exists($name)) - { - $shutdown_functions[] = array('function' => $name, 'arguments' => $arguments); - return true; - } - - return false; -} - -/** - * Runs the shutdown items after the page has been sent to the browser. - * - */ -function run_shutdown() -{ - global $config, $db, $cache, $plugins, $error_handler, $shutdown_functions, $shutdown_queries, $done_shutdown, $mybb; - - if($done_shutdown == true || !$config || (isset($error_handler) && $error_handler->has_errors)) - { - return; - } - - if(empty($shutdown_queries) && empty($shutdown_functions)) - { - // Nothing to do - return; - } - - // Missing the core? Build - if(!is_object($mybb)) - { - require_once MYBB_ROOT."inc/class_core.php"; - $mybb = new MyBB; - - // Load the settings - require MYBB_ROOT."inc/settings.php"; - $mybb->settings = &$settings; - } - - // If our DB has been deconstructed already (bad PHP 5.2.0), reconstruct - if(!is_object($db)) - { - if(!isset($config) || empty($config['database']['type'])) - { - require MYBB_ROOT."inc/config.php"; - } - - if(isset($config)) - { - // Load DB interface - require_once MYBB_ROOT."inc/db_base.php"; - - require_once MYBB_ROOT."inc/db_".$config['database']['type'].".php"; - switch($config['database']['type']) - { - case "sqlite": - $db = new DB_SQLite; - break; - case "pgsql": - $db = new DB_PgSQL; - break; - case "mysqli": - $db = new DB_MySQLi; - break; - default: - $db = new DB_MySQL; - } - - $db->connect($config['database']); - if(!defined("TABLE_PREFIX")) - { - define("TABLE_PREFIX", $config['database']['table_prefix']); - } - $db->set_table_prefix(TABLE_PREFIX); - } - } - - // Cache object deconstructed? reconstruct - if(!is_object($cache)) - { - require_once MYBB_ROOT."inc/class_datacache.php"; - $cache = new datacache; - $cache->cache(); - } - - // And finally.. plugins - if(!is_object($plugins) && !defined("NO_PLUGINS") && !($mybb->settings['no_plugins'] == 1)) - { - require_once MYBB_ROOT."inc/class_plugins.php"; - $plugins = new pluginSystem; - $plugins->load(); - } - - // We have some shutdown queries needing to be run - if(is_array($shutdown_queries)) - { - // Loop through and run them all - foreach($shutdown_queries as $query) - { - $db->query($query); - } - } - - // Run any shutdown functions if we have them - if(is_array($shutdown_functions)) - { - foreach($shutdown_functions as $function) - { - call_user_func_array($function['function'], $function['arguments']); - } - } - - $done_shutdown = true; -} - -/** - * Sends a specified amount of messages from the mail queue - * - * @param int $count The number of messages to send (Defaults to 10) - */ -function send_mail_queue($count=10) -{ - global $db, $cache, $plugins; - - $plugins->run_hooks("send_mail_queue_start"); - - // Check to see if the mail queue has messages needing to be sent - $mailcache = $cache->read("mailqueue"); - if($mailcache['queue_size'] > 0 && ($mailcache['locked'] == 0 || $mailcache['locked'] < TIME_NOW-300)) - { - // Lock the queue so no other messages can be sent whilst these are (for popular boards) - $cache->update_mailqueue(0, TIME_NOW); - - // Fetch emails for this page view - and send them - $query = $db->simple_select("mailqueue", "*", "", array("order_by" => "mid", "order_dir" => "asc", "limit_start" => 0, "limit" => $count)); - - while($email = $db->fetch_array($query)) - { - // Delete the message from the queue - $db->delete_query("mailqueue", "mid='{$email['mid']}'"); - - if($db->affected_rows() == 1) - { - my_mail($email['mailto'], $email['subject'], $email['message'], $email['mailfrom'], "", $email['headers'], true); - } - } - // Update the mailqueue cache and remove the lock - $cache->update_mailqueue(TIME_NOW, 0); - } - - $plugins->run_hooks("send_mail_queue_end"); -} - -/** - * Parses the contents of a page before outputting it. - * - * @param string $contents The contents of the page. - * @return string The parsed page. - */ -function parse_page($contents) -{ - global $lang, $theme, $mybb, $htmldoctype, $archive_url, $error_handler; - - $contents = str_replace('', build_breadcrumb(), $contents); - $contents = str_replace('', $archive_url, $contents); - - if($htmldoctype) - { - $contents = $htmldoctype.$contents; - } - else - { - $contents = "\n".$contents; - } - - $contents = str_replace("settings['rtl'] == 1) - { - $contents = str_replace("settings['htmllang']) - { - $contents = str_replace("settings['htmllang']."\" lang=\"".$lang->settings['htmllang']."\"", $contents); - } - - if($error_handler->warnings) - { - $contents = str_replace("", "\n".$error_handler->show_warnings(), $contents); - } - - return $contents; -} - -/** - * Turn a unix timestamp in to a "friendly" date/time format for the user. - * - * @param string $format A date format according to PHP's date structure. - * @param int $stamp The unix timestamp the date should be generated for. - * @param int|string $offset The offset in hours that should be applied to times. (timezones) Or an empty string to determine that automatically - * @param int $ty Whether or not to use today/yesterday formatting. - * @param boolean $adodb Whether or not to use the adodb time class for < 1970 or > 2038 times - * @return string The formatted timestamp. - */ -function my_date($format, $stamp=0, $offset="", $ty=1, $adodb=false) -{ - global $mybb, $lang, $mybbadmin, $plugins; - - // If the stamp isn't set, use TIME_NOW - if(empty($stamp)) - { - $stamp = TIME_NOW; - } - - if(!$offset && $offset != '0') - { - if(isset($mybb->user['uid']) && $mybb->user['uid'] != 0 && array_key_exists("timezone", $mybb->user)) - { - $offset = (float)$mybb->user['timezone']; - $dstcorrection = $mybb->user['dst']; - } - elseif(defined("IN_ADMINCP")) - { - $offset = (float)$mybbadmin['timezone']; - $dstcorrection = $mybbadmin['dst']; - } - else - { - $offset = (float)$mybb->settings['timezoneoffset']; - $dstcorrection = $mybb->settings['dstcorrection']; - } - - // If DST correction is enabled, add an additional hour to the timezone. - if($dstcorrection == 1) - { - ++$offset; - if(my_substr($offset, 0, 1) != "-") - { - $offset = "+".$offset; - } - } - } - - if($offset == "-") - { - $offset = 0; - } - - // Using ADOdb? - if($adodb == true && !function_exists('adodb_date')) - { - $adodb = false; - } - - $todaysdate = $yesterdaysdate = ''; - if($ty && ($format == $mybb->settings['dateformat'] || $format == 'relative')) - { - $_stamp = TIME_NOW; - if($adodb == true) - { - $date = adodb_date($mybb->settings['dateformat'], $stamp + ($offset * 3600)); - $todaysdate = adodb_date($mybb->settings['dateformat'], $_stamp + ($offset * 3600)); - $yesterdaysdate = adodb_date($mybb->settings['dateformat'], ($_stamp - 86400) + ($offset * 3600)); - } - else - { - $date = gmdate($mybb->settings['dateformat'], $stamp + ($offset * 3600)); - $todaysdate = gmdate($mybb->settings['dateformat'], $_stamp + ($offset * 3600)); - $yesterdaysdate = gmdate($mybb->settings['dateformat'], ($_stamp - 86400) + ($offset * 3600)); - } - } - - if($format == 'relative') - { - // Relative formats both date and time - $real_date = $real_time = ''; - if($adodb == true) - { - $real_date = adodb_date($mybb->settings['dateformat'], $stamp + ($offset * 3600)); - $real_time = $mybb->settings['datetimesep']; - $real_time .= adodb_date($mybb->settings['timeformat'], $stamp + ($offset * 3600)); - } - else - { - $real_date = gmdate($mybb->settings['dateformat'], $stamp + ($offset * 3600)); - $real_time = $mybb->settings['datetimesep']; - $real_time .= gmdate($mybb->settings['timeformat'], $stamp + ($offset * 3600)); - } - - if($ty != 2 && abs(TIME_NOW - $stamp) < 3600) - { - $diff = TIME_NOW - $stamp; - $relative = array('prefix' => '', 'minute' => 0, 'plural' => $lang->rel_minutes_plural, 'suffix' => $lang->rel_ago); - - if($diff < 0) - { - $diff = abs($diff); - $relative['suffix'] = ''; - $relative['prefix'] = $lang->rel_in; - } - - $relative['minute'] = floor($diff / 60); - - if($relative['minute'] <= 1) - { - $relative['minute'] = 1; - $relative['plural'] = $lang->rel_minutes_single; - } - - if($diff <= 60) - { - // Less than a minute - $relative['prefix'] = $lang->rel_less_than; - } - - $date = $lang->sprintf($lang->rel_time, $relative['prefix'], $relative['minute'], $relative['plural'], $relative['suffix'], $real_date, $real_time); - } - elseif($ty != 2 && abs(TIME_NOW - $stamp) < 43200) - { - $diff = TIME_NOW - $stamp; - $relative = array('prefix' => '', 'hour' => 0, 'plural' => $lang->rel_hours_plural, 'suffix' => $lang->rel_ago); - - if($diff < 0) - { - $diff = abs($diff); - $relative['suffix'] = ''; - $relative['prefix'] = $lang->rel_in; - } - - $relative['hour'] = floor($diff / 3600); - - if($relative['hour'] <= 1) - { - $relative['hour'] = 1; - $relative['plural'] = $lang->rel_hours_single; - } - - $date = $lang->sprintf($lang->rel_time, $relative['prefix'], $relative['hour'], $relative['plural'], $relative['suffix'], $real_date, $real_time); - } - else - { - if($ty) - { - if($todaysdate == $date) - { - $date = $lang->sprintf($lang->today, $real_date); - } - else if($yesterdaysdate == $date) - { - $date = $lang->sprintf($lang->yesterday, $real_date); - } - } - - $date .= $mybb->settings['datetimesep']; - if($adodb == true) - { - $date .= adodb_date($mybb->settings['timeformat'], $stamp + ($offset * 3600)); - } - else - { - $date .= gmdate($mybb->settings['timeformat'], $stamp + ($offset * 3600)); - } - } - } - else - { - if($ty && $format == $mybb->settings['dateformat']) - { - if($todaysdate == $date) - { - $date = $lang->sprintf($lang->today, $real_date); - } - else if($yesterdaysdate == $date) - { - $date = $lang->sprintf($lang->yesterday, $real_date); - } - } - else - { - if($adodb == true) - { - $date = adodb_date($format, $stamp + ($offset * 3600)); - } - else - { - $date = gmdate($format, $stamp + ($offset * 3600)); - } - } - } - - if(is_object($plugins)) - { - $date = $plugins->run_hooks("my_date", $date); - } - - return $date; -} - -/** - * Sends an email using PHP's mail function, formatting it appropriately. - * - * @param string $to Address the email should be addressed to. - * @param string $subject The subject of the email being sent. - * @param string $message The message being sent. - * @param string $from The from address of the email, if blank, the board name will be used. - * @param string $charset The chracter set being used to send this email. - * @param string $headers - * @param boolean $keep_alive Do we wish to keep the connection to the mail server alive to send more than one message (SMTP only) - * @param string $format The format of the email to be sent (text or html). text is default - * @param string $message_text The text message of the email if being sent in html format, for email clients that don't support html - * @param string $return_email The email address to return to. Defaults to admin return email address. - * @return bool - */ -function my_mail($to, $subject, $message, $from="", $charset="", $headers="", $keep_alive=false, $format="text", $message_text="", $return_email="") -{ - global $mybb; - static $mail; - - // Does our object not exist? Create it - if(!is_object($mail)) - { - require_once MYBB_ROOT."inc/class_mailhandler.php"; - - if($mybb->settings['mail_handler'] == 'smtp') - { - require_once MYBB_ROOT."inc/mailhandlers/smtp.php"; - $mail = new SmtpMail(); - } - else - { - require_once MYBB_ROOT."inc/mailhandlers/php.php"; - $mail = new PhpMail(); - } - } - - // Using SMTP based mail - if($mybb->settings['mail_handler'] == 'smtp') - { - if($keep_alive == true) - { - $mail->keep_alive = true; - } - } - - // Using PHP based mail() - else - { - if($mybb->settings['mail_parameters'] != '') - { - $mail->additional_parameters = $mybb->settings['mail_parameters']; - } - } - - // Build and send - $mail->build_message($to, $subject, $message, $from, $charset, $headers, $format, $message_text, $return_email); - return $mail->send(); -} - -/** - * Generates a unique code for POST requests to prevent XSS/CSRF attacks - * - * @return string The generated code - */ -function generate_post_check() -{ - global $mybb, $session; - if($mybb->user['uid']) - { - return md5($mybb->user['loginkey'].$mybb->user['salt'].$mybb->user['regdate']); - } - // Guests get a special string - else - { - return md5($session->useragent.$mybb->config['database']['username'].$mybb->settings['internal']['encryption_key']); - } -} - -/** - * Verifies a POST check code is valid, if not shows an error (silently returns false on silent parameter) - * - * @param string $code The incoming POST check code - * @param boolean $silent Silent mode or not (silent mode will not show the error to the user but returns false) - * @return bool - */ -function verify_post_check($code, $silent=false) -{ - global $lang; - if(generate_post_check() !== $code) - { - if($silent == true) - { - return false; - } - else - { - if(defined("IN_ADMINCP")) - { - return false; - } - else - { - error($lang->invalid_post_code); - } - } - } - else - { - return true; - } -} - -/** - * Return a parent list for the specified forum. - * - * @param int $fid The forum id to get the parent list for. - * @return string The comma-separated parent list. - */ -function get_parent_list($fid) -{ - global $forum_cache; - static $forumarraycache; - - if($forumarraycache[$fid]) - { - return $forumarraycache[$fid]['parentlist']; - } - elseif($forum_cache[$fid]) - { - return $forum_cache[$fid]['parentlist']; - } - else - { - cache_forums(); - return $forum_cache[$fid]['parentlist']; - } -} - -/** - * Build a parent list of a specific forum, suitable for querying - * - * @param int $fid The forum ID - * @param string $column The column name to add to the query - * @param string $joiner The joiner for each forum for querying (OR | AND | etc) - * @param string $parentlist The parent list of the forum - if you have it - * @return string The query string generated - */ -function build_parent_list($fid, $column="fid", $joiner="OR", $parentlist="") -{ - if(!$parentlist) - { - $parentlist = get_parent_list($fid); - } - - $parentsexploded = explode(",", $parentlist); - $builtlist = "("; - $sep = ''; - - foreach($parentsexploded as $key => $val) - { - $builtlist .= "$sep$column='$val'"; - $sep = " $joiner "; - } - - $builtlist .= ")"; - - return $builtlist; -} - -/** - * Load the forum cache in to memory - * - * @param boolean $force True to force a reload of the cache - * @return array The forum cache - */ -function cache_forums($force=false) -{ - global $forum_cache, $cache; - - if($force == true) - { - $forum_cache = $cache->read("forums", 1); - return $forum_cache; - } - - if(!$forum_cache) - { - $forum_cache = $cache->read("forums"); - if(!$forum_cache) - { - $cache->update_forums(); - $forum_cache = $cache->read("forums", 1); - } - } - return $forum_cache; -} - -/** - * Generate an array of all child and descendant forums for a specific forum. - * - * @param int $fid The forum ID - * @return Array of descendants - */ -function get_child_list($fid) -{ - static $forums_by_parent; - - $forums = array(); - if(!is_array($forums_by_parent)) - { - $forum_cache = cache_forums(); - foreach($forum_cache as $forum) - { - if($forum['active'] != 0) - { - $forums_by_parent[$forum['pid']][$forum['fid']] = $forum; - } - } - } - if(!is_array($forums_by_parent[$fid])) - { - return $forums; - } - - foreach($forums_by_parent[$fid] as $forum) - { - $forums[] = $forum['fid']; - $children = get_child_list($forum['fid']); - if(is_array($children)) - { - $forums = array_merge($forums, $children); - } - } - return $forums; -} - -/** - * Produce a friendly error message page - * - * @param string $error The error message to be shown - * @param string $title The title of the message shown in the title of the page and the error table - */ -function error($error="", $title="") -{ - global $header, $footer, $theme, $headerinclude, $db, $templates, $lang, $mybb, $plugins; - - $error = $plugins->run_hooks("error", $error); - if(!$error) - { - $error = $lang->unknown_error; - } - - // AJAX error message? - if($mybb->get_input('ajax', MyBB::INPUT_INT)) - { - // Send our headers. - @header("Content-type: application/json; charset={$lang->settings['charset']}"); - echo json_encode(array("errors" => array($error))); - exit; - } - - if(!$title) - { - $title = $mybb->settings['bbname']; - } - - $timenow = my_date('relative', TIME_NOW); - reset_breadcrumb(); - add_breadcrumb($lang->error); - - eval("\$errorpage = \"".$templates->get("error")."\";"); - output_page($errorpage); - - exit; -} - -/** - * Produce an error message for displaying inline on a page - * - * @param array $errors Array of errors to be shown - * @param string $title The title of the error message - * @param array $json_data JSON data to be encoded (we may want to send more data; e.g. newreply.php uses this for CAPTCHA) - * @return string The inline error HTML - */ -function inline_error($errors, $title="", $json_data=array()) -{ - global $theme, $mybb, $db, $lang, $templates; - - if(!$title) - { - $title = $lang->please_correct_errors; - } - - if(!is_array($errors)) - { - $errors = array($errors); - } - - // AJAX error message? - if($mybb->get_input('ajax', MyBB::INPUT_INT)) - { - // Send our headers. - @header("Content-type: application/json; charset={$lang->settings['charset']}"); - - if(empty($json_data)) - { - echo json_encode(array("errors" => $errors)); - } - else - { - echo json_encode(array_merge(array("errors" => $errors), $json_data)); - } - exit; - } - - $errorlist = ''; - - foreach($errors as $error) - { - $errorlist .= "
  • ".$error."
  • \n"; - } - - eval("\$errors = \"".$templates->get("error_inline")."\";"); - - return $errors; -} - -/** - * Presents the user with a "no permission" page - */ -function error_no_permission() -{ - global $mybb, $theme, $templates, $db, $lang, $plugins, $session; - - $time = TIME_NOW; - $plugins->run_hooks("no_permission"); - - $noperm_array = array ( - "nopermission" => '1', - "location1" => 0, - "location2" => 0 - ); - - $db->update_query("sessions", $noperm_array, "sid='{$session->sid}'"); - - if($mybb->get_input('ajax', MyBB::INPUT_INT)) - { - // Send our headers. - header("Content-type: application/json; charset={$lang->settings['charset']}"); - echo json_encode(array("errors" => array($lang->error_nopermission_user_ajax))); - exit; - } - - if($mybb->user['uid']) - { - $lang->error_nopermission_user_username = $lang->sprintf($lang->error_nopermission_user_username, htmlspecialchars_uni($mybb->user['username'])); - eval("\$errorpage = \"".$templates->get("error_nopermission_loggedin")."\";"); - } - else - { - // Redirect to where the user came from - $redirect_url = $_SERVER['PHP_SELF']; - if($_SERVER['QUERY_STRING']) - { - $redirect_url .= '?'.$_SERVER['QUERY_STRING']; - } - - $redirect_url = htmlspecialchars_uni($redirect_url); - - switch($mybb->settings['username_method']) - { - case 0: - $lang_username = $lang->username; - break; - case 1: - $lang_username = $lang->username1; - break; - case 2: - $lang_username = $lang->username2; - break; - default: - $lang_username = $lang->username; - break; - } - eval("\$errorpage = \"".$templates->get("error_nopermission")."\";"); - } - - error($errorpage); -} - -/** - * Redirect the user to a given URL with a given message - * - * @param string $url The URL to redirect the user to - * @param string $message The redirection message to be shown - * @param string $title The title of the redirection page - * @param boolean $force_redirect Force the redirect page regardless of settings - */ -function redirect($url, $message="", $title="", $force_redirect=false) -{ - global $header, $footer, $mybb, $theme, $headerinclude, $templates, $lang, $plugins; - - $redirect_args = array('url' => &$url, 'message' => &$message, 'title' => &$title); - - $plugins->run_hooks("redirect", $redirect_args); - - if($mybb->get_input('ajax', MyBB::INPUT_INT)) - { - // Send our headers. - //@header("Content-type: text/html; charset={$lang->settings['charset']}"); - $data = "\n"; - //exit; - - @header("Content-type: application/json; charset={$lang->settings['charset']}"); - echo json_encode(array("data" => $data)); - exit; - } - - if(!$message) - { - $message = $lang->redirect; - } - - $time = TIME_NOW; - $timenow = my_date('relative', $time); - - if(!$title) - { - $title = $mybb->settings['bbname']; - } - - // Show redirects only if both ACP and UCP settings are enabled, or ACP is enabled, and user is a guest, or they are forced. - if($force_redirect == true || ($mybb->settings['redirects'] == 1 && ($mybb->user['showredirect'] == 1 || !$mybb->user['uid']))) - { - $url = str_replace("&", "&", $url); - $url = htmlspecialchars_uni($url); - - eval("\$redirectpage = \"".$templates->get("redirect")."\";"); - output_page($redirectpage); - } - else - { - $url = htmlspecialchars_decode($url); - $url = str_replace(array("\n","\r",";"), "", $url); - - run_shutdown(); - - if(!my_validate_url($url, true, true)) - { - header("Location: {$mybb->settings['bburl']}/{$url}"); - } - else - { - header("Location: {$url}"); - } - } - - exit; -} - -/** - * Generate a listing of page - pagination - * - * @param int $count The number of items - * @param int $perpage The number of items to be shown per page - * @param int $page The current page number - * @param string $url The URL to have page numbers tacked on to (If {page} is specified, the value will be replaced with the page #) - * @param boolean $breadcrumb Whether or not the multipage is being shown in the navigation breadcrumb - * @return string The generated pagination - */ -function multipage($count, $perpage, $page, $url, $breadcrumb=false) -{ - global $theme, $templates, $lang, $mybb; - - if($count <= $perpage) - { - return ''; - } - - $url = str_replace("&", "&", $url); - $url = htmlspecialchars_uni($url); - - $pages = ceil($count / $perpage); - - $prevpage = ''; - if($page > 1) - { - $prev = $page-1; - $page_url = fetch_page_url($url, $prev); - eval("\$prevpage = \"".$templates->get("multipage_prevpage")."\";"); - } - - // Maximum number of "page bits" to show - if(!$mybb->settings['maxmultipagelinks']) - { - $mybb->settings['maxmultipagelinks'] = 5; - } - - $from = $page-floor($mybb->settings['maxmultipagelinks']/2); - $to = $page+floor($mybb->settings['maxmultipagelinks']/2); - - if($from <= 0) - { - $from = 1; - $to = $from+$mybb->settings['maxmultipagelinks']-1; - } - - if($to > $pages) - { - $to = $pages; - $from = $pages-$mybb->settings['maxmultipagelinks']+1; - if($from <= 0) - { - $from = 1; - } - } - - if($to == 0) - { - $to = $pages; - } - - $start = ''; - if($from > 1) - { - if($from-1 == 1) - { - $lang->multipage_link_start = ''; - } - - $page_url = fetch_page_url($url, 1); - eval("\$start = \"".$templates->get("multipage_start")."\";"); - } - - $mppage = ''; - for($i = $from; $i <= $to; ++$i) - { - $page_url = fetch_page_url($url, $i); - if($page == $i) - { - if($breadcrumb == true) - { - eval("\$mppage .= \"".$templates->get("multipage_page_link_current")."\";"); - } - else - { - eval("\$mppage .= \"".$templates->get("multipage_page_current")."\";"); - } - } - else - { - eval("\$mppage .= \"".$templates->get("multipage_page")."\";"); - } - } - - $end = ''; - if($to < $pages) - { - if($to+1 == $pages) - { - $lang->multipage_link_end = ''; - } - - $page_url = fetch_page_url($url, $pages); - eval("\$end = \"".$templates->get("multipage_end")."\";"); - } - - $nextpage = ''; - if($page < $pages) - { - $next = $page+1; - $page_url = fetch_page_url($url, $next); - eval("\$nextpage = \"".$templates->get("multipage_nextpage")."\";"); - } - - $jumptopage = ''; - if($pages > ($mybb->settings['maxmultipagelinks']+1) && $mybb->settings['jumptopagemultipage'] == 1) - { - // When the second parameter is set to 1, fetch_page_url thinks it's the first page and removes it from the URL as it's unnecessary - $jump_url = fetch_page_url($url, 1); - eval("\$jumptopage = \"".$templates->get("multipage_jump_page")."\";"); - } - - $lang->multipage_pages = $lang->sprintf($lang->multipage_pages, $pages); - - if($breadcrumb == true) - { - eval("\$multipage = \"".$templates->get("multipage_breadcrumb")."\";"); - } - else - { - eval("\$multipage = \"".$templates->get("multipage")."\";"); - } - - return $multipage; -} - -/** - * Generate a page URL for use by the multipage function - * - * @param string $url The URL being passed - * @param int $page The page number - * @return string - */ -function fetch_page_url($url, $page) -{ - if($page <= 1) - { - $find = array( - "-page-{page}", - "&page={page}", - "{page}" - ); - - // Remove "Page 1" to the defacto URL - $url = str_replace($find, array("", "", $page), $url); - return $url; - } - else if(strpos($url, "{page}") === false) - { - // If no page identifier is specified we tack it on to the end of the URL - if(strpos($url, "?") === false) - { - $url .= "?"; - } - else - { - $url .= "&"; - } - - $url .= "page=$page"; - } - else - { - $url = str_replace("{page}", $page, $url); - } - - return $url; -} - -/** - * Fetch the permissions for a specific user - * - * @param int $uid The user ID - * @return array Array of user permissions for the specified user - */ -function user_permissions($uid=0) -{ - global $mybb, $cache, $groupscache, $user_cache; - - // If no user id is specified, assume it is the current user - if($uid == 0) - { - $uid = $mybb->user['uid']; - } - - // User id does not match current user, fetch permissions - if($uid != $mybb->user['uid']) - { - // We've already cached permissions for this user, return them. - if($user_cache[$uid]['permissions']) - { - return $user_cache[$uid]['permissions']; - } - - // This user was not already cached, fetch their user information. - if(!$user_cache[$uid]) - { - $user_cache[$uid] = get_user($uid); - } - - // Collect group permissions. - $gid = $user_cache[$uid]['usergroup'].",".$user_cache[$uid]['additionalgroups']; - $groupperms = usergroup_permissions($gid); - - // Store group permissions in user cache. - $user_cache[$uid]['permissions'] = $groupperms; - return $groupperms; - } - // This user is the current user, return their permissions - else - { - return $mybb->usergroup; - } -} - -/** - * Fetch the usergroup permissions for a specific group or series of groups combined - * - * @param int|string $gid A list of groups (Can be a single integer, or a list of groups separated by a comma) - * @return array Array of permissions generated for the groups, containing also a list of comma-separated checked groups under 'all_usergroups' index - */ -function usergroup_permissions($gid=0) -{ - global $cache, $groupscache, $grouppermignore, $groupzerogreater; - - if(!is_array($groupscache)) - { - $groupscache = $cache->read("usergroups"); - } - - $groups = explode(",", $gid); - - if(count($groups) == 1) - { - $groupscache[$gid]['all_usergroups'] = $gid; - return $groupscache[$gid]; - } - - $usergroup = array(); - $usergroup['all_usergroups'] = $gid; - - foreach($groups as $gid) - { - if(trim($gid) == "" || empty($groupscache[$gid])) - { - continue; - } - - foreach($groupscache[$gid] as $perm => $access) - { - if(!in_array($perm, $grouppermignore)) - { - if(isset($usergroup[$perm])) - { - $permbit = $usergroup[$perm]; - } - else - { - $permbit = ""; - } - - // 0 represents unlimited for numerical group permissions (i.e. private message limit) so take that into account. - if(in_array($perm, $groupzerogreater) && ($access == 0 || $permbit === 0)) - { - $usergroup[$perm] = 0; - continue; - } - - if($access > $permbit || ($access == "yes" && $permbit == "no") || !$permbit) // Keep yes/no for compatibility? - { - $usergroup[$perm] = $access; - } - } - } - } - - return $usergroup; -} - -/** - * Fetch the display group properties for a specific display group - * - * @param int $gid The group ID to fetch the display properties for - * @return array Array of display properties for the group - */ -function usergroup_displaygroup($gid) -{ - global $cache, $groupscache, $displaygroupfields; - - if(!is_array($groupscache)) - { - $groupscache = $cache->read("usergroups"); - } - - $displaygroup = array(); - $group = $groupscache[$gid]; - - foreach($displaygroupfields as $field) - { - $displaygroup[$field] = $group[$field]; - } - - return $displaygroup; -} - -/** - * Build the forum permissions for a specific forum, user or group - * - * @param int $fid The forum ID to build permissions for (0 builds for all forums) - * @param int $uid The user to build the permissions for (0 will select the uid automatically) - * @param int $gid The group of the user to build permissions for (0 will fetch it) - * @return array Forum permissions for the specific forum or forums - */ -function forum_permissions($fid=0, $uid=0, $gid=0) -{ - global $db, $cache, $groupscache, $forum_cache, $fpermcache, $mybb, $cached_forum_permissions_permissions, $cached_forum_permissions; - - if($uid == 0) - { - $uid = $mybb->user['uid']; - } - - if(!$gid || $gid == 0) // If no group, we need to fetch it - { - if($uid != 0 && $uid != $mybb->user['uid']) - { - $user = get_user($uid); - - $gid = $user['usergroup'].",".$user['additionalgroups']; - $groupperms = usergroup_permissions($gid); - } - else - { - $gid = $mybb->user['usergroup']; - - if(isset($mybb->user['additionalgroups'])) - { - $gid .= ",".$mybb->user['additionalgroups']; - } - - $groupperms = $mybb->usergroup; - } - } - - if(!is_array($forum_cache)) - { - $forum_cache = cache_forums(); - - if(!$forum_cache) - { - return false; - } - } - - if(!is_array($fpermcache)) - { - $fpermcache = $cache->read("forumpermissions"); - } - - if($fid) // Fetch the permissions for a single forum - { - if(empty($cached_forum_permissions_permissions[$gid][$fid])) - { - $cached_forum_permissions_permissions[$gid][$fid] = fetch_forum_permissions($fid, $gid, $groupperms); - } - return $cached_forum_permissions_permissions[$gid][$fid]; - } - else - { - if(empty($cached_forum_permissions[$gid])) - { - foreach($forum_cache as $forum) - { - $cached_forum_permissions[$gid][$forum['fid']] = fetch_forum_permissions($forum['fid'], $gid, $groupperms); - } - } - return $cached_forum_permissions[$gid]; - } -} - -/** - * Fetches the permissions for a specific forum/group applying the inheritance scheme. - * Called by forum_permissions() - * - * @param int $fid The forum ID - * @param string $gid A comma separated list of usergroups - * @param array $groupperms Group permissions - * @return array Permissions for this forum -*/ -function fetch_forum_permissions($fid, $gid, $groupperms) -{ - global $groupscache, $forum_cache, $fpermcache, $mybb, $fpermfields; - - $groups = explode(",", $gid); - - if(empty($fpermcache[$fid])) // This forum has no custom or inherited permissions so lets just return the group permissions - { - return $groupperms; - } - - $current_permissions = array(); - $only_view_own_threads = 1; - $only_reply_own_threads = 1; - - foreach($groups as $gid) - { - if(!empty($groupscache[$gid])) - { - $level_permissions = $fpermcache[$fid][$gid]; - - // If our permissions arn't inherited we need to figure them out - if(empty($fpermcache[$fid][$gid])) - { - $parents = explode(',', $forum_cache[$fid]['parentlist']); - rsort($parents); - if(!empty($parents)) - { - foreach($parents as $parent_id) - { - if(!empty($fpermcache[$parent_id][$gid])) - { - $level_permissions = $fpermcache[$parent_id][$gid]; - break; - } - } - } - } - - // If we STILL don't have forum permissions we use the usergroup itself - if(empty($level_permissions)) - { - $level_permissions = $groupscache[$gid]; - } - - foreach($level_permissions as $permission => $access) - { - if(empty($current_permissions[$permission]) || $access >= $current_permissions[$permission] || ($access == "yes" && $current_permissions[$permission] == "no")) - { - $current_permissions[$permission] = $access; - } - } - - if($level_permissions["canview"] && empty($level_permissions["canonlyviewownthreads"])) - { - $only_view_own_threads = 0; - } - - if($level_permissions["canpostreplys"] && empty($level_permissions["canonlyreplyownthreads"])) - { - $only_reply_own_threads = 0; - } - } - } - - // Figure out if we can view more than our own threads - if($only_view_own_threads == 0) - { - $current_permissions["canonlyviewownthreads"] = 0; - } - - // Figure out if we can reply more than our own threads - if($only_reply_own_threads == 0) - { - $current_permissions["canonlyreplyownthreads"] = 0; - } - - if(count($current_permissions) == 0) - { - $current_permissions = $groupperms; - } - return $current_permissions; -} - -/** - * Check the password given on a certain forum for validity - * - * @param int $fid The forum ID - * @param int $pid The Parent ID - * @param bool $return - * @return bool - */ -function check_forum_password($fid, $pid=0, $return=false) -{ - global $mybb, $header, $footer, $headerinclude, $theme, $templates, $lang, $forum_cache; - - $showform = true; - - if(!is_array($forum_cache)) - { - $forum_cache = cache_forums(); - if(!$forum_cache) - { - return false; - } - } - - // Loop through each of parent forums to ensure we have a password for them too - if(isset($forum_cache[$fid]['parentlist'])) - { - $parents = explode(',', $forum_cache[$fid]['parentlist']); - rsort($parents); - } - if(!empty($parents)) - { - foreach($parents as $parent_id) - { - if($parent_id == $fid || $parent_id == $pid) - { - continue; - } - - if($forum_cache[$parent_id]['password'] != "") - { - check_forum_password($parent_id, $fid); - } - } - } - - if(!empty($forum_cache[$fid]['password'])) - { - $password = $forum_cache[$fid]['password']; - if(isset($mybb->input['pwverify']) && $pid == 0) - { - if($password === $mybb->get_input('pwverify')) - { - my_setcookie("forumpass[$fid]", md5($mybb->user['uid'].$mybb->get_input('pwverify')), null, true); - $showform = false; - } - else - { - eval("\$pwnote = \"".$templates->get("forumdisplay_password_wrongpass")."\";"); - $showform = true; - } - } - else - { - if(!$mybb->cookies['forumpass'][$fid] || ($mybb->cookies['forumpass'][$fid] && md5($mybb->user['uid'].$password) !== $mybb->cookies['forumpass'][$fid])) - { - $showform = true; - } - else - { - $showform = false; - } - } - } - else - { - $showform = false; - } - - if($return) - { - return $showform; - } - - if($showform) - { - if($pid) - { - header("Location: ".$mybb->settings['bburl']."/".get_forum_link($fid)); - } - else - { - $_SERVER['REQUEST_URI'] = htmlspecialchars_uni($_SERVER['REQUEST_URI']); - eval("\$pwform = \"".$templates->get("forumdisplay_password")."\";"); - output_page($pwform); - } - exit; - } -} - -/** - * Return the permissions for a moderator in a specific forum - * - * @param int $fid The forum ID - * @param int $uid The user ID to fetch permissions for (0 assumes current logged in user) - * @param string $parentslist The parent list for the forum (if blank, will be fetched) - * @return array Array of moderator permissions for the specific forum - */ -function get_moderator_permissions($fid, $uid=0, $parentslist="") -{ - global $mybb, $cache, $db; - static $modpermscache; - - if($uid < 1) - { - $uid = $mybb->user['uid']; - } - - if($uid == 0) - { - return false; - } - - if(isset($modpermscache[$fid][$uid])) - { - return $modpermscache[$fid][$uid]; - } - - if(!$parentslist) - { - $parentslist = explode(',', get_parent_list($fid)); - } - - // Get user groups - $perms = array(); - $user = get_user($uid); - - $groups = array($user['usergroup']); - - if(!empty($user['additionalgroups'])) - { - $extra_groups = explode(",", $user['additionalgroups']); - - foreach($extra_groups as $extra_group) - { - $groups[] = $extra_group; - } - } - - $mod_cache = $cache->read("moderators"); - - foreach($mod_cache as $forumid => $forum) - { - if(!is_array($forum) || !in_array($forumid, $parentslist)) - { - // No perms or we're not after this forum - continue; - } - - // User settings override usergroup settings - if(is_array($forum['users'][$uid])) - { - $perm = $forum['users'][$uid]; - foreach($perm as $action => $value) - { - if(strpos($action, "can") === false) - { - continue; - } - - // Figure out the user permissions - if($value == 0) - { - // The user doesn't have permission to set this action - $perms[$action] = 0; - } - else - { - $perms[$action] = max($perm[$action], $perms[$action]); - } - } - } - - foreach($groups as $group) - { - if(!is_array($forum['usergroups'][$group])) - { - // There are no permissions set for this group - continue; - } - - $perm = $forum['usergroups'][$group]; - foreach($perm as $action => $value) - { - if(strpos($action, "can") === false) - { - continue; - } - - $perms[$action] = max($perm[$action], $perms[$action]); - } - } - } - - $modpermscache[$fid][$uid] = $perms; - - return $perms; -} - -/** - * Checks if a moderator has permissions to perform an action in a specific forum - * - * @param int $fid The forum ID (0 assumes global) - * @param string $action The action tyring to be performed. (blank assumes any action at all) - * @param int $uid The user ID (0 assumes current user) - * @return bool Returns true if the user has permission, false if they do not - */ -function is_moderator($fid=0, $action="", $uid=0) -{ - global $mybb, $cache; - - if($uid == 0) - { - $uid = $mybb->user['uid']; - } - - if($uid == 0) - { - return false; - } - - $user_perms = user_permissions($uid); - if($user_perms['issupermod'] == 1) - { - if($fid) - { - $forumpermissions = forum_permissions($fid); - if($forumpermissions['canview'] && $forumpermissions['canviewthreads'] && !$forumpermissions['canonlyviewownthreads']) - { - return true; - } - return false; - } - return true; - } - else - { - if(!$fid) - { - $modcache = $cache->read('moderators'); - if(!empty($modcache)) - { - foreach($modcache as $modusers) - { - if(isset($modusers['users'][$uid]) && $modusers['users'][$uid]['mid'] && (!$action || !empty($modusers['users'][$uid][$action]))) - { - return true; - } - - $groups = explode(',', $user_perms['all_usergroups']); - - foreach($groups as $group) - { - if(trim($group) != '' && isset($modusers['usergroups'][$group]) && (!$action || !empty($modusers['usergroups'][$group][$action]))) - { - return true; - } - } - } - } - return false; - } - else - { - $modperms = get_moderator_permissions($fid, $uid); - - if(!$action && $modperms) - { - return true; - } - else - { - if(isset($modperms[$action]) && $modperms[$action] == 1) - { - return true; - } - else - { - return false; - } - } - } - } -} - -/** - * Generate a list of the posticons. - * - * @return string The template of posticons. - */ -function get_post_icons() -{ - global $mybb, $cache, $icon, $theme, $templates, $lang; - - if(isset($mybb->input['icon'])) - { - $icon = $mybb->get_input('icon'); - } - - $iconlist = ''; - $no_icons_checked = " checked=\"checked\""; - // read post icons from cache, and sort them accordingly - $posticons_cache = $cache->read("posticons"); - $posticons = array(); - foreach($posticons_cache as $posticon) - { - $posticons[$posticon['name']] = $posticon; - } - krsort($posticons); - - foreach($posticons as $dbicon) - { - $dbicon['path'] = str_replace("{theme}", $theme['imgdir'], $dbicon['path']); - $dbicon['path'] = htmlspecialchars_uni($mybb->get_asset_url($dbicon['path'])); - $dbicon['name'] = htmlspecialchars_uni($dbicon['name']); - - if($icon == $dbicon['iid']) - { - $checked = " checked=\"checked\""; - $no_icons_checked = ''; - } - else - { - $checked = ''; - } - - eval("\$iconlist .= \"".$templates->get("posticons_icon")."\";"); - } - - if(!empty($iconlist)) - { - eval("\$posticons = \"".$templates->get("posticons")."\";"); - } - else - { - $posticons = ''; - } - - return $posticons; -} - -/** - * MyBB setcookie() wrapper. - * - * @param string $name The cookie identifier. - * @param string $value The cookie value. - * @param int|string $expires The timestamp of the expiry date. - * @param boolean $httponly True if setting a HttpOnly cookie (supported by the majority of web browsers) - */ -function my_setcookie($name, $value="", $expires="", $httponly=false) -{ - global $mybb; - - if(!$mybb->settings['cookiepath']) - { - $mybb->settings['cookiepath'] = "/"; - } - - if($expires == -1) - { - $expires = 0; - } - elseif($expires == "" || $expires == null) - { - $expires = TIME_NOW + (60*60*24*365); // Make the cookie expire in a years time - } - else - { - $expires = TIME_NOW + (int)$expires; - } - - $mybb->settings['cookiepath'] = str_replace(array("\n","\r"), "", $mybb->settings['cookiepath']); - $mybb->settings['cookiedomain'] = str_replace(array("\n","\r"), "", $mybb->settings['cookiedomain']); - $mybb->settings['cookieprefix'] = str_replace(array("\n","\r", " "), "", $mybb->settings['cookieprefix']); - - // Versions of PHP prior to 5.2 do not support HttpOnly cookies and IE is buggy when specifying a blank domain so set the cookie manually - $cookie = "Set-Cookie: {$mybb->settings['cookieprefix']}{$name}=".urlencode($value); - - if($expires > 0) - { - $cookie .= "; expires=".@gmdate('D, d-M-Y H:i:s \\G\\M\\T', $expires); - } - - if(!empty($mybb->settings['cookiepath'])) - { - $cookie .= "; path={$mybb->settings['cookiepath']}"; - } - - if(!empty($mybb->settings['cookiedomain'])) - { - $cookie .= "; domain={$mybb->settings['cookiedomain']}"; - } - - if($httponly == true) - { - $cookie .= "; HttpOnly"; - } - - if($mybb->settings['cookiesecureflag']) - { - $cookie .= "; Secure"; - } - - $mybb->cookies[$name] = $value; - - header($cookie, false); -} - -/** - * Unset a cookie set by MyBB. - * - * @param string $name The cookie identifier. - */ -function my_unsetcookie($name) -{ - global $mybb; - - $expires = -3600; - my_setcookie($name, "", $expires); - - unset($mybb->cookies[$name]); -} - -/** - * Get the contents from a serialised cookie array. - * - * @param string $name The cookie identifier. - * @param int $id The cookie content id. - * @return array|boolean The cookie id's content array or false when non-existent. - */ -function my_get_array_cookie($name, $id) -{ - global $mybb; - - if(!isset($mybb->cookies['mybb'][$name])) - { - return false; - } - - $cookie = my_unserialize($mybb->cookies['mybb'][$name]); - - if(is_array($cookie) && isset($cookie[$id])) - { - return $cookie[$id]; - } - else - { - return 0; - } -} - -/** - * Set a serialised cookie array. - * - * @param string $name The cookie identifier. - * @param int $id The cookie content id. - * @param string $value The value to set the cookie to. - * @param int|string $expires The timestamp of the expiry date. - */ -function my_set_array_cookie($name, $id, $value, $expires="") -{ - global $mybb; - - $cookie = $mybb->cookies['mybb']; - if(isset($cookie[$name])) - { - $newcookie = my_unserialize($cookie[$name]); - } - else - { - $newcookie = array(); - } - - $newcookie[$id] = $value; - $newcookie = my_serialize($newcookie); - my_setcookie("mybb[$name]", addslashes($newcookie), $expires); - - // Make sure our current viarables are up-to-date as well - $mybb->cookies['mybb'][$name] = $newcookie; -} - -/* - * Arbitrary limits for _safe_unserialize() - */ -define('MAX_SERIALIZED_INPUT_LENGTH', 10240); -define('MAX_SERIALIZED_ARRAY_LENGTH', 256); -define('MAX_SERIALIZED_ARRAY_DEPTH', 5); - -/** - * Credits go to https://github.com/piwik - * Safe unserialize() replacement - * - accepts a strict subset of PHP's native my_serialized representation - * - does not unserialize objects - * - * @param string $str - * @return mixed - * @throw Exception if $str is malformed or contains unsupported types (e.g., resources, objects) - */ -function _safe_unserialize($str) -{ - if(strlen($str) > MAX_SERIALIZED_INPUT_LENGTH) - { - // input exceeds MAX_SERIALIZED_INPUT_LENGTH - return false; - } - - if(empty($str) || !is_string($str)) - { - return false; - } - - $stack = array(); - $expected = array(); - - /* - * states: - * 0 - initial state, expecting a single value or array - * 1 - terminal state - * 2 - in array, expecting end of array or a key - * 3 - in array, expecting value or another array - */ - $state = 0; - while($state != 1) - { - $type = isset($str[0]) ? $str[0] : ''; - - if($type == '}') - { - $str = substr($str, 1); - } - else if($type == 'N' && $str[1] == ';') - { - $value = null; - $str = substr($str, 2); - } - else if($type == 'b' && preg_match('/^b:([01]);/', $str, $matches)) - { - $value = $matches[1] == '1' ? true : false; - $str = substr($str, 4); - } - else if($type == 'i' && preg_match('/^i:(-?[0-9]+);(.*)/s', $str, $matches)) - { - $value = (int)$matches[1]; - $str = $matches[2]; - } - else if($type == 'd' && preg_match('/^d:(-?[0-9]+\.?[0-9]*(E[+-][0-9]+)?);(.*)/s', $str, $matches)) - { - $value = (float)$matches[1]; - $str = $matches[3]; - } - else if($type == 's' && preg_match('/^s:([0-9]+):"(.*)/s', $str, $matches) && substr($matches[2], (int)$matches[1], 2) == '";') - { - $value = substr($matches[2], 0, (int)$matches[1]); - $str = substr($matches[2], (int)$matches[1] + 2); - } - else if($type == 'a' && preg_match('/^a:([0-9]+):{(.*)/s', $str, $matches) && $matches[1] < MAX_SERIALIZED_ARRAY_LENGTH) - { - $expectedLength = (int)$matches[1]; - $str = $matches[2]; - } - else - { - // object or unknown/malformed type - return false; - } - - switch($state) - { - case 3: // in array, expecting value or another array - if($type == 'a') - { - if(count($stack) >= MAX_SERIALIZED_ARRAY_DEPTH) - { - // array nesting exceeds MAX_SERIALIZED_ARRAY_DEPTH - return false; - } - - $stack[] = &$list; - $list[$key] = array(); - $list = &$list[$key]; - $expected[] = $expectedLength; - $state = 2; - break; - } - if($type != '}') - { - $list[$key] = $value; - $state = 2; - break; - } - - // missing array value - return false; - - case 2: // in array, expecting end of array or a key - if($type == '}') - { - if(count($list) < end($expected)) - { - // array size less than expected - return false; - } - - unset($list); - $list = &$stack[count($stack)-1]; - array_pop($stack); - - // go to terminal state if we're at the end of the root array - array_pop($expected); - if(count($expected) == 0) { - $state = 1; - } - break; - } - if($type == 'i' || $type == 's') - { - if(count($list) >= MAX_SERIALIZED_ARRAY_LENGTH) - { - // array size exceeds MAX_SERIALIZED_ARRAY_LENGTH - return false; - } - if(count($list) >= end($expected)) - { - // array size exceeds expected length - return false; - } - - $key = $value; - $state = 3; - break; - } - - // illegal array index type - return false; - - case 0: // expecting array or value - if($type == 'a') - { - if(count($stack) >= MAX_SERIALIZED_ARRAY_DEPTH) - { - // array nesting exceeds MAX_SERIALIZED_ARRAY_DEPTH - return false; - } - - $data = array(); - $list = &$data; - $expected[] = $expectedLength; - $state = 2; - break; - } - if($type != '}') - { - $data = $value; - $state = 1; - break; - } - - // not in array - return false; - } - } - - if(!empty($str)) - { - // trailing data in input - return false; - } - return $data; -} - -/** - * Credits go to https://github.com/piwik - * Wrapper for _safe_unserialize() that handles exceptions and multibyte encoding issue - * - * @param string $str - * @return mixed - */ -function my_unserialize($str) -{ - // Ensure we use the byte count for strings even when strlen() is overloaded by mb_strlen() - if(function_exists('mb_internal_encoding') && (((int)ini_get('mbstring.func_overload')) & 2)) - { - $mbIntEnc = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } - - $out = _safe_unserialize($str); - - if(isset($mbIntEnc)) - { - mb_internal_encoding($mbIntEnc); - } - - return $out; -} - -/** - * Credits go to https://github.com/piwik - * Safe serialize() replacement - * - output a strict subset of PHP's native serialized representation - * - does not my_serialize objects - * - * @param mixed $value - * @return string - * @throw Exception if $value is malformed or contains unsupported types (e.g., resources, objects) - */ -function _safe_serialize( $value ) -{ - if(is_null($value)) - { - return 'N;'; - } - - if(is_bool($value)) - { - return 'b:'.(int)$value.';'; - } - - if(is_int($value)) - { - return 'i:'.$value.';'; - } - - if(is_float($value)) - { - return 'd:'.str_replace(',', '.', $value).';'; - } - - if(is_string($value)) - { - return 's:'.strlen($value).':"'.$value.'";'; - } - - if(is_array($value)) - { - $out = ''; - foreach($value as $k => $v) - { - $out .= _safe_serialize($k) . _safe_serialize($v); - } - - return 'a:'.count($value).':{'.$out.'}'; - } - - // safe_serialize cannot my_serialize resources or objects - return false; -} - -/** - * Credits go to https://github.com/piwik - * Wrapper for _safe_serialize() that handles exceptions and multibyte encoding issue - * - * @param mixed $value - * @return string -*/ -function my_serialize($value) -{ - // ensure we use the byte count for strings even when strlen() is overloaded by mb_strlen() - if(function_exists('mb_internal_encoding') && (((int)ini_get('mbstring.func_overload')) & 2)) - { - $mbIntEnc = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } - - $out = _safe_serialize($value); - if(isset($mbIntEnc)) - { - mb_internal_encoding($mbIntEnc); - } - - return $out; -} - -/** - * Returns the serverload of the system. - * - * @return int The serverload of the system. - */ -function get_server_load() -{ - global $mybb, $lang; - - $serverload = array(); - - // DIRECTORY_SEPARATOR checks if running windows - if(DIRECTORY_SEPARATOR != '\\') - { - if(function_exists("sys_getloadavg")) - { - // sys_getloadavg() will return an array with [0] being load within the last minute. - $serverload = sys_getloadavg(); - $serverload[0] = round($serverload[0], 4); - } - else if(@file_exists("/proc/loadavg") && $load = @file_get_contents("/proc/loadavg")) - { - $serverload = explode(" ", $load); - $serverload[0] = round($serverload[0], 4); - } - if(!is_numeric($serverload[0])) - { - if($mybb->safemode) - { - return $lang->unknown; - } - - // Suhosin likes to throw a warning if exec is disabled then die - weird - if($func_blacklist = @ini_get('suhosin.executor.func.blacklist')) - { - if(strpos(",".$func_blacklist.",", 'exec') !== false) - { - return $lang->unknown; - } - } - // PHP disabled functions? - if($func_blacklist = @ini_get('disable_functions')) - { - if(strpos(",".$func_blacklist.",", 'exec') !== false) - { - return $lang->unknown; - } - } - - $load = @exec("uptime"); - $load = explode("load average: ", $load); - $serverload = explode(",", $load[1]); - if(!is_array($serverload)) - { - return $lang->unknown; - } - } - } - else - { - return $lang->unknown; - } - - $returnload = trim($serverload[0]); - - return $returnload; -} - -/** - * Returns the amount of memory allocated to the script. - * - * @return int The amount of memory allocated to the script. - */ -function get_memory_usage() -{ - if(function_exists('memory_get_peak_usage')) - { - return memory_get_peak_usage(true); - } - elseif(function_exists('memory_get_usage')) - { - return memory_get_usage(true); - } - return false; -} - -/** - * Updates the forum statistics with specific values (or addition/subtraction of the previous value) - * - * @param array $changes Array of items being updated (numthreads,numposts,numusers,numunapprovedthreads,numunapprovedposts,numdeletedposts,numdeletedthreads) - * @param boolean $force Force stats update? - */ -function update_stats($changes=array(), $force=false) -{ - global $cache, $db; - static $stats_changes; - - if(empty($stats_changes)) - { - // Update stats after all changes are done - add_shutdown('update_stats', array(array(), true)); - } - - if(empty($stats_changes) || $stats_changes['inserted']) - { - $stats_changes = array( - 'numthreads' => '+0', - 'numposts' => '+0', - 'numusers' => '+0', - 'numunapprovedthreads' => '+0', - 'numunapprovedposts' => '+0', - 'numdeletedposts' => '+0', - 'numdeletedthreads' => '+0', - 'inserted' => false // Reset after changes are inserted into cache - ); - $stats = $stats_changes; - } - - if($force) // Force writing to cache? - { - if(!empty($changes)) - { - // Calculate before writing to cache - update_stats($changes); - } - $stats = $cache->read("stats"); - $changes = $stats_changes; - } - else - { - $stats = $stats_changes; - } - - $new_stats = array(); - $counters = array('numthreads', 'numunapprovedthreads', 'numposts', 'numunapprovedposts', 'numusers', 'numdeletedposts', 'numdeletedthreads'); - foreach($counters as $counter) - { - if(array_key_exists($counter, $changes)) - { - if(substr($changes[$counter], 0, 2) == "+-") - { - $changes[$counter] = substr($changes[$counter], 1); - } - // Adding or subtracting from previous value? - if(substr($changes[$counter], 0, 1) == "+" || substr($changes[$counter], 0, 1) == "-") - { - if((int)$changes[$counter] != 0) - { - $new_stats[$counter] = $stats[$counter] + $changes[$counter]; - if(!$force && (substr($stats[$counter], 0, 1) == "+" || substr($stats[$counter], 0, 1) == "-")) - { - // We had relative values? Then it is still relative - if($new_stats[$counter] >= 0) - { - $new_stats[$counter] = "+{$new_stats[$counter]}"; - } - } - // Less than 0? That's bad - elseif($new_stats[$counter] < 0) - { - $new_stats[$counter] = 0; - } - } - } - else - { - $new_stats[$counter] = $changes[$counter]; - // Less than 0? That's bad - if($new_stats[$counter] < 0) - { - $new_stats[$counter] = 0; - } - } - } - } - - if(!$force) - { - $stats_changes = array_merge($stats, $new_stats); // Overwrite changed values - return; - } - - // Fetch latest user if the user count is changing - if(array_key_exists('numusers', $changes)) - { - $query = $db->simple_select("users", "uid, username", "", array('order_by' => 'regdate', 'order_dir' => 'DESC', 'limit' => 1)); - $lastmember = $db->fetch_array($query); - $new_stats['lastuid'] = $lastmember['uid']; - $new_stats['lastusername'] = $lastmember['username'] = htmlspecialchars_uni($lastmember['username']); - } - - if(!empty($new_stats)) - { - if(is_array($stats)) - { - $stats = array_merge($stats, $new_stats); // Overwrite changed values - } - else - { - $stats = $new_stats; - } - } - - // Update stats row for today in the database - $todays_stats = array( - "dateline" => mktime(0, 0, 0, date("m"), date("j"), date("Y")), - "numusers" => (int)$stats['numusers'], - "numthreads" => (int)$stats['numthreads'], - "numposts" => (int)$stats['numposts'] - ); - $db->replace_query("stats", $todays_stats, "dateline"); - - $cache->update("stats", $stats, "dateline"); - $stats_changes['inserted'] = true; -} - -/** - * Updates the forum counters with a specific value (or addition/subtraction of the previous value) - * - * @param int $fid The forum ID - * @param array $changes Array of items being updated (threads, posts, unapprovedthreads, unapprovedposts, deletedposts, deletedthreads) and their value (ex, 1, +1, -1) - */ -function update_forum_counters($fid, $changes=array()) -{ - global $db; - - $update_query = array(); - - $counters = array('threads', 'unapprovedthreads', 'posts', 'unapprovedposts', 'deletedposts', 'deletedthreads'); - - // Fetch above counters for this forum - $query = $db->simple_select("forums", implode(",", $counters), "fid='{$fid}'"); - $forum = $db->fetch_array($query); - - foreach($counters as $counter) - { - if(array_key_exists($counter, $changes)) - { - if(substr($changes[$counter], 0, 2) == "+-") - { - $changes[$counter] = substr($changes[$counter], 1); - } - // Adding or subtracting from previous value? - if(substr($changes[$counter], 0, 1) == "+" || substr($changes[$counter], 0, 1) == "-") - { - if((int)$changes[$counter] != 0) - { - $update_query[$counter] = $forum[$counter] + $changes[$counter]; - } - } - else - { - $update_query[$counter] = $changes[$counter]; - } - - // Less than 0? That's bad - if(isset($update_query[$counter]) && $update_query[$counter] < 0) - { - $update_query[$counter] = 0; - } - } - } - - // Only update if we're actually doing something - if(count($update_query) > 0) - { - $db->update_query("forums", $update_query, "fid='".(int)$fid."'"); - } - - // Guess we should update the statistics too? - $new_stats = array(); - if(array_key_exists('threads', $update_query)) - { - $threads_diff = $update_query['threads'] - $forum['threads']; - if($threads_diff > -1) - { - $new_stats['numthreads'] = "+{$threads_diff}"; - } - else - { - $new_stats['numthreads'] = "{$threads_diff}"; - } - } - - if(array_key_exists('unapprovedthreads', $update_query)) - { - $unapprovedthreads_diff = $update_query['unapprovedthreads'] - $forum['unapprovedthreads']; - if($unapprovedthreads_diff > -1) - { - $new_stats['numunapprovedthreads'] = "+{$unapprovedthreads_diff}"; - } - else - { - $new_stats['numunapprovedthreads'] = "{$unapprovedthreads_diff}"; - } - } - - if(array_key_exists('posts', $update_query)) - { - $posts_diff = $update_query['posts'] - $forum['posts']; - if($posts_diff > -1) - { - $new_stats['numposts'] = "+{$posts_diff}"; - } - else - { - $new_stats['numposts'] = "{$posts_diff}"; - } - } - - if(array_key_exists('unapprovedposts', $update_query)) - { - $unapprovedposts_diff = $update_query['unapprovedposts'] - $forum['unapprovedposts']; - if($unapprovedposts_diff > -1) - { - $new_stats['numunapprovedposts'] = "+{$unapprovedposts_diff}"; - } - else - { - $new_stats['numunapprovedposts'] = "{$unapprovedposts_diff}"; - } - } - - if(array_key_exists('deletedposts', $update_query)) - { - $deletedposts_diff = $update_query['deletedposts'] - $forum['deletedposts']; - if($deletedposts_diff > -1) - { - $new_stats['numdeletedposts'] = "+{$deletedposts_diff}"; - } - else - { - $new_stats['numdeletedposts'] = "{$deletedposts_diff}"; - } - } - - if(array_key_exists('deletedthreads', $update_query)) - { - $deletedthreads_diff = $update_query['deletedthreads'] - $forum['deletedthreads']; - if($deletedthreads_diff > -1) - { - $new_stats['numdeletedthreads'] = "+{$deletedthreads_diff}"; - } - else - { - $new_stats['numdeletedthreads'] = "{$deletedthreads_diff}"; - } - } - - if(!empty($new_stats)) - { - update_stats($new_stats); - } -} - -/** - * Update the last post information for a specific forum - * - * @param int $fid The forum ID - */ -function update_forum_lastpost($fid) -{ - global $db; - - // Fetch the last post for this forum - $query = $db->query(" - SELECT tid, lastpost, lastposter, lastposteruid, subject - FROM ".TABLE_PREFIX."threads - WHERE fid='{$fid}' AND visible='1' AND closed NOT LIKE 'moved|%' - ORDER BY lastpost DESC - LIMIT 0, 1 - "); - $lastpost = $db->fetch_array($query); - - $updated_forum = array( - "lastpost" => (int)$lastpost['lastpost'], - "lastposter" => $db->escape_string($lastpost['lastposter']), - "lastposteruid" => (int)$lastpost['lastposteruid'], - "lastposttid" => (int)$lastpost['tid'], - "lastpostsubject" => $db->escape_string($lastpost['subject']) - ); - - $db->update_query("forums", $updated_forum, "fid='{$fid}'"); -} - -/** - * Updates the thread counters with a specific value (or addition/subtraction of the previous value) - * - * @param int $tid The thread ID - * @param array $changes Array of items being updated (replies, unapprovedposts, deletedposts, attachmentcount) and their value (ex, 1, +1, -1) - */ -function update_thread_counters($tid, $changes=array()) -{ - global $db; - - $update_query = array(); - $tid = (int)$tid; - - $counters = array('replies', 'unapprovedposts', 'attachmentcount', 'deletedposts', 'attachmentcount'); - - // Fetch above counters for this thread - $query = $db->simple_select("threads", implode(",", $counters), "tid='{$tid}'"); - $thread = $db->fetch_array($query); - - foreach($counters as $counter) - { - if(array_key_exists($counter, $changes)) - { - if(substr($changes[$counter], 0, 2) == "+-") - { - $changes[$counter] = substr($changes[$counter], 1); - } - // Adding or subtracting from previous value? - if(substr($changes[$counter], 0, 1) == "+" || substr($changes[$counter], 0, 1) == "-") - { - if((int)$changes[$counter] != 0) - { - $update_query[$counter] = $thread[$counter] + $changes[$counter]; - } - } - else - { - $update_query[$counter] = $changes[$counter]; - } - - // Less than 0? That's bad - if(isset($update_query[$counter]) && $update_query[$counter] < 0) - { - $update_query[$counter] = 0; - } - } - } - - $db->free_result($query); - - // Only update if we're actually doing something - if(count($update_query) > 0) - { - $db->update_query("threads", $update_query, "tid='{$tid}'"); - } -} - -/** - * Update the first post and lastpost data for a specific thread - * - * @param int $tid The thread ID - */ -function update_thread_data($tid) -{ - global $db; - - $thread = get_thread($tid); - - // If this is a moved thread marker, don't update it - we need it to stay as it is - if(strpos($thread['closed'], 'moved|') !== false) - { - return; - } - - $query = $db->query(" - SELECT u.uid, u.username, p.username AS postusername, p.dateline - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid='$tid' AND p.visible='1' - ORDER BY p.dateline DESC - LIMIT 1" - ); - $lastpost = $db->fetch_array($query); - - $db->free_result($query); - - $query = $db->query(" - SELECT u.uid, u.username, p.pid, p.username AS postusername, p.dateline - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid='$tid' - ORDER BY p.dateline ASC - LIMIT 1 - "); - $firstpost = $db->fetch_array($query); - - $db->free_result($query); - - if(empty($firstpost['username'])) - { - $firstpost['username'] = $firstpost['postusername']; - } - - if(empty($lastpost['username'])) - { - $lastpost['username'] = $lastpost['postusername']; - } - - if(empty($lastpost['dateline'])) - { - $lastpost['username'] = $firstpost['username']; - $lastpost['uid'] = $firstpost['uid']; - $lastpost['dateline'] = $firstpost['dateline']; - } - - $lastpost['username'] = $db->escape_string($lastpost['username']); - $firstpost['username'] = $db->escape_string($firstpost['username']); - - $update_array = array( - 'firstpost' => (int)$firstpost['pid'], - 'username' => $firstpost['username'], - 'uid' => (int)$firstpost['uid'], - 'dateline' => (int)$firstpost['dateline'], - 'lastpost' => (int)$lastpost['dateline'], - 'lastposter' => $lastpost['username'], - 'lastposteruid' => (int)$lastpost['uid'], - ); - $db->update_query("threads", $update_array, "tid='{$tid}'"); -} - -/** - * Updates the user counters with a specific value (or addition/subtraction of the previous value) - * - * @param int $uid The user ID - * @param array $changes Array of items being updated (postnum, threadnum) and their value (ex, 1, +1, -1) - */ -function update_user_counters($uid, $changes=array()) -{ - global $db; - - $update_query = array(); - - $counters = array('postnum', 'threadnum'); - $uid = (int)$uid; - - // Fetch above counters for this user - $query = $db->simple_select("users", implode(",", $counters), "uid='{$uid}'"); - $user = $db->fetch_array($query); - - foreach($counters as $counter) - { - if(array_key_exists($counter, $changes)) - { - if(substr($changes[$counter], 0, 2) == "+-") - { - $changes[$counter] = substr($changes[$counter], 1); - } - // Adding or subtracting from previous value? - if(substr($changes[$counter], 0, 1) == "+" || substr($changes[$counter], 0, 1) == "-") - { - if((int)$changes[$counter] != 0) - { - $update_query[$counter] = $user[$counter] + $changes[$counter]; - } - } - else - { - $update_query[$counter] = $changes[$counter]; - } - - // Less than 0? That's bad - if(isset($update_query[$counter]) && $update_query[$counter] < 0) - { - $update_query[$counter] = 0; - } - } - } - - $db->free_result($query); - - // Only update if we're actually doing something - if(count($update_query) > 0) - { - $db->update_query("users", $update_query, "uid='{$uid}'"); - } -} - -/** - * Deletes a thread from the database - * - * @param int $tid The thread ID - * @return bool - */ -function delete_thread($tid) -{ - global $moderation; - - if(!is_object($moderation)) - { - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - } - - return $moderation->delete_thread($tid); -} - -/** - * Deletes a post from the database - * - * @param int $pid The thread ID - * @return bool - */ -function delete_post($pid) -{ - global $moderation; - - if(!is_object($moderation)) - { - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - } - - return $moderation->delete_post($pid); -} - -/** - * Builds a forum jump menu - * - * @param int $pid The parent forum to start with - * @param int $selitem The selected item ID - * @param int $addselect If we need to add select boxes to this cal or not - * @param string $depth The current depth of forums we're at - * @param int $showextras Whether or not to show extra items such as User CP, Forum home - * @param boolean $showall Ignore the showinjump setting and show all forums (for moderation pages) - * @param mixed $permissions deprecated - * @param string $name The name of the forum jump - * @return string Forum jump items - */ -function build_forum_jump($pid=0, $selitem=0, $addselect=1, $depth="", $showextras=1, $showall=false, $permissions="", $name="fid") -{ - global $forum_cache, $jumpfcache, $permissioncache, $mybb, $forumjump, $forumjumpbits, $gobutton, $theme, $templates, $lang; - - $pid = (int)$pid; - - if(!is_array($jumpfcache)) - { - if(!is_array($forum_cache)) - { - cache_forums(); - } - - foreach($forum_cache as $fid => $forum) - { - if($forum['active'] != 0) - { - $jumpfcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - } - } - - if(!is_array($permissioncache)) - { - $permissioncache = forum_permissions(); - } - - if(isset($jumpfcache[$pid]) && is_array($jumpfcache[$pid])) - { - foreach($jumpfcache[$pid] as $main) - { - foreach($main as $forum) - { - $perms = $permissioncache[$forum['fid']]; - - if($forum['fid'] != "0" && ($perms['canview'] != 0 || $mybb->settings['hideprivateforums'] == 0) && $forum['linkto'] == '' && ($forum['showinjump'] != 0 || $showall == true)) - { - $optionselected = ""; - - if($selitem == $forum['fid']) - { - $optionselected = 'selected="selected"'; - } - - $forum['name'] = htmlspecialchars_uni(strip_tags($forum['name'])); - - eval("\$forumjumpbits .= \"".$templates->get("forumjump_bit")."\";"); - - if($forum_cache[$forum['fid']]) - { - $newdepth = $depth."--"; - $forumjumpbits .= build_forum_jump($forum['fid'], $selitem, 0, $newdepth, $showextras, $showall); - } - } - } - } - } - - if($addselect) - { - if($showextras == 0) - { - $template = "special"; - } - else - { - $template = "advanced"; - - if(strpos(FORUM_URL, '.html') !== false) - { - $forum_link = "'".str_replace('{fid}', "'+option+'", FORUM_URL)."'"; - } - else - { - $forum_link = "'".str_replace('{fid}', "'+option", FORUM_URL); - } - } - - eval("\$forumjump = \"".$templates->get("forumjump_".$template)."\";"); - } - - return $forumjump; -} - -/** - * Returns the extension of a file. - * - * @param string $file The filename. - * @return string The extension of the file. - */ -function get_extension($file) -{ - return my_strtolower(my_substr(strrchr($file, "."), 1)); -} - -/** - * Generates a random string. - * - * @param int $length The length of the string to generate. - * @param bool $complex Whether to return complex string. Defaults to false - * @return string The random string. - */ -function random_str($length=8, $complex=false) -{ - $set = array_merge(range(0, 9), range('A', 'Z'), range('a', 'z')); - $str = array(); - - // Complex strings have always at least 3 characters, even if $length < 3 - if($complex == true) - { - // At least one number - $str[] = $set[my_rand(0, 9)]; - - // At least one big letter - $str[] = $set[my_rand(10, 35)]; - - // At least one small letter - $str[] = $set[my_rand(36, 61)]; - - $length -= 3; - } - - for($i = 0; $i < $length; ++$i) - { - $str[] = $set[my_rand(0, 61)]; - } - - // Make sure they're in random order and convert them to a string - shuffle($str); - - return implode($str); -} - -/** - * Formats a username based on their display group - * - * @param string $username The username - * @param int $usergroup The usergroup for the user - * @param int $displaygroup The display group for the user - * @return string The formatted username - */ -function format_name($username, $usergroup, $displaygroup=0) -{ - global $groupscache, $cache; - - if(!is_array($groupscache)) - { - $groupscache = $cache->read("usergroups"); - } - - if($displaygroup != 0) - { - $usergroup = $displaygroup; - } - - $ugroup = $groupscache[$usergroup]; - $format = $ugroup['namestyle']; - $userin = substr_count($format, "{username}"); - - if($userin == 0) - { - $format = "{username}"; - } - - $format = stripslashes($format); - - return str_replace("{username}", $username, $format); -} - -/** - * Formats an avatar to a certain dimension - * - * @param string $avatar The avatar file name - * @param string $dimensions Dimensions of the avatar, width x height (e.g. 44|44) - * @param string $max_dimensions The maximum dimensions of the formatted avatar - * @return array Information for the formatted avatar - */ -function format_avatar($avatar, $dimensions = '', $max_dimensions = '') -{ - global $mybb, $theme; - static $avatars; - - if(!isset($avatars)) - { - $avatars = array(); - } - - if(my_strpos($avatar, '://') !== false && !$mybb->settings['allowremoteavatars']) - { - // Remote avatar, but remote avatars are disallowed. - $avatar = null; - } - - if(!$avatar) - { - // Default avatar - if(defined('IN_ADMINCP')) - { - $theme['imgdir'] = '../images'; - } - - $avatar = str_replace('{theme}', $theme['imgdir'], $mybb->settings['useravatar']); - $dimensions = $mybb->settings['useravatardims']; - } - - if(!$max_dimensions) - { - $max_dimensions = $mybb->settings['maxavatardims']; - } - - // An empty key wouldn't work so we need to add a fall back - $key = $dimensions; - if(empty($key)) - { - $key = 'default'; - } - $key2 = $max_dimensions; - if(empty($key2)) - { - $key2 = 'default'; - } - - if(isset($avatars[$avatar][$key][$key2])) - { - return $avatars[$avatar][$key][$key2]; - } - - $avatar_width_height = ''; - - if($dimensions) - { - $dimensions = explode("|", $dimensions); - - if($dimensions[0] && $dimensions[1]) - { - list($max_width, $max_height) = explode('x', $max_dimensions); - - if(!empty($max_dimensions) && ($dimensions[0] > $max_width || $dimensions[1] > $max_height)) - { - require_once MYBB_ROOT."inc/functions_image.php"; - $scaled_dimensions = scale_image($dimensions[0], $dimensions[1], $max_width, $max_height); - $avatar_width_height = "width=\"{$scaled_dimensions['width']}\" height=\"{$scaled_dimensions['height']}\""; - } - else - { - $avatar_width_height = "width=\"{$dimensions[0]}\" height=\"{$dimensions[1]}\""; - } - } - } - - $avatars[$avatar][$key][$key2] = array( - 'image' => htmlspecialchars_uni($mybb->get_asset_url($avatar)), - 'width_height' => $avatar_width_height - ); - - return $avatars[$avatar][$key][$key2]; -} - -/** - * Build the javascript based MyCode inserter. - * - * @param string $bind The ID of the textarea to bind to. Defaults to "message". - * @param bool $smilies Whether to include smilies. Defaults to true. - * - * @return string The MyCode inserter - */ -function build_mycode_inserter($bind="message", $smilies = true) -{ - global $db, $mybb, $theme, $templates, $lang, $plugins, $smiliecache, $cache; - - if($mybb->settings['bbcodeinserter'] != 0) - { - $editor_lang_strings = array( - "editor_bold" => "Bold", - "editor_italic" => "Italic", - "editor_underline" => "Underline", - "editor_strikethrough" => "Strikethrough", - "editor_subscript" => "Subscript", - "editor_superscript" => "Superscript", - "editor_alignleft" => "Align left", - "editor_center" => "Center", - "editor_alignright" => "Align right", - "editor_justify" => "Justify", - "editor_fontname" => "Font Name", - "editor_fontsize" => "Font Size", - "editor_fontcolor" => "Font Color", - "editor_removeformatting" => "Remove Formatting", - "editor_cut" => "Cut", - "editor_cutnosupport" => "Your browser does not allow the cut command. Please use the keyboard shortcut Ctrl/Cmd-X", - "editor_copy" => "Copy", - "editor_copynosupport" => "Your browser does not allow the copy command. Please use the keyboard shortcut Ctrl/Cmd-C", - "editor_paste" => "Paste", - "editor_pastenosupport" => "Your browser does not allow the paste command. Please use the keyboard shortcut Ctrl/Cmd-V", - "editor_pasteentertext" => "Paste your text inside the following box:", - "editor_pastetext" => "PasteText", - "editor_numlist" => "Numbered list", - "editor_bullist" => "Bullet list", - "editor_undo" => "Undo", - "editor_redo" => "Redo", - "editor_rows" => "Rows:", - "editor_cols" => "Cols:", - "editor_inserttable" => "Insert a table", - "editor_inserthr" => "Insert a horizontal rule", - "editor_code" => "Code", - "editor_width" => "Width (optional):", - "editor_height" => "Height (optional):", - "editor_insertimg" => "Insert an image", - "editor_email" => "E-mail:", - "editor_insertemail" => "Insert an email", - "editor_url" => "URL:", - "editor_insertlink" => "Insert a link", - "editor_unlink" => "Unlink", - "editor_more" => "More", - "editor_insertemoticon" => "Insert an emoticon", - "editor_videourl" => "Video URL:", - "editor_videotype" => "Video Type:", - "editor_insert" => "Insert", - "editor_insertyoutubevideo" => "Insert a YouTube video", - "editor_currentdate" => "Insert current date", - "editor_currenttime" => "Insert current time", - "editor_print" => "Print", - "editor_viewsource" => "View source", - "editor_description" => "Description (optional):", - "editor_enterimgurl" => "Enter the image URL:", - "editor_enteremail" => "Enter the e-mail address:", - "editor_enterdisplayedtext" => "Enter the displayed text:", - "editor_enterurl" => "Enter URL:", - "editor_enteryoutubeurl" => "Enter the YouTube video URL or ID:", - "editor_insertquote" => "Insert a Quote", - "editor_invalidyoutube" => "Invalid YouTube video", - "editor_dailymotion" => "Dailymotion", - "editor_metacafe" => "MetaCafe", - "editor_veoh" => "Veoh", - "editor_vimeo" => "Vimeo", - "editor_youtube" => "Youtube", - "editor_facebook" => "Facebook", - "editor_liveleak" => "LiveLeak", - "editor_insertvideo" => "Insert a video", - "editor_php" => "PHP", - "editor_maximize" => "Maximize" - ); - $editor_language = "(function ($) {\n$.sceditor.locale[\"mybblang\"] = {\n"; - - $editor_lang_strings = $plugins->run_hooks("mycode_add_codebuttons", $editor_lang_strings); - - $editor_languages_count = count($editor_lang_strings); - $i = 0; - foreach($editor_lang_strings as $lang_string => $key) - { - $i++; - $js_lang_string = str_replace("\"", "\\\"", $key); - $string = str_replace("\"", "\\\"", $lang->$lang_string); - $editor_language .= "\t\"{$js_lang_string}\": \"{$string}\""; - - if($i < $editor_languages_count) - { - $editor_language .= ","; - } - - $editor_language .= "\n"; - } - - $editor_language .= "}})(jQuery);"; - - if(defined("IN_ADMINCP")) - { - global $page; - $codeinsert = $page->build_codebuttons_editor($bind, $editor_language, $smilies); - } - else - { - // Smilies - $emoticon = ""; - $emoticons_enabled = "false"; - if($smilies) - { - if(!$smiliecache) - { - if(!isset($smilie_cache) || !is_array($smilie_cache)) - { - $smilie_cache = $cache->read("smilies"); - } - foreach($smilie_cache as $smilie) - { - $smilie['image'] = str_replace("{theme}", $theme['imgdir'], $smilie['image']); - $smiliecache[$smilie['sid']] = $smilie; - } - } - - if($mybb->settings['smilieinserter'] && $mybb->settings['smilieinsertercols'] && $mybb->settings['smilieinsertertot'] && !empty($smiliecache)) - { - $emoticon = ",emoticon"; - } - $emoticons_enabled = "true"; - - unset($smilie); - - if(is_array($smiliecache)) - { - reset($smiliecache); - - $dropdownsmilies = $moresmilies = $hiddensmilies = ""; - $i = 0; - - foreach($smiliecache as $smilie) - { - $finds = explode("\n", $smilie['find']); - $finds_count = count($finds); - - // Only show the first text to replace in the box - $smilie['find'] = $finds[0]; - - $find = str_replace(array('\\', '"'), array('\\\\', '\"'), htmlspecialchars_uni($smilie['find'])); - $image = htmlspecialchars_uni($mybb->get_asset_url($smilie['image'])); - $image = str_replace(array('\\', '"'), array('\\\\', '\"'), $image); - - if(!$mybb->settings['smilieinserter'] || !$mybb->settings['smilieinsertercols'] || !$mybb->settings['smilieinsertertot'] || !$smilie['showclickable']) - { - $hiddensmilies .= '"'.$find.'": "'.$image.'",'; - } - elseif($i < $mybb->settings['smilieinsertertot']) - { - $dropdownsmilies .= '"'.$find.'": "'.$image.'",'; - ++$i; - } - else - { - $moresmilies .= '"'.$find.'": "'.$image.'",'; - } - - for($j = 1; $j < $finds_count; ++$j) - { - $find = str_replace(array('\\', '"'), array('\\\\', '\"'), htmlspecialchars_uni($finds[$j])); - $hiddensmilies .= '"'.$find.'": "'.$image.'",'; - } - } - } - } - - $basic1 = $basic2 = $align = $font = $size = $color = $removeformat = $email = $link = $list = $code = $sourcemode = ""; - - if($mybb->settings['allowbasicmycode'] == 1) - { - $basic1 = "bold,italic,underline,strike|"; - $basic2 = "horizontalrule,"; - } - - if($mybb->settings['allowalignmycode'] == 1) - { - $align = "left,center,right,justify|"; - } - - if($mybb->settings['allowfontmycode'] == 1) - { - $font = "font,"; - } - - if($mybb->settings['allowsizemycode'] == 1) - { - $size = "size,"; - } - - if($mybb->settings['allowcolormycode'] == 1) - { - $color = "color,"; - } - - if($mybb->settings['allowfontmycode'] == 1 || $mybb->settings['allowsizemycode'] == 1 || $mybb->settings['allowcolormycode'] == 1) - { - $removeformat = "removeformat|"; - } - - if($mybb->settings['allowemailmycode'] == 1) - { - $email = "email,"; - } - - if($mybb->settings['allowlinkmycode'] == 1) - { - $link = "link,unlink"; - } - - if($mybb->settings['allowlistmycode'] == 1) - { - $list = "bulletlist,orderedlist|"; - } - - if($mybb->settings['allowcodemycode'] == 1) - { - $code = "code,php,"; - } - - if($mybb->user['sourceeditor'] == 1) - { - $sourcemode = "MyBBEditor.sourceMode(true);"; - } - - eval("\$codeinsert = \"".$templates->get("codebuttons")."\";"); - } - } - - return $codeinsert; -} - -/** - * Build the javascript clickable smilie inserter - * - * @return string The clickable smilies list - */ -function build_clickable_smilies() -{ - global $cache, $smiliecache, $theme, $templates, $lang, $mybb, $smiliecount; - - if($mybb->settings['smilieinserter'] != 0 && $mybb->settings['smilieinsertercols'] && $mybb->settings['smilieinsertertot']) - { - if(!$smiliecount) - { - $smilie_cache = $cache->read("smilies"); - $smiliecount = count($smilie_cache); - } - - if(!$smiliecache) - { - if(!is_array($smilie_cache)) - { - $smilie_cache = $cache->read("smilies"); - } - foreach($smilie_cache as $smilie) - { - $smilie['image'] = str_replace("{theme}", $theme['imgdir'], $smilie['image']); - $smiliecache[$smilie['sid']] = $smilie; - } - } - - unset($smilie); - - if(is_array($smiliecache)) - { - reset($smiliecache); - - $getmore = ''; - if($mybb->settings['smilieinsertertot'] >= $smiliecount) - { - $mybb->settings['smilieinsertertot'] = $smiliecount; - } - else if($mybb->settings['smilieinsertertot'] < $smiliecount) - { - $smiliecount = $mybb->settings['smilieinsertertot']; - eval("\$getmore = \"".$templates->get("smilieinsert_getmore")."\";"); - } - - $smilies = ''; - $counter = 0; - $i = 0; - - $extra_class = ''; - foreach($smiliecache as $smilie) - { - if($i < $mybb->settings['smilieinsertertot'] && $smilie['showclickable'] != 0) - { - $smilie['image'] = str_replace("{theme}", $theme['imgdir'], $smilie['image']); - $smilie['image'] = htmlspecialchars_uni($mybb->get_asset_url($smilie['image'])); - $smilie['name'] = htmlspecialchars_uni($smilie['name']); - - // Only show the first text to replace in the box - $temp = explode("\n", $smilie['find']); // assign to temporary variable for php 5.3 compatibility - $smilie['find'] = $temp[0]; - - $find = str_replace(array('\\', "'"), array('\\\\', "\'"), htmlspecialchars_uni($smilie['find'])); - - $onclick = " onclick=\"MyBBEditor.insertText(' $find ');\""; - $extra_class = ' smilie_pointer'; - eval('$smilie = "'.$templates->get('smilie', 1, 0).'";'); - eval("\$smilie_icons .= \"".$templates->get("smilieinsert_smilie")."\";"); - ++$i; - ++$counter; - - if($counter == $mybb->settings['smilieinsertercols']) - { - $counter = 0; - eval("\$smilies .= \"".$templates->get("smilieinsert_row")."\";"); - $smilie_icons = ''; - } - } - } - - if($counter != 0) - { - $colspan = $mybb->settings['smilieinsertercols'] - $counter; - eval("\$smilies .= \"".$templates->get("smilieinsert_row_empty")."\";"); - } - - eval("\$clickablesmilies = \"".$templates->get("smilieinsert")."\";"); - } - else - { - $clickablesmilies = ""; - } - } - else - { - $clickablesmilies = ""; - } - - return $clickablesmilies; -} - -/** - * Builds thread prefixes and returns a selected prefix (or all) - * - * @param int $pid The prefix ID (0 to return all) - * @return array The thread prefix's values (or all thread prefixes) - */ -function build_prefixes($pid=0) -{ - global $cache; - static $prefixes_cache; - - if(is_array($prefixes_cache)) - { - if($pid > 0 && is_array($prefixes_cache[$pid])) - { - return $prefixes_cache[$pid]; - } - - return $prefixes_cache; - } - - $prefix_cache = $cache->read("threadprefixes"); - - if(!is_array($prefix_cache)) - { - // No cache - $prefix_cache = $cache->read("threadprefixes", true); - - if(!is_array($prefix_cache)) - { - return array(); - } - } - - $prefixes_cache = array(); - foreach($prefix_cache as $prefix) - { - $prefixes_cache[$prefix['pid']] = $prefix; - } - - if($pid != 0 && is_array($prefixes_cache[$pid])) - { - return $prefixes_cache[$pid]; - } - else if(!empty($prefixes_cache)) - { - return $prefixes_cache; - } - - return false; -} - -/** - * Build the thread prefix selection menu for the current user - * - * @param int|string $fid The forum ID (integer ID or string all) - * @param int|string $selected_pid The selected prefix ID (integer ID or string any) - * @param int $multiple Allow multiple prefix selection - * @param int $previous_pid The previously selected prefix ID - * @return string The thread prefix selection menu - */ -function build_prefix_select($fid, $selected_pid=0, $multiple=0, $previous_pid=0) -{ - global $cache, $db, $lang, $mybb, $templates; - - if($fid != 'all') - { - $fid = (int)$fid; - } - - $prefix_cache = build_prefixes(0); - if(empty($prefix_cache)) - { - // We've got no prefixes to show - return ''; - } - - // Go through each of our prefixes and decide which ones we can use - $prefixes = array(); - foreach($prefix_cache as $prefix) - { - if($fid != "all" && $prefix['forums'] != "-1") - { - // Decide whether this prefix can be used in our forum - $forums = explode(",", $prefix['forums']); - - if(!in_array($fid, $forums) && $prefix['pid'] != $previous_pid) - { - // This prefix is not in our forum list - continue; - } - } - - if(is_member($prefix['groups']) || $prefix['pid'] == $previous_pid) - { - // The current user can use this prefix - $prefixes[$prefix['pid']] = $prefix; - } - } - - if(empty($prefixes)) - { - return ''; - } - - $prefixselect = $prefixselect_prefix = ''; - - if($multiple == 1) - { - $any_selected = ""; - if($selected_pid == 'any') - { - $any_selected = " selected=\"selected\""; - } - } - - $default_selected = ""; - if(((int)$selected_pid == 0) && $selected_pid != 'any') - { - $default_selected = " selected=\"selected\""; - } - - foreach($prefixes as $prefix) - { - $selected = ""; - if($prefix['pid'] == $selected_pid) - { - $selected = " selected=\"selected\""; - } - - $prefix['prefix'] = htmlspecialchars_uni($prefix['prefix']); - eval("\$prefixselect_prefix .= \"".$templates->get("post_prefixselect_prefix")."\";"); - } - - if($multiple != 0) - { - eval("\$prefixselect = \"".$templates->get("post_prefixselect_multiple")."\";"); - } - else - { - eval("\$prefixselect = \"".$templates->get("post_prefixselect_single")."\";"); - } - - return $prefixselect; -} - -/** - * Build the thread prefix selection menu for a forum without group permission checks - * - * @param int $fid The forum ID (integer ID) - * @param int $selected_pid The selected prefix ID (integer ID) - * @return string The thread prefix selection menu - */ -function build_forum_prefix_select($fid, $selected_pid=0) -{ - global $cache, $db, $lang, $mybb, $templates; - - $fid = (int)$fid; - - $prefix_cache = build_prefixes(0); - if(empty($prefix_cache)) - { - // We've got no prefixes to show - return ''; - } - - // Go through each of our prefixes and decide which ones we can use - $prefixes = array(); - foreach($prefix_cache as $prefix) - { - if($prefix['forums'] != "-1") - { - // Decide whether this prefix can be used in our forum - $forums = explode(",", $prefix['forums']); - - if(in_array($fid, $forums)) - { - // This forum can use this prefix! - $prefixes[$prefix['pid']] = $prefix; - } - } - else - { - // This prefix is for anybody to use... - $prefixes[$prefix['pid']] = $prefix; - } - } - - if(empty($prefixes)) - { - return ''; - } - - $default_selected = array(); - $selected_pid = (int)$selected_pid; - - if($selected_pid == 0) - { - $default_selected['all'] = ' selected="selected"'; - } - else if($selected_pid == -1) - { - $default_selected['none'] = ' selected="selected"'; - } - else if($selected_pid == -2) - { - $default_selected['any'] = ' selected="selected"'; - } - - foreach($prefixes as $prefix) - { - $selected = ''; - if($prefix['pid'] == $selected_pid) - { - $selected = ' selected="selected"'; - } - - $prefix['prefix'] = htmlspecialchars_uni($prefix['prefix']); - eval('$prefixselect_prefix .= "'.$templates->get("forumdisplay_threadlist_prefixes_prefix").'";'); - } - - eval('$prefixselect = "'.$templates->get("forumdisplay_threadlist_prefixes").'";'); - return $prefixselect; -} - -/** - * Gzip encodes text to a specified level - * - * @param string $contents The string to encode - * @param int $level The level (1-9) to encode at - * @return string The encoded string - */ -function gzip_encode($contents, $level=1) -{ - if(function_exists("gzcompress") && function_exists("crc32") && !headers_sent() && !(ini_get('output_buffering') && my_strpos(' '.ini_get('output_handler'), 'ob_gzhandler'))) - { - $httpaccept_encoding = ''; - - if(isset($_SERVER['HTTP_ACCEPT_ENCODING'])) - { - $httpaccept_encoding = $_SERVER['HTTP_ACCEPT_ENCODING']; - } - - if(my_strpos(" ".$httpaccept_encoding, "x-gzip")) - { - $encoding = "x-gzip"; - } - - if(my_strpos(" ".$httpaccept_encoding, "gzip")) - { - $encoding = "gzip"; - } - - if(isset($encoding)) - { - header("Content-Encoding: $encoding"); - - if(function_exists("gzencode")) - { - $contents = gzencode($contents, $level); - } - else - { - $size = strlen($contents); - $crc = crc32($contents); - $gzdata = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff"; - $gzdata .= my_substr(gzcompress($contents, $level), 2, -4); - $gzdata .= pack("V", $crc); - $gzdata .= pack("V", $size); - $contents = $gzdata; - } - } - } - - return $contents; -} - -/** - * Log the actions of a moderator. - * - * @param array $data The data of the moderator's action. - * @param string $action The message to enter for the action the moderator performed. - */ -function log_moderator_action($data, $action="") -{ - global $mybb, $db, $session; - - $fid = 0; - if(isset($data['fid'])) - { - $fid = (int)$data['fid']; - unset($data['fid']); - } - - $tid = 0; - if(isset($data['tid'])) - { - $tid = (int)$data['tid']; - unset($data['tid']); - } - - $pid = 0; - if(isset($data['pid'])) - { - $pid = (int)$data['pid']; - unset($data['pid']); - } - - // Any remaining extra data - we my_serialize and insert in to its own column - if(is_array($data)) - { - $data = my_serialize($data); - } - - $sql_array = array( - "uid" => (int)$mybb->user['uid'], - "dateline" => TIME_NOW, - "fid" => (int)$fid, - "tid" => $tid, - "pid" => $pid, - "action" => $db->escape_string($action), - "data" => $db->escape_string($data), - "ipaddress" => $db->escape_binary($session->packedip) - ); - $db->insert_query("moderatorlog", $sql_array); -} - -/** - * Get the formatted reputation for a user. - * - * @param int $reputation The reputation value - * @param int $uid The user ID (if not specified, the generated reputation will not be a link) - * @return string The formatted repuation - */ -function get_reputation($reputation, $uid=0) -{ - global $theme, $templates; - - $display_reputation = $reputation_class = ''; - if($reputation < 0) - { - $reputation_class = "reputation_negative"; - } - elseif($reputation > 0) - { - $reputation_class = "reputation_positive"; - } - else - { - $reputation_class = "reputation_neutral"; - } - - $reputation = my_number_format($reputation); - - if($uid != 0) - { - eval("\$display_reputation = \"".$templates->get("postbit_reputation_formatted_link")."\";"); - } - else - { - eval("\$display_reputation = \"".$templates->get("postbit_reputation_formatted")."\";"); - } - - return $display_reputation; -} - -/** - * Fetch a color coded version of a warning level (based on it's percentage) - * - * @param int $level The warning level (percentage of 100) - * @return string Formatted warning level - */ -function get_colored_warning_level($level) -{ - global $templates; - - $warning_class = ''; - if($level >= 80) - { - $warning_class = "high_warning"; - } - else if($level >= 50) - { - $warning_class = "moderate_warning"; - } - else if($level >= 25) - { - $warning_class = "low_warning"; - } - else - { - $warning_class = "normal_warning"; - } - - eval("\$level = \"".$templates->get("postbit_warninglevel_formatted")."\";"); - return $level; -} - -/** - * Fetch the IP address of the current user. - * - * @return string The IP address. - */ -function get_ip() -{ - global $mybb, $plugins; - - $ip = strtolower($_SERVER['REMOTE_ADDR']); - - if($mybb->settings['ip_forwarded_check']) - { - $addresses = array(); - - if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) - { - $addresses = explode(',', strtolower($_SERVER['HTTP_X_FORWARDED_FOR'])); - } - elseif(isset($_SERVER['HTTP_X_REAL_IP'])) - { - $addresses = explode(',', strtolower($_SERVER['HTTP_X_REAL_IP'])); - } - - if(is_array($addresses)) - { - foreach($addresses as $val) - { - $val = trim($val); - // Validate IP address and exclude private addresses - if(my_inet_ntop(my_inet_pton($val)) == $val && !preg_match("#^(10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.|fe80:|fe[c-f][0-f]:|f[c-d][0-f]{2}:)#", $val)) - { - $ip = $val; - break; - } - } - } - } - - if(!$ip) - { - if(isset($_SERVER['HTTP_CLIENT_IP'])) - { - $ip = strtolower($_SERVER['HTTP_CLIENT_IP']); - } - } - - if($plugins) - { - $ip_array = array("ip" => &$ip); // Used for backwards compatibility on this hook with the updated run_hooks() function. - $plugins->run_hooks("get_ip", $ip_array); - } - - return $ip; -} - -/** - * Fetch the friendly size (GB, MB, KB, B) for a specified file size. - * - * @param int $size The size in bytes - * @return string The friendly file size - */ -function get_friendly_size($size) -{ - global $lang; - - if(!is_numeric($size)) - { - return $lang->na; - } - - // Yottabyte (1024 Zettabytes) - if($size >= 1208925819614629174706176) - { - $size = my_number_format(round(($size / 1208925819614629174706176), 2))." ".$lang->size_yb; - } - // Zetabyte (1024 Exabytes) - elseif($size >= 1180591620717411303424) - { - $size = my_number_format(round(($size / 1180591620717411303424), 2))." ".$lang->size_zb; - } - // Exabyte (1024 Petabytes) - elseif($size >= 1152921504606846976) - { - $size = my_number_format(round(($size / 1152921504606846976), 2))." ".$lang->size_eb; - } - // Petabyte (1024 Terabytes) - elseif($size >= 1125899906842624) - { - $size = my_number_format(round(($size / 1125899906842624), 2))." ".$lang->size_pb; - } - // Terabyte (1024 Gigabytes) - elseif($size >= 1099511627776) - { - $size = my_number_format(round(($size / 1099511627776), 2))." ".$lang->size_tb; - } - // Gigabyte (1024 Megabytes) - elseif($size >= 1073741824) - { - $size = my_number_format(round(($size / 1073741824), 2))." ".$lang->size_gb; - } - // Megabyte (1024 Kilobytes) - elseif($size >= 1048576) - { - $size = my_number_format(round(($size / 1048576), 2))." ".$lang->size_mb; - } - // Kilobyte (1024 bytes) - elseif($size >= 1024) - { - $size = my_number_format(round(($size / 1024), 2))." ".$lang->size_kb; - } - elseif($size == 0) - { - $size = "0 ".$lang->size_bytes; - } - else - { - $size = my_number_format($size)." ".$lang->size_bytes; - } - - return $size; -} - -/** - * Format a decimal number in to microseconds, milliseconds, or seconds. - * - * @param int $time The time in microseconds - * @return string The friendly time duration - */ -function format_time_duration($time) -{ - global $lang; - - if(!is_numeric($time)) - { - return $lang->na; - } - - if(round(1000000 * $time, 2) < 1000) - { - $time = number_format(round(1000000 * $time, 2))." μs"; - } - elseif(round(1000000 * $time, 2) >= 1000 && round(1000000 * $time, 2) < 1000000) - { - $time = number_format(round((1000 * $time), 2))." ms"; - } - else - { - $time = round($time, 3)." seconds"; - } - - return $time; -} - -/** - * Get the attachment icon for a specific file extension - * - * @param string $ext The file extension - * @return string The attachment icon - */ -function get_attachment_icon($ext) -{ - global $cache, $attachtypes, $theme, $templates, $lang, $mybb; - - if(!$attachtypes) - { - $attachtypes = $cache->read("attachtypes"); - } - - $ext = my_strtolower($ext); - - if($attachtypes[$ext]['icon']) - { - static $attach_icons_schemes = array(); - if(!isset($attach_icons_schemes[$ext])) - { - $attach_icons_schemes[$ext] = parse_url($attachtypes[$ext]['icon']); - if(!empty($attach_icons_schemes[$ext]['scheme'])) - { - $attach_icons_schemes[$ext] = $attachtypes[$ext]['icon']; - } - elseif(defined("IN_ADMINCP")) - { - $attach_icons_schemes[$ext] = str_replace("{theme}", "", $attachtypes[$ext]['icon']); - if(my_substr($attach_icons_schemes[$ext], 0, 1) != "/") - { - $attach_icons_schemes[$ext] = "../".$attach_icons_schemes[$ext]; - } - } - elseif(defined("IN_PORTAL")) - { - global $change_dir; - $attach_icons_schemes[$ext] = $change_dir."/".str_replace("{theme}", $theme['imgdir'], $attachtypes[$ext]['icon']); - $attach_icons_schemes[$ext] = $mybb->get_asset_url($attach_icons_schemes[$ext]); - } - else - { - $attach_icons_schemes[$ext] = str_replace("{theme}", $theme['imgdir'], $attachtypes[$ext]['icon']); - $attach_icons_schemes[$ext] = $mybb->get_asset_url($attach_icons_schemes[$ext]); - } - } - - $icon = $attach_icons_schemes[$ext]; - - $name = htmlspecialchars_uni($attachtypes[$ext]['name']); - } - else - { - if(defined("IN_ADMINCP")) - { - $theme['imgdir'] = "../images"; - } - else if(defined("IN_PORTAL")) - { - global $change_dir; - $theme['imgdir'] = "{$change_dir}/images"; - } - - $icon = "{$theme['imgdir']}/attachtypes/unknown.png"; - - $name = $lang->unknown; - } - - $icon = htmlspecialchars_uni($icon); - eval("\$attachment_icon = \"".$templates->get("attachment_icon")."\";"); - return $attachment_icon; -} - -/** - * Get a list of the unviewable forums for the current user - * - * @param boolean $only_readable_threads Set to true to only fetch those forums for which users can actually read a thread in. - * @return string Comma separated values list of the forum IDs which the user cannot view - */ -function get_unviewable_forums($only_readable_threads=false) -{ - global $forum_cache, $permissioncache, $mybb; - - if(!is_array($forum_cache)) - { - cache_forums(); - } - - if(!is_array($permissioncache)) - { - $permissioncache = forum_permissions(); - } - - $password_forums = $unviewable = array(); - foreach($forum_cache as $fid => $forum) - { - if($permissioncache[$forum['fid']]) - { - $perms = $permissioncache[$forum['fid']]; - } - else - { - $perms = $mybb->usergroup; - } - - $pwverified = 1; - - if($forum['password'] != "") - { - if($mybb->cookies['forumpass'][$forum['fid']] !== md5($mybb->user['uid'].$forum['password'])) - { - $pwverified = 0; - } - - $password_forums[$forum['fid']] = $forum['password']; - } - else - { - // Check parents for passwords - $parents = explode(",", $forum['parentlist']); - foreach($parents as $parent) - { - if(isset($password_forums[$parent]) && $mybb->cookies['forumpass'][$parent] !== md5($mybb->user['uid'].$password_forums[$parent])) - { - $pwverified = 0; - } - } - } - - if($perms['canview'] == 0 || $pwverified == 0 || ($only_readable_threads == true && $perms['canviewthreads'] == 0)) - { - $unviewable[] = $forum['fid']; - } - } - - $unviewableforums = implode(',', $unviewable); - - return $unviewableforums; -} - -/** - * Fixes mktime for dates earlier than 1970 - * - * @param string $format The date format to use - * @param int $year The year of the date - * @return string The correct date format - */ -function fix_mktime($format, $year) -{ - // Our little work around for the date < 1970 thing. - // -2 idea provided by Matt Light (http://www.mephex.com) - $format = str_replace("Y", $year, $format); - $format = str_replace("y", my_substr($year, -2), $format); - - return $format; -} - -/** - * Build the breadcrumb navigation trail from the specified items - * - * @return string The formatted breadcrumb navigation trail - */ -function build_breadcrumb() -{ - global $nav, $navbits, $templates, $theme, $lang, $mybb; - - eval("\$navsep = \"".$templates->get("nav_sep")."\";"); - - $i = 0; - $activesep = ''; - - if(is_array($navbits)) - { - reset($navbits); - foreach($navbits as $key => $navbit) - { - if(isset($navbits[$key+1])) - { - if(isset($navbits[$key+2])) - { - $sep = $navsep; - } - else - { - $sep = ""; - } - - $multipage = null; - $multipage_dropdown = null; - if(!empty($navbit['multipage'])) - { - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $multipage = multipage($navbit['multipage']['num_threads'], $mybb->settings['threadsperpage'], $navbit['multipage']['current_page'], $navbit['multipage']['url'], true); - if($multipage) - { - ++$i; - eval("\$multipage_dropdown = \"".$templates->get("nav_dropdown")."\";"); - $sep = $multipage_dropdown.$sep; - } - } - - // Replace page 1 URLs - $navbit['url'] = str_replace("-page-1.html", ".html", $navbit['url']); - $navbit['url'] = preg_replace("/&page=1$/", "", $navbit['url']); - - eval("\$nav .= \"".$templates->get("nav_bit")."\";"); - } - } - } - - $activesep = ''; - $navsize = count($navbits); - $navbit = $navbits[$navsize-1]; - - if($nav) - { - eval("\$activesep = \"".$templates->get("nav_sep_active")."\";"); - } - - eval("\$activebit = \"".$templates->get("nav_bit_active")."\";"); - eval("\$donenav = \"".$templates->get("nav")."\";"); - - return $donenav; -} - -/** - * Add a breadcrumb menu item to the list. - * - * @param string $name The name of the item to add - * @param string $url The URL of the item to add - */ -function add_breadcrumb($name, $url="") -{ - global $navbits; - - $navsize = count($navbits); - $navbits[$navsize]['name'] = $name; - $navbits[$navsize]['url'] = $url; -} - -/** - * Build the forum breadcrumb nagiation (the navigation to a specific forum including all parent forums) - * - * @param int $fid The forum ID to build the navigation for - * @param array $multipage The multipage drop down array of information - * @return int Returns 1 in every case. Kept for compatibility - */ -function build_forum_breadcrumb($fid, $multipage=array()) -{ - global $pforumcache, $currentitem, $forum_cache, $navbits, $lang, $base_url, $archiveurl; - - if(!$pforumcache) - { - if(!is_array($forum_cache)) - { - cache_forums(); - } - - foreach($forum_cache as $key => $val) - { - $pforumcache[$val['fid']][$val['pid']] = $val; - } - } - - if(is_array($pforumcache[$fid])) - { - foreach($pforumcache[$fid] as $key => $forumnav) - { - if($fid == $forumnav['fid']) - { - if(!empty($pforumcache[$forumnav['pid']])) - { - build_forum_breadcrumb($forumnav['pid']); - } - - $navsize = count($navbits); - // Convert & to & - $navbits[$navsize]['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forumnav['name']); - - if(defined("IN_ARCHIVE")) - { - // Set up link to forum in breadcrumb. - if($pforumcache[$fid][$forumnav['pid']]['type'] == 'f' || $pforumcache[$fid][$forumnav['pid']]['type'] == 'c') - { - $navbits[$navsize]['url'] = "{$base_url}forum-".$forumnav['fid'].".html"; - } - else - { - $navbits[$navsize]['url'] = $archiveurl."/index.php"; - } - } - elseif(!empty($multipage)) - { - $navbits[$navsize]['url'] = get_forum_link($forumnav['fid'], $multipage['current_page']); - - $navbits[$navsize]['multipage'] = $multipage; - $navbits[$navsize]['multipage']['url'] = str_replace('{fid}', $forumnav['fid'], FORUM_URL_PAGED); - } - else - { - $navbits[$navsize]['url'] = get_forum_link($forumnav['fid']); - } - } - } - } - - return 1; -} - -/** - * Resets the breadcrumb navigation to the first item, and clears the rest - */ -function reset_breadcrumb() -{ - global $navbits; - - $newnav[0]['name'] = $navbits[0]['name']; - $newnav[0]['url'] = $navbits[0]['url']; - if(!empty($navbits[0]['options'])) - { - $newnav[0]['options'] = $navbits[0]['options']; - } - - unset($GLOBALS['navbits']); - $GLOBALS['navbits'] = $newnav; -} - -/** - * Builds a URL to an archive mode page - * - * @param string $type The type of page (thread|announcement|forum) - * @param int $id The ID of the item - * @return string The URL - */ -function build_archive_link($type="", $id=0) -{ - global $mybb; - - // If the server OS is not Windows and not Apache or the PHP is running as a CGI or we have defined ARCHIVE_QUERY_STRINGS, use query strings - DIRECTORY_SEPARATOR checks if running windows - //if((DIRECTORY_SEPARATOR == '\\' && is_numeric(stripos($_SERVER['SERVER_SOFTWARE'], "apache")) == false) || is_numeric(stripos(SAPI_NAME, "cgi")) !== false || defined("ARCHIVE_QUERY_STRINGS")) - if($mybb->settings['seourls_archive'] == 1) - { - $base_url = $mybb->settings['bburl']."/archive/index.php/"; - } - else - { - $base_url = $mybb->settings['bburl']."/archive/index.php?"; - } - - switch($type) - { - case "thread": - $url = "{$base_url}thread-{$id}.html"; - break; - case "announcement": - $url = "{$base_url}announcement-{$id}.html"; - break; - case "forum": - $url = "{$base_url}forum-{$id}.html"; - break; - default: - $url = $mybb->settings['bburl']."/archive/index.php"; - } - - return $url; -} - -/** - * Prints a debug information page - */ -function debug_page() -{ - global $db, $debug, $templates, $templatelist, $mybb, $maintimer, $globaltime, $ptimer, $parsetime, $lang, $cache; - - $totaltime = format_time_duration($maintimer->totaltime); - $phptime = $maintimer->totaltime - $db->query_time; - $query_time = $db->query_time; - $globaltime = format_time_duration($globaltime); - - $percentphp = number_format((($phptime/$maintimer->totaltime)*100), 2); - $percentsql = number_format((($query_time/$maintimer->totaltime)*100), 2); - - $phptime = format_time_duration($maintimer->totaltime - $db->query_time); - $query_time = format_time_duration($db->query_time); - - $call_time = format_time_duration($cache->call_time); - - $phpversion = PHP_VERSION; - - $serverload = get_server_load(); - - if($mybb->settings['gzipoutput'] != 0) - { - $gzipen = "Enabled"; - } - else - { - $gzipen = "Disabled"; - } - - echo "\n"; - echo ""; - echo ""; - echo ""; - echo ""; - echo "MyBB Debug Information"; - echo ""; - echo ""; - echo "

    MyBB Debug Information

    \n"; - echo "

    Page Generation

    \n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - - $memory_usage = get_memory_usage(); - if(!$memory_usage) - { - $memory_usage = $lang->unknown; - } - else - { - $memory_usage = get_friendly_size($memory_usage)." ({$memory_usage} bytes)"; - } - $memory_limit = @ini_get("memory_limit"); - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - - echo "
    Page Generation Statistics
    Page Generation Time:$totaltimeNo. DB Queries:$db->query_count
    PHP Processing Time:$phptime ($percentphp%)DB Processing Time:$query_time ($percentsql%)
    Extensions Used:{$mybb->config['database']['type']}, xmlGlobal.php Processing Time:$globaltime
    PHP Version:$phpversionServer Load:$serverload
    GZip Encoding Status:$gzipenNo. Templates Used:".count($templates->cache)." (".(int)count(explode(",", $templatelist))." Cached / ".(int)count($templates->uncached_templates)." Manually Loaded)
    Memory Usage:{$memory_usage}Memory Limit:{$memory_limit}
    \n"; - - echo "

    Database Connections (".count($db->connections)." Total)

    \n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
    ".implode("
    ", $db->connections)."
    \n"; - echo "
    \n"; - - echo "

    Database Queries (".$db->query_count." Total)

    \n"; - echo $db->explain; - - if($cache->call_count > 0) - { - echo "

    Cache Calls (".$cache->call_count." Total, ".$call_time.")

    \n"; - echo $cache->cache_debug; - } - - echo "

    Template Statistics

    \n"; - - if(count($templates->cache) > 0) - { - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
    Templates Used (Loaded for this Page) - ".count($templates->cache)." Total
    ".implode(", ", array_keys($templates->cache))."
    \n"; - echo "
    \n"; - } - - if(count($templates->uncached_templates) > 0) - { - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
    Templates Requiring Additional Calls (Not Cached at Startup) - ".count($templates->uncached_templates)." Total
    ".implode(", ", $templates->uncached_templates)."
    \n"; - echo "
    \n"; - } - echo ""; - echo ""; - exit; -} - -/** - * Outputs the correct page headers. - */ -function send_page_headers() -{ - global $mybb; - - if($mybb->settings['nocacheheaders'] == 1) - { - header("Expires: Sat, 1 Jan 2000 01:00:00 GMT"); - header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - header("Cache-Control: no-cache, must-revalidate"); - header("Pragma: no-cache"); - } -} - -/** - * Mark specific reported posts of a certain type as dealt with - * - * @param array|int $id An array or int of the ID numbers you're marking as dealt with - * @param string $type The type of item the above IDs are for - post, posts, thread, threads, forum, all - */ -function mark_reports($id, $type="post") -{ - global $db, $cache, $plugins; - - switch($type) - { - case "posts": - if(is_array($id)) - { - $rids = implode($id, "','"); - $rids = "'0','$rids'"; - $db->update_query("reportedcontent", array('reportstatus' => 1), "id IN($rids) AND reportstatus='0' AND (type = 'post' OR type = '')"); - } - break; - case "post": - $db->update_query("reportedcontent", array('reportstatus' => 1), "id='$id' AND reportstatus='0' AND (type = 'post' OR type = '')"); - break; - case "threads": - if(is_array($id)) - { - $rids = implode($id, "','"); - $rids = "'0','$rids'"; - $db->update_query("reportedcontent", array('reportstatus' => 1), "id2 IN($rids) AND reportstatus='0' AND (type = 'post' OR type = '')"); - } - break; - case "thread": - $db->update_query("reportedcontent", array('reportstatus' => 1), "id2='$id' AND reportstatus='0' AND (type = 'post' OR type = '')"); - break; - case "forum": - $db->update_query("reportedcontent", array('reportstatus' => 1), "id3='$id' AND reportstatus='0' AND (type = 'post' OR type = '')"); - break; - case "all": - $db->update_query("reportedcontent", array('reportstatus' => 1), "reportstatus='0' AND (type = 'post' OR type = '')"); - break; - } - - $arguments = array('id' => $id, 'type' => $type); - $plugins->run_hooks("mark_reports", $arguments); - $cache->update_reportedcontent(); -} - -/** - * Fetch a friendly x days, y months etc date stamp from a timestamp - * - * @param int $stamp The timestamp - * @param array $options Array of options - * @return string The friendly formatted timestamp - */ -function nice_time($stamp, $options=array()) -{ - global $lang; - - $ysecs = 365*24*60*60; - $mosecs = 31*24*60*60; - $wsecs = 7*24*60*60; - $dsecs = 24*60*60; - $hsecs = 60*60; - $msecs = 60; - - if(isset($options['short'])) - { - $lang_year = $lang->year_short; - $lang_years = $lang->years_short; - $lang_month = $lang->month_short; - $lang_months = $lang->months_short; - $lang_week = $lang->week_short; - $lang_weeks = $lang->weeks_short; - $lang_day = $lang->day_short; - $lang_days = $lang->days_short; - $lang_hour = $lang->hour_short; - $lang_hours = $lang->hours_short; - $lang_minute = $lang->minute_short; - $lang_minutes = $lang->minutes_short; - $lang_second = $lang->second_short; - $lang_seconds = $lang->seconds_short; - } - else - { - $lang_year = " ".$lang->year; - $lang_years = " ".$lang->years; - $lang_month = " ".$lang->month; - $lang_months = " ".$lang->months; - $lang_week = " ".$lang->week; - $lang_weeks = " ".$lang->weeks; - $lang_day = " ".$lang->day; - $lang_days = " ".$lang->days; - $lang_hour = " ".$lang->hour; - $lang_hours = " ".$lang->hours; - $lang_minute = " ".$lang->minute; - $lang_minutes = " ".$lang->minutes; - $lang_second = " ".$lang->second; - $lang_seconds = " ".$lang->seconds; - } - - $years = floor($stamp/$ysecs); - $stamp %= $ysecs; - $months = floor($stamp/$mosecs); - $stamp %= $mosecs; - $weeks = floor($stamp/$wsecs); - $stamp %= $wsecs; - $days = floor($stamp/$dsecs); - $stamp %= $dsecs; - $hours = floor($stamp/$hsecs); - $stamp %= $hsecs; - $minutes = floor($stamp/$msecs); - $stamp %= $msecs; - $seconds = $stamp; - - if($years == 1) - { - $nicetime['years'] = "1".$lang_year; - } - else if($years > 1) - { - $nicetime['years'] = $years.$lang_years; - } - - if($months == 1) - { - $nicetime['months'] = "1".$lang_month; - } - else if($months > 1) - { - $nicetime['months'] = $months.$lang_months; - } - - if($weeks == 1) - { - $nicetime['weeks'] = "1".$lang_week; - } - else if($weeks > 1) - { - $nicetime['weeks'] = $weeks.$lang_weeks; - } - - if($days == 1) - { - $nicetime['days'] = "1".$lang_day; - } - else if($days > 1) - { - $nicetime['days'] = $days.$lang_days; - } - - if(!isset($options['hours']) || $options['hours'] !== false) - { - if($hours == 1) - { - $nicetime['hours'] = "1".$lang_hour; - } - else if($hours > 1) - { - $nicetime['hours'] = $hours.$lang_hours; - } - } - - if(!isset($options['minutes']) || $options['minutes'] !== false) - { - if($minutes == 1) - { - $nicetime['minutes'] = "1".$lang_minute; - } - else if($minutes > 1) - { - $nicetime['minutes'] = $minutes.$lang_minutes; - } - } - - if(!isset($options['seconds']) || $options['seconds'] !== false) - { - if($seconds == 1) - { - $nicetime['seconds'] = "1".$lang_second; - } - else if($seconds > 1) - { - $nicetime['seconds'] = $seconds.$lang_seconds; - } - } - - if(is_array($nicetime)) - { - return implode(", ", $nicetime); - } -} - -/** - * Select an alternating row colour based on the previous call to this function - * - * @param int $reset 1 to reset the row to trow1. - * @return string trow1 or trow2 depending on the previous call - */ -function alt_trow($reset=0) -{ - global $alttrow; - - if($alttrow == "trow1" && !$reset) - { - $trow = "trow2"; - } - else - { - $trow = "trow1"; - } - - $alttrow = $trow; - - return $trow; -} - -/** - * Add a user to a specific additional user group. - * - * @param int $uid The user ID - * @param int $joingroup The user group ID to join - * @return bool - */ -function join_usergroup($uid, $joingroup) -{ - global $db, $mybb; - - if($uid == $mybb->user['uid']) - { - $user = $mybb->user; - } - else - { - $query = $db->simple_select("users", "additionalgroups, usergroup", "uid='".(int)$uid."'"); - $user = $db->fetch_array($query); - } - - // Build the new list of additional groups for this user and make sure they're in the right format - $usergroups = ""; - $usergroups = $user['additionalgroups'].",".$joingroup; - $groupslist = ""; - $groups = explode(",", $usergroups); - - if(is_array($groups)) - { - $comma = ''; - foreach($groups as $gid) - { - if(trim($gid) != "" && $gid != $user['usergroup'] && !isset($donegroup[$gid])) - { - $groupslist .= $comma.$gid; - $comma = ","; - $donegroup[$gid] = 1; - } - } - } - - // What's the point in updating if they're the same? - if($groupslist != $user['additionalgroups']) - { - $db->update_query("users", array('additionalgroups' => $groupslist), "uid='".(int)$uid."'"); - return true; - } - else - { - return false; - } -} - -/** - * Remove a user from a specific additional user group - * - * @param int $uid The user ID - * @param int $leavegroup The user group ID - */ -function leave_usergroup($uid, $leavegroup) -{ - global $db, $mybb, $cache; - - $user = get_user($uid); - - $groupslist = $comma = ''; - $usergroups = $user['additionalgroups'].","; - $donegroup = array(); - - $groups = explode(",", $user['additionalgroups']); - - if(is_array($groups)) - { - foreach($groups as $gid) - { - if(trim($gid) != "" && $leavegroup != $gid && empty($donegroup[$gid])) - { - $groupslist .= $comma.$gid; - $comma = ","; - $donegroup[$gid] = 1; - } - } - } - - $dispupdate = ""; - if($leavegroup == $user['displaygroup']) - { - $dispupdate = ", displaygroup=usergroup"; - } - - $db->write_query(" - UPDATE ".TABLE_PREFIX."users - SET additionalgroups='$groupslist' $dispupdate - WHERE uid='".(int)$uid."' - "); - - $cache->update_moderators(); -} - -/** - * Get the current location taking in to account different web serves and systems - * - * @param boolean $fields True to return as "hidden" fields - * @param array $ignore Array of fields to ignore if first argument is true - * @param boolean $quick True to skip all inputs and return only the file path part of the URL - * @return string The current URL being accessed - */ -function get_current_location($fields=false, $ignore=array(), $quick=false) -{ - if(defined("MYBB_LOCATION")) - { - return MYBB_LOCATION; - } - - if(!empty($_SERVER['SCRIPT_NAME'])) - { - $location = htmlspecialchars_uni($_SERVER['SCRIPT_NAME']); - } - elseif(!empty($_SERVER['PHP_SELF'])) - { - $location = htmlspecialchars_uni($_SERVER['PHP_SELF']); - } - elseif(!empty($_ENV['PHP_SELF'])) - { - $location = htmlspecialchars_uni($_ENV['PHP_SELF']); - } - elseif(!empty($_SERVER['PATH_INFO'])) - { - $location = htmlspecialchars_uni($_SERVER['PATH_INFO']); - } - else - { - $location = htmlspecialchars_uni($_ENV['PATH_INFO']); - } - - if($quick) - { - return $location; - } - - if($fields == true) - { - global $mybb; - - if(!is_array($ignore)) - { - $ignore = array($ignore); - } - - $form_html = ''; - if(!empty($mybb->input)) - { - foreach($mybb->input as $name => $value) - { - if(in_array($name, $ignore) || is_array($name) || is_array($value)) - { - continue; - } - - $form_html .= "\n"; - } - } - - return array('location' => $location, 'form_html' => $form_html, 'form_method' => $mybb->request_method); - } - else - { - if(isset($_SERVER['QUERY_STRING'])) - { - $location .= "?".htmlspecialchars_uni($_SERVER['QUERY_STRING']); - } - else if(isset($_ENV['QUERY_STRING'])) - { - $location .= "?".htmlspecialchars_uni($_ENV['QUERY_STRING']); - } - - if((isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == "POST") || (isset($_ENV['REQUEST_METHOD']) && $_ENV['REQUEST_METHOD'] == "POST")) - { - $post_array = array('action', 'fid', 'pid', 'tid', 'uid', 'eid'); - - foreach($post_array as $var) - { - if(isset($_POST[$var])) - { - $addloc[] = urlencode($var).'='.urlencode($_POST[$var]); - } - } - - if(isset($addloc) && is_array($addloc)) - { - if(strpos($location, "?") === false) - { - $location .= "?"; - } - else - { - $location .= "&"; - } - $location .= implode("&", $addloc); - } - } - - return $location; - } -} - -/** - * Build a theme selection menu - * - * @param string $name The name of the menu - * @param int $selected The ID of the selected theme - * @param int $tid The ID of the parent theme to select from - * @param string $depth The current selection depth - * @param boolean $usergroup_override Whether or not to override usergroup permissions (true to override) - * @param boolean $footer Whether or not theme select is in the footer (true if it is) - * @param boolean $count_override Whether or not to override output based on theme count (true to override) - * @return string The theme selection list - */ -function build_theme_select($name, $selected=-1, $tid=0, $depth="", $usergroup_override=false, $footer=false, $count_override=false) -{ - global $db, $themeselect, $tcache, $lang, $mybb, $limit, $templates, $num_themes, $themeselect_option; - - if($tid == 0) - { - $tid = 1; - $num_themes = 0; - $themeselect_option = ''; - - if(!isset($lang->use_default)) - { - $lang->use_default = $lang->lang_select_default; - } - } - - if(!is_array($tcache)) - { - $query = $db->simple_select('themes', 'tid, name, pid, allowedgroups', "pid!='0'"); - - while($theme = $db->fetch_array($query)) - { - $tcache[$theme['pid']][$theme['tid']] = $theme; - } - } - - if(is_array($tcache[$tid])) - { - foreach($tcache[$tid] as $theme) - { - $sel = ""; - // Show theme if allowed, or if override is on - if(is_member($theme['allowedgroups']) || $theme['allowedgroups'] == "all" || $usergroup_override == true) - { - if($theme['tid'] == $selected) - { - $sel = " selected=\"selected\""; - } - - if($theme['pid'] != 0) - { - $theme['name'] = htmlspecialchars_uni($theme['name']); - eval("\$themeselect_option .= \"".$templates->get("usercp_themeselector_option")."\";"); - ++$num_themes; - $depthit = $depth."--"; - } - - if(array_key_exists($theme['tid'], $tcache)) - { - build_theme_select($name, $selected, $theme['tid'], $depthit, $usergroup_override, $footer, $count_override); - } - } - } - } - - if($tid == 1 && ($num_themes > 1 || $count_override == true)) - { - if($footer == true) - { - eval("\$themeselect = \"".$templates->get("footer_themeselector")."\";"); - } - else - { - eval("\$themeselect = \"".$templates->get("usercp_themeselector")."\";"); - } - - return $themeselect; - } - else - { - return false; - } -} - -/** - * Get the theme data of a theme id. - * - * @param int $tid The theme id of the theme. - * @return boolean|array False if no valid theme, Array with the theme data otherwise - */ -function get_theme($tid) -{ - global $tcache, $db; - - if(!is_array($tcache)) - { - $query = $db->simple_select('themes', 'tid, name, pid, allowedgroups', "pid!='0'"); - - while($theme = $db->fetch_array($query)) - { - $tcache[$theme['pid']][$theme['tid']] = $theme; - } - } - - $s_theme = false; - - foreach($tcache as $themes) - { - foreach($themes as $theme) - { - if($tid == $theme['tid']) - { - $s_theme = $theme; - break 2; - } - } - } - - return $s_theme; -} - -/** - * Custom function for htmlspecialchars which takes in to account unicode - * - * @param string $message The string to format - * @return string The string with htmlspecialchars applied - */ -function htmlspecialchars_uni($message) -{ - $message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode - $message = str_replace("<", "<", $message); - $message = str_replace(">", ">", $message); - $message = str_replace("\"", """, $message); - return $message; -} - -/** - * Custom function for formatting numbers. - * - * @param int $number The number to format. - * @return int The formatted number. - */ -function my_number_format($number) -{ - global $mybb; - - if($number == "-") - { - return $number; - } - - if(is_int($number)) - { - return number_format($number, 0, $mybb->settings['decpoint'], $mybb->settings['thousandssep']); - } - else - { - $parts = explode('.', $number); - - if(isset($parts[1])) - { - $decimals = my_strlen($parts[1]); - } - else - { - $decimals = 0; - } - - return number_format((double)$number, $decimals, $mybb->settings['decpoint'], $mybb->settings['thousandssep']); - } -} - -/** - * Converts a string of text to or from UTF-8. - * - * @param string $str The string of text to convert - * @param boolean $to Whether or not the string is being converted to or from UTF-8 (true if converting to) - * @return string The converted string - */ -function convert_through_utf8($str, $to=true) -{ - global $lang; - static $charset; - static $use_mb; - static $use_iconv; - - if(!isset($charset)) - { - $charset = my_strtolower($lang->settings['charset']); - } - - if($charset == "utf-8") - { - return $str; - } - - if(!isset($use_iconv)) - { - $use_iconv = function_exists("iconv"); - } - - if(!isset($use_mb)) - { - $use_mb = function_exists("mb_convert_encoding"); - } - - if($use_iconv || $use_mb) - { - if($to) - { - $from_charset = $lang->settings['charset']; - $to_charset = "UTF-8"; - } - else - { - $from_charset = "UTF-8"; - $to_charset = $lang->settings['charset']; - } - if($use_iconv) - { - return iconv($from_charset, $to_charset."//IGNORE", $str); - } - else - { - return @mb_convert_encoding($str, $to_charset, $from_charset); - } - } - elseif($charset == "iso-8859-1" && function_exists("utf8_encode")) - { - if($to) - { - return utf8_encode($str); - } - else - { - return utf8_decode($str); - } - } - else - { - return $str; - } -} - -/** - * DEPRECATED! Please use other alternatives. - * - * @deprecated - * @param string $message - * - * @return string - */ -function my_wordwrap($message) -{ - return $message; -} - -/** - * Workaround for date limitation in PHP to establish the day of a birthday (Provided by meme) - * - * @param int $month The month of the birthday - * @param int $day The day of the birthday - * @param int $year The year of the bithday - * @return int The numeric day of the week for the birthday - */ -function get_weekday($month, $day, $year) -{ - $h = 4; - - for($i = 1969; $i >= $year; $i--) - { - $j = get_bdays($i); - - for($k = 11; $k >= 0; $k--) - { - $l = ($k + 1); - - for($m = $j[$k]; $m >= 1; $m--) - { - $h--; - - if($i == $year && $l == $month && $m == $day) - { - return $h; - } - - if($h == 0) - { - $h = 7; - } - } - } - } -} - -/** - * Workaround for date limitation in PHP to establish the day of a birthday (Provided by meme) - * - * @param int $in The year. - * @return array The number of days in each month of that year - */ -function get_bdays($in) -{ - return array( - 31, - ($in % 4 == 0 && ($in % 100 > 0 || $in % 400 == 0) ? 29 : 28), - 31, - 30, - 31, - 30, - 31, - 31, - 30, - 31, - 30, - 31 - ); -} - -/** - * DEPRECATED! Please use mktime()! - * Formats a birthday appropriately - * - * @deprecated - * @param string $display The PHP date format string - * @param int $bm The month of the birthday - * @param int $bd The day of the birthday - * @param int $by The year of the birthday - * @param int $wd The weekday of the birthday - * @return string The formatted birthday - */ -function format_bdays($display, $bm, $bd, $by, $wd) -{ - global $lang; - - $bdays = array( - $lang->sunday, - $lang->monday, - $lang->tuesday, - $lang->wednesday, - $lang->thursday, - $lang->friday, - $lang->saturday - ); - - $bmonth = array( - $lang->month_1, - $lang->month_2, - $lang->month_3, - $lang->month_4, - $lang->month_5, - $lang->month_6, - $lang->month_7, - $lang->month_8, - $lang->month_9, - $lang->month_10, - $lang->month_11, - $lang->month_12 - ); - - - // This needs to be in this specific order - $find = array( - 'm', - 'n', - 'd', - 'D', - 'y', - 'Y', - 'j', - 'S', - 'F', - 'l', - 'M', - ); - - $html = array( - 'm', - 'n', - 'c', - 'D', - 'y', - 'Y', - 'j', - 'S', - 'F', - 'l', - 'M', - ); - - $bdays = str_replace($find, $html, $bdays); - $bmonth = str_replace($find, $html, $bmonth); - - $replace = array( - sprintf('%02s', $bm), - $bm, - sprintf('%02s', $bd), - ($wd == 2 ? my_substr($bdays[$wd], 0, 4) : ($wd == 4 ? my_substr($bdays[$wd], 0, 5) : my_substr($bdays[$wd], 0, 3))), - my_substr($by, 2), - $by, - ($bd[0] == 0 ? my_substr($bd, 1) : $bd), - ($bd == 1 || $bd == 21 || $bd == 31 ? 'st' : ($bd == 2 || $bd == 22 ? 'nd' : ($bd == 3 || $bd == 23 ? 'rd' : 'th'))), - $bmonth[$bm-1], - $wd, - ($bm == 9 ? my_substr($bmonth[$bm-1], 0, 4) : my_substr($bmonth[$bm-1], 0, 3)), - ); - - // Do we have the full month in our output? - // If so there's no need for the short month - if(strpos($display, 'F') !== false) - { - array_pop($find); - array_pop($replace); - } - - return str_replace($find, $replace, $display); -} - -/** - * Returns the age of a user with specified birthday. - * - * @param string $birthday The birthday of a user. - * @return int The age of a user with that birthday. - */ -function get_age($birthday) -{ - $bday = explode("-", $birthday); - if(!$bday[2]) - { - return; - } - - list($day, $month, $year) = explode("-", my_date("j-n-Y", TIME_NOW, 0, 0)); - - $age = $year-$bday[2]; - - if(($month == $bday[1] && $day < $bday[0]) || $month < $bday[1]) - { - --$age; - } - return $age; -} - -/** - * Updates the first posts in a thread. - * - * @param int $tid The thread id for which to update the first post id. - */ -function update_first_post($tid) -{ - global $db; - - $query = $db->query(" - SELECT u.uid, u.username, p.pid, p.username AS postusername, p.dateline - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid='$tid' - ORDER BY p.dateline ASC - LIMIT 1 - "); - $firstpost = $db->fetch_array($query); - - if(empty($firstpost['username'])) - { - $firstpost['username'] = $firstpost['postusername']; - } - $firstpost['username'] = $db->escape_string($firstpost['username']); - - $update_array = array( - 'firstpost' => (int)$firstpost['pid'], - 'username' => $firstpost['username'], - 'uid' => (int)$firstpost['uid'], - 'dateline' => (int)$firstpost['dateline'] - ); - $db->update_query("threads", $update_array, "tid='{$tid}'"); -} - -/** - * Updates the last posts in a thread. - * - * @param int $tid The thread id for which to update the last post id. - */ -function update_last_post($tid) -{ - global $db; - - $query = $db->query(" - SELECT u.uid, u.username, p.username AS postusername, p.dateline - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid='$tid' AND p.visible='1' - ORDER BY p.dateline DESC - LIMIT 1" - ); - $lastpost = $db->fetch_array($query); - - if(empty($lastpost['username'])) - { - $lastpost['username'] = $lastpost['postusername']; - } - - if(empty($lastpost['dateline'])) - { - $query = $db->query(" - SELECT u.uid, u.username, p.pid, p.username AS postusername, p.dateline - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid='$tid' - ORDER BY p.dateline ASC - LIMIT 1 - "); - $firstpost = $db->fetch_array($query); - - $lastpost['username'] = $firstpost['username']; - $lastpost['uid'] = $firstpost['uid']; - $lastpost['dateline'] = $firstpost['dateline']; - } - - $lastpost['username'] = $db->escape_string($lastpost['username']); - - $update_array = array( - 'lastpost' => (int)$lastpost['dateline'], - 'lastposter' => $lastpost['username'], - 'lastposteruid' => (int)$lastpost['uid'] - ); - $db->update_query("threads", $update_array, "tid='{$tid}'"); -} - -/** - * Checks for the length of a string, mb strings accounted for - * - * @param string $string The string to check the length of. - * @return int The length of the string. - */ -function my_strlen($string) -{ - global $lang; - - $string = preg_replace("#&\#([0-9]+);#", "-", $string); - - if(strtolower($lang->settings['charset']) == "utf-8") - { - // Get rid of any excess RTL and LTR override for they are the workings of the devil - $string = str_replace(dec_to_utf8(8238), "", $string); - $string = str_replace(dec_to_utf8(8237), "", $string); - - // Remove dodgy whitespaces - $string = str_replace(chr(0xCA), "", $string); - } - $string = trim($string); - - if(function_exists("mb_strlen")) - { - $string_length = mb_strlen($string); - } - else - { - $string_length = strlen($string); - } - - return $string_length; -} - -/** - * Cuts a string at a specified point, mb strings accounted for - * - * @param string $string The string to cut. - * @param int $start Where to cut - * @param int $length (optional) How much to cut - * @param bool $handle_entities (optional) Properly handle HTML entities? - * @return string The cut part of the string. - */ -function my_substr($string, $start, $length=null, $handle_entities = false) -{ - if($handle_entities) - { - $string = unhtmlentities($string); - } - if(function_exists("mb_substr")) - { - if($length != null) - { - $cut_string = mb_substr($string, $start, $length); - } - else - { - $cut_string = mb_substr($string, $start); - } - } - else - { - if($length != null) - { - $cut_string = substr($string, $start, $length); - } - else - { - $cut_string = substr($string, $start); - } - } - - if($handle_entities) - { - $cut_string = htmlspecialchars_uni($cut_string); - } - return $cut_string; -} - -/** - * Lowers the case of a string, mb strings accounted for - * - * @param string $string The string to lower. - * @return string The lowered string. - */ -function my_strtolower($string) -{ - if(function_exists("mb_strtolower")) - { - $string = mb_strtolower($string); - } - else - { - $string = strtolower($string); - } - - return $string; -} - -/** - * Finds a needle in a haystack and returns it position, mb strings accounted for - * - * @param string $haystack String to look in (haystack) - * @param string $needle What to look for (needle) - * @param int $offset (optional) How much to offset - * @return int|bool false on needle not found, integer position if found - */ -function my_strpos($haystack, $needle, $offset=0) -{ - if($needle == '') - { - return false; - } - - if(function_exists("mb_strpos")) - { - $position = mb_strpos($haystack, $needle, $offset); - } - else - { - $position = strpos($haystack, $needle, $offset); - } - - return $position; -} - -/** - * Ups the case of a string, mb strings accounted for - * - * @param string $string The string to up. - * @return string The uped string. - */ -function my_strtoupper($string) -{ - if(function_exists("mb_strtoupper")) - { - $string = mb_strtoupper($string); - } - else - { - $string = strtoupper($string); - } - - return $string; -} - -/** - * Returns any html entities to their original character - * - * @param string $string The string to un-htmlentitize. - * @return string The un-htmlentitied' string. - */ -function unhtmlentities($string) -{ - // Replace numeric entities - $string = preg_replace_callback('~&#x([0-9a-f]+);~i', create_function('$matches', 'return unichr(hexdec($matches[1]));'), $string); - $string = preg_replace_callback('~&#([0-9]+);~', create_function('$matches', 'return unichr($matches[1]);'), $string); - - // Replace literal entities - $trans_tbl = get_html_translation_table(HTML_ENTITIES); - $trans_tbl = array_flip($trans_tbl); - - return strtr($string, $trans_tbl); -} - -/** - * Returns any ascii to it's character (utf-8 safe). - * - * @param int $c The ascii to characterize. - * @return string|bool The characterized ascii. False on failure - */ -function unichr($c) -{ - if($c <= 0x7F) - { - return chr($c); - } - else if($c <= 0x7FF) - { - return chr(0xC0 | $c >> 6) . chr(0x80 | $c & 0x3F); - } - else if($c <= 0xFFFF) - { - return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F) - . chr(0x80 | $c & 0x3F); - } - else if($c <= 0x10FFFF) - { - return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F) - . chr(0x80 | $c >> 6 & 0x3F) - . chr(0x80 | $c & 0x3F); - } - else - { - return false; - } -} - -/** - * Get the event poster. - * - * @param array $event The event data array. - * @return string The link to the event poster. - */ -function get_event_poster($event) -{ - $event['username'] = htmlspecialchars_uni($event['username']); - $event['username'] = format_name($event['username'], $event['usergroup'], $event['displaygroup']); - $event_poster = build_profile_link($event['username'], $event['author']); - return $event_poster; -} - -/** - * Get the event date. - * - * @param array $event The event data array. - * @return string The event date. - */ -function get_event_date($event) -{ - global $mybb; - - $event_date = explode("-", $event['date']); - $event_date = gmmktime(0, 0, 0, $event_date[1], $event_date[0], $event_date[2]); - $event_date = my_date($mybb->settings['dateformat'], $event_date); - - return $event_date; -} - -/** - * Get the profile link. - * - * @param int $uid The user id of the profile. - * @return string The url to the profile. - */ -function get_profile_link($uid=0) -{ - $link = str_replace("{uid}", $uid, PROFILE_URL); - return htmlspecialchars_uni($link); -} - -/** - * Get the announcement link. - * - * @param int $aid The announement id of the announcement. - * @return string The url to the announcement. - */ -function get_announcement_link($aid=0) -{ - $link = str_replace("{aid}", $aid, ANNOUNCEMENT_URL); - return htmlspecialchars_uni($link); -} - -/** - * Build the profile link. - * - * @param string $username The Username of the profile. - * @param int $uid The user id of the profile. - * @param string $target The target frame - * @param string $onclick Any onclick javascript. - * @return string The complete profile link. - */ -function build_profile_link($username="", $uid=0, $target="", $onclick="") -{ - global $mybb, $lang; - - if(!$username && $uid == 0) - { - // Return Guest phrase for no UID, no guest nickname - return $lang->guest; - } - elseif($uid == 0) - { - // Return the guest's nickname if user is a guest but has a nickname - return $username; - } - else - { - // Build the profile link for the registered user - if(!empty($target)) - { - $target = " target=\"{$target}\""; - } - - if(!empty($onclick)) - { - $onclick = " onclick=\"{$onclick}\""; - } - - return "settings['bburl']}/".get_profile_link($uid)."\"{$target}{$onclick}>{$username}"; - } -} - -/** - * Build the forum link. - * - * @param int $fid The forum id of the forum. - * @param int $page (Optional) The page number of the forum. - * @return string The url to the forum. - */ -function get_forum_link($fid, $page=0) -{ - if($page > 0) - { - $link = str_replace("{fid}", $fid, FORUM_URL_PAGED); - $link = str_replace("{page}", $page, $link); - return htmlspecialchars_uni($link); - } - else - { - $link = str_replace("{fid}", $fid, FORUM_URL); - return htmlspecialchars_uni($link); - } -} - -/** - * Build the thread link. - * - * @param int $tid The thread id of the thread. - * @param int $page (Optional) The page number of the thread. - * @param string $action (Optional) The action we're performing (ex, lastpost, newpost, etc) - * @return string The url to the thread. - */ -function get_thread_link($tid, $page=0, $action='') -{ - if($page > 1) - { - if($action) - { - $link = THREAD_URL_ACTION; - $link = str_replace("{action}", $action, $link); - } - else - { - $link = THREAD_URL_PAGED; - } - $link = str_replace("{tid}", $tid, $link); - $link = str_replace("{page}", $page, $link); - return htmlspecialchars_uni($link); - } - else - { - if($action) - { - $link = THREAD_URL_ACTION; - $link = str_replace("{action}", $action, $link); - } - else - { - $link = THREAD_URL; - } - $link = str_replace("{tid}", $tid, $link); - return htmlspecialchars_uni($link); - } -} - -/** - * Build the post link. - * - * @param int $pid The post ID of the post - * @param int $tid The thread id of the post. - * @return string The url to the post. - */ -function get_post_link($pid, $tid=0) -{ - if($tid > 0) - { - $link = str_replace("{tid}", $tid, THREAD_URL_POST); - $link = str_replace("{pid}", $pid, $link); - return htmlspecialchars_uni($link); - } - else - { - $link = str_replace("{pid}", $pid, POST_URL); - return htmlspecialchars_uni($link); - } -} - -/** - * Build the event link. - * - * @param int $eid The event ID of the event - * @return string The URL of the event - */ -function get_event_link($eid) -{ - $link = str_replace("{eid}", $eid, EVENT_URL); - return htmlspecialchars_uni($link); -} - -/** - * Build the link to a specified date on the calendar - * - * @param int $calendar The ID of the calendar - * @param int $year The year - * @param int $month The month - * @param int $day The day (optional) - * @return string The URL of the calendar - */ -function get_calendar_link($calendar, $year=0, $month=0, $day=0) -{ - if($day > 0) - { - $link = str_replace("{month}", $month, CALENDAR_URL_DAY); - $link = str_replace("{year}", $year, $link); - $link = str_replace("{day}", $day, $link); - $link = str_replace("{calendar}", $calendar, $link); - return htmlspecialchars_uni($link); - } - else if($month > 0) - { - $link = str_replace("{month}", $month, CALENDAR_URL_MONTH); - $link = str_replace("{year}", $year, $link); - $link = str_replace("{calendar}", $calendar, $link); - return htmlspecialchars_uni($link); - } - /* Not implemented - else if($year > 0) - { - }*/ - else - { - $link = str_replace("{calendar}", $calendar, CALENDAR_URL); - return htmlspecialchars_uni($link); - } -} - -/** - * Build the link to a specified week on the calendar - * - * @param int $calendar The ID of the calendar - * @param int $week The week - * @return string The URL of the calendar - */ -function get_calendar_week_link($calendar, $week) -{ - if($week < 0) - { - $week = str_replace('-', "n", $week); - } - $link = str_replace("{week}", $week, CALENDAR_URL_WEEK); - $link = str_replace("{calendar}", $calendar, $link); - return htmlspecialchars_uni($link); -} - -/** - * Get the user data of an user id. - * - * @param int $uid The user id of the user. - * @return array The users data - */ -function get_user($uid) -{ - global $mybb, $db; - static $user_cache; - - $uid = (int)$uid; - - if(!empty($mybb->user) && $uid == $mybb->user['uid']) - { - return $mybb->user; - } - elseif(isset($user_cache[$uid])) - { - return $user_cache[$uid]; - } - elseif($uid > 0) - { - $query = $db->simple_select("users", "*", "uid = '{$uid}'"); - $user_cache[$uid] = $db->fetch_array($query); - - return $user_cache[$uid]; - } - return array(); -} - -/** - * Get the user data of an user username. - * - * @param string $username The user username of the user. - * @param array $options - * @return array The users data - */ -function get_user_by_username($username, $options=array()) -{ - global $mybb, $db; - - $username = $db->escape_string(my_strtolower($username)); - - if(!isset($options['username_method'])) - { - $options['username_method'] = 0; - } - - switch($db->type) - { - case 'mysql': - case 'mysqli': - $field = 'username'; - $efield = 'email'; - break; - default: - $field = 'LOWER(username)'; - $efield = 'LOWER(email)'; - break; - } - - switch($options['username_method']) - { - case 1: - $sqlwhere = "{$efield}='{$username}'"; - break; - case 2: - $sqlwhere = "{$field}='{$username}' OR {$efield}='{$username}'"; - break; - default: - $sqlwhere = "{$field}='{$username}'"; - break; - } - - $fields = array('uid'); - if(isset($options['fields'])) - { - $fields = array_merge((array)$options['fields'], $fields); - } - - $query = $db->simple_select('users', implode(',', array_unique($fields)), $sqlwhere, array('limit' => 1)); - - if(isset($options['exists'])) - { - return (bool)$db->num_rows($query); - } - - return $db->fetch_array($query); -} - -/** - * Get the forum of a specific forum id. - * - * @param int $fid The forum id of the forum. - * @param int $active_override (Optional) If set to 1, will override the active forum status - * @return array|bool The database row of a forum. False on failure - */ -function get_forum($fid, $active_override=0) -{ - global $cache; - static $forum_cache; - - if(!isset($forum_cache) || is_array($forum_cache)) - { - $forum_cache = $cache->read("forums"); - } - - if(empty($forum_cache[$fid])) - { - return false; - } - - if($active_override != 1) - { - $parents = explode(",", $forum_cache[$fid]['parentlist']); - if(is_array($parents)) - { - foreach($parents as $parent) - { - if($forum_cache[$parent]['active'] == 0) - { - return false; - } - } - } - } - - return $forum_cache[$fid]; -} - -/** - * Get the thread of a thread id. - * - * @param int $tid The thread id of the thread. - * @param boolean $recache Whether or not to recache the thread. - * @return array|bool The database row of the thread. False on failure - */ -function get_thread($tid, $recache = false) -{ - global $db; - static $thread_cache; - - $tid = (int)$tid; - - if(isset($thread_cache[$tid]) && !$recache) - { - return $thread_cache[$tid]; - } - else - { - $query = $db->simple_select("threads", "*", "tid = '{$tid}'"); - $thread = $db->fetch_array($query); - - if($thread) - { - $thread_cache[$tid] = $thread; - return $thread; - } - else - { - $thread_cache[$tid] = false; - return false; - } - } -} - -/** - * Get the post of a post id. - * - * @param int $pid The post id of the post. - * @return array|bool The database row of the post. False on failure - */ -function get_post($pid) -{ - global $db; - static $post_cache; - - $pid = (int)$pid; - - if(isset($post_cache[$pid])) - { - return $post_cache[$pid]; - } - else - { - $query = $db->simple_select("posts", "*", "pid = '{$pid}'"); - $post = $db->fetch_array($query); - - if($post) - { - $post_cache[$pid] = $post; - return $post; - } - else - { - $post_cache[$pid] = false; - return false; - } - } -} - -/** - * Get inactivate forums. - * - * @return string The comma separated values of the inactivate forum. - */ -function get_inactive_forums() -{ - global $forum_cache, $cache; - - if(!$forum_cache) - { - cache_forums(); - } - - $inactive = array(); - - foreach($forum_cache as $fid => $forum) - { - if($forum['active'] == 0) - { - $inactive[] = $fid; - foreach($forum_cache as $fid1 => $forum1) - { - if(my_strpos(",".$forum1['parentlist'].",", ",".$fid.",") !== false && !in_array($fid1, $inactive)) - { - $inactive[] = $fid1; - } - } - } - } - - $inactiveforums = implode(",", $inactive); - - return $inactiveforums; -} - -/** - * Checks to make sure a user has not tried to login more times than permitted - * - * @param bool $fatal (Optional) Stop execution if it finds an error with the login. Default is True - * @return bool|int Number of logins when success, false if failed. - */ -function login_attempt_check($fatal = true) -{ - global $mybb, $lang, $session, $db; - - if($mybb->settings['failedlogincount'] == 0) - { - return 1; - } - // Note: Number of logins is defaulted to 1, because using 0 seems to clear cookie data. Not really a problem as long as we account for 1 being default. - - // Use cookie if possible, otherwise use session - // Find better solution to prevent clearing cookies - $loginattempts = 0; - $failedlogin = 0; - - if(!empty($mybb->cookies['loginattempts'])) - { - $loginattempts = $mybb->cookies['loginattempts']; - } - - if(!empty($mybb->cookies['failedlogin'])) - { - $failedlogin = $mybb->cookies['failedlogin']; - } - - // Work out if the user has had more than the allowed number of login attempts - if($loginattempts > $mybb->settings['failedlogincount']) - { - // If so, then we need to work out if they can try to login again - // Some maths to work out how long they have left and display it to them - $now = TIME_NOW; - - if(empty($mybb->cookies['failedlogin'])) - { - $failedtime = $now; - } - else - { - $failedtime = $mybb->cookies['failedlogin']; - } - - $secondsleft = $mybb->settings['failedlogintime'] * 60 + $failedtime - $now; - $hoursleft = floor($secondsleft / 3600); - $minsleft = floor(($secondsleft / 60) % 60); - $secsleft = floor($secondsleft % 60); - - // This value will be empty the first time the user doesn't login in, set it - if(empty($failedlogin)) - { - my_setcookie('failedlogin', $now); - if($fatal) - { - error($lang->sprintf($lang->failed_login_wait, $hoursleft, $minsleft, $secsleft)); - } - - return false; - } - - // Work out if the user has waited long enough before letting them login again - if($mybb->cookies['failedlogin'] < ($now - $mybb->settings['failedlogintime'] * 60)) - { - my_setcookie('loginattempts', 1); - my_unsetcookie('failedlogin'); - if($mybb->user['uid'] != 0) - { - $update_array = array( - 'loginattempts' => 1 - ); - $db->update_query("users", $update_array, "uid = '{$mybb->user['uid']}'"); - } - return 1; - } - // Not waited long enough - else if($mybb->cookies['failedlogin'] > ($now - $mybb->settings['failedlogintime'] * 60)) - { - if($fatal) - { - error($lang->sprintf($lang->failed_login_wait, $hoursleft, $minsleft, $secsleft)); - } - - return false; - } - } - - // User can attempt another login - return $loginattempts; -} - -/** - * Validates the format of an email address. - * - * @param string $email The string to check. - * @return boolean True when valid, false when invalid. - */ -function validate_email_format($email) -{ - if(strpos($email, ' ') !== false) - { - return false; - } - // Valid local characters for email addresses: http://www.remote.org/jochen/mail/info/chars.html - return preg_match("/^[a-zA-Z0-9&*+\-_.{}~^\?=\/]+@[a-zA-Z0-9-]+\.([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,}$/si", $email); -} - -/** - * Checks to see if the email is already in use by another - * - * @param string $email The email to check. - * @param int $uid User ID of the user (updating only) - * @return boolean True when in use, false when not. - */ -function email_already_in_use($email, $uid=0) -{ - global $db; - - $uid_string = ""; - if($uid) - { - $uid_string = " AND uid != '".(int)$uid."'"; - } - $query = $db->simple_select("users", "COUNT(email) as emails", "email = '".$db->escape_string($email)."'{$uid_string}"); - - if($db->fetch_field($query, "emails") > 0) - { - return true; - } - - return false; -} - -/** - * Rebuilds settings.php - * - */ -function rebuild_settings() -{ - global $db, $mybb; - - if(!file_exists(MYBB_ROOT."inc/settings.php")) - { - $mode = "x"; - } - else - { - $mode = "w"; - } - - $options = array( - "order_by" => "title", - "order_dir" => "ASC" - ); - $query = $db->simple_select("settings", "value, name", "", $options); - - $settings = null; - while($setting = $db->fetch_array($query)) - { - $mybb->settings[$setting['name']] = $setting['value']; - $setting['value'] = addcslashes($setting['value'], '\\"$'); - $settings .= "\$settings['{$setting['name']}'] = \"{$setting['value']}\";\n"; - } - - $settings = "<"."?php\n/*********************************\ \n DO NOT EDIT THIS FILE, PLEASE USE\n THE SETTINGS EDITOR\n\*********************************/\n\n$settings\n"; - $file = @fopen(MYBB_ROOT."inc/settings.php", $mode); - @fwrite($file, $settings); - @fclose($file); - - $GLOBALS['settings'] = &$mybb->settings; -} - -/** - * Build a PREG compatible array of search highlight terms to replace in posts. - * - * @param string $terms Incoming terms to highlight - * @return array PREG compatible array of terms - */ -function build_highlight_array($terms) -{ - global $mybb; - - if($mybb->settings['minsearchword'] < 1) - { - $mybb->settings['minsearchword'] = 3; - } - - if(is_array($terms)) - { - $terms = implode(' ', $terms); - } - - // Strip out any characters that shouldn't be included - $bad_characters = array( - "(", - ")", - "+", - "-", - "~" - ); - $terms = str_replace($bad_characters, '', $terms); - - // Check if this is a "series of words" - should be treated as an EXACT match - if(my_strpos($terms, "\"") !== false) - { - $inquote = false; - $terms = explode("\"", $terms); - $words = array(); - foreach($terms as $phrase) - { - $phrase = htmlspecialchars_uni($phrase); - if($phrase != "") - { - if($inquote) - { - $words[] = trim($phrase); - } - else - { - $split_words = preg_split("#\s{1,}#", $phrase, -1); - if(!is_array($split_words)) - { - continue; - } - foreach($split_words as $word) - { - if(!$word || strlen($word) < $mybb->settings['minsearchword']) - { - continue; - } - $words[] = trim($word); - } - } - } - $inquote = !$inquote; - } - } - // Otherwise just a simple search query with no phrases - else - { - $terms = htmlspecialchars_uni($terms); - $split_words = preg_split("#\s{1,}#", $terms, -1); - if(is_array($split_words)) - { - foreach($split_words as $word) - { - if(!$word || strlen($word) < $mybb->settings['minsearchword']) - { - continue; - } - $words[] = trim($word); - } - } - } - - if(!is_array($words)) - { - return false; - } - - // Sort the word array by length. Largest terms go first and work their way down to the smallest term. - // This resolves problems like "test tes" where "tes" will be highlighted first, then "test" can't be highlighted because of the changed html - usort($words, create_function('$a,$b', 'return strlen($b) - strlen($a);')); - - // Loop through our words to build the PREG compatible strings - foreach($words as $word) - { - $word = trim($word); - - $word = my_strtolower($word); - - // Special boolean operators should be stripped - if($word == "" || $word == "or" || $word == "not" || $word == "and") - { - continue; - } - - // Now make PREG compatible - $find = "#(?!<.*?)(".preg_quote($word, "#").")(?![^<>]*?>)#ui"; - $replacement = "$1"; - $highlight_cache[$find] = $replacement; - } - - return $highlight_cache; -} - -/** - * Converts a decimal reference of a character to its UTF-8 equivalent - * (Code by Anne van Kesteren, http://annevankesteren.nl/2005/05/character-references) - * - * @param int $src Decimal value of a character reference - * @return string|bool - */ -function dec_to_utf8($src) -{ - $dest = ''; - - if($src < 0) - { - return false; - } - elseif($src <= 0x007f) - { - $dest .= chr($src); - } - elseif($src <= 0x07ff) - { - $dest .= chr(0xc0 | ($src >> 6)); - $dest .= chr(0x80 | ($src & 0x003f)); - } - elseif($src <= 0xffff) - { - $dest .= chr(0xe0 | ($src >> 12)); - $dest .= chr(0x80 | (($src >> 6) & 0x003f)); - $dest .= chr(0x80 | ($src & 0x003f)); - } - elseif($src <= 0x10ffff) - { - $dest .= chr(0xf0 | ($src >> 18)); - $dest .= chr(0x80 | (($src >> 12) & 0x3f)); - $dest .= chr(0x80 | (($src >> 6) & 0x3f)); - $dest .= chr(0x80 | ($src & 0x3f)); - } - else - { - // Out of range - return false; - } - - return $dest; -} - -/** - * Checks if a username has been disallowed for registration/use. - * - * @param string $username The username - * @param boolean $update_lastuse True if the 'last used' dateline should be updated if a match is found. - * @return boolean True if banned, false if not banned - */ -function is_banned_username($username, $update_lastuse=false) -{ - global $db; - $query = $db->simple_select('banfilters', 'filter, fid', "type='2'"); - while($banned_username = $db->fetch_array($query)) - { - // Make regular expression * match - $banned_username['filter'] = str_replace('\*', '(.*)', preg_quote($banned_username['filter'], '#')); - if(preg_match("#(^|\b){$banned_username['filter']}($|\b)#i", $username)) - { - // Updating last use - if($update_lastuse == true) - { - $db->update_query("banfilters", array("lastuse" => TIME_NOW), "fid='{$banned_username['fid']}'"); - } - return true; - } - } - // Still here - good username - return false; -} - -/** - * Check if a specific email address has been banned. - * - * @param string $email The email address. - * @param boolean $update_lastuse True if the 'last used' dateline should be updated if a match is found. - * @return boolean True if banned, false if not banned - */ -function is_banned_email($email, $update_lastuse=false) -{ - global $cache, $db; - - $banned_cache = $cache->read("bannedemails"); - - if($banned_cache === false) - { - // Failed to read cache, see if we can rebuild it - $cache->update_bannedemails(); - $banned_cache = $cache->read("bannedemails"); - } - - if(is_array($banned_cache) && !empty($banned_cache)) - { - foreach($banned_cache as $banned_email) - { - // Make regular expression * match - $banned_email['filter'] = str_replace('\*', '(.*)', preg_quote($banned_email['filter'], '#')); - - if(preg_match("#{$banned_email['filter']}#i", $email)) - { - // Updating last use - if($update_lastuse == true) - { - $db->update_query("banfilters", array("lastuse" => TIME_NOW), "fid='{$banned_email['fid']}'"); - } - return true; - } - } - } - - // Still here - good email - return false; -} - -/** - * Checks if a specific IP address has been banned. - * - * @param string $ip_address The IP address. - * @param boolean $update_lastuse True if the 'last used' dateline should be updated if a match is found. - * @return boolean True if banned, false if not banned. - */ -function is_banned_ip($ip_address, $update_lastuse=false) -{ - global $db, $cache; - - $banned_ips = $cache->read("bannedips"); - if(!is_array($banned_ips)) - { - return false; - } - - $ip_address = my_inet_pton($ip_address); - foreach($banned_ips as $banned_ip) - { - if(!$banned_ip['filter']) - { - continue; - } - - $banned = false; - - $ip_range = fetch_ip_range($banned_ip['filter']); - if(is_array($ip_range)) - { - if(strcmp($ip_range[0], $ip_address) <= 0 && strcmp($ip_range[1], $ip_address) >= 0) - { - $banned = true; - } - } - elseif($ip_address == $ip_range) - { - $banned = true; - } - if($banned) - { - // Updating last use - if($update_lastuse == true) - { - $db->update_query("banfilters", array("lastuse" => TIME_NOW), "fid='{$banned_ip['fid']}'"); - } - return true; - } - } - - // Still here - good ip - return false; -} - -/** - * Returns an array of supported timezones - * - * @return string[] Key is timezone offset, Value the language description - */ -function get_supported_timezones() -{ - global $lang; - $timezones = array( - "-12" => $lang->timezone_gmt_minus_1200, - "-11" => $lang->timezone_gmt_minus_1100, - "-10" => $lang->timezone_gmt_minus_1000, - "-9.5" => $lang->timezone_gmt_minus_950, - "-9" => $lang->timezone_gmt_minus_900, - "-8" => $lang->timezone_gmt_minus_800, - "-7" => $lang->timezone_gmt_minus_700, - "-6" => $lang->timezone_gmt_minus_600, - "-5" => $lang->timezone_gmt_minus_500, - "-4.5" => $lang->timezone_gmt_minus_450, - "-4" => $lang->timezone_gmt_minus_400, - "-3.5" => $lang->timezone_gmt_minus_350, - "-3" => $lang->timezone_gmt_minus_300, - "-2" => $lang->timezone_gmt_minus_200, - "-1" => $lang->timezone_gmt_minus_100, - "0" => $lang->timezone_gmt, - "1" => $lang->timezone_gmt_100, - "2" => $lang->timezone_gmt_200, - "3" => $lang->timezone_gmt_300, - "3.5" => $lang->timezone_gmt_350, - "4" => $lang->timezone_gmt_400, - "4.5" => $lang->timezone_gmt_450, - "5" => $lang->timezone_gmt_500, - "5.5" => $lang->timezone_gmt_550, - "5.75" => $lang->timezone_gmt_575, - "6" => $lang->timezone_gmt_600, - "6.5" => $lang->timezone_gmt_650, - "7" => $lang->timezone_gmt_700, - "8" => $lang->timezone_gmt_800, - "8.5" => $lang->timezone_gmt_850, - "8.75" => $lang->timezone_gmt_875, - "9" => $lang->timezone_gmt_900, - "9.5" => $lang->timezone_gmt_950, - "10" => $lang->timezone_gmt_1000, - "10.5" => $lang->timezone_gmt_1050, - "11" => $lang->timezone_gmt_1100, - "11.5" => $lang->timezone_gmt_1150, - "12" => $lang->timezone_gmt_1200, - "12.75" => $lang->timezone_gmt_1275, - "13" => $lang->timezone_gmt_1300, - "14" => $lang->timezone_gmt_1400 - ); - return $timezones; -} - -/** - * Build a time zone selection list. - * - * @param string $name The name of the select - * @param int $selected The selected time zone (defaults to GMT) - * @param boolean $short True to generate a "short" list with just timezone and current time - * @return string - */ -function build_timezone_select($name, $selected=0, $short=false) -{ - global $mybb, $lang, $templates; - - $timezones = get_supported_timezones(); - - $selected = str_replace("+", "", $selected); - foreach($timezones as $timezone => $label) - { - $selected_add = ""; - if($selected == $timezone) - { - $selected_add = " selected=\"selected\""; - } - if($short == true) - { - $label = ''; - if($timezone != 0) - { - $label = $timezone; - if($timezone > 0) - { - $label = "+{$label}"; - } - if(strpos($timezone, ".") !== false) - { - $label = str_replace(".", ":", $label); - $label = str_replace(":5", ":30", $label); - $label = str_replace(":75", ":45", $label); - } - else - { - $label .= ":00"; - } - } - $time_in_zone = my_date($mybb->settings['timeformat'], TIME_NOW, $timezone); - $label = $lang->sprintf($lang->timezone_gmt_short, $label." ", $time_in_zone); - } - - eval("\$timezone_option .= \"".$templates->get("usercp_options_timezone_option")."\";"); - } - - eval("\$select = \"".$templates->get("usercp_options_timezone")."\";"); - return $select; -} - -/** - * Fetch the contents of a remote file. - * - * @param string $url The URL of the remote file - * @param array $post_data The array of post data - * @param int $max_redirects Number of maximum redirects - * @return string|bool The remote file contents. False on failure - */ -function fetch_remote_file($url, $post_data=array(), $max_redirects=20) -{ - global $mybb, $config; - - if(!my_validate_url($url, true)) - { - return false; - } - - $url_components = @parse_url($url); - - if(!isset($url_components['scheme'])) - { - $url_components['scheme'] = 'https'; - } - if(!isset($url_components['port'])) - { - $url_components['port'] = $url_components['scheme'] == 'https' ? 443 : 80; - } - - if( - !$url_components || - empty($url_components['host']) || - (!empty($url_components['scheme']) && !in_array($url_components['scheme'], array('http', 'https'))) || - (!in_array($url_components['port'], array(80, 8080, 443))) || - (!empty($config['disallowed_remote_hosts']) && in_array($url_components['host'], $config['disallowed_remote_hosts'])) - ) - { - return false; - } - - $addresses = get_ip_by_hostname($url_components['host']); - $destination_address = $addresses[0]; - - if(!empty($config['disallowed_remote_addresses'])) - { - foreach($config['disallowed_remote_addresses'] as $disallowed_address) - { - $ip_range = fetch_ip_range($disallowed_address); - - $packed_address = my_inet_pton($destination_address); - - if(is_array($ip_range)) - { - if(strcmp($ip_range[0], $packed_address) <= 0 && strcmp($ip_range[1], $packed_address) >= 0) - { - return false; - } - } - elseif($destination_address == $disallowed_address) - { - return false; - } - } - } - - $post_body = ''; - if(!empty($post_data)) - { - foreach($post_data as $key => $val) - { - $post_body .= '&'.urlencode($key).'='.urlencode($val); - } - $post_body = ltrim($post_body, '&'); - } - - if(function_exists("curl_init")) - { - $fetch_header = $max_redirects > 0; - - $ch = curl_init(); - - $curlopt = array( - CURLOPT_URL => $url, - CURLOPT_HEADER => $fetch_header, - CURLOPT_TIMEOUT => 10, - CURLOPT_RETURNTRANSFER => 1, - CURLOPT_FOLLOWLOCATION => 0, - ); - - if($ca_bundle_path = get_ca_bundle_path()) - { - $curlopt[CURLOPT_SSL_VERIFYPEER] = 1; - $curlopt[CURLOPT_CAINFO] = $ca_bundle_path; - } - else - { - $curlopt[CURLOPT_SSL_VERIFYPEER] = 0; - } - - $curl_version_info = curl_version(); - $curl_version = $curl_version_info['version']; - - if(version_compare(PHP_VERSION, '7.0.7', '>=') && version_compare($curl_version, '7.49', '>=')) - { - // CURLOPT_CONNECT_TO - $curlopt[10243] = array( - $url_components['host'].':'.$url_components['port'].':'.$destination_address - ); - } - elseif(version_compare(PHP_VERSION, '5.5', '>=') && version_compare($curl_version, '7.21.3', '>=')) - { - // CURLOPT_RESOLVE - $curlopt[10203] = array( - $url_components['host'].':'.$url_components['port'].':'.$destination_address - ); - } - - if(!empty($post_body)) - { - $curlopt[CURLOPT_POST] = 1; - $curlopt[CURLOPT_POSTFIELDS] = $post_body; - } - - curl_setopt_array($ch, $curlopt); - - $response = curl_exec($ch); - - if($fetch_header) - { - $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); - $header = substr($response, 0, $header_size); - $body = substr($response, $header_size); - - if(in_array(curl_getinfo($ch, CURLINFO_HTTP_CODE), array(301, 302))) - { - preg_match('/Location:(.*?)(?:\n|$)/', $header, $matches); - - if($matches) - { - $data = fetch_remote_file(trim(array_pop($matches)), $post_data, --$max_redirects); - } - } - else - { - $data = $body; - } - } - else - { - $data = $response; - } - - curl_close($ch); - return $data; - } - else if(function_exists("fsockopen")) - { - if(!isset($url_components['path'])) - { - $url_components['path'] = "/"; - } - if(isset($url_components['query'])) - { - $url_components['path'] .= "?{$url_components['query']}"; - } - - $scheme = ''; - - if($url_components['scheme'] == 'https') - { - $scheme = 'ssl://'; - if($url_components['port'] == 80) - { - $url_components['port'] = 443; - } - } - - if(function_exists('stream_context_create')) - { - if($url_components['scheme'] == 'https' && $ca_bundle_path = get_ca_bundle_path()) - { - $context = stream_context_create(array( - 'ssl' => array( - 'verify_peer' => true, - 'verify_peer_name' => true, - 'peer_name' => $url_components['host'], - 'cafile' => $ca_bundle_path, - ), - )); - } - else - { - $context = stream_context_create(array( - 'ssl' => array( - 'verify_peer' => false, - 'verify_peer_name' => false, - ), - )); - } - - $fp = @stream_socket_client($scheme.$destination_address.':'.(int)$url_components['port'], $error_no, $error, 10, STREAM_CLIENT_CONNECT, $context); - } - else - { - $fp = @fsockopen($scheme.$url_components['host'], (int)$url_components['port'], $error_no, $error, 10); - } - - @stream_set_timeout($fp, 10); - if(!$fp) - { - return false; - } - $headers = array(); - if(!empty($post_body)) - { - $headers[] = "POST {$url_components['path']} HTTP/1.0"; - $headers[] = "Content-Length: ".strlen($post_body); - $headers[] = "Content-Type: application/x-www-form-urlencoded"; - } - else - { - $headers[] = "GET {$url_components['path']} HTTP/1.0"; - } - - $headers[] = "Host: {$url_components['host']}"; - $headers[] = "Connection: Close"; - $headers[] = ''; - - if(!empty($post_body)) - { - $headers[] = $post_body; - } - else - { - // If we have no post body, we need to add an empty element to make sure we've got \r\n\r\n before the (non-existent) body starts - $headers[] = ''; - } - - $headers = implode("\r\n", $headers); - if(!@fwrite($fp, $headers)) - { - return false; - } - - $data = null; - - while(!feof($fp)) - { - $data .= fgets($fp, 12800); - } - fclose($fp); - - $data = explode("\r\n\r\n", $data, 2); - - $header = $data[0]; - $status_line = current(explode("\n\n", $header, 1)); - $body = $data[1]; - - if($max_redirects > 0 && (strstr($status_line, ' 301 ') || strstr($status_line, ' 302 '))) - { - preg_match('/Location:(.*?)(?:\n|$)/', $header, $matches); - - if($matches) - { - $data = fetch_remote_file(trim(array_pop($matches)), $post_data, --$max_redirects); - } - } - else - { - $data = $body; - } - - return $data; - } - else - { - return false; - } -} - -/** - * Resolves a hostname into a set of IP addresses. - * - * @param string $hostname The hostname to be resolved - * @return array|bool The resulting IP addresses. False on failure - */ -function get_ip_by_hostname($hostname) -{ - $addresses = @gethostbynamel($hostname); - - if(!$addresses) - { - $result_set = @dns_get_record($hostname, DNS_A | DNS_AAAA); - - if($result_set) - { - $addresses = array_column($result_set, 'ip'); - } - else - { - return false; - } - } - - return $addresses; -} - -/** - * Returns the location of the CA bundle defined in the PHP configuration. - * - * @return string|bool The location of the CA bundle, false if not set - */ -function get_ca_bundle_path() -{ - if($path = ini_get('openssl.cafile')) - { - return $path; - } - if($path = ini_get('curl.cainfo')) - { - return $path; - } - - return false; -} - -/** - * Checks if a particular user is a super administrator. - * - * @param int $uid The user ID to check against the list of super admins - * @return boolean True if a super admin, false if not - */ -function is_super_admin($uid) -{ - static $super_admins; - - if(!isset($super_admins)) - { - global $mybb; - $super_admins = str_replace(" ", "", $mybb->config['super_admins']); - } - - if(my_strpos(",{$super_admins},", ",{$uid},") === false) - { - return false; - } - else - { - return true; - } -} - -/** - * Checks if a user is a member of a particular group - * Originates from frostschutz's PluginLibrary - * github.com/frostschutz - * - * @param array|int|string A selection of groups (as array or comma seperated) to check or -1 for any group - * @param bool|array|int False assumes the current user. Otherwise an user array or an id can be passed - * @return array Array of groups specified in the first param to which the user belongs - */ -function is_member($groups, $user = false) -{ - global $mybb; - - if(empty($groups)) - { - return array(); - } - - if($user == false) - { - $user = $mybb->user; - } - else if(!is_array($user)) - { - // Assume it's a UID - $user = get_user($user); - } - - $memberships = array_map('intval', explode(',', $user['additionalgroups'])); - $memberships[] = $user['usergroup']; - - if(!is_array($groups)) - { - if((int)$groups == -1) - { - return $memberships; - } - else - { - if(is_string($groups)) - { - $groups = explode(',', $groups); - } - else - { - $groups = (array)$groups; - } - } - } - - $groups = array_filter(array_map('intval', $groups)); - - return array_intersect($groups, $memberships); -} - -/** - * Split a string based on the specified delimeter, ignoring said delimeter in escaped strings. - * Ex: the "quick brown fox" jumped, could return 1 => the, 2 => quick brown fox, 3 => jumped - * - * @param string $delimeter The delimeter to split by - * @param string $string The string to split - * @param string $escape The escape character or string if we have one. - * @return array Array of split string - */ -function escaped_explode($delimeter, $string, $escape="") -{ - $strings = array(); - $original = $string; - $in_escape = false; - if($escape) - { - if(is_array($escape)) - { - function escaped_explode_escape($string) - { - return preg_quote($string, "#"); - } - $escape_preg = "(".implode("|", array_map("escaped_explode_escape", $escape)).")"; - } - else - { - $escape_preg = preg_quote($escape, "#"); - } - $quoted_strings = preg_split("#(? "1 {$lang->day}", - "2-0-0" => "2 {$lang->days}", - "3-0-0" => "3 {$lang->days}", - "4-0-0" => "4 {$lang->days}", - "5-0-0" => "5 {$lang->days}", - "6-0-0" => "6 {$lang->days}", - "7-0-0" => "1 {$lang->week}", - "14-0-0" => "2 {$lang->weeks}", - "21-0-0" => "3 {$lang->weeks}", - "0-1-0" => "1 {$lang->month}", - "0-2-0" => "2 {$lang->months}", - "0-3-0" => "3 {$lang->months}", - "0-4-0" => "4 {$lang->months}", - "0-5-0" => "5 {$lang->months}", - "0-6-0" => "6 {$lang->months}", - "0-0-1" => "1 {$lang->year}", - "0-0-2" => "2 {$lang->years}" - ); - - $ban_times = $plugins->run_hooks("functions_fetch_ban_times", $ban_times); - - $ban_times['---'] = $lang->permanent; - return $ban_times; -} - -/** - * Format a ban length in to a UNIX timestamp. - * - * @param string $date The ban length string - * @param int $stamp The optional UNIX timestamp, if 0, current time is used. - * @return int The UNIX timestamp when the ban will be lifted - */ -function ban_date2timestamp($date, $stamp=0) -{ - if($stamp == 0) - { - $stamp = TIME_NOW; - } - $d = explode('-', $date); - $nowdate = date("H-j-n-Y", $stamp); - $n = explode('-', $nowdate); - $n[1] += $d[0]; - $n[2] += $d[1]; - $n[3] += $d[2]; - return mktime(date("G", $stamp), date("i", $stamp), 0, $n[2], $n[1], $n[3]); -} - -/** - * Expire old warnings in the database. - * - * @return bool - */ -function expire_warnings() -{ - global $warningshandler; - - if(!is_object($warningshandler)) - { - require_once MYBB_ROOT.'inc/datahandlers/warnings.php'; - $warningshandler = new WarningsHandler('update'); - } - - return $warningshandler->expire_warnings(); -} - -/** - * Custom chmod function to fix problems with hosts who's server configurations screw up umasks - * - * @param string $file The file to chmod - * @param string $mode The mode to chmod(i.e. 0666) - * @return bool - */ -function my_chmod($file, $mode) -{ - // Passing $mode as an octal number causes strlen and substr to return incorrect values. Instead pass as a string - if(substr($mode, 0, 1) != '0' || strlen($mode) !== 4) - { - return false; - } - $old_umask = umask(0); - - // We convert the octal string to a decimal number because passing a octal string doesn't work with chmod - // and type casting subsequently removes the prepended 0 which is needed for octal numbers - $result = chmod($file, octdec($mode)); - umask($old_umask); - return $result; -} - -/** - * Custom rmdir function to loop through an entire directory and delete all files/folders within - * - * @param string $path The path to the directory - * @param array $ignore Any files you wish to ignore (optional) - * @return bool - */ -function my_rmdir_recursive($path, $ignore=array()) -{ - global $orig_dir; - - if(!isset($orig_dir)) - { - $orig_dir = $path; - } - - if(@is_dir($path) && !@is_link($path)) - { - if($dh = @opendir($path)) - { - while(($file = @readdir($dh)) !== false) - { - if($file == '.' || $file == '..' || $file == '.svn' || in_array($path.'/'.$file, $ignore) || !my_rmdir_recursive($path.'/'.$file)) - { - continue; - } - } - @closedir($dh); - } - - // Are we done? Don't delete the main folder too and return true - if($path == $orig_dir) - { - return true; - } - - return @rmdir($path); - } - - return @unlink($path); -} - -/** - * Counts the number of subforums in a array([pid][disporder][fid]) starting from the pid - * - * @param array $array The array of forums - * @return integer The number of sub forums - */ -function subforums_count($array) -{ - $count = 0; - foreach($array as $array2) - { - $count += count($array2); - } - - return $count; -} - -/** - * DEPRECATED! Please use IPv6 compatible my_inet_pton! - * Fix for PHP's ip2long to guarantee a 32-bit signed integer value is produced (this is aimed - * at 64-bit versions of PHP) - * - * @deprecated - * @param string $ip The IP to convert - * @return integer IP in 32-bit signed format - */ -function my_ip2long($ip) -{ - $ip_long = ip2long($ip); - - if(!$ip_long) - { - $ip_long = sprintf("%u", ip2long($ip)); - - if(!$ip_long) - { - return 0; - } - } - - if($ip_long >= 2147483648) // Won't occur on 32-bit PHP - { - $ip_long -= 4294967296; - } - - return $ip_long; -} - -/** - * DEPRECATED! Please use IPv6 compatible my_inet_ntop! - * As above, fix for PHP's long2ip on 64-bit versions - * - * @deprecated - * @param integer $long The IP to convert (will accept 64-bit IPs as well) - * @return string IP in IPv4 format - */ -function my_long2ip($long) -{ - // On 64-bit machines is_int will return true. On 32-bit it will return false - if($long < 0 && is_int(2147483648)) - { - // We have a 64-bit system - $long += 4294967296; - } - return long2ip($long); -} - -/** - * Converts a human readable IP address to its packed in_addr representation - * - * @param string $ip The IP to convert - * @return string IP in 32bit or 128bit binary format - */ -function my_inet_pton($ip) -{ - if(function_exists('inet_pton')) - { - return @inet_pton($ip); - } - else - { - /** - * Replace inet_pton() - * - * @category PHP - * @package PHP_Compat - * @license LGPL - http://www.gnu.org/licenses/lgpl.html - * @copyright 2004-2007 Aidan Lister , Arpad Ray - * @link http://php.net/inet_pton - * @author Arpad Ray - * @version $Revision: 269597 $ - */ - $r = ip2long($ip); - if($r !== false && $r != -1) - { - return pack('N', $r); - } - - $delim_count = substr_count($ip, ':'); - if($delim_count < 1 || $delim_count > 7) - { - return false; - } - - $r = explode(':', $ip); - $rcount = count($r); - if(($doub = array_search('', $r, 1)) !== false) - { - $length = (!$doub || $doub == $rcount - 1 ? 2 : 1); - array_splice($r, $doub, $length, array_fill(0, 8 + $length - $rcount, 0)); - } - - $r = array_map('hexdec', $r); - array_unshift($r, 'n*'); - $r = call_user_func_array('pack', $r); - - return $r; - } -} - -/** - * Converts a packed internet address to a human readable representation - * - * @param string $ip IP in 32bit or 128bit binary format - * @return string IP in human readable format - */ -function my_inet_ntop($ip) -{ - if(function_exists('inet_ntop')) - { - return @inet_ntop($ip); - } - else - { - /** - * Replace inet_ntop() - * - * @category PHP - * @package PHP_Compat - * @license LGPL - http://www.gnu.org/licenses/lgpl.html - * @copyright 2004-2007 Aidan Lister , Arpad Ray - * @link http://php.net/inet_ntop - * @author Arpad Ray - * @version $Revision: 269597 $ - */ - switch(strlen($ip)) - { - case 4: - list(,$r) = unpack('N', $ip); - return long2ip($r); - case 16: - $r = substr(chunk_split(bin2hex($ip), 4, ':'), 0, -1); - $r = preg_replace( - array('/(?::?\b0+\b:?){2,}/', '/\b0+([^0])/e'), - array('::', '(int)"$1"?"$1":"0$1"'), - $r); - return $r; - } - return false; - } -} - -/** - * Fetch an binary formatted range for searching IPv4 and IPv6 IP addresses. - * - * @param string $ipaddress The IP address to convert to a range - * @return string|array|bool If a full IP address is provided, the in_addr representation, otherwise an array of the upper & lower extremities of the IP. False on failure - */ -function fetch_ip_range($ipaddress) -{ - // Wildcard - if(strpos($ipaddress, '*') !== false) - { - if(strpos($ipaddress, ':') !== false) - { - // IPv6 - $upper = str_replace('*', 'ffff', $ipaddress); - $lower = str_replace('*', '0', $ipaddress); - } - else - { - // IPv4 - $ip_bits = count(explode('.', $ipaddress)); - if($ip_bits < 4) - { - // Support for 127.0.* - $replacement = str_repeat('.*', 4-$ip_bits); - $ipaddress = substr_replace($ipaddress, $replacement, strrpos($ipaddress, '*')+1, 0); - } - $upper = str_replace('*', '255', $ipaddress); - $lower = str_replace('*', '0', $ipaddress); - } - $upper = my_inet_pton($upper); - $lower = my_inet_pton($lower); - if($upper === false || $lower === false) - { - return false; - } - return array($lower, $upper); - } - // CIDR notation - elseif(strpos($ipaddress, '/') !== false) - { - $ipaddress = explode('/', $ipaddress); - $ip_address = $ipaddress[0]; - $ip_range = (int)$ipaddress[1]; - - if(empty($ip_address) || empty($ip_range)) - { - // Invalid input - return false; - } - else - { - $ip_address = my_inet_pton($ip_address); - - if(!$ip_address) - { - // Invalid IP address - return false; - } - } - - /** - * Taken from: https://github.com/NewEraCracker/php_work/blob/master/ipRangeCalculate.php - * Author: NewEraCracker - * License: Public Domain - */ - - // Pack IP, Set some vars - $ip_pack = $ip_address; - $ip_pack_size = strlen($ip_pack); - $ip_bits_size = $ip_pack_size*8; - - // IP bits (lots of 0's and 1's) - $ip_bits = ''; - for($i = 0; $i < $ip_pack_size; $i = $i+1) - { - $bit = decbin(ord($ip_pack[$i])); - $bit = str_pad($bit, 8, '0', STR_PAD_LEFT); - $ip_bits .= $bit; - } - - // Significative bits (from the ip range) - $ip_bits = substr($ip_bits, 0, $ip_range); - - // Some calculations - $ip_lower_bits = str_pad($ip_bits, $ip_bits_size, '0', STR_PAD_RIGHT); - $ip_higher_bits = str_pad($ip_bits, $ip_bits_size, '1', STR_PAD_RIGHT); - - // Lower IP - $ip_lower_pack = ''; - for($i=0; $i < $ip_bits_size; $i=$i+8) - { - $chr = substr($ip_lower_bits, $i, 8); - $chr = chr(bindec($chr)); - $ip_lower_pack .= $chr; - } - - // Higher IP - $ip_higher_pack = ''; - for($i=0; $i < $ip_bits_size; $i=$i+8) - { - $chr = substr($ip_higher_bits, $i, 8); - $chr = chr( bindec($chr) ); - $ip_higher_pack .= $chr; - } - - return array($ip_lower_pack, $ip_higher_pack); - } - // Just on IP address - else - { - return my_inet_pton($ipaddress); - } -} - -/** - * Time how long it takes for a particular piece of code to run. Place calls above & below the block of code. - * - * @return float The time taken - */ -function get_execution_time() -{ - static $time_start; - - $time = microtime(true); - - - // Just starting timer, init and return - if(!$time_start) - { - $time_start = $time; - return; - } - // Timer has run, return execution time - else - { - $total = $time-$time_start; - if($total < 0) $total = 0; - $time_start = 0; - return $total; - } -} - -/** - * Processes a checksum list on MyBB files and returns a result set - * - * @param string $path The base path - * @param int $count The count of files - * @return array The bad files - */ -function verify_files($path=MYBB_ROOT, $count=0) -{ - global $mybb, $checksums, $bad_verify_files; - - // We don't need to check these types of files - $ignore = array(".", "..", ".svn", "config.php", "settings.php", "Thumb.db", "config.default.php", "lock", "htaccess.txt", "htaccess-nginx.txt", "logo.gif", "logo.png"); - $ignore_ext = array("attach"); - - if(substr($path, -1, 1) == "/") - { - $path = substr($path, 0, -1); - } - - if(!is_array($bad_verify_files)) - { - $bad_verify_files = array(); - } - - // Make sure that we're in a directory and it's not a symbolic link - if(@is_dir($path) && !@is_link($path)) - { - if($dh = @opendir($path)) - { - // Loop through all the files/directories in this directory - while(($file = @readdir($dh)) !== false) - { - if(in_array($file, $ignore) || in_array(get_extension($file), $ignore_ext)) - { - continue; - } - - // Recurse through the directory tree - if(is_dir($path."/".$file)) - { - verify_files($path."/".$file, ($count+1)); - continue; - } - - // We only need the last part of the path (from the MyBB directory to the file. i.e. inc/functions.php) - $file_path = ".".str_replace(substr(MYBB_ROOT, 0, -1), "", $path)."/".$file; - - // Does this file even exist in our official list? Perhaps it's a plugin - if(array_key_exists($file_path, $checksums)) - { - $filename = $path."/".$file; - $handle = fopen($filename, "rb"); - $contents = ''; - while(!feof($handle)) - { - $contents .= fread($handle, 8192); - } - fclose($handle); - - $md5 = md5($contents); - - // Does it match any of our hashes (unix/windows new lines taken into consideration with the hashes) - if(!in_array($md5, $checksums[$file_path])) - { - $bad_verify_files[] = array("status" => "changed", "path" => $file_path); - } - } - unset($checksums[$file_path]); - } - @closedir($dh); - } - } - - if($count == 0) - { - if(!empty($checksums)) - { - foreach($checksums as $file_path => $hashes) - { - if(in_array(basename($file_path), $ignore)) - { - continue; - } - $bad_verify_files[] = array("status" => "missing", "path" => $file_path); - } - } - } - - // uh oh - if($count == 0) - { - return $bad_verify_files; - } -} - -/** - * Returns a signed value equal to an integer - * - * @param int $int The integer - * @return string The signed equivalent - */ -function signed($int) -{ - if($int < 0) - { - return "$int"; - } - else - { - return "+$int"; - } -} - -/** - * Returns a securely generated seed - * - * @return string A secure binary seed - */ -function secure_binary_seed_rng($bytes) -{ - $output = null; - - if(version_compare(PHP_VERSION, '7.0', '>=')) - { - try - { - $output = random_bytes($bytes); - } catch (Exception $e) { - } - } - - if(strlen($output) < $bytes) - { - if(@is_readable('/dev/urandom') && ($handle = @fopen('/dev/urandom', 'rb'))) - { - $output = @fread($handle, $bytes); - @fclose($handle); - } - } - else - { - return $output; - } - - if(strlen($output) < $bytes) - { - if(function_exists('mcrypt_create_iv')) - { - if (DIRECTORY_SEPARATOR == '/') - { - $source = MCRYPT_DEV_URANDOM; - } - else - { - $source = MCRYPT_RAND; - } - - $output = @mcrypt_create_iv($bytes, $source); - } - } - else - { - return $output; - } - - if(strlen($output) < $bytes) - { - if(function_exists('openssl_random_pseudo_bytes')) - { - // PHP <5.3.4 had a bug which makes that function unusable on Windows - if ((DIRECTORY_SEPARATOR == '/') || version_compare(PHP_VERSION, '5.3.4', '>=')) - { - $output = openssl_random_pseudo_bytes($bytes, $crypto_strong); - if ($crypto_strong == false) - { - $output = null; - } - } - } - } - else - { - return $output; - } - - if(strlen($output) < $bytes) - { - if(class_exists('COM')) - { - try - { - $CAPI_Util = new COM('CAPICOM.Utilities.1'); - if(is_callable(array($CAPI_Util, 'GetRandom'))) - { - $output = $CAPI_Util->GetRandom($bytes, 0); - } - } catch (Exception $e) { - } - } - } - else - { - return $output; - } - - if(strlen($output) < $bytes) - { - // Close to what PHP basically uses internally to seed, but not quite. - $unique_state = microtime().@getmypid(); - - $rounds = ceil($bytes / 16); - - for($i = 0; $i < $rounds; $i++) - { - $unique_state = md5(microtime().$unique_state); - $output .= md5($unique_state); - } - - $output = substr($output, 0, ($bytes * 2)); - - $output = pack('H*', $output); - - return $output; - } - else - { - return $output; - } -} - -/** - * Returns a securely generated seed integer - * - * @return int An integer equivalent of a secure hexadecimal seed - */ -function secure_seed_rng() -{ - $bytes = PHP_INT_SIZE; - - do - { - - $output = secure_binary_seed_rng($bytes); - - // convert binary data to a decimal number - if ($bytes == 4) - { - $elements = unpack('i', $output); - $output = abs($elements[1]); - } - else - { - $elements = unpack('N2', $output); - $output = abs($elements[1] << 32 | $elements[2]); - } - - } while($output > PHP_INT_MAX); - - return $output; -} - -/** - * Generates a cryptographically secure random number. - * - * @param int $min Optional lowest value to be returned (default: 0) - * @param int $max Optional highest value to be returned (default: PHP_INT_MAX) - */ -function my_rand($min=0, $max=PHP_INT_MAX) -{ - // backward compatibility - if($min === null || $max === null || $max < $min) - { - $min = 0; - $max = PHP_INT_MAX; - } - - if(version_compare(PHP_VERSION, '7.0', '>=')) - { - try - { - $result = random_int($min, $max); - } catch (Exception $e) { - } - - if(isset($result)) - { - return $result; - } - } - - $seed = secure_seed_rng(); - - $distance = $max - $min; - return $min + floor($distance * ($seed / PHP_INT_MAX) ); -} - -/** - * More robust version of PHP's trim() function. It includes a list of UTF-8 blank characters - * from http://kb.mozillazine.org/Network.IDN.blacklist_chars - * - * @param string $string The string to trim from - * @param string $charlist Optional. The stripped characters can also be specified using the charlist parameter - * @return string The trimmed string - */ -function trim_blank_chrs($string, $charlist="") -{ - $hex_chrs = array( - 0x09 => 1, // \x{0009} - 0x0A => 1, // \x{000A} - 0x0B => 1, // \x{000B} - 0x0D => 1, // \x{000D} - 0x20 => 1, // \x{0020} - 0xC2 => array(0x81 => 1, 0x8D => 1, 0x90 => 1, 0x9D => 1, 0xA0 => 1, 0xAD => 1), // \x{0081}, \x{008D}, \x{0090}, \x{009D}, \x{00A0}, \x{00AD} - 0xCC => array(0xB7 => 1, 0xB8 => 1), // \x{0337}, \x{0338} - 0xE1 => array(0x85 => array(0x9F => 1, 0xA0 => 1), 0x9A => array(0x80 => 1), 0xA0 => array(0x8E => 1)), // \x{115F}, \x{1160}, \x{1680}, \x{180E} - 0xE2 => array(0x80 => array(0x80 => 1, 0x81 => 1, 0x82 => 1, 0x83 => 1, 0x84 => 1, 0x85 => 1, 0x86 => 1, 0x87 => 1, 0x88 => 1, 0x89 => 1, 0x8A => 1, 0x8B => 1, 0x8C => 1, 0x8D => 1, 0x8E => 1, 0x8F => 1, // \x{2000} - \x{200F} - 0xA8 => 1, 0xA9 => 1, 0xAA => 1, 0xAB => 1, 0xAC => 1, 0xAD => 1, 0xAE => 1, 0xAF => 1), // \x{2028} - \x{202F} - 0x81 => array(0x9F => 1)), // \x{205F} - 0xE3 => array(0x80 => array(0x80 => 1), // \x{3000} - 0x85 => array(0xA4 => 1)), // \x{3164} - 0xEF => array(0xBB => array(0xBF => 1), // \x{FEFF} - 0xBE => array(0xA0 => 1), // \x{FFA0} - 0xBF => array(0xB9 => 1, 0xBA => 1, 0xBB => 1)), // \x{FFF9} - \x{FFFB} - ); - - $hex_chrs_rev = array( - 0x09 => 1, // \x{0009} - 0x0A => 1, // \x{000A} - 0x0B => 1, // \x{000B} - 0x0D => 1, // \x{000D} - 0x20 => 1, // \x{0020} - 0x81 => array(0xC2 => 1, 0x80 => array(0xE2 => 1)), // \x{0081}, \x{2001} - 0x8D => array(0xC2 => 1, 0x80 => array(0xE2 => 1)), // \x{008D}, \x{200D} - 0x90 => array(0xC2 => 1), // \x{0090} - 0x9D => array(0xC2 => 1), // \x{009D} - 0xA0 => array(0xC2 => 1, 0x85 => array(0xE1 => 1), 0x81 => array(0xE2 => 1), 0xBE => array(0xEF => 1)), // \x{00A0}, \x{1160}, \x{2060}, \x{FFA0} - 0xAD => array(0xC2 => 1, 0x80 => array(0xE2 => 1)), // \x{00AD}, \x{202D} - 0xB8 => array(0xCC => 1), // \x{0338} - 0xB7 => array(0xCC => 1), // \x{0337} - 0x9F => array(0x85 => array(0xE1 => 1), 0x81 => array(0xE2 => 1)), // \x{115F}, \x{205F} - 0x80 => array(0x9A => array(0xE1 => 1), 0x80 => array(0xE2 => 1, 0xE3 => 1)), // \x{1680}, \x{2000}, \x{3000} - 0x8E => array(0xA0 => array(0xE1 => 1), 0x80 => array(0xE2 => 1)), // \x{180E}, \x{200E} - 0x82 => array(0x80 => array(0xE2 => 1)), // \x{2002} - 0x83 => array(0x80 => array(0xE2 => 1)), // \x{2003} - 0x84 => array(0x80 => array(0xE2 => 1)), // \x{2004} - 0x85 => array(0x80 => array(0xE2 => 1)), // \x{2005} - 0x86 => array(0x80 => array(0xE2 => 1)), // \x{2006} - 0x87 => array(0x80 => array(0xE2 => 1)), // \x{2007} - 0x88 => array(0x80 => array(0xE2 => 1)), // \x{2008} - 0x89 => array(0x80 => array(0xE2 => 1)), // \x{2009} - 0x8A => array(0x80 => array(0xE2 => 1)), // \x{200A} - 0x8B => array(0x80 => array(0xE2 => 1)), // \x{200B} - 0x8C => array(0x80 => array(0xE2 => 1)), // \x{200C} - 0x8F => array(0x80 => array(0xE2 => 1)), // \x{200F} - 0xA8 => array(0x80 => array(0xE2 => 1)), // \x{2028} - 0xA9 => array(0x80 => array(0xE2 => 1)), // \x{2029} - 0xAA => array(0x80 => array(0xE2 => 1)), // \x{202A} - 0xAB => array(0x80 => array(0xE2 => 1)), // \x{202B} - 0xAC => array(0x80 => array(0xE2 => 1)), // \x{202C} - 0xAE => array(0x80 => array(0xE2 => 1)), // \x{202E} - 0xAF => array(0x80 => array(0xE2 => 1)), // \x{202F} - 0xA4 => array(0x85 => array(0xE3 => 1)), // \x{3164} - 0xBF => array(0xBB => array(0xEF => 1)), // \x{FEFF} - 0xB9 => array(0xBF => array(0xEF => 1)), // \x{FFF9} - 0xBA => array(0xBF => array(0xEF => 1)), // \x{FFFA} - 0xBB => array(0xBF => array(0xEF => 1)), // \x{FFFB} - ); - - // Start from the beginning and work our way in - do - { - // Check to see if we have matched a first character in our utf-8 array - $offset = match_sequence($string, $hex_chrs); - if(!$offset) - { - // If not, then we must have a "good" character and we don't need to do anymore processing - break; - } - $string = substr($string, $offset); - } - while(++$i); - - // Start from the end and work our way in - $string = strrev($string); - do - { - // Check to see if we have matched a first character in our utf-8 array - $offset = match_sequence($string, $hex_chrs_rev); - if(!$offset) - { - // If not, then we must have a "good" character and we don't need to do anymore processing - break; - } - $string = substr($string, $offset); - } - while(++$i); - $string = strrev($string); - - if($charlist) - { - $string = trim($string, $charlist); - } - else - { - $string = trim($string); - } - - return $string; -} - -/** - * Match a sequence - * - * @param string $string The string to match from - * @param array $array The array to match from - * @param int $i Number in the string - * @param int $n Number of matches - * @return int The number matched - */ -function match_sequence($string, $array, $i=0, $n=0) -{ - if($string === "") - { - return 0; - } - - $ord = ord($string[$i]); - if(array_key_exists($ord, $array)) - { - $level = $array[$ord]; - ++$n; - if(is_array($level)) - { - ++$i; - return match_sequence($string, $level, $i, $n); - } - return $n; - } - - return 0; -} - -/** - * Obtain the version of GD installed. - * - * @return float Version of GD - */ -function gd_version() -{ - static $gd_version; - - if($gd_version) - { - return $gd_version; - } - if(!extension_loaded('gd')) - { - return; - } - - if(function_exists("gd_info")) - { - $gd_info = gd_info(); - preg_match('/\d/', $gd_info['GD Version'], $gd); - $gd_version = $gd[0]; - } - else - { - ob_start(); - phpinfo(8); - $info = ob_get_contents(); - ob_end_clean(); - $info = stristr($info, 'gd version'); - preg_match('/\d/', $info, $gd); - $gd_version = $gd[0]; - } - - return $gd_version; -} - -/* - * Validates an UTF-8 string. - * - * @param string $input The string to be checked - * @param boolean $allow_mb4 Allow 4 byte UTF-8 characters? - * @param boolean $return Return the cleaned string? - * @return string|boolean Cleaned string or boolean - */ -function validate_utf8_string($input, $allow_mb4=true, $return=true) -{ - // Valid UTF-8 sequence? - if(!preg_match('##u', $input)) - { - $string = ''; - $len = strlen($input); - for($i = 0; $i < $len; $i++) - { - $c = ord($input[$i]); - if($c > 128) - { - if($c > 247 || $c <= 191) - { - if($return) - { - $string .= '?'; - continue; - } - else - { - return false; - } - } - elseif($c > 239) - { - $bytes = 4; - } - elseif($c > 223) - { - $bytes = 3; - } - elseif($c > 191) - { - $bytes = 2; - } - if(($i + $bytes) > $len) - { - if($return) - { - $string .= '?'; - break; - } - else - { - return false; - } - } - $valid = true; - $multibytes = $input[$i]; - while($bytes > 1) - { - $i++; - $b = ord($input[$i]); - if($b < 128 || $b > 191) - { - if($return) - { - $valid = false; - $string .= '?'; - break; - } - else - { - return false; - } - } - else - { - $multibytes .= $input[$i]; - } - $bytes--; - } - if($valid) - { - $string .= $multibytes; - } - } - else - { - $string .= $input[$i]; - } - } - $input = $string; - } - if($return) - { - if($allow_mb4) - { - return $input; - } - else - { - return preg_replace("#[^\\x00-\\x7F][\\x80-\\xBF]{3,}#", '?', $input); - } - } - else - { - if($allow_mb4) - { - return true; - } - else - { - return !preg_match("#[^\\x00-\\x7F][\\x80-\\xBF]{3,}#", $input); - } - } -} - -/** - * Send a Private Message to a user. - * - * @param array $pm Array containing: 'subject', 'message', 'touid' and 'receivepms' (the latter should reflect the value found in the users table: receivepms and receivefrombuddy) - * @param int $fromid Sender UID (0 if you want to use $mybb->user['uid'] or -1 to use MyBB Engine) - * @param bool $admin_override Whether or not do override user defined options for receiving PMs - * @return bool True if PM sent - */ -function send_pm($pm, $fromid = 0, $admin_override=false) -{ - global $lang, $mybb, $db, $session; - - if($mybb->settings['enablepms'] == 0) - { - return false; - } - - if(!is_array($pm)) - { - return false; - } - - if(isset($pm['language'])) - { - if($pm['language'] != $mybb->user['language'] && $lang->language_exists($pm['language'])) - { - // Load user language - $lang->set_language($pm['language']); - $lang->load($pm['language_file']); - - $revert = true; - } - - foreach(array('subject', 'message') as $key) - { - if(is_array($pm[$key])) - { - $lang_string = $lang->{$pm[$key][0]}; - $num_args = count($pm[$key]); - - for($i = 1; $i < $num_args; $i++) - { - $lang_string = str_replace('{'.$i.'}', $pm[$key][$i], $lang_string); - } - } - else - { - $lang_string = $lang->{$pm[$key]}; - } - - $pm[$key] = $lang_string; - } - - if(isset($revert)) - { - // Revert language - $lang->set_language($mybb->user['language']); - $lang->load($pm['language_file']); - } - } - - if(!$pm['subject'] ||!$pm['message'] || !$pm['touid'] || (!$pm['receivepms'] && !$admin_override)) - { - return false; - } - - require_once MYBB_ROOT."inc/datahandlers/pm.php"; - - $pmhandler = new PMDataHandler(); - - $subject = $pm['subject']; - $message = $pm['message']; - $toid = $pm['touid']; - - // Our recipients - if(is_array($toid)) - { - $recipients_to = $toid; - } - else - { - $recipients_to = array($toid); - } - - $recipients_bcc = array(); - - // Determine user ID - if((int)$fromid == 0) - { - $fromid = (int)$mybb->user['uid']; - } - elseif((int)$fromid < 0) - { - $fromid = 0; - } - - // Build our final PM array - $pm = array( - "subject" => $subject, - "message" => $message, - "icon" => -1, - "fromid" => $fromid, - "toid" => $recipients_to, - "bccid" => $recipients_bcc, - "do" => '', - "pmid" => '' - ); - - if(isset($session)) - { - $pm['ipaddress'] = $session->packedip; - } - - $pm['options'] = array( - "signature" => 0, - "disablesmilies" => 0, - "savecopy" => 0, - "readreceipt" => 0 - ); - - $pm['saveasdraft'] = 0; - - // Admin override - $pmhandler->admin_override = (int)$admin_override; - - $pmhandler->set_data($pm); - - if($pmhandler->validate_pm()) - { - $pmhandler->insert_pm(); - return true; - } - - return false; -} - -/** - * Log a user spam block from StopForumSpam (or other spam service providers...) - * - * @param string $username The username that the user was using. - * @param string $email The email address the user was using. - * @param string $ip_address The IP addres of the user. - * @param array $data An array of extra data to go with the block (eg: confidence rating). - * @return bool Whether the action was logged successfully. - */ -function log_spam_block($username = '', $email = '', $ip_address = '', $data = array()) -{ - global $db, $session; - - if(!is_array($data)) - { - $data = array($data); - } - - if(!$ip_address) - { - $ip_address = get_ip(); - } - - $ip_address = my_inet_pton($ip_address); - - $insert_array = array( - 'username' => $db->escape_string($username), - 'email' => $db->escape_string($email), - 'ipaddress' => $db->escape_binary($ip_address), - 'dateline' => (int)TIME_NOW, - 'data' => $db->escape_string(@my_serialize($data)), - ); - - return (bool)$db->insert_query('spamlog', $insert_array); -} - -/** - * Copy a file to the CDN. - * - * @param string $file_path The path to the file to upload to the CDN. - * - * @param string $uploaded_path The path the file was uploaded to, reference parameter for when this may be needed. - * - * @return bool Whether the file was copied successfully. - */ -function copy_file_to_cdn($file_path = '', &$uploaded_path = null) -{ - global $mybb, $plugins; - - $success = false; - - $file_path = (string)$file_path; - - $real_file_path = realpath($file_path); - - $file_dir_path = dirname($real_file_path); - $file_dir_path = str_replace(MYBB_ROOT, '', $file_dir_path); - $file_dir_path = ltrim($file_dir_path, './\\'); - - $file_name = basename($real_file_path); - - if(file_exists($file_path)) - { - if($mybb->settings['usecdn'] && !empty($mybb->settings['cdnpath'])) - { - $cdn_path = rtrim($mybb->settings['cdnpath'], '/\\'); - - if(substr($file_dir_path, 0, my_strlen(MYBB_ROOT)) == MYBB_ROOT) - { - $file_dir_path = str_replace(MYBB_ROOT, '', $file_dir_path); - } - - $cdn_upload_path = $cdn_path . DIRECTORY_SEPARATOR . $file_dir_path; - - if(!($dir_exists = is_dir($cdn_upload_path))) - { - $dir_exists = @mkdir($cdn_upload_path, 0777, true); - } - - if($dir_exists) - { - if(($cdn_upload_path = realpath($cdn_upload_path)) !== false) - { - $success = @copy($file_path, $cdn_upload_path.DIRECTORY_SEPARATOR.$file_name); - - if($success) - { - $uploaded_path = $cdn_upload_path; - } - } - } - } - - if(is_object($plugins)) - { - $hook_args = array( - 'file_path' => &$file_path, - 'real_file_path' => &$real_file_path, - 'file_name' => &$file_name, - 'uploaded_path' => &$uploaded_path, - 'success' => &$success, - ); - - $plugins->run_hooks('copy_file_to_cdn_end', $hook_args); - } - } - - return $success; -} - -/** - * Validate an url - * - * @param string $url The url to validate. - * @param bool $relative_path Whether or not the url could be a relative path. - * @param bool $allow_local Whether or not the url could be pointing to local networks. - * - * @return bool Whether this is a valid url. - */ -function my_validate_url($url, $relative_path=false, $allow_local=false) -{ - if($allow_local) - { - $regex = '_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:localhost|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,}))\.?))(?::\d{2,5})?(?:[/?#]\S*)?$_iuS'; - } - else - { - $regex = '_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$_iuS'; - } - - if($relative_path && my_substr($url, 0, 1) == '/' || preg_match($regex, $url)) - { - return true; - } - return false; -} - -/** - * Strip html tags from string, also removes @siu', - ); - $string = preg_replace($pattern, '', $string); - return strip_tags($string, $allowable_tags); -} - -/** - * Escapes a RFC 4180-compliant CSV string. - * Based on https://github.com/Automattic/camptix/blob/f80725094440bf09861383b8f11e96c177c45789/camptix.php#L2867 - * - * @param string $string The string to be escaped - * @param boolean $escape_active_content Whether or not to escape active content trigger characters - * @return string The escaped string - */ -function my_escape_csv($string, $escape_active_content=true) -{ - if($escape_active_content) - { - $active_content_triggers = array('=', '+', '-', '@'); - $delimiters = array(',', ';', ':', '|', '^', "\n", "\t", " "); - - $first_character = mb_substr($string, 0, 1); - - if( - in_array($first_character, $active_content_triggers, true) || - in_array($first_character, $delimiters, true) - ) - { - $string = "'".$string; - } - - foreach($delimiters as $delimiter) - { - foreach($active_content_triggers as $trigger) - { - $string = str_replace($delimiter.$trigger, $delimiter."'".$trigger, $string); - } - } - } - - $string = str_replace('"', '""', $string); - - return $string; -} diff --git a/html/forums/inc/functions_archive.php b/html/forums/inc/functions_archive.php deleted file mode 100644 index e3f9af0..0000000 --- a/html/forums/inc/functions_archive.php +++ /dev/null @@ -1,269 +0,0 @@ -settings['bbname']; - } - else - { - $title = $mybb->settings['bbname']." - ".$title; - } - - // If the language doesn't have a charset, make it UTF-8. - if($lang->settings['charset']) - { - $charset = $lang->settings['charset']; - } - else - { - $charset = "utf-8"; - } - - $dir = ''; - if($lang->settings['rtl'] == 1) - { - $dir = " dir=\"rtl\""; - } - - if($lang->settings['htmllang']) - { - $htmllang = " xml:lang=\"".$lang->settings['htmllang']."\" lang=\"".$lang->settings['htmllang']."\""; - } - else - { - $htmllang = " xml:lang=\"en\" lang=\"en\""; - } -?> - -> - -<?php echo $title; ?> - - - - - - -
    -

    settings['bbname_orig']; ?>

    - -
    archive_fullversion; ?>
    -
    sprintf($lang->archive_note, $fullurl); ?>
    -
    - $navbit) - { - if(!empty($navbits[$key+1])) - { - if(!empty($navbits[$key+2])) - { - $sep = $navsep; - } - else - { - $sep = ""; - } - $nav .= "".$navbit['name']."$sep"; - } - } - } - $navsize = count($navbits); - $navbit = $navbits[$navsize-1]; - if(!empty($nav)) - { - $activesep = $navsep; - } - $nav .= $activesep.$navbit['name']; - - return $nav; -} - -/** - * Output multipage navigation. - * - * @param int $count The total number of items. - * @param int $perpage The items per page. - * @param int $page The current page. - * @param string $url The URL base. -*/ -function archive_multipage($count, $perpage, $page, $url) -{ - global $lang; - if($count > $perpage) - { - $pages = $count / $perpage; - $pages = ceil($pages); - - $mppage = null; - for($i = 1; $i <= $pages; ++$i) - { - if($i == $page) - { - $mppage .= "$i "; - } - else - { - $mppage .= "$i "; - } - } - $multipage = "
    ".$lang->archive_pages." $mppage
    "; - echo $multipage; - } -} - -/** - * Output the archive footer. - * - */ -function archive_footer() -{ - global $mybb, $lang, $db, $nav, $maintimer, $fulltitle, $fullurl, $sent_header; - $totaltime = $maintimer->stop(); - if($mybb->settings['showvernum'] == 1) - { - $mybbversion = ' '.$mybb->version; - } - else - { - $mybbversion = ""; - } -?> -
    - -
    - - - -settings['bbname'], $mybb->settings['bburl']."/index.php"); - } -?> -
    -
    error; ?>
    -
    -
    - '1', - "location1" => 0, - "location2" => 0 - ); - - $db->update_query("sessions", $noperm_array, "sid='{$session->sid}'"); - - archive_error($lang->archive_nopermission); -} - -/** - * Check the password given on a certain forum for validity - * - * @param int $fid The forum ID - * @param int $pid The Parent ID - * @return bool Returns false on failure - */ -function check_forum_password_archive($fid, $pid=0) -{ - global $forum_cache, $mybb; - - if(!is_array($forum_cache)) - { - $forum_cache = cache_forums(); - if(!$forum_cache) - { - return false; - } - } - - // Loop through each of parent forums to ensure we have a password for them too - $parents = explode(',', $forum_cache[$fid]['parentlist']); - rsort($parents); - if(!empty($parents)) - { - foreach($parents as $parent_id) - { - if($parent_id == $fid || $parent_id == $pid) - { - continue; - } - - if($forum_cache[$parent_id]['password'] != "") - { - check_forum_password_archive($parent_id, $fid); - } - } - } - - $password = $forum_cache[$fid]['password']; - if($password) - { - if(!$mybb->cookies['forumpass'][$fid] || ($mybb->cookies['forumpass'][$fid] && md5($mybb->user['uid'].$password) !== $mybb->cookies['forumpass'][$fid])) - { - archive_error_no_permission(); - } - } -} diff --git a/html/forums/inc/functions_calendar.php b/html/forums/inc/functions_calendar.php deleted file mode 100644 index 6f2b8bf..0000000 --- a/html/forums/inc/functions_calendar.php +++ /dev/null @@ -1,1100 +0,0 @@ - my_date("Y")+5) - { - $year = my_date("Y"); - } - - // Then the month - if($month < 1 || $month > 12) - { - $month = my_date("n"); - } - - $weekdays = fetch_weekday_structure($calendar['startofweek']); - - $calendar_permissions = get_calendar_permissions($calendar['cid']); - - $month_link = get_calendar_link($calendar['cid'], $year, $month); - - $next_month = get_next_month($month, $year); - $prev_month = get_prev_month($month, $year); - - $month_start_weekday = gmdate("w", gmmktime(0, 0, 0, $month, $calendar['startofweek']+1, $year)); - - $prev_month_days = gmdate("t", gmmktime(0, 0, 0, $prev_month['month'], 1, $prev_month['year'])); - if($month_start_weekday != $weekdays[0] || $calendar['startofweek'] != 0) - { - $prev_days = $day = gmdate("t", gmmktime(0, 0, 0, $prev_month['month'], 1, $prev_month['year'])); - $day -= array_search(($month_start_weekday), $weekdays); - $day += $calendar['startofweek']+1; - if($day > $prev_month_days+1) - { - // Go one week back - $day -= 7; - } - $calendar_month = $prev_month['month']; - $calendar_year = $prev_month['year']; - } - else - { - $day = $calendar['startofweek']+1; - $calendar_month = $month; - $calendar_year = $year; - } - - // So now we fetch events for this month - $start_timestamp = gmmktime(0, 0, 0, $calendar_month, $day, $year); - $num_days = gmdate("t", gmmktime(0, 0, 0, $month, 1, $year)); - $end_timestamp = gmmktime(23, 59, 59, $month, $num_days, $year); - - if(!$events_cache) - { - $events_cache = get_events($calendar, $start_timestamp, $end_timestamp, $calendar_permissions['canmoderateevents']); - } - - $today = my_date("dnY"); - - // Build weekday headers - $weekday_headers = ''; - foreach($weekdays as $weekday) - { - $weekday_name = fetch_weekday_name($weekday, true); - eval("\$weekday_headers .= \"".$templates->get("calendar_mini_weekdayheader")."\";"); - } - - $in_month = 0; - $day_bits = $calendar_rows = ''; - for($row = 0; $row < 6; ++$row) // Iterate weeks (each week gets a row) - { - foreach($weekdays as $weekday_id => $weekday) - { - // Current month always starts on 1st row - if($row == 0 && $day == $calendar['startofweek']+1) - { - $in_month = 1; - $calendar_month = $month; - $calendar_year = $year; - } - else if($calendar_month == $prev_month['month'] && $day > $prev_month_days) - { - $day = 1; - $in_month = 1; - $calendar_month = $month; - $calendar_year = $year; - } - else if($day > $num_days && $calendar_month != $prev_month['month']) - { - $in_month = 0; - $calendar_month = $next_month['month']; - $calendar_year = $next_month['year']; - $day = 1; - if($calendar_month == $month) - { - $in_month = 1; - } - } - - if($weekday_id == 0) - { - $week_stamp = gmmktime(0, 0, 0, $calendar_month, $day, $calendar_year); - $week_link = get_calendar_week_link($calendar['cid'], $week_stamp); - } - - if($weekday_id == 0 && $calendar_month == $next_month['month']) - { - break; - } - - $link_to_day = false; - // Any events on this specific day? - if(@count($events_cache["$day-$calendar_month-$calendar_year"]) > 0) - { - $link_to_day = true; - } - - // Is the current day - if($day.$calendar_month.$year == $today && $month == $calendar_month) - { - $day_class = "trow_sep"; - } - // Not in this month - else if($in_month == 0) - { - $day_class = "trow1"; - } - // Just a normal day in this month - else - { - $day_class = "trow2"; - } - if($link_to_day) - { - $calendar['link'] = get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day); - eval("\$day_link = \"".$templates->get("calendar_mini_weekrow_day_link")."\";"); - } - else - { - $day_link = $day; - } - eval("\$day_bits .= \"".$templates->get("calendar_mini_weekrow_day")."\";"); - ++$day; - } - if($day_bits) - { - eval("\$calendar_rows .= \"".$templates->get("calendar_mini_weekrow")."\";"); - } - $day_bits = ""; - } - eval("\$mini_calendar = \"".$templates->get("calendar_mini")."\";"); - return $mini_calendar; -} - -/** - * Cache available calendars in to memory or return the cached calendars - * - * @return array Cached calendars - */ -function cache_calendars() -{ - global $db; - static $calendar_cache; - - if(is_array($calendar_cache)) - { - return $calendar_cache; - } - - $query = $db->simple_select("calendars", "*", "", array("order_by" => "disporder", "order_dir" => "asc")); - while($calendar = $db->fetch_array($query)) - { - $calendar_cache[$calendar['cid']] = $calendar; - } - return $calendar_cache; -} - -/** - * Fetch the calendar permissions for the current user for one or more calendars - * - * @param int $cid Optional calendar ID. If none specified, permissions for all calendars are returned - * @return array Array of permissions - */ -function get_calendar_permissions($cid=0) -{ - global $db, $mybb; - static $calendar_permissions; - - $calendars = cache_calendars(); - - $group_permissions = array( - "canviewcalendar" => $mybb->usergroup['canviewcalendar'], - "canaddevents" => $mybb->usergroup['canaddevents'], - "canbypasseventmod" => $mybb->usergroup['canbypasseventmod'], - "canmoderateevents" => $mybb->usergroup['canmoderateevents'] - ); - - if(!is_array($calendars)) - { - return $group_permissions; - } - - $gid = $mybb->user['usergroup']; - - if(isset($mybb->user['additionalgroups'])) - { - $gid .= ",".$mybb->user['additionalgroups']; - } - - if(!is_array($calendar_permissions)) - { - $calendar_permissions = array(); - $query = $db->simple_select("calendarpermissions", "*"); - while($permission = $db->fetch_array($query)) - { - $calendar_permissions[$permission['cid']][$permission['gid']] = $permission; - } - - // Add in our usergroup permissions (if custom ones are set, these aren't added) - if(is_array($calendar_permissions)) - { - foreach($calendar_permissions as $calendar => $permission) - { - if(is_array($calendar_permissions[$calendar][$mybb->user['usergroup']])) - { - // Already has permissions set - continue; - } - - // Use the group permissions! - $calendar_permissions[$calendar][$mybb->user['usergroup']] = $group_permissions; - $calendar_permissions[$calendar][$mybb->user['usergroup']]['cid'] = $calendar; - $calendar_permissions[$calendar][$mybb->user['usergroup']]['gid'] = $mybb->user['usergroup']; - } - } - } - - if($cid > 0) - { - if(isset($calendar_permissions[$cid])) - { - $permissions = fetch_calendar_permissions($cid, $gid, $calendar_permissions[$cid]); - } - if(empty($permissions)) - { - $permissions = $group_permissions; - } - } - else - { - foreach($calendars as $calendar) - { - if(isset($calendar_permissions[$calendar['cid']])) - { - $permissions[$calendar['cid']] = fetch_calendar_permissions($calendar['cid'], $gid, $calendar_permissions[$calendar['cid']]); - } - if(empty($permissions[$calendar['cid']])) - { - $permissions[$calendar['cid']] = $group_permissions; - } - } - } - return $permissions; -} - -/** - * Fetch the calendar permissions - * - * @param int $cid Calendar ID - * @param string $gid User group ID, comma seperated - * @param array Array of permissions for this calendar and group - * @return array|void Array of current permissions or nothing if an error occured - */ -function fetch_calendar_permissions($cid, $gid, $calendar_permissions) -{ - $groups = explode(",", $gid); - - if(!is_array($calendar_permissions)) - { - return; - } - - $current_permissions = array(); - - foreach($groups as $gid) - { - // If this calendar has permissions set for this group - if($calendar_permissions[$gid]) - { - $level_permissions = $calendar_permissions[$gid]; - foreach($level_permissions as $permission => $access) - { - if($access >= $current_permissions[$permission] || ($access == "yes" && $current_permissions[$permission] == "no") || !$current_permissions[$permission]) - { - $current_permissions[$permission] = $access; - } - } - } - } - - if(count($current_permissions) == 0) - { - return; - } - return $current_permissions; -} - -/** - * Build a calendar select list to jump between calendars - * - * @param int $selected The selected calendar ID - * @return string The calendar select - */ -function build_calendar_jump($selected=0) -{ - global $db, $mybb, $templates, $lang, $gobutton; - - $calendar_permissions = get_calendar_permissions(); - - $calendars = cache_calendars(); - - if(!is_array($calendars)) - { - return; - } - - $jump_options = ''; - - foreach($calendars as $calendar) - { - if($calendar_permissions[$calendar['cid']]['canviewcalendar'] == 0) - { - continue; - } - $calendar['name'] = htmlspecialchars_uni($calendar['name']); - $sel = ""; - if($selected == $calendar['cid'] || ($selected == 0 && $calendar['disporder'] == 1)) - { - $sel = "selected=\"selected\""; - } - - eval("\$jump_options .= \"".$templates->get("calendar_jump_option")."\";"); - } - - eval("\$calendar_jump = \"".$templates->get("calendar_jump")."\";"); - return $calendar_jump; -} - -/** - * Fetch the next calendar month from a specified month/year - * - * @param int $month The month - * @param int $year The year - * @return array Array of the next month and next year - */ -function get_next_month($month, $year) -{ - global $monthnames; - - if($month == 12) - { - $nextmonth = 1; - $nextyear = $year+1; - } - else - { - $nextmonth = $month+1; - $nextyear = $year; - } - - return array("month" => $nextmonth, "year" => $nextyear, "name" => $monthnames[$nextmonth]); -} - -/** - * Fetch the previous calendar month from a specified month/year - * - * @param int $month The month - * @param int $year The year - * @return array Array of the previous month and previous year - */ -function get_prev_month($month, $year) -{ - global $monthnames; - - if($month == 1) - { - $prevmonth = 12; - $prevyear = $year-1; - } - else - { - $prevmonth = $month-1; - $prevyear = $year; - } - - return array("month" => $prevmonth, "year" => $prevyear, "name" => $monthnames[$prevmonth]); -} - -/** - * Fetch the events for a specific calendar and date range - * - * @param int $calendar The calendar ID - * @param int $start Start time stamp - * @param int $end End time stmap - * @param int $unapproved 1 to fetch unapproved events too - * @param int $private The user ID to fetch private events for (0 fetches none) - * @return array Array of events - */ -function get_events($calendar, $start, $end, $unapproved=0, $private=1) -{ - global $db, $mybb; - - // We take in to account timezones here - we either add 14 hours or subtract 12 hours from our GMT time ranges - $start -= 12*3600; - $end += 14*3600; - - $visible_where = ''; - if($unapproved != 1) - { - $visible_where = " AND e.visible='1'"; - } - - $events_cache = array(); - $query = $db->query(" - SELECT u.*, e.* - FROM ".TABLE_PREFIX."events e - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=e.uid) - WHERE e.cid='{$calendar['cid']}' {$visible_where} AND ((e.endtime>={$start} AND e.starttime<={$end}) OR (e.endtime=0 AND e.starttime>={$start} AND e.starttime<={$end})) AND ((e.uid='{$mybb->user['uid']}' AND private='1') OR private!='1') - ORDER BY endtime DESC - "); - while($event = $db->fetch_array($query)) - { - if($event['ignoretimezone'] == 0) - { - $offset = (float)$event['timezone']; - } - else - { - $offset = (float)$mybb->user['timezone']; - } - $event['starttime_user'] = $event['starttime']+($offset*3600); - - // Single day event - if($event['endtime'] == 0) - { - $event_date = gmdate("j-n-Y", $event['starttime_user']); - $events_cache[$event_date][] = $event; - } - // Ranged event - else - { - $event_date = explode("-", gmdate("j-n-Y", $event['starttime_user'])); - $event['endtime_user'] = $event['endtime']+($offset*3600); - $event['weekday_start'] = $calendar['startofweek']; - - $start_day = gmmktime(0, 0, 0, $event_date[1], $event_date[0], $event_date[2]); - - $event['repeats'] = my_unserialize($event['repeats']); - - // Event does not repeat - just goes over a few days - if($event['repeats']['repeats'] == 0) - { - if($start_day < $start) - { - $range_start = gmmktime(0, 0, 0, gmdate("n", $start), gmdate("j", $start), gmdate("Y", $start)); - } - else - { - $range_start = $start_day; - } - } - else - { - $range_start = fetch_next_occurance($event, array("start" => $start, "end" => $end), $start_day, true); - } - $first = ""; - $event_date = explode("-", gmdate("j-n-Y", $range_start)); - - // Get rid of hour/minutes because sometimes they cause the events to stretch into the next day - $range_end = gmmktime(23, 59, 59, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user'])); - while($range_start < $range_end) - { - // Outside the dates we care about, break! (No unnecessary looping here!) - if($range_start > $end || !$range_start) - { - break; - } - if($range_start >= $start) - { - $day_date = gmdate("j-n-Y", $range_start); - if($first && $day_date != "{$first}") - { - $events_cache[$day_date][] = &$events_cache["{$first}"][$count]; - } - else if(!$first) - { - if(!isset($events_cache[$day_date])) - { - $events_cache[$day_date] = array(); - } - $count = count($events_cache[$day_date]); - $first = $day_date; - $events_cache[$day_date][] = $event; - } - } - if($event['repeats']['repeats'] == 0) - { - $range_start += 86400; - } - else - { - $range_start = fetch_next_occurance($event, array("start" => $start, "end" => $end), $range_start); - } - } - } - } - return $events_cache; -} - -/** - * Fetch the birthdays for one or more months or a specific day - * - * @param int|array $months Integer of the month or array of months - * @param int $day Day of the specific month (if only one month specified above) - * @return array Array of birthdays - */ -function get_birthdays($months, $day=0) -{ - global $db; - - $year = my_date("Y"); - - if(!is_array($months)) - { - $months = array($months); - } - - foreach($months as $month) - { - if($day) - { - $day_where = "{$day}-{$month}"; - } - else - { - $day_where = "%-{$month}"; - } - if($month == 3 && ($day == 1 || !$day) && my_date("L", gmmktime(0, 0, 0, $month, 1, $year)) != 1) - { - $where[] = "birthday LIKE '29-2%' OR birthday='29-2'"; - $feb_fix = 1; - } - $where[] = "birthday LIKE '{$day_where}-%' OR birthday LIKE '{$day_where}'"; - } - - $where = implode(" OR ", $where); - - $bdays = array(); - - $query = $db->simple_select("users", "uid, username, birthday, birthdayprivacy, usergroup, displaygroup", $where); - while($user = $db->fetch_array($query)) - { - $bday = explode("-", $user['birthday']); - if($bday[2] && $bday[2] < $year) - { - $user['age'] = $year - $bday[2]; - } - if($feb_fix == 1 && $bday[0] == 29 && $bday[1] == 2) - { - $bdays["1-3"][] = $user; - } - else - { - $bdays["$bday[0]-$bday[1]"][] = $user; - } - } - if($day) - { - if(!isset($bdays["$day-$month"])) - { - return array(); - } - return $bdays["$day-$month"]; - } - return $bdays; -} - -/** - * Fetch an ordered list of weekdays depended on a specified starting day - * - * @param int $week_start The weekday we want to start the week with - * @return array Ordered list of weekdays dependant on start of week - */ -function fetch_weekday_structure($week_start) -{ - switch($week_start) - { - case "1": - $weekdays = array(1,2,3,4,5,6,0); - break; - case "2": - $weekdays = array(2,3,4,5,6,0,1); - break; - case "3": - $weekdays = array(3,4,5,6,0,1,2); - break; - case "4": - $weekdays = array(4,5,6,0,1,2,3); - break; - case "5": - $weekdays = array(5,6,0,1,2,3,4); - break; - case "6": - $weekdays = array(6,0,1,2,3,4,5); - break; - default: - $weekdays = array(0,1,2,3,4,5,6); - break; - } - return $weekdays; -} - -/** - * Fetch a weekday name based on a number - * - * @param int $weekday The weekday number - * @param boolean $short True to fetch the short name ('S'), false to fetch full name - * @return string The weekday name - */ -function fetch_weekday_name($weekday, $short=false) -{ - global $lang; - switch($weekday) - { - case 1: - $weekday_name = $lang->monday; - $short_weekday_name = $lang->short_monday; - break; - case 2: - $weekday_name = $lang->tuesday; - $short_weekday_name = $lang->short_tuesday; - break; - case 3: - $weekday_name = $lang->wednesday; - $short_weekday_name = $lang->short_wednesday; - break; - case 4: - $weekday_name = $lang->thursday; - $short_weekday_name = $lang->short_thursday; - break; - case 5: - $weekday_name = $lang->friday; - $short_weekday_name = $lang->short_friday; - break; - case 6: - $weekday_name = $lang->saturday; - $short_weekday_name = $lang->short_saturday; - break; - case 0: - $weekday_name = $lang->sunday; - $short_weekday_name = $lang->short_sunday; - break; - } - - if($short == true) - { - return $short_weekday_name; - } - else - { - return $weekday_name; - } -} - -/** - * Fetches the next occurance for a repeating event. - * - * @param array $event The event array - * @param array $range The range of start/end timestamps - * @param int $last_occurance The last occurance of this event - * @param boolean $first True if this is our first iteration of this function (Does some special optimised calculations on false) - * @return int The next occurance timestamp - */ -function fetch_next_occurance($event, $range, $last_occurance, $first=false) -{ - $new_time = $last_occurance; - - $repeats = $event['repeats']; - - $start_day = explode("-", gmdate("j-n-Y", $event['starttime_user'])); - $start_date = gmmktime(0, 0, 0, $start_day[1], $start_day[0], $start_day[2]); - - if($repeats['repeats'] == 0) - { - $new_time += 86400; - } - // Repeats daily - else if($repeats['repeats'] == 1) - { - // If this isn't the first time we've called this function then we can just tack on the time since $last_occurance - if($first == false) - { - $new_time += 86400*$repeats['days']; - } - else - { - // Need to count it out - if($range['start'] > $event['starttime']) - { - $days_since = ceil(($range['start']-$start_date)/86400); - $occurances = floor($days_since/$repeats['days']); - $next_date = $occurances*$repeats['days']; - $new_time = $event['starttime']+(86400*$next_date); - } - else - { - $new_time = $start_date; - } - } - } - // Repeats on weekdays only - else if($repeats['repeats'] == 2) - { - if($first == false) - { - $last_dow = gmdate("w", $last_occurance); - // Last day of week = friday, +3 gives monday - if($last_dow == 5) - { - $new_time += 86400*3; - } - // Still in week, add a day - else - { - $new_time += 86400; - } - } - // First loop with start date - else - { - if($range['start'] < $event['starttime']) - { - $start = $event['starttime']; - } - else - { - $start = $range['start']; - } - $first_dow = gmdate("w", $start); - if($first_dow == 6) - { - $new_time = $start + (86400*2); - } - else if($first_dow == 0) - { - $new_time = $start + 86400; - } - else - { - $new_time = $start; - } - } - } - // Repeats weekly - else if($repeats['repeats'] == 3) - { - $weekdays = fetch_weekday_structure($event['weekday_start']); - $last_dow = gmdate("w", $last_occurance); - if($first == true) - { - $last_dow = -1; - $start_day = gmdate('w', $last_occurance); - if(in_array($start_day, $weekdays)) - { - $next_dow = 0; - } - } - else - { - foreach($repeats['days'] as $weekday) - { - if($weekday > $last_dow) - { - $next_dow = $weekday; - break; - } - } - } - if(!isset($next_dow)) - { - // Fetch first weekday - $first = $repeats['days'][0]*86400; - $new_time += $first; - // Increase x weeks - $new_time += (7-$last_dow)*86400; - $new_time += (($repeats['weeks']-1)*604800); - } - else - { - // Next day of week exists - if($last_dow > 0) - { - $day_diff = $next_dow-$last_dow; - } - else - { - $day_diff = $next_dow; - } - $new_time += $day_diff*86400; - } - } - // Repeats monthly - else if($repeats['repeats'] == 4) - { - $last_month = gmdate("n", $last_occurance); - $last_year = gmdate("Y", $last_occurance); - $last_day = gmdate("j", $last_occurance); - $last_num_days = gmdate("t", $last_occurance); - - // X of every Y months - if($repeats['day']) - { - if($first == true) - { - if($last_day <= $repeats['day']) - { - $new_time = gmmktime(0, 0, 0, $last_month, $repeats['day'], $last_year); - } - else - { - $new_time = gmmktime(0, 0, 0, $last_month+1, $repeats['day'], $last_year); - if($new_time > $event['endtime']) - { - return false; - } - } - } - else - { - $new_time = gmmktime(0, 0, 0, $last_month+$repeats['months'], $repeats['day'], $last_year); - } - } - // The 1st/etc (weekday) of every X months - else - { - if($first == true) - { - $new_time = fetch_weekday_monthly_repetition($repeats, $last_month, $last_year); - if($new_time < $last_occurance) - { - $new_time = fetch_weekday_monthly_repetition($repeats, $last_month+1, $last_year); - } - } - else - { - $new_time = fetch_weekday_monthly_repetition($repeats, $last_month+$repeats['months'], $last_year); - } - } - } - // Repeats yearly - else if($repeats['repeats'] == 5) - { - $last_year = gmdate("Y", $last_occurance); - - // Repeats on (day) of (month) every (years) - if($repeats['day']) - { - if($first == true) - { - $new_time = gmmktime(0, 0, 0, $repeats['month'], $repeats['day'], $last_year); - if($new_time < $last_occurance) - { - $new_time = gmmktime(0, 0, 0, $repeats['month'], $repeats['day'], $last_year+1); - } - } - else - { - $new_time = gmmktime(0, 0, 0, $repeats['month'], $repeats['day'], $last_year+$repeats['years']); - } - } - // The 1st/etc (weekday) of (month) every (years) - else - { - if($first == true) - { - $new_time = fetch_weekday_monthly_repetition($repeats, $repeats['month'], $last_year); - if($new_time < $last_occurance) - { - $new_time = fetch_weekday_monthly_repetition($repeats, $repeats['month'], $last_year+1); - } - } - else - { - $new_time = fetch_weekday_monthly_repetition($repeats, $repeats['month'], $last_year+$repeats['years']); - } - } - } - return $new_time; -} - -/** - * Fetch a friendly repetition value for a specific event (Repeats every x months etc) - * - * @param array $event The array of the event - * @return string The friendly repetition string - */ -function fetch_friendly_repetition($event) -{ - global $lang; - - $monthnames = array( - "offset", - $lang->month_1, - $lang->month_2, - $lang->month_3, - $lang->month_4, - $lang->month_5, - $lang->month_6, - $lang->month_7, - $lang->month_8, - $lang->month_9, - $lang->month_10, - $lang->month_11, - $lang->month_12 - ); - - if(!is_array($event['repeats'])) - { - $event['repeats'] = my_unserialize($event['repeats']); - if(!is_array($event['repeats'])) - { - return false; - } - } - - $repeats = $event['repeats']; - - switch($repeats) - { - case 1: - if($repeats['days'] <= 1) - { - return $lang->repeats_every_day; - } - return $lang->sprintf($lang->repeats_every_x_days, $event['repeats']['days']); - break; - case 2: - return $lang->repeats_on_weekdays; - break; - case 3: - if($event['repeats']['days'] || count($event['repeats']['days']) == 7) - { - $weekdays = null; - foreach($event['repeats']['days'] as $id => $weekday) - { - $weekday_name = fetch_weekday_name($weekday); - if($event['repeats']['days'][$id+1] && $weekday) - { - $weekdays .= $lang->comma; - } - else if(!$event['repeats']['days'][$id+1] && $weekday) - { - $weekdays .= " {$lang->and} "; - } - $weekdays .= $weekday_name; - } - } - if($event['repeats']['weeks'] == 1) - { - if($weekdays) - { - return $lang->sprintf($lang->every_week_on_days, $weekdays); - } - else - { - return $lang->sprintf($lang->every_week); - } - } - else - { - if($weekdays) - { - return $lang->sprintf($lang->every_x_weeks_on_days, $event['repeats']['weeks'], $weekdays); - } - else - { - return $lang->sprintf($lang->every_x_weeks, $event['repeats']['weeks']); - } - } - break; - case 4: - if($event['repeats']['day']) - { - if($event['repeats']['months'] == 1) - { - return $lang->sprintf($lang->every_month_on_day, $event['repeats']['day']); - } - else - { - return $lang->sprintf($lang->every_x_months_on_day, $event['repeats']['day'], $event['repeats']['months']); - } - } - else - { - $weekday_name = fetch_weekday_name($event['repeats']['weekday']); - $occurance = "weekday_occurance_".$event['repeats']['occurance']; - $occurance = $lang->$occurance; - if($event['repeats']['months'] == 1) - { - return $lang->sprintf($lang->every_month_on_weekday, $occurance, $weekday_name); - } - else - { - return $lang->sprintf($lang->every_x_months_on_weekday, $occurance, $weekday_name, $event['repeats']['months']); - } - } - break; - case 5: - $month = $monthnames[$event['repeats']['month']]; - if($event['repeats']['day']) - { - if($event['repeats']['years'] == 1) - { - return $lang->sprintf($lang->every_year_on_day, $event['repeats']['day'], $month); - } - else - { - return $lang->sprintf($lang->every_x_years_on_day, $event['repeats']['day'], $month, $event['repeats']['years']); - } - } - else - { - $weekday_name = fetch_weekday_name($event['repeats']['weekday']); - $occurance = "weekday_occurance_".$event['repeats']['occurance']; - $occurance = $lang->$occurance; - if($event['repeats']['years'] == 1) - { - return $lang->sprintf($lang->every_year_on_weekday, $occurance, $weekday_name, $month); - } - else - { - return $lang->sprintf($lang->every_x_year_on_weekday, $occurance, $weekday_name, $month, $event['repeats']['years']); - } - } - break; - } -} - -/** - * Fetch a timestamp for "the first/second etc weekday" for a month. - * - * @param array $repeats The repetition array from the event - * @param int $month The month of the year - * @param int $year The year - * @return int The UNIX timestamp - */ -function fetch_weekday_monthly_repetition($repeats, $month, $year) -{ - $first_last = gmmktime(0, 0, 0, $month, 1, $year); - $first_dow = gmdate("w", $first_last); - $day = 1+($repeats['weekday']-$first_dow); - if($day < 1) - { - $day += 7; - } - if($repeats['occurance'] != "last") - { - $day += ($repeats['occurance']-1)*7; - } - else - { - $last_dow = gmdate("w", gmmktime(0, 0, 0, $month, gmdate("t", $first_last), $year)); - $day = (gmdate("t", $first_last)-$last_dow)+$repeats['weekday']; - if($day > gmdate("t", $first_dow)) - { - $day -= 7; - } - } - return gmmktime(0, 0, 0, $month, $day, $year); -} diff --git a/html/forums/inc/functions_forumlist.php b/html/forums/inc/functions_forumlist.php deleted file mode 100644 index 4e3a7af..0000000 --- a/html/forums/inc/functions_forumlist.php +++ /dev/null @@ -1,589 +0,0 @@ - 0 - ); - $forum_viewers_text = ''; - $forum_viewers_text_plain = ''; - - // Get the permissions for this forum - $permissions = $forumpermissions[$forum['fid']]; - - // If this user doesnt have permission to view this forum and we're hiding private forums, skip this forum - if($permissions['canview'] != 1 && $mybb->settings['hideprivateforums'] == 1) - { - continue; - } - - $forum = $plugins->run_hooks("build_forumbits_forum", $forum); - - // Build the link to this forum - $forum_url = get_forum_link($forum['fid']); - - // This forum has a password, and the user isn't authenticated with it - hide post information - $hideinfo = $hidecounters = false; - $hidelastpostinfo = false; - $showlockicon = 0; - if(isset($permissions['canviewthreads']) && $permissions['canviewthreads'] != 1) - { - $hideinfo = true; - } - - if(isset($permissions['canonlyviewownthreads']) && $permissions['canonlyviewownthreads'] == 1) - { - $hidecounters = true; - - // If we only see our own threads, find out if there's a new post in one of them so the lightbulb shows - if(!is_array($private_forums)) - { - $private_forums = $fids = array(); - foreach($fcache as $fcache_p) - { - foreach($fcache_p as $parent_p) - { - foreach($parent_p as $forum_p) - { - if($forumpermissions[$forum_p['fid']]['canonlyviewownthreads']) - { - $fids[] = $forum_p['fid']; - } - } - } - } - - if(!empty($fids)) - { - $fids = implode(',', $fids); - $query = $db->simple_select("threads", "tid, fid, subject, lastpost, lastposter, lastposteruid", "uid = '{$mybb->user['uid']}' AND fid IN ({$fids}) AND visible != '-2'", array("order_by" => "lastpost", "order_dir" => "desc")); - - while($thread = $db->fetch_array($query)) - { - if(!$private_forums[$thread['fid']]) - { - $private_forums[$thread['fid']] = $thread; - } - } - } - } - - if($private_forums[$forum['fid']]['lastpost']) - { - $forum['lastpost'] = $private_forums[$forum['fid']]['lastpost']; - - $lastpost_data = array( - "lastpost" => $private_forums[$forum['fid']]['lastpost'], - "lastpostsubject" => $private_forums[$forum['fid']]['subject'], - "lastposter" => $private_forums[$forum['fid']]['lastposter'], - "lastposttid" => $private_forums[$forum['fid']]['tid'], - "lastposteruid" => $private_forums[$forum['fid']]['lastposteruid'] - ); - } - } - else - { - $lastpost_data = array( - "lastpost" => $forum['lastpost'], - "lastpostsubject" => $forum['lastpostsubject'], - "lastposter" => $forum['lastposter'], - "lastposttid" => $forum['lastposttid'], - "lastposteruid" => $forum['lastposteruid'] - ); - } - - if($forum['password'] != '' && $mybb->cookies['forumpass'][$forum['fid']] !== md5($mybb->user['uid'].$forum['password'])) - { - $hideinfo = true; - $showlockicon = 1; - } - - // Fetch subforums of this forum - if(isset($fcache[$forum['fid']])) - { - $forum_info = build_forumbits($forum['fid'], $depth+1); - - // Increment forum counters with counters from child forums - $forum['threads'] += $forum_info['counters']['threads']; - $forum['posts'] += $forum_info['counters']['posts']; - $forum['unapprovedthreads'] += $forum_info['counters']['unapprovedthreads']; - $forum['unapprovedposts'] += $forum_info['counters']['unapprovedposts']; - - if(!empty($forum_info['counters']['viewing'])) - { - $forum['viewers'] += $forum_info['counters']['viewing']; - } - - // If the child forums' lastpost is greater than the one for this forum, set it as the child forums greatest. - if($forum_info['lastpost']['lastpost'] > $lastpost_data['lastpost']) - { - $lastpost_data = $forum_info['lastpost']; - - /* - // If our subforum is unread, then so must be our parents. Force our parents to unread as well - if(strstr($forum_info['lightbulb']['folder'], "on") !== false) - { - $forum['lastread'] = 0; - } - // Otherwise, if we have an explicit record in the db, we must make sure that it is explicitly set - else - { - $lastpost_data['lastpost'] = $forum['lastpost']; - }*/ - } - - $sub_forums = $forum_info['forum_list']; - } - - // If we are hiding information (lastpost) because we aren't authenticated against the password for this forum, remove them - if($hidelastpostinfo == true) - { - $lastpost_data = array( - 'lastpost' => 0, - 'lastposter' => '' - ); - } - - // If the current forums lastpost is greater than other child forums of the current parent and forum info isn't hidden, overwrite it - if((!isset($parent_lastpost) || $lastpost_data['lastpost'] > $parent_lastpost['lastpost']) && $hideinfo != true) - { - $parent_lastpost = $lastpost_data; - } - - if(is_array($forum_viewers) && isset($forum_viewers[$forum['fid']]) && $forum_viewers[$forum['fid']] > 0) - { - $forum['viewers'] = $forum_viewers[$forum['fid']]; - } - - // Increment the counters for the parent forum (returned later) - if($hideinfo != true && $hidecounters != true) - { - $parent_counters['threads'] += $forum['threads']; - $parent_counters['posts'] += $forum['posts']; - $parent_counters['unapprovedposts'] += $forum['unapprovedposts']; - $parent_counters['unapprovedthreads'] += $forum['unapprovedthreads']; - - if(!empty($forum['viewers'])) - { - $parent_counters['viewers'] += $forum['viewers']; - } - } - - // Done with our math, lets talk about displaying - only display forums which are under a certain depth - if($depth > $showdepth) - { - continue; - } - - // Get the lightbulb status indicator for this forum based on the lastpost - $lightbulb = get_forum_lightbulb($forum, $lastpost_data, $showlockicon); - - // Fetch the number of unapproved threads and posts for this forum - $unapproved = get_forum_unapproved($forum); - - if($hideinfo == true) - { - unset($unapproved); - } - - // Sanitize name and description of forum. - $forum['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['name']); // Fix & but allow unicode - $forum['description'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['description']); // Fix & but allow unicode - $forum['name'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['name']); - $forum['description'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['description']); - - // If this is a forum and we've got subforums of it, load the subforums list template - if($depth == 2 && $sub_forums) - { - eval("\$subforums = \"".$templates->get("forumbit_subforums")."\";"); - } - // A depth of three indicates a comma separated list of forums within a forum - else if($depth == 3) - { - if($donecount < $mybb->settings['subforumsindex']) - { - $statusicon = ''; - - // Showing mini status icons for this forum - if($mybb->settings['subforumsstatusicons'] == 1) - { - $lightbulb['folder'] = "mini".$lightbulb['folder']; - eval("\$statusicon = \"".$templates->get("forumbit_depth3_statusicon", 1, 0)."\";"); - } - - // Fetch the template and append it to the list - eval("\$forum_list .= \"".$templates->get("forumbit_depth3", 1, 0)."\";"); - $comma = $lang->comma; - } - - // Have we reached our max visible subforums? put a nice message and break out of the loop - ++$donecount; - if($donecount == $mybb->settings['subforumsindex']) - { - if(subforums_count($fcache[$pid]) > $donecount) - { - $forum_list .= $comma.$lang->sprintf($lang->more_subforums, (subforums_count($fcache[$pid]) - $donecount)); - } - } - continue; - } - - // Forum is a category, set template type - if($forum['type'] == 'c') - { - $forumcat = '_cat'; - } - // Forum is a standard forum, set template type - else - { - $forumcat = '_forum'; - } - - if($forum['linkto'] == '') - { - // No posts have been made in this forum - show never text - if(($lastpost_data['lastpost'] == 0 || $lastpost_data['lastposter'] == '') && $hideinfo != true) - { - eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_never")."\";"); - } - elseif($hideinfo != true) - { - // Format lastpost date and time - $lastpost_date = my_date('relative', $lastpost_data['lastpost']); - - // Set up the last poster, last post thread id, last post subject and format appropriately - $lastpost_data['lastposter'] = htmlspecialchars_uni($lastpost_data['lastposter']); - $lastpost_profilelink = build_profile_link($lastpost_data['lastposter'], $lastpost_data['lastposteruid']); - $lastpost_link = get_thread_link($lastpost_data['lastposttid'], 0, "lastpost"); - $lastpost_subject = $full_lastpost_subject = $parser->parse_badwords($lastpost_data['lastpostsubject']); - if(my_strlen($lastpost_subject) > 25) - { - $lastpost_subject = my_substr($lastpost_subject, 0, 25)."..."; - } - $lastpost_subject = htmlspecialchars_uni($lastpost_subject); - $full_lastpost_subject = htmlspecialchars_uni($full_lastpost_subject); - - // Call lastpost template - if($depth != 1) - { - eval("\$lastpost = \"".$templates->get("forumbit_depth{$depth}_forum_lastpost")."\";"); - } - } - - if($mybb->settings['showforumviewing'] != 0 && $forum['viewers'] > 0) - { - if($forum['viewers'] == 1) - { - $forum_viewers_text = $lang->viewing_one; - } - else - { - $forum_viewers_text = $lang->sprintf($lang->viewing_multiple, $forum['viewers']); - } - $forum_viewers_text_plain = $forum_viewers_text; - eval("\$forum_viewers_text = \"".$templates->get("forumbit_depth2_forum_viewers")."\";"); - } - } - // If this forum is a link or is password protected and the user isn't authenticated, set counters to "-" - if($forum['linkto'] != '' || $hideinfo == true || $hidecounters == true) - { - $posts = "-"; - $threads = "-"; - } - // Otherwise, format thread and post counts - else - { - $posts = my_number_format($forum['posts']); - $threads = my_number_format($forum['threads']); - } - - // If this forum is a link or is password protected and the user isn't authenticated, set lastpost to "-" - if($forum['linkto'] != '' || $hideinfo == true || $hidelastpostinfo == true) - { - eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_hidden")."\";"); - } - - // Moderator column is not off - if($mybb->settings['modlist'] != 0) - { - $done_moderators = array( - "users" => array(), - "groups" => array() - ); - $moderators = ''; - // Fetch list of moderators from this forum and its parents - $parentlistexploded = explode(',', $forum['parentlist']); - foreach($parentlistexploded as $mfid) - { - // This forum has moderators - if(isset($moderatorcache[$mfid]) && is_array($moderatorcache[$mfid])) - { - // Fetch each moderator from the cache and format it, appending it to the list - foreach($moderatorcache[$mfid] as $modtype) - { - foreach($modtype as $moderator) - { - if($moderator['isgroup']) - { - if(in_array($moderator['id'], $done_moderators['groups'])) - { - continue; - } - - $moderator['title'] = htmlspecialchars_uni($moderator['title']); - - eval("\$moderators .= \"".$templates->get("forumbit_moderators_group", 1, 0)."\";"); - $done_moderators['groups'][] = $moderator['id']; - } - else - { - if(in_array($moderator['id'], $done_moderators['users'])) - { - continue; - } - - $moderator['profilelink'] = get_profile_link($moderator['id']); - $moderator['username'] = htmlspecialchars_uni($moderator['username']); - - eval("\$moderators .= \"".$templates->get("forumbit_moderators_user", 1, 0)."\";"); - $done_moderators['users'][] = $moderator['id']; - } - $comma = $lang->comma; - } - } - } - } - $comma = ''; - - // If we have a moderators list, load the template - if($moderators) - { - eval("\$modlist = \"".$templates->get("forumbit_moderators")."\";"); - } - else - { - $modlist = ''; - } - } - - // Descriptions aren't being shown - blank them - if($mybb->settings['showdescriptions'] == 0) - { - $forum['description'] = ''; - } - - // Check if this category is either expanded or collapsed and hide it as necessary. - $expdisplay = ''; - $collapsed_name = "cat_{$forum['fid']}_c"; - if(isset($collapsed[$collapsed_name]) && $collapsed[$collapsed_name] == "display: show;") - { - $expcolimage = "collapse_collapsed.png"; - $expdisplay = "display: none;"; - $expthead = " thead_collapsed"; - $expaltext = "[+]"; - } - else - { - $expcolimage = "collapse.png"; - $expthead = ""; - $expaltext = "[-]"; - } - - // Swap over the alternate backgrounds - $bgcolor = alt_trow(); - - // Add the forum to the list - eval("\$forum_list .= \"".$templates->get("forumbit_depth$depth$forumcat")."\";"); - } - } - - if(!isset($parent_lastpost)) - { - $parent_lastpost = 0; - } - - if(!isset($lightbulb)) - { - $lightbulb = ''; - } - - // Return an array of information to the parent forum including child forums list, counters and lastpost information - return array( - "forum_list" => $forum_list, - "counters" => $parent_counters, - "lastpost" => $parent_lastpost, - "lightbulb" => $lightbulb, - ); -} - -/** - * Fetch the status indicator for a forum based on its last post and the read date - * - * @param array $forum Array of information about the forum - * @param array $lastpost Array of information about the lastpost date - * @param int $locked Whether or not this forum is locked or not - * @return array Array of the folder image to be shown and the alt text - */ -function get_forum_lightbulb($forum, $lastpost, $locked=0) -{ - global $mybb, $lang, $db, $unread_forums; - - // This forum is a redirect, so override the folder icon with the "offlink" icon. - if($forum['linkto'] != '') - { - $folder = "offlink"; - $altonoff = $lang->forum_redirect; - } - // This forum is closed, so override the folder icon with the "offlock" icon. - elseif($forum['open'] == 0 || $locked) - { - $folder = "offlock"; - $altonoff = $lang->forum_locked; - } - else - { - // Fetch the last read date for this forum - if(!empty($forum['lastread'])) - { - $forum_read = $forum['lastread']; - } - elseif(!empty($mybb->cookies['mybb']['readallforums'])) - { - // We've hit the read all forums as a guest, so use the lastvisit of the user - $forum_read = $mybb->cookies['mybb']['lastvisit']; - } - else - { - $forum_read = 0; - $threadcut = TIME_NOW - 60*60*24*$mybb->settings['threadreadcut']; - - // If the user is a guest, do they have a forumsread cookie? - if(!$mybb->user['uid'] && isset($mybb->cookies['mybb']['forumread'])) - { - // If they've visited us before, then they'll have this cookie - otherwise everything is unread... - $forum_read = my_get_array_cookie("forumread", $forum['fid']); - } - else if($mybb->user['uid'] && $mybb->settings['threadreadcut'] > 0 && $threadcut > $lastpost['lastpost']) - { - // We have a user, the forum's unread and we're over our threadreadcut limit for the lastpost - we mark these as read - $forum_read = $lastpost['lastpost'] + 1; - } - } - - //if(!$forum_read) - //{ - //$forum_read = $mybb->user['lastvisit']; - //} - - // If the lastpost is greater than the last visit and is greater than the forum read date, we have a new post - if($lastpost['lastpost'] > $forum_read && $lastpost['lastpost'] != 0) - { - $unread_forums++; - $folder = "on"; - $altonoff = $lang->new_posts; - } - // Otherwise, no new posts - else - { - $folder = "off"; - $altonoff = $lang->no_new_posts; - } - } - - return array( - "folder" => $folder, - "altonoff" => $altonoff - ); -} - -/** - * Fetch the number of unapproved posts, formatted, from a forum - * - * @param array $forum Array of information about the forum - * @return array Array containing formatted string for posts and string for threads - */ -function get_forum_unapproved($forum) -{ - global $lang, $templates; - - $unapproved_threads = $unapproved_posts = ''; - - // If the user is a moderator we need to fetch the count - if(is_moderator($forum['fid'], "canviewunapprove")) - { - // Forum has one or more unaproved posts, format language string accordingly - if($forum['unapprovedposts']) - { - if($forum['unapprovedposts'] > 1) - { - $unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_posts_count, $forum['unapprovedposts']); - } - else - { - $unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_post_count, 1); - } - - $forum['unapprovedposts'] = my_number_format($forum['unapprovedposts']); - eval("\$unapproved_posts = \"".$templates->get("forumbit_depth2_forum_unapproved_posts")."\";"); - } - // Forum has one or more unapproved threads, format language string accordingly - if($forum['unapprovedthreads']) - { - if($forum['unapprovedthreads'] > 1) - { - $unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_threads_count, $forum['unapprovedthreads']); - } - else - { - $unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_thread_count, 1); - } - - $forum['unapprovedthreads'] = my_number_format($forum['unapprovedthreads']); - eval("\$unapproved_threads = \"".$templates->get("forumbit_depth2_forum_unapproved_threads")."\";"); - } - } - return array( - "unapproved_posts" => $unapproved_posts, - "unapproved_threads" => $unapproved_threads - ); -} diff --git a/html/forums/inc/functions_image.php b/html/forums/inc/functions_image.php deleted file mode 100644 index 1677726..0000000 --- a/html/forums/inc/functions_image.php +++ /dev/null @@ -1,260 +0,0 @@ -= $maxwidth) || ($imgheight >= $maxheight)) - { - check_thumbnail_memory($imgwidth, $imgheight, $imgtype, $imgbits, $imgchan); - - if($imgtype == 3) - { - if(@function_exists("imagecreatefrompng")) - { - $im = @imagecreatefrompng($file); - } - } - elseif($imgtype == 2) - { - if(@function_exists("imagecreatefromjpeg")) - { - $im = @imagecreatefromjpeg($file); - } - } - elseif($imgtype == 1) - { - if(@function_exists("imagecreatefromgif")) - { - $im = @imagecreatefromgif($file); - } - } - else - { - $thumb['code'] = 3; - return $thumb; - } - if(!$im) - { - $thumb['code'] = 3; - return $thumb; - } - $scale = scale_image($imgwidth, $imgheight, $maxwidth, $maxheight); - $thumbwidth = $scale['width']; - $thumbheight = $scale['height']; - $thumbim = @imagecreatetruecolor($thumbwidth, $thumbheight); - - if(!$thumbim) - { - $thumbim = @imagecreate($thumbwidth, $thumbheight); - $resized = true; - } - - // Attempt to preserve the transparency if there is any - if($imgtype == 3) - { - // A PNG! - imagealphablending($thumbim, false); - imagefill($thumbim, 0, 0, imagecolorallocatealpha($thumbim, 0, 0, 0, 127)); - - // Save Alpha... - imagesavealpha($thumbim, true); - } - elseif($imgtype == 1) - { - // Transparent GIF? - $trans_color = imagecolortransparent($im); - if($trans_color >= 0 && $trans_color < imagecolorstotal($im)) - { - $trans = imagecolorsforindex($im, $trans_color); - $new_trans_color = imagecolorallocate($thumbim, $trans['red'], $trans['blue'], $trans['green']); - imagefill($thumbim, 0, 0, $new_trans_color); - imagecolortransparent($thumbim, $new_trans_color); - } - } - - if(!isset($resized)) - { - @imagecopyresampled($thumbim, $im, 0, 0, 0, 0, $thumbwidth, $thumbheight, $imgwidth, $imgheight); - } - else - { - @imagecopyresized($thumbim, $im, 0, 0, 0, 0, $thumbwidth, $thumbheight, $imgwidth, $imgheight); - } - @imagedestroy($im); - if(!function_exists("imagegif") && $imgtype == 1) - { - $filename = str_replace(".gif", ".jpg", $filename); - } - switch($imgtype) - { - case 1: - if(function_exists("imagegif")) - { - @imagegif($thumbim, $path."/".$filename); - } - else - { - @imagejpeg($thumbim, $path."/".$filename); - } - break; - case 2: - @imagejpeg($thumbim, $path."/".$filename); - break; - case 3: - @imagepng($thumbim, $path."/".$filename); - break; - } - @my_chmod($path."/".$filename, '0644'); - @imagedestroy($thumbim); - $thumb['code'] = 1; - $thumb['filename'] = $filename; - return $thumb; - } - else - { - return array("code" => 4); - } -} - -/** - * Attempts to allocate enough memory to generate the thumbnail - * - * @param integer $width width dimension - * @param integer $height height dimension - * @param string $type one of the IMAGETYPE_XXX constants indicating the type of the image - * @param string $bitdepth the bits area the number of bits for each color - * @param string $channels the channels - 3 for RGB pictures and 4 for CMYK pictures - * @return bool - */ -function check_thumbnail_memory($width, $height, $type, $bitdepth, $channels) -{ - if(!function_exists("memory_get_usage")) - { - return false; - } - - $memory_limit = @ini_get("memory_limit"); - if(!$memory_limit || $memory_limit == -1) - { - return false; - } - - $limit = preg_match("#^([0-9]+)\s?([kmg])b?$#i", trim(my_strtolower($memory_limit)), $matches); - $memory_limit = 0; - if($matches[1] && $matches[2]) - { - switch($matches[2]) - { - case "k": - $memory_limit = $matches[1] * 1024; - break; - case "m": - $memory_limit = $matches[1] * 1048576; - break; - case "g": - $memory_limit = $matches[1] * 1073741824; - } - } - $current_usage = memory_get_usage(); - $free_memory = $memory_limit - $current_usage; - - $thumbnail_memory = round(($width * $height * $bitdepth * $channels / 8) * 5); - $thumbnail_memory += 2097152; - - if($thumbnail_memory > $free_memory) - { - if($matches[1] && $matches[2]) - { - switch($matches[2]) - { - case "k": - $memory_limit = ceil((($memory_limit+$thumbnail_memory) / 1024))."K"; - break; - case "m": - $memory_limit = ceil((($memory_limit+$thumbnail_memory) / 1048576))."M"; - break; - case "g": - $memory_limit = ceil((($memory_limit+$thumbnail_memory) / 1073741824))."G"; - } - } - - @ini_set("memory_limit", $memory_limit); - } - - return true; -} - -/** - * Figures out the correct dimensions to use - * - * @param integer $width current width dimension - * @param integer $height current height dimension - * @param integer $maxwidth max width dimension - * @param integer $maxheight max height dimension - * @return array correct height & width - */ -function scale_image($width, $height, $maxwidth, $maxheight) -{ - $width = (int)$width; - $height = (int)$height; - - if(!$width) $width = $maxwidth; - if(!$height) $height = $maxheight; - - $newwidth = $width; - $newheight = $height; - - if($width > $maxwidth) - { - $newwidth = $maxwidth; - $newheight = ceil(($height*(($maxwidth*100)/$width))/100); - $height = $newheight; - $width = $newwidth; - } - if($height > $maxheight) - { - $newheight = $maxheight; - $newwidth = ceil(($width*(($maxheight*100)/$height))/100); - } - $ret['width'] = $newwidth; - $ret['height'] = $newheight; - return $ret; -} diff --git a/html/forums/inc/functions_indicators.php b/html/forums/inc/functions_indicators.php deleted file mode 100644 index af5fccc..0000000 --- a/html/forums/inc/functions_indicators.php +++ /dev/null @@ -1,356 +0,0 @@ -settings['threadreadcut'] > 0 && $mybb->user['uid']) - { - // For registered users, store the information in the database. - switch($db->type) - { - case "pgsql": - case "sqlite": - $db->replace_query("threadsread", array('tid' => $tid, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW), array("tid", "uid")); - break; - default: - $db->write_query(" - REPLACE INTO ".TABLE_PREFIX."threadsread (tid, uid, dateline) - VALUES('$tid', '{$mybb->user['uid']}', '".TIME_NOW."') - "); - } - } - // Default back to cookie marking - else - { - my_set_array_cookie("threadread", $tid, TIME_NOW, -1); - } - - $unread_count = fetch_unread_count($fid); - if($unread_count == 0) - { - mark_forum_read($fid); - } -} - -/** - * Fetches the number of unread threads for the current user in a particular forum. - * - * @param string $fid The forums (CSV list) - * @return int The number of unread threads - */ -function fetch_unread_count($fid) -{ - global $cache, $db, $mybb; - - $forums_all = $forums_own = array(); - $forums = explode(',', $fid); - foreach($forums as $forum) - { - $permissions = forum_permissions($forum); - if(!empty($permissions['canonlyviewownthreads'])) - { - $forums_own[] = $forum; - } - else - { - $forums_all[] = $forum; - } - } - if(!empty($forums_own)) - { - $where = "(fid IN (".implode(',', $forums_own).") AND uid = {$mybb->user['uid']})"; - $where2 = "(t.fid IN (".implode(',', $forums_own).") AND t.uid = {$mybb->user['uid']})"; - } - if(!empty($forums_all)) - { - if(isset($where)) - { - $where = "({$where} OR fid IN (".implode(',', $forums_all)."))"; - $where2 = "({$where2} OR t.fid IN (".implode(',', $forums_all)."))"; - } - else - { - $where = 'fid IN ('.implode(',', $forums_all).')'; - $where2 = 't.fid IN ('.implode(',', $forums_all).')'; - } - } - $cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - - if(!empty($permissions['canonlyviewownthreads'])) - { - $onlyview = " AND uid = '{$mybb->user['uid']}'"; - $onlyview2 = " AND t.uid = '{$mybb->user['uid']}'"; - } - - if($mybb->user['uid'] == 0) - { - $comma = ''; - $tids = ''; - $threadsread = $forumsread = array(); - - if(isset($mybb->cookies['mybb']['threadread'])) - { - $threadsread = my_unserialize($mybb->cookies['mybb']['threadread']); - } - if(isset($mybb->cookies['mybb']['forumread'])) - { - $forumsread = my_unserialize($mybb->cookies['mybb']['forumread']); - } - - if(!empty($threadsread)) - { - foreach($threadsread as $key => $value) - { - $tids .= $comma.(int)$key; - $comma = ','; - } - } - - if(!empty($tids)) - { - $count = 0; - - // We've read at least some threads, are they here? - $query = $db->simple_select("threads", "lastpost, tid, fid", "visible=1 AND closed NOT LIKE 'moved|%' AND {$where} AND lastpost > '{$cutoff}'", array("limit" => 100)); - - while($thread = $db->fetch_array($query)) - { - if((!isset($threadsread[$thread['tid']]) || $thread['lastpost'] > (int)$threadsread[$thread['tid']]) && (!isset($forumsread[$thread['fid']]) || $thread['lastpost'] > (int)$forumsread[$thread['fid']])) - { - ++$count; - } - } - - return $count; - } - - // Not read any threads? - return false; - } - else - { - switch($db->type) - { - case "pgsql": - $query = $db->query(" - SELECT COUNT(t.tid) AS unread_count - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."threadsread tr ON (tr.tid=t.tid AND tr.uid='{$mybb->user['uid']}') - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=t.fid AND fr.uid='{$mybb->user['uid']}') - WHERE t.visible=1 AND t.closed NOT LIKE 'moved|%' AND {$where2} AND t.lastpost > COALESCE(tr.dateline,$cutoff) AND t.lastpost > COALESCE(fr.dateline,$cutoff) AND t.lastpost>$cutoff - "); - break; - default: - $query = $db->query(" - SELECT COUNT(t.tid) AS unread_count - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."threadsread tr ON (tr.tid=t.tid AND tr.uid='{$mybb->user['uid']}') - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=t.fid AND fr.uid='{$mybb->user['uid']}') - WHERE t.visible=1 AND t.closed NOT LIKE 'moved|%' AND {$where2} AND t.lastpost > IFNULL(tr.dateline,$cutoff) AND t.lastpost > IFNULL(fr.dateline,$cutoff) AND t.lastpost>$cutoff - "); - } - return $db->fetch_field($query, "unread_count"); - } -} - -/** - * Mark a particular forum as read. - * - * @param int $fid The forum ID - */ -function mark_forum_read($fid) -{ - global $mybb, $db; - - // Can only do "true" tracking for registered users - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) - { - // Experimental setting to mark parent forums as read - $forums_to_read = array(); - - if($mybb->settings['readparentforums']) - { - $ignored_forums = array(); - $forums = array_reverse(explode(",", get_parent_list($fid))); - - unset($forums[0]); - if(!empty($forums)) - { - $ignored_forums[] = $fid; - - foreach($forums as $forum) - { - $fids = array($forum); - $ignored_forums[] = $forum; - - $children = explode(",", get_parent_list($forum)); - foreach($children as $child) - { - if(in_array($child, $ignored_forums)) - { - continue; - } - - $fids[] = $child; - $ignored_forums[] = $child; - } - - if(fetch_unread_count(implode(",", $fids)) == 0) - { - $forums_to_read[] = $forum; - } - } - } - } - - switch($db->type) - { - case "pgsql": - case "sqlite": - add_shutdown(array($db, "replace_query"), array("forumsread", array('fid' => $fid, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW), array("fid", "uid"))); - - if(!empty($forums_to_read)) - { - foreach($forums_to_read as $forum) - { - add_shutdown(array($db, "replace_query"), array("forumsread", array('fid' => $forum, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW), array('fid', 'uid'))); - } - } - break; - default: - $child_sql = ''; - if(!empty($forums_to_read)) - { - foreach($forums_to_read as $forum) - { - $child_sql .= ", ('{$forum}', '{$mybb->user['uid']}', '".TIME_NOW."')"; - } - } - - $db->shutdown_query(" - REPLACE INTO ".TABLE_PREFIX."forumsread (fid, uid, dateline) - VALUES('{$fid}', '{$mybb->user['uid']}', '".TIME_NOW."'){$child_sql} - "); - } - } - // Mark in a cookie - else - { - my_set_array_cookie("forumread", $fid, TIME_NOW, -1); - } -} - -/** - * Marks all forums as read. - * - */ -function mark_all_forums_read() -{ - global $mybb, $db, $cache; - - // Can only do "true" tracking for registered users - if($mybb->user['uid'] > 0) - { - $db->update_query("users", array('lastvisit' => TIME_NOW), "uid='".$mybb->user['uid']."'"); - require_once MYBB_ROOT."inc/functions_user.php"; - update_pm_count('', 2); - - if($mybb->settings['threadreadcut'] > 0) - { - // Need to loop through all forums and mark them as read - $forums = $cache->read('forums'); - - $update_count = ceil(count($forums)/20); - - if($update_count < 15) - { - $update_count = 15; - } - - $mark_query = ''; - $done = 0; - foreach(array_keys($forums) as $fid) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $mark_query[] = array('fid' => $fid, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW); - break; - default: - if($mark_query != '') - { - $mark_query .= ','; - } - $mark_query .= "('{$fid}', '{$mybb->user['uid']}', '".TIME_NOW."')"; - } - ++$done; - - // Only do this in loops of $update_count, save query time - if($done % $update_count) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - foreach($mark_query as $replace_query) - { - add_shutdown(array($db, "replace_query"), array("forumsread", $replace_query, array("fid", "uid"))); - } - $mark_query = array(); - break; - default: - $db->shutdown_query(" - REPLACE INTO ".TABLE_PREFIX."forumsread (fid, uid, dateline) - VALUES {$mark_query} - "); - $mark_query = ''; - } - } - } - - if($mark_query != '') - { - switch($db->type) - { - case "pgsql": - case "sqlite": - foreach($mark_query as $replace_query) - { - add_shutdown(array($db, "replace_query"), array("forumsread", $replace_query, array("fid", "uid"))); - } - break; - default: - $db->shutdown_query(" - REPLACE INTO ".TABLE_PREFIX."forumsread (fid, uid, dateline) - VALUES {$mark_query} - "); - } - } - } - } - else - { - my_setcookie("mybb[readallforums]", 1); - my_setcookie("mybb[lastvisit]", TIME_NOW); - - my_unsetcookie("mybb[threadread]"); - my_unsetcookie("mybb[forumread]"); - } -} diff --git a/html/forums/inc/functions_massmail.php b/html/forums/inc/functions_massmail.php deleted file mode 100644 index cf93372..0000000 --- a/html/forums/inc/functions_massmail.php +++ /dev/null @@ -1,222 +0,0 @@ -escape_string_like($conditions[$search_field])."%'"; - } - } - - // LESS THAN or GREATER THAN - $direction_fields = array("postnum"); - foreach($direction_fields as $search_field) - { - $direction_field = $search_field."_dir"; - if(!empty($conditions[$search_field]) && $conditions[$direction_field]) - { - switch($conditions[$direction_field]) - { - case "greater_than": - $direction = ">"; - break; - case "less_than": - $direction = "<"; - break; - default: - $direction = "="; - } - $search_sql .= " AND u.{$search_field}{$direction}'".(int)$conditions[$search_field]."'"; - } - } - - // Time-based search fields - $time_fields = array("regdate", "lastactive"); - foreach($time_fields as $search_field) - { - $time_field = $search_field."_date"; - $direction_field = $search_field."_dir"; - if(!empty($conditions[$search_field]) && $conditions[$time_field] && $conditions[$direction_field]) - { - switch($conditions[$time_field]) - { - case "hours": - $date = $conditions[$search_field]*60*60; - break; - case "days": - $date = $conditions[$search_field]*60*60*24; - break; - case "weeks": - $date = $conditions[$search_field]*60*60*24*7; - break; - case "months": - $date = $conditions[$search_field]*60*60*24*30; - break; - case "years": - $date = $conditions[$search_field]*60*60*24*365; - break; - default: - $date = $conditions[$search_field]*60*60*24; - } - - switch($conditions[$direction_field]) - { - case "less_than": - $direction = ">"; - break; - case "more_than": - $direction = "<"; - break; - default: - $direction = "<"; - } - $search_sql .= " AND u.{$search_field}{$direction}'".(TIME_NOW-$date)."'"; - } - } - - // Usergroup based searching - if($conditions['usergroup']) - { - if(!is_array($conditions['usergroup'])) - { - $conditions['usergroup'] = array($conditions['usergroup']); - } - - $conditions['usergroup'] = array_map('intval', $conditions['usergroup']); - - $additional_sql = ''; - foreach($conditions['usergroup'] as $usergroup) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $additional_sql .= " OR ','||additionalgroups||',' LIKE '%,{$usergroup},%'"; - break; - default: - $additional_sql .= " OR CONCAT(',',additionalgroups,',') LIKE '%,{$usergroup},%'"; - } - } - $search_sql .= " AND (u.usergroup IN (".implode(",", $conditions['usergroup']).") {$additional_sql})"; - } - - return $search_sql; -} - -/** - * Create a text based version of a HTML mass email. - * - * @param string $message The HTML version. - * @return string The generated text based version. - */ -function create_text_message($message) -{ - // Cut out all current line breaks - // Makes links CONTENT (link) - $message = make_pretty_links($message); - $message = str_replace(array("\r\n", "\n"), "\n", $message); - $message = preg_replace("#

    #i", "\n\n", $message); - $message = preg_replace("##i", "\n", $message); - $message = preg_replace("#]*?>#i", "", $message); - $message = preg_replace("#]*?>\s*#i", "-----------\n", $message); - $message = html_entity_decode($message); - $message = str_replace("\t", "", $message); - do - { - $message = str_replace(" ", " ", $message); - } - while(strpos($message, " ") !== false); - - $search = array('@]*?>.*?@si', // Strip out javascript - '@]*?>.*?@siU', // Strip style tags properly - '@]*?>.*?@siU', // Strip title tags - '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags - '@@' // Strip multi-line comments including CDATA - ); - $message = preg_replace($search, '', $message); - $message = preg_replace("#\n\n+#", "\n\n", $message); - $message = preg_replace("#^\s+#is", "", $message); - return $message; -} - -/** - * Generates friendly links for a text based version of a mass email from the HTML version. - * - * @param string $message_html The HTML version. - * @return string The version with the friendly links and all tags stripped. - */ -function make_pretty_links($message_html) -{ - do - { - $start = stripos($message_html, "", $start); - if($end === false) - { - break; - } - - $a_href = substr($message_html, $start, ($end-$start)); - - preg_match("#href=\"?([^\"> ]+)\"?#i", $a_href, $href_matches); - if(!$href_matches[1]) - { - continue; - } - $link = $href_matches[1]; - - $contents = strip_tags($a_href); - if(!$contents) - { - preg_match("#alt=\"?([^\">]+)\"?#i", $a_href, $matches2); - if($matches2[1]) - { - $contents = $matches2[1]; - } - if(!$contents) - { - preg_match("#title=\"?([^\">]+)\"?#i", $a_href, $matches2); - if($matches2[1]) - { - $contents = $matches2[1]; - } - } - } - - $replaced_link = $contents." ({$link}) "; - - $message_html = substr_replace($message_html, $replaced_link, $start, ($end-$start)); - } while(true); - return $message_html; -} diff --git a/html/forums/inc/functions_modcp.php b/html/forums/inc/functions_modcp.php deleted file mode 100644 index a5b8dfd..0000000 --- a/html/forums/inc/functions_modcp.php +++ /dev/null @@ -1,332 +0,0 @@ -usergroup['issupermod'] == 0 && ($user_permissions['issupermod'] == 1 || $user_permissions['cancp'] == 1)) - { - return false; - } - // Current user is a super mod or is an administrator - else if($user_permissions['cancp'] == 1 && ($mybb->usergroup['cancp'] != 1 || (is_super_admin($uid) && !is_super_admin($mybb->user['uid'])))) - { - return false; - } - return true; -} - -/** - * Fetch forums the moderator can manage announcements to - * - * @param int $pid (Optional) The parent forum ID - * @param int $depth (Optional) The depth from parent forum the moderator can manage to - */ -function fetch_forum_announcements($pid=0, $depth=1) -{ - global $mybb, $db, $lang, $theme, $announcements, $templates, $announcements_forum, $moderated_forums, $unviewableforums, $parser; - static $forums_by_parent, $forum_cache, $parent_forums; - - if(!is_array($forum_cache)) - { - $forum_cache = cache_forums(); - } - if(!is_array($parent_forums) && $mybb->usergroup['issupermod'] != 1) - { - // Get a list of parentforums to show for normal moderators - $parent_forums = array(); - foreach($moderated_forums as $mfid) - { - $parent_forums = array_merge($parent_forums, explode(',', $forum_cache[$mfid]['parentlist'])); - } - } - if(!is_array($forums_by_parent)) - { - foreach($forum_cache as $forum) - { - $forums_by_parent[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - } - - if(!is_array($forums_by_parent[$pid])) - { - return; - } - - foreach($forums_by_parent[$pid] as $children) - { - foreach($children as $forum) - { - if($forum['linkto'] || (is_array($unviewableforums) && in_array($forum['fid'], $unviewableforums))) - { - continue; - } - - if($forum['active'] == 0 || !is_moderator($forum['fid'], "canmanageannouncements")) - { - // Check if this forum is a parent of a moderated forum - if(is_array($parent_forums) && in_array($forum['fid'], $parent_forums)) - { - // A child is moderated, so print out this forum's title. RECURSE! - $trow = alt_trow(); - eval("\$announcements_forum .= \"".$templates->get("modcp_announcements_forum_nomod")."\";"); - } - else - { - // No subforum is moderated by this mod, so safely continue - continue; - } - } - else - { - // This forum is moderated by the user, so print out the forum's title, and its announcements - $trow = alt_trow(); - - $padding = 40*($depth-1); - - eval("\$announcements_forum .= \"".$templates->get("modcp_announcements_forum")."\";"); - - if(isset($announcements[$forum['fid']])) - { - foreach($announcements[$forum['fid']] as $aid => $announcement) - { - $trow = alt_trow(); - - if($announcement['enddate'] < TIME_NOW && $announcement['enddate'] != 0) - { - eval("\$icon = \"".$templates->get("modcp_announcements_announcement_expired")."\";"); - } - else - { - eval("\$icon = \"".$templates->get("modcp_announcements_announcement_active")."\";"); - } - - $subject = htmlspecialchars_uni($parser->parse_badwords($announcement['subject'])); - - eval("\$announcements_forum .= \"".$templates->get("modcp_announcements_announcement")."\";"); - } - } - } - - // Build the list for any sub forums of this forum - if(isset($forums_by_parent[$forum['fid']])) - { - fetch_forum_announcements($forum['fid'], $depth+1); - } - } - } -} - -/** - * Send reported content to moderators - * - * @param array $report Array of reported content - * @param string $report_type Type of content being reported - * @return bool|array PM Information or false - */ -function send_report($report, $report_type='post') -{ - global $db, $lang, $forum, $mybb, $post, $thread, $reputation, $user, $plugins; - - $report_reason = ''; - if($report['reasonid']) - { - $query = $db->simple_select("reportreasons", "title", "rid = '".(int)$report['reasonid']."'", array('limit' => 1)); - $reason = $db->fetch_array($query); - - $lang->load('report'); - - $report_reason = $lang->parse($reason['title']); - } - - if($report['reason']) - { - $report_reason = $lang->sprintf($lang->email_report_comment_extra, $report_reason, $report['reason']); - } - - $modsjoin = $modswhere = ''; - if(!empty($forum['parentlist'])) - { - $modswhere = "m.fid IN ({$forum['parentlist']}) OR "; - - if($db->type == 'pgsql' || $db->type == 'sqlite') - { - $modsjoin = "LEFT JOIN {$db->table_prefix}moderators m ON (m.id = u.uid AND m.isgroup = 0) OR ((m.id = u.usergroup OR ',' || u.additionalgroups || ',' LIKE '%,' || m.id || ',%') AND m.isgroup = 1)"; - } - else - { - $modsjoin = "LEFT JOIN {$db->table_prefix}moderators m ON (m.id = u.uid AND m.isgroup = 0) OR ((m.id = u.usergroup OR CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', m.id, ',%')) AND m.isgroup = 1)"; - } - } - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->query(" - SELECT DISTINCT u.username, u.email, u.receivepms, u.uid - FROM {$db->table_prefix}users u - {$modsjoin} - LEFT JOIN {$db->table_prefix}usergroups g ON (',' || u.additionalgroups || ',' LIKE '%,' || g.gid || ',%' OR g.gid = u.usergroup) - WHERE {$modswhere}g.cancp = 1 OR g.issupermod = 1 - "); - break; - default: - $query = $db->query(" - SELECT DISTINCT u.username, u.email, u.receivepms, u.uid - FROM {$db->table_prefix}users u - {$modsjoin} - LEFT JOIN {$db->table_prefix}usergroups g ON (CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%') OR g.gid = u.usergroup) - WHERE {$modswhere}g.cancp = 1 OR g.issupermod = 1 - "); - } - - $lang_string_subject = "emailsubject_report{$report_type}"; - $lang_string_message = "email_report{$report_type}"; - - if(empty($lang->$lang_string_subject) || empty($lang->$lang_string_message)) - { - return false; - } - - global $send_report_subject, $send_report_url; - - switch($report_type) - { - case 'post': - $send_report_subject = $post['subject']; - $send_report_url = str_replace('&', '&', get_post_link($post['pid'], $thread['tid'])."#pid".$post['pid']); - break; - case 'profile': - $send_report_subject = $user['username']; - $send_report_url = str_replace('&', '&', get_profile_link($user['uid'])); - break; - case 'reputation': - $from_user = get_user($reputation['adduid']); - $send_report_subject = $from_user['username']; - $send_report_url = "reputation.php?uid={$reputation['uid']}#rid{$reputation['rid']}"; - break; - } - - $plugins->run_hooks("send_report_report_type"); - - $emailsubject = $lang->sprintf($lang->$lang_string_subject, $mybb->settings['bbname']); - $emailmessage = $lang->sprintf($lang->$lang_string_message, $mybb->user['username'], $mybb->settings['bbname'], $send_report_subject, $mybb->settings['bburl'], $send_report_url, $report_reason); - - while($mod = $db->fetch_array($query)) - { - if($mybb->settings['reportmethod'] == "pms" && $mod['receivepms'] != 0 && $mybb->settings['enablepms'] != 0) - { - $pm_recipients[] = $mod['uid']; - } - else - { - my_mail($mod['email'], $emailsubject, $emailmessage); - } - } - - if(count($pm_recipients) > 0) - { - require_once MYBB_ROOT."inc/datahandlers/pm.php"; - $pmhandler = new PMDataHandler(); - - $pm = array( - "subject" => $emailsubject, - "message" => $emailmessage, - "icon" => 0, - "fromid" => $mybb->user['uid'], - "toid" => $pm_recipients, - "ipaddress" => $mybb->session->packedip - ); - - $pmhandler->admin_override = true; - $pmhandler->set_data($pm); - - // Now let the pm handler do all the hard work. - if(!$pmhandler->validate_pm()) - { - // Force it to valid to just get it out of here - $pmhandler->is_validated = true; - $pmhandler->errors = array(); - } - - $pminfo = $pmhandler->insert_pm(); - return $pminfo; - } - - return false; -} - -/** - * Add a report - * - * @param array $report Array of reported content - * @param string $type Type of content being reported - * @return int Report ID - */ -function add_report($report, $type = 'post') -{ - global $cache, $db, $mybb; - - $insert_array = array( - 'id' => (int)$report['id'], - 'id2' => (int)$report['id2'], - 'id3' => (int)$report['id3'], - 'uid' => (int)$report['uid'], - 'reportstatus' => 0, - 'reasonid' => (int)$report['reasonid'], - 'reason' => $db->escape_string($report['reason']), - 'type' => $db->escape_string($type), - 'reports' => 1, - 'dateline' => TIME_NOW, - 'lastreport' => TIME_NOW, - 'reporters' => $db->escape_string(my_serialize(array($report['uid']))) - ); - - if($mybb->settings['reportmethod'] == "email" || $mybb->settings['reportmethod'] == "pms") - { - send_report($report, $type); - } - - $rid = $db->insert_query("reportedcontent", $insert_array); - $cache->update_reportedcontent(); - - return $rid; -} - -/** - * Update an existing report - * - * @param array $report Array of reported content - * @return bool true - */ -function update_report($report) -{ - global $db; - - $update_array = array( - 'reports' => ++$report['reports'], - 'lastreport' => TIME_NOW, - 'reporters' => $db->escape_string(my_serialize($report['reporters'])) - ); - - $db->update_query("reportedcontent", $update_array, "rid = '{$report['rid']}'"); - return true; -} diff --git a/html/forums/inc/functions_online.php b/html/forums/inc/functions_online.php deleted file mode 100644 index 1bf3bb7..0000000 --- a/html/forums/inc/functions_online.php +++ /dev/null @@ -1,1205 +0,0 @@ - 0) - { - $ann_list[$parameters['aid']] = $parameters['aid']; - } - $user_activity['activity'] = "announcements"; - $user_activity['ann'] = $parameters['aid']; - break; - case "attachment": - if(!isset($parameters['aid'])) - { - $parameters['aid'] = 0; - } - $parameters['aid'] = (int)$parameters['aid']; - if($parameters['aid'] > 0) - { - $aid_list[] = $parameters['aid']; - } - $user_activity['activity'] = "attachment"; - $user_activity['aid'] = $parameters['aid']; - break; - case "calendar": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - if($parameters['action'] == "event") - { - if(!isset($parameters['eid'])) - { - $parameters['eid'] = 0; - } - $parameters['eid'] = (int)$parameters['eid']; - if($parameters['eid'] > 0) - { - $eid_list[$parameters['eid']] = $parameters['eid']; - } - $user_activity['activity'] = "calendar_event"; - $user_activity['eid'] = $parameters['eid']; - } - elseif($parameters['action'] == "addevent" || $parameters['action'] == "do_addevent") - { - $user_activity['activity'] = "calendar_addevent"; - } - elseif($parameters['action'] == "editevent" || $parameters['action'] == "do_editevent") - { - $user_activity['activity'] = "calendar_editevent"; - } - else - { - $user_activity['activity'] = "calendar"; - } - break; - case "contact": - $user_activity['activity'] = "contact"; - break; - case "editpost": - $user_activity['activity'] = "editpost"; - break; - case "forumdisplay": - if(!isset($parameters['fid'])) - { - $parameters['fid'] = 0; - } - $parameters['fid'] = (int)$parameters['fid']; - if($parameters['fid'] > 0) - { - $fid_list[$parameters['fid']] = $parameters['fid']; - } - $user_activity['activity'] = "forumdisplay"; - $user_activity['fid'] = $parameters['fid']; - break; - case "index": - case '': - $user_activity['activity'] = "index"; - break; - case "managegroup": - $user_activity['activity'] = "managegroup"; - break; - case "member": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - if($parameters['action'] == "activate") - { - $user_activity['activity'] = "member_activate"; - } - elseif($parameters['action'] == "register" || $parameters['action'] == "do_register") - { - $user_activity['activity'] = "member_register"; - } - elseif($parameters['action'] == "login" || $parameters['action'] == "do_login") - { - $user_activity['activity'] = "member_login"; - } - elseif($parameters['action'] == "logout") - { - $user_activity['activity'] = "member_logout"; - } - elseif($parameters['action'] == "profile") - { - $user_activity['activity'] = "member_profile"; - - if(!isset($parameters['uid'])) - { - $parameters['uid'] = 0; - } - $parameters['uid'] = (int)$parameters['uid']; - - if($parameters['uid'] == 0) - { - global $memprofile; - - // $user is available in Who's Online but not in Member Profile, use $memprofile instead - if(!empty($user['uid'])) - { - $parameters['uid'] = $user['uid']; - } - elseif(!empty($memprofile['uid'])) - { - $parameters['uid'] = $memprofile['uid']; - } - } - - if($parameters['uid'] > 0) - { - $uid_list[$parameters['uid']] = $parameters['uid']; - } - $user_activity['uid'] = $parameters['uid']; - } - elseif($parameters['action'] == "emailuser" || $parameters['action'] == "do_emailuser") - { - $user_activity['activity'] = "member_emailuser"; - } - elseif($parameters['action'] == "rate" || $parameters['action'] == "do_rate") - { - $user_activity['activity'] = "member_rate"; - } - elseif($parameters['action'] == "resendactivation" || $parameters['action'] == "do_resendactivation") - { - $user_activity['activity'] = "member_resendactivation"; - } - elseif($parameters['action'] == "lostpw" || $parameters['action'] == "do_lostpw" || $parameters['action'] == "resetpassword") - { - $user_activity['activity'] = "member_lostpw"; - } - else - { - $user_activity['activity'] = "member"; - } - break; - case "memberlist": - $user_activity['activity'] = "memberlist"; - break; - case "misc": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - $accepted_parameters = array("markread", "help", "buddypopup", "smilies", "syndication", "imcenter", "dstswitch"); - if($parameters['action'] == "whoposted") - { - if(!isset($parameters['tid'])) - { - $parameters['tid'] = 0; - } - $parameters['tid'] = (int)$parameters['tid']; - if($parameters['tid'] > 0) - { - $tid_list[$parameters['tid']] = $parameters['tid']; - } - $user_activity['activity'] = "misc_whoposted"; - $user_activity['tid'] = $parameters['tid']; - } - elseif(in_array($parameters['action'], $accepted_parameters)) - { - $user_activity['activity'] = "misc_".$parameters['action']; - } - else - { - $user_activity['activity'] = "misc"; - } - break; - case "modcp": - if(!isset($parameters['action'])) - { - $parameters['action'] = 0; - } - - $accepted_parameters = array("modlogs", "announcements", "finduser", "warninglogs", "ipsearch"); - - foreach($accepted_parameters as $action) - { - if($parameters['action'] == $action) - { - $user_activity['activity'] = "modcp_".$action; - break; - } - } - - $accepted_parameters = array(); - $accepted_parameters['report'] = array("do_reports", "reports", "allreports"); - $accepted_parameters['new_announcement'] = array("do_new_announcement", "new_announcement"); - $accepted_parameters['delete_announcement'] = array("do_delete_announcement", "delete_announcement"); - $accepted_parameters['edit_announcement'] = array("do_edit_announcement", "edit_announcement"); - $accepted_parameters['mod_queue'] = array("do_modqueue", "modqueue"); - $accepted_parameters['editprofile'] = array("do_editprofile", "editprofile"); - $accepted_parameters['banning'] = array("do_banuser", "banning", "liftban", "banuser"); - - foreach($accepted_parameters as $name => $actions) - { - if(in_array($parameters['action'], $actions)) - { - $user_activity['activity'] = "modcp_".$name; - break; - } - } - - if(empty($user_activity['activity'])) - { - $user_activity['activity'] = "modcp"; - } - break; - case "moderation": - $user_activity['activity'] = "moderation"; - break; - case "newreply": - if(!isset($parameters['tid'])) - { - $parameters['tid'] = 0; - } - $parameters['tid'] = (int)$parameters['tid']; - if($parameters['tid'] > 0) - { - $tid_list[$parameters['tid']] = $parameters['tid']; - } - $user_activity['activity'] = "newreply"; - $user_activity['tid'] = $parameters['tid']; - break; - case "newthread": - if(!isset($parameters['fid'])) - { - $parameters['fid'] = 0; - } - $parameters['fid'] = (int)$parameters['fid']; - if($parameters['fid'] > 0) - { - $fid_list[$parameters['fid']] = $parameters['fid']; - } - $user_activity['activity'] = "newthread"; - $user_activity['fid'] = $parameters['fid']; - break; - case "online": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - if($parameters['action'] == "today") - { - $user_activity['activity'] = "woltoday"; - } - else - { - $user_activity['activity'] = "wol"; - } - break; - case "polls": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - // Make the "do" parts the same as the other one. - if($parameters['action'] == "do_newpoll") - { - $user_activity['activity'] = "newpoll"; - } - elseif($parameters['action'] == "do_editpoll") - { - $user_activity['activity'] = "editpoll"; - } - else - { - $accepted_parameters = array("do_editpoll", "editpoll", "newpoll", "do_newpoll", "showresults", "vote"); - - foreach($accepted_parameters as $action) - { - if($parameters['action'] == $action) - { - $user_activity['activity'] = $action; - break; - } - } - - if(!$user_activity['activity']) - { - $user_activity['activity'] = "showresults"; - } - } - break; - case "printthread": - if(!isset($parameters['tid'])) - { - $parameters['tid'] = 0; - } - $parameters['tid'] = (int)$parameters['tid']; - if($parameters['tid'] > 0) - { - $tid_list[$parameters['tid']] = $parameters['tid']; - } - $user_activity['activity'] = "printthread"; - $user_activity['tid'] = $parameters['tid']; - break; - case "private": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - if($parameters['action'] == "send" || $parameters['action'] == "do_send") - { - $user_activity['activity'] = "private_send"; - } - elseif($parameters['action'] == "read") - { - $user_activity['activity'] = "private_read"; - } - elseif($parameters['action'] == "folders" || $parameters['action'] == "do_folders") - { - $user_activity['activity'] = "private_folders"; - } - else - { - $user_activity['activity'] = "private"; - } - break; - case "ratethread": - $user_activity['activity'] = "ratethread"; - break; - case "report": - $user_activity['activity'] = "report"; - break; - case "reputation": - if(!isset($parameters['uid'])) - { - $parameters['uid'] = 0; - } - $parameters['uid'] = (int)$parameters['uid']; - if($parameters['uid'] > 0) - { - $uid_list[$parameters['uid']] = $parameters['uid']; - } - $user_activity['uid'] = $parameters['uid']; - - if($parameters['action'] == "add") - { - $user_activity['activity'] = "reputation"; - } - else - { - $user_activity['activity'] = "reputation_report"; - } - break; - case "search": - $user_activity['activity'] = "search"; - break; - case "sendthread": - if(!isset($parameters['tid'])) - { - $parameters['tid'] = 0; - } - $parameters['tid'] = (int)$parameters['tid']; - if($parameters['tid'] > 0) - { - $tid_list[$parameters['tid']] = $parameters['tid']; - } - $user_activity['activity'] = "sendthread"; - $user_activity['tid'] = $parameters['tid']; - break; - case "showteam": - $user_activity['activity'] = "showteam"; - break; - case "showthread": - if(!isset($parameters['action'])) - { - $parameters['action'] = 0; - } - if(!isset($parameters['pid'])) - { - $parameters['pid'] = 0; - } - $parameters['pid'] = (int)$parameters['pid']; - if($parameters['pid'] > 0 && $parameters['action'] == "showpost") - { - $pid_list[$parameters['pid']] = $parameters['pid']; - $user_activity['activity'] = "showpost"; - $user_activity['pid'] = $parameters['pid']; - } - else - { - if(!isset($parameters['page'])) - { - $parameters['page'] = 0; - } - $parameters['page'] = (int)$parameters['page']; - $user_activity['page'] = $parameters['page']; - if(!isset($parameters['tid'])) - { - $parameters['tid'] = 0; - } - $parameters['tid'] = (int)$parameters['tid']; - if($parameters['tid'] > 0) - { - $tid_list[$parameters['tid']] = $parameters['tid']; - } - $user_activity['activity'] = "showthread"; - $user_activity['tid'] = $parameters['tid']; - } - break; - case "stats": - $user_activity['activity'] = "stats"; - break; - case "usercp": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - if($parameters['action'] == "profile" || $parameters['action'] == "do_profile") - { - $user_activity['activity'] = "usercp_profile"; - } - elseif($parameters['action'] == "options" || $parameters['action'] == "do_options") - { - $user_activity['activity'] = "usercp_options"; - } - elseif($parameters['action'] == "password" || $parameters['action'] == "do_password") - { - $user_activity['activity'] = "usercp_password"; - } - elseif($parameters['action'] == "editsig" || $parameters['action'] == "do_editsig") - { - $user_activity['activity'] = "usercp_editsig"; - } - elseif($parameters['action'] == "avatar" || $parameters['action'] == "do_avatar") - { - $user_activity['activity'] = "usercp_avatar"; - } - elseif($parameters['action'] == "editlists" || $parameters['action'] == "do_editlists") - { - $user_activity['activity'] = "usercp_editlists"; - } - elseif($parameters['action'] == "favorites") - { - $user_activity['activity'] = "usercp_favorites"; - } - elseif($parameters['action'] == "subscriptions") - { - $user_activity['activity'] = "usercp_subscriptions"; - } - elseif($parameters['action'] == "notepad" || $parameters['action'] == "do_notepad") - { - $user_activity['activity'] = "usercp_notepad"; - } - else - { - $user_activity['activity'] = "usercp"; - } - break; - case "usercp2": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - if($parameters['action'] == "addfavorite" || $parameters['action'] == "removefavorite" || $parameters['action'] == "removefavorites") - { - $user_activity['activity'] = "usercp2_favorites"; - } - else if($parameters['action'] == "addsubscription" || $parameters['action'] == "do_addsubscription" || $parameters['action'] == "removesubscription" || $parameters['action'] == "removesubscriptions") - { - $user_activity['activity'] = "usercp2_subscriptions"; - } - break; - case "portal": - $user_activity['activity'] = "portal"; - break; - case "warnings": - if(!isset($parameters['action'])) - { - $parameters['action'] = ''; - } - if($parameters['action'] == "warn" || $parameters['action'] == "do_warn") - { - $user_activity['activity'] = "warnings_warn"; - } - elseif($parameters['action'] == "do_revoke") - { - $user_activity['activity'] = "warnings_revoke"; - } - elseif($parameters['action'] == "view") - { - $user_activity['activity'] = "warnings_view"; - } - else - { - $user_activity['activity'] = "warnings"; - } - break; - case "nopermission": - $user_activity['activity'] = "nopermission"; - $user_activity['nopermission'] = 1; - break; - default: - $user_activity['activity'] = "unknown"; - break; - } - - // Expects $location to be passed through already sanitized - $user_activity['location'] = $location; - - $user_activity = $plugins->run_hooks("fetch_wol_activity_end", $user_activity); - - return $user_activity; -} - -/** - * Builds a friendly named Who's Online location from an "activity" and array of user data. Assumes fetch_wol_activity has already been called. - * - * @param array $user_activity Array containing activity and essential IDs. - * @return string Location name for the activity being performed. - */ -function build_friendly_wol_location($user_activity) -{ - global $db, $lang, $uid_list, $aid_list, $pid_list, $tid_list, $fid_list, $ann_list, $eid_list, $plugins, $parser, $mybb; - global $threads, $forums, $forums_linkto, $forum_cache, $posts, $announcements, $events, $usernames, $attachments; - - // Fetch forum permissions for this user - $unviewableforums = get_unviewable_forums(); - $inactiveforums = get_inactive_forums(); - $fidnot = ''; - $unviewablefids = $inactivefids = array(); - if($unviewableforums) - { - $fidnot = " AND fid NOT IN ($unviewableforums)"; - $unviewablefids = explode(',', $unviewableforums); - } - if($inactiveforums) - { - $fidnot .= " AND fid NOT IN ($inactiveforums)"; - $inactivefids = explode(',', $inactiveforums); - } - - // Fetch any users - if(!is_array($usernames) && count($uid_list) > 0) - { - $uid_sql = implode(",", $uid_list); - if($uid_sql != $mybb->user['uid']) - { - $query = $db->simple_select("users", "uid,username", "uid IN ($uid_sql)"); - while($user = $db->fetch_array($query)) - { - $usernames[$user['uid']] = htmlspecialchars_uni($user['username']); - } - } - else - { - $usernames[$mybb->user['uid']] = htmlspecialchars_uni($mybb->user['username']); - } - } - - // Fetch any attachments - if(!is_array($attachments) && count($aid_list) > 0) - { - $aid_sql = implode(",", $aid_list); - $query = $db->simple_select("attachments", "aid,pid", "aid IN ($aid_sql)"); - while($attachment = $db->fetch_array($query)) - { - $attachments[$attachment['aid']] = $attachment['pid']; - $pid_list[] = $attachment['pid']; - } - } - - // Fetch any announcements - if(!is_array($announcements) && count($ann_list) > 0) - { - $aid_sql = implode(",", $ann_list); - $query = $db->simple_select("announcements", "aid,subject", "aid IN ({$aid_sql}) {$fidnot}"); - while($announcement = $db->fetch_array($query)) - { - $announcement_title = htmlspecialchars_uni($parser->parse_badwords($announcement['subject'])); - $announcements[$announcement['aid']] = $announcement_title; - } - } - - // Fetch any posts - if(!is_array($posts) && count($pid_list) > 0) - { - $pid_sql = implode(",", $pid_list); - $query = $db->simple_select("posts", "pid,tid", "pid IN ({$pid_sql}) {$fidnot}"); - while($post = $db->fetch_array($query)) - { - $posts[$post['pid']] = $post['tid']; - $tid_list[] = $post['tid']; - } - } - - // Fetch any threads - if(!is_array($threads) && count($tid_list) > 0) - { - $perms = array(); - $tid_sql = implode(",", $tid_list); - $query = $db->simple_select('threads', 'uid, fid, tid, subject, visible, prefix', "tid IN({$tid_sql}) {$fidnot}"); - - $threadprefixes = build_prefixes(); - - while($thread = $db->fetch_array($query)) - { - $thread['threadprefix'] = ''; - if($thread['prefix'] && !empty($threadprefixes[$thread['prefix']])) - { - $thread['threadprefix'] = $threadprefixes[$thread['prefix']]['displaystyle']; - } - if(empty($perms[$thread['fid']])) - { - $perms[$thread['fid']] = forum_permissions($thread['fid']); - } - - if(isset($perms[$thread['fid']]['canonlyviewownthreads']) && $perms[$thread['fid']]['canonlyviewownthreads'] == 1 && $thread['uid'] != $mybb->user['uid'] && !is_moderator($thread['fid'])) - { - continue; - } - - if(is_moderator($thread['fid']) || $thread['visible'] == 1) - { - $thread_title = ''; - if($thread['threadprefix']) - { - $thread_title = $thread['threadprefix'].' '; - } - - $thread_title .= htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - - $threads[$thread['tid']] = $thread_title; - $fid_list[] = $thread['fid']; - } - } - } - - // Fetch any forums - if(!is_array($forums) && count($fid_list) > 0) - { - $fidnot = array_merge($unviewablefids, $inactivefids); - - foreach($forum_cache as $fid => $forum) - { - if(in_array($fid, $fid_list) && !in_array($fid, $fidnot)) - { - $forums[$fid] = $forum['name']; - $forums_linkto[$fid] = $forum['linkto']; - } - } - } - - // And finaly any events - if(!is_array($events) && count($eid_list) > 0) - { - $eid_sql = implode(",", $eid_list); - $query = $db->simple_select("events", "eid,name", "eid IN ($eid_sql)"); - while($event = $db->fetch_array($query)) - { - $events[$event['eid']] = htmlspecialchars_uni($parser->parse_badwords($event['name'])); - } - } - - // Now we've got everything we need we can put a name to the location - switch($user_activity['activity']) - { - // announcement.php functions - case "announcements": - if(!empty($announcements[$user_activity['ann']])) - { - $location_name = $lang->sprintf($lang->viewing_announcements, get_announcement_link($user_activity['ann']), $announcements[$user_activity['ann']]); - } - else - { - $location_name = $lang->viewing_announcements2; - } - break; - // attachment.php actions - case "attachment": - $pid = $attachments[$user_activity['aid']]; - $tid = $posts[$pid]; - if(!empty($threads[$tid])) - { - $location_name = $lang->sprintf($lang->viewing_attachment2, $user_activity['aid'], $threads[$tid], get_thread_link($tid)); - } - else - { - $location_name = $lang->viewing_attachment; - } - break; - // calendar.php functions - case "calendar": - $location_name = $lang->viewing_calendar; - break; - case "calendar_event": - if(!empty($events[$user_activity['eid']])) - { - $location_name = $lang->sprintf($lang->viewing_event2, get_event_link($user_activity['eid']), $events[$user_activity['eid']]); - } - else - { - $location_name = $lang->viewing_event; - } - break; - case "calendar_addevent": - $location_name = $lang->adding_event; - break; - case "calendar_editevent": - $location_name = $lang->editing_event; - break; - case "contact": - $location_name = $lang->viewing_contact_us; - break; - // editpost.php functions - case "editpost": - $location_name = $lang->editing_post; - break; - // forumdisplay.php functions - case "forumdisplay": - if(!empty($forums[$user_activity['fid']])) - { - if($forums_linkto[$user_activity['fid']]) - { - $location_name = $lang->sprintf($lang->forum_redirect_to, get_forum_link($user_activity['fid']), $forums[$user_activity['fid']]); - } - else - { - $location_name = $lang->sprintf($lang->viewing_forum2, get_forum_link($user_activity['fid']), $forums[$user_activity['fid']]); - } - } - else - { - $location_name = $lang->viewing_forum; - } - break; - // index.php functions - case "index": - $location_name = $lang->sprintf($lang->viewing_index, $mybb->settings['bbname']); - break; - // managegroup.php functions - case "managegroup": - $location_name = $lang->managing_group; - break; - // member.php functions - case "member_activate": - $location_name = $lang->activating_account; - break; - case "member_profile": - if(!empty($usernames[$user_activity['uid']])) - { - $location_name = $lang->sprintf($lang->viewing_profile2, get_profile_link($user_activity['uid']), $usernames[$user_activity['uid']]); - } - else - { - $location_name = $lang->viewing_profile; - } - break; - case "member_register": - $location_name = $lang->registering; - break; - case "member": - case "member_login": - // Guest or member? - if($mybb->user['uid'] == 0) - { - $location_name = $lang->logging_in; - } - else - { - $location_name = $lang->logging_in_plain; - } - break; - case "member_logout": - $location_name = $lang->logging_out; - break; - case "member_emailuser": - $location_name = $lang->emailing_user; - break; - case "member_rate": - $location_name = $lang->rating_user; - break; - case "member_resendactivation": - $location_name = $lang->member_resendactivation; - break; - case "member_lostpw": - $location_name = $lang->member_lostpw; - break; - // memberlist.php functions - case "memberlist": - $location_name = $lang->viewing_memberlist; - break; - // misc.php functions - case "misc_dstswitch": - $location_name = $lang->changing_dst; - break; - case "misc_whoposted": - if(!empty($threads[$user_activity['tid']])) - { - $location_name = $lang->sprintf($lang->viewing_whoposted2, get_thread_link($user_activity['tid']), $threads[$user_activity['tid']]); - } - else - { - $location_name = $lang->viewing_whoposted; - } - break; - case "misc_markread": - $location_name = $lang->sprintf($lang->marking_read, $mybb->post_code); - break; - case "misc_help": - $location_name = $lang->viewing_helpdocs; - break; - case "misc_buddypopup": - $location_name = $lang->viewing_buddylist; - break; - case "misc_smilies": - $location_name = $lang->viewing_smilies; - break; - case "misc_syndication": - $location_name = $lang->viewing_syndication; - break; - case "misc_imcenter": - $location_name = $lang->viewing_imcenter; - break; - // modcp.php functions - case "modcp_modlogs": - $location_name = $lang->viewing_modlogs; - break; - case "modcp_announcements": - $location_name = $lang->managing_announcements; - break; - case "modcp_finduser": - $location_name = $lang->search_for_user; - break; - case "modcp_warninglogs": - $location_name = $lang->managing_warninglogs; - break; - case "modcp_ipsearch": - $location_name = $lang->searching_ips; - break; - case "modcp_report": - $location_name = $lang->viewing_reports; - break; - case "modcp_new_announcement": - $location_name = $lang->adding_announcement; - break; - case "modcp_delete_announcement": - $location_name = $lang->deleting_announcement; - break; - case "modcp_edit_announcement": - $location_name = $lang->editing_announcement; - break; - case "modcp_mod_queue": - $location_name = $lang->managing_modqueue; - break; - case "modcp_editprofile": - $location_name = $lang->editing_user_profiles; - break; - case "modcp_banning": - $location_name = $lang->managing_bans; - break; - case "modcp": - $location_name = $lang->viewing_modcp; - break; - // moderation.php functions - case "moderation": - $location_name = $lang->using_modtools; - break; - // newreply.php functions - case "newreply": - if(!empty($threads[$user_activity['tid']])) - { - $location_name = $lang->sprintf($lang->replying_thread2, get_thread_link($user_activity['tid']), $threads[$user_activity['tid']]); - } - else - { - $location_name = $lang->replying_thread; - } - break; - // newthread.php functions - case "newthread": - if(!empty($forums[$user_activity['fid']])) - { - $location_name = $lang->sprintf($lang->posting_thread2, get_forum_link($user_activity['fid']), $forums[$user_activity['fid']]); - } - else - { - $location_name = $lang->posting_thread; - } - break; - // online.php functions - case "wol": - $location_name = $lang->viewing_wol; - break; - case "woltoday": - $location_name = $lang->viewing_woltoday; - break; - // polls.php functions - case "newpoll": - $location_name = $lang->creating_poll; - break; - case "editpoll": - $location_name = $lang->editing_poll; - break; - case "showresults": - $location_name = $lang->viewing_pollresults; - break; - case "vote": - $location_name = $lang->voting_poll; - break; - // printthread.php functions - case "printthread": - if(!empty($threads[$user_activity['tid']])) - { - $location_name = $lang->sprintf($lang->printing_thread2, get_thread_link($user_activity['tid']), $threads[$user_activity['tid']]); - } - else - { - $location_name = $lang->printing_thread; - } - break; - // private.php functions - case "private_send": - $location_name = $lang->sending_pm; - break; - case "private_read": - $location_name = $lang->reading_pm; - break; - case "private_folders": - $location_name = $lang->editing_pmfolders; - break; - case "private": - $location_name = $lang->using_pmsystem; - break; - /* Ratethread functions */ - case "ratethread": - $location_name = $lang->rating_thread; - break; - // report.php functions - case "report": - $location_name = $lang->reporting_post; - break; - // reputation.php functions - case "reputation": - $location_name = $lang->sprintf($lang->giving_reputation, get_profile_link($user_activity['uid']), $usernames[$user_activity['uid']]); - break; - case "reputation_report": - if(!empty($usernames[$user_activity['uid']])) - { - $location_name = $lang->sprintf($lang->viewing_reputation_report, "reputation.php?uid={$user_activity['uid']}", $usernames[$user_activity['uid']]); - } - else - { - $location_name = $lang->sprintf($lang->viewing_reputation_report2); - } - break; - // search.php functions - case "search": - $location_name = $lang->sprintf($lang->searching_forum, $mybb->settings['bbname']); - break; - // showthread.php functions - case "showthread": - if(!empty($threads[$user_activity['tid']])) - { - $pagenote = ''; - $location_name = $lang->sprintf($lang->reading_thread2, get_thread_link($user_activity['tid']), $threads[$user_activity['tid']], $pagenote); - } - else - { - $location_name = $lang->reading_thread; - } - break; - case "showpost": - if(!empty($posts[$user_activity['pid']]) && !empty($threads[$posts[$user_activity['pid']]])) - { - $pagenote = ''; - $location_name = $lang->sprintf($lang->reading_thread2, get_thread_link($posts[$user_activity['pid']]), $threads[$posts[$user_activity['pid']]], $pagenote); - } - else - { - $location_name = $lang->reading_thread; - } - break; - // showteam.php functions - case "showteam": - $location_name = $lang->viewing_team; - break; - // stats.php functions - case "stats": - $location_name = $lang->viewing_stats; - break; - // usercp.php functions - case "usercp_profile": - $location_name = $lang->updating_profile; - break; - case "usercp_editlists": - $location_name = $lang->managing_buddyignorelist; - break; - case "usercp_options": - $location_name = $lang->updating_options; - break; - case "usercp_editsig": - $location_name = $lang->editing_signature; - break; - case "usercp_avatar": - $location_name = $lang->changing_avatar; - break; - case "usercp_subscriptions": - $location_name = $lang->viewing_subscriptions; - break; - case "usercp_favorites": - $location_name = $lang->viewing_favorites; - break; - case "usercp_notepad": - $location_name = $lang->editing_pad; - break; - case "usercp_password": - $location_name = $lang->editing_password; - break; - case "usercp": - $location_name = $lang->user_cp; - break; - case "usercp2_favorites": - $location_name = $lang->managing_favorites; - break; - case "usercp2_subscriptions": - $location_name = $lang->managing_subscriptions; - break; - case "portal": - $location_name = $lang->viewing_portal; - break; - // sendthread.php functions - case "sendthread": - $location_name = $lang->sending_thread; - break; - // warnings.php functions - case "warnings_revoke": - $location_name = $lang->revoking_warning; - break; - case "warnings_warn": - $location_name = $lang->warning_user; - break; - case "warnings_view": - $location_name = $lang->viewing_warning; - break; - case "warnings": - $location_name = $lang->managing_warnings; - break; - } - - $plugin_array = array('user_activity' => &$user_activity, 'location_name' => &$location_name); - $plugins->run_hooks("build_friendly_wol_location_end", $plugin_array); - - if(isset($user_activity['nopermission']) && $user_activity['nopermission'] == 1) - { - $location_name = $lang->viewing_noperms; - } - - if(!$location_name) - { - $location_name = $lang->sprintf($lang->unknown_location, $user_activity['location']); - } - - return $location_name; -} - -/** - * Build a Who's Online row for a specific user - * - * @param array $user Array of user information including activity information - * @return string Formatted online row - */ -function build_wol_row($user) -{ - global $mybb, $lang, $templates, $theme, $session, $db; - - // We have a registered user - if($user['uid'] > 0) - { - // Only those with "canviewwolinvis" permissions can view invisible users - if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid']) - { - // Append an invisible mark if the user is invisible - if($user['invisible'] == 1) - { - $invisible_mark = "*"; - } - else - { - $invisible_mark = ''; - } - - $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); - $online_name = build_profile_link($user['username'], $user['uid']).$invisible_mark; - } - } - // We have a bot - elseif(!empty($user['bot'])) - { - $online_name = format_name($user['bot'], $user['usergroup']); - } - // Otherwise we've got a plain old guest - else - { - $online_name = format_name($lang->guest, 1); - } - - $online_time = my_date($mybb->settings['timeformat'], $user['time']); - - // Fetch the location name for this users activity - $location = build_friendly_wol_location($user['activity']); - - // Can view IPs, then fetch the IP template - if($mybb->usergroup['canviewonlineips'] == 1) - { - $user['ip'] = my_inet_ntop($db->unescape_binary($user['ip'])); - - if($mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canuseipsearch'] == 1) - { - eval("\$lookup = \"".$templates->get("online_row_ip_lookup")."\";"); - } - - eval("\$user_ip = \"".$templates->get("online_row_ip")."\";"); - } - else - { - $user_ip = $lookup = $user['ip'] = ''; - } - - $online_row = ''; - // And finally if we have permission to view this user, return the completed online row - if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid']) - { - eval("\$online_row = \"".$templates->get("online_row")."\";"); - } - return $online_row; -} diff --git a/html/forums/inc/functions_post.php b/html/forums/inc/functions_post.php deleted file mode 100644 index b4af7d0..0000000 --- a/html/forums/inc/functions_post.php +++ /dev/null @@ -1,1007 +0,0 @@ -settings['pmsallowhtml']; - $parser_options['allow_mycode'] = $mybb->settings['pmsallowmycode']; - $parser_options['allow_smilies'] = $mybb->settings['pmsallowsmilies']; - $parser_options['allow_imgcode'] = $mybb->settings['pmsallowimgcode']; - $parser_options['allow_videocode'] = $mybb->settings['pmsallowvideocode']; - $parser_options['me_username'] = $post['username']; - $parser_options['filter_badwords'] = 1; - $id = $pmid; - break; - case 3: // Announcement - global $announcementarray, $message; - $parser_options['allow_html'] = $announcementarray['allowhtml']; - $parser_options['allow_mycode'] = $announcementarray['allowmycode']; - $parser_options['allow_smilies'] = $announcementarray['allowsmilies']; - $parser_options['allow_imgcode'] = 1; - $parser_options['allow_videocode'] = 1; - $parser_options['me_username'] = $post['username']; - $parser_options['filter_badwords'] = 1; - $id = $announcementarray['aid']; - break; - default: // Regular post - global $forum, $thread, $tid; - $oldforum = $forum; - $id = (int)$post['pid']; - $idtype = 'pid'; - $parser_options['allow_html'] = $forum['allowhtml']; - $parser_options['allow_mycode'] = $forum['allowmycode']; - $parser_options['allow_smilies'] = $forum['allowsmilies']; - $parser_options['allow_imgcode'] = $forum['allowimgcode']; - $parser_options['allow_videocode'] = $forum['allowvideocode']; - $parser_options['filter_badwords'] = 1; - - if(!$post['username']) - { - $post['username'] = $lang->guest; - } - - if($post['userusername']) - { - $parser_options['me_username'] = $post['userusername']; - } - else - { - $parser_options['me_username'] = $post['username']; - } - break; - } - - $post['username'] = htmlspecialchars_uni($post['username']); - $post['userusername'] = htmlspecialchars_uni($post['userusername']); - - if(!$postcounter) - { // Used to show the # of the post - if($page > 1) - { - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - $postcounter = $mybb->settings['postsperpage']*($page-1); - } - else - { - $postcounter = 0; - } - $post_extra_style = "border-top-width: 0;"; - } - elseif($mybb->input['mode'] == "threaded") - { - $post_extra_style = "border-top-width: 0;"; - } - else - { - $post_extra_style = "margin-top: 5px;"; - } - - if(!$altbg) - { // Define the alternate background colour if this is the first post - $altbg = "trow1"; - } - $postcounter++; - - // Format the post date and time using my_date - $post['postdate'] = my_date('relative', $post['dateline']); - - // Dont want any little 'nasties' in the subject - $post['subject'] = $parser->parse_badwords($post['subject']); - - // Pm's have been htmlspecialchars_uni()'ed already. - if($post_type != 2) - { - $post['subject'] = htmlspecialchars_uni($post['subject']); - } - - if(empty($post['subject'])) - { - $post['subject'] = ' '; - } - - $post['author'] = $post['uid']; - $post['subject_title'] = $post['subject']; - - // Get the usergroup - if($post['userusername']) - { - if(!$post['displaygroup']) - { - $post['displaygroup'] = $post['usergroup']; - } - $usergroup = $groupscache[$post['displaygroup']]; - } - else - { - $usergroup = $groupscache[1]; - } - - if(!is_array($titlescache)) - { - $cached_titles = $cache->read("usertitles"); - if(!empty($cached_titles)) - { - foreach($cached_titles as $usertitle) - { - $titlescache[$usertitle['posts']] = $usertitle; - } - } - - if(is_array($titlescache)) - { - krsort($titlescache); - } - unset($usertitle, $cached_titles); - } - - // Work out the usergroup/title stuff - $post['groupimage'] = ''; - if(!empty($usergroup['image'])) - { - $language = $mybb->settings['bblanguage']; - if(!empty($mybb->user['language'])) - { - $language = $mybb->user['language']; - } - - $usergroup['image'] = str_replace("{lang}", $language, $usergroup['image']); - $usergroup['image'] = str_replace("{theme}", $theme['imgdir'], $usergroup['image']); - eval("\$post['groupimage'] = \"".$templates->get("postbit_groupimage")."\";"); - - if($mybb->settings['postlayout'] == "classic") - { - $post['groupimage'] .= "
    "; - } - } - - if($post['userusername']) - { - // This post was made by a registered user - $post['username'] = $post['userusername']; - $post['profilelink_plain'] = get_profile_link($post['uid']); - $post['username_formatted'] = format_name($post['username'], $post['usergroup'], $post['displaygroup']); - $post['profilelink'] = build_profile_link($post['username_formatted'], $post['uid']); - - if(trim($post['usertitle']) != "") - { - $hascustomtitle = 1; - } - - if($usergroup['usertitle'] != "" && !$hascustomtitle) - { - $post['usertitle'] = $usergroup['usertitle']; - } - elseif(is_array($titlescache) && !$usergroup['usertitle']) - { - reset($titlescache); - foreach($titlescache as $key => $titleinfo) - { - if($post['postnum'] >= $key) - { - if(!$hascustomtitle) - { - $post['usertitle'] = $titleinfo['title']; - } - $post['stars'] = $titleinfo['stars']; - $post['starimage'] = $titleinfo['starimage']; - break; - } - } - } - - $post['usertitle'] = htmlspecialchars_uni($post['usertitle']); - - if($usergroup['stars']) - { - $post['stars'] = $usergroup['stars']; - } - - if(empty($post['starimage'])) - { - $post['starimage'] = $usergroup['starimage']; - } - - if($post['starimage'] && $post['stars']) - { - // Only display stars if we have an image to use... - $post['starimage'] = str_replace("{theme}", $theme['imgdir'], $post['starimage']); - - $post['userstars'] = ''; - for($i = 0; $i < $post['stars']; ++$i) - { - eval("\$post['userstars'] .= \"".$templates->get("postbit_userstar", 1, 0)."\";"); - } - - $post['userstars'] .= "
    "; - } - - $postnum = $post['postnum']; - $post['postnum'] = my_number_format($post['postnum']); - $post['threadnum'] = my_number_format($post['threadnum']); - - // Determine the status to show for the user (Online/Offline/Away) - $timecut = TIME_NOW - $mybb->settings['wolcutoff']; - if($post['lastactive'] > $timecut && ($post['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1) && $post['lastvisit'] != $post['lastactive']) - { - eval("\$post['onlinestatus'] = \"".$templates->get("postbit_online")."\";"); - } - else - { - if($post['away'] == 1 && $mybb->settings['allowaway'] != 0) - { - eval("\$post['onlinestatus'] = \"".$templates->get("postbit_away")."\";"); - } - else - { - eval("\$post['onlinestatus'] = \"".$templates->get("postbit_offline")."\";"); - } - } - - $post['useravatar'] = ''; - if(isset($mybb->user['showavatars']) && $mybb->user['showavatars'] != 0 || $mybb->user['uid'] == 0) - { - $useravatar = format_avatar($post['avatar'], $post['avatardimensions'], $mybb->settings['postmaxavatarsize']); - eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar")."\";"); - } - - $post['button_find'] = ''; - if($mybb->usergroup['cansearch'] == 1) - { - eval("\$post['button_find'] = \"".$templates->get("postbit_find")."\";"); - } - - if($mybb->settings['enablepms'] == 1 && (($post['receivepms'] != 0 && $usergroup['canusepms'] != 0 && $mybb->usergroup['cansendpms'] == 1 && my_strpos(",".$post['ignorelist'].",", ",".$mybb->user['uid'].",") === false) || $mybb->usergroup['canoverridepm'] == 1)) - { - eval("\$post['button_pm'] = \"".$templates->get("postbit_pm")."\";"); - } - - $post['button_rep'] = ''; - if($post_type != 3 && $mybb->settings['enablereputation'] == 1 && $mybb->settings['postrep'] == 1 && $mybb->usergroup['cangivereputations'] == 1 && $usergroup['usereputationsystem'] == 1 && ($mybb->settings['posrep'] || $mybb->settings['neurep'] || $mybb->settings['negrep']) && $post['uid'] != $mybb->user['uid'] && (!isset($post['visible']) || $post['visible'] == 1) && (!isset($thread['visible']) || $thread['visible'] == 1)) - { - if(!$post['pid']) - { - $post['pid'] = 0; - } - - eval("\$post['button_rep'] = \"".$templates->get("postbit_rep_button")."\";"); - } - - if($post['website'] != "" && !is_member($mybb->settings['hidewebsite']) && $usergroup['canchangewebsite'] == 1) - { - $post['website'] = htmlspecialchars_uni($post['website']); - eval("\$post['button_www'] = \"".$templates->get("postbit_www")."\";"); - } - else - { - $post['button_www'] = ""; - } - - if($post['hideemail'] != 1 && $mybb->usergroup['cansendemail'] == 1) - { - eval("\$post['button_email'] = \"".$templates->get("postbit_email")."\";"); - } - else - { - $post['button_email'] = ""; - } - - $post['userregdate'] = my_date($mybb->settings['regdateformat'], $post['regdate']); - - // Work out the reputation this user has (only show if not announcement) - if($post_type != 3 && $usergroup['usereputationsystem'] != 0 && $mybb->settings['enablereputation'] == 1) - { - $post['userreputation'] = get_reputation($post['reputation'], $post['uid']); - eval("\$post['replink'] = \"".$templates->get("postbit_reputation")."\";"); - } - - // Showing the warning level? (only show if not announcement) - if($post_type != 3 && $mybb->settings['enablewarningsystem'] != 0 && $usergroup['canreceivewarnings'] != 0 && ($mybb->usergroup['canwarnusers'] != 0 || ($mybb->user['uid'] == $post['uid'] && $mybb->settings['canviewownwarning'] != 0))) - { - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - - $warning_level = round($post['warningpoints']/$mybb->settings['maxwarningpoints']*100); - if($warning_level > 100) - { - $warning_level = 100; - } - $warning_level = get_colored_warning_level($warning_level); - - // If we can warn them, it's not the same person, and we're in a PM or a post. - if($mybb->usergroup['canwarnusers'] != 0 && $post['uid'] != $mybb->user['uid'] && ($post_type == 0 || $post_type == 2)) - { - eval("\$post['button_warn'] = \"".$templates->get("postbit_warn")."\";"); - $warning_link = "warnings.php?uid={$post['uid']}"; - } - else - { - $post['button_warn'] = ''; - $warning_link = "usercp.php"; - } - eval("\$post['warninglevel'] = \"".$templates->get("postbit_warninglevel")."\";"); - } - - if($post_type != 3 && $post_type != 1 && purgespammer_show($post['postnum'], $post['usergroup'], $post['uid'])) - { - eval("\$post['button_purgespammer'] = \"".$templates->get('postbit_purgespammer')."\";"); - } - - // Display profile fields on posts - only if field is filled in - if(is_array($profile_fields)) - { - foreach($profile_fields as $field) - { - $fieldfid = "fid{$field['fid']}"; - if(!empty($post[$fieldfid])) - { - $post['fieldvalue'] = ''; - $post['fieldname'] = htmlspecialchars_uni($field['name']); - - $thing = explode("\n", $field['type'], "2"); - $type = trim($thing[0]); - $useropts = explode("\n", $post[$fieldfid]); - - if(is_array($useropts) && ($type == "multiselect" || $type == "checkbox")) - { - foreach($useropts as $val) - { - if($val != '') - { - eval("\$post['fieldvalue_option'] .= \"".$templates->get("postbit_profilefield_multiselect_value")."\";"); - } - } - if($post['fieldvalue_option'] != '') - { - eval("\$post['fieldvalue'] .= \"".$templates->get("postbit_profilefield_multiselect")."\";"); - } - } - else - { - $field_parser_options = array( - "allow_html" => $field['allowhtml'], - "allow_mycode" => $field['allowmycode'], - "allow_smilies" => $field['allowsmilies'], - "allow_imgcode" => $field['allowimgcode'], - "allow_videocode" => $field['allowvideocode'], - #"nofollow_on" => 1, - "filter_badwords" => 1 - ); - - if($customfield['type'] == "textarea") - { - $field_parser_options['me_username'] = $post['username']; - } - else - { - $field_parser_options['nl2br'] = 0; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $field_parser_options['allow_imgcode'] = 0; - } - - $post['fieldvalue'] = $parser->parse_message($post[$fieldfid], $field_parser_options); - } - - eval("\$post['profilefield'] .= \"".$templates->get("postbit_profilefield")."\";"); - } - } - } - - eval("\$post['user_details'] = \"".$templates->get("postbit_author_user")."\";"); - } - else - { // Message was posted by a guest or an unknown user - $post['profilelink'] = format_name($post['username'], 1); - - if($usergroup['usertitle']) - { - $post['usertitle'] = $usergroup['usertitle']; - } - else - { - $post['usertitle'] = $lang->guest; - } - - $post['usertitle'] = htmlspecialchars_uni($post['usertitle']); - - $usergroup['title'] = $lang->na; - - $post['userregdate'] = $lang->na; - $post['postnum'] = $lang->na; - $post['button_profile'] = ''; - $post['button_email'] = ''; - $post['button_www'] = ''; - $post['signature'] = ''; - $post['button_pm'] = ''; - $post['button_find'] = ''; - $post['onlinestatus'] = ''; - $post['replink'] = ''; - eval("\$post['user_details'] = \"".$templates->get("postbit_author_guest")."\";"); - } - - $post['button_edit'] = ''; - $post['button_quickdelete'] = ''; - $post['button_quickrestore'] = ''; - $post['button_quote'] = ''; - $post['button_quickquote'] = ''; - $post['button_report'] = ''; - $post['button_reply_pm'] = ''; - $post['button_replyall_pm'] = ''; - $post['button_forward_pm'] = ''; - $post['button_delete_pm'] = ''; - - // For private messages, fetch the reply/forward/delete icons - if($post_type == 2 && $post['pmid']) - { - global $replyall; - - eval("\$post['button_reply_pm'] = \"".$templates->get("postbit_reply_pm")."\";"); - eval("\$post['button_forward_pm'] = \"".$templates->get("postbit_forward_pm")."\";"); - eval("\$post['button_delete_pm'] = \"".$templates->get("postbit_delete_pm")."\";"); - - if($replyall == true) - { - eval("\$post['button_replyall_pm'] = \"".$templates->get("postbit_replyall_pm")."\";"); - } - } - - $post['editedmsg'] = ''; - if(!$post_type) - { - if(!isset($forumpermissions)) - { - $forumpermissions = forum_permissions($fid); - } - - // Figure out if we need to show an "edited by" message - if($post['edituid'] != 0 && $post['edittime'] != 0 && $post['editusername'] != "" && (($mybb->settings['showeditedby'] != 0 && $usergroup['cancp'] == 0) || ($mybb->settings['showeditedbyadmin'] != 0 && $usergroup['cancp'] == 1))) - { - $post['editdate'] = my_date('relative', $post['edittime']); - $post['editnote'] = $lang->sprintf($lang->postbit_edited, $post['editdate']); - $post['editusername'] = htmlspecialchars_uni($post['editusername']); - $post['editedprofilelink'] = build_profile_link($post['editusername'], $post['edituid']); - $editreason = ""; - if($post['editreason'] != "") - { - $post['editreason'] = $parser->parse_badwords($post['editreason']); - $post['editreason'] = htmlspecialchars_uni($post['editreason']); - eval("\$editreason = \"".$templates->get("postbit_editedby_editreason")."\";"); - } - eval("\$post['editedmsg'] = \"".$templates->get("postbit_editedby")."\";"); - } - - $time = TIME_NOW; - if((is_moderator($fid, "caneditposts") || ($forumpermissions['caneditposts'] == 1 && $mybb->user['uid'] == $post['uid'] && $thread['closed'] != 1 && ($mybb->usergroup['edittimelimit'] == 0 || $mybb->usergroup['edittimelimit'] != 0 && $post['dateline'] > ($time-($mybb->usergroup['edittimelimit']*60))))) && $mybb->user['uid'] != 0) - { - eval("\$post['button_edit'] = \"".$templates->get("postbit_edit")."\";"); - } - - // Quick Delete button - $can_delete_thread = $can_delete_post = 0; - if($mybb->user['uid'] == $post['uid'] && $thread['closed'] == 0) - { - if($forumpermissions['candeletethreads'] == 1 && $postcounter == 1) - { - $can_delete_thread = 1; - } - else if($forumpermissions['candeleteposts'] == 1 && $postcounter != 1) - { - $can_delete_post = 1; - } - } - - $postbit_qdelete = $postbit_qrestore = ''; - if($mybb->user['uid'] != 0) - { - if((is_moderator($fid, "candeleteposts") || is_moderator($fid, "cansoftdeleteposts") || $can_delete_post == 1) && $postcounter != 1) - { - $postbit_qdelete = $lang->postbit_qdelete_post; - $display = ''; - if($post['visible'] == -1) - { - $display = "none"; - } - eval("\$post['button_quickdelete'] = \"".$templates->get("postbit_quickdelete")."\";"); - } - else if((is_moderator($fid, "candeletethreads") || is_moderator($fid, "cansoftdeletethreads") || $can_delete_thread == 1) && $postcounter == 1) - { - $postbit_qdelete = $lang->postbit_qdelete_thread; - $display = ''; - if($post['visible'] == -1) - { - $display = "none"; - } - eval("\$post['button_quickdelete'] = \"".$templates->get("postbit_quickdelete")."\";"); - } - - // Restore Post - if(is_moderator($fid, "canrestoreposts") && $postcounter != 1) - { - $display = "none"; - if($post['visible'] == -1) - { - $display = ''; - } - $postbit_qrestore = $lang->postbit_qrestore_post; - eval("\$post['button_quickrestore'] = \"".$templates->get("postbit_quickrestore")."\";"); - } - - // Restore Thread - else if(is_moderator($fid, "canrestorethreads") && $postcounter == 1) - { - $display = "none"; - if($post['visible'] == -1) - { - $display = ""; - } - $postbit_qrestore = $lang->postbit_qrestore_thread; - eval("\$post['button_quickrestore'] = \"".$templates->get("postbit_quickrestore")."\";"); - } - } - - if(!isset($ismod)) - { - $ismod = is_moderator($fid); - } - - // Inline moderation stuff - if($ismod) - { - if(isset($mybb->cookies[$inlinecookie]) && my_strpos($mybb->cookies[$inlinecookie], "|".$post['pid']."|")) - { - $inlinecheck = "checked=\"checked\""; - $inlinecount++; - } - else - { - $inlinecheck = ""; - } - - eval("\$post['inlinecheck'] = \"".$templates->get("postbit_inlinecheck")."\";"); - - if($post['visible'] == 0) - { - $invisiblepost = 1; - } - } - else - { - $post['inlinecheck'] = ""; - } - $post['postlink'] = get_post_link($post['pid'], $post['tid']); - $post_number = my_number_format($postcounter); - eval("\$post['posturl'] = \"".$templates->get("postbit_posturl")."\";"); - global $forum, $thread; - - if($forum['open'] != 0 && ($thread['closed'] != 1 || is_moderator($forum['fid'], "canpostclosedthreads")) && ($thread['uid'] == $mybb->user['uid'] || $forumpermissions['canonlyreplyownthreads'] != 1)) - { - eval("\$post['button_quote'] = \"".$templates->get("postbit_quote")."\";"); - } - - if($forumpermissions['canpostreplys'] != 0 && ($thread['uid'] == $mybb->user['uid'] || $forumpermissions['canonlyreplyownthreads'] != 1) && ($thread['closed'] != 1 || is_moderator($fid, "canpostclosedthreads")) && $mybb->settings['multiquote'] != 0 && $forum['open'] != 0 && !$post_type) - { - eval("\$post['button_multiquote'] = \"".$templates->get("postbit_multiquote")."\";"); - } - - if($mybb->user['uid'] != "0") - { - eval("\$post['button_report'] = \"".$templates->get("postbit_report")."\";"); - } - } - elseif($post_type == 3) // announcement - { - if($mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canmanageannounce'] == 1 && is_moderator($fid, "canmanageannouncements")) - { - eval("\$post['button_edit'] = \"".$templates->get("announcement_edit")."\";"); - eval("\$post['button_quickdelete'] = \"".$templates->get("announcement_quickdelete")."\";"); - } - } - - $post['iplogged'] = ''; - $show_ips = $mybb->settings['logip']; - $ipaddress = my_inet_ntop($db->unescape_binary($post['ipaddress'])); - - // Show post IP addresses... PMs now can have IP addresses too as of 1.8! - if($post_type == 2) - { - $show_ips = $mybb->settings['showpmip']; - } - if(!$post_type || $post_type == 2) - { - if($show_ips != "no" && !empty($post['ipaddress'])) - { - if($show_ips == "show") - { - eval("\$post['iplogged'] = \"".$templates->get("postbit_iplogged_show")."\";"); - } - else if($show_ips == "hide" && (is_moderator($fid, "canviewips") || $mybb->usergroup['issupermod'])) - { - $action = 'getip'; - if($post_type == 2) - { - $action = 'getpmip'; - } - eval("\$post['iplogged'] = \"".$templates->get("postbit_iplogged_hiden")."\";"); - } - } - } - - $post['poststatus'] = ''; - if(!$post_type && $post['visible'] != 1) - { - if(is_moderator($fid, "canviewdeleted") && $postcounter != 1 && $post['visible'] == -1) - { - $status_type = $lang->postbit_post_deleted; - } - else if(is_moderator($fid, "canviewunapprove") && $postcounter != 1 && $post['visible'] == 0) - { - $status_type = $lang->postbit_post_unapproved; - } - else if(is_moderator($fid, "canviewdeleted") && $postcounter == 1 && $post['visible'] == -1) - { - $status_type = $lang->postbit_thread_deleted; - } - else if(is_moderator($fid, "canviewunapprove") && $postcounter == 1 && $post['visible'] == 0) - { - $status_type = $lang->postbit_thread_unapproved; - } - - eval("\$post['poststatus'] = \"".$templates->get("postbit_status")."\";"); - } - - if(isset($post['smilieoff']) && $post['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_videocode'] = 0; - } - - // If we have incoming search terms to highlight - get it done. - if(!empty($mybb->input['highlight'])) - { - $parser_options['highlight'] = $mybb->input['highlight']; - $post['subject'] = $parser->highlight_message($post['subject'], $parser_options['highlight']); - } - - $post['message'] = $parser->parse_message($post['message'], $parser_options); - - $post['attachments'] = ''; - if($mybb->settings['enableattachments'] != 0) - { - get_post_attachments($id, $post); - } - - if(isset($post['includesig']) && $post['includesig'] != 0 && $post['username'] && $post['signature'] != "" && ($mybb->user['uid'] == 0 || $mybb->user['showsigs'] != 0) - && ($post['suspendsignature'] == 0 || $post['suspendsignature'] == 1 && $post['suspendsigtime'] != 0 && $post['suspendsigtime'] < TIME_NOW) && $usergroup['canusesig'] == 1 - && ($usergroup['canusesigxposts'] == 0 || $usergroup['canusesigxposts'] > 0 && $postnum > $usergroup['canusesigxposts']) && !is_member($mybb->settings['hidesignatures'])) - { - $sig_parser = array( - "allow_html" => $mybb->settings['sightml'], - "allow_mycode" => $mybb->settings['sigmycode'], - "allow_smilies" => $mybb->settings['sigsmilies'], - "allow_imgcode" => $mybb->settings['sigimgcode'], - "me_username" => $parser_options['me_username'], - "filter_badwords" => 1 - ); - - if($usergroup['signofollow']) - { - $sig_parser['nofollow_on'] = 1; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $sig_parser['allow_imgcode'] = 0; - } - - $post['signature'] = $parser->parse_message($post['signature'], $sig_parser); - eval("\$post['signature'] = \"".$templates->get("postbit_signature")."\";"); - } - else - { - $post['signature'] = ""; - } - - $icon_cache = $cache->read("posticons"); - - if(isset($post['icon']) && $post['icon'] > 0 && $icon_cache[$post['icon']]) - { - $icon = $icon_cache[$post['icon']]; - - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$post['icon'] = \"".$templates->get("postbit_icon")."\";"); - } - else - { - $post['icon'] = ""; - } - - $post_visibility = $ignore_bit = $deleted_bit = ''; - switch($post_type) - { - case 1: // Message preview - $post = $plugins->run_hooks("postbit_prev", $post); - break; - case 2: // Private message - $post = $plugins->run_hooks("postbit_pm", $post); - break; - case 3: // Announcement - $post = $plugins->run_hooks("postbit_announcement", $post); - break; - default: // Regular post - $post = $plugins->run_hooks("postbit", $post); - - if(!isset($ignored_users)) - { - $ignored_users = array(); - if($mybb->user['uid'] > 0 && $mybb->user['ignorelist'] != "") - { - $ignore_list = explode(',', $mybb->user['ignorelist']); - foreach($ignore_list as $uid) - { - $ignored_users[$uid] = 1; - } - } - } - - // Has this post been deleted but can be viewed? Hide this post - if($post['visible'] == -1 && is_moderator($fid, "canviewdeleted")) - { - $deleted_message = $lang->sprintf($lang->postbit_deleted_post_user, $post['username']); - eval("\$deleted_bit = \"".$templates->get("postbit_deleted")."\";"); - $post_visibility = "display: none;"; - } - - // Is this author on the ignore list of the current user? Hide this post - if(is_array($ignored_users) && $post['uid'] != 0 && isset($ignored_users[$post['uid']]) && $ignored_users[$post['uid']] == 1 && empty($deleted_bit)) - { - $ignored_message = $lang->sprintf($lang->postbit_currently_ignoring_user, $post['username']); - eval("\$ignore_bit = \"".$templates->get("postbit_ignored")."\";"); - $post_visibility = "display: none;"; - } - break; - } - - if($forumpermissions['canviewdeletionnotice'] == 1 && $post['visible'] == -1 && $post_type == 0 && !is_moderator($fid, "canviewdeleted")) - { - eval("\$postbit = \"".$templates->get("postbit_deleted_member")."\";"); - } - else - { - if($mybb->settings['postlayout'] == "classic") - { - eval("\$postbit = \"".$templates->get("postbit_classic")."\";"); - } - else - { - eval("\$postbit = \"".$templates->get("postbit")."\";"); - } - } - - $GLOBALS['post'] = ""; - - return $postbit; -} - -/** - * Fetch the attachments for a specific post and parse inline [attachment=id] code. - * Note: assumes you have $attachcache, an array of attachments set up. - * - * @param int $id The ID of the item. - * @param array $post The post or item passed by reference. - */ -function get_post_attachments($id, &$post) -{ - global $attachcache, $mybb, $theme, $templates, $forumpermissions, $lang; - - $validationcount = 0; - $tcount = 0; - $post['attachmentlist'] = $post['thumblist'] = $post['imagelist'] = ''; - if(!isset($forumpermissions)) - { - $forumpermissions = forum_permissions($post['fid']); - } - - if(isset($attachcache[$id]) && is_array($attachcache[$id])) - { // This post has 1 or more attachments - foreach($attachcache[$id] as $aid => $attachment) - { - if($attachment['visible']) - { // There is an attachment thats visible! - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - $attachment['filesize'] = get_friendly_size($attachment['filesize']); - $ext = get_extension($attachment['filename']); - if($ext == "jpeg" || $ext == "gif" || $ext == "bmp" || $ext == "png" || $ext == "jpg") - { - $isimage = true; - } - else - { - $isimage = false; - } - $attachment['icon'] = get_attachment_icon($ext); - $attachment['downloads'] = my_number_format($attachment['downloads']); - - if(!$attachment['dateuploaded']) - { - $attachment['dateuploaded'] = $attachment['dateline']; - } - $attachdate = my_date('relative', $attachment['dateuploaded']); - // Support for [attachment=id] code - if(stripos($post['message'], "[attachment=".$attachment['aid']."]") !== false) - { - // Show as thumbnail IF image is big && thumbnail exists && setting=='thumb' - // Show as full size image IF setting=='fullsize' || (image is small && permissions allow) - // Show as download for all other cases - if($attachment['thumbnail'] != "SMALL" && $attachment['thumbnail'] != "" && $mybb->settings['attachthumbnails'] == "yes") - { - eval("\$attbit = \"".$templates->get("postbit_attachments_thumbnails_thumbnail")."\";"); - } - elseif((($attachment['thumbnail'] == "SMALL" && $forumpermissions['candlattachments'] == 1) || $mybb->settings['attachthumbnails'] == "no") && $isimage) - { - eval("\$attbit = \"".$templates->get("postbit_attachments_images_image")."\";"); - } - else - { - eval("\$attbit = \"".$templates->get("postbit_attachments_attachment")."\";"); - } - $post['message'] = preg_replace("#\[attachment=".$attachment['aid']."]#si", $attbit, $post['message']); - } - else - { - // Show as thumbnail IF image is big && thumbnail exists && setting=='thumb' - // Show as full size image IF setting=='fullsize' || (image is small && permissions allow) - // Show as download for all other cases - if($attachment['thumbnail'] != "SMALL" && $attachment['thumbnail'] != "" && $mybb->settings['attachthumbnails'] == "yes") - { - eval("\$post['thumblist'] .= \"".$templates->get("postbit_attachments_thumbnails_thumbnail")."\";"); - if($tcount == 5) - { - $thumblist .= "
    "; - $tcount = 0; - } - ++$tcount; - } - elseif((($attachment['thumbnail'] == "SMALL" && $forumpermissions['candlattachments'] == 1) || $mybb->settings['attachthumbnails'] == "no") && $isimage) - { - eval("\$post['imagelist'] .= \"".$templates->get("postbit_attachments_images_image")."\";"); - } - else - { - eval("\$post['attachmentlist'] .= \"".$templates->get("postbit_attachments_attachment")."\";"); - } - } - } - else - { - $validationcount++; - } - } - if($validationcount > 0 && is_moderator($post['fid'], "canviewunapprove")) - { - if($validationcount == 1) - { - $postbit_unapproved_attachments = $lang->postbit_unapproved_attachment; - } - else - { - $postbit_unapproved_attachments = $lang->sprintf($lang->postbit_unapproved_attachments, $validationcount); - } - eval("\$post['attachmentlist'] .= \"".$templates->get("postbit_attachments_attachment_unapproved")."\";"); - } - if($post['thumblist']) - { - eval("\$post['attachedthumbs'] = \"".$templates->get("postbit_attachments_thumbnails")."\";"); - } - else - { - $post['attachedthumbs'] = ''; - } - if($post['imagelist']) - { - eval("\$post['attachedimages'] = \"".$templates->get("postbit_attachments_images")."\";"); - } - else - { - $post['attachedimages'] = ''; - } - if($post['attachmentlist'] || $post['thumblist'] || $post['imagelist']) - { - eval("\$post['attachments'] = \"".$templates->get("postbit_attachments")."\";"); - } - } -} diff --git a/html/forums/inc/functions_posting.php b/html/forums/inc/functions_posting.php deleted file mode 100644 index 59cf394..0000000 --- a/html/forums/inc/functions_posting.php +++ /dev/null @@ -1,225 +0,0 @@ -settings['maxquotedepth']; - } - $rmdepth = (int)$rmdepth; - - // find all tokens - // note, at various places, we use the prefix "s" to denote "start" (ie [quote]) and "e" to denote "end" (ie [/quote]) - preg_match_all("#\[quote(=(?:"|\"|')?.*?(?:"|\"|')?)?\]#si", $text, $smatches, PREG_OFFSET_CAPTURE | PREG_PATTERN_ORDER); - preg_match_all("#\[/quote\]#i", $text, $ematches, PREG_OFFSET_CAPTURE | PREG_PATTERN_ORDER); - - if(empty($smatches) || empty($ematches)) - { - return $text; - } - - // make things easier by only keeping offsets - $soffsets = $eoffsets = array(); - foreach($smatches[0] as $id => $match) - { - $soffsets[] = $match[1]; - } - // whilst we loop, also remove unnecessary end tokens at the start of string - $first_token = $soffsets[0]; - foreach($ematches[0] as $id => $match) - { - if($match[1] > $first_token) - { - $eoffsets[] = $match[1]; - } - } - unset($smatches, $ematches); - - - // elmininate malformed quotes by parsing like the parser does (preg_replace in a while loop) - // NOTE: this is slightly inaccurate because the parser considers [quote] and [quote=...] to be different things - $good_offsets = array(); - while(!empty($soffsets) && !empty($eoffsets)) // don't rely on this condition - an end offset before the start offset will cause this to loop indefinitely - { - $last_offset = 0; - foreach($soffsets as $sk => &$soffset) - { - if($soffset >= $last_offset) - { - // search for corresponding eoffset - foreach($eoffsets as $ek => &$eoffset) // use foreach instead of for to get around indexing issues with unset - { - if($eoffset > $soffset) - { - // we've found a pair - $good_offsets[$soffset] = 1; - $good_offsets[$eoffset] = -1; - $last_offset = $eoffset; - - unset($soffsets[$sk], $eoffsets[$ek]); - break; - } - } - } - } - - // remove any end offsets occurring before start offsets - $first_start = reset($soffsets); - foreach($eoffsets as $ek => &$eoffset) - { - if($eoffset < $first_start) - { - unset($eoffsets[$ek]); - } - else - { - break; - } - } - // we don't need to remove start offsets after the last end offset, because the loop will deplete something before that - } - - if(empty($good_offsets)) - { - return $text; - } - ksort($good_offsets); - - - // we now have a list of all the ordered tokens, ready to go through - $depth = 0; - $remove_regions = array(); - $tmp_start = 0; - foreach($good_offsets as $offset => $dincr) - { - if($depth == $rmdepth && $dincr == 1) - { - $tmp_start = $offset; - } - $depth += $dincr; - if($depth == $rmdepth && $dincr == -1) - { - $remove_regions[] = array($tmp_start, $offset); - } - } - - if(empty($remove_regions)) - { - return $text; - } - - // finally, remove the quotes from the string - $newtext = ''; - $cpy_start = 0; - foreach($remove_regions as &$region) - { - $newtext .= substr($text, $cpy_start, $region[0]-$cpy_start); - $cpy_start = $region[1]+8; // 8 = strlen('[/quote]') - // clean up newlines - $next_char = $text{$region[1]+8}; - if($next_char == "\r" || $next_char == "\n") - { - ++$cpy_start; - if($next_char == "\r" && $text{$region[1]+9} == "\n") - { - ++$cpy_start; - } - } - } - // append remaining end text - if(strlen($text) != $cpy_start) - { - $newtext .= substr($text, $cpy_start); - } - - // we're done - return $newtext; -} - -/** - * Performs cleanup of a quoted message, such as replacing /me commands, before presenting quoted post to the user. - * - * @param array $quoted_post quoted post info, taken from the DB (requires the 'message', 'username', 'pid' and 'dateline' entries to be set; will use 'userusername' if present. requires 'quote_is_pm' if quote message is from a private message) - * @param boolean $remove_message_quotes whether to call remove_message_quotes() on the quoted message - * @return string the cleaned up message, wrapped in a quote tag - */ - -function parse_quoted_message(&$quoted_post, $remove_message_quotes=true) -{ - global $parser, $lang, $plugins; - if(!isset($parser)) - { - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - } - - // Swap username over if we have a registered user - if($quoted_post['userusername']) - { - $quoted_post['username'] = $quoted_post['userusername']; - } - // Clean up the message - $quoted_post['message'] = preg_replace(array( - '#(^|\r|\n)/me ([^\r\n<]*)#i', - '#(^|\r|\n)/slap ([^\r\n<]*)#i', - '#\[attachment=([0-9]+?)\]#i' - ), array( - "\\1* {$quoted_post['username']} \\2", - "\\1* {$quoted_post['username']} {$lang->slaps} \\2 {$lang->with_trout}", - "", - ), $quoted_post['message']); - $quoted_post['message'] = $parser->parse_badwords($quoted_post['message']); - - if($remove_message_quotes) - { - global $mybb; - $max_quote_depth = (int)$mybb->settings['maxquotedepth']; - if($max_quote_depth) - { - $quoted_post['message'] = remove_message_quotes($quoted_post['message'], $max_quote_depth-1); // we're wrapping the message in a [quote] tag, so take away one quote depth level - } - } - - $quoted_post = $plugins->run_hooks("parse_quoted_message", $quoted_post); - - $extra = ''; - if(empty($quoted_post['quote_is_pm'])) - { - $extra = " pid='{$quoted_post['pid']}' dateline='{$quoted_post['dateline']}'"; - } - - $quote_char = '"'; - if(strpos($quoted_post['username'], '"') !== false) - { - $quote_char = "'"; - } - - return "[quote={$quote_char}{$quoted_post['username']}{$quote_char}{$extra}]\n{$quoted_post['message']}\n[/quote]\n\n"; -} - diff --git a/html/forums/inc/functions_rebuild.php b/html/forums/inc/functions_rebuild.php deleted file mode 100644 index 8313ca3..0000000 --- a/html/forums/inc/functions_rebuild.php +++ /dev/null @@ -1,134 +0,0 @@ -simple_select("forums", "SUM(threads) AS numthreads, SUM(posts) AS numposts, SUM(unapprovedthreads) AS numunapprovedthreads, SUM(unapprovedposts) AS numunapprovedposts, SUM(deletedthreads) AS numdeletedthreads, SUM(deletedposts) AS numdeletedposts"); - $stats = $db->fetch_array($query); - - $query = $db->simple_select("users", "COUNT(uid) AS users"); - $stats['numusers'] = $db->fetch_field($query, 'users'); - - update_stats($stats, true); -} - -/** - * Completely rebuild the counters for a particular forum (useful if they become out of sync) - * - * @param int $fid The forum ID - */ -function rebuild_forum_counters($fid) -{ - global $db; - - // Fetch the number of threads and replies in this forum (Approved only) - $query = $db->simple_select('threads', 'COUNT(tid) AS threads, SUM(replies) AS replies, SUM(unapprovedposts) AS unapprovedposts, SUM(deletedposts) AS deletedposts', "fid='$fid' AND visible='1'"); - $count = $db->fetch_array($query); - $count['posts'] = $count['threads'] + $count['replies']; - - // Fetch the number of threads and replies in this forum (Unapproved only) - $query = $db->simple_select('threads', 'COUNT(tid) AS threads, SUM(replies)+SUM(unapprovedposts)+SUM(deletedposts) AS impliedunapproved', "fid='$fid' AND visible='0'"); - $count2 = $db->fetch_array($query); - $count['unapprovedthreads'] = $count2['threads']; - $count['unapprovedposts'] += $count2['impliedunapproved']+$count2['threads']; - - // Fetch the number of threads and replies in this forum (Soft deleted only) - $query = $db->simple_select('threads', 'COUNT(tid) AS threads, SUM(replies)+SUM(unapprovedposts)+SUM(deletedposts) AS implieddeleted', "fid='$fid' AND visible='-1'"); - $count3 = $db->fetch_array($query); - $count['deletedthreads'] = $count3['threads']; - $count['deletedposts'] += $count3['implieddeleted']+$count3['threads']; - - update_forum_counters($fid, $count); - update_forum_lastpost($fid); -} - -/** - * Completely rebuild the counters for a particular thread (useful if they become out of sync) - * - * @param int $tid The thread ID - */ -function rebuild_thread_counters($tid) -{ - global $db; - - $thread = get_thread($tid); - $count = array(); - - $query = $db->simple_select("posts", "COUNT(pid) AS replies", "tid='{$tid}' AND pid!='{$thread['firstpost']}' AND visible='1'"); - $count['replies'] = $db->fetch_field($query, "replies"); - - // Unapproved posts - $query = $db->simple_select("posts", "COUNT(pid) AS unapprovedposts", "tid='{$tid}' AND pid != '{$thread['firstpost']}' AND visible='0'"); - $count['unapprovedposts'] = $db->fetch_field($query, "unapprovedposts"); - - // Soft deleted posts - $query = $db->simple_select("posts", "COUNT(pid) AS deletedposts", "tid='{$tid}' AND pid != '{$thread['firstpost']}' AND visible='-1'"); - $count['deletedposts'] = $db->fetch_field($query, "deletedposts"); - - // Attachment count - $query = $db->query(" - SELECT COUNT(aid) AS attachment_count - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (a.pid=p.pid) - WHERE p.tid='$tid' AND a.visible=1 - "); - $count['attachmentcount'] = $db->fetch_field($query, "attachment_count"); - - update_thread_counters($tid, $count); - update_thread_data($tid); -} - -/** - * Completely rebuild poll counters for a particular poll (useful if they become out of sync) - * - * @param int $pid The poll ID - */ -function rebuild_poll_counters($pid) -{ - global $db; - - $query = $db->simple_select("polls", "pid, numoptions", "pid='".(int)$pid."'"); - $poll = $db->fetch_array($query); - - $votes = array(); - $query = $db->simple_select("pollvotes", "voteoption, COUNT(vid) AS vote_count", "pid='{$poll['pid']}'", array('group_by' => 'voteoption')); - while($vote = $db->fetch_array($query)) - { - $votes[$vote['voteoption']] = $vote['vote_count']; - } - - $voteslist = ''; - $numvotes = 0; - for($i = 1; $i <= $poll['numoptions']; ++$i) - { - if(trim($voteslist != '')) - { - $voteslist .= "||~|~||"; - } - - if(!isset($votes[$i]) || (int)$votes[$i] <= 0) - { - $votes[$i] = "0"; - } - $voteslist .= $votes[$i]; - $numvotes = $numvotes + $votes[$i]; - } - - $updatedpoll = array( - "votes" => $db->escape_string($voteslist), - "numvotes" => (int)$numvotes - ); - $db->update_query("polls", $updatedpoll, "pid='{$poll['pid']}'"); -} diff --git a/html/forums/inc/functions_search.php b/html/forums/inc/functions_search.php deleted file mode 100644 index 7e4e7b9..0000000 --- a/html/forums/inc/functions_search.php +++ /dev/null @@ -1,1821 +0,0 @@ -simple_select("forums", "pid,disporder,fid,password,name", "linkto='' AND active!=0", array('order_by' => "pid, disporder")); - while($forum = $db->fetch_array($query)) - { - $pforumcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - } - if(!is_array($permissioncache)) - { - $permissioncache = forum_permissions(); - } - if(is_array($pforumcache[$pid])) - { - foreach($pforumcache[$pid] as $key => $main) - { - foreach($main as $key => $forum) - { - $perms = $permissioncache[$forum['fid']]; - if(($perms['canview'] == 1 || $mybb->settings['hideprivateforums'] == 0) && $perms['cansearch'] != 0) - { - if($selitem == $forum['fid']) - { - $optionselected = "selected"; - $selecteddone = "1"; - } - else - { - $optionselected = ''; - $selecteddone = "0"; - } - if($forum['password'] != '') - { - if($mybb->cookies['forumpass'][$forum['fid']] === md5($mybb->user['uid'].$forum['password'])) - { - $pwverified = 1; - } - else - { - $pwverified = 0; - } - } - if(empty($forum['password']) || $pwverified == 1) - { - eval("\$forumlistbits .= \"".$templates->get("search_forumlist_forum")."\";"); - } - if(!empty($pforumcache[$forum['fid']])) - { - $newdepth = $depth."    "; - $forumlistbits .= make_searchable_forums($forum['fid'], $selitem, 0, $newdepth); - } - } - } - } - } - if($addselect) - { - eval("\$forumlist = \"".$templates->get("search_forumlist")."\";"); - } - return $forumlist; -} - -/** - * Build a comma separated list of the forums this user cannot search - * - * @param int $pid The parent ID to build from - * @param int $first First rotation or not (leave at default) - * @return string return a CSV list of forums the user cannot search - */ -function get_unsearchable_forums($pid=0, $first=1) -{ - global $db, $forum_cache, $permissioncache, $mybb, $unsearchableforums, $unsearchable, $templates, $forumpass; - - $pid = (int)$pid; - - if(!is_array($forum_cache)) - { - // Get Forums - $query = $db->simple_select("forums", "fid,parentlist,password,active", '', array('order_by' => 'pid, disporder')); - while($forum = $db->fetch_array($query)) - { - $forum_cache[$forum['fid']] = $forum; - } - } - if(!is_array($permissioncache)) - { - $permissioncache = forum_permissions(); - } - foreach($forum_cache as $fid => $forum) - { - if($permissioncache[$forum['fid']]) - { - $perms = $permissioncache[$forum['fid']]; - } - else - { - $perms = $mybb->usergroup; - } - - $pwverified = 1; - if($forum['password'] != '') - { - if($mybb->cookies['forumpass'][$forum['fid']] !== md5($mybb->user['uid'].$forum['password'])) - { - $pwverified = 0; - } - } - - $parents = explode(",", $forum['parentlist']); - if(is_array($parents)) - { - foreach($parents as $parent) - { - if($forum_cache[$parent]['active'] == 0) - { - $forum['active'] = 0; - } - } - } - - if($perms['canview'] != 1 || $perms['cansearch'] != 1 || $pwverified == 0 || $forum['active'] == 0) - { - if($unsearchableforums) - { - $unsearchableforums .= ","; - } - $unsearchableforums .= "'{$forum['fid']}'"; - } - } - $unsearchable = $unsearchableforums; - - // Get our unsearchable password protected forums - $pass_protected_forums = get_password_protected_forums(); - - if($unsearchable && $pass_protected_forums) - { - $unsearchable .= ","; - } - - if($pass_protected_forums) - { - $unsearchable .= implode(",", $pass_protected_forums); - } - - return $unsearchable; -} - -/** - * Build a array list of the forums this user cannot search due to password protection - * - * @param array $fids the fids to check (leave blank to check all forums) - * @return array return a array list of password protected forums the user cannot search - */ -function get_password_protected_forums($fids=array()) -{ - global $forum_cache, $mybb; - - if(!is_array($fids)) - { - return false; - } - - if(!is_array($forum_cache)) - { - $forum_cache = cache_forums(); - if(!$forum_cache) - { - return false; - } - } - - if(empty($fids)) - { - $fids = array_keys($forum_cache); - } - - $pass_fids = array(); - foreach($fids as $fid) - { - if(empty($forum_cache[$fid]['password'])) - { - continue; - } - - if(md5($mybb->user['uid'].$forum_cache[$fid]['password']) !== $mybb->cookies['forumpass'][$fid]) - { - $pass_fids[] = $fid; - $child_list = get_child_list($fid); - } - - if(is_array($child_list)) - { - $pass_fids = array_merge($pass_fids, $child_list); - } - } - return array_unique($pass_fids); -} - -/** - * Clean search keywords and make them safe for querying - * - * @param string $keywords The keywords to be cleaned - * @return string The cleaned keywords - */ -function clean_keywords($keywords) -{ - global $db; - - $keywords = my_strtolower($keywords); - $keywords = $db->escape_string_like($keywords); - $keywords = preg_replace("#\*{2,}#s", "*", $keywords); - $keywords = str_replace("*", "%", $keywords); - $keywords = preg_replace("#\s+#s", " ", $keywords); - $keywords = str_replace('\\"', '"', $keywords); - - // Search for "and" or "or" and remove if it's at the beginning - $keywords = trim($keywords); - if(my_strpos($keywords, "or") === 0) - { - $keywords = substr_replace($keywords, "", 0, 2); - } - - if(my_strpos($keywords, "and") === 0) - { - $keywords = substr_replace($keywords, "", 0, 3); - } - - return $keywords; -} - -/** - * Clean search keywords for fulltext searching, making them safe for querying - * - * @param string $keywords The keywords to be cleaned - * @return string|bool The cleaned keywords or false on failure - */ -function clean_keywords_ft($keywords) -{ - if(!$keywords) - { - return false; - } - $keywords = my_strtolower($keywords); - $keywords = str_replace("%", "\\%", $keywords); - $keywords = preg_replace("#\*{2,}#s", "*", $keywords); - $keywords = preg_replace("#([\[\]\|\.\,:])#s", " ", $keywords); - // Separate braces for further processing - $keywords = preg_replace("#((\+|-|<|>|~)?\(|\))#s", " $1 ", $keywords); - $keywords = preg_replace("#\s+#s", " ", $keywords); - - $words = array(array()); - - // Fulltext search syntax validation: http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html - // Search for phrases - $keywords = explode("\"", $keywords); - $boolean = array('+'); - // Brace depth - $depth = 0; - $phrase_operator = '+'; - foreach($keywords as $phrase) - { - $phrase = trim($phrase); - if($phrase != '') - { - if($inquote) - { - if($phrase_operator) - { - $boolean[$depth] = $phrase_operator; - } - // Phrases do not need further processing - $words[$depth][] = "{$boolean[$depth]}\"{$phrase}\""; - $boolean[$depth] = $phrase_operator = '+'; - } - else - { - // Split words - $split_words = preg_split("#\s{1,}#", $phrase, -1); - if(!is_array($split_words)) - { - continue; - } - if(!$inquote) - { - // Save possible operator in front of phrase - $last_char = substr($phrase, -1); - if($last_char == '+' || $last_char == '-' || $last_char == '<' || $last_char == '>' || $last_char == '~') - { - $phrase_operator = $last_char; - } - } - foreach($split_words as $word) - { - $word = trim($word); - if($word == "or") - { - $boolean[$depth] = ''; - // Remove "and" operator from previous element - $last = array_pop($words[$depth]); - if($last) - { - if(substr($last, 0, 1) == '+') - { - $last = substr($last, 1); - } - $words[$depth][] = $last; - } - } - elseif($word == "and") - { - $boolean[$depth] = "+"; - } - elseif($word == "not") - { - $boolean[$depth] = "-"; - } - // Closing braces - elseif($word == ")") - { - // Ignore when no brace was opened - if($depth > 0) - { - $words[$depth-1][] = $boolean[$depth-1].'('.implode(' ', $words[$depth]).')'; - --$depth; - } - } - // Valid operators for opening braces - elseif($word == '+(' || $word == '-(' || $word == '<(' || $word == '>(' || $word == '~(' || $word == '(') - { - if(strlen($word) == 2) - { - $boolean[$depth] = substr($word, 0, 1); - } - $words[++$depth] = array(); - $boolean[$depth] = '+'; - } - else - { - $operator = substr($word, 0, 1); - switch($operator) - { - // Allowed operators - case '-': - case '+': - case '>': - case '<': - case '~': - $word = substr($word, 1); - break; - default: - $operator = $boolean[$depth]; - break; - } - // Removed operators that are only allowed at the beginning - $word = preg_replace("#(-|\+|<|>|~|@)#s", '', $word); - // Removing wildcards at the beginning http://bugs.mysql.com/bug.php?id=72605 - $word = preg_replace("#^\*#s", '', $word); - $word = $operator.$word; - if(strlen($word) <= 1) - { - continue; - } - $words[$depth][] = $word; - $boolean[$depth] = '+'; - } - } - } - } - $inquote = !$inquote; - } - - // Close mismatching braces - while($depth > 0) - { - $words[$depth-1][] = $boolean[$depth-1].'('.implode(' ', $words[$depth]).')'; - --$depth; - } - - $keywords = implode(' ', $words[0]); - return $keywords; -} - -/* Database engine specific search functions */ - -/** - * Perform a thread and post search under MySQL or MySQLi - * - * @param array $search Array of search data - * @return array Array of search data with results mixed in - */ -function privatemessage_perform_search_mysql($search) -{ - global $mybb, $db, $lang; - - $keywords = clean_keywords($search['keywords']); - if(!$keywords && !$search['sender']) - { - error($lang->error_nosearchterms); - } - - if($mybb->settings['minsearchword'] < 1) - { - $mybb->settings['minsearchword'] = 3; - } - - $subject_lookin = ""; - $message_lookin = ""; - $searchsql = "uid='{$mybb->user['uid']}'"; - - if($keywords) - { - // Complex search - $keywords = " {$keywords} "; - - switch($db->type) - { - case 'mysql': - case 'mysqli': - $sfield = 'subject'; - $mfield = 'message'; - break; - default: - $sfield = 'LOWER(subject)'; - $mfield = 'LOWER(message)'; - break; - } - - if(preg_match("#\s(and|or)\s#", $keywords)) - { - $string = "AND"; - if($search['subject'] == 1) - { - $string = "OR"; - $subject_lookin = " AND ("; - } - - if($search['message'] == 1) - { - $message_lookin = " {$string} ("; - } - - // Expand the string by double quotes - $keywords_exp = explode("\"", $keywords); - $inquote = false; - $boolean = ''; - - foreach($keywords_exp as $phrase) - { - // If we're not in a double quoted section - if(!$inquote) - { - // Expand out based on search operators (and, or) - $matches = preg_split("#\s{1,}(and|or)\s{1,}#", $phrase, -1, PREG_SPLIT_DELIM_CAPTURE); - $count_matches = count($matches); - - for($i=0; $i < $count_matches; ++$i) - { - $word = trim($matches[$i]); - if(empty($word)) - { - continue; - } - // If this word is a search operator set the boolean - if($i % 2 && ($word == "and" || $word == "or")) - { - if($i <= 1) - { - if($search['subject'] && $search['message'] && $subject_lookin == " AND (") - { - // We're looking for anything, check for a subject lookin - continue; - } - elseif($search['subject'] && !$search['message'] && $subject_lookin == " AND (") - { - // Just in a subject? - continue; - } - elseif(!$search['subject'] && $search['message'] && $message_lookin == " {$string} (") - { - // Just in a message? - continue; - } - } - - $boolean = $word; - } - // Otherwise check the length of the word as it is a normal search term - else - { - $word = trim($word); - // Word is too short - show error message - if(my_strlen($word) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - - // Add terms to search query - if($search['subject'] == 1) - { - $subject_lookin .= " $boolean {$sfield} LIKE '%{$word}%'"; - } - if($search['message'] == 1) - { - $message_lookin .= " $boolean {$mfield} LIKE '%{$word}%'"; - } - $boolean = 'AND'; - } - } - } - // In the middle of a quote (phrase) - else - { - $phrase = str_replace(array("+", "-", "*"), '', trim($phrase)); - if(my_strlen($phrase) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - // Add phrase to search query - $subject_lookin .= " $boolean {$sfield} LIKE '%{$phrase}%'"; - if($search['message'] == 1) - { - $message_lookin .= " $boolean {$mfield} LIKE '%{$phrase}%'"; - } - $boolean = 'AND'; - } - - // Check to see if we have any search terms and not a malformed SQL string - $error = false; - if($search['subject'] && $search['message'] && $subject_lookin == " AND (") - { - // We're looking for anything, check for a subject lookin - $error = true; - } - elseif($search['subject'] && !$search['message'] && $subject_lookin == " AND (") - { - // Just in a subject? - $error = true; - } - elseif(!$search['subject'] && $search['message'] && $message_lookin == " {$string} (") - { - // Just in a message? - $error = true; - } - - if($error == true) - { - // There are no search keywords to look for - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - - $inquote = !$inquote; - } - - if($search['subject'] == 1) - { - $subject_lookin .= ")"; - } - - if($search['message'] == 1) - { - $message_lookin .= ")"; - } - - $searchsql .= "{$subject_lookin} {$message_lookin}"; - } - else - { - $keywords = str_replace("\"", '', trim($keywords)); - if(my_strlen($keywords) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - - // If we're looking in both, then find matches in either the subject or the message - if($search['subject'] == 1 && $search['message'] == 1) - { - $searchsql .= " AND ({$sfield} LIKE '%{$keywords}%' OR {$mfield} LIKE '%{$keywords}%')"; - } - else - { - if($search['subject'] == 1) - { - $searchsql .= " AND {$sfield} LIKE '%{$keywords}%'"; - } - - if($search['message'] == 1) - { - $searchsql .= " AND {$mfield} LIKE '%{$keywords}%'"; - } - } - } - } - - if($search['sender']) - { - $userids = array(); - $search['sender'] = my_strtolower($search['sender']); - - switch($db->type) - { - case 'mysql': - case 'mysqli': - $field = 'username'; - break; - default: - $field = 'LOWER(username)'; - break; - } - $query = $db->simple_select("users", "uid", "{$field} LIKE '%".$db->escape_string_like($search['sender'])."%'"); - while($user = $db->fetch_array($query)) - { - $userids[] = $user['uid']; - } - - if(count($userids) < 1) - { - error($lang->error_nosearchresults); - } - else - { - $userids = implode(',', $userids); - $searchsql .= " AND fromid IN (".$userids.")"; - } - } - - if(!is_array($search['folder'])) - { - $search['folder'] = array($search['folder']); - } - - if(!empty($search['folder'])) - { - $folderids = array(); - - $search['folder'] = array_map("intval", $search['folder']); - - $folderids = implode(',', $search['folder']); - - if($folderids) - { - $searchsql .= " AND folder IN (".$folderids.")"; - } - } - - if($search['status']) - { - $searchsql .= " AND ("; - if($search['status']['new']) - { - $statussql[] = " status='0' "; - } - if($search['status']['replied']) - { - $statussql[] = " status='3' "; - } - if($search['status']['forwarded']) - { - $statussql[] = " status='4' "; - } - if($search['status']['read']) - { - $statussql[] = " (status != '0' AND readtime > '0') "; - } - // Sent Folder - if(in_array(2, $search['folder'])) - { - $statussql[] = " status='1' "; - } - $statussql = implode("OR", $statussql); - $searchsql .= $statussql.")"; - } - - // Run the search - $pms = array(); - $query = $db->simple_select("privatemessages", "pmid", $searchsql); - while($pm = $db->fetch_array($query)) - { - $pms[$pm['pmid']] = $pm['pmid']; - } - - if(count($pms) < 1) - { - error($lang->error_nosearchresults); - } - $pms = implode(',', $pms); - - return array( - "querycache" => $pms - ); -} - -/** - * Perform a help document search under MySQL or MySQLi - * - * @param array $search Array of search data - * @return array Array of search data with results mixed in - */ -function helpdocument_perform_search_mysql($search) -{ - global $mybb, $db, $lang; - - $keywords = clean_keywords($search['keywords']); - if(!$keywords && !$search['sender']) - { - error($lang->error_nosearchterms); - } - - if($mybb->settings['minsearchword'] < 1) - { - $mybb->settings['minsearchword'] = 3; - } - - $name_lookin = ""; - $document_lookin = ""; - $searchsql = "enabled='1'"; - - if($keywords) - { - switch($db->type) - { - case 'mysql': - case 'mysqli': - $nfield = 'name'; - $dfield = 'document'; - break; - default: - $nfield = 'LOWER(name)'; - $dfield = 'LOWER(document)'; - break; - } - - // Complex search - $keywords = " {$keywords} "; - if(preg_match("#\s(and|or)\s#", $keywords)) - { - $string = "AND"; - if($search['name'] == 1) - { - $string = "OR"; - $name_lookin = " AND ("; - } - - if($search['document'] == 1) - { - $document_lookin = " {$string} ("; - } - - // Expand the string by double quotes - $keywords_exp = explode("\"", $keywords); - $inquote = false; - - foreach($keywords_exp as $phrase) - { - // If we're not in a double quoted section - if(!$inquote) - { - // Expand out based on search operators (and, or) - $matches = preg_split("#\s{1,}(and|or)\s{1,}#", $phrase, -1, PREG_SPLIT_DELIM_CAPTURE); - $count_matches = count($matches); - - for($i=0; $i < $count_matches; ++$i) - { - $word = trim($matches[$i]); - if(empty($word)) - { - continue; - } - // If this word is a search operator set the boolean - if($i % 2 && ($word == "and" || $word == "or")) - { - if($i <= 1) - { - if($search['name'] && $search['document'] && $name_lookin == " AND (") - { - // We're looking for anything, check for a name lookin - continue; - } - elseif($search['name'] && !$search['document'] && $name_lookin == " AND (") - { - // Just in a name? - continue; - } - elseif(!$search['name'] && $search['document'] && $document_lookin == " {$string} (") - { - // Just in a document? - continue; - } - } - - $boolean = $word; - } - // Otherwise check the length of the word as it is a normal search term - else - { - $word = trim($word); - // Word is too short - show error message - if(my_strlen($word) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - // Add terms to search query - if($search['name'] == 1) - { - $name_lookin .= " $boolean {$nfield} LIKE '%{$word}%'"; - } - if($search['document'] == 1) - { - $document_lookin .= " $boolean {$dfield} LIKE '%{$word}%'"; - } - } - } - } - // In the middle of a quote (phrase) - else - { - $phrase = str_replace(array("+", "-", "*"), '', trim($phrase)); - if(my_strlen($phrase) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - // Add phrase to search query - $name_lookin .= " $boolean {$nfield} LIKE '%{$phrase}%'"; - if($search['document'] == 1) - { - $document_lookin .= " $boolean {$dfield} LIKE '%{$phrase}%'"; - } - } - - // Check to see if we have any search terms and not a malformed SQL string - $error = false; - if($search['name'] && $search['document'] && $name_lookin == " AND (") - { - // We're looking for anything, check for a name lookin - $error = true; - } - elseif($search['name'] && !$search['document'] && $name_lookin == " AND (") - { - // Just in a name? - $error = true; - } - elseif(!$search['name'] && $search['document'] && $document_lookin == " {$string} (") - { - // Just in a document? - $error = true; - } - - if($error == true) - { - // There are no search keywords to look for - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - - $inquote = !$inquote; - } - - if($search['name'] == 1) - { - $name_lookin .= ")"; - } - - if($search['document'] == 1) - { - $document_lookin .= ")"; - } - - $searchsql .= "{$name_lookin} {$document_lookin}"; - } - else - { - $keywords = str_replace("\"", '', trim($keywords)); - if(my_strlen($keywords) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - - // If we're looking in both, then find matches in either the name or the document - if($search['name'] == 1 && $search['document'] == 1) - { - $searchsql .= " AND ({$nfield} LIKE '%{$keywords}%' OR {$dfield} LIKE '%{$keywords}%')"; - } - else - { - if($search['name'] == 1) - { - $searchsql .= " AND {$nfield} LIKE '%{$keywords}%'"; - } - - if($search['document'] == 1) - { - $searchsql .= " AND {$dfield} LIKE '%{$keywords}%'"; - } - } - } - } - - // Run the search - $helpdocs = array(); - $query = $db->simple_select("helpdocs", "hid", $searchsql); - while($help = $db->fetch_array($query)) - { - $helpdocs[$help['hid']] = $help['hid']; - } - - if(count($helpdocs) < 1) - { - error($lang->error_nosearchresults); - } - $helpdocs = implode(',', $helpdocs); - - return array( - "querycache" => $helpdocs - ); -} - -/** - * Perform a thread and post search under MySQL or MySQLi - * - * @param array $search Array of search data - * @return array Array of search data with results mixed in - */ -function perform_search_mysql($search) -{ - global $mybb, $db, $lang, $cache; - - $keywords = clean_keywords($search['keywords']); - if(!$keywords && !$search['author']) - { - error($lang->error_nosearchterms); - } - - if($mybb->settings['minsearchword'] < 1) - { - $mybb->settings['minsearchword'] = 3; - } - - $subject_lookin = $message_lookin = ''; - if($keywords) - { - switch($db->type) - { - case 'mysql': - case 'mysqli': - $tfield = 't.subject'; - $pfield = 'p.message'; - break; - default: - $tfield = 'LOWER(t.subject)'; - $pfield = 'LOWER(p.message)'; - break; - } - - // Complex search - $keywords = " {$keywords} "; - if(preg_match("#\s(and|or)\s#", $keywords)) - { - $subject_lookin = " AND ("; - $message_lookin = " AND ("; - - // Expand the string by double quotes - $keywords_exp = explode("\"", $keywords); - $inquote = false; - $boolean = ''; - - foreach($keywords_exp as $phrase) - { - // If we're not in a double quoted section - if(!$inquote) - { - // Expand out based on search operators (and, or) - $matches = preg_split("#\s{1,}(and|or)\s{1,}#", $phrase, -1, PREG_SPLIT_DELIM_CAPTURE); - $count_matches = count($matches); - - for($i=0; $i < $count_matches; ++$i) - { - $word = trim($matches[$i]); - if(empty($word)) - { - continue; - } - // If this word is a search operator set the boolean - if($i % 2 && ($word == "and" || $word == "or")) - { - if($i <= 1 && $subject_lookin == " AND (") - { - continue; - } - - $boolean = $word; - } - // Otherwise check the length of the word as it is a normal search term - else - { - $word = trim($word); - // Word is too short - show error message - if(my_strlen($word) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - // Add terms to search query - $subject_lookin .= " $boolean {$tfield} LIKE '%{$word}%'"; - if($search['postthread'] == 1) - { - $message_lookin .= " $boolean {$pfield} LIKE '%{$word}%'"; - } - $boolean = 'AND'; - } - } - } - // In the middle of a quote (phrase) - else - { - $phrase = str_replace(array("+", "-", "*"), '', trim($phrase)); - if(my_strlen($phrase) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - // Add phrase to search query - $subject_lookin .= " $boolean {$tfield} LIKE '%{$phrase}%'"; - if($search['postthread'] == 1) - { - $message_lookin .= " $boolean {$pfield} LIKE '%{$phrase}%'"; - } - $boolean = 'AND'; - } - - if($subject_lookin == " AND (") - { - // There are no search keywords to look for - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - - $inquote = !$inquote; - } - $subject_lookin .= ")"; - $message_lookin .= ")"; - } - else - { - $keywords = str_replace("\"", '', trim($keywords)); - if(my_strlen($keywords) < $mybb->settings['minsearchword']) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - $subject_lookin = " AND {$tfield} LIKE '%{$keywords}%'"; - if($search['postthread'] == 1) - { - $message_lookin = " AND {$pfield} LIKE '%{$keywords}%'"; - } - } - } - $post_usersql = ''; - $thread_usersql = ''; - if($search['author']) - { - $userids = array(); - $search['author'] = my_strtolower($search['author']); - if($search['matchusername']) - { - $user = get_user_by_username($search['author']); - if($user) - { - $userids[] = $user['uid']; - } - } - else - { - switch($db->type) - { - case 'mysql': - case 'mysqli': - $field = 'username'; - break; - default: - $field = 'LOWER(username)'; - break; - } - $query = $db->simple_select("users", "uid", "{$field} LIKE '%".$db->escape_string_like($search['author'])."%'"); - while($user = $db->fetch_array($query)) - { - $userids[] = $user['uid']; - } - } - - if(count($userids) < 1) - { - error($lang->error_nosearchresults); - } - else - { - $userids = implode(',', $userids); - $post_usersql = " AND p.uid IN (".$userids.")"; - $thread_usersql = " AND t.uid IN (".$userids.")"; - } - } - $datecut = $post_datecut = $thread_datecut = ''; - if($search['postdate']) - { - if($search['pddir'] == 0) - { - $datecut = "<="; - } - else - { - $datecut = ">="; - } - $now = TIME_NOW; - $datelimit = $now-(86400 * $search['postdate']); - $datecut .= "'$datelimit'"; - $post_datecut = " AND p.dateline $datecut"; - $thread_datecut = " AND t.dateline $datecut"; - } - - $thread_replycut = ''; - if($search['numreplies'] != '' && $search['findthreadst']) - { - if((int)$search['findthreadst'] == 1) - { - $thread_replycut = " AND t.replies >= '".(int)$search['numreplies']."'"; - } - else - { - $thread_replycut = " AND t.replies <= '".(int)$search['numreplies']."'"; - } - } - - $thread_prefixcut = ''; - $prefixlist = array(); - if($search['threadprefix'] && $search['threadprefix'][0] != 'any') - { - foreach($search['threadprefix'] as $threadprefix) - { - $threadprefix = (int)$threadprefix; - $prefixlist[] = $threadprefix; - } - } - if(count($prefixlist) == 1) - { - $thread_prefixcut .= " AND t.prefix='$threadprefix' "; - } - else - { - if(count($prefixlist) > 1) - { - $thread_prefixcut = " AND t.prefix IN (".implode(',', $prefixlist).")"; - } - } - - $forumin = ''; - $fidlist = array(); - $searchin = array(); - if(!is_array($search['forums']) || $search['forums'][0] != "all") - { - if(!is_array($search['forums'])) - { - $search['forums'] = array((int)$search['forums']); - } - // Generate a comma separated list of all groups the user belongs to - $user_groups = $mybb->user['usergroup']; - if($mybb->user['additionalgroups']) - { - $user_groups .= ",".$mybb->user['additionalgroups']; - - // Setup some quick permissions for us - $fcache = $cache->read("forumpermissions"); - $add_groups = explode(",", $mybb->user['additionalgroups']); - } - foreach($search['forums'] as $forum) - { - $forum = (int)$forum; - if(empty($searchin[$forum])) - { - if(isset($add_groups) && is_array($add_groups)) - { - $can_search = 0; - foreach($add_groups as $add_group) - { - // Check to make sure that we have sufficient permissions to search this forum - if(!is_array($fcache[$forum][$add_group]) || $fcache[$forum][$add_group]['cansearch'] == 1 || $mybb->usergroup['cansearch'] == 1) - { - $can_search = 1; - } - } - - if($can_search == 0) - { - // We can't search this forum... - continue; - } - } - - switch($db->type) - { - case "pgsql": - $query = $db->simple_select("forums", "DISTINCT fid", "(','||parentlist||',' LIKE ',%{$forum}%,') = true AND active != 0"); - break; - case "sqlite": - $query = $db->simple_select("forums", "DISTINCT fid", "(','||parentlist||',' LIKE ',%{$forum}%,') > 0 AND active != 0"); - break; - default: - $query = $db->simple_select("forums", "DISTINCT fid", "INSTR(CONCAT(',',parentlist,','),',{$forum},') > 0 AND active != 0"); - } - - while($sforum = $db->fetch_array($query)) - { - $fidlist[] = $sforum['fid']; - } - } - } - if(count($fidlist) == 1) - { - $forumin .= " AND t.fid='$forum' "; - $searchin[$forum] = 1; - } - else - { - if(count($fidlist) > 1) - { - $forumin = " AND t.fid IN (".implode(',', $fidlist).")"; - } - } - } - - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - if($group_permissions = forum_permissions()) - { - foreach($group_permissions as $fid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - } - if(!empty($onlyusfids)) - { - $permsql .= "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $permsql .= " AND t.fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $permsql .= " AND t.fid NOT IN ($inactiveforums)"; - } - - $visiblesql = $post_visiblesql = $plain_post_visiblesql = ""; - if(isset($search['visible'])) - { - if($search['visible'] == 1) - { - $visiblesql = " AND t.visible = '1'"; - - if($search['postthread'] == 1) - { - $post_visiblesql = " AND p.visible = '1'"; - $plain_post_visiblesql = " AND visible = '1'"; - } - } - elseif($search['visible'] == -1) - { - $visiblesql = " AND t.visible = '-1'"; - - if($search['postthread'] == 1) - { - $post_visiblesql = " AND p.visible = '-1'"; - $plain_post_visiblesql = " AND visible = '-1'"; - } - } - else - { - $visiblesql = " AND t.visible == '0'"; - - if($search['postthread'] == 1) - { - $post_visiblesql = " AND p.visible == '0'"; - $plain_post_visiblesql = " AND visible == '0'"; - } - } - } - - // Searching a specific thread? - $tidsql = ''; - if(!empty($search['tid'])) - { - $tidsql = " AND t.tid='".(int)$search['tid']."'"; - } - - $limitsql = ''; - if((int)$mybb->settings['searchhardlimit'] > 0) - { - $limitsql = "LIMIT ".(int)$mybb->settings['searchhardlimit']; - } - - // Searching both posts and thread titles - $threads = array(); - $posts = array(); - $firstposts = array(); - if($search['postthread'] == 1) - { - // No need to search subjects when looking for results within a specific thread - if(empty($search['tid'])) - { - $query = $db->query(" - SELECT t.tid, t.firstpost - FROM ".TABLE_PREFIX."threads t - WHERE 1=1 {$thread_datecut} {$thread_replycut} {$thread_prefixcut} {$forumin} {$thread_usersql} {$permsql} {$visiblesql} AND t.closed NOT LIKE 'moved|%' {$subject_lookin} - {$limitsql} - "); - while($thread = $db->fetch_array($query)) - { - $threads[$thread['tid']] = $thread['tid']; - if($thread['firstpost']) - { - $posts[$thread['tid']] = $thread['firstpost']; - } - } - } - - $query = $db->query(" - SELECT p.pid, p.tid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE 1=1 {$post_datecut} {$thread_replycut} {$thread_prefixcut} {$forumin} {$post_usersql} {$permsql} {$tidsql} {$visiblesql} {$post_visiblesql} AND t.closed NOT LIKE 'moved|%' {$message_lookin} - {$limitsql} - "); - while($post = $db->fetch_array($query)) - { - $posts[$post['pid']] = $post['pid']; - $threads[$post['tid']] = $post['tid']; - } - - if(count($posts) < 1 && count($threads) < 1) - { - error($lang->error_nosearchresults); - } - $threads = implode(',', $threads); - $posts = implode(',', $posts); - - } - // Searching only thread titles - else - { - $query = $db->query(" - SELECT t.tid, t.firstpost - FROM ".TABLE_PREFIX."threads t - WHERE 1=1 {$thread_datecut} {$thread_replycut} {$thread_prefixcut} {$forumin} {$thread_usersql} {$permsql} {$visiblesql} {$subject_lookin} - {$limitsql} - "); - while($thread = $db->fetch_array($query)) - { - $threads[$thread['tid']] = $thread['tid']; - if($thread['firstpost']) - { - $firstposts[$thread['tid']] = $thread['firstpost']; - } - } - if(count($threads) < 1) - { - error($lang->error_nosearchresults); - } - - $threads = implode(',', $threads); - $firstposts = implode(',', $firstposts); - if($firstposts) - { - $query = $db->simple_select("posts", "pid", "pid IN ($firstposts) {$plain_post_visiblesql} {$limitsql}"); - while($post = $db->fetch_array($query)) - { - $posts[$post['pid']] = $post['pid']; - } - $posts = implode(',', $posts); - } - } - return array( - "threads" => $threads, - "posts" => $posts, - "querycache" => '' - ); -} - -/** - * Perform a thread and post search under MySQL or MySQLi using boolean fulltext capabilities - * - * @param array $search Array of search data - * @return array Array of search data with results mixed in - */ -function perform_search_mysql_ft($search) -{ - global $mybb, $db, $lang; - - $keywords = clean_keywords_ft($search['keywords']); - if(!$keywords && !$search['author']) - { - error($lang->error_nosearchterms); - } - - // Attempt to determine minimum word length from MySQL for fulltext searches - $query = $db->query("SHOW VARIABLES LIKE 'ft_min_word_len';"); - $min_length = $db->fetch_field($query, 'Value'); - if(is_numeric($min_length)) - { - $mybb->settings['minsearchword'] = $min_length; - } - // Otherwise, could not fetch - default back to MySQL fulltext default setting - else - { - $mybb->settings['minsearchword'] = 4; - } - - if($keywords) - { - $keywords_exp = explode("\"", $keywords); - $inquote = false; - foreach($keywords_exp as $phrase) - { - if(!$inquote) - { - $split_words = preg_split("#\s{1,}#", $phrase, -1); - foreach($split_words as $word) - { - $word = str_replace(array("+", "-", "*"), '', $word); - if(!$word) - { - continue; - } - if(my_strlen($word) < $mybb->settings['minsearchword']) - { - $all_too_short = true; - } - else - { - $all_too_short = false; - break; - } - } - } - else - { - $phrase = str_replace(array("+", "-", "*"), '', $phrase); - if(my_strlen($phrase) < $mybb->settings['minsearchword']) - { - $all_too_short = true; - } - else - { - $all_too_short = false; - break; - } - } - $inquote = !$inquote; - } - // Show the minimum search term error only if all search terms are too short - if($all_too_short == true) - { - $lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']); - error($lang->error_minsearchlength); - } - $message_lookin = "AND MATCH(message) AGAINST('".$db->escape_string($keywords)."' IN BOOLEAN MODE)"; - $subject_lookin = "AND MATCH(subject) AGAINST('".$db->escape_string($keywords)."' IN BOOLEAN MODE)"; - } - $post_usersql = ''; - $thread_usersql = ''; - if($search['author']) - { - $userids = array(); - $search['author'] = my_strtolower($search['author']); - if($search['matchusername']) - { - $user = get_user_by_username($search['author']); - if($user) - { - $userids[] = $user['uid']; - } - } - else - { - switch($db->type) - { - case 'mysql': - case 'mysqli': - $field = 'username'; - break; - default: - $field = 'LOWER(username)'; - break; - } - $query = $db->simple_select("users", "uid", "{$field} LIKE '%".$db->escape_string_like($search['author'])."%'"); - - while($user = $db->fetch_array($query)) - { - $userids[] = $user['uid']; - } - } - - if(count($userids) < 1) - { - error($lang->error_nosearchresults); - } - else - { - $userids = implode(',', $userids); - $post_usersql = " AND p.uid IN (".$userids.")"; - $thread_usersql = " AND t.uid IN (".$userids.")"; - } - } - $datecut = ''; - if($search['postdate']) - { - if($search['pddir'] == 0) - { - $datecut = "<="; - } - else - { - $datecut = ">="; - } - $now = TIME_NOW; - $datelimit = $now-(86400 * $search['postdate']); - $datecut .= "'$datelimit'"; - $post_datecut = " AND p.dateline $datecut"; - $thread_datecut = " AND t.dateline $datecut"; - } - - $thread_replycut = ''; - if($search['numreplies'] != '' && $search['findthreadst']) - { - if((int)$search['findthreadst'] == 1) - { - $thread_replycut = " AND t.replies >= '".(int)$search['numreplies']."'"; - } - else - { - $thread_replycut = " AND t.replies <= '".(int)$search['numreplies']."'"; - } - } - - $thread_prefixcut = ''; - $prefixlist = array(); - if($search['threadprefix'] && $search['threadprefix'][0] != 'any') - { - foreach($search['threadprefix'] as $threadprefix) - { - $threadprefix = (int)$threadprefix; - $prefixlist[] = $threadprefix; - } - } - if(count($prefixlist) == 1) - { - $thread_prefixcut .= " AND t.prefix='$threadprefix' "; - } - else - { - if(count($prefixlist) > 1) - { - $thread_prefixcut = " AND t.prefix IN (".implode(',', $prefixlist).")"; - } - } - - $forumin = ''; - $fidlist = array(); - $searchin = array(); - if(!is_array($search['forums']) || $search['forums'][0] != "all") - { - if(!is_array($search['forums'])) - { - $search['forums'] = array((int)$search['forums']); - } - // Generate a comma separated list of all groups the user belongs to - $user_groups = $mybb->user['usergroup']; - if($mybb->user['additionalgroups']) - { - $user_groups .= ",".$mybb->user['additionalgroups']; - } - foreach($search['forums'] as $forum) - { - $forum = (int)$forum; - if(empty($searchin[$forum])) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->query(" - SELECT f.fid - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumpermissions p ON (f.fid=p.fid AND p.gid IN (".$user_groups.")) - WHERE INSTR(','||parentlist||',',',$forum,') > 0 AND active!=0 AND ((p.fid) IS NULL OR p.cansearch=1) - "); - break; - default: - $query = $db->query(" - SELECT f.fid - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumpermissions p ON (f.fid=p.fid AND p.gid IN (".$user_groups.")) - WHERE INSTR(CONCAT(',',parentlist,','),',$forum,') > 0 AND active!=0 AND ((p.fid) IS NULL OR p.cansearch=1) - "); - } - while($sforum = $db->fetch_array($query)) - { - $fidlist[] = $sforum['fid']; - } - } - } - if(count($fidlist) == 1) - { - $forumin .= " AND t.fid='$forum' "; - $searchin[$forum] = 1; - } - else - { - - if(count($fidlist) > 1) - { - $forumin = " AND t.fid IN (".implode(',', $fidlist).")"; - } - } - } - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forum_permissions) - { - if($forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - if(!empty($onlyusfids)) - { - $permsql .= "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $permsql .= " AND t.fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $permsql .= " AND t.fid NOT IN ($inactiveforums)"; - } - - $visiblesql = $post_visiblesql = $plain_post_visiblesql = ""; - if(isset($search['visible'])) - { - if($search['visible'] == 1) - { - $visiblesql = " AND t.visible = '1'"; - - if($search['postthread'] == 1) - { - $post_visiblesql = " AND p.visible = '1'"; - $plain_post_visiblesql = " AND visible = '1'"; - } - } - elseif($search['visible'] == -1) - { - $visiblesql = " AND t.visible = '-1'"; - - if($search['postthread'] == 1) - { - $post_visiblesql = " AND p.visible = '-1'"; - $plain_post_visiblesql = " AND visible = '-1'"; - } - } - else - { - $visiblesql = " AND t.visible != '1'"; - - if($search['postthread'] == 1) - { - $post_visiblesql = " AND p.visible != '1'"; - $plain_post_visiblesql = " AND visible != '1'"; - } - } - } - - // Searching a specific thread? - if($search['tid']) - { - $tidsql = " AND t.tid='".(int)$search['tid']."'"; - } - - $limitsql = ''; - if((int)$mybb->settings['searchhardlimit'] > 0) - { - $limitsql = "LIMIT ".(int)$mybb->settings['searchhardlimit']; - } - - // Searching both posts and thread titles - $threads = array(); - $posts = array(); - $firstposts = array(); - if($search['postthread'] == 1) - { - // No need to search subjects when looking for results within a specific thread - if(!$search['tid']) - { - $query = $db->query(" - SELECT t.tid, t.firstpost - FROM ".TABLE_PREFIX."threads t - WHERE 1=1 {$thread_datecut} {$thread_replycut} {$thread_prefixcut} {$forumin} {$thread_usersql} {$permsql} {$visiblesql} AND t.closed NOT LIKE 'moved|%' {$subject_lookin} - {$limitsql} - "); - while($thread = $db->fetch_array($query)) - { - $threads[$thread['tid']] = $thread['tid']; - if($thread['firstpost']) - { - $posts[$thread['tid']] = $thread['firstpost']; - } - } - } - - $query = $db->query(" - SELECT p.pid, p.tid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE 1=1 {$post_datecut} {$thread_replycut} {$thread_prefixcut} {$forumin} {$post_usersql} {$permsql} {$tidsql} {$post_visiblesql} {$visiblesql} AND t.closed NOT LIKE 'moved|%' {$message_lookin} - {$limitsql} - "); - while($post = $db->fetch_array($query)) - { - $posts[$post['pid']] = $post['pid']; - $threads[$post['tid']] = $post['tid']; - } - if(count($posts) < 1 && count($threads) < 1) - { - error($lang->error_nosearchresults); - } - $threads = implode(',', $threads); - $posts = implode(',', $posts); - - } - // Searching only thread titles - else - { - $query = $db->query(" - SELECT t.tid, t.firstpost - FROM ".TABLE_PREFIX."threads t - WHERE 1=1 {$thread_datecut} {$thread_replycut} {$thread_prefixcut} {$forumin} {$thread_usersql} {$permsql} {$visiblesql} {$subject_lookin} - {$limitsql} - "); - while($thread = $db->fetch_array($query)) - { - $threads[$thread['tid']] = $thread['tid']; - if($thread['firstpost']) - { - $firstposts[$thread['tid']] = $thread['firstpost']; - } - } - if(count($threads) < 1) - { - error($lang->error_nosearchresults); - } - - $threads = implode(',', $threads); - $firstposts = implode(',', $firstposts); - if($firstposts) - { - $query = $db->simple_select("posts", "pid", "pid IN ($firstposts) {$plain_post_visiblesql} {$limitsql}"); - while($post = $db->fetch_array($query)) - { - $posts[$post['pid']] = $post['pid']; - } - $posts = implode(',', $posts); - } - } - return array( - "threads" => $threads, - "posts" => $posts, - "querycache" => '' - ); -} diff --git a/html/forums/inc/functions_serverstats.php b/html/forums/inc/functions_serverstats.php deleted file mode 100644 index 03cc071..0000000 --- a/html/forums/inc/functions_serverstats.php +++ /dev/null @@ -1,341 +0,0 @@ - array( - 'dom' => array('bitwise' => 1, 'title' => 'DOMElement'), - 'soap' => array('bitwise' => 2, 'title' => 'SoapClient'), - 'xmlwriter' => array('bitwise' => 4, 'title' => 'XMLWriter'), - 'imagemagick' => array('bitwise' => 8, 'title' => 'Imagick'), - ), - - 'extensions' => array( - 'zendopt' => array('bitwise' => 1, 'title' => 'Zend Optimizer'), - 'xcache' => array('bitwise' => 2, 'title' => 'XCache'), - 'eaccelerator' => array('bitwise' => 4, 'title' => 'eAccelerator'), - 'ioncube' => array('bitwise' => 8, 'title' => 'ionCube Loader'), - 'PDO' => array('bitwise' => 16, 'title' => 'PDO'), - 'pdo_mysql' => array('bitwise' => 32, 'title' => 'pdo_mysql'), - 'pdo_pgsql' => array('bitwise' => 64, 'title' => 'pdo_pgsql'), - 'pdo_sqlite' => array('bitwise' => 128, 'title' => 'pdo_sqlite'), - 'pdo_oci' => array('bitwise' => 256, 'title' => 'pdo_oci'), - 'pdo_odbc' => array('bitwise' => 512, 'title' => 'pdo_odbc'), - ), - - 'phpinfo' => array( - 'zlib' => array('bitwise' => 1, 'title' => 'zlib'), - 'mbstring' => array('bitwise' => 2, 'title' => 'mbstring'), - 'exif' => array('bitwise' => 4, 'title' => 'exif'), - 'zlib' => array('bitwise' => 8, 'title' => 'zlib'), - - ), - - 'functions' => array( - 'sockets' => array('bitwise' => 1, 'title' => 'fsockopen'), - 'mcrypt' => array('bitwise' => 2, 'title' => 'mcrypt_encrypt'), - 'simplexml' => array('bitwise' => 4, 'title' => 'simplexml_load_string'), - 'ldap' => array('bitwise' => 8, 'title' => 'ldap_connect'), - 'mysqli' => array('bitwise' => 16, 'title' => 'mysqli_connect'), - 'imap' => array('bitwise' => 32, 'title' => 'imap_open'), - 'ftp' => array('bitwise' => 64, 'title' => 'ftp_login'), - 'pspell' => array('bitwise' => 128, 'title' => 'pspell_new'), - 'apc' => array('bitwise' => 256, 'title' => 'apc_cache_info'), - 'curl' => array('bitwise' => 512, 'title' => 'curl_init'), - 'iconv' => array('bitwise' => 1024, 'title' => 'iconv'), - ), - - 'php_ini' => array( - 'post_max_size' => 'post_max_size', - 'upload_max_filesize' => 'upload_max_filesize', - 'safe_mode' => 'safe_mode', - ), - ); - - foreach($check as $cat_name => $category) - { - foreach($category as $name => $what) - { - if(!isset($info[$cat_name])) - { - $info[$cat_name] = 0; - } - switch($cat_name) - { - case "classes": - if(class_exists($what['title'])) - { - $info[$cat_name] |= $what['bitwise']; - } - break; - case "extensions": - if(extension_loaded($what['title'])) - { - $info[$cat_name] |= $what['bitwise']; - } - break; - case "phpinfo": - if(array_key_exists($what['title'], $phpinfo)) - { - $info[$cat_name] |= $what['bitwise']; - } - break; - case "functions": - if(function_exists($what['title'])) - { - $info[$cat_name] |= $what['bitwise']; - } - break; - case "php_ini": - if(ini_get($what) != 0) - { - $info[$name] = ini_get($what); - } - else - { - $info[$name] = 0; - } - break; - } - } - } - - // Host URL & hostname - $info['hosturl'] = $info['hostname'] = "unknown/local"; - if($_SERVER['HTTP_HOST'] == 'localhost') - { - $info['hosturl'] = $info['hostname'] = "localhost"; - } - - // Check the hosting company - if(strpos($_SERVER['HTTP_HOST'], ".") !== false) - { - $host_url = "http://www.whoishostingthis.com/".str_replace(array('http://', 'https://', 'www.'), '', $_SERVER['HTTP_HOST']); - - $hosting = fetch_remote_file($host_url); - - if($hosting) - { - preg_match('#We believe \
    ([^<]*)\<\/a\>#ism', $hosting, $matches); - - $info['hosturl'] = "unknown/no-url"; - if(isset($matches[1]) && strlen(trim($matches[1])) != 0 && strpos($matches[1], '.') !== false) - { - $info['hosturl'] = strtolower($matches[1]); - } - else if(isset($matches[3]) && strlen(trim($matches[3])) != 0 && strpos($matches[3], '.') !== false) - { - $info['hosturl'] = strtolower($matches[3]); - } - - if(isset($matches[4]) && strlen(trim($matches[4])) != 0) - { - $info['hostname'] = $matches[4]; - } - elseif(isset($matches[3]) && strlen(trim($matches[3])) != 0) - { - $info['hostname'] = $matches[3]; - } - elseif(isset($matches[2]) && strlen(trim($matches[2])) != 0) - { - $info['hostname'] = str_replace(array('title=', '"'), '', $matches[2][0]); - } - elseif(strlen(trim($info['hosturl'])) != 0 && $info['hosturl'] != "unknown/no-url") - { - $info['hostname'] = $info['hosturl']; - } - else - { - $info['hostname'] = "unknown/no-name"; - } - } - } - - if(isset($_SERVER['HTTP_USER_AGENT'])) - { - $info['useragent'] = $_SERVER['HTTP_USER_AGENT']; - } - - // We need a unique ID for the host so hash it to keep it private and send it over - $id = $_SERVER['HTTP_HOST'].time(); - - if(function_exists('sha1')) - { - $info['clientid'] = sha1($id); - } - else - { - $info['clientid'] = md5($id); - } - - $string = ""; - $amp = ""; - foreach($info as $key => $value) - { - $string .= $amp.$key."=".urlencode($value); - $amp = "&"; - } - - $server_stats_url = 'https://community.mybb.com/server_stats.php?'.$string; - - $return = array(); - $return['info_sent_success'] = false; - if(fetch_remote_file($server_stats_url) !== false) - { - $return['info_sent_success'] = true; - } - $return['info_image'] = ""; - $return['info_get_string'] = $string; - - return $return; -} - -/** -* parser_php_info -* Function to get and parse the list of PHP info into a usuable array -* -* @return Array An array of all the extensions installed in PHP -*/ -function parse_php_info() -{ - ob_start(); - phpinfo(INFO_MODULES); - $phpinfo_html = ob_get_contents(); - ob_end_clean(); - - $phpinfo_html = strip_tags($phpinfo_html, "
    \n -END; - } - } - - /** - * @param string $contents - */ - function print_contents($contents) - { - echo $contents; - } - - /** - * @param string $message - */ - function print_error($message) - { - global $lang; - if(!$this->doneheader) - { - $this->print_header($lang->error, "", 0, 1); - } - echo "
    \n "; - echo "

    ".$lang->error."

    "; - $this->print_contents($message); - echo "\n
    "; - $this->print_footer(); - } - - /** - * @param string $nextact - */ - function print_footer($nextact="") - { - global $lang, $footer_extra; - if($nextact && $this->openedform) - { - echo "\n "; - echo "\n
    next." »\" />

    \n"; - $formend = ""; - } - else - { - $formend = ""; - } - - echo << - -

    "); - $phpinfo_html = preg_replace("#]*>([^<]+)<\/th>#", "$1", $phpinfo_html); - $phpinfo_html = preg_replace("#]*>([^<]+)<\/td>#", "$1", $phpinfo_html); - $phpinfo_html = preg_split("#(]*>[^<]+<\/h2>)#", $phpinfo_html, -1, PREG_SPLIT_DELIM_CAPTURE); - $modules = array(); - - for($i=1; $i < count($phpinfo_html); $i++) - { - if(preg_match("#]*>([^<]+)<\/h2>#", $phpinfo_html[$i], $match)) - { - $name = trim($match[1]); - $tmp2 = explode("\n", $phpinfo_html[$i+1]); - foreach($tmp2 as $one) - { - $pat = '([^<]+)<\/info>'; - $pat3 = "/$pat\s*$pat\s*$pat/"; - $pat2 = "/$pat\s*$pat/"; - - // 3 columns - if(preg_match($pat3, $one, $match)) - { - $modules[$name][trim($match[1])] = array(trim($match[2]), trim($match[3])); - } - // 2 columns - else if(preg_match($pat2, $one, $match)) - { - $modules[$name][trim($match[1])] = trim($match[2]); - } - } - } - } - return $modules; -} - diff --git a/html/forums/inc/functions_task.php b/html/forums/inc/functions_task.php deleted file mode 100644 index 17b0486..0000000 --- a/html/forums/inc/functions_task.php +++ /dev/null @@ -1,383 +0,0 @@ - 0) - { - $query = $db->simple_select("tasks", "*", "tid='{$tid}'"); - $task = $db->fetch_array($query); - } - - // Run the next task due to be run - else - { - $query = $db->simple_select("tasks", "*", "enabled=1 AND nextrun<='".TIME_NOW."'", array("order_by" => "nextrun", "order_dir" => "asc", "limit" => 1)); - $task = $db->fetch_array($query); - } - - // No task? Return - if(!$task['tid']) - { - $cache->update_tasks(); - return false; - } - - // Is this task still running and locked less than 5 minutes ago? Well don't run it now - clearly it isn't broken! - if($task['locked'] != 0 && $task['locked'] > TIME_NOW-300) - { - $cache->update_tasks(); - return false; - } - // Lock it! It' mine, all mine! - else - { - $db->update_query("tasks", array("locked" => TIME_NOW), "tid='{$task['tid']}'"); - } - - // The task file does not exist - if(!file_exists(MYBB_ROOT."inc/tasks/{$task['file']}.php")) - { - if($task['logging'] == 1) - { - add_task_log($task, $lang->missing_task); - } - - // If task file does not exist, disable task and inform the administrator - $updated_task = array( - "enabled" => 0, - "locked" => 0 - ); - $db->update_query("tasks", $updated_task, "tid='{$task['tid']}'"); - - $subject = $lang->sprintf($lang->email_broken_task_subject, $mybb->settings['bbname']); - $message = $lang->sprintf($lang->email_broken_task, $mybb->settings['bbname'], $mybb->settings['bburl'], $task['title']); - - my_mail($mybb->settings['adminemail'], $subject, $message, $mybb->settings['adminemail']); - - $cache->update_tasks(); - return false; - } - // Run the task - else - { - // Update the nextrun time now, so if the task causes a fatal error, it doesn't get stuck first in the queue - $nextrun = fetch_next_run($task); - $db->update_query("tasks", array("nextrun" => $nextrun), "tid='{$task['tid']}'"); - - include_once MYBB_ROOT."inc/tasks/{$task['file']}.php"; - $function = "task_{$task['file']}"; - if(function_exists($function)) - { - $function($task); - } - } - - $updated_task = array( - "lastrun" => TIME_NOW, - "locked" => 0 - ); - $db->update_query("tasks", $updated_task, "tid='{$task['tid']}'"); - - $cache->update_tasks(); - - return true; -} - -/** - * Adds information to the scheduled task log. - * - * @param int $task The task array to create the log entry for - * @param string $message The message to log - */ -function add_task_log($task, $message) -{ - global $db; - - if(!$task['logging']) - { - return; - } - - $log_entry = array( - "tid" => (int)$task['tid'], - "dateline" => TIME_NOW, - "data" => $db->escape_string($message) - ); - $db->insert_query("tasklog", $log_entry); -} - -/** - * Generate the next run time for a particular task. - * - * @param array $task The task array as fetched from the database. - * @return int The next run time as a UNIX timestamp - */ -function fetch_next_run($task) -{ - $time = TIME_NOW; - $next_minute = $current_minute = date("i", $time); - $next_hour = $current_hour = date("H", $time); - $next_day = $current_day = date("d", $time); - $next_weekday = $current_weekday = date("w", $time); - $next_month = $current_month = date("m", $time); - $next_year = $current_year = date("Y", $time); - $reset_day = $reset_hour = $reset_month = $reset_year = 0; - - if($task['minute'] == "*") - { - ++$next_minute; - if($next_minute > 59) - { - $reset_hour = 1; - $next_minute = 0; - } - } - else - { - if(build_next_run_bit($task['minute'], $current_minute) != false) - { - $next_minute = build_next_run_bit($task['minute'], $current_minute); - } - else - { - $next_minute = fetch_first_run_time($task['minute']); - } - if($next_minute <= $current_minute) - { - $reset_hour = 1; - } - } - - if($reset_hour || !run_time_exists($task['hour'], $current_hour)) - { - if($task['hour'] == "*") - { - ++$next_hour; - if($next_hour > 23) - { - $reset_day = 1; - $next_hour = 0; - } - } - else - { - if(build_next_run_bit($task['hour'], $current_hour) != false) - { - $next_hour = build_next_run_bit($task['hour'], $current_hour); - } - else - { - $next_hour = fetch_first_run_time($task['hour']); - $reset_day = 1; - } - if($next_hour < $current_hour) - { - $reset_day = 1; - } - } - $next_minute = fetch_first_run_time($task['minute']); - } - - if($reset_day || ($task['weekday'] == "*" && !run_time_exists($task['day'], $current_day) || $task['day'] == "*" && !run_time_exists($task['weekday'], $current_weekday))) - { - if($task['weekday'] == "*") - { - if($task['day'] == "*") - { - ++$next_day; - if($next_day > date("t", $time)) - { - $reset_month = 1; - $next_day = 1; - } - } - else - { - if(build_next_run_bit($task['day'], $current_day) != false) - { - $next_day = build_next_run_bit($task['day'], $current_day); - } - else - { - $next_day = fetch_first_run_time($task['day']); - $reset_month = 1; - } - if($next_day < $current_day) - { - $reset_month = 1; - } - } - } - else - { - if(build_next_run_bit($task['weekday'], $current_weekday) != false) - { - $next_weekday = build_next_run_bit($task['weekday'], $current_weekday); - } - else - { - $next_weekday = fetch_first_run_time($task['weekday']); - } - $next_day = $current_day + ($next_weekday-$current_weekday); - if($next_day <= $current_day) - { - $next_day += 7; - } - - if($next_day > date("t", $time)) - { - $reset_month = 1; - } - } - $next_minute = fetch_first_run_time($task['minute']); - $next_hour = fetch_first_run_time($task['hour']); - if($next_day == $current_day && $next_hour < $current_hour) - { - $reset_month = 1; - } - } - - if($reset_month || !run_time_exists($task['month'], $current_month)) - { - if($task['month'] == "*") - { - $next_month++; - if($next_month > 12) - { - $reset_year = 1; - $next_month = 1; - } - } - else - { - if(build_next_run_bit($task['month'], $current_month) != false) - { - $next_month = build_next_run_bit($task['month'], $current_month); - } - else - { - $next_month = fetch_first_run_time($task['month']); - $reset_year = 1; - } - if($next_month < $current_month) - { - $reset_year = 1; - } - } - $next_minute = fetch_first_run_time($task['minute']); - $next_hour = fetch_first_run_time($task['hour']); - if($task['weekday'] == "*") - { - $next_day = fetch_first_run_time($task['day']); - if($next_day == 0) $next_day = 1; - } - else - { - $next_weekday = fetch_first_run_time($task['weekday']); - $new_weekday = date("w", mktime($next_hour, $next_minute, 0, $next_month, 1, $next_year)); - $next_day = 1 + ($next_weekday-$new_weekday); - if($next_weekday < $new_weekday) - { - $next_day += 7; - } - } - if($next_month == $current_month && $next_day == $current_day && $next_hour < $current_hour) - { - $reset_year = 1; - } - } - - if($reset_year) - { - $next_year++; - $next_minute = fetch_first_run_time($task['minute']); - $next_hour = fetch_first_run_time($task['hour']); - $next_month = fetch_first_run_time($task['month']); - if($next_month == 0) $next_month = 1; - if($task['weekday'] == "*") - { - $next_day = fetch_first_run_time($task['day']); - if($next_day == 0) $next_day = 1; - } - else - { - $next_weekday = fetch_first_run_time($task['weekday']); - $new_weekday = date("w", mktime($next_hour, $next_minute, 0, $next_month, 1, $next_year)); - $next_day = 1 + ($next_weekday-$new_weekday); - if($next_weekday < $new_weekday) - { - $next_day += 7; - } - } - } - return mktime($next_hour, $next_minute, 0, $next_month, $next_day, $next_year); -} - -/** - * Builds the next run time bit for a particular item (day, hour, month etc). Used by fetch_next_run(). - * - * @param string $data A string containing the run times for this particular item - * @param int $bit The current value (be it current day etc) - * @return int|bool The new or found value or boolean if nothing is found - */ -function build_next_run_bit($data, $bit) -{ - if($data == "*") return $bit; - $data = explode(",", $data); - foreach($data as $thing) - { - if($thing > $bit) - { - return $thing; - } - } - return false; -} - -/** - * Fetches the fist run bit for a particular item (day, hour, month etc). Used by fetch_next_run(). - * - * @param string $data A string containing the run times for this particular item - * @return int The first run time - */ -function fetch_first_run_time($data) -{ - if($data == "*") return "0"; - $data = explode(",", $data); - return $data[0]; -} - -/** - * Checks if a specific run time exists for a particular item (day, hour, month etc). Used by fetch_next_run(). - * - * @param string $data A string containing the run times for this particular item - * @param int $bit The bit we're checking for - * @return boolean True if it exists, false if it does not - */ -function run_time_exists($data, $bit) -{ - if($data == "*") return true; - $data = explode(",", $data); - if(in_array($bit, $data)) - { - return true; - } - return false; -} diff --git a/html/forums/inc/functions_time.php b/html/forums/inc/functions_time.php deleted file mode 100644 index 8dd618f..0000000 --- a/html/forums/inc/functions_time.php +++ /dev/null @@ -1,877 +0,0 @@ - 4 digit year conversion. The maximum is billions of years in the -future, but this is a theoretical limit as the computation of that year -would take too long with the current implementation of adodb_mktime(). - -This library replaces native functions as follows: - -
    -	getdate()  with  adodb_getdate()
    -	date()     with  adodb_date()
    -	gmdate()   with  adodb_gmdate()
    -	mktime()   with  adodb_mktime()
    -	gmmktime() with  adodb_gmmktime()
    -	strftime() with  adodb_strftime()
    -	strftime() with  adodb_gmstrftime()
    -
    - -The parameters are identical, except that adodb_date() accepts a subset -of date()'s field formats. Mktime() will convert from local time to GMT, -and date() will convert from GMT to local time, but daylight savings is -not handled currently. - -This library is independant of the rest of ADOdb, and can be used -as standalone code. - -PERFORMANCE - -For high speed, this library uses the native date functions where -possible, and only switches to PHP code when the dates fall outside -the 32-bit signed integer range. - -GREGORIAN CORRECTION - -Pope Gregory shortened October of A.D. 1582 by ten days. Thursday, -October 4, 1582 (Julian) was followed immediately by Friday, October 15, -1582 (Gregorian). - -Since 0.06, we handle this correctly, so: - -adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582) - == 24 * 3600 (1 day) - -============================================================================= - -COPYRIGHT - -(c) 2003-2005 John Lim and released under BSD-style license except for code by -jackbbs, which includes adodb_mktime, adodb_get_gmt_diff, adodb_is_leap_year -and originally found at http://www.php.net/manual/en/function.mktime.php - -============================================================================= - -BUG REPORTS - -These should be posted to the ADOdb forums at - - http://phplens.com/lens/lensforum/topics.php?id=4 - -============================================================================= -*/ - - -/* Initialization */ - -/* - Version Number -*/ -define('ADODB_DATE_VERSION', 0.33); - -$ADODB_DATETIME_CLASS = (PHP_VERSION >= 5.2); - -/* - This code was originally for windows. But apparently this problem happens - also with Linux, RH 7.3 and later! - - glibc-2.2.5-34 and greater has been changed to return -1 for dates < - 1970. This used to work. The problem exists with RedHat 7.3 and 8.0 - echo (mktime(0, 0, 0, 1, 1, 1960)); // prints -1 - - References: - http://bugs.php.net/bug.php?id=20048&edit=2 - http://lists.debian.org/debian-glibc/2002/debian-glibc-200205/msg00010.html -*/ - -if (!defined('ADODB_ALLOW_NEGATIVE_TS')) define('ADODB_NO_NEGATIVE_TS',1); - -/** - Returns day of week, 0 = Sunday,... 6=Saturday. - Algorithm from PEAR::Date_Calc -*/ -function adodb_dow($year, $month, $day) -{ -/* -Pope Gregory removed 10 days - October 5 to October 14 - from the year 1582 and -proclaimed that from that time onwards 3 days would be dropped from the calendar -every 400 years. - -Thursday, October 4, 1582 (Julian) was followed immediately by Friday, October 15, 1582 (Gregorian). -*/ - if ($year <= 1582) { - if ($year < 1582 || - ($year == 1582 && ($month < 10 || ($month == 10 && $day < 15)))) $greg_correction = 3; - else - $greg_correction = 0; - } else - $greg_correction = 0; - - if($month > 2) - $month -= 2; - else { - $month += 10; - $year--; - } - - $day = floor((13 * $month - 1) / 5) + - $day + ($year % 100) + - floor(($year % 100) / 4) + - floor(($year / 100) / 4) - 2 * - floor($year / 100) + 77 + $greg_correction; - - return $day - 7 * floor($day / 7); -} - -/** - Checks for leap year, returns true if it is. No 2-digit year check. Also - handles julian calendar correctly. -*/ -function _adodb_is_leap_year($year) -{ - if ($year % 4 != 0) return false; - - if ($year % 400 == 0) { - return true; - // if gregorian calendar (>1582), century not-divisible by 400 is not leap - } else if ($year > 1582 && $year % 100 == 0 ) { - return false; - } - - return true; -} - -/** - checks for leap year, returns true if it is. Has 2-digit year check -*/ -function adodb_is_leap_year($year) -{ - return _adodb_is_leap_year(adodb_year_digit_check($year)); -} - -/** - Fix 2-digit years. Works for any century. - Assumes that if 2-digit is more than 30 years in future, then previous century. -*/ -function adodb_year_digit_check($y) -{ - if ($y < 100) { - - $yr = (integer) date("Y"); - $century = (integer) ($yr /100); - - if ($yr%100 > 50) { - $c1 = $century + 1; - $c0 = $century; - } else { - $c1 = $century; - $c0 = $century - 1; - } - $c1 *= 100; - // if 2-digit year is less than 30 years in future, set it to this century - // otherwise if more than 30 years in future, then we set 2-digit year to the prev century. - if (($y + $c1) < $yr+30) $y = $y + $c1; - else $y = $y + $c0*100; - } - return $y; -} - -function adodb_get_gmt_diff_ts($ts) -{ - if (0 <= $ts && $ts <= 0x7FFFFFFF) { // check if number in 32-bit signed range) { - $arr = getdate($ts); - $y = $arr['year']; - $m = $arr['mon']; - $d = $arr['mday']; - return adodb_get_gmt_diff($y,$m,$d); - } else { - return adodb_get_gmt_diff(false,false,false); - } - -} - -/** - get local time zone offset from GMT. Does not handle historical timezones before 1970. -*/ -function adodb_get_gmt_diff($y,$m,$d) -{ -static $TZ,$tzo; -global $ADODB_DATETIME_CLASS; - - if (!defined('ADODB_TEST_DATES')) $y = false; - else if ($y < 1970 || $y >= 2038) $y = false; - - if ($ADODB_DATETIME_CLASS && $y !== false) { - $dt = new DateTime(); - $dt->setISODate($y,$m,$d); - if (empty($tzo)) { - $tzo = new DateTimeZone(date_default_timezone_get()); - # $tzt = timezone_transitions_get( $tzo ); - } - return -$tzo->getOffset($dt); - } else { - if (isset($TZ)) return $TZ; - $y = date('Y'); - $TZ = mktime(0,0,0,12,2,$y) - gmmktime(0,0,0,12,2,$y); - } - - return $TZ; -} - -/** - Returns an array with date info. -*/ -function adodb_getdate($d=false,$fast=false) -{ - if ($d === false) return getdate(); - if (!defined('ADODB_TEST_DATES')) { - if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range - if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer - return @getdate($d); - } - } - return _adodb_getdate($d); -} - -$_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); -$_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); - -/** - Low-level function that returns the getdate() array. We have a special - $fast flag, which if set to true, will return fewer array values, - and is much faster as it does not calculate dow, etc. -*/ -function _adodb_getdate($origd=false,$fast=false,$is_gmt=false) -{ -static $YRS; -global $_month_table_normal,$_month_table_leaf; - - $d = $origd - ($is_gmt ? 0 : adodb_get_gmt_diff_ts($origd)); - $_day_power = 86400; - $_hour_power = 3600; - $_min_power = 60; - - if ($d < -12219321600) $d -= 86400*10; // if 15 Oct 1582 or earlier, gregorian correction - - $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); - $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); - - $d366 = $_day_power * 366; - $d365 = $_day_power * 365; - - if ($d < 0) { - - if (empty($YRS)) $YRS = array( - 1970 => 0, - 1960 => -315619200, - 1950 => -631152000, - 1940 => -946771200, - 1930 => -1262304000, - 1920 => -1577923200, - 1910 => -1893456000, - 1900 => -2208988800, - 1890 => -2524521600, - 1880 => -2840140800, - 1870 => -3155673600, - 1860 => -3471292800, - 1850 => -3786825600, - 1840 => -4102444800, - 1830 => -4417977600, - 1820 => -4733596800, - 1810 => -5049129600, - 1800 => -5364662400, - 1790 => -5680195200, - 1780 => -5995814400, - 1770 => -6311347200, - 1760 => -6626966400, - 1750 => -6942499200, - 1740 => -7258118400, - 1730 => -7573651200, - 1720 => -7889270400, - 1710 => -8204803200, - 1700 => -8520336000, - 1690 => -8835868800, - 1680 => -9151488000, - 1670 => -9467020800, - 1660 => -9782640000, - 1650 => -10098172800, - 1640 => -10413792000, - 1630 => -10729324800, - 1620 => -11044944000, - 1610 => -11360476800, - 1600 => -11676096000); - - if ($is_gmt) $origd = $d; - // The valid range of a 32bit signed timestamp is typically from - // Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT - // - - # old algorithm iterates through all years. new algorithm does it in - # 10 year blocks - - /* - # old algo - for ($a = 1970 ; --$a >= 0;) { - $lastd = $d; - - if ($leaf = _adodb_is_leap_year($a)) $d += $d366; - else $d += $d365; - - if ($d >= 0) { - $year = $a; - break; - } - } - */ - - $lastsecs = 0; - $lastyear = 1970; - foreach($YRS as $year => $secs) { - if ($d >= $secs) { - $a = $lastyear; - break; - } - $lastsecs = $secs; - $lastyear = $year; - } - - $d -= $lastsecs; - if (!isset($a)) $a = $lastyear; - - //echo ' yr=',$a,' ', $d,'.'; - - for (; --$a >= 0;) { - $lastd = $d; - - if ($leaf = _adodb_is_leap_year($a)) $d += $d366; - else $d += $d365; - - if ($d >= 0) { - $year = $a; - break; - } - } - /**/ - - $secsInYear = 86400 * ($leaf ? 366 : 365) + $lastd; - - $d = $lastd; - $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; - for ($a = 13 ; --$a > 0;) { - $lastd = $d; - $d += $mtab[$a] * $_day_power; - if ($d >= 0) { - $month = $a; - $ndays = $mtab[$a]; - break; - } - } - - $d = $lastd; - $day = $ndays + ceil(($d+1) / ($_day_power)); - - $d += ($ndays - $day+1)* $_day_power; - $hour = floor($d/$_hour_power); - - } else { - for ($a = 1970 ;; $a++) { - $lastd = $d; - - if ($leaf = _adodb_is_leap_year($a)) $d -= $d366; - else $d -= $d365; - if ($d < 0) { - $year = $a; - break; - } - } - $secsInYear = $lastd; - $d = $lastd; - $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; - for ($a = 1 ; $a <= 12; $a++) { - $lastd = $d; - $d -= $mtab[$a] * $_day_power; - if ($d < 0) { - $month = $a; - $ndays = $mtab[$a]; - break; - } - } - $d = $lastd; - $day = ceil(($d+1) / $_day_power); - $d = $d - ($day-1) * $_day_power; - $hour = floor($d /$_hour_power); - } - - $d -= $hour * $_hour_power; - $min = floor($d/$_min_power); - $secs = $d - $min * $_min_power; - if ($fast) { - return array( - 'seconds' => $secs, - 'minutes' => $min, - 'hours' => $hour, - 'mday' => $day, - 'mon' => $month, - 'year' => $year, - 'yday' => floor($secsInYear/$_day_power), - 'leap' => $leaf, - 'ndays' => $ndays - ); - } - - $dow = adodb_dow($year,$month,$day); - - return array( - 'seconds' => $secs, - 'minutes' => $min, - 'hours' => $hour, - 'mday' => $day, - 'wday' => $dow, - 'mon' => $month, - 'year' => $year, - 'yday' => floor($secsInYear/$_day_power), - 'weekday' => gmdate('l',$_day_power*(3+$dow)), - 'month' => gmdate('F',mktime(0,0,0,$month,2,1971)), - 0 => $origd - ); -} - -function adodb_tz_offset($gmt,$isphp5) -{ - $zhrs = abs($gmt)/3600; - $hrs = floor($zhrs); - if ($isphp5) - return sprintf('%s%02d%02d',($gmt<=0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); - else - return sprintf('%s%02d%02d',($gmt<0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); -} - -function adodb_gmdate($fmt,$d=false) -{ - return adodb_date($fmt,$d,true); -} - -// accepts unix timestamp and iso date format in $d -function adodb_date2($fmt, $d=false, $is_gmt=false) -{ - if ($d !== false) { - if (!preg_match( - "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ -]?(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", - ($d), $rr)) return adodb_date($fmt,false,$is_gmt); - - if ($rr[1] <= 100 && $rr[2]<= 1) return adodb_date($fmt,false,$is_gmt); - - // h-m-s-MM-DD-YY - if (!isset($rr[5])) $d = adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1],false,$is_gmt); - else $d = @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1],false,$is_gmt); - } - - return adodb_date($fmt,$d,$is_gmt); -} - -/** - Return formatted date based on timestamp $d -*/ -function adodb_date($fmt,$d=false,$is_gmt=false) -{ -static $daylight; -global $ADODB_DATETIME_CLASS; - - if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt); - if (!defined('ADODB_TEST_DATES')) { - if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range - if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer - return ($is_gmt)? @gmdate($fmt,$d): @date($fmt,$d); - - } - } - $_day_power = 86400; - - $arr = _adodb_getdate($d,true,$is_gmt); - - if (!isset($daylight)) $daylight = function_exists('adodb_daylight_sv'); - if ($daylight) adodb_daylight_sv($arr, $is_gmt); - - $year = $arr['year']; - $month = $arr['mon']; - $day = $arr['mday']; - $hour = $arr['hours']; - $min = $arr['minutes']; - $secs = $arr['seconds']; - - $max = strlen($fmt); - $dates = ''; - - $isphp5 = PHP_VERSION >= 5; - - /* - at this point, we have the following integer vars to manipulate: - $year, $month, $day, $hour, $min, $secs - */ - for ($i=0; $i < $max; $i++) { - switch($fmt[$i]) { - case 'T': - if ($ADODB_DATETIME_CLASS) { - $dt = new DateTime(); - $dt->SetDate($year,$month,$day); - $dates .= $dt->Format('T'); - } else - $dates .= date('T'); - break; - // YEAR - case 'L': $dates .= $arr['leap'] ? '1' : '0'; break; - case 'r': // Thu, 21 Dec 2000 16:01:07 +0200 - - // 4.3.11 uses '04 Jun 2004' - // 4.3.8 uses ' 4 Jun 2004' - $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))).', ' - . ($day<10?'0'.$day:$day) . ' '.date('M',mktime(0,0,0,$month,2,1971)).' '.$year.' '; - - if ($hour < 10) $dates .= '0'.$hour; else $dates .= $hour; - - if ($min < 10) $dates .= ':0'.$min; else $dates .= ':'.$min; - - if ($secs < 10) $dates .= ':0'.$secs; else $dates .= ':'.$secs; - - $gmt = adodb_get_gmt_diff($year,$month,$day); - - $dates .= ' '.adodb_tz_offset($gmt,$isphp5); - break; - - case 'Y': $dates .= $year; break; - case 'y': $dates .= substr($year,strlen($year)-2,2); break; - // MONTH - case 'm': if ($month<10) $dates .= '0'.$month; else $dates .= $month; break; - case 'Q': $dates .= ($month+3)>>2; break; - case 'n': $dates .= $month; break; - case 'M': $dates .= date('M',mktime(0,0,0,$month,2,1971)); break; - case 'F': $dates .= date('F',mktime(0,0,0,$month,2,1971)); break; - // DAY - case 't': $dates .= $arr['ndays']; break; - case 'z': $dates .= $arr['yday']; break; - case 'w': $dates .= adodb_dow($year,$month,$day); break; - case 'l': $dates .= gmdate('l',$_day_power*(3+adodb_dow($year,$month,$day))); break; - case 'D': $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))); break; - case 'j': $dates .= $day; break; - case 'd': if ($day<10) $dates .= '0'.$day; else $dates .= $day; break; - case 'S': - $d10 = $day % 10; - if ($d10 == 1) $dates .= 'st'; - else if ($d10 == 2 && $day != 12) $dates .= 'nd'; - else if ($d10 == 3) $dates .= 'rd'; - else $dates .= 'th'; - break; - - // HOUR - case 'Z': - $dates .= ($is_gmt) ? 0 : -adodb_get_gmt_diff($year,$month,$day); break; - case 'O': - $gmt = ($is_gmt) ? 0 : adodb_get_gmt_diff($year,$month,$day); - - $dates .= adodb_tz_offset($gmt,$isphp5); - break; - - case 'H': - if ($hour < 10) $dates .= '0'.$hour; - else $dates .= $hour; - break; - case 'h': - if ($hour > 12) $hh = $hour - 12; - else { - if ($hour == 0) $hh = '12'; - else $hh = $hour; - } - - if ($hh < 10) $dates .= '0'.$hh; - else $dates .= $hh; - break; - - case 'G': - $dates .= $hour; - break; - - case 'g': - if ($hour > 12) $hh = $hour - 12; - else { - if ($hour == 0) $hh = '12'; - else $hh = $hour; - } - $dates .= $hh; - break; - // MINUTES - case 'i': if ($min < 10) $dates .= '0'.$min; else $dates .= $min; break; - // SECONDS - case 'U': $dates .= $d; break; - case 's': if ($secs < 10) $dates .= '0'.$secs; else $dates .= $secs; break; - // AM/PM - // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM - case 'a': - if ($hour>=12) $dates .= 'pm'; - else $dates .= 'am'; - break; - case 'A': - if ($hour>=12) $dates .= 'PM'; - else $dates .= 'AM'; - break; - default: - $dates .= $fmt[$i]; break; - // ESCAPE - case "\\": - $i++; - if ($i < $max) $dates .= $fmt[$i]; - break; - } - } - return $dates; -} - -/** - Returns a timestamp given a GMT/UTC time. - Note that $is_dst is not implemented and is ignored. -*/ -function adodb_gmmktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false) -{ - return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true); -} - -/** - Return a timestamp given a local time. Originally by jackbbs. - Note that $is_dst is not implemented and is ignored. - - Not a very fast algorithm - O(n) operation. Could be optimized to O(1). - - NOTE: returns time() when the year is > 9999 -*/ -function adodb_mktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false,$is_gmt=false) -{ - if (!defined('ADODB_TEST_DATES')) { - - if ($mon === false) { - return $is_gmt? @gmmktime($hr,$min,$sec): @mktime($hr,$min,$sec); - } - - // for windows, we don't check 1970 because with timezone differences, - // 1 Jan 1970 could generate negative timestamp, which is illegal - $usephpfns = (1971 < $year && $year < 2038 - || !defined('ADODB_NO_NEGATIVE_TS') && (1901 < $year && $year < 2038) - ); - - - if ($usephpfns && ($year + $mon/12+$day/365.25+$hr/(24*365.25) >= 2038)) $usephpfns = false; - - if ($usephpfns) { - return $is_gmt ? - @gmmktime($hr,$min,$sec,$mon,$day,$year): - @mktime($hr,$min,$sec,$mon,$day,$year); - } - } - - $gmt_different = ($is_gmt) ? 0 : adodb_get_gmt_diff($year,$mon,$day); - - /* - # disabled because some people place large values in $sec. - # however we need it for $mon because we use an array... - $hr = (int)$hr; - $min = (int)$min; - $sec = (int)$sec; - */ - $mon = (int)$mon; - $day = (int)$day; - $year = (int)$year; - - - $year = adodb_year_digit_check($year); - - if ($mon > 12) { - $y = floor(($mon-1)/ 12); - $year += $y; - $mon -= $y*12; - } else if ($mon < 1) { - $y = ceil((1-$mon) / 12); - $year -= $y; - $mon += $y*12; - } - - $_day_power = 86400; - $_hour_power = 3600; - $_min_power = 60; - - $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); - $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); - - $_total_date = 0; - if($year > 9999) { - return time(); - } else if ($year >= 1970) { - for ($a = 1970 ; $a <= $year; $a++) { - $leaf = _adodb_is_leap_year($a); - if ($leaf == true) { - $loop_table = $_month_table_leaf; - $_add_date = 366; - } else { - $loop_table = $_month_table_normal; - $_add_date = 365; - } - if ($a < $year) { - $_total_date += $_add_date; - } else { - for($b=1;$b<$mon;$b++) { - $_total_date += $loop_table[$b]; - } - } - } - $_total_date +=$day-1; - $ret = $_total_date * $_day_power + $hr * $_hour_power + $min * $_min_power + $sec + $gmt_different; - - } else { - for ($a = 1969 ; $a >= $year; $a--) { - $leaf = _adodb_is_leap_year($a); - if ($leaf == true) { - $loop_table = $_month_table_leaf; - $_add_date = 366; - } else { - $loop_table = $_month_table_normal; - $_add_date = 365; - } - if ($a > $year) { $_total_date += $_add_date; - } else { - for($b=12;$b>$mon;$b--) { - $_total_date += $loop_table[$b]; - } - } - } - $_total_date += $loop_table[$mon] - $day; - - $_day_time = $hr * $_hour_power + $min * $_min_power + $sec; - $_day_time = $_day_power - $_day_time; - $ret = -( $_total_date * $_day_power + $_day_time - $gmt_different); - if ($ret < -12220185600) $ret += 10*86400; // if earlier than 5 Oct 1582 - gregorian correction - else if ($ret < -12219321600) $ret = -12219321600; // if in limbo, reset to 15 Oct 1582. - } - //print " dmy=$day/$mon/$year $hr:$min:$sec => " .$ret; - return $ret; -} - -function adodb_gmstrftime($fmt, $ts=false) -{ - return adodb_strftime($fmt,$ts,true); -} - -// hack - convert to adodb_date -function adodb_strftime($fmt, $ts=false,$is_gmt=false) -{ -global $ADODB_DATE_LOCALE; - - if (!defined('ADODB_TEST_DATES')) { - if ((abs($ts) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range - if (!defined('ADODB_NO_NEGATIVE_TS') || $ts >= 0) // if windows, must be +ve integer - return ($is_gmt)? @gmstrftime($fmt,$ts): @strftime($fmt,$ts); - - } - } - - if (empty($ADODB_DATE_LOCALE)) { - /* - $tstr = strtoupper(gmstrftime('%c',31366800)); // 30 Dec 1970, 1 am - $sep = substr($tstr,2,1); - $hasAM = strrpos($tstr,'M') !== false; - */ - # see http://phplens.com/lens/lensforum/msgs.php?id=14865 for reasoning, and changelog for version 0.24 - $dstr = gmstrftime('%x',31366800); // 30 Dec 1970, 1 am - $sep = substr($dstr,2,1); - $tstr = strtoupper(gmstrftime('%X',31366800)); // 30 Dec 1970, 1 am - $hasAM = strrpos($tstr,'M') !== false; - - $ADODB_DATE_LOCALE = array(); - $ADODB_DATE_LOCALE[] = strncmp($tstr,'30',2) == 0 ? 'd'.$sep.'m'.$sep.'y' : 'm'.$sep.'d'.$sep.'y'; - $ADODB_DATE_LOCALE[] = ($hasAM) ? 'h:i:s a' : 'H:i:s'; - - } - $inpct = false; - $fmtdate = ''; - for ($i=0,$max = strlen($fmt); $i < $max; $i++) { - $ch = $fmt[$i]; - if ($ch == '%') { - if ($inpct) { - $fmtdate .= '%'; - $inpct = false; - } else - $inpct = true; - } else if ($inpct) { - - $inpct = false; - switch($ch) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case 'E': - case 'O': - /* ignore format modifiers */ - $inpct = true; - break; - - case 'a': $fmtdate .= 'D'; break; - case 'A': $fmtdate .= 'l'; break; - case 'h': - case 'b': $fmtdate .= 'M'; break; - case 'B': $fmtdate .= 'F'; break; - case 'c': $fmtdate .= $ADODB_DATE_LOCALE[0].$ADODB_DATE_LOCALE[1]; break; - case 'C': $fmtdate .= '\C?'; break; // century - case 'd': $fmtdate .= 'd'; break; - case 'D': $fmtdate .= 'm/d/y'; break; - case 'e': $fmtdate .= 'j'; break; - case 'g': $fmtdate .= '\g?'; break; //? - case 'G': $fmtdate .= '\G?'; break; //? - case 'H': $fmtdate .= 'H'; break; - case 'I': $fmtdate .= 'h'; break; - case 'j': $fmtdate .= '?z'; $parsej = true; break; // wrong as j=1-based, z=0-basd - case 'm': $fmtdate .= 'm'; break; - case 'M': $fmtdate .= 'i'; break; - case 'n': $fmtdate .= "\n"; break; - case 'p': $fmtdate .= 'a'; break; - case 'r': $fmtdate .= 'h:i:s a'; break; - case 'R': $fmtdate .= 'H:i:s'; break; - case 'S': $fmtdate .= 's'; break; - case 't': $fmtdate .= "\t"; break; - case 'T': $fmtdate .= 'H:i:s'; break; - case 'u': $fmtdate .= '?u'; $parseu = true; break; // wrong strftime=1-based, date=0-based - case 'U': $fmtdate .= '?U'; $parseU = true; break;// wrong strftime=1-based, date=0-based - case 'x': $fmtdate .= $ADODB_DATE_LOCALE[0]; break; - case 'X': $fmtdate .= $ADODB_DATE_LOCALE[1]; break; - case 'w': $fmtdate .= '?w'; $parseu = true; break; // wrong strftime=1-based, date=0-based - case 'W': $fmtdate .= '?W'; $parseU = true; break;// wrong strftime=1-based, date=0-based - case 'y': $fmtdate .= 'y'; break; - case 'Y': $fmtdate .= 'Y'; break; - case 'Z': $fmtdate .= 'T'; break; - } - } else if (('A' <= ($ch) && ($ch) <= 'Z' ) || ('a' <= ($ch) && ($ch) <= 'z' )) - $fmtdate .= "\\".$ch; - else - $fmtdate .= $ch; - } - //echo "fmt=",$fmtdate,"
    "; - if ($ts === false) $ts = time(); - $ret = adodb_date($fmtdate, $ts, $is_gmt); - return $ret; -} - diff --git a/html/forums/inc/functions_upload.php b/html/forums/inc/functions_upload.php deleted file mode 100644 index 2da32b6..0000000 --- a/html/forums/inc/functions_upload.php +++ /dev/null @@ -1,801 +0,0 @@ -escape_string($posthash); - if($posthash != "") - { - $query = $db->simple_select("attachments", "aid, attachname, thumbnail, visible", "aid='{$aid}' AND posthash='{$posthash}'"); - $attachment = $db->fetch_array($query); - } - else - { - $query = $db->simple_select("attachments", "aid, attachname, thumbnail, visible", "aid='{$aid}' AND pid='{$pid}'"); - $attachment = $db->fetch_array($query); - } - - $plugins->run_hooks("remove_attachment_do_delete", $attachment); - - $db->delete_query("attachments", "aid='{$attachment['aid']}'"); - - if(defined('IN_ADMINCP')) - { - $uploadpath = '../'.$mybb->settings['uploadspath']; - } - else - { - $uploadpath = $mybb->settings['uploadspath']; - } - - // Check if this attachment is referenced in any other posts. If it isn't, then we are safe to delete the actual file. - $query = $db->simple_select("attachments", "COUNT(aid) as numreferences", "attachname='".$db->escape_string($attachment['attachname'])."'"); - if($db->fetch_field($query, "numreferences") == 0) - { - delete_uploaded_file($uploadpath."/".$attachment['attachname']); - if($attachment['thumbnail']) - { - delete_uploaded_file($uploadpath."/".$attachment['thumbnail']); - } - - $date_directory = explode('/', $attachment['attachname']); - if(@is_dir($uploadpath."/".$date_directory[0])) - { - delete_upload_directory($uploadpath."/".$date_directory[0]); - } - } - - if($attachment['visible'] == 1 && $pid) - { - $post = get_post($pid); - update_thread_counters($post['tid'], array("attachmentcount" => "-1")); - } -} - -/** - * Remove all of the attachments from a specific post - * - * @param int $pid The post ID - * @param string $posthash The posthash if available - */ -function remove_attachments($pid, $posthash="") -{ - global $db, $mybb, $plugins; - - if($pid) - { - $post = get_post($pid); - } - $posthash = $db->escape_string($posthash); - if($posthash != "" && !$pid) - { - $query = $db->simple_select("attachments", "*", "posthash='$posthash'"); - } - else - { - $query = $db->simple_select("attachments", "*", "pid='$pid'"); - } - - if(defined('IN_ADMINCP')) - { - $uploadpath = '../'.$mybb->settings['uploadspath']; - } - else - { - $uploadpath = $mybb->settings['uploadspath']; - } - - $num_attachments = 0; - while($attachment = $db->fetch_array($query)) - { - if($attachment['visible'] == 1) - { - $num_attachments++; - } - - $plugins->run_hooks("remove_attachments_do_delete", $attachment); - - $db->delete_query("attachments", "aid='".$attachment['aid']."'"); - - // Check if this attachment is referenced in any other posts. If it isn't, then we are safe to delete the actual file. - $query2 = $db->simple_select("attachments", "COUNT(aid) as numreferences", "attachname='".$db->escape_string($attachment['attachname'])."'"); - if($db->fetch_field($query2, "numreferences") == 0) - { - delete_uploaded_file($uploadpath."/".$attachment['attachname']); - if($attachment['thumbnail']) - { - delete_uploaded_file($uploadpath."/".$attachment['thumbnail']); - } - - $date_directory = explode('/', $attachment['attachname']); - if(@is_dir($uploadpath."/".$date_directory[0])) - { - delete_upload_directory($uploadpath."/".$date_directory[0]); - } - } - } - - if($post['tid']) - { - update_thread_counters($post['tid'], array("attachmentcount" => "-{$num_attachments}")); - } -} - -/** - * Remove any matching avatars for a specific user ID - * - * @param int $uid The user ID - * @param string $exclude A file name to be excluded from the removal - */ -function remove_avatars($uid, $exclude="") -{ - global $mybb, $plugins; - - if(defined('IN_ADMINCP')) - { - $avatarpath = '../'.$mybb->settings['avataruploadpath']; - } - else - { - $avatarpath = $mybb->settings['avataruploadpath']; - } - - $dir = opendir($avatarpath); - if($dir) - { - while($file = @readdir($dir)) - { - $plugins->run_hooks("remove_avatars_do_delete", $file); - - if(preg_match("#avatar_".$uid."\.#", $file) && is_file($avatarpath."/".$file) && $file != $exclude) - { - delete_uploaded_file($avatarpath."/".$file); - } - } - - @closedir($dir); - } -} - -/** - * Upload a new avatar in to the file system - * - * @param array $avatar Incoming FILE array, if we have one - otherwise takes $_FILES['avatarupload'] - * @param int $uid User ID this avatar is being uploaded for, if not the current user - * @return array Array of errors if any, otherwise filename of successful. - */ -function upload_avatar($avatar=array(), $uid=0) -{ - global $db, $mybb, $lang, $plugins, $cache; - - $ret = array(); - - if(!$uid) - { - $uid = $mybb->user['uid']; - } - - if(!$avatar['name'] || !$avatar['tmp_name']) - { - $avatar = $_FILES['avatarupload']; - } - - if(!is_uploaded_file($avatar['tmp_name'])) - { - $ret['error'] = $lang->error_uploadfailed; - return $ret; - } - - // Check we have a valid extension - $ext = get_extension(my_strtolower($avatar['name'])); - if(!preg_match("#^(gif|jpg|jpeg|jpe|bmp|png)$#i", $ext)) - { - $ret['error'] = $lang->error_avatartype; - return $ret; - } - - if(defined('IN_ADMINCP')) - { - $avatarpath = '../'.$mybb->settings['avataruploadpath']; - $lang->load("messages", true); - } - else - { - $avatarpath = $mybb->settings['avataruploadpath']; - } - - $filename = "avatar_".$uid.".".$ext; - $file = upload_file($avatar, $avatarpath, $filename); - if($file['error']) - { - delete_uploaded_file($avatarpath."/".$filename); - $ret['error'] = $lang->error_uploadfailed; - return $ret; - } - - // Lets just double check that it exists - if(!file_exists($avatarpath."/".$filename)) - { - $ret['error'] = $lang->error_uploadfailed; - delete_uploaded_file($avatarpath."/".$filename); - return $ret; - } - - // Check if this is a valid image or not - $img_dimensions = @getimagesize($avatarpath."/".$filename); - if(!is_array($img_dimensions)) - { - delete_uploaded_file($avatarpath."/".$filename); - $ret['error'] = $lang->error_uploadfailed; - return $ret; - } - - // Check avatar dimensions - if($mybb->settings['maxavatardims'] != '') - { - list($maxwidth, $maxheight) = @explode("x", $mybb->settings['maxavatardims']); - if(($maxwidth && $img_dimensions[0] > $maxwidth) || ($maxheight && $img_dimensions[1] > $maxheight)) - { - // Automatic resizing enabled? - if($mybb->settings['avatarresizing'] == "auto" || ($mybb->settings['avatarresizing'] == "user" && $mybb->input['auto_resize'] == 1)) - { - require_once MYBB_ROOT."inc/functions_image.php"; - $thumbnail = generate_thumbnail($avatarpath."/".$filename, $avatarpath, $filename, $maxheight, $maxwidth); - if(!$thumbnail['filename']) - { - $ret['error'] = $lang->sprintf($lang->error_avatartoobig, $maxwidth, $maxheight); - $ret['error'] .= "

    ".$lang->error_avatarresizefailed; - delete_uploaded_file($avatarpath."/".$filename); - return $ret; - } - else - { - // Copy scaled image to CDN - copy_file_to_cdn($avatarpath . '/' . $thumbnail['filename']); - // Reset filesize - $avatar['size'] = filesize($avatarpath."/".$filename); - // Reset dimensions - $img_dimensions = @getimagesize($avatarpath."/".$filename); - } - } - else - { - $ret['error'] = $lang->sprintf($lang->error_avatartoobig, $maxwidth, $maxheight); - if($mybb->settings['avatarresizing'] == "user") - { - $ret['error'] .= "

    ".$lang->error_avataruserresize; - } - delete_uploaded_file($avatarpath."/".$filename); - return $ret; - } - } - } - - // Check a list of known MIME types to establish what kind of avatar we're uploading - $attachtypes = (array)$cache->read('attachtypes'); - - $allowed_mime_types = array(); - foreach($attachtypes as $attachtype) - { - if(defined('IN_ADMINCP') || is_member($attachtype['groups']) && $attachtype['avatarfile']) - { - $allowed_mime_types[$attachtype['mimetype']] = $attachtype['maxsize']; - } - } - - $avatar['type'] = my_strtolower($avatar['type']); - - switch($avatar['type']) - { - case "image/gif": - $img_type = 1; - break; - case "image/jpeg": - case "image/x-jpg": - case "image/x-jpeg": - case "image/pjpeg": - case "image/jpg": - $img_type = 2; - break; - case "image/png": - case "image/x-png": - $img_type = 3; - break; - case "image/bmp": - case "image/x-bmp": - case "image/x-windows-bmp": - $img_type = 6; - break; - default: - $img_type = 0; - } - - // Check if the uploaded file type matches the correct image type (returned by getimagesize) - if(empty($allowed_mime_types[$avatar['type']]) || $img_dimensions[2] != $img_type || $img_type == 0) - { - $ret['error'] = $lang->error_uploadfailed; - delete_uploaded_file($avatarpath."/".$filename); - return $ret; - } - - // Next check the file size - if(($avatar['size'] > ($mybb->settings['avatarsize']*1024) && $mybb->settings['avatarsize'] > 0) || $avatar['size'] > $allowed_mime_types[$avatar['type']] && !($mybb->settings['avatarsize'] > 0)) - { - delete_uploaded_file($avatarpath."/".$filename); - $ret['error'] = $lang->error_uploadsize; - return $ret; - } - - // Everything is okay so lets delete old avatars for this user - remove_avatars($uid, $filename); - - $ret = array( - "avatar" => $mybb->settings['avataruploadpath']."/".$filename, - "width" => (int)$img_dimensions[0], - "height" => (int)$img_dimensions[1] - ); - $ret = $plugins->run_hooks("upload_avatar_end", $ret); - return $ret; -} - -/** - * Upload an attachment in to the file system - * - * @param array $attachment Attachment data (as fed by PHPs $_FILE) - * @param boolean $update_attachment Whether or not we are updating a current attachment or inserting a new one - * @return array Array of attachment data if successful, otherwise array of error data - */ -function upload_attachment($attachment, $update_attachment=false) -{ - global $mybb, $db, $theme, $templates, $posthash, $pid, $tid, $forum, $mybb, $lang, $plugins, $cache; - - $posthash = $db->escape_string($mybb->get_input('posthash')); - $pid = (int)$pid; - - if(isset($attachment['error']) && $attachment['error'] != 0) - { - $ret['error'] = $lang->error_uploadfailed.$lang->error_uploadfailed_detail; - switch($attachment['error']) - { - case 1: // UPLOAD_ERR_INI_SIZE - $ret['error'] .= $lang->error_uploadfailed_php1; - break; - case 2: // UPLOAD_ERR_FORM_SIZE - $ret['error'] .= $lang->error_uploadfailed_php2; - break; - case 3: // UPLOAD_ERR_PARTIAL - $ret['error'] .= $lang->error_uploadfailed_php3; - break; - case 4: // UPLOAD_ERR_NO_FILE - $ret['error'] .= $lang->error_uploadfailed_php4; - break; - case 6: // UPLOAD_ERR_NO_TMP_DIR - $ret['error'] .= $lang->error_uploadfailed_php6; - break; - case 7: // UPLOAD_ERR_CANT_WRITE - $ret['error'] .= $lang->error_uploadfailed_php7; - break; - default: - $ret['error'] .= $lang->sprintf($lang->error_uploadfailed_phpx, $attachment['error']); - break; - } - return $ret; - } - - if(!is_uploaded_file($attachment['tmp_name']) || empty($attachment['tmp_name'])) - { - $ret['error'] = $lang->error_uploadfailed.$lang->error_uploadfailed_php4; - return $ret; - } - - $attachtypes = (array)$cache->read('attachtypes'); - $attachment = $plugins->run_hooks("upload_attachment_start", $attachment); - - $allowed_mime_types = array(); - foreach($attachtypes as $ext => $attachtype) - { - if(!is_member($attachtype['groups']) || ($attachtype['forums'] != -1 && strpos(','.$attachtype['forums'].',', ','.$forum['fid'].',') === false)) - { - unset($attachtypes[$ext]); - } - } - - $ext = get_extension($attachment['name']); - // Check if we have a valid extension - if(!isset($attachtypes[$ext])) - { - $ret['error'] = $lang->error_attachtype; - return $ret; - } - else - { - $attachtype = $attachtypes[$ext]; - } - - // Check the size - if($attachment['size'] > $attachtype['maxsize']*1024 && $attachtype['maxsize'] != "") - { - $ret['error'] = $lang->sprintf($lang->error_attachsize, $attachtype['maxsize']); - return $ret; - } - - // Double check attachment space usage - if($mybb->usergroup['attachquota'] > 0) - { - $query = $db->simple_select("attachments", "SUM(filesize) AS ausage", "uid='".$mybb->user['uid']."'"); - $usage = $db->fetch_array($query); - $usage = $usage['ausage']+$attachment['size']; - if($usage > ($mybb->usergroup['attachquota']*1024)) - { - $friendlyquota = get_friendly_size($mybb->usergroup['attachquota']*1024); - $ret['error'] = $lang->sprintf($lang->error_reachedattachquota, $friendlyquota); - return $ret; - } - } - - // Gather forum permissions - $forumpermissions = forum_permissions($forum['fid']); - - // Check if an attachment with this name is already in the post - if($pid != 0) - { - $uploaded_query = "pid='{$pid}'"; - } - else - { - $uploaded_query = "posthash='{$posthash}'"; - } - $query = $db->simple_select("attachments", "*", "filename='".$db->escape_string($attachment['name'])."' AND ".$uploaded_query); - $prevattach = $db->fetch_array($query); - if($prevattach['aid'] && $update_attachment == false) - { - if(!$mybb->usergroup['caneditattachments'] && !$forumpermissions['caneditattachments']) - { - $ret['error'] = $lang->error_alreadyuploaded_perm; - return $ret; - } - - $ret['error'] = $lang->error_alreadyuploaded; - return $ret; - } - - // Check to see how many attachments exist for this post already - if($mybb->settings['maxattachments'] > 0 && $update_attachment == false) - { - $query = $db->simple_select("attachments", "COUNT(aid) AS numattachs", $uploaded_query); - $attachcount = $db->fetch_field($query, "numattachs"); - if($attachcount >= $mybb->settings['maxattachments']) - { - $ret['error'] = $lang->sprintf($lang->error_maxattachpost, $mybb->settings['maxattachments']); - return $ret; - } - } - - $month_dir = ''; - if($mybb->safemode == false) - { - // Check if the attachment directory (YYYYMM) exists, if not, create it - $month_dir = gmdate("Ym"); - if(!@is_dir($mybb->settings['uploadspath']."/".$month_dir)) - { - @mkdir($mybb->settings['uploadspath']."/".$month_dir); - // Still doesn't exist - oh well, throw it in the main directory - if(!@is_dir($mybb->settings['uploadspath']."/".$month_dir)) - { - $month_dir = ''; - } - else - { - $index = @fopen($mybb->settings['uploadspath']."/".$month_dir."/index.html", 'w'); - @fwrite($index, "\n\n\n\n\n \n\n"); - @fclose($index); - } - } - } - - // All seems to be good, lets move the attachment! - $filename = "post_".$mybb->user['uid']."_".TIME_NOW."_".md5(random_str()).".attach"; - - $file = upload_file($attachment, $mybb->settings['uploadspath']."/".$month_dir, $filename); - - // Failed to create the attachment in the monthly directory, just throw it in the main directory - if(!empty($file['error']) && $month_dir) - { - $file = upload_file($attachment, $mybb->settings['uploadspath'].'/', $filename); - } - elseif($month_dir) - { - $filename = $month_dir."/".$filename; - } - - if(!empty($file['error'])) - { - $ret['error'] = $lang->error_uploadfailed.$lang->error_uploadfailed_detail; - switch($file['error']) - { - case 1: - $ret['error'] .= $lang->error_uploadfailed_nothingtomove; - break; - case 2: - $ret['error'] .= $lang->error_uploadfailed_movefailed; - break; - } - return $ret; - } - - // Lets just double check that it exists - if(!file_exists($mybb->settings['uploadspath']."/".$filename)) - { - $ret['error'] = $lang->error_uploadfailed.$lang->error_uploadfailed_detail.$lang->error_uploadfailed_lost; - return $ret; - } - - // Generate the array for the insert_query - $attacharray = array( - "pid" => $pid, - "posthash" => $posthash, - "uid" => $mybb->user['uid'], - "filename" => $db->escape_string($file['original_filename']), - "filetype" => $db->escape_string($file['type']), - "filesize" => (int)$file['size'], - "attachname" => $filename, - "downloads" => 0, - "dateuploaded" => TIME_NOW - ); - - // If we're uploading an image, check the MIME type compared to the image type and attempt to generate a thumbnail - if($ext == "gif" || $ext == "png" || $ext == "jpg" || $ext == "jpeg" || $ext == "jpe") - { - // Check a list of known MIME types to establish what kind of image we're uploading - switch(my_strtolower($file['type'])) - { - case "image/gif": - $img_type = 1; - break; - case "image/jpeg": - case "image/x-jpg": - case "image/x-jpeg": - case "image/pjpeg": - case "image/jpg": - $img_type = 2; - break; - case "image/png": - case "image/x-png": - $img_type = 3; - break; - default: - $img_type = 0; - } - - $supported_mimes = array(); - foreach($attachtypes as $attachtype) - { - if(!empty($attachtype['mimetype'])) - { - $supported_mimes[] = $attachtype['mimetype']; - } - } - - // Check if the uploaded file type matches the correct image type (returned by getimagesize) - $img_dimensions = @getimagesize($mybb->settings['uploadspath']."/".$filename); - - $mime = ""; - $file_path = $mybb->settings['uploadspath']."/".$filename; - if(function_exists("finfo_open")) - { - $file_info = finfo_open(FILEINFO_MIME); - list($mime, ) = explode(';', finfo_file($file_info, MYBB_ROOT.$file_path), 1); - finfo_close($file_info); - } - else if(function_exists("mime_content_type")) - { - $mime = mime_content_type(MYBB_ROOT.$file_path); - } - - if(!is_array($img_dimensions) || ($img_dimensions[2] != $img_type && !in_array($mime, $supported_mimes))) - { - delete_uploaded_file($mybb->settings['uploadspath']."/".$filename); - $ret['error'] = $lang->error_uploadfailed; - return $ret; - } - require_once MYBB_ROOT."inc/functions_image.php"; - $thumbname = str_replace(".attach", "_thumb.$ext", $filename); - - $attacharray = $plugins->run_hooks("upload_attachment_thumb_start", $attacharray); - - $thumbnail = generate_thumbnail($mybb->settings['uploadspath']."/".$filename, $mybb->settings['uploadspath'], $thumbname, $mybb->settings['attachthumbh'], $mybb->settings['attachthumbw']); - - if($thumbnail['filename']) - { - $attacharray['thumbnail'] = $thumbnail['filename']; - } - elseif($thumbnail['code'] == 4) - { - $attacharray['thumbnail'] = "SMALL"; - } - } - if($forumpermissions['modattachments'] == 1 && !is_moderator($forum['fid'], "canapproveunapproveattachs")) - { - $attacharray['visible'] = 0; - } - else - { - $attacharray['visible'] = 1; - } - - $attacharray = $plugins->run_hooks("upload_attachment_do_insert", $attacharray); - - if($prevattach['aid'] && $update_attachment == true) - { - unset($attacharray['downloads']); // Keep our download count if we're updating an attachment - $db->update_query("attachments", $attacharray, "aid='".$db->escape_string($prevattach['aid'])."'"); - - // Remove old attachment file - // Check if this attachment is referenced in any other posts. If it isn't, then we are safe to delete the actual file. - $query = $db->simple_select("attachments", "COUNT(aid) as numreferences", "attachname='".$db->escape_string($prevattach['attachname'])."'"); - if($db->fetch_field($query, "numreferences") == 0) - { - delete_uploaded_file($mybb->settings['uploadspath']."/".$prevattach['attachname']); - if($prevattach['thumbnail']) - { - delete_uploaded_file($mybb->settings['uploadspath']."/".$prevattach['thumbnail']); - } - - $date_directory = explode('/', $prevattach['attachname']); - if(@is_dir($mybb->settings['uploadspath']."/".$date_directory[0])) - { - delete_upload_directory($mybb->settings['uploadspath']."/".$date_directory[0]); - } - } - - $aid = $prevattach['aid']; - } - else - { - $aid = $db->insert_query("attachments", $attacharray); - if($pid) - { - update_thread_counters($tid, array("attachmentcount" => "+1")); - } - } - $ret['aid'] = $aid; - return $ret; -} - -/** - * Delete an uploaded file both from the relative path and the CDN path if a CDN is in use. - * - * @param string $path The relative path to the uploaded file. - * - * @return bool Whether the file was deleted successfully. - */ -function delete_uploaded_file($path = '') -{ - global $mybb, $plugins; - - $deleted = false; - - $deleted = @unlink($path); - - $cdn_base_path = rtrim($mybb->settings['cdnpath'], '/'); - $path = ltrim($path, '/'); - $cdn_path = realpath($cdn_base_path . '/' . $path); - - if($mybb->settings['usecdn'] && !empty($cdn_base_path)) - { - $deleted = $deleted && @unlink($cdn_path); - } - - $hook_params = array( - 'path' => &$path, - 'deleted' => &$deleted, - ); - - $plugins->run_hooks('delete_uploaded_file', $hook_params); - - return $deleted; -} - -/** - * Delete an upload directory on both the local filesystem and the CDN filesystem. - * - * @param string $path The directory to delete. - * - * @return bool Whether the directory was deleted. - */ -function delete_upload_directory($path = '') -{ - global $mybb, $plugins; - - $deleted = false; - - $deleted = @rmdir($path); - - $cdn_base_path = rtrim($mybb->settings['cdnpath'], '/'); - $path = ltrim($path, '/'); - $cdn_path = rtrim(realpath($cdn_base_path . '/' . $path), '/'); - - if($mybb->settings['usecdn'] && !empty($cdn_base_path)) - { - $deleted = $deleted && @rmdir($cdn_path); - } - - $hook_params = array( - 'path' => &$path, - 'deleted' => &$deleted, - ); - - $plugins->run_hooks('delete_upload_directory', $hook_params); - - return $deleted; -} - -/** - * Actually move a file to the uploads directory - * - * @param array $file The PHP $_FILE array for the file - * @param string $path The path to save the file in - * @param string $filename The filename for the file (if blank, current is used) - * @return array The uploaded file - */ -function upload_file($file, $path, $filename="") -{ - global $plugins, $mybb; - - $upload = array(); - - if(empty($file['name']) || $file['name'] == "none" || $file['size'] < 1) - { - $upload['error'] = 1; - return $upload; - } - - if(!$filename) - { - $filename = $file['name']; - } - - $upload['original_filename'] = preg_replace("#/$#", "", $file['name']); // Make the filename safe - $filename = preg_replace("#/$#", "", $filename); // Make the filename safe - $moved = @move_uploaded_file($file['tmp_name'], $path."/".$filename); - - $cdn_path = ''; - - $moved_cdn = copy_file_to_cdn($path."/".$filename, $cdn_path); - - if(!$moved) - { - $upload['error'] = 2; - return $upload; - } - @my_chmod($path."/".$filename, '0644'); - $upload['filename'] = $filename; - $upload['path'] = $path; - $upload['type'] = $file['type']; - $upload['size'] = $file['size']; - $upload = $plugins->run_hooks("upload_file_end", $upload); - - if($moved_cdn) - { - $upload['cdn_path'] = $cdn_path; - } - - return $upload; -} diff --git a/html/forums/inc/functions_user.php b/html/forums/inc/functions_user.php deleted file mode 100644 index 7fcddd4..0000000 --- a/html/forums/inc/functions_user.php +++ /dev/null @@ -1,848 +0,0 @@ -simple_select("users", "COUNT(*) as user", "uid='".(int)$uid."'", array('limit' => 1)); - if($db->fetch_field($query, 'user') == 1) - { - return true; - } - else - { - return false; - } -} - -/** - * Checks if $username already exists in the database. - * - * @param string $username The username for check for. - * @return boolean True when exists, false when not. - */ -function username_exists($username) -{ - $options = array( - 'username_method' => 2 - ); - - return (bool)get_user_by_username($username, $options); -} - -/** - * Checks a password with a supplied username. - * - * @param string $username The username of the user. - * @param string $password The plain-text password. - * @return boolean|array False when no match, array with user info when match. - */ -function validate_password_from_username($username, $password) -{ - global $mybb; - - $options = array( - 'fields' => '*', - 'username_method' => $mybb->settings['username_method'], - ); - - $user = get_user_by_username($username, $options); - - if(!$user['uid']) - { - return false; - } - - return validate_password_from_uid($user['uid'], $password, $user); -} - -/** - * Checks a password with a supplied uid. - * - * @param int $uid The user id. - * @param string $password The plain-text password. - * @param array $user An optional user data array. - * @return boolean|array False when not valid, user data array when valid. - */ -function validate_password_from_uid($uid, $password, $user = array()) -{ - global $db, $mybb; - if(isset($mybb->user['uid']) && $mybb->user['uid'] == $uid) - { - $user = $mybb->user; - } - if(!$user['password']) - { - $user = get_user($uid); - } - if(!$user['salt']) - { - // Generate a salt for this user and assume the password stored in db is a plain md5 password - $password_fields = create_password($user['password'], false, $user); - $db->update_query("users", $password_fields, "uid='".$user['uid']."'"); - } - - if(!$user['loginkey']) - { - $user['loginkey'] = generate_loginkey(); - $sql_array = array( - "loginkey" => $user['loginkey'] - ); - $db->update_query("users", $sql_array, "uid = ".$user['uid']); - } - if(verify_user_password($user, $password)) - { - return $user; - } - else - { - return false; - } -} - -/** - * Updates a user's password. - * - * @param int $uid The user's id. - * @param string $password The md5()'ed password. - * @param string $salt (Optional) The salt of the user. - * @return array The new password. - * @deprecated deprecated since version 1.8.6 Please use other alternatives. - */ -function update_password($uid, $password, $salt="") -{ - global $db, $plugins; - - $newpassword = array(); - - // If no salt was specified, check in database first, if still doesn't exist, create one - if(!$salt) - { - $query = $db->simple_select("users", "salt", "uid='$uid'"); - $user = $db->fetch_array($query); - if($user['salt']) - { - $salt = $user['salt']; - } - else - { - $salt = generate_salt(); - } - $newpassword['salt'] = $salt; - } - - // Create new password based on salt - $saltedpw = salt_password($password, $salt); - - // Generate new login key - $loginkey = generate_loginkey(); - - // Update password and login key in database - $newpassword['password'] = $saltedpw; - $newpassword['loginkey'] = $loginkey; - $db->update_query("users", $newpassword, "uid='$uid'"); - - $plugins->run_hooks("password_changed"); - - return $newpassword; -} - -/** - * Salts a password based on a supplied salt. - * - * @param string $password The md5()'ed password. - * @param string $salt The salt. - * @return string The password hash. - * @deprecated deprecated since version 1.8.9 Please use other alternatives. - */ -function salt_password($password, $salt) -{ - return md5(md5($salt).$password); -} - -/** - * Salts a password based on a supplied salt. - * - * @param string $password The input password. - * @param string $salt (Optional) The salt used by the MyBB algorithm. - * @param string $user (Optional) An array containing password-related data. - * @return array Password-related fields. - */ -function create_password($password, $salt = false, $user = false) -{ - global $plugins; - - $fields = null; - - $parameters = compact('password', 'salt', 'user', 'fields'); - - if(!defined('IN_INSTALL') && !defined('IN_UPGRADE')) - { - $plugins->run_hooks('create_password', $parameters); - } - - if(!is_null($parameters['fields'])) - { - $fields = $parameters['fields']; - } - else - { - if(!$salt) - { - $salt = generate_salt(); - } - - $hash = md5(md5($salt).md5($password)); - - $fields = array( - 'salt' => $salt, - 'password' => $hash, - ); - } - - return $fields; -} - -/** - * Compares user's password data against provided input. - * - * @param array $user An array containing password-related data. - * @param string $password The plain-text input password. - * @return bool Result of the comparison. - */ -function verify_user_password($user, $password) -{ - global $plugins; - - $result = null; - - $parameters = compact('user', 'password', 'result'); - - if(!defined('IN_INSTALL') && !defined('IN_UPGRADE')) - { - $plugins->run_hooks('verify_user_password', $parameters); - } - - if(!is_null($parameters['result'])) - { - return $parameters['result']; - } - else - { - $password_fields = create_password($password, $user['salt'], $user); - - return my_hash_equals($user['password'], $password_fields['password']); - } -} - -/** - * Performs a timing attack safe string comparison. - * - * @param string $known_string The first string to be compared. - * @param string $user_string The second, user-supplied string to be compared. - * @return bool Result of the comparison. - */ -function my_hash_equals($known_string, $user_string) -{ - if(version_compare(PHP_VERSION, '5.6.0', '>=')) - { - return hash_equals($known_string, $user_string); - } - else - { - $known_string_length = my_strlen($known_string); - $user_string_length = my_strlen($user_string); - - if($user_string_length != $known_string_length) - { - return false; - } - - $result = 0; - - for($i = 0; $i < $known_string_length; $i++) - { - $result |= ord($known_string[$i]) ^ ord($user_string[$i]); - } - - return $result === 0; - } -} - -/** - * Generates a random salt - * - * @return string The salt. - */ -function generate_salt() -{ - return random_str(8); -} - -/** - * Generates a 50 character random login key. - * - * @return string The login key. - */ -function generate_loginkey() -{ - return random_str(50); -} - -/** - * Updates a user's salt in the database (does not update a password). - * - * @param int $uid The uid of the user to update. - * @return string The new salt. - */ -function update_salt($uid) -{ - global $db; - - $salt = generate_salt(); - $sql_array = array( - "salt" => $salt - ); - $db->update_query("users", $sql_array, "uid='{$uid}'"); - - return $salt; -} - -/** - * Generates a new login key for a user. - * - * @param int $uid The uid of the user to update. - * @return string The new login key. - */ -function update_loginkey($uid) -{ - global $db; - - $loginkey = generate_loginkey(); - $sql_array = array( - "loginkey" => $loginkey - ); - $db->update_query("users", $sql_array, "uid='{$uid}'"); - - return $loginkey; - -} - -/** - * Adds a thread to a user's thread subscription list. - * If no uid is supplied, the currently logged in user's id will be used. - * - * @param int $tid The tid of the thread to add to the list. - * @param int $notification (Optional) The type of notification to receive for replies (0=none, 1=email, 2=pm) - * @param int $uid (Optional) The uid of the user who's list to update. - * @return boolean True when success, false when otherwise. - */ -function add_subscribed_thread($tid, $notification=1, $uid=0) -{ - global $mybb, $db; - - if(!$uid) - { - $uid = $mybb->user['uid']; - } - - if(!$uid) - { - return false; - } - - $query = $db->simple_select("threadsubscriptions", "*", "tid='".(int)$tid."' AND uid='".(int)$uid."'"); - $subscription = $db->fetch_array($query); - if(!$subscription['tid']) - { - $insert_array = array( - 'uid' => (int)$uid, - 'tid' => (int)$tid, - 'notification' => (int)$notification, - 'dateline' => TIME_NOW - ); - $db->insert_query("threadsubscriptions", $insert_array); - } - else - { - // Subscription exists - simply update notification - $update_array = array( - "notification" => (int)$notification - ); - $db->update_query("threadsubscriptions", $update_array, "uid='{$uid}' AND tid='{$tid}'"); - } - return true; -} - -/** - * Remove a thread from a user's thread subscription list. - * If no uid is supplied, the currently logged in user's id will be used. - * - * @param int $tid The tid of the thread to remove from the list. - * @param int $uid (Optional) The uid of the user who's list to update. - * @return boolean True when success, false when otherwise. - */ -function remove_subscribed_thread($tid, $uid=0) -{ - global $mybb, $db; - - if(!$uid) - { - $uid = $mybb->user['uid']; - } - - if(!$uid) - { - return false; - } - $db->delete_query("threadsubscriptions", "tid='".$tid."' AND uid='{$uid}'"); - - return true; -} - -/** - * Adds a forum to a user's forum subscription list. - * If no uid is supplied, the currently logged in user's id will be used. - * - * @param int $fid The fid of the forum to add to the list. - * @param int $uid (Optional) The uid of the user who's list to update. - * @return boolean True when success, false when otherwise. - */ -function add_subscribed_forum($fid, $uid=0) -{ - global $mybb, $db; - - if(!$uid) - { - $uid = $mybb->user['uid']; - } - - if(!$uid) - { - return false; - } - - $fid = (int)$fid; - $uid = (int)$uid; - - $query = $db->simple_select("forumsubscriptions", "*", "fid='".$fid."' AND uid='{$uid}'", array('limit' => 1)); - $fsubscription = $db->fetch_array($query); - if(!$fsubscription['fid']) - { - $insert_array = array( - 'fid' => $fid, - 'uid' => $uid - ); - $db->insert_query("forumsubscriptions", $insert_array); - } - - return true; -} - -/** - * Removes a forum from a user's forum subscription list. - * If no uid is supplied, the currently logged in user's id will be used. - * - * @param int $fid The fid of the forum to remove from the list. - * @param int $uid (Optional) The uid of the user who's list to update. - * @return boolean True when success, false when otherwise. - */ -function remove_subscribed_forum($fid, $uid=0) -{ - global $mybb, $db; - - if(!$uid) - { - $uid = $mybb->user['uid']; - } - - if(!$uid) - { - return false; - } - $db->delete_query("forumsubscriptions", "fid='".$fid."' AND uid='{$uid}'"); - - return true; -} - -/** - * Constructs the usercp navigation menu. - * - */ -function usercp_menu() -{ - global $mybb, $templates, $theme, $plugins, $lang, $usercpnav, $usercpmenu; - - $lang->load("usercpnav"); - - // Add the default items as plugins with separated priorities of 10 - if($mybb->settings['enablepms'] != 0 && $mybb->usergroup['canusepms'] == 1) - { - $plugins->add_hook("usercp_menu", "usercp_menu_messenger", 10); - } - - if($mybb->usergroup['canusercp'] == 1) - { - $plugins->add_hook("usercp_menu", "usercp_menu_profile", 20); - $plugins->add_hook("usercp_menu", "usercp_menu_misc", 30); - } - - // Run the plugin hooks - $plugins->run_hooks("usercp_menu"); - global $usercpmenu; - - if($mybb->usergroup['canusercp'] == 1) - { - eval("\$ucp_nav_home = \"".$templates->get("usercp_nav_home")."\";"); - } - - eval("\$usercpnav = \"".$templates->get("usercp_nav")."\";"); - - $plugins->run_hooks("usercp_menu_built"); -} - -/** - * Constructs the usercp messenger menu. - * - */ -function usercp_menu_messenger() -{ - global $db, $mybb, $templates, $theme, $usercpmenu, $lang, $collapsed, $collapsedimg; - - $usercp_nav_messenger = $templates->get("usercp_nav_messenger"); - // Hide tracking link if no permission - $tracking = ''; - if($mybb->usergroup['cantrackpms']) - { - $tracking = $templates->get("usercp_nav_messenger_tracking"); - } - eval("\$ucp_nav_tracking = \"". $tracking ."\";"); - - // Hide compose link if no permission - $ucp_nav_compose = ''; - if($mybb->usergroup['cansendpms'] == 1) - { - eval("\$ucp_nav_compose = \"".$templates->get("usercp_nav_messenger_compose")."\";"); - } - - $folderlinks = $folder_id = $folder_name = ''; - $foldersexploded = explode("$%%$", $mybb->user['pmfolders']); - foreach($foldersexploded as $key => $folders) - { - $folderinfo = explode("**", $folders, 2); - $folderinfo[1] = get_pm_folder_name($folderinfo[0], $folderinfo[1]); - if($folderinfo[0] == 4) - { - $class = "usercp_nav_trash_pmfolder"; - } - else if($folderlinks) - { - $class = "usercp_nav_sub_pmfolder"; - } - else - { - $class = "usercp_nav_pmfolder"; - } - - $folder_id = $folderinfo[0]; - $folder_name = $folderinfo[1]; - - eval("\$folderlinks .= \"".$templates->get("usercp_nav_messenger_folder")."\";"); - } - - if(!isset($collapsedimg['usercppms'])) - { - $collapsedimg['usercppms'] = ''; - } - - if(!isset($collapsed['usercppms_e'])) - { - $collapsed['usercppms_e'] = ''; - } - - eval("\$usercpmenu .= \"".$usercp_nav_messenger."\";"); -} - -/** - * Constructs the usercp profile menu. - * - */ -function usercp_menu_profile() -{ - global $db, $mybb, $templates, $theme, $usercpmenu, $lang, $collapsed, $collapsedimg; - - $changenameop = ''; - if($mybb->usergroup['canchangename'] != 0) - { - eval("\$changenameop = \"".$templates->get("usercp_nav_changename")."\";"); - } - - $changesigop = ''; - if($mybb->usergroup['canusesig'] == 1 && ($mybb->usergroup['canusesigxposts'] == 0 || $mybb->usergroup['canusesigxposts'] > 0 && $mybb->user['postnum'] > $mybb->usergroup['canusesigxposts'])) - { - if($mybb->user['suspendsignature'] == 0 || $mybb->user['suspendsignature'] == 1 && $mybb->user['suspendsigtime'] > 0 && $mybb->user['suspendsigtime'] < TIME_NOW) - { - eval("\$changesigop = \"".$templates->get("usercp_nav_editsignature")."\";"); - } - } - - if(!isset($collapsedimg['usercpprofile'])) - { - $collapsedimg['usercpprofile'] = ''; - } - - if(!isset($collapsed['usercpprofile_e'])) - { - $collapsed['usercpprofile_e'] = ''; - } - - eval("\$usercpmenu .= \"".$templates->get("usercp_nav_profile")."\";"); -} - -/** - * Constructs the usercp misc menu. - * - */ -function usercp_menu_misc() -{ - global $db, $mybb, $templates, $theme, $usercpmenu, $lang, $collapsed, $collapsedimg; - - $draftstart = $draftend = ''; - $draftcount = $lang->ucp_nav_drafts; - - $query = $db->simple_select("posts", "COUNT(pid) AS draftcount", "visible = '-2' AND uid = '{$mybb->user['uid']}'"); - $count = $db->fetch_field($query, 'draftcount'); - - if($count > 0) - { - $draftcount = $lang->sprintf($lang->ucp_nav_drafts_active, my_number_format($count)); - } - - if($mybb->settings['enableattachments'] != 0) - { - eval("\$attachmentop = \"".$templates->get("usercp_nav_attachments")."\";"); - } - - if(!isset($collapsedimg['usercpmisc'])) - { - $collapsedimg['usercpmisc'] = ''; - } - - if(!isset($collapsed['usercpmisc_e'])) - { - $collapsed['usercpmisc_e'] = ''; - } - - $profile_link = get_profile_link($mybb->user['uid']); - eval("\$usercpmenu .= \"".$templates->get("usercp_nav_misc")."\";"); -} - -/** - * Gets the usertitle for a specific uid. - * - * @param int $uid The uid of the user to get the usertitle of. - * @return string The usertitle of the user. - */ -function get_usertitle($uid=0) -{ - global $db, $mybb; - - if($mybb->user['uid'] == $uid) - { - $user = $mybb->user; - } - else - { - $query = $db->simple_select("users", "usertitle,postnum", "uid='$uid'", array('limit' => 1)); - $user = $db->fetch_array($query); - } - - if($user['usertitle']) - { - return $user['usertitle']; - } - else - { - $usertitles = $mybb->cache->read('usertitles'); - foreach($usertitles as $title) - { - if($title['posts'] <= $user['postnum']) - { - $usertitle = $title; - break; - } - } - - return $usertitle['title']; - } -} - -/** - * Updates a users private message count in the users table with the number of pms they have. - * - * @param int $uid The user id to update the count for. If none, assumes currently logged in user. - * @param int $count_to_update Bitwise value for what to update. 1 = total, 2 = new, 4 = unread. Combinations accepted. - * @return array The updated counters - */ -function update_pm_count($uid=0, $count_to_update=7) -{ - global $db, $mybb; - - // If no user id, assume that we mean the current logged in user. - if((int)$uid == 0) - { - $uid = $mybb->user['uid']; - } - - $uid = (int)$uid; - $pmcount = array(); - if($uid == 0) - { - return $pmcount; - } - - // Update total number of messages. - if($count_to_update & 1) - { - $query = $db->simple_select("privatemessages", "COUNT(pmid) AS pms_total", "uid='".$uid."'"); - $total = $db->fetch_array($query); - $pmcount['totalpms'] = $total['pms_total']; - } - - // Update number of unread messages. - if($count_to_update & 2 && $db->field_exists("unreadpms", "users") == true) - { - $query = $db->simple_select("privatemessages", "COUNT(pmid) AS pms_unread", "uid='".$uid."' AND status='0' AND folder='1'"); - $unread = $db->fetch_array($query); - $pmcount['unreadpms'] = $unread['pms_unread']; - } - - if(!empty($pmcount)) - { - $db->update_query("users", $pmcount, "uid='".$uid."'"); - } - return $pmcount; -} - -/** - * Return the language specific name for a PM folder. - * - * @param int $fid The ID of the folder. - * @param string $name The folder name - can be blank, will use language default. - * @return string The name of the folder. - */ -function get_pm_folder_name($fid, $name="") -{ - global $lang; - - if($name != '') - { - return $name; - } - - switch($fid) - { - case 1: - return $lang->folder_inbox; - break; - case 2: - return $lang->folder_sent_items; - break; - case 3: - return $lang->folder_drafts; - break; - case 4: - return $lang->folder_trash; - break; - default: - return $lang->folder_untitled; - } -} - -/** - * Generates a security question for registration. - * - * @param int $old_qid Optional ID of the old question. - * @return string The question session id. - */ -function generate_question($old_qid=0) -{ - global $db; - - if($db->type == 'pgsql' || $db->type == 'sqlite') - { - $order_by = 'RANDOM()'; - } - else - { - $order_by = 'RAND()'; - } - - if($old_qid) - { - $excl_old = ' AND qid != '.(int)$old_qid; - } - - $query = $db->simple_select('questions', 'qid, shown', "active=1{$excl_old}", array('limit' => 1, 'order_by' => $order_by)); - $question = $db->fetch_array($query); - - if(!$db->num_rows($query)) - { - // No active questions exist - return false; - } - else - { - $sessionid = random_str(32); - - $sql_array = array( - "sid" => $sessionid, - "qid" => $question['qid'], - "dateline" => TIME_NOW - ); - $db->insert_query("questionsessions", $sql_array); - - $update_question = array( - "shown" => $question['shown'] + 1 - ); - $db->update_query("questions", $update_question, "qid = '{$question['qid']}'"); - - return $sessionid; - } -} - -/** - * Check whether we can show the Purge Spammer Feature - * - * @param int $post_count The users post count - * @param int $usergroup The usergroup of our user - * @param int $uid The uid of our user - * @return boolean Whether or not to show the feature - */ -function purgespammer_show($post_count, $usergroup, $uid) -{ - global $mybb, $cache; - - // only show this if the current user has permission to use it and the user has less than the post limit for using this tool - $bangroup = $mybb->settings['purgespammerbangroup']; - $usergroups = $cache->read('usergroups'); - - return ($mybb->user['uid'] != $uid && is_member($mybb->settings['purgespammergroups']) && !is_super_admin($uid) - && !$usergroups[$usergroup]['cancp'] && !$usergroups[$usergroup]['canmodcp'] && !$usergroups[$usergroup]['issupermod'] - && (str_replace($mybb->settings['thousandssep'], '', $post_count) <= $mybb->settings['purgespammerpostlimit'] || $mybb->settings['purgespammerpostlimit'] == 0) - && !is_member($bangroup, $uid) && !$usergroups[$usergroup]['isbannedgroup']); -} diff --git a/html/forums/inc/functions_warnings.php b/html/forums/inc/functions_warnings.php deleted file mode 100644 index 0fdd5f9..0000000 --- a/html/forums/inc/functions_warnings.php +++ /dev/null @@ -1,125 +0,0 @@ - -1, // Ban - 2 => -1, // Revoke posting - 3 => -1 // Moderate posting - ); - $check_levels = array( - 1 => false, // Ban - 2 => false, // Revoke posting - 3 => false // Moderate posting - ); - while($warn_level = $db->fetch_array($query)) - { - // revoke actions taken at this warning level - $action = my_unserialize($warn_level['action']); - if($action['type'] < 1 || $action['type'] > 3) // prevent any freak-ish cases - { - continue; - } - - $check_levels[$action['type']] = true; - - $max_exp_time = &$max_expiration_times[$action['type']]; - if($action['length'] && $max_exp_time != 0) - { - $expiration = $action['length']; - if($expiration > $max_exp_time) - { - $max_exp_time = $expiration; - } - } - else - { - $max_exp_time = 0; - } - } -} - -/** - * Returns a friendly expiration time of a suspension/warning - * - * @param int $time The time period of the suspension/warning - * @return array An array of the time/period remaining - */ -function fetch_friendly_expiration($time) -{ - if($time == 0 || $time == -1) - { - return array("period" => "never"); - } - else if($time % 2592000 == 0) - { - return array("time" => $time/2592000, "period" => "months"); - } - else if($time % 604800 == 0) - { - return array("time" => $time/604800, "period" => "weeks"); - } - else if($time % 86400 == 0) - { - return array("time" => $time/86400, "period" => "days"); - } - else - { - return array("time" => ceil($time/3600), "period" => "hours"); - } -} - -/** - * Figures out the length of a suspension/warning - * - * @param int $time The amount of time to calculate the length of suspension/warning - * @param string $period The period of time to calculate the length of suspension/warning - * @return int Length of the suspension/warning (in seconds) - */ -function fetch_time_length($time, $period) -{ - $time = (int)$time; - - if($period == "hours") - { - $time = $time*3600; - } - else if($period == "days") - { - $time = $time*86400; - } - else if($period == "weeks") - { - $time = $time*604800; - } - else if($period == "months") - { - $time = $time*2592000; - } - else if($period == "never" && $time == 0) - { - // User is permanentely banned - $time = "-1"; - } - else - { - $time = 0; - } - return $time; -} diff --git a/html/forums/inc/index.html b/html/forums/inc/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/init.php b/html/forums/inc/init.php deleted file mode 100644 index 62d06e1..0000000 --- a/html/forums/inc/init.php +++ /dev/null @@ -1,302 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/* Defines the root directory for MyBB. - - Uncomment the below line and set the path manually - if you experience problems. - - Always add a trailing slash to the end of the path. - - * Path to your copy of MyBB - */ -//define('MYBB_ROOT', "./"); - -// Attempt autodetection -if(!defined('MYBB_ROOT')) -{ - define('MYBB_ROOT', dirname(dirname(__FILE__))."/"); -} - -define("TIME_NOW", time()); - -if(function_exists('date_default_timezone_set') && !ini_get('date.timezone')) -{ - date_default_timezone_set('GMT'); -} - -require_once MYBB_ROOT."inc/class_error.php"; -$error_handler = new errorHandler(); - -if(!function_exists('json_encode') || !function_exists('json_decode')) -{ - require_once MYBB_ROOT.'inc/3rdparty/json/json.php'; -} - -require_once MYBB_ROOT."inc/functions.php"; - -require_once MYBB_ROOT."inc/class_timers.php"; -$maintimer = new timer(); - -require_once MYBB_ROOT."inc/class_core.php"; -$mybb = new MyBB; - -$not_installed = false; -if(!file_exists(MYBB_ROOT."inc/config.php")) -{ - $not_installed = true; -} -else -{ - // Include the required core files - require_once MYBB_ROOT."inc/config.php"; - $mybb->config = &$config; - - if(!isset($config['database'])) - { - $not_installed = true; - } -} - -if($not_installed !== false) -{ - if(file_exists(MYBB_ROOT."install/index.php")) - { - if(defined("IN_ARCHIVE") || defined("IN_ADMINCP")) - { - header("Location: ../install/index.php"); - exit; - } - header("Location: ./install/index.php"); - exit; - } - - $mybb->trigger_generic_error("board_not_installed"); -} - -if(!is_array($config['database'])) -{ - $mybb->trigger_generic_error("board_not_upgraded"); -} - -if(empty($config['admin_dir'])) -{ - $config['admin_dir'] = "admin"; -} - -// Trigger an error if the installation directory exists -if(is_dir(MYBB_ROOT."install") && !file_exists(MYBB_ROOT."install/lock")) -{ - $mybb->trigger_generic_error("install_directory"); -} - -// Load DB interface -require_once MYBB_ROOT."inc/db_base.php"; - -require_once MYBB_ROOT."inc/db_".$config['database']['type'].".php"; - -switch($config['database']['type']) -{ - case "sqlite": - $db = new DB_SQLite; - break; - case "pgsql": - $db = new DB_PgSQL; - break; - case "mysqli": - $db = new DB_MySQLi; - break; - default: - $db = new DB_MySQL; -} - -// Check if our DB engine is loaded -if(!extension_loaded($db->engine)) -{ - // Throw our super awesome db loading error - $mybb->trigger_generic_error("sql_load_error"); -} - -require_once MYBB_ROOT."inc/class_templates.php"; -$templates = new templates; - -require_once MYBB_ROOT."inc/class_datacache.php"; -$cache = new datacache; - -require_once MYBB_ROOT."inc/class_plugins.php"; -$plugins = new pluginSystem; - -// Include our base data handler class -require_once MYBB_ROOT."inc/datahandler.php"; - -// Connect to Database -define("TABLE_PREFIX", $config['database']['table_prefix']); -$db->connect($config['database']); -$db->set_table_prefix(TABLE_PREFIX); -$db->type = $config['database']['type']; - -// Language initialisation -require_once MYBB_ROOT."inc/class_language.php"; -$lang = new MyLanguage; -$lang->set_path(MYBB_ROOT."inc/languages"); - -// Load cache -$cache->cache(); - -// Load Settings -if(file_exists(MYBB_ROOT."inc/settings.php")) -{ - require_once MYBB_ROOT."inc/settings.php"; -} - -if(!file_exists(MYBB_ROOT."inc/settings.php") || empty($settings)) -{ - if(function_exists('rebuild_settings')) - { - rebuild_settings(); - } - else - { - $options = array( - "order_by" => "title", - "order_dir" => "ASC" - ); - - $query = $db->simple_select("settings", "value, name", "", $options); - - $settings = array(); - while($setting = $db->fetch_array($query)) - { - $setting['value'] = str_replace("\"", "\\\"", $setting['value']); - $settings[$setting['name']] = $setting['value']; - } - $db->free_result($query); - } -} - -$settings['wolcutoff'] = $settings['wolcutoffmins']*60; -$settings['bbname_orig'] = $settings['bbname']; -$settings['bbname'] = strip_tags($settings['bbname']); -$settings['orig_bblanguage'] = $settings['bblanguage']; - -// Fix for people who for some specify a trailing slash on the board URL -if(substr($settings['bburl'], -1) == "/") -{ - $settings['bburl'] = my_substr($settings['bburl'], 0, -1); -} - -// Setup our internal settings and load our encryption key -$settings['internal'] = $cache->read("internal_settings"); -if(!$settings['internal']['encryption_key']) -{ - $cache->update("internal_settings", array('encryption_key' => random_str(32))); - $settings['internal'] = $cache->read("internal_settings"); -} - -$mybb->settings = &$settings; -$mybb->parse_cookies(); -$mybb->cache = &$cache; -$mybb->asset_url = $mybb->get_asset_url(); - -if($mybb->use_shutdown == true) -{ - register_shutdown_function('run_shutdown'); -} - -// Did we just upgrade to a new version and haven't run the upgrade scripts yet? -$version = $cache->read("version"); -if(!defined("IN_INSTALL") && !defined("IN_UPGRADE") && $version['version_code'] < $mybb->version_code) -{ - $version_history = $cache->read("version_history"); - if(empty($version_history) || file_exists(MYBB_ROOT."install/resources/upgrade".(int)(end($version_history)+1).".php")) - { - $mybb->trigger_generic_error("board_not_upgraded"); - } -} - -// Load plugins -if(!defined("NO_PLUGINS") && !($mybb->settings['no_plugins'] == 1)) -{ - $plugins->load(); -} - -// Set up any shutdown functions we need to run globally -add_shutdown('send_mail_queue'); - -/* URL Definitions */ -if($mybb->settings['seourls'] == "yes" || ($mybb->settings['seourls'] == "auto" && isset($_SERVER['SEO_SUPPORT']) && $_SERVER['SEO_SUPPORT'] == 1)) -{ - $mybb->seo_support = true; - - define('FORUM_URL', "forum-{fid}.html"); - define('FORUM_URL_PAGED', "forum-{fid}-page-{page}.html"); - define('THREAD_URL', "thread-{tid}.html"); - define('THREAD_URL_PAGED', "thread-{tid}-page-{page}.html"); - define('THREAD_URL_ACTION', 'thread-{tid}-{action}.html'); - define('THREAD_URL_POST', 'thread-{tid}-post-{pid}.html'); - define('POST_URL', "post-{pid}.html"); - define('PROFILE_URL', "user-{uid}.html"); - define('ANNOUNCEMENT_URL', "announcement-{aid}.html"); - define('CALENDAR_URL', "calendar-{calendar}.html"); - define('CALENDAR_URL_MONTH', 'calendar-{calendar}-year-{year}-month-{month}.html'); - define('CALENDAR_URL_DAY', 'calendar-{calendar}-year-{year}-month-{month}-day-{day}.html'); - define('CALENDAR_URL_WEEK', 'calendar-{calendar}-week-{week}.html'); - define('EVENT_URL', "event-{eid}.html"); -} -else -{ - define('FORUM_URL', "forumdisplay.php?fid={fid}"); - define('FORUM_URL_PAGED', "forumdisplay.php?fid={fid}&page={page}"); - define('THREAD_URL', "showthread.php?tid={tid}"); - define('THREAD_URL_PAGED', "showthread.php?tid={tid}&page={page}"); - define('THREAD_URL_ACTION', 'showthread.php?tid={tid}&action={action}'); - define('THREAD_URL_POST', 'showthread.php?tid={tid}&pid={pid}'); - define('POST_URL', "showthread.php?pid={pid}"); - define('PROFILE_URL', "member.php?action=profile&uid={uid}"); - define('ANNOUNCEMENT_URL', "announcements.php?aid={aid}"); - define('CALENDAR_URL', "calendar.php?calendar={calendar}"); - define('CALENDAR_URL_MONTH', "calendar.php?calendar={calendar}&year={year}&month={month}"); - define('CALENDAR_URL_DAY', 'calendar.php?action=dayview&calendar={calendar}&year={year}&month={month}&day={day}'); - define('CALENDAR_URL_WEEK', 'calendar.php?action=weekview&calendar={calendar}&week={week}'); - define('EVENT_URL', "calendar.php?action=event&eid={eid}"); -} -define('INDEX_URL', "index.php"); - -// An array of valid date formats (Used for user selections etc) -$date_formats = array( - 1 => "m-d-Y", - 2 => "m-d-y", - 3 => "m.d.Y", - 4 => "m.d.y", - 5 => "d-m-Y", - 6 => "d-m-y", - 7 => "d.m.Y", - 8 => "d.m.y", - 9 => "F jS, Y", - 10 => "l, F jS, Y", - 11 => "jS F, Y", - 12 => "l, jS F, Y", - // ISO 8601 - 13 => "Y-m-d" -); - -// An array of valid time formats (Used for user selections etc) -$time_formats = array( - 1 => "h:i a", - 2 => "h:i A", - 3 => "H:i" -); - diff --git a/html/forums/inc/languages/english.php b/html/forums/inc/languages/english.php deleted file mode 100644 index b278ff2..0000000 --- a/html/forums/inc/languages/english.php +++ /dev/null @@ -1,30 +0,0 @@ - on all pages -$langinfo['htmllang'] = "en"; - -// Sets the character set, blank uses the default. -$langinfo['charset'] = "UTF-8"; diff --git a/html/forums/inc/languages/english/admin/config_attachment_types.lang.php b/html/forums/inc/languages/english/admin/config_attachment_types.lang.php deleted file mode 100644 index a420ed4..0000000 --- a/html/forums/inc/languages/english/admin/config_attachment_types.lang.php +++ /dev/null @@ -1,53 +0,0 @@ -See a list here
    )"; -$l['maximum_file_size'] = "Maximum File Size (Kilobytes)"; -$l['maximum_file_size_desc'] = "The maximum file size for uploads of this attachment type in Kilobytes (1 MB = 1024 KB)"; -$l['limit_intro'] = "Please ensure the maximum file size is below the smallest of the following PHP limits:"; -$l['limit_post_max_size'] = "Max Post Size: {1}"; -$l['limit_upload_max_filesize'] = "Upload Max File Size: {1}"; -$l['attachment_icon'] = "Attachment Icon"; -$l['attachment_icon_desc'] = "If you wish to show a small attachment icon for attachments of this type then enter the path to it here. {theme} will be replaced by the image directory for the viewers theme allowing you to specify per-theme attachment icons."; -$l['save_attachment_type'] = "Save Attachment Type"; - -$l['error_invalid_attachment_type'] = "You have selected an invalid attachment type."; -$l['error_missing_mime_type'] = "You did not enter a MIME type for this attachment type"; -$l['error_missing_extension'] = "You did not enter a file extension for this attachment type"; - -$l['success_attachment_type_created'] = "The attachment type has been created successfully."; -$l['success_attachment_type_updated'] = "The attachment type has been updated successfully."; -$l['success_attachment_type_deleted'] = "The attachment type has been deleted successfully."; - -$l['confirm_attachment_type_deletion'] = "Are you sure you wish to delete this attachment type?"; - -$l['success_activated_attachment_type'] = 'The selected attachment type has been activated successfully.'; -$l['success_deactivated_attachment_type'] = 'The selected attachment type has been deactivated successfully.'; - -$l['enabled'] = "Enabled?"; -$l['avatar_file'] = 'Avatar File'; -$l['avatar_file_desc'] = 'Do you want to allow this attachment type to be used for avatars?'; - -$l['available_to_groups'] = 'Available to groups'; -$l['available_in_forums'] = 'Available in forums'; \ No newline at end of file diff --git a/html/forums/inc/languages/english/admin/config_badwords.lang.php b/html/forums/inc/languages/english/admin/config_badwords.lang.php deleted file mode 100644 index f99a36a..0000000 --- a/html/forums/inc/languages/english/admin/config_badwords.lang.php +++ /dev/null @@ -1,35 +0,0 @@ -{subject} represents the original subject. {username} represents the moderator's username."; - -$l['success_mod_tool_created'] = "The moderation tool has been created successfully."; -$l['success_mod_tool_updated'] = "The moderation tool has been updated successfully."; - -$l['inline_post_moderation'] = "Inline Post Moderation"; -$l['delete_posts'] = "Delete posts permanently?"; -$l['merge_posts'] = "Merge posts?"; -$l['merge_posts_desc'] = "Only if used from inline moderation."; -$l['approve_unapprove_posts'] = "Approve/unapprove posts?"; -$l['softdelete_restore_posts'] = "Soft delete/restore posts?"; - -$l['split_posts'] = "Split Posts"; -$l['split_posts2'] = "Split posts?"; -$l['do_not_split'] = "Do not split posts"; -$l['split_to_same_forum'] = "Split to same forum"; -$l['close_split_thread'] = "Close split thread?"; -$l['stick_split_thread'] = "Stick split thread?"; -$l['unapprove_split_thread'] = "Unapprove split thread?"; -$l['split_thread_prefix'] = "Split thread prefix"; -$l['split_thread_subject'] = "Split thread subject"; -$l['split_thread_subject_desc'] = "{subject} represents the original subject. Only required if splitting posts."; -$l['add_new_split_reply'] = "Add reply to split thread"; -$l['add_new_split_reply_desc'] = "Leave blank for no reply."; -$l['split_reply_subject'] = "Reply subject"; -$l['split_reply_subject_desc'] = "Only used if a reply is made"; -$l['save_post_tool'] = "Save Post Tool"; - -$l['send_private_message'] = 'Send Private Message'; -$l['private_message_message'] = 'Message'; -$l['private_message_message_desc'] = 'Message to send to the author of the thread. Leave empty to disable this feature.'; -$l['private_message_subject'] = 'Subject'; -$l['private_message_subject_desc'] = 'Enter the subject of the Private Message.'; - -$l['error_missing_title'] = "Please enter a name for this tool."; -$l['error_missing_description'] = "Please enter a short description for this tool."; -$l['error_no_forums_selected'] = "Please select the forums in which this tool will be available."; -$l['error_no_groups_selected'] = "Please select the groups to which this tool will be available."; -$l['error_forum_is_category'] = "You can't pick a category-type forum as a destination forum."; diff --git a/html/forums/inc/languages/english/admin/config_module_meta.lang.php b/html/forums/inc/languages/english/admin/config_module_meta.lang.php deleted file mode 100644 index 34b2e5b..0000000 --- a/html/forums/inc/languages/english/admin/config_module_meta.lang.php +++ /dev/null @@ -1,47 +0,0 @@ -inc/plugins directory. To hide a plugin from view, but not lose any stored information from it, click the Deactivate link."; -$l['plugin_updates'] = "Plugin Updates"; -$l['plugin_updates_desc'] = "This section allows you to check for updates on all your plugins."; -$l['browse_plugins'] = "Browse Plugins"; -$l['browse_plugins_desc'] = "Here you may browse the official MyBB modifications site for plugins compatible with your series of MyBB."; -$l['browse_all_plugins'] = "Browse All Plugins"; - -$l['plugin'] = "Plugin"; -$l['active_plugin'] = "Active Plugins"; -$l['inactive_plugin'] = "Inactive Plugins"; -$l['your_version'] = "Your Version"; -$l['latest_version'] = "Latest Version"; -$l['download'] = "Download"; -$l['deactivate'] = "Deactivate"; -$l['activate'] = "Activate"; -$l['install_and_activate'] = "Install & Activate"; -$l['uninstall'] = "Uninstall"; -$l['created_by'] = "Created by"; -$l['no_plugins'] = "There are no plugins on your forum at this time."; -$l['no_active_plugins'] = "There are no active plugins on your forum."; -$l['no_inactive_plugins'] = "There are no inactive plugins available."; - -$l['plugin_incompatible'] = "This plugin is incompatible with MyBB {1}"; - -$l['recommended_plugins_for_mybb'] = "Recommended Plugins for MyBB {1}"; -$l['browse_results_for_mybb'] = "Browse Results for MyBB {1}"; -$l['search_for_plugins'] = "Search for Plugins"; -$l['search'] = "Search"; - -$l['error_vcheck_no_supported_plugins'] = "None of the plugins installed support version checking."; -$l['error_vcheck_communications_problem'] = "There was a problem communicating with the MyBB modifications version server. Please try again in a few minutes."; -$l['error_vcheck_vulnerable'] = "[Vulnerable plugin]:"; -$l['error_vcheck_vulnerable_notes'] = "This submission has currently been marked as vulnerable by the MyBB Staff. We recommend complete removal of this modification. Please see the notes below: "; -$l['error_no_input'] = "Error code 1: No input specified."; -$l['error_no_pids'] = "Error code 2: No plugin ids specified."; -$l['error_communication_problem'] = "There was a problem communicating with the MyBB modifications server. Please try again in a few minutes."; -$l['error_invalid_plugin'] = "The selected plugin does not exist."; -$l['error_no_results_found'] = "No results were found for the specified keywords."; - -$l['success_plugins_up_to_date'] = "Congratulations, all of your plugins are up to date."; -$l['success_plugin_activated'] = "The selected plugin has been activated successfully."; -$l['success_plugin_deactivated'] = "The selected plugin has been deactivated successfully."; -$l['success_plugin_installed'] = "The selected plugin has been installed and activated successfully."; -$l['success_plugin_uninstalled'] = "The selected plugin has been uninstalled successfully."; diff --git a/html/forums/inc/languages/english/admin/config_post_icons.lang.php b/html/forums/inc/languages/english/admin/config_post_icons.lang.php deleted file mode 100644 index d7e36da..0000000 --- a/html/forums/inc/languages/english/admin/config_post_icons.lang.php +++ /dev/null @@ -1,46 +0,0 @@ -{theme} to represent the image directory of each theme."; -$l['save_post_icon'] = "Save Post Icon"; -$l['reset'] = "Reset"; - -$l['path_to_images'] = "Path to Images"; -$l['path_to_images_desc'] = "This is the path to the folder that the images are in."; -$l['show_post_icons'] = "Show Post Icons"; -$l['image'] = "Image"; -$l['add'] = "Add?"; -$l['save_post_icons'] = "Save Post Icons"; - -$l['no_post_icons'] = "There are no post icons on your forum at this time."; - -$l['error_missing_name'] = "You did not enter a name for this post icon"; -$l['error_missing_path'] = "You did not enter a path to this post icon"; -$l['error_missing_path_multiple'] = "You did not enter a path"; -$l['error_invalid_path'] = "You did not enter a valid path"; -$l['error_no_images'] = "There are no post icons in the specified directory, or all post icons in the directory have already been added."; -$l['error_none_included'] = "You did not select any post icons to include."; -$l['error_invalid_post_icon'] = "The specified post icon does not exist."; - -$l['success_post_icon_added'] = "The post icon has been added successfully."; -$l['success_post_icons_added'] = "The selected post icons have been added successfully."; -$l['success_post_icon_updated'] = "The post icon has been updated successfully."; -$l['success_post_icon_deleted'] = "The selected post icon has been deleted successfully."; - -$l['confirm_post_icon_deletion'] = "Are you sure you wish to delete this post icon?"; diff --git a/html/forums/inc/languages/english/admin/config_profile_fields.lang.php b/html/forums/inc/languages/english/admin/config_profile_fields.lang.php deleted file mode 100644 index 56c6aa2..0000000 --- a/html/forums/inc/languages/english/admin/config_profile_fields.lang.php +++ /dev/null @@ -1,75 +0,0 @@ - -Example: ([a-z0-9_\- ,.+]+)"; -$l['selectable_options'] = "Selectable Options?"; -$l['selectable_options_desc'] = "Please enter each option on a separate line. This only applies to the select boxes, check boxes, and radio buttons types."; -$l['required'] = "Required?"; -$l['required_desc'] = "Is this field required to be filled in during registration or profile editing? Note that this does not apply if the field is hidden or the field is not editable."; -$l['show_on_registration'] = "Show on Registration?"; -$l['show_on_registration_desc'] = "Should this field appear on the registration form? Note that this does not apply if the field is not editable. Fields that are required will always appear on registration."; -$l['display_on_profile'] = "Display on profile?"; -$l['display_on_profile_desc'] = "Should this field be displayed on the user's profile? This doesn't apply to administrators/moderators."; -$l['display_on_postbit'] = "Display on postbit?"; -$l['display_on_postbit_desc'] = "Should this field be displayed on the user's posts?"; -$l['viewableby'] = 'Viewable By'; -$l['viewableby_desc'] = 'Select the allowed groups to view this profile field.'; -$l['editableby'] = 'Editable By'; -$l['editableby_desc'] = 'Select the allowed groups to edit this profile field.'; -$l['min_posts_enabled'] = "Minimum post count?"; -$l['min_posts_enabled_desc'] = "Should this field only be available to users with a certain post count? If so, set the minimum amount of posts required here."; -$l['parser_options'] = "Parser Options"; -$l['parse_allowhtml'] = "Yes, allow HTML in this profile field."; -$l['parse_allowmycode'] = "Yes, allow MyCode in this profile field."; -$l['parse_allowsmilies'] = "Yes, allow smilies in this profile field."; -$l['parse_allowimgcode'] = "Yes, allow [img] code in this profile field."; -$l['parse_allowvideocode'] = "Yes, allow [video] code in this profile field."; -$l['save_profile_field'] = "Save Profile Field"; -$l['name'] = "Name"; -$l['registration'] = "Registration?"; -$l['editable'] = "Editable?"; -$l['profile'] = "Profile?"; -$l['postbit'] = "Postbit?"; -$l['edit_field'] = "Edit Field"; -$l['delete_field'] = "Delete Field"; -$l['no_profile_fields'] = "There are no custom profile fields on your forum at this time."; - -$l['error_missing_name'] = "You did not enter a title for this custom profile field"; -$l['error_missing_description'] = "You did not enter a description for this custom profile field"; -$l['error_invalid_fid'] = "The selected profile field does not exist."; - -$l['success_profile_field_added'] = "The custom profile field has been created successfully."; -$l['success_profile_field_saved'] = "The custom profile field has been saved successfully."; -$l['success_profile_field_deleted'] = "The selected custom profile field has been deleted successfully."; - -$l['confirm_profile_field_deletion'] = "Are you sure you wish to delete this profile field?"; diff --git a/html/forums/inc/languages/english/admin/config_questions.lang.php b/html/forums/inc/languages/english/admin/config_questions.lang.php deleted file mode 100644 index 248da5d..0000000 --- a/html/forums/inc/languages/english/admin/config_questions.lang.php +++ /dev/null @@ -1,42 +0,0 @@ -For more information on CHMODing, see the MyBB Docs."; - -$l['success_setting_added'] = "The setting has been created successfully."; -$l['success_setting_updated'] = "The setting has been updated successfully."; -$l['success_setting_deleted'] = "The selected setting has been deleted successfully."; -$l['success_settings_updated'] = "The settings have been updated successfully."; -$l['success_settings_updated_hiddencaptchaimage'] = '
    Please note that the Hidden CAPTCHA field setting was reverted to {1} due to a conflict with the {2} field in the registration form.
    '; -$l['success_settings_updated_username_method'] = '
    Please note that the Allowed Login Methods setting was not updated due to multiple users using the same e-mail address at this time.
    '; -$l['success_settings_updated_allowmultipleemails'] = '
    Please note that the Allow emails to be registered multiple times? setting can\'t be enabled because the Allowed Login Methods setting allows users to login by e-mail address.
    '; -$l['success_settings_updated_captchaimage'] = '
    Please note that the CAPTCHA Images for Registration & Posting setting was reverted to MyBB Default Captcha due to the lack of public/private key(s).
    '; -$l['success_display_orders_updated'] = "The setting display orders have been updated successfully."; -$l['success_setting_group_added'] = "The setting group has been created successfully."; -$l['success_setting_group_updated'] = "The setting group has been updated successfully."; -$l['success_setting_group_deleted'] = "The selected setting group has been deleted successfully."; -$l['success_duplicate_settings_deleted'] = "All duplicate setting groups have been deleted successfully."; - -$l['searching'] = 'Searching...'; -$l['search_error'] = 'There was an error fetching your search results:'; -$l['search_done'] = 'Done!'; - diff --git a/html/forums/inc/languages/english/admin/config_smilies.lang.php b/html/forums/inc/languages/english/admin/config_smilies.lang.php deleted file mode 100644 index 7437e6b..0000000 --- a/html/forums/inc/languages/english/admin/config_smilies.lang.php +++ /dev/null @@ -1,64 +0,0 @@ -{theme} to represent the image directory of each theme."; -$l['order'] = "Order"; -$l['display_order'] = "Display Order"; -$l['display_order_desc'] = "The order on the smilies list that this will appear. This number should not be the same as another smilie's."; -$l['mass_edit_show_clickable'] = "Show on Clickable?"; -$l['show_clickable'] = "Show on clickable list?"; -$l['show_clickable_desc'] = "Do you want this smilie to show on the clickable smilie list on the post editor?"; -$l['include'] = "Add?"; -$l['path_to_images'] = "Path to Images"; -$l['path_to_images_desc'] = "This is the path to the folder that the images are in."; -$l['smilie_delete'] = "Delete?"; -$l['save_smilie'] = "Save Smilie"; -$l['save_smilies'] = "Save Smilies"; -$l['show_smilies'] = "Show Smilies"; -$l['reset'] = "Reset"; - -$l['error_missing_name'] = "You did not enter a name for this smilie."; -$l['error_missing_text_replacement'] = "You did not enter a text replacement for this smilie."; -$l['error_missing_path'] = "You did not enter a path for this smilie."; -$l['error_missing_path_multiple'] = "You did not enter a path."; -$l['error_missing_order'] = "You did not enter a display order for this smilie."; -$l['error_duplicate_order'] = "You did not enter a valid display order for this smilie."; -$l['error_missing_clickable'] = "You did not specify yes or no for the \"Show Clickable\" option."; -$l['error_no_smilies'] = "There are no smilies in the specified directory, or all smilies in the directory have already been added."; -$l['error_no_images'] = "There are no images in the specified directory."; -$l['error_none_included'] = "You did not select any smilies to include."; -$l['error_invalid_path'] = "You did not enter a valid path."; -$l['error_invalid_smilie'] = "The specified smilie does not exist."; - -$l['success_smilie_added'] = "The smilie has been added successfully."; -$l['success_multiple_smilies_added'] = "The selected smilies have been added successfully."; -$l['success_smilie_updated'] = "The smilie has been updated successfully."; -$l['success_multiple_smilies_updated'] = "The smilies have been updated successfully."; -$l['success_smilie_deleted'] = "The selected smilie has been deleted successfully."; -$l['success_mass_edit_updated'] = "The smilies have been updated successfully."; - -$l['confirm_smilie_deletion'] = "Are you sure you wish to delete this smilie?"; - diff --git a/html/forums/inc/languages/english/admin/config_spiders.lang.php b/html/forums/inc/languages/english/admin/config_spiders.lang.php deleted file mode 100644 index d240e8a..0000000 --- a/html/forums/inc/languages/english/admin/config_spiders.lang.php +++ /dev/null @@ -1,42 +0,0 @@ -No. Uploaded Attachments"; -$l['space_used'] = "Attachment Space Used"; -$l['bandwidth_used'] = "Estimated Bandwidth Usage"; -$l['average_size'] = "Average Attachment Size"; -$l['size'] = "Size"; -$l['posted_by'] = "Posted By"; -$l['thread'] = "Thread"; -$l['downloads'] = "Downloads"; -$l['date_uploaded'] = "Date Uploaded"; -$l['popular_attachments'] = "Top 5 Most Popular Attachments"; -$l['largest_attachments'] = "Top 5 Largest Attachments"; -$l['users_diskspace'] = "Top 5 Users Using the Most Disk Space"; -$l['username'] = "Username"; -$l['total_size'] = "Total Size"; - -// = Orphans -$l['orphan_results'] = "Orphaned Attachments Search - Results"; -$l['orphan_attachments_search'] = "Orphaned Attachments Search"; -$l['reason_orphaned'] = "Reason Orphaned"; -$l['reason_not_in_table'] = "Not in attachments table"; -$l['reason_file_missing'] = "Attached file missing"; -$l['reason_thread_deleted'] = "Thread been deleted"; -$l['reason_post_never_made'] = "Post never made"; -$l['unknown'] = "Unknown"; -$l['results'] = "Results"; -$l['step1'] = "Step 1"; -$l['step2'] = "Step 2"; -$l['step1of2'] = "Step 1 of 2 - File System Scan"; -$l['step2of2'] = "Step 2 of 2 - Database Scan"; -$l['step1of2_line1'] = "Please wait, the file system is currently being scanned for orphaned attachments."; -$l['step2of2_line1'] = "Please wait, the database is currently being scanned for orphaned attachments."; -$l['step_line2'] = "You'll automatically be redirected to the next step once this process is complete."; -$l['scanning'] = 'Scanning..'; - -// = Attachments / Index -$l['index_find_attachments'] = "Attachments - Find Attachments"; -$l['find_where'] = "Find attachments where..."; -$l['name_contains'] = "File name contains"; -$l['name_contains_desc'] = "To search by wild card enter *.[file extension]. Example: *.zip."; -$l['type_contains'] = "File type contains"; -$l['forum_is'] = "Forum is"; -$l['username_is'] = "Posters' username is"; -$l['more_than'] = "More than"; -$l['greater_than'] = "Greater than"; -$l['is_exactly'] = "Is exactly"; -$l['less_than'] = "Less than"; -$l['date_posted_is'] = "Date posted is"; -$l['days_ago'] = "days ago"; -$l['file_size_is'] = "File size is"; -$l['kb'] = "KB"; -$l['download_count_is'] = "Download count is"; -$l['display_options'] = "Display Options"; -$l['filename'] = "File Name"; -$l['filesize'] = "File Size"; -$l['download_count'] = "Download Count"; -$l['post_username'] = "Post Username"; -$l['asc'] = "Ascending"; -$l['desc'] = "Descending"; -$l['sort_results_by'] = "Sort results by"; -$l['results_per_page'] = "Results per page"; -$l['in'] = "in"; - -// Buttons -$l['button_delete_orphans'] = "Delete Checked Orphans"; -$l['button_delete_attachments'] = "Delete Checked Attachments"; -$l['button_find_attachments'] = "Find Attachments"; - diff --git a/html/forums/inc/languages/english/admin/forum_management.lang.php b/html/forums/inc/languages/english/admin/forum_management.lang.php deleted file mode 100644 index 50fd1ae..0000000 --- a/html/forums/inc/languages/english/admin/forum_management.lang.php +++ /dev/null @@ -1,279 +0,0 @@ -Recount & Rebuild tools."; -$l['success_moderator_deleted'] = "The selected moderator has been deleted successfully.
    Please remember that this hasn't changed this user's group permission, they may still have moderation powers."; -$l['success_forum_permissions_updated'] = "The forum permissions have been updated successfully."; -$l['success_forum_updated'] = "The forum settings have been updated successfully."; -$l['success_moderator_updated'] = "The selected moderator has been updated successfully."; -$l['success_custom_permission_cleared'] = "The custom permissions for this forum have been cleared successfully."; - -$l['error_invalid_forum'] = "Please select a valid forum."; -$l['error_invalid_moderator'] = "Please select a valid moderator to delete."; -$l['error_invalid_fid'] = "Invalid Forum ID selected."; -$l['error_forum_parent_child'] = "You can't set the parent forum of this forum to one of it's children."; -$l['error_forum_parent_itself'] = "The forum parent cannot be the forum itself."; -$l['error_incorrect_moderator'] = "Please select a valid moderator."; - -$l['confirm_moderator_deletion'] = "Are you sure you wish to remove this moderator from this forum?"; -$l['confirm_forum_deletion'] = "Are you sure you wish to delete this forum?"; -$l['confirm_clear_custom_permission'] = "Are you sure you wish to clear this custom permission?"; - -$l['forum_type'] = "Forum Type"; -$l['forum_type_desc'] = "Select the type of forum you are creating - a forum you can post in, or a category, which contains other forums."; -$l['category'] = "Category"; -$l['title'] = "Title"; -$l['description'] = "Description"; -$l['save_forum'] = "Save Forum"; -$l['parent_forum'] = "Parent Forum"; -$l['parent_forum_desc'] = "The Forum that contains this forum. Categories do not have a parent forum - in this case, select 'None' - however, categories can be specified to have a parent forum."; -$l['none'] = "None"; -$l['display_order'] = "Display Order"; - -$l['show_additional_options'] = "Show Additional Options"; -$l['hide_additional_options'] = "Hide Additional Options"; -$l['additional_forum_options'] = "Additional Forum Options"; -$l['forum_link'] = "Forum Link"; -$l['forum_link_desc'] = "To make a forum redirect to another location, enter the URL to the destination you wish to redirect to. Entering a URL in this field will remove the forum functionality; however, permissions can still be set for it."; -$l['forum_password'] = "Forum Password"; -$l['forum_password_desc'] = "To protect this forum further, you can choose a password that must be entered for access. Note: User groups still need permissions to access this forum."; -$l['access_options'] = "Access Options"; -$l['forum_is_active'] = "Forum is Active?"; -$l['forum_is_active_desc'] = "If unselected, this forum will not be shown to users and will not \"exist\"."; -$l['forum_is_open'] = "Forum is Open?"; -$l['forum_is_open_desc'] = "If unselected, users will not be able to post in this forum regardless of permissions."; - -$l['copy_to_new_forum'] = "Copy to new forum"; -$l['source_forum'] = "Source forum"; -$l['source_forum_desc'] = "Forum to copy settings and/or permissions from."; -$l['destination_forum'] = "Destination forum"; -$l['destination_forum_desc'] = "Forum to copy settings and/or permissions to."; -$l['new_forum_settings'] = "New Forum Settings"; -$l['copy_settings_and_properties'] = "Copy Forum Settings and Properties"; -$l['copy_settings_and_properties_desc'] = "Only applies if the destination forum exists."; -$l['copy_user_group_permissions'] = "Copy User Group Permissions"; -$l['copy_user_group_permissions_desc'] = "Use CTRL to select multiple groups."; - -$l['override_user_style'] = "Yes, override the user's selected style for this forum"; -$l['style_options'] = "Style Options"; -$l['forum_specific_style'] = "Forum-Specific Style:"; -$l['use_default'] = "Use Default"; -$l['dont_display_rules'] = "Don't display rules for this forum"; -$l['display_rules_inline'] = "Display rules for this forum on the thread listing"; -$l['display_rules_inline_new'] = "Display rules in the thread listing and for new threads/replies"; -$l['display_rules_link'] = "Display a link to the rules for this forum"; -$l['display_method'] = "Display Method:"; -$l['rules'] = "Rules:"; -$l['forum_rules'] = "Forum Rules"; -$l['name'] = "Name"; -$l['username'] = "Username"; -$l['moderator_username_desc'] = "Username of the moderator to be added"; -$l['add_user_as_moderator'] = "Add a user as Moderator"; -$l['usergroup'] = "Usergroup"; -$l['add_usergroup_as_moderator'] = "Add a usergroup as Moderators"; -$l['moderator_usergroup_desc'] = "Select a usergroup to add as a Moderator from the list below."; -$l['add_usergroup_moderator'] = "Add Usergroup Moderator"; -$l['add_user_moderator'] = "Add User Moderator"; - -$l['default_view_options'] = "Default View Options"; -$l['default_date_cut'] = "Default Date Cut:"; -$l['default_sort_by'] = "Default Sort By:"; -$l['default_sort_order'] = "Default Sort Order:"; - -$l['board_default'] = "Board Default"; - -$l['datelimit_1day'] = "Last day"; -$l['datelimit_5days'] = "Last 5 days"; -$l['datelimit_10days'] = "Last 10 days"; -$l['datelimit_20days'] = "Last 20 days"; -$l['datelimit_50days'] = "Last 50 days"; -$l['datelimit_75days'] = "Last 75 days"; -$l['datelimit_100days'] = "Last 100 days"; -$l['datelimit_lastyear'] = "Last year"; -$l['datelimit_beginning'] = "The beginning"; - -$l['sort_by_subject'] = "Thread subject"; -$l['sort_by_lastpost'] = "Last post time"; -$l['sort_by_starter'] = "Thread starter"; -$l['sort_by_started'] = "Thread creation time"; -$l['sort_by_rating'] = "Thread rating"; -$l['sort_by_replies'] = "Number of replies"; -$l['sort_by_views'] = "Number of views"; - -$l['sort_order_asc'] = "Ascending"; -$l['sort_order_desc'] = "Descending"; - -$l['misc_options'] = "Miscellaneous Options"; -$l['allow_html'] = "Yes, allow HTML in posts"; -$l['allow_mycode'] = "Yes, allow MyCode in posts"; -$l['allow_smilies'] = "Yes, allow smilies in posts"; -$l['allow_img_code'] = "Yes, allow [img] code in posts (requires MyCode to be turned on)"; -$l['allow_video_code'] = "Yes, allow [video] code in posts (requires MyCode to be turned on)"; -$l['allow_post_icons'] = "Yes, allow post icons to be chosen for posts"; -$l['allow_thread_ratings'] = "Yes, allow threads to be rated"; -$l['show_forum_jump'] = "Yes, show this forum in the 'forum jump' menu"; -$l['use_postcounts'] = "Yes, posts in this forum should count towards user post counts"; -$l['use_threadcounts'] = "Yes, threads in this forum should count towards user thread counts"; -$l['require_thread_prefix'] = "Yes, require a thread prefix for all threads"; - -$l['use_permissions'] = "Use Permissions"; -$l['use_permissions_desc'] = "Select the permissions you would like to use for this user group - inherited permissions (will delete custom permissions) or custom permissions."; -$l['inherit_permissions'] = "Use user group permissions or inherit permissions from parent forums"; -$l['custom_permissions'] = "Use custom permissions (below)"; -$l['custom_permissions_for'] = "Custom Permissions for"; - -$l['inherited_permission'] = "inherited"; -$l['custom_permission'] = "custom"; - -$l['save_permissions'] = "Save Forum Permissions"; - -$l['error_missing_title'] = "You must enter in a title."; -$l['error_no_parent'] = "You must select a parent forum."; -$l['error_not_empty'] = "Forums with threads cannot be converted to categories."; -$l['error_forum_link_not_empty'] = "Forums with threads cannot be redirected to another webpage."; - -$l['success_forum_added'] = "The forum has been created successfully."; -$l['success_moderator_added'] = "The moderator has been added to this forum successfully."; -$l['success_forum_permissions_saved'] = "The forum permissions have been saved successfully."; -$l['success_forum_copied'] = "The selected forum has been copied successfully."; - -$l['error_moderator_already_added'] = "The selected user/group is already a moderator of this forum."; -$l['error_moderator_not_found'] = "The specified username/group was not found."; -$l['error_new_forum_needs_name'] = "You need to give your new forum a name."; -$l['error_invalid_source_forum'] = "Invalid source forum."; -$l['error_invalid_destination_forum'] = "Invalid destination forum."; - -$l['group_viewing'] = "Viewing"; -$l['group_posting_rating'] = "Posting / Rating"; -$l['group_editing'] = "Editing"; -$l['group_moderate'] = "Moderation"; -$l['group_polls'] = "Polls"; -$l['group_misc'] = "Miscellaneous"; - -$l['viewing_field_canview'] = "Can view forum?"; -$l['viewing_field_canviewthreads'] = "Can view threads within forum?"; -$l['viewing_field_canonlyviewownthreads'] = "Can only view own threads?"; -$l['viewing_field_candlattachments'] = "Can download attachments?"; - -$l['posting_rating_field_canpostthreads'] = "Can post threads?"; -$l['posting_rating_field_canpostreplys'] = "Can post replies?"; -$l['posting_rating_field_canonlyreplyownthreads'] = "Can only reply to own threads?"; -$l['posting_rating_field_canpostattachments'] = "Can post attachments?"; -$l['posting_rating_field_canratethreads'] = "Can rate threads?"; - -$l['editing_field_caneditposts'] = "Can edit own posts?"; -$l['editing_field_candeleteposts'] = "Can delete own posts?"; -$l['editing_field_candeletethreads'] = "Can delete own threads?"; -$l['editing_field_caneditattachments'] = "Can update own attachments?"; -$l['editing_field_canviewdeletionnotice'] = "Can view deletion notices?"; - -$l['moderate_field_modposts'] = "Moderate new posts?"; -$l['moderate_field_modthreads'] = "Moderate new threads?"; -$l['moderate_field_modattachments'] = "Moderate new attachments?"; -$l['moderate_field_mod_edit_posts'] = "Moderate posts after they've been edited?"; - -$l['polls_field_canpostpolls'] = "Can post polls?"; -$l['polls_field_canvotepolls'] = "Can vote in polls?"; - -$l['misc_field_cansearch'] = "Can search forum?"; - -$l['confirm_proceed_deletion'] = "Click \"Proceed\" to continue the deletion of the forum."; -$l['automatically_redirecting'] = "Automatically Redirecting..."; diff --git a/html/forums/inc/languages/english/admin/forum_moderation_queue.lang.php b/html/forums/inc/languages/english/admin/forum_moderation_queue.lang.php deleted file mode 100644 index 0a75555..0000000 --- a/html/forums/inc/languages/english/admin/forum_moderation_queue.lang.php +++ /dev/null @@ -1,49 +0,0 @@ -Today"; -$l['yesterday'] = "Yesterday"; - -$l['size_yb'] = "YB"; -$l['size_zb'] = "ZB"; -$l['size_eb'] = "EB"; -$l['size_pb'] = "PB"; -$l['size_tb'] = "TB"; -$l['size_gb'] = "GB"; -$l['size_mb'] = "MB"; -$l['size_kb'] = "KB"; -$l['size_bytes'] = "bytes"; -$l['na'] = "N/A"; - -// Header language strings -$l['mybb_admin_panel'] = "MyBB Control Panel"; -$l['mybb_admin_cp'] = "MyBB Admin CP"; -$l['logged_in_as'] = "Logged in as"; -$l['view_board'] = "View Forum"; -$l['logout'] = "Log Out"; - -// Footer language strings -$l['generated_in'] = "Generated in {1} with {3} queries. Memory Usage: {4}"; - -// Login page -$l['enter_username_and_password'] = "Please enter your {1} and password to continue."; -$l['login_username'] = 'username'; -$l['login_email'] = 'email'; -$l['login_username_and_password'] = 'username/email'; -$l['mybb_admin_login'] = "MyBB Control Panel - Login"; -$l['return_to_forum'] = "Return to forum"; -$l['please_login'] = "Please Login"; -$l['username'] = "Username:"; -$l['username1'] = "Email:"; -$l['username2'] = "Username/Email:"; -$l['password'] = "Password:"; -$l['secret_pin'] = "Secret PIN:"; -$l['login'] = "Login"; -$l['lost_password'] = "Forgot your password?"; - -$l['error_invalid_admin_session'] = "Invalid administration session."; -$l['error_admin_session_expired'] = "Your administration session has expired."; -$l['error_invalid_ip'] = "Your IP address is not valid for this session."; -$l['error_mybb_admin_lockedout'] = "This account has been locked out."; -$l['error_mybb_admin_lockedout_message'] = "Your account is currently locked out after failing to login {1} times. You have been sent an email with instructions on how to unlock your account."; - -$l['error_invalid_username'] = "The username you entered is invalid."; -$l['error_invalid_uid'] = "The user id you entered is invalid."; -$l['error_invalid_token'] = "The activation code you entered is invalid."; - -$l['success_logged_out'] = "You have been logged out successfully."; -$l['error_invalid_username_password'] = "The {1} and password combination you entered is invalid."; - -// Action Confirmation -$l['confirm_action'] = "Are you sure you wish to perform this action?"; - -// Common words and phrases -$l['home'] = "Home"; -$l['name'] = "Name"; -$l['size'] = "Size"; -$l['controls'] = "Controls"; -$l['view'] = "View"; -$l['yes'] = "Yes"; -$l['no'] = "No"; -$l['cancel'] = "Cancel"; -$l['options'] = "Options"; -$l['proceed'] = "Proceed"; -$l['ok'] = "OK"; -$l['error'] = "Error"; -$l['edit'] = "Edit"; -$l['never'] = "Never"; -$l['legend'] = "Legend"; -$l['version'] = "Version"; -$l['languagevar'] = "Language"; -$l['use_default'] = "Use Default"; -$l['file'] = "File"; -$l['go'] = "Go"; -$l['clear'] = "Clear"; -$l['unknown'] = "Unknown"; -$l['year'] = "Year"; -$l['year_short'] = "y"; -$l['years'] = "Years"; -$l['years_short'] = "y"; -$l['month'] = "Month"; -$l['month_short'] = "m"; -$l['months'] = "Months"; -$l['months_short'] = "m"; -$l['week'] = "Week"; -$l['week_short'] = "w"; -$l['weeks'] = "Weeks"; -$l['weeks_short'] = "w"; -$l['day'] = "Day"; -$l['day_short'] = "d"; -$l['days'] = "Days"; -$l['days_short'] = "d"; -$l['hour'] = "Hour"; -$l['hour_short'] = "h"; -$l['hours'] = "Hours"; -$l['hours_short'] = "h"; -$l['minute'] = "Minute"; -$l['minute_short'] = "m"; -$l['minutes'] = "Minutes"; -$l['minutes_short'] = "m"; -$l['second'] = "Second"; -$l['second_short'] = "s"; -$l['seconds'] = "Seconds"; -$l['seconds_short'] = "s"; -$l['permanent'] = "Permanent"; -$l['all_forums'] = "All Forums"; -$l['all_groups'] = "All groups"; -$l['select_forums'] = "Select forums"; -$l['select_groups'] = "Select groups"; -$l['forums_colon'] = "Forums:"; -$l['groups_colon'] = "Groups:"; -$l['none'] = "None"; -$l['mybb_acp'] = "MyBB ACP"; -$l['pages'] = "Pages"; -$l['previous'] = "Previous"; -$l['page'] = "Page"; -$l['next'] = "Next"; -$l['delete'] = "Delete"; -$l['reset'] = "Reset"; -$l['and'] = "and"; -$l['on'] = "On"; -$l['off'] = "Off"; -$l['alt_enabled'] = "Enabled"; -$l['alt_disabled'] = "Disabled"; -$l['enable'] = "Enable"; -$l['disable'] = "Disable"; -$l['saved'] = 'Saved'; - -$l['rel_in'] = "In "; -$l['rel_ago'] = "ago"; -$l['rel_less_than'] = "Less than "; -$l['rel_time'] = "{1}{2} {3} {4}"; -$l['rel_minutes_single'] = "minute"; -$l['rel_minutes_plural'] = "minutes"; -$l['rel_hours_single'] = "hour"; -$l['rel_hours_plural'] = "hours"; - -// Parser bits -$l['quote'] = "Quote:"; -$l['wrote'] = "Wrote:"; -$l['code'] = "Code:"; -$l['php_code'] = "PHP Code:"; -$l['linkback'] = "Original Post"; - -// The months of the year -$l['january'] = "January"; -$l['february'] = "February"; -$l['march'] = "March"; -$l['april'] = "April"; -$l['may'] = "May"; -$l['june'] = "June"; -$l['july'] = "July"; -$l['august'] = "August"; -$l['september'] = "September"; -$l['october'] = "October"; -$l['november'] = "November"; -$l['december'] = "December"; - -// Access Denied -$l['access_denied'] = "Access Denied"; -$l['access_denied_desc'] = "You do not have permission to access this part of the administration control panel."; - -// Super Administrator required -$l['cannot_perform_action_super_admin_general'] = "Sorry, but you cannot perform this action because you are not a super administrator.

    To be able to perform this action, you need to add your user ID to the list of super administrators in inc/config.php."; - -// AJAX -$l['loading_text'] = "Loading
    Please wait..."; - -// Time zone selection boxes -$l['timezone_gmt_minus_1200'] = "(GMT -12:00) Howland and Baker Islands"; -$l['timezone_gmt_minus_1100'] = "(GMT -11:00) Nome, Midway Island"; -$l['timezone_gmt_minus_1000'] = "(GMT -10:00) Hawaii, Papeete"; -$l['timezone_gmt_minus_950'] = "(GMT -9:30) Marquesas Islands"; -$l['timezone_gmt_minus_900'] = "(GMT -9:00) Alaska"; -$l['timezone_gmt_minus_800'] = "(GMT -8:00) Pacific Time"; -$l['timezone_gmt_minus_700'] = "(GMT -7:00) Mountain Time"; -$l['timezone_gmt_minus_600'] = "(GMT -6:00) Central Time, Mexico City"; -$l['timezone_gmt_minus_500'] = "(GMT -5:00) Eastern Time, Bogota, Lima, Quito"; -$l['timezone_gmt_minus_450'] = "(GMT -4:30) Caracas"; -$l['timezone_gmt_minus_400'] = "(GMT -4:00) Atlantic Time, La Paz, Halifax"; -$l['timezone_gmt_minus_350'] = "(GMT -3:30) Newfoundland"; -$l['timezone_gmt_minus_300'] = "(GMT -3:00) Brazil, Buenos Aires, Georgetown, Falkland Is."; -$l['timezone_gmt_minus_200'] = "(GMT -2:00) Mid-Atlantic, South Georgia and the South Sandwich Islands"; -$l['timezone_gmt_minus_100'] = "(GMT -1:00) Azores, Cape Verde Islands"; -$l['timezone_gmt'] = "(GMT) Casablanca, Dublin, Edinburgh, London, Lisbon, Monrovia"; -$l['timezone_gmt_100'] = "(GMT +1:00) Berlin, Brussels, Copenhagen, Madrid, Paris, Rome, Warsaw"; -$l['timezone_gmt_200'] = "(GMT +2:00) Athens, Istanbul, Cairo, Jerusalem, South Africa"; -$l['timezone_gmt_300'] = "(GMT +3:00) Kaliningrad, Minsk, Baghdad, Riyadh, Nairobi"; -$l['timezone_gmt_350'] = "(GMT +3:30) Tehran"; -$l['timezone_gmt_400'] = "(GMT +4:00) Moscow, Abu Dhabi, Baku, Muscat, Tbilisi"; -$l['timezone_gmt_450'] = "(GMT +4:30) Kabul"; -$l['timezone_gmt_500'] = "(GMT +5:00) Islamabad, Karachi, Tashkent"; -$l['timezone_gmt_550'] = "(GMT +5:30) Mumbai, Kolkata, Chennai, New Delhi"; -$l['timezone_gmt_575'] = "(GMT +5:45) Kathmandu"; -$l['timezone_gmt_600'] = "(GMT +6:00) Almaty, Dhakra, Yekaterinburg"; -$l['timezone_gmt_650'] = "(GMT +6:30) Yangon"; -$l['timezone_gmt_700'] = "(GMT +7:00) Bangkok, Hanoi, Jakarta"; -$l['timezone_gmt_800'] = "(GMT +8:00) Beijing, Hong Kong, Perth, Singapore, Taipei, Manila"; -$l['timezone_gmt_850'] = "(GMT +8:30) Pyongyang"; -$l['timezone_gmt_875'] = "(GMT +8:45) Eucla"; -$l['timezone_gmt_900'] = "(GMT +9:00) Osaka, Sapporo, Seoul, Tokyo, Irkutsk"; -$l['timezone_gmt_950'] = "(GMT +9:30) Adelaide, Darwin"; -$l['timezone_gmt_1000'] = "(GMT +10:00) Melbourne, Papua New Guinea, Sydney, Yakutsk"; -$l['timezone_gmt_1050'] = "(GMT +10:30) Lord Howe Island"; -$l['timezone_gmt_1100'] = "(GMT +11:00) Magadan, New Caledonia, Solomon Islands, Vladivostok"; -$l['timezone_gmt_1150'] = "(GMT +11:30) Norfolk Island"; -$l['timezone_gmt_1200'] = "(GMT +12:00) Auckland, Wellington, Fiji, Marshall Islands"; -$l['timezone_gmt_1275'] = "(GMT +12:45) Chatham Islands"; -$l['timezone_gmt_1300'] = "(GMT +13:00) Samoa, Tonga, Tokelau"; -$l['timezone_gmt_1400'] = "(GMT +14:00) Line Islands"; -$l['timezone_gmt_short'] = "GMT {1}({2})"; - -// Global language strings used for log deletion pages -$l['confirm_delete_logs'] = "Prune the selected log entries?"; -$l['confirm_delete_all_logs'] = "Prune all log entries?"; -$l['selected_logs_deleted'] = "The selected log entries have been deleted."; -$l['all_logs_deleted'] = "All log entries have been deleted."; -$l['delete_selected'] = "Delete Selected"; -$l['delete_all'] = "Delete All Filtered"; - -// Misc -$l['encountered_errors'] = "The following errors were encountered:"; -$l['invalid_post_verify_key'] = "An authorization code mismatch occurred. Please confirm that you wish to perform the action below."; -$l['invalid_post_verify_key2'] = "An authorization code mismatch occurred. Please double check that you are accessing this page correctly."; -$l['unknown_error'] = "An unknown error has occurred."; - -// Code buttons editor language strings -$l['editor_bold'] = "Bold"; -$l['editor_italic'] = "Italic"; -$l['editor_underline'] = "Underline"; -$l['editor_strikethrough'] = "Strikethrough"; -$l['editor_subscript'] = "Subscript"; -$l['editor_superscript'] = "Superscript"; -$l['editor_alignleft'] = "Align left"; -$l['editor_center'] = "Center"; -$l['editor_alignright'] = "Align right"; -$l['editor_justify'] = "Justify"; -$l['editor_fontname'] = "Font Name"; -$l['editor_fontsize'] = "Font Size"; -$l['editor_fontcolor'] = "Font Color"; -$l['editor_removeformatting'] = "Remove Formatting"; -$l['editor_cut'] = "Cut"; -$l['editor_copy'] = "Copy"; -$l['editor_paste'] = "Paste"; -$l['editor_cutnosupport'] = "Your browser does not allow the cut command. Please use the keyboard shortcut Ctrl/Cmd-X"; -$l['editor_copynosupport'] = "Your browser does not allow the copy command. Please use the keyboard shortcut Ctrl/Cmd-C"; -$l['editor_pastenosupport'] = "Your browser does not allow the paste command. Please use the keyboard shortcut Ctrl/Cmd-V"; -$l['editor_pasteentertext'] = "Paste your text inside the following box:"; -$l['editor_pastetext'] = "Paste Text"; -$l['editor_numlist'] = "Numbered list"; -$l['editor_bullist'] = "Bullet list"; -$l['editor_undo'] = "Undo"; -$l['editor_redo'] = "Redo"; -$l['editor_rows'] = "Rows:"; -$l['editor_cols'] = "Cols:"; -$l['editor_inserttable'] = "Insert a table"; -$l['editor_inserthr'] = "Insert a horizontal rule"; -$l['editor_code'] = "Code"; -$l['editor_php'] = "PHP"; -$l['editor_width'] = "Width (optional):"; -$l['editor_height'] = "Height (optional):"; -$l['editor_insertimg'] = "Insert an image"; -$l['editor_email'] = "E-mail:"; -$l['editor_insertemail'] = "Insert an email"; -$l['editor_url'] = "URL:"; -$l['editor_insertlink'] = "Insert a link"; -$l['editor_unlink'] = "Unlink"; -$l['editor_more'] = "More"; -$l['editor_insertemoticon'] = "Insert an emoticon"; -$l['editor_videourl'] = "Video URL:"; -$l['editor_videotype'] = "Video Type:"; -$l['editor_insert'] = "Insert"; -$l['editor_insertyoutubevideo'] = "Insert a YouTube video"; -$l['editor_currentdate'] = "Insert current date"; -$l['editor_currenttime'] = "Insert current time"; -$l['editor_print'] = "Print"; -$l['editor_viewsource'] = "View source"; -$l['editor_description'] = "Description (optional):"; -$l['editor_enterimgurl'] = "Enter the image URL:"; -$l['editor_enteremail'] = "Enter the e-mail address:"; -$l['editor_enterdisplayedtext'] = "Enter the displayed text:"; -$l['editor_enterurl'] = "Enter URL:"; -$l['editor_enteryoutubeurl'] = "Enter the YouTube video URL or ID:"; -$l['editor_insertquote'] = "Insert a Quote"; -$l['editor_invalidyoutube'] = "Invalid YouTube video"; -$l['editor_dailymotion'] = "Dailymotion"; -$l['editor_metacafe'] = "MetaCafe"; -$l['editor_veoh'] = "Veoh"; -$l['editor_vimeo'] = "Vimeo"; -$l['editor_youtube'] = "Youtube"; -$l['editor_facebook'] = "Facebook"; -$l['editor_liveleak'] = "LiveLeak"; -$l['editor_insertvideo'] = "Insert a video"; -$l['editor_maximize'] = "Maximize"; - -$l['missing_task'] = "Error: Task file does not exist"; -$l['task_backup_cannot_write_backup'] = "Error: The database backup task cannot write to backups directory."; -$l['task_backup_ran'] = "The database backup task successfully ran."; -$l['task_checktables_ran'] = "The check tables task successfully ran with no corrupted tables found."; -$l['task_checktables_ran_found'] = "Notice: The check tables task successfully ran and repaired the {1} table(s)."; -$l['task_dailycleanup_ran'] = "The daily cleanup task successfully ran."; -$l['task_hourlycleanup_ran'] = "The hourly cleanup task successfully ran."; -$l['task_logcleanup_ran'] = "The log cleanup task successfully ran and pruned any old logs."; -$l['task_promotions_ran'] = "The promotions task successfully ran."; -$l['task_threadviews_ran'] = "The thread views task successfully ran."; -$l['task_usercleanup_ran'] = "The user cleanup task successfully ran."; -$l['task_massmail_ran'] = "The mass mail task successfully ran."; -$l['task_userpruning_ran'] = "The user pruning task successfully ran."; -$l['task_delayedmoderation_ran'] = "The delayed moderation task successfully ran."; -$l['task_massmail_ran_errors'] = "One or more problems occurred sending to \"{1}\": -{2}"; -$l['task_versioncheck_ran'] = "The version check task successfully ran."; -$l['task_versioncheck_ran_errors'] = "Could not connect to MyBB for a version check."; -$l['task_recachestylesheets_ran'] = 'Re-cached {1} stylesheets.'; - -$l['massmail_username'] = "Username"; -$l['email_addr'] = "Email Address"; -$l['board_name'] = "Board Name"; -$l['board_url'] = "Board URL"; - -// Unlock ACP -$l['lockout_unlock'] = "Unlock Admin Control Panel"; -$l['enter_username_and_token'] = "Please enter your username and the activation code to continue."; -$l['unlock_token'] = "Activation code:"; -$l['unlock_account'] = "Unlock Account"; - -// Email message for if an admin account has been locked out -$l['locked_out_subject'] = "Administrator Account Locked Out at {1}"; -$l['locked_out_message'] = "{1}, - -Your administrator account at {2} has been locked after {3} failed login attempts. - -To unlock your account, please go to the URL below in your web browser. - -{4}/{5}/index.php?action=unlock&uid={7}&token={6} - -If the above link does not work correctly, go to - -{4}/{5}/index.php?action=unlock - -You will need to enter the following: -Username: {1} -Activation Code: {6} - -Thank you, -{2} Staff"; - -$l['comma'] = ", "; - -$l['search_for_a_user'] = "Search for a user"; - -$l['mybb_engine'] = "MyBB Engine"; - -// If the language string for "Username" is too cramped in the ACP Login box -// then use this to define how much larger you want the gap to be (in px) -// $l['login_field_width'] = "0"; - -$l['my2fa'] = "Two-Factor Authentication"; -$l['my2fa_failed'] = "The code was incorrect, you're logged out now"; -$l['my2fa_code'] = "Please enter the authentication code"; -$l['my2fa_label'] = "Authentication code:"; -$l['my2fa_no_codes'] = "Note: you've used all of your recovery codes. Please visit the recovery codes page to generate a new set."; diff --git a/html/forums/inc/languages/english/admin/hello.lang.php b/html/forums/inc/languages/english/admin/hello.lang.php deleted file mode 100644 index 591be4d..0000000 --- a/html/forums/inc/languages/english/admin/hello.lang.php +++ /dev/null @@ -1,23 +0,0 @@ -Check for Updates."; -$l['success_credits_updated'] = 'The MyBB credits cache has been successfully updated.'; diff --git a/html/forums/inc/languages/english/admin/home_dashboard.lang.php b/html/forums/inc/languages/english/admin/home_dashboard.lang.php deleted file mode 100644 index 890764c..0000000 --- a/html/forums/inc/languages/english/admin/home_dashboard.lang.php +++ /dev/null @@ -1,54 +0,0 @@ -MyBB version check was more than two weeks ago."; -$l['new_version_available'] = "You are currently running {1} whilst the latest generally available release is {2}."; -$l['version_check_description'] = "Here you can check that you are currently running the latest copy of MyBB and see the latest announcements directly from MyBB."; -$l['latest_mybb_announcements'] = "Latest MyBB Announcements"; -$l['no_announcements'] = "No stored announcements. Check for Updates."; -$l['your_version'] = "Your Version"; -$l['latest_version'] = "Latest Version"; -$l['update_forum'] = "Please upgrade to the latest version of MyBB by visiting the MyBB Website."; -$l['read_more'] = "Read more"; - -$l['success_up_to_date'] = "Congratulations, you are running the latest version of MyBB."; - -$l['error_out_of_date'] = "Your copy of MyBB is out of date."; -$l['error_communication'] = "There was a problem communicating with the version server. Please try again in a few minutes."; -$l['error_fetch_news'] = "MyBB was unable to successfully fetch the latest announcements from the MyBB website."; - -$l['news_description'] = "The latest news from the MyBB Blog."; - -$l['admin_notes_public'] = "These notes are public to all administrators."; -$l['admin_notes'] = "Administrator Notes"; -$l['save_notes'] = "Save Notes"; - -$l['success_notes_updated'] = "The administrator notes have been successfully updated."; diff --git a/html/forums/inc/languages/english/admin/home_module_meta.lang.php b/html/forums/inc/languages/english/admin/home_module_meta.lang.php deleted file mode 100644 index 5ce2d52..0000000 --- a/html/forums/inc/languages/english/admin/home_module_meta.lang.php +++ /dev/null @@ -1,24 +0,0 @@ -like Google Authenticator or Authy. Those apps will generate a token which you need to enter on every acp login."; -$l['my2fa_qr'] = "Two-Factor Authentication Code"; -$l['recovery_codes_desc'] = "View your recovery codes."; -$l['recovery_codes'] = "Recovery Codes"; -$l['recovery_codes_warning'] = "Note: the codes will be regenerated on every page visit and can be only used once."; -$l['print_recovery_codes'] = "Print Recovery Codes"; \ No newline at end of file diff --git a/html/forums/inc/languages/english/admin/index.html b/html/forums/inc/languages/english/admin/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/languages/english/admin/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/languages/english/admin/style_module_meta.lang.php b/html/forums/inc/languages/english/admin/style_module_meta.lang.php deleted file mode 100644 index 3f3ff16..0000000 --- a/html/forums/inc/languages/english/admin/style_module_meta.lang.php +++ /dev/null @@ -1,15 +0,0 @@ -{1}'"; -$l['search_noresults_title'] = "No templates were found with the title '{1}'"; -$l['default_templates'] = "Default Templates"; - -$l['edit_template_breadcrumb'] = "Edit Template: "; - -$l['global_templates'] = "Global Templates"; -$l['master_templates'] = "Master Templates"; - -$l['not_used_by_any_themes'] = "Not used by any themes"; -$l['used_by'] = "Used by: "; -$l['used_by_all_themes'] = "Used by all themes"; - -$l['expand_templates'] = "Expand Templates"; -$l['edit_template_set'] = "Edit Template Set"; -$l['delete_template_set'] = "Delete Template Set"; -$l['empty_template_set'] = "There are no templates in this set."; - -$l['inline_edit'] = "Inline Edit"; -$l['full_edit'] = "Full Edit"; -$l['revert_to_orig'] = "Revert to Original"; -$l['delete_template'] = "Delete Template"; -$l['edit_in'] = "Edit in"; - -$l['group_calendar'] = "Calendar"; -$l['group_forumdisplay'] = "Forum Display"; -$l['group_index'] = "Index Page"; -$l['group_error'] = "Error Message"; -$l['group_memberlist'] = "Member List"; -$l['group_multipage'] = "Multipage Pagination"; -$l['group_private'] = "Private Messaging"; -$l['group_portal'] = "Portal"; -$l['group_postbit'] = "Post Bit"; -$l['group_posticons'] = "Post Icon"; -$l['group_showthread'] = "Show Thread"; -$l['group_usercp'] = "User Control Panel"; -$l['group_online'] = "Who's Online"; -$l['group_forumbit'] = "Forum Bit"; -$l['group_editpost'] = "Edit Post"; -$l['group_forumjump'] = "Forum Jump"; -$l['group_moderation'] = "Moderation"; -$l['group_nav'] = "Navigation"; -$l['group_search'] = "Search"; -$l['group_showteam'] = "Show Forum Team"; -$l['group_reputation'] = "Reputation"; -$l['group_newthread'] = "New Thread"; -$l['group_newreply'] = "New Reply"; -$l['group_member'] = "Member"; -$l['group_warning'] = "Warning System"; -$l['group_global'] = "Global"; -$l['group_header'] = "Header"; -$l['group_managegroup'] = "Manage Group"; -$l['group_misc'] = "Miscellaneous"; -$l['group_modcp'] = "Moderator Control Panel"; -$l['group_announcement'] = "Announcement"; -$l['group_polls'] = "Poll"; -$l['group_post'] = "Post"; -$l['group_printthread'] = "Print Thread"; -$l['group_report'] = "Report"; -$l['group_smilieinsert'] = "Smilie Inserter"; -$l['group_stats'] = "Statistics"; -$l['group_xmlhttp'] = "XMLHTTP"; -$l['group_footer'] = "Footer"; -$l['group_video'] = "Video MyCode"; -$l['group_sendthread'] = "Send Thread"; -$l['group_mycode'] = "MyCode"; - -$l['expand'] = "Expand"; -$l['collapse'] = "Collapse"; - -$l['save_continue'] = "Save and Continue Editing"; -$l['save_close'] = "Save and Return to Listing"; - -$l['template_name'] = "Template Name"; -$l['template_name_desc'] = "Name of the template. If you change this on the default template, it will save the template as a custom template under the new name."; -$l['template_set_desc'] = "Which template set should this template be in?"; - -$l['template_group_prefix'] = "Template Group Prefix"; -$l['template_group_prefix_desc'] = "The prefix name to group templates. This must not already exist. For example, to group templates hello_world, hello_foobar and hello_foo, enter hello here."; -$l['template_group_title'] = "Template Group Title"; -$l['template_group_title_desc'] = "The title of the prefix group. This will be shown in the templates list. For example, for our hello templates, enter Hello here."; - -$l['edit_template_group'] = "Edit Template Group"; -$l['editing_template_group'] = "Editing Template Group {1}"; -$l['delete_template_group'] = "Delete Template Group"; -$l['save_template_group'] = "Save Template Group"; - -$l['templates_the_same'] = "The two templates you've selected are both the same and cannot be compared."; -$l['master_updated_ins'] = "Changes that have been made between your previous version and this one are highlighted like this."; -$l['master_updated_del'] = "Any customizations you've made to your templates (the old ones) are highlighted like this."; -$l['template_diff_analysis'] = "Template Difference Analysis"; -$l['search_names_header'] = "Searching template names containing \"{1}\""; - -$l['updated_template_welcome1'] = "Edit - Allows you to edit the current template for this template set to incorporate updates made between the versions."; -$l['updated_template_welcome2'] = "Revert - Will revert the customized template back to the master revision, however you'll lose any custom changes you have made."; -$l['updated_template_welcome3'] = "Diff - Performs a difference analysis between the templates and shows you exactly what changes have been made between your customized copy and the latest master copy."; - -$l['no_global_templates'] = "There are currently no global templates."; -$l['no_updated_templates'] = "There are currently no templates which have been updated since you last upgraded."; - -$l['confirm_template_set_deletion'] = "Are you sure you want to delete this template set?"; -$l['confirm_template_group_delete'] = "Are you sure you want to delete this template group? This action does not remove the templates in the group."; -$l['confirm_template_deletion'] = "Are you sure you want to delete this template?"; -$l['confirm_template_revertion'] = "Are you sure you want to revert this template?"; - -$l['error_security_problem'] = "A potential security issue was found in the template. Please review your changes or contact the MyBB Group for support."; -$l['error_missing_input'] = "Please make sure you have all the input required to edit this template (tid and sid)"; -$l['error_already_exists'] = "The template title is already in use. Please use a different title."; -$l['error_invalid_template'] = "Please select a valid template."; -$l['error_missing_set_title'] = "Please select a template set title."; -$l['error_invalid_input'] = "Please make sure you have the correct template set ID."; -$l['error_invalid_set'] = "Please select a valid template set."; -$l['error_invalid_template_set'] = "Invalid template set selected."; -$l['error_themes_attached_template_set'] = "This template set cannot be deleted as there are themes attached to this template set."; -$l['error_missing_group_prefix'] = "Please enter a prefix for the template group."; -$l['error_invalid_group_title'] = "As underscores (_) are used as delimiter those are forbidden in template group prefixes. Please select another prefix."; -$l['error_missing_group_title'] = "Please enter a title for the template group."; -$l['error_duplicate_group_prefix'] = "A template group already exists with this prefix. Please enter another prefix."; -$l['error_missing_template_group'] = "The template group could not be found."; -$l['error_default_template_group'] = "You cannot edit or remove a default template group."; - -$l['success_template_saved'] = "The selected template has successfully been saved."; -$l['success_template_deleted'] = "The selected template has successfully been deleted."; -$l['success_template_reverted'] = "The selected template has successfully been reverted."; -$l['success_template_set_saved'] = "The selected template set has successfully been saved."; -$l['success_template_set_deleted'] = "The selected template set has successfully been deleted."; -$l['success_template_group_saved'] = "The selected template group has successfully been saved."; -$l['success_template_group_deleted'] = "The selected template group has successfully been deleted."; diff --git a/html/forums/inc/languages/english/admin/style_themes.lang.php b/html/forums/inc/languages/english/admin/style_themes.lang.php deleted file mode 100644 index 0d71ebe..0000000 --- a/html/forums/inc/languages/english/admin/style_themes.lang.php +++ /dev/null @@ -1,220 +0,0 @@ -Template sets, stylesheets, and other settings are inherited from the parent theme."; - -$l['import_a_theme'] = "Import a Theme"; -$l['import_a_theme_desc'] = "Here you can import new themes. You may import a theme from your computer, or a remote URL."; - -$l['edit_stylesheets'] = "Edit Stylesheets"; -$l['edit_stylesheets_desc'] = "Here you can easily manage the stylesheets in use by this theme. Stylesheets are based on CSS and define the fonts, colors and other visual aspects for this theme. A list of stylesheets attached to this theme is below."; - -$l['add_stylesheet'] = "Add Stylesheet"; -$l['add_stylesheet_desc'] = "Here you can add a new stylesheet to this theme. A stylesheet contains CSS that allows you to customize the appearance of this theme. You will be taken to the stylesheet edit page following creation."; - -$l['browse_themes'] = "Browse Themes"; -$l['browse_themes_desc'] = "Here you may browse the official MyBB modifications site for themes compatible with your series of MyBB."; - -$l['browse_all_themes'] = "Browse All Themes"; - -$l['export_theme'] = "Export Theme"; -$l['export_theme_desc'] = "Here you can export your themes and customized templates. Exporting themes is useful if you wish to share them with others or import them to another forum."; - -$l['duplicate_theme'] = "Duplicate Theme"; -$l['duplicate_theme_desc'] = "Here you can duplicate your themes. This helps you if you want to develop another version of it."; - -$l['colors_manage'] = "Manage Colors"; -$l['colors_attached_to'] = "color setting"; -$l['colors_setting'] = "Base Color"; -$l['colors_setting_desc'] = "Select the color this theme should use as its base color. Stylesheets attached to this color will be used."; -$l['colors_no_color_setting'] = "There are no colors available. Please create a list of colors below to use this feature."; -$l['colors_add'] = "Manage Colors"; -$l['colors_add_desc'] = "A list of colors available for this theme. This should be a list of key paired (key=item) colors, for example, blue=Blue. Separate items with a new line."; -$l['colors_please_select'] = "None"; -$l['colors_add_edit_desc'] = "Select a color to attach this stylesheet to. You can select more than one color."; -$l['colors_specific_color'] = "Specific color"; - -$l['include_custom_only'] = "Include customized items only?"; -$l['include_custom_only_desc'] = "If you wish to include items (css and stylesheets) inherited from parent themes select \"no\", otherwise only customized elements will be exported."; -$l['include_templates'] = "Include templates in the export as well?"; -$l['include_templates_desc'] = "If you want to export the customized templates used in this theme as well, select yes."; - -$l['edit_stylesheet_simple_mode'] = "Edit Stylesheet: Simple Mode"; -$l['edit_stylesheet_simple_mode_desc'] = "Here you can easily edit your theme's stylesheet. Simple mode allows you to customize the CSS in this stylesheet with little or no knowledge of CSS. Begin by selecting an item below."; -$l['edit_stylesheet_advanced_mode'] = "Edit Stylesheet: Advanced Mode"; -$l['edit_stylesheet_advanced_mode_desc'] = "Here you can edit this stylesheet like a flat file. The contents of the CSS stylesheet is shown in the text area below."; - -$l['theme'] = "Theme"; -$l['num_users'] = "# Users"; -$l['edit_theme'] = "Edit Theme"; -$l['delete_theme'] = "Delete Theme"; -$l['set_as_default'] = "Set as Default"; -$l['default_theme'] = "Default Theme"; -$l['force_on_users'] = "Force on Users"; -$l['delete_revert'] = "Delete / Revert"; - -$l['local_file'] = "Local File"; -$l['url'] = "URL"; -$l['import_from'] = "Import from"; -$l['import_from_desc'] = "Select a file to import. You can either import the theme file from your computer or from a URL."; -$l['parent_theme'] = "Parent Theme"; -$l['parent_theme_desc'] = "Select the theme this theme should be a child of."; -$l['new_name'] = "New Name"; -$l['new_name_desc'] = "A new name for the imported theme. If left blank, the name in the theme file will be used."; -$l['advanced_options'] = "Advanced Options"; -$l['ignore_version_compatibility'] = "Ignore Version Compatibility"; -$l['ignore_version_compat_desc'] = "Should this theme be installed regardless of the version of MyBB it was created for?"; -$l['import_stylesheets'] = "Import Stylesheets"; -$l['import_stylesheets_desc'] = "If this theme contains custom stylesheets should they be imported?"; -$l['import_templates'] = "Import Templates"; -$l['import_templates_desc'] = "If this theme contains custom templates should they be imported?"; -$l['import_theme'] = "Import Theme"; - -$l['new_name_duplicate_desc'] = "A new name for the duplicated theme."; -$l['duplicate_stylesheets'] = "Duplicate Stylesheets"; -$l['duplicate_stylesheets_desc'] = "If this theme contains custom stylesheets should they be duplicated?"; -$l['duplicate_templates'] = "Duplicate Templates"; -$l['duplicate_templates_desc'] = "If this theme contains custom templates should they be duplicated?"; - -$l['create_a_theme'] = "Create a Theme"; -$l['name'] = "Name"; -$l['name_desc'] = "Specify a name for the new theme."; -$l['display_order'] = "Order"; - -$l['edit_theme_properties'] = "Edit Theme Properties"; -$l['name_desc_edit'] = "Specify a name for the theme."; -$l['allowed_user_groups'] = "Allowed User Groups"; -$l['allowed_user_groups_desc'] = "Specify which user groups are allowed to use this theme. Selecting 'All User Groups' will override any other selection. Hold down the CTRL key to select multiple user groups."; -$l['all_user_groups'] = "All User Groups"; -$l['template_set'] = "Template Set"; -$l['template_set_desc'] = "Specify the template set the theme should use. The selected template set defines the markup (HTML) used in presenting the theme."; -$l['editor_theme'] = "Editor Style"; -$l['editor_theme_desc'] = "Specify the style to be used for the MyCode editor in this theme. Editor styles can be found in the jscripts/editor_themes folder."; -$l['img_directory'] = "Image Directory"; -$l['img_directory_desc'] = "The root directory for the location of the images used in this theme. Note that this only specifies the directory for the images used in templates, not the stylesheets."; -$l['logo'] = "Board Logo"; -$l['logo_desc'] = "Location of the board logo used in this theme (this is the logo that appears at the top of each page)."; -$l['table_spacing'] = "Table Spacing"; -$l['table_spacing_desc'] = "The width of the inner padding of table cells, in pixels. This is HTML's cellpadding attribute of the table tag."; -$l['inner_border'] = "Inner Table Border Width"; -$l['inner_border_desc'] = "The amount of padding between each table cell, in pixels. This is HTML's cellspacing attribute of the table tag."; -$l['save_theme_properties'] = "Save Theme Properties"; -$l['save_stylesheet_order'] = "Save Stylesheet Orders"; - -$l['background'] = "Background"; -$l['extra_css_atribs'] = "Extra CSS Attributes"; -$l['color'] = "Color"; -$l['width'] = "Width"; -$l['text_decoration'] = "Text Decoration"; -$l['font_family'] = "Font Family"; -$l['font_size'] = "Font Size"; -$l['font_style'] = "Font Style"; -$l['font_weight'] = "Font Weight"; - -$l['stylesheets'] = "Stylesheets"; -$l['inherited_from'] = "Inherited from"; -$l['attached_to'] = "Attached to"; -$l['attached_to_nothing'] = "Attached to nothing"; -$l['attached_to_desc'] = "You can either attach stylesheets globally or to specific files. If you attach it to specific files you can attach it to specific actions within each file."; -$l['actions'] = "actions"; -$l['of'] = "of"; -$l['attached_to_all_pages'] = "Attached to all pages"; -$l['properties'] = "Properties"; -$l['edit_style'] = "Edit Style"; -$l['stylesheets_in'] = "Stylesheets in"; -$l['stylesheet_properties'] = "Stylesheet Properties"; -$l['stylesheet_inherited_default'] = "This stylesheet is currently being inherited from {1}. Any changes you make will break the inheritance, and the stylesheet will be copied to this theme."; -$l['stylesheet_inherited'] = "This stylesheet is currently being inherited from {1}. Any changes you make will break the inheritance, and the stylesheet will be copied to this theme. Edit this stylesheet in {1} to keep the inheritance."; -$l['globally'] = "Globally"; -$l['specific_files'] = "Specific files"; -$l['specific_actions'] = "Specific actions"; -$l['specific_actions_desc'] = "Actions are separated by commas"; -$l['file'] = "File"; -$l['add_another'] = "Add another"; -$l['edit_stylesheet_properties_for'] = "Edit Stylesheet Properties for"; -$l['file_name'] = "File Name"; -$l['file_name_desc'] = "Name for the stylesheet, usually ending in [.css]"; -$l['save_stylesheet_properties'] = "Save Stylesheet Properties"; -$l['saved'] = "Saved"; -$l['editing'] = "Editing"; -$l['selector'] = "Selector"; -$l['save_changes'] = "Save Changes"; -$l['save_changes_and_close'] = "Save Changes & Close"; -$l['save_changes_js'] = "Do you want to save your changes first?"; -$l['delete_confirm_js'] = "Are you sure you want to delete this?"; -$l['import_stylesheet_from'] = "Import from another stylesheet in this theme"; -$l['write_own'] = "Write my own content"; -$l['save_stylesheet'] = "Save Stylesheet"; -$l['add_stylesheet_to'] = "Add Stylesheet to"; - -$l['full_stylesheet_for'] = "Full Stylesheet for"; - -$l['recommended_themes_for_mybb'] = "Recommended Themes for MyBB {1}"; -$l['browse_results_for_mybb'] = "Browse Results for MyBB {1}"; -$l['search_for_themes'] = "Search for Themes"; -$l['search'] = "Search"; -$l['download'] = "Download"; -$l['created_by'] = "Created by"; - -$l['error_invalid_stylesheet'] = "You have selected an invalid stylesheet."; -$l['error_invalid_theme'] = "You have selected an invalid theme."; -$l['error_missing_name'] = "Please enter a name for this theme."; -$l['error_missing_url'] = "Please enter a valid url to import a theme from."; -$l['error_theme_already_exists'] = "A theme with the same name already exists. Please specify a different name."; -$l['error_theme_security_problem'] = "A potential security issue was found in the theme. It was not imported. Please contact the Author or MyBB Group for support."; - -$l['error_local_file'] = "Could not open the local file. Does it exist? Please check and try again."; -$l['error_uploadfailed'] = "Upload failed. Please try again."; -$l['error_uploadfailed_detail'] = "Error details: "; -$l['error_uploadfailed_php1'] = "PHP returned: Uploaded file exceeded upload_max_filesize directive in php.ini. Please contact your forum administrator with this error."; -$l['error_uploadfailed_php2'] = "The uploaded file exceeded the maximum file size specified."; -$l['error_uploadfailed_php3'] = "The uploaded file was only partially uploaded."; -$l['error_uploadfailed_php4'] = "No file was uploaded."; -$l['error_uploadfailed_php6'] = "PHP returned: Missing a temporary folder. Please contact your forum administrator with this error."; -$l['error_uploadfailed_php7'] = "PHP returned: Failed to write the file to disk. Please contact your forum administrator with this error."; -$l['error_uploadfailed_phpx'] = "PHP returned error code: {1}. Please contact your forum administrator with this error."; -$l['error_uploadfailed_lost'] = "The file could not be found on the server."; -$l['error_uploadfailed_nocontents'] = "MyBB could not find the theme with the file you uploaded. Please check the file is the correct and is not corrupt."; -$l['error_invalid_version'] = "This theme has been written for another version of MyBB. Please check the \"Ignore Version Compatibility\" to ignore this error."; -$l['error_missing_stylesheet_name'] = "Please enter a name for this stylesheet."; -$l['error_missing_stylesheet_extension'] = "This stylesheet must end with the correct file extension, for example, {1}.css"; -$l['error_invalid_parent_theme'] = "The selected parent theme does not exist. Please select a valid parent theme."; -$l['error_invalid_templateset'] = "The selected template set does not exist. Please select a valid template set."; -$l['error_invalid_editortheme'] = "The selected editor theme does not exist. Please select a valid editor theme."; -$l['error_inheriting_stylesheets'] = "You cannot delete this theme because there are still other themes that are inheriting stylesheets from it."; -$l['error_cannot_parse'] = "MyBB cannot parse this stylesheet for the simple editor. It can only be edited in advanced mode."; -$l['error_communication_problem'] = "There was a problem communicating with the MyBB themes server. Please try again in a few minutes."; -$l['error_no_results_found'] = "No results were found for the specified keyword(s)."; -$l['error_no_color_picked'] = "You didn't specify which colors to attach this stylesheet to."; -$l['error_no_display_order'] = "There was an error finding the display orders for the stylesheets. Please refresh the page and try again."; - -$l['success_duplicated_theme'] = "The selected theme has been duplicated successfully."; -$l['success_imported_theme'] = "The selected theme has been imported successfully."; -$l['success_theme_created'] = "The theme has been created successfully."; -$l['success_theme_deleted'] = "The selected theme has been deleted successfully."; -$l['success_stylesheet_properties_updated'] = "The properties for the selected stylesheet have been updated successfully."; -$l['success_stylesheet_updated'] = "The selected stylesheet has been updated successfully."; -$l['success_stylesheet_deleted'] = "The selected stylesheet has been deleted / reverted successfully."; -$l['success_theme_set_default'] = "The selected theme is now the forum default."; -$l['success_theme_forced'] = "All users have been forced to use the selected theme successfully."; -$l['success_theme_properties_updated'] = "The properties for the select theme have been updated successfully."; -$l['success_stylesheet_added'] = "The stylesheet for this theme has been created successfully."; -$l['success_stylesheet_order_updated'] = "The display orders for the stylesheets have been updated successfully."; - -$l['confirm_theme_deletion'] = "Are you sure you want to delete this theme?"; -$l['confirm_stylesheet_deletion'] = "Are you sure you want to delete / revert this stylesheet?"; -$l['confirm_theme_forced'] = "Are you sure you want to force this theme on all users?"; - -$l['theme_info_fetch_error'] = 'There was an error fetching the style info.'; -$l['theme_info_save_error'] = 'There was an error saving the style info.'; - -$l['saving'] = 'Saving...'; - diff --git a/html/forums/inc/languages/english/admin/tools_adminlog.lang.php b/html/forums/inc/languages/english/admin/tools_adminlog.lang.php deleted file mode 100644 index 45f8334..0000000 --- a/html/forums/inc/languages/english/admin/tools_adminlog.lang.php +++ /dev/null @@ -1,311 +0,0 @@ - Please note, this process can not differentiate between custom modifications and actual corruption in files. Therefore you should take caution in reverting files this process returns as \"corrupt\"."; - -$l['error_communication'] = "There was a problem communicating with the MyBB server. Please try again in a few minutes."; -$l['file'] = "File"; -$l['no_corrupt_files_found'] = "Congratulations! No corrupt files have been found on your installation."; -$l['found_problems'] = "Found Problems"; -$l['no_problems_found'] = "No Problems Detected"; -$l['changed'] = "Changed"; -$l['missing'] = "Missing"; -$l['status'] = "Status"; - diff --git a/html/forums/inc/languages/english/admin/tools_mailerrors.lang.php b/html/forums/inc/languages/english/admin/tools_mailerrors.lang.php deleted file mode 100644 index 20dc01d..0000000 --- a/html/forums/inc/languages/english/admin/tools_mailerrors.lang.php +++ /dev/null @@ -1,31 +0,0 @@ -(requires MySQL 5.5.3 or above)"; -$l['not_available'] = "Not available"; -$l['all_tables'] = "All Tables"; -$l['convert_now'] = "Convert Now"; -$l['totals'] = "Totals"; -$l['attachments'] = "Attachments"; -$l['total_database_size'] = "Total Database Size"; -$l['attachment_space_used'] = "Attachment Space used"; -$l['total_cache_size'] = "Total Cache Size"; -$l['estimated_attachment_bandwidth_usage'] = "Estimated Attachment Bandwidth Usage"; -$l['max_upload_post_size'] = "Max Upload / POST Size"; -$l['average_attachment_size'] = "Average Attachment Size"; -$l['stats'] = "Stats"; -$l['task'] = "Task"; -$l['run_time'] = "Run Time"; -$l['next_3_tasks'] = "Next 3 Tasks"; -$l['no_tasks'] = "There are no tasks running at this time."; -$l['backup_time'] = "Backup Time"; -$l['no_backups'] = "There are currently no backups made yet."; -$l['existing_db_backups'] = "Existing Database Backups"; -$l['writable'] = "Writable"; -$l['not_writable'] = "Not Writable"; -$l['please_chmod_777'] = "Please CHMOD to 777."; -$l['chmod_info'] = "Please change the CHMOD settings to the ones specified with the file below. For more information on CHMODing, see the"; -$l['file'] = "File"; -$l['location'] = "Location"; -$l['settings_file'] = "Settings File"; -$l['config_file'] = "Configuration File"; -$l['file_upload_dir'] = "File Uploads Directory"; -$l['avatar_upload_dir'] = "Avatar Uploads Directory"; -$l['language_files'] = "Language Files"; -$l['backup_dir'] = "Backups Directory"; -$l['cache_dir'] = "Cache Directory"; -$l['themes_dir'] = "Themes Directory"; -$l['chmod_files_and_dirs'] = "CHMOD Files and Directories"; - -$l['notice_process_long_time'] = "This process may take up to several hours depending on the size of your forum and this table. It is highly recommend to create a database backup as this process can't be undone."; -$l['notice_mb4_warning'] = "4-Byte UTF-8 Support requires MySQL 5.5.3 or above. You will not be able to import your database on a MySQL server with another version."; - -$l['check_templates'] = "Check Templates"; -$l['check_templates_desc'] = "Checks all installed templates for known security issues."; -$l['check_templates_title'] = "Check Template Security"; -$l['check_templates_info'] = "This process will check your templates against security issues that could affect your forum and the server it runs on. This might take a while if you've installed many themes. -

    To start the process, press the 'Proceed' button below."; -$l['check_templates_info_desc'] = "The templates below matched known security issues. Please review them."; -$l['full_edit'] = "Full Edit"; - -$l['error_chmod'] = "of the required files and directories do not have proper CHMOD settings."; -$l['error_invalid_table'] = "The specified table does not exist."; -$l['error_db_encoding_not_set'] = "Your current setup of MyBB is not setup to use this tool yet. Please see the MyBB Docs for more information on how to set it up."; -$l['error_not_supported'] = "Your current Database Engine is not supported by the UTF-8 Conversion Tool."; -$l['error_invalid_input'] = "There was a problem checking the templates. Please try again or contact the MyBB Group for support."; -$l['error_master_templates_altered'] = "The Master Templates have been altered. Please contact the MyBB Group for support on how to alter these."; -$l['error_utf8mb4_version'] = "Your MySQL version doesn't support 4-Byte UTF-8 encoding."; - - -$l['warning_multiple_encodings'] = "It is recommend not to use different encodings in your database. This may cause unexpected behavior or MySQL errors."; -$l['warning_utf8mb4_config'] = "For full 4-Byte UTF-8 support you need to change \$config['database']['encoding'] = 'utf8'; to \$config['database']['encoding'] = 'utf8mb4'; in your inc/config.php."; - -$l['success_templates_checked'] = "Templates checked successfully - no security issues were found!"; -$l['success_all_tables_already_converted'] = "All tables have already been converted or are already in UTF-8 format."; -$l['success_table_converted'] = "The selected table \"{1}\" has been converted to UTF-8 successfully."; -$l['success_chmod'] = "All of the required files and directories have the proper CHMOD settings."; diff --git a/html/forums/inc/languages/english/admin/tools_tasks.lang.php b/html/forums/inc/languages/english/admin/tools_tasks.lang.php deleted file mode 100644 index a1729ac..0000000 --- a/html/forums/inc/languages/english/admin/tools_tasks.lang.php +++ /dev/null @@ -1,76 +0,0 @@ -WARNING: You are about to enable a task that is only meant to be run via cron (Please see the MyBB Docs for more information). Continue?"; -$l['no_tasks'] = "There are no tasks on your forum at this time."; - diff --git a/html/forums/inc/languages/english/admin/tools_warninglog.lang.php b/html/forums/inc/languages/english/admin/tools_warninglog.lang.php deleted file mode 100644 index 0e89b82..0000000 --- a/html/forums/inc/languages/english/admin/tools_warninglog.lang.php +++ /dev/null @@ -1,51 +0,0 @@ -*"; -$l['autocomplete_enabled'] = "Auto-complete is enabled in this field."; -$l['ban_reason'] = "Ban Reason"; -$l['ban_group'] = "Banned Group *"; -$l['ban_group_desc'] = "In order for this user to be banned they must be moved to a banned group."; -$l['ban_time'] = "Ban Length *"; - -//= Index -$l['user'] = "User"; -$l['moderation'] = "Moderation"; -$l['ban_lifts_on'] = "Ban Lifts On"; -$l['time_left'] = "Time Left"; -$l['permenantly'] = "permanently"; -$l['na'] = "N/A"; -$l['for'] = "for"; -$l['bannedby_x_on_x'] = "{1}
    Banned by {2} on {3} {4}"; -$l['lift'] = "Lift"; -$l['no_banned_users'] = "You don't have any banned users at the moment."; -$l['prune_threads_and_posts'] = "Prune Threads & Posts"; - -// Buttons -$l['ban_user'] = "Ban User"; -$l['update_ban'] = "Update Ban"; diff --git a/html/forums/inc/languages/english/admin/user_group_promotions.lang.php b/html/forums/inc/languages/english/admin/user_group_promotions.lang.php deleted file mode 100644 index 17ca67c..0000000 --- a/html/forums/inc/languages/english/admin/user_group_promotions.lang.php +++ /dev/null @@ -1,91 +0,0 @@ -Use {username} to represent the user's name."; -$l['user_title'] = "Default User Title"; -$l['user_title_desc'] = "If the user has nothing entered in their custom user title field, the user title entered here will be displayed. If you leave this option blank, users will have their title and stars taken from the User Titles configuration."; -$l['do_not_copy_permissions'] = "Don't copy permissions from another group"; -$l['copy_permissions_from'] = "Copy Permissions From..."; -$l['copy_permissions_from_desc'] = "If you wish, you can copy the forum and group permissions from another group. To make use of this, select a group to copy permissions from."; -$l['save_user_group'] = "Save User Group"; -$l['list_users'] = "List Users"; - -$l['general'] = "General"; -$l['forums_posts'] = "Forums and Posts"; -$l['users_permissions'] = "Users and Permissions"; -$l['misc'] = "Miscellaneous"; -$l['mod_cp'] = "Moderator CP"; -$l['stars'] = "# of Stars"; -$l['star_image'] = "Star Image"; -$l['user_stars'] = "User Stars"; -$l['user_stars_desc'] = "If you enter a number of stars and the location of a star image, this star image will be shown for this particular user group. If you want to use different star images for different themes, please use {theme} to represent the image directory of each theme. The number of stars only takes effect if Default User Title is not blank."; -$l['group_image'] = "Group Image"; -$l['group_image_desc'] = "Here you can set a group image which will show on each post made by users in this group. Please use {lang} to represent the user's chosen language if translated group images are available"; -$l['general_options'] = "General Options"; -$l['member_list'] = "Yes, show users of this group on the member list"; -$l['forum_team'] = "Yes, show this group on the 'forum team' page"; -$l['is_banned_group'] = "Yes, this is a banned group
    If this group is a 'banned' user group, users will be able to be 'banned' in to this user group."; -$l['publicly_joinable_options'] = "Publicly Joinable Options"; -$l['user_joinable'] = "Yes, users can freely join and leave this group"; -$l['moderate_join_requests'] = "Yes, all new join requests need to be moderated first
    Users must be able to freely join and leave this group for this to take effect."; -$l['invite_only'] = "Yes, users must be invited in order to join this group
    Users must be able to freely join and leave this group for this to take effect."; -$l['can_set_as_display_group'] = "Yes, users can set this group as their display group
    If set to yes, users will be able to set this user group as their display group for user titles, stars, name style and group images."; -$l['moderation_administration_options'] = "Moderation/Administration Options"; -$l['is_super_mod'] = "Yes, users of this group are super moderators"; -$l['can_access_mod_cp'] = "Yes, users of this group can access the moderator CP"; -$l['can_access_admin_cp'] = "Yes, users of this group can access the admin CP"; -$l['viewing_options'] = "Viewing Options"; -$l['can_view_board'] = "Can view board?"; -$l['can_view_threads'] = "Can view threads?"; -$l['can_search_forums'] = "Can search forums?"; -$l['can_view_profiles'] = "Can view user profiles?"; -$l['can_download_attachments'] = "Can download attachments?"; -$l['can_view_board_closed'] = "Can view board when closed?"; -$l['posting_rating_options'] = "Posting/Rating Options"; -$l['can_post_threads'] = "Can post new threads?"; -$l['can_post_replies'] = "Can post replies to threads?"; -$l['can_rate_threads'] = "Can rate threads?"; -$l['moderation_options'] = "Moderation Options"; -$l['mod_new_posts'] = "Moderate new posts?"; -$l['mod_new_threads'] = "Moderate new threads?"; -$l['mod_new_attachments'] = "Moderate new attachments?"; -$l['mod_after_edit'] = "Moderate posts after they've been edited?"; -$l['poll_options'] = "Poll Options"; -$l['max_posts_per_day'] = "Maximum Posts Per Day"; -$l['max_posts_per_day_desc'] = "This is the total number of posts allowed per user per day. 0 for unlimited."; -$l['can_post_polls'] = "Can post polls?"; -$l['can_vote_polls'] = "Can vote in polls?"; -$l['can_undo_votes'] = "Can undo votes in polls?"; -$l['attachment_options'] = "Attachment Options"; -$l['can_post_attachments'] = "Can post attachments?"; -$l['attach_quota'] = "Attachment Quota:"; -$l['attach_quota_desc'] = "Here you can set the attachment quota that each user in this group will receive. If set to 0, there is no limit."; -$l['editing_deleting_options'] = "Editing/Deleting Options"; -$l['can_edit_posts'] = "Can edit own posts?"; -$l['can_delete_posts'] = "Can delete own posts?"; -$l['can_delete_threads'] = "Can delete own threads?"; -$l['can_edit_attachments'] = "Can update own attachments?"; -$l['can_view_deletion_notices'] = "Can view deletion notices?"; -$l['account_management'] = "Account Management"; -$l['edit_time_limit'] = "Edit Time Limit"; -$l['edit_time_limit_desc'] = "The number of minutes until regular users cannot edit their own posts (if they have the permission). Enter 0 (zero) for no limit."; -$l['can_be_reported'] = "Can be reported?"; -$l['can_access_usercp'] = "Can access User CP?"; -$l['can_change_username'] = "Can change username?"; -$l['can_change_website'] = "Can change website?"; -$l['can_use_usertitles'] = "Can use custom user titles?"; -$l['can_upload_avatars'] = "Can upload avatars?"; -$l['can_use_signature'] = "Can add a signature?"; -$l['can_use_signature_posts'] = "Can add a signature after x posts?"; -$l['required_posts'] = "Required Post Count Before Signature Can Be Added:"; -$l['required_posts_desc'] = "Here you can enter the minimum number of posts a user must have before they can add a signature. If set to 0, users can add a signature at any post count."; -$l['uses_no_follow'] = "Signature links have nofollow enabled?"; -$l['reputation_system'] = "Reputation System"; -$l['can_use_pms'] = "Can use private messaging?"; -$l['can_send_pms'] = "Can send private messages?"; -$l['can_track_pms'] = "Can track sent private messages?"; -$l['can_deny_reciept'] = "Can deny message receipt notifications?"; -$l['can_override_pms'] = "Can send private messages even if recipients have them disabled?"; -$l['message_quota'] = "Message Quota:"; -$l['message_quota_desc'] = "Maximum number of private messages that can be stored by users in this group. If empty, users can store unlimited messages."; -$l['max_recipients'] = "Maximum Recipients Per Message:"; -$l['max_recipients_desc'] = "Maximum number of recipients a user can send a private message to at one time. If empty, users can send private messages to an unlimited number of recipients."; -$l['show_reputations'] = "Show reputations for users in this group?"; -$l['can_give_reputation'] = "Can give reputations to users?"; -$l['can_delete_own_reputation'] = "Can delete own given reputations?"; -$l['points_to_award_take'] = "Points to Award/Take Away:"; -$l['points_to_award_take_desc'] = "Here you need to enter the number of points to give or take away on each reputation given by users of this group."; -$l['max_reputations_daily'] = "Maximum Reputations Allowed Per Day:"; -$l['max_reputations_daily_desc'] = "Here you can enter the maximum number of reputations that users in this group can give per day. To allow unlimited reputations per day, enter 0."; -$l['max_reputations_perthread'] = "Maximum Reputations Allowed Per Thread:"; -$l['max_reputations_perthread_desc'] = "When 'Allow Post Reputation' is allowed, you can set the maximum amount of reputations that users in this group can give to the same user, in the same thread, per day, in the box below. To allow unlimited reputations for a user, per thread, enter 0."; -$l['max_reputations_peruser'] = "Maximum Reputations Allowed Per User:"; -$l['max_reputations_peruser_desc'] = "Along with a per thread maximum, you can enter a maximum number of reputations that users in this group can give to the same user per day. To allow unlimited reputations for a user, enter 0."; -$l['warning_system'] = "Warning System"; -$l['can_send_warnings'] = "Can send warnings to other users?"; -$l['can_receive_warnings'] = "Can receive warnings from other users?"; -$l['warnings_per_day'] = "Maximum Warnings Allowed Per Day:"; -$l['private_messaging'] = "Private Messaging"; -$l['calendar'] = "Calendar"; -$l['can_view_calendar'] = "Can view calendar?"; -$l['can_post_events'] = "Can post calendar events?"; -$l['can_bypass_event_moderation'] = "Can bypass calendar event moderation queue?"; -$l['can_moderate_events'] = "Can moderate calendar events?"; -$l['whos_online'] = "Who's Online"; -$l['can_view_whos_online'] = "Can view who's online?"; -$l['can_view_invisible'] = "Can view invisible users?"; -$l['can_view_ips'] = "Can view IP addresses on who's online?"; -$l['can_view_member_list'] = "Can view member list?"; -$l['show_in_birthday_list'] = "Can be shown in the birthday list?"; -$l['can_email_users'] = "Can send threads to friends and email users?"; -$l['can_email_users_override'] = "Can email users even if they appear on their ignore list?"; -$l['max_emails_per_day'] = "Maximum Emails Per Day:"; -$l['max_emails_per_day_desc'] = "The maximum number of emails users can send using the 'Email User' and 'Send Thread to Friend' features. If set to 0, there is no limit."; -$l['email_flood_time'] = "Email Flood Time:"; -$l['email_flood_time_desc'] = "The number of minutes a user must wait after sending an email before they can send another. If set to 0, there is no wait."; -$l['forum_post_options'] = "Forums & Posts"; -$l['user_options'] = "Users"; -$l['can_manage_announce'] = "Can manage announcements?
    Please note that forum moderators must be assigned to at least one forum in order to manage announcements."; -$l['can_manage_mod_queue'] = "Can manage moderator queue?
    Please note that forum moderators must be assigned to at least one forum in order to manage the moderator queue."; -$l['can_manage_reported_content'] = "Can manage reported content?
    Please note that forum moderators must be assigned to at least one forum in order to manage reported content."; -$l['can_view_mod_logs'] = "Can view moderator logs?
    Please note that forum moderators must be assigned to at least one forum in order to view the moderator logs."; -$l['can_edit_profiles'] = "Can edit profiles?
    Please note that forum moderators cannot edit the profiles of super moderators or administrators regardless of this permission."; -$l['can_ban_users'] = "Can ban users?
    Please note that forum moderators cannot ban super moderators or administrators regardless of this permission."; -$l['can_view_warnlogs'] = "Can view warning logs?"; -$l['can_use_ipsearch'] = "Can use IP search?"; -$l['outstanding_join_request'] = "outstanding join requests"; - -$l['no_join_requests'] = "There are no outstanding join requests for this user group."; -$l['no_assigned_leaders'] = "You haven't assigned any users as leaders of this group yet. To create a leader for this group, fill in the form below."; - -$l['error_missing_title'] = "You did not enter a title for this new user group."; -$l['error_invalid_user_group'] = "You have selected an invalid user group."; -$l['error_invalid_join_request'] = "You have selected an invalid join request."; -$l['error_invalid_username'] = "The username you entered is invalid."; -$l['error_already_leader'] = "The user is already a leader of this user group."; -$l['error_invalid_group_leader'] = "You specified an invalid group leader."; -$l['error_missing_namestyle_username'] = "The username style must contain {username}"; -$l['error_disallowed_namestyle_username'] = "You can't use script, meta or base tags in the username style."; -$l['error_default_group_delete'] = "Default groups cannot be deleted"; -$l['error_cannot_have_both_types'] = "You cannot have a joinable group that is both moderated and invite only. Please choose one or the other."; - -$l['success_group_created'] = "The new user group has been created successfully."; -$l['success_group_updated'] = "The selected user group has been updated successfully."; -$l['success_group_deleted'] = "The selected user group has been deleted successfully."; -$l['success_groups_disporder_updated'] = "The user group display orders have been updated successfully."; -$l['success_join_request_approved'] = "The selected join request has been approved successfully. The user is now a member of this user group."; -$l['success_join_request_denied'] = "The selected join request has been denied successfully."; -$l['success_selected_requests_approved'] = "The selected join requests have been approved successfully. The users are now part of this group."; -$l['success_selected_requests_denied'] = "The selected join requests have been denied successfully."; -$l['success_user_made_leader'] = "was successfully made a group leader for this user group."; -$l['success_group_leader_updated'] = "The selected group leader has been updated successfully."; -$l['success_group_leader_deleted'] = "The selected user has been removed from the group leaders list for this group successfully."; - -$l['confirm_group_deletion'] = "Are you sure you want to delete this user group?"; -$l['confirm_group_leader_deletion'] = "Are you sure you want to delete this group leader?"; - diff --git a/html/forums/inc/languages/english/admin/user_mass_mail.lang.php b/html/forums/inc/languages/english/admin/user_mass_mail.lang.php deleted file mode 100644 index 2beda5c..0000000 --- a/html/forums/inc/languages/english/admin/user_mass_mail.lang.php +++ /dev/null @@ -1,120 +0,0 @@ -Note: This is not the promotion system.
    "; - -$l['error_missing_title'] = "You did not enter a title for this user title"; -$l['error_missing_posts'] = "You did not enter the minimum number of posts for this user title"; -$l['error_cannot_have_same_posts'] = "This user title cannot have the same minimum number of posts as another title"; -$l['error_invalid_user_title'] = "You have specified an invalid user title"; - -$l['success_user_title_created'] = "The new user title has been created successfully."; -$l['success_user_title_updated'] = "The user title has been updated successfully."; -$l['success_user_title_deleted'] = "The specified user title has been deleted successfully."; - -$l['title_to_assign'] = "Title to Assign"; -$l['title_to_assign_desc'] = "This title will be shown for users underneath their name if they do not have a custom title set."; -$l['minimum_posts'] = "Minimum Posts"; -$l['minimum_posts_desc'] = "The minimum number of posts for a user to have before they're assigned this user title."; -$l['number_of_stars'] = "Number of Stars"; -$l['number_of_stars_desc'] = "Enter the number of stars to be shown under this user title. Set to 0 to show no stars."; -$l['star_image'] = "Star Image"; -$l['star_image_desc'] = "If this user title should show stars, enter the path to the star image here. If empty, the user group star image will be shown. Use {theme} to specify the image directory for the viewers current theme."; -$l['save_user_title'] = "Save User Title"; -$l['edit_user_title'] = "Edit User Title"; -$l['edit_user_title_desc'] = "This section allows you to edit a user title."; -$l['user_title_deletion_confirmation'] = "Are you sure you want to delete this user title?"; -$l['manage_user_titles'] = "Manage User Titles"; -$l['user_title'] = "User Title"; -$l['no_user_titles'] = "You do not have any user titles defined at the moment"; - diff --git a/html/forums/inc/languages/english/admin/user_users.lang.php b/html/forums/inc/languages/english/admin/user_users.lang.php deleted file mode 100644 index e191c0b..0000000 --- a/html/forums/inc/languages/english/admin/user_users.lang.php +++ /dev/null @@ -1,411 +0,0 @@ -only the destination account. The source accounts posts, threads, private messages, calendar events, post count and buddy list will be merged in to the destination account.
    Please be aware that this process cannot be undone."; -$l['edit_user'] = "Edit User"; -$l['edit_user_desc'] = "Here you can edit this users profile, settings, and signature; see general statistics; and visit other pages for further information relating to this user."; -$l['show_referrers'] = "Show Referrers"; -$l['show_referrers_desc'] = "The results to your search criteria are shown below. You can view the results in either a table view or business card view."; -$l['show_ip_addresses'] = "Show IP Addresses"; -$l['show_ip_addresses_desc'] = "The registration IP address and the post IPs for the selected users are shown below. The first IP address is the registration IP (it is marked as such). Any other IP addresses are IP addresses the user has posted with."; -$l['manage_users'] = "Manage Users"; -$l['manage_users_desc'] = "Mass-managing users makes it a lot easier to do common tasks."; -$l['inline_edit'] = "Inline User Moderation:"; -$l['inline_activate'] = "Activate User(s)"; -$l['inline_ban'] = "Ban User(s)"; -$l['inline_usergroup'] = "Change Users' Usergroup"; -$l['inline_delete'] = "Delete User(s)"; -$l['inline_prune'] = "Prune/Delete Users' Posts"; -$l['inline_activated'] = "{1} user(s) were successfully activated."; -$l['inline_activated_more'] = "{1} user(s) you selected were already activated."; -$l['inline_activated_failed'] = "All the users you selected were already activated."; -$l['ban_time'] = "Ban Length *"; -$l['ban_reason'] = "Ban Reason"; -$l['mass_ban'] = "Mass Ban Users"; -$l['important'] = "Important"; -$l['mass_ban_info'] = "This action will affect {1} user(s). Only continue if you are sure you want to do this."; -$l['ban_users'] = "Ban Users"; -$l['users_banned'] = "{1} user(s) have been banned."; -$l['confirm_multilift'] = "Are you sure you want to lift bans for the user(s) you selected?"; -$l['success_ban_lifted'] = "Bans for {1} user(s) you selected have been lifted."; -$l['edit_ban'] = "Edit Ban"; -$l['lift_ban'] = "Lift Ban"; -$l['lift_bans'] = "Lift Bans"; -$l['confirm_multidelete'] = "Are you sure you want to delete these {1} user(s)? This cannot be undone."; -$l['users_deleted'] = "{1} user(s) have been deleted."; -$l['mass_prune_info'] = "This action will affect {1} user(s). If you continue, it will remove all the users' posts older than the date you enter below.

    Please note that if any users' post is the first post of a thread, the entire thread will be removed."; -$l['mass_prune_posts'] = "Mass Prune Posts"; -$l['manual_date'] = "Enter a manual date"; -$l['relative_date'] = "Or select a delete option"; -$l['multi_selected_dates'] = "You've selected both a manual date and a set option. Please select either a manual date or a set option."; -$l['incorrect_date'] = "The date you entered is invalid. Please enter a valid date, or leave blank and select a set option."; -$l['prune_complete'] = "Prune completed successfully."; -$l['prune_fail'] = "No posts were found for the selected user(s). No posts were pruned."; -$l['no_prune_option'] = "Please enter a date or select an option to continue."; -$l['prune_posts'] = "Prune Posts"; -$l['delete_posts'] = "Delete Posts"; -$l['usergroup_info'] = "The following action will affect {1} user(s). By choosing the options below, you will be overwriting the selected users' primary / additional / display usergroup."; -$l['mass_usergroups'] = "Mass Usergroup Change"; -$l['success_mass_usergroups'] = "User(s) updated successfully."; -$l['alter_usergroups'] = "Save Changes"; -$l['no_usergroup_changed'] = "None of the user(s) you selected can have their usergroups changed."; -$l['no_set_option'] = "A valid set date was not selected. Please select an option from the dropdown box or enter a manual date."; -$l['select_an_option'] = "(Select an Option)"; - -$l['month_1'] = "January"; -$l['month_2'] = "February"; -$l['month_3'] = "March"; -$l['month_4'] = "April"; -$l['month_5'] = "May"; -$l['month_6'] = "June"; -$l['month_7'] = "July"; -$l['month_8'] = "August"; -$l['month_9'] = "September"; -$l['month_10'] = "October"; -$l['month_11'] = "November"; -$l['month_12'] = "December"; - -$l['option_1'] = "More than a month old"; -$l['option_2'] = "More than 3 months old"; -$l['option_3'] = "More than 6 months old"; -$l['option_4'] = "More than a year old"; -$l['option_5'] = "More than 18 months old"; -$l['option_6'] = "More than 2 years old"; - -$l['error_avatartoobig'] = "Sorry, but we cannot change your avatar as the new avatar you specified is too big. The maximum dimensions are {1}x{2} (width x height)"; -$l['error_invalidavatarurl'] = "The URL you entered for your avatar does not appear to be valid. Please ensure you enter a valid URL."; -$l['error_remote_avatar_not_allowed'] = "Remote avatar URLs have been disabled by the forum administrator."; -$l['error_invalid_user'] = "You have selected an invalid user."; -$l['error_no_perms_super_admin'] = "You do not have permission to edit this user because you are not a super administrator."; -$l['error_invalid_user_source'] = "The source account username you entered does not exist"; -$l['error_invalid_user_destination'] = "The destination account username you entered does not exist"; -$l['error_cannot_merge_same_account'] = "The source and destination accounts must be different"; -$l['error_no_users_found'] = "No users were found matching the specified search criteria. Please modify your search criteria and try again."; -$l['error_invalid_admin_view'] = "You selected an invalid administration view."; -$l['error_missing_view_title'] = "You did not enter a title for this view."; -$l['error_no_view_fields'] = "You did not select any fields to display on this view"; -$l['error_invalid_view_perpage'] = "You have entered an invalid number of results to show per page"; -$l['error_invalid_view_sortby'] = "You have selected an invalid field to sort results by"; -$l['error_invalid_view_sortorder'] = "You have selected an invalid sort order"; -$l['error_invalid_view_delete'] = "You selected an invalid administration view to delete"; -$l['error_cannot_delete_view'] = "You must have at least 1 administration view."; -$l['error_inline_no_users_selected'] = "Sorry, but you did not select any users. Please select some users and try again."; -$l['error_cannot_delete_user'] = "This user cannot be deleted."; -$l['error_no_referred_users'] = "The selected user does not have any referred users."; - -$l['user_deletion_confirmation'] = "Are you sure you wish to delete this user?"; - -$l['success_coppa_activated'] = "The selected COPPA user has been activated successfully."; -$l['success_activated'] = "The selected user has been activated successfully."; -$l['success_user_created'] = "The user has been created successfully."; -$l['success_user_updated'] = "The selected user has been updated successfully."; -$l['success_user_deleted'] = "The selected user has been deleted successfully."; -$l['success_merged'] = "has successfully been merged in to"; -$l['succuss_view_set_as_default'] = "The selected administration view has been set as your default successfully"; -$l['success_view_created'] = "The administration view has been created successfully."; -$l['success_view_updated'] = "The selected administration view has been updated successfully."; -$l['success_view_deleted'] = "The selected administration view has been deleted successfully."; - -$l['confirm_view_deletion'] = "Are you sure you want to delete the selected view?"; - -$l['warning_coppa_user'] = "

    Warning: This user is awaiting COPPA validation. Activate Account

    "; - -$l['required_profile_info'] = "Required Profile Information"; -$l['password'] = "Password"; -$l['confirm_password'] = "Confirm Password"; -$l['email_address'] = "Email Address"; -$l['use_primary_user_group'] = "Use Primary User Group"; -$l['primary_user_group'] = "Primary User Group"; -$l['additional_user_groups'] = "Additional User Groups"; -$l['additional_user_groups_desc'] = "Use CTRL to select multiple groups"; -$l['display_user_group'] = "Display User Group"; -$l['save_user'] = "Save User"; - -$l['overview'] = "Overview"; -$l['profile'] = "Profile"; -$l['account_settings'] = "Account Settings"; -$l['signature'] = "Signature"; -$l['avatar'] = "Avatar"; -$l['mod_options'] = "Moderator Options"; -$l['general_account_stats'] = "General Account Statistics"; -$l['local_time'] = "Local Time"; -$l['local_time_format'] = "{1} at {2}"; -$l['posts'] = "Posts"; -$l['age'] = "Age"; -$l['posts_per_day'] = "Posts per day"; -$l['percent_of_total_posts'] = "Percent of total posts"; -$l['user_overview'] = "User Overview"; - -$l['new_password'] = "New Password"; -$l['new_password_desc'] = "Only required if changing"; -$l['confirm_new_password'] = "Confirm New Password"; - -$l['optional_profile_info'] = "Optional Profile Information"; -$l['custom_user_title'] = "Custom User Title"; -$l['custom_user_title_desc'] = "If empty, the group user title will be used"; -$l['website'] = "Website"; -$l['icq_number'] = "ICQ Number"; -$l['aim_handle'] = "AIM Handle"; -$l['yahoo_messanger_handle'] = "Yahoo! Messenger Handle"; -$l['skype_handle'] = "Skype Handle"; -$l['google_handle'] = "Google Hangouts Handle"; -$l['birthday'] = "Date of Birth"; - -$l['away_information'] = "Away Information"; -$l['away_status'] = "Away Status:"; -$l['away_status_desc'] = "Allows you to leave an away message if you are going away for a while."; -$l['im_away'] = "I'm Away"; -$l['im_here'] = "I'm Here"; -$l['away_reason'] = "Away Reason:"; -$l['away_reason_desc'] = "Allows you to enter a small description of why you are away (max 200 characters)."; -$l['return_date'] = "Return Date:"; -$l['return_date_desc'] = "If you know when you will be back, you can enter your return date here."; -$l['error_acp_return_date_past'] = "You cannot return in the past!"; - -$l['hide_from_whos_online'] = "Hide from the Who's Online list"; -$l['login_cookies_privacy'] = "Login, Cookies & Privacy"; -$l['recieve_admin_emails'] = "Receive emails from administrators"; -$l['hide_email_from_others'] = "Hide email address from other members"; -$l['recieve_pms_from_others'] = "Receive private messages from other users"; -$l['recieve_pms_from_buddy'] = "Only receive private messages from buddy list (this setting has no effect unless there is at least one buddy on the list)"; -$l['alert_new_pms'] = "Alert with notice when new private message is received"; -$l['email_notify_new_pms'] = "Notify by email when new private message is received"; -$l['buddy_requests_pm'] = "Receive PM notifications for new buddy requests"; -$l['buddy_requests_auto'] = "Automatically accept buddy requests (if the above checkbox is ticked, a PM is sent informing of the new buddy connection)"; -$l['default_thread_subscription_mode'] = "Default thread subscription mode"; -$l['do_not_subscribe'] = "Do not subscribe"; -$l['no_email_notification'] = "No email notification"; -$l['instant_email_notification'] = "Instant email notification"; -$l['messaging_and_notification'] = "Messaging & Notification"; -$l['use_default'] = "Use Default"; -$l['date_format'] = "Date Format"; -$l['time_format'] = "Time Format"; -$l['time_zone'] = "Time Zone"; -$l['daylight_savings_time_correction'] = "Daylight Saving Time correction"; -$l['automatically_detect'] = "Automatically detect DST settings"; -$l['always_use_dst_correction'] = "Always use DST correction"; -$l['never_use_dst_correction'] = "Never use DST correction"; -$l['date_and_time_options'] = "Date & Time Options"; -$l['show_threads_last_day'] = "Show threads from the last day"; -$l['show_threads_last_5_days'] = "Show threads from the last 5 days"; -$l['show_threads_last_10_days'] = "Show threads from the last 10 days"; -$l['show_threads_last_20_days'] = "Show threads from the last 20 days"; -$l['show_threads_last_50_days'] = "Show threads from the last 50 days"; -$l['show_threads_last_75_days'] = "Show threads from the last 75 days"; -$l['show_threads_last_100_days'] = "Show threads from the last 100 days"; -$l['show_threads_last_year'] = "Show threads from the last year"; -$l['show_all_threads'] = "Show all threads"; -$l['threads_per_page'] = "Threads Per Page"; -$l['default_thread_age_view'] = "Default Thread Age View"; -$l['forum_display_options'] = "Forum Display Options"; -$l['show_classic_postbit'] = "Display posts in classic mode"; -$l['display_images'] = "Display images in posts"; -$l['display_videos'] = "Display videos in posts"; -$l['display_users_sigs'] = "Display users' signatures in their posts"; -$l['display_users_avatars'] = "Display users' avatars in their posts"; -$l['show_quick_reply'] = "Show the quick reply box at the bottom of the thread view"; -$l['posts_per_page'] = "Posts Per Page"; -$l['default_thread_view_mode'] = "Default Thread View Mode"; -$l['linear_mode'] = "Linear Mode"; -$l['threaded_mode'] = "Threaded Mode"; -$l['thread_view_options'] = "Thread View Options"; -$l['show_redirect'] = "Show friendly redirection pages"; -$l['show_code_buttons'] = "Show MyCode formatting options on posting pages"; -$l['source_editor'] = "Put the editor in source mode by default"; -$l['theme'] = "Theme"; -$l['board_language'] = "Board Language"; -$l['other_options'] = "Other Options"; -$l['signature_desc'] = "Formatting options: MyCode is {1}, smilies are {2}, IMG code is {3}, HTML is {4}"; -$l['enable_sig_in_all_posts'] = "Enable signature in all posts"; -$l['disable_sig_in_all_posts'] = "Disable signature in all posts"; -$l['do_nothing'] = "Do not change signature preferences"; -$l['signature_preferences'] = "Signature Preferences"; -$l['suspend_sig'] = "Suspend Signature"; -$l['suspend_sig_box'] = "Suspend this user's signature"; -$l['suspend_sig_perm'] = "Suspended permanently."; -$l['suspend_sig_info'] = "If a signature is suspended, the user can't edit it and it won't be shown on their profile or in their posts"; -$l['suspend_sig_extend'] = "Enter a new time below to change, or untick this option to remove this suspension."; -$l['suspend_expire_info'] = "Remaining: {1}"; -$l['suspend_never_expire'] = "{1}'s suspension will never expire (permanently suspended)."; -$l['suspend_sig_error'] = "You entered an incorrect time to suspend this user's signature for. Please enter a correct time."; - -$l['moderate_posts'] = "Moderate Posts"; -$l['moderate_posts_info'] = "Moderate new posts made by {1}."; -$l['moderate_for'] = "Moderate for:"; -$l['moderated_perm'] = "

    Moderated permanently.
    Enter a new time below to change or untick this option to remove this moderation.

    "; -$l['moderate_length'] = "

    Remaining Moderation: {1}.
    Enter a new time below to change or untick this option to remove this moderation.

    "; - -$l['suspend_posts'] = "Suspend Posts"; -$l['suspend_posts_info'] = "Suspend {1} from making new posts."; -$l['suspend_for'] = "Suspend for:"; -$l['suspended_perm'] = "

    Suspended permanently.
    Enter a new time below to change or untick this option to remove this suspension.

    "; -$l['suspend_length'] = "

    Remaining Suspension: {1}.
    Enter a new time below to change or untick this option to remove this suspension.

    "; - -$l['suspendsignature_error'] = "You selected to suspend this user's signature, but didn't enter a valid time period. Please enter a valid time to continue or untick the option to cancel."; -$l['moderateposting_error'] = "You selected to moderate this user's posts, but didn't enter a valid time period. Please enter a valid time to continue or untick the option to cancel."; -$l['suspendposting_error'] = "You selected to suspend this user's posts, but didn't enter a valid time period. Please enter a valid time to continue or untick the option to cancel."; -$l['suspendmoderate_error'] = "You've selected to suspend and moderate the user's posts. Please select only one type of moderation."; - -$l['expire_length'] = "Suspension length:"; -$l['expire_hours'] = "hour(s)"; -$l['expire_days'] = "day(s)"; -$l['expire_weeks'] = "week(s)"; -$l['expire_months'] = "month(s)"; -$l['expire_never'] = "Never"; -$l['expire_permanent'] = "Permanent"; - -$l['username'] = "Username"; -$l['email'] = "Email"; -$l['primary_group'] = "Primary Group"; -$l['additional_groups'] = "Additional Groups"; -$l['registered'] = "Registered"; -$l['last_active'] = "Last Active"; -$l['post_count'] = "Post Count"; -$l['thread_count'] = "Thread Count"; -$l['reputation'] = "Reputation"; -$l['warning_level'] = "Warning Level"; -$l['registration_ip'] = "Registration IP"; -$l['last_known_ip'] = "Last Known IP"; -$l['registration_date'] = "Registration Date"; -$l['info_on_ip'] = "Information on this IP address"; - -$l['current_avatar'] = "Current Avatar"; -$l['user_current_using_uploaded_avatar'] = "This user is currently using an uploaded avatar."; -$l['user_currently_using_remote_avatar'] = "This user is currently using a remotely linked avatar."; -$l['max_dimensions_are'] = "The maximum dimensions for avatars are"; -$l['avatar_max_size'] = "Avatars can be a maximum of"; -$l['remove_avatar'] = "Remove current avatar?"; -$l['avatar_desc'] = "Below you can manage the avatar for this user. Avatars are small identifying images which are placed under the authors username when they make a post."; -$l['avatar_auto_resize'] = "If the avatar is too large, it will automatically be resized"; -$l['attempt_to_auto_resize'] = "Attempt to resize this avatar if it is too large?"; -$l['specify_custom_avatar'] = "Specify Custom Avatar"; -$l['upload_avatar'] = "Upload Avatar"; -$l['or_specify_avatar_url'] = "or Specify Avatar/Gravatar URL"; - -$l['user_notes'] = "User Notes"; - -$l['ip_addresses'] = "IP Addresses"; -$l['ip_address'] = "IP Address"; -$l['show_users_regged_with_ip'] = "Show users who have registered with this IP"; -$l['show_users_posted_with_ip'] = "Show users who have posted with this IP"; -$l['ban_ip'] = "Ban IP"; -$l['ip_address_for'] = "IP Addresses for"; - -$l['source_account'] = "Source Account"; -$l['source_account_desc'] = "This is the account that will be merged in to the destination account. It will be removed after this process."; -$l['destination_account'] = "Destination Account"; -$l['destination_account_desc'] = "This is the account that the source account will be merged in to. It will remain after this process."; -$l['merge_user_accounts'] = "Merge User Accounts"; - -$l['display_options'] = "Display Options"; -$l['ascending'] = "Ascending"; -$l['descending'] = "Descending"; -$l['sort_results_by'] = "Sort results by"; -$l['in'] = "in"; -$l['results_per_page'] = "Results per page"; -$l['display_results_as'] = "Display results as"; -$l['business_card'] = "Business cards"; -$l['views'] = "Views"; -$l['views_desc'] = "The view manager allows you to create different kinds of views for this specific area. Different views are useful for generating a variety of reports."; -$l['manage_views'] = "Manage Views"; -$l['none'] = "None"; -$l['search'] = "Search"; - -$l['view_profile'] = "View Profile"; -$l['edit_profile_and_settings'] = "Edit Profile & Settings"; -$l['ban_user'] = "Ban User"; -$l['approve_coppa_user'] = "Activate COPPA User"; -$l['approve_user'] = "Activate User"; -$l['delete_user'] = "Delete User"; -$l['show_referred_users'] = "Show Referred Users"; -$l['show_attachments'] = "Show Attachments"; -$l['table_view'] = "Table View"; -$l['card_view'] = "Card View"; - -$l['find_users_where'] = "Find users where..."; -$l['username_contains'] = "Username contains"; -$l['email_address_contains'] = "Email address contains"; -$l['is_member_of_groups'] = "Is member of one or more of these user groups"; -$l['website_contains'] = "Website contains"; -$l['icq_number_contains'] = "ICQ number contains"; -$l['aim_handle_contains'] = "AIM handle contains"; -$l['yahoo_contains'] = "Yahoo! Messenger handle contains"; -$l['skype_contains'] = "Skype handle contains"; -$l['google_contains'] = "Google Hangouts handle contains"; -$l['signature_contains'] = "Signature contains"; -$l['user_title_contains'] = "Custom user title contains"; -$l['greater_than'] = "Greater than"; -$l['is_exactly'] = "Is exactly"; -$l['less_than'] = "Less than"; -$l['post_count_is'] = "Post count is"; -$l['thread_count_is'] = "Thread count is"; -$l['reg_ip_matches'] = "Registration IP address matches"; -$l['wildcard'] = "To search for ranges of IP addresses use * (Ex: 127.0.0.*) or CIDR notation (Ex: 127.0.0.0/8)"; -$l['posted_with_ip'] = "Has posted with the IP address"; -$l['custom_profile_fields_match'] = "Where custom profile fields match..."; -$l['is_not_blank'] = " is not empty"; -$l['or'] = "or"; -$l['reg_in_x_days'] = "Registered in the last"; -$l['days'] = "days"; - -$l['view'] = "View"; -$l['create_new_view'] = "Create New View"; -$l['create_new_view_desc'] = "Here you can define a new view for this area. You can define which fields you want to be shown, any search criteria and sorting options."; -$l['view_manager'] = "View Manager"; -$l['set_as_default_view'] = "Set as Default View?"; -$l['enabled'] = "Enabled"; -$l['disabled'] = "Disabled"; -$l['fields_to_show'] = "Fields to Show"; -$l['fields_to_show_desc'] = "Please select the fields you wish to display"; -$l['edit_view'] = "Edit View"; -$l['edit_view_desc'] = "Whilst editing a view you can define which fields you want to be shown, any search criteria and sorting options."; -$l['private'] = "Private"; -$l['private_desc'] = "This view is only visible to you"; -$l['public'] = "Public"; -$l['public_desc'] = "All other administrators can see this view"; -$l['visibility'] = "Visibility"; -$l['save_view'] = "Save View"; -$l['created_by'] = "Created by"; -$l['default'] = "Default"; -$l['this_is_a_view'] = "This is a {1} view"; -$l['set_as_default'] = "Set as Default"; -$l['delete_view'] = "Delete View"; -$l['default_view_desc'] = "Default view created by MyBB. Cannot be edited or removed."; -$l['public_view_desc'] = "Public view visible to all administrators."; -$l['private_view_desc'] = "Private view visible only to yourself."; -$l['table'] = "Table"; -$l['title'] = "Title"; - -$l['view_title_1'] = "All Users"; - -$l['emailsubject_activateaccount'] = "Account Activation at {1}"; -$l['email_adminactivateaccount'] = "{1}, - -The administrator has activated your forum account on {2}. - -To proceed, please go to - -{3} - -You will be able to login with the credentials you registered with. - -Thank you, -{2} Staff"; - -$l['ipaddress_misc_info'] = "Misc. Information for '{1}'"; -$l['ipaddress_host_name'] = "Host Name"; -$l['ipaddress_location'] = "GeoIP Location"; diff --git a/html/forums/inc/languages/english/announcements.lang.php b/html/forums/inc/languages/english/announcements.lang.php deleted file mode 100644 index 7c468a8..0000000 --- a/html/forums/inc/languages/english/announcements.lang.php +++ /dev/null @@ -1,16 +0,0 @@ -View the full version with proper formatting."; -$l['archive_nopermission'] = "Sorry, you do not have permission to access this resource."; -$l['error_nothreads'] = "There are currently no threads in this forum."; -$l['error_nopermission'] = "You do not have permission to view threads in this forum."; -$l['error_unapproved_thread'] = "This thread is unapproved. Please view the full version to view the contents of this thread."; -$l['archive_not_found'] = "The requested page was not found on this server."; -$l['error_mustlogin'] = "This bulletin board requires all users to login."; \ No newline at end of file diff --git a/html/forums/inc/languages/english/calendar.lang.php b/html/forums/inc/languages/english/calendar.lang.php deleted file mode 100644 index 855e036..0000000 --- a/html/forums/inc/languages/english/calendar.lang.php +++ /dev/null @@ -1,144 +0,0 @@ -Private Only you will be able to view this event. (Registered Users Only)."; -$l['delete_option'] = "Delete: Delete this event."; -$l['post_event'] = "Post Event"; -$l['day_view'] = "Day View"; -$l['birthday'] = "Birthday"; -$l['birthdays'] = "Birthdays"; -$l['event_author'] = "Event Author:"; -$l['edit_event'] = "Edit Event"; -$l['view_event'] = "View Event"; -$l['no_events'] = "This day does not have any events associated with it.

    Post an Event.

    "; -$l['years_old'] = "{1} Years Old"; -$l['alt_edit'] = "Edit this event"; -$l['alt_delete'] = "Delete this event"; -$l['moderator_options'] = "Moderator Options"; -$l['approve_event'] = "Approve Event"; -$l['unapprove_event'] = "Unapprove Event"; -$l['move_event'] = "Move Event"; -$l['repeats_every_day'] = "Repeats every day"; -$l['repeats_every_x_days'] = "Repeats every {1} days"; -$l['repeats_on_weekdays'] = "Repeats Monday through Friday"; -$l['every_week_on_days'] = "Repeats every week on {1}"; -$l['every_week'] = "Repeats every week"; -$l['every_x_weeks_on_days'] = "Repeats every {1} weeks on
    {2}"; -$l['every_x_weeks'] = "Repeats every {1} weeks"; -$l['every_month_on_day'] = "Repeats on day {1}
    of every month"; -$l['every_x_months_on_day'] = "Repeats on day {1}
    of every {2} months"; -$l['every_month_on_weekday'] = "Repeats on the {1} {2}
    of every month"; -$l['every_x_months_on_weekday'] = "Repeats on the {1} {2}
    of every {3} months"; -$l['weekday_occurance_1'] = "first"; -$l['weekday_occurance_2'] = "second"; -$l['weekday_occurance_3'] = "third"; -$l['weekday_occurance_4'] = "fourth"; -$l['weekday_occurance_last'] = "last"; -$l['every_year_on_day'] = "Repeats every year on {1} {2}"; -$l['every_x_years_on_day'] = "Repeats every {3} years on {1} {2}"; -$l['every_year_on_weekday'] = "Repeats on the {1} {2} in {3} of every year"; -$l['every_x_year_on_weekday'] = "Repeats on the {1} {2} in {3} every {4} years"; -$l['delete_event'] = "Delete Event"; -$l['delete_q'] = "Delete?"; -$l['delete_1'] = "To delete this event, check the checkbox to the left and then click the button to the right."; -$l['delete_2'] = "Note: This process cannot be undone."; -$l['delete_now'] = "Delete Now"; -$l['delete_no_checkbox'] = "The event was not deleted because you didn't check the \"Delete\" checkbox."; -$l['jump_to_calendar'] = "Jump to calendar:"; -$l['select_calendar'] = "Calendar:"; -$l['type_single'] = "Single day event"; -$l['type_ranged'] = "Ranged or recurring event"; -$l['enter_time'] = "Time:"; -$l['start_time'] = "Starts:"; -$l['end_time'] = "Finishes:"; -$l['timezone'] = "Time Zone:"; -$l['ignore_timezone'] = "Ignore time zone: This event should use the time zone of the viewer."; -$l['repeats'] = "Repeats:"; -$l['does_not_repeat'] = "Does not repeat"; -$l['repeats_daily'] = "Daily"; -$l['repeats_weekdays'] = "Every weekday (Mon-Fri)"; -$l['repeats_weekly'] = "Weekly"; -$l['repeats_every'] = "Repeats every"; -$l['day_or_days'] = "day(s)"; -$l['week_or_weeks_on'] = "week(s) on"; -$l['repeats_monthly'] = "Monthly"; -$l['repeats_yearly'] = "Yearly"; -$l['repeats_on_day'] = "Repeats on day"; -$l['of_every'] = "of every"; -$l['month_or_months'] = "month(s)"; -$l['repeats_on_the'] = "Repeats on the"; -$l['day_of_every'] = "day every"; -$l['repeats_on'] = "Repeats on"; -$l['every'] = "every"; -$l['year_or_years'] = "year(s)"; -$l['of'] = "of"; -$l['move_to_calendar'] = "Move to Calendar:"; -$l['weekly_overview'] = "Weekly Overview"; -$l['previous_week'] = "Previous Week"; -$l['next_week'] = "Next Week"; -$l['first'] = "First"; -$l['second'] = "Second"; -$l['third'] = "Third"; -$l['fourth'] = "Fourth"; -$l['last'] = "Last"; -$l['all_day'] = "All Day"; -$l['starts'] = "Starts: "; -$l['finishes'] = "Finishes: "; - -$l['error_incorrectday'] = "The day you have entered does not appear to exist. Please go back and try again."; -$l['error_invalidevent'] = "The event you specified is either invalid or doesn't exist."; -$l['invalid_calendar'] = "The specified calendar does not exist. Are you sure you are visiting the correct page?"; -$l['redirect_eventdeleted'] = "The event has successfully been deleted.
    You will now be taken back to the calendar."; -$l['redirect_eventupdated'] = "The event has been successfully updated.
    You will now be returned to it."; -$l['redirect_eventadded'] = "Your event has been added successfully.
    You will now be taken to it."; -$l['redirect_eventadded_moderation'] = "Your event has been added successfully but requires moderation by a forum moderator before it is visible.
    You will now be taken back to the calendar."; -$l['redirect_eventunapproved'] = "The event has been unapproved successfully.
    You will now be taken to it."; -$l['redirect_eventapproved'] = "The event has been approved successfully.
    You will now be taken to it."; -$l['redirect_eventmoved'] = "The event has been moved successfully.
    You will now be taken to it."; diff --git a/html/forums/inc/languages/english/contact.lang.php b/html/forums/inc/languages/english/contact.lang.php deleted file mode 100644 index 92924f0..0000000 --- a/html/forums/inc/languages/english/contact.lang.php +++ /dev/null @@ -1,26 +0,0 @@ -
    If you have forgotten your password please retrieve a new one."; -$l['logindata_invalidpwordusernameemail'] = "You have entered an invalid email/password combination.

    If you have forgotten your password please retrieve a new one."; -$l['logindata_invalidpwordusernamecombo'] = "You have entered an invalid username/password or email/password combination.

    If you have forgotten your password please retrieve a new one."; - -$l['logindata_regimageinvalid'] = "The image verification code that you entered was incorrect. Please enter the code exactly how it appears in the image."; -$l['logindata_regimagerequired'] = "Please fill out the image verification code to continue the login process. Please enter the code exactly how it appears in the image."; diff --git a/html/forums/inc/languages/english/datahandler_pm.lang.php b/html/forums/inc/languages/english/datahandler_pm.lang.php deleted file mode 100644 index 72a9397..0000000 --- a/html/forums/inc/languages/english/datahandler_pm.lang.php +++ /dev/null @@ -1,21 +0,0 @@ -Note: The maximum amount of images for signatures is {1}."; -$l['userdata_sig_too_long'] = "You cannot update your signature because it is too long. The maximum length for signatures is {1} characters. "; -$l['userdata_sig_remove_chars_plural'] = "Please remove {1} characters and try again."; -$l['userdata_sig_remove_chars_singular'] = "Please remove 1 character and try again."; diff --git a/html/forums/inc/languages/english/datahandler_warnings.lang.php b/html/forums/inc/languages/english/datahandler_warnings.lang.php deleted file mode 100644 index deb1f02..0000000 --- a/html/forums/inc/languages/english/datahandler_warnings.lang.php +++ /dev/null @@ -1,18 +0,0 @@ -
    The maximum number of warnings you can give out per day is {1}."'; -$l['warnings_error_invalid_user'] = "Selected user doesn't exist."; -$l['warnings_error_invalid_post'] = "Selected post doesn't exist."; -$l['warnings_error_cannot_warn_self'] = "You cannot add to your own warning level."; -$l['warnings_error_user_reached_max_warning'] = "This user cannot be warned as they have already reached the maximum warning level."; -$l['warnings_error_no_note'] = "You did not enter any administrative notes for this warning."; -$l['warnings_error_invalid_type'] = "You have selected an invalid warning type."; -$l['warnings_error_cant_custom_warn'] = "You do not have permission to give custom warnings to users."; -$l['warnings_error_no_custom_reason'] = "You did not enter a reason for your custom warning."; -$l['warnings_error_invalid_custom_points'] = "You did not enter a valid number of points to add to this users warning level. You need to enter a numeric value greater than 0 but not greater than {1}."; -$l['warnings_error_invalid_expires_period'] = "You entered an invalid expiry type."; diff --git a/html/forums/inc/languages/english/editpost.lang.php b/html/forums/inc/languages/english/editpost.lang.php deleted file mode 100644 index 1725727..0000000 --- a/html/forums/inc/languages/english/editpost.lang.php +++ /dev/null @@ -1,54 +0,0 @@ -Note: If this post is the first post in a thread deleting it will result in deletion of the whole thread."; -$l['subject'] = "Subject"; -$l['your_message'] = "Your Message"; -$l['post_options'] = "Post Options:"; -$l['editreason'] = "Edit Reason:"; -$l['options_sig'] = "Signature: include your signature. (registered users only)"; -$l['options_emailnotify'] = "Email Notification: receive an email whenever there is a new reply. (registered users only)"; -$l['options_disablesmilies'] = "Disable Smilies: disable smilies from showing in this post."; -$l['preview_post'] = "Preview Post"; -$l['update_post'] = "Update Post"; -$l['poll'] = "Poll:"; -$l['poll_desc'] = "Optionally you may attach a poll to this thread."; -$l['poll_check'] = "I want to post a poll"; -$l['num_options'] = "Number of options:"; -$l['max_options'] = "(Maximum: {1})"; -$l['delete_now'] = "Delete Now"; -$l['edit_time_limit'] = "Sorry but you cannot edit your post. The Administrator has set it so that posts can only be edited within {1} minutes of posting."; -$l['no_prefix'] = "No Prefix"; - -$l['redirect_nodelete'] = "The post was not deleted because you didn't check the \"Delete\" checkbox."; -$l['redirect_norestore'] = "The post was not restored because you didn't check the \"Restore\" checkbox."; -$l['redirect_postedited'] = "Thank you, this post has been edited.
    "; -$l['redirect_postedited_redirect'] = "You will now be returned to the thread."; -$l['redirect_postedited_poll'] = "Thank you, this post has been edited.
    Because you opted to post a poll, you'll now be taken to the poll creation page."; -$l['error_invalidpost'] = "Sorry, but you seem to have followed an invalid address. Please be sure the specified post exists and try again."; -$l['redirect_threaddeleted'] = "Thank you, the thread has been deleted.
    You will now be returned to the forum."; -$l['redirect_postdeleted'] = "Thank you, the post has been deleted.
    You will now be returned to the thread."; -$l['redirect_threadrestored'] = "Thank you, the thread has been restored.
    You will now be returned to the forum."; -$l['redirect_postrestored'] = "Thank you, the post has been restored.
    You will now be returned to the thread."; -$l['redirect_threadclosed'] = "You cannot edit existing posts in this thread because it has been closed by a moderator."; -$l['redirect_post_moderation'] = "The administrator has specified that all editing of posts require moderation. You will now be returned to the thread."; -$l['redirect_thread_moderation'] = "The administrator has specified that all editing of threads require moderation. You will now be returned to the forum index."; -$l['error_already_delete'] = "Sorry, but this post is already deleted."; - -$l['thread_deleted'] = "Deleted Thread Permanently"; -$l['post_deleted'] = "Deleted Post Permanently"; -$l['thread_soft_deleted'] = "Soft Deleted Thread"; -$l['post_soft_deleted'] = "Soft Deleted Post"; -$l['thread_restored'] = "Restored Thread"; -$l['post_restored'] = "Restored Post"; - -$l['error_already_deleted'] = 'The selected post has already been deleted.'; diff --git a/html/forums/inc/languages/english/forumdisplay.lang.php b/html/forums/inc/languages/english/forumdisplay.lang.php deleted file mode 100644 index fa22c66..0000000 --- a/html/forums/inc/languages/english/forumdisplay.lang.php +++ /dev/null @@ -1,102 +0,0 @@ -{1} threads on this page are selected."; -$l['all_selected'] = "All {1} threads in this forum are selected."; -$l['select_all'] = "Select all {1} threads in this forum."; -$l['clear_selection'] = "Clear Selection."; -$l['deleted_thread'] = "Deleted Thread"; - -$l['error_containsnoforums'] = "Sorry, but the forum you are currently viewing does not contain any child forums."; - -$l['inline_edit_description'] = '(Click and hold to edit)'; - diff --git a/html/forums/inc/languages/english/global.lang.php b/html/forums/inc/languages/english/global.lang.php deleted file mode 100644 index 233a4bf..0000000 --- a/html/forums/inc/languages/english/global.lang.php +++ /dev/null @@ -1,577 +0,0 @@ -Welcome back, {1}. You last visited: {2}"; -$l['welcome_guest'] = "Hello There, Guest!"; -$l['welcome_current_time'] = "Current time: {1}"; - -$l['moved_prefix'] = "Moved:"; -$l['poll_prefix'] = "Poll:"; - -$l['forumbit_announcements'] = "Announcements"; -$l['forumbit_stickies'] = "Important Threads"; -$l['forumbit_forum'] = "Forum"; -$l['forumbit_threads'] = "Threads"; -$l['forumbit_posts'] = "Posts"; -$l['forumbit_lastpost'] = "Last Post"; -$l['forumbit_moderated_by'] = "Moderated By:"; -$l['new_posts'] = "Forum Contains New Posts"; -$l['no_new_posts'] = "Forum Contains No New Posts"; -$l['click_mark_read'] = "Click to mark this forum as read"; -$l['forum_locked'] = "Forum is Locked"; -$l['forum_redirect'] = "Redirect Forum"; -$l['lastpost_never'] = "Never"; -$l['viewing_one'] = " (1 user browsing)"; -$l['viewing_multiple'] = " ({1} users browsing)"; -$l['by'] = "by"; -$l['more_subforums'] = "and {1} more."; - -$l['password_required'] = "Password Required"; -$l['forum_password_note'] = "The administrator has required it so that a password is required for access to this forum."; -$l['enter_password_below'] = "Please enter the password below:"; -$l['verify_forum_password'] = "Verify Forum Password"; -$l['wrong_forum_password'] = "The password you entered is incorrect. Please try again."; - -$l['reset_button'] = "Reset"; -$l['username'] = "Username:"; -$l['username1'] = "Email:"; -$l['username2'] = "Username/Email:"; -$l['password'] = "Password:"; -$l['login_username'] = "Username:"; -$l['login_username1'] = "Email:"; -$l['login_username2'] = "Username/Email:"; -$l['login_password'] = "Password:"; -$l['lost_password'] = "Lost Password?"; -$l['remember_me'] = "Remember me"; -$l['remember_me_desc'] = "If ticked, your login details will be remembered on this computer, otherwise, you will be logged out as soon as you close your browser."; - -$l['month_1'] = "January"; -$l['month_2'] = "February"; -$l['month_3'] = "March"; -$l['month_4'] = "April"; -$l['month_5'] = "May"; -$l['month_6'] = "June"; -$l['month_7'] = "July"; -$l['month_8'] = "August"; -$l['month_9'] = "September"; -$l['month_10'] = "October"; -$l['month_11'] = "November"; -$l['month_12'] = "December"; - -$l['sunday'] = "Sunday"; -$l['monday'] = "Monday"; -$l['tuesday'] = "Tuesday"; -$l['wednesday'] = "Wednesday"; -$l['thursday'] = "Thursday"; -$l['friday'] = "Friday"; -$l['saturday'] = "Saturday"; -$l['short_monday'] = "M"; -$l['short_tuesday'] = "T"; -$l['short_wednesday'] = "W"; -$l['short_thursday'] = "T"; -$l['short_friday'] = "F"; -$l['short_saturday'] = "S"; -$l['short_sunday'] = "S"; - -$l['yes'] = "Yes"; -$l['no'] = "No"; - -$l['and'] = "and"; -$l['date'] = "Date"; - -$l['nobody'] = "Nobody"; - -$l['attachments'] = "Attachments"; -$l['attachments_desc'] = "Optionally you may attach one or more attachments to this post. Please select the file on the right and click 'Add Attachment' to upload it."; -$l['remove_attachment'] = "Remove"; -$l['approve_attachment'] = "Approve"; -$l['unapprove_attachment'] = "Unapprove"; -$l['insert_attachment_post'] = "Insert Into Post"; -$l['new_attachment'] = "New Attachment:"; -$l['add_attachment'] = "Add Attachment"; -$l['update_attachment'] = "Update Attachment"; -$l['post_preview'] = "Preview"; -$l['change_user'] = "change user"; -$l['post_icon'] = "Post Icon:"; -$l['no_post_icon'] = "no icon"; -$l['thread_subscription_method'] = "Thread Subscription:"; -$l['thread_subscription_method_desc'] = "Specify the type of notification and thread subscription you'd like to have to this thread. (Registered users only)"; -$l['no_subscribe'] = "Do not subscribe to this thread"; -$l['no_subscribe_notification'] = "Subscribe without receiving any notification of new replies"; -$l['instant_email_subscribe'] = "Subscribe and receive email notification of new replies"; -$l['instant_pm_subscribe'] = "Subscribe and receive PM notification of new replies"; - -$l['today'] = "Today"; -$l['yesterday'] = "Yesterday"; -$l['error'] = "Board Message"; - -$l['multipage_pages'] = "Pages ({1}):"; -$l['multipage_last'] = "Last"; -$l['multipage_first'] = "First"; -$l['multipage_next'] = "Next"; -$l['multipage_previous'] = "Previous"; -$l['multipage_link_start'] = " ..."; -$l['multipage_link_end'] = "... "; -$l['multipage_jump'] = "Jump to page"; - -$l['editor_bold'] = "Bold"; -$l['editor_italic'] = "Italic"; -$l['editor_underline'] = "Underline"; -$l['editor_strikethrough'] = "Strikethrough"; -$l['editor_subscript'] = "Subscript"; -$l['editor_superscript'] = "Superscript"; -$l['editor_alignleft'] = "Align left"; -$l['editor_center'] = "Center"; -$l['editor_alignright'] = "Align right"; -$l['editor_justify'] = "Justify"; -$l['editor_fontname'] = "Font Name"; -$l['editor_fontsize'] = "Font Size"; -$l['editor_fontcolor'] = "Font Color"; -$l['editor_removeformatting'] = "Remove Formatting"; -$l['editor_cut'] = "Cut"; -$l['editor_copy'] = "Copy"; -$l['editor_paste'] = "Paste"; -$l['editor_cutnosupport'] = "Your browser does not allow the cut command. Please use the keyboard shortcut Ctrl/Cmd-X"; -$l['editor_copynosupport'] = "Your browser does not allow the copy command. Please use the keyboard shortcut Ctrl/Cmd-C"; -$l['editor_pastenosupport'] = "Your browser does not allow the paste command. Please use the keyboard shortcut Ctrl/Cmd-V"; -$l['editor_pasteentertext'] = "Paste your text inside the following box:"; -$l['editor_pastetext'] = "Paste Text"; -$l['editor_numlist'] = "Numbered list"; -$l['editor_bullist'] = "Bullet list"; -$l['editor_undo'] = "Undo"; -$l['editor_redo'] = "Redo"; -$l['editor_rows'] = "Rows:"; -$l['editor_cols'] = "Cols:"; -$l['editor_inserttable'] = "Insert a table"; -$l['editor_inserthr'] = "Insert a horizontal rule"; -$l['editor_code'] = "Code"; -$l['editor_php'] = "PHP"; -$l['editor_width'] = "Width (optional):"; -$l['editor_height'] = "Height (optional):"; -$l['editor_insertimg'] = "Insert an image"; -$l['editor_email'] = "E-mail:"; -$l['editor_insertemail'] = "Insert an email"; -$l['editor_url'] = "URL:"; -$l['editor_insertlink'] = "Insert a link"; -$l['editor_unlink'] = "Unlink"; -$l['editor_more'] = "More"; -$l['editor_insertemoticon'] = "Insert an emoticon"; -$l['editor_videourl'] = "Video URL:"; -$l['editor_videotype'] = "Video Type:"; -$l['editor_insert'] = "Insert"; -$l['editor_insertyoutubevideo'] = "Insert a YouTube video"; -$l['editor_currentdate'] = "Insert current date"; -$l['editor_currenttime'] = "Insert current time"; -$l['editor_print'] = "Print"; -$l['editor_viewsource'] = "View source"; -$l['editor_description'] = "Description (optional):"; -$l['editor_enterimgurl'] = "Enter the image URL:"; -$l['editor_enteremail'] = "Enter the e-mail address:"; -$l['editor_enterdisplayedtext'] = "Enter the displayed text:"; -$l['editor_enterurl'] = "Enter URL:"; -$l['editor_enteryoutubeurl'] = "Enter the YouTube video URL or ID:"; -$l['editor_insertquote'] = "Insert a Quote"; -$l['editor_invalidyoutube'] = "Invalid YouTube video"; -$l['editor_dailymotion'] = "Dailymotion"; -$l['editor_metacafe'] = "MetaCafe"; -$l['editor_veoh'] = "Veoh"; -$l['editor_vimeo'] = "Vimeo"; -$l['editor_youtube'] = "Youtube"; -$l['editor_twitch'] = "Twitch"; -$l['editor_facebook'] = "Facebook"; -$l['editor_liveleak'] = "LiveLeak"; -$l['editor_insertvideo'] = "Insert a video"; -$l['editor_maximize'] = "Maximize"; - -$l['quote'] = "Quote:"; -$l['wrote'] = "Wrote:"; -$l['code'] = "Code:"; -$l['php_code'] = "PHP Code:"; -$l['posted_image'] = "[Image: {1}]"; -$l['posted_video'] = "[Video: {1}]"; -$l['linkback'] = "Original Post"; - -$l['at'] = "at"; -$l['na'] = "N/A"; -$l['guest'] = "Guest"; -$l['unknown'] = "Unknown"; -$l['never'] = "Never"; -$l['postbit_posts'] = "Posts:"; -$l['postbit_threads'] = "Threads:"; -$l['postbit_group'] = "Group:"; -$l['postbit_joined'] = "Joined:"; -$l['postbit_status'] = "Status:"; -$l['postbit_attachments'] = "Attached Files"; -$l['postbit_attachment_filename'] = "Filename:"; -$l['postbit_attachment_size'] = "Size:"; -$l['postbit_attachment_downloads'] = "Downloads:"; -$l['postbit_attachments_images'] = "Image(s)"; -$l['postbit_attachments_thumbnails'] = "Thumbnail(s)"; -$l['postbit_unapproved_attachments'] = "{1} unapproved attachments."; -$l['postbit_unapproved_attachment'] = "1 unapproved attachment."; -$l['postbit_status_online'] = "Online"; -$l['postbit_status_offline'] = "Offline"; -$l['postbit_status_away'] = "Away"; -$l['postbit_edited'] = "This post was last modified: {1} by"; -$l['postbit_editreason'] = "Edit Reason"; -$l['postbit_ipaddress'] = "IP Address:"; -$l['postbit_ipaddress_logged'] = "Logged"; -$l['postbit_post'] = "Post:"; -$l['postbit_reputation'] = "Reputation:"; -$l['postbit_reputation_add'] = "Give Reputation to this user"; -$l['postbit_website'] = "Visit this user's website"; -$l['postbit_email'] = "Send this user an email"; -$l['postbit_find'] = "Find all posts by this user"; -$l['postbit_report'] = "Report this post to a moderator"; -$l['postbit_quote'] = "Quote this message in a reply"; -$l['postbit_qdelete_post'] = "Delete this post"; -$l['postbit_qdelete_thread'] = "Delete this thread"; -$l['postbit_qrestore_post'] = "Restore this post"; -$l['postbit_qrestore_thread'] = "Restore this thread"; -$l['postbit_profile'] = "View this users profile"; -$l['postbit_pm'] = "Send this user a private message"; -$l['postbit_edit'] = "Edit this post"; -$l['postbit_multiquote'] = "Quote this post"; -$l['postbit_quick_edit'] = "Quick Edit"; -$l['postbit_full_edit'] = "Full Edit"; -$l['postbit_show_ignored_post'] = "Show this Post"; -$l['postbit_currently_ignoring_user'] = "The contents of this message are hidden because {1} is on your ignore list."; -$l['postbit_warning_level'] = "Warning Level:"; -$l['postbit_warn'] = "Warn the author for this post"; -$l['postbit_purgespammer'] = "Purge Spammer"; -$l['postbit_post_deleted'] = "This post has been deleted."; -$l['postbit_post_unapproved'] = "This post is awaiting approval."; -$l['postbit_thread_deleted'] = "This thread has been deleted."; -$l['postbit_thread_unapproved'] = "This thread is awaiting approval."; -$l['postbit_deleted_post_user'] = "This post by {1} has been deleted."; - -$l['postbit_button_reputation_add'] = 'Rate'; -$l['postbit_button_website'] = 'Website'; -$l['postbit_button_email'] = 'Email'; -$l['postbit_button_find'] = 'Find'; -$l['postbit_button_report'] = 'Report'; -$l['postbit_button_quote'] = 'Reply'; -$l['postbit_button_qdelete'] = 'Delete'; -$l['postbit_button_qrestore'] = 'Restore'; -$l['postbit_button_profile'] = 'Profile'; -$l['postbit_button_pm'] = 'PM'; -$l['postbit_button_warn'] = 'Warn'; -$l['postbit_button_edit'] = 'Edit'; -$l['postbit_button_multiquote'] = 'Quote'; -$l['postbit_button_reply_pm'] = 'Reply'; -$l['postbit_button_reply_all'] = 'Reply All'; -$l['postbit_button_forward'] = 'Forward'; -$l['postbit_button_delete_pm'] = 'Delete'; -$l['postbit_button_purgespammer'] = "Purge Spammer"; - -$l['forumjump'] = "Forum Jump:"; -$l['forumjump_pms'] = "Private Messages"; -$l['forumjump_usercp'] = "User Control Panel"; -$l['forumjump_wol'] = "Who's Online"; -$l['forumjump_search'] = "Search"; -$l['forumjump_home'] = "Forum Home"; - -$l['redirect'] = "You will now be redirected"; -$l['unknown_error'] = "An unknown error has occurred."; -$l['post_fetch_error'] = 'There was an error fetching the posts.'; - -$l['smilieinsert'] = "Smilies"; -$l['smilieinsert_getmore'] = "get more"; -$l['on'] = "On"; -$l['off'] = "Off"; -$l['remote_avatar_disabled_default_avatar'] = "You are currently using a remote avatar, which has been disabled. The default avatar will be used instead."; -$l['unread_report'] = "Moderator Notice: There is 1 unread report."; -$l['unread_reports'] = "Moderator Notice: There are {1} unread reports."; -$l['pending_joinrequest'] = "Group Leader Notice: You have 1 pending group membership join request."; -$l['pending_joinrequests'] = "Group Leader Notice: You have {1} pending group membership join requests."; - -$l['search_user'] = "Search for a user"; - -$l['year'] = "Year"; -$l['year_short'] = "y"; -$l['years'] = "Years"; -$l['years_short'] = "y"; -$l['month'] = "Month"; -$l['month_short'] = "m"; -$l['months'] = "Months"; -$l['months_short'] = "m"; -$l['week'] = "Week"; -$l['week_short'] = "w"; -$l['weeks'] = "Weeks"; -$l['weeks_short'] = "w"; -$l['day'] = "Day"; -$l['day_short'] = "d"; -$l['days'] = "Days"; -$l['days_short'] = "d"; -$l['hour'] = "Hour"; -$l['hour_short'] = "h"; -$l['hours'] = "Hours"; -$l['hours_short'] ="h"; -$l['minute'] = "Minute"; -$l['minute_short'] ="m"; -$l['minutes'] = "Minutes"; -$l['minutes_short'] = "m"; -$l['second'] = "Second"; -$l['second_short'] ="s"; -$l['seconds'] = "Seconds"; -$l['seconds_short'] = "s"; - -$l['rel_in'] = "In "; -$l['rel_ago'] = "ago"; -$l['rel_less_than'] = "Less than "; -$l['rel_time'] = "{1}{2} {3} {4}"; -$l['rel_minutes_single'] = "minute"; -$l['rel_minutes_plural'] = "minutes"; -$l['rel_hours_single'] = "hour"; -$l['rel_hours_plural'] = "hours"; - -$l['permanent'] = "Permanent"; -$l['save_draft'] = "Save as Draft"; -$l['go'] = "Go"; -$l['bbclosed_warning'] = "Your board status is currently set to closed."; -$l['banned_warning'] = "Your forum account is currently banned."; -$l['banned_warning2'] = "Ban Reason"; -$l['banned_warning3'] = "Ban will be lifted"; -$l['banned_lifted_never'] = "Never"; -$l['banned_email_warning'] = "You are currently using an email that is not allowed to be used on this forum. Please reset it before continuing."; -$l['powered_by'] = "Powered By"; -$l['copyright'] = "Copyright"; -$l['attach_quota'] = "You are currently using {1} of your allocated attachment usage ({2})"; -$l['view_attachments'] = "[View My Attachments]"; -$l['unlimited'] = "Unlimited"; - -$l['click_hold_edit'] = "(Click and hold to edit)"; - -$l['guest_count'] = "1 Guest"; -$l['guest_count_multiple'] = "{1} Guests"; - -$l['size_yb'] = "YB"; -$l['size_zb'] = "ZB"; -$l['size_eb'] = "EB"; -$l['size_pb'] = "PB"; -$l['size_tb'] = "TB"; -$l['size_gb'] = "GB"; -$l['size_mb'] = "MB"; -$l['size_kb'] = "KB"; -$l['size_bytes'] = "bytes"; - -$l['slaps'] = "slaps"; -$l['with_trout'] = "around a bit with a large trout."; - -$l['mybb_engine'] = "MyBB Engine"; -$l['quickdelete_confirm'] = "Are you sure you want to delete this post?"; -$l['quickrestore_confirm'] = "Are you sure you want to restore this post?"; -$l['newpm_notice_one'] = "You have one unread private message from {1} titled {4}"; -$l['newpm_notice_multiple'] = "You have {1} unread private messages. The most recent is from {2} titled {5}"; -$l['deleteevent_confirm'] = "Are you sure you want to delete this event?"; -$l['removeattach_confirm'] = "Are you sure you want to remove the selected attachment from this post?"; - -$l['latest_threads'] = "Latest Threads"; - -$l['folder_inbox'] = "Inbox"; -$l['folder_sent_items'] = "Sent Items"; -$l['folder_drafts'] = "Drafts"; -$l['folder_trash'] = "Trash Can"; -$l['folder_untitled'] = "Untitled Folder"; - -$l['standard_mod_tools'] = "Standard Tools"; -$l['custom_mod_tools'] = "Custom Tools"; - -$l['error_loadlimit'] = "The maximum server load limit has been reached. Please check back later once the server is less busy."; -$l['error_boardclosed'] = "This bulletin board is currently closed. The Administrator has specified the reason as to why below."; -$l['error_banned'] = "I'm sorry, but you are banned. You may not post, read threads, or access the forum. Please contact your forum administrator should you have any questions."; -$l['error_cannot_upload_php_post'] = "Can not upload file - Too large for php post_max_size directive. Please press the back button."; -$l['error_database_repair'] = "MyBB is automatically repairing a crashed table."; - -$l['unknown_user_trigger'] = "An unknown error has been triggered."; -$l['warnings'] = "The following warnings occurred:"; - -$l['ajax_loading'] = "Loading.
    Please Wait.."; -$l['saving_changes'] = "Saving changes.."; -$l['refresh'] = "Refresh"; -$l['select_language'] = "Quick Language Select"; -$l['select_theme'] = "Quick Theme Select"; - -$l['invalid_post_code'] = "Authorization code mismatch. Are you accessing this function correctly? Please go back and try again."; -$l['invalid_captcha'] = "Please fill out the image verification code to continue. Please enter the code exactly how it appears in the image."; -$l['invalid_nocaptcha'] = "Please solve the reCAPTCHA to verify that you're not a robot."; -$l['invalid_captcha_verify'] = "The image verification code that you entered was incorrect. Please enter the code exactly how it appears in the image."; -$l['image_verification'] = "Image Verification"; -$l['human_verification'] = "Human Verification"; -$l['verification_note'] = "Please enter the text contained within the image into the text box below it. This process is used to prevent automated spam bots."; -$l['verification_note_nocaptcha'] = "Please tick the checkbox that you see below. This process is used to prevent automated spam bots."; -$l['verification_subnote'] = "(case insensitive)"; -$l['invalid_captcha_transmit'] = "An error occurred with the image verification. Please try again."; -$l['invalid_nocaptcha_transmit'] = "An error occurred with the human verification. Please try again."; -$l['captcha_fetch_failure'] = 'There was an error fetching the new captcha.'; -$l['question_fetch_failure'] = 'There was an error fetching the new question.'; - -$l['timezone_gmt_minus_1200'] = "(GMT -12:00) Howland and Baker Islands"; -$l['timezone_gmt_minus_1100'] = "(GMT -11:00) Nome, Midway Island"; -$l['timezone_gmt_minus_1000'] = "(GMT -10:00) Hawaii, Papeete"; -$l['timezone_gmt_minus_950'] = "(GMT -9:30) Marquesas Islands"; -$l['timezone_gmt_minus_900'] = "(GMT -9:00) Alaska"; -$l['timezone_gmt_minus_800'] = "(GMT -8:00) Pacific Time"; -$l['timezone_gmt_minus_700'] = "(GMT -7:00) Mountain Time"; -$l['timezone_gmt_minus_600'] = "(GMT -6:00) Central Time, Mexico City"; -$l['timezone_gmt_minus_500'] = "(GMT -5:00) Eastern Time, Bogota, Lima, Quito"; -$l['timezone_gmt_minus_450'] = "(GMT -4:30) Caracas"; -$l['timezone_gmt_minus_400'] = "(GMT -4:00) Atlantic Time, La Paz, Halifax"; -$l['timezone_gmt_minus_350'] = "(GMT -3:30) Newfoundland"; -$l['timezone_gmt_minus_300'] = "(GMT -3:00) Brazil, Buenos Aires, Georgetown, Falkland Is."; -$l['timezone_gmt_minus_200'] = "(GMT -2:00) Mid-Atlantic, South Georgia and the South Sandwich Islands"; -$l['timezone_gmt_minus_100'] = "(GMT -1:00) Azores, Cape Verde Islands"; -$l['timezone_gmt'] = "(GMT) Casablanca, Dublin, Edinburgh, London, Lisbon, Monrovia"; -$l['timezone_gmt_100'] = "(GMT +1:00) Berlin, Brussels, Copenhagen, Madrid, Paris, Rome, Warsaw"; -$l['timezone_gmt_200'] = "(GMT +2:00) Athens, Istanbul, Cairo, Jerusalem, South Africa"; -$l['timezone_gmt_300'] = "(GMT +3:00) Kaliningrad, Minsk, Baghdad, Riyadh, Nairobi"; -$l['timezone_gmt_350'] = "(GMT +3:30) Tehran"; -$l['timezone_gmt_400'] = "(GMT +4:00) Moscow, Abu Dhabi, Baku, Muscat, Tbilisi"; -$l['timezone_gmt_450'] = "(GMT +4:30) Kabul"; -$l['timezone_gmt_500'] = "(GMT +5:00) Islamabad, Karachi, Tashkent"; -$l['timezone_gmt_550'] = "(GMT +5:30) Mumbai, Kolkata, Chennai, New Delhi"; -$l['timezone_gmt_575'] = "(GMT +5:45) Kathmandu"; -$l['timezone_gmt_600'] = "(GMT +6:00) Almaty, Dhakra, Yekaterinburg"; -$l['timezone_gmt_650'] = "(GMT +6:30) Yangon"; -$l['timezone_gmt_700'] = "(GMT +7:00) Bangkok, Hanoi, Jakarta"; -$l['timezone_gmt_800'] = "(GMT +8:00) Beijing, Hong Kong, Perth, Singapore, Taipei, Manila"; -$l['timezone_gmt_850'] = "(GMT +8:30) Pyongyang"; -$l['timezone_gmt_875'] = "(GMT +8:45) Eucla"; -$l['timezone_gmt_900'] = "(GMT +9:00) Osaka, Sapporo, Seoul, Tokyo, Irkutsk"; -$l['timezone_gmt_950'] = "(GMT +9:30) Adelaide, Darwin"; -$l['timezone_gmt_1000'] = "(GMT +10:00) Melbourne, Papua New Guinea, Sydney, Yakutsk"; -$l['timezone_gmt_1050'] = "(GMT +10:30) Lord Howe Island"; -$l['timezone_gmt_1100'] = "(GMT +11:00) Magadan, New Caledonia, Solomon Islands, Vladivostok"; -$l['timezone_gmt_1150'] = "(GMT +11:30) Norfolk Island"; -$l['timezone_gmt_1200'] = "(GMT +12:00) Auckland, Wellington, Fiji, Marshall Islands"; -$l['timezone_gmt_1275'] = "(GMT +12:45) Chatham Islands"; -$l['timezone_gmt_1300'] = "(GMT +13:00) Samoa, Tonga, Tokelau"; -$l['timezone_gmt_1400'] = "(GMT +14:00) Line Islands"; -$l['timezone_gmt_short'] = "GMT {1}({2})"; - -$l['missing_task'] = "Error: Task file does not exist"; -$l['task_backup_cannot_write_backup'] = "Error: The database backup task cannot write to backups directory."; -$l['task_backup_ran'] = "The database backup task successfully ran."; -$l['task_checktables_ran'] = "The check tables task successfully ran with no corrupted tables found."; -$l['task_checktables_ran_found'] = "Notice: The check tables task successfully ran and repaired the {1} table(s)."; -$l['task_dailycleanup_ran'] = "The daily cleanup task successfully ran."; -$l['task_hourlycleanup_ran'] = "The hourly cleanup task successfully ran."; -$l['task_logcleanup_ran'] = "The log cleanup task successfully ran and pruned any old logs."; -$l['task_promotions_ran'] = "The promotions task successfully ran."; -$l['task_threadviews_ran'] = "The thread views task successfully ran."; -$l['task_usercleanup_ran'] = "The user cleanup task successfully ran."; -$l['task_massmail_ran'] = "The mass mail task successfully ran."; -$l['task_userpruning_ran'] = "The user pruning task successfully ran."; -$l['task_delayedmoderation_ran'] = "The delayed moderation task successfully ran."; -$l['task_massmail_ran_errors'] = "One or more problems occurred sending to \"{1}\": -{2}"; -$l['task_versioncheck_ran'] = "The version check task successfully ran."; -$l['task_versioncheck_ran_errors'] = "Could not connect to MyBB for a version check."; -$l['task_recachestylesheets_ran'] = 'Re-cached {1} stylesheets.'; - -$l['dismiss_notice'] = "Dismiss this notice"; - -$l['next'] = "Next"; -$l['previous'] = "Previous"; -$l['delete'] = "Delete"; - -$l['massmail_username'] = "Username"; -$l['email_addr'] = "Email Address"; -$l['board_name'] = "Board Name"; -$l['board_url'] = "Board URL"; - -$l['comma'] = ", "; - -$l['debug_generated_in'] = "Generated in {1}"; -$l['debug_weight'] = "({1}% PHP / {2}% {3})"; -$l['debug_sql_queries'] = "SQL Queries: {1}"; -$l['debug_server_load'] = "Server Load: {1}"; -$l['debug_memory_usage'] = "Memory Usage: {1}"; -$l['debug_advanced_details'] = "Advanced Details"; - -$l['error_emailflooding_1_second'] = "Sorry, but you can only send one email every {1} minutes. Please wait another 1 second before attempting to email again."; -$l['error_emailflooding_seconds'] = "Sorry, but you can only send one email every {1} minutes. Please wait another {2} seconds before attempting to email again."; -$l['error_emailflooding_1_minute'] = "Sorry, but you can only send one email every {1} minutes. Please wait another 1 minute before attempting to email again."; -$l['error_emailflooding_minutes'] = "Sorry, but you can only send one email every {1} minutes. Please wait another {2} minutes before attempting to email again."; -$l['error_invalidfromemail'] = "You did not enter a valid from email address."; -$l['error_noname'] = "You did not enter a valid name."; -$l['your_email'] = "Your Email:"; -$l['email_note'] = "Enter your email address here."; -$l['your_name'] = "Your Name:"; -$l['name_note'] = "Enter your name here."; - -$l['january'] = "January"; -$l['february'] = "February"; -$l['march'] = "March"; -$l['april'] = "April"; -$l['may'] = "May"; -$l['june'] = "June"; -$l['july'] = "July"; -$l['august'] = "August"; -$l['september'] = "September"; -$l['october'] = "October"; -$l['november'] = "November"; -$l['december'] = "December"; - -$l['moderation_forum_attachments'] = "Please note that new attachments in this forum must be approved by a moderator before becoming visible."; -$l['moderation_forum_posts'] = "Please note that new posts in this forum must be approved by a moderator before becoming visible."; -$l['moderation_user_posts'] = "Please note that new posts you make must be approved by a moderator before becoming visible."; -$l['moderation_forum_thread'] = "Please note that new threads in this forum must be approved by a moderator before becoming visible."; -$l['moderation_forum_edits'] = "Please note that edited posts in this forum must be approved by a moderator before becoming visible."; -$l['moderation_forum_edits_quick'] = "Please note that edited posts in this forum must be approved by a moderator before becoming visible."; -$l['awaiting_message_link'] = " Go to the ACP."; -$l['awaiting_message_single'] = "There is 1 account awaiting activation. Please go to your ACP to activate the user."; -$l['awaiting_message_plural'] = "There are {1} accounts awaiting activation. Please go to your ACP to activate the users."; - -$l['select2_match'] = "One result is available, press enter to select it."; -$l['select2_matches'] = "{1} results are available, use up and down arrow keys to navigate."; -$l['select2_nomatches'] = "No matches found"; -$l['select2_inputtooshort_single'] = "Please enter one or more character"; -$l['select2_inputtooshort_plural'] = "Please enter {1} or more characters"; -$l['select2_inputtoolong_single'] = "Please delete one character"; -$l['select2_inputtoolong_plural'] = "Please delete {1} characters"; -$l['select2_selectiontoobig_single'] = "You can only select one item"; -$l['select2_selectiontoobig_plural'] = "You can only select {1} items"; -$l['select2_loadmore'] = "Loading more results…"; -$l['select2_searching'] = "Searching…"; - -$l['stopforumspam_error_decoding'] = 'Error decoding data from StopForumSpam.com.'; -$l['stopforumspam_error_retrieving'] = 'Error retrieving data from StopForumSpam.com.'; - -$l['sfs_error_username'] = 'username'; -$l['sfs_error_ip'] = 'IP'; -$l['sfs_error_email'] = 'email'; -$l['sfs_error_or'] = 'or'; - -$l['boardclosed_reason'] = 'These forums are currently closed for maintenance. Please check back later'; diff --git a/html/forums/inc/languages/english/hello.lang.php b/html/forums/inc/languages/english/hello.lang.php deleted file mode 100644 index 6e02a9c..0000000 --- a/html/forums/inc/languages/english/hello.lang.php +++ /dev/null @@ -1,16 +0,0 @@ -
    You are encouraged to register; once you register you will be able to post messages, set your own preferences, and maintain a profile. -

    Some of the features that generally require registration are subscriptions, changing of styles, accessing of your Personal Notepad and emailing forum members."; - -// Help Document 2 -$l['d2_name'] = "Updating Profile"; -$l['d2_desc'] = "Changing your data currently on record."; -$l['d2_document'] = "At some point during your stay, you may decide you need to update some information such as your instant messenger information, your password, or your email address. You may change any of this information from your user control panel. To access this control panel, simply click on the link in the upper right hand corner of most any page entitled \"User CP\". From there, simply choose the appropriate link under the \"Your Profile\" section and change or update any desired items, then proceed to click the submit button located at the bottom of the page for changes to take effect."; - -// Help Document 3 -$l['d3_name'] = "Use of Cookies on MyBB"; -$l['d3_desc'] = "MyBB uses cookies to store certain information about your registration."; -$l['d3_document'] = "MyBB makes use of cookies to store your login information if you are registered, and your last visit if you are not. -

    Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. -

    Cookies on this forum also track the specific topics you have read and when you last read them. -

    To clear all cookies set by this forum, you can click here."; - -// Help Document 4 -$l['d4_name'] = "Logging In and Out"; -$l['d4_desc'] = "How to login and log out."; -$l['d4_document'] = "When you login, you set a cookie on your machine so that you can browse the forums without having to enter in your username and password each time. Logging out clears that cookie to ensure nobody else can browse the forum as you. -

    To login, simply click the login link at the top right hand corner of the forum. To log out, click the log out link in the same place. In the event you cannot log out, clearing cookies on your machine will take the same effect."; - -// Help Document 5 -$l['d5_name'] = "Posting a New Thread"; -$l['d5_desc'] = "Starting a new thread in a forum."; -$l['d5_document'] = "When you go to a forum you are interested in and you wish to create a new thread (or topic), simply choose the button at the top and bottom of the forums entitled \"New Thread\". Please take note that you may not have permission to post a new thread in every forum as your administrator may have restricted posting in that forum to staff or archived the forum entirely."; - -// Help Document 6 -$l['d6_name'] = "Posting a Reply"; -$l['d6_desc'] = "Replying to a topic within a forum."; -$l['d6_document'] = "During the course of your visit, you may encounter a thread to which you would like to make a reply. To do so, simply click the \"New Reply\" button at the bottom or top of the thread. Please take note that your administrator may have restricted posting to certain individuals in that particular forum. -

    Additionally, a moderator of a forum may have closed a thread meaning that users cannot reply to it. There is no way for a user to open such a thread without the help of a moderator or administrator."; - -// Help Document 7 -$l['d7_name'] = "MyCode"; -$l['d7_desc'] = "Learn how to use MyCode to enhance your posts."; -$l['d7_document'] = "You can use MyCode, a simplified version of HTML, in your posts to create certain effects. -


    [b]This text is bold[/b]
       This text is bold -

    [i]This text is italicized[/i]
       This text is italicized -

    [u]This text is underlined[/u]
       This text is underlined -

    [s]This text is struck out[/s]
       This text is struck out -


    [url]http://www.example.com/[/url]
       http://www.example.com/ -

    [url=http://www.example.com/]Example.com[/url]
       Example.com -

    [email]example@example.com[/email]
       example@example.com -

    [email=example@example.com]E-mail Me![/email]
       E-mail Me! -

    [email=example@example.com?subject=spam]E-mail with subject[/email]
       E-mail with subject -


    [quote]Quoted text will be here[/quote]
       Quoted text will be here -

    [code]Text with preserved formatting[/code]
       Text with preserved formatting -


    [img]http://www.php.net/images/php.gif[/img]
        -

    [img=50x50]http://www.php.net/images/php.gif[/img]
        -


    [color=red]This text is red[/color]
       This text is red -

    [size=3]This text is size 3[/size]
       This text is size 3 -

    [font=Tahoma]This font is Tahoma[/font]
       This font is Tahoma -


    [align=center]This is centered[/align]

    This is centered
    -

    [align=right]This is right-aligned[/align]

    This is right-aligned
    -


    [list]
    [*]List Item #1
    [*]List Item #2
    [*]List Item #3
    [/list]

    • List item #1
    • List item #2
    • List Item #3
    • -
    -

    You can make an ordered list by using [list=1] for a numbered, and [list=a] for an alphabetical list.

    "; diff --git a/html/forums/inc/languages/english/helpsections.lang.php b/html/forums/inc/languages/english/helpsections.lang.php deleted file mode 100644 index 3ba4237..0000000 --- a/html/forums/inc/languages/english/helpsections.lang.php +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/languages/english/index.lang.php b/html/forums/inc/languages/english/index.lang.php deleted file mode 100644 index 7fc4b5e..0000000 --- a/html/forums/inc/languages/english/index.lang.php +++ /dev/null @@ -1,40 +0,0 @@ -{1}"; -$l['stats_mostonline'] = "The most users online at one time was {1} on {2} at {3}"; -$l['whos_online'] = "Who's Online"; -$l['complete_list'] = "Complete List"; -$l['online_online_plural'] = "users"; -$l['online_online_singular'] = "user"; -$l['online_member_plural'] = "members"; -$l['online_member_singular'] = "member"; -$l['online_anon_plural'] = "are"; -$l['online_anon_singular'] = "is"; -$l['online_guest_plural'] = "guests"; -$l['online_guest_singular'] = "guest"; -$l['online_note'] = "{1} {2} active in the past {3} minutes ({4} {5}, {6} of whom {7} invisible, and {8} {9})."; -$l['subforums'] = "Sub Forums:"; diff --git a/html/forums/inc/languages/english/mailhandler.lang.php b/html/forums/inc/languages/english/mailhandler.lang.php deleted file mode 100644 index 638785b..0000000 --- a/html/forums/inc/languages/english/mailhandler.lang.php +++ /dev/null @@ -1,16 +0,0 @@ -'; diff --git a/html/forums/inc/languages/english/managegroup.lang.php b/html/forums/inc/languages/english/managegroup.lang.php deleted file mode 100644 index 2035415..0000000 --- a/html/forums/inc/languages/english/managegroup.lang.php +++ /dev/null @@ -1,64 +0,0 @@ -{1} pending join requests for this user group."; -$l['group_management'] = "Group Management"; -$l['members_of'] = "Members in \"{1}\""; -$l['user_name'] = "Username"; -$l['contact'] = "Contact"; -$l['reg_date'] = "Registered"; -$l['post_count'] = "Posts"; -$l['remove_selected'] = "Remove Selected Users from Group"; -$l['add_member'] = "Add Member to \"{1}\""; -$l['add_member_submit'] = "Add Member to Group"; -$l['invite_member'] = "Invite Member to \"{1}\""; -$l['invite_member_submit'] = "Invite Member to Group"; -$l['join_requests'] = "Join Requests"; -$l['join_requests_title'] = "Join Requests for \"{1}\""; -$l['leader'] = "(Leader)"; -$l['reason'] ="Reason"; -$l['accept'] = "Accept"; -$l['ignore'] = "Ignore"; -$l['decline'] = "Decline"; -$l['action_requests'] = "Perform Actions"; -$l['join_requests_moderated'] = "The join requests have been moderated.
    You will now be taken to the request listing."; -$l['no_requests'] = "There are currently no pending join requests for this group."; -$l['no_users'] = "There are no users in this group."; -$l['user_added'] = "The user has been added to the user group."; -$l['users_removed'] = "The selected users have been removed from the user group."; -$l['group_no_members'] = "There are currently no members in this group.
    To return to the group management page, click here."; -$l['group_public_moderated'] = "This user group is a public user group that anyone can join. All join requests must be moderated by a group leader."; -$l['group_public_not_moderated'] = "This user group is a public user group that anyone can join freely."; -$l['group_public_invite'] = "This user group is a public user group that requires an invitation from a group leader in order to join."; -$l['group_private'] = "This user group is a private user group. Only users added by the group leader can be part of this group."; -$l['group_default'] = "This user group is a core user group."; -$l['group_leaders'] = "Group Leaders"; -$l['no_users_selected'] = "Sorry, but no users seemed to be selected for removal.
    Please go back and select the users you want to remove from this group."; - -$l['error_alreadyingroup'] = "The user specified is already part of the user group."; -$l['error_alreadyinvited'] = "The user specified has already been invited."; - -$l['user_invited'] = "The user has been invited to join the user group."; -$l['invite_pm_subject'] = "You have been invited to join \"{1}\""; -$l['invite_pm_message'] = "You have received an invitation to join the user group \"{1}\". - -To join, please proceed to your [url={2}/usercp.php?action=usergroups]Group Memberships[/url] page and click 'Accept Invite'. - -This invitation does not expire."; -$l['invite_pm_message_expires'] = "You have received an invitation to join the user group \"{1}\". - -To join, please proceed to your [url={2}/usercp.php?action=usergroups]Group Memberships[/url] page and click 'Accept Invite'. - -This invite will expire {3} days from now."; - diff --git a/html/forums/inc/languages/english/member.lang.php b/html/forums/inc/languages/english/member.lang.php deleted file mode 100644 index c08cbca..0000000 --- a/html/forums/inc/languages/english/member.lang.php +++ /dev/null @@ -1,256 +0,0 @@ -Complex Password:"; -$l['confirm_email'] = "Confirm Email:"; -$l['optional_fields'] = "Optional Fields"; -$l['website_url'] = "Your Website URL:"; -$l['birthdate'] = "Birthdate:"; -$l['additional_info'] = "Additional Information"; -$l['required_info'] = "Required Information"; -$l['i_agree'] = "I Agree"; -$l['account_details'] = "Account Details"; -$l['account_prefs'] = "Account Preferences:"; -$l['invisible_mode'] = "Hide me from the Who's Online list."; -$l['allow_notices'] = "Receive emails from the Administrators."; -$l['hide_email'] = "Hide your email from other members."; -$l['email_notify'] = "Automatically subscribe to threads you post in."; -$l['receive_pms'] = "Receive private messages from other users."; -$l['pm_notice'] = "Alert me with a notice when I receive a Private Message."; -$l['email_notify_newpm'] = "Notify me by email when I receive a new Private Message."; -$l['time_offset'] = "Time Zone (DST correction excluded):"; -$l['time_offset_desc'] = "If you live in a time zone which differs to what this board is set at, you can select it from the list below."; -$l['dst_correction'] = "Daylight Saving Time correction:"; -$l['dst_correction_auto'] = "Automatically detect DST settings"; -$l['dst_correction_enabled'] = "Always use DST correction"; -$l['dst_correction_disabled'] = "Never use DST correction"; -$l['redirect_registered_coppa_activate'] = "Thank you for registering on {1}, {2}. Your account has successfully been created, however, as the owner of this account is under the age of 13, parental permission needs to be sought before this account can be used.

    A parent or legal guardian will need to download, fill in and submit to us a completed copy of our COPPA Compliance & Permission form.

    Once we receive a completed copy of this form, the account will be activated."; -$l['coppa_compliance'] = "COPPA Compliance"; -$l['coppa_desc'] = "In order to register on these forums, we require you to verify your age to comply with COPPA. Please enter your date of birth below.

    If you are under the age of 13, parental permission must be obtained prior to registration. A parent or legal guardian will need to download, fill in and submit to us a completed copy of our COPPA Compliance & Permission form."; -$l['hide_dob'] = "You can choose to hide your date of birth and age by editing your profile after registering."; -$l['signature'] = "Signature:"; -$l['continue_registration'] = "Continue with Registration"; -$l['birthdayprivacy'] = "Date of Birth Privacy:"; -$l['birthdayprivacyall'] = "Display Age and Date of Birth"; -$l['birthdayprivacynone'] = "Hide Age and Date of Birth"; -$l['birthdayprivacyage'] = "Display Only Age"; -$l['leave_this_field_empty'] = "Leave this field empty:"; -$l['error_need_to_be_thirteen'] = "You need to be of thirteen years or older to register on this forum."; -$l['coppa_registration'] = "COPPA Registration Form"; -$l['coppa_form_instructions'] = "Please print this form, fill it in and either fax it to the number below or mail it to the provided mailing address."; -$l['fax_number'] = "Fax Number:"; -$l['mailing_address'] = "Mailing Address:"; -$l['account_information'] = "Account Information"; -$l['parent_details'] = "Parent / Guardian Details"; -$l['full_name'] = "Full Name:"; -$l['relation'] = "Relation:"; -$l['phone_no'] = "Phone #:"; -$l['coppa_parent_agreement'] = "I understand that the information I have provided is truthful, that any information may be changed in the future by entering the supplied password and this user account can be removed by request."; - -$l['coppa_agreement_1'] = "Users under the age of 13 must receive permission from their parent or legal guardian in order to register on {1}."; -$l['coppa_agreement_2'] = "A parent or legal guardian will need to download, fill in and submit to us a completed copy of our COPPA Compliance & Permission form before membership will be granted."; -$l['coppa_agreement_3'] = "If you'd like to, you can begin the registration process now, however the account will be inaccessible until the above compliance form is received."; - -$l['error_invalid_birthday'] = 'The birthday you entered is invalid. Please enter a valid birthday.'; -$l['error_awaitingcoppa'] = "You cannot login using this account as it is still awaiting COPPA validation from a parent or guardian.

    A parent or legal guardian will need to download, fill in and submit to us a completed copy of our COPPA Compliance & Permission form.

    Once we receive a completed copy of this form, the account will be activated."; - -$l['lang_select'] = "Language Settings:"; -$l['lang_select_desc'] = "If you live in a country that speaks a language other than the forums default, you may be able to select an installed, read-able language pack below."; -$l['lang_select_default'] = "Use Default"; - -$l['submit_registration'] = "Submit Registration!"; -$l['confirm_password'] = "Confirm Password:"; -$l['referrer'] = "Referrer:"; -$l['referrer_desc'] = "If you were referred to these forums by another member you can enter their name below. If not, simply leave this field blank."; -$l['resend_activation'] = "Resend Account Activation"; -$l['request_activation'] = "Request Activation Code"; -$l['ppp'] = "Posts Per Page:"; -$l['ppp_desc'] = "Allows you to select the amount of posts to be shown per page in a thread."; -$l['tpp'] = "Threads Per Page:"; -$l['tpp_desc'] = "Allows you to select the amount of threads to be shown per page in the thread listing."; -$l['reset_password'] = "Reset Password"; -$l['send_password'] = "Send New Password!"; -$l['registration_errors'] = "The following errors occurred with your registration:"; -$l['timeonline'] = "Time Spent Online:"; -$l['timeonline_hidden'] = "(Hidden)"; -$l['registrations_disabled'] = "Sorry, but you cannot register at this time because the administrator has disabled new account registrations."; -$l['error_username_length'] = "Your username is invalid. Usernames have to be within {1} to {2} characters."; -$l['error_stop_forum_spam_spammer'] = 'Sorry, your {1} matches that of a known spammer. If you feel this is a mistake, please contact an administrator.'; -$l['error_stop_forum_spam_fetching'] = 'Sorry, something went wrong verifying your account against a spammer database. Most likely the database couldn\'t be accessed. Please try again later.'; - -$l['none_registered'] = "None Registered"; -$l['not_specified'] = "Not Specified"; -$l['membdayage'] = "({1} years old)"; -$l['mod_options'] = "Moderator Options"; -$l['edit_in_mcp'] = "Edit this user in Mod CP"; -$l['ban_in_mcp'] = "Ban this user in Mod CP"; -$l['purgespammer'] = "Purge Spammer"; -$l['edit_usernotes'] = "Edit user notes in Mod CP"; -$l['no_usernotes'] = "There are currently no notes on this user"; -$l['view_all_notes'] = "View all notes"; -$l['view_notes_for'] = "View notes for {1}"; -$l['registration_ip'] = "Registration IP:"; -$l['last_known_ip'] = "Last Known IP:"; -$l['reputation'] = "Reputation:"; -$l['reputation_vote'] = "Rate"; -$l['reputation_details'] = "Details"; -$l['already_logged_in'] = "Notice: You are already currently logged in as {1}."; -$l['admin_edit_in_acp'] = "Edit this user in Admin CP"; -$l['admin_ban_in_acp'] = "Ban this user in Admin CP"; -$l['admin_options'] = "Administrator Options"; - -$l['redirect_registered_activation'] = "Thank you for registering on {1}, {2}.

    To complete your registration, please check your email for account activation instructions. Until you activate your account you may not be able to post on these forums"; -$l['redirect_emailupdated'] = "Your email has been successfully changed.
    You will now be taken back to the main page."; -$l['redirect_accountactivated'] = "Your account has successfully been activated.
    You will now be taken back to the main page."; -$l['redirect_accountactivated_admin'] = "Your email has successfully validated.
    Your registration must now be activated by an administrator. Until then, you may not be able to post on these forums.
    You will now be taken back to the main page."; -$l['redirect_registered'] = "Thank you for registering on {1}, {2}.
    You will now be taken back to the main page."; -$l['redirect_registered_admin_activate'] = "Thank you for registering on {1}, {2}.
    Your registration must be activated by an administrator. Until then, you may not be able to post on these forums."; -$l['redirect_loggedout'] = "You have successfully been logged out.
    You will now be taken back to the forum index."; -$l['redirect_alreadyloggedout'] = "You were already logged out or have not logged in yet.
    You will now be taken back to the forum index."; -$l['redirect_lostpwsent'] = "Thank you, all accounts pertaining to that email address have now been sent an email with details on how to reset the passwords.

    You will now be taken to the forums' index."; -$l['redirect_activationresent'] = "Your activation e-mail has been resent."; -$l['redirect_passwordreset'] = "Thank you, the password for your account has been reset. The new randomly generated password has been emailed to the email address in your account."; -$l['redirect_memberrated'] = "The member has successfully been rated."; -$l['redirect_registered_passwordsent'] = "A random password has been generated and sent to your email address. Before you can login on these forums, you will need to check your email for this password."; -$l['redirect_validated'] = "Thank you, your account has been validated.
    You will now be taken to the forums."; - -$l['error_activated_by_admin'] = "You cannot resend your account activation email as all registrations must be approved by an Administrator."; -$l['error_alreadyregistered'] = "Sorry, but our system shows that you have already registered on these forums and the registration of multiple accounts has been disabled."; -$l['error_alreadyregisteredtime'] = "We cannot process your registration because there has already been {1} new registration(s) from your ip address in the past {2} hours. Please try again later."; -$l['error_badlostpwcode'] = "You seem to have entered an invalid password reset code. Please re-read the email you were sent or contact the forum administrators for more help."; -$l['error_badactivationcode'] = "You have entered an invalid account activation code. To resend all activation emails to the email address on file, please click here."; -$l['error_alreadyactivated'] = "It appears your account is already activated or does not require email verification."; -$l['error_alreadyvalidated'] = "Your email have already been validated."; -$l['error_nothreadurl'] = "Your message does not contain the URL of the thread. Please use the \"send to friend\" feature for it's intended purpose."; -$l['error_bannedusername'] = "You have entered a username that is banned from registration. Please choose another username."; -$l['error_notloggedout'] = "Your user ID could not be verified to log you out. This may have been because a malicious Javascript was attempting to log you out automatically. If you intended to log out, please click the Log Out button at the top menu."; -$l['error_regimageinvalid'] = "The image verification code that you entered was incorrect. Please enter the code exactly how it appears in the image."; -$l['error_regimagerequired'] = "Please fill out the image verification code to continue the login process. Please enter the code exactly how it appears in the image."; -$l['error_spam_deny'] = "Our systems detect that you may be a spammer and therefore you have been denied registration. If you feel this is a mistake, please contact the Administrator."; -$l['error_spam_deny_time'] = "Our systems detect that you may be a spammer and therefore you have been denied registration. Registration must take a minimum time of {1} seconds to prevent automated signups, you registered in {2} seconds. If you feel this is a mistake, please contact the Administrator."; - -$l['js_validator_no_username'] = "You must enter a username"; -$l['js_validator_invalid_email'] = "You need to enter a valid email address"; -$l['js_validator_email_match'] = "You need to enter the same email address again"; -$l['js_validator_no_image_text'] = "You need to enter the text in the image above"; -$l['js_validator_no_security_question'] = "You need to enter the answer to the question above"; -$l['js_validator_password_matches'] = "The passwords you enter must match"; -$l['js_validator_password_complexity'] = "Checking password complexity"; -$l['js_validator_password_length'] = "Your password must be {1} or more characters long"; -$l['js_validator_not_empty'] = "You must select or enter a value for this field"; -$l['js_validator_checking_username'] = "Checking if username is available"; -$l['js_validator_username_length'] = "Usernames must be between {1} and {2} characters long"; -$l['js_validator_checking_referrer'] = "Checking if referrer username exists."; -$l['js_validator_captcha_valid'] = "Checking whether or not you entered the correct image verification code."; - -$l['security_question'] = "Security Question"; -$l['question_note'] = "Please answer the question provided. This process is used to prevent automated processes."; -$l['error_question_wrong'] = "The answer you provided for the security question is wrong. Please try again."; - -$l['subscription_method'] = "Default Thread Subscription Mode:"; -$l['no_auto_subscribe'] = "Do not subscribe"; -$l['no_subscribe'] = "No notification"; -$l['instant_email_subscribe'] = "Instant email notification"; -$l['instant_pm_subscribe'] = "Instant PM notification"; - -$l['remove_from_buddy_list'] = "Remove from Buddy List"; -$l['add_to_buddy_list'] = "Add to Buddy List"; -$l['remove_from_ignore_list'] = "Remove from Ignore List"; -$l['add_to_ignore_list'] = "Add to Ignore List"; -$l['report_user'] = "Report User"; - -$l['newregistration_subject'] = "New registration at {1}"; -$l['newregistration_message'] = "{1}, - -There is a new user at {2} who is pending admin activation. - -Username: {3} - -Thank you, -{2} Staff"; diff --git a/html/forums/inc/languages/english/memberlist.lang.php b/html/forums/inc/languages/english/memberlist.lang.php deleted file mode 100644 index f294e49..0000000 --- a/html/forums/inc/languages/english/memberlist.lang.php +++ /dev/null @@ -1,79 +0,0 @@ -There were no members found with the search criteria you entered.

    Please enter a different search term and try again.

    "; - -$l['a'] = 'A'; -$l['b'] = 'B'; -$l['c'] = 'C'; -$l['d'] = 'D'; -$l['e'] = 'E'; -$l['f'] = 'F'; -$l['g'] = 'G'; -$l['h'] = 'H'; -$l['i'] = 'I'; -$l['j'] = 'J'; -$l['k'] = 'K'; -$l['l'] = 'L'; -$l['m'] = 'M'; -$l['n'] = 'N'; -$l['o'] = 'O'; -$l['p'] = 'P'; -$l['q'] = 'Q'; -$l['r'] = 'R'; -$l['s'] = 'S'; -$l['t'] = 'T'; -$l['u'] = 'U'; -$l['v'] = 'V'; -$l['w'] = 'W'; -$l['x'] = 'X'; -$l['y'] = 'Y'; -$l['z'] = 'Z'; - diff --git a/html/forums/inc/languages/english/messages.lang.php b/html/forums/inc/languages/english/messages.lang.php deleted file mode 100644 index 8aa97af..0000000 --- a/html/forums/inc/languages/english/messages.lang.php +++ /dev/null @@ -1,505 +0,0 @@ -
    Alternatively, return to the forum."; -$l['redirect_emailsent'] = "Your e-mail message has been sent successfully."; -$l['redirect_loggedin'] = "You have successfully been logged in.
    You will now be taken back to where you came from."; - -$l['error_invalidpworusername'] = "You have entered an invalid username/password combination.

    If you have forgotten your password please retrieve a new one."; -$l['error_invalidpworusername1'] = "You have entered an invalid email/password combination.

    If you have forgotten your password please retrieve a new one."; -$l['error_invalidpworusername2'] = "You have entered an invalid username/password or email/password combination.

    If you have forgotten your password please retrieve a new one."; -$l['error_incompletefields'] = "It appears you have left one or more required fields blank. Please go back and enter the required fields."; -$l['error_alreadyuploaded'] = "This post already contains an attachment with the same name. Please rename the file and upload it again. Alternatively you may click \"Update Attachment\"."; -$l['error_alreadyuploaded_perm'] = "This post already contains an attachment with the same name. Please either remove the existing file or rename the file and upload it again."; -$l['error_nomessage'] = "Sorry, we cannot proceed because you did not enter a valid message. Please go back and do so."; -$l['error_invalidemail'] = "You did not enter a valid email address."; -$l['error_nomember'] = "The member you specified is either invalid or doesn't exist."; -$l['error_maxposts'] = "I'm sorry, but your daily post limit has been exceeded. Please wait till tomorrow to post further or contact your administrator.

    The maximum amount of posts you may make in a day is {1}"; -$l['error_nohostname'] = "No hostname could be found for the IP you entered."; -$l['error_invalidthread'] = "The specified thread does not exist."; -$l['error_invalidpost'] = "The specified post does not exist."; -$l['error_invalidannouncement'] = "The specified announcement does not exist."; -$l['error_invalidattachment'] = "The specified attachment does not exist."; -$l['error_invalidforum'] = "Invalid forum"; -$l['error_closedinvalidforum'] = "You may not post in this forum because either the forum is closed, it is a redirect to another webpage, or it is a category."; -$l['error_attachtype'] = "The type of file that you attached is not allowed. Please remove the attachment or choose a different type."; -$l['error_attachsize'] = "The file you attached is too large. The maximum size for that type of file is {1} kilobytes."; -$l['error_uploadempty'] = "The file specified is empty."; -$l['error_uploadsize'] = "The size of the uploaded file is too large."; -$l['error_uploadfailed'] = "The file upload failed. Please choose a valid file and try again. "; -$l['error_uploadfailed_detail'] = "Error details: "; -$l['error_uploadfailed_php1'] = "PHP returned: Uploaded file exceeded upload_max_filesize directive in php.ini. Please contact your forum administrator with this error."; -$l['error_uploadfailed_php2'] = "The uploaded file exceeded the maximum file size specified."; -$l['error_uploadfailed_php3'] = "The uploaded file was only partially uploaded."; -$l['error_uploadfailed_php4'] = "No file was uploaded."; -$l['error_uploadfailed_php6'] = "PHP returned: Missing a temporary folder. Please contact your forum administrator with this error."; -$l['error_uploadfailed_php7'] = "PHP returned: Failed to write the file to disk. Please contact your forum administrator with this error."; -$l['error_uploadfailed_phpx'] = "PHP returned error code: {1}. Please contact your forum administrator with this error."; -$l['error_uploadfailed_nothingtomove'] = "An invalid file was specified, so the uploaded file could not be moved to its destination."; -$l['error_uploadfailed_movefailed'] = "There was a problem moving the uploaded file to its destination."; -$l['error_uploadfailed_lost'] = "The attachment could not be found on the server."; -$l['error_emailmismatch'] = "The email addresses you entered do not match. Please go back and try again"; -$l['error_nopassword'] = "You did not enter a valid password."; -$l['error_usernametaken'] = "The username you have chosen is already registered. If you have previously registered on these forums, please login."; -$l['error_nousername'] = "You did not enter a username."; -$l['error_invalidusername'] = "The username you have entered appears to be invalid."; -$l['error_invalidpassword'] = "The password you entered is incorrect. If you have forgotten your password, click here. Otherwise, go back and try again."; -$l['error_postflooding'] = "We are sorry but we cannot process your post. The administrator has specified you are only allowed to post once every {1} seconds."; -$l['error_nopermission_guest_1'] = "You are either not logged in or do not have permission to view this page. This could be because one of the following reasons:"; -$l['error_nopermission_guest_2'] = "You are not logged in or registered. Please use the form at the bottom of this page to login."; -$l['error_nopermission_guest_3'] = "You do not have permission to access this page. Are you trying to access administrative pages or a resource that you shouldn't be? Check in the forum rules that you are allowed to perform this action."; -$l['error_nopermission_guest_4'] = "Your account may have been disabled by an administrator, or it may be awaiting account activation."; -$l['error_nopermission_guest_5'] = "You have accessed this page directly rather than using appropriate forms or links."; -$l['login'] = "Login"; -$l['need_reg'] = "Need to register?"; -$l['forgot_password'] = "Forgotten your password?"; -$l['error_nopermission_user_1'] = "You do not have permission to access this page. This could be because of one of the following reasons:"; -$l['error_nopermission_user_ajax'] = "You do not have permission to access this page."; -$l['error_nopermission_user_2'] = "Your account has either been suspended or you have been banned from accessing this resource."; -$l['error_nopermission_user_3'] = "You do not have permission to access this page. Are you trying to access administrative pages or a resource that you shouldn't be? Check in the forum rules that you are allowed to perform this action."; -$l['error_nopermission_user_4'] = "Your account may still be awaiting activation or moderation."; -$l['error_nopermission_user_5'] = "You have accessed this page directly rather than using appropriate forms or link."; -$l['error_nopermission_user_resendactivation'] = "Resend Activation Code"; -$l['error_nopermission_user_username'] = "You are currently logged in with the username: '{1}'"; -$l['logged_in_user'] = "Logged In User"; -$l['error_too_many_images'] = "Too Many Images."; -$l['error_too_many_images2'] = "We are sorry, but we cannot process your post because it contains too many images. Please remove some images from your post to continue."; -$l['error_too_many_images3'] = "Note: The maximum amount of images per post is"; -$l['error_attach_file'] = "Error Attaching File"; -$l['please_correct_errors'] = "Please correct the following errors before continuing:"; -$l['error_reachedattachquota'] = "Sorry, but you cannot attach this file because you have reached your attachment quota of {1}"; -$l['error_maxattachpost'] = "Sorry but you cannot attach this file because you have reached the maximum number of attachments allowed per post of {1}"; -$l['error_invaliduser'] = "The specified user is invalid or does not exist."; -$l['error_invalidaction'] = "Invalid action"; -$l['error_messagelength'] = "Sorry, your message is too long and cannot be posted. Please try shortening your message and try again."; -$l['error_message_too_short'] = "Sorry, your message is too short and cannot be posted."; -$l['failed_login_wait'] = "You have failed to login within the required number of attempts. You must now wait {1}h {2}m {3}s before you can login again."; -$l['failed_login_again'] = "
    You have {1} more login attempts."; -$l['error_max_emails_day'] = "You cannot use the 'Send Thread to a Friend' or the 'Email User' features because you've already used up your allocated quota of sending {1} messages in the past 24 hours."; -$l['attachments_disabled'] = "You cannot use the attachment system as it has been disabled by the Administrator."; - -$l['emailsubject_lostpw'] = "Password Reset at {1}"; -$l['emailsubject_passwordreset'] = "New password at {1}"; -$l['emailsubject_subscription'] = "New Reply to {1}"; -$l['emailsubject_randompassword'] = "Your Password for {1}"; -$l['emailsubject_activateaccount'] = "Account Activation at {1}"; -$l['emailsubject_forumsubscription'] = "New Thread in {1}"; -$l['emailsubject_reportpost'] = "Reported post at {1}"; -$l['emailsubject_reportprofile'] = "Reported user at {1}"; -$l['emailsubject_reportreputation'] = "Reported reputation at {1}"; -$l['emailsubject_reachedpmquota'] = "Private Messaging Quota Reached at {1}"; -$l['emailsubject_changeemail'] = "Change of Email at {1}"; -$l['emailsubject_newpm'] = "New Private Message at {1} - {2}"; -$l['emailsubject_newjoinrequest'] = "New Join Request at {1}"; -$l['emailsubject_sendtofriend'] = "Interesting discussion at {1}"; -$l['emailsubject_changepassword'] = "Change of Password at {1}"; -$l['emailbit_viewthread'] = "... (visit the thread to read more..)"; - -$l['email_lostpw'] = "{1}, - -To complete the phase of resetting your account password at {2}, you will need to go to the URL below in your web browser. - -{3}/member.php?action=resetpassword&uid={4}&code={5} - -If the above link does not work correctly, go to - -{3}/member.php?action=resetpassword - -You will need to enter the following: -Username: {1} -Activation Code: {5} - -Thank you, -{2} Staff"; -$l['email_lostpw1'] = "{1}, - -To complete the phase of resetting your account password at {2}, you will need to go to the URL below in your web browser. - -{3}/member.php?action=resetpassword&uid={4}&code={5} - -If the above link does not work correctly, go to - -{3}/member.php?action=resetpassword - -You will need to enter the following: -Your email address -Activation Code: {5} - -Thank you, -{2} Staff"; -$l['email_lostpw2'] = "{1}, - -To complete the phase of resetting your account password at {2}, you will need to go to the URL below in your web browser. - -{3}/member.php?action=resetpassword&uid={4}&code={5} - -If the above link does not work correctly, go to - -{3}/member.php?action=resetpassword - -You will need to enter the following: -Username: {1} (Or your email address) -Activation Code: {5} - -Thank you, -{2} Staff"; - -$l['email_reportpost'] = "{1} from {2} has reported the following post: - -{3} -{4}/{5} - -The reason this user gave for reporting this post: -{6} - -This message has been sent to all moderators of this forum, or all administrators and super moderators if there are no moderators. - -Please check this post out as soon as possible."; - -$l['email_reportprofile'] = "{1} from {2} has reported the following user: - -{3} -{4}/{5} - -The reason this user gave for reporting this user: -{6} - -This message has been sent to all moderators of this forum, or all administrators and super moderators if there are no moderators. - -Please check this user out as soon as possible."; - -$l['email_reportreputation'] = "{1} from {2} has reported the following reputation: - -{3} -{4}/{5} - -The reason this user gave for reporting this reputation: -{6} - -This message has been sent to all moderators of this forum, or all administrators and super moderators if there are no moderators. - -Please check this reputation out as soon as possible."; - -$l['email_report_comment_extra'] = "{1}: {2}"; - -$l['email_passwordreset'] = "{1}, - -Your password at {2} has been reset. - -Your new password is: {3} - -You will need this password to login to the forums, once you login you should change it by going to your User Control Panel. - -Thank you, -{2} Staff"; - -$l['email_randompassword'] = "{1}, - -Thank you for registering on {2}. Below is your username and the randomly generated password. To login to {2}, you will need these details. - -Username: {3} -Password: {4} - -It is recommended you change your password immediately after you login. You can do this by going to your User CP then clicking Change Password on the left menu. - -Thank you, -{2} Staff"; - -$l['email_randompassword1'] = "{1}, - -Thank you for registering on {2}. Below is your username and the randomly generated password. To login to {2}, you will need these details. - -Your email address -Password: {4} - -It is recommended you change your password immediately after you login. You can do this by going to your User CP then clicking Change Password on the left menu. - -Thank you, -{2} Staff"; - -$l['email_randompassword2'] = "{1}, - -Thank you for registering on {2}. Below is your username and the randomly generated password. To login to {2}, you will need these details. - -Username: {3} (Or your email address) -Password: {4} - -It is recommended you change your password immediately after you login. You can do this by going to your User CP then clicking Change Password on the left menu. - -Thank you, -{2} Staff"; - -$l['email_sendtofriend'] = "Hello, - -{1} from {2} thought you may be interested in reading the following web page: - -{3} - -{1} included the following message: ------------------------------------------- -{4} ------------------------------------------- - -Thank you, -{2} Staff -"; - -$l['email_forumsubscription'] = "{1}, - -{2} has just started a new thread in {3}. This is a forum you have subscribed to at {4}. - -The thread is titled {5} - -Here is an excerpt of the message: --- -{6} --- - -To view the thread, you can go to the following URL: -{7}/{8} - -There may also be other new threads and replies but you will not receive anymore notifications until you visit the board again. - -Thank you, -{4} Staff - ------------------------------------------- -Unsubscription Information: - -If you would not like to receive any more notifications of new threads in this forum, visit the following URL in your browser: -{7}/usercp2.php?action=removesubscription&type=forum&fid={9}&my_post_key={10} - -------------------------------------------"; - -$l['email_activateaccount'] = "{1}, - -To complete the registration process on {2}, you will need to go to the URL below in your web browser. - -{3}/member.php?action=activate&uid={4}&code={5} - -If the above link does not work correctly, go to - -{3}/member.php?action=activate - -You will need to enter the following: -Username: {1} -Activation Code: {5} - -Thank you, -{2} Staff"; - -$l['email_activateaccount1'] = "{1}, - -To complete the registration process on {2}, you will need to go to the URL below in your web browser. - -{3}/member.php?action=activate&uid={4}&code={5} - -If the above link does not work correctly, go to - -{3}/member.php?action=activate - -You will need to enter the following: -Your email address -Activation Code: {5} - -Thank you, -{2} Staff"; - -$l['email_activateaccount2'] = "{1}, - -To complete the registration process on {2}, you will need to go to the URL below in your web browser. - -{3}/member.php?action=activate&uid={4}&code={5} - -If the above link does not work correctly, go to - -{3}/member.php?action=activate - -You will need to enter the following: -Username: {1} (Or your email address) -Activation Code: {5} - -Thank you, -{2} Staff"; - -$l['email_subscription'] = "{1}, - -{2} has just replied to a thread which you have subscribed to at {3}. This thread is titled {4}. - -Here is an excerpt of the message: ------------------------------------------- -{5} ------------------------------------------- - -To view the thread, you can go to the following URL: -{6}/{7} - -There may also be other replies to this thread but you will not receive anymore notifications until you visit the board again. - -Thank you, -{3} Staff - ------------------------------------------- -Unsubscription Information: - -If you would not like to receive any more notifications of replies to this thread, visit the following URL in your browser: -{6}/usercp2.php?action=removesubscription&tid={8}&my_post_key={9} - -------------------------------------------"; -$l['email_reachedpmquota'] = "{1}, - -This is an automated email from {2} to let you know that your Private Messaging inbox has reached its capacity. - -One or more users may have tried to send you private messages and were unsuccessful in doing so because of this. - -Please delete some of your private messages you currently have stored, remembering to also delete them from the 'Trash Can'. - -Thank you, -{2} Staff -{3}"; -$l['email_changeemail'] = "{1}, - -We have received a request on {2} to change your email address (see details below). - -Old Email Address: {3} -New Email Address: {4} - -If these changes are correct, please complete the validation process on {2} by going to the following URL in your web browser. - -{5}/member.php?action=activate&uid={8}&code={6} - -If the above link does not work correctly, go to - -{5}/member.php?action=activate - -You will need to enter the following: -Username: {7} -Activation Code: {6} - -If you choose not to validate your new email address your profile will not be updated and will still contain your existing email address. - -Thank you, -{2} Staff -{5}"; - -$l['email_changeemail_noactivation'] = "{1}, - -We have received a request on {2} to change your email address (see details below). - -Old Email Address: {3} -New Email Address: {4} - -This change has been automatically processed. If you did not request this change, please get in touch with an Administrator. - -Thank you, -{2} Staff -{5}"; - -$l['email_changepassword'] = "{1}, - -You are receiving this email because you, or someone with access to your password, recently changed your account password. - -Username: {1} -Email address: {2} - -If you did not request this change, please get in touch with an Administrator. - -Thank you, -{3} Staff -{4}"; - -$l['email_newpm'] = "{1}, - -You have received a new private message on {3} from {2}: - ------------------------------------------- -{5} ------------------------------------------- - -To view, reply or forward this message, you can follow this link: - -{4}/private.php - -Please note that you will not receive any further notifications of new messages until you visit {3}. - -You can disable new message notifications on your account options page: - -{4}/usercp.php?action=options - -Thank you, -{3} Staff -{4}"; - -$l['email_emailuser'] = "{1}, - -{2} from {3} has sent you the following message: ------------------------------------------- -{5} ------------------------------------------- - -Thank you, -{3} Staff -{4} - ------------------------------------------- -Don't want to receive email messages from other members? - -If you don't want other members to be able to email you please visit your User Control Panel and enable the option 'Hide your email from other members': -{4}/usercp.php?action=options - -------------------------------------------"; - -$l['email_groupleader_joinrequest'] = "{1}, - -{2} has requested to join {3} on {4} (see below). - -Reason: {5} - -To accept or decline this request, go to - -{6}/managegroup.php?gid={7} - -Thank you, -{4} Staff"; - -$l['email_contact_subject'] = "Contact: {1}"; -$l['email_contact'] = "E-mail: {1} -Forum profile: {2} -IP Address: {3} -Message: -{4}"; - -$l['pmsubject_subscription'] = "New Reply to {1}"; -$l['pm_subscription'] = "{1}, - -{2} has just replied to a thread which you have subscribed to. This thread is titled {3}. - -Here is an excerpt of the message: ------------------------------------------- -{4} ------------------------------------------- - -To view the thread, you can go to the following URL: -[url]{5}/{6}[/url] - -There may also be other replies to this thread but you will not receive anymore notifications until you visit the thread again. - ------------------------------------------- -Unsubscription Information: - -If you would not like to receive any more notifications of replies to this thread, visit the following URL in your browser: -[url]{5}/usercp2.php?action=removesubscription&tid={7}&my_post_key={8}[/url] - -------------------------------------------"; - -$l['email_broken_task_subject'] = "MyBB task error on {1}"; -$l['email_broken_task'] = "Your copy of MyBB running on {1} ({2}) has experienced an error with the task system. - -The task file for {3} is missing. - -This task has been disabled until issue is resolved."; diff --git a/html/forums/inc/languages/english/misc.lang.php b/html/forums/inc/languages/english/misc.lang.php deleted file mode 100644 index 9b9980e..0000000 --- a/html/forums/inc/languages/english/misc.lang.php +++ /dev/null @@ -1,98 +0,0 @@ -You have no online buddies"; -$l['offline'] = "Offline"; -$l['offline_none'] = "You have no offline buddies"; -$l['delete_buddy'] = "X"; -$l['pm_buddy'] = "Send Private Message"; -$l['last_active'] = "Last Active: {1}"; -$l['close'] = "Close"; -$l['no_buddies'] = "Your buddy list is currently empty. Use your User CP or visit a user profile to add users to your buddy list."; - -$l['help_docs'] = "Help Documents"; - -$l['search_help_documents'] = "Search Help Documents"; -$l['search_by_name'] = "Search by Name"; -$l['search_by_document'] = "Search by Document"; -$l['enter_keywords'] = "Enter Keywords"; -$l['search'] = "Search"; -$l['redirect_searchresults'] = "Thank you, your search has been submitted and you will now be taken to the results list."; -$l['search_results'] = "Search Results"; -$l['help_doc_results'] = "Help Document Results"; -$l['document'] = "Document"; -$l['error_nosearchresults'] = "Sorry, but no results were returned using the query information you provided. Please redefine your search terms and try again."; -$l['no_help_results'] = "Sorry, but no results were returned using the query information you provided."; -$l['error_helpsearchdisabled'] = "The ability to search the help documents has been disabled by the Administrator."; - -$l['smilies_listing'] = "Smilies Listing"; -$l['name'] = "Name"; -$l['abbreviation'] = "Abbreviation"; -$l['click_to_add'] = "Click a smilie to insert it into your message"; -$l['close_window'] = "close window"; -$l['no_smilies'] = "There are currently no smilies available."; - -$l['who_posted'] = "Who Posted?"; -$l['total_posts'] = "Total Posts:"; -$l['user'] = "User"; -$l['num_posts'] = "# Posts"; - -$l['forum_rules'] = "{1} - Rules"; - -$l['error_invalid_limit'] = "The feed item limit you entered is invalid. Please specify a valid limit."; - -$l['syndication'] = "Latest Thread Syndication"; -$l['syndication_generated_url'] = "Your Generated Syndication URL:"; -$l['syndication_note'] = "Below you can generate links to specific RSS syndication feeds. Links can be generated for all forums, per forum, or for a specific number of forums. You will then be presented with a link which you can copy in to an RSS reader. What is RSS?"; -$l['syndication_forum'] = "Forum to Syndicate:"; -$l['syndication_forum_desc'] = "Please select a forum from the right. Use the CTRL key to select multiple forums."; -$l['syndication_version'] = "Feed Version:"; -$l['syndication_version_desc'] = "Please select the version of the feeds you wish to generate."; -$l['syndication_version_atom1'] = "Atom 1.0"; -$l['syndication_version_rss2'] = "RSS 2.00 (Default)"; -$l['syndication_generate'] = "Generate Syndication URL"; -$l['syndication_limit'] = "Limit:"; -$l['syndication_limit_desc'] = "The amount of threads to download at one time. 50 at once is maximum limit."; -$l['syndication_threads_time'] = "threads at a time"; -$l['syndicate_all_forums'] = "Syndicate All Forums"; - -$l['redirect_markforumread'] = "The selected forum has been marked as read."; -$l['redirect_markforumsread'] = "All the forums have been marked as read."; -$l['redirect_forumpasscleared'] = "The stored password for this forum has been cleared."; -$l['redirect_cookiescleared'] = "All cookies have been cleared."; - -$l['error_invalidforum'] = "Invalid forum"; -$l['error_invalidhelpdoc'] = "The specified help document does not appear to exist."; -$l['error_invalidimtype'] = "This user does not have this type of instant messenger account specified in their profile."; -$l['error_invalidsearch'] = "An invalid search was specified. Please go back and try again."; -$l['error_no_search_support'] = "This database engine does not support searching."; -$l['error_searchflooding'] = "Sorry, but you can only perform one search every {1} seconds. Please wait another {2} seconds before attempting to search again."; -$l['error_searchflooding_1'] = "Sorry, but you can only perform one search every {1} seconds. Please wait another 1 second before attempting to search again."; - -$l['dst_settings_updated'] = "Your daylight saving time settings have automatically been adjusted.

    You will now be taken back to the forum index."; diff --git a/html/forums/inc/languages/english/modcp.lang.php b/html/forums/inc/languages/english/modcp.lang.php deleted file mode 100644 index 99e5675..0000000 --- a/html/forums/inc/languages/english/modcp.lang.php +++ /dev/null @@ -1,329 +0,0 @@ -Post by {2}"; -$l['report_info_post_thread'] = "
    In {2}"; -$l['report_info_profile'] = "Profile of {1}"; -$l['report_info_reputation'] = "Reputation from {2}"; -$l['report_info_rep_profile'] = "
    On {1}'s profile"; -$l['report_info_lastreporter'] = "{1}
    by {2}"; - -$l['moderator_notes'] = "Moderator Notes"; -$l['notes_public_all'] = "These notes are public to all moderators."; -$l['save_notes'] = "Save Notes"; -$l['bans_ending_soon'] = "Bans Ending Soon"; -$l['latest_5_modactions'] = "5 Latest Moderator Actions"; -$l['awaiting_moderation'] = "Awaiting Moderation"; -$l['type'] = "Type"; -$l['number_awaiting'] = "Number Awaiting"; -$l['latest'] = "Latest"; -$l['ipsearch'] = "IP Search"; -$l['ipsearch_results'] = "IP Search Results for '{1}'"; -$l['ipaddress_search'] = "IP Address Search"; -$l['ipaddress_misc_info'] = "Misc. Information for '{1}'"; -$l['ipaddress_host_name'] = "Host Name:"; -$l['ipaddress_location'] = "GeoIP Location:"; -$l['search_users'] = "Search Users"; -$l['search_posts'] = "Search Posts"; -$l['ip_address'] = "IP Address:"; -$l['result'] = "Result"; -$l['ipresult_regip'] = "Registration IP:"; -$l['ipresult_lastip'] = "Last Known IP:"; -$l['ipresult_post'] = "Post:"; -$l['subject'] = "Subject"; -$l['username'] = "Username"; -$l['ipaddress'] = "IP Address"; -$l['options'] = "Options:"; -$l['find'] = "Find"; -$l['modlogs'] = "Moderator Logs"; -$l['action'] = "Action"; -$l['all_moderators'] = "All Moderators"; -$l['ip'] = "IP Address"; -$l['info_on_ip'] = "Information on this IP Address"; -$l['search_ip_sfs'] = "Search this IP on Stop Forum Spam"; -$l['information'] = "Information"; -$l['filter_modlogs'] = "Filter Moderator Logs"; -$l['forum'] = "Forum"; -$l['post'] = "Post"; -$l['from_moderator'] = "From Moderator:"; -$l['na_deleted'] = "N/A - Been Deleted"; -$l['sort_by'] = "Sort by:"; -$l['forum_name'] = "Forum Name"; -$l['thread_subject'] = "Thread Subject"; -$l['in'] = "in"; -$l['order'] = "order"; -$l['asc'] = "Ascending"; -$l['desc'] = "Descending"; -$l['per_page'] = "Results Per Page:"; -$l['filter_logs'] = "Filter Logs"; -$l['error_no_log_results'] = "Sorry, there were no results found with the criteria you selected."; -$l['find_users'] = "Search for Users"; -$l['users'] = "Users"; -$l['regdate'] = "Registration Date"; -$l['lastvisit'] = "Last Visit"; -$l['postnum'] = "Post Count"; -$l['username_contains'] = "Username contains:"; -$l['no_user_results'] = "No users were found with the specified search criteria."; -$l['edit_profile'] = "Edit Profile of {1}"; -$l['birthday'] = "Date of Birth:"; -$l['title'] = "User Title:"; -$l['profile_required'] = "Required Fields"; -$l['remove_avatar'] = "Remove user's avatar?"; -$l['profile_optional'] = "Optional Fields"; -$l['website_url'] = "Website URL:"; -$l['birthdate'] = "Birthdate:"; -$l['icq_number'] = "ICQ Number:"; -$l['aim_screenname'] = "AIM Screen Name:"; -$l['yahoo_id'] = "Yahoo ID:"; -$l['skype_id'] = "Skype ID:"; -$l['google_id'] = "Google Hangouts ID:"; -$l['away_notice'] = "This option will allow you to select whether you are away or not."; -$l['additional_information'] = "Additional Information"; -$l['update_profile'] = "Update Profile"; -$l['custom_usertitle'] = "Custom User Title"; -$l['new_custom_usertitle'] = "New Custom User Title: (leave blank to use existing)"; -$l['custom_usertitle_note'] = "Here you can assign a custom user title which will overwrite the one based on users display group."; -$l['default_usertitle'] = "Default User Title:"; -$l['current_custom_usertitle'] = "Current Custom User Title:"; -$l['revert_usertitle'] = "Revert to group default"; -$l['additional_contact_details'] = "Additional Contact Details"; -$l['current_username'] = "Username:"; -$l['away_information'] = "Away Information"; -$l['away_status'] = "Away Status:"; -$l['away_status_desc'] = "Allows you to leave an away message if you are going away for a while."; -$l['im_away'] = "I'm Away"; -$l['im_here'] = "I'm Here"; -$l['away_reason'] = "Away Reason:"; -$l['away_reason_desc'] = "Allows you to enter a small description of why you are away (max 200 characters)."; -$l['return_date'] = "Return Date:"; -$l['return_date_desc'] = "If you know when you will be back, you can enter your return date here."; -$l['error_modcp_return_date_past'] = "You cannot return in the past!"; -$l['usergroup'] = "Primary Group"; -$l['redirect_user_updated'] = "The users profile has successfully been updated."; -$l['posts_awaiting_moderation'] = "Posts Awaiting Moderation"; -$l['threads_awaiting_moderation'] = "Threads Awaiting Moderation"; -$l['attachments_awaiting_moderation'] = "Attachments Awaiting Moderation"; -$l['mod_queue'] = "Moderation Queue"; -$l['approve'] = "Approve"; -$l['ignore'] = "Ignore"; -$l['perform_actions'] = "Perform Actions"; -$l['author'] = "Author"; -$l['threads'] = "Threads"; -$l['posts'] = "Posts"; -$l['filename'] = "Filename"; -$l['thread_post'] = "Thread / Post"; -$l['permanent'] = "Permanent"; -$l['ban_error'] = "Error"; -$l['ban_banned'] = "Banned Users"; -$l['ban_user'] = "Ban a User"; -$l['reason'] = "Reason"; -$l['ban_username'] = "Username:"; -$l['ban_reason'] = "Reason:"; -$l['ban_length'] = "Length"; -$l['ban_remaining'] = "remaining"; -$l['ban_ending_imminently'] = "Ban Ending Imminently"; -$l['ban_bannedby'] = "Banned By"; -$l['ban_movegroup'] = "Move to Banned Group:"; -$l['ban_liftafter'] = "Lift Ban After:"; -$l['no_banned'] = "There are currently no banned users."; -$l['no_banned_group'] = "There are currently no banned groups."; -$l['redirect_banuser'] = "The user has successfully been banned."; -$l['redirect_banuser_updated'] = "The user's ban has successfully been updated."; -$l['invalid_username'] = "The username you entered was invalid. Please ensure you enter a valid username."; -$l['error_useralreadybanned'] = "This user is already banned. You cannot ban a user more than once."; -$l['error_cannotbanuser'] = "You cannot ban this user because they have higher permissions than you. Please contact your administrator if you wish to ban this user."; -$l['error_cannotbanself'] = "You cannot ban yourself. Please enter another username."; -$l['error_no_perm_to_ban'] = "You do not have permission to ban this user."; -$l['error_nobanreason'] = "You did not enter a reason for this ban. Please enter a valid reason below."; -$l['error_nobangroup'] = "You did not select a valid group to move this user to."; -$l['edit_ban'] = "Edit Ban"; -$l['lift_ban'] = "Lift Ban"; -$l['ban'] = "Ban"; -$l['error_invalidban'] = "You have selected an invalid ban."; -$l['redirect_banlifted'] = "The ban has successfully been lifted."; -$l['mark_all_ignored'] = "Mark all as ignored"; -$l['mark_all_deletion'] = "Mark all for deletion"; -$l['mark_all_approved'] = "Mark all as approved"; -$l['meta_forum'] = "Forum:"; -$l['meta_thread'] = "Thread:"; -$l['mod_queue_empty'] = "All of the moderation queues are currently empty."; -$l['mod_queue_threads_empty'] = "The thread moderation queue is currently empty."; -$l['mod_queue_posts_empty'] = "The posts moderation queue is currently empty."; -$l['mod_queue_attachments_empty'] = "The attachment moderation queue is currently empty."; -$l['redirect_threadsmoderated'] = "The selected threads have been moderated."; -$l['redirect_postsmoderated'] = "The selected posts have been moderated."; -$l['redirect_attachmentsmoderated'] = "The selected attachments have been moderated."; -$l['multi_approve_posts'] = "Selected Posts Approved"; -$l['multi_delete_posts'] = "Selected Posts Deleted Permanently"; -$l['multi_soft_delete_posts'] = "Selected Posts Soft Deleted"; -$l['multi_approve_threads'] = "Selected Threads Approved"; -$l['multi_delete_threads'] = "Selected Threads Deleted Permanently"; -$l['multi_soft_delete_threads'] = "Selected Threads Soft Deleted"; -$l['edited_user'] = "Edited User's Profile"; -$l['edited_user_info'] = "User: {1}"; -$l['edited_user_ban'] = "Edited User Ban"; -$l['banned_user'] = "Banned User"; -$l['lifted_ban'] = "Lifted User Ban"; -$l['no_bans_ending'] = "There are no bans ending soon."; - -$l['warning_logs'] = "Warning Logs"; -$l['warned_user'] = "Warned User"; -$l['warning'] = "Warning"; -$l['date_issued'] = "Date Issued"; -$l['expires'] = "Expires"; -$l['expiry_date'] = "Expiry Date"; -$l['issued_date'] = "Issued Date"; -$l['issued_by'] = "Issued By"; -$l['details'] = "Details"; -$l['filter_warning_logs'] = "Filter Warning Logs"; -$l['filter_warned_user'] = "Warned user:"; -$l['filter_issued_by'] = "Warning issued by:"; -$l['filter_reason'] = "Reason contains:"; -$l['view'] = "View"; -$l['no_warning_logs'] = "There are no warning logs to view."; -$l['revoked'] = "Revoked "; -$l['signature'] = "Signature"; -$l['suspend_signature'] = "Suspend this user's signature"; -$l['suspend_length'] = "Suspension length:"; -$l['mod_notes'] = "Moderator Notes"; -$l['moderation'] = "Moderator Options"; -$l['moderate_posts'] = "Moderate this user's posts"; -$l['suspend_posts'] = "Suspend this user's posting privileges"; -$l['modpost_length'] = "Moderate for:"; -$l['suspost_length'] = "Suspend for:"; - -$l['moderateposts_for'] = "Moderated until {1}.
    Untick this option to remove, or extend below."; -$l['suspendposting_for'] = "Suspended until {1}.
    Untick this option to remove, or extend below."; -$l['suspendsignature_for'] = "Suspended until {1}.
    Untick this option to remove, or extend below."; -$l['suspendposting_perm'] = "Suspended permanently.
    Untick this option to remove, or change below."; -$l['moderateposts_perm'] = "Moderated permanently.
    Untick this option to remove, or change below."; -$l['suspendsignature_perm'] = "Suspended permanently.
    Untick this option to remove, or change below."; -$l['suspendsignature_error'] = "You selected to suspend this user's signature, but didn't enter a valid time period. Please enter a valid time to continue or untick the option to cancel."; -$l['moderateposting_error'] = "You selected to moderate this user's posts, but didn't enter a valid time period. Please enter a valid time to continue or untick the option to cancel."; -$l['suspendposting_error'] = "You selected to suspend this user's posts, but didn't enter a valid time period. Please enter a valid time to continue or untick the option to cancel."; -$l['suspendmoderate_error'] = "You've selected to suspend and moderate the user's posts. Please select only one type of moderation."; - -$l['expire_hours'] = "hour(s)"; -$l['expire_days'] = "day(s)"; -$l['expire_weeks'] = "week(s)"; -$l['expire_months'] = "month(s)"; -$l['expire_permanent'] = "Permanent"; - -$l['manage_announcement'] = "Manage Announcements"; -$l['forum_announcements'] = "Forum Announcements"; -$l['announcement'] = "Announcement"; -$l['controls'] = "Controls"; -$l['expired_announcement'] = "Expired Announcement"; -$l['active_announcement'] = "Active Announcement"; -$l['active'] = "Active"; -$l['expired'] = "Expired"; -$l['edit'] = "Edit"; -$l['add_announcement'] = "Add Announcement"; -$l['edit_announcement'] = "Edit Announcement"; -$l['no_forum_announcements'] = "There are currently no forum announcements on your board."; -$l['no_global_announcements'] = "There are currently no global announcements on your board."; -$l['add_global_announcement'] = "Add Global Announcement"; -$l['global_announcements'] = "Global Announcements"; -$l['title'] = "Title"; -$l['start_date'] = "Start Date"; -$l['time'] = "Time:"; -$l['end_date'] = "End Date"; -$l['never'] = "Never"; -$l['allow_html'] = "Allow HTML"; -$l['allow_mycode'] = "Allow MyCode"; -$l['allow_smilies'] = "Allow Smilies"; -$l['reset'] = "Reset"; -$l['january'] = "January"; -$l['february'] = "February"; -$l['march'] = "March"; -$l['april'] = "April"; -$l['may'] = "May"; -$l['june'] = "June"; -$l['july'] = "July"; -$l['august'] = "August"; -$l['september'] = "September"; -$l['october'] = "October"; -$l['november'] = "November"; -$l['december'] = "December"; -$l['delete_announcement'] = "Delete Announcement"; -$l['confirm_delete_announcement'] = "Are you sure you want to delete this announcement?"; -$l['redirect_add_announcement'] = "The announcement has been created."; -$l['redirect_edit_announcement'] = "The announcement has been edited."; -$l['redirect_delete_announcement'] = "The announcement has been deleted."; -$l['error_missing_title'] = "You did not enter a title."; -$l['error_missing_message'] = "You did not enter a message."; -$l['error_missing_forum'] = "You did not select a forum."; -$l['error_invalid_start_date'] = "The starting date for the announcement is invalid."; -$l['error_invalid_end_date'] = "The ending date for the announcement is invalid."; -$l['error_end_before_start'] = "The ending date must be after the start date."; -$l['error_invalid_announcement'] = "The specified announcement is invalid."; - -$l['announcement_added'] = "Announcement Added"; -$l['announcement_edited'] = "Announcement Edited"; -$l['announcement_deleted'] = "Announcement Deleted"; - -$l['preview'] = 'Preview'; - -$l['you_cannot_view_mod_logs'] = "You do not have sufficient permission to view the Moderator Logs."; -$l['you_cannot_view_reported_posts'] = "You do not have sufficient permission to view Reported Posts."; -$l['you_cannot_manage_announcements'] = "You do not have sufficient permission to manage Announcements."; -$l['you_cannot_moderate_threads'] = "You do not have sufficient permission to moderate threads."; -$l['you_cannot_moderate_posts'] = "You do not have sufficient permission to moderate posts."; -$l['you_cannot_moderate_attachments'] = "You do not have sufficient permission to moderate attachments."; -$l['you_cannot_use_mod_queue'] = "You do not have sufficient permission to use the Mod Queue."; - -$l['post'] = 'Post'; diff --git a/html/forums/inc/languages/english/moderation.lang.php b/html/forums/inc/languages/english/moderation.lang.php deleted file mode 100644 index 34b2a9b..0000000 --- a/html/forums/inc/languages/english/moderation.lang.php +++ /dev/null @@ -1,221 +0,0 @@ -The thread on the right will be deleted and all posts will be merged in to this one."; -$l['merge_posts'] = "Merge Posts"; -$l['merge_posts_note'] ="All selected posts will be merged in to the first selected post."; -$l['move_copy_thread'] = "Move / Copy Thread"; -$l['new_forum'] = "New Forum:"; -$l['method'] = "Method"; -$l['method_move'] = "Move thread"; -$l['method_move_redirect'] = "Move thread and leave redirect in existing forum for days:"; -$l['redirect_expire_note'] = "(leave blank for 'infinite')"; -$l['method_copy'] = "Copy thread to the new forum"; -$l['split_thread_subject'] = "[split]"; -$l['split_thread'] = "Split Thread"; -$l['move_posts'] = "Move Posts"; -$l['thread_to_move_to'] = "Thread to move the posts to:"; -$l['move_post_note'] = "Copy the URL of the thread to move these posts to into the textbox on the right."; -$l['new_thread_info'] = "New Thread Information"; -$l['posts_to_split'] = "Posts to Split"; -$l['thread_notes_editor'] = "Thread Notes Editor"; -$l['below_notes'] = "Below you can edit the notes for this thread."; -$l['update_notes'] = "Update Thread Notes"; -$l['mod_logs'] = "Moderator Logs (showing last 20 actions)"; -$l['mod_username'] = "Username"; -$l['mod_date'] = "Date"; -$l['mod_actions'] = "Action"; -$l['mod_information'] = "Information"; -$l['read'] = "Read:"; -$l['thread'] = "Thread:"; -$l['post'] = "Post:"; -$l['forum'] = "Forum:"; -$l['confirm_execute_tool'] = "Execute Tool"; -$l['confirm_execute_tool_desc'] = "Are you sure you wish to execute the {1} custom moderation tool? Once a tool is executed it may not be able to revert the applied changes."; -$l['delete_threads'] = "Delete Threads Permanently"; -$l['confirm_delete_threads'] = "Are you sure you wish to delete the selected threads? Once a thread has been deleted it cannot be restored and any posts, attachments or polls within that thread are also deleted."; -$l['move_threads'] = "Move Threads"; -$l['confirm_delete_posts'] = "Are you sure you wish to delete the selected posts from the thread? Once they have been deleted they cannot be restored. If there are no posts left in the thread, the thread will also be deleted."; -$l['post_separator'] = "Post Separator"; -$l['new_line'] = "New Line"; -$l['horizontal_rule'] = "Horizontal Rule"; -$l['resolve_fail'] = "N/A (Unable to resolve)"; -$l['time'] = "Time:"; - -$l['opened'] = "Opened"; -$l['closed'] = "Closed"; -$l['stuck'] = "Stuck"; -$l['unstuck'] = "Unstuck"; -$l['mod_process'] = "Thread {1}"; -$l['redirects_removed'] = "Thread Redirects Removed"; -$l['thread_deleted'] = "Thread Deleted Permanently: {1}"; -$l['poll_deleted'] = "Poll Deleted: {1}"; -$l['thread_approved'] = "Thread Approved: {1}"; -$l['thread_unapproved'] = "Thread Unapproved: {1}"; -$l['thread_restored'] = "Thread Restored: {1}"; -$l['thread_soft_deleted'] = "Thread Soft Deleted: {1}"; -$l['deleted_selective_posts'] = "Deleted Selective Posts ({1})"; -$l['merged_selective_posts'] = "Merged Selective Posts"; -$l['split_selective_posts'] = "Split posts (PIDs: {1}) to thread (TID: {2})"; -$l['move_selective_posts'] = "Moved posts (PIDs: {1}) to thread (TID: {2})"; -$l['removed_subscriptions'] = "Removed All Subscriptions"; -$l['thread_moved'] = "Thread Moved"; -$l['thread_copied'] = "Thread Copied"; -$l['thread_merged'] = "Threads Merged"; -$l['thread_split'] = "Thread Split"; -$l['thread_notes_edited'] = "Thread Notes Edited"; -$l['multi_deleted_threads'] = "Threads Deleted Permanently"; -$l['multi_opened_threads'] = "Threads Opened"; -$l['multi_closed_threads'] = "Threads Closed"; -$l['multi_approved_threads'] = "Threads Approved"; -$l['multi_unapproved_threads'] = "Threads Unapproved"; -$l['multi_restored_threads'] = "Threads Restored"; -$l['multi_soft_deleted_threads'] = "Threads Soft Deleted"; -$l['multi_approve_posts'] = "Selected Posts Approved"; -$l['multi_unapprove_posts'] = "Selected Posts Unapproved"; -$l['multi_restore_posts'] = "Selected Posts Restored"; -$l['multi_soft_delete_posts'] = "Selected Posts Soft Deleted"; -$l['multi_stuck_threads'] = "Threads Stuck"; -$l['multi_unstuck_threads'] = "Threads Unstuck"; -$l['multi_moved_threads'] = "Threads Moved"; -$l['multi_copied_threads'] = "Threads Copied"; -$l['custom_tool'] = "Custom Moderator Tool: {1}"; - -$l['delayed_moderation'] = "Delayed Moderation"; -$l['delayed_moderation_desc'] = "Here you can delay a moderation action for a selected number of days."; -$l['threads'] = "Threads:"; -$l['threads_selected'] = "{1} thread(s) selected"; -$l['run_moderation_time'] = "Run moderation time:"; -$l['days'] = "day(s)"; -$l['moderation_action'] = "Moderation Action:"; -$l['open_close_thread'] = "Open/Close Thread"; -$l['remove_redirects'] = "Remove Redirects"; -$l['remove_subscriptions'] = "Remove Subscriptions"; -$l['approve_unapprove_thread'] = "Approve/Unapprove Thread"; -$l['softdelete_restore_thread'] = "Soft Delete/Restore Thread"; -$l['stick_unstick_thread'] = "Stick/Unstick Thread"; -$l['save_delayed_moderation'] = "Save Delayed Moderation"; -$l['custom'] = "custom"; -$l['delayed_mod_queue'] = "Delayed Moderation Queue"; -$l['days_to_perform_action'] = "Days to Perform Action"; -$l['leave_redirect'] = "Lead Redirect:"; -$l['multiple_threads'] = "Multiple Threads"; -$l['actions'] = "Actions"; -$l['cancel'] = "Cancel"; -$l['leave_redirect_for'] = "Leave redirect for:"; -$l['redirect_forever'] = "Forever"; -$l['view_notes_for'] = "Viewing Notes for {1}"; - -$l['purgespammer'] = "Purge Spammer"; -$l['purgespammer_purge'] = "Purge spammer {1}"; -$l['purgespammer_purge_desc'] = "This will delete user's whole content (posts, private messages, events, etc.) and {1} them."; -$l['purgespammer_ban'] = "ban"; -$l['purgespammer_delete'] = "delete"; -$l['purgespammer_submit'] = "Purge Spammer"; -$l['purgespammer_success'] = "The user has been purged."; -$l['purgespammer_invalid_user'] = "You have specified an invalid user."; -$l['purgespammer_modlog'] = "Purged Spammer"; - -$l['error_invalidpm'] = "Invalid PM"; -$l['error_nomergeposts'] = "You need to select one or more posts to be able to merge posts together."; -$l['error_cantsplitonepost'] = "You cannot split a thread that contains only one post."; -$l['error_badmergeurl'] = "The URL for the thread to be merged seems to be invalid or empty. Please copy the exact URL into the textbox.
    Please go back and try again."; -$l['error_badmovepostsurl'] = "The URL for the thread to move to seems to be invalid or empty. Please copy the exact URL into the textbox.
    Please go back and try again."; -$l['error_inline_nothreadsselected'] = "Sorry, but you did not select any threads to perform inline moderation on, or your previous moderation session has expired (Automatically after 1 hour of inactivity). Please select some threads and try again."; -$l['error_inline_nopostsselected'] = "Sorry, but you did not select any posts to perform inline moderation on, or your previous moderation session has expired (Automatically after 1 hour of inactivity). Please select some posts and try again."; -$l['error_movetocategory'] = "This tool is trying to move the thread into a category. Please alter the tool and select a valid forum."; -$l['error_cantsplitall'] = "You cannot split all of the posts out of this thread! If you did, what would be left in the thread?"; -$l['error_cantmoveall'] = "You cannot move all of the posts out of this thread! If you did, what would be left in the thread?"; -$l['error_nosplitposts'] = "You cannot split this thread as you did not select any posts to split from this thread."; -$l['error_movetosameforum'] = "You cannot move this thread into the forum it is currently situated in. Please select a different forum."; -$l['error_mergewithself'] = "Threads cannot be merged with themselves.
    Please go back and enter a valid URL."; -$l['error_movetoself'] = "Posts cannot be moved to the thread they are in.
    Please go back and enter a valid URL."; -$l['error_delayedmoderation_unsupported_type'] = "Sorry, but you did not select a valid type for this delayed moderation action."; -$l['error_delayedmoderation_unsupported_method'] = "Sorry, but you did not select a valid move method for this delayed moderation action."; -$l['error_delayedmoderation_invalid_date_day'] = "Sorry, but you did not select a valid delay date day for this delayed moderation action."; -$l['error_delayedmoderation_invalid_date_month'] = "Sorry, but you did not select a valid delay date month for this delayed moderation action."; -$l['error_delayedmoderation_invalid_date_year'] = "Sorry, but you did not select a valid delay date year for this delayed moderation action."; - -$l['redirect_pollnotdeleted'] = "The poll was not deleted because you did not check the \"Delete\" checkbox."; -$l['redirect_polldeleted'] = "Thank you, the poll has successfully been removed from the thread.
    You will now be taken back to the thread."; -$l['redirect_mergeposts'] = "The selected posts have now been merged together. You will now be returned to the thread."; -$l['redirect_openthread'] = "Thank you, the thread has successfully been opened.
    You will now be returned to the thread."; -$l['redirect_closethread'] = "Thank you, the thread has successfully been closed.
    You will now be returned to the thread."; -$l['redirect_stickthread'] = "Thank you, the thread has successfully been stuck.
    You will now be returned to the thread."; -$l['redirect_unstickthread'] = "Thank you, the thread has successfully been unstuck.
    You will now be returned to the thread."; -$l['redirect_threaddeleted'] = "Thank you, the thread has been deleted permanently.
    You will now be returned to the forum."; -$l['redirect_threadmoved'] = "The thread has been moved or copied to the selected forum successfully.
    You will now be returned to it."; -$l['redirect_redirectsremoved'] = "All move redirects to this thread have now been removed.
    You will now be returned to the thread."; -$l['redirect_threadapproved'] = "The thread has been approved successfully."; -$l['redirect_threadunapproved'] = "The thread has been unapproved successfully."; -$l['redirect_threadrestored'] = "The thread has been restored successfully."; -$l['redirect_threadsoftdeleted'] = "The thread has been soft deleted successfully."; -$l['redirect_threadsplit'] = "The thread has been split successfully.
    You will now be taken to the new thread."; -$l['redirect_moveposts'] = "The posts have been moved successfully.
    You will now be taken to the new thread the posts are in."; -$l['redirect_threadnotesupdated'] = "Thank you, the notes for this thread have successfully been updated.
    You will now be returned to the thread."; -$l['redirect_threadsmerged'] = "Thank you, the two threads have successfully been merged together.
    You will now be taken to the new thread."; -$l['redirect_inline_threadsdeleted'] = "The selected threads have been deleted permanently.
    You will now be returned to your previous location."; -$l['redirect_inline_threadsopened'] = "The selected threads have been opened.
    You will now be returned to your previous location."; -$l['redirect_inline_threadsclosed'] = "The selected threads have been closed.
    You will now be returned to your previous location."; -$l['redirect_inline_threadsstuck'] = "The selected threads have been stuck.
    You will now be returned to your previous location."; -$l['redirect_inline_threadsunstuck'] = "The selected threads have been unstuck.
    You will now be returned to your previous location."; -$l['redirect_inline_threadsmoved'] = "The selected threads have been moved.
    You will now be taken to the new forum the threads are in."; -$l['redirect_inline_threadsapproved'] = "The selected threads have been approved.
    You will now be returned to your previous location."; -$l['redirect_inline_threadsunapproved'] = "The selected threads have been unapproved.
    You will now be returned to your previous location."; -$l['redirect_inline_threadsrestored'] = "The selected threads have been restored.
    You will now be returned to your previous location."; -$l['redirect_inline_threadssoftdeleted'] = "The selected threads have been soft deleted.
    You will now be returned to your previous location."; -$l['redirect_inline_postsmerged'] = "The selected posts have been merged together.
    You will now be returned to your previous location."; -$l['redirect_inline_postsapproved'] = "The selected posts have been approved.
    You will now be returned to your previous location."; -$l['redirect_inline_postsunapproved'] = "The selected posts have been unapproved.
    You will now be returned to your previous location."; -$l['redirect_inline_postsrestored'] = "The selected posts have been restored.
    You will now be returned to your previous location."; -$l['redirect_inline_postssoftdeleted'] = "The selected posts have been soft deleted.
    You will now be returned to your previous location."; -$l['redirect_postsdeleted'] = "The selected posts have been deleted permanently.
    You will now be returned to your previous location."; -$l['redirect_removed_subscriptions'] = "All subscriptions for this thread have been removed successfully.
    You will now be returned to the thread."; -$l['redirect_customtool_thread'] = "\"{1}\" moderation tool executed successfully.
    You will now be returned to the thread."; -$l['redirect_customtool_forum'] = "\"{1}\" moderation tool executed successfully.
    You will now be returned to the forum."; -$l['redirect_customtool_search'] = "\"{1}\" moderation tool executed successfully.
    You will now be returned to the search."; -$l['redirect_delayed_moderation_thread'] = "The selected moderation tool has been saved and delayed till {1}.
    You will now be returned to the thread."; -$l['redirect_delayed_moderation_forum'] = "The selected moderation tool has been saved and delayed till {1}.
    You will now be returned to the forum."; -$l['redirect_delayed_moderation_search'] = "The selected moderation tool has been saved and delayed till {1}.
    You will now be returned to the search."; -$l['redirect_delayed_moderation_cancelled'] = "The selected delayed moderation action has been canceled.
    You will now be returned to the delayed moderation page."; diff --git a/html/forums/inc/languages/english/newreply.lang.php b/html/forums/inc/languages/english/newreply.lang.php deleted file mode 100644 index 1cde563..0000000 --- a/html/forums/inc/languages/english/newreply.lang.php +++ /dev/null @@ -1,53 +0,0 @@ -Signature: include your signature. (registered users only)"; -$l['options_emailnotify'] = "Email Notification: receive an email whenever there is a new reply. (registered users only)"; -$l['options_disablesmilies'] = "Disable Smilies: disable smilies from showing in this post."; -$l['post_reply'] = "Post Reply"; -$l['preview_post'] = "Preview Post"; -$l['mod_options'] ="Moderator Options:"; -$l['close_thread'] = "Close Thread: prevent further posting in this thread."; -$l['stick_thread'] = "Stick Thread: stick this thread to the top of the forum."; -$l['forum_rules'] = "{1} - Rules"; -$l['thread_review'] = "Thread Review (Newest First)"; -$l['thread_review_more'] = "This thread has more than {1} replies. Read the whole thread."; -$l['posted_by'] = "Posted by"; -$l['draft_saved'] = "The new post has successfully been saved as a draft.
    You will now be taken to your draft listing."; -$l['error_post_already_submitted'] = "You have already posted this reply to the specified thread. Please visit the thread to see your reply."; -$l['multiquote_external_one'] = "You have selected one post outside of this thread."; -$l['multiquote_external'] = "You have selected {1} posts outside of this thread."; -$l['multiquote_external_one_deselect'] = "deselect this post"; -$l['multiquote_external_deselect'] = "deselect these posts"; -$l['multiquote_external_one_quote'] = "Quote this post too"; -$l['multiquote_external_quote'] = "Quote these posts too"; - -$l['redirect_newreply'] = "Thank you, your reply has been posted."; -$l['redirect_newreply_moderation'] = "The administrator has specified that all new posts require moderation. You will now be returned to the thread."; -$l['redirect_newreply_post'] = "
    You will now be taken to your post."; -$l['redirect_newreplyerror'] = "Sorry, but your reply has been rejected for lack of content.
    You will now be returned to the thread."; -$l['redirect_threadclosed'] = "You cannot post replies in this thread because it has been closed by a moderator."; -$l['error_post_noperms'] = "You don't have permission to edit this draft."; - - -$l['error_stop_forum_spam_spammer'] = 'Sorry, your {1} matches that of a known spammer. If you feel this is a mistake, please contact an administrator'; -$l['error_stop_forum_spam_fetching'] = 'Sorry, something went wrong verifying your reply against a spammer database. Most likely the database couldn\'t be accessed. Please try again later.'; - -$l['error_suspendedposting'] = "Your posting privileges are currently suspended {1}.

    - -Suspension Date: {2}"; -$l['error_suspendedposting_temporal'] = "until {1}"; -$l['error_suspendedposting_permanent'] = "permanently"; - diff --git a/html/forums/inc/languages/english/newthread.lang.php b/html/forums/inc/languages/english/newthread.lang.php deleted file mode 100644 index d42990b..0000000 --- a/html/forums/inc/languages/english/newthread.lang.php +++ /dev/null @@ -1,54 +0,0 @@ -Signature: include your signature. (registered users only)"; -$l['options_emailnotify'] = "Email Notification: receive an email whenever there is a new reply. (registered users only)"; -$l['options_disablesmilies'] = "Disable Smilies: disable smilies from showing in this post."; -$l['post_thread'] = "Post Thread"; -$l['preview_post'] = "Preview Post"; -$l['poll'] = "Poll:"; -$l['poll_desc'] = "Optionally you may attach a poll to this thread."; -$l['poll_check'] = "I want to post a poll"; -$l['num_options'] = "Number of options:"; -$l['max_options'] = "(Maximum: {1})"; -$l['mod_options'] ="Moderator Options:"; -$l['close_thread'] = "Close Thread: prevent further posting in this thread."; -$l['stick_thread'] = "Stick Thread: stick this thread to the top of the forum."; -$l['draft_saved'] = "The new thread has successfully been saved as a draft.
    You will now be taken to your draft listing."; -$l['error_post_already_submitted'] = "You have already posted this thread in this forum. Please visit the forum to see your thread."; -$l['no_prefix'] = "No Prefix"; -$l['forum_rules'] = "{1} - Rules"; - -$l['multiquote_external_one'] = "You have selected one post from another thread."; -$l['multiquote_external'] = "You have selected {1} posts from other threads."; -$l['multiquote_external_one_deselect'] = "deselect this post"; -$l['multiquote_external_deselect'] = "deselect these posts"; -$l['multiquote_external_one_quote'] = "Quote this post too"; -$l['multiquote_external_quote'] = "Quote these posts too"; - -$l['redirect_newthread'] = "Thank you, your thread has been posted."; -$l['redirect_newthread_poll'] = "
    You will now be taken to the poll options and configuration page."; -$l['redirect_newthread_moderation'] = "
    The administrator has specified that all new threads require moderation. You will now be returned to the thread listing."; -$l['redirect_newthread_unviewable'] = "
    You do not have permission to view threads in this forum. You will now be returned to the forum."; -$l['redirect_newthread_thread'] = "
    You will now be taken to the new thread."; -$l['invalidthread'] = "The specified draft does not exist or you don't have permission to view it."; - -$l['error_stop_forum_spam_spammer'] = 'Sorry, your {1} matches that of a known spammer. If you feel this is a mistake, please contact an administrator'; -$l['error_stop_forum_spam_fetching'] = 'Sorry, something went wrong verifying your thread against a spammer database. Most likely the database couldn\'t be accessed. Please try again later.'; - -$l['error_suspendedposting'] = "Your posting privileges are currently suspended {1}.

    - -Suspension Date: {2}"; -$l['error_suspendedposting_temporal'] = "until {1}"; -$l['error_suspendedposting_permanent'] = "permanently"; - diff --git a/html/forums/inc/languages/english/online.lang.php b/html/forums/inc/languages/english/online.lang.php deleted file mode 100644 index c47e32d..0000000 --- a/html/forums/inc/languages/english/online.lang.php +++ /dev/null @@ -1,134 +0,0 @@ -{2}"; -$l['viewing_announcements2'] = "Viewing Announcement"; -$l['viewing_attachment'] = "Viewing Attachment"; -$l['viewing_attachment2'] = "Viewing Attachment in Thread {2}"; -$l['viewing_calendar'] = "Viewing Calendar"; -$l['viewing_event'] = "Viewing Event"; -$l['viewing_event2'] = "Viewing Event {2}"; -$l['adding_event'] = "Adding Event"; -$l['editing_event'] = "Editing Event"; -$l['viewing_contact_us'] = "Viewing Contact Us"; -$l['editing_post'] = "Editing Post"; -$l['viewing_forum'] = "Viewing Forum"; -$l['viewing_forum2'] = "Viewing Forum {2}"; -$l['forum_redirect_to'] = "Being Redirected To {2}"; -$l['viewing_index'] = "{1} Main Index"; -$l['activating_account'] = "Activating Account"; -$l['viewing_profile'] = "Viewing Profile"; -$l['viewing_profile2'] = "Viewing Profile of {2}"; -$l['registering'] = "Registering"; -$l['logging_in'] = "Logging In"; -$l['logging_in_plain'] = "Logging In"; -$l['logging_out'] = "Logging Out"; -$l['emailing_user'] = "Emailing a User"; -$l['rating_user'] = "Rating User"; -$l['viewing_memberlist'] = "Viewing Member List"; -$l['viewing_whoposted'] = "Viewing Who Posted"; -$l['viewing_whoposted2'] = "Viewing Who Posted in Thread {2}"; -$l['marking_read'] = "Marking Forums as Read"; -$l['viewing_helpdocs'] = "Viewing Help Documents"; -$l['viewing_buddylist'] = 'Viewing Buddy List'; -$l['viewing_smilies'] = "Viewing Smilie List"; -$l['viewing_syndication'] = "Viewing RSS Syndication Page"; -$l['replying_thread'] = "Replying to Thread"; -$l['replying_thread2'] = "Replying to Thread {2}"; -$l['posting_thread'] = "Posting New Thread"; -$l['posting_thread2'] = "Posting New Thread in {2}"; -$l['viewing_wol'] = "Viewing Who's Online"; -$l['viewing_woltoday'] = "Viewing Who Was Online Today"; -$l['creating_poll'] = "Creating New Poll"; -$l['editing_poll'] = "Editing a Poll"; -$l['viewing_pollresults'] = "Viewing Poll Results"; -$l['voting_poll'] = "Voting on a Poll"; -$l['using_modtools'] = "Using Moderator Tools"; -$l['sending_pm'] = "Sending Private Message"; -$l['reading_pm'] = "Reading Private Message"; -$l['editing_pmfolders'] = "Editing PM Folders"; -$l['using_pmsystem'] = "Using PM System"; -$l['reporting_post'] = "Reporting a Post"; -$l['searching_forum'] = "Searching {1}"; -$l['reading_thread'] = "Reading Thread"; -$l['reading_thread2'] = "Reading Thread {2} {3}"; -$l['viewing_team'] = "Viewing Forum Team"; -$l['viewing_stats'] = "Viewing Forum Statistics"; -$l['updating_profile'] = "Updating Profile"; -$l['updating_options'] = "Updating Options"; -$l['editing_signature'] = "Editing Signature"; -$l['changing_avatar'] = "Changing Avatar"; -$l['viewing_subscriptions'] = "Viewing Thread Subscriptions"; -$l['editing_pad'] = 'Editing Personal Pad'; -$l['editing_password'] = "Editing Password"; -$l['user_cp'] = "Viewing User Control Panel"; -$l['viewing_portal'] = "Viewing Portal Page"; -$l['viewing_noperms'] = "Viewing No Permissions Page"; -$l['unknown_location'] = "Unknown Location"; -$l['giving_reputation'] = "Giving Reputation to {2}"; -$l['viewing_reputation_report'] = "Viewing {2}'s Reputation"; -$l['viewing_reputation_report2'] = "Viewing Reputation"; -$l['member_resendactivation'] = "Resending Account Activation Email"; -$l['member_lostpw'] = "Retrieving Lost Password"; -$l['sending_thread'] = "Sending a thread to a friend"; -$l['guest'] = "Guest"; -$l['page'] = "Page"; -$l['users_online'] = "Who's Online"; -$l['on_username'] = "Username"; -$l['time'] = "Time"; -$l['location'] = "Location"; -$l['online_today'] = "Who Was Online Today"; -$l['refresh_page'] = "Refresh this Page"; -$l['online_online_plural'] = "users"; -$l['online_online_singular'] = "user"; -$l['online_member_plural'] = "members"; -$l['online_member_singular'] = "member"; -$l['online_anon_plural'] = "are"; -$l['online_anon_singular'] = "is"; -$l['online_guest_plural'] = "guests"; -$l['online_guest_singular'] = "guest"; -$l['online_count'] = "{1} {2} active in the past {3} minutes ({4} {5}, {6} of whom {7} invisible, and {8} {9})."; -$l['ip'] = "IP:"; -$l['resolves_to'] = "Host Name:"; -$l['if_resolvable'] = "(if resolvable)"; -$l['admin_options'] = "Admin Options"; -$l['search_regip_users'] = "Search for users who have registered with this IP"; -$l['search_postip_users'] = "Search for users who have posted with this IP"; -$l['lookup'] = "[Lookup]"; -$l['member_online_today'] = "1 Member Was Online Today"; -$l['members_were_online_today'] = "{1} Members Were Online Today"; -$l['member_online_hidden'] = " ({1} member was invisible)"; -$l['members_online_hidden'] = " ({1} members were invisible)"; -$l['rating_thread'] = "Rating thread"; -$l['viewing_imcenter'] = "Viewing IM Center"; -$l['managing_favorites'] = "Managing Favorite Threads"; -$l['managing_subscriptions'] = "Managing Subscribed Threads"; -$l['managing_group'] = "Managing a User Group"; -$l['viewing_modcp'] = "Viewing Moderator CP"; -$l['viewing_modlogs'] = "Viewing Moderator Logs"; -$l['managing_announcements'] = "Managing Announcements"; -$l['search_for_user'] = "Searching for users"; -$l['managing_warninglogs'] = "Managing Warning Logs"; -$l['searching_ips'] = "Searching IPs"; -$l['viewing_reports'] = "Viewing Reported Posts"; -$l['adding_announcement'] = "Adding an Announcement"; -$l['deleting_announcement'] = "Deleting an Announcement"; -$l['editing_announcement'] = "Editing an Announcement"; -$l['managing_modqueue'] = "Managing Moderation Queue"; -$l['editing_user_profiles'] = "Editing User Profiles"; -$l['managing_bans'] = "Managing Bans"; -$l['revoking_warning'] = "Revoking a warning"; -$l['warning_user'] = "Warning a user"; -$l['viewing_warning'] = "Viewing a warning"; -$l['managing_warnings'] = "Managing warnings"; -$l['changing_dst'] = "Changing DST Switch"; -$l['printing_thread'] = "Printing a Thread"; -$l['printing_thread2'] = "Printing Thread {2}"; -$l['managing_buddyignorelist'] = "Managing Buddy/Ignore List"; diff --git a/html/forums/inc/languages/english/polls.lang.php b/html/forums/inc/languages/english/polls.lang.php deleted file mode 100644 index 945ec39..0000000 --- a/html/forums/inc/languages/english/polls.lang.php +++ /dev/null @@ -1,60 +0,0 @@ -Note: Once this poll has been deleted there is no way of restoring it."; -$l['question'] = "Question:"; -$l['num_options'] = "Number of Options:"; -$l['max_options'] = "Maximum:"; -$l['poll_options'] = "Poll Options:"; -$l['update_options'] = "Update Options"; -$l['poll_options_note'] = "Poll options should be short and to the point."; -$l['options'] = "Options:"; -$l['option_multiple'] = "Allow multiple choice: Users have the ability to vote on more than one option."; -$l['option_multiple_maxoptions'] = "Maximum number of options per user (0 for no limit):"; -$l['option_public'] = "Public Poll: Give users the ability to see which user voted on which option(s)."; -$l['option_closed'] = "Poll is Closed: If checked the poll will be closed from voting."; -$l['poll_timeout'] = "Poll Timeout:"; -$l['timeout_note'] = "The number of day(s) which people can vote on this poll.
    (Set to 0 to if this poll should not timeout.)"; -$l['days_after'] = "days after:"; -$l['update_poll'] = "Update Poll"; -$l['option'] = "Option"; -$l['votes'] = "Votes:"; -$l['post_new_poll'] = "Post New Poll"; -$l['days'] = "days"; -$l['poll_results'] = "Poll Results"; -$l['poll_total'] = "Total:"; -$l['poll_votes'] = "vote(s)"; - -$l['redirect_pollposted'] = "Your poll has been posted.
    You will now be returned to the thread."; -$l['redirect_pollpostedmoderated'] = "Your poll has been posted, but your thread is still pending moderation.
    You will be returned to the forum."; -$l['redirect_pollupdated'] = "The poll has been updated.
    You will now be returned to the thread."; -$l['redirect_votethanks'] = "Thank you for voting.
    You will now be returned to the thread."; -$l['redirect_unvoted'] = "Your vote(s) in this thread have been removed.
    You will now be returned to the thread."; -$l['redirect_polldeleted'] = "Thank you, the poll has successfully been removed from the thread.
    You will now be taken back to the thread."; - -$l['error_polloptiontoolong'] = "One or more poll options you entered are longer than the acceptable limit. Please go back and shorten them."; -$l['error_polloptionsequence'] = "One or more poll options you entered contain a sequence which should not be used in them: ||~|~||. Please go back and remove it."; -$l['error_noquestionoptions'] = "You either did not enter a question for your poll or do not have enough options. The minimum number of options a poll can have is 2.
    Please go back and correct this error."; -$l['error_pollalready'] = "Thread already has poll!"; -$l['error_nopolloptions'] = "The specified poll option is invalid or does not exist."; -$l['error_maxpolloptions'] = "You have voted for too many options. You are only allowed to vote for {1} options.
    Please go back and try again."; -$l['error_alreadyvoted'] = "You have already voted in this poll."; -$l['error_notvoted'] = "You haven't voted in this poll."; -$l['error_invalidpoll'] = "The specified poll is invalid or does not exist."; -$l['error_pollclosed'] = "You cannot vote in a poll that has been closed."; -$l['poll_time_limit'] = "Sorry but you cannot add a poll to your thread. The Administrator has set it so that polls can only be added within {1} hours of posting."; - -$l['poll_deleted'] = "Deleted Poll"; -$l['poll_edited'] = "Edited Poll"; diff --git a/html/forums/inc/languages/english/portal.lang.php b/html/forums/inc/languages/english/portal.lang.php deleted file mode 100644 index 477ed39..0000000 --- a/html/forums/inc/languages/english/portal.lang.php +++ /dev/null @@ -1,52 +0,0 @@ -{2} unread message(s)."; -$l['pms_unread'] = "Unread Messages"; -$l['pms_total'] = "Total Messages"; -$l['search_forums'] = "Search Forums"; -$l['advanced_search'] = "Advanced Search"; -$l['forum_stats'] = "Forum Statistics"; -$l['num_members'] = "Members:"; -$l['latest_member'] = "Latest member:"; -$l['num_threads'] = "Forum threads:"; -$l['num_posts'] = "Forum posts:"; -$l['full_stats'] = "Full Statistics"; -$l['welcome'] = "Welcome, {1}"; -$l['guest'] = "Guest"; -$l['guest_welcome_registration'] = "You have to register before you can post on our site."; -$l['username'] = "Username"; -$l['password'] = "Password"; -$l['login'] = "Login!"; -$l['member_welcome_lastvisit'] = "Last visit:"; -$l['since_then'] = "Since then, there have been:"; -$l['new_announcements'] = "{1} new announcements"; -$l['new_announcement'] = "1 new announcement"; -$l['new_threads'] = "{1} new threads"; -$l['new_thread'] = "1 new thread"; -$l['new_posts'] = "{1} new posts"; -$l['new_post'] = "1 new post"; -$l['view_new'] = "View New Posts"; -$l['view_todays'] = "View Today's Posts"; -$l['online'] = "Online Users"; -$l['online_user'] = "There is currently 1 user online"; -$l['online_users'] = "There are currently {1} online users."; -$l['online_counts'] = "{1} Member(s) | {2} Guest(s)"; -$l['print_this_item'] = "Print this item"; -$l['send_to_friend'] = "Send this item to a friend"; -$l['latest_announcements'] = "Latest Announcements"; -$l['portal_disabled'] = "You cannot use the portal functionality as it has been disabled by the Administrator."; diff --git a/html/forums/inc/languages/english/printthread.lang.php b/html/forums/inc/languages/english/printthread.lang.php deleted file mode 100644 index d6a9017..0000000 --- a/html/forums/inc/languages/english/printthread.lang.php +++ /dev/null @@ -1,11 +0,0 @@ -Note: Once these messages are deleted there is no way to recover them."; -$l['num_messages'] = "Message Count"; -$l['empty_q'] = "Empty Folder?"; -$l['keep_unread'] = "Keep Unread Messages"; -$l['pm_folders'] = "Private Messaging Folders"; -$l['existing_folders'] = "Existing Folders"; -$l['edit_folder_note'] = "You can change the names of your current private messaging folders here. To delete a folder, delete the name of the folder. Some folders cannot be removed.
    Note: Deleting a folder will also delete any messages in it."; -$l['new_folders'] = "Add New Folders"; -$l['add_folders_note'] = "Here you can create additional message folders. You do not have to fill in all of the text boxes."; -$l['update_folders'] = "Update Folders"; -$l['cannot_be_removed'] = "Cannot be removed"; -$l['reached_warning'] = "Warning. You have reached your message limit."; -$l['reached_warning2'] = "To be able to receive messages you will need to delete old messages."; -$l['deny_receipt'] = "[Deny Receipt]"; -$l['viewing_pm'] = "Viewing PM:"; -$l['reply'] = "Reply"; -$l['reply_to_all'] = "Reply to All"; -$l['forward'] = "Forward"; -$l['compose_pm'] = "Compose a Private Message"; -$l['compose_to'] = "Recipients:"; -$l['compose_bcc'] = "BCC:"; -$l['compose_bcc_show'] = "BCC"; -$l['compose_bcc_show_title'] = "Show the BCC input box allowing you to blind carbon copy messages to other users."; -$l['separate_names'] = "Separate multiple user names with a comma."; -$l['max_recipients'] = "
    You may send this message to a maximum of {1} people."; -$l['compose_subject'] = "Subject:"; -$l['compose_message'] = "Message:"; -$l['compose_options'] = "Options:"; -$l['message_icon'] = "Message Icon:"; -$l['options_sig'] = "Signature: include your signature in this message."; -$l['options_disable_smilies'] = "Disable Smilies: disable smilies from showing in this message."; -$l['options_save_copy'] = "Save a Copy: save a copy of this message in your Sent Items folder."; -$l['options_read_receipt'] = "Request Read Receipt: receive a message when this message is read."; -$l['send_message'] = "Send Message"; -$l['save_draft'] = "Save as Draft"; -$l['preview'] = "Preview"; -$l['select_buddy'] = "Or Select a Buddy:"; -$l['pm_tracking'] = "Private Message Tracking"; -$l['read_messages'] = "Read Messages"; -$l['unread_messages'] = "Unread Messages"; -$l['q'] = "?"; -$l['dateread'] = "Date Read"; -$l['stop_tracking'] = "Stop Tracking"; -$l['datesent'] = "Date Sent"; -$l['cancel'] = "Cancel"; -$l['export_date_sent'] = "Date"; -$l['export_folder'] = "Folder"; -$l['export_subject'] = "Subject"; -$l['export_to'] = "To"; -$l['export_from'] ="From"; -$l['export_message'] = "Message"; -$l['not_sent'] = "N/A (not sent)"; -$l['at'] = "at"; -$l['nomessages'] = "There are no private messages in this folder."; -$l['details'] = "Details"; -$l['message'] = "Message"; -$l['buddy_list'] = "Buddy List"; -$l['multiple_recipients'] = "Multiple recipients"; -$l['bcc'] = "BCC:"; -$l['reply_title'] = "Reply to this private message"; -$l['forward_title'] = "Forward this private message to another user"; -$l['delete_title'] = "Delete this private message"; -$l['you_replied_on'] = "You replied to this message on {1}"; -$l['you_forwarded_on'] = "You forwarded this message on {1}"; -$l['you_replied'] = "You replied to this message {1}"; -$l['you_forwarded'] = "You forwarded this message {1}"; -$l['select_from_buddies'] = "Select from Buddies"; -$l['no_readmessages'] = "You currently do not have any read messages being tracked."; -$l['no_unreadmessages'] = "You currently do not have any unread messages being tracked."; -$l['stop_tracking_all'] = "Stop Tracking all messages"; - -$l['enter_keywords'] = "Enter Keywords"; -$l['advanced_search'] = "Advanced Search"; -$l['search_pms'] = "Search PMs"; -$l['advanced_private_message_search'] = "Advanced Private Message Search"; -$l['search_criteria'] = "Search Criteria"; -$l['keywords'] = "Keywords"; -$l['search_in_subject'] = "Search in Subject"; -$l['search_in_message'] = "Search in Message"; -$l['message_status'] = "Message Status"; -$l['message_status_new'] = "New"; -$l['message_status_replied_to'] = "Replied to"; -$l['message_status_forwarded'] = "Forwarded"; -$l['message_status_read'] = "Read"; -$l['folder'] = "Folder"; -$l['search_options'] = "Search Options"; -$l['sort_by'] = "Sort By"; -$l['sort_by_subject'] = "Sort By: Subject"; -$l['sort_by_sender'] = "Sort By: Sender"; -$l['sort_by_date'] = "Sort By: Date"; -$l['ascending_order'] = "Ascending Order"; -$l['descending_order'] = "Descending Order"; -$l['search_private_messages'] = "Search Private Messages"; -$l['check_all'] = "Check All"; - -$l['error_nopmsarchive'] = "Sorry, but there are no private messages matching the criteria you specified."; -$l['error_invalidpmfoldername'] = "Sorry, but a folder name you have entered contains characters which are not allowed."; -$l['error_emptypmfoldername'] = "Sorry, but a folder name you have entered does not contain any text. Please enter a name for the folder, or completely blank the name to delete the folder."; -$l['error_invalidpmrecipient'] = "The recipient you entered is either invalid or doesn't exist. Please go back and enter a correct one."; -$l['error_invalidpm'] = "Invalid PM"; -$l['error_pmrecipientreachedquota'] = "You cannot send a private message to {1} because he/she has reached their private messaging quota. They cannot be sent any message until their messages have been cleared out. An email has been sent to the user about this. Please try sending your message at a later stage."; -$l['error_recipientpmturnedoff'] = "{1} has chosen not to receive private messages or may not be allowed to do so. Therefore you may not send your private message to this user."; -$l['error_pmsturnedoff'] = "You currently have private messages disabled in your profile.
    To be able to use the private messaging system this setting must be enabled."; -$l['error_recipientignoring'] = "We are sorry but we cannot process your private message to {1}. You do not have permission to perform this action."; -$l['error_pm_already_submitted'] = "You have already submitted the same private message to the same recipient within the last 5 hours."; -$l['error_nopms'] = "You must have one or more private messages in order to access this function."; - -$l['error_minsearchlength'] = "One or more of your search terms were shorter than the minimum length. The minimum search term length is {1} characters.

    If you're trying to search for an entire phrase, enclose it within double quotes. For example \"The quick brown fox jumps over the lazy dog\"."; -$l['error_nosearchresults'] = "Sorry, but no results were returned using the query information you provided. Please redefine your search terms and try again."; -$l['error_no_search_support'] = "This database engine does not support searching."; -$l['error_nosearchterms'] = "You did not enter any search terms. At a minimum, you must enter either some search terms or a username to search by."; -$l['error_searchflooding_1'] = "Sorry, but you can only perform one search every {1} seconds. Please wait another 1 second before attempting to search again."; -$l['error_searchflooding'] = "Sorry, but you can only perform one search every {1} seconds. Please wait another {2} seconds before attempting to search again."; -$l['error_invalidsearch'] = "An invalid search was specified. Please go back and try again."; - -$l['redirect_pmsaved'] = "The private message has been saved in your Drafts folder."; -$l['redirect_pmstrackingstopped'] = "Tracking of the selected PMs has been stopped."; -$l['redirect_pmstrackingcanceled'] = "The selected unread PMs have been deleted from the recipient's inbox."; -$l['redirect_allpmstrackingstopped'] = "Tracking of all read PMs has been stopped."; -$l['redirect_pmsmoved'] = "The selected private messages have been moved."; -$l['redirect_pmsdeleted'] = "The selected private messages have been deleted."; -$l['redirect_pmsent'] = "Thank you, your private message has successfully been sent.
    You will now be returned to your private message inbox."; -$l['redirect_pmfoldersupdated'] = "Thank you, your private messaging folders have successfully been updated.
    You will now be returned to your private message Inbox."; -$l['redirect_pmfoldersemptied'] = "The selected private messaging folders have successfully been emptied.
    You will now be taken back to your Private Messaging Inbox."; -$l['redirect_searchresults'] = "Thank you, your search has been submitted and you will now be taken to the results list."; - -$l['quick_reply'] = "Quick Reply"; -$l['message_note'] = "Type your reply to this message here."; -$l['send_reply'] = "Send Reply"; -$l['quickreply_signature'] = "Signature"; -$l['quickreply_disable_smilies'] = "Disable Smilies"; -$l['quickreply_save_copy'] = "Save a Copy"; -$l['quickreply_read_receipt'] = "Request Read Receipt"; - diff --git a/html/forums/inc/languages/english/ratethread.lang.php b/html/forums/inc/languages/english/ratethread.lang.php deleted file mode 100644 index 275d261..0000000 --- a/html/forums/inc/languages/english/ratethread.lang.php +++ /dev/null @@ -1,20 +0,0 @@ -A member of the forum team will check your report soon."; - -$l['error_report_length'] = "Please provide a detailed reason for your report."; -$l['error_invalid_report'] = "This content either does not exist or is not able to be reported."; -$l['error_invalid_report_reason'] = "The selected reason is invalid."; -$l['error_comment_required'] = "An additional comment is required for the selected reason."; -$l['error_report_duplicate'] = "This content has already been reported by another member.
    You may also report this content below."; -$l['report_reason_other_description'] = "Please provide more information about why you are reporting this content."; diff --git a/html/forums/inc/languages/english/reputation.lang.php b/html/forums/inc/languages/english/reputation.lang.php deleted file mode 100644 index a85e8d7..0000000 --- a/html/forums/inc/languages/english/reputation.lang.php +++ /dev/null @@ -1,82 +0,0 @@ -"; -$l['neg_rep_disabled'] = "* - Negative reputation is currently disabled"; -$l['pos_rep_disabled'] = "* - Positive reputation is currently disabled"; -$l['neu_rep_disabled'] = "* - Neutral reputation is currently disabled"; -$l['no_comment_needed'] = "You're adding reputation because of this user's post, which is linked in their profile. A comment isn't needed, but if you want to leave one, please enter it below.
    "; -$l['no_comment'] = "[No comment]"; -$l['vote_added'] = "Rating Added"; -$l['vote_updated'] = "Rating Updated"; -$l['vote_deleted'] = "Rating Deleted"; -$l['vote_added_message'] = "Your reputation rating has successfully been added for this user."; -$l['vote_updated_message'] = "Your reputation rating has successfully been updated for this user."; -$l['vote_deleted_message'] = "The reputation rating has been deleted from this user."; -$l['update_reputation_vote'] = "Update your reputation rating for {1}"; -$l['positive'] = "Positive"; -$l['negative'] = "Negative"; -$l['neutral'] = "Neutral"; -$l['user_comments'] = "Your comments on {1}:"; -$l['add_vote'] = "Add Rating"; -$l['update_vote'] = "Update Rating"; -$l['delete_vote'] = "Delete"; -$l['report_vote'] = "Report"; -$l['power_positive'] = "Positive ({1})"; -$l['power_neutral'] = "Neutral"; -$l['power_negative'] = "Negative ({1})"; -$l['show_all'] = "Show: All Votes"; -$l['show_positive'] = "Show: Positive Ratings"; -$l['show_neutral'] = "Show: Neutral Ratings"; -$l['show_negative'] = "Show: Negative Ratings"; -$l['sort_updated'] = "Sort by: Last Updated"; -$l['sort_username'] = "Sort by: Username"; -$l['last_updated'] = "Last updated {1}"; -$l['postrep_given'] = "Rating given for {2}'s post {3}
    "; -$l['postrep_given_nolink'] = "Rating given for {1}'s post
    "; -$l['postrep_given_thread'] = "in {2}"; -$l['no_reputation_votes'] = "This user currently does not have any reputation ratings with the specified criteria below."; -$l['delete_reputation_confirm'] = "Are you sure you wish to delete this reputation Rating?"; -$l['delete_reputation_log'] = "Deleted reputation rating by {1} (UID: {2})"; -$l['reputations_disabled_group'] = "The reputation system is disabled for users of this user group."; -$l['rate_user'] = "Rate User"; diff --git a/html/forums/inc/languages/english/search.lang.php b/html/forums/inc/languages/english/search.lang.php deleted file mode 100644 index e060e2f..0000000 --- a/html/forums/inc/languages/english/search.lang.php +++ /dev/null @@ -1,112 +0,0 @@ -{1} results on this page are selected."; -$l['all_selected'] = "All {1} results in this search are selected."; -$l['select_all'] = "Select all {1} results in this search."; -$l['clear_selection'] = "Clear Selection."; - -$l['results'] = "results"; -$l['mod_options'] = "Moderator Options"; -$l['display_all'] = "Display all"; -$l['display_only_approved'] = "Display only approved"; -$l['display_only_unapproved'] = "Display only unapproved"; -$l['display_only_softdeleted'] = "Display only soft deleted"; - -$l['redirect_searchresults'] = "Thank you, your search has been submitted and you will now be taken to the results list."; - -$l['error_minsearchlength'] = "One or more of your search terms were shorter than the minimum length. The minimum search term length is {1} characters.

    If you're trying to search for an entire phrase, enclose it within double quotes. For example \"The quick brown fox jumps over the lazy dog\"."; -$l['error_nosearchresults'] = "Sorry, but no results were returned using the query information you provided. Please redefine your search terms and try again."; -$l['error_no_search_support'] = "This database engine does not support searching."; -$l['error_nosearchterms'] = "You did not enter any search terms. At a minimum, you must enter either some search terms or a username to search by."; -$l['error_searchflooding_1'] = "Sorry, but you can only perform one search every {1} seconds. Please wait another 1 second before attempting to search again."; -$l['error_searchflooding'] = "Sorry, but you can only perform one search every {1} seconds. Please wait another {2} seconds before attempting to search again."; -$l['error_invalidsearch'] = "An invalid search was specified. Please go back and try again."; diff --git a/html/forums/inc/languages/english/sendthread.lang.php b/html/forums/inc/languages/english/sendthread.lang.php deleted file mode 100644 index 6846518..0000000 --- a/html/forums/inc/languages/english/sendthread.lang.php +++ /dev/null @@ -1,17 +0,0 @@ -Note: This is a public poll, other users will be able to see what you voted for."; -$l['total'] = "Total"; -$l['vote'] = "Vote!"; -$l['total_votes'] = "{1} vote(s)"; -$l['you_voted'] = "* You voted for this item."; -$l['poll_closed'] = "This poll is closed."; -$l['poll_closes'] = "This poll will close on: {1}"; -$l['already_voted'] = "You have already voted in this poll."; -$l['undo_vote'] = "Undo vote"; -$l['quick_reply'] = "Quick Reply"; -$l['message_note'] = "Type your reply to this message here."; -$l['signature'] = "Signature"; -$l['email_notify'] = "Email Notification"; -$l['disable_smilies'] = "Disable Smilies"; -$l['post_reply'] = "Post Reply"; -$l['post_reply_img'] = "Post Reply"; -$l['new_reply'] = "New Reply"; -$l['search_button'] = 'Search'; -$l['post_thread'] = "Post Thread"; -$l['preview_post'] = "Preview Post"; -$l['rating_average'] = "{1} Vote(s) - {2} Average"; -$l['rate_thread'] = "Rate This Thread:"; -$l['thread_rating'] = "Thread Rating:"; -$l['similar_threads'] = "Possibly Related Threads..."; -$l['thread'] = "Thread"; -$l['replies'] = "Replies"; -$l['views'] = "Views"; -$l['lastpost'] = "Last Post"; -$l['messages_in_thread'] = "Messages In This Thread"; -$l['users_browsing_thread'] = "Users browsing this thread:"; -$l['users_browsing_thread_guests'] = "{1} Guest(s)"; -$l['users_browsing_thread_invis'] = "{1} Invisible User(s)"; -$l['users_browsing_thread_reading'] = "Reading..."; -$l['inline_soft_delete_posts'] = "Soft Delete Posts"; -$l['inline_restore_posts'] = "Restore Posts"; -$l['inline_delete_posts'] = "Delete Posts Permanently"; -$l['inline_merge_posts'] = "Merge Posts"; -$l['inline_split_posts'] = "Split Posts"; -$l['inline_move_posts'] = "Move Posts"; -$l['inline_approve_posts'] = "Approve Posts"; -$l['inline_unapprove_posts'] = "Unapprove Posts"; -$l['inline_post_moderation'] = "Inline Post Moderation:"; -$l['inline_go'] = "Go"; -$l['clear'] = "Clear"; -$l['thread_closed'] = "Thread Closed"; -$l['no_subject'] = "No subject"; -$l['error_nonextnewest'] = "There are no threads that are newer than the one you were previously viewing."; -$l['error_nonextoldest'] = "There are no threads that are older than the one you were previously viewing."; -$l['quickreply_multiquote_selected'] = "You have selected one or more posts to quote."; -$l['quickreply_multiquote_now'] = "Quote these posts now"; -$l['or'] ="or"; -$l['quickreply_multiquote_deselect'] = "deselect them"; -$l['search_thread'] = "Search Thread"; -$l['enter_keywords'] = "Enter Keywords"; -$l['view_thread_notes'] = "Thread Notes"; -$l['view_all_notes'] = "View All Notes"; - -$l['save_changes'] = 'Save Changes'; -$l['cancel_edit'] = 'Cancel Edit'; -$l['quick_edit_update_error'] = 'There was an error editing your reply:'; -$l['quick_reply_post_error'] = 'There was an error posting your reply:'; -$l['quick_delete_error'] = 'There was an error deleting your reply:'; -$l['quick_delete_success'] = 'The post was deleted successfully.'; -$l['quick_delete_thread_success'] = 'The thread was deleted successfully.'; -$l['quick_restore_error'] = 'There was an error restoring your reply:'; -$l['quick_restore_success'] = 'The post was restored successfully.'; - diff --git a/html/forums/inc/languages/english/stats.lang.php b/html/forums/inc/languages/english/stats.lang.php deleted file mode 100644 index 4a27064..0000000 --- a/html/forums/inc/languages/english/stats.lang.php +++ /dev/null @@ -1,37 +0,0 @@ -{1} ({2} posts)"; -$l['popular_forum'] = "Most popular forum: {1} ({2} posts, {3} threads)"; -$l['most_popular'] = "Most Popular..."; -$l['most_replied_threads'] = "Most Replied To Threads"; -$l['most_viewed_threads'] = "Most Viewed Threads"; -$l['not_enough_info_stats'] = "Sorry, but there is not enough information on this board to generate statistics. Before statistics can be generated this board needs to contain at least 1 member and 1 thread."; -$l['replies'] = "replies"; -$l['views'] = "views"; -$l['top_referrer'] = "Top referrer: {1} ({2} referrals)"; - diff --git a/html/forums/inc/languages/english/syndication.lang.php b/html/forums/inc/languages/english/syndication.lang.php deleted file mode 100644 index dc78f8a..0000000 --- a/html/forums/inc/languages/english/syndication.lang.php +++ /dev/null @@ -1,13 +0,0 @@ -The main page has information on your account."; -$l['account_summary'] = "Your Account Summary"; -$l['username'] = "Username:"; -$l['user_id'] = "User ID:"; -$l['title'] = "User Title:"; -$l['postnum'] = "Posts:"; -$l['posts_day'] = "({1} per day | {2} percent of total posts)"; -$l['additional_contact_details'] = "Additional Contact Information"; -$l['email'] = "Email:"; -$l['reputation'] = "Reputation:"; -$l['website'] = "Website:"; -$l['usergroup'] = "User Group:"; -$l['birthday'] = "Date of Birth:"; -$l['birthdayprivacy'] = "Date of Birth Privacy:"; -$l['birthdayprivacyall'] = "Display Age and Date of Birth"; -$l['birthdayprivacynone'] = "Hide Age and Date of Birth"; -$l['birthdayprivacyage'] = "Display Only Age"; -$l['avatar'] = "Avatar:"; -$l['avatar_mine'] = "This is your Avatar"; -$l['change_avatar'] = "Change Avatar"; -$l['avatar_url'] = "Avatar URL:"; -$l['avatar_url_note'] = "Enter the URL of an avatar on the internet."; -$l['avatar_url_gravatar'] = "To use a Gravatar enter your Gravatar email."; -$l['avatar_upload'] = "Upload Avatar:"; -$l['avatar_upload_note'] = "Choose an avatar on your local computer to upload."; -$l['no_avatar'] = "No Avatar"; -$l['no_avatar_note'] = "Select this option if you don't want an avatar."; -$l['change_username'] = "Change Username"; -$l['new_username'] = "New Username:"; -$l['update_username'] = "Update Username"; -$l['edit_lists'] = "Edit Buddy and Ignore Lists"; -$l['edit_buddy_list'] = "Edit Buddy List"; -$l['edit_ignore_list'] = "Edit Ignore List"; -$l['users_added_to_ignore_list'] = "The selected user(s) have been added to your ignore list"; -$l['users_added_to_buddy_list'] = "The selected user(s) have been added to your buddy list"; -$l['removed_from_ignore_list'] = "{1} has been removed from your ignore list"; -$l['removed_from_buddy_list'] = "{1} has been removed from your buddy list"; -$l['cant_add_self_to_ignore_list'] = "You cannot add yourself to your ignore list."; -$l['cant_add_self_to_buddy_list'] = "You cannot add yourself to your buddy list."; -$l['users_already_on_ignore_list'] = "One or more users you added are already on your ignore list."; -$l['users_already_on_ignore_list_alt'] = "One or more users you added is on your buddy list. Please remove them as a buddy before ignoring them."; -$l['users_already_on_buddy_list'] = "One or more users you added are already on your buddy list."; -$l['users_already_on_buddy_list_alt'] = "One or more users you added is on your ignore list. Please remove them from the list before adding them as a buddy."; -$l['invalid_user_selected'] = "One or more of the selected users were not found."; -$l['ignore_list_empty'] = "Your ignore list is currently empty. To add one or more users to your ignore list, please use the field above."; -$l['buddy_list_empty'] = "Your buddy list is currently empty. To add one or more users to your buddy list, please use the field above."; -$l['confirm_remove_buddy'] = "Remove this user from your buddy list?"; -$l['confirm_remove_ignored'] = "Remove this user from your ignore list?"; -$l['adding_buddy'] = "Adding Buddy.."; -$l['adding_ignored'] = "Adding to Ignored.."; -$l['add_buddies'] = "Add Users to your Buddy List"; -$l['add_buddies_desc'] = "To add one or more users to your buddy list, enter their usernames below. Separate multiple usernames with a comma."; -$l['username_or_usernames'] = "Username(s):"; -$l['add_to_buddies'] = "Add to Buddies"; -$l['current_buddies'] = "You currently have {1} user(s) on your buddy list"; -$l['add_ignored_users'] = "Add Users to your Ignore List"; -$l['add_ignored_users_desc'] = "To ignore posts and private messages from specific users, enter their username below. You can separate multiple names with a comma."; -$l['ignore_users'] = "Ignore User(s)"; -$l['current_ignored_users'] = "You currently have {1} user(s) on ignore"; -$l['online'] = "Online"; -$l['offline'] = "Offline"; -$l['remove_from_list'] = "Remove from list"; -$l['edit_sig'] = "Edit Signature"; -$l['edit_sig_note'] = "Here you can enter a short message which will be automatically appended to the bottom of your posts."; -$l['edit_sig_note2'] = "Smilies are {1}.
    MyCode is {2}.
    [img] tags are {3}.
    HTML is {4}.
    Max. length is {5} characters."; -$l['edit_sig_error_title'] = "An error has occurred:"; -$l['edit_sig_no_permission'] = "You do not have permission to edit your signature."; -$l['characters_remaining'] = "characters remaining"; -$l['enable_sig_posts'] = "Enable my signature in all of my existing posts."; -$l['disable_sig_posts'] = "Disable my signature in all of my existing posts."; -$l['leave_sig_settings'] = "No action."; -$l['update_sig'] = "Update Signature"; -$l['preview'] = "Preview Signature"; -$l['current_sig'] = "Your Current Signature"; -$l['sig_preview'] = "Signature Preview"; - -$l['sig_suspended'] = "Your ability to add a signature has been suspended."; -$l['sig_suspended_posts'] = "You must have at least {1} posts before adding a signature."; - -$l['change_email'] = "Change Email Address"; -$l['please_enter_confirm_new_email'] = "Please Enter and Confirm Your New Email Address"; -$l['new_email'] = "New Email Address:"; -$l['confirm_email'] = "Confirm Email Address:"; -$l['update_email'] = "Update Email Address"; -$l['thread'] = "Thread"; -$l['author'] = "Author"; -$l['replies'] = "Replies"; -$l['views'] = "Views"; -$l['lastpost'] = "Last Post"; -$l['post_reply'] = "Post Reply"; -$l['forum_subscriptions'] = "Forum Subscriptions"; -$l['posts'] = "Posts"; -$l['forum'] = "Forum"; -$l['threads'] = "Threads"; -$l['unsubscribe'] = "Unsubscribe"; -$l['new_thread'] = "New Thread"; -$l['personal_notepad'] = "Personal Notepad"; -$l['update_notepad'] = "Update Notepad"; -$l['edit_options'] = "Edit Options"; -$l['login_cookies_privacy'] = "Privacy"; -$l['invisible_mode'] = "Hide me from the Who's Online list."; -$l['invisible_mode_desc'] = "Selecting yes will hide you from the online users list."; -$l['messaging_notification'] = "Messaging and Notification"; -$l['allow_notices'] = "Receive emails from the Administrators."; -$l['allow_notices_desc'] = "Selecting yes will allow Administrators to send you notices and board newsletters."; -$l['allow_emails'] = "Hide your email from other members."; -$l['allow_emails_desc'] = "Selecting yes will allow other members to send you emails through this board."; -$l['email_notify'] = "Automatically subscribe to threads you post in."; -$l['email_notify_desc'] = "Selecting yes will automatically subscribe you to threads when you make a post in them."; -$l['receive_pms'] = "Receive private messages from other users."; -$l['receive_pms_desc'] = "Enables you to send and receive Private Messages."; -$l['receive_from_buddy'] = "Only receive private messages from users on my Buddy List. This setting has no effect unless there is at least one buddy on the list."; -$l['pm_notice'] = "Alert me with a notice when I receive a Private Message."; -$l['pm_notify'] = "Notify me by email when I receive a new Private Message."; -$l['show_codebuttons'] = "Show the MyCode formatting options on the posting pages."; -$l['source_editor'] = "Put the editor in source mode by default"; -$l['show_redirect'] = "Show friendly redirect pages."; -$l['thread_view_options'] = "Thread View Options"; -$l['thread_mode'] = "Thread View Mode:"; -$l['thread_mode_desc'] = "The style of threads shown to you. Selecting 'Use Default' will use the boards default mode."; -$l['use_default'] = "Use Default"; -$l['threaded'] = "Threaded"; -$l['linear'] = "Linear"; -$l['show_classic_postbit'] = "Display posts in classic mode."; -$l['show_images'] = "Display images in posts."; -$l['show_videos'] = "Display videos in posts."; -$l['show_sigs'] = "Display users' signatures in their posts."; -$l['show_sigs_desc'] = "Do you want to view user's signatures in their posts?"; -$l['show_avatars'] = "Display users' avatars in their posts."; -$l['show_avatars_desc'] = "Do you want to view user's avatars in their posts?"; -$l['show_quick_reply'] = "Show the quick reply box on the view thread page."; -$l['show_quick_reply_desc'] = "The quick reply box enables you to make a 'quick reply' to threads using the reply box provided at the end of a thread"; -$l['forum_display_options'] = "Forum Display Options"; -$l['thread_view'] = "Default Thread View:"; -$l['thread_view_lastday'] = "Show threads from last day"; -$l['thread_view_5days'] = "Show threads from last 5 days"; -$l['thread_view_10days'] = "Show threads from last 10 days"; -$l['thread_view_20days'] = "Show threads from last 20 days"; -$l['thread_view_50days'] = "Show threads from last 50 days"; -$l['thread_view_75days'] = "Show threads from last 75 days"; -$l['thread_view_100days'] = "Show threads from last 100 days"; -$l['thread_view_year'] = "Show threads from the last year"; -$l['thread_view_all'] = "Show all threads"; -$l['date_time_options'] = "Date and Time Options"; -$l['date_format'] = "Date Format:"; -$l['date_format_desc'] = "The format that dates will be shown in."; -$l['time_format'] = "Time Format:"; -$l['time_format_desc'] = "The format that times will be shown in."; -$l['time_offset'] = "Time Zone (DST correction excluded):"; -$l['time_offset_desc'] = "If you live in a time zone which differs to what this board is set at, you can select it from the list below."; -$l['gmt'] = "GMT"; -$l['dst_correction'] = "Daylight Saving Time correction:"; -$l['dst_correction_auto'] = "Automatically detect DST settings"; -$l['dst_correction_enabled'] = "Always use DST correction"; -$l['dst_correction_disabled'] = "Never use DST correction"; -$l['board_language'] = "Board Language"; -$l['other_options'] = "Other Options"; -$l['style'] = "Board Style:"; -$l['style_desc'] = "If you don't like the default style of this board you can change how you view it here."; -$l['update_options'] = "Update Options"; -$l['tpp_option'] = "Show {1} threads per page"; -$l['ppp_option'] = "Show {1} posts per page"; -$l['ppp'] = "Posts Per Page:"; -$l['ppp_desc'] = "Allows you to select the amount of posts to be shown per page in a thread."; -$l['tpp'] = "Threads Per Page:"; -$l['tpp_desc'] = "Allows you to select the amount of threads to be shown per page in the thread listing."; -$l['change_password'] = "Change Password"; -$l['current_password'] = "Current Password:"; -$l['password_confirmation'] = "Password Confirmation"; -$l['please_enter_confirm_new_password'] = "Please Enter and Confirm Your New Password"; -$l['new_password'] = "New Password:"; -$l['confirm_password'] = "Confirm Password:"; -$l['update_password'] = "Update Password"; -$l['edit_profile'] = "Edit Profile"; -$l['profile_required'] = "Required Fields"; -$l['change_email_notice'] = "To change your email address please click here"; -$l['profile_optional'] = "Optional Fields"; -$l['website_url'] = "Your Website URL:"; -$l['birthdate'] = "Birthdate:"; -$l['contact_field_icq'] = "ICQ Number:"; -$l['contact_field_aim'] = "AIM Screen Name:"; -$l['contact_field_yahoo'] = "Yahoo ID:"; -$l['contact_field_skype'] = "Skype ID:"; -$l['contact_field_google'] = "Google Hangouts ID:"; -$l['additional_information'] = "Additional Information"; -$l['update_profile'] = "Update Profile"; -$l['away_information'] = "Away Information"; -$l['away_status'] = "Away Status:"; -$l['away_status_desc'] = "Allows you to leave an away message if you are going away for a while."; -$l['im_away'] = "I'm Away"; -$l['im_here'] = "I'm Here"; -$l['away_reason'] = "Away Reason:"; -$l['away_reason_desc'] = "Allows you to enter a small description of why you are away (max 200 characters)."; -$l['return_date'] = "Return Date:"; -$l['return_date_desc'] = "If you know when you will be back, you can enter your return date here."; -$l['subscriptions'] = "Thread Subscriptions"; -$l['remove_all_subscriptions'] = "Remove All Subscriptions"; -$l['no_thread_subscriptions'] = "You're currently not subscribed to any threads.

    To subscribe to a thread:

    1. Navigate to the thread you wish to subscribe to.
    2. Click the 'Subscribe to this thread' link towards the bottom of the page.
    "; -$l['no_forum_subscriptions'] = "You're currently not subscribed to any forums.

    To subscribe to a forum:

    1. Navigate to the forum you wish to subscribe to.
    2. Click the 'Subscribe to this forum' link just above, towards the right side of, the list of threads in that forum.
    "; -$l['no_drafts'] = "You do not currently have any draft threads or posts.

    To save a draft thread or post:

    1. Proceed to the normal posting pages for the action you wish to perform (post a new thread or reply to an existing one).
    2. Fill in as much or as little as you want on the posting page.
    3. Click the 'Save as Draft' button below the posting area.
    "; -$l['drafts'] = "Saved Drafts"; -$l['drafts_count'] = "Saved Drafts ({1})"; -$l['draft_saved'] = "Saved"; -$l['edit_draft'] = "Edit Draft"; -$l['draft_title'] = "Draft Title"; -$l['delete_drafts'] = "Delete Selected Drafts"; -$l['draft_options'] = "Draft Options"; -$l['selected_drafts_deleted'] = "The selected drafts have been deleted.
    You will be now taken back to the drafts listing."; -$l['no_drafts_selected'] = "You did not select any drafts to delete"; -$l['group_memberships'] = "Group Memberships"; -$l['not_member_of_group'] = "Sorry, you cannot perform that action because you are currently not a member of that group."; -$l['cannot_set_displaygroup'] = "This group cannot be set as a display group."; -$l['display_group_changed'] = "Your display group has been updated.
    You will be now taken back to the group memberships page."; -$l['usergroups_memberof'] = "Groups You're a Member Of"; -$l['usertitle'] = "User Title"; -$l['usergroup_leave'] = "Leave Group"; -$l['usergroup_leave_primary'] = "(You cannot leave your primary group)"; -$l['usergroup_leave_leader'] = "(You are a leader of this group)"; -$l['usergroup_joins_moderated'] = "A group leader is required to moderate joins to this group."; -$l['usergroup_joins_invite'] = "A group leader must invite you to join this group."; -$l['usergroup_cannot_leave'] = "(You cannot leave this user group)"; -$l['usergroup_joins_anyone'] = "Anyone is free to join this group."; -$l['usergroup_leaders'] = "Group led by:"; -$l['usergroups_joinable'] = "Groups You Can Join"; -$l['join_conditions'] = "Join Conditions"; -$l['join_group'] = "Join Group"; -$l['join_group_applied'] = "You applied to join this group: {1}"; -$l['pending_invitation'] = "You have been invited to this group: Accept Invite"; -$l['usergroups_leader'] = "Groups You Lead"; -$l['usergroup_members'] = "Group Members"; -$l['join_requests'] = "Pending Join Requests"; -$l['request_join_usergroup'] = "Request Group Membership"; -$l['join_group_moderate_note'] = "All joins to this group must first be approved by a moderator."; -$l['user_group'] = "Group:"; -$l['usergroups_usergroup'] = "User Group"; -$l['join_reason'] = "Reason:"; -$l['send_join_request'] = "Send Join Request"; -$l['cannot_join_group'] = "Sorry, but you cannot join this group as it is not a publicly join-able group."; -$l['cannot_join_invite_group'] = "In order to join this group, you must be invited by a group leader."; -$l['no_pending_invitation'] = "You do not have any pending invitation to this group."; -$l['already_accepted_invite'] = "You have already accepted an invite to join this group."; -$l['already_member_of_group'] = "You cannot join a group of which you are already a member of."; -$l['already_sent_join_request'] = "You have already sent a request to join this group and it is yet to be moderated."; -$l['group_join_requestsent'] = "Your join request has been successfully sent. Once your membership is approved you will be automatically joined to this user group.
    You will be now taken to the group memberships page."; -$l['joined_group'] = "You have successfully joined the specified group.
    You will be now taken back to the group management page."; -$l['cannot_leave_primary_group'] = "Sorry, but you cannot leave your primary group."; -$l['left_group'] = "You have successfully left the specified group.
    You will be now taken back to the group management page."; -$l['avatar_note'] = "An avatar is a small identifying image shown under the author's name whenever they make a post."; -$l['avatar_note_dimensions'] = "The maximum dimensions for avatars are: {1}x{2} pixels."; -$l['avatar_note_size'] = "The maximum file size for avatars is {1}."; -$l['custom_avatar'] = "Custom Avatar"; -$l['remove_avatar'] = "Remove Avatar"; -$l['attachments_manager'] ="Attachments Manager"; -$l['attachments_attachment'] ="Attachment"; -$l['attachments_post'] = "Post"; -$l['delete_attachments'] = "Delete Selected Attachments"; -$l['attachment_size_downloads'] = "({1}, {2} Downloads)"; -$l['attachment_thread'] = "Thread:"; -$l['no_attachments'] = "You currently do not have any files attached to your posts."; -$l['date_uploaded'] ="Posted"; -$l['no_attachments_selected'] = "You did not select any attachments to delete."; -$l['attachments_deleted'] = "The selected attachments have been successfully deleted.
    You will be now redirected to the attachments manager."; -$l['attachments_usage_quota'] = "- Using {1} of {2} ({3}) in {4} Attachments"; -$l['attachments_usage'] = "- {1} in {2} Attachments"; -$l['attachments_stats'] = "Your Attachment Statistics"; -$l['attachstats_attachs'] = "Number of Attachments"; -$l['attachstats_spaceused'] = "Space Used"; -$l['attachstats_quota'] = "Attachment Quota"; -$l['attachstats_totaldl'] = "Total Downloads"; -$l['attachstats_bandwidth'] = "Approximate Bandwidth Usage"; -$l['error_avatartoobig'] = "Sorry, but we cannot change your avatar as the new avatar you specified is too big. The maximum dimensions are {1}x{2} (width x height)"; -$l['error_invalidavatarurl'] = "The URL you entered for your avatar does not appear to be valid. Please ensure you enter a valid URL."; -$l['error_remote_avatar_not_allowed'] = "Remote avatar URLs have been disabled by the forum administrator."; -$l['custom_usertitle'] = "Custom User Title"; -$l['new_custom_usertitle'] = "New Custom User Title: (leave blank to use existing)"; -$l['custom_usertitle_note'] = "Here you can assign yourself a custom user title which will overwrite the one based on your display group."; -$l['default_usertitle'] = "Default User Title:"; -$l['current_custom_usertitle'] = "Current Custom User Title:"; -$l['revert_usertitle'] = "Revert to group default"; -$l['primary_usergroup'] = "Primary User Group:"; -$l['display_group'] = "Display Group"; -$l['set_as_display_group'] = "Set as Display Group"; -$l['registration_date'] ="Registration Date:"; -$l['view_members'] = "View Members"; -$l['view_requests'] = "Join Requests"; -$l['cannot_leave_group'] = "You cannot leave this group because it is not a publicly join-able group."; -$l['details'] = "Details"; -$l['members_referred'] = "Members Referred:"; -$l['referral_link'] = "
    To refer a member to this board, direct them to {1}/member.php?action=register&referrer={2}"; -$l['redirect_subscriptionsremoved'] = "Your thread subscriptions list has been cleared.
    You will be now returned to the thread subscriptions list."; -$l['redirect_forumsubscriptionsremoved'] = "Your forum subscriptions list has now been cleared.
    You will be now returned to where you came from."; -$l['redirect_subscriptionadded'] = "The selected thread has been added to your subscriptions list.
    You will be now returned to the location you came from."; -$l['redirect_optionsupdated'] = "You have successfully updated your options.
    You will be now returned to the edit options page."; -$l['redirect_subscriptionremoved'] = "The selected thread has been removed from your subscriptions list.
    You will be now returned to the thread subscriptions list."; -$l['redirect_sigupdated'] = "Your signature has been successfully updated.
    You will be now returned to the signature settings."; -$l['redirect_notepadupdated'] = "Your personal notepad has been updated.
    You will be now returned to the User CP."; -$l['redirect_profileupdated'] = "Your profile has been successfully updated.
    You will be now returned to the profile settings."; -$l['redirect_forumsubscriptionadded'] = "The selected forum has been added to your forum subscriptions list.
    You will be now returned to where you came from."; -$l['redirect_forumsubscriptionremoved'] = "The selected forum has been removed from your forum subscriptions list.
    You will be now returned to where you came from."; -$l['redirect_namechanged'] = "Your name has been successfully changed.
    You will be now returned to the username settings."; -$l['redirect_emailupdated'] = "Your email address has been successfully updated.
    You will be now returned to the email settings."; -$l['redirect_passwordupdated'] = "Your password has been successfully updated.
    You will be now returned to the password settings."; -$l['redirect_changeemail_activation'] = "Your email address has been successfully updated. For your new email address to become active, we require that you complete a validation process.

    Please check the new email address you specified for further instructions on how to complete the account activation process.

    "; -$l['redirect_avatarupdated'] = "Your avatar has been successfully changed.
    You will be now returned to the avatar settings."; -$l['error_noavatar'] = "You did not choose an avatar. Please go back and do so now. If you don't want an avatar, select the \"No avatar\" option."; -$l['error_avatartype'] = "Invalid file type. An uploaded avatar must be in GIF, JPEG, BMP or PNG format."; -$l['error_alreadyingroup'] = "The user specified is already a part of the user group."; -$l['error_usercp_return_date_past'] = "You cannot return in the past!"; -$l['error_avatarresizefailed'] = "Your avatar was unable to be resized so that it is within the required dimensions."; -$l['error_avataruserresize'] = "You can also try checking the 'attempt to resize my avatar' check box and uploading the same image again."; -$l['avatar_auto_resize_note'] = "If your avatar is too large, it will automatically be resized."; -$l['avatar_auto_resize_option'] = "Try to resize my avatar if it is too large."; -$l['subscribe_to_thread'] = "Subscribe to Thread: {1}"; -$l['notification_method'] = "Notification Method:"; -$l['no_notification'] = "No Notification"; -$l['no_notification_desc'] = "You will not receive any automatic notifications of replies to this thread."; -$l['email_notification'] = "Instant Email Notification"; -$l['email_notification_desc'] = "You will receive instant notification via email of any replies made to this thread."; -$l['pm_notification'] = "Instant PM Notification"; -$l['pm_notification_desc'] = "You will receive instant notification via PM of any replies made to this thread."; -$l['do_subscribe'] = "Subscribe to Thread"; -$l['subscription_method'] = "Default Thread Subscription Mode:"; -$l['no_auto_subscribe'] = "Do not subscribe"; -$l['no_subscribe'] = "No notification"; -$l['instant_email_subscribe'] = "Instant email notification"; -$l['instant_pm_subscribe'] = "Instant PM notification"; -$l['with_selected'] = "With Selected:"; -$l['delete_subscriptions'] = "Delete subscriptions"; -$l['update_no_notification'] = "Change to no notification"; -$l['update_email_notification'] = "Change to email notification"; -$l['update_pm_notification'] = "Change to PM notification"; -$l['no_subscriptions_selected'] = "You did not select any subscriptions to perform the selected action on."; -$l['redirect_subscriptions_updated'] = "The selected subscriptions have been updated.
    You will be now returned to the thread subscriptions list."; -$l['latest_threads'] = "Your Latest Threads"; -$l['find_all_threads'] = "Find All of Your Threads"; -$l['new_thread_subscriptions'] = "Thread Subscriptions With New Posts"; -$l['view_all_subscriptions'] = "View All Subscriptions"; -$l['latest_warnings'] = "Latest Warnings Received"; -$l['current_warning_level'] = "Current warning level: {1}% ({2}/{3})"; -$l['warning'] = "Warning"; -$l['date_issued'] = "Date Issued"; -$l['expiry_date'] = "Expiry Date"; -$l['issued_by'] = "Issued By"; -$l['warning_for_post'] = "for post: "; -$l['warning_revoked'] = "Revoked"; -$l['already_expired'] = "Expired"; -$l['warning_points'] = "({1} points)"; -$l['new_posts_thread'] = "New Posts"; -$l['new_hot_thread'] = "Hot Thread (New)"; -$l['posts_by_you'] = "Contains Posts by You"; -$l['no_new_thread'] = "No New Posts"; -$l['hot_thread'] = "Hot Thread (No New)"; -$l['locked_thread'] = "Locked Thread"; -$l['icon_dot'] = "Contains posts by you. "; // The spaces for the icon labels are strategically placed so that there should be no extra space at the beginning or end of the resulting label and that spaces separate each 'status' ;) -$l['icon_no_new'] = "No new posts."; -$l['icon_new'] = "New posts."; -$l['icon_hot'] = " Hot thread."; -$l['icon_lock'] = " Locked thread."; - -$l['buddylist_error'] = 'There was an error fetching the buddy list. '; - -$l['buddyrequests_sent'] = 'Buddy Requests Sent'; -$l['buddyrequests_received'] = 'Buddy Requests Received'; -$l['from'] = 'From'; -$l['to'] = 'To'; -$l['date'] = 'Date'; -$l['options'] = 'Options'; -$l['accept'] = 'Accept'; -$l['decline'] = 'Decline'; -$l['cancel'] = 'Cancel'; -$l['no_requests'] = 'No requests found.'; -$l['buddyrequests_pm'] = 'Receive PM notifications for new buddy requests.'; -$l['buddyrequests_auto'] = 'Automatically accept buddy requests (if the above checkbox is ticked, a PM is sent informing of the new buddy connection)'; -$l['buddyrequest_received'] = 'Buddy request received'; -$l['buddyrequest_new_buddy'] = 'You have a new buddy'; -$l['buddyrequest_new_buddy_message'] = "Hi,\n\nI have been automatically added to your buddy list."; -$l['buddyrequest_accepted_request'] = 'I have accepted your buddy request'; -$l['buddyrequest_accepted_request_message'] = "Hi,\n\nI have accepted your buddy request."; -$l['buddyrequest_received_message'] = "I have just sent you a buddy request.\nYou can view your pending requests from User Control Panel -> Buddy/Ignore List."; -$l['users_already_sent_request'] = "You have already sent a buddy request to one of the users you added."; -$l['users_already_rec_request'] = "You have a pending buddy request from one of the users you added."; -$l['users_already_sent_request_alt'] = "You have sent a buddy request to one of the users you added. Please cancel the buddy request before adding the user to the ignore list."; -$l['users_already_rec_request_alt'] = "You have a pending buddy request from one of the users you added. Please decline the buddy request before adding the user to the ignore list."; -$l['invalid_request'] = 'You have selected an invalid buddy request.'; -$l['buddyrequest_cancelled'] = 'The selected buddy request has been cancelled.'; -$l['buddyrequest_accepted'] = 'The selected buddy request has been accepted.'; -$l['buddyrequest_declined'] = 'The selected buddy request has been declined.'; -$l['user_doesnt_exist'] = 'The end user no longer exists.'; -$l['buddyrequests_sent_success'] = 'Buddy requests sent successfully.'; diff --git a/html/forums/inc/languages/english/usercpnav.lang.php b/html/forums/inc/languages/english/usercpnav.lang.php deleted file mode 100644 index f7b61d0..0000000 --- a/html/forums/inc/languages/english/usercpnav.lang.php +++ /dev/null @@ -1,33 +0,0 @@ -Saved Drafts ({1})"; -$l['ucp_nav_notepad'] = "Personal Pad"; -$l['ucp_nav_view_profile'] = "View Profile"; -$l['ucp_nav_home'] = "User CP Home"; -$l['ucp_nav_usergroups'] = "Group Memberships"; -$l['ucp_nav_attachments'] = "Manage Attachments"; diff --git a/html/forums/inc/languages/english/warnings.lang.php b/html/forums/inc/languages/english/warnings.lang.php deleted file mode 100644 index a638a01..0000000 --- a/html/forums/inc/languages/english/warnings.lang.php +++ /dev/null @@ -1,88 +0,0 @@ -Anonymous PM: send this private message as an anonymous user."; -$l['expiration_never'] = "permanently"; -$l['expiration_hours'] = "hours"; -$l['expiration_days'] = "days"; -$l['expiration_weeks'] = "weeks"; -$l['expiration_months'] = "months"; -$l['redirect_warned_banned'] = "

    The user has also been moved to the {1} group {2}."; -$l['redirect_warned_suspended'] = "

    This users posting privileges have been suspended {1}."; -$l['redirect_warned_moderate'] = "

    All posts by this user will now be moderated {1}."; -$l['redirect_warned_pmerror'] = "

    Please note that the PM was not sent."; -$l['redirect_warned'] = "The warning level of {1} has been increased to {2}%.{3}

    You will now be taken back to where you came from."; -$l['error_warning_system_disabled'] = "You cannot use the warning system as it has been disabled by the board administrator."; -$l['error_cant_warn_group'] = "You do not have permission to warn users of this group."; -$l['error_invalid_user'] = "Selected user doesn't exist."; -$l['details'] = "Details"; -$l['view'] = "View"; -$l['current_warning_level'] = "Current warning level: {1}% ({2}/{3})"; -$l['warning_details'] = "Warning Details"; -$l['revoke_warning'] = "Revoke this Warning"; -$l['revoke_warning_desc'] = "To revoke this warning please enter a reason below. This will not remove any bans or suspensions imposed by this warning."; -$l['warning_is_revoked'] = "This Warning has been revoked"; -$l['revoked_by'] = "Revoked By"; -$l['date_revoked'] = "Date Revoked"; -$l['warning_already_revoked'] = "This warning has already been revoked."; -$l['no_revoke_reason'] = "You did not enter a reason as to why you want to revoke this warning."; -$l['redirect_warning_revoked'] = "This warning has successfully been revoked and the users warning points decreased.

    You will now be taken back to the warning."; -$l['result'] = "Result:"; -$l['result_banned'] = "User will be moved to banned group ({1}) {2}"; -$l['result_suspended'] = "Posting privileges will be suspended {1}"; -$l['result_moderated'] = "Posts will be moderated {1}"; -$l['result_period'] = "for {1} {2}"; -$l['result_period_perm'] = "permanently"; -$l['hour_or_hours'] = "Hour(s)"; -$l['day_or_days'] = "Day(s)"; -$l['week_or_weeks'] = "Week(s)"; -$l['month_or_months'] = "Month(s)"; -$l['expires'] = "Expires:"; -$l['new_warning_level'] = "New warning level:"; -$l['error_cant_warn_user'] = "You do not have permission to warn this user."; -$l['existing_post_warnings'] = "Existing Warnings for this Post"; diff --git a/html/forums/inc/languages/english/xmlhttp.lang.php b/html/forums/inc/languages/english/xmlhttp.lang.php deleted file mode 100644 index 278895a..0000000 --- a/html/forums/inc/languages/english/xmlhttp.lang.php +++ /dev/null @@ -1,45 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/mailhandlers/index.html b/html/forums/inc/mailhandlers/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/mailhandlers/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/mailhandlers/php.php b/html/forums/inc/mailhandlers/php.php deleted file mode 100644 index 43dccc0..0000000 --- a/html/forums/inc/mailhandlers/php.php +++ /dev/null @@ -1,86 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * PHP mail handler class. - */ -class PhpMail extends MailHandler -{ - /** - * Additional parameters to pass to PHPs mail() function. - * - * @var string - */ - public $additional_parameters = ''; - - /** - * Sends the email. - * - * @return bool whether or not the email got sent or not. - */ - function send() - { - global $lang, $mybb; - - // For some reason sendmail/qmail doesn't like \r\n - $this->sendmail = @ini_get('sendmail_path'); - if($this->sendmail) - { - $this->headers = str_replace("\r\n", "\n", $this->headers); - $this->message = str_replace("\r\n", "\n", $this->message); - $this->delimiter = "\n"; - } - - // Some mail providers ignore email's with incorrect return-to path's so try and fix that here - $this->sendmail_from = @ini_get('sendmail_from'); - if($this->sendmail_from != $mybb->settings['adminemail']) - { - @ini_set("sendmail_from", $mybb->settings['adminemail']); - } - - $dir = "/{$mybb->config['admin_dir']}/"; - $pos = strrpos($_SERVER['PHP_SELF'], $dir); - if(defined('IN_ADMINCP') && $pos !== false) - { - $temp_script_path = $_SERVER['PHP_SELF']; - $_SERVER['PHP_SELF'] = substr($_SERVER['PHP_SELF'], $pos + strlen($dir) - 1); - } - - // If safe mode is on, don't send the additional parameters as we're not allowed to - if($mybb->safemode) - { - $sent = @mail($this->to, $this->subject, $this->message, trim($this->headers)); - } - else - { - $sent = @mail($this->to, $this->subject, $this->message, trim($this->headers), $this->additional_parameters); - } - $function_used = 'mail()'; - - if(defined('IN_ADMINCP') && $pos !== false) - { - $_SERVER['PHP_SELF'] = $temp_script_path; - } - - if(!$sent) - { - $this->fatal_error("MyBB was unable to send the email using the PHP {$function_used} function."); - return false; - } - - return true; - } -} diff --git a/html/forums/inc/mailhandlers/smtp.php b/html/forums/inc/mailhandlers/smtp.php deleted file mode 100644 index 9afe44c..0000000 --- a/html/forums/inc/mailhandlers/smtp.php +++ /dev/null @@ -1,538 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -/** - * SMTP mail handler class. - */ - -if(!defined('MYBB_SSL')) -{ - define('MYBB_SSL', 1); -} - -if(!defined('MYBB_TLS')) -{ - define('MYBB_TLS', 2); -} - -class SmtpMail extends MailHandler -{ - /** - * The SMTP connection. - * - * @var resource - */ - public $connection; - - /** - * SMTP username. - * - * @var string - */ - public $username = ''; - - /** - * SMTP password. - * - * @var string - */ - public $password = ''; - - /** - * Hello string sent to the smtp server with either HELO or EHLO. - * - * @var string - */ - public $helo = 'localhost'; - - /** - * User authenticated or not. - * - * @var boolean - */ - public $authenticated = false; - - /** - * How long before timeout. - * - * @var integer - */ - public $timeout = 5; - - /** - * SMTP status. - * - * @var integer - */ - public $status = 0; - - /** - * SMTP default port. - * - * @var integer - */ - public $port = 25; - - /** - * SMTP default secure port. - * - * @var integer - */ - public $secure_port = 465; - - /** - * SMTP host. - * - * @var string - */ - public $host = ''; - - /** - * The last received error message from the SMTP server. - * - * @var string - */ - public $last_error = ''; - - /** - * Are we keeping the connection to the SMTP server alive? - * - * @var boolean - */ - public $keep_alive = false; - - /** - * Whether to use TLS encryption. - * - * @var boolean - */ - public $use_tls = false; - - function __construct() - { - global $mybb; - - $protocol = ''; - switch($mybb->settings['secure_smtp']) - { - case MYBB_SSL: - $protocol = 'ssl://'; - break; - case MYBB_TLS: - $this->use_tls = true; - break; - } - - if(empty($mybb->settings['smtp_host'])) - { - $this->host = @ini_get('SMTP'); - } - else - { - $this->host = $mybb->settings['smtp_host']; - } - - $local = array('127.0.0.1', '::1', 'localhost'); - if(!in_array($this->host, $local)) - { - if(function_exists('gethostname') && gethostname() !== false) - { - $this->helo = gethostname(); - } - elseif(function_exists('php_uname')) - { - $helo = php_uname('n'); - if(!empty($helo)) - { - $this->helo = $helo; - } - } - elseif(!empty($_SERVER['SERVER_NAME'])) - { - $this->helo = $_SERVER['SERVER_NAME']; - } - } - - $this->host = $protocol . $this->host; - - if(empty($mybb->settings['smtp_port']) && !empty($protocol) && !@ini_get('smtp_port')) - { - $this->port = $this->secure_port; - } - else if(empty($mybb->settings['smtp_port']) && @ini_get('smtp_port')) - { - $this->port = @ini_get('smtp_port'); - } - else if(!empty($mybb->settings['smtp_port'])) - { - $this->port = $mybb->settings['smtp_port']; - } - - $this->password = $mybb->settings['smtp_pass']; - $this->username = $mybb->settings['smtp_user']; - } - - /** - * Sends the email. - * - * @return bool whether or not the email got sent or not. - */ - function send() - { - global $lang, $mybb; - - if(!$this->connected()) - { - if(!$this->connect()) - { - $this->close(); - } - } - - if($this->connected()) - { - if(!$this->send_data('MAIL FROM:<'.$this->from.'>', '250')) - { - $this->fatal_error("The mail server does not understand the MAIL FROM command. Reason: ".$this->get_error()); - return false; - } - - // Loop through recipients - $emails = explode(',', $this->to); - foreach($emails as $to) - { - $to = trim($to); - if(!$this->send_data('RCPT TO:<'.$to.'>', '250')) - { - $this->fatal_error("The mail server does not understand the RCPT TO command. Reason: ".$this->get_error()); - return false; - } - } - - if($this->send_data('DATA', '354')) - { - $this->send_data('Date: ' . gmdate('r')); - $this->send_data('To: ' . $this->to); - - $this->send_data('Subject: ' . $this->subject); - - // Only send additional headers if we've got any - if(trim($this->headers)) - { - $this->send_data(trim($this->headers)); - } - - $this->send_data(""); - - // Queue the actual message - $this->message = str_replace("\n.", "\n..", $this->message); - $this->send_data($this->message); - } - else - { - $this->fatal_error("The mail server did not understand the DATA command"); - return false; - } - - $this->send_data('.', '250'); - - if(!$this->keep_alive) - { - $this->close(); - } - return true; - } - else - { - return false; - } - } - - /** - * Connect to the SMTP server. - * - * @return boolean True if connection was successful - */ - function connect() - { - global $lang, $mybb; - - $this->connection = @fsockopen($this->host, $this->port, $error_number, $error_string, $this->timeout); - - // DIRECTORY_SEPARATOR checks if running windows - if(function_exists('stream_set_timeout') && DIRECTORY_SEPARATOR != '\\') - { - @stream_set_timeout($this->connection, $this->timeout, 0); - } - - if(is_resource($this->connection)) - { - $this->status = 1; - $this->get_data(); - if(!$this->check_status('220')) - { - $this->fatal_error("The mail server is not ready, it did not respond with a 220 status message."); - return false; - } - - if($this->use_tls || (!empty($this->username) && !empty($this->password))) - { - $helo = 'EHLO'; - } - else - { - $helo = 'HELO'; - } - - $data = $this->send_data("{$helo} {$this->helo}", '250'); - if(!$data) - { - $this->fatal_error("The server did not understand the {$helo} command"); - return false; - } - - if($this->use_tls && preg_match("#250( |-)STARTTLS#mi", $data)) - { - if(!$this->send_data('STARTTLS', '220')) - { - $this->fatal_error("The server did not understand the STARTTLS command. Reason: ".$this->get_error()); - return false; - } - if(!@stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) - { - $this->fatal_error("Failed to start TLS encryption"); - return false; - } - // Resend EHLO to get updated service list - $data = $this->send_data("{$helo} {$this->helo}", '250'); - if(!$data) - { - $this->fatal_error("The server did not understand the EHLO command"); - return false; - } - } - - if(!empty($this->username) && !empty($this->password)) - { - preg_match("#250( |-)AUTH( |=)(.+)$#mi", $data, $matches); - if(!$this->auth($matches[3])) - { - return false; - } - } - return true; - } - else - { - $this->fatal_error("Unable to connect to the mail server with the given details. Reason: {$error_number}: {$error_string}"); - return false; - } - } - - /** - * Authenticate against the SMTP server. - * - * @param string $auth_methods A list of authentication methods supported by the server - * @return boolean True on success - */ - function auth($auth_methods) - { - global $lang, $mybb; - - $auth_methods = explode(" ", trim($auth_methods)); - - if(in_array("LOGIN", $auth_methods)) - { - if(!$this->send_data("AUTH LOGIN", 334)) - { - if($this->code == 503) - { - return true; - } - $this->fatal_error("The SMTP server did not respond correctly to the AUTH LOGIN command"); - return false; - } - - if(!$this->send_data(base64_encode($this->username), '334')) - { - $this->fatal_error("The SMTP server rejected the supplied SMTP username. Reason: ".$this->get_error()); - return false; - } - - if(!$this->send_data(base64_encode($this->password), '235')) - { - $this->fatal_error("The SMTP server rejected the supplied SMTP password. Reason: ".$this->get_error()); - return false; - } - } - else if(in_array("PLAIN", $auth_methods)) - { - if(!$this->send_data("AUTH PLAIN", '334')) - { - if($this->code == 503) - { - return true; - } - $this->fatal_error("The SMTP server did not respond correctly to the AUTH PLAIN command"); - return false; - } - $auth = base64_encode(chr(0).$this->username.chr(0).$this->password); - if(!$this->send_data($auth, 235)) - { - $this->fatal_error("The SMTP server rejected the supplied login username and password. Reason: ".$this->get_error()); - return false; - } - } - else - { - $this->fatal_error("The SMTP server does not support any of the AUTH methods that MyBB supports"); - return false; - } - - // Still here, we're authenticated - return true; - } - - /** - * Fetch data from the SMTP server. - * - * @return string The data from the SMTP server - */ - function get_data() - { - $string = ''; - - while((($line = fgets($this->connection, 515)) !== false)) - { - $string .= $line; - if(substr($line, 3, 1) == ' ') - { - break; - } - } - $string = trim($string); - $this->data = $string; - $this->code = substr($this->data, 0, 3); - return $string; - } - - /** - * Check if we're currently connected to an SMTP server - * - * @return boolean true if connected - */ - function connected() - { - if($this->status == 1) - { - return true; - } - return false; - } - - /** - * Send data through to the SMTP server. - * - * @param string $data The data to be sent - * @param int|bool $status_num The response code expected back from the server (if we have one) - * @return boolean True on success - */ - function send_data($data, $status_num = false) - { - if($this->connected()) - { - if(fwrite($this->connection, $data."\r\n")) - { - if($status_num != false) - { - $rec = $this->get_data(); - if($this->check_status($status_num)) - { - return $rec; - } - else - { - $this->set_error($rec); - return false; - } - } - return true; - } - else - { - $this->fatal_error("Unable to send the data to the SMTP server"); - return false; - } - } - return false; - } - - /** - * Checks if the received status code matches the one we expect. - * - * @param int $status_num The status code we expected back from the server - * @return string|bool - */ - function check_status($status_num) - { - if($this->code == $status_num) - { - return $this->data; - } - else - { - return false; - } - } - - /** - * Close the connection to the SMTP server. - */ - function close() - { - if($this->status == 1) - { - $this->send_data('QUIT'); - fclose($this->connection); - $this->status = 0; - } - } - - /** - * Get the last error message response from the SMTP server - * - * @return string The error message response from the SMTP server - */ - function get_error() - { - if(!$this->last_error) - { - $this->last_error = "N/A"; - } - - return $this->last_error; - } - - /** - * Set the last error message response from the SMTP server - * - * @param string $error The error message response - */ - function set_error($error) - { - $this->last_error = $error; - } -} diff --git a/html/forums/inc/mybb_group.php b/html/forums/inc/mybb_group.php deleted file mode 100644 index 41f6c9f..0000000 --- a/html/forums/inc/mybb_group.php +++ /dev/null @@ -1,17 +0,0 @@ -add_hook('admin_config_settings_manage', 'hello_settings'); - $plugins->add_hook('admin_config_settings_change', 'hello_settings'); - $plugins->add_hook('admin_config_settings_start', 'hello_settings'); - // We could hook at 'admin_config_settings_begin' only for simplicity sake. -} -else -{ - // Add our hello_index() function to the index_start hook so when that hook is run our function is executed - $plugins->add_hook('index_start', 'hello_index'); - - // Add our hello_post() function to the postbit hook so it gets executed on every post - $plugins->add_hook('postbit', 'hello_post'); - - // Add our hello_new() function to the misc_start hook so our misc.php?action=hello inserts a new message into the created DB table. - $plugins->add_hook('misc_start', 'hello_new'); -} - -function hello_info() -{ - global $lang; - $lang->load('hello'); - - /** - * Array of information about the plugin. - * name: The name of the plugin - * description: Description of what the plugin does - * website: The website the plugin is maintained at (Optional) - * author: The name of the author of the plugin - * authorsite: The URL to the website of the author (Optional) - * version: The version number of the plugin - * compatibility: A CSV list of MyBB versions supported. Ex, '121,123', '12*'. Wildcards supported. - * codename: An unique code name to be used by updated from the official MyBB Mods community. - */ - return array( - 'name' => 'Hello World!', - 'description' => $lang->hello_desc, - 'website' => 'https://mybb.com', - 'author' => 'MyBB Group', - 'authorsite' => 'https://mybb.com', - 'version' => '2.0', - 'compatibility' => '18*', - 'codename' => 'hello' - ); -} - -/* - * _activate(): - * Called whenever a plugin is activated via the Admin CP. This should essentially make a plugin - * 'visible' by adding templates/template changes, language changes etc. -*/ -function hello_activate() -{ - global $db, $lang; - $lang->load('hello'); - - // Add a new template (hello_index) to our global templates (sid = -1) - $templatearray = array( - 'index' => '
    - - - - - - - - - - - - - - -
    - {$lang->hello} -
    -
    - - - {$lang->hello_add_message}: -
    -
    - {$messages} -
    -
    ', - 'post' => '

    {$lang->hello}:
    {$messages}', - 'message' => '
    - {$message}' - ); - - $group = array( - 'prefix' => $db->escape_string('hello'), - 'title' => $db->escape_string('Hello World!') - ); - - // Update or create template group: - $query = $db->simple_select('templategroups', 'prefix', "prefix='{$group['prefix']}'"); - - if($db->fetch_field($query, 'prefix')) - { - $db->update_query('templategroups', $group, "prefix='{$group['prefix']}'"); - } - else - { - $db->insert_query('templategroups', $group); - } - - // Query already existing templates. - $query = $db->simple_select('templates', 'tid,title,template', "sid=-2 AND (title='{$group['prefix']}' OR title LIKE '{$group['prefix']}=_%' ESCAPE '=')"); - - $templates = $duplicates = array(); - - while($row = $db->fetch_array($query)) - { - $title = $row['title']; - $row['tid'] = (int)$row['tid']; - - if(isset($templates[$title])) - { - // PluginLibrary had a bug that caused duplicated templates. - $duplicates[] = $row['tid']; - $templates[$title]['template'] = false; // force update later - } - else - { - $templates[$title] = $row; - } - } - - // Delete duplicated master templates, if they exist. - if($duplicates) - { - $db->delete_query('templates', 'tid IN ('.implode(",", $duplicates).')'); - } - - // Update or create templates. - foreach($templatearray as $name => $code) - { - if(strlen($name)) - { - $name = "hello_{$name}"; - } - else - { - $name = "hello"; - } - - $template = array( - 'title' => $db->escape_string($name), - 'template' => $db->escape_string($code), - 'version' => 1, - 'sid' => -2, - 'dateline' => TIME_NOW - ); - - // Update - if(isset($templates[$name])) - { - if($templates[$name]['template'] !== $code) - { - // Update version for custom templates if present - $db->update_query('templates', array('version' => 0), "title='{$template['title']}'"); - - // Update master template - $db->update_query('templates', $template, "tid={$templates[$name]['tid']}"); - } - } - // Create - else - { - $db->insert_query('templates', $template); - } - - // Remove this template from the earlier queried list. - unset($templates[$name]); - } - - // Remove no longer used templates. - foreach($templates as $name => $row) - { - $db->delete_query('templates', "title='{$db->escape_string($name)}'"); - } - - // Settings group array details - $group = array( - 'name' => 'hello', - 'title' => $db->escape_string($lang->setting_group_hello), - 'description' => $db->escape_string($lang->setting_group_hello_desc), - 'isdefault' => 0 - ); - - // Check if the group already exists. - $query = $db->simple_select('settinggroups', 'gid', "name='hello'"); - - if($gid = (int)$db->fetch_field($query, 'gid')) - { - // We already have a group. Update title and description. - $db->update_query('settinggroups', $group, "gid='{$gid}'"); - } - else - { - // We don't have a group. Create one with proper disporder. - $query = $db->simple_select('settinggroups', 'MAX(disporder) AS disporder'); - $disporder = (int)$db->fetch_field($query, 'disporder'); - - $group['disporder'] = ++$disporder; - - $gid = (int)$db->insert_query('settinggroups', $group); - } - - // Deprecate all the old entries. - $db->update_query('settings', array('description' => 'HELLODELETEMARKER'), "gid='{$gid}'"); - - // add settings - $settings = array( - 'display1' => array( - 'optionscode' => 'yesno', - 'value' => 1 - ), - 'display2' => array( - 'optionscode' => 'yesno', - 'value' => 1 - )); - - $disporder = 0; - - // Create and/or update settings. - foreach($settings as $key => $setting) - { - // Prefix all keys with group name. - $key = "hello_{$key}"; - - $lang_var_title = "setting_{$key}"; - $lang_var_description = "setting_{$key}_desc"; - - $setting['title'] = $lang->{$lang_var_title}; - $setting['description'] = $lang->{$lang_var_description}; - - // Filter valid entries. - $setting = array_intersect_key($setting, - array( - 'title' => 0, - 'description' => 0, - 'optionscode' => 0, - 'value' => 0, - )); - - // Escape input values. - $setting = array_map(array($db, 'escape_string'), $setting); - - // Add missing default values. - ++$disporder; - - $setting = array_merge( - array('description' => '', - 'optionscode' => 'yesno', - 'value' => 0, - 'disporder' => $disporder), - $setting); - - $setting['name'] = $db->escape_string($key); - $setting['gid'] = $gid; - - // Check if the setting already exists. - $query = $db->simple_select('settings', 'sid', "gid='{$gid}' AND name='{$setting['name']}'"); - - if($sid = $db->fetch_field($query, 'sid')) - { - // It exists, update it, but keep value intact. - unset($setting['value']); - $db->update_query('settings', $setting, "sid='{$sid}'"); - } - else - { - // It doesn't exist, create it. - $db->insert_query('settings', $setting); - // Maybe use $db->insert_query_multiple somehow - } - } - - // Delete deprecated entries. - $db->delete_query('settings', "gid='{$gid}' AND description='HELLODELETEMARKER'"); - - // This is required so it updates the settings.php file as well and not only the database - they must be synchronized! - rebuild_settings(); - - // Include this file because it is where find_replace_templatesets is defined - require_once MYBB_ROOT.'inc/adminfunctions_templates.php'; - - // Edit the index template and add our variable to above {$forums} - find_replace_templatesets('index', '#'.preg_quote('{$forums}').'#', "{\$hello}\n{\$forums}"); -} - -/* - * _deactivate(): - * Called whenever a plugin is deactivated. This should essentially 'hide' the plugin from view - * by removing templates/template changes etc. It should not, however, remove any information - * such as tables, fields etc - that should be handled by an _uninstall routine. When a plugin is - * uninstalled, this routine will also be called before _uninstall() if the plugin is active. -*/ -function hello_deactivate() -{ - require_once MYBB_ROOT.'inc/adminfunctions_templates.php'; - - // remove template edits - find_replace_templatesets('index', '#'.preg_quote('{$hello}').'#', ''); -} - -/* - * _install(): - * Called whenever a plugin is installed by clicking the 'Install' button in the plugin manager. - * If no install routine exists, the install button is not shown and it assumed any work will be - * performed in the _activate() routine. -*/ -function hello_install() -{ - global $db; - - // Create our table collation - $collation = $db->build_create_table_collation(); - - // Create table if it doesn't exist already - if(!$db->table_exists('hello_messages')) - { - switch($db->type) - { - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."hello_messages ( - mid serial, - message varchar(100) NOT NULL default '', - PRIMARY KEY (mid) - );"); - break; - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."hello_messages ( - mid INTEGER PRIMARY KEY, - message varchar(100) NOT NULL default '' - );"); - break; - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."hello_messages ( - mid int unsigned NOT NULL auto_increment, - message varchar(100) NOT NULL default '', - PRIMARY KEY (mid) - ) ENGINE=MyISAM{$collation};"); - break; - } - } -} - -/* - * _is_installed(): - * Called on the plugin management page to establish if a plugin is already installed or not. - * This should return TRUE if the plugin is installed (by checking tables, fields etc) or FALSE - * if the plugin is not installed. -*/ -function hello_is_installed() -{ - global $db; - - // If the table exists then it means the plugin is installed because we only drop it on uninstallation - return $db->table_exists('hello_messages'); -} - -/* - * _uninstall(): - * Called whenever a plugin is to be uninstalled. This should remove ALL traces of the plugin - * from the installation (tables etc). If it does not exist, uninstall button is not shown. -*/ -function hello_uninstall() -{ - global $db, $mybb; - - if($mybb->request_method != 'post') - { - global $page, $lang; - $lang->load('hello'); - - $page->output_confirm_action('index.php?module=config-plugins&action=deactivate&uninstall=1&plugin=hello', $lang->hello_uninstall_message, $lang->hello_uninstall); - } - - // Delete template groups. - $db->delete_query('templategroups', "prefix='hello'"); - - // Delete templates belonging to template groups. - $db->delete_query('templates', "title='hello' OR title LIKE 'hello_%'"); - - // Delete settings group - $db->delete_query('settinggroups', "name='hello'"); - - // Remove the settings - $db->delete_query('settings', "name IN ('hello_display1','hello_display2')"); - - // This is required so it updates the settings.php file as well and not only the database - they must be synchronized! - rebuild_settings(); - - // Drop tables if desired - if(!isset($mybb->input['no'])) - { - $db->drop_table('hello_messages'); - } -} - -/* - * Loads the settings language strings. -*/ -function hello_settings() -{ - global $lang; - - // Load our language file - $lang->load('hello'); -} - -/* - * Displays the list of messages on index and a form to submit new messages - depending on the setting of course. -*/ -function hello_index() -{ - global $mybb; - - // Only run this function is the setting is set to yes - if($mybb->settings['hello_display1'] == 0) - { - return; - } - - global $db, $lang, $templates, $hello, $theme; - - // Load our language file - $lang->load('hello'); - - // Retreive all messages from the database - $messages = ''; - $query = $db->simple_select('hello_messages', 'message', '', array('order_by' => 'mid', 'order_dir' => 'DESC')); - while($message = $db->fetch_field($query, 'message')) - { - // htmlspecialchars_uni is similar to PHP's htmlspecialchars but allows unicode - $message = htmlspecialchars_uni($message); - $messages .= eval($templates->render('hello_message')); - } - - // If no messages were found, display that notice. - if(empty($messages)) - { - $message = $lang->hello_empty; - $messages = eval($templates->render('hello_message')); - } - - // Set $hello as our template and use eval() to do it so we can have our variables parsed - #eval('$hello = "'.$templates->get('hello_index').'";'); - $hello = eval($templates->render('hello_index')); -} - -/* - * Displays the list of messages under every post - depending on the setting. - * @param $post Array containing information about the current post. Note: must be received by reference otherwise our changes are not preserved. -*/ -function hello_post(&$post) -{ - global $settings; - - // Only run this function is the setting is set to yes - if($settings['hello_display2'] == 0) - { - return; - } - - global $lang, $templates; - - // Load our language file - if(!isset($lang->hello)) - { - $lang->load('hello'); - } - - static $messages; - - // Only retreive messages from the database if they were not retreived already - if(!isset($messages)) - { - global $db; - - // Retreive all messages from the database - $messages = ''; - $query = $db->simple_select('hello_messages', 'message', '', array('order_by' => 'mid', 'order_dir' => 'DESC')); - while($message = $db->fetch_field($query, 'message')) - { - // htmlspecialchars_uni is similar to PHP's htmlspecialchars but allows unicode - $message = htmlspecialchars_uni($message); - $messages .= eval($templates->render('hello_message')); - } - - // If no messages were found, display that notice. - if(empty($messages)) - { - $message = $lang->hello_empty; - $messages = eval($templates->render('hello_message')); - } - } - - // Alter the current post's message - $post['message'] .= eval($templates->render('hello_post')); -} - -/* -* This is where new messages get submitted. -*/ -function hello_new() -{ - global $mybb; - - // If we're not running the 'hello' action as specified in our form, get out of there. - if($mybb->get_input('action') != 'hello') - { - return; - } - - // Only accept POST - if($mybb->request_method != 'post') - { - error_no_permission(); - } - - global $lang; - - // Correct post key? This is important to prevent CSRF - verify_post_check($mybb->get_input('my_post_key')); - - // Load our language file - $lang->load('hello'); - - $message = trim($mybb->get_input('message')); - - // Message cannot be empty - if(!$message || my_strlen($message) > 100) - { - error($lang->hello_message_empty); - } - - global $db; - - // Escape input data - $message = $db->escape_string($message); - - // Insert into database - $db->insert_query('hello_messages', array('message' => $message)); - - // Redirect to index.php with a message - redirect('index.php', $lang->hello_done); -} diff --git a/html/forums/inc/plugins/index.html b/html/forums/inc/plugins/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/plugins/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/settings.php b/html/forums/inc/settings.php deleted file mode 100644 index e69de29..0000000 diff --git a/html/forums/inc/tasks/backupdb.php b/html/forums/inc/tasks/backupdb.php deleted file mode 100644 index bd1aabc..0000000 --- a/html/forums/inc/tasks/backupdb.php +++ /dev/null @@ -1,147 +0,0 @@ -task_backup_cannot_write_backup); - } - else - { - $db->set_table_prefix(''); - - $file = MYBB_ADMIN_DIR.'backups/backup_'.date("_Ymd_His_").random_str(16); - - if(function_exists('gzopen')) - { - $fp = gzopen($file.'.incomplete.sql.gz', 'w9'); - } - else - { - $fp = fopen($file.'.incomplete.sql', 'w'); - } - - $tables = $db->list_tables($config['database']['database'], $config['database']['table_prefix']); - - $time = date('dS F Y \a\t H:i', TIME_NOW); - $contents = "-- MyBB Database Backup\n-- Generated: {$time}\n-- -------------------------------------\n\n"; - - if(is_object($plugins)) - { - $args = array( - 'task' => &$task, - 'tables' => &$tables, - ); - $plugins->run_hooks('task_backupdb', $args); - } - - foreach($tables as $table) - { - $field_list = array(); - $fields_array = $db->show_fields_from($table); - foreach($fields_array as $field) - { - $field_list[] = $field['Field']; - } - - $fields = "`".implode("`,`", $field_list)."`"; - - $structure = $db->show_create_table($table).";\n"; - $contents .= $structure; - clear_overflow($fp, $contents); - - if($db->engine == 'mysqli') - { - $query = mysqli_query($db->read_link, "SELECT * FROM {$db->table_prefix}{$table}", MYSQLI_USE_RESULT); - } - else - { - $query = $db->simple_select($table); - } - - while($row = $db->fetch_array($query)) - { - $insert = "INSERT INTO {$table} ($fields) VALUES ("; - $comma = ''; - foreach($field_list as $field) - { - if(!isset($row[$field]) || is_null($row[$field])) - { - $insert .= $comma."NULL"; - } - else if($db->engine == 'mysqli') - { - $insert .= $comma."'".mysqli_real_escape_string($db->read_link, $row[$field])."'"; - } - else - { - $insert .= $comma."'".$db->escape_string($row[$field])."'"; - } - $comma = ','; - } - $insert .= ");\n"; - $contents .= $insert; - clear_overflow($fp, $contents); - } - $db->free_result($query); - } - - $db->set_table_prefix(TABLE_PREFIX); - - if(function_exists('gzopen')) - { - gzwrite($fp, $contents); - gzclose($fp); - rename($file.'.incomplete.sql.gz', $file.'.sql.gz'); - } - else - { - fwrite($fp, $contents); - fclose($fp); - rename($file.'.incomplete.sql', $file.'.sql'); - } - - add_task_log($task, $lang->task_backup_ran); - } -} - -// Allows us to refresh cache to prevent over flowing -function clear_overflow($fp, &$contents) -{ - global $mybb; - - if(function_exists('gzopen')) - { - gzwrite($fp, $contents); - } - else - { - fwrite($fp, $contents); - } - - $contents = ''; -} diff --git a/html/forums/inc/tasks/checktables.php b/html/forums/inc/tasks/checktables.php deleted file mode 100644 index 5f683ce..0000000 --- a/html/forums/inc/tasks/checktables.php +++ /dev/null @@ -1,88 +0,0 @@ -type == "sqlite") - { - return; - } - - @set_time_limit(0); - - $ok = array( - "The storage engine for the table doesn't support check", - "Table is already up to date", - "OK" - ); - - $comma = ""; - $tables_list = ""; - $repaired = ""; - $setting_done = false; - - $tables = $db->list_tables($mybb->config['database']['database'], $mybb->config['database']['table_prefix']); - foreach($tables as $key => $table) - { - $tables_list .= "{$comma}{$table} "; - $comma = ","; - } - - if($tables_list) - { - $query = $db->query("CHECK TABLE {$tables_list}CHANGED;"); - while($table = $db->fetch_array($query)) - { - if(!in_array($table['Msg_text'], $ok)) - { - if($table['Table'] != $mybb->config['database']['database'].".".TABLE_PREFIX."settings" && $setting_done != true) - { - $boardclosed = $mybb->settings['boardclosed']; - $boardclosed_reason = $mybb->settings['boardclosed_reason']; - - $db->update_query("settings", array('value' => 1), "name='boardclosed'", 1); - $db->update_query("settings", array('value' => $db->escape_string($lang->error_database_repair)), "name='boardclosed_reason'", 1); - rebuild_settings(); - - $setting_done = true; - } - - $db->query("REPAIR TABLE {$table['Table']}"); - $repaired[] = $table['Table']; - } - } - - if($setting_done == true) - { - $db->update_query("settings", array('value' => (int)$boardclosed), "name='boardclosed'", 1); - $db->update_query("settings", array('value' => $db->escape_string($boardclosed_reason)), "name='boardclosed_reason'", 1); - - rebuild_settings(); - } - - } - - if(is_object($plugins)) - { - $plugins->run_hooks('task_checktables', $task); - } - - if(!empty($repaired)) - { - add_task_log($task, $lang->sprintf($lang->task_checktables_ran_found, implode(', ', $repaired))); - } - else - { - add_task_log($task, $lang->task_checktables_ran); - } -} diff --git a/html/forums/inc/tasks/dailycleanup.php b/html/forums/inc/tasks/dailycleanup.php deleted file mode 100644 index 5a7a89b..0000000 --- a/html/forums/inc/tasks/dailycleanup.php +++ /dev/null @@ -1,92 +0,0 @@ - TIME_NOW-60*60*24, - 'threadreadcut' => TIME_NOW-(((int)$mybb->settings['threadreadcut'])*60*60*24), - 'privatemessages' => TIME_NOW-(60*60*24*7), - 'deleteinvite' => TIME_NOW-(((int)$mybb->settings['deleteinvites'])*60*60*24), - 'stoppmtracking' => TIME_NOW-(60*60*24*180) - ); - - if(is_object($plugins)) - { - $args = array( - 'task' => &$task, - 'time' => &$time - ); - $plugins->run_hooks('task_dailycleanup_start', $args); - } - - // Clear out sessions older than 24h - $db->delete_query("sessions", "time < '".(int)$time['sessionstime']."'"); - - // Delete old read topics - if($mybb->settings['threadreadcut'] > 0) - { - $db->delete_query("threadsread", "dateline < '".(int)$time['threadreadcut']."'"); - $db->delete_query("forumsread", "dateline < '".(int)$time['threadreadcut']."'"); - } - - // Check PMs moved to trash over a week ago & delete them - $query = $db->simple_select("privatemessages", "pmid, uid, folder", "deletetime<='".(int)$time['privatemessages']."' AND folder='4'"); - while($pm = $db->fetch_array($query)) - { - $user_update[$pm['uid']] = 1; - $pm_update[] = $pm['pmid']; - } - - // Delete old group invites - if($mybb->settings['deleteinvites'] > 0) - { - $db->delete_query("joinrequests", "dateline < '".(int)$time['deleteinvite']."' AND invite='1'"); - } - - // Stop tracking read PMs after 6 months - $sql_array = array( - "receipt" => 0 - ); - $db->update_query("privatemessages", $sql_array, "receipt='2' AND folder!='3' AND status!='0' AND readtime < '".(int)$time['stoppmtracking']."'"); - - if(is_object($plugins)) - { - $args = array( - 'user_update' => &$user_update, - 'pm_update' => &$pm_update - ); - $plugins->run_hooks('task_dailycleanup_end', $args); - } - - if(!empty($pm_update)) - { - $db->delete_query("privatemessages", "pmid IN(".implode(',', $pm_update).")"); - } - - if(!empty($user_update)) - { - foreach($user_update as $uid => $data) - { - update_pm_count($uid); - } - } - - $cache->update_most_replied_threads(); - $cache->update_most_viewed_threads(); - $cache->update_birthdays(); - $cache->update_forumsdisplay(); - - add_task_log($task, $lang->task_dailycleanup_ran); -} diff --git a/html/forums/inc/tasks/delayedmoderation.php b/html/forums/inc/tasks/delayedmoderation.php deleted file mode 100644 index 2d30652..0000000 --- a/html/forums/inc/tasks/delayedmoderation.php +++ /dev/null @@ -1,259 +0,0 @@ -simple_select("delayedmoderation", "*", "delaydateline <= '".TIME_NOW."'"); - while($delayedmoderation = $db->fetch_array($query)) - { - if(is_object($plugins)) - { - $args = array( - 'task' => &$task, - 'delayedmoderation' => &$delayedmoderation, - ); - $plugins->run_hooks('task_delayedmoderation', $args); - } - - $tids = explode(',', $delayedmoderation['tids']); - $input = my_unserialize($delayedmoderation['inputs']); - - if(my_strpos($delayedmoderation['type'], "modtool") !== false) - { - list(, $custom_id) = explode('_', $delayedmoderation['type'], 2); - $custommod->execute($custom_id, $tids); - } - else - { - switch($delayedmoderation['type']) - { - case "openclosethread": - $closed_tids = $open_tids = array(); - $query2 = $db->simple_select("threads", "tid,closed", "tid IN({$delayedmoderation['tids']})"); - while($thread = $db->fetch_array($query2)) - { - if($thread['closed'] == 1) - { - $closed_tids[] = $thread['tid']; - } - else - { - $open_tids[] = $thread['tid']; - } - } - - if(!empty($closed_tids)) - { - $moderation->open_threads($closed_tids); - } - - if(!empty($open_tids)) - { - $moderation->close_threads($open_tids); - } - break; - case "deletethread": - foreach($tids as $tid) - { - $moderation->delete_thread($tid); - } - break; - case "move": - foreach($tids as $tid) - { - $moderation->move_thread($tid, $input['new_forum']); - } - break; - case "stick": - $unstuck_tids = $stuck_tids = array(); - $query2 = $db->simple_select("threads", "tid,sticky", "tid IN({$delayedmoderation['tids']})"); - while($thread = $db->fetch_array($query2)) - { - if($thread['sticky'] == 1) - { - $stuck_tids[] = $thread['tid']; - } - else - { - $unstuck_tids[] = $thread['tid']; - } - } - - if(!empty($stuck_tids)) - { - $moderation->unstick_threads($stuck_tids); - } - - if(!empty($unstuck_tids)) - { - $moderation->stick_threads($unstuck_tids); - } - break; - case "merge": - // $delayedmoderation['tids'] should be a single tid - if(count($tids) != 1) - { - continue; - } - - // explode at # sign in a url (indicates a name reference) and reassign to the url - $realurl = explode("#", $input['threadurl']); - $input['threadurl'] = $realurl[0]; - - // Are we using an SEO URL? - if(substr($input['threadurl'], -4) == "html") - { - // Get thread to merge's tid the SEO way - preg_match("#thread-([0-9]+)?#i", $input['threadurl'], $threadmatch); - preg_match("#post-([0-9]+)?#i", $input['threadurl'], $postmatch); - - if($threadmatch[1]) - { - $parameters['tid'] = $threadmatch[1]; - } - - if($postmatch[1]) - { - $parameters['pid'] = $postmatch[1]; - } - } - else - { - // Get thread to merge's tid the normal way - $splitloc = explode(".php", $input['threadurl']); - $temp = explode("&", my_substr($splitloc[1], 1)); - - if(!empty($temp)) - { - for($i = 0; $i < count($temp); $i++) - { - $temp2 = explode("=", $temp[$i], 2); - $parameters[$temp2[0]] = $temp2[1]; - } - } - else - { - $temp2 = explode("=", $splitloc[1], 2); - $parameters[$temp2[0]] = $temp2[1]; - } - } - - if($parameters['pid'] && !$parameters['tid']) - { - $post = get_post($parameters['pid']); - $mergetid = $post['tid']; - } - else if($parameters['tid']) - { - $mergetid = $parameters['tid']; - } - - $mergetid = (int)$mergetid; - $mergethread = get_thread($mergetid); - - if(!$mergethread['tid']) - { - continue; - } - - if($mergetid == $delayedmoderation['tids']) - { - // sanity check - continue; - } - - if($input['subject']) - { - $subject = $input['subject']; - } - else - { - $query = $db->simple_select("threads", "subject", "tid='{$delayedmoderation['tids']}'"); - $subject = $db->fetch_field($query, "subject"); - } - - $moderation->merge_threads($mergetid, $delayedmoderation['tids'], $subject); - break; - case "removeredirects": - foreach($tids as $tid) - { - $moderation->remove_redirects($tid); - } - break; - case "removesubscriptions": - $moderation->remove_thread_subscriptions($tids, true); - break; - case "approveunapprovethread": - $approved_tids = $unapproved_tids = array(); - $query2 = $db->simple_select("threads", "tid,visible", "tid IN({$delayedmoderation['tids']})"); - while($thread = $db->fetch_array($query2)) - { - if($thread['visible'] == 1) - { - $approved_tids[] = $thread['tid']; - } - else - { - $unapproved_tids[] = $thread['tid']; - } - } - - if(!empty($approved_tids)) - { - $moderation->unapprove_threads($approved_tids); - } - - if(!empty($unapproved_tids)) - { - $moderation->approve_threads($unapproved_tids); - } - break; - case "softdeleterestorethread": - $delete_tids = $restore_tids = array(); - $query2 = $db->simple_select("threads", "tid,visible", "tid IN({$delayedmoderation['tids']})"); - while($thread = $db->fetch_array($query2)) - { - if($thread['visible'] == -1) - { - $restore_tids[] = $thread['tid']; - } - else - { - $delete_tids[] = $thread['tid']; - } - } - - if(!empty($restore_tids)) - { - $moderation->restore_threads($restore_tids); - } - - if(!empty($delete_tids)) - { - $moderation->soft_delete_threads($delete_tids); - } - break; - } - } - - $db->delete_query("delayedmoderation", "did='{$delayedmoderation['did']}'"); - } - - add_task_log($task, $lang->task_delayedmoderation_ran); -} diff --git a/html/forums/inc/tasks/hourlycleanup.php b/html/forums/inc/tasks/hourlycleanup.php deleted file mode 100644 index 464d236..0000000 --- a/html/forums/inc/tasks/hourlycleanup.php +++ /dev/null @@ -1,53 +0,0 @@ - TIME_NOW, - 'searchlog' => TIME_NOW-(60*60*24), - 'captcha' => TIME_NOW-(60*60*24), - 'question' => TIME_NOW-(60*60*24) - ); - - if(is_object($plugins)) - { - $args = array( - 'task' => &$task, - 'time' => &$time - ); - $plugins->run_hooks('task_hourlycleanup', $args); - } - - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - - // Delete moved threads with time limits - $query = $db->simple_select('threads', 'tid', "deletetime != '0' AND deletetime < '".(int)$time['threads']."'"); - while($tid = $db->fetch_field($query, 'tid')) - { - $moderation->delete_thread($tid); - } - - // Delete old searches - $db->delete_query("searchlog", "dateline < '".(int)$time['searchlog']."'"); - - // Delete old captcha images - $cut = TIME_NOW-(60*60*24*7); - $db->delete_query("captcha", "dateline < '".(int)$time['captcha']."'"); - - // Delete old registration questions - $cut = TIME_NOW-(60*60*24*7); - $db->delete_query("questionsessions", "dateline < '".(int)$time['question']."'"); - - add_task_log($task, $lang->task_hourlycleanup_ran); -} diff --git a/html/forums/inc/tasks/index.html b/html/forums/inc/tasks/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/inc/tasks/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/inc/tasks/logcleanup.php b/html/forums/inc/tasks/logcleanup.php deleted file mode 100644 index b7f0944..0000000 --- a/html/forums/inc/tasks/logcleanup.php +++ /dev/null @@ -1,63 +0,0 @@ -config['log_pruning']['admin_logs'] > 0) - { - $cut = TIME_NOW-60*60*24*$mybb->config['log_pruning']['admin_logs']; - $db->delete_query("adminlog", "dateline<'{$cut}'"); - } - - // Clear out old moderator logs - if($mybb->config['log_pruning']['mod_logs'] > 0) - { - $cut = TIME_NOW-60*60*24*$mybb->config['log_pruning']['mod_logs']; - $db->delete_query("moderatorlog", "dateline<'{$cut}'"); - } - - // Clear out old task logs - if($mybb->config['log_pruning']['task_logs'] > 0) - { - $cut = TIME_NOW-60*60*24*$mybb->config['log_pruning']['task_logs']; - $db->delete_query("tasklog", "dateline<'{$cut}'"); - } - - // Clear out old mail error logs - if($mybb->config['log_pruning']['mail_logs'] > 0) - { - $cut = TIME_NOW-60*60*24*$mybb->config['log_pruning']['mail_logs']; - $db->delete_query("mailerrors", "dateline<'{$cut}'"); - } - - // Clear out old user mail logs - if($mybb->config['log_pruning']['user_mail_logs'] > 0) - { - $cut = TIME_NOW-60*60*24*$mybb->config['log_pruning']['user_mail_logs']; - $db->delete_query("maillogs", "dateline<'{$cut}'"); - } - - // Clear out old promotion logs - if($mybb->config['log_pruning']['promotion_logs'] > 0) - { - $cut = TIME_NOW-60*60*24*$mybb->config['log_pruning']['promotion_logs']; - $db->delete_query("promotionlogs", "dateline<'{$cut}'"); - } - - if(is_object($plugins)) - { - $plugins->run_hooks('task_logcleanup', $task); - } - - add_task_log($task, $lang->task_logcleanup_ran); -} diff --git a/html/forums/inc/tasks/massmail.php b/html/forums/inc/tasks/massmail.php deleted file mode 100644 index 33e8f23..0000000 --- a/html/forums/inc/tasks/massmail.php +++ /dev/null @@ -1,150 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -require_once MYBB_ROOT."/inc/functions_massmail.php"; -require_once MYBB_ROOT."inc/datahandlers/pm.php"; - -function task_massmail($task) -{ - global $db, $mybb, $lang, $plugins; - - $query = $db->simple_select("massemails", "*", "senddate <= '".TIME_NOW."' AND status IN (1,2)"); - while($mass_email = $db->fetch_array($query)) - { - if(is_object($plugins)) - { - $args = array( - 'task' => &$task, - 'mass_email' => &$mass_email - ); - $plugins->run_hooks('task_massmail', $args); - } - - if($mass_email['status'] == 1) - { - $db->update_query("massemails", array('status' => 2), "mid='{$mass_email['mid']}'"); - } - - $sentcount = 0; - - if(!$mass_email['perpage']) - { - $mass_email['perpage'] = 50; - } - - if(strpos($mass_email['htmlmessage'], '
    ') === false && strpos($mass_email['htmlmessage'], '
    ') === false) - { - $mass_email['htmlmessage'] = nl2br($mass_email['htmlmessage']); - } - - $mass_email['orig_message'] = $mass_email['message']; - $mass_email['orig_htmlmessage'] = $mass_email['htmlmessage']; - - // Need to perform the search to fetch the number of users we're emailing - $member_query = build_mass_mail_query(my_unserialize($mass_email['conditions'])); - - $count_query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query); - $mass_email['totalcount'] = $db->fetch_field($count_query, "num"); - - $query2 = $db->simple_select("users u", "u.uid, u.language, u.pmnotify, u.lastactive, u.username, u.email", $member_query, array('limit_start' => $mass_email['sentcount'], 'limit' => $mass_email['perpage'], 'order_by' => 'u.uid', 'order_dir' => 'asc')); - while($user = $db->fetch_array($query2)) - { - $replacement_fields = array( - "{uid}" => $user['uid'], - "{username}" => $user['username'], - "{email}" => $user['email'], - "{bbname}" => $mybb->settings['bbname'], - "{bburl}" => $mybb->settings['bburl'], - "[".$lang->massmail_username."]" => $user['username'], - "[".$lang->email_addr."]" => $user['email'], - "[".$lang->board_name."]" => $mybb->settings['bbname'], - "[".$lang->board_url."]" => $mybb->settings['bburl'] - ); - - foreach($replacement_fields as $find => $replace) - { - $mass_email['message'] = str_replace($find, $replace, $mass_email['message']); - $mass_email['htmlmessage'] = str_replace($find, $replace, $mass_email['htmlmessage']); - } - - // Private Message - if($mass_email['type'] == 1) - { - $pm_handler = new PMDataHandler(); - $pm_handler->admin_override = true; - - $pm = array( - "subject" => $mass_email['subject'], - "message" => $mass_email['message'], - "fromid" => $mass_email['uid'], - "options" => array("savecopy" => 0), - ); - - $pm['to'] = explode(",", $user['username']); - $pm_handler->set_data($pm); - if(!$pm_handler->validate_pm()) - { - $friendly_errors = implode('\n', $pm_handler->get_friendly_errors()); - add_task_log($task, $lang->sprintf($lang->task_massmail_ran_errors, htmlspecialchars_uni($user['username']), $friendly_errors)); - $friendly_errors = ""; - } - else - { - $pm_handler->insert_pm(); - } - } - // Normal Email - else - { - switch($mass_email['format']) - { - case 2: - $format = "both"; - $text_message = $mass_email['message']; - $mass_email['message'] = $mass_email['htmlmessage']; - break; - case 1: - $format = "html"; - $text_message = ""; - $mass_email['message'] = $mass_email['htmlmessage']; - break; - default: - $format = "text"; - $text_message = ""; - } - my_mail($user['email'], $mass_email['subject'], $mass_email['message'], "", "", "", false, $format, $text_message); - } - ++$sentcount; - - $mass_email['message'] = $mass_email['orig_message']; - $mass_email['htmlmessage'] = $mass_email['orig_htmlmessage']; - } - - $update_array = array(); - - $update_array['sentcount'] = $mass_email['sentcount'] + $sentcount; - $update_array['totalcount'] = $mass_email['totalcount']; - - if($update_array['sentcount'] >= $mass_email['totalcount']) - { - $update_array['status'] = 3; - } - - $db->update_query("massemails", $update_array, "mid='{$mass_email['mid']}'"); - } - - add_task_log($task, $lang->task_massmail_ran); -} diff --git a/html/forums/inc/tasks/promotions.php b/html/forums/inc/tasks/promotions.php deleted file mode 100644 index 6210e13..0000000 --- a/html/forums/inc/tasks/promotions.php +++ /dev/null @@ -1,255 +0,0 @@ -read("usergroups"); - // Iterate through all our promotions - $query = $db->simple_select("promotions", "*", "enabled = '1'"); - while($promotion = $db->fetch_array($query)) - { - // Does the destination usergroup even exist?? If it doesn't and it moves a user to it, the user will get PHP errors. - if(!array_key_exists($promotion['newusergroup'], $usergroups)) - { - // Instead of just skipping this promotion, disable it to stop it even being selected when this task is run. - $update = array( - "enabled" => 0 - ); - $db->update_query("promotions", $update, "pid = '" . (int)$promotion['pid'] . "'"); - continue; - } - - $and = ""; - $sql_where = ""; - - // Based on the promotion generate criteria for user selection - $requirements = explode(',', $promotion['requirements']); - if(in_array('postcount', $requirements) && (int)$promotion['posts'] >= 0 && !empty($promotion['posttype'])) - { - $sql_where .= "{$and}postnum {$promotion['posttype']} '{$promotion['posts']}'"; - - $and = " AND "; - } - - if(in_array('threadcount', $requirements) && (int)$promotion['threads'] >= 0 && !empty($promotion['threadtype'])) - { - $sql_where .= "{$and}threadnum {$promotion['threadtype']} '{$promotion['threads']}'"; - - $and = " AND "; - } - - if(in_array('reputation', $requirements) && !empty($promotion['reputationtype'])) - { - $sql_where .= "{$and}reputation {$promotion['reputationtype']} '{$promotion['reputations']}'"; - - $and = " AND "; - } - - if(in_array('referrals', $requirements) && (int)$promotion['referrals'] >= 0 && !empty($promotion['referralstype'])) - { - $sql_where .= "{$and}referrals {$promotion['referralstype']} '{$promotion['referrals']}'"; - - $and = " AND "; - } - - if(in_array('warnings', $requirements) && (int)$promotion['warnings'] >= 0 && !empty($promotion['warningstype'])) - { - $sql_where .= "{$and}warningpoints {$promotion['warningstype']} '{$promotion['warnings']}'"; - - $and = " AND "; - } - - if(in_array('timeregistered', $requirements) && (int)$promotion['registered'] > 0 && !empty($promotion['registeredtype'])) - { - switch($promotion['registeredtype']) - { - case "hours": - $regdate = $promotion['registered']*60*60; - break; - case "days": - $regdate = $promotion['registered']*60*60*24; - break; - case "weeks": - $regdate = $promotion['registered']*60*60*24*7; - break; - case "months": - $regdate = $promotion['registered']*60*60*24*30; - break; - case "years": - $regdate = $promotion['registered']*60*60*24*365; - break; - default: - $regdate = $promotion['registered']*60*60*24; - } - $sql_where .= "{$and}regdate <= '".(TIME_NOW-$regdate)."'"; - $and = " AND "; - } - - if(in_array('timeonline', $requirements) && (int)$promotion['online'] > 0 && !empty($promotion['onlinetype'])) - { - switch($promotion['onlinetype']) - { - case "hours": - $timeonline = $promotion['online']*60*60; - break; - case "days": - $timeonline = $promotion['online']*60*60*24; - break; - case "weeks": - $timeonline = $promotion['online']*60*60*24*7; - break; - case "months": - $timeonline = $promotion['online']*60*60*24*30; - break; - case "years": - $timeonline = $promotion['online']*60*60*24*365; - break; - default: - $timeonline = $promotion['online']*60*60*24; - } - $sql_where .= "{$and}timeonline <= '".(TIME_NOW-$timeonline)."'"; - $and = " AND "; - } - - if(!empty($promotion['originalusergroup']) && $promotion['originalusergroup'] != '*') - { - $sql_where .= "{$and}usergroup IN ({$promotion['originalusergroup']})"; - - $and = " AND "; - } - - if(!empty($promotion['newusergroup'])) - { - // Skip users that are already in the new group - switch($db->type) - { - case "pgsql": - case "sqlite": - $sql_where .= "{$and}usergroup != '{$promotion['newusergroup']}' AND ','||additionalgroups||',' NOT LIKE '%,{$promotion['newusergroup']},%'"; - break; - default: - $sql_where .= "{$and}usergroup != '{$promotion['newusergroup']}' AND CONCAT(',', additionalgroups, ',') NOT LIKE '%,{$promotion['newusergroup']},%'"; - } - - $and = " AND "; - } - - $uid = array(); - $log_inserts = array(); - - if($promotion['usergrouptype'] == "secondary") - { - $usergroup_select = "additionalgroups"; - } - else - { - $usergroup_select = "usergroup"; - } - - if(is_object($plugins)) - { - $args = array( - 'task' => &$task, - 'promotion' => &$promotion, - 'sql_where' => &$sql_where, - 'and' => &$and, - 'usergroup_select' => &$usergroup_select - ); - $plugins->run_hooks('task_promotions', $args); - } - - $query2 = $db->simple_select("users", "uid,{$usergroup_select}", $sql_where); - - $uids = array(); - while($user = $db->fetch_array($query2)) - { - if(is_super_admin($user['uid'])) - { - // Skip super admins - continue; - } - - // super admin check? - if($usergroup_select == "additionalgroups") - { - $log_inserts[] = array( - 'pid' => $promotion['pid'], - 'uid' => $user['uid'], - 'oldusergroup' => $user['additionalgroups'], - 'newusergroup' => $promotion['newusergroup'], - 'dateline' => TIME_NOW, - 'type' => "secondary", - ); - } - else - { - $log_inserts[] = array( - 'pid' => $promotion['pid'], - 'uid' => $user['uid'], - 'oldusergroup' => $user['usergroup'], - 'newusergroup' => $promotion['newusergroup'], - 'dateline' => TIME_NOW, - 'type' => "primary", - ); - } - - $uids[] = $user['uid']; - - - if($usergroup_select == "additionalgroups") - { - if(join_usergroup($user['uid'], $promotion['newusergroup']) === false) - { - // Did the user already have the additional usergroup? - array_pop($log_inserts); - array_pop($uids); - } - } - - if((count($uids) % 20) == 0) - { - if($usergroup_select == "usergroup") - { - $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(".implode(",", $uids).")"); - } - - if(!empty($log_inserts)) - { - $db->insert_query_multiple("promotionlogs", $log_inserts); - } - - $uids = array(); - $log_inserts = array(); - } - } - - if(count($uids) > 0) - { - if($usergroup_select == "usergroup") - { - $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(".implode(",", $uids).")"); - } - - if(!empty($log_inserts)) - { - $db->insert_query_multiple("promotionlogs", $log_inserts); - } - - $uids = array(); - $log_inserts = array(); - } - } - - $cache->update_moderators(); - - add_task_log($task, $lang->task_promotions_ran); -} diff --git a/html/forums/inc/tasks/recachestylesheets.php b/html/forums/inc/tasks/recachestylesheets.php deleted file mode 100644 index 8ef1cda..0000000 --- a/html/forums/inc/tasks/recachestylesheets.php +++ /dev/null @@ -1,39 +0,0 @@ -config['admin_dir']."/inc/functions_themes.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php"; - } - else if(file_exists(MYBB_ROOT."admin/inc/functions_themes.php")) - { - require_once MYBB_ROOT."admin/inc/functions_themes.php"; - } - - $query = $db->simple_select('themestylesheets', '*'); - - $num_recached = 0; - - while($stylesheet = $db->fetch_array($query)) - { - if(cache_stylesheet($stylesheet['tid'], $stylesheet['name'], $stylesheet['stylesheet'])) - { - $db->update_query("themestylesheets", array('cachefile' => $db->escape_string($stylesheet['name'])), "sid='{$stylesheet['sid']}'", 1); - ++$num_recached; - } - } - - add_task_log($task, $lang->sprintf($lang->task_recachestylesheets_ran, $num_recached)); -} - diff --git a/html/forums/inc/tasks/threadviews.php b/html/forums/inc/tasks/threadviews.php deleted file mode 100644 index 53ee881..0000000 --- a/html/forums/inc/tasks/threadviews.php +++ /dev/null @@ -1,35 +0,0 @@ -settings['delayedthreadviews'] != 1) - { - return; - } - - // Update thread views - $query = $db->simple_select("threadviews", "tid, COUNT(tid) AS views", "", array('group_by' => 'tid')); - while($threadview = $db->fetch_array($query)) - { - $db->update_query("threads", array('views' => "views+{$threadview['views']}"), "tid='{$threadview['tid']}'", 1, true); - } - - $db->write_query("TRUNCATE TABLE ".TABLE_PREFIX."threadviews"); - - if(is_object($plugins)) - { - $plugins->run_hooks('task_threadviews', $task); - } - - add_task_log($task, $lang->task_threadviews_ran); -} diff --git a/html/forums/inc/tasks/usercleanup.php b/html/forums/inc/tasks/usercleanup.php deleted file mode 100644 index fc32330..0000000 --- a/html/forums/inc/tasks/usercleanup.php +++ /dev/null @@ -1,74 +0,0 @@ -expire_warnings(); - - // Expire any post moderation or suspension limits - $query = $db->simple_select("users", "uid, moderationtime, suspensiontime", "(moderationtime!=0 AND moderationtime<".TIME_NOW.") OR (suspensiontime!=0 AND suspensiontime<".TIME_NOW.")"); - while($user = $db->fetch_array($query)) - { - $updated_user = array(); - if($user['moderationtime'] != 0 && $user['moderationtime'] < TIME_NOW) - { - $updated_user['moderateposts'] = 0; - $updated_user['moderationtime'] = 0; - } - if($user['suspensiontime'] != 0 && $user['suspensiontime'] < TIME_NOW) - { - $updated_user['suspendposting'] = 0; - $updated_user['suspensiontime'] = 0; - } - $db->update_query("users", $updated_user, "uid='{$user['uid']}'"); - } - - // Expire any suspended signatures - $query = $db->simple_select("users", "uid, suspendsigtime", "suspendsignature != 0 AND suspendsigtime < '".TIME_NOW."'"); - while($user = $db->fetch_array($query)) - { - if($user['suspendsigtime'] != 0 && $user['suspendsigtime'] < TIME_NOW) - { - $updated_user = array( - "suspendsignature" => 0, - "suspendsigtime" => 0, - ); - $db->update_query("users", $updated_user, "uid='".$user['uid']."'"); - } - } - - // Expire bans - $query = $db->simple_select("banned", "*", "lifted!=0 AND lifted<".TIME_NOW); - while($ban = $db->fetch_array($query)) - { - $updated_user = array( - "usergroup" => $ban['oldgroup'], - "additionalgroups" => $ban['oldadditionalgroups'], - "displaygroup" => $ban['olddisplaygroup'] - ); - $db->update_query("users", $updated_user, "uid='{$ban['uid']}'"); - $db->delete_query("banned", "uid='{$ban['uid']}'"); - } - - $cache->update_moderators(); - - if(is_object($plugins)) - { - $plugins->run_hooks('task_usercleanup', $task); - } - - add_task_log($task, $lang->task_usercleanup_ran); -} diff --git a/html/forums/inc/tasks/userpruning.php b/html/forums/inc/tasks/userpruning.php deleted file mode 100644 index b3871ba..0000000 --- a/html/forums/inc/tasks/userpruning.php +++ /dev/null @@ -1,101 +0,0 @@ -settings['enablepruning'] != 1) - { - return; - } - - // Are we pruning by posts? - if($mybb->settings['enableprunebyposts'] == 1) - { - $in_usergroups = array(); - $users = array(); - - $usergroups = $cache->read('usergroups'); - foreach($usergroups as $gid => $usergroup) - { - // Exclude admin, moderators, super moderators, banned - if($usergroup['canmodcp'] == 1 || $usergroup['cancp'] == 1 || $usergroup['issupermod'] == 1 || $usergroup['isbannedgroup'] == 1) - { - continue; - } - $in_usergroups[] = $gid; - } - - // If we're not pruning unactivated users, then remove them from the criteria - if($mybb->settings['pruneunactived'] == 0) - { - $key = array_search('5', $in_usergroups); - unset($in_usergroups[$key]); - } - - $prunepostcount = (int)$mybb->settings['prunepostcount']; - - $regdate = TIME_NOW-((int)$mybb->settings['dayspruneregistered']*24*60*60); - - $usergroups = $db->escape_string(implode(',', $in_usergroups)); - - $query = $db->simple_select('users', 'uid', "regdate<={$regdate} AND postnum<={$prunepostcount} AND usergroup IN({$usergroups})"); - while($uid = $db->fetch_field($query, 'uid')) - { - $users[$uid] = $uid; - } - - if($users && $mybb->settings['prunepostcountall']) - { - $query = $db->simple_select('posts', 'uid, COUNT(pid) as posts', "uid IN ('".implode("','", $users)."') AND visible>0", array('group_by' => 'uid')); - while($user = $db->fetch_array($query)) - { - if($user['posts'] >= $prunepostcount) - { - unset($users[$user['uid']]); - } - } - } - } - - // Are we pruning unactivated users? - if($mybb->settings['pruneunactived'] == 1) - { - $regdate = TIME_NOW-((int)$mybb->settings['dayspruneunactivated']*24*60*60); - $query = $db->simple_select("users", "uid", "regdate<={$regdate} AND usergroup='5'"); - while($user = $db->fetch_array($query)) - { - $users[$user['uid']] = $user['uid']; - } - } - - if(is_object($plugins)) - { - $args = array( - 'task' => &$task, - 'in_usergroups' => &$in_usergroups, - 'users' => &$users, - ); - $plugins->run_hooks('task_userpruning', $args); - } - - if(!empty($users)) - { - // Set up user handler. - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('delete'); - - // Delete the prunned users - $userhandler->delete_user($users, $mybb->settings['prunethreads']); - } - - add_task_log($task, $lang->task_userpruning_ran); -} diff --git a/html/forums/inc/tasks/versioncheck.php b/html/forums/inc/tasks/versioncheck.php deleted file mode 100644 index 3dfd76f..0000000 --- a/html/forums/inc/tasks/versioncheck.php +++ /dev/null @@ -1,101 +0,0 @@ -version_code); - - $updated_cache = array( - 'last_check' => TIME_NOW - ); - - // Check for the latest version - require_once MYBB_ROOT.'inc/class_xml.php'; - $contents = fetch_remote_file("https://mybb.com/version_check.php"); - - if(!$contents) - { - add_task_log($task, $lang->task_versioncheck_ran_errors); - return false; - } - - $pos = strpos($contents, "<"); - if($pos > 1) - { - $contents = substr($contents, $pos); - } - - $pos = strpos(strrev($contents), ">"); - if($pos > 1) - { - $contents = substr($contents, 0, (-1) * ($pos-1)); - } - - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - $latest_code = (int)$tree['mybb']['version_code']['value']; - $latest_version = "".htmlspecialchars_uni($tree['mybb']['latest_version']['value'])." (".$latest_code.")"; - if($latest_code > $mybb->version_code) - { - $latest_version = "".$latest_version.""; - $version_warn = 1; - $updated_cache['latest_version'] = $latest_version; - $updated_cache['latest_version_code'] = $latest_code; - } - else - { - $latest_version = "".$latest_version.""; - } - - // Check for the latest news - require_once MYBB_ROOT."inc/class_feedparser.php"; - - $feed_parser = new FeedParser(); - $feed_parser->parse_feed("http://feeds.feedburner.com/MyBBDevelopmentBlog"); - - $updated_cache['news'] = array(); - - require_once MYBB_ROOT . '/inc/class_parser.php'; - $post_parser = new postParser(); - - if($feed_parser->error == '') - { - foreach($feed_parser->items as $item) - { - if (isset($updated_cache['news'][2])) - { - break; - } - - $description = $item['description']; - - $description = $post_parser->parse_message($description, array( - 'allow_html' => true, - ) - ); - - $description = preg_replace('##', '', $description); - - $updated_cache['news'][] = array( - 'title' => htmlspecialchars_uni($item['title']), - 'description' => $description, - 'link' => htmlspecialchars_uni($item['link']), - 'author' => htmlspecialchars_uni($item['author']), - 'dateline' => $item['date_timestamp'] - ); - } - } - - $cache->update("update_check", $updated_cache); - add_task_log($task, $lang->task_versioncheck_ran); -} diff --git a/html/forums/index.php b/html/forums/index.php deleted file mode 100644 index 8b16449..0000000 --- a/html/forums/index.php +++ /dev/null @@ -1,384 +0,0 @@ -run_hooks('index_start'); - -// Load global language phrases -$lang->load('index'); - -$logoutlink = ''; -if($mybb->user['uid'] != 0) -{ - eval('$logoutlink = "'.$templates->get('index_logoutlink').'";'); -} - -$statspage = ''; -if($mybb->settings['statsenabled'] != 0) -{ - eval('$statspage = "'.$templates->get('index_statspage').'";'); -} - -$whosonline = ''; -if($mybb->settings['showwol'] != 0 && $mybb->usergroup['canviewonline'] != 0) -{ - // Get the online users. - if($mybb->settings['wolorder'] == 'username') - { - $order_by = 'u.username ASC'; - $order_by2 = 's.time DESC'; - } - else - { - $order_by = 's.time DESC'; - $order_by2 = 'u.username ASC'; - } - - $timesearch = TIME_NOW - (int)$mybb->settings['wolcutoff']; - $comma = ''; - $query = $db->query(" - SELECT s.sid, s.ip, s.uid, s.time, s.location, s.location1, u.username, u.invisible, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."sessions s - LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid) - WHERE s.time > '".$timesearch."' - ORDER BY {$order_by}, {$order_by2} - "); - - $forum_viewers = $doneusers = array(); - $membercount = $guestcount = $anoncount = $botcount = 0; - $onlinemembers = $comma = ''; - - // Fetch spiders - $spiders = $cache->read('spiders'); - - // Loop through all users. - while($user = $db->fetch_array($query)) - { - // Create a key to test if this user is a search bot. - $botkey = my_strtolower(str_replace('bot=', '', $user['sid'])); - - // Decide what type of user we are dealing with. - if($user['uid'] > 0) - { - // The user is registered. - if(empty($doneusers[$user['uid']]) || $doneusers[$user['uid']] < $user['time']) - { - // If the user is logged in anonymously, update the count for that. - if($user['invisible'] == 1) - { - ++$anoncount; - } - ++$membercount; - if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid']) - { - // If this usergroup can see anonymously logged-in users, mark them. - if($user['invisible'] == 1) - { - $invisiblemark = '*'; - } - else - { - $invisiblemark = ''; - } - - // Properly format the username and assign the template. - $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); - $user['profilelink'] = build_profile_link($user['username'], $user['uid']); - eval('$onlinemembers .= "'.$templates->get('index_whosonline_memberbit', 1, 0).'";'); - $comma = $lang->comma; - } - // This user has been handled. - $doneusers[$user['uid']] = $user['time']; - } - } - elseif(my_strpos($user['sid'], 'bot=') !== false && $spiders[$botkey]) - { - // The user is a search bot. - $onlinemembers .= $comma.format_name($spiders[$botkey]['name'], $spiders[$botkey]['usergroup']); - $comma = $lang->comma; - ++$botcount; - } - else - { - // The user is a guest. - ++$guestcount; - } - - if($user['location1']) - { - ++$forum_viewers[$user['location1']]; - } - } - - // Build the who's online bit on the index page. - $onlinecount = $membercount + $guestcount + $botcount; - - if($onlinecount != 1) - { - $onlinebit = $lang->online_online_plural; - } - else - { - $onlinebit = $lang->online_online_singular; - } - if($membercount != 1) - { - $memberbit = $lang->online_member_plural; - } - else - { - $memberbit = $lang->online_member_singular; - } - if($anoncount != 1) - { - $anonbit = $lang->online_anon_plural; - } - else - { - $anonbit = $lang->online_anon_singular; - } - if($guestcount != 1) - { - $guestbit = $lang->online_guest_plural; - } - else - { - $guestbit = $lang->online_guest_singular; - } - $lang->online_note = $lang->sprintf($lang->online_note, my_number_format($onlinecount), $onlinebit, $mybb->settings['wolcutoffmins'], my_number_format($membercount), $memberbit, my_number_format($anoncount), $anonbit, my_number_format($guestcount), $guestbit); - eval('$whosonline = "'.$templates->get('index_whosonline').'";'); -} - -// Build the birthdays for to show on the index page. -$bdays = $birthdays = ''; -if($mybb->settings['showbirthdays'] != 0) -{ - // First, see what day this is. - $bdaycount = $bdayhidden = 0; - $bdaydate = my_date('j-n', TIME_NOW, '', 0); - $year = my_date('Y', TIME_NOW, '', 0); - - $bdaycache = $cache->read('birthdays'); - - if(!is_array($bdaycache)) - { - $cache->update_birthdays(); - $bdaycache = $cache->read('birthdays'); - } - - $hiddencount = $today_bdays = 0; - if(isset($bdaycache[$bdaydate])) - { - $hiddencount = $bdaycache[$bdaydate]['hiddencount']; - $today_bdays = $bdaycache[$bdaydate]['users']; - } - - $comma = ''; - if(!empty($today_bdays)) - { - if((int)$mybb->settings['showbirthdayspostlimit'] > 0) - { - $bdayusers = array(); - foreach($today_bdays as $key => $bdayuser_pc) - { - $bdayusers[$bdayuser_pc['uid']] = $key; - } - - if(!empty($bdayusers)) - { - // Find out if our users have enough posts to be seen on our birthday list - $bday_sql = implode(',', array_keys($bdayusers)); - $query = $db->simple_select('users', 'uid, postnum', "uid IN ({$bday_sql})"); - - while($bdayuser = $db->fetch_array($query)) - { - if($bdayuser['postnum'] < $mybb->settings['showbirthdayspostlimit']) - { - unset($today_bdays[$bdayusers[$bdayuser['uid']]]); - } - } - } - } - - // We still have birthdays - display them in our list! - if(!empty($today_bdays)) - { - foreach($today_bdays as $bdayuser) - { - if($bdayuser['displaygroup'] == 0) - { - $bdayuser['displaygroup'] = $bdayuser['usergroup']; - } - - // If this user's display group can't be seen in the birthday list, skip it - if($groupscache[$bdayuser['displaygroup']] && $groupscache[$bdayuser['displaygroup']]['showinbirthdaylist'] != 1) - { - continue; - } - - $age = ''; - $bday = explode('-', $bdayuser['birthday']); - if($year > $bday['2'] && $bday['2'] != '') - { - $age = ' ('.($year - $bday['2']).')'; - } - - $bdayuser['username'] = format_name(htmlspecialchars_uni($bdayuser['username']), $bdayuser['usergroup'], $bdayuser['displaygroup']); - $bdayuser['profilelink'] = build_profile_link($bdayuser['username'], $bdayuser['uid']); - eval('$bdays .= "'.$templates->get('index_birthdays_birthday', 1, 0).'";'); - ++$bdaycount; - $comma = $lang->comma; - } - } - } - - if($hiddencount > 0) - { - if($bdaycount > 0) - { - $bdays .= ' - '; - } - - $bdays .= "{$hiddencount} {$lang->birthdayhidden}"; - } - - // If there are one or more birthdays, show them. - if($bdaycount > 0 || $hiddencount > 0) - { - eval('$birthdays = "'.$templates->get('index_birthdays').'";'); - } -} - -// Build the forum statistics to show on the index page. -$forumstats = ''; -if($mybb->settings['showindexstats'] != 0) -{ - // First, load the stats cache. - $stats = $cache->read('stats'); - - // Check who's the newest member. - if(!$stats['lastusername']) - { - $newestmember = $lang->nobody;; - } - else - { - $newestmember = build_profile_link($stats['lastusername'], $stats['lastuid']); - } - - // Format the stats language. - $lang->stats_posts_threads = $lang->sprintf($lang->stats_posts_threads, my_number_format($stats['numposts']), my_number_format($stats['numthreads'])); - $lang->stats_numusers = $lang->sprintf($lang->stats_numusers, my_number_format($stats['numusers'])); - $lang->stats_newestuser = $lang->sprintf($lang->stats_newestuser, $newestmember); - - // Find out what the highest users online count is. - $mostonline = $cache->read('mostonline'); - if($onlinecount > $mostonline['numusers']) - { - $time = TIME_NOW; - $mostonline['numusers'] = $onlinecount; - $mostonline['time'] = $time; - $cache->update('mostonline', $mostonline); - } - $recordcount = $mostonline['numusers']; - $recorddate = my_date($mybb->settings['dateformat'], $mostonline['time']); - $recordtime = my_date($mybb->settings['timeformat'], $mostonline['time']); - - // Then format that language string. - $lang->stats_mostonline = $lang->sprintf($lang->stats_mostonline, my_number_format($recordcount), $recorddate, $recordtime); - - eval('$forumstats = "'.$templates->get('index_stats').'";'); -} - -// Show the board statistics table only if one or more index statistics are enabled. -$boardstats = ''; -if(($mybb->settings['showwol'] != 0 && $mybb->usergroup['canviewonline'] != 0) || $mybb->settings['showindexstats'] != 0 || ($mybb->settings['showbirthdays'] != 0 && $bdaycount > 0)) -{ - if(!isset($stats) || isset($stats) && !is_array($stats)) - { - // Load the stats cache. - $stats = $cache->read('stats'); - } - - eval('$boardstats = "'.$templates->get('index_boardstats').'";'); -} - -if($mybb->user['uid'] == 0) -{ - // Build a forum cache. - $query = $db->simple_select('forums', '*', 'active!=0', array('order_by' => 'pid, disporder')); - - $forumsread = array(); - if(isset($mybb->cookies['mybb']['forumread'])) - { - $forumsread = my_unserialize($mybb->cookies['mybb']['forumread']); - } -} -else -{ - // Build a forum cache. - $query = $db->query(" - SELECT f.*, fr.dateline AS lastread - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid = f.fid AND fr.uid = '{$mybb->user['uid']}') - WHERE f.active != 0 - ORDER BY pid, disporder - "); -} - -while($forum = $db->fetch_array($query)) -{ - if($mybb->user['uid'] == 0) - { - if(!empty($forumsread[$forum['fid']])) - { - $forum['lastread'] = $forumsread[$forum['fid']]; - } - } - $fcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; -} -$forumpermissions = forum_permissions(); - -// Get the forum moderators if the setting is enabled. -$moderatorcache = array(); -if($mybb->settings['modlist'] != 0 && $mybb->settings['modlist'] != 'off') -{ - $moderatorcache = $cache->read('moderators'); -} - -$excols = 'index'; -$permissioncache['-1'] = '1'; -$bgcolor = 'trow1'; - -// Decide if we're showing first-level subforums on the index page. -$showdepth = 2; -if($mybb->settings['subforumsindex'] != 0) -{ - $showdepth = 3; -} - -$forum_list = build_forumbits(); -$forums = $forum_list['forum_list']; - -$plugins->run_hooks('index_end'); - -eval('$index = "'.$templates->get('index').'";'); -output_page($index); diff --git a/html/forums/install/images/active.png b/html/forums/install/images/active.png deleted file mode 100644 index 8870723458c434c615646fc0acb2629ea51cc5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5246 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 - - - - -  - - \ No newline at end of file diff --git a/html/forums/install/images/logo.png b/html/forums/install/images/logo.png deleted file mode 100644 index 531dc806eb2f43edebb1336f1a596844d436ed20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10233 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

    x`yN3VmCRgIA>Ce>EAuzh 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 DRY@Re diff --git a/html/forums/install/images/tcat.png b/html/forums/install/images/tcat.png deleted file mode 100644 index 1d07e08f691747d1cee9ff7bce8f770c349b78f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^Oh9bI0U{4C`Lhm4xp=xbhEy<44QOU$FyJ{|5b&=) zZ(HE*t165c$vx?O(PuB8WWQ|S{(a&yw{!dA*NW|SnYAKuYxB<+?bZ9M&;InXFYi3V Yv@R`C@qN0wG|)T-Pgg&ebxsLQ0BGbbBme*a diff --git a/html/forums/install/images/thead.png b/html/forums/install/images/thead.png deleted file mode 100644 index 7a56d8191c7c8edce1a9c2ce410b921e62c0af58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQdXWWjv*C{x!$ad2Ml;lr~lDQ zPdk&Er|_Vk@xZ%j&zG(H`NnKV)rZEZr%aCS?%(IR$I$Ni@r&yY{a;x6(q1v{du7W3 PpeYQVu6{1-oD!Mset_path(MYBB_ROOT.'install/resources'); -$lang->load('language'); - -// Load DB interface -require_once MYBB_ROOT."inc/db_base.php"; - -// Prevent any shut down functions from running -$done_shutdown = 1; - -// Include the necessary constants for installation -$grouppermignore = array('gid', 'type', 'title', 'description', 'namestyle', 'usertitle', 'stars', 'starimage', 'image'); -$groupzerogreater = array('pmquota', 'maxpmrecipients', 'maxreputationsday', 'attachquota', 'maxemails', 'maxwarningsday', 'maxposts', 'edittimelimit', 'canusesigxposts', 'maxreputationsperuser', 'maxreputationsperthread', 'emailfloodtime'); -$displaygroupfields = array('title', 'description', 'namestyle', 'usertitle', 'stars', 'starimage', 'image'); -$fpermfields = array('canview', 'canviewthreads', 'candlattachments', 'canpostthreads', 'canpostreplys', 'canpostattachments', 'canratethreads', 'caneditposts', 'candeleteposts', 'candeletethreads', 'caneditattachments', 'canpostpolls', 'canvotepolls', 'cansearch', 'modposts', 'modthreads', 'modattachments', 'mod_edit_posts'); - -// Include the installation resources -require_once INSTALL_ROOT.'resources/output.php'; -$output = new installerOutput; - -$dboptions = array(); - -if(function_exists('mysqli_connect')) -{ - $dboptions['mysqli'] = array( - 'class' => 'DB_MySQLi', - 'title' => 'MySQL Improved', - 'short_title' => 'MySQLi', - 'structure_file' => 'mysql_db_tables.php', - 'population_file' => 'mysql_db_inserts.php' - ); -} - -if(function_exists('mysql_connect')) -{ - $dboptions['mysql'] = array( - 'class' => 'DB_MySQL', - 'title' => 'MySQL', - 'short_title' => 'MySQL', - 'structure_file' => 'mysql_db_tables.php', - 'population_file' => 'mysql_db_inserts.php' - ); -} - -if(function_exists('pg_connect')) -{ - $dboptions['pgsql'] = array( - 'class' => 'DB_PgSQL', - 'title' => 'PostgreSQL', - 'short_title' => 'PostgreSQL', - 'structure_file' => 'pgsql_db_tables.php', - 'population_file' => 'mysql_db_inserts.php' - ); -} - -if(class_exists('PDO')) -{ - $supported_dbs = PDO::getAvailableDrivers(); - if(in_array('sqlite', $supported_dbs)) - { - $dboptions['sqlite'] = array( - 'class' => 'DB_SQLite', - 'title' => 'SQLite 3', - 'short_title' => 'SQLite', - 'structure_file' => 'sqlite_db_tables.php', - 'population_file' => 'mysql_db_inserts.php' - ); - } -} - -if(file_exists('lock') && $mybb->dev_mode != true) -{ - $output->print_error($lang->locked); -} -else if($installed == true && empty($mybb->input['action'])) -{ - $output->print_header($lang->already_installed, "errormsg", 0); - echo $lang->sprintf($lang->mybb_already_installed, $mybb->version); - $output->print_footer(); -} -else -{ - $output->steps = array( - 'intro' => $lang->welcome, - 'license' => $lang->license_agreement, - 'requirements_check' => $lang->req_check, - 'database_info' => $lang->db_config, - 'create_tables' => $lang->table_creation, - 'populate_tables' => $lang->data_insertion, - 'templates' => $lang->theme_install, - 'configuration' => $lang->board_config, - 'adminuser' => $lang->admin_user, - 'final' => $lang->finish_setup, - ); - - switch($mybb->get_input('action')) - { - case 'license': - license_agreement(); - break; - case 'requirements_check': - requirements_check(); - break; - case 'database_info': - database_info(); - break; - case 'create_tables': - create_tables(); - break; - case 'populate_tables': - populate_tables(); - break; - case 'templates': - insert_templates(); - break; - case 'configuration': - configure(); - break; - case 'adminuser': - create_admin_user(); - break; - case 'final': - install_done(); - break; - default: - $mybb->input['action'] = 'intro'; - intro(); - break; - } -} - -/** - * Welcome page - */ -function intro() -{ - global $output, $mybb, $lang; - - $output->print_header(); - if(strpos(strtolower(get_current_location('', '', true)), '/upload/') !== false) - { - echo $lang->sprintf($lang->mybb_incorrect_folder); - } - echo $lang->sprintf($lang->welcome_step, $mybb->version); - $output->print_footer('license'); -} - -/** - * Show the license agreement - */ -function license_agreement() -{ - global $output, $lang, $mybb; - - ob_start(); - $output->print_header($lang->license_agreement, 'license'); - - if($mybb->get_input('allow_anonymous_info', MyBB::INPUT_INT) == 1) - { - require_once MYBB_ROOT."inc/functions_serverstats.php"; - $build_server_stats = build_server_stats(1, '', $mybb->version_code); - - if($build_server_stats['info_sent_success'] == false) - { - echo $build_server_stats['info_image']; - } - } - ob_end_flush(); - - $license = << - GNU LESSER 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. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - 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 that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU 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 as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - 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 - -EOF; - echo $lang->sprintf($lang->license_step, $license); - $output->print_footer('requirements_check'); -} - -/** - * Check our requirements - */ -function requirements_check() -{ - global $output, $mybb, $dboptions, $lang; - - $mybb->input['action'] = "requirements_check"; - $output->print_header($lang->req_check, 'requirements'); - echo $lang->req_step_top; - $errors = array(); - $showerror = 0; - - if(!file_exists(MYBB_ROOT."/inc/config.php")) - { - if(!@rename(MYBB_ROOT."/inc/config.default.php", MYBB_ROOT."/inc/config.php")) - { - if(!$configwritable) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_configdefaultfile); - $configstatus = $lang->sprintf($lang->req_step_span_fail, $lang->not_writable); - $showerror = 1; - } - } - } - - // Check PHP Version - if(version_compare(PHP_VERSION, '5.2.0', "<")) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->sprintf($lang->req_step_error_phpversion, PHP_VERSION)); - $phpversion = $lang->sprintf($lang->req_step_span_fail, PHP_VERSION); - $showerror = 1; - } - else - { - $phpversion = $lang->sprintf($lang->req_step_span_pass, PHP_VERSION); - } - - $mboptions = array(); - - if(function_exists('mb_detect_encoding')) - { - $mboptions[] = $lang->multi_byte; - } - - if(function_exists('iconv')) - { - $mboptions[] = 'iconv'; - } - - // Check Multibyte extensions - if(count($mboptions) < 1) - { - $mbstatus = $lang->sprintf($lang->req_step_span_fail, $lang->none); - } - else - { - $mbstatus = implode(', ', $mboptions); - } - - // Check database engines - if(count($dboptions) < 1) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_dboptions); - $dbsupportlist = $lang->sprintf($lang->req_step_span_fail, $lang->none); - $showerror = 1; - } - else - { - foreach($dboptions as $dboption) - { - $dbsupportlist[] = $dboption['title']; - } - $dbsupportlist = implode(', ', $dbsupportlist); - } - - // Check XML parser is installed - if(!function_exists('xml_parser_create')) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_xmlsupport); - $xmlstatus = $lang->sprintf($lang->req_step_span_fail, $lang->not_installed); - $showerror = 1; - } - else - { - $xmlstatus = $lang->sprintf($lang->req_step_span_pass, $lang->installed); - } - - // Check config file is writable - $configwritable = @fopen(MYBB_ROOT.'inc/config.php', 'w'); - if(!$configwritable) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_configfile); - $configstatus = $lang->sprintf($lang->req_step_span_fail, $lang->not_writable); - $showerror = 1; - } - else - { - $configstatus = $lang->sprintf($lang->req_step_span_pass, $lang->writable); - } - @fclose($configwritable); - - // Check settings file is writable - $settingswritable = @fopen(MYBB_ROOT.'inc/settings.php', 'w'); - if(!$settingswritable) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_settingsfile); - $settingsstatus = $lang->sprintf($lang->req_step_span_fail, $lang->not_writable); - $showerror = 1; - } - else - { - $settingsstatus = $lang->sprintf($lang->req_step_span_pass, $lang->writable); - } - @fclose($settingswritable); - - // Check cache directory is writable - $cachewritable = @fopen(MYBB_ROOT.'cache/test.write', 'w'); - if(!$cachewritable) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_cachedir); - $cachestatus = $lang->sprintf($lang->req_step_span_fail, $lang->not_writable); - $showerror = 1; - @fclose($cachewritable); - } - else - { - $cachestatus = $lang->sprintf($lang->req_step_span_pass, $lang->writable); - @fclose($cachewritable); - @my_chmod(MYBB_ROOT.'cache', '0777'); - @my_chmod(MYBB_ROOT.'cache/test.write', '0777'); - @unlink(MYBB_ROOT.'cache/test.write'); - } - - // Check upload directory is writable - $uploadswritable = @fopen(MYBB_ROOT.'uploads/test.write', 'w'); - if(!$uploadswritable) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_uploaddir); - $uploadsstatus = $lang->sprintf($lang->req_step_span_fail, $lang->not_writable); - $showerror = 1; - @fclose($uploadswritable); - } - else - { - $uploadsstatus = $lang->sprintf($lang->req_step_span_pass, $lang->writable); - @fclose($uploadswritable); - @my_chmod(MYBB_ROOT.'uploads', '0777'); - @my_chmod(MYBB_ROOT.'uploads/test.write', '0777'); - @unlink(MYBB_ROOT.'uploads/test.write'); - } - - // Check avatar directory is writable - $avatarswritable = @fopen(MYBB_ROOT.'uploads/avatars/test.write', 'w'); - if(!$avatarswritable) - { - $errors[] = $lang->sprintf($lang->req_step_error_box, $lang->req_step_error_avatardir); - $avatarsstatus = $lang->sprintf($lang->req_step_span_fail, $lang->not_writable); - $showerror = 1; - @fclose($avatarswritable); - } - else - { - $avatarsstatus = $lang->sprintf($lang->req_step_span_pass, $lang->writable); - @fclose($avatarswritable); - @my_chmod(MYBB_ROOT.'uploads/avatars', '0777'); - @my_chmod(MYBB_ROOT.'uploads/avatars/test.write', '0777'); - @unlink(MYBB_ROOT.'uploads/avatars/test.write'); - } - - // Output requirements page - echo $lang->sprintf($lang->req_step_reqtable, $phpversion, $dbsupportlist, $mbstatus, $xmlstatus, $configstatus, $settingsstatus, $cachestatus, $uploadsstatus, $avatarsstatus); - - if($showerror == 1) - { - $error_list = error_list($errors); - echo $lang->sprintf($lang->req_step_error_tablelist, $error_list); - echo "\n input['action']}\" />"; - echo "\n

    recheck} »\" />

    \n"; - $output->print_footer(); - } - else - { - echo $lang->req_step_reqcomplete; - $output->print_footer('database_info'); - } -} - -/** - * Which database do we use? - */ -function database_info() -{ - global $output, $dbinfo, $errors, $mybb, $dboptions, $lang; - - $mybb->input['action'] = 'database_info'; - $output->print_header($lang->db_config, 'dbconfig'); - - echo ""; - - // Check for errors from this stage - if(is_array($errors)) - { - $error_list = error_list($errors); - echo $lang->sprintf($lang->db_step_error_config, $error_list); - } - else - { - echo $lang->db_step_config_db; - } - - $dbengines = ''; - - // Loop through database engines - foreach($dboptions as $dbfile => $dbtype) - { - if($mybb->get_input('dbengine') == $dbfile) - { - $dbengines .= ""; - } - else - { - $dbengines .= ""; - } - } - - $db_info = array(); - foreach($dboptions as $dbfile => $dbtype) - { - require_once MYBB_ROOT."inc/db_{$dbfile}.php"; - $db = new $dbtype['class']; - $encodings = $db->fetch_db_charsets(); - $encoding_select = ''; - $mybb->input['config'] = $mybb->get_input('config', MyBB::INPUT_ARRAY); - if(empty($mybb->input['config'][$dbfile]['dbhost'])) - { - $mybb->input['config'][$dbfile]['dbhost'] = "localhost"; - } - if(empty($mybb->input['config'][$dbfile]['tableprefix'])) - { - $mybb->input['config'][$dbfile]['tableprefix'] = "mybb_"; - } - if(empty($mybb->input['config'][$dbfile]['dbname'])) - { - $mybb->input['config'][$dbfile]['dbname'] = ''; - } - if(empty($mybb->input['config'][$dbfile]['dbuser'])) - { - $mybb->input['config'][$dbfile]['dbuser'] = ''; - } - if(empty($mybb->input['config'][$dbfile]['dbpass'])) - { - $mybb->input['config'][$dbfile]['dbpass'] = ''; - } - if(empty($mybb->input['config'][$dbfile]['encoding'])) - { - $mybb->input['config'][$dbfile]['encoding'] = "utf8"; - } - - $class = ''; - if(empty($first) && !$mybb->get_input('dbengine')) - { - $mybb->input['dbengine'] = $dbfile; - $first = true; - } - if($dbfile == $mybb->input['dbengine']) - { - $class = "_selected"; - } - - $db_info[$dbfile] = " - - - {$dbtype['title']} {$lang->database_settings} - "; - - // SQLite gets some special settings - if($dbfile == 'sqlite') - { - $db_info[$dbfile] .= " - - - input['config'][$dbfile]['dbname'])."\" /> - "; - } - // Others get db host, username, password etc - else - { - $db_info[$dbfile] .= " - - - input['config'][$dbfile]['dbhost'])."\" /> - - - - input['config'][$dbfile]['dbuser'])."\" /> - - - - input['config'][$dbfile]['dbpass'])."\" /> - - - - input['config'][$dbfile]['dbname'])."\" /> - "; - } - - // Now we're up to table settings - $db_info[$dbfile] .= " - - {$dbtype['title']} {$lang->table_settings} - - - - input['config'][$dbfile]['tableprefix'])."\" /> - - "; - - // Encoding selection only if supported - if(is_array($encodings)) - { - $select_options = ""; - foreach($encodings as $encoding => $title) - { - if($mybb->input['config'][$dbfile]['encoding'] == $encoding) - { - $select_options .= ""; - } - else - { - $select_options .= ""; - } - } - $db_info[$dbfile] .= " - - - - - "; - } - } - $dbconfig = implode("", $db_info); - - echo $lang->sprintf($lang->db_step_config_table, $dbengines, $dbconfig); - $output->print_footer('create_tables'); -} - -/** - * Create our tables - */ -function create_tables() -{ - global $output, $dbinfo, $errors, $mybb, $dboptions, $lang; - - $mybb->input['dbengine'] = $mybb->get_input('dbengine'); - if(!file_exists(MYBB_ROOT."inc/db_{$mybb->input['dbengine']}.php")) - { - $errors[] = $lang->db_step_error_invalidengine; - database_info(); - } - - $mybb->input['config'] = $mybb->get_input('config', MyBB::INPUT_ARRAY); - $config = $mybb->input['config'][$mybb->input['dbengine']]; - - if(strstr($mybb->input['dbengine'], "sqlite") !== false) - { - if(strstr($config['dbname'], "./") !== false || strstr($config['dbname'], "../") !== false || empty($config['dbname'])) - { - $errors[] = $lang->db_step_error_sqlite_invalid_dbname; - database_info(); - } - } - - // Attempt to connect to the db - require_once MYBB_ROOT."inc/db_{$mybb->input['dbengine']}.php"; - switch($mybb->input['dbengine']) - { - case "sqlite": - $db = new DB_SQLite; - break; - case "pgsql": - $db = new DB_PgSQL; - break; - case "mysqli": - $db = new DB_MySQLi; - break; - default: - $db = new DB_MySQL; - } - $db->error_reporting = 0; - - $connect_array = array( - "hostname" => $config['dbhost'], - "username" => $config['dbuser'], - "password" => $config['dbpass'], - "database" => $config['dbname'], - "encoding" => $config['encoding'] - ); - - $connection = $db->connect($connect_array); - if($connection === false) - { - $errors[] = $lang->sprintf($lang->db_step_error_noconnect, $config['dbhost']); - } - // double check if the DB exists for MySQL - elseif(method_exists($db, 'select_db') && !$db->select_db($config['dbname'])) - { - $errors[] = $lang->sprintf($lang->db_step_error_nodbname, $config['dbname']); - } - - // Most DB engines only allow certain characters in the table name. Oracle requires an alphabetic character first. - if((!preg_match("#^[A-Za-z][A-Za-z0-9_]*$#", $config['tableprefix'])) && $config['tableprefix'] != '') - { - $errors[] = $lang->db_step_error_invalid_tableprefix; - } - - // Needs to be smaller then 64 characters total (MySQL Limit). - // This allows 24 characters for the actual table name, which should be sufficient. - if(strlen($config['tableprefix']) > 40) - { - $errors[] = $lang->db_step_error_tableprefix_too_long; - } - - if(($db->engine == 'mysql' || $db->engine == 'mysqli') && $config['encoding'] == 'utf8mb4' && version_compare($db->get_version(), '5.5.3', '<')) - { - $errors[] = $lang->db_step_error_utf8mb4_error; - } - - if(is_array($errors)) - { - database_info(); - } - - // Decide if we can use a database encoding or not - if($db->fetch_db_charsets() != false) - { - $db_encoding = "\$config['database']['encoding'] = '{$config['encoding']}';"; - } - else - { - $db_encoding = "// \$config['database']['encoding'] = '{$config['encoding']}';"; - } - - $config['dbpass'] = addslashes($config['dbpass']); - - // Write the configuration file - $configdata = "input['dbengine']}'; -\$config['database']['database'] = '{$config['dbname']}'; -\$config['database']['table_prefix'] = '{$config['tableprefix']}'; - -\$config['database']['hostname'] = '{$config['dbhost']}'; -\$config['database']['username'] = '{$config['dbuser']}'; -\$config['database']['password'] = '{$config['dbpass']}'; - -/** - * Admin CP directory - * For security reasons, it is recommended you - * rename your Admin CP directory. You then need - * to adjust the value below to point to the - * new directory. - */ - -\$config['admin_dir'] = 'admin'; - -/** - * Hide all Admin CP links - * If you wish to hide all Admin CP links - * on the front end of the board after - * renaming your Admin CP directory, set this - * to 1. - */ - -\$config['hide_admin_links'] = 0; - -/** - * Data-cache configuration - * The data cache is a temporary cache - * of the most commonly accessed data in MyBB. - * By default, the database is used to store this data. - * - * If you wish to use the file system (cache/ directory), MemCache (or MemCached), xcache, APC, or eAccelerator - * you can change the value below to 'files', 'memcache', 'memcached', 'xcache', 'apc' or 'eaccelerator' from 'db'. - */ - -\$config['cache_store'] = 'db'; - -/** - * Memcache configuration - * If you are using memcache or memcached as your - * data-cache, you need to configure the hostname - * and port of your memcache server below. - * - * If not using memcache, ignore this section. - */ - -\$config['memcache']['host'] = 'localhost'; -\$config['memcache']['port'] = 11211; - -/** - * Super Administrators - * A comma separated list of user IDs who cannot - * be edited, deleted or banned in the Admin CP. - * The administrator permissions for these users - * cannot be altered either. - */ - -\$config['super_admins'] = '1'; - -/** - * Database Encoding - * If you wish to set an encoding for MyBB uncomment - * the line below (if it isn't already) and change - * the current value to the mysql charset: - * http://dev.mysql.com/doc/refman/5.1/en/charset-mysql.html - */ - -{$db_encoding} - -/** - * Automatic Log Pruning - * The MyBB task system can automatically prune - * various log files created by MyBB. - * To enable this functionality for the logs below, set the - * the number of days before each log should be pruned. - * If you set the value to 0, the logs will not be pruned. - */ - -\$config['log_pruning'] = array( - 'admin_logs' => 365, // Administrator logs - 'mod_logs' => 365, // Moderator logs - 'task_logs' => 30, // Scheduled task logs - 'mail_logs' => 180, // Mail error logs - 'user_mail_logs' => 180, // User mail logs - 'promotion_logs' => 180 // Promotion logs -); - -/** - * Disallowed Remote Hosts - * List of hosts the fetch_remote_file() function will not - * perform requests to. - * It is recommended that you enter hosts resolving to the - * forum server here to prevent Server Side Request - * Forgery attacks. - */ - -\$config['disallowed_remote_hosts'] = array( - 'localhost', -); - -/** - * Disallowed Remote Addresses - * List of IPv4 addresses the fetch_remote_file() function - * will not perform requests to. - * It is recommended that you enter addresses resolving to - * the forum server here to prevent Server Side Request - * Forgery attacks. - * Removing all values disables resolving hosts in that - * function. - */ - -\$config['disallowed_remote_addresses'] = array( - '127.0.0.1', - '10.0.0.0/8', - '172.16.0.0/12', - '192.168.0.0/16', -); - -"; - - $file = fopen(MYBB_ROOT.'inc/config.php', 'w'); - fwrite($file, $configdata); - fclose($file); - - if(function_exists('opcache_invalidate')) - { - opcache_invalidate(MYBB_ROOT."inc/config.php"); - } - - // Error reporting back on - $db->error_reporting = 1; - - $output->print_header($lang->table_creation, 'createtables'); - echo $lang->sprintf($lang->tablecreate_step_connected, $dboptions[$mybb->input['dbengine']]['short_title'], $db->get_version()); - - if($dboptions[$mybb->input['dbengine']]['structure_file']) - { - $structure_file = $dboptions[$mybb->input['dbengine']]['structure_file']; - } - else - { - $structure_file = 'mysql_db_tables.php'; - } - - require_once INSTALL_ROOT."resources/{$structure_file}"; - foreach($tables as $val) - { - $val = preg_replace('#mybb_(\S+?)([\s\.,\(]|$)#', $config['tableprefix'].'\\1\\2', $val); - $val = preg_replace('#;$#', $db->build_create_table_collation().";", $val); - preg_match('#CREATE TABLE (\S+)(\s?|\(?)\(#i', $val, $match); - if($match[1]) - { - $db->drop_table($match[1], false, false); - echo $lang->sprintf($lang->tablecreate_step_created, $match[1]); - } - $db->query($val); - if($match[1]) - { - echo $lang->done . "
    \n"; - } - } - echo $lang->tablecreate_step_done; - $output->print_footer('populate_tables'); -} - -/** - * Insert our default data - */ -function populate_tables() -{ - global $output, $lang; - - require MYBB_ROOT.'inc/config.php'; - $db = db_connection($config); - - $output->print_header($lang->table_population, 'tablepopulate'); - echo $lang->sprintf($lang->populate_step_insert); - - if(!empty($dboptions[$db->type]['population_file'])) - { - $population_file = $dboptions[$db->type]['population_file']; - } - else - { - $population_file = 'mysql_db_inserts.php'; - } - - require_once INSTALL_ROOT."resources/{$population_file}"; - foreach($inserts as $val) - { - $val = preg_replace('#mybb_(\S+?)([\s\.,]|$)#', $config['database']['table_prefix'].'\\1\\2', $val); - $db->query($val); - } - - // Update the sequences for PgSQL - if($config['database']['type'] == "pgsql") - { - $db->query("SELECT setval('{$config['database']['table_prefix']}attachtypes_atid_seq', (SELECT max(atid) FROM {$config['database']['table_prefix']}attachtypes));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}forums_fid_seq', (SELECT max(fid) FROM {$config['database']['table_prefix']}forums));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}helpdocs_hid_seq', (SELECT max(hid) FROM {$config['database']['table_prefix']}helpdocs));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}helpsections_sid_seq', (SELECT max(sid) FROM {$config['database']['table_prefix']}helpsections));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}icons_iid_seq', (SELECT max(iid) FROM {$config['database']['table_prefix']}icons));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}profilefields_fid_seq', (SELECT max(fid) FROM {$config['database']['table_prefix']}profilefields));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}smilies_sid_seq', (SELECT max(sid) FROM {$config['database']['table_prefix']}smilies));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}spiders_sid_seq', (SELECT max(sid) FROM {$config['database']['table_prefix']}spiders));"); - $db->query("SELECT setval('{$config['database']['table_prefix']}templategroups_gid_seq', (SELECT max(gid) FROM {$config['database']['table_prefix']}templategroups));"); - } - - echo $lang->populate_step_inserted; - $output->print_footer('templates'); -} - -/** - * Install our theme - */ -function insert_templates() -{ - global $mybb, $output, $cache, $db, $lang; - - require MYBB_ROOT.'inc/config.php'; - $db = db_connection($config); - - require_once MYBB_ROOT.'inc/class_datacache.php'; - $cache = new datacache; - - $output->print_header($lang->theme_installation, 'theme'); - - echo $lang->theme_step_importing; - - $db->delete_query("themes"); - $db->delete_query("templates"); - $db->delete_query("themestylesheets"); - my_rmdir_recursive(MYBB_ROOT."cache/themes", array(MYBB_ROOT."cache/themes/index.html")); - - $insert_array = array( - 'title' => 'Default Templates' - ); - $templateset = $db->insert_query("templatesets", $insert_array); - - $contents = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme.xml'); - if(!empty($mybb->config['admin_dir']) && file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php"; - } - elseif(file_exists(MYBB_ROOT."admin/inc/functions_themes.php")) - { - require_once MYBB_ROOT."admin/inc/functions.php"; - require_once MYBB_ROOT."admin/inc/functions_themes.php"; - } - else - { - $output->print_error("Please make sure your admin directory is uploaded correctly."); - } - $theme_id = import_theme_xml($contents, array("templateset" => -2, "version_compat" => 1)); - $tid = build_new_theme("Default", null, $theme_id); - - // Update our properties template set to the correct one - $query = $db->simple_select("themes", "stylesheets, properties", "tid='{$tid}'", array('limit' => 1)); - - $theme = $db->fetch_array($query); - $properties = my_unserialize($theme['properties']); - $stylesheets = my_unserialize($theme['stylesheets']); - - $properties['templateset'] = $templateset; - unset($properties['inherited']['templateset']); - - // 1.8: Stylesheet Colors - $contents = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme_colors.xml'); - - require_once MYBB_ROOT."inc/class_xml.php"; - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - if(is_array($tree) && is_array($tree['colors'])) - { - if(is_array($tree['colors']['scheme'])) - { - foreach($tree['colors']['scheme'] as $tag => $value) - { - $exp = explode("=", $value['value']); - - $properties['colors'][$exp[0]] = $exp[1]; - } - } - - if(is_array($tree['colors']['stylesheets'])) - { - $count = count($properties['disporder']) + 1; - foreach($tree['colors']['stylesheets']['stylesheet'] as $stylesheet) - { - $new_stylesheet = array( - "name" => $db->escape_string($stylesheet['attributes']['name']), - "tid" => $tid, - "attachedto" => $db->escape_string($stylesheet['attributes']['attachedto']), - "stylesheet" => $db->escape_string($stylesheet['value']), - "lastmodified" => TIME_NOW, - "cachefile" => $db->escape_string($stylesheet['attributes']['name']) - ); - - $sid = $db->insert_query("themestylesheets", $new_stylesheet); - $css_url = "css.php?stylesheet={$sid}"; - - $cached = cache_stylesheet($tid, $stylesheet['attributes']['name'], $stylesheet['value']); - - if($cached) - { - $css_url = $cached; - } - - // Add to display and stylesheet list - $properties['disporder'][$stylesheet['attributes']['name']] = $count; - $stylesheets[$stylesheet['attributes']['attachedto']]['global'][] = $css_url; - - ++$count; - } - } - } - - $db->update_query("themes", array("def" => 1, "properties" => $db->escape_string(my_serialize($properties)), "stylesheets" => $db->escape_string(my_serialize($stylesheets))), "tid = '{$tid}'"); - - echo $lang->theme_step_imported; - $output->print_footer('configuration'); -} - -/** - * Default configuration - */ -function configure() -{ - global $output, $mybb, $errors, $lang; - - $output->print_header($lang->board_config, 'config'); - - echo << - function warnUser(inp, warn) - { - var parenttr = $('#'+inp.id).closest('tr'); - if(inp.value != inp.defaultValue) - { - if(!parenttr.next('.setting_peeker').length) - { - var revertlink = ' {$lang->config_step_revert}'; - parenttr.removeClass('last').after(''+warn+revertlink+''); - } - } else { - parenttr.next('.setting_peeker').remove(); - if(parenttr.is(':last-child')) - { - parenttr.addClass('last'); - } - } - } - - function revertSetting(defval, inpid) - { - $(inpid).val(defval); - var parenttr = $(inpid).closest('tr'); - parenttr.next('.setting_peeker').remove(); - if(parenttr.is(':last-child')) - { - parenttr.addClass('last'); - } - } - - -EOF; - - // If board configuration errors - if(is_array($errors)) - { - $error_list = error_list($errors); - echo $lang->sprintf($lang->config_step_error_config, $error_list); - - $bbname = htmlspecialchars_uni($mybb->get_input('bbname')); - $bburl = htmlspecialchars_uni($mybb->get_input('bburl')); - $websitename = htmlspecialchars_uni($mybb->get_input('websitename')); - $websiteurl = htmlspecialchars_uni($mybb->get_input('websiteurl')); - $cookiedomain = htmlspecialchars_uni($mybb->get_input('cookiedomain')); - $cookiepath = htmlspecialchars_uni($mybb->get_input('cookiepath')); - $contactemail = htmlspecialchars_uni($mybb->get_input('contactemail')); - } - else - { - $bbname = 'Forums'; - $cookiedomain = ''; - $websitename = 'Your Website'; - - $protocol = "http://"; - if((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != "off")) - { - $protocol = "https://"; - } - - // Attempt auto-detection - if(!empty($_SERVER['HTTP_HOST'])) - { - $hostname = $protocol.$_SERVER['HTTP_HOST']; - $cookiedomain = $_SERVER['HTTP_HOST']; - } - elseif(!empty($_SERVER['SERVER_NAME'])) - { - $hostname = $protocol.$_SERVER['SERVER_NAME']; - $cookiedomain = $_SERVER['SERVER_NAME']; - } - - if(my_substr($cookiedomain, 0, 4) == "www.") - { - $cookiedomain = substr($cookiedomain, 4); - } - - // IP addresses and hostnames are not valid - if(my_inet_pton($cookiedomain) !== false || strpos($cookiedomain, '.') === false) - { - $cookiedomain = ''; - } - else - { - $cookiedomain = ".{$cookiedomain}"; - } - - if(!empty($_SERVER['SERVER_PORT'])) - { - $port = ":{$_SERVER['SERVER_PORT']}"; - $pos = strrpos($cookiedomain, $port); - - if($pos !== false) - { - $cookiedomain = substr($cookiedomain, 0, $pos); - } - - if($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443 && !preg_match("#:[0-9]#i", $hostname)) - { - $hostname .= $port; - } - } - - $currentlocation = get_current_location('', '', true); - $noinstall = substr($currentlocation, 0, strrpos($currentlocation, '/install/')); - - $cookiepath = $noinstall.'/'; - $bburl = $hostname.$noinstall; - $websiteurl = $hostname.'/'; - - if(isset($_SERVER['SERVER_ADMIN']) && filter_var($_SERVER['SERVER_ADMIN'], FILTER_VALIDATE_EMAIL)) - { - $contactemail = $_SERVER['SERVER_ADMIN']; - } - } - - echo $lang->sprintf($lang->config_step_table, $bbname, $bburl, $websitename, $websiteurl, $cookiedomain, $cookiepath, $contactemail); - $output->print_footer('adminuser'); -} - -/** - * How do we want to name the admin user? - */ -function create_admin_user() -{ - global $output, $mybb, $errors, $db, $lang; - - $mybb->input['action'] = "adminuser"; - // If no errors then check for errors from last step - if(!is_array($errors)) - { - if(empty($mybb->input['bburl'])) - { - $errors[] = $lang->config_step_error_url; - } - if(empty($mybb->input['bbname'])) - { - $errors[] = $lang->config_step_error_name; - } - if(is_array($errors)) - { - configure(); - } - } - $output->print_header($lang->create_admin, 'admin'); - - echo << - function comparePass() - { - var parenttr = $('#adminpass2').closest('tr'); - var passval = $('#adminpass2').val(); - if(passval && passval != $('#adminpass').val()) - { - if(!parenttr.next('.pass_peeker').length) - { - parenttr.removeClass('last').after('{$lang->admin_step_nomatch}'); - } - } else { - parenttr.addClass('last').next('.pass_peeker').remove(); - } - } - - -EOF; - - if(is_array($errors)) - { - $error_list = error_list($errors); - echo $lang->sprintf($lang->admin_step_error_config, $error_list); - $adminuser = $mybb->get_input('adminuser'); - $adminemail = $mybb->get_input('adminemail'); - } - else - { - require MYBB_ROOT.'inc/config.php'; - $db = db_connection($config); - - echo $lang->admin_step_setupsettings; - $adminuser = $adminemail = ''; - - $settings = file_get_contents(INSTALL_ROOT.'resources/settings.xml'); - $parser = new XMLParser($settings); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - $groupcount = $settingcount = 0; - - // Insert all the settings - foreach($tree['settings'][0]['settinggroup'] as $settinggroup) - { - $groupdata = array( - 'name' => $db->escape_string($settinggroup['attributes']['name']), - 'title' => $db->escape_string($settinggroup['attributes']['title']), - 'description' => $db->escape_string($settinggroup['attributes']['description']), - 'disporder' => (int)$settinggroup['attributes']['disporder'], - 'isdefault' => $settinggroup['attributes']['isdefault'], - ); - $gid = $db->insert_query('settinggroups', $groupdata); - ++$groupcount; - foreach($settinggroup['setting'] as $setting) - { - $settingdata = array( - 'name' => $db->escape_string($setting['attributes']['name']), - 'title' => $db->escape_string($setting['title'][0]['value']), - 'description' => $db->escape_string($setting['description'][0]['value']), - 'optionscode' => $db->escape_string($setting['optionscode'][0]['value']), - 'value' => $db->escape_string($setting['settingvalue'][0]['value']), - 'disporder' => (int)$setting['disporder'][0]['value'], - 'gid' => $gid, - 'isdefault' => 1 - ); - - $db->insert_query('settings', $settingdata); - $settingcount++; - } - } - - if(my_substr($mybb->get_input('bburl'), -1, 1) == '/') - { - $mybb->input['bburl'] = my_substr($mybb->get_input('bburl'), 0, -1); - } - - $db->update_query("settings", array('value' => $db->escape_string($mybb->get_input('bbname'))), "name='bbname'"); - $db->update_query("settings", array('value' => $db->escape_string($mybb->get_input('bburl'))), "name='bburl'"); - $db->update_query("settings", array('value' => $db->escape_string($mybb->get_input('websitename'))), "name='homename'"); - $db->update_query("settings", array('value' => $db->escape_string($mybb->get_input('websiteurl'))), "name='homeurl'"); - $db->update_query("settings", array('value' => $db->escape_string($mybb->get_input('cookiedomain'))), "name='cookiedomain'"); - $db->update_query("settings", array('value' => $db->escape_string($mybb->get_input('cookiepath'))), "name='cookiepath'"); - $db->update_query("settings", array('value' => $db->escape_string($mybb->get_input('contactemail'))), "name='adminemail'"); - $db->update_query("settings", array('value' => 'contact.php'), "name='contactlink'"); - - write_settings(); - - echo $lang->sprintf($lang->admin_step_insertesettings, $settingcount, $groupcount); - - // Save the acp pin - $pin = addslashes($mybb->get_input('pin')); - - $file = @fopen(MYBB_ROOT."inc/config.php", "a"); - - @fwrite($file, "/** - * Admin CP Secret PIN - * If you wish to request a PIN - * when someone tries to login - * on your Admin CP, enter it below. - */ - -\$config['secret_pin'] = '{$pin}';"); - - @fclose($file); - - include_once MYBB_ROOT."inc/functions_task.php"; - $tasks = file_get_contents(INSTALL_ROOT.'resources/tasks.xml'); - $parser = new XMLParser($tasks); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - $taskcount = 0; - - // Insert scheduled tasks - foreach($tree['tasks'][0]['task'] as $task) - { - $new_task = array( - 'title' => $db->escape_string($task['title'][0]['value']), - 'description' => $db->escape_string($task['description'][0]['value']), - 'file' => $db->escape_string($task['file'][0]['value']), - 'minute' => $db->escape_string($task['minute'][0]['value']), - 'hour' => $db->escape_string($task['hour'][0]['value']), - 'day' => $db->escape_string($task['day'][0]['value']), - 'weekday' => $db->escape_string($task['weekday'][0]['value']), - 'month' => $db->escape_string($task['month'][0]['value']), - 'enabled' => $db->escape_string($task['enabled'][0]['value']), - 'logging' => $db->escape_string($task['logging'][0]['value']) - ); - - $new_task['nextrun'] = fetch_next_run($new_task); - - $db->insert_query("tasks", $new_task); - $taskcount++; - } - - // For the version check task, set a random date and hour (so all MyBB installs don't query mybb.com all at the same time) - $update_array = array( - 'hour' => rand(0, 23), - 'weekday' => rand(0, 6) - ); - - $db->update_query("tasks", $update_array, "file = 'versioncheck'"); - - echo $lang->sprintf($lang->admin_step_insertedtasks, $taskcount); - - $views = file_get_contents(INSTALL_ROOT.'resources/adminviews.xml'); - $parser = new XMLParser($views); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - $view_count = 0; - - // Insert admin views - foreach($tree['adminviews'][0]['view'] as $view) - { - $fields = array(); - foreach($view['fields'][0]['field'] as $field) - { - $fields[] = $field['attributes']['name']; - } - - $conditions = array(); - if(isset($view['conditions'][0]['condition']) && is_array($view['conditions'][0]['condition'])) - { - foreach($view['conditions'][0]['condition'] as $condition) - { - if(!$condition['value']) continue; - if($condition['attributes']['is_serialized'] == 1) - { - $condition['value'] = my_unserialize($condition['value']); - } - $conditions[$condition['attributes']['name']] = $condition['value']; - } - } - - $custom_profile_fields = array(); - if(isset($view['custom_profile_fields'][0]['field']) && is_array($view['custom_profile_fields'][0]['field'])) - { - foreach($view['custom_profile_fields'][0]['field'] as $field) - { - $custom_profile_fields[] = $field['attributes']['name']; - } - } - - $new_view = array( - "uid" => 0, - "type" => $db->escape_string($view['attributes']['type']), - "visibility" => (int)$view['attributes']['visibility'], - "title" => $db->escape_string($view['title'][0]['value']), - "fields" => $db->escape_string(my_serialize($fields)), - "conditions" => $db->escape_string(my_serialize($conditions)), - "custom_profile_fields" => $db->escape_string(my_serialize($custom_profile_fields)), - "sortby" => $db->escape_string($view['sortby'][0]['value']), - "sortorder" => $db->escape_string($view['sortorder'][0]['value']), - "perpage" => (int)$view['perpage'][0]['value'], - "view_type" => $db->escape_string($view['view_type'][0]['value']) - ); - $db->insert_query("adminviews", $new_view); - $view_count++; - } - - echo $lang->sprintf($lang->admin_step_insertedviews, $view_count); - - echo $lang->admin_step_createadmin; - } - - echo $lang->sprintf($lang->admin_step_admintable, $adminuser, $adminemail); - $output->print_footer('final'); -} - -/** - * Installation is finished - */ -function install_done() -{ - global $output, $db, $mybb, $errors, $cache, $lang; - - if(empty($mybb->input['adminuser'])) - { - $errors[] = $lang->admin_step_error_nouser; - } - if(empty($mybb->input['adminpass'])) - { - $errors[] = $lang->admin_step_error_nopassword; - } - if($mybb->get_input('adminpass') != $mybb->get_input('adminpass2')) - { - $errors[] = $lang->admin_step_error_nomatch; - } - if(empty($mybb->input['adminemail'])) - { - $errors[] = $lang->admin_step_error_noemail; - } - if(is_array($errors)) - { - create_admin_user(); - } - - require MYBB_ROOT.'inc/config.php'; - $db = db_connection($config); - - require MYBB_ROOT.'inc/settings.php'; - $mybb->settings = &$settings; - - ob_start(); - $output->print_header($lang->finish_setup, 'finish'); - - echo $lang->done_step_usergroupsinserted; - - // Insert all of our user groups from the XML file - $usergroup_settings = file_get_contents(INSTALL_ROOT.'resources/usergroups.xml'); - $parser = new XMLParser($usergroup_settings); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - - $admin_gid = ''; - $group_count = 0; - foreach($tree['usergroups'][0]['usergroup'] as $usergroup) - { - // usergroup[cancp][0][value] - $new_group = array(); - foreach($usergroup as $key => $value) - { - if(!is_array($value)) - { - continue; - } - - $new_group[$key] = $db->escape_string($value[0]['value']); - } - $db->insert_query("usergroups", $new_group, false); - - // If this group can access the admin CP and we haven't established the admin group - set it (just in case we ever change IDs) - if($new_group['cancp'] == 1 && !$admin_gid) - { - $admin_gid = $usergroup['gid'][0]['value']; - } - $group_count++; - } - - // Restart usergroup sequence with correct # of groups - if($config['database']['type'] == "pgsql") - { - $db->query("SELECT setval('{$config['database']['table_prefix']}usergroups_gid_seq', (SELECT max(gid) FROM {$config['database']['table_prefix']}usergroups));"); - } - - echo $lang->done . '

    '; - - echo $lang->done_step_admincreated; - $now = TIME_NOW; - $salt = random_str(); - $loginkey = generate_loginkey(); - $saltedpw = md5(md5($salt).md5($mybb->get_input('adminpass'))); - - $newuser = array( - 'username' => $db->escape_string($mybb->get_input('adminuser')), - 'password' => $saltedpw, - 'salt' => $salt, - 'loginkey' => $loginkey, - 'email' => $db->escape_string($mybb->get_input('adminemail')), - 'usergroup' => $admin_gid, // assigned above - 'regdate' => $now, - 'lastactive' => $now, - 'lastvisit' => $now, - 'website' => '', - 'icq' => '', - 'aim' => '', - 'yahoo' => '', - 'skype' =>'', - 'google' =>'', - 'birthday' => '', - 'signature' => '', - 'allownotices' => 1, - 'hideemail' => 0, - 'subscriptionmethod' => '0', - 'receivepms' => 1, - 'pmnotice' => 1, - 'pmnotify' => 1, - 'buddyrequestspm' => 1, - 'buddyrequestsauto' => 0, - 'showimages' => 1, - 'showvideos' => 1, - 'showsigs' => 1, - 'showavatars' => 1, - 'showquickreply' => 1, - 'invisible' => 0, - 'style' => '0', - 'timezone' => 0, - 'dst' => 0, - 'threadmode' => '', - 'daysprune' => 0, - 'regip' => $db->escape_binary(my_inet_pton(get_ip())), - 'language' => '', - 'showcodebuttons' => 1, - 'tpp' => 0, - 'ppp' => 0, - 'referrer' => 0, - 'buddylist' => '', - 'ignorelist' => '', - 'pmfolders' => '', - 'notepad' => '', - 'showredirect' => 1, - 'usernotes' => '' - ); - $db->insert_query('users', $newuser); - echo $lang->done . '

    '; - - echo $lang->done_step_adminoptions; - $adminoptions = file_get_contents(INSTALL_ROOT.'resources/adminoptions.xml'); - $parser = new XMLParser($adminoptions); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - $insertmodule = array(); - - $db->delete_query("adminoptions"); - - // Insert all the admin permissions - foreach($tree['adminoptions'][0]['user'] as $users) - { - $uid = $users['attributes']['uid']; - - foreach($users['permissions'][0]['module'] as $module) - { - foreach($module['permission'] as $permission) - { - $insertmodule[$module['attributes']['name']][$permission['attributes']['name']] = $permission['value']; - } - } - - $defaultviews = array(); - foreach($users['defaultviews'][0]['view'] as $view) - { - $defaultviews[$view['attributes']['type']] = $view['value']; - } - - $adminoptiondata = array( - 'uid' => (int)$uid, - 'cpstyle' => '', - 'notes' => '', - 'permissions' => $db->escape_string(my_serialize($insertmodule)), - 'defaultviews' => $db->escape_string(my_serialize($defaultviews)) - ); - - $insertmodule = array(); - - $db->insert_query('adminoptions', $adminoptiondata); - } - echo $lang->done . '

    '; - - // Automatic Login - my_unsetcookie("sid"); - my_unsetcookie("mybbuser"); - my_setcookie('mybbuser', $uid.'_'.$loginkey, null, true); - ob_end_flush(); - - // Make fulltext columns if supported - if($db->supports_fulltext('threads')) - { - $db->create_fulltext_index('threads', 'subject'); - } - if($db->supports_fulltext_boolean('posts')) - { - $db->create_fulltext_index('posts', 'message'); - } - - echo $lang->done_step_cachebuilding; - require_once MYBB_ROOT.'inc/class_datacache.php'; - $cache = new datacache; - $cache->update_version(); - $cache->update_attachtypes(); - $cache->update_smilies(); - $cache->update_badwords(); - $cache->update_usergroups(); - $cache->update_forumpermissions(); - $cache->update_stats(); - $cache->update_statistics(); - $cache->update_forums(); - $cache->update_moderators(); - $cache->update_usertitles(); - $cache->update_reportedcontent(); - $cache->update_awaitingactivation(); - $cache->update_mycode(); - $cache->update_profilefields(); - $cache->update_posticons(); - $cache->update_spiders(); - $cache->update_bannedips(); - $cache->update_banned(); - $cache->update_bannedemails(); - $cache->update_birthdays(); - $cache->update_groupleaders(); - $cache->update_threadprefixes(); - $cache->update_forumsdisplay(); - $cache->update("plugins", array()); - $cache->update("internal_settings", array('encryption_key' => random_str(32))); - $cache->update_default_theme(); - $cache->update_reportreasons(true); - - $version_history = array(); - $dh = opendir(INSTALL_ROOT."resources"); - while(($file = readdir($dh)) !== false) - { - if(preg_match("#upgrade([0-9]+).php$#i", $file, $match)) - { - $version_history[$match[1]] = $match[1]; - } - } - sort($version_history, SORT_NUMERIC); - $cache->update("version_history", $version_history); - - // Schedule an update check so it occurs an hour ago. Gotta stay up to date! - $update['nextrun'] = TIME_NOW - 3600; - $db->update_query("tasks", $update, "tid='12'"); - - $cache->update_update_check(); - $cache->update_tasks(); - - echo $lang->done . '

    '; - - echo $lang->done_step_success; - - $written = 0; - if(is_writable('./')) - { - $lock = @fopen('./lock', 'w'); - $written = @fwrite($lock, '1'); - @fclose($lock); - if($written) - { - echo $lang->done_step_locked; - } - } - if(!$written) - { - echo $lang->done_step_dirdelete; - } - echo $lang->done_whats_next; - $output->print_footer(''); -} - -/** - * @param array $config - * - * @return DB_MySQL|DB_MySQLi|DB_PgSQL|DB_SQLite - */ -function db_connection($config) -{ - require_once MYBB_ROOT."inc/db_{$config['database']['type']}.php"; - switch($config['database']['type']) - { - case "sqlite": - $db = new DB_SQLite; - break; - case "pgsql": - $db = new DB_PgSQL; - break; - case "mysqli": - $db = new DB_MySQLi; - break; - default: - $db = new DB_MySQL; - } - - // Connect to Database - define('TABLE_PREFIX', $config['database']['table_prefix']); - - $db->connect($config['database']); - $db->set_table_prefix(TABLE_PREFIX); - $db->type = $config['database']['type']; - - return $db; -} - -/** - * @param array $array - * - * @return string - */ -function error_list($array) -{ - $string = "
      \n"; - foreach($array as $error) - { - $string .= "
    • {$error}
    • \n"; - } - $string .= "
    \n"; - return $string; -} - -/** - * Write our settings to the settings file - */ -function write_settings() -{ - global $db; - - $settings = ''; - $query = $db->simple_select('settings', '*', '', array('order_by' => 'title')); - while($setting = $db->fetch_array($query)) - { - $setting['value'] = str_replace("\"", "\\\"", $setting['value']); - $settings .= "\$settings['{$setting['name']}'] = \"{$setting['value']}\";\n"; - } - if(!empty($settings)) - { - $settings = " - - - - 1 - - - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - 0 - 0 - 0 - 0 - 0 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - 1 - - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - - - 1 - 1 - 1 - 1 - 1 - - - 1 - 1 - 1 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - - - - - - 1 - - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - - - 1 - 1 - 1 - 1 - 1 - - - 1 - 1 - 1 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - - - - \ No newline at end of file diff --git a/html/forums/install/resources/adminviews.xml b/html/forums/install/resources/adminviews.xml deleted file mode 100644 index b5bf293..0000000 --- a/html/forums/install/resources/adminviews.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - <![CDATA[All Users]]> - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/forums/install/resources/index.html b/html/forums/install/resources/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/install/resources/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/install/resources/language.lang.php b/html/forums/install/resources/language.lang.php deleted file mode 100644 index f2d7356..0000000 --- a/html/forums/install/resources/language.lang.php +++ /dev/null @@ -1,374 +0,0 @@ -Welcome to the installation wizard for MyBB {1}. MyBB has detected it is already configured this directory.

    -

    Please choose a suitable action below:

    - -
    -

    Upgrade my existing copy of MyBB to {1} (Recommended)

    -

    This option will upgrade your current version of MyBB to MyBB {1}.

    -

    You should choose this option when you wish to retain your current forum threads, posts, users and other information.

    -
    -
    -
    -
    - -
    -

    Install a new copy of MyBB

    -

    This option will delete any existing forum you may have set up and install a fresh version of MyBB.

    -

    You should choose this option to erase your existing copy of MyBB if you wish to start again.

    -
    - -
    -
    -
    "; - -$l['mybb_incorrect_folder'] = "
    -

    MyBB has detected that it is running from the \"Upload\" directory.

    -

    While there is nothing wrong with this, it is recommended that your upload the contents of the \"Upload\" directory and not the directory itself.

    For more information please see the MyBB Docs.

    -
    "; - -$l['welcome_step'] = '

    Welcome to the installation wizard for MyBB {1}. This wizard will install and configure a copy of MyBB on your server.

    -

    Now that you\'ve uploaded the MyBB files the database and settings need to be created and imported. Below is an outline of what is going to be completed during installation.

    -
      -
    • MyBB requirements checked
    • -
    • Configuration of database engine
    • -
    • Creation of database tables
    • -
    • Default data inserted
    • -
    • Default themes and templates imported
    • -
    • Creation of an administrator account to manage your board
    • -
    • Basic board settings configured
    • -
    -

    After each step has successfully been completed, click Next to move on to the next step.

    -

    Click "Next" to view the MyBB license agreement.

    -

    (What information is sent?)

    '; - -$l['license_step'] = '
    -{1} -
    -

    By clicking Next, you agree to the terms stated in the MyBB License Agreement above.

    '; - - -$l['req_step_top'] = '

    Before you can install MyBB, we must check that you meet the minimum requirements for installation.

    '; -$l['req_step_reqtable'] = '
    -
    Requirements Check
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Requirements
    PHP Version:{1}
    Supported DB Extensions:{2}
    Supported Translation Extensions:{3}
    PHP XML Extensions:{4}
    Configuration File Writable:{5}
    Settings File Writable:{6}
    Cache Directory Writable:{7}
    File Uploads Directory Writable:{8}
    Avatar Uploads Directory Writable:{9}
    -
    '; -$l['req_step_reqcomplete'] = '

    Congratulations, you meet the requirements to run MyBB.

    -

    Click Next to continue with the installation process.

    '; - -$l['req_step_span_fail'] = '{1}'; -$l['req_step_span_pass'] = '{1}'; - -$l['req_step_error_box'] = '

    {1}

    '; -$l['req_step_error_phpversion'] = 'MyBB Requires PHP 5.2.0 or later to run. You currently have {1} installed.'; -$l['req_step_error_dboptions'] = 'MyBB requires one or more suitable database extensions to be installed. Your server reported that none were available.'; -$l['req_step_error_xmlsupport'] = 'MyBB requires PHP to be compiled with support for XML Data Handling. Please see PHP.net for more information.'; -$l['req_step_error_configdefaultfile'] = 'The configuration file (inc/config.default.php) could not be renamed. Please manually rename the config.default.php file to config.php to allow it to be written to or contact MyBB Support.'; -$l['req_step_error_configfile'] = 'The configuration file (inc/config.php) is not writable. Please adjust the chmod permissions to allow it to be written to.'; -$l['req_step_error_settingsfile'] = 'The settings file (inc/settings.php) is not writable. Please adjust the chmod permissions to allow it to be written to.'; -$l['req_step_error_cachedir'] = 'The cache directory (cache/) is not writable. Please adjust the chmod permissions to allow it to be written to.'; -$l['req_step_error_uploaddir'] = 'The uploads directory (uploads/) is not writable. Please adjust the chmod permissions to allow it to be written to.'; -$l['req_step_error_avatardir'] = 'The avatars directory (uploads/avatars/) is not writable. Please adjust the chmod permissions to allow it to be written to.'; -$l['req_step_error_cssddir'] = 'The css directory (css/) is not writable. Please adjust the chmod permissions to allow it to be written to.'; -$l['req_step_error_tablelist'] = '
    -

    Error

    -

    The MyBB Requirements check failed due to the reasons below. MyBB installation cannot continue because you did not meet the MyBB requirements. Please correct the errors below and try again:

    -{1} -
    '; - - -$l['db_step_config_db'] = '

    It is now time to configure the database that MyBB will use as well as your database authentication details. If you do not have this information, it can usually be obtained from your webhost.

    '; -$l['db_step_config_table'] = '
    -
    Database Configuration
    - - - - - - - - -{2} -
    Database Settings
    -
    -

    Once you\'ve checked these details are correct, click next to continue.

    '; - -$l['database_settings'] = "Database Settings"; -$l['database_path'] = "Database Path:"; -$l['database_host'] = "Database Server Hostname:"; -$l['database_user'] = "Database Username:"; -$l['database_pass'] = "Database Password:"; -$l['database_name'] = "Database Name:"; -$l['table_settings'] = "Table Settings"; -$l['table_prefix'] = "Table Prefix:"; -$l['table_encoding'] = "Table Encoding:"; - -$l['db_step_error_config'] = '
    -

    Error

    -

    There seems to be one or more errors with the database configuration information that you supplied:

    -{1} -

    Once the above are corrected, continue with the installation.

    -
    '; -$l['db_step_error_invalidengine'] = 'You have selected an invalid database engine. Please make your selection from the list below.'; -$l['db_step_error_noconnect'] = 'Could not connect to the database server at \'{1}\' with the supplied username and password. Are you sure the hostname and user details are correct?'; -$l['db_step_error_nodbname'] = 'Could not select the database \'{1}\'. Are you sure it exists and the specified username and password have access to it?'; -$l['db_step_error_missingencoding'] = 'You have not selected an encoding yet. Please make sure you selected an encoding before continuing. (Select \'UTF-8 Unicode\' if you are not sure)'; -$l['db_step_error_sqlite_invalid_dbname'] = 'You may not use relative URLs for SQLite databases. Please use a file system path (ex: /home/user/database.db) for your SQLite database.'; -$l['db_step_error_invalid_tableprefix'] = 'You may only use an underscore (_) and alphanumeric characters in a table prefix. Please use a valid table prefix before continuing.'; -$l['db_step_error_tableprefix_too_long'] = 'You may only use a table prefix with a length of 40 characters or less. Please use a shorter table prefix before continuing.'; -$l['db_step_error_utf8mb4_error'] = '\'4-Byte UTF-8 Unicode\' requires MySQL 5.5.3 or above. Please select an encoding which is compatible with your MySQL version.'; - -$l['tablecreate_step_connected'] = '

    Connection to the database server and database you specified was successful.

    -

    Database Engine: {1} {2}

    -

    The MyBB database tables will now be created.

    '; -$l['tablecreate_step_created'] = 'Creating table {1}...'; -$l['tablecreate_step_done'] = '

    All tables have been created, click Next to populate them.

    '; - -$l['populate_step_insert'] = '

    Now that the basic tables have been created, it\'s time to insert the default data.

    '; -$l['populate_step_inserted'] = '

    The default data has successfully been inserted into the database. Click Next to insert the default MyBB template and theme sets.

    '; - - -$l['theme_step_importing'] = '

    Loading and importing theme and template file...

    '; -$l['theme_step_imported'] = '

    The default theme and template sets have been successfully inserted. Click Next to configure the basic options for your board.

    '; - - -$l['config_step_table'] = '

    It is now time for you to configure the basic settings for your forums such as forum name, URL, your website details, along with your "cookie" domain and paths. These settings can easily be changed in the future through the MyBB Admin Control Panel.

    -
    -
    Board Configuration
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Forum Details
    Website Details
    Cookie settings (?)
    Contact Details
    Security Settings

    Leave this empty if you don\'t want to set one
    -
    - -

    Once you\'ve correctly entered the details above and are ready to proceed, click Next.

    '; - -$l['config_step_error_config'] = '
    -

    Error

    -

    There seems to be one or more errors with the board configuration you supplied:

    -{1} -

    Once the above are corrected, continue with the installation.

    -
    '; -$l['config_step_error_url'] = 'You did not enter the URL to your forums.'; -$l['config_step_error_name'] = 'You did not enter a name for your copy of MyBB.'; -$l['config_step_revert'] = 'Click to revert this setting to original value.'; - - -$l['admin_step_setupsettings'] = '

    Setting up basic board settings...

    '; -$l['admin_step_insertesettings'] = '

    Inserted {1} settings into {2} groups.

    -

    Updating settings with user defined values.

    '; -$l['admin_step_insertedtasks'] = '

    Inserted {1} scheduled tasks.

    '; -$l['admin_step_insertedviews'] = '

    Inserted {1} admin views.

    '; -$l['admin_step_createadmin'] ='

    You need to create an initial administrator account for you to login and manage your copy of MyBB. Please fill in the required fields below to create this account.

    '; -$l['admin_step_admintable'] = '
    -
    Administrator Account Details
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Account Details
    Contact Details
    -
    - -

    Once you\'ve correctly entered the details above and are ready to proceed, click Next.

    '; - -$l['admin_step_error_config'] = '
    -

    Error

    -

    There seems to be one or more errors with the board configuration you supplied:

    -{1} -

    Once the above are corrected, continue with the installation.

    -
    '; -$l['admin_step_error_nouser'] = 'You did not enter a username for your Administrator account.'; -$l['admin_step_error_nopassword'] = 'You did not enter a password for your Administrator account.'; -$l['admin_step_error_nomatch'] = 'The passwords you entered do not match.'; -$l['admin_step_error_noemail'] = 'You did not enter your email address for the Administrator\'s account.'; -$l['admin_step_nomatch'] = 'The retyped password does not match the password from the first input. Please correct it before continuing.'; - -$l['done_step_usergroupsinserted'] = "

    Importing user groups..."; -$l['done_step_admincreated'] = '

    Creating Administrator account...'; -$l['done_step_adminoptions'] = '

    Building Administrator permissions...'; -$l['done_step_cachebuilding'] = '

    Building data caches...'; -$l['done_step_success'] = '

    Your copy of MyBB has successfully been installed and configured correctly.

    -

    The MyBB Group thanks you for your support in installing our software and we hope to see you around the Community Forums if you need help or wish to become a part of the MyBB community.

    '; -$l['done_step_locked'] = '

    Your installer has been locked. To unlock the installer please delete the \'lock\' file in this directory.

    You may now proceed to your new copy of MyBB or its Admin Control Panel.

    '; -$l['done_step_dirdelete'] = '

    Please remove this directory before exploring your copy of MyBB.

    '; -$l['done_whats_next'] = '

    Switching from another forum software?

    MyBB offers a merge system for easy merging of multiple forums from various different popular forum software, allowing an easy conversion process to MyBB. If you\'re looking to switch to MyBB, you\'re heading in the right direction! Check out the Merge System for more information.

    '; - -/* UPGRADE LANGUAGE VARIABLES */ -$l['upgrade'] = "Upgrade Process"; -$l['upgrade_welcome'] = "

    Welcome to the upgrade wizard for MyBB {1}.

    Before you continue, please make sure you know which version of MyBB you were previously running as you will need to select it below.

    We strongly recommend that you also obtain a complete backup of your database and files before attempting to upgrade so if something goes wrong you can easily revert back to the previous version. Also, ensure that your backups are complete before proceeding.

    Make sure you only click Next ONCE on each step of the upgrade process. Pages may take a while to load depending on the size of your forum.

    Once you are ready, please select your old version below and click Next to continue.

    "; -$l['upgrade_templates_reverted'] = 'Templates Reverted'; -$l['upgrade_templates_reverted_success'] = "

    All of the templates have successfully been reverted to the new ones contained in this release. Please press next to continue with the upgrade process.

    "; -$l['upgrade_settings_sync'] = 'Settings Synchronization'; -$l['upgrade_settings_sync_success'] = "

    The board settings have been synchronized with the latest in MyBB.

    {1} new settings inserted along with {2} new setting groups.

    To finalize the upgrade, please click next below to continue.

    "; -$l['upgrade_datacache_building'] = 'Data Cache Building'; -$l['upgrade_building_datacache'] = '

    Building caches...'; -$l['upgrade_continue'] = 'Please press next to continue'; -$l['upgrade_locked'] = "

    Your installer has been locked. To unlock the installer please delete the 'lock' file in this directory.

    You may now proceed to your upgraded copy of MyBB or its Admin Control Panel.

    "; -$l['upgrade_removedir'] = 'Please remove this directory before exploring your upgraded MyBB.'; -$l['upgrade_congrats'] = "

    Congratulations, your copy of MyBB has successfully been updated to {1}.

    {2}

    What's Next?

    • Please use the 'Find Updated Templates' tool in the Admin CP to find customized templates updated during this upgrade process. Edit them to contain the changes or revert them to originals.
    • Ensure that your board is still fully functional.
    "; -$l['upgrade_template_reversion'] = "Template Reversion Warning"; -$l['upgrade_template_reversion_success'] = "

    All necessary database modifications have successfully been made to upgrade your board.

    This upgrade requires all templates to be reverted to the new ones contained in the package so please back up any custom templates you have made before clicking next."; -$l['upgrade_send_stats'] = "

    (What information is sent?)

    "; - -$l['please_login'] = "Please Login"; -$l['login'] = "Login"; -$l['login_desc'] = "Please enter your username and password to begin the upgrade process. You must be a valid forum administrator to perform the upgrade."; -$l['login_username'] = "Username"; -$l['login_password'] = "Password"; -$l['login_password_desc'] = "Please note that passwords are case sensitive."; - -/* Error messages */ -$l['development_preview'] = "

    Warning

    This version of MyBB is a development preview and is to be used for testing purposes only.

    No official support, other than for plugins and theme development, will be provided for this version. By continuing with this install/upgrade you do so at your own risk.

    "; -$l['locked'] = 'The installer is currently locked, please remove \'lock\' from the install directory to continue'; -$l['no_permision'] = "You do not have permissions to run this process. You need administrator permissions to be able to run the upgrade procedure.

    If you need to logout, please click here. From there you will be able to log in again under your administrator account."; -$l['no_theme_functions_file'] = 'No theme functions file has been found. Make sure that all files are uploaded properly.'; - -$l['task_versioncheck_ran'] = "The version check task successfully ran."; diff --git a/html/forums/install/resources/mybb_theme.xml b/html/forums/install/resources/mybb_theme.xml deleted file mode 100644 index 739e0dc..0000000 --- a/html/forums/install/resources/mybb_theme.xml +++ /dev/null @@ -1,14118 +0,0 @@ - - - - - - - - - - - - .expcolimage { - margin-top: 0; -} - -blockquote { - border: 1px solid #ccc; - margin: 0; - background: #fff; - padding: 10px; -} - -blockquote cite { - font-weight: bold; - border-bottom: 1px solid #ccc; - font-style: normal; - display: block; - padding-bottom: 3px; - margin: 0 0 10px 0; -} - -blockquote cite span { - float: right; - font-weight: normal; - font-size: 12px; - color: #666; -} - -blockquote cite span.highlight { - float: none; - font-weight: bold; - padding-bottom: 0; -} - -.codeblock { - background: #fff; - border: 1px solid #ccc; - padding: 10px; -} - -.codeblock .title { - border-bottom: 1px solid #ccc; - font-weight: bold; - padding-bottom: 3px; - margin: 0 0 10px 0; -} - -.codeblock code { - overflow: auto; - height: auto; - max-height: 200px; - display: block; - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px; -} - -.smilie { - vertical-align: middle; -} - -.smilie_pointer { - cursor: pointer; -} - -.separator { - margin: 5px; - padding: 0; - height: 0px; - font-size: 1px; - list-style-type: none; -} - -.popup_menu .popup_item_container { - margin: 1px; - text-align: left; -} - -.popup_menu .popup_item { - display: block; - padding: 4px; - white-space: nowrap; - text-decoration: none; -} - -.popup_menu a.popup_item:hover { - text-decoration: none; -} - -.subject_new { - font-weight: bold; -} - -.highlight { - background: #FFFFCC; - padding-top: 3px; - padding-bottom: 3px; -} - -.pm_alert { - background: #FFF6BF; - border: 1px solid #FFD324; - text-align: center; - padding: 5px 20px; - margin-bottom: 15px; - font-size: 11px; -} - -.red_alert { - background: #FBE3E4; - border: 1px solid #A5161A; - color: #A5161A; - text-align: center; - padding: 5px 20px; - margin-bottom: 15px; - font-size: 11px; - word-wrap: break-word; -} - -.red_alert a:link, -.red_alert a:visited, -.red_alert a:hover, -.red_alert a:active { - color: #A5161A; -} - -.high_warning { - color: #CC0000; -} - -.moderate_warning { - color: #F3611B; -} - -.low_warning { - color: #AE5700; -} - -.imminent_banned { - color: #880000; -} - -.high_banned { - color: #FF0000; -} - -.moderate_banned { - color: #FF6600; -} - -.low_banned { - color: #008000; -} - -.online { - color: #15A018; -} - -.offline { - color: #C7C7C7; -} - -div.error { - padding: 5px 10px; - border: 2px solid #FFD324; - background: #FFF6BF; - font-size: 12px; -} - -div.error p { - margin: 0; - color: #333; - font-weight: normal; -} - -div.error p em { - font-style: normal; - font-weight: bold; - padding-left: 24px; - display: block; - color: #C00; - background: url(images/error.png) no-repeat 0; -} - -div.error ul { - margin-left: 24px; -} - -.pagination { - font-size: 11px; - padding-top: 10px; - margin-bottom: 5px; -} - -.tfoot .pagination, -.tcat .pagination { - padding-top: 0; -} - -.pagination .pages { - font-weight: bold; -} - -.pagination .pagination_current, -.pagination a { - padding: 3px 6px; - margin-bottom: 3px; -} - -.pagination a { - background: #f5f5f5; - border: 1px solid #ccc; -} - -.pagination .pagination_current { - background: none; - color: #333; - border: none; - font-weight: bold; -} - -.pagination a:hover { - background: #0072BC; - color: #fff; - border-color: #263c30; - text-decoration: none; -} - -.pagination .go_page img { - margin-bottom: -4px; -} - -.drop_go_page { - background: #f5f5f5; - padding: 4px; -} - -.pagination_breadcrumb { - background-color: #efefef; - border: 1px solid #fff; - outline: 1px solid #ccc; - padding: 5px; - margin-top: 5px; - font-weight: normal; -} - -.pagination_breadcrumb_link { - vertical-align: middle; - cursor: pointer; -} - -.thread_legend, -.thread_legend dd { - margin: 0; - padding: 0; -} - -.thread_legend dd { - padding-bottom: 4px; - margin-right: 15px; -} - -.thread_legend img { - margin-right: 4px; - vertical-align: bottom; -} - -.forum_legend, -.forum_legend dt, -.forum_legend dd { - margin: 0; - padding: 0; -} - -.forum_legend dd { - float: left; - margin-right: 10px; - margin-top: 7px; -} - -.forum_legend dt { - margin-right: 10px; - float: left; -} - -.success_message { - color: #00b200; - font-weight: bold; - font-size: 10px; - margin-bottom: 10px; -} - -.error_message { - color: #C00; - font-weight: bold; - font-size: 10px; - margin-bottom: 10px; -} - -#posts_container { - padding: 0; -} - -.ignored_post { - border-top: 3px solid #333; - padding: 15px; -} - -.ignored_post .show_ignored_post { - margin-top: -15px; -} - -.ignored_post .show_ignored_post a.button span { - background-position: 0 -400px; -} - -.deleted_post_hidden { - border-top: 2px solid #ccc; - padding: 15px; -} - -.deleted_post_collapsed { - border-top: 3px solid #333; - padding: 15px; -} - -.deleted_post_collapsed .show_deleted_post { - margin-top: -15px; -} - -.deleted_post_collapsed .show_deleted_post a.button span { - background-position: 0 -400px; -} - -.post { - overflow: hidden; -} - -.post.classic { - padding-top: 15px; -} - -.post .post_author { - border-bottom: 1px solid #ccc; - border-top: 2px solid #ccc; - background: #f5f5f5; - padding: 5px; - overflow: hidden; -} - -.post.classic .post_author { - border: 1px solid #ddd; - float: left; - width: 15%; - margin: 0 1% 15px 0; - border-left: 0; - padding: 5px 1%; -} - -.post .post_author .buddy_status { - vertical-align: middle; - margin-top: -4px; -} - -.post .post_author div.author_avatar { - float: left; - margin-right: 3px; -} - -.post.classic .post_author div.author_avatar { - float: none; - text-align: center; - margin-bottom: 8px; -} - -.post .post_author div.author_avatar img { - padding: 5px; - border: 1px solid #ddd; - background: #fff; -} - -.post .post_author div.author_information { - float: left; - padding: 6px 8px; -} - -.post.classic .post_author div.author_information { - float: none; - padding: 0; - text-align: center; -} - -.post .post_author div.author_statistics { - float: right; - font-size: 11px; - padding: 3px 10px 3px 5px; - color: #666; - line-height: 1.3; -} - -.post.classic .post_author div.author_statistics { - border-top: 1px dotted #ccc; - margin: 6px 0 0 0; - padding: 6px 6px 3px 6px; - float: none; -} - -.post .post_head { - font-size: 11px; - padding-bottom: 4px; - border-bottom: 1px dotted #ddd; - margin-bottom: 4px; -} - -.post .post_head span.post_date { - color: #666; -} - -.post .post_head span.edited_post { - font-size: 10px; - color: #999; -} - -.post .post_head span.edited_post a { - color: #666; -} - -.post_body { - font-size: 14px; - padding: 12px 0; -} - -.post.classic .post_content { - float: left; - width: 79%; - padding: 0 1% 5px 1%; -} - -.post_content { - padding: 9px 10px 5px 10px; -} - -.post_content .signature { - margin-top: 5px; - border-top: 1px dotted #ddd; - padding: 10px 0 4px 0; -} - -.post .post_meta { - margin: 4px 0; - font-size: 11px; - color: #999; -} - -.post .post_meta a:link, -.post .post_meta a:visited { - color: #777; -} - -.post .post_meta a:hover, -.post .post_meta a:active { - color: #777; -} - -.post_controls { - clear: both; - background: #f5f5f5; - border-bottom: 1px solid #ccc; - padding: 5px; - overflow: hidden; -} - -.postbit_buttons > a:link, -.postbit_buttons > a:hover, -.postbit_buttons > a:visited, -.postbit_buttons > a:active { - display: inline-block; - padding: 2px 5px; - margin: 2px; - font-size: 11px; - background: #eee url(images/buttons_bg.png) repeat-x; - border: 1px solid #ccc; - color: #555; -} - -.postbit_buttons > a:hover { - border-color: #bbb; -} - -.postbit_buttons a span { - padding-left: 20px; - display: inline-block; - height: 16px; - background-image: url(images/buttons_sprite.png); - background-repeat: no-repeat; -} - -.postbit_buttons a.postbit_find span { - background-position: 0 0; -} - -.postbit_buttons a.postbit_reputation_add span { - background-position: 0 -20px; -} - -.postbit_buttons a.postbit_email span { - background-position: 0 -40px; -} - -.postbit_buttons a.postbit_website span { - background-position: 0 -60px; -} - -.postbit_buttons a.postbit_pm span { - background-position: 0 -80px; -} - -.postbit_buttons a.postbit_quote span { - background-position: 0 -100px; -} - -.postbit_buttons a.postbit_multiquote span { - background-position: 0 -120px; -} - -.postbit_buttons a.postbit_multiquote_on span { - background-position: 0 -140px; -} - -.postbit_buttons a.postbit_edit span { - background-position: 0 -160px; -} - -.postbit_buttons a.postbit_qdelete span { - background-position: 0 -180px; -} - -.postbit_buttons a.postbit_qrestore span { - background-position: 0 -200px; -} - -.postbit_buttons a.postbit_report span { - background-position: 0 -220px; -} - -.postbit_buttons a.postbit_warn span { - background-position: 0 -240px; -} - -.postbit_buttons a.postbit_purgespammer span { - background-position: 0 -540px; -} - -.postbit_buttons a.postbit_reply_pm span { - background-position: 0 -260px; -} - -.postbit_buttons a.postbit_reply_all span { - background-position: 0 -280px; -} - -.postbit_buttons a.postbit_forward_pm span { - background-position: 0 -300px; -} - -.postbit_buttons a.postbit_delete_pm span { - background-position: 0 -320px; -} - -a.button:link, -a.button:hover, -a.button:visited, -a.button:active { - background: #0f0f0f url(images/tcat.png) repeat-x; - color: #fff; - display: inline-block; - padding: 4px 8px; - margin: 2px 2px 6px 2px; - border: 1px solid #000; - font-size: 14px; -} - -a.button.small_button { - font-size: 13px; - margin: 0; - padding: 3px 6px; -} - -a.button span { - padding-left: 20px; - display: inline-block; - background-image: url(images/buttons_sprite.png); - background-repeat: no-repeat; -} - -a.button.new_thread_button span { - background-position: 0 -340px; -} - -a.button.new_reply_button span { - background-position: 0 -360px; -} - -a.button.closed_button span { - background-position: 0 -380px; -} - -a.button.rate_user_button span { - background-position: 0 -400px; -} - -a.button.add_buddy_button span { - background-position: 0 -440px; -} - -a.button.remove_buddy_button span { - background-position: 0 -480px; -} - -a.button.add_ignore_button span { - background-position: 0 -460px; -} - -a.button.remove_ignore_button span { - background-position: 0 -500px; -} - -a.button.report_user_button span { - background-position: 0 -520px; -} - -.quick_jump { - background: url(images/jump.png) no-repeat 0; - width: 13px; - height: 13px; - padding-left: 13px; /* amount of padding needed for image to fully show */ - margin-top: -3px; - border: none; -} - -.pollbar { - background: url(images/pollbar.png) top left repeat-x; - border: 1px solid #3f3f3f; - height: 10px; -} - -.pollbar .percent { - display: none; -} - -.posticons_label { - white-space: nowrap; -} - -/** jGrowl Start **/ - -/** Special IE6 Style Positioning **/ -.ie6 { - position: absolute; -} - -.ie6.top-right { - right: auto; - bottom: auto; - left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.top-left { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.bottom-right { - left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.bottom-left { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -.ie6.center { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); - width: 100%; -} - -/** jGrowl Styling **/ -.jGrowl { - z-index: 9999; - color: #ffffff; - font-size: 12px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - position: fixed; -} -.jGrowl.top-left { - left: 0px; - top: 0px; -} -.jGrowl.top-right { - right: 0px; - top: 0px; -} -.jGrowl.bottom-left { - left: 0px; - bottom: 0px; -} -.jGrowl.bottom-right { - right: 0px; - bottom: 0px; -} -.jGrowl.center { - top: 0px; - width: 50%; - left: 25%; -} - -/** Cross Browser Styling **/ - -.jGrowl.center .jGrowl-notification, -.jGrowl.center .jGrowl-closer { - margin-left: auto; - margin-right: auto; -} -.jGrowl-notification { - background-color: transparent; - opacity: 0.9; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100)); - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100)); - zoom: 1; - width: 250px; - padding: 10px; - margin: 10px; - text-align: left; - display: none; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; - word-break: break-all; -} -.jGrowl .jGrowl-notification { - min-height: 40px; -} -.jGrowl-notification .ui-state-highlight, -.jGrowl-notification .ui-widget-content .ui-state-highlight, -.jGrowl-notification .ui-widget-header .ui-state-highlight { - border: 1px solid #000; - background: #000; - color: #fff; -} -.jGrowl-notification .jGrowl-header { - font-weight: bold; - font-size: .85em; -} -.jGrowl-notification .jGrowl-close { - background-color: transparent; - color: inherit; - border: none; - z-index: 99; - float: right; - font-weight: bold; - font-size: 1em; - cursor: pointer; -} -.jGrowl-closer { - background-color: #000000; - opacity: 0.9; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100)); - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100)); - zoom: 1; - width: 250px; - padding: 10px; - margin: 10px; - text-align: left; - display: none; - border-radius: 5px; - word-break: break-all; - padding-top: 4px; - padding-bottom: 4px; - cursor: pointer; - font-size: .9em; - font-weight: bold; - text-align: center; -} -.jGrowl-closer .ui-state-highlight, -.jGrowl-closer .ui-widget-content .ui-state-highlight, -.jGrowl-closer .ui-widget-header .ui-state-highlight { - border: 1px solid #000; - background: #000; - color: #fff; -} - -.jGrowl .jGrowl-notification.jgrowl_success { - background: lightgreen; - border: 1px solid lightgreen; - color: #333; -} - -.jGrowl .jGrowl-notification.jgrowl_error { - background: red; - border: 1px solid red; - color: #333; -} - -.jGrowl .jGrowl-notification.jgrowl_process, .jGrowl .jGrowl-closer { - background: yellow; - border: 1px solid yellow; - color: #333; -} - -/** Hide jGrowl when printing **/ -@media print { - .jGrowl { - display: none; - } -} - -/** jGrowl End **/ - -/** Modal Start **/ - -.modal { - display: none; - width: 400px; - text-align: left; - background: #fff; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - -o-border-radius: 8px; - -ms-border-radius: 8px; - border-radius: 8px; - -webkit-box-shadow: 0 0 10px #000; - -moz-box-shadow: 0 0 10px #000; - -o-box-shadow: 0 0 10px #000; - -ms-box-shadow: 0 0 10px #000; - box-shadow: 0 0 10px #000; -} - -.modal a.close-modal { - position: absolute; - top: -12.5px; - right: -12.5px; - display: block; - width: 30px; - height: 30px; - text-indent: -9999px; - background: url(images/close.png) no-repeat 0 0; -} - -.modal-spinner { - display: none; - width: 64px; - height: 64px; - position: fixed; - top: 50%; - left: 50%; - margin-right: -32px; - margin-top: -32px; - background: url(images/spinner_big.gif) no-repeat center center; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - -o-border-radius: 8px; - -ms-border-radius: 8px; - border-radius: 8px; -} - -/** Modal End **/ - -/** Impromptu Start **/ - -/*! jQuery-Impromptu - v6.2.1 - 2015-05-10 -* http://trentrichardson.com/Impromptu -* Copyright (c) 2015 Trent Richardson; Licensed MIT */ - -.jqifade{ - position: absolute; - background-color: #777777; -} -iframe.jqifade{ - display:block; - z-index:-1; -} -div.jqi{ - width: 400px; - max-width:90%; - font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; - position: absolute; - background-color: #ffffff; - font-size: 11px; - text-align: left; - border: solid 1px #eeeeee; - border-radius: 6px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - padding: 7px; -} -div.jqi .jqicontainer{ -} -div.jqi .jqiclose{ - position: absolute; - top: 4px; right: -2px; - width: 18px; - cursor: default; - color: #bbbbbb; - font-weight: bold; -} -div.jqi .jqistate{ - background-color: #fff; -} -div.jqi .jqititle{ - padding: 5px 10px; - font-size: 16px; - line-height: 20px; - border-bottom: solid 1px #eeeeee; -} -div.jqi .jqimessage{ - padding: 10px; - line-height: 20px; - color: #444444; - overflow: auto; -} -div.jqi .jqibuttonshide{ - display: none; -} -div.jqi .jqibuttons{ - text-align: right; - margin: 0 -7px -7px -7px; - border-top: solid 1px #e4e4e4; - background-color: #f4f4f4; - border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - -webkit-border-radius: 0 0 6px 6px; -} -div.jqi .jqibuttons button{ - margin: 0; - padding: 15px 20px; - background-color: transparent; - font-weight: normal; - border: none; - border-left: solid 1px #e4e4e4; - color: #777; - font-weight: bold; - font-size: 12px; -} -div.jqi .jqibuttons button.jqidefaultbutton{ - color: #489afe; -} -div.jqi .jqibuttons button:hover, -div.jqi .jqibuttons button:focus{ - color: #287ade; - outline: none; -} -div.jqi .jqibuttons button[disabled]{ - color: #aaa; -} -.jqiwarning .jqi .jqibuttons{ - background-color: #b95656; -} - -/* sub states */ -div.jqi .jqiparentstate::after{ - background-color: #777; - opacity: 0.6; - filter: alpha(opacity=60); - content: ''; - position: absolute; - top:0;left:0;bottom:0;right:0; - border-radius: 6px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; -} -div.jqi .jqisubstate{ - position: absolute; - top:0; - left: 20%; - width: 60%; - padding: 7px; - border: solid 1px #eeeeee; - border-top: none; - border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - -webkit-border-radius: 0 0 6px 6px; -} -div.jqi .jqisubstate .jqibuttons button{ - padding: 10px 18px; -} - -/* arrows for tooltips/tours */ -.jqi .jqiarrow{ position: absolute; height: 0; width:0; line-height: 0; font-size: 0; border: solid 10px transparent;} - -.jqi .jqiarrowtl{ left: 10px; top: -20px; border-bottom-color: #ffffff; } -.jqi .jqiarrowtc{ left: 50%; top: -20px; border-bottom-color: #ffffff; margin-left: -10px; } -.jqi .jqiarrowtr{ right: 10px; top: -20px; border-bottom-color: #ffffff; } - -.jqi .jqiarrowbl{ left: 10px; bottom: -20px; border-top-color: #ffffff; } -.jqi .jqiarrowbc{ left: 50%; bottom: -20px; border-top-color: #ffffff; margin-left: -10px; } -.jqi .jqiarrowbr{ right: 10px; bottom: -20px; border-top-color: #ffffff; } - -.jqi .jqiarrowlt{ left: -20px; top: 10px; border-right-color: #ffffff; } -.jqi .jqiarrowlm{ left: -20px; top: 50%; border-right-color: #ffffff; margin-top: -10px; } -.jqi .jqiarrowlb{ left: -20px; bottom: 10px; border-right-color: #ffffff; } - -.jqi .jqiarrowrt{ right: -20px; top: 10px; border-left-color: #ffffff; } -.jqi .jqiarrowrm{ right: -20px; top: 50%; border-left-color: #ffffff; margin-top: -10px; } -.jqi .jqiarrowrb{ right: -20px; bottom: 10px; border-left-color: #ffffff; } - -/** Impromptu End */ -]]> - - - - - - td { - border-bottom: 0; -} - -.tborder tbody tr:last-child > td:first-child { - -moz-border-radius-bottomleft: 6px; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; -} - -.tborder tbody tr:last-child > td:last-child { - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; -} - -.thead { - -moz-border-radius-topleft: 6px; - -moz-border-radius-topright: 6px; - -webkit-border-top-left-radius: 6px; - -webkit-border-top-right-radius: 6px; - border-top-left-radius: 6px; - border-top-right-radius: 6px; -} - -.thead_collapsed { - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-left-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; -} - -.thead_left { - -moz-border-radius-topright: 0; - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; -} - -.thead_right { - -moz-border-radius-topleft: 0; - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; -} - -.tcat_menu { - -moz-border-radius: 0 !important; - -webkit-border-radius: 0 !important; - border-radius: 0 !important; -} - -.tborder tbody:nth-last-child(2) .tcat_collapse_collapsed { - -moz-border-radius-bottomleft: 6px !important; - -moz-border-radius-bottomright: 6px !important; - -webkit-border-bottom-left-radius: 6px !important; - -webkit-border-bottom-right-radius: 6px !important; - border-bottom-left-radius: 6px !important; - border-bottom-right-radius: 6px !important; -} - -button, -input.button, -input.textbox, -input.invalid_field, -input.valid_field, -select, -textarea, -.editor_control_bar, -blockquote, -.codeblock, -fieldset, -.pm_alert, -.red_alert, -.popup_menu, -.postbit_buttons > a, -a.button { - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.post.classic .post_author { - -moz-border-radius: 0 6px 6px 0; - -webkit-border-radius: 0 6px 6px 0; - border-radius: 0 6px 6px 0; -} - -.popup_menu .popup_item_container:first-child .popup_item { - -moz-border-radius-topleft: 6px; - -moz-border-radius-topright: 6px; - -webkit-border-top-left-radius: 6px; - -webkit-border-top-right-radius: 6px; - border-top-left-radius: 6px; - border-top-right-radius: 6px; -} - -.popup_menu .popup_item_container:last-child .popup_item { - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-left-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; -} - -.pagination a { - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.pollbar { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -div.error { - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -}]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/forums/install/resources/mybb_theme_colors.xml b/html/forums/install/resources/mybb_theme_colors.xml deleted file mode 100644 index c065020..0000000 --- a/html/forums/install/resources/mybb_theme_colors.xml +++ /dev/null @@ -1,519 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/forums/install/resources/mysql_db_inserts.php b/html/forums/install/resources/mysql_db_inserts.php deleted file mode 100644 index b16e3e5..0000000 --- a/html/forums/install/resources/mysql_db_inserts.php +++ /dev/null @@ -1,166 +0,0 @@ -\r\n
    \r\nYou are encouraged to register; once you register you will be able to post messages, set your own preferences, and maintain a profile.
    \r\n
    \r\nSome of the features that generally require registration are subscriptions, changing of styles, accessing of your Personal Pad (simple notepad) and emailing forum members.', 1, 1, 1);"; -$inserts[] = "INSERT INTO mybb_helpdocs (hid, sid, name, description, document, usetranslation, enabled, disporder) VALUES (2, 1, 'Updating Profile', 'Changing your data currently on record.', 'At some point during your stay, you may decide you need to update some information such as your instant messenger information, your password, or perhaps you need to change your email address. You may change any of this information from your user control panel. To access this control panel, simply click on the link in the upper right hand corner of most any page entitled \"user cp\". From there, simply choose \"Edit Profile\" and change or update any desired items, then proceed to click the submit button located at the bottom of the page for changes to take effect.', 1, 1, 2);"; -$inserts[] = "INSERT INTO mybb_helpdocs (hid, sid, name, description, document, usetranslation, enabled, disporder) VALUES (3, 1, 'Use of Cookies on myBB', 'myBB uses cookies to store certain information about your registration.', 'myBulletinBoard makes use of cookies to store your login information if you are registered, and your last visit if you are not.
    \r\n
    \r\nCookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk.
    \r\n
    \r\nCookies on this forum also track the specific topics you have read and when you last read them.
    \r\n
    \r\nTo clear all cookies set by this forum, you can click here.', 1, 1, 3);"; -$inserts[] = "INSERT INTO mybb_helpdocs (hid, sid, name, description, document, usetranslation, enabled, disporder) VALUES (4, 1, 'Logging In and Out', 'How to login and log out.', 'When you login, you set a cookie on your machine so that you can browse the forums without having to enter in your username and password each time. Logging out clears that cookie to ensure nobody else can browse the forum as you.
    \r\n
    \r\nTo login, simply click the login link at the top right hand corner of the forum. To log out, click the log out link in the same place. In the event you cannot log out, clearing cookies on your machine will take the same effect.', 1, 1, 4);"; -$inserts[] = "INSERT INTO mybb_helpdocs (hid, sid, name, description, document, usetranslation, enabled, disporder) VALUES (5, 2, 'Posting a New Topic', 'Starting a new thread in a forum.', 'When you go to a forum you are interested in and you wish to create a new topic (or thread), simply choose the button at the top and bottom of the forums entitled \"New topic\". Please take note that you may not have permission to post a new topic in every forum as your administrator may have restricted posting in that forum to staff or archived the forum entirely.', 1, 1, 1);"; -$inserts[] = "INSERT INTO mybb_helpdocs (hid, sid, name, description, document, usetranslation, enabled, disporder) VALUES (6, 2, 'Posting a Reply', 'Replying to a topic within a forum.', 'During the course of your visit, you may encounter a thread to which you would like to make a reply. To do so, simply click the \"Post reply\" button at the bottom or top of the thread. Please take note that your administrator may have restricted posting to certain individuals in that particular forum.
    \r\n
    \r\nAdditionally, a moderator of a forum may have closed a thread meaning that users cannot reply to it. There is no way for a user to open such a thread without the help of a moderator or administrator.', 1, 1, 2);"; -$inserts[] = "INSERT INTO mybb_helpdocs (hid, sid, name, description, document, usetranslation, enabled, disporder) VALUES (7, 2, 'MyCode', 'Learn how to use MyCode to enhance your posts.', 'You can use MyCode, a simplified version of HTML, in your posts to create certain effects.\r\n


    \r\n[b]This text is bold[/b]
    \r\n   This text is bold\r\n

    \r\n[i]This text is italicized[/i]
    \r\n   This text is italicized\r\n

    \r\n[u]This text is underlined[/u]
    \r\n   This text is underlined\r\n


    \r\n[url]http://www.example.com/[/url]
    \r\n   http://www.example.com/\r\n

    \r\n[url=http://www.example.com/]Example.com[/url]
    \r\n   Example.com\r\n

    \r\n[email]example@example.com[/email]
    \r\n   example@example.com\r\n

    \r\n[email=example@example.com]E-mail Me![/email]
    \r\n   E-mail Me!\r\n

    \r\n[email=example@example.com?subject=spam]E-mail with subject[/email]
    \r\n   E-mail with subject\r\n


    \r\n[quote]Quoted text will be here[/quote]
    \r\n   Quoted text will be here\r\n

    \r\n[code]Text with preserved formatting[/code]
    \r\n   Text with preserved formatting\r\n


    \r\n[img]http://www.php.net/images/php.gif[/img]
    \r\n   \r\n

    \r\n[img=50x50]http://www.php.net/images/php.gif[/img]
    \r\n   \r\n


    \r\n[color=red]This text is red[/color]
    \r\n   This text is red\r\n

    \r\n[size=3]This text is size 3[/size]
    \r\n   This text is size 3\r\n

    \r\n[font=Tahoma]This font is Tahoma[/font]
    \r\n   This font is Tahoma\r\n


    \r\n[align=center]This is centered[/align]

    This is centered
    \r\n

    \r\n[align=right]This is right-aligned[/align]

    This is right-aligned
    \r\n


    \r\n[list]
    \r\n[*]List Item #1
    \r\n[*]List Item #2
    \r\n[*]List Item #3
    \r\n[/list]
    \r\n

      \r\n
    • List item #1
    • \r\n
    • List item #2
    • \r\n
    • List Item #3
    • \r\n

    You can make an ordered list by using [list=1] for a numbered, and [list=a] for an alphabetical list.', 1, 1, 3);"; - -$inserts[] = "INSERT INTO mybb_helpsections (sid, name, description, usetranslation, enabled, disporder) VALUES (1, 'User Maintenance', 'Basic instructions for maintaining a forum account.', 1, 1, 1);"; -$inserts[] = "INSERT INTO mybb_helpsections (sid, name, description, usetranslation, enabled, disporder) VALUES (2, 'Posting', 'Posting, replying, and basic usage of forum.', 1, 1, 2);"; - -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(1, 'Bug', 'images/icons/bug.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(2, 'Exclamation', 'images/icons/exclamation.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(3, 'Question', 'images/icons/question.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(4, 'Smile', 'images/icons/smile.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(5, 'Sad', 'images/icons/sad.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(6, 'Wink', 'images/icons/wink.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(7, 'Big Grin', 'images/icons/biggrin.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(8, 'Tongue', 'images/icons/tongue.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(9, 'Brick', 'images/icons/brick.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(10, 'Heart', 'images/icons/heart.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(11, 'Information', 'images/icons/information.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(12, 'Lightbulb', 'images/icons/lightbulb.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(13, 'Music', 'images/icons/music.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(14, 'Photo', 'images/icons/photo.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(15, 'Rainbow', 'images/icons/rainbow.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(16, 'Shocked', 'images/icons/shocked.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(17, 'Star', 'images/icons/star.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(18, 'Thumbs Down', 'images/icons/thumbsdown.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(19, 'Thumbs Up', 'images/icons/thumbsup.png');"; -$inserts[] = "INSERT INTO mybb_icons (iid, name, path) VALUES(20, 'Video', 'images/icons/video.png');"; - -$inserts[] = "INSERT INTO mybb_profilefields (fid, name, description, disporder, type, regex, length, maxlength, required, registration, profile, postbit, viewableby, editableby, postnum) VALUES (1, 'Location', 'Where in the world do you live?', 1, 'text', '', 0, 255, 0, 0, 1, 0, -1, -1, 0);"; -$inserts[] = "INSERT INTO mybb_profilefields (fid, name, description, disporder, type, regex, length, maxlength, required, registration, profile, postbit, viewableby, editableby, postnum) VALUES (2, 'Bio', 'Enter a few short details about yourself, your life story etc.', 2, 'textarea', '', 0, 0, 0, 0, 1, 0, -1, -1, 0);"; -$inserts[] = "INSERT INTO mybb_profilefields (fid, name, description, disporder, type, regex, length, maxlength, required, registration, profile, postbit, viewableby, editableby, postnum) VALUES (3, 'Sex', 'Please select your sex from the list below.', 3, 'select\nUndisclosed\nMale\nFemale\nOther', '', 0, 0, 0, 0, 1, 0, -1, -1, 0);"; - -$inserts[] = "INSERT INTO mybb_questions (qid, question, answer, shown, correct, incorrect, active) VALUES(1, 'What does 2 + 2 equal?', '4\nFour', 0, 0, 0, 1);"; - -$inserts[] = "INSERT INTO mybb_reportreasons (rid, title, appliesto, extra, disporder) VALUES(1, '', 'all', 1, 99);"; -$inserts[] = "INSERT INTO mybb_reportreasons (rid, title, appliesto, extra, disporder) VALUES(2, '', 'all', 0, 1);"; -$inserts[] = "INSERT INTO mybb_reportreasons (rid, title, appliesto, extra, disporder) VALUES(3, '', 'all', 0, 2);"; -$inserts[] = "INSERT INTO mybb_reportreasons (rid, title, appliesto, extra, disporder) VALUES(4, '', 'all', 0, 3);"; -$inserts[] = "INSERT INTO mybb_reportreasons (rid, title, appliesto, extra, disporder) VALUES(5, '', 'post', 0, 4);"; - -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(1, 'Smile', ':)', 'images/smilies/smile.png', 1, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(2, 'Wink', ';)', 'images/smilies/wink.png', 2, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(3, 'Cool', ':cool:', 'images/smilies/cool.png', 3, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(4, 'Big Grin', ':D', 'images/smilies/biggrin.png', 4, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(5, 'Tongue', ':P', 'images/smilies/tongue.png', 5, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(6, 'Rolleyes', ':rolleyes:', 'images/smilies/rolleyes.png', 6, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(7, 'Shy', ':shy:', 'images/smilies/shy.png', 7, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(8, 'Sad', ':(', 'images/smilies/sad.png', 8, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(9, 'At', ':at:', 'images/smilies/at.png', 9, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(10, 'Angel', ':angel:', 'images/smilies/angel.png', 10, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(11, 'Angry', ':@', 'images/smilies/angry.png', 11, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(12, 'Blush', ':blush:', 'images/smilies/blush.png', 12, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(13, 'Confused', ':s', 'images/smilies/confused.png', 13, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(14, 'Dodgy', ':dodgy:', 'images/smilies/dodgy.png', 14, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(15, 'Exclamation', ':exclamation:', 'images/smilies/exclamation.png', 15, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(16, 'Heart', ':heart:', 'images/smilies/heart.png', 16, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(17, 'Huh', ':huh:', 'images/smilies/huh.png', 17, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(18, 'Idea', ':idea:', 'images/smilies/lightbulb.png', 18, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(19, 'Sleepy', ':sleepy:', 'images/smilies/sleepy.png', 19, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(20, 'Undecided', ':-/', 'images/smilies/undecided.png', 20, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(21, 'Cry', ':cry:', 'images/smilies/cry.png', 21, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(22, 'Sick', ':sick:', 'images/smilies/sick.png', 22, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(23, 'Arrow', ':arrow:', 'images/smilies/arrow.png', 23, 1);"; -$inserts[] = "INSERT INTO mybb_smilies (sid, name, find, image, disporder, showclickable) VALUES(24, 'My', ':my:', 'images/smilies/my.png', 24, 1);"; - -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Google','Googlebot');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Bing','bingbot');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Alexa Internet','ia_archiver');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Ask.com','Teoma');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Baidu','Baiduspider');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Yandex','YandexBot');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Blekko','Blekkobot');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Facebook','facebookexternalhit');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Twitter','Twitterbot');"; -$inserts[] = "INSERT INTO mybb_spiders (name,useragent) VALUES ('Internet Archive','archive.org_bot');"; - -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('1','calendar','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('2','editpost','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('3','forumbit','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('4','forumjump','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('5','forumdisplay','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('6','index','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('7','error','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('8','memberlist','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('9','multipage','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('10','private','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('11','portal','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('12','postbit','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('13','posticons','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('14','showthread','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('15','usercp','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('16','online','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('17','moderation','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('18','nav','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('19','search','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('20','showteam','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('21','reputation','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('22','newthread','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('23','newreply','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('24','member','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('25','warnings','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('26','global','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('27','header','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('28','managegroup','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('29','misc','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('30','modcp','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('31','announcement','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('32','polls','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('33','post','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('34','printthread','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('35','report','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('36','smilieinsert','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('37','stats','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('38','xmlhttp','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('39','footer','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('40','video','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('41','sendthread','','1');"; -$inserts[] = "INSERT INTO mybb_templategroups (gid,prefix,title,isdefault) VALUES ('42','mycode','','1');"; - -$inserts[] = "INSERT INTO mybb_usertitles (utid, posts, title, stars, starimage) VALUES (1, 0, 'Newbie', 1, '');"; -$inserts[] = "INSERT INTO mybb_usertitles (utid, posts, title, stars, starimage) VALUES (2, 1, 'Junior Member', 2, '');"; -$inserts[] = "INSERT INTO mybb_usertitles (utid, posts, title, stars, starimage) VALUES (3, 50, 'Member', 3, '');"; -$inserts[] = "INSERT INTO mybb_usertitles (utid, posts, title, stars, starimage) VALUES (4, 250, 'Senior Member', 4, '');"; -$inserts[] = "INSERT INTO mybb_usertitles (utid, posts, title, stars, starimage) VALUES (5, 750, 'Posting Freak', 5, '');"; - diff --git a/html/forums/install/resources/mysql_db_tables.php b/html/forums/install/resources/mysql_db_tables.php deleted file mode 100644 index 8dae656..0000000 --- a/html/forums/install/resources/mysql_db_tables.php +++ /dev/null @@ -1,1184 +0,0 @@ -welcome; - } - - if($lang->title) - { - $this->title = $lang->title; - } - - @header("Content-type: text/html; charset=utf-8"); - - $this->doneheader = 1; - $dbconfig_add = ''; - if($image == "dbconfig") - { - $dbconfig_add = ""; - } - echo << - - - {$this->title} > {$title} - - - - {$dbconfig_add} - - -END; - if($form) - { - echo "\n

    script."\">\n"; - $this->openedform = 1; - } - - echo << - -
    - -END; - if($mybb->version_code >= 1700 && $mybb->version_code < 1800) - { - echo $lang->development_preview; - } - if(empty($this->steps)) - { - $this->steps = array(); - } - if(is_array($this->steps)) - { - echo "\n
    "; - echo "\n
      \n"; - foreach($this->steps as $action => $step) - { - if($action == $mybb->input['action']) - { - echo "
    • {$step}
    • \n"; - } - else - { - echo "
    • {$step}
    • \n"; - } - } - echo "
    "; - echo "\n
    "; - echo "\n
    \n"; - } - else - { - echo "\n
    "; - echo "\n
    \n"; - } - if($title != "") - { - echo <<{$title}

    -
    -
    - {$formend} - {$footer_extra} - - -END; - exit; - } -} diff --git a/html/forums/install/resources/pgsql_db_tables.php b/html/forums/install/resources/pgsql_db_tables.php deleted file mode 100644 index 47eb54f..0000000 --- a/html/forums/install/resources/pgsql_db_tables.php +++ /dev/null @@ -1,1142 +0,0 @@ -
    Please make sure IN_MYBB is defined."); -} - -$tables[] = "CREATE TABLE mybb_adminlog ( - uid int NOT NULL default '0', - ipaddress bytea NOT NULL default '', - dateline int NOT NULL default '0', - module varchar(50) NOT NULL default '', - action varchar(50) NOT NULL default '', - data text NOT NULL default '' -);"; - -$tables[] = "CREATE TABLE mybb_adminoptions ( - uid int NOT NULL default '0', - cpstyle varchar(50) NOT NULL default '', - cplanguage varchar(50) NOT NULL default '', - codepress smallint NOT NULL default '1', - notes text NOT NULL default '', - permissions text NOT NULL default '', - defaultviews text NOT NULL, - loginattempts smallint NOT NULL default '0', - loginlockoutexpiry int NOT NULL default '0', - authsecret varchar(16) NOT NULL default '', - recovery_codes varchar(177) NOT NULL default '', - UNIQUE (uid) -);"; - -$tables[] = "CREATE TABLE mybb_adminsessions ( - sid varchar(32) NOT NULL default '', - uid int NOT NULL default '0', - loginkey varchar(50) NOT NULL default '', - ip bytea NOT NULL default '', - dateline int NOT NULL default '0', - lastactive int NOT NULL default '0', - data text NOT NULL default '', - useragent varchar(200) NOT NULL default '', - authenticated smallint NOT NULL default '0' -);"; - -$tables[] = "CREATE TABLE mybb_adminviews ( - vid serial, - uid int NOT NULL default '0', - title varchar(100) NOT NULL default '', - type varchar(6) NOT NULL default '', - visibility smallint NOT NULL default '0', - fields text NOT NULL, - conditions text NOT NULL, - custom_profile_fields text NOT NULL, - sortby varchar(20) NOT NULL default '', - sortorder varchar(4) NOT NULL default '', - perpage smallint NOT NULL default '0', - view_type varchar(6) NOT NULL default '', - PRIMARY KEY (vid) -);"; - -$tables[] = "CREATE TABLE mybb_announcements ( - aid serial, - fid int NOT NULL default '0', - uid int NOT NULL default '0', - subject varchar(120) NOT NULL default '', - message text NOT NULL default '', - startdate int NOT NULL default '0', - enddate int NOT NULL default '0', - allowhtml smallint NOT NULL default '0', - allowmycode smallint NOT NULL default '0', - allowsmilies smallint NOT NULL default '0', - PRIMARY KEY (aid) -);"; - -$tables[] = "CREATE TABLE mybb_attachments ( - aid serial, - pid int NOT NULL default '0', - posthash varchar(50) NOT NULL default '', - uid int NOT NULL default '0', - filename varchar(120) NOT NULL default '', - filetype varchar(120) NOT NULL default '', - filesize int NOT NULL default '0', - attachname varchar(120) NOT NULL default '', - downloads int NOT NULL default '0', - dateuploaded int NOT NULL default '0', - visible smallint NOT NULL default '0', - thumbnail varchar(120) NOT NULL default '', - PRIMARY KEY (aid) -);"; - -$tables[] = "CREATE TABLE mybb_attachtypes ( - atid serial, - name varchar(120) NOT NULL default '', - mimetype varchar(120) NOT NULL default '', - extension varchar(10) NOT NULL default '', - maxsize int NOT NULL default '0', - icon varchar(100) NOT NULL default '', - enabled smallint NOT NULL default '1', - groups text NOT NULL default '-1', - forums text NOT NULL default '-1', - avatarfile smallint NOT NULL default '0', - PRIMARY KEY (atid) -);"; - -$tables[] = "CREATE TABLE mybb_awaitingactivation ( - aid serial, - uid int NOT NULL default '0', - dateline int NOT NULL default '0', - code varchar(100) NOT NULL default '', - type char(1) NOT NULL default '', - validated smallint NOT NULL default '0', - misc varchar(255) NOT NULL default '', - PRIMARY KEY (aid) -);"; - -$tables[] = "CREATE TABLE mybb_badwords ( - bid serial, - badword varchar(100) NOT NULL default '', - replacement varchar(100) NOT NULL default '', - PRIMARY KEY (bid) -);"; - -$tables[] = "CREATE TABLE mybb_banfilters ( - fid serial, - filter varchar(200) NOT NULL default '', - type smallint NOT NULL default '0', - lastuse int NOT NULL default '0', - dateline int NOT NULL default '0', - PRIMARY KEY (fid) -);"; - -$tables[] = "CREATE TABLE mybb_banned ( - uid int NOT NULL default '0', - gid int NOT NULL default '0', - oldgroup int NOT NULL default '0', - oldadditionalgroups text NOT NULL default '', - olddisplaygroup int NOT NULL default '0', - admin int NOT NULL default '0', - dateline int NOT NULL default '0', - bantime varchar(50) NOT NULL default '', - lifted int NOT NULL default '0', - reason varchar(255) NOT NULL default '' -);"; - -$tables[] = "CREATE TABLE mybb_buddyrequests ( - id serial, - uid int NOT NULL default '0', - touid int NOT NULL default '0', - date int NOT NULL default '0', - PRIMARY KEY (id) -);"; - -$tables[] = "CREATE TABLE mybb_calendars ( - cid serial, - name varchar(100) NOT NULL default '', - disporder smallint NOT NULL default '0', - startofweek smallint NOT NULL default '0', - showbirthdays smallint NOT NULL default '0', - eventlimit smallint NOT NULL default '0', - moderation smallint NOT NULL default '0', - allowhtml smallint NOT NULL default '0', - allowmycode smallint NOT NULL default '0', - allowimgcode smallint NOT NULL default '0', - allowvideocode smallint NOT NULL default '0', - allowsmilies smallint NOT NULL default '0', - PRIMARY KEY(cid) -);"; - -$tables[] = "CREATE TABLE mybb_calendarpermissions ( - cid serial, - gid int NOT NULL default '0', - canviewcalendar smallint NOT NULL default '0', - canaddevents smallint NOT NULL default '0', - canbypasseventmod smallint NOT NULL default '0', - canmoderateevents smallint NOT NULL default '0' -);"; - -$tables[] = "CREATE TABLE mybb_captcha ( - imagehash varchar(32) NOT NULL default '', - imagestring varchar(8) NOT NULL default '', - dateline int NOT NULL default '0', - used smallint NOT NULL default '0' -);"; - -$tables[] = "CREATE TABLE mybb_datacache ( - title varchar(50) NOT NULL default '', - cache text NOT NULL default '', - PRIMARY KEY (title) -);"; - -$tables[] = "CREATE TABLE mybb_delayedmoderation ( - did serial, - type varchar(30) NOT NULL default '', - delaydateline int NOT NULL default '0', - uid int NOT NULL default '0', - fid smallint NOT NULL default '0', - tids text NOT NULL, - dateline int NOT NULL default '0', - inputs text NOT NULL default '', - PRIMARY KEY (did) -);"; - -$tables[] = "CREATE TABLE mybb_events ( - eid serial, - cid int NOT NULL default '0', - uid int NOT NULL default '0', - name varchar(120) NOT NULL default '', - description text NOT NULL, - visible smallint NOT NULL default '0', - private smallint NOT NULL default '0', - dateline int NOT NULL default '0', - starttime int NOT NULL default '0', - endtime int NOT NULL default '0', - timezone varchar(5) NOT NULL default '', - ignoretimezone smallint NOT NULL default '0', - usingtime smallint NOT NULL default '0', - repeats text NOT NULL, - PRIMARY KEY (eid) -);"; - -$tables[] = "CREATE TABLE mybb_forumpermissions ( - pid serial, - fid int NOT NULL default '0', - gid int NOT NULL default '0', - canview smallint NOT NULL default '0', - canviewthreads smallint NOT NULL default '0', - canonlyviewownthreads smallint NOT NULL default '0', - candlattachments smallint NOT NULL default '0', - canpostthreads smallint NOT NULL default '0', - canpostreplys smallint NOT NULL default '0', - canonlyreplyownthreads smallint NOT NULL default '0', - canpostattachments smallint NOT NULL default '0', - canratethreads smallint NOT NULL default '0', - caneditposts smallint NOT NULL default '0', - candeleteposts smallint NOT NULL default '0', - candeletethreads smallint NOT NULL default '0', - caneditattachments smallint NOT NULL default '0', - canviewdeletionnotice smallint NOT NULL default '0', - modposts smallint NOT NULL default '0', - modthreads smallint NOT NULL default '0', - mod_edit_posts smallint NOT NULL default '0', - modattachments smallint NOT NULL default '0', - canpostpolls smallint NOT NULL default '0', - canvotepolls smallint NOT NULL default '0', - cansearch smallint NOT NULL default '0', - PRIMARY KEY (pid) -);"; - -$tables[] = "CREATE TABLE mybb_forums ( - fid serial, - name varchar(120) NOT NULL default '', - description text NOT NULL default '', - linkto varchar(180) NOT NULL default '', - type char(1) NOT NULL default '', - pid smallint NOT NULL default '0', - parentlist text NOT NULL default '', - disporder smallint NOT NULL default '0', - active smallint NOT NULL default '0', - open smallint NOT NULL default '0', - threads int NOT NULL default '0', - posts int NOT NULL default '0', - lastpost int NOT NULL default '0', - lastposter varchar(120) NOT NULL default '', - lastposteruid int NOT NULL default '0', - lastposttid int NOT NULL default '0', - lastpostsubject varchar(120) NOT NULL default '', - allowhtml smallint NOT NULL default '0', - allowmycode smallint NOT NULL default '0', - allowsmilies smallint NOT NULL default '0', - allowimgcode smallint NOT NULL default '0', - allowvideocode smallint NOT NULL default '0', - allowpicons smallint NOT NULL default '0', - allowtratings smallint NOT NULL default '0', - usepostcounts smallint NOT NULL default '0', - usethreadcounts smallint NOT NULL default '0', - requireprefix smallint NOT NULL default '0', - password varchar(50) NOT NULL default '', - showinjump smallint NOT NULL default '0', - style smallint NOT NULL default '0', - overridestyle smallint NOT NULL default '0', - rulestype smallint NOT NULL default '0', - rulestitle varchar(200) NOT NULL default '', - rules text NOT NULL default '', - unapprovedthreads int NOT NULL default '0', - unapprovedposts int NOT NULL default '0', - deletedthreads int NOT NULL default '0', - deletedposts int NOT NULL default '0', - defaultdatecut smallint NOT NULL default '0', - defaultsortby varchar(10) NOT NULL default '', - defaultsortorder varchar(4) NOT NULL default '', - PRIMARY KEY (fid) -);"; - -$tables[] = "CREATE TABLE mybb_forumsread ( - fid int NOT NULL default '0', - uid int NOT NULL default '0', - dateline int NOT NULL default '0' -);"; - -$tables[] = "CREATE TABLE mybb_forumsubscriptions ( - fsid serial, - fid smallint NOT NULL default '0', - uid int NOT NULL default '0', - PRIMARY KEY (fsid) -);"; - -$tables[] = "CREATE TABLE mybb_groupleaders ( - lid serial, - gid smallint NOT NULL default '0', - uid int NOT NULL default '0', - canmanagemembers smallint NOT NULL default '0', - canmanagerequests smallint NOT NULL default '0', - caninvitemembers smallint NOT NULL default '0', - PRIMARY KEY (lid) -);"; - -$tables[] = "CREATE TABLE mybb_helpdocs ( - hid serial, - sid smallint NOT NULL default '0', - name varchar(120) NOT NULL default '', - description text NOT NULL default '', - document text NOT NULL default '', - usetranslation smallint NOT NULL default '0', - enabled smallint NOT NULL default '0', - disporder smallint NOT NULL default '0', - PRIMARY KEY (hid) -);"; - -$tables[] = "CREATE TABLE mybb_helpsections ( - sid serial, - name varchar(120) NOT NULL default '', - description text NOT NULL default '', - usetranslation smallint NOT NULL default '0', - enabled smallint NOT NULL default '0', - disporder smallint NOT NULL default '0', - PRIMARY KEY (sid) -);"; - -$tables[] = "CREATE TABLE mybb_icons ( - iid serial, - name varchar(120) NOT NULL default '', - path varchar(220) NOT NULL default '', - PRIMARY KEY (iid) -);"; - -$tables[] = "CREATE TABLE mybb_joinrequests ( - rid serial, - uid int NOT NULL default '0', - gid smallint NOT NULL default '0', - reason varchar(250) NOT NULL default '', - dateline int NOT NULL default '0', - invite smallint NOT NULL default '0', - PRIMARY KEY (rid) -);"; - -$tables[] = "CREATE TABLE mybb_massemails ( - mid serial, - uid int NOT NULL default '0', - subject varchar(200) NOT NULL default '', - message text NOT NULL, - htmlmessage text NOT NULL, - type smallint NOT NULL default '0', - format smallint NOT NULL default '0', - dateline numeric(30,0) NOT NULL default '0', - senddate numeric(30,0) NOT NULL default '0', - status smallint NOT NULL default '0', - sentcount int NOT NULL default '0', - totalcount int NOT NULL default '0', - conditions text NOT NULL, - perpage int NOT NULL default '50', - PRIMARY KEY(mid) -);"; - -$tables[] = "CREATE TABLE mybb_mailerrors ( - eid serial, - subject varchar(200) NOT NULL default '', - message text NOT NULL default '', - toaddress varchar(150) NOT NULL default '', - fromaddress varchar(150) NOT NULL default '', - dateline int NOT NULL default '0', - error text NOT NULL default '', - smtperror varchar(200) NOT NULL default '', - smtpcode smallint NOT NULL default '0', - PRIMARY KEY(eid) -);"; - -$tables[] = "CREATE TABLE mybb_maillogs ( - mid serial, - subject varchar(200) not null default '', - message text NOT NULL default '', - dateline int NOT NULL default '0', - fromuid int NOT NULL default '0', - fromemail varchar(200) not null default '', - touid int NOT NULL default '0', - toemail varchar(200) NOT NULL default '', - tid int NOT NULL default '0', - ipaddress bytea NOT NULL default '', - type smallint NOT NULL default '0', - PRIMARY KEY(mid) -);"; - -$tables[] = "CREATE TABLE mybb_mailqueue ( - mid serial, - mailto varchar(200) NOT NULL, - mailfrom varchar(200) NOT NULL, - subject varchar(200) NOT NULL, - message text NOT NULL default '', - headers text NOT NULL default '', - PRIMARY KEY(mid) -);"; - -$tables[] = "CREATE TABLE mybb_moderatorlog ( - uid int NOT NULL default '0', - dateline int NOT NULL default '0', - fid smallint NOT NULL default '0', - tid int NOT NULL default '0', - pid int NOT NULL default '0', - action text NOT NULL default '', - data text NOT NULL, - ipaddress bytea NOT NULL default '' -);"; - -$tables[] = "CREATE TABLE mybb_moderators ( - mid serial, - fid smallint NOT NULL default '0', - id int NOT NULL default '0', - isgroup smallint NOT NULL default '0', - caneditposts smallint NOT NULL default '0', - cansoftdeleteposts smallint NOT NULL default '0', - canrestoreposts smallint NOT NULL default '0', - candeleteposts smallint NOT NULL default '0', - cansoftdeletethreads smallint NOT NULL default '0', - canrestorethreads smallint NOT NULL default '0', - candeletethreads smallint NOT NULL default '0', - canviewips smallint NOT NULL default '0', - canviewunapprove smallint NOT NULL default '0', - canviewdeleted smallint NOT NULL default '0', - canopenclosethreads smallint NOT NULL default '0', - canstickunstickthreads smallint NOT NULL default '0', - canapproveunapprovethreads smallint NOT NULL default '0', - canapproveunapproveposts smallint NOT NULL default '0', - canapproveunapproveattachs smallint NOT NULL default '0', - canmanagethreads smallint NOT NULL default '0', - canmanagepolls smallint NOT NULL default '0', - canpostclosedthreads smallint NOT NULL default '0', - canmovetononmodforum smallint NOT NULL default '0', - canusecustomtools smallint NOT NULL default '0', - canmanageannouncements smallint NOT NULL default '0', - canmanagereportedposts smallint NOT NULL default '0', - canviewmodlog smallint NOT NULL default '0', - PRIMARY KEY (mid) -);"; - -$tables[] = "CREATE TABLE mybb_modtools ( - tid serial, - name varchar(200) NOT NULL, - description text NOT NULL default '', - forums text NOT NULL default '', - groups text NOT NULL default '', - type char(1) NOT NULL default '', - postoptions text NOT NULL default '', - threadoptions text NOT NULL default '', - PRIMARY KEY (tid) -);"; - -$tables[] = "CREATE TABLE mybb_mycode ( - cid serial, - title varchar(100) NOT NULL default '', - description text NOT NULL default '', - regex text NOT NULL default '', - replacement text NOT NULL default '', - active smallint NOT NULL default '0', - parseorder smallint NOT NULL default '0', - PRIMARY KEY(cid) -);"; - -$tables[] = "CREATE TABLE mybb_polls ( - pid serial, - tid int NOT NULL default '0', - question varchar(200) NOT NULL default '', - dateline int NOT NULL default '0', - options text NOT NULL default '', - votes text NOT NULL default '', - numoptions smallint NOT NULL default '0', - numvotes int NOT NULL default '0', - timeout int NOT NULL default '0', - closed smallint NOT NULL default '0', - multiple smallint NOT NULL default '0', - public smallint NOT NULL default '0', - maxoptions smallint NOT NULL default '0', - PRIMARY KEY (pid) -);"; - -$tables[] = "CREATE TABLE mybb_pollvotes ( - vid serial, - pid int NOT NULL default '0', - uid int NOT NULL default '0', - voteoption smallint NOT NULL default '0', - dateline int NOT NULL default '0', - PRIMARY KEY (vid) -);"; - -$tables[] = "CREATE TABLE mybb_posts ( - pid serial, - tid int NOT NULL default '0', - replyto int NOT NULL default '0', - fid smallint NOT NULL default '0', - subject varchar(120) NOT NULL default '', - icon smallint NOT NULL default '0', - uid int NOT NULL default '0', - username varchar(80) NOT NULL default '', - dateline int NOT NULL default '0', - message text NOT NULL default '', - ipaddress bytea NOT NULL default '', - includesig smallint NOT NULL default '0', - smilieoff smallint NOT NULL default '0', - edituid int NOT NULL default '0', - edittime int NOT NULL default '0', - editreason varchar(150) NOT NULL default '', - visible smallint NOT NULL default '0', - PRIMARY KEY (pid) -);"; - -$tables[] = "CREATE TABLE mybb_privatemessages ( - pmid serial, - uid int NOT NULL default '0', - toid int NOT NULL default '0', - fromid int NOT NULL default '0', - recipients text NOT NULL default '', - folder smallint NOT NULL default '1', - subject varchar(120) NOT NULL default '', - icon smallint NOT NULL default '0', - message text NOT NULL default '', - dateline int NOT NULL default '0', - deletetime int NOT NULL default '0', - status smallint NOT NULL default '0', - statustime int NOT NULL default '0', - includesig smallint NOT NULL default '0', - smilieoff smallint NOT NULL default '0', - receipt smallint NOT NULL default '0', - readtime int NOT NULL default '0', - ipaddress bytea NOT NULL default '', - PRIMARY KEY (pmid) -);"; - -$tables[] = "CREATE TABLE mybb_profilefields ( - fid serial, - name varchar(100) NOT NULL default '', - description text NOT NULL default '', - disporder smallint NOT NULL default '0', - type text NOT NULL default '', - regex text NOT NULL default '', - length smallint NOT NULL default '0', - maxlength smallint NOT NULL default '0', - required smallint NOT NULL default '0', - registration smallint NOT NULL default '0', - profile smallint NOT NULL default '0', - postbit smallint NOT NULL default '0', - viewableby text NOT NULL default '-1', - editableby text NOT NULL default '-1', - postnum smallint NOT NULL default '0', - allowhtml smallint NOT NULL default '0', - allowmycode smallint NOT NULL default '0', - allowsmilies smallint NOT NULL default '0', - allowimgcode smallint NOT NULL default '0', - allowvideocode smallint NOT NULL default '0', - PRIMARY KEY (fid) -);"; - -$tables[] = "CREATE TABLE mybb_promotions ( - pid serial, - title varchar(120) NOT NULL default '', - description text NOT NULL default '', - enabled smallint NOT NULL default '1', - logging smallint NOT NULL default '0', - posts int NOT NULL default '0', - posttype varchar(2) NOT NULL default '', - threads int NOT NULL default '0', - threadtype varchar(2) NOT NULL default '', - registered int NOT NULL default '0', - registeredtype varchar(20) NOT NULL default '', - online int NOT NULL default '0', - onlinetype varchar(20) NOT NULL default '', - reputations int NOT NULL default '0', - reputationtype varchar(2) NOT NULL default '', - referrals int NOT NULL default '0', - referralstype varchar(2) NOT NULL default '', - warnings int NOT NULL default '0', - warningstype varchar(2) NOT NULL default '', - requirements varchar(200) NOT NULL default '', - originalusergroup varchar(120) NOT NULL default '0', - newusergroup smallint NOT NULL default '0', - usergrouptype varchar(120) NOT NULL default '0', - PRIMARY KEY(pid) -);"; - -$tables[] = "CREATE TABLE mybb_promotionlogs ( - plid serial, - pid int NOT NULL default '0', - uid int NOT NULL default '0', - oldusergroup varchar(200) NOT NULL default '0', - newusergroup smallint NOT NULL default '0', - dateline int NOT NULL default '0', - type varchar(9) NOT NULL default 'primary', - PRIMARY KEY(plid) -);"; - -$tables[] = "CREATE TABLE mybb_questions ( - qid serial, - question varchar(200) NOT NULL default '', - answer varchar(150) NOT NULL default '', - shown int NOT NULL default 0, - correct int NOT NULL default 0, - incorrect int NOT NULL default 0, - active smallint NOT NULL default '0', - PRIMARY KEY (qid) -);"; - -$tables[] = "CREATE TABLE mybb_questionsessions ( - sid varchar(32) NOT NULL default '', - qid int NOT NULL default '0', - dateline int NOT NULL default '0', - UNIQUE (sid) -);"; - -$tables[] = "CREATE TABLE mybb_reportedcontent ( - rid serial, - id int NOT NULL default '0', - id2 int NOT NULL default '0', - id3 int NOT NULL default '0', - uid int NOT NULL default '0', - reportstatus smallint NOT NULL default '0', - reasonid smallint NOT NULL default '0', - reason varchar(250) NOT NULL default '', - type varchar(50) NOT NULL default '', - reports int NOT NULL default '0', - reporters text NOT NULL default '', - dateline int NOT NULL default '0', - lastreport int NOT NULL default '0', - PRIMARY KEY (rid) -);"; - -$tables[] = "CREATE TABLE mybb_reportreasons ( - rid serial, - title varchar(250) NOT NULL default '', - appliesto varchar(250) NOT NULL default '', - extra smallint NOT NULL default '0', - disporder smallint NOT NULL default '0', - PRIMARY KEY (rid) -);"; - -$tables[] = "CREATE TABLE mybb_reputation ( - rid serial, - uid int NOT NULL default '0', - adduid int NOT NULL default '0', - pid int NOT NULL default '0', - reputation smallint NOT NULL default '0', - dateline int NOT NULL default '0', - comments text NOT NULL default '', - PRIMARY KEY(rid) -);"; - -$tables[] = "CREATE TABLE mybb_searchlog ( - sid varchar(32) NOT NULL default '', - uid int NOT NULL default '0', - dateline int NOT NULL default '0', - ipaddress bytea NOT NULL default '', - threads text NOT NULL default '', - posts text NOT NULL default '', - resulttype varchar(10) NOT NULL default '', - querycache text NOT NULL default '', - keywords text NOT NULL default '', - UNIQUE (sid) -);"; - -$tables[] = "CREATE TABLE mybb_sessions ( - sid varchar(32) NOT NULL default '', - uid int NOT NULL default '0', - ip bytea NOT NULL default '', - time int NOT NULL default '0', - location varchar(150) NOT NULL default '', - useragent varchar(200) NOT NULL default '', - anonymous smallint NOT NULL default '0', - nopermission smallint NOT NULL default '0', - location1 int NOT NULL default '0', - location2 int NOT NULL default '0', - UNIQUE (sid) -);"; - -$tables[] = "CREATE TABLE mybb_settinggroups ( - gid serial, - name varchar(100) NOT NULL default '', - title varchar(220) NOT NULL default '', - description text NOT NULL default '', - disporder smallint NOT NULL default '0', - isdefault smallint NOT NULL default '0', - PRIMARY KEY (gid) -);"; - -$tables[] = "CREATE TABLE mybb_settings ( - sid serial, - name varchar(120) NOT NULL default '', - title varchar(120) NOT NULL default '', - description text NOT NULL default '', - optionscode text NOT NULL default '', - value text NOT NULL default '', - disporder smallint NOT NULL default '0', - gid smallint NOT NULL default '0', - isdefault smallint NOT NULL default '0', - PRIMARY KEY (sid) -);"; - -$tables[] = "CREATE TABLE mybb_smilies ( - sid serial, - name varchar(120) NOT NULL default '', - find text NOT NULL, - image varchar(220) NOT NULL default '', - disporder smallint NOT NULL default '0', - showclickable smallint NOT NULL default '0', - PRIMARY KEY (sid) -);"; - -$tables[] = "CREATE TABLE mybb_spamlog ( - sid serial, - username varchar(120) NOT NULL DEFAULT '', - email varchar(220) NOT NULL DEFAULT '', - ipaddress bytea NOT NULL default '', - dateline numeric(30,0) NOT NULL default '0', - data text NOT NULL default '', - PRIMARY KEY (sid) -);"; - -$tables[] = "CREATE TABLE mybb_spiders ( - sid serial, - name varchar(100) NOT NULL default '', - theme smallint NOT NULL default '0', - language varchar(20) NOT NULL default '', - usergroup smallint NOT NULL default '0', - useragent varchar(200) NOT NULL default '', - lastvisit int NOT NULL default '0', - PRIMARY KEY(sid) -);"; - -$tables[] = "CREATE TABLE mybb_stats ( - dateline numeric(30,0) NOT NULL default '0', - numusers numeric(10,0) NOT NULL default '0', - numthreads numeric(10,0) NOT NULL default '0', - numposts numeric(10,0) NOT NULL default '0', - UNIQUE (dateline) -);"; - -$tables[] = "CREATE TABLE mybb_tasks ( - tid serial, - title varchar(120) NOT NULL default '', - description text NOT NULL default '', - file varchar(30) NOT NULL default '', - minute varchar(200) NOT NULL default '', - hour varchar(200) NOT NULL default '', - day varchar(100) NOT NULL default '', - month varchar(30) NOT NULL default '', - weekday varchar(15) NOT NULL default '', - nextrun int NOT NULL default '0', - lastrun int NOT NULL default '0', - enabled smallint NOT NULL default '1', - logging smallint NOT NULL default '0', - locked int NOT NULL default '0', - PRIMARY KEY(tid) -);"; - -$tables[] = "CREATE TABLE mybb_tasklog ( - lid serial, - tid int NOT NULL default '0', - dateline int NOT NULL default '0', - data text NOT NULL, - PRIMARY KEY(lid) -);"; - -$tables[] = "CREATE TABLE mybb_templategroups ( - gid serial, - prefix varchar(50) NOT NULL default '', - title varchar(100) NOT NULL default '', - isdefault smallint NOT NULL default '0', - PRIMARY KEY (gid) -);"; - -$tables[] = "CREATE TABLE mybb_templates ( - tid serial, - title varchar(120) NOT NULL default '', - template text NOT NULL default '', - sid smallint NOT NULL default '0', - version varchar(20) NOT NULL default '0', - status varchar(10) NOT NULL default '', - dateline int NOT NULL default '0', - PRIMARY KEY (tid) -);"; - -$tables[] = "CREATE TABLE mybb_templatesets ( - sid serial, - title varchar(120) NOT NULL default '', - PRIMARY KEY (sid) -);"; - -$tables[] = "CREATE TABLE mybb_themes ( - tid serial, - name varchar(100) NOT NULL default '', - pid smallint NOT NULL default '0', - def smallint NOT NULL default '0', - properties text NOT NULL default '', - stylesheets text NOT NULL default '', - allowedgroups text NOT NULL default '', - PRIMARY KEY (tid) -);"; - -$tables[] = "CREATE TABLE mybb_themestylesheets( - sid serial, - name varchar(30) NOT NULL default '', - tid numeric(10,0) NOT NULL default '0', - attachedto text NOT NULL, - stylesheet text NOT NULL, - cachefile varchar(100) NOT NULL default '', - lastmodified numeric(30,0) NOT NULL default '0', - PRIMARY KEY(sid) -);"; - -$tables[] = "CREATE TABLE mybb_threadprefixes ( - pid serial, - prefix varchar(120) NOT NULL default '', - displaystyle varchar(200) NOT NULL default '', - forums text NOT NULL, - groups text NOT NULL, - PRIMARY KEY(pid) -);"; - -$tables[] = "CREATE TABLE mybb_threadratings ( - rid serial, - tid int NOT NULL default '0', - uid int NOT NULL default '0', - rating smallint NOT NULL default '0', - ipaddress bytea NOT NULL default '', - PRIMARY KEY (rid) -);"; - -$tables[] = "CREATE TABLE mybb_threadviews ( - tid int NOT NULL default '0' -);"; - -$tables[] = "CREATE TABLE mybb_threads ( - tid serial, - fid smallint NOT NULL default '0', - subject varchar(120) NOT NULL default '', - prefix smallint NOT NULL default '0', - icon smallint NOT NULL default '0', - poll int NOT NULL default '0', - uid int NOT NULL default '0', - username varchar(80) NOT NULL default '', - dateline int NOT NULL default '0', - firstpost int NOT NULL default '0', - lastpost int NOT NULL default '0', - lastposter varchar(120) NOT NULL default '', - lastposteruid int NOT NULL default '0', - views int NOT NULL default '0', - replies int NOT NULL default '0', - closed varchar(30) NOT NULL default '', - sticky smallint NOT NULL default '0', - numratings smallint NOT NULL default '0', - totalratings smallint NOT NULL default '0', - notes text NOT NULL default '', - visible smallint NOT NULL default '0', - unapprovedposts int NOT NULL default '0', - deletedposts int NOT NULL default '0', - attachmentcount int NOT NULL default '0', - deletetime int NOT NULL default '0', - PRIMARY KEY (tid) -);"; - -$tables[] = "CREATE TABLE mybb_threadsread ( - tid int NOT NULL default '0', - uid int NOT NULL default '0', - dateline int NOT NULL default '0' -);"; - -$tables[] = "CREATE TABLE mybb_threadsubscriptions ( - sid serial, - uid int NOT NULL default '0', - tid int NOT NULL default '0', - notification smallint NOT NULL default '0', - dateline int NOT NULL default '0', - PRIMARY KEY (sid) -);"; - -$tables[] = "CREATE TABLE mybb_userfields ( - ufid int NOT NULL default '0', - fid1 text NOT NULL default '', - fid2 text NOT NULL default '', - fid3 text NOT NULL default '', - PRIMARY KEY (ufid) -);"; -$query = $db->write_query("SELECT column_name - FROM information_schema.constraint_column_usage - WHERE table_name = '".$config['tableprefix']."userfields' - AND constraint_name = '".$config['tableprefix']."userfields_pkey' - LIMIT 1"); -$main_field = $db->fetch_field($query, 'column_name'); -if(!empty($main_field)) -{ - $tables[] = "DROP SEQUENCE mybb_userfields_ufid_seq;"; -} -$tables[] = "CREATE SEQUENCE mybb_userfields_ufid_seq;"; - -$tables[] = "CREATE TABLE mybb_usergroups ( - gid serial, - type smallint NOT NULL default '2', - title varchar(120) NOT NULL default '', - description text NOT NULL default '', - namestyle varchar(200) NOT NULL default '{username}', - usertitle varchar(120) NOT NULL default '', - stars smallint NOT NULL default '0', - starimage varchar(120) NOT NULL default '', - image varchar(120) NOT NULL default '', - disporder smallint NOT NULL default '0', - isbannedgroup smallint NOT NULL default '0', - canview smallint NOT NULL default '0', - canviewthreads smallint NOT NULL default '0', - canviewprofiles smallint NOT NULL default '0', - candlattachments smallint NOT NULL default '0', - canviewboardclosed smallint NOT NULL default '0', - canpostthreads smallint NOT NULL default '0', - canpostreplys smallint NOT NULL default '0', - canpostattachments smallint NOT NULL default '0', - canratethreads smallint NOT NULL default '0', - modposts smallint NOT NULL default '0', - modthreads smallint NOT NULL default '0', - mod_edit_posts smallint NOT NULL default '0', - modattachments smallint NOT NULL default '0', - caneditposts smallint NOT NULL default '0', - candeleteposts smallint NOT NULL default '0', - candeletethreads smallint NOT NULL default '0', - caneditattachments smallint NOT NULL default '0', - canviewdeletionnotice smallint NOT NULL default '0', - canpostpolls smallint NOT NULL default '0', - canvotepolls smallint NOT NULL default '0', - canundovotes smallint NOT NULL default '0', - canusepms smallint NOT NULL default '0', - cansendpms smallint NOT NULL default '0', - cantrackpms smallint NOT NULL default '0', - candenypmreceipts smallint NOT NULL default '0', - pmquota int NOT NULL default '0', - maxpmrecipients int NOT NULL default '5', - cansendemail smallint NOT NULL default '0', - cansendemailoverride smallint NOT NULL default '0', - maxemails int NOT NULL default '5', - emailfloodtime int NOT NULL default '5', - canviewmemberlist smallint NOT NULL default '0', - canviewcalendar smallint NOT NULL default '0', - canaddevents smallint NOT NULL default '0', - canbypasseventmod smallint NOT NULL default '0', - canmoderateevents smallint NOT NULL default '0', - canviewonline smallint NOT NULL default '0', - canviewwolinvis smallint NOT NULL default '0', - canviewonlineips smallint NOT NULL default '0', - cancp smallint NOT NULL default '0', - issupermod smallint NOT NULL default '0', - cansearch smallint NOT NULL default '0', - canusercp smallint NOT NULL default '0', - canuploadavatars smallint NOT NULL default '0', - canratemembers smallint NOT NULL default '0', - canchangename smallint NOT NULL default '0', - canbereported smallint NOT NULL default '0', - canchangewebsite smallint NOT NULL default '1', - showforumteam smallint NOT NULL default '0', - usereputationsystem smallint NOT NULL default '0', - cangivereputations smallint NOT NULL default '0', - candeletereputations smallint NOT NULL default '0', - reputationpower int NOT NULL default '0', - maxreputationsday int NOT NULL default '0', - maxreputationsperuser int NOT NULL default '0', - maxreputationsperthread int NOT NULL default '0', - candisplaygroup smallint NOT NULL default '0', - attachquota int NOT NULL default '0', - cancustomtitle smallint NOT NULL default '0', - canwarnusers smallint NOT NULL default '0', - canreceivewarnings smallint NOT NULL default '0', - maxwarningsday int NOT NULL default '3', - canmodcp smallint NOT NULL default '0', - showinbirthdaylist smallint NOT NULL default '0', - canoverridepm smallint NOT NULL default '0', - canusesig smallint NOT NULL default '0', - canusesigxposts smallint NOT NULL default '0', - signofollow smallint NOT NULL default '0', - edittimelimit smallint NOT NULL default '0', - maxposts smallint NOT NULL default '0', - showmemberlist smallint NOT NULL default '1', - canmanageannounce smallint NOT NULL default '0', - canmanagemodqueue smallint NOT NULL default '0', - canmanagereportedcontent smallint NOT NULL default '0', - canviewmodlogs smallint NOT NULL default '0', - caneditprofiles smallint NOT NULL default '0', - canbanusers smallint NOT NULL default '0', - canviewwarnlogs smallint NOT NULL default '0', - canuseipsearch smallint NOT NULL default '0', - PRIMARY KEY (gid) -);"; - -$tables[] = "CREATE TABLE mybb_users ( - uid serial, - username varchar(120) NOT NULL default '', - password varchar(120) NOT NULL default '', - salt varchar(10) NOT NULL default '', - loginkey varchar(50) NOT NULL default '', - email varchar(220) NOT NULL default '', - postnum int NOT NULL default '0', - threadnum int NOT NULL default '0', - avatar varchar(200) NOT NULL default '', - avatardimensions varchar(10) NOT NULL default '', - avatartype varchar(10) NOT NULL default '0', - usergroup smallint NOT NULL default '0', - additionalgroups varchar(200) NOT NULL default '', - displaygroup smallint NOT NULL default '0', - usertitle varchar(250) NOT NULL default '', - regdate int NOT NULL default '0', - lastactive int NOT NULL default '0', - lastvisit int NOT NULL default '0', - lastpost int NOT NULL default '0', - website varchar(200) NOT NULL default '', - icq varchar(10) NOT NULL default '', - aim varchar(50) NOT NULL default '', - yahoo varchar(50) NOT NULL default '', - skype varchar(75) NOT NULL default '', - google varchar(75) NOT NULL default '', - birthday varchar(15) NOT NULL default '', - birthdayprivacy varchar(4) NOT NULL default 'all', - signature text NOT NULL default '', - allownotices smallint NOT NULL default '0', - hideemail smallint NOT NULL default '0', - subscriptionmethod smallint NOT NULL default '0', - invisible smallint NOT NULL default '0', - receivepms smallint NOT NULL default '0', - receivefrombuddy smallint NOT NULL default '0', - pmnotice smallint NOT NULL default '0', - pmnotify smallint NOT NULL default '0', - buddyrequestspm smallint NOT NULL default '1', - buddyrequestsauto smallint NOT NULL default '0', - threadmode varchar(8) NOT NULL default '', - showimages smallint NOT NULL default '0', - showvideos smallint NOT NULL default '0', - showsigs smallint NOT NULL default '0', - showavatars smallint NOT NULL default '0', - showquickreply smallint NOT NULL default '0', - showredirect smallint NOT NULL default '0', - ppp smallint NOT NULL default '0', - tpp smallint NOT NULL default '0', - daysprune smallint NOT NULL default '0', - dateformat varchar(4) NOT NULL default '', - timeformat varchar(4) NOT NULL default '', - timezone varchar(5) NOT NULL default '', - dst smallint NOT NULL default '0', - dstcorrection smallint NOT NULL default '0', - buddylist text NOT NULL default '', - ignorelist text NOT NULL default '', - style smallint NOT NULL default '0', - away smallint NOT NULL default '0', - awaydate int NOT NULL default '0', - returndate varchar(15) NOT NULL default '', - awayreason varchar(200) NOT NULL default '', - pmfolders text NOT NULL default '', - notepad text NOT NULL default '', - referrer int NOT NULL default '0', - referrals int NOT NULL default '0', - reputation int NOT NULL default '0', - regip bytea NOT NULL default '', - lastip bytea NOT NULL default '', - language varchar(50) NOT NULL default '', - timeonline int NOT NULL default '0', - showcodebuttons smallint NOT NULL default '1', - totalpms int NOT NULL default '0', - unreadpms int NOT NULL default '0', - warningpoints int NOT NULL default '0', - moderateposts int NOT NULL default '0', - moderationtime int NOT NULL default '0', - suspendposting smallint NOT NULL default '0', - suspensiontime int NOT NULL default '0', - suspendsignature smallint NOT NULL default '0', - suspendsigtime int NOT NULL default '0', - coppauser smallint NOT NULL default '0', - classicpostbit smallint NOT NULL default '0', - loginattempts smallint NOT NULL default '1', - usernotes text NOT NULL default '', - sourceeditor smallint NOT NULL default '0', - PRIMARY KEY (uid) -);"; - -$tables[] = "CREATE TABLE mybb_usertitles ( - utid serial, - posts int NOT NULL default '0', - title varchar(250) NOT NULL default '', - stars smallint NOT NULL default '0', - starimage varchar(120) NOT NULL default '', - PRIMARY KEY (utid) -);"; - -$tables[] = "CREATE TABLE mybb_warninglevels ( - lid serial, - percentage smallint NOT NULL default '0', - action text NOT NULL, - PRIMARY KEY(lid) -);"; - -$tables[] = "CREATE TABLE mybb_warningtypes ( - tid serial, - title varchar(120) NOT NULL default '', - points smallint NOT NULL default '0', - expirationtime int NOT NULL default '0', - PRIMARY KEY(tid) -);"; - -$tables[] = "CREATE TABLE mybb_warnings ( - wid serial, - uid int NOT NULL default '0', - tid int NOT NULL default '0', - pid int NOT NULL default '0', - title varchar(120) NOT NULL default '', - points smallint NOT NULL default '0', - dateline int NOT NULL default '0', - issuedby int NOT NULL default '0', - expires int NOT NULL default '0', - expired smallint NOT NULL default '0', - daterevoked int NOT NULL default '0', - revokedby int NOT NULL default '0', - revokereason text NOT NULL default '', - notes text NOT NULL default '', - PRIMARY KEY(wid) -);"; - - diff --git a/html/forums/install/resources/settings.xml b/html/forums/install/resources/settings.xml deleted file mode 100644 index fad1d1c..0000000 --- a/html/forums/install/resources/settings.xml +++ /dev/null @@ -1,2522 +0,0 @@ - - - - - Board Closed - - 1 - - - 1 - - - Board Closed Reason - - 2 - - - 1 - - - - - Board Name - - 1 - - - 1 - - - Board URL - Include the http://. Do NOT include a trailing slash.]]> - 2 - - - 1 - - - Homepage Name - - 3 - - - 1 - - - Homepage URL - - 4 - - - 1 - - - Admin Email - - 5 - - - 1 - - - Return Email - - 6 - - - 1 - - - Contact Email - - 7 - - - 1 - - - Contact Us Link - - 8 - - - 1 - - - Cookie Domain - - 9 - - - 1 - - - Cookie Path - - 10 - - - 1 - - - Cookie Prefix - - 11 - - - 1 - - - Secure Cookie Flag - - 12 - - - 1 - - - Show Version Numbers - - 13 - - - 1 - - - Mailing Address - - 14 - - - 1 - - - Contact Fax No - - 15 - - - 1 - - - - - Default Language - - 1 - - - 1 - - - <![CDATA[CAPTCHA Images for Registration & Posting]]> - - 2 - - - 1 - - - <![CDATA[reCAPTCHA Public Key]]> - - 3 - - - 1 - - - <![CDATA[reCAPTCHA Private Key]]> - - 4 - - - 1 - - - Reported Content Notification Method - - 5 - - - 1 - - - Decimal Point - - 6 - - - 1 - - - Thousands Numeric Separator - - 7 - - - 1 - - - Show Language Selector in Footer - - 8 - - - 1 - - - Show Theme Selector in Footer - - 9 - - - 1 - - - Maximum Page Links in Pagination - - 10 - - - 1 - - - Show Jump To Page form in Pagination - - 11 - - - 1 - - - Disable All Plugins - - 12 - - - 1 - - - Expire Old Group Invites - - 13 - - - 1 - - - Friendly Redirection Pages - - 14 - - - 1 - - - Enable Forum Jump Menu? - - 15 - - - 1 - - - - - Enable search engine friendly URLs? - Once this setting is enabled you need to make sure you have the MyBB .htaccess in your MyBB root directory (or the equivalent for your web server). Automatic detection may not work on all servers. Please see the MyBB Docs for assistance.]]> - 1 - - - 1 - - - Enable search engine friendly URLs in Archive? - Once this setting is enabled ensure the archive still works as expected.]]> - 2 - - - 1 - - - Use GZip Page Compression? - - 3 - - - 1 - - - GZip Page Compression Level - - 4 - - - 1 - - - Send No Cache Headers - - 5 - - - 1 - - - *NIX Load Limiting - - 6 - - - 1 - - - Output template start/end comments? - - 7 - - - 1 - - - Enable XMLHttp request features? - - 8 - - - 1 - - - Advanced Stats / Debug information - - 9 - - - 1 - - - Uploads Path - must be chmod 777 (on *nix servers).]]> - 10 - - - 1 - - - Use Error Handling - - 11 - - - 1 - - - Error Logging Medium - - 12 - - - 1 - - - Error Type Medium - - 13 - - - 1 - - - Error Logging Location - - 14 - - - 1 - - - Scrutinize User's IP address? - - 15 - - - 1 - - - Minify Stylesheets? - - 16 - - - 1 - - - - Use a CDN? - - 17 - - - 1 - - - - URL to use for static files - - 18 - - - 1 - - - - Path to store static files - - 19 - - - 1 - - - - - - Date Format - - 1 - - - 1 - - - Time Format - - 2 - - - 1 - - - Date/Time Separator - - 3 - - - 1 - - - Registered Date Format - - 4 - - - 1 - - - Default Timezone Offset - - 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - 1 - - - Day Light Savings Time - - 6 - - - 1 - - - - - Show Forum Descriptions? - - 1 - - - 1 - - - Subforums to show on Index listing - - 2 - - - 1 - - - Show Subforum Status Icons? - - 3 - - - 1 - - - Hide Private Forums? - - 4 - - - 1 - - - Forums' Moderator Listing - - 5 - - - 1 - - - Show Today's Birthdays? - - 6 - - - 1 - - - Only Show Birthdays with x Posts - - 7 - - - 1 - - - Show Who's Online? - - 8 - - - 1 - - - Show Small Stats Section - - 9 - - - 1 - - - Show x viewing forum - - 10 - - - 1 - - - - - Threads Per Page - - 1 - - - 1 - - - Replies For Hot Topic - - 2 - - - 1 - - - Views For Hot Topic - - 3 - - - 1 - - - User Selectable Threads Per Page - - 4 - - - 1 - - - Use 'dot' Icons - - 5 - - - 1 - - - Use Thread Ratings? - - 6 - - - 1 - - - Users Browsing this Forum - - 7 - - - 1 - - - Announcements Limit - - 8 - - - 1 - - - Attempt to Mark Parent Forums as Read - MyBB Docs for more information regarding this change.]]> - 9 - - - 1 - - - - - Post Layout - - 1 - - - 1 - - - Posts Per Page: - - 2 - - - 1 - - - User Selectable Posts Per Page - - 3 - - - 1 - - - Maximum Avatar Dimensions in Posts - - 4 - - - 1 - - - Read Threads in Database (Days) - - 5 - - - 1 - - - Usenet Style Thread View - - 6 - - - 1 - - - Show Quick Reply Form - - 7 - - - 1 - - - Show Multi-quote Buttons - - 8 - - - 1 - - - Show 'Similar Threads' Table - - 9 - - - 1 - - - Similar Threads Relevancy Rating - - 10 - - - 1 - - - Similar Threads Limit - - 11 - - - 1 - - - Show Forum Multipage Dropdown - - 12 - - - 1 - - - Users Browsing this Thread - - 13 - - - 1 - - - Delayed Thread View Updates - - 14 - - - 1 - - - - - Disable Registrations - - 1 - - - 1 - - - Registration Method - - 2 - - - 1 - - - Awaiting Activation Notification - - 3 - - - 1 - - - Force Users to Login - - 4 - - - 1 - - - Minimum Username Length - - 5 - - - 1 - - - Maximum Username Length - - 6 - - - 1 - - - Minimum Password Length - - 7 - - - 1 - - - Maximum Password Length - - 8 - - - 1 - - - Require a complex password? - - 9 - - - 1 - - - Time Between Registrations - - 10 - - - 1 - - - Maximum Registrations Per IP Address - - 11 - - - 1 - - - <![CDATA[Allow emails to be registered multiple times?]]> - - 12 - - - 1 - - - Users Keep Email - - 13 - - - 1 - - - Display a hidden CAPTCHA - - 14 - - - 1 - - - Hidden CAPTCHA field - - 15 - - - 1 - - - Use Referrals System - - 16 - - - 1 - - - COPPA Compliance - COPPA support on your forums, please select the registration allowance below.]]> - 17 - - - 1 - - - Allowed Login Methods - To allow email as a valid login method, no users are allowed to share email addresses.]]> - 18 - - - 0 - - - Number of failed logins before verification required - - 19 - - - 1 - - - Number of times to allow failed logins - - 20 - - - 1 - - - Time between failed logins - - 21 - - - 1 - - - Display number of failed logins - - 22 - - - 1 - - - Minimum Registration Time - - 23 - - - 1 - - - Show Security Question - - 24 - - - 1 - - - - - Allow MyCode in Signatures - - 1 - - - 1 - - - MyCode affects signature length - - 2 - - - 1 - - - Allow Smilies in Signatures - - 3 - - - 1 - - - Allow HTML in Signatures - - 4 - - - 1 - - - Allow [img] Code in Signatures - - 5 - - - 1 - - - Maximum Number of Images per Signature - - 6 - - - 1 - - - Length limit in Signatures - - 7 - - - 1 - - - Hide Signatures To Groups - - 8 - - - 1 - - - Hide Websites To Groups - - 9 - - - 1 - - - Default User Avatar - {theme} to represent the image directory of each theme.]]> - 10 - - - 1 - - - Default Avatar Dimensions - - 11 - - - 1 - - - Gravatar Rating - -
  • G: suitable for display on all websites with any audience type
  • -
  • PG: may contain rude gestures, provocatively dressed individuals, the lesser swear words or mild violence
  • -
  • R: may contain such things as harsh profanity, intense violence, nudity or hard drug use
  • -
  • X: may contain hardcore sexual imagery or extremely disturbing violence
  • -]]>
    - 12 - - - 1 -
    - - Maximum Avatar Dimensions - xheight. If this is left blank then there will be no dimension restriction.]]> - 13 - - - 1 - - - Max Uploaded Avatar Size - - 14 - - - 1 - - - Avatar Resizing Mode - - 15 - - - 1 - - - Avatar Upload Path - must be chmod 777 (writable) for uploads to work.]]> - 16 - - - 1 - - - Allow Remote Avatars - - 17 - - - 1 - - - Custom User Title Maximum Length - - 18 - - - 1 - - - Allow Away Statuses? - - 19 - - - 1 - - - Allow Buddy-Only Messaging? - - 20 - - - 1 - -
    - - - Minimum Message Length - - 1 - - - 1 - - - Maximum Message Length - This should correlate with the message column type in the posts database table, and adjust accordingly. Below are the maximum lengths for each column type. -
      -
    • TEXT: 65535 (default)
    • -
    • MEDIUMTEXT: 16777215
    • -
    • LONGTEXT: 4294967295
    • -
    ]]>
    - 2 - - - 1 -
    - - MyCode Affects Minimum Message Length? - - 3 - - - 1 - - - Post Flood Checking - - 4 - - - 1 - - - Post Flood Time - - 5 - - - 1 - - - Post Merge Time - - 6 - - - 1 - - - Merge Forums to Ignore - - 7 - - - 1 - - - Merge User Groups to Ignore - - 8 - - - 1 - - - Merge Separator - - 9 - - - 1 - - - Show Posting IP Addresses - - 10 - - - 1 - - - Show 'edited by' Messages - - 11 - - - 1 - - - Show 'edited by' Message for Administrators and Moderators - - 12 - - - 1 - - - Maximum Images per Post - - 13 - - - 1 - - - Maximum Videos per Post - - 14 - - - 1 - - - Amount of Characters for Subscription Previews - - 15 - - - 1 - - - Maximum Nested Quote Tags - - 16 - - - 1 - - - Maximum Poll Option Length - - 17 - - - 1 - - - Maximum Number of Poll Options - - 18 - - - 1 - - - Poll Time Limit - - 19 - - - 1 - - - Show Thread Review - - 20 - - - 1 - - - Allow Edit Reason - - 21 - - - 1 - - - Enable Soft Delete for Users - - 22 - - - 1 - -
    - - - Enable Attachment Functionality - - 1 - - - 1 - - - Maximum Attachments Per Post - - 2 - - - 1 - - - Show Attached Thumbnails in Posts - - 3 - - - 1 - - - Attached Thumbnail Maximum Height - - 4 - - - 1 - - - Attached Thumbnail Maximum Width - - 5 - - - 1 - - - - - Enable Member List Functionality - - 1 - - - 1 - - - Members Per Page - - 2 - - - 1 - - - Default Sort Field - - 3 - - - 1 - - - Default Sort Order - Ascending: A-Z / beginning-end
    Descending: Z-A / end-beginning]]>
    - 4 - - - 1 -
    - - Maximum Display Avatar Dimensions - - 5 - - - 1 - -
    - - - Enable Reputation Functionality - - 1 - - - 1 - - - Allow Positive Reputation - - 2 - - - 1 - - - Allow Negative Reputation - - 3 - - - 1 - - - Allow Neutral Reputation - - 4 - - - 1 - - - Allow Multiple Reputation - Note: Does not effect "Post" reputation]]> - 5 - - - 1 - - - Allow Post Reputations - - 6 - - - 1 - - - Reputation Comments Per Page - - 7 - - - 1 - - - Maximum Reputation Length - - 8 - - - 1 - - - Minimum Reputation Length - - 9 - - - 1 - - - - - Enable Warning System? - - 1 - - - 1 - - - Allow Custom Warning Types? - - 2 - - - 1 - - - Can Users View Own Warnings? - - 3 - - - 1 - - - Allow Anonymous Warning PMs - - 4 - - - 1 - - - Maximum Warning Points - - 5 - - - 1 - - - - - Enable Private Messaging Functionality - - 1 - - - 1 - - - Show Quick Reply Form - - 2 - - - 1 - - - Allow HTML - - 3 - - - 1 - - - Allow MyCode - - 4 - - - 1 - - - Allow Smilies - - 5 - - - 1 - - - Allow [img] Code - - 6 - - - 1 - - - Allow [video] Code - - 7 - - - 1 - - - Private Message Flood Time - - 8 - - - 1 - - - Show Private Message IP Addresses - - 9 - - - 1 - - - Maximum PM Nested Quote Tags - - 10 - - - 1 - - - - - Enable Calendar Functionality - - 1 - - - 1 - - - - - Cut-off Time (mins) - - 1 - - - 1 - - - Refresh Who's online page Time (mins) - - 2 - - - 1 - - - Who's Online Order - - 3 - - - 1 - - - - - Enable user pruning? - - 1 - - - 1 - - - Prune user by post count? - - 2 - - - 1 - - - Post count to prune by - - 3 - - - 1 - - - Count all posts? - - 4 - - - 0 - - - Days registered before pruning by post count - - 5 - - - 1 - - - Prune unactivated users? - - 6 - - - 1 - - - Days registered before pruning unactivated users - - 7 - - - 1 - - - Prune User Posts/Threads - - 8 - - - 1 - - - - - Enable Portal - - 1 - - - 1 - - - Forums to pull announcements from - - 2 - - - 1 - - - Number of announcements to show - - 3 - - - 1 - - - Show the Welcome box - - 4 - - - 1 - - - Show the number of PMs to users - - 5 - - - 1 - - - Show forum statistics - - 6 - - - 1 - - - Show Who's Online - - 7 - - - 1 - - - Show Search Box - - 8 - - - 1 - - - Show Latest Discussions - - 9 - - - 1 - - - Number of latest discussions to show - - 10 - - - 1 - - - Forums to exclude latest discussions from - - 11 - - - 1 - - - - - Search Type - - 1 - ".($db->supports_fulltext("threads") && $db->supports_fulltext_boolean("posts")?"":"")."]]> - - 1 - - - Search Flood Time (seconds) - - 2 - - - 1 - - - Minimum Search Word Length - - 3 - - - 1 - - - Hard Limit for Maximum Search Results - - 4 - - - 1 - - - Enable Help Documents Search - - 5 - - - 1 - - - - - Clickable MyCode Editor - - 1 - - - 1 - - - Clickable MyCode Editor in Partial Mode - - 2 - - - 0 - - - Clickable Smilies Inserter - - 3 - - - 1 - - - No. of Smilies to show - - 4 - - - 1 - - - No. of Smilie Cols to Show - - 5 - - - 1 - - - Allow Basic MyCodes - - 6 - - - 1 - - - Allow Color MyCode - - 7 - - - 1 - - - Allow Size MyCode - - 8 - - - 1 - - - Allow Font MyCode - - 9 - - - 1 - - - Allow Link MyCode - - 10 - - - 1 - - - Allow Email MyCode - - 11 - - - 1 - - - Allow Alignment MyCode - - 12 - - - 1 - - - Allow List MyCode - - 13 - - - 1 - - - Allow Code MyCodes - - 14 - - - 1 - - - Allow Symbol MyCodes - - 15 - - - 1 - - - Allow Me MyCodes - - 16 - - - 1 - - - Parse [img] MyCode To Guests - - 17 - - - 1 - - - Parse [video] MyCode To Guests - - 18 - - - 1 - - - - - Control Panel Language - - 1 - - - 1 - - - Control Panel Style - - 2 - - - 1 - - - Max Number of Login Attempts - - 3 - - - 1 - - - Login Attempts Timeout - - 4 - - - 1 - - - - - Mail handler - - 1 - - - 1 - - - SMTP hostname - Only required if SMTP Mail is selected as the Mail Handler.]]> - 2 - - - 1 - - - SMTP port - Only required if SMTP Mail is selected as the Mail Handler.]]> - 3 - - - 1 - - - SMTP username - Only required if SMTP Mail is selected as the Mail Handler, and the SMTP server requires authentication.]]> - 4 - - - 1 - - - SMTP password - Only required if SMTP Mail is selected as the Mail Handler, and the SMTP server requires authentication.]]> - 5 - - - 1 - - - SMTP Encryption Mode - Only required if SMTP Mail is selected as the Mail Handler.]]> - 6 - - - 1 - - - Additional Parameters for PHP's mail() - More information]]> - 7 - - - 1 - - - Mail Logging - - 8 - - - 1 - - - Add message ID in mail headers - - 9 - - - 1 - - - - - Enable Contact Page - - 1 - - - 1 - - - Disable Contact Page to Guests - - 2 - - - 1 - - - Enable Word Filter on Contact Page - - 3 - - - 1 - - - Maximum Subject Length on Contact Page - - 4 - - - 1 - - - Minimum Message Length on Contact Page - - 5 - - - 1 - - - Maximum Message Length on Contact Page - - 6 - - - 1 - - - - - Allowed Usergroups - - 1 - - - 1 - - - - Post Limit - - 2 - - - 1 - - - - Ban or Delete Spammers - - 3 - - - 1 - - - - Ban Usergroup - - 4 - - - 1 - - - - Ban Reason - - 5 - - - 1 - - - - Stop Forum Spam API Key - here. When you have your key, paste it into the box below.]]> - 6 - - - 1 - - - - - - Check Registrations Against StopForumSpam.com? - - - 1 - - - 1 - - - Check Guest Contact Submissions Against StopForumSpam? - - - 2 - - - 1 - - - Check Guest Replies Against StopForumSpam? - - - 3 - - - 1 - - - Check Guest Threads Against StopForumSpam? - - - 4 - - - 1 - - - Minimum stop forum spam weighting? - - - 5 - - - 1 - - - Check usernames? - - - 6 - - - 1 - - - Check email addresses? - - - 7 - - - 1 - - - Check IP addresses? - - - 8 - - - 1 - - - Block on StopForumSpam error? - - - 9 - - - 1 - - - Log StopForumSpam blocks? - - - 10 - - - 1 - - - - - Allow ICQ Number Field To Usergroups - - 1 - - - 1 - - - - Allow AIM Screen Name To Usergroups - - 2 - - - 1 - - - - Allow Yahoo ID Field To Usergroups - - 3 - - - 1 - - - - Allow Skype ID Field To Usergroups - - 4 - - - 1 - - - - Allow Google Hangouts ID Field To Usergroups - - 5 - - - 1 - - - - - - Enable Statistics Pages - - 1 - - - 1 - - - - Statistics Cache Time - - 2 - - - 1 - - - - Stats Limit - - 3 - - - 1 - - - Show Top Referrer on Statistics Page - - 4 - - - 1 - - -
    diff --git a/html/forums/install/resources/sqlite_db_tables.php b/html/forums/install/resources/sqlite_db_tables.php deleted file mode 100644 index 7d5185b..0000000 --- a/html/forums/install/resources/sqlite_db_tables.php +++ /dev/null @@ -1,1058 +0,0 @@ - - - - Hourly Cleanup - - hourlycleanup - 0 - * - * - * - * - 1 - 1 - - - Daily Cleanup - - dailycleanup - 0 - 0 - * - * - * - 1 - 1 - - - Half-hourly User Cleanup - - usercleanup - 30,59 - * - * - * - * - 1 - 1 - - - Weekly Backup - - backupdb - 0 - 0 - * - 0 - * - 0 - 1 - - - Promotion System - - promotions - 5,25,45 - * - * - * - * - 1 - 1 - - - Thread Views - - threadviews - 10,25,40,55 - * - * - * - * - 0 - 1 - - - Tables Check - - checktables - 0 - * - * - * - * - 0 - 1 - - - Log Pruning - - logcleanup - 21 - 5 - * - * - * - 1 - 1 - - - Mass Mail - - massmail - 10,25,40,55 - * - * - * - * - 1 - 1 - - - User Pruning - - userpruning - 0 - 2 - * - * - * - 1 - 1 - - - Delayed Moderation - - delayedmoderation - 0 - 0 - * - * - * - 1 - 1 - - - Version Check - - versioncheck - 0 - 0 - * - * - * - 1 - 1 - - - Stylesheet Re-Cache - - recachestylesheets - 0 - 0 - 1 - 0 - 0 - 0 - 1 - - \ No newline at end of file diff --git a/html/forums/install/resources/upgrade1.php b/html/forums/install/resources/upgrade1.php deleted file mode 100644 index e425075..0000000 --- a/html/forums/install/resources/upgrade1.php +++ /dev/null @@ -1,408 +0,0 @@ - 1, - "revert_all_themes" => 1, - "revert_all_settings" => 1, - "requires_deactivated_plugins" => 1, -); - -function upgrade1_dbchanges() -{ - global $db, $output; - - $output->print_header("Database Changes since Release Candidate 2"); - - $contents .= "

    Making necessary database modifications..."; - - if($db->field_exists('regip', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP regid;"); - } - $db->write_query("ALTER TABLE users ADD regip varchar(50) NOT NULL;"); - - $db->write_query("ALTER TABLE banned CHANGE lifted lifted varchar(40) NOT NULL;"); - - if($db->field_exists('posthash', "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP posthash;"); - } - $db->write_query("ALTER TABLE attachments ADD posthash varchar(50) NOT NULL AFTER pid;"); - - if($db->field_exists('thumbnail', "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP thumbnail;"); - } - $db->write_query("ALTER TABLE attachments ADD thumbnail blob NOT NULL"); - - if($db->field_exists('thumbnailsm', "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP thumbnailsm;"); - } - $db->write_query("ALTER TABLE attachments ADD thumbnailsm char(3) NOT NULL;"); - - $db->write_query("DELETE FROM attachtypes"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'Compressed Archive','','zip gz tar rar ace cab','1024');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'JPEG Image','','jpg jpe jpeg','500');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'Text Document','text/plain','txt','200');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'GIF Image','image/gif','gif','500');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'Bitmap Image','','bmp','500');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'PHP File','','php phps php3 php4','500');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'PNG Image','image/png image/x-png','png','50');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'Microsoft Word Document','','doc rtf','1024');"); - $db->write_query("INSERT INTO attachtypes VALUES(NULL,'Executable','','exe com bat','1024');"); - - if($db->field_exists('small', "themes")) - { - $db->write_query("ALTER TABLE themes DROP small;"); - } - if($db->field_exists('smallend', "themes")) - { - $db->write_query("ALTER TABLE themes DROP smallend;"); - } - if($db->field_exists('font', "themes")) - { - $db->write_query("ALTER TABLE themes DROP font;"); - } - if($db->field_exists('frontend', "themes")) - { - $db->write_query("ALTER TABLE themes DROP fontend;"); - } - if($db->field_exists('large', "themes")) - { - $db->write_query("ALTER TABLE themes DROP large;"); - } - if($db->field_exists('largeend', "themes")) - { - $db->write_query("ALTER TABLE themes DROP largeend;"); - } - - if($db->field_exists('smallfont', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP smallfont;"); - } - $db->write_query("ALTER TABLE themes ADD smallfont varchar(150) NOT NULL;"); - - if($db->field_exists('smallfontsize', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP smallfontsize;"); - } - $db->write_query("ALTER TABLE themes ADD smallfontsize varchar(20) NOT NULL;"); - - if($db->field_exists('normalfont', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP normalfont;"); - } - $db->write_query("ALTER TABLE themes ADD normalfont varchar(150) NOT NULL;"); - - if($db->field_exists('normalfontsize', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP normalfontsize;"); - } - $db->write_query("ALTER TABLE themes ADD normalfontsize varchar(20) NOT NULL;"); - - if($db->field_exists('largefont', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP largefont;"); - } - $db->write_query("ALTER TABLE themes ADD largefont varchar(150) NOT NULL;"); - - if($db->field_exists('largefontsize', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP largefontsize;"); - } - $db->write_query("ALTER TABLE themes ADD largefontsize varchar(20) NOT NULL;"); - - if($db->field_exists('menubgcolor', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP menubgcolor;"); - } - $db->write_query("ALTER TABLE themes ADD menubgcolor varchar(15) NOT NULL;"); - - if($db->field_exists('menubgimage', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP menubgimage;"); - } - $db->write_query("ALTER TABLE themes ADD menubgimage varchar(100) NOT NULL;"); - - if($db->field_exists('menucolor', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP menucolor;"); - } - $db->write_query("ALTER TABLE themes ADD menucolor varchar(15) NOT NULL;"); - - if($db->field_exists('menuhoverbgcolor', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP menuhoverbgcolor;"); - } - $db->write_query("ALTER TABLE themes ADD menuhoverbgcolor varchar(15) NOT NULL;"); - - if($db->field_exists('menuhoverbgimage', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP menuhoverbgimage;"); - } - $db->write_query("ALTER TABLE themes ADD menuhoverbgimage varchar(100) NOT NULL;"); - - if($db->field_exists('menuhovercolor', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP menuhovercolor;"); - } - $db->write_query("ALTER TABLE themes ADD menuhovercolor varchar(15) NOT NULL;"); - - if($db->field_exists('panelbgcolor', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP panelbgcolor;"); - } - $db->write_query("ALTER TABLE themes ADD panelbgcolor varchar(15) NOT NULL;"); - - if($db->field_exists('panelbgimage', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP panelbgimage;"); - } - $db->write_query("ALTER TABLE themes ADD panelbgimage varchar(100) NOT NULL;"); - - if($db->field_exists('linkhover', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP linkhover;"); - } - $db->write_query("ALTER TABLE themes ADD linkhover varchar(15) NOT NULL AFTER link;"); - - if($db->field_exists('extracss', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP extracss;"); - } - $db->write_query("ALTER TABLE themes ADD extracss varchar(10) NOT NULL AFTER linkhover;"); - - - $db->write_query("UPDATE themes SET linkhover='#000000'"); - - $db->write_query("UPDATE themes SET smallfont='Verdana', smallfontsize='11px', normalfont='Verdana', normalfontsize='13px', largefont='Verdana', largefontsize='20px';"); - - $contents .= "done

    "; - - $db->drop_table("settinggroups", false, false); - $db->write_query("CREATE TABLE settinggroups ( - gid smallint(6) NOT NULL auto_increment, - name varchar(220) NOT NULL default '', - description text NOT NULL, - disporder smallint(6) NOT NULL default '0', - isdefault char(3) NOT NULL default '', - PRIMARY KEY (gid) - );"); - - $db->drop_table("settings", false, false); - $db->write_query("CREATE TABLE settings ( - sid smallint(6) NOT NULL auto_increment, - name varchar(120) NOT NULL default '', - title varchar(120) NOT NULL default '', - description text NOT NULL, - optionscode text NOT NULL, - value text NOT NULL, - disporder smallint(6) NOT NULL default '0', - gid smallint(6) NOT NULL default '0', - PRIMARY KEY (sid) - );"); - - $output->print_contents("$contents

    Please click next to continue with the upgrade process.

    "); - $output->print_footer("1_dbchanges2"); -} -function upgrade1_dbchanges2() -{ - global $db, $output; - - $output->print_header("Database Changes since Release Candidate 2"); - - $db->write_query("DELETE FROM themes"); - $arr = @file("./resources/theme.mybb"); - $contents = @implode("", $arr); - - // now we have $contents we can start dealing with the .theme file! - $themee = explode("(_!&!_)", $contents); - $thver = $themee[0]; - $thname = "Light"; - $thcontents = $themee[2]; - $thtemplates = $themee[3]; - - // go through the actual theme part (colours etc) - $themefile = explode("|#*^^&&^^*#|", $thcontents); - $themeq1 = ""; - $themeq2 = ""; - foreach($themefile as $key => $val) - { - list($item, $value) = explode("|#*!!**!!*#|", $val); - if($db->field_exists($item, "themes")) - { - $themebits[$item] = $value; - } - } - - // add the theme set - $tquery1 = ""; - $tquery2 = ""; - unset($themebits['templateset']); - foreach($themebits as $key => $val) - { - if($key && $val) - { - $tquery1 .= ",$key"; - $tquery2 .= ",'$val'"; - } - } - $db->write_query("INSERT INTO themes (tid,name,templateset$tquery1) VALUES ('','((master))','$sid'$tquery2)"); - $thetid = $db->write_query("INSERT INTO themes (tid,name,templateset$tquery1) VALUES ('','$thname','$sid2'$tquery2)"); - $db->write_query("UPDATE themes SET def='1' WHERE tid='$thetid'"); - - $output->print_contents("Theme imported

    Please click next to continue with the upgrade process.

    "); - $output->print_footer("1_dbchanges3"); -} -function upgrade1_dbchanges3() -{ - - global $db, $output; - - $output->print_header("Database Changes since Release Candidate 2"); - - $contents .= "

    Reinserting all board settings..."; - - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (1, 'General Configuration', 'This section contains various settings such as your board name and url, as well as your website name and url.', 2, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (3, 'Date and Time Formats', 'Here you can specify the different date and time formats used to display dates and times on the forums.', 4, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (7, 'Forum Display Options', 'This section allows you to manage the various settings used on the forum fisplay (forumdisplay.php) of your boards such as enabling and disabling different features.', 6, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (8, 'Show Thread Options', 'This section allows you to manage the various settings used on the thread display page (showthread.php) of your boards such as enabling and disabling different features.', 7, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (10, 'MyCode and Formatting Options', '', 16, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (11, 'Private Messaging', 'Various options with relation to the MyBB Private Messaging system (private.php) can be managed and set here.', 11, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (12, 'Member List', 'This section allows you to control various aspects of the board member listing (memberlist.php), such as how many members to show per page, and which features to enable or disable.', 10, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (13, 'Posting', 'These options control the various elements in relation to posting messages on the forums.', 9, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (14, 'Banning Options', '', 15, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (16, 'Forum Home Options', 'This section allows you to manage the various settings used on the forum home (index.php) of your boards such as enabling and disabling different features.', 5, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (17, 'Calendar', 'The board calendar allows the public and private listing of events and members\' birthdays. This section allows you to control and manage the settings for the Calendar.', 12, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (27, 'Server and Optimization Options', 'These options allow you to set various server and optimization preferences allowing you to reduce the load on your server, and gain better performance on your board.', 3, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (19, 'User Registration and Profile Options', 'Here you can control various settings with relation to user account registration and account management.', 8, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (20, 'Clickable Smilies and BB Code', '', 17, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (21, 'Common Language Bits', '', 18, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (23, 'Who\'s Online', '', 13, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (26, 'Board Online / Offline', 'These settings allow you to globally turn your forums online or offline, and allow you to specify a reason for turning them off.', 1, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (28, 'Control Panel Preferences (Global)', '', 19, 'yes');"); - $db->write_query("INSERT INTO `settinggroups` (`gid`, `name`, `description`, `disporder`, `isdefault`) VALUES (30, 'Portal Settings', '', 14, 'yes');"); - - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (1, 'boardclosed', 'Board Closed', 'If you need to close your forums to make some changes or perform an upgrade, this is the global switch. Viewers will not be able to view your forums, however, they will see a message with the reason you specify below.
    \r\n
    \r\nAdministrators will still be able to view the forums.', 'yesno', 'no', 1, 26);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (2, 'boardclosed_reason', 'Board Closed Reason', 'If your forum is closed, you can set a message here that your visitors will be able to see when they visit your forums.', 'textarea', 'These forums are currently closed for maintenance. Please check back later.', 2, 26);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (3, 'bbname', 'Board Name', 'The name of your message boards. We recommend that it is not over 75 characters.', 'text', 'MyBB Community Forums', 1, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (4, 'bburl', 'Board URL', 'The url to your forums.
    Include the http://. Do NOT include a trailing slash.', 'text', 'http://www.mybb.com/community', 2, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (5, 'homename', 'Homepage Name', 'The name of your homepage. This will appear in the footer with a link to it.', 'text', 'MyBB', 3, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (6, 'homeurl', 'Homepage URL', 'The full URL of your homepage. This will be linked to in the footer along with its name.', 'text', 'http://www.mybb.com', 4, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (7, 'reportviapms', 'Send Reported Posts via PMS', 'Do you want to send reported post messages via the private messaging function to moderators?', 'yesno', 'yes', 5, 8);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (8, 'dateformat', 'Date Format', 'The format of the dates used on the forum. This format uses the PHP date() function. We recommend not changing this unless you know what you\'re doing.', 'text', 'm-d-Y', 1, 3);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (9, 'adminemail', 'Admin Email', 'The administrator\'s email address. This will be used for outgoing emails sent via the forums.', 'text', 'contact@mybb.com', 1, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (10, 'timeformat', 'Time Format', 'The format of the times used on the forum. This format uses PHP\'s date() function. We recommend not changing this unless you know what you\'re doing.', 'text', 'h:i A', 2, 3);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (11, 'threadsperpage', 'Threads Per Page', '', 'text', '20', 1, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (12, 'stickyprefix', 'Sticky Threads Prefix', 'The prefix of topics which have been made sticky by a moderator or administrator.', 'text', 'Sticky:', 2, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (13, 'hottopic', 'Replys For Hot Topic', 'The number of replies that is needed for a topic to be considered \'hot\'.', 'text', '20', 3, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (14, 'cookiedomain', 'Cookie Domain', 'The domain which cookies should be set to. This can remain blank. It should also start with a . so it covers all subdomains.', 'text', '', 5, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (15, 'cookiepath', 'Cookie Path', 'The path which cookies are set to, we recommend setting this to the full directory path to your forums with a trailing slash.', 'text', '', 6, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (16, 'pollprefix', 'Poll Prefix', 'The prefix on forum display which contain polls.', 'text', 'Poll:', 4, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (17, 'postsperpage', 'Posts Per Page:', 'The number of posts to display per page. We recommend its not higher than 20 for people with slower connections.', 'text', '10', 1, 8);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (18, 'regdateformat', 'Registered Date Format', 'The format used on showthread where it shows when the user registered.', 'text', 'M Y', 3, 3);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (19, 'sigmycode', 'Allow MyCode in Signatures', 'Do you want to allow MyCode to be used in users\' signatures?', 'yesno', 'yes', 1, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (20, 'sigsmilies', 'Allow Smilies in Signatures', 'Do you want to allow smilies to be used in users\' signatures?', 'yesno', 'yes', 3, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (21, 'sightml', 'Allow HTML in Signatures', 'Do you want to allow HTML to be used in users\' signatures?', 'yesno', 'no', 4, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (22, 'sigimgcode', 'Allow [img] Code in Signatures', 'Do you want to allow [img] code to be used in users\' signatures?', 'yesno', 'yes', 5, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (23, 'quoteboxstyle', 'Fancy Quote Boxes', 'Selecting yes will cause quotes to be in a table and look more professional. Selecting no will show quotes in the traditional way.', 'yesno', 'yes', 1, 10);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (24, 'codeboxstyle', 'Fancy Code Boxes', 'Selecting yes will cause code to be in a table and look more professional. Selecting no will show code in the traditional way.', 'yesno', 'yes', 2, 10);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (25, 'threadusenetstyle', 'Usenet Style Thread View', 'Selecting yes will cause posts to look similar to how posts look in USENET. No will cause posts to look the modern way.', 'yesno', 'no', 3, 8);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (26, 'pmsallowhtml', 'Allow HTML', 'Selecting yes will allow HTML to be used in private messages.', 'yesno', 'no', 1, 11);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (27, 'pmsallowmycode', 'Allow MyCode', 'Selecting yes will allow MyCode to be used in private messages.', 'yesno', 'yes', 2, 11);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (28, 'pmsallowsmilies', 'Allow Smilies', 'Selecting yes will allow Smilies to be used in private messages.', 'yesno', 'yes', 3, 11);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (29, 'pmsallowimgcode', 'Allow [img] Code', 'Selecting yes will allow [img] Code to be used in private messages.', 'yesno', 'yes', 4, 11);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (30, 'siglength', 'Length limit in Signatures', 'The maximum number of characters a user can place in a signature.', 'text', '255', 6, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (31, 'messagelength', 'Maximum Message Length', 'The maximum number of characters to allow in a message. A setting of 0 allows an unlimited length.', 'text', '0', 1, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (32, 'membersperpage', 'Members Per Page', 'The number of members to show per page on the member list.', 'text', '20', 1, 12);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (33, 'load', '*NIX Load Limiting', 'Limit the maximum server load before myBB rejects people. 0 for none. Recommended limit is 5.0.', 'text', '0', 5, 27);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (34, 'emailkeep', 'Users Keep Email', 'If a current user has an email already registered in your banned list, should he be allowed to keep it.', 'yesno', 'no', 4, 14);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (35, 'ipban', 'Ban by IP', 'Here, you may specify IP addresses or a range of IP addresses. You must separate each IP with a space.', 'textarea', '', 2, 14);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (36, 'emailban', 'Ban by Email', 'You may specify specific email addresses to ban, or you may specify a domain. You must separate email addresses and domains with a space.', 'textarea', '', 3, 14);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (37, 'avatarsize', 'Max Uploaded Avatar Size', 'Maximum file size (in kilobytes) of uploaded avatars.', 'text', '10', 8, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (38, 'avatardir', 'Avatar Directory', 'The directory where your avatars are stored. These are used in the avatar list in the User CP.', 'text', 'images/avatars', 7, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (39, 'showeditedby', 'Show \'edited by\' Messages', 'Once a post is edited by a regular user, do you want to show the edited by message?', 'yesno', 'yes', 6, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (40, 'maxposts', 'Maximum Posts Per Day', 'This is the total number of posts allowed per user per day. 0 for unlimited.', 'text', '0', 2, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (41, 'showeditedbyadmin', 'Show \'edited by\' Message for Forum Staff', 'Do you want to show edited by messages for forum staff when they edit their posts?', 'yesno', 'yes', 7, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (42, 'bannedusernames', 'Banned Usernames', 'Ban users from registering certain usernames. Seperate them with a space.', 'textarea', 'drcracker Oops! hmmm', 1, 14);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (43, 'maxpolloptions', 'Maximum Number of Poll Options', 'The maximum number of options for polls that users can post.', 'text', '10', 3, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (44, 'dotfolders', 'Use \'dot\' Icons', 'Do you want to show dots on the thread indicators of threads users have participated in.', 'yesno', 'yes', 8, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (45, 'contactlink', 'Contact Us Link', 'This will be used for the Contact Us link on the bottom of all the forum pages. Can either be an email address (using mailto:email@website.com) or a hyperlink.', 'text', 'mailto:contact@mybb.com', 2, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (46, 'showdescriptions', 'Show Forum Descriptions?', 'This option will allow you to turn off showing the descriptions for forums.', 'yesno', 'yes', 1, 16);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (47, 'showbirthdays', 'Show Today\'s Birthdays?', 'Do you want to show today\'s birthdays on the forum homepage?', 'yesno', 'yes', 2, 16);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (48, 'showwol', 'Show Who\'s Online?', 'Display the currently active users on the forum home page.', 'yesno', 'yes', 4, 16);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (49, 'hideprivateforums', 'Hide Private Forums?', 'You can hide private forums by turning this option on. This option also hides forums on the forum jump and all subforums.', 'yesno', 'yes', 3, 16);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (50, 'showsimilarthreads', 'Show \'Similar Threads\' Table', 'The Similar Threads table shows threads that are relevant to the thread being read. You can set the relevancy below.', 'yesno', 'no', 4, 8);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (51, 'similarityrating', 'Similar Threads Relevancy Rating', 'This allows you to limit similar threads to ones more relevant (0 being not relevant). This number should not be over 10 and should not be set low (<5) for large forums.', 'text', '1', 6, 8);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (52, 'similarlimit', 'Similar Threads Limit', 'Here you can change the total amount of similar threads to be shown in the similar threads table. It is recommended that it is not over 15 for 56k users.', 'text', '10', 7, 8);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (53, 'privateeventcolor', 'Private Events Color', 'The color that private events will be shown in on the main calendar page.', 'text', 'red', 2, 17);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (54, 'publiceventcolor', 'Public Events Color', 'The color that public events will be shown in on the main calendar page.', 'text', 'green', 1, 17);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (55, 'movedprefix', 'Moved Threads Prefix', 'The prefix that threads that have been moved to another forum should have.', 'text', 'Moved:', 5, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (56, 'hottopicviews', 'Views For Hot Topic', 'The number of views a thread can have before it is considered \'hot\'.', 'text', '150', 7, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (59, 'logip', 'Log Posting IP Addresses', 'Do you wish to log ip addresses of users who post, and who you want to show ip addresses to.', 'radio\r\nno=Do not log IP\r\nhide=Show to Admins & Mods\r\nshow=Show to all Users', 'hide', 3, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (60, 'statslimit', 'Stats Limit', 'The number of threads to show on the stats page for most replies and most views.', 'text', '15', 5, 1);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (65, 'modlist', 'Forums\' Moderator Listing', 'Here you can turn on or off the listing of moderators for each forum on index.php and forumdisplay.php', 'onoff', 'on', 5, 16);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (66, 'smilieinserter', 'Clickable Smilies Inserter', 'Clickable smilies will appear on the posting pages if this option is set to \'on\'.', 'onoff', 'on', 1, 20);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (67, 'smilieinsertertot', 'No. of Smilies to show', 'Enter the total number of smilies to show on the clickable smilie inserter.', 'text', '20', 2, 20);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (68, 'smilieinsertercols', 'No. of Smilie Cols to Show', 'Enter the number of columns you wish to show on the clickable smilie inserter.', 'text', '4', 3, 20);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (69, 'cantext', '\'Can\' text', 'The text that will be used in templates when the user has permission to perform an action (eg. post new threads).', 'text', 'can', 1, 21);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (70, 'canttext', '\'Cannot\' text', 'The text that will be used in templates when the user does not have permission to perform an action (eg. post new threads).', 'text', 'cannot', 2, 21);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (71, 'ontext', '\'On\' text', 'The text that will be used when a feature is turned On (eg. BB Code in posts).', 'text', 'On', 3, 21);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (72, 'offtext', '\'Off\' text', 'The text that will be used when a feature is turned Off (eg. BB Code in posts).', 'text', 'Off', 4, 21);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (73, 'showindexstats', 'Show Small Stats Section', 'Do you want to show the total number of threads, posts, members, and the last member on the forum home?', 'yesno', 'yes', 6, 16);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (74, 'regtype', 'Registration Method', 'Please select the method of registration to use when users register.', 'select\r\ninstant=Instant Activation\r\nverify=Send Email Verification\r\nrandompass=Send Random Password', 'verify', 1, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (75, 'userpppoptions', 'User Selectable Posts Per Page', 'If you would like to allow users to select how many posts are shown per page in a thread, enter the options they should be able to select separated with commas. If this is left blank they will not be able to choose how many posts are shown per page.', 'text', '5,10,20,25,30,40,50', 2, 8);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (76, 'usertppoptions', 'User Selectable Threads Per Page', 'If you would like to allow users to select how many threads per page are shown in a forum, enter the options they should be able to select separated with commas. If this is left blank they will not be able to choose how many threads are shown per page.', 'text', '10,20,25,30,40,50', 6, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (77, 'wolcutoffmins', 'Cut-off Time (mins)', 'The number of minutes before a user is marked offline. Recommended: 15.', 'text', '15', 1, 23);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (78, 'postfloodcheck', 'Post Flood Checking', 'Set to on if you want to enable flood checking for posts. Specifiy the time between posts below.', 'onoff', 'on', 4, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (79, 'postfloodsecs', 'Post Flood Time', 'Set the time (in seconds) users have to wait between posting, to be in effect; the option above must be on.', 'text', '60', 5, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (80, 'gzipoutput', 'Use GZip Page Compression?', 'Do you want to compress pages in GZip format when they are sent to the browser? This means quicker downloads for your visitors, and less traffic usage for you. The level of the compression is set by the server\'s load.', 'yesno', 'yes', 1, 27);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (81, 'standardheaders', 'Send Standard Headers', 'With some web servers, this option can cause problems; with others, it is needed. ', 'yesno', 'no', 2, 27);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (82, 'nocacheheaders', 'Send No Cache Headers', 'With this option you can prevent caching of the page by the browser.', 'yesno', 'no', 3, 27);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (83, 'maxpostimages', 'Maximum Images per Post', 'Enter the maximum number of images (including smilies) a user can put in their post. Set to 0 to disable this.', 'text', '10', 8, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (84, 'maxsigimages', 'Maximum Number of Images per Signature', 'Enter the maximum number of images (including smilies) a user can put in their signature. Set to 0 to disable this.', 'text', '2', 2, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (85, 'browsingthisforum', 'Users Browsing this Forum', 'Here you can turn off the \'users browsing this forum\' feature.', 'onoff', 'on', 9, 7);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (86, 'usereferrals', 'Use Referrals System', 'Do you want to use the user referrals system on these forums?', 'yesno', 'yes', 3, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (87, 'subscribeexcerpt', 'Amount of Characters for Subscription Previews', 'How many characters of the post do you want to send with the email notification of a new reply.', 'text', '100', 9, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (93, 'cpstyle', 'Control Panel Style', 'The Default style that the control panel will use. Styles are inside the styles folder. A folder name inside that folder becomes the style title and style.css inside the style title folder is the css style file.', 'cpstyle', 'Axiom', 1, 28);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (121, 'cplanguage', 'Control Plane Language', 'The language of the control panel.', 'language', 'english', 1, 28);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (94, 'minnamelength', 'Minimum Username Length', 'The minimum number of characters a username can be when a user registers.', 'text', '3', 5, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (95, 'maxnamelength', 'Maximum Username Length', 'The maximum number of characters a username can be when a user registers.', 'text', '30', 6, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (96, 'redirects', 'Friendly Redirection Pages', 'This will enable friendly redirection pages instead of bumping the user directly to the page.', 'onoff', 'on', 4, 27);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (97, 'betweenregstime', 'Time Between Registrations', 'The amount of time (in hours) to disallow registrations for users who have already registered an account under the same ip address.', 'text', '24', 2, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (98, 'maxregsbetweentime', 'Maximum Registrations Per IP Address', 'This option allows you to set the maximum amount of times a certain user can register within the timeframe specified above.', 'text', '2', 4, 19);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (111, 'portal_showstats', 'Show forum statistics', 'Do you want to show the total number of posts, threads, members and the last registered member on the portal page?', 'yesno', 'yes', 5, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (110, 'portal_showpms', 'Show the number of PMs to users', 'Do you want to show the number of private messages the current user has in their pm system.', 'yesno', 'yes', 4, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (109, 'portal_showwelcome', 'Show the Welcome box', 'Do you want to show the welcome box to visitors / users.', 'yesno', 'yes', 3, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (108, 'portal_numannouncements', 'Number of announcements to show', 'Please enter the number of announcements to show on the main page.', 'text', '10', 2, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (103, 'portal_showstats', 'Show forum statistics', 'Do you want to show the total number of posts, threads, members and the last registered member on the portal page?', 'yesno', 'yes', 5, 29);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (104, 'portal_showwol', 'Show Whos Online', 'Do you want to show the \'whos online\' information to users when they visit the portal page?', 'yesno', 'yes', 6, 29);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (107, 'portal_announcementsfid', 'Forum ID to pull announcements from', 'Please enter the forum id (fid) of the forum you wish to pull the announcements from', 'text', '2', 1, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (106, 'portal_showdiscussionsnum', 'Number of latest discussions to show', 'Please enter the number of current forum discussions to show on the portal page.', 'text', '10', 8, 29);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (112, 'portal_showwol', 'Show Who\'s Online', 'Do you want to show the \'Who\'s online\' information to users when they visit the portal page?', 'yesno', 'yes', 6, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (113, 'portal_showsearch', 'Show Search Box', 'Do you want to show the search box, allowing users to quickly search the forums on the portal?', 'yesno', 'yes', 7, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (114, 'portal_showdiscussions', 'Show Latest Discussions', 'Do you wish to show the current forum discussions on the portal page?', 'yesno', 'yes', 8, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (115, 'portal_showdiscussionsnum', 'Number of latest discussions to show', 'Please enter the number of current forum discussions to show on the portal page.', 'text', '10', 9, 30);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (116, 'attachthumbh', 'Attached Thumbnail Maximum Height', 'Enter the width that attached thumbnails should be generated at.', 'text', '60', 12, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (117, 'attachthumbw', 'Attached Thumbnail Maximum Width', 'Enter the width that attached thumbnails should be generated at.', 'text', '60', 13, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (118, 'maxattachments', 'Maximum Attachments Per Post', 'THe maximum number of attachments a user is allowed to upload per post.', 'text', '5', 10, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (119, 'attachthumbnails', 'Show Attached Thumbnails in Posts', 'Do you want to show the generated thumbnails for attached images inside the posts?', 'yesno', 'yes', 11, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (120, 'polloptionlimit', 'Maximum Poll Option Length', 'The maximum length that each poll option can be. (Set to 0 to disable).', 'text', '250', 1, 13);"); - $db->write_query("INSERT INTO `settings` (`sid`, `name`, `title`, `description`, `optionscode`, `value`, `disporder`, `gid`) VALUES (122, 'timezoneoffset', 'Default Timezone Offset', 'Here you can set the default timezone offset for guests and members using the default offset.', 'text', '+10', 5, 3);"); - - $output->print_contents("$contents

    Please click next to continue with the upgrade process.

    "); - $output->print_footer("1_done"); -} diff --git a/html/forums/install/resources/upgrade10.php b/html/forums/install/resources/upgrade10.php deleted file mode 100644 index 43ade94..0000000 --- a/html/forums/install/resources/upgrade10.php +++ /dev/null @@ -1,39 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade10_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - - $db->write_query("UPDATE ".TABLE_PREFIX."templates SET version='0' WHERE version=''"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates CHANGE version version int unsigned NOT NULL default '0'"); - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("10_done"); -} - diff --git a/html/forums/install/resources/upgrade11.php b/html/forums/install/resources/upgrade11.php deleted file mode 100644 index b10f7f6..0000000 --- a/html/forums/install/resources/upgrade11.php +++ /dev/null @@ -1,73 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade11_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - - $query = $db->simple_select("templates", "*", "title IN ('showthread_inlinemoderation','showthread_ratethread','editpost','newreply','usercp_drafts','newthread','usercp_options','forumdisplay_inlinemoderation','report','private_empty','usercp_profile','usercp_attachments','usercp_usergroups_joingroup','usercp_avatar','usercp_avatar_gallery','usercp_usergroups_memberof','managegroup','managegroup_adduser','managegroup_joinrequests','private_send','polls_editpoll','private_archive','calendar_addevent','moderation_inline_deleteposts','private_tracking','moderation_threadnotes','showthread_quickreply','member_emailuser','moderation_reports','member_login','index_loginform','moderation_deletethread','moderation_mergeposts','polls_newpoll','member_register_agreement','usercp_password','usercp_email','reputation_add','moderation_deletepoll','usercp_changeavatar','usercp_notepad','member_resetpassword','member_lostpw','usercp_changename','moderation_deleteposts','moderation_split','sendthread','usercp_editsig','private_read','error_nopermission','private_folders','moderation_move','moderation_merge','member_activate','usercp_editlists','calendar_editevent','member_resendactivation','moderation_inline_deletethreads','moderation_inline_movethreads','moderation_inline_mergeposts','moderation_inline_splitposts','member_register','showthread_moderationoptions','headerinclude','private','forumdisplay_threadlist_inlineedit_js')"); - while($template = $db->fetch_array($query)) - { - if($template['title'] == "private_read") - { - $template['template'] = str_replace("private.php?action=delete&pmid={\$pm['pmid']}", "private.php?action=delete&pmid={\$pm['pmid']}&my_post_key={\$mybb->post_code}", $template['template']); - } - elseif($template['title'] == "showthread_moderationoptions") - { - $template['template'] = str_replace('', ' -', $template['template']); - - $template['template'] = str_replace('moderation.php?action=\'+this.options[this.selectedIndex].value+\'&tid={$tid}&modtype=thread', 'moderation.php?action=\'+this.options[this.selectedIndex].value+\'&tid={$tid}&modtype=thread&my_post_key={$mybb->post_code}', $template['template']); - } - elseif($template['title'] == "headerinclude") - { - $template['template'] = str_replace('var cookieDomain = "{$mybb->settings[\'cookiedomain\']}";', 'var my_post_key = \'{$mybb->post_code}\'; -var cookieDomain = "{$mybb->settings[\'cookiedomain\']}";', $template['template']); - } - elseif($template['title'] == "forumdisplay_threadlist_inlineedit_js") - { - $template['template'] = str_replace('"xmlhttp.php?action=edit_subject"', '"xmlhttp.php?action=edit_subject&my_post_key="+my_post_key', $template['template']); - } - else - { - // Remove any duplicates - $template['template'] = str_replace("post_code}\" />", "", $template['template']); - - $template['template'] = preg_replace("##i", "\npost_code}\" />", $template['template']); - } - - // Update MyBB Javascript versions (to clear cache) - $template['template'] = str_replace("?ver=121", "?ver=1212", $template['template']); - - $db->update_query("templates", array('template' => $db->escape_string($template['template']), 'version' => '1212'), "tid='{$template['tid']}'", 1); - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("11_done"); -} - diff --git a/html/forums/install/resources/upgrade12.php b/html/forums/install/resources/upgrade12.php deleted file mode 100644 index fef15fe..0000000 --- a/html/forums/install/resources/upgrade12.php +++ /dev/null @@ -1,1997 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0, - "requires_deactivated_plugins" => 1, -); - -@set_time_limit(0); - -// We need to globalize $db here because when this script is called -// during load_module $db is not globalized in the function -global $db; - -// FIRST STEP IS FOR INTEGER CONVERSION PROJECT - -function upgrade12_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Integer Conversion Project"); - - $perpage = 10000; - - $to_int = array( - "announcements" => array("aid", "allowhtml", "allowmycode", "allowsmilies"), - "forumpermissions" => array("pid", "canview","canviewthreads","candlattachments","canpostthreads","canpostreplys","canpostattachments","canratethreads","caneditposts","candeleteposts","candeletethreads","caneditattachments","canpostpolls","canvotepolls","cansearch"), - "forums" => array("fid", "active","open","allowhtml","allowmycode","allowsmilies","allowimgcode","allowpicons","allowtratings","usepostcounts","showinjump","modposts","modthreads","modattachments","overridestyle"), - "groupleaders" => array("lid", "canmanagemembers","canmanagerequests"), - "helpdocs" => array("hid", "usetranslation","enabled"), - "helpsections" => array("sid", "usetranslation","enabled"), - "moderators" => array("mid", "caneditposts","candeleteposts","canviewips","canopenclosethreads","canmanagethreads","canmovetononmodforum"), - "mycode" => array("cid", "active"), - "polls" => array("pid", "closed","multiple","public"), - "posts" => array("pid", "includesig","smilieoff"), - "privatemessages" => array("pmid", "includesig","smilieoff"), - "profilefields" => array("fid", "required","editable","hidden"), - "smilies" => array("sid", "showclickable"), - "usergroups" => array("gid","isbannedgroup","canview","canviewthreads","canviewprofiles","candlattachments","canpostthreads","canpostreplys","canpostattachments","canratethreads","caneditposts","candeleteposts","candeletethreads","caneditattachments","canpostpolls","canvotepolls","canusepms","cansendpms","cantrackpms","candenypmreceipts","cansendemail","canviewmemberlist","canviewcalendar","canviewonline","canviewwolinvis","canviewonlineips","cancp","issupermod","cansearch","canusercp","canuploadavatars","canratemembers","canchangename","showforumteam","usereputationsystem","cangivereputations","candisplaygroup","cancustomtitle"), - "users" => array("uid","allownotices","hideemail","invisible","receivepms","pmpopup","pmnotify","remember","showsigs","showavatars","showquickreply","showredirect","away"), - "threads" => array("tid", "closed") - ); - - if(!$db->field_exists('pmpopup', "users")) - { - $pmpopup_key = array_search('pmpopup', $to_int['users']); - if($pmpopup_key) - { - unset($to_int['users'][$pmpopup_key]); - } - } - - // Continuing? - if($mybb->input['last_table']) - { - $current_table = $mybb->input['last_table']; - } - else - { - $current_table = array_keys($to_int); - $current_table = $current_table[0]; - echo "

    MyBB 1.4 represents a huge leap forward for the MyBB project.

    Due to this, lots of information in the database needs to be converted to a new format.

    "; - } - - echo "

    MyBB is now currently converting a section of data to the new format, this may take a while.

    "; - - $remaining = $perpage; - - $final_table = array_keys($to_int); - $final_table = $final_table[count($final_table)-1]; - - $next_act = "12_dbchanges"; - - $start = $mybb->get_input('start', MyBB::INPUT_INT); - $count = $mybb->input['count']; - - foreach($to_int as $table => $columns) - { - if($table == $current_table) - { - $form_fields['last_table'] = $current_table; - if($remaining <= 0) - { - break; - } - $columns_sql = implode(",", $columns); - $primary_key = $columns[0]; - if(!$mybb->input['count']) - { - $query = $db->simple_select($table, "COUNT({$primary_key}) AS count"); - $count = $form_fields['count'] = $db->fetch_field($query, "count"); - } - if($start <= $count) - { - $end = $start+$perpage; - if($end > $count) $end = $count; - echo "

    {$table}: Converting {$start} to {$end} of {$count}

    "; - flush(); - $form_fields['start'] = $perpage+$start; - - $query = $db->simple_select($table, $columns_sql, "", array('order_by' => $primary_key, 'limit_start' => $start, 'limit' => $remaining)); - while($row = $db->fetch_array($query)) - { - $updated_row = array(); - foreach($columns as $column) - { - if($column == $primary_key || is_int($row[$column])) continue; - if($row[$column] == "yes" || $row[$column] == "on") - { - $updated_row[$column] = 1; - } - else if($row[$column] == "off" || $row[$column] == "no" || $row[$column] == 'new' || $row[$column] == "") - { - $updated_row[$column] = 0; - } - } - if(count($updated_row) > 0) - { - $db->update_query($table, $updated_row, "{$primary_key}={$row[$primary_key]}"); - } - --$remaining; - } - } - else - { - echo "

    {$table}: Converting column type

    "; - flush(); - $change_column = array(); - foreach($columns as $column) - { - // Closed does not get converted to an int - if($column == $primary_key || ($table == "threads" && $column == "closed")) - { - continue; - } - $change_column[] = "MODIFY {$column} int(1) NOT NULL default '0'"; - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."{$table} ".implode(", ", $change_column)); - - if($table == $final_table) - { - // Finished, after all this! - $next_act = "12_dbchanges1"; - } - else - { - $tbl_keys = array_keys($to_int); - $current = array_search($current_table, $tbl_keys); - $form_fields['last_table'] = $current_table = $tbl_keys[$current+1]; - $form_fields['start'] = $start = 0; - $form_fields['count'] = $count = $mybb->input['count'] = 0; - } - } - } - } - - // Still converting - if($next_act == "12_dbchanges") - { - echo "

    Done

    "; - echo "

    Click next to continue with the integer conversion process.

    "; - foreach($form_fields as $key => $val) - { - echo ""; - } - global $footer_extra; - $footer_extra = ""; - $output->print_footer($next_act); - } - else - { - // Convert settings table - $query = $db->write_query("UPDATE ".TABLE_PREFIX."settings SET value=1 WHERE value='yes' OR value='on'"); - $query = $db->write_query("UPDATE ".TABLE_PREFIX."settings SET value=0 WHERE value='no' OR value='off'"); - echo "

    Done

    "; - echo "

    The integrer conversion process is now complete.

    "; - echo "

    Click next to continue with the upgrade process.

    "; - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($next_act); - } -} - -function upgrade12_dbchanges1() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - echo "

    Adding index to private messages table ... "; - flush(); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages ADD INDEX ( `uid` )"); - - echo "done.

    "; - - $contents = "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges_post1"); -} - -function upgrade12_dbchanges_post1() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - echo "

    Adding index to posts table ... "; - flush(); - - // This will take a LONG time on huge post databases, so we only run it isolted from most of the other queries - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD INDEX ( `visible` )"); - - echo "done.

    "; - flush(); - - $contents = "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges_post2"); -} - -function upgrade12_dbchanges_post2() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - - if($db->field_exists('longipaddress', "posts")) - { - echo "

    Dropping longipaddress column in posts table ... "; - flush(); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts DROP longipaddress;"); - - echo "done.

    "; - flush(); - } - - echo "

    Adding longipaddress column to posts table ... "; - flush(); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD longipaddress int(11) NOT NULL default '0' AFTER ipaddress"); - - echo "done.

    "; - flush(); - - $contents = "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges_user"); -} - -function upgrade12_dbchanges_user() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - echo "

    Adding index to users table ... "; - flush(); - - // This will take a LONG time on huge user databases, so we only run it isolted from most of the other queries - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX ( `lastvisit` )"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX ( `regdate` )"); - - echo "done.

    "; - flush(); - - $contents = "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges2"); -} - -function upgrade12_dbchanges2() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - if($db->field_exists('recipients', "privatemessages")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages DROP recipients;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages ADD recipients text NOT NULL AFTER fromid"); - - if($db->field_exists('deletetime', "privatemessages")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages DROP deletetime;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages ADD deletetime bigint(30) NOT NULL default '0' AFTER dateline"); - - if($db->field_exists('maxpmrecipients', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP maxpmrecipients;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD maxpmrecipients int(4) NOT NULL default '5' AFTER pmquota"); - - if($db->field_exists('canwarnusers', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP canwarnusers;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD canwarnusers int(1) NOT NULL default '0' AFTER cancustomtitle"); - - if($db->field_exists('lastip', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP lastip;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD lastip varchar(50) NOT NULL default '' AFTER regip"); - - - - if($db->field_exists('coppauser', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP coppauser;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD coppauser int(1) NOT NULL default '0'"); - - if($db->field_exists('classicpostbit', 'users')) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP classicpostbit;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD classicpostbit int(1) NOT NULL default '0'"); - - if($db->field_exists('canreceivewarnings', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP canreceivewarnings;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD canreceivewarnings int(1) NOT NULL default '0' AFTER canwarnusers"); - - if($db->field_exists('maxwarningsday', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP maxwarningsday;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD maxwarningsday int(3) NOT NULL default '3' AFTER canreceivewarnings"); - - $db->update_query("usergroups", array('canreceivewarnings' => 1), "cancp != 1"); - $db->update_query("usergroups", array('maxwarningsday' => 3, 'canwarnusers' => 1), "cancp=1 OR issupermod=1 OR gid=6"); // Admins, Super Mods and Mods - - if($db->field_exists('canmodcp', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP canmodcp;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD canmodcp int(1) NOT NULL default '0' AFTER maxwarningsday"); - $db->update_query("usergroups", array('canmodcp' => 1), "cancp=1 OR issupermod=1 OR gid='6'"); // Admins, Super Mods and Mods - - if($db->field_exists('newpms', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP newpms;"); - } - - if($db->field_exists('keywords', "searchlog")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."searchlog DROP keywords;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."searchlog ADD keywords text NOT NULL AFTER querycache"); - - if($db->field_exists('canaddpublicevents', "usergroups") && !$db->field_exists('canaddevents', "usergroups")) - { - $db->update_query("usergroups", array('canaddpublicevents' => 0), "canaddpublicevents='no'"); - $db->update_query("usergroups", array('canaddpublicevents' => 1), "canaddpublicevents='yes'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups CHANGE canaddpublicevents canaddevents int(1) NOT NULL default '0';"); - } - - if($db->field_exists('canaddprivateevents', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP canaddprivateevents;"); - } - - if($db->field_exists('canbypasseventmod', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP canbypasseventmod;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD canbypasseventmod int(1) NOT NULL default '0' AFTER canaddevents;"); - - if($db->field_exists('canmoderateevents', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP canmoderateevents;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD canmoderateevents int(1) NOT NULL default '0' AFTER canbypasseventmod;"); - $db->update_query("usergroups", array('canbypasseventmod' => 1, 'canmoderateevents' => 1), "cancp=1 OR issupermod=1"); - $db->update_query("usergroups", array('canbypasseventmod' => 0, 'canmoderateevents' => 0), "cancp=0 AND issupermod=0"); - $db->update_query("usergroups", array('canaddevents' => 0), "gid='1'"); - - $db->drop_table("maillogs"); - $db->drop_table("mailerrors"); - $db->drop_table("promotions"); - $db->drop_table("promotionlogs"); - $db->drop_table("massemails"); - - $collation = $db->build_create_table_collation(); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."massemails ( - mid int unsigned NOT NULL auto_increment, - uid int unsigned NOT NULL default '0', - subject varchar(200) NOT NULL default '', - message text NOT NULL, - htmlmessage text NOT NULL, - type tinyint(1) NOT NULL default '0', - format tinyint(1) NOT NULL default '0', - dateline bigint(30) NOT NULL default '0', - senddate bigint(30) NOT NULL default '0', - status tinyint(1) NOT NULL default '0', - sentcount int unsigned NOT NULL default '0', - totalcount int unsigned NOT NULL default '0', - conditions text NOT NULL, - perpage smallint(4) NOT NULL default '50', - PRIMARY KEY(mid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."maillogs ( - mid int unsigned NOT NULL auto_increment, - subject varchar(200) not null default '', - message TEXT NOT NULL, - dateline bigint(30) NOT NULL default '0', - fromuid int unsigned NOT NULL default '0', - fromemail varchar(200) not null default '', - touid bigint(30) NOT NULL default '0', - toemail varchar(200) NOT NULL default '', - tid int unsigned NOT NULL default '0', - ipaddress varchar(20) NOT NULL default '', - PRIMARY KEY(mid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."mailerrors( - eid int unsigned NOT NULL auto_increment, - subject varchar(200) NOT NULL default '', - message TEXT NOT NULL, - toaddress varchar(150) NOT NULL default '', - fromaddress varchar(150) NOT NULL default '', - dateline bigint(30) NOT NULL default '0', - error text NOT NULL, - smtperror varchar(200) NOT NULL default '', - smtpcode int(5) NOT NULL default '0', - PRIMARY KEY(eid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."promotions ( - pid int unsigned NOT NULL auto_increment, - title varchar(120) NOT NULL default '', - description text NOT NULL, - enabled tinyint(1) NOT NULL default '1', - logging tinyint(1) NOT NULL default '0', - posts int NOT NULL default '0', - posttype char(2) NOT NULL default '', - registered int NOT NULL default '0', - registeredtype varchar(20) NOT NULL default '', - reputations int NOT NULL default '0', - reputationtype char(2) NOT NULL default '', - requirements varchar(200) NOT NULL default '', - originalusergroup varchar(120) NOT NULL default '0', - newusergroup smallint unsigned NOT NULL default '0', - usergrouptype varchar(120) NOT NULL default '0', - PRIMARY KEY (pid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."promotionlogs( - plid int unsigned NOT NULL auto_increment, - pid int unsigned NOT NULL default '0', - uid int unsigned NOT NULL default '0', - oldusergroup varchar(200) NOT NULL default '0', - newusergroup smallint unsigned NOT NULL default '0', - dateline bigint(30) NOT NULL default '0', - type varchar(9) NOT NULL default 'primary', - PRIMARY KEY(plid) - ) ENGINE=MyISAM{$collation};"); - - if($db->field_exists('maxemails', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP maxemails;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD maxemails int(3) NOT NULL default '5' AFTER cansendemail"); - - if($db->field_exists('parseorder', "mycode")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."mycode DROP parseorder;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."mycode ADD parseorder smallint unsigned NOT NULL default '0' AFTER active"); - - if($db->field_exists('mod_edit_posts', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP mod_edit_posts;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD mod_edit_posts int(1) NOT NULL default '0' AFTER modthreads"); - - if($db->field_exists('pmpopup', "users") && !$db->field_exists('pmnotice', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE pmpopup pmnotice int(1) NOT NULL default '0'"); - } - - $db->drop_table("tasks"); - $db->drop_table("tasklog"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."tasks ( - tid int unsigned NOT NULL auto_increment, - title varchar(120) NOT NULL default '', - description text NOT NULL, - file varchar(30) NOT NULL default '', - minute varchar(200) NOT NULL default '', - hour varchar(200) NOT NULL default '', - day varchar(100) NOT NULL default '', - month varchar(30) NOT NULL default '', - weekday varchar(15) NOT NULL default '', - nextrun bigint(30) NOT NULL default '0', - lastrun bigint(30) NOT NULL default '0', - enabled int(1) NOT NULL default '1', - logging int(1) NOT NULL default '0', - locked bigint(30) NOT NULL default '0', - PRIMARY KEY(tid) - ) ENGINE=MyISAM{$collation};"); - - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."tasklog ( - lid int unsigned NOT NULL auto_increment, - tid int unsigned NOT NULL default '0', - dateline bigint(30) NOT NULL default '0', - data text NOT NULL, - PRIMARY KEY(lid) - ) ENGINE=MyISAM{$collation};"); - - - include_once MYBB_ROOT."inc/functions_task.php"; - $tasks = file_get_contents(INSTALL_ROOT.'resources/tasks.xml'); - $parser = new XMLParser($tasks); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - - // Insert scheduled tasks - foreach($tree['tasks'][0]['task'] as $task) - { - $new_task = array( - 'title' => $db->escape_string($task['title'][0]['value']), - 'description' => $db->escape_string($task['description'][0]['value']), - 'file' => $db->escape_string($task['file'][0]['value']), - 'minute' => $db->escape_string($task['minute'][0]['value']), - 'hour' => $db->escape_string($task['hour'][0]['value']), - 'day' => $db->escape_string($task['day'][0]['value']), - 'weekday' => $db->escape_string($task['weekday'][0]['value']), - 'month' => $db->escape_string($task['month'][0]['value']), - 'enabled' => $db->escape_string($task['enabled'][0]['value']), - 'logging' => $db->escape_string($task['logging'][0]['value']) - ); - - $new_task['nextrun'] = fetch_next_run($new_task); - - $db->insert_query("tasks", $new_task); - $taskcount++; - } - - if($db->table_exists("favorites") && !$db->table_exists("threadsubscriptions")) - { - $db->write_query("RENAME TABLE ".TABLE_PREFIX."favorites TO ".TABLE_PREFIX."threadsubscriptions"); - } - - if($db->field_exists('fid', "threadsubscriptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsubscriptions CHANGE fid sid int unsigned NOT NULL auto_increment"); - } - - if($db->field_exists('type', "threadsubscriptions")) - { - $db->update_query("threadsubscriptions", array('type' => 0), "type='f'"); - $db->update_query("threadsubscriptions", array('type' => 1), "type='s'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsubscriptions CHANGE type notification int(1) NOT NULL default '0'"); - } - - if($db->field_exists('dateline', "threadsubscriptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsubscriptions DROP dateline;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsubscriptions ADD dateline bigint(30) NOT NULL default '0'"); - - if($db->field_exists('subscriptionkey', "threadsubscriptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsubscriptions DROP subscriptionkey;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsubscriptions ADD subscriptionkey varchar(32) NOT NULL default ''"); - - if($db->field_exists('emailnotify', "users")) - { - $db->update_query("users", array('emailnotify' => 0), "emailnotify='no' OR emailnotify='0'"); - $db->update_query("users", array('emailnotify' => 2), "emailnotify='yes' OR emailnotify='1'"); - $db->update_query("users", array('emailnotify' => 0), "emailnotify != 1 AND emailnotify != 2"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE emailnotify subscriptionmethod int(1) NOT NULL default '0'"); - } - - $db->drop_table("warninglevels"); - $db->drop_table("warningtypes"); - $db->drop_table("warnings"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."warninglevels ( - lid int unsigned NOT NULL auto_increment, - percentage int(3) NOT NULL default '0', - action text NOT NULL, - PRIMARY KEY(lid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."warningtypes ( - tid int unsigned NOT NULL auto_increment, - title varchar(120) NOT NULL default '', - points int unsigned NOT NULL default '0', - expirationtime bigint(30) NOT NULL default '0', - PRIMARY KEY(tid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."warnings ( - wid int unsigned NOT NULL auto_increment, - uid int unsigned NOT NULL default '0', - tid int unsigned NOT NULL default '0', - pid int unsigned NOT NULL default '0', - title varchar(120) NOT NULL default '', - points int unsigned NOT NULL default '0', - dateline bigint(30) NOT NULL default '0', - issuedby int unsigned NOT NULL default '0', - expires bigint(30) NOT NULL default '0', - expired int(1) NOT NULL default '0', - daterevoked bigint(30) NOT NULL default '0', - revokedby int unsigned NOT NULL default '0', - revokereason text NOT NULL, - notes text NOT NULL, - PRIMARY KEY(wid) - ) ENGINE=MyISAM{$collation};"); - - if($db->field_exists('warningpoints', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP warningpoints;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD warningpoints int(3) NOT NULL default '0' AFTER unreadpms"); - - if($db->field_exists('moderateposts', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP moderateposts;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD moderateposts int(1) NOT NULL default '0' AFTER warningpoints"); - - if($db->field_exists('moderationtime', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP moderationtime;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD moderationtime bigint(30) NOT NULL default '0' AFTER moderateposts"); - - if($db->field_exists('suspendposting', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP suspendposting;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD suspendposting int(1) NOT NULL default '0' AFTER moderationtime"); - - if($db->field_exists('suspensiontime', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP suspensiontime;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD suspensiontime bigint(30) NOT NULL default '0' AFTER suspendposting"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned CHANGE oldadditionalgroups oldadditionalgroups TEXT NOT NULL"); - - if($db->field_exists('birthdayprivacy', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP birthdayprivacy;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD birthdayprivacy varchar(4) NOT NULL default 'all' AFTER birthday"); - - if($db->field_exists('birthdayprivacy', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP birthdayprivacy;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD birthdayprivacy varchar(4) NOT NULL default 'all' AFTER birthday"); - - if($db->field_exists('longregip', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP longregip;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD longregip int(11) NOT NULL default '0' AFTER lastip"); - - if($db->field_exists('longlastip', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP longlastip;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD longlastip int(11) NOT NULL default '0' AFTER lastip"); - - // Unused column - if($db->field_exists('titles', "searchlog")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."searchlog DROP titles;"); - } - - $db->drop_table("adminlog"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."adminlog ( - uid int unsigned NOT NULL default '0', - ipaddress varchar(50) NOT NULL default '', - dateline bigint(30) NOT NULL default '0', - module varchar(50) NOT NULL default '', - action varchar(50) NOT NULL default '', - data text NOT NULL, - KEY module (module, action) - ) ENGINE=MyISAM{$collation};"); - - if($db->field_exists('data', "adminsessions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminsessions DROP data;"); - } - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminsessions ADD data TEXT NOT NULL AFTER lastactive;"); - - if($db->field_exists('isdefault', "settings")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."settings DROP isdefault;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."settings ADD isdefault int(1) NOT NULL default '0' AFTER gid;"); - - $setting_group_cache = array(); - $query = $db->simple_select("settinggroups", "gid, isdefault"); - while($settinggroup = $db->fetch_array($query)) - { - $setting_group_cache[$settinggroup['gid']] = $settinggroup['isdefault']; - } - - $query = $db->simple_select("settings", "gid, sid"); - while($setting = $db->fetch_array($query)) - { - if($setting_group_cache[$setting['gid']] == 1) - { - $db->update_query("settings", array('isdefault' => 1), "sid = '{$setting['sid']}'", 1); - } - } - - $db->update_query("settings", array('value' => 'classic'), "name='postlayout' AND value != 'horizontal'"); - - $db->update_query("settings", array('optionscode' => $db->escape_string('php -')), "name='searchtype'", 1); - - $contents = "Done

    "; - $contents .= "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges3"); -} - -function upgrade12_dbchanges3() -{ - global $db, $output, $mybb; - - $output->print_header("Converting Ban Filters"); - - echo "

    Converting existing banned IP addresses, email addresses and usernames..

    "; - flush(); - - $db->drop_table("banfilters"); - - $collation = $db->build_create_table_collation(); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."banfilters ( - fid int unsigned NOT NULL auto_increment, - filter varchar(200) NOT NULL default '', - type int(1) NOT NULL default '0', - lastuse bigint(30) NOT NULL default '0', - dateline bigint(30) NOT NULL default '0', - PRIMARY KEY (fid) - ) ENGINE=MyISAM{$collation};"); - - // Now we convert all of the old bans in to the new system! - $ban_types = array('bannedips', 'bannedemails', 'bannedusernames'); - foreach($ban_types as $type) - { - // Some people put spaces or breaks (\r\n) instead, so we should take that into account. - $mybb->settings[$type] = str_replace(array("\n", "\r\n", "\r"), ",", $mybb->settings[$type]); - - // Usernames can have spaces so don't replace those with commas. - if($type != 'bannedusernames') - { - $mybb->settings[$type] = str_replace(" ", ",", $mybb->settings[$type]); - } - - $bans = explode(",", $mybb->settings[$type]); - $bans = array_unique($bans); - $bans = array_map("trim", $bans); - foreach($bans as $ban) - { - if(!$ban) - { - continue; - } - - if($type == "bannedips") - { - $ban_type = 1; - } - else if($type == "bannedusernames") - { - $ban_type = 2; - } - else if($type == "bannedemails") - { - $ban_type = 3; - } - $new_ban = array( - "filter" => $db->escape_string($ban), - "type" => $ban_type, - "dateline" => TIME_NOW - ); - $db->insert_query("banfilters", $new_ban); - } - } - - $contents = "Done

    "; - $contents .= "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges4"); -} - -function upgrade12_dbchanges4() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - $db->drop_table("spiders"); - $db->drop_table("stats"); - - $collation = $db->build_create_table_collation(); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."spiders ( - sid int unsigned NOT NULL auto_increment, - name varchar(100) NOT NULL default '', - theme int unsigned NOT NULL default '0', - language varchar(20) NOT NULL default '', - usergroup int unsigned NOT NULL default '0', - useragent varchar(200) NOT NULL default '', - lastvisit bigint(30) NOT NULL default '0', - PRIMARY KEY(sid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."stats ( - dateline bigint(30) NOT NULL default '0', - numusers int unsigned NOT NULL default '0', - numthreads int unsigned NOT NULL default '0', - numposts int unsigned NOT NULL default '0', - PRIMARY KEY(dateline) - ) ENGINE=MyISAM{$collation};"); - - $db->insert_query("spiders", array('name' => 'GoogleBot', 'useragent' => 'google')); - $db->insert_query("spiders", array('name' => 'Lycos', 'useragent' => 'lycos')); - $db->insert_query("spiders", array('name' => 'Ask Jeeves', 'useragent' => 'ask jeeves')); - $db->insert_query("spiders", array('name' => 'Hot Bot', 'useragent' => 'slurp@inktomi')); - $db->insert_query("spiders", array('name' => 'What You Seek', 'useragent' => 'whatuseek')); - $db->insert_query("spiders", array('name' => 'Archive.org', 'useragent' => 'is_archiver')); - $db->insert_query("spiders", array('name' => 'Altavista', 'useragent' => 'scooter')); - $db->insert_query("spiders", array('name' => 'Alexa', 'useragent' => 'ia_archiver')); - $db->insert_query("spiders", array('name' => 'MSN Search', 'useragent' => 'msnbot')); - $db->insert_query("spiders", array('name' => 'Yahoo!', 'useragent' => 'yahoo! slurp')); - - // DST correction changes - $db->update_query("users", array('dst' => 1), "dst=1"); - $db->update_query("users", array('dst' => 0), "dst=0"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE dst dst INT(1) NOT NULL default '0'"); - if($db->field_exists('dstcorrection', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP dstcorrection;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD dstcorrection INT(1) NOT NULL default '0' AFTER dst"); - - $db->update_query("users", array('dstcorrection' => 2)); - - $db->update_query("adminoptions", array('cpstyle' => '')); - - if($db->field_exists('permsset', "adminoptions") && !$db->field_exists('permissions', "adminoptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions CHANGE permsset permissions TEXT NOT NULL "); - } - - $adminoptions = file_get_contents(INSTALL_ROOT.'resources/adminoptions.xml'); - $parser = new XMLParser($adminoptions); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - - // Fetch default permissions list - $default_permissions = array(); - foreach($tree['adminoptions'][0]['user'] as $users) - { - $uid = $users['attributes']['uid']; - if($uid == -4) - { - foreach($users['permissions'][0]['module'] as $module) - { - foreach($module['permission'] as $permission) - { - $default_permissions[$module['attributes']['name']][$permission['attributes']['name']] = $permission['value']; - } - } - break; - } - } - - $convert_permissions = array( - "caneditsettings" => array( - "module" => "config", - "permission" => "settings" - ), - "caneditann" => array( - "module" => "forum", - "permission" => "announcements", - ), - "caneditforums" => array( - "module" => "forum", - "permission" => "management", - ), - "canmodposts" => array( - "module" => "forum", - "permission" => "moderation_queue", - ), - "caneditsmilies" => array( - "module" => "config", - "permission" => "smilies", - ), - "caneditpicons" => array( - "module" => "config", - "permission" => "post_icons", - ), - "caneditthemes" => array( - "module" => "style", - "permission" => "themes", - ), - "canedittemps" => array( - "module" => "style", - "permission" => "templates", - ), - "caneditusers" => array( - "module" => "user", - "permission" => "view", - ), - "caneditpfields" => array( - "module" => "config", - "permission" => "profile_fields", - ), - "caneditmodactions" => array( - "module" => "config", - "permission" => "mod_tools", - ), - "caneditugroups" => array( - "module" => "user", - "permission" => "groups", - ), - "caneditaperms" => array( - "module" => "user", - "permission" => "admin_permissions", - ), - "caneditutitles" => array( - "module" => "user", - "permission" => "titles", - ), - "caneditattach" => array( - "module" => "forum", - "permission" => "attachments", - ), - "canedithelp" => array( - "module" => "config", - "permission" => "help_documents", - ), - "caneditlangs" => array( - "module" => "config", - "permission" => "languages", - ), - "canrunmaint" => array( - "module" => "tools", - "permission" => "recount_rebuild", - ), - "canrundbtools" => array( - "module" => "tools", - "permission" => "backupdb", - ), - ); - - $new_permissions = $default_permissions; - - $query = $db->simple_select("adminoptions"); - while($adminoption = $db->fetch_array($query)) - { - foreach($adminoption as $field => $value) - { - if(strtolower(substr($field, 0, 3)) != "can") - { - continue; - } - - if(array_key_exists($field, $convert_permissions)) - { - // Note: old adminoptions table is still yes/no - do not change me - if($value == "yes") - { - $value = 1; - } - else - { - $value = $default_permissions[$convert_permissions[$field]['module']][$convert_permissions[$field]['permission']]; - } - $new_permissions[$convert_permissions[$field]['module']][$convert_permissions[$field]['permission']] = $value; - } - } - - $db->update_query("adminoptions", array('permissions' => my_serialize($new_permissions)), "uid = '{$adminoption['uid']}'"); - - $new_permissions = $default_permissions; - } - - foreach($convert_permissions as $field => $value) - { - if($db->field_exists($field, "adminoptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions DROP {$field}"); - } - } - - // Set default views - if($db->field_exists('defaultviews', "adminoptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions DROP defaultviews"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions ADD defaultviews TEXT NOT NULL"); - $db->update_query("adminoptions", array('defaultviews' => my_serialize(array('user' => 1)))); - - $query = $db->simple_select("forums", "SUM(threads) AS numthreads, SUM(posts) AS numposts, SUM(unapprovedthreads) AS numunapprovedthreads, SUM(unapprovedposts) AS numunapprovedposts"); - $stats = $db->fetch_array($query); - - $query = $db->simple_select("users", "COUNT(uid) AS users"); - $stats['numusers'] = $db->fetch_field($query, 'users'); - - update_stats($stats, true); - - $contents = "Done

    "; - $contents .= "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges5"); -} - -function upgrade12_dbchanges5() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - $db->drop_table("templategroups"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."templategroups ( - gid int unsigned NOT NULL auto_increment, - prefix varchar(50) NOT NULL default '', - title varchar(100) NOT NULL default '', - PRIMARY KEY (gid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('1','calendar','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('2','editpost','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('3','forumbit','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('4','forumjump','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('5','forumdisplay','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('6','index','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('7','error','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('8','memberlist','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('9','multipage','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('10','private','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('11','portal','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('12','postbit','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('13','redirect','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('14','showthread','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('15','usercp','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('16','online','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('17','moderation','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('18','nav','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('19','search','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('20','showteam','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('21','reputation','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('22','newthread','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('23','newreply','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('24','member','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('25','warnings','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('26','global','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('27','header','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('28','managegroup','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('29','misc','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('30','modcp','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('31','php','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('32','polls','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('33','post','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('34','printthread','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('35','report','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('36','smilieinsert','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('37','stats','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('38','xmlhttp','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('39','footer','');"); - - $query = $db->query("SHOW INDEX FROM ".TABLE_PREFIX."users"); - while($ukey = $db->fetch_array($query)) - { - if($ukey['Key_name'] == "username") - { - $index = $ukey; - break; - } - } - if($index) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP KEY username"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD UNIQUE KEY username (username)"); - - if($db->field_exists('statustime', "privatemessages")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages DROP statustime;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages ADD statustime bigint(30) NOT NULL default '0' AFTER status"); - - $collation = $db->build_create_table_collation(); - - $db->drop_table("calendars"); - $db->drop_table("calendarpermissions"); - $db->drop_table("forumsread"); - $db->drop_table("adminviews"); - $db->drop_table("threadviews"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."threadviews ( - tid int unsigned NOT NULL default '0' - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."calendars ( - cid int unsigned NOT NULL auto_increment, - name varchar(100) NOT NULL default '', - disporder int unsigned NOT NULL default '0', - startofweek int(1) NOT NULL default '0', - showbirthdays int(1) NOT NULL default '0', - eventlimit int(3) NOT NULL default '0', - moderation int(1) NOT NULL default '0', - allowhtml int(1) NOT NULL default '0', - allowmycode int(1) NOT NULL default '0', - allowimgcode int(1) NOT NULL default '0', - allowsmilies int(1) NOT NULL default '0', - PRIMARY KEY(cid) - ) ENGINE=MyISAM{$collation};"); - - $calendar_array = array( - 'name' => 'Default Calendar', - 'disporder' => 1, - 'startofweek' => 0, - 'showbirthdays' => 1, - 'eventlimit' => 4, - 'moderation' => 0, - 'allowhtml' => 0, - 'allowmycode' => 1, - 'allowimgcode' => 1, - 'allowsmilies' => 1 - ); - $db->insert_query("calendars", $calendar_array); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."calendarpermissions ( - cid int unsigned NOT NULL default '0', - gid int unsigned NOT NULL default '0', - canviewcalendar int(1) NOT NULL default '0', - canaddevents int(1) NOT NULL default '0', - canbypasseventmod int(1) NOT NULL default '0', - canmoderateevents int(1) NOT NULL default '0' - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."forumsread ( - fid int unsigned NOT NULL default '0', - uid int unsigned NOT NULL default '0', - dateline int(10) NOT NULL default '0', - KEY dateline (dateline), - UNIQUE KEY fid (fid,uid) - ) ENGINE=MyISAM{$collation};"); - - if($db->field_exists('dateuploaded', "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP dateuploaded;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments ADD dateuploaded bigint(30) NOT NULL default '0' AFTER downloads"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."adminviews ( - vid int unsigned NOT NULL auto_increment, - uid int unsigned NOT NULL default '0', - title varchar(100) NOT NULL default '', - type varchar(6) NOT NULL default '', - visibility int(1) NOT NULL default '0', - `fields` text NOT NULL, - conditions text NOT NULL, - sortby varchar(20) NOT NULL default '', - sortorder varchar(4) NOT NULL default '', - perpage int(4) NOT NULL default '0', - view_type varchar(6) NOT NULL default '', - PRIMARY KEY(vid) - ) ENGINE=MyISAM{$collation};"); - - $views = file_get_contents(INSTALL_ROOT.'resources/adminviews.xml'); - $parser = new XMLParser($views); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - - // Insert admin views - foreach($tree['adminviews'][0]['view'] as $view) - { - $fields = array(); - foreach($view['fields'][0]['field'] as $field) - { - $fields[] = $field['attributes']['name']; - } - $conditions = array(); - if($view['conditions'][0]['condition']) - { - foreach($view['conditions'][0]['condition'] as $condition) - { - if(!$condition['value']) continue; - if($condition['attributes']['is_serialized'] == 1) - { - $condition['value'] = my_unserialize($condition['value']); - } - $conditions[$condition['attributes']['name']] = $condition['value']; - } - } - $new_view = array( - "uid" => 0, - "type" => $db->escape_string($view['attributes']['type']), - "visibility" => (int)$view['attributes']['visibility'], - "title" => $db->escape_string($view['title'][0]['value']), - "fields" => $db->escape_string(my_serialize($fields)), - "conditions" => $db->escape_string(my_serialize($conditions)), - "sortby" => $db->escape_string($view['sortby'][0]['value']), - "sortorder" => $db->escape_string($view['sortorder'][0]['value']), - "perpage" => (int)$view['perpage'][0]['value'], - "view_type" => $db->escape_string($view['view_type'][0]['value']) - ); - $db->insert_query("adminviews", $new_view); - $view_count++; - } - - $avatardimensions = str_replace('x', '|', my_strtolower($mybb->settings['postmaxavatarsize'])); - - $db->simple_select("users", "uid", "avatar != '' AND avatardimensions = ''"); - while($user = $db->fetch_array($query)) - { - $db->update_query("users", array('avatardimensions' => $avatardimensions), "uid='{$user['uid']}'", 1); - } - - $contents = "Done

    "; - $contents .= "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_redoconfig"); -} - -function upgrade12_redoconfig() -{ - global $db, $output, $orig_config, $mybb; - - $config = $orig_config; - - $output->print_header("Rewriting config.php"); - - if(!is_array($config['database'])) - { - // Backup our old Config file - @copy(MYBB_ROOT."inc/config.php", MYBB_ROOT."inc/config.backup.php"); - - $fh = @fopen(MYBB_ROOT."inc/config.php", "w"); - if(!$fh) - { - echo "

    Unable to open inc/config.php
    Before the upgrade process can continue, you need to changes the permissions of inc/config.php so it is writable.

    "; - $output->print_footer("12_redoconfig"); - exit; - } - - if(!$config['memcache_host']) - { - $config['memcache_host'] = "localhost"; - } - - if(!$config['memcache_port']) - { - $config['memcache_port'] = 11211; - } - - $comment = ""; - - if(!$db->db_encoding || !$config['db_encoding']) - { - $comment = " // "; - } - - if(!$config['db_encoding']) - { - $config['db_encoding'] = "utf8"; - } - - $configdata = " 365, // Administrator logs - 'mod_logs' => 0, // Moderator logs - 'task_logs' => 30, // Scheduled task logs - 'mail_logs' => 180, // Mail error logs - 'user_mail_logs' => 180, // User mail logs - 'promotion_logs' => 180 // Promotion logs -); - -?".">"; - fwrite($fh, $configdata); - fclose($fh); - } - echo "

    The configuration file has successfully been rewritten.

    "; - echo "

    Click next to continue with the upgrade process.

    "; - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("12_dbchanges6"); -} - -function upgrade12_dbchanges6() -{ - global $db, $output; - - $output->print_header("Post IP Conversion"); - - if(!$_POST['ipspage']) - { - $ipp = 5000; - } - else - { - $ipp = (int)$_POST['ipspage']; - } - - if($_POST['ipstart']) - { - $startat = (int)$_POST['ipstart']; - $upper = $startat+$ipp; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $ipp; - $lower = 1; - } - - $query = $db->simple_select("posts", "COUNT(pid) AS ipcount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['ipcount']) - { - $upper = $cnt['ipcount']; - } - - echo "

    Converting ip {$lower} to {$upper} ({$cnt['ipcount']} Total)

    "; - flush(); - - $ipaddress = false; - - $query = $db->simple_select("posts", "ipaddress, longipaddress, pid", "", array('limit_start' => $lower, 'limit' => $ipp)); - while($post = $db->fetch_array($query)) - { - // Have we already converted this ip? - if(!$post['longipaddress']) - { - $db->update_query("posts", array('longipaddress' => my_ip2long($post['ipaddress'])), "pid = '{$post['pid']}'"); - } - $ipaddress = true; - } - - $remaining = $upper-$cnt['ipcount']; - if($remaining && $ipaddress) - { - $nextact = "12_dbchanges6"; - $startat = $startat+$ipp; - $contents = "

    Done. Click Next to move on to the next set of post ips.

    "; - } - else - { - $nextact = "12_dbchanges7"; - $contents = "

    Done

    All post ips have been converted to the new ip format. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - -function upgrade12_dbchanges7() -{ - global $db, $output; - - $output->print_header("User IP Conversion"); - - if(!$_POST['ipspage']) - { - $ipp = 5000; - } - else - { - $ipp = (int)$_POST['ipspage']; - } - - if($_POST['ipstart']) - { - $startat = (int)$_POST['ipstart']; - $upper = $startat+$ipp; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $ipp; - $lower = 1; - } - - $query = $db->simple_select("users", "COUNT(uid) AS ipcount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['ipcount']) - { - $upper = $cnt['ipcount']; - } - - $contents .= "

    Converting ip {$lower} to {$upper} ({$cnt['ipcount']} Total)

    "; - - $ipaddress = false; - $update_array = array(); - - $query = $db->simple_select("users", "regip, lastip, longlastip, longregip, uid", "", array('limit_start' => $lower, 'limit' => $ipp)); - while($user = $db->fetch_array($query)) - { - // Have we already converted this ip? - if(!$user['longregip']) - { - $update_array['longregip'] = (int)my_ip2long($user['regip']); - } - - if(!$user['longlastip']) - { - $update_array['longlastip'] = (int)my_ip2long($user['lastip']); - } - - if(!empty($update_array)) - { - $db->update_query("users", $update_array, "uid = '{$user['uid']}'"); - } - - $update_array = array(); - $ipaddress = true; - } - - $remaining = $upper-$cnt['ipcount']; - if($remaining && $ipaddress) - { - $nextact = "12_dbchanges7"; - $startat = $startat+$ipp; - $contents .= "

    Done. Click Next to move on to the next set of user ips.

    "; - } - else - { - $nextact = "12_dbchanges8"; - $contents .= "

    Done

    All user ips have been converted to the new ip format. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - -function upgrade12_dbchanges8() -{ - global $db, $output; - - $output->print_header("Event Conversion"); - - if(!$_POST['eventspage']) - { - $epp = 50; - } - else - { - $epp = (int)$_POST['eventspage']; - } - - if($_POST['eventstart']) - { - $startat = (int)$_POST['eventstart']; - $upper = $startat+$epp; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $epp; - $lower = 1; - } - - $query = $db->simple_select("events", "COUNT(eid) AS eventcount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['eventcount']) - { - $upper = $cnt['eventcount']; - } - - $contents .= "

    Converting events {$lower} to {$upper} ({$cnt['eventcount']} Total)

    "; - - // Just started - add fields - if(!$db->field_exists("donecon", "events")) - { - // Add temporary column - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD donecon smallint(1) NOT NULL;"); - - if($db->field_exists('cid', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP cid;"); - } - - if($db->field_exists('visible', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP visible;"); - } - - if($db->field_exists('dateline', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP dateline;"); - } - - if($db->field_exists('starttime', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP starttime;"); - } - - if($db->field_exists('endtime', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP endtime;"); - } - - if($db->field_exists('timezone', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP timezone;"); - } - - if($db->field_exists('ignoretimezone', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP ignoretimezone;"); - } - - if($db->field_exists('usingtime', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP usingtime;"); - } - - if($db->field_exists('repeats', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP repeats;"); - } - - // Got structural changes? - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD cid int unsigned NOT NULL default '0' AFTER eid"); - - if($db->field_exists('author', "events") && !$db->field_exists('uid', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events CHANGE author uid int unsigned NOT NULL default '0'"); - } - - if($db->field_exists('subject', "events") && !$db->field_exists('name', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events CHANGE subject name varchar(120) NOT NULL default ''"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD visible int(1) NOT NULL default '0' AFTER description"); - $db->update_query("events", array('private' => 1), "private='yes' OR private='1'"); - $db->update_query("events", array('private' => 0), "private='no' OR private='0'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events CHANGE private private int(1) NOT NULL default '0'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD dateline int(10) unsigned NOT NULL default '0' AFTER private"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD starttime int(10) unsigned NOT NULL default '0' AFTER dateline"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD endtime int(10) unsigned NOT NULL default '0' AFTER starttime"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD timezone int(3) NOT NULL default '0' AFTER endtime"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD ignoretimezone int(1) NOT NULL default '0' AFTER timezone"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD usingtime int(1) NOT NULL default '0' AFTER ignoretimezone"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events ADD repeats text NOT NULL AFTER usingtime"); - } - - if($db->field_exists('date', "events")) - { - $query = $db->simple_select("events", "*", "donecon!=1", array("order_by" => "eid", "limit" => $epp)); - while($event = $db->fetch_array($query)) - { - $e_date = explode("-", $event['date']); - if(!$e_date[2]) $e_date[2] = 2005; - $starttime = gmmktime(0, 0, 0, $e_date[1], $e_date[0], $e_date[2]); - $updated_event = array( - "cid" => 1, - "visible" => 1, - "donecon" => 1, - "starttime" => $starttime, - "dateline" => $starttime - ); - $db->update_query("events", $updated_event, "eid='{$event['eid']}'", 1); - } - - $date = true; - } - else - { - $date = false; - } - - $query = $db->simple_select("events", "COUNT(eid) AS remaining", "donecon!=1"); - $remaining = $db->fetch_field($query, "remaining"); - if($remaining && $date) - { - $nextact = "12_dbchanges8"; - $startat = $startat+$epp; - $contents .= "

    Done. Click Next to move on to the next set of events.

    "; - } - else - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP donecon"); - if($db->field_exists('date', "events")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events DROP date"); - } - $nextact = "12_redothemes"; - $contents .= "

    Done

    All events have been converted to the new calendar system. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - -function upgrade12_redothemes() -{ - global $db, $output, $config, $mybb; - - $output->print_header("Converting themes"); - - if(!@is_dir(MYBB_ROOT.'cache/')) - { - @mkdir(MYBB_ROOT.'cache/', 077); - - // Add in empty index.html! - $fp = @fopen(MYBB_ROOT."cache/index.html", "w"); - @fwrite($fp, ""); - @fclose($fp); - } - $cachewritable = @fopen(MYBB_ROOT.'cache/test.write', 'w'); - if(!$cachewritable) - { - $not_writable = true; - @fclose($cachewritable); - } - else - { - @fclose($cachewritable); - @my_chmod(MYBB_ROOT.'cache', '0777'); - @my_chmod(MYBB_ROOT.'cache/test.write', '0777'); - @unlink(MYBB_ROOT.'cache/test.write'); - } - - if($not_writable) - { - echo "

    Unable to write to the cache/ directory.
    Before the upgrade process can continue you need to make sure this directory exists and is writable (chmod 777)

    "; - $output->print_footer("12_redothemes"); - exit; - } - - $not_writable = false; - if(!@is_dir(MYBB_ROOT.'cache/themes/')) - { - @mkdir(MYBB_ROOT.'cache/themes/', 077); - - // Add in empty index.html! - $fp = @fopen(MYBB_ROOT."cache/themes/index.html", "w"); - @fwrite($fp, ""); - @fclose($fp); - } - $themewritable = @fopen(MYBB_ROOT.'cache/themes/test.write', 'w'); - if(!$themewritable) - { - $not_writable = true; - @fclose($themewritable); - } - else - { - @fclose($themewritable); - @my_chmod(MYBB_ROOT.'cache/themes', '0777'); - @my_chmod(MYBB_ROOT.'cache/themes/test.write', '0777'); - @unlink(MYBB_ROOT.'cache/themes/test.write'); - } - - if($not_writable) - { - echo "

    Unable to write to the cache/themes/ directory.
    Before the upgrade process can continue you need to make sure this directory exists and is writable (chmod 777)

    "; - $output->print_footer("12_redothemes"); - exit; - } - - if($db->field_exists('themebits', "themes") && !$db->field_exists('properties', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes CHANGE themebits properties text NOT NULL"); - } - - if($db->field_exists('cssbits', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP cssbits"); - } - - if($db->field_exists('csscached', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP csscached"); - } - - if($db->field_exists('stylesheets', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP stylesheets"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes ADD stylesheets text NOT NULL AFTER properties"); - - if($db->table_exists("themestylesheets")) - { - $db->drop_table("themestylesheets"); - } - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."themestylesheets( - sid int unsigned NOT NULL auto_increment, - name varchar(30) NOT NULL default '', - tid int unsigned NOT NULL default '0', - attachedto text NOT NULL, - stylesheet text NOT NULL, - cachefile varchar(100) NOT NULL default '', - lastmodified bigint(30) NOT NULL default '0', - PRIMARY KEY(sid) - ) ENGINE=MyISAM{$collation};"); - - // Define our default stylesheets - MyBB 1.4 contains additional stylesheets that our converted themes will also need - $contents = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme.xml'); - if(file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php"; - } - else if(file_exists(MYBB_ROOT."admin/inc/functions_themes.php")) - { - require_once MYBB_ROOT."admin/inc/functions_themes.php"; - } - else - { - $output->print_error("Please make sure your admin directory is uploaded correctly."); - } - - // Import master theme - if(import_theme_xml($contents, array("tid" => 1, "no_templates" => 1, "version_compat" => 1)) === -1) - { - $output->print_error("Please make sure your install/resources/mybb_theme.xml file is uploaded correctly."); - } - - // Fetch out default stylesheets from master - $query = $db->simple_select("themes", "*", "tid=1"); - $master_theme = $db->fetch_array($query); - - $master_stylesheets = my_unserialize($master_theme['stylesheets']); - - if(is_array($master_stylesheets)) - { - // Note: 1.4 only ships with one global|global stylesheet - foreach($master_stylesheets as $location => $sheets) - { - foreach($sheets as $action => $sheets) - { - foreach($sheets as $stylesheet) - { - if($location == "global" && $action == "global") - { - continue; // Skip global - } - - $default_stylesheets[$location][$action][] = $stylesheet; - $default_stylesheets['inherited']["{$location}_{$action}"][$stylesheet] = 1; // This stylesheet is inherited from the master - } - } - } - } - - $query = $db->simple_select("themes"); - while($theme = $db->fetch_array($query)) - { - if(!$theme['css']) - { - continue; - } - - $theme['css'] .= "\n\n".$theme['extracss']; - - $theme['css'] = upgrade_css_120_to_140($theme['css']); - - - // Create stylesheets - $cache_file = cache_stylesheet($theme['tid'], "global.css", $theme['css']); - - $new_stylesheet = array( - "tid" => $theme['tid'], - "name" => "global.css", - "attachedto" => "", - "stylesheet" => $db->escape_string($theme['css']), - "cachefile" => "global.css", - "lastmodified" => TIME_NOW - ); - $sid = $db->insert_query("themestylesheets", $new_stylesheet); - $css_url = "css.php?stylesheet={$sid}"; - if($cache_file) - { - $css_url = $cache_file; - } - - // Now we go and update the stylesheets column for this theme - $stylesheets = $default_stylesheets; - - // Add in our local for this theme - $stylesheets['global']['global'][] = $css_url; - - // Update the theme - $db->update_query("themes", array("stylesheets" => $db->escape_string(my_serialize($stylesheets))), "tid='{$theme['tid']}'"); - } - - if($db->field_exists('css', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP css"); - } - - if($db->field_exists('extracss', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP extracss"); - } - - // We need to replace this for our themes css to show up - // must be present in the old template (it usually is) - $query = $db->simple_select("templates", "tid,template", "title='headerinclude'"); - while($template = $db->fetch_array($query)) - { - $template['template'] = str_replace('', '{$stylesheets}', $template['template']); - - $db->update_query("templates", array('template' => $db->escape_string($template['template'])), "tid='{$template['tid']}'"); - } - - echo "

    Your themes have successfully been converted to the new theme system.

    "; - echo "

    Click next to continue with the upgrade process.

    "; - - global $footer_extra; - //$footer_extra = ""; - - $output->print_footer("12_done"); -} diff --git a/html/forums/install/resources/upgrade13.php b/html/forums/install/resources/upgrade13.php deleted file mode 100644 index 725516b..0000000 --- a/html/forums/install/resources/upgrade13.php +++ /dev/null @@ -1,237 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade13_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - if($db->type == "mysql" || $db->type == "mysqli") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminsessions ADD INDEX ( `uid` )"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminsessions ADD INDEX ( `dateline` )"); - } - - if($db->type != "sqlite") - { - if($db->index_exists("users", "username")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP KEY username"); - } - - $query = $db->simple_select("users", "username, uid", "1=1 GROUP BY uid, username HAVING count(*) > 1"); - while($user = $db->fetch_array($query)) - { - $db->update_query("users", array('username' => $user['username']."_dup".$user['uid']), "uid='{$user['uid']}'", 1); - } - - if($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD UNIQUE(username)"); - } - else - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD UNIQUE KEY username (username)"); - } - } - - if($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE longregip longregip int NOT NULL default '0'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE longlastip longlastip int NOT NULL default '0'"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE longipaddress longipaddress int NOT NULL default '0'"); - } - else - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE longregip longregip int(11) NOT NULL default '0'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE longlastip longlastip int(11) NOT NULL default '0'"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE longipaddress longipaddress int(11) NOT NULL default '0'"); - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("13_dbchanges1"); -} - -function upgrade13_dbchanges1() -{ - global $db, $output; - - $output->print_header("Post IP Repair Conversion"); - - if(!$_POST['ipspage']) - { - $ipp = 5000; - } - else - { - $ipp = (int)$_POST['ipspage']; - } - - if($_POST['ipstart']) - { - $startat = (int)$_POST['ipstart']; - $upper = $startat+$ipp; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $ipp; - $lower = 1; - } - - $query = $db->simple_select("posts", "COUNT(pid) AS ipcount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['ipcount']) - { - $upper = $cnt['ipcount']; - } - - echo "

    Repairing ip {$lower} to {$upper} ({$cnt['ipcount']} Total)

    "; - flush(); - - $ipaddress = false; - - $query = $db->simple_select("posts", "ipaddress, longipaddress, pid", "", array('limit_start' => $lower, 'limit' => $ipp)); - while($post = $db->fetch_array($query)) - { - // Have we already converted this ip? - if(my_ip2long($post['ipaddress']) < 0) - { - $db->update_query("posts", array('longipaddress' => my_ip2long($post['ipaddress'])), "pid = '{$post['pid']}'"); - } - $ipaddress = true; - } - - $remaining = $upper-$cnt['ipcount']; - if($remaining && $ipaddress) - { - $nextact = "13_dbchanges1"; - $startat = $startat+$ipp; - $contents = "

    Done. Click Next to move on to the next set of post ips.

    "; - } - else - { - $nextact = "13_dbchanges2"; - $contents = "

    Done

    All post ips have been converted to the new ip format. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - -function upgrade13_dbchanges2() -{ - global $db, $output; - - $output->print_header("User IP Repair Conversion"); - - if(!$_POST['ipspage']) - { - $ipp = 5000; - } - else - { - $ipp = (int)$_POST['ipspage']; - } - - if($_POST['ipstart']) - { - $startat = (int)$_POST['ipstart']; - $upper = $startat+$ipp; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $ipp; - $lower = 1; - } - - $query = $db->simple_select("users", "COUNT(uid) AS ipcount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['ipcount']) - { - $upper = $cnt['ipcount']; - } - - $contents .= "

    Repairing ip {$lower} to {$upper} ({$cnt['ipcount']} Total)

    "; - - $ipaddress = false; - $update_array = array(); - - $query = $db->simple_select("users", "regip, lastip, longlastip, longregip, uid", "", array('limit_start' => $lower, 'limit' => $ipp)); - while($user = $db->fetch_array($query)) - { - // Have we already converted this ip? - if(my_ip2long($user['regip']) < 0) - { - $update_array['longregip'] = (int)my_ip2long($user['regip']); - } - - if(my_ip2long($user['lastip']) < 0) - { - $update_array['longlastip'] = (int)my_ip2long($user['lastip']); - } - - if(!empty($update_array)) - { - $db->update_query("users", $update_array, "uid = '{$user['uid']}'"); - } - - $update_array = array(); - $ipaddress = true; - } - - $remaining = $upper-$cnt['ipcount']; - if($remaining && $ipaddress) - { - $nextact = "13_dbchanges2"; - $startat = $startat+$ipp; - $contents .= "

    Done. Click Next to move on to the next set of user ips.

    "; - } - else - { - $nextact = "13_done"; - $contents .= "

    Done

    All user ips have been converted to the new ip format. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - diff --git a/html/forums/install/resources/upgrade14.php b/html/forums/install/resources/upgrade14.php deleted file mode 100644 index cacd80d..0000000 --- a/html/forums/install/resources/upgrade14.php +++ /dev/null @@ -1,216 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade14_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - // TODO: Need to check for PostgreSQL / SQLite support - - if($db->field_exists('codepress', "adminoptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions DROP codepress;"); - } - - if($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions ADD codepress int NOT NULL default '1' AFTER cpstyle"); - } - else - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions ADD codepress int(1) NOT NULL default '1' AFTER cpstyle"); - } - - if($db->type != "sqlite") - { - $longregip_index = $db->index_exists("users", "longregip"); - $longlastip_index = $db->index_exists("users", "longlastip"); - - if($longlastip_index == true) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP KEY longlastip"); - } - - if($longregip_index == true) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP KEY longregip"); - } - - $longipaddress_index = $db->index_exists("posts", "longipaddress"); - if($longipaddress_index == true) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts DROP KEY longipaddress"); - } - } - - if($db->field_exists('loginattempts', "sessions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."sessions DROP loginattempts;"); - } - - if($db->field_exists('loginattempts', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP loginattempts;"); - } - - if($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD loginattempts smallint NOT NULL default '1';"); - } - else - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD loginattempts tinyint(2) NOT NULL default '1';"); - } - - if($db->field_exists('failedlogin', "sessions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."sessions DROP failedlogin;"); - } - - if($db->field_exists('failedlogin', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP failedlogin;"); - } - - if($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD failedlogin bigint NOT NULL default '0';"); - } - else - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD failedlogin bigint(30) NOT NULL default '0';"); - } - - if($db->type == "mysql" || $db->type == "mysqli") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX longregip (longregip)"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX longlastip (longlastip)"); - } - - if($db->type == "sqlite") - { - // Because SQLite 2 nor 3 allows changing a column with a primary key constraint we have to completely rebuild the entire table - // *sigh* This is the 21st century, right? - $query = $db->simple_select("datacache"); - while($datacache = $db->fetch_array($query)) - { - $temp_datacache[$datacache['title']] = array('title' => $db->escape_string($datacache['title']), 'cache' => $db->escape_string($datacache['cache'])); - } - - $db->write_query("DROP TABLE ".TABLE_PREFIX."datacache"); - - $db->write_query("CREATE TABLE ".TABLE_PREFIX."datacache ( - title varchar(50) NOT NULL default '' PRIMARY KEY, - cache mediumTEXT NOT NULL -);"); - - reset($temp_datacache); - foreach($temp_datacache as $data) - { - $db->insert_query("datacache", $data); - } - } - else if($db->type == "pgsql") - { - if(!$db->index_exists("datacache", "title")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."datacache ADD PRIMARY KEY (title)"); - } - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("14_dbchanges1"); -} - -function upgrade14_dbchanges1() -{ - global $db, $output; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - if($db->type == "mysql" || $db->type == "mysqli") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD INDEX longipaddress (longipaddress)"); - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("14_dbchanges2"); -} - -function upgrade14_dbchanges2() -{ - global $db, $output; - - $output->print_header("Cleaning up old Settings & Groups"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - $db->delete_query("settinggroups", "name='banning' AND isdefault='0'", 1); - - $db->delete_query("settings", "name='bannedusernames'", 1); - $db->delete_query("settings", "name='bannedips'", 1); - $db->delete_query("settings", "name='bannedemails'", 1); - $db->delete_query("settings", "name='publiceventcolor'", 1); - $db->delete_query("settings", "name='privateeventcolor'", 1); - $db->delete_query("settings", "name='cssmedium'", 1); - - $db->delete_query("templates", "title='usercp_options_timezoneselect' AND sid != '-1'"); - $db->delete_query("templates", "title='moderation_reports' AND sid != '-1'"); - $db->delete_query("templates", "title='moderation_reports_report' AND sid != '-1'"); - $db->delete_query("templates", "title='moderation_reports_multipage' AND sid != '-1'"); - $db->delete_query("templates", "title='moderation_allreports' AND sid != '-1'"); - $db->delete_query("templates", "title='showthread_ratingdisplay' AND sid != '-1'"); - $db->delete_query("templates", "title='moderation_getip_adminoptions' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_eventbit_public' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_daybit_today' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_daybit' AND sid != '-1'"); - $db->delete_query("templates", "title='online_iplookup' AND sid != '-1'"); - $db->delete_query("templates", "title='online_iplookup_adminoptions' AND sid != '-1'"); - $db->delete_query("templates", "title='online_row_ip' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_eventbit_dates' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_eventbit_dates_recurring' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_eventbit_times' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_editevent_normal' AND sid != '-1'"); - $db->delete_query("templates", "title='calendar_editevent_recurring' AND sid != '-1'"); - - $db->update_query("helpdocs", array('document' => $db->escape_string("MyBB makes use of cookies to store your login information if you are registered, and your last visit if you are not. -

    Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. -

    Cookies on this forum also track the specific topics you have read and when you last read them. -

    To clear all cookies set by this forum, you can click here.")), "hid='3'", 1); - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("14_done"); -} - diff --git a/html/forums/install/resources/upgrade15.php b/html/forums/install/resources/upgrade15.php deleted file mode 100644 index dc37f2a..0000000 --- a/html/forums/install/resources/upgrade15.php +++ /dev/null @@ -1,153 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade15_dbchanges() -{ - global $db, $output, $mybb, $cache; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - if($db->type != "pgsql") - { - $db->update_query("settinggroups", array('isdefault' => '1'), "isdefault='yes'"); - $db->update_query("settinggroups", array('isdefault' => '0'), "isdefault='no'"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events CHANGE timezone timezone varchar(4) NOT NULL default '0'"); - } - - if($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."warnings ALTER COLUMN revokereason SET default ''"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."warnings ALTER COLUMN notes SET default ''"); - } - - $cache->update("internal_settings", array('encryption_key' => random_str(32))); - - if($db->type != "sqlite") - { - $ip_index = $db->index_exists("sessions", "ip"); - - if($ip_index == false) - { - if($db->type == "pgsql") - { - $db->write_query("CREATE INDEX ip ON ".TABLE_PREFIX."sessions (ip)"); - } - else - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."sessions ADD INDEX (`ip`)"); - } - } - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("15_usernameverify"); -} - -function upgrade15_usernameverify() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    WARNING - PLEASE READ THE FOLLOWING: The next step of this process will remove ALL commas (,) from the usernames of your forum whom contain them. The reason for this change is commas in usernames can make the private messages in MyBB return errors when sending to these users.

    "; - flush(); - - $contents .= "Click next to continue with the upgrade process once you have read the warning.

    "; - $output->print_contents($contents); - $output->print_footer("15_usernameupdate"); -} - -function upgrade15_usernameupdate() -{ - global $db, $output, $mybb, $plugins; - - $output->print_header("Performing Queries"); - - echo "

    Performing username updates..

    "; - flush(); - - require_once MYBB_ROOT."inc/datahandler.php"; - require_once MYBB_ROOT."inc/datahandlers/user.php"; - // Load plugin system for datahandler - require_once MYBB_ROOT."inc/class_plugins.php"; - $plugins = new pluginSystem; - - $not_renameable = array(); - - // Because commas can cause some problems with private message sending in usernames we have to remove them - $query = $db->simple_select("users", "uid, username", "username LIKE '%,%'"); - while($user = $db->fetch_array($query)) - { - $prefix = ''; - $userhandler = new UserDataHandler('update'); - - do - { - $username = str_replace(',', '', $user['username']).'_'.$prefix; - - $updated_user = array( - "uid" => $user['uid'], - "username" => $username - ); - $userhandler->set_data($updated_user); - - ++$prefix; - } - while(!$userhandler->verify_username() || $userhandler->verify_username_exists()); - - if(!$userhandler->validate_user()) - { - $not_renameable[] = htmlspecialchars_uni($user['username']); - } - else - { - $db->update_query("users", array('username' => $db->escape_string($username)), "uid='{$user['uid']}'"); - $db->update_query("posts", array('username' => $db->escape_string($username)), "uid='{$user['uid']}'"); - $db->update_query("threads", array('username' => $db->escape_string($username)), "uid='{$user['uid']}'"); - $db->update_query("threads", array('lastposter' => $db->escape_string($username)), "lastposteruid='{$user['uid']}'"); - $db->update_query("forums", array('lastposter' => $db->escape_string($username)), "lastposteruid='{$user['uid']}'"); - - update_stats(array("numusers" => "+0")); - } - } - - if(!empty($not_renameable)) - { - echo "NOTICE: The following users could not be renamed automatically. Please rename these users in the Admin CP manually after the upgrade process has finished completing:
    -
      -
    • "; - echo implode('
    • \n
    • ', $not_renameable); - echo "
    • -
    "; - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("15_done"); -} - diff --git a/html/forums/install/resources/upgrade16.php b/html/forums/install/resources/upgrade16.php deleted file mode 100644 index 584b320..0000000 --- a/html/forums/install/resources/upgrade16.php +++ /dev/null @@ -1,25 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do from 1.4.5 to 1.4.13 */ - diff --git a/html/forums/install/resources/upgrade17.php b/html/forums/install/resources/upgrade17.php deleted file mode 100644 index 49e7ea3..0000000 --- a/html/forums/install/resources/upgrade17.php +++ /dev/null @@ -1,961 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade17_dbchanges() -{ - global $db, $output, $mybb, $cache; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - echo "

    Adding index to private messages table ... "; - flush(); - - if($db->type == "mysql" || $db->type == "mysqli") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages ADD INDEX ( `toid` )"); - } - - global $footer_extra; - $footer_extra = ""; - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("17_dbchanges2"); -} - -function upgrade17_dbchanges2() -{ - global $db, $output, $mybb, $cache; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - // Update our version history first - $version_history = array(); - $dh = opendir(INSTALL_ROOT."resources"); - while(($file = readdir($dh)) !== false) - { - if(preg_match("#upgrade([0-9]+).php$#i", $file, $match)) - { - $version_history[$match[1]] = $match[1]; - } - } - sort($version_history, SORT_NUMERIC); - - // This script isn't done yet! - unset($version_history['17']); - - $cache->update("version_history", $version_history); - - if($db->field_exists('prefix', 'threads')) - { - $db->drop_column("threads", "prefix"); - } - - if($db->field_exists('loginattempts', "adminoptions")) - { - $db->drop_column("adminoptions", "loginattempts"); - } - - if($db->field_exists('loginlockoutexpiry', "adminoptions")) - { - $db->drop_column("adminoptions", "loginlockoutexpiry"); - } - - if($db->field_exists('canonlyviewownthreads', "forumpermissions")) - { - $db->drop_column("forumpermissions", "canonlyviewownthreads"); - } - - if($db->field_exists('isgroup', 'moderators')) - { - $db->drop_column("moderators", "isgroup"); - } - - if($db->field_exists('referrals', 'promotions')) - { - $db->drop_column("promotions", "referrals"); - } - - if($db->field_exists('referralstype', 'promotions')) - { - $db->drop_column("promotions", "referralstype"); - } - - if($db->field_exists('pid', 'reputation')) - { - $db->drop_column("reputation", "pid"); - } - - if($db->field_exists('allowvideocode', 'calendars')) - { - $db->drop_column("calendars", "allowvideocode"); - } - - if($db->field_exists('allowvideocode', 'forums')) - { - $db->drop_column("forums", "allowvideocode"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("threads", "prefix", "smallint NOT NULL default '0' AFTER subject"); - $db->add_column("adminoptions", "loginattempts", "int NOT NULL default '0'"); - $db->add_column("adminoptions", "loginlockoutexpiry", "int NOT NULL default '0'"); - $db->add_column("forumpermissions", "canonlyviewownthreads", "int NOT NULL default '0' AFTER canviewthreads"); - $db->add_column("moderators", "isgroup", "int NOT NULL default '0'"); - $db->add_column("promotions", "referrals", "int NOT NULL default '0' AFTER reputationtype"); - $db->add_column("promotions", "referralstype", "char(2) NOT NULL default '' AFTER referrals"); - $db->add_column("reputation", "pid", "int NOT NULL default '0'"); - $db->add_column("calendars", "allowvideocode", "int NOT NULL default '0' AFTER allowimgcode"); - $db->add_column("forums", "allowvideocode", "int NOT NULL default '0' AFTER allowimgcode"); - break; - case "sqlite": - $db->add_column("threads", "prefix", "smallint NOT NULL default '0' AFTER subject"); - $db->add_column("adminoptions", "loginattempts", "int NOT NULL default '0'"); - $db->add_column("adminoptions", "loginlockoutexpiry", "int NOT NULL default '0'"); - $db->add_column("forumpermissions", "canonlyviewownthreads", "int NOT NULL default '0' AFTER canviewthreads"); - $db->add_column("moderators", "isgroup", "int NOT NULL default '0'"); - $db->add_column("promotions", "referrals", "int NOT NULL default '0' AFTER reputationtype"); - $db->add_column("promotions", "referralstype", "varchar(2) NOT NULL default '' AFTER referrals"); - $db->add_column("reputation", "pid", "int NOT NULL default '0'"); - $db->add_column("calendars", "allowvideocode", "int(1) NOT NULL default '0' AFTER allowimgcode"); - $db->add_column("forums", "allowvideocode", "int(1) NOT NULL default '0' AFTER allowimgcode"); - break; - default: - $db->add_column("threads", "prefix", "smallint unsigned NOT NULL default '0' AFTER subject"); - $db->add_column("adminoptions", "loginattempts", "int unsigned NOT NULL default '0'"); - $db->add_column("adminoptions", "loginlockoutexpiry", "int unsigned NOT NULL default '0'"); - $db->add_column("forumpermissions", "canonlyviewownthreads", "int(1) NOT NULL default '0' AFTER canviewthreads"); - $db->add_column("moderators", "isgroup", "int(1) unsigned NOT NULL default '0'"); - $db->add_column("promotions", "referrals", "int NOT NULL default '0' AFTER reputationtype"); - $db->add_column("promotions", "referralstype", "varchar(2) NOT NULL default '' AFTER referrals"); - $db->add_column("reputation", "pid", "int unsigned NOT NULL default '0'"); - $db->add_column("calendars", "allowvideocode", "int(1) NOT NULL default '0' AFTER allowimgcode"); - $db->add_column("forums", "allowvideocode", "int(1) NOT NULL default '0' AFTER allowimgcode"); - } - - $db->update_query("forums", array('allowvideocode' => '1')); - $db->update_query("calendars", array('allowvideocode' => '1')); - - global $footer_extra; - $footer_extra = ""; - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("17_dbchanges3"); -} - -function upgrade17_dbchanges3() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - if($db->field_exists('canundovotes', 'usergroups')) - { - $db->drop_column("usergroups", "canundovotes"); - } - - if($db->field_exists('maxreputationsperuser', 'usergroups')) - { - $db->drop_column("usergroups", "maxreputationsperuser"); - } - - if($db->field_exists('maxreputationsperthread', 'usergroups')) - { - $db->drop_column("usergroups", "maxreputationsperthread"); - } - - if($db->field_exists('receivefrombuddy', 'users')) - { - $db->drop_column("users", "receivefrombuddy"); - } - - if($db->field_exists('suspendsignature', 'users')) - { - $db->drop_column("users", "suspendsignature"); - } - - if($db->field_exists('suspendsigtime', 'users')) - { - $db->drop_column("users", "suspendsigtime"); - } - - if($db->field_exists('loginattempts', 'users')) - { - $db->drop_column("users", "loginattempts"); - } - - if($db->field_exists('failedlogin', 'users')) - { - $db->drop_column("users", "failedlogin"); - } - - if($db->field_exists('usernotes', "users")) - { - $db->drop_column("users", "usernotes"); - } - - if($db->field_exists('referrals', 'users')) - { - $db->drop_column("users", "referrals"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("usergroups", "canundovotes", "int NOT NULL default '0' AFTER canvotepolls"); - $db->add_column("usergroups", "maxreputationsperuser", "bigint NOT NULL default '0' AFTER maxreputationsday"); - $db->add_column("usergroups", "maxreputationsperthread", "bigint NOT NULL default '0' AFTER maxreputationsperuser"); - $db->add_column("users", "receivefrombuddy", "int NOT NULL default '0'"); - $db->add_column("users", "suspendsignature", "int NOT NULL default '0'"); - $db->add_column("users", "suspendsigtime", "bigint NOT NULL default '0'"); - $db->add_column("users", "loginattempts", "smallint NOT NULL default '1'"); - $db->add_column("users", "failedlogin", "bigint NOT NULL default '0'"); - $db->add_column("users", "usernotes", "text NOT NULL default ''"); - $db->add_column("users", "referrals", "int NOT NULL default '0' AFTER referrer"); - break; - case "sqlite": - $db->add_column("usergroups", "canundovotes", "int NOT NULL default '0' AFTER canvotepolls"); - $db->add_column("usergroups", "maxreputationsperuser", "bigint NOT NULL default '0' AFTER maxreputationsday"); - $db->add_column("usergroups", "maxreputationsperthread", "bigint NOT NULL default '0' AFTER maxreputationsperuser"); - $db->add_column("users", "receivefrombuddy", "int NOT NULL default '0'"); - $db->add_column("users", "suspendsignature", "int NOT NULL default '0'"); - $db->add_column("users", "suspendsigtime", "bigint NOT NULL default '0'"); - $db->add_column("users", "loginattempts", "tinyint NOT NULL default '1'"); - $db->add_column("users", "failedlogin", "bigint NOT NULL default '0'"); - $db->add_column("users", "usernotes", "text NOT NULL default ''"); - $db->add_column("users", "referrals", "int NOT NULL default '0' AFTER referrer"); - break; - default: - $db->add_column("usergroups", "canundovotes", "int(1) NOT NULL default '0' AFTER canvotepolls"); - $db->add_column("usergroups", "maxreputationsperuser", "bigint(30) NOT NULL default '0' AFTER maxreputationsday"); - $db->add_column("usergroups", "maxreputationsperthread", "bigint(30) NOT NULL default '0' AFTER maxreputationsperuser"); - $db->add_column("users", "receivefrombuddy", "int(1) NOT NULL default '0'"); - $db->add_column("users", "suspendsignature", "int(1) NOT NULL default '0'"); - $db->add_column("users", "suspendsigtime", "bigint(30) NOT NULL default '0'"); - $db->add_column("users", "loginattempts", "tinyint(2) NOT NULL default '1'"); - $db->add_column("users", "failedlogin", "bigint(30) NOT NULL default '0'"); - $db->add_column("users", "usernotes", "text NOT NULL"); - $db->add_column("users", "referrals", "int unsigned NOT NULL default '0' AFTER referrer"); - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("17_dbchanges4"); -} - -function upgrade17_dbchanges4() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - if($db->field_exists('remember', 'users')) - { - $db->drop_column("users", "remember"); - } - - if($db->type != "pgsql") - { - // PgSQL doesn't support longtext - $db->modify_column("searchlog", "threads", "longtext NOT NULL"); - $db->modify_column("searchlog", "posts", "longtext NOT NULL"); - } - - if($db->field_exists("uid", "moderators") && !$db->field_exists("id", "moderators")) - { - switch($db->type) - { - case "pgsql": - $db->rename_column("moderators", "uid", "id", "int", true, "'0'"); - break; - default: - $db->rename_column("moderators", "uid", "id", "int unsigned NOT NULL default '0'"); - } - } - - if($db->table_exists("threadprefixes")) - { - $db->drop_table("threadprefixes"); - } - - if($db->table_exists("delayedmoderation")) - { - $db->drop_table("delayedmoderation"); - } - - switch($db->type) - { - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."threadprefixes ( - rid INTEGER PRIMARY KEY, - tid int NOT NULL default '0', - uid int NOT NULL default '0', - rating smallint NOT NULL default '0', - ipaddress varchar(30) NOT NULL default '' - );"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."delayedmoderation ( - did integer PRIMARY KEY, - type varchar(30) NOT NULL default '', - delaydateline bigint(30) NOT NULL default '0', - uid int(10) NOT NULL default '0', - fid smallint(5) NOT NULL default '0', - tids text NOT NULL, - dateline bigint(30) NOT NULL default '0', - inputs text NOT NULL - );"); - break; - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."threadprefixes ( - pid serial, - prefix varchar(120) NOT NULL default '', - displaystyle varchar(200) NOT NULL default '', - forums text NOT NULL, - groups text NOT NULL, - PRIMARY KEY(pid) - );"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."delayedmoderation ( - did serial, - type varchar(30) NOT NULL default '', - delaydateline bigint NOT NULL default '0', - uid int NOT NULL default '0', - fid smallint NOT NULL default '0', - tids text NOT NULL, - dateline bigint NOT NULL default '0', - inputs text NOT NULL default '', - PRIMARY KEY (did) - );"); - break; - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."threadprefixes ( - pid int unsigned NOT NULL auto_increment, - prefix varchar(120) NOT NULL default '', - displaystyle varchar(200) NOT NULL default '', - forums text NOT NULL, - groups text NOT NULL, - PRIMARY KEY(pid) - ) ENGINE=MyISAM;"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."delayedmoderation ( - did int unsigned NOT NULL auto_increment, - type varchar(30) NOT NULL default '', - delaydateline bigint(30) unsigned NOT NULL default '0', - uid int(10) unsigned NOT NULL default '0', - fid smallint(5) unsigned NOT NULL default '0', - tids text NOT NULL, - dateline bigint(30) NOT NULL default '0', - inputs text NOT NULL, - PRIMARY KEY (did) - ) ENGINE=MyISAM;"); - } - - $added_tasks = sync_tasks(); - - echo "

    Added {$added_tasks} new tasks.

    "; - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("17_dbchanges5"); -} - -function upgrade17_dbchanges5() -{ - global $db, $output, $mybb, $cache; - - if(file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; - } - else if(file_exists(MYBB_ROOT."admin/inc/functions.php")) - { - require_once MYBB_ROOT."admin/inc/functions.php"; - } - else - { - $output->print_error("Please make sure your admin directory is uploaded correctly."); - } - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - flush(); - - $db->update_query("spiders", array('name' => 'Bing'), "name='MSN Search'"); - $db->update_query("spiders", array('useragent' => 'Googlebot', 'name' => 'Google'), "useragent='google'"); - $db->update_query("spiders", array('useragent' => 'Teoma', 'name' => 'Ask.com'), "useragent='ask jeeves'"); - $db->delete_query("spiders", "name='Hot Bot'"); - $db->update_query("spiders", array('useragent' => 'archive_crawler', 'name' => 'Internet Archive'), "name='Archive.org'"); - $db->update_query("spiders", array('name' => 'Alexa Internet'), "useragent='ia_archiver'"); - $db->delete_query("spiders", "useragent='scooter'"); - $db->update_query("spiders", array('useragent' => 'Slurp'), "name='Yahoo!'"); - - $query = $db->simple_select("spiders", "COUNT(*) as numexists", "useragent='twiceler'"); - if($db->fetch_field($query, "numexists") == 0) - { - $db->insert_query("spiders", array('name' => "Cuil", 'useragent' => 'twiceler')); - } - - $query = $db->simple_select("spiders", "COUNT(*) as numexists", "useragent='Baiduspider'"); - if($db->fetch_field($query, "numexists") == 0) - { - $db->insert_query("spiders", array('name' => "Baidu", 'useragent' => 'Baiduspider')); - } - - $db->update_query("attachtypes", array('mimetype' => 'application/x-httpd-php'), "extension='php'"); - $db->update_query("attachtypes", array('mimetype' => 'text/html'), "extension='htm'"); - $db->update_query("attachtypes", array('mimetype' => 'text/html'), "extension='html'"); - $db->update_query("attachtypes", array('mimetype' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'), "extension='docx'"); - $db->update_query("attachtypes", array('mimetype' => 'application/vnd.ms-excel'), "extension='xls'"); - $db->update_query("attachtypes", array('mimetype' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'), "extension='xlsx'"); - $db->update_query("attachtypes", array('mimetype' => 'application/vnd.ms-powerpoint'), "extension='ppt'"); - $db->update_query("attachtypes", array('mimetype' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation'), "extension='pptx'"); - - $cache->update_moderators(); - - $db->update_query("themes", array('allowedgroups' => 'all'), "allowedgroups='' OR allowedgroups IS NULL"); - - // Add permissions for all of our new ACP pages - change_admin_permission('config', 'thread_prefixes'); - change_admin_permission('tools', 'file_verification'); - change_admin_permission('tools', 'statistics'); - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("17_dbchanges6"); -} - -function upgrade17_dbchanges6() -{ - global $db, $output; - - $output->print_header("Post IP Repair Conversion"); - - if(!$_POST['ipspage']) - { - $ipp = 5000; - } - else - { - $ipp = (int)$_POST['ipspage']; - } - - if($_POST['ipstart']) - { - $startat = (int)$_POST['ipstart']; - $upper = $startat+$ipp; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $ipp; - $lower = 1; - } - - $query = $db->simple_select("posts", "COUNT(pid) AS ipcount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['ipcount']) - { - $upper = $cnt['ipcount']; - } - - echo "

    Repairing ip {$lower} to {$upper} ({$cnt['ipcount']} Total)

    "; - flush(); - - $ipaddress = false; - - $query = $db->simple_select("posts", "ipaddress, pid", "", array('limit_start' => $lower, 'limit' => $ipp)); - while($post = $db->fetch_array($query)) - { - $db->update_query("posts", array('longipaddress' => (int)my_ip2long($post['ipaddress'])), "pid = '{$post['pid']}'"); - $ipaddress = true; - } - - $remaining = $upper-$cnt['ipcount']; - if($remaining && $ipaddress) - { - $nextact = "17_dbchanges6"; - $startat = $startat+$ipp; - $contents = "

    Done. Click Next to move on to the next set of post ips.

    "; - } - else - { - $nextact = "17_dbchanges7"; - $contents = "

    Done

    All post ips have been successfully repaired. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - -function upgrade17_dbchanges7() -{ - global $db, $output; - - $output->print_header("User IP Repair Conversion"); - - if(!$_POST['ipspage']) - { - $ipp = 5000; - } - else - { - $ipp = (int)$_POST['ipspage']; - } - - if($_POST['ipstart']) - { - $startat = (int)$_POST['ipstart']; - $upper = $startat+$ipp; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $ipp; - $lower = 1; - } - - $query = $db->simple_select("users", "COUNT(uid) AS ipcount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['ipcount']) - { - $upper = $cnt['ipcount']; - } - - $contents .= "

    Repairing ip {$lower} to {$upper} ({$cnt['ipcount']} Total)

    "; - - $ipaddress = false; - $update_array = array(); - - $query = $db->simple_select("users", "regip, lastip, uid", "", array('limit_start' => $lower, 'limit' => $ipp)); - while($user = $db->fetch_array($query)) - { - $update_array = array( - 'longregip' => (int)my_ip2long($user['regip']), - 'longlastip' => (int)my_ip2long($user['lastip']) - ); - - $db->update_query("users", $update_array, "uid = '{$user['uid']}'"); - - $update_array = array(); - $ipaddress = true; - } - - $remaining = $upper-$cnt['ipcount']; - if($remaining && $ipaddress) - { - $nextact = "17_dbchanges7"; - $startat = $startat+$ipp; - $contents .= "

    Done. Click Next to move on to the next set of user ips.

    "; - } - else - { - $nextact = "17_redoconfig"; - $contents .= "

    Done

    All user ips have been successfully repaired. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - -function upgrade17_redoconfig() -{ - global $db, $output, $orig_config, $mybb; - - $config = $orig_config; - - $output->print_header("Rewriting config.php"); - - if(!is_array($config['memcache'])) - { - // Backup our old Config file - @copy(MYBB_ROOT."inc/config.php", MYBB_ROOT."inc/config.backup.php"); - - $fh = @fopen(MYBB_ROOT."inc/config.php", "w"); - if(!$fh) - { - echo "

    Unable to open inc/config.php
    Before the upgrade process can continue, you need to changes the permissions of inc/config.php so it is writable.

    "; - $output->print_footer("17_redoconfig"); - exit; - } - - if(!$config['memcache_host']) - { - $config['memcache_host'] = "localhost"; - } - - if(!$config['memcache_port']) - { - $config['memcache_port'] = 11211; - } - - $comment = ""; - - if(!$db->db_encoding || !$config['database']['encoding']) - { - $comment = " // "; - } - - if(!$config['database']['encoding']) - { - $config['database']['encoding'] = "utf8"; - } - - // Update SQLite selection. SQLite 2 is depreciated. - if($config['database']['type'] == 'sqlite2' || $config['database']['type'] == 'sqlite3') - { - $config['database']['type'] = 'sqlite'; - } - - // Do we have a read or a write database? - if($config['database']['read']) - { - $database_config = "\$config['database']['type'] = '{$config['database']['type']}';"; - foreach(array('read', 'write') as $type) - { - // Multiple read/write databases? - if($config['database'][$type][0]['database']) - { - $i = 0; - foreach($config['database'][$type] as $database_connection) - { - $database_config .= " -\$config['database']['{$type}'][{$i}]['database'] = '{$database_connection['database']}'; -\$config['database']['{$type}'][{$i}]['table_prefix'] = '{$database_connection['table_prefix']}'; -\$config['database']['{$type}'][{$i}]['hostname'] = '{$database_connection['hostname']}'; -\$config['database']['{$type}'][{$i}]['username'] = '{$database_connection['username']}'; -\$config['database']['{$type}'][{$i}]['password'] = '{$database_connection['password']}';"; - ++$i; - } - } - // Just a single database read/write connection - else - { - $database_config .= " -\$config['database']['{$type}']['database'] = '{$config['database'][$type]['database']}'; -\$config['database']['{$type}']['table_prefix'] = '{$config['database'][$type]['table_prefix']}'; - -\$config['database']['{$type}']['hostname'] = '{$config['database'][$type]['hostname']}'; -\$config['database']['{$type}']['username'] = '{$config['database'][$type]['username']}'; -\$config['database']['{$type}']['password'] = '{$config['database'][$type]['password']}';"; - } - } - } - // Standard database connection stuff - else - { - $database_config = "\$config['database']['type'] = '{$config['database']['type']}'; -\$config['database']['database'] = '{$config['database']['database']}'; -\$config['database']['table_prefix'] = '{$config['database']['table_prefix']}'; - -\$config['database']['hostname'] = '{$config['database']['hostname']}'; -\$config['database']['username'] = '{$config['database']['username']}'; -\$config['database']['password'] = '{$config['database']['password']}'; -"; - } - - $configdata = " {$config['log_pruning']['admin_logs']}, // Administrator logs - 'mod_logs' => {$config['log_pruning']['mod_logs']}, // Moderator logs - 'task_logs' => {$config['log_pruning']['task_logs']}, // Scheduled task logs - 'mail_logs' => {$config['log_pruning']['mail_logs']}, // Mail error logs - 'user_mail_logs' => {$config['log_pruning']['user_mail_logs']}, // User mail logs - 'promotion_logs' => {$config['log_pruning']['promotion_logs']} // Promotion logs -); - -?".">"; - fwrite($fh, $configdata); - fclose($fh); - } - echo "

    The configuration file has been successfully rewritten.

    "; - echo "

    Click next to continue with the upgrade process.

    "; - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer("17_updatecss"); -} -function upgrade17_updatecss() -{ - global $db, $output, $orig_config, $mybb; - - if(file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php"; - } - else if(file_exists(MYBB_ROOT."admin/inc/functions_themes.php")) - { - require_once MYBB_ROOT."admin/inc/functions_themes.php"; - } - else - { - $output->print_error("Please make sure your admin directory is uploaded correctly."); - } - - $output->print_header("Updating CSS"); - - $query = $db->simple_select("themestylesheets", "*", "name='global.css' OR name='usercp.css'"); - while($theme = $db->fetch_array($query)) - { - resync_stylesheet($theme); - } - - $query = $db->simple_select("themestylesheets", "*", "name='global.css' OR name='usercp.css'"); - while($theme = $db->fetch_array($query)) - { - $theme['stylesheet'] = upgrade_css_140_to_160($theme['name'], $theme['stylesheet']); - - // Create stylesheets - cache_stylesheet($theme['tid'], $theme['cachefile'], $theme['stylesheet']); - - $update_stylesheet = array( - "stylesheet" => $db->escape_string($theme['stylesheet']), - "lastmodified" => TIME_NOW - ); - $db->update_query("themestylesheets", $update_stylesheet, "sid='{$theme['sid']}'"); - } - - echo "

    The CSS has been successfully updated.

    "; - echo "

    Click next to continue with the upgrade process.

    "; - - global $footer_extra; - //$footer_extra = ""; - - $output->print_footer("17_done"); -} - -function upgrade_css_140_to_160($name, $css) -{ - // Update our CSS to the new stuff in 1.6 - $parsed_css = css_to_array($css); - - if($name == "global.css") - { - if(is_array($parsed_css)) - { - foreach($parsed_css as $class_id => $array) - { - switch($array['class_name']) - { - case '.navigation .active': - $parsed_css[$class_id]['values'] = str_replace('font-size: small;', 'font-size: 13px;', $array['values']); - break; - case '.highlight': - $parsed_css[$class_id]['values'] = str_replace('padding: 3px;', "padding-top: 3px;\n\tpadding-bottom: 3px;", $array['values']); - break; - case '.pm_alert': - case '.red_alert': - $parsed_css[$class_id]['values'] .= "\n\tmargin-bottom: 15px;"; - break; - case '.pagination .pagination_current': - $parsed_css[$class_id]['values'] .= "\n\tcolor: #000;"; - break; - default: - } - } - } - - $to_add = array( - md5('#panel .remember_me input') => array("class_name" => '#panel .remember_me input', "values" => "vertical-align: middle;\n\tmargin-top: -1px;"), - md5('.hiddenrow') => array("class_name" => '.hiddenrow', "values" => 'display: none;'), - md5('.selectall') => array("class_name" => '.selectall', "values" => "background-color: #FFFBD9;\n\tfont-weight: bold;\n\ttext-align: center;"), - md5('.repbox') => array("class_name" => '.repbox', "values" => "font-size:16px;\n\tfont-weight: bold;\n\tpadding:5px 7px 5px 7px;"), - md5('._neutral') => array("class_name" => '._neutral', "values" => "background-color:#FAFAFA;\n\tcolor: #999999;\n\tborder:1px solid #CCCCCC;"), - md5('._minus') => array("class_name" => '._minus', "values" => "background-color: #FDD2D1;\n\tcolor: #CB0200;\n\tborder:1px solid #980201;"), - md5('._plus') => array("class_name" => '._plus', "values" => "background-color:#E8FCDC;\n\tcolor: #008800;\n\tborder:1px solid #008800;"), - md5('.pagination_breadcrumb') => array("class_name" => '.pagination_breadcrumb', "values" => "background-color: #f5f5f5;\n\tborder: 1px solid #fff;\n\toutline: 1px solid #ccc;\n\tpadding: 5px;\n\tmargin-top: 5px;\n\tfont-weight: normal;"), - md5('.pagination_breadcrumb_link') => array("class_name" => '.pagination_breadcrumb_link', "values" => "vertical-align: middle;\n\tcursor: pointer;"), - ); - } - else if($name == "usercp.css") - { - $to_add = array( - md5('.usercp_notepad') => array("class_name" => '.usercp_notepad', "values" => "width: 99%;"), - md5('.usercp_container') => array("class_name" => '.usercp_container', "values" => "margin: 5px;\n\tpadding: 8px;\n\tborder:1px solid #CCCCCC;"), - ); - } - - foreach($to_add as $class_id => $array) - { - if($already_parsed[$class_id]) - { - $already_parsed[$class_id]++; - $class_id .= "_".$already_parsed[$class_id]; - } - else - { - $already_parsed[$class_id] = 1; - } - - $array['name'] = ""; - $array['description'] = ""; - - $parsed_css[$class_id] = $array; - } - - $css = ""; - foreach($parsed_css as $class_id => $array) - { - if($array['name'] || $array['description']) - { - $theme['css'] .= "/* "; - if($array['name']) - { - $array['css'] .= "Name: {$array['name']}"; - - if($array['description']) - { - $array['css'] .= "\n"; - } - } - - if($array['description']) - { - $array['css'] .= "Description: {$array['description']}"; - } - - $array['css'] .= " */\n"; - } - - $css .= "{$array['class_name']} {\n\t{$array['values']}\n}\n"; - } - - return $css; -} - diff --git a/html/forums/install/resources/upgrade18.php b/html/forums/install/resources/upgrade18.php deleted file mode 100644 index a151168..0000000 --- a/html/forums/install/resources/upgrade18.php +++ /dev/null @@ -1,58 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade18_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries...

    "; - - // Update the usergroup sequence for pgSQL - #1094 - if($mybb->config['database']['type'] == "pgsql") - { - $query = $db->simple_select("usergroups", "COUNT(gid) AS group_count"); - $group_count = $db->fetch_field($query, "group_count"); - - ++$group_count; - $db->query("ALTER SEQUENCE ".$mybb->config['database']['table_prefix']."usergroups_gid_seq RESTART WITH ".$group_count.""); - } - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("18_updatecache"); -} - -function upgrade18_updatecache() -{ - global $cache, $output; - - $output->print_header("Updating Cache"); - - echo "

    Updating cache...

    "; - - // Update the Moderator cache - #1200 - $cache->update_moderators(); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("18_done"); -} diff --git a/html/forums/install/resources/upgrade19.php b/html/forums/install/resources/upgrade19.php deleted file mode 100644 index 3781351..0000000 --- a/html/forums/install/resources/upgrade19.php +++ /dev/null @@ -1,24 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.6.1 and 1.6.2 */ - diff --git a/html/forums/install/resources/upgrade2.php b/html/forums/install/resources/upgrade2.php deleted file mode 100644 index df32b86..0000000 --- a/html/forums/install/resources/upgrade2.php +++ /dev/null @@ -1,289 +0,0 @@ - 1, - "revert_all_themes" => 1, - "revert_all_settings" => 1, - "requires_deactivated_plugins" => 1, -); - -function upgrade2_dbchanges() -{ - global $db, $output; - - $output->print_header("Database Changes since Release Candidate 3"); - - $contents .= "

    Making necessary database modifications..."; - - $db->drop_table("badwords"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."badwords ( - bid smallint(6) NOT NULL auto_increment, - badword varchar(100) NOT NULL, - replacement varchar(100) NOT NULL, - PRIMARY KEY(bid) - );"); - - if($db->field_exists("icon", "attachtypes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachtypes DROP icon;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachtypes ADD icon varchar(100) NOT NULL;"); - - $db->delete_query("attachtypes"); - - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (1, 'Zip File', 'application/zip', 'zip', 1024, 'images/attachtypes/zip.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (2, 'JPEG Image', 'image/jpeg', 'jpg', 500, 'images/attachtypes/image.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (3, 'Text Document', 'text/plain', 'txt', 200, 'images/attachtypes/txt.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (4, 'GIF Image', 'image/gif', 'gif', 500, 'images/attachtypes/image.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (6, 'PHP File', 'application/octet-stream', 'php', 500, 'images/attachtypes/php.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (7, 'PNG Image', 'image/png', 'png', 500, 'images/attachtypes/image.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (8, 'Microsoft Word Document', 'application/msword', 'doc', 1024, 'images/attachtypes/doc.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (9, '', 'application/octet-stream', 'htm', 100, 'images/attachtypes/html.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (10, '', 'application/octet-stream', 'html', 100, 'images/attachtypes/html.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (11, '', 'image/jpeg', 'jpeg', 500, 'images/attachtypes/image.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (12, '', 'application/x-gzip', 'gz', 1024, 'images/attachtypes/tgz.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (13, '', 'application/x-tar', 'tar', 1024, 'images/attachtypes/tar.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (14, '', 'text/css', 'css', 100, 'images/attachtypes/css.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (15, '', 'application/pdf', 'pdf', 2048, 'images/attachtypes/pdf.gif');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."attachtypes (atid, name, mimetype, extension, maxsize, icon) VALUES (16, '', 'image/bmp', 'bmp', 500, 'images/attachtypes/image.gif');"); - - if($db->field_exists("outerwidth", "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP outerwidth;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes ADD outerwidth varchar(15) NOT NULL;"); - - if($db->field_exists("icon", "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP icon;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes ADD outercolor varchar(15) NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes CHANGE body bodybgcolor varchar(15) NOT NULL;"); - - if($db->field_exists("bodybgimage", "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP bodybgimage;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes ADD bodybgimage varchar(100) NOT NULL default '' AFTER bodybgcolor;"); - - if($db->field_exists("bodybgimageattributes", "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP bodydbimageattributes;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes ADD bodybgimageattributes varchar(100) NOT NULL default '' AFTER bodybgimage;"); - - - $db->write_query("UPDATE ".TABLE_PREFIX."themes SET outerwidth='0', bodybgcolor='#e3e3e3', bodybgimage='images/Light/logo_bg.png', bodybgimageattributes='repeat-x'"); - - $db->drop_table("regimages"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."regimages ( - imagehash varchar(32) NOT NULL, - imagestring varchar(8) NOT NULL, - dateline bigint(30) NOT NULL - );"); - - $db->write_query("UPDATE ".TABLE_PREFIX."adminoptions SET cpstyle=''"); - - if($db->field_exists("language", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP language;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD language varchar(50) NOT NULL;"); - - if($db->field_exists("timeonline", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP timeonline;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD timeonline bigint(30) NOT NULL default '0';"); - - if($db->field_exists("showcodebuttons", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."user DROP showcodebuttons;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD showcodebuttons int(1) NOT NULL default '1';"); - - $db->write_query("UPDATE ".TABLE_PREFIX."users SET language='english', showcodebuttons=1"); - - if($db->field_exists("oldgroup", "awaitingactivation")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."awaitingactivation DROP oldgroup;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."awaitingactivation ADD oldgroup bigint(30) NOT NULL;"); - - if($db->field_exists("misc", "awaitingactivation")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."awaitingactivation DROP misc;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."awaitingactivation ADD misc varchar(255) NOT NULL;"); - - $db->write_query("DELETE FROM ".TABLE_PREFIX."awaitingactivation WHERE type='e'"); - - $db->drop_table("settings"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settings ( - sid smallint(6) NOT NULL auto_increment, - name varchar(120) NOT NULL default '', - title varchar(120) NOT NULL default '', - description text NOT NULL, - optionscode text NOT NULL, - value text NOT NULL, - disporder smallint(6) NOT NULL default '0', - gid smallint(6) NOT NULL default '0', - PRIMARY KEY (sid) - );"); - - $db->drop_table("reportedposts"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."reportedposts ( - rid smallint(6) NOT NULL auto_increment, - pid smallint(6) NOT NULL, - tid smallint(6) NOT NULL, - fid smallint(6) NOT NULL, - uid smallint(6) NOT NULL, - reportstatus int(1) NOT NULL, - reason varchar(250) NOT NULL, - dateline bigint(30) NOT NULL, - PRIMARY KEY (rid) - );"); - - $db->drop_table("threadsread"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."threadsread ( - tid smallint(6) NOT NULL, - uid smallint(6) NOT NULL, - dateline int(10) NOT NULL, - UNIQUE KEY tiduid (tid, uid) - );"); - $contents .= "done

    "; - - $output->print_contents("$contents

    Please click next to continue with the upgrade process.

    "); - $output->print_footer("2_dbchanges2"); -} - -function upgrade2_dbchanges2() -{ - global $db, $output; - - $output->print_header("Database Changes since Release Candidate 3"); - $contents .= "

    Reinserting settings..."; - - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'boardclosed', 'Board Closed', 'If you need to close your forums to make some changes or perform an upgrade, this is the global switch. Viewers will not be able to view your forums, however, they will see a message with the reason you specify below.
    \r\n
    \r\nAdministrators will still be able to view the forums.', 'yesno', 'no', 1, 26);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'boardclosed_reason', 'Board Closed Reason', 'If your forum is closed, you can set a message here that your visitors will be able to see when they visit your forums.', 'textarea', 'These forums are currently closed for maintenance. Please check back later.', 2, 26);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bbname', 'Board Name', 'The name of your message boards. We recommend that it is not over 75 characters.', 'text', 'MyBB Forums', 1, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bburl', 'Board URL', 'The url to your forums.
    Include the http://. Do NOT include a trailing slash.', 'text', '', 2, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'homename', 'Homepage Name', 'The name of your homepage. This will appear in the footer with a link to it.', 'text', 'MyBB', 3, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'homeurl', 'Homepage URL', 'The full URL of your homepage. This will be linked to in the footer along with its name.', 'text', 'https://mybb.com', 4, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'dateformat', 'Date Format', 'The format of the dates used on the forum. This format uses the PHP date() function. We recommend not changing this unless you know what you\'re doing.', 'text', 'm-d-Y', 1, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'adminemail', 'Admin Email', 'The administrator\'s email address. This will be used for outgoing emails sent via the forums.', 'text', '', 5, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'timeformat', 'Time Format', 'The format of the times used on the forum. This format uses PHP\'s date() function. We recommend not changing this unless you know what you\'re doing.', 'text', 'h:i A', 2, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'threadsperpage', 'Threads Per Page', '', 'text', '20', 1, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'stickyprefix', 'Sticky Threads Prefix', 'The prefix of topics which have been made sticky by a moderator or administrator.', 'text', 'Sticky:', 2, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'hottopic', 'Replys For Hot Topic', 'The number of replies that is needed for a topic to be considered \'hot\'.', 'text', '20', 3, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cookiedomain', 'Cookie Domain', 'The domain which cookies should be set to. This can remain blank. It should also start with a . so it covers all subdomains.', 'text', '', 8, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cookiepath', 'Cookie Path', 'The path which cookies are set to, we recommend setting this to the full directory path to your forums with a trailing slash.', 'text', '', 9, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pollprefix', 'Poll Prefix', 'The prefix on forum display which contain polls.', 'text', 'Poll:', 4, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'postsperpage', 'Posts Per Page:', 'The number of posts to display per page. We recommend its not higher than 20 for people with slower connections.', 'text', '10', 1, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'regdateformat', 'Registered Date Format', 'The format used on showthread where it shows when the user registered.', 'text', 'M Y', 3, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sigmycode', 'Allow MyCode in Signatures', 'Do you want to allow MyCode to be used in users\' signatures?', 'yesno', 'yes', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sigsmilies', 'Allow Smilies in Signatures', 'Do you want to allow smilies to be used in users\' signatures?', 'yesno', 'yes', 3, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sightml', 'Allow HTML in Signatures', 'Do you want to allow HTML to be used in users\' signatures?', 'yesno', 'no', 4, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sigimgcode', 'Allow [img] Code in Signatures', 'Do you want to allow [img] code to be used in users\' signatures?', 'yesno', 'yes', 5, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'quoteboxstyle', 'Fancy Quote Boxes', 'Selecting yes will cause quotes to be in a table and look more professional. Selecting no will show quotes in the traditional way.', 'yesno', 'yes', 1, 10);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'codeboxstyle', 'Fancy Code Boxes', 'Selecting yes will cause code to be in a table and look more professional. Selecting no will show code in the traditional way.', 'yesno', 'yes', 2, 10);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'threadusenetstyle', 'Usenet Style Thread View', 'Selecting yes will cause posts to look similar to how posts look in USENET. No will cause posts to look the modern way.', 'yesno', 'no', 4, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowhtml', 'Allow HTML', 'Selecting yes will allow HTML to be used in private messages.', 'yesno', 'no', 1, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowmycode', 'Allow MyCode', 'Selecting yes will allow MyCode to be used in private messages.', 'yesno', 'yes', 2, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowsmilies', 'Allow Smilies', 'Selecting yes will allow Smilies to be used in private messages.', 'yesno', 'yes', 3, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowimgcode', 'Allow [img] Code', 'Selecting yes will allow [img] Code to be used in private messages.', 'yesno', 'yes', 4, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'siglength', 'Length limit in Signatures', 'The maximum number of characters a user can place in a signature.', 'text', '255', 6, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'messagelength', 'Maximum Message Length', 'The maximum number of characters to allow in a message. A setting of 0 allows an unlimited length.', 'text', '0', 1, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'membersperpage', 'Members Per Page', 'The number of members to show per page on the member list.', 'text', '20', 1, 12);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'load', '*NIX Load Limiting', 'Limit the maximum server load before myBB rejects people. 0 for none. Recommended limit is 5.0.', 'text', '0', 5, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'emailkeep', 'Users Keep Email', 'If a current user has an email already registered in your banned list, should he be allowed to keep it.', 'yesno', 'no', 4, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'ipban', 'Ban by IP', 'Here, you may specify IP addresses or a range of IP addresses. You must separate each IP with a space.', 'textarea', '', 2, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'emailban', 'Ban by Email', 'You may specify specific email addresses to ban, or you may specify a domain. You must separate email addresses and domains with a space.', 'textarea', '', 3, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'avatarsize', 'Max Uploaded Avatar Size', 'Maximum file size (in kilobytes) of uploaded avatars.', 'text', '10', 8, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'avatardir', 'Avatar Directory', 'The directory where your avatars are stored. These are used in the avatar list in the User CP.', 'text', 'images/avatars', 7, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showeditedby', 'Show \'edited by\' Messages', 'Once a post is edited by a regular user, do you want to show the edited by message?', 'yesno', 'yes', 6, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxposts', 'Maximum Posts Per Day', 'This is the total number of posts allowed per user per day. 0 for unlimited.', 'text', '0', 2, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showeditedbyadmin', 'Show \'edited by\' Message for Forum Staff', 'Do you want to show edited by messages for forum staff when they edit their posts?', 'yesno', 'yes', 7, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bannedusernames', 'Banned Usernames', 'Ban users from registering certain usernames. Seperate them with a space.', 'textarea', 'drcracker Oops! hmmm', 1, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxpolloptions', 'Maximum Number of Poll Options', 'The maximum number of options for polls that users can post.', 'text', '10', 3, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'dotfolders', 'Use \'dot\' Icons', 'Do you want to show dots on the thread indicators of threads users have participated in.', 'yesno', 'yes', 8, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'contactlink', 'Contact Us Link', 'This will be used for the Contact Us link on the bottom of all the forum pages. Can either be an email address (using mailto:email@website.com) or a hyperlink.', 'text', 'mailto:contact@mybb.com', 6, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showdescriptions', 'Show Forum Descriptions?', 'This option will allow you to turn off showing the descriptions for forums.', 'yesno', 'yes', 1, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showbirthdays', 'Show Today\'s Birthdays?', 'Do you want to show today\'s birthdays on the forum homepage?', 'yesno', 'yes', 2, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showwol', 'Show Who\'s Online?', 'Display the currently active users on the forum home page.', 'yesno', 'yes', 4, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'hideprivateforums', 'Hide Private Forums?', 'You can hide private forums by turning this option on. This option also hides forums on the forum jump and all subforums.', 'yesno', 'yes', 3, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showsimilarthreads', 'Show \'Similar Threads\' Table', 'The Similar Threads table shows threads that are relevant to the thread being read. You can set the relevancy below.', 'yesno', 'no', 5, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'similarityrating', 'Similar Threads Relevancy Rating', 'This allows you to limit similar threads to ones more relevant (0 being not relevant). This number should not be over 10 and should not be set low (<5) for large forums.', 'text', '1', 7, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'similarlimit', 'Similar Threads Limit', 'Here you can change the total amount of similar threads to be shown in the similar threads table. It is recommended that it is not over 15 for 56k users.', 'text', '10', 8, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'privateeventcolor', 'Private Events Color', 'The color that private events will be shown in on the main calendar page.', 'text', 'red', 2, 17);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'publiceventcolor', 'Public Events Color', 'The color that public events will be shown in on the main calendar page.', 'text', 'green', 1, 17);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'movedprefix', 'Moved Threads Prefix', 'The prefix that threads that have been moved to another forum should have.', 'text', 'Moved:', 5, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'hottopicviews', 'Views For Hot Topic', 'The number of views a thread can have before it is considered \'hot\'.', 'text', '150', 7, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'logip', 'Log Posting IP Addresses', 'Do you wish to log ip addresses of users who post, and who you want to show ip addresses to.', 'radio\r\nno=Do not log IP\r\nhide=Show to Admins & Mods\r\nshow=Show to all Users', 'hide', 3, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'statslimit', 'Stats Limit', 'The number of threads to show on the stats page for most replies and most views.', 'text', '15', 10, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'modlist', 'Forums\' Moderator Listing', 'Here you can turn on or off the listing of moderators for each forum on index.php and forumdisplay.php', 'onoff', 'on', 5, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'smilieinserter', 'Clickable Smilies Inserter', 'Clickable smilies will appear on the posting pages if this option is set to \'on\'.', 'onoff', 'on', 1, 20);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'smilieinsertertot', 'No. of Smilies to show', 'Enter the total number of smilies to show on the clickable smilie inserter.', 'text', '20', 2, 20);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'smilieinsertercols', 'No. of Smilie Cols to Show', 'Enter the number of columns you wish to show on the clickable smilie inserter.', 'text', '4', 3, 20);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showindexstats', 'Show Small Stats Section', 'Do you want to show the total number of threads, posts, members, and the last member on the forum home?', 'yesno', 'yes', 6, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'regtype', 'Registration Method', 'Please select the method of registration to use when users register.', 'select\r\ninstant=Instant Activation\r\nverify=Send Email Verification\r\nrandompass=Send Random Password', 'verify', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'userpppoptions', 'User Selectable Posts Per Page', 'If you would like to allow users to select how many posts are shown per page in a thread, enter the options they should be able to select separated with commas. If this is left blank they will not be able to choose how many posts are shown per page.', 'text', '5,10,20,25,30,40,50', 2, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'usertppoptions', 'User Selectable Threads Per Page', 'If you would like to allow users to select how many threads per page are shown in a forum, enter the options they should be able to select separated with commas. If this is left blank they will not be able to choose how many threads are shown per page.', 'text', '10,20,25,30,40,50', 6, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'wolcutoffmins', 'Cut-off Time (mins)', 'The number of minutes before a user is marked offline. Recommended: 15.', 'text', '15', 1, 23);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'postfloodcheck', 'Post Flood Checking', 'Set to on if you want to enable flood checking for posts. Specifiy the time between posts below.', 'onoff', 'on', 4, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'postfloodsecs', 'Post Flood Time', 'Set the time (in seconds) users have to wait between posting, to be in effect; the option above must be on.', 'text', '60', 5, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'gzipoutput', 'Use GZip Page Compression?', 'Do you want to compress pages in GZip format when they are sent to the browser? This means quicker downloads for your visitors, and less traffic usage for you. The level of the compression is set by the server\'s load.', 'yesno', 'yes', 1, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'standardheaders', 'Send Standard Headers', 'With some web servers, this option can cause problems; with others, it is needed. ', 'yesno', 'no', 2, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'nocacheheaders', 'Send No Cache Headers', 'With this option you can prevent caching of the page by the browser.', 'yesno', 'no', 3, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxpostimages', 'Maximum Images per Post', 'Enter the maximum number of images (including smilies) a user can put in their post. Set to 0 to disable this.', 'text', '10', 8, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxsigimages', 'Maximum Number of Images per Signature', 'Enter the maximum number of images (including smilies) a user can put in their signature. Set to 0 to disable this.', 'text', '2', 2, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'browsingthisforum', 'Users Browsing this Forum', 'Here you can turn off the \'users browsing this forum\' feature.', 'onoff', 'on', 9, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'usereferrals', 'Use Referrals System', 'Do you want to use the user referrals system on these forums?', 'yesno', 'yes', 3, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'subscribeexcerpt', 'Amount of Characters for Subscription Previews', 'How many characters of the post do you want to send with the email notification of a new reply.', 'text', '100', 9, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cpstyle', 'Control Panel Style', 'The Default style that the control panel will use. Styles are inside the styles folder. A folder name inside that folder becomes the style title and style.css inside the style title folder is the css style file.', 'cpstyle', 'Axiom', 2, 28);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cplanguage', 'Control Panel Language', 'The language of the control panel.', 'adminlanguage', 'english', 1, 28);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'minnamelength', 'Minimum Username Length', 'The minimum number of characters a username can be when a user registers.', 'text', '3', 5, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxnamelength', 'Maximum Username Length', 'The maximum number of characters a username can be when a user registers.', 'text', '30', 6, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'redirects', 'Friendly Redirection Pages', 'This will enable friendly redirection pages instead of bumping the user directly to the page.', 'onoff', 'on', 4, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'betweenregstime', 'Time Between Registrations', 'The amount of time (in hours) to disallow registrations for users who have already registered an account under the same ip address.', 'text', '24', 2, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxregsbetweentime', 'Maximum Registrations Per IP Address', 'This option allows you to set the maximum amount of times a certain user can register within the timeframe specified above.', 'text', '2', 4, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showstats', 'Show forum statistics', 'Do you want to show the total number of posts, threads, members and the last registered member on the portal page?', 'yesno', 'yes', 5, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showpms', 'Show the number of PMs to users', 'Do you want to show the number of private messages the current user has in their pm system.', 'yesno', 'yes', 4, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showwelcome', 'Show the Welcome box', 'Do you want to show the welcome box to visitors / users.', 'yesno', 'yes', 3, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_numannouncements', 'Number of announcements to show', 'Please enter the number of announcements to show on the main page.', 'text', '10', 2, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showstats', 'Show forum statistics', 'Do you want to show the total number of posts, threads, members and the last registered member on the portal page?', 'yesno', 'yes', 5, 29);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showwol', 'Show Whos Online', 'Do you want to show the \'whos online\' information to users when they visit the portal page?', 'yesno', 'yes', 6, 29);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_announcementsfid', 'Forum ID to pull announcements from', 'Please enter the forum id (fid) of the forum you wish to pull the announcements from', 'text', '1', 1, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showdiscussionsnum', 'Number of latest discussions to show', 'Please enter the number of current forum discussions to show on the portal page.', 'text', '10', 8, 29);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showwol', 'Show Who\'s Online', 'Do you want to show the \'Who\'s online\' information to users when they visit the portal page?', 'yesno', 'yes', 6, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showsearch', 'Show Search Box', 'Do you want to show the search box, allowing users to quickly search the forums on the portal?', 'yesno', 'yes', 7, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showdiscussions', 'Show Latest Discussions', 'Do you wish to show the current forum discussions on the portal page?', 'yesno', 'yes', 8, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showdiscussionsnum', 'Number of latest discussions to show', 'Please enter the number of current forum discussions to show on the portal page.', 'text', '10', 9, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'attachthumbh', 'Attached Thumbnail Maximum Height', 'Enter the width that attached thumbnails should be generated at.', 'text', '60', 12, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'attachthumbw', 'Attached Thumbnail Maximum Width', 'Enter the width that attached thumbnails should be generated at.', 'text', '60', 13, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxattachments', 'Maximum Attachments Per Post', 'THe maximum number of attachments a user is allowed to upload per post.', 'text', '5', 10, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'attachthumbnails', 'Show Attached Thumbnails in Posts', 'Do you want to show the generated thumbnails for attached images inside the posts?', 'yesno', 'yes', 11, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'polloptionlimit', 'Maximum Poll Option Length', 'The maximum length that each poll option can be. (Set to 0 to disable).', 'text', '250', 1, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'timezoneoffset', 'Default Timezone Offset', 'Here you can set the default timezone offset for guests and members using the default offset.', 'text', '+10', 4, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bblanguage', 'Default Language', 'The default language that MyBB should use for guests and for users without a selected language in their user control panel.', 'language', 'english', 7, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'regimage', 'Antispam Registration Image', 'If yes, and GD is installed, an image will be shown during registration where users are required to enter the text contained within the image to continue with registration.', 'onoff', 'on', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'reportmethod', 'Reported Posts Medium', 'Please select from the list how you want reported posts to be dealt with. Storing them in the database is probably the better of the options listed.', 'radio\r\ndb=Stored in the Database\r\npms=Sent as Private Messages\r\nemail=Sent via Email', 'db', 1, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'threadreadcut', 'Read Threads in Database (Days)', 'The number of days that you wish to keep thread read information in the database. For large boards, we do not recommend a high number as the board will become slower. Set to 0 to disable.', 'text', '7', 3, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'announcementlimit', 'Announcements Limit', 'The number of forum announcements to show in the thread listing on the forum display pages. Set to 0 to show all active announcements.', 'text', '2', 10, 7);"); - - $output->print_contents("$contents

    Please click next to continue with the upgrade process.

    "); - $output->print_footer("2_done"); -} diff --git a/html/forums/install/resources/upgrade20.php b/html/forums/install/resources/upgrade20.php deleted file mode 100644 index b3fd3be..0000000 --- a/html/forums/install/resources/upgrade20.php +++ /dev/null @@ -1,51 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade20_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Repairing Database Sequences"); - - echo "

    Performing necessary upgrade queries...

    "; - - // Update the sequences for pgSQL - #1094, #1248 - if($mybb->config['database']['type'] == "pgsql") - { - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}attachtypes_atid_seq', (SELECT max(atid) FROM {$mybb->config['database']['table_prefix']}attachtypes));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}forums_fid_seq', (SELECT max(fid) FROM {$mybb->config['database']['table_prefix']}forums));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}helpdocs_hid_seq', (SELECT max(hid) FROM {$mybb->config['database']['table_prefix']}helpdocs));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}helpsections_sid_seq', (SELECT max(sid) FROM {$mybb->config['database']['table_prefix']}helpsections));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}icons_iid_seq', (SELECT max(iid) FROM {$mybb->config['database']['table_prefix']}icons));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}profilefields_fid_seq', (SELECT max(fid) FROM {$mybb->config['database']['table_prefix']}profilefields));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}smilies_sid_seq', (SELECT max(sid) FROM {$mybb->config['database']['table_prefix']}smilies));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}spiders_sid_seq', (SELECT max(sid) FROM {$mybb->config['database']['table_prefix']}spiders));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}templategroups_gid_seq', (SELECT max(gid) FROM {$mybb->config['database']['table_prefix']}templategroups));"); - $db->query("SELECT setval('{$mybb->config['database']['table_prefix']}usergroups_gid_seq', (SELECT max(gid) FROM {$mybb->config['database']['table_prefix']}usergroups));"); - } - - $db->add_column("adminviews", "custom_profile_fields", "text NOT NULL AFTER conditions"); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("20_done"); -} - diff --git a/html/forums/install/resources/upgrade21.php b/html/forums/install/resources/upgrade21.php deleted file mode 100644 index 0193e69..0000000 --- a/html/forums/install/resources/upgrade21.php +++ /dev/null @@ -1,104 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade21_dbchanges() -{ - global $cache, $db, $output, $mybb; - - $output->print_header("Updating Database"); - - echo "

    Performing necessary upgrade queries...

    "; - - $db->delete_query("settings", "name = 'standardheaders'"); - - if($db->field_exists('showinbirthdaylist', 'usergroups')) - { - $db->drop_column("usergroups", "showinbirthdaylist"); - } - - if($db->field_exists('canoverridepm', 'usergroups')) - { - $db->drop_column("usergroups", "canoverridepm"); - } - - if($db->field_exists('canusesig', 'usergroups')) - { - $db->drop_column("usergroups", "canusesig"); - } - - if($db->field_exists('canusesigxposts', 'usergroups')) - { - $db->drop_column("usergroups", "canusesigxposts"); - } - - if($db->field_exists('signofollow', 'usergroups')) - { - $db->drop_column("usergroups", "signofollow"); - } - - if($db->field_exists('postnum', 'profilefields')) - { - $db->drop_column("profilefields", "postnum"); - } - - switch($db->type) - { - case "pgsql": - case "sqlite": - $db->add_column("profilefields", "postnum", "bigint NOT NULL default '0'"); - $db->add_column("usergroups", "showinbirthdaylist", "int NOT NULL default '0'"); - $db->add_column("usergroups", "canoverridepm", "int NOT NULL default '0'"); - $db->add_column("usergroups", "canusesig", "int NOT NULL default '0'"); - $db->add_column("usergroups", "canusesigxposts", "bigint NOT NULL default '0'"); - $db->add_column("usergroups", "signofollow", "int NOT NULL default '0'"); - break; - default: - $db->add_column("profilefields", "postnum", "bigint(30) NOT NULL default '0'"); - $db->add_column("usergroups", "showinbirthdaylist", "int(1) NOT NULL default '0'"); - $db->add_column("usergroups", "canoverridepm", "int(1) NOT NULL default '0'"); - $db->add_column("usergroups", "canusesig", "int(1) NOT NULL default '0'"); - $db->add_column("usergroups", "canusesigxposts", "bigint(30) NOT NULL default '0'"); - $db->add_column("usergroups", "signofollow", "int(1) NOT NULL default '0'"); - break; - } - - // Update all usergroups to show in the birthday list - $db->update_query("usergroups", array("showinbirthdaylist" => 1)); - - // Update our nice usergroups to use a signature - $groups = $cache->read("usergroups"); - - foreach($groups as $group) - { - $disallowed_array = array(1, 5, 7); - if(in_array($group['gid'], $disallowed_array) || $group['isbannedgroup'] == 1) - { - continue; - } - - $db->update_query("usergroups", array("canusesig" => 1), "gid = '{$group['gid']}'"); - } - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("21_done"); -} - diff --git a/html/forums/install/resources/upgrade22.php b/html/forums/install/resources/upgrade22.php deleted file mode 100644 index 7ab55a5..0000000 --- a/html/forums/install/resources/upgrade22.php +++ /dev/null @@ -1,25 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.6.5 */ - diff --git a/html/forums/install/resources/upgrade23.php b/html/forums/install/resources/upgrade23.php deleted file mode 100644 index 338ab79..0000000 --- a/html/forums/install/resources/upgrade23.php +++ /dev/null @@ -1,58 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade23_dbchanges() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - - if($db->field_exists('canusecustomtools', 'moderators')) - { - $db->drop_column('moderators', 'canusecustomtools'); - } - - if($db->field_exists('cansendemailoverride', 'usergroups')) - { - $db->drop_column('usergroups', 'cansendemailoverride'); - } - - switch($db->type) - { - case "pgsql": - case "sqlite": - $db->add_column('moderators', 'canusecustomtools', "int NOT NULL default '0'"); - $db->add_column('usergroups', 'cansendemailoverride', "int NOT NULL default '0'"); - break; - default: - $db->add_column('moderators', 'canusecustomtools', "int(1) NOT NULL default '0'"); - $db->add_column('usergroups', 'cansendemailoverride', "int(1) NOT NULL default '0'"); - break; - } - - $db->update_query('moderators', array('canusecustomtools' => 1), "canmanagethreads = '1'"); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("23_done"); -} diff --git a/html/forums/install/resources/upgrade24.php b/html/forums/install/resources/upgrade24.php deleted file mode 100644 index f7b431c..0000000 --- a/html/forums/install/resources/upgrade24.php +++ /dev/null @@ -1,23 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.6.7 */ diff --git a/html/forums/install/resources/upgrade25.php b/html/forums/install/resources/upgrade25.php deleted file mode 100644 index e460bf5..0000000 --- a/html/forums/install/resources/upgrade25.php +++ /dev/null @@ -1,23 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.6.8 */ diff --git a/html/forums/install/resources/upgrade26.php b/html/forums/install/resources/upgrade26.php deleted file mode 100644 index 45177da..0000000 --- a/html/forums/install/resources/upgrade26.php +++ /dev/null @@ -1,55 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade26_dbchanges() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - - $db->update_query("helpdocs", array('usetranslation' => 1)); - $db->update_query("helpsections", array('usetranslation' => 1)); - - if($db->type == 'pgsql') - { - $db->modify_column("polls", "numvotes", "text", "set"); - } - else - { - $db->modify_column("polls", "numvotes", "text NOT NULL"); - } - - if($db->field_exists('failedlogin', 'users')) - { - $db->drop_column("users", "failedlogin"); - } - - // We don't need the posthash after the post is inserted into the database - $db->update_query('attachments', "posthash=''", 'pid!=0'); - - // Column will be dropped in MyBB 1.8 - $db->update_query('posts', "posthash=''"); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("26_done"); -} diff --git a/html/forums/install/resources/upgrade27.php b/html/forums/install/resources/upgrade27.php deleted file mode 100644 index 60fc489..0000000 --- a/html/forums/install/resources/upgrade27.php +++ /dev/null @@ -1,24 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - - -/* Nothing to do for 1.6.10 */ diff --git a/html/forums/install/resources/upgrade28.php b/html/forums/install/resources/upgrade28.php deleted file mode 100644 index 21fe166..0000000 --- a/html/forums/install/resources/upgrade28.php +++ /dev/null @@ -1,23 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.6.11 or 1.6.12 */ diff --git a/html/forums/install/resources/upgrade29.php b/html/forums/install/resources/upgrade29.php deleted file mode 100644 index 179786c..0000000 --- a/html/forums/install/resources/upgrade29.php +++ /dev/null @@ -1,24 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.6.13 */ - diff --git a/html/forums/install/resources/upgrade3.php b/html/forums/install/resources/upgrade3.php deleted file mode 100644 index 34e7d4d..0000000 --- a/html/forums/install/resources/upgrade3.php +++ /dev/null @@ -1,826 +0,0 @@ - 1, - "revert_all_themes" => 1, - "revert_all_settings" => 1, - "requires_deactivated_plugins" => 1, -); - -@set_time_limit(0); - -function upgrade3_dbchanges() -{ - global $db, $output; - - $output->print_header("Attachment Conversion to Files"); - - $contents = "

    The first step of the upgrade process from RC4 is to move your attachments and avatars to the file system.

    "; - - if(!@is_dir("../uploads/")) - { - $errors = "

    ../uploads/ Does not exist in your forums' directory. Please create this directory."; - } - else - { - if(!@is_writable("../uploads/")) - { - @my_chmod("../uploads", '0777'); - if(!@is_writable("../uploads/")) - { - $errors = "

    ../uploads/ is not writable! Please chmod this directory so it's writable (766 or 777)."; - } - } - } - if(!@is_dir("../uploads/avatars/")) - { - $errors .= "

    ../uploads/avatars/ Does not exist. Please create this directory."; - } - else - { - if(!@is_writable("../uploads/avatars/")) - { - @my_chmod("../uploads/avatars/", '0777'); - if(!is_writable("../uploads/avatars/")) - { - $errors = "

    ../uploads/avatars/ is not writable! Please chmod this directory so it's writable (766 or 777)."; - } - } - } - - if($errors) - { - $output->print_contents($contents."

    To be able to do this you must perform the following:

    $errors"); - $output->print_footer("3_dbchanges"); - exit; - } - - $contents .= "

    Okay, we've determined that the specified directory settings have been met.

    If you wish to change the number of attachments to process per page then you can do so below.

    "; - $contents .= "

    Attachments Per Page:

    "; - $contents .= "

    Once you're ready, press next to begin the conversion.

    "; - - $output->print_contents($contents); - $output->print_footer("3_convertattachments"); -} - -function upgrade3_convertattachments() -{ - global $db, $output, $settings; - - $output->print_header("Attachment Conversion to Files"); - - if(!$_POST['attachmentspage']) - { - $app = 50; - } - else - { - $app = (int)$_POST['attachmentspage']; - } - - if($_POST['attachmentstart']) - { - $startat = (int)$_POST['attachmentstart']; - $upper = $startat+$app; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $app; - $lower = 1; - } - - require_once MYBB_ROOT."inc/settings.php"; - - $query = $db->simple_select("attachments", "COUNT(aid) AS attachcount"); - $cnt = $db->fetch_array($query); - - $contents .= "

    Converting attachments $lower to $upper (".$cnt['attachcount']." Total)

    "; - echo "

    Converting attachments $lower to $upper (".$cnt['attachcount']." Total)

    "; - - if($db->field_exists("uid", "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP uid;"); - } - // Add uid column - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments ADD uid smallint(6) NOT NULL AFTER posthash;"); - - - if($db->field_exists("thumbnail", "attachments")) - { - // Drop thumbnail column - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP thumbnail"); - } - - if($db->field_exists("thumbnail", "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP thumbnail;"); - } - // Add thumbnail column - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments ADD thumbnail varchar(120) NOT NULL;"); - - if($db->field_exists("attachname", "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP attachname;"); - } - // Add attachname column - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments ADD attachname varchar(120) NOT NULL AFTER filesize;"); - - if(!$db->field_exists("donecon", "attachments")) - { - // Add temporary column - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments ADD donecon smallint(1) NOT NULL;"); - } - - $query = $db->query(" - SELECT a.*, p.uid AS puid, p.dateline - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - WHERE a.donecon != '1' - ORDER BY a.aid ASC LIMIT {$app} - "); - while($attachment = $db->fetch_array($query)) - { - $filename = "post_".$attachment['puid']."_".$attachment['dateline'].$attachment['aid'].".attach"; - $ext = my_strtolower(my_substr(strrchr($attachment['filename'], "."), 1)); - $fp = fopen("../uploads/".$filename, "wb"); - if(!$fp) - { - die("Unable to create file. Please check permissions and refresh page."); - } - fwrite($fp, $attachment['filedata']); - fclose($fp); - unset($attachment['filedata']); - if($ext == "gif" || $ext == "png" || $ext == "jpg" || $ext == "jpeg" || $ext == "jpe") - { - require_once MYBB_ROOT."inc/functions_image.php"; - $thumbname = str_replace(".attach", "_thumb.$ext", $filename); - $thumbnail = generate_thumbnail("../uploads/".$filename, "../uploads", $thumbname, $settings['attachthumbh'], $settings['attachthumbw']); - if($thumbnail['code'] == 4) - { - // Image was too small - fake a filename - $thumbnail['filename'] = "SMALL"; - } - } - $db->write_query("UPDATE ".TABLE_PREFIX."attachments SET attachname='".$filename."', donecon='1', uid='".$attachment['puid']."', thumbnail='".$thumbnail['filename']."' WHERE aid='".$attachment['aid']."'"); - unset($thumbnail); - } - - echo "

    Done.

    "; - $query = $db->simple_select("attachments", "COUNT(aid) AS attachrem", "donecon != '1'"); - $cnt = $db->fetch_array($query); - - if($cnt['attachrem'] != 0) - { - $nextact = "3_convertattachments"; - $startat = $startat+$app; - $contents .= "

    Done. Click Next to move on to the next set of attachments.

    "; - } - else - { - if($db->field_exists("donecon", "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP donecon"); - } - - if($db->field_exists("filedata", "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP filedata"); - } - - if($db->field_exists("thumbnailsm", "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP thumbnailsm"); - } - $nextact = "3_convertavatars"; - $contents .= "

    Done

    All attachments have been moved to the file system. The next step is converting avatars to the file system.

    "; - $contents .= "

    If you wish to change the number of uploaded avatars to process per page then you can do so below.

    "; - $contents .= "

    Avatars Per Page:

    "; - $contents .= "

    Once you're ready, press next to begin the conversion.

    "; - } - $output->print_contents($contents); - $output->print_footer($nextact); -} - -function upgrade3_convertavatars() -{ - global $db, $output; - - $output->print_header("Avatar Conversion to Files"); - - if(!$_POST['userspage']) - { - $app = 50; - } - else - { - $app = (int)$_POST['userspage']; - } - - if($_POST['avatarstart']) - { - $startat = (int)$_POST['avatarstart']; - $upper = $startat+$app; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $app; - $lower = 1; - } - - require_once MYBB_ROOT."inc/settings.php"; - - $query = $db->simple_select("avatars", "COUNT(uid) AS avatarcount"); - $cnt = $db->fetch_array($query); - - $contents .= "

    Converting avatars $lower to $upper (".$cnt['avatarcount']." Total)

    "; - - // Add temporary column - if(!$db->field_exists("donecon", "avatars")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."avatars ADD donecon smallint(1) NOT NULL;"); - } - - if($db->field_exists("avatartype", "attachments")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments DROP avatartype;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD avatartype varchar(10) NOT NULL AFTER avatar;"); - - $query = $db->simple_select("avatars", "*", "donecon != '1'", array('order_by' => 'uid', 'order_dir' => 'asc', 'limit' => $app)); - while($avatar = $db->fetch_array($query)) - { - $ext = ""; - switch($avatar['type']) - { - case "image/jpeg": - case "image/jpg": - case "image/pjpeg": - $ext = "jpg"; - break; - case "image/x-png": - case "image/png": - $ext = "png"; - break; - case "image/gif": - $ext = "gif"; - break; - } - - if($ext) - { - $filename = "avatar_".$avatar['uid'].".".$ext; - $fp = @fopen("../uploads/avatars/".$filename, "wb"); - if(!$fp) - { - die("Unable to create file. Please check permissions and refresh page."); - } - fwrite($fp, $avatar['avatar']); - fclose($fp); - $db->write_query("UPDATE ".TABLE_PREFIX."avatars SET donecon='1' WHERE uid='".$avatar['uid']."'"); - $db->write_query("UPDATE ".TABLE_PREFIX."users SET avatar='uploads/avatars/$filename', avatartype='upload' WHERE uid='".$avatar['uid']."'"); - } - } - - echo "

    Done.

    "; - $query = $db->simple_select("avatars", "COUNT(uid) AS avatarsrem", "donecon!='1'"); - $cnt = $db->fetch_array($query); - - if($cnt['avatarsrem'] != 0) - { - $nextact = "3_convertavatars"; - $startat = $startat+$app; - $contents .= "

    Done. Click Next to move on to the next set of avatars.

    "; - } - else - { - $db->drop_table("avatars"); - $nextact = "3_dbchanges2"; - $contents .= "

    Done

    All avatars have been moved to the file system. The next step is performing the necessary database modifications for MyBB Gold.

    "; - } - $output->print_contents($contents); - $output->print_footer($nextact); -} - -function upgrade3_dbchanges2() -{ - global $db, $output; - - $output->print_header("Database Changes"); - - $contents = "

    Performing necessary database changes.

    "; - - if($db->field_exists("additionalgroups", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP additionalgroups;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD additionalgroups varchar(200) NOT NULL default '' AFTER usergroup;"); - - if($db->field_exists("displaygroup", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP displaygroup;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD displaygroup smallint(6) NOT NULL default '0' AFTER additionalgroups;"); - - if($db->field_exists("candisplaygroup", "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP candisplaygroup;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD candisplaygroup varchar(3) NOT NULL;"); - - if($db->field_exists("reason", "banned")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned DROP reason;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned ADD reason varchar(200) NOT NULL"); - - if($db->field_exists("rulestype", "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP rulestype;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD rulestype smallint(1) NOT NULL;"); - - if($db->field_exists("rulestitle", "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP rulestitle;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD rulestitle varchar(200) NOT NULL;"); - - if($db->field_exists("rules", "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP rules;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD rules text NOT NULL;"); - - if($db->field_exists("usetranslation", "helpdocs")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP helpdocs;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpdocs ADD usetranslation CHAR( 3 ) NOT NULL AFTER document;"); - - if($db->field_exists("enabled", "helpdocs")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpdocs DROP enabled;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpdocs ADD enabled CHAR( 3 ) NOT NULL AFTER usetranslation;"); - - /* - - This will break the upgrade for users who have customised help documents - - $db->write_query("UPDATE ".TABLE_PREFIX."helpdocs SET hid='6' WHERE hid='7'"); - $db->write_query("UPDATE ".TABLE_PREFIX."helpdocs SET hid='7' WHERE hid='8'");*/ - - if($db->field_exists("usetranslation", "helpsections")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpsections DROP usetranslation;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpsections ADD usetranslation CHAR( 3 ) NOT NULL AFTER description;"); - - if($db->field_exists("enabled", "helpsections")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpsections DROP enabled;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpsections ADD enabled CHAR( 3 ) NOT NULL AFTER usetranslation;"); - - if($db->field_exists("firstpost", "threads")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads DROP firstpost;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads ADD firstpost int unsigned NOT NULL default '0' AFTER dateline;"); - - if($db->field_exists("attachquota", "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP attachquota;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD attachquota bigint(30) NOT NULL default '0';"); - - if($db->field_exists("cancustomtitle", "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP cancustomtitle;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD cancustomtitle varchar(3) NOT NULL;"); - - - $db->drop_table("groupleaders"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."groupleaders ( - lid smallint(6) NOT NULL auto_increment, - gid smallint(6) NOT NULL, - uid smallint(6) NOT NULL, - PRIMARY KEY(lid) - );"); - - $db->drop_table("joinrequests"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."joinrequests ( - rid smallint(6) NOT NULL auto_increment, - uid smallint(6) NOT NULL, - gid smallint(6) NOT NULL, - reason varchar(250) NOT NULL, - dateline bigint(30) NOT NULL, - PRIMARY KEY(rid) - );"); - - $db->drop_table("online"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."sessions ( - sid varchar(32) NOT NULL default '', - uid int unsigned NOT NULL default '0', - ip varchar(40) NOT NULL default '', - time bigint(30) NOT NULL default '0', - location varchar(150) NOT NULL default '', - useragent varchar(100) NOT NULL default '', - anonymous int(1) NOT NULL default '0', - nopermission int(1) NOT NULL default '0', - location1 int(10) NOT NULL default '0', - location2 int(10) NOT NULL default '0', - PRIMARY KEY(sid), - KEY location1 (location1), - KEY location2 (location2) - );"); - - if($db->field_exists("salt", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP salt;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD salt varchar(10) NOT NULL AFTER password;"); - - - if($db->field_exists("loginkey", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP loginkey;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD loginkey varchar(50) NOT NULL AFTER salt;"); - - - if($db->field_exists("pmnotify", "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP pmnotify;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD pmnotify varchar(3) NOT NULL AFTER pmpopup;"); - - $collation = $db->build_create_table_collation(); - - $db->drop_table("settinggroups"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settinggroups ( - gid smallint(6) NOT NULL auto_increment, - name varchar(220) NOT NULL default '', - description text NOT NULL, - disporder smallint(6) NOT NULL default '0', - isdefault char(3) NOT NULL default '', - PRIMARY KEY (gid) - ) ENGINE=MyISAM{$collation};"); - - $db->drop_table("settings"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settings ( - sid smallint(6) NOT NULL auto_increment, - name varchar(120) NOT NULL default '', - title varchar(120) NOT NULL default '', - description text NOT NULL, - optionscode text NOT NULL, - value text NOT NULL, - disporder smallint(6) NOT NULL default '0', - gid smallint(6) NOT NULL default '0', - PRIMARY KEY (sid) - ) ENGINE=MyISAM{$collation};"); - - $db->drop_table("datacache"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."datacache ( - title varchar(30) NOT NULL default '', - cache mediumtext NOT NULL, - PRIMARY KEY(title) - ) ENGINE=MyISAM{$collation};"); - - $contents .= "

    Done

    "; - $contents .= "

    Dropping settings and rebuilding them..."; - - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (1, 'General Configuration', 'This section contains various settings such as your board name and url, as well as your website name and url.', 2, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (3, 'Date and Time Formats', 'Here you can specify the different date and time formats used to display dates and times on the forums.', 4, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (7, 'Forum Display Options', 'This section allows you to manage the various settings used on the forum fisplay (forumdisplay.php) of your boards such as enabling and disabling different features.', 6, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (8, 'Show Thread Options', 'This section allows you to manage the various settings used on the thread display page (showthread.php) of your boards such as enabling and disabling different features.', 7, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (11, 'Private Messaging', 'Various options with relation to the MyBB Private Messaging system (private.php) can be managed and set here.', 11, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (12, 'Member List', 'This section allows you to control various aspects of the board member listing (memberlist.php), such as how many members to show per page, and which features to enable or disable.', 10, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (13, 'Posting', 'These options control the various elements in relation to posting messages on the forums.', 9, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (14, 'Banning Options', '', 15, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (16, 'Forum Home Options', 'This section allows you to manage the various settings used on the forum home (index.php) of your boards such as enabling and disabling different features.', 5, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (17, 'Calendar', 'The board calendar allows the public and private listing of events and members'' birthdays. This section allows you to control and manage the settings for the Calendar.', 12, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (27, 'Server and Optimization Options', 'These options allow you to set various server and optimization preferences allowing you to reduce the load on your server, and gain better performance on your board.', 3, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (19, 'User Registration and Profile Options', 'Here you can control various settings with relation to user account registration and account management.', 8, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (20, 'Clickable Smilies and BB Code', '', 17, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (23, 'Who''s Online', '', 13, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (26, 'Board Online / Offline', 'These settings allow you to globally turn your forums online or offline, and allow you to specify a reason for turning them off.', 1, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (28, 'Control Panel Preferences (Global)', '', 19, 'yes');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settinggroups (gid, name, description, disporder, isdefault) VALUES (30, 'Portal Settings', '', 14, 'yes');"); - - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'boardclosed', 'Board Closed', 'If you need to close your forums to make some changes or perform an upgrade, this is the global switch. Viewers will not be able to view your forums, however, they will see a message with the reason you specify below.
    \r\n
    \r\nAdministrators will still be able to view the forums.', 'yesno', 'no', 1, 26);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'boardclosed_reason', 'Board Closed Reason', 'If your forum is closed, you can set a message here that your visitors will be able to see when they visit your forums.', 'textarea', 'These forums are currently closed for maintenance. Please check back later.', 2, 26);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bbname', 'Board Name', 'The name of your message boards. We recommend that it is not over 75 characters.', 'text', 'Your Forums', 1, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bburl', 'Board URL', 'The url to your forums.
    Include the http://. Do NOT include a trailing slash.', 'text', 'http://', 2, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'homename', 'Homepage Name', 'The name of your homepage. This will appear in the footer with a link to it.', 'text', 'Your Website', 3, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'homeurl', 'Homepage URL', 'The full URL of your homepage. This will be linked to in the footer along with its name.', 'text', 'http://', 4, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'dateformat', 'Date Format', 'The format of the dates used on the forum. This format uses the PHP date() function. We recommend not changing this unless you know what you''re doing.', 'text', 'm-d-Y', 1, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'adminemail', 'Admin Email', 'The administrator''s email address. This will be used for outgoing emails sent via the forums.', 'text', 'root@localhost', 5, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'timeformat', 'Time Format', 'The format of the times used on the forum. This format uses PHP''s date() function. We recommend not changing this unless you know what you''re doing.', 'text', 'h:i A', 2, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'threadsperpage', 'Threads Per Page', '', 'text', '20', 1, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'hottopic', 'Replys For Hot Topic', 'The number of replies that is needed for a topic to be considered ''hot''.', 'text', '20', 3, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cookiedomain', 'Cookie Domain', 'The domain which cookies should be set to. This can remain blank. It should also start with a . so it covers all subdomains.', 'text', '', 8, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cookiepath', 'Cookie Path', 'The path which cookies are set to, we recommend setting this to the full directory path to your forums with a trailing slash.', 'text', '', 9, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'postsperpage', 'Posts Per Page:', 'The number of posts to display per page. We recommend its not higher than 20 for people with slower connections.', 'text', '10', 1, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'regdateformat', 'Registered Date Format', 'The format used on showthread where it shows when the user registered.', 'text', 'M Y', 3, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sigmycode', 'Allow MyCode in Signatures', 'Do you want to allow MyCode to be used in users'' signatures?', 'yesno', 'yes', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sigsmilies', 'Allow Smilies in Signatures', 'Do you want to allow smilies to be used in users'' signatures?', 'yesno', 'yes', 3, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sightml', 'Allow HTML in Signatures', 'Do you want to allow HTML to be used in users'' signatures?', 'yesno', 'no', 4, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'sigimgcode', 'Allow [img] Code in Signatures', 'Do you want to allow [img] code to be used in users'' signatures?', 'yesno', 'yes', 5, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'threadusenetstyle', 'Usenet Style Thread View', 'Selecting yes will cause posts to look similar to how posts look in USENET. No will cause posts to look the modern way.', 'yesno', 'no', 4, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowhtml', 'Allow HTML', 'Selecting yes will allow HTML to be used in private messages.', 'yesno', 'no', 1, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowmycode', 'Allow MyCode', 'Selecting yes will allow MyCode to be used in private messages.', 'yesno', 'yes', 2, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowsmilies', 'Allow Smilies', 'Selecting yes will allow Smilies to be used in private messages.', 'yesno', 'yes', 3, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'pmsallowimgcode', 'Allow [img] Code', 'Selecting yes will allow [img] Code to be used in private messages.', 'yesno', 'yes', 4, 11);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'siglength', 'Length limit in Signatures', 'The maximum number of characters a user can place in a signature.', 'text', '255', 6, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'messagelength', 'Maximum Message Length', 'The maximum number of characters to allow in a message. A setting of 0 allows an unlimited length.', 'text', '0', 1, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'membersperpage', 'Members Per Page', 'The number of members to show per page on the member list.', 'text', '20', 1, 12);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'load', '*NIX Load Limiting', 'Limit the maximum server load before myBB rejects people. 0 for none. Recommended limit is 5.0.', 'text', '0', 5, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'emailkeep', 'Users Keep Email', 'If a current user has an email already registered in your banned list, should he be allowed to keep it.', 'yesno', 'no', 4, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'ipban', 'Ban by IP', 'Here, you may specify IP addresses or a range of IP addresses. You must separate each IP with a space.', 'textarea', '', 2, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'emailban', 'Ban by Email', 'You may specify specific email addresses to ban, or you may specify a domain. You must separate email addresses and domains with a space.', 'textarea', '', 3, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'avatarsize', 'Max Uploaded Avatar Size', 'Maximum file size (in kilobytes) of uploaded avatars.', 'text', '10', 8, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'avatardir', 'Avatar Directory', 'The directory where your avatars are stored. These are used in the avatar list in the User CP.', 'text', 'images/avatars', 7, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showeditedby', 'Show ''edited by'' Messages', 'Once a post is edited by a regular user, do you want to show the edited by message?', 'yesno', 'yes', 6, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxposts', 'Maximum Posts Per Day', 'This is the total number of posts allowed per user per day. 0 for unlimited.', 'text', '0', 2, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showeditedbyadmin', 'Show ''edited by'' Message for Forum Staff', 'Do you want to show edited by messages for forum staff when they edit their posts?', 'yesno', 'yes', 7, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bannedusernames', 'Banned Usernames', 'Ban users from registering certain usernames. Seperate them with a space.', 'textarea', '', 1, 14);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxpolloptions', 'Maximum Number of Poll Options', 'The maximum number of options for polls that users can post.', 'text', '10', 3, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'dotfolders', 'Use ''dot'' Icons', 'Do you want to show dots on the thread indicators of threads users have participated in.', 'yesno', 'yes', 8, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'contactlink', 'Contact Us Link', 'This will be used for the Contact Us link on the bottom of all the forum pages. Can either be an email address (using mailto:email@website.com) or a hyperlink.', 'text', '#', 6, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showdescriptions', 'Show Forum Descriptions?', 'This option will allow you to turn off showing the descriptions for forums.', 'yesno', 'yes', 1, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showbirthdays', 'Show Today''s Birthdays?', 'Do you want to show today''s birthdays on the forum homepage?', 'yesno', 'yes', 2, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showwol', 'Show Who''s Online?', 'Display the currently active users on the forum home page.', 'yesno', 'yes', 4, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'hideprivateforums', 'Hide Private Forums?', 'You can hide private forums by turning this option on. This option also hides forums on the forum jump and all subforums.', 'yesno', 'yes', 3, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showsimilarthreads', 'Show ''Similar Threads'' Table', 'The Similar Threads table shows threads that are relevant to the thread being read. You can set the relevancy below.', 'yesno', 'no', 5, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'similarityrating', 'Similar Threads Relevancy Rating', 'This allows you to limit similar threads to ones more relevant (0 being not relevant). This number should not be over 10 and should not be set low (<5) for large forums.', 'text', '1', 7, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'similarlimit', 'Similar Threads Limit', 'Here you can change the total amount of similar threads to be shown in the similar threads table. It is recommended that it is not over 15 for 56k users.', 'text', '10', 8, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'privateeventcolor', 'Private Events Color', 'The color that private events will be shown in on the main calendar page.', 'text', 'red', 2, 17);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'publiceventcolor', 'Public Events Color', 'The color that public events will be shown in on the main calendar page.', 'text', 'green', 1, 17);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'hottopicviews', 'Views For Hot Topic', 'The number of views a thread can have before it is considered ''hot''.', 'text', '150', 7, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'logip', 'Log Posting IP Addresses', 'Do you wish to log ip addresses of users who post, and who you want to show ip addresses to.', 'radio\r\nno=Do not log IP\r\nhide=Show to Admins & Mods\r\nshow=Show to all Users', 'hide', 3, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'statslimit', 'Stats Limit', 'The number of threads to show on the stats page for most replies and most views.', 'text', '15', 10, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'modlist', 'Forums'' Moderator Listing', 'Here you can turn on or off the listing of moderators for each forum on index.php and forumdisplay.php', 'onoff', 'on', 5, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'smilieinserter', 'Clickable Smilies Inserter', 'Clickable smilies will appear on the posting pages if this option is set to ''on''.', 'onoff', 'on', 1, 20);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'smilieinsertertot', 'No. of Smilies to show', 'Enter the total number of smilies to show on the clickable smilie inserter.', 'text', '20', 2, 20);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'smilieinsertercols', 'No. of Smilie Cols to Show', 'Enter the number of columns you wish to show on the clickable smilie inserter.', 'text', '4', 3, 20);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showindexstats', 'Show Small Stats Section', 'Do you want to show the total number of threads, posts, members, and the last member on the forum home?', 'yesno', 'yes', 6, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'regtype', 'Registration Method', 'Please select the method of registration to use when users register.', 'select\r\ninstant=Instant Activation\r\nverify=Send Email Verification\r\nrandompass=Send Random Password\r\nadmin=Administrator Activation', 'verify', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'userpppoptions', 'User Selectable Posts Per Page', 'If you would like to allow users to select how many posts are shown per page in a thread, enter the options they should be able to select separated with commas. If this is left blank they will not be able to choose how many posts are shown per page.', 'text', '5,10,20,25,30,40,50', 2, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'usertppoptions', 'User Selectable Threads Per Page', 'If you would like to allow users to select how many threads per page are shown in a forum, enter the options they should be able to select separated with commas. If this is left blank they will not be able to choose how many threads are shown per page.', 'text', '10,20,25,30,40,50', 6, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'wolcutoffmins', 'Cut-off Time (mins)', 'The number of minutes before a user is marked offline. Recommended: 15.', 'text', '15', 1, 23);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'postfloodcheck', 'Post Flood Checking', 'Set to on if you want to enable flood checking for posts. Specifiy the time between posts below.', 'onoff', 'on', 4, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'postfloodsecs', 'Post Flood Time', 'Set the time (in seconds) users have to wait between posting, to be in effect; the option above must be on.', 'text', '60', 5, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'gzipoutput', 'Use GZip Page Compression?', 'Do you want to compress pages in GZip format when they are sent to the browser? This means quicker downloads for your visitors, and less traffic usage for you. The level of the compression is set by the server''s load.', 'yesno', 'yes', 1, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'standardheaders', 'Send Standard Headers', 'With some web servers, this option can cause problems; with others, it is needed. ', 'yesno', 'no', 2, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'nocacheheaders', 'Send No Cache Headers', 'With this option you can prevent caching of the page by the browser.', 'yesno', 'no', 3, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxpostimages', 'Maximum Images per Post', 'Enter the maximum number of images (including smilies) a user can put in their post. Set to 0 to disable this.', 'text', '10', 8, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxsigimages', 'Maximum Number of Images per Signature', 'Enter the maximum number of images (including smilies) a user can put in their signature. Set to 0 to disable this.', 'text', '2', 2, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'browsingthisforum', 'Users Browsing this Forum', 'Here you can turn off the ''users browsing this forum'' feature.', 'onoff', 'on', 9, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'usereferrals', 'Use Referrals System', 'Do you want to use the user referrals system on these forums?', 'yesno', 'yes', 3, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'subscribeexcerpt', 'Amount of Characters for Subscription Previews', 'How many characters of the post do you want to send with the email notification of a new reply.', 'text', '100', 9, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cpstyle', 'Control Panel Style', 'The Default style that the control panel will use. Styles are inside the styles folder. A folder name inside that folder becomes the style title and style.css inside the style title folder is the css style file.', 'cpstyle', 'Axiom', 2, 28);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'cplanguage', 'Control Panel Language', 'The language of the control panel.', 'adminlanguage', 'english', 1, 28);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'minnamelength', 'Minimum Username Length', 'The minimum number of characters a username can be when a user registers.', 'text', '3', 5, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxnamelength', 'Maximum Username Length', 'The maximum number of characters a username can be when a user registers.', 'text', '30', 6, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'redirects', 'Friendly Redirection Pages', 'This will enable friendly redirection pages instead of bumping the user directly to the page.', 'onoff', 'on', 4, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'betweenregstime', 'Time Between Registrations', 'The amount of time (in hours) to disallow registrations for users who have already registered an account under the same ip address.', 'text', '24', 2, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxregsbetweentime', 'Maximum Registrations Per IP Address', 'This option allows you to set the maximum amount of times a certain user can register within the timeframe specified above.', 'text', '2', 4, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showstats', 'Show forum statistics', 'Do you want to show the total number of posts, threads, members and the last registered member on the portal page?', 'yesno', 'yes', 5, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showpms', 'Show the number of PMs to users', 'Do you want to show the number of private messages the current user has in their pm system.', 'yesno', 'yes', 4, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showwelcome', 'Show the Welcome box', 'Do you want to show the welcome box to visitors / users.', 'yesno', 'yes', 3, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_numannouncements', 'Number of announcements to show', 'Please enter the number of announcements to show on the main page.', 'text', '10', 2, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showstats', 'Show forum statistics', 'Do you want to show the total number of posts, threads, members and the last registered member on the portal page?', 'yesno', 'yes', 5, 29);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showwol', 'Show Whos Online', 'Do you want to show the ''whos online'' information to users when they visit the portal page?', 'yesno', 'yes', 6, 29);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_announcementsfid', 'Forum ID to pull announcements from', 'Please enter the forum id (fid) of the forum you wish to pull the announcements from', 'text', '1', 1, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showdiscussionsnum', 'Number of latest discussions to show', 'Please enter the number of current forum discussions to show on the portal page.', 'text', '10', 8, 29);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showwol', 'Show Who''s Online', 'Do you want to show the ''Who''s online'' information to users when they visit the portal page?', 'yesno', 'yes', 6, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showsearch', 'Show Search Box', 'Do you want to show the search box, allowing users to quickly search the forums on the portal?', 'yesno', 'yes', 7, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showdiscussions', 'Show Latest Discussions', 'Do you wish to show the current forum discussions on the portal page?', 'yesno', 'yes', 8, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'portal_showdiscussionsnum', 'Number of latest discussions to show', 'Please enter the number of current forum discussions to show on the portal page.', 'text', '10', 9, 30);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'attachthumbh', 'Attached Thumbnail Maximum Height', 'Enter the height that attached thumbnails should be generated at.', 'text', '60', 12, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'attachthumbw', 'Attached Thumbnail Maximum Width', 'Enter the width that attached thumbnails should be generated at.', 'text', '60', 13, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxattachments', 'Maximum Attachments Per Post', 'THe maximum number of attachments a user is allowed to upload per post.', 'text', '5', 10, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'attachthumbnails', 'Show Attached Thumbnails in Posts', 'Do you want to show the generated thumbnails for attached images inside the posts?', 'yesno', 'yes', 11, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'polloptionlimit', 'Maximum Option Length', 'The maximum length that each poll option can be. (Set to 0 to disable).', 'text', '250', 1, 13);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'timezoneoffset', 'Default Timezone Offset', 'Here you can set the default timezone offset for guests and members using the default offset.', 'text', '+10', 4, 3);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'bblanguage', 'Default Language', 'The default language that MyBB should use for guests and for users without a selected language in their user control panel.', 'language', 'english', 7, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'regimage', 'Antispam Registration Image', 'If yes, and GD is installed, an image will be shown during registration where users are required to enter the text contained within the image to continue with registration.', 'onoff', 'on', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'reportmethod', 'Reported Posts Medium', 'Please select from the list how you want reported posts to be dealt with. Storing them in the database is probably the better of the options listed.', 'radio\r\ndb=Stored in the Database\r\npms=Sent as Private Messages\r\nemail=Sent via Email', 'db', 1, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'threadreadcut', 'Read Threads in Database (Days)', 'The number of days that you wish to keep thread read information in the database. For large boards, we do not recommend a high number as the board will become slower. Set to 0 to disable.', 'text', '7', 3, 8);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'announcementlimit', 'Announcements Limit', 'The number of forum announcements to show in the thread listing on the forum display pages. Set to 0 to show all active announcements.', 'text', '2', 10, 7);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'uploadspath', 'Uploads Path', 'The path used for all board uploads. It must be chmod 777 (on Unix servers).', 'text', './uploads', 1, 27);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'maxavatardims', 'Maximum Avatar Dimensions', 'The maximum dimensions that an avatar can be, in the format of widthxheight. If this is left blank then there will be no dimension restriction.', 'text', '10x10', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'avataruploadpath', 'Avatar Upload Path', 'This is the path where custom avatars will be uploaded to. This directory must be chmod 777 (writable) for uploads to work.', 'text', './uploads/avatars', 1, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'subforumsindex', 'Subforums to show on Index listing', 'The number of subforums that you wish to show inside forums on the index and forumdisplay pages. Set to 0 to disable this', 'text', '2', 1, 16);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'disableregs', 'Disable Registrations', 'Allows you to turn off the capability for users to register with one click.', 'yesno', 'no', 9, 19);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'decpoint', 'Decimal Point', 'The decimal point you use in your region.', 'text', '.', 1, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'thousandssep', 'Thousands Numeric Separator', 'The punctuation you want to use . (for example, the setting \',\' with the number 1200 will give you a number such as 1,200)', 'text', ',', 1, 1);"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."settings (sid, name, title, description, optionscode, value, disporder, gid) VALUES (NULL, 'showvernum', 'Show Version Numbers', 'Allows you to turn off the public display of version numbers in MyBB.', 'onoff', 'off', 1, 1);"); - - echo "Done

    "; - $output->print_contents($contents); - $output->print_footer("3_dbchanges3"); -} - -function upgrade3_dbchanges3() -{ - global $db, $output; - - $output->print_header("Database Field Size Changes"); - - $contents = "

    Performing necessary database field size changes.

    "; - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminlog CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions CHANGE uid uid int(10) NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."announcements CHANGE aid aid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."announcements CHANGE fid fid int(10) NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."announcements CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments CHANGE aid aid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments CHANGE visible visible int(1) NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachments CHANGE downloads downloads int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachtypes CHANGE atid atid int unsigned NOT NULL auto_increment;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."awaitingactivation CHANGE aid aid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."awaitingactivation CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."badwords CHANGE bid bid int unsigned NOT NULL auto_increment;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned CHANGE gid gid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned CHANGE oldgroup oldgroup int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned CHANGE admin admin int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events CHANGE eid eid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."events CHANGE author author int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."favorites CHANGE fid fid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."favorites CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."favorites CHANGE tid tid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumpermissions CHANGE pid pid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumpermissions CHANGE fid fid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumpermissions CHANGE gid gid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums CHANGE fid fid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums CHANGE pid pid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums CHANGE disporder disporder smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums CHANGE threads threads int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums CHANGE posts posts int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums CHANGE style style smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumsubscriptions CHANGE fsid fsid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumsubscriptions CHANGE fid fid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumsubscriptions CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."groupleaders CHANGE lid lid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."groupleaders CHANGE gid gid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."groupleaders CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpdocs CHANGE hid hid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpdocs CHANGE sid sid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpdocs CHANGE disporder disporder smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpsections CHANGE sid sid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."helpsections CHANGE disporder disporder smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."icons CHANGE iid iid smallint unsigned NOT NULL auto_increment;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."joinrequests CHANGE rid rid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."joinrequests CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."joinrequests CHANGE gid gid smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderatorlog CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderatorlog CHANGE fid fid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderatorlog CHANGE tid tid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderatorlog CHANGE pid pid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderators CHANGE mid mid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderators CHANGE fid fid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderators CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."polls CHANGE pid pid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."polls CHANGE tid tid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."polls CHANGE numoptions numoptions smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."polls CHANGE numvotes numvotes smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."pollvotes CHANGE vid vid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."pollvotes CHANGE pid pid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."pollvotes CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."pollvotes CHANGE voteoption voteoption smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE pid pid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE tid tid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE replyto replyto int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE fid fid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE icon icon smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE edituid edituid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts CHANGE visible visible int(1) NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages CHANGE pmid pmid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages CHANGE toid toid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages CHANGE fromid fromid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages CHANGE folder folder smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."privatemessages CHANGE icon icon smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."profilefields CHANGE fid fid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."profilefields CHANGE disporder disporder smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."profilefields CHANGE length length smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."profilefields CHANGE maxlength maxlength smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reportedposts CHANGE rid rid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reportedposts CHANGE pid pid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reportedposts CHANGE tid tid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reportedposts CHANGE fid fid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reportedposts CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reputation CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reputation CHANGE pid pid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."reputation CHANGE adduid adduid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."searchlog CHANGE sid sid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."searchlog CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."searchlog CHANGE limitto limitto smallint(4) NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."settinggroups CHANGE gid gid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."settinggroups CHANGE disporder disporder smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."settings CHANGE sid sid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."settings CHANGE disporder disporder smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."settings CHANGE gid gid smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."smilies CHANGE sid sid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."smilies CHANGE disporder disporder smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates CHANGE tid tid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates CHANGE sid sid int(10) NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templatesets CHANGE sid sid smallint unsigned NOT NULL auto_increment;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes CHANGE tid tid smallint unsigned NOT NULL auto_increment;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadratings CHANGE rid rid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadratings CHANGE tid tid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadratings CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadratings CHANGE rating rating smallint unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE tid tid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE fid fid smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE icon icon smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE poll poll int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE uid uid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE replies replies int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE views views int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE sticky sticky int(1) NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE numratings numratings smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE totalratings totalratings smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads CHANGE visible visible int(1) NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsread CHANGE tid tid int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threadsread CHANGE uid uid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."userfields CHANGE ufid ufid int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups CHANGE gid gid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups CHANGE stars stars smallint(4) NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE uid uid int unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE usergroup usergroup smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE displaygroup displaygroup smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE style style smallint unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE referrer referrer int unsigned NOT NULL;"); - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usertitles CHANGE utid utid smallint unsigned NOT NULL auto_increment;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usertitles CHANGE posts posts int unsigned NOT NULL;"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usertitles CHANGE stars stars smallint(4) NOT NULL;"); - - echo "Done

    "; - - $contents .= "WARNING: The next step will delete any custom themes or templates you have! Please back them up before continuing!

    "; - $output->print_contents($contents); - $output->print_footer("3_done"); -} diff --git a/html/forums/install/resources/upgrade30.php b/html/forums/install/resources/upgrade30.php deleted file mode 100644 index 0cf7603..0000000 --- a/html/forums/install/resources/upgrade30.php +++ /dev/null @@ -1,2511 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade30_dbchanges() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Updating Database"); - - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - $db->update_query('settings', array('value' => -1), 'name IN (\'postmergefignore\', \'postmergeuignore\') AND value=\'\''); - $db->update_query('settings', array('optionscode' => 'forumselect'), 'name IN (\'postmergefignore\', \'portal_announcementsfid\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'groupselect'), 'name=\'postmergeuignore\' AND optionscode=\'text\''); - - if($db->type == "mysql" || $db->type == "mysqli") - { - if($db->index_exists('posts', 'tiddate')) - { - $db->drop_index('posts', 'tiddate'); - } - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD INDEX (`tid`, `dateline`)"); - } - - if($db->field_exists('modposts', 'usergroups')) - { - $db->drop_column("usergroups", "modposts"); - } - - if($db->field_exists('modthreads', 'usergroups')) - { - $db->drop_column("usergroups", "modthreads"); - } - - if($db->field_exists('mod_edit_posts', 'usergroups')) - { - $db->drop_column("usergroups", "mod_edit_posts"); - } - - if($db->field_exists('modattachments', 'usergroups')) - { - $db->drop_column("usergroups", "modattachments"); - } - - if($db->field_exists('regex', 'profilefields')) - { - $db->drop_column("profilefields", "regex"); - } - - if($db->field_exists('allowhtml', 'profilefields')) - { - $db->drop_column("profilefields", "allowhtml"); - } - - if($db->field_exists('allowmycode', 'profilefields')) - { - $db->drop_column("profilefields", "allowmycode"); - } - - if($db->field_exists('allowsmilies', 'profilefields')) - { - $db->drop_column("profilefields", "allowsmilies"); - } - - if($db->field_exists('allowimgcode', 'profilefields')) - { - $db->drop_column("profilefields", "allowimgcode"); - } - - if($db->field_exists('allowvideocode', 'profilefields')) - { - $db->drop_column("profilefields", "allowvideocode"); - } - - if($db->field_exists('viewableby', 'profilefields')) - { - $db->drop_column("profilefields", "viewableby"); - } - - if($db->field_exists('editable`', 'profilefields')) - { - $db->drop_column("profilefields", "editable"); - } - - if($db->field_exists('editableby', 'profilefields')) - { - $db->drop_column("profilefields", "editableby"); - } - - if($db->field_exists('oldgroup', 'awaitingactivation')) - { - $db->drop_column("awaitingactivation", "oldgroup"); - } - - if($db->field_exists('status', 'forums')) - { - $db->drop_column("forums", "status"); - } - - if($db->field_exists('posthash', 'posts')) - { - $db->drop_column("posts", "posthash"); - } - - if($db->field_exists('isdefault', 'templategroups')) - { - $db->drop_column("templategroups", "isdefault"); - } - - if($db->table_exists('reportedposts')) - { - if($db->field_exists('type', 'reportedposts')) - { - $db->drop_column("reportedposts", "type"); - } - - if($db->field_exists('reports', 'reportedposts')) - { - $db->drop_column("reportedposts", "reports"); - } - - if($db->field_exists('reporters', 'reportedposts')) - { - $db->drop_column("reportedposts", "reporters"); - } - - if($db->field_exists('lastreport', 'reportedposts')) - { - $db->drop_column("reportedposts", "lastreport"); - } - } - - if($db->field_exists('warnings', 'promotions')) - { - $db->drop_column("promotions", "warnings"); - } - - if($db->field_exists('warningstype', 'promotions')) - { - $db->drop_column("promotions", "warningstype"); - } - - if($db->field_exists('useragent', 'adminsessions')) - { - $db->drop_column("adminsessions", "useragent"); - } - - if($db->field_exists('deletedthreads', 'forums')) - { - $db->drop_column("forums", "deletedthreads"); - } - - if($db->field_exists('deletedposts', 'forums')) - { - $db->drop_column("forums", "deletedposts"); - } - - if($db->field_exists('threads', 'promotions')) - { - $db->drop_column('promotions', 'threads'); - } - - if($db->field_exists('threadtype', 'promotions')) - { - $db->drop_column('promotions', 'threadtype'); - } - - if($db->field_exists('online', 'promotions')) - { - $db->drop_column('promotions', 'online'); - } - - if($db->field_exists('onlinetype', 'promotions')) - { - $db->drop_column('promotions', 'onlinetype'); - } - - if($db->field_exists('modposts', 'forums')) - { - $db->drop_column("forums", "modposts"); - } - - if($db->field_exists('modthreads', 'forums')) - { - $db->drop_column("forums", "modthreads"); - } - - if($db->field_exists('mod_edit_posts', 'forums')) - { - $db->drop_column("forums", "mod_edit_posts"); - } - - if($db->field_exists('modattachments', 'forums')) - { - $db->drop_column("forums", "modattachments"); - } - - // Avoid complex convert coding... - if($db->field_exists('hidden', 'profilefields')) - { - $db->update_query('profilefields', array('hidden' => 2), 'hidden=1'); - $db->update_query('profilefields', array('hidden' => 1), 'hidden=0'); - $db->update_query('profilefields', array('hidden' => 0), 'hidden=2'); - - switch($db->type) - { - case "pgsql": - $db->rename_column("profilefields", "hidden", "profile", "smallint", "set", "'0'"); - break; - default: - $db->rename_column("profilefields", "hidden", "profile", "tinyint(1) NOT NULL default '0'"); - break; - } - } - - switch($db->type) - { - case "pgsql": - $db->add_column("usergroups", "modposts", "smallint NOT NULL default '0' AFTER canratethreads"); - $db->add_column("usergroups", "modthreads", "smallint NOT NULL default '0' AFTER modposts"); - $db->add_column("usergroups", "mod_edit_posts", "smallint NOT NULL default '0' AFTER modthreads"); - $db->add_column("usergroups", "modattachments", "smallint NOT NULL default '0' AFTER mod_edit_posts"); - $db->add_column("profilefields", "regex", "text NOT NULL default ''"); - $db->add_column("profilefields", "allowhtml", "smallint NOT NULL default '0'"); - $db->add_column("profilefields", "allowmycode", "smallint NOT NULL default '0'"); - $db->add_column("profilefields", "allowsmilies", "smallint NOT NULL default '0'"); - $db->add_column("profilefields", "allowimgcode", "smallint NOT NULL default '0'"); - $db->add_column("profilefields", "allowvideocode", "smallint NOT NULL default '0'"); - $db->add_column("profilefields", "viewableby", "text NOT NULL default ''"); - $db->add_column("profilefields", "editableby", "text NOT NULL default ''"); - $db->add_column("templategroups", "isdefault", "smallint NOT NULL default '0'"); - if($db->table_exists('reportedposts')) - { - $db->add_column("reportedposts", "type", "varchar(50) NOT NULL default ''"); - $db->add_column("reportedposts", "reports", "int NOT NULL default '0'"); - $db->add_column("reportedposts", "reporters", "text NOT NULL default ''"); - $db->add_column("reportedposts", "lastreport", "bigint NOT NULL default '0'"); - } - $db->add_column("promotions", "threads", "int NOT NULL default '0' AFTER posttype"); - $db->add_column("promotions", "threadtype", "varchar(2) NOT NULL default '' AFTER threads"); - $db->add_column("promotions", "warnings", "int NOT NULL default '0' AFTER referralstype"); - $db->add_column("promotions", "warningstype", "varchar(2) NOT NULL default '' AFTER warnings"); - $db->add_column("promotions", "online", "int NOT NULL default '0' AFTER warningstype"); - $db->add_column("promotions", "onlinetype", "varchar(20) NOT NULL default '' AFTER online"); - $db->add_column("adminsessions", "useragent", "varchar(100) NOT NULL default ''"); - $db->add_column("forums", "deletedthreads", "int NOT NULL default '0' AFTER unapprovedposts"); - $db->add_column("forums", "deletedposts", "int NOT NULL default '0' AFTER deletedthreads"); - break; - case "sqlite": - $db->add_column("usergroups", "modposts", "tinyint(1) NOT NULL default '0' AFTER canratethreads"); - $db->add_column("usergroups", "modthreads", "tinyint(1) NOT NULL default '0' AFTER modposts"); - $db->add_column("usergroups", "mod_edit_posts", "tinyint(1) NOT NULL default '0' AFTER modthreads"); - $db->add_column("usergroups", "modattachments", "tinyint(1) NOT NULL default '0' AFTER mod_edit_posts"); - $db->add_column("profilefields", "regex", "text NOT NULL default ''"); - $db->add_column("profilefields", "allowhtml", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowmycode", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowsmilies", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowimgcode", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowvideocode", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "viewableby", "text NOT NULL default ''"); - $db->add_column("profilefields", "editableby", "text NOT NULL default ''"); - $db->add_column("templategroups", "isdefault", "tinyint(1) NOT NULL default '0'"); - if($db->table_exists('reportedposts')) - { - $db->add_column("reportedposts", "type", "varchar(50) NOT NULL default ''"); - $db->add_column("reportedposts", "reports", "int NOT NULL default '0'"); - $db->add_column("reportedposts", "reporters", "text NOT NULL default ''"); - $db->add_column("reportedposts", "lastreport", "bigint NOT NULL default '0'"); - } - $db->add_column("promotions", "warnings", "int NOT NULL default '0' AFTER referralstype"); - $db->add_column("promotions", "warningstype", "varchar(2) NOT NULL default '' AFTER warnings"); - $db->add_column("adminsessions", "useragent", "varchar(100) NOT NULL default ''"); - $db->add_column("forums", "deletedthreads", "int NOT NULL default '0' AFTER unapprovedposts"); - $db->add_column("forums", "deletedposts", "int NOT NULL default '0' AFTER deletedthreads"); - break; - default: - $db->add_column("usergroups", "modposts", "tinyint(1) NOT NULL default '0' AFTER canratethreads"); - $db->add_column("usergroups", "modthreads", "tinyint(1) NOT NULL default '0' AFTER modposts"); - $db->add_column("usergroups", "mod_edit_posts", "tinyint(1) NOT NULL default '0' AFTER modthreads"); - $db->add_column("usergroups", "modattachments", "tinyint(1) NOT NULL default '0' AFTER mod_edit_posts"); - $db->add_column("profilefields", "regex", "text NOT NULL"); - $db->add_column("profilefields", "allowhtml", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowmycode", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowsmilies", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowimgcode", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "allowvideocode", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "viewableby", "text NOT NULL"); - $db->add_column("profilefields", "editableby", "text NOT NULL"); - $db->add_column("templategroups", "isdefault", "tinyint(1) NOT NULL default '0'"); - if($db->table_exists('reportedposts')) - { - $db->add_column("reportedposts", "type", "varchar(50) NOT NULL default ''"); - $db->add_column("reportedposts", "reports", "int unsigned NOT NULL default '0'"); - $db->add_column("reportedposts", "reporters", "text NOT NULL"); - $db->add_column("reportedposts", "lastreport", "bigint(30) NOT NULL default '0'"); - } - $db->add_column("promotions", "threads", "int NOT NULL default '0' AFTER posttype"); - $db->add_column("promotions", "threadtype", "char(2) NOT NULL default '' AFTER threads"); - $db->add_column("promotions", "warnings", "int NOT NULL default '0' AFTER referralstype"); - $db->add_column("promotions", "warningstype", "char(2) NOT NULL default '' AFTER warnings"); - $db->add_column("promotions", "online", "int NOT NULL default '0' AFTER warningstype"); - $db->add_column("promotions", "onlinetype", "varchar(20) NOT NULL default '' AFTER online"); - $db->add_column("adminsessions", "useragent", "varchar(100) NOT NULL default ''"); - $db->add_column("forums", "deletedthreads", "int(10) NOT NULL default '0' AFTER unapprovedposts"); - $db->add_column("forums", "deletedposts", "int(10) NOT NULL default '0' AFTER deletedthreads"); - break; - } - - $db->update_query('profilefields', array('viewableby' => '-1', 'editableby' => '-1')); - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges2"); -} - -function upgrade30_dbchanges2() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Updating Database"); - - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('ipaddress', 'privatemessages')) - { - $db->drop_column('privatemessages', 'ipaddress'); - } - - if($db->field_exists('canonlyreplyownthreads', 'forumpermissions')) - { - $db->drop_column("forumpermissions", "canonlyreplyownthreads"); - } - - if($db->field_exists('modposts', 'forumpermissions')) - { - $db->drop_column("forumpermissions", "modposts"); - } - - if($db->field_exists('modthreads', 'forumpermissions')) - { - $db->drop_column("forumpermissions", "modthreads"); - } - - if($db->field_exists('mod_edit_posts', 'forumpermissions')) - { - $db->drop_column("forumpermissions", "mod_edit_posts"); - } - - if($db->field_exists('modattachments', 'forumpermissions')) - { - $db->drop_column("forumpermissions", "modattachments"); - } - - if($db->field_exists('canbereported', 'usergroups')) - { - $db->drop_column('usergroups', 'canbereported'); - } - - if($db->field_exists('edittimelimit', 'usergroups')) - { - $db->drop_column("usergroups", "edittimelimit"); - } - - if($db->field_exists('maxposts', 'usergroups')) - { - $db->drop_column("usergroups", "maxposts"); - } - - if($db->field_exists('showmemberlist', 'usergroups')) - { - $db->drop_column("usergroups", "showmemberlist"); - } - - if($db->field_exists('canviewboardclosed', 'usergroups')) - { - $db->drop_column("usergroups", "canviewboardclosed"); - } - - if($db->field_exists('deletedposts', 'threads')) - { - $db->drop_column("threads", "deletedposts"); - } - - if($db->field_exists('used', 'captcha')) - { - $db->drop_column("captcha", "used"); - } - - if($db->field_exists('editreason', 'posts')) - { - $db->drop_column("posts", "editreason"); - } - - if($db->field_exists('usethreadcounts', 'forums')) - { - $db->drop_column("forums", "usethreadcounts"); - } - - if($db->field_exists('requireprefix', 'forums')) - { - $db->drop_column("forums", "requireprefix"); - } - - if($db->field_exists('threadnum', 'users')) - { - $db->drop_column("users", "threadnum"); - } - - if($db->field_exists('canchangewebsite', 'usergroups')) - { - $db->drop_column("usergroups", "canchangewebsite"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("forumpermissions", "canonlyreplyownthreads", "smallint NOT NULL default '0' AFTER canpostreplys"); - $db->add_column("forumpermissions", "modposts", "smallint NOT NULL default '0' AFTER caneditattachments"); - $db->add_column("forumpermissions", "modthreads", "smallint NOT NULL default '0' AFTER modposts"); - $db->add_column("forumpermissions", "mod_edit_posts", "smallint NOT NULL default '0' AFTER modthreads"); - $db->add_column("forumpermissions", "modattachments", "smallint NOT NULL default '0' AFTER mod_edit_posts"); - $db->add_column("usergroups", "canbereported", "smallint NOT NULL default '0' AFTER canchangename"); - $db->add_column("usergroups", "canchangewebsite", "smallint NOT NULL default '1' AFTER canbereported"); - $db->add_column("usergroups", "edittimelimit", "int NOT NULL default '0'"); - $db->add_column("usergroups", "maxposts", "int NOT NULL default '0'"); - $db->add_column("usergroups", "showmemberlist", "smallint NOT NULL default '1'"); - $db->add_column("usergroups", "canviewboardclosed", "smallint NOT NULL default '0' AFTER candlattachments"); - $db->add_column("threads", "deletedposts", "int NOT NULL default '0' AFTER unapprovedposts"); - $db->add_column("captcha", "used", "smallint NOT NULL default '0'"); - $db->add_column("posts", "editreason", "varchar(150) NOT NULL default '' AFTER edittime"); - $db->add_column("forums", "usethreadcounts", "smallint NOT NULL default '0' AFTER usepostcounts"); - $db->add_column("forums", "requireprefix", "smallint NOT NULL default '0' AFTER usethreadcounts"); - $db->add_column("users", "threadnum", "int NOT NULL default '0' AFTER postnum"); - break; - default: - $db->add_column("forumpermissions", "canonlyreplyownthreads", "tinyint(1) NOT NULL default '0' AFTER canpostreplys"); - $db->add_column("forumpermissions", "modposts", "tinyint(1) NOT NULL default '0' AFTER caneditattachments"); - $db->add_column("forumpermissions", "modthreads", "tinyint(1) NOT NULL default '0' AFTER modposts"); - $db->add_column("forumpermissions", "mod_edit_posts", "tinyint(1) NOT NULL default '0' AFTER modthreads"); - $db->add_column("forumpermissions", "modattachments", "tinyint(1) NOT NULL default '0' AFTER mod_edit_posts"); - $db->add_column("usergroups", "canbereported", "tinyint(1) NOT NULL default '0' AFTER canchangename"); - $db->add_column("usergroups", "canchangewebsite", "tinyint(1) NOT NULL default '1' AFTER canbereported"); - $db->add_column("usergroups", "edittimelimit", "int(4) NOT NULL default '0'"); - $db->add_column("usergroups", "maxposts", "int(4) NOT NULL default '0'"); - $db->add_column("usergroups", "showmemberlist", "tinyint(1) NOT NULL default '1'"); - $db->add_column("usergroups", "canviewboardclosed", "tinyint(1) NOT NULL default '0' AFTER candlattachments"); - $db->add_column("threads", "deletedposts", "int(10) NOT NULL default '0' AFTER unapprovedposts"); - $db->add_column("captcha", "used", "tinyint(1) NOT NULL default '0'"); - $db->add_column("posts", "editreason", "varchar(150) NOT NULL default '' AFTER edittime"); - $db->add_column("forums", "usethreadcounts", "tinyint(1) NOT NULL default '0' AFTER usepostcounts"); - $db->add_column("forums", "requireprefix", "tinyint(1) NOT NULL default '0' AFTER usethreadcounts"); - $db->add_column("users", "threadnum", "int(10) NOT NULL default '0' AFTER postnum"); - break; - } - - $db->update_query('forums', array('usethreadcounts' => 1), 'usepostcounts = 1'); - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges3"); -} - -function upgrade30_dbchanges3() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Updating Database"); - - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('cansoftdeleteposts', 'moderators')) - { - $db->drop_column('moderators', 'cansoftdeleteposts'); - } - - if($db->field_exists('canrestoreposts', 'moderators')) - { - $db->drop_column("moderators", "canrestoreposts"); - } - - if($db->field_exists('cansoftdeletethreads', 'moderators')) - { - $db->drop_column('moderators', 'cansoftdeletethreads'); - } - - if($db->field_exists('canrestorethreads', 'moderators')) - { - $db->drop_column("moderators", "canrestorethreads"); - } - - if($db->field_exists('candeletethreads', 'moderators')) - { - $db->drop_column("moderators", "candeletethreads"); - } - - if($db->field_exists('canviewunapprove', 'moderators')) - { - $db->drop_column("moderators", "canviewunapprove"); - } - - if($db->field_exists('canviewdeleted', 'moderators')) - { - $db->drop_column("moderators", "canviewdeleted"); - } - - if($db->field_exists('canstickunstickthreads', 'moderators')) - { - $db->drop_column("moderators", "canstickunstickthreads"); - } - - if($db->field_exists('canapproveunapprovethreads', 'moderators')) - { - $db->drop_column("moderators", "canapproveunapprovethreads"); - } - - if($db->field_exists('canapproveunapproveposts', 'moderators')) - { - $db->drop_column("moderators", "canapproveunapproveposts"); - } - - if($db->field_exists('canapproveunapproveattachs', 'moderators')) - { - $db->drop_column("moderators", "canapproveunapproveattachs"); - } - - if($db->field_exists('canmanagepolls', 'moderators')) - { - $db->drop_column("moderators", "canmanagepolls"); - } - - if($db->field_exists('canpostclosedthreads', 'moderators')) - { - $db->drop_column("moderators", "canpostclosedthreads"); - } - - if($db->field_exists('canmanageannouncements', 'moderators')) - { - $db->drop_column("moderators", "canmanageannouncements"); - } - - if($db->field_exists('canmanagereportedposts', 'moderators')) - { - $db->drop_column("moderators", "canmanagereportedposts"); - } - - if($db->field_exists('canviewmodlog', 'moderators')) - { - $db->drop_column("moderators", "canviewmodlog"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("moderators", "cansoftdeleteposts", "smallint NOT NULL default '0' AFTER caneditposts"); - $db->add_column("moderators", "canrestoreposts", "smallint NOT NULL default '0' AFTER cansoftdeleteposts"); - $db->add_column("moderators", "cansoftdeletethreads", "smallint NOT NULL default '0' AFTER candeleteposts"); - $db->add_column("moderators", "canrestorethreads", "smallint NOT NULL default '0' AFTER cansoftdeletethreads"); - $db->add_column("moderators", "candeletethreads", "smallint NOT NULL default '0' AFTER canrestorethreads"); - $db->add_column("moderators", "canviewunapprove", "smallint NOT NULL default '0' AFTER canviewips"); - $db->add_column("moderators", "canviewdeleted", "smallint NOT NULL default '0' AFTER canviewunapprove"); - $db->add_column("moderators", "canstickunstickthreads", "smallint NOT NULL default '0' AFTER canopenclosethreads"); - $db->add_column("moderators", "canapproveunapprovethreads", "smallint NOT NULL default '0' AFTER canstickunstickthreads"); - $db->add_column("moderators", "canapproveunapproveposts", "smallint NOT NULL default '0' AFTER canapproveunapprovethreads"); - $db->add_column("moderators", "canapproveunapproveattachs", "smallint NOT NULL default '0' AFTER canapproveunapproveposts"); - $db->add_column("moderators", "canmanagepolls", "smallint NOT NULL default '0' AFTER canmanagethreads"); - $db->add_column("moderators", "canpostclosedthreads", "smallint NOT NULL default '0' AFTER canmanagepolls"); - $db->add_column("moderators", "canmanageannouncements", "smallint NOT NULL default '0' AFTER canusecustomtools"); - $db->add_column("moderators", "canmanagereportedposts", "smallint NOT NULL default '0' AFTER canmanageannouncements"); - $db->add_column("moderators", "canviewmodlog", "smallint NOT NULL default '0' AFTER canmanagereportedposts"); - break; - default: - $db->add_column("moderators", "cansoftdeleteposts", "tinyint(1) NOT NULL default '0' AFTER caneditposts"); - $db->add_column("moderators", "canrestoreposts", "tinyint(1) NOT NULL default '0' AFTER cansoftdeleteposts"); - $db->add_column("moderators", "cansoftdeletethreads", "tinyint(1) NOT NULL default '0' AFTER candeleteposts"); - $db->add_column("moderators", "canrestorethreads", "tinyint(1) NOT NULL default '0' AFTER cansoftdeletethreads"); - $db->add_column("moderators", "candeletethreads", "tinyint(1) NOT NULL default '0' AFTER canrestorethreads"); - $db->add_column("moderators", "canviewunapprove", "tinyint(1) NOT NULL default '0' AFTER canviewips"); - $db->add_column("moderators", "canviewdeleted", "tinyint(1) NOT NULL default '0' AFTER canviewunapprove"); - $db->add_column("moderators", "canstickunstickthreads", "tinyint(1) NOT NULL default '0' AFTER canopenclosethreads"); - $db->add_column("moderators", "canapproveunapprovethreads", "tinyint(1) NOT NULL default '0' AFTER canstickunstickthreads"); - $db->add_column("moderators", "canapproveunapproveposts", "tinyint(1) NOT NULL default '0' AFTER canapproveunapprovethreads"); - $db->add_column("moderators", "canapproveunapproveattachs", "tinyint(1) NOT NULL default '0' AFTER canapproveunapproveposts"); - $db->add_column("moderators", "canmanagepolls", "tinyint(1) NOT NULL default '0' AFTER canmanagethreads"); - $db->add_column("moderators", "canpostclosedthreads", "tinyint(1) NOT NULL default '0' AFTER canmanagepolls"); - $db->add_column("moderators", "canmanageannouncements", "tinyint(1) NOT NULL default '0' AFTER canusecustomtools"); - $db->add_column("moderators", "canmanagereportedposts", "tinyint(1) NOT NULL default '0' AFTER canmanageannouncements"); - $db->add_column("moderators", "canviewmodlog", "tinyint(1) NOT NULL default '0' AFTER canmanagereportedposts"); - break; - } - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges4"); -} - -function upgrade30_dbchanges4() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Updating Database"); - - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('emailfloodtime', 'usergroups')) - { - $db->drop_column("usergroups", "emailfloodtime"); - } - - if($db->field_exists('canmanageannounce', 'usergroups')) - { - $db->drop_column("usergroups", "canmanageannounce"); - } - - if($db->field_exists('canmanagemodqueue', 'usergroups')) - { - $db->drop_column("usergroups", "canmanagemodqueue"); - } - - if($db->field_exists('canmanagereportedcontent', 'usergroups')) - { - $db->drop_column("usergroups", "canmanagereportedcontent"); - } - - if($db->field_exists('canviewmodlogs', 'usergroups')) - { - $db->drop_column("usergroups", "canviewmodlogs"); - } - - if($db->field_exists('caneditprofiles', 'usergroups')) - { - $db->drop_column("usergroups", "caneditprofiles"); - } - - if($db->field_exists('canbanusers', 'usergroups')) - { - $db->drop_column("usergroups", "canbanusers"); - } - - if($db->field_exists('canviewwarnlogs', 'usergroups')) - { - $db->drop_column("usergroups", "canviewwarnlogs"); - } - - if($db->field_exists('canuseipsearch', 'usergroups')) - { - $db->drop_column("usergroups", "canuseipsearch"); - } - - if($db->field_exists('type', 'maillogs')) - { - $db->drop_column("maillogs", "type"); - } - - if($db->field_exists('groups', 'modtools')) - { - $db->drop_column("modtools", "groups"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("usergroups", "emailfloodtime", "int NOT NULL default '5' AFTER maxemails"); - $db->add_column("usergroups", "canmanageannounce", "smallint NOT NULL default '0' AFTER showmemberlist"); - $db->add_column("usergroups", "canmanagemodqueue", "smallint NOT NULL default '0' AFTER canmanageannounce"); - $db->add_column("usergroups", "canmanagereportedcontent", "smallint NOT NULL default '0' AFTER canmanagemodqueue"); - $db->add_column("usergroups", "canviewmodlogs", "smallint NOT NULL default '0' AFTER canmanagereportedcontent"); - $db->add_column("usergroups", "caneditprofiles", "smallint NOT NULL default '0' AFTER canviewmodlogs"); - $db->add_column("usergroups", "canbanusers", "smallint NOT NULL default '0' AFTER caneditprofiles"); - $db->add_column("usergroups", "canviewwarnlogs", "smallint NOT NULL default '0' AFTER canbanusers"); - $db->add_column("usergroups", "canuseipsearch", "smallint NOT NULL default '0' AFTER canviewwarnlogs"); - $db->add_column("maillogs", "type", "smallint NOT NULL default '0'"); - break; - default: - $db->add_column("usergroups", "emailfloodtime", "int(3) NOT NULL default '5' AFTER maxemails"); - $db->add_column("usergroups", "canmanageannounce", "tinyint(1) NOT NULL default '0' AFTER showmemberlist"); - $db->add_column("usergroups", "canmanagemodqueue", "tinyint(1) NOT NULL default '0' AFTER canmanageannounce"); - $db->add_column("usergroups", "canmanagereportedcontent", "tinyint(1) NOT NULL default '0' AFTER canmanagemodqueue"); - $db->add_column("usergroups", "canviewmodlogs", "tinyint(1) NOT NULL default '0' AFTER canmanagereportedcontent"); - $db->add_column("usergroups", "caneditprofiles", "tinyint(1) NOT NULL default '0' AFTER canviewmodlogs"); - $db->add_column("usergroups", "canbanusers", "tinyint(1) NOT NULL default '0' AFTER caneditprofiles"); - $db->add_column("usergroups", "canviewwarnlogs", "tinyint(1) NOT NULL default '0' AFTER canbanusers"); - $db->add_column("usergroups", "canuseipsearch", "tinyint(1) NOT NULL default '0' AFTER canviewwarnlogs"); - $db->add_column("maillogs", "type", "tinyint(1) NOT NULL default '0'"); - break; - } - - switch($db->type) - { - case "sqlite": - $db->add_column("modtools", "groups", "text NOT NULL default ''"); - break; - default: - $db->add_column("modtools", "groups", "text NOT NULL"); - break; - } - - $update_array = array( - "canmanageannounce" => 1, - "canmanagemodqueue" => 1, - "canmanagereportedcontent" => 1, - "canviewmodlogs" => 1, - "caneditprofiles" => 1, - "canbanusers" => 1, - "canviewwarnlogs" => 1, - "canuseipsearch" => 1 - ); - $db->update_query("usergroups", $update_array, "canmodcp= '1'"); - - $update_array = array( - "type" => 1 - ); - $db->update_query("maillogs", $update_array, "tid= '0'"); - - $update_array = array( - "type" => 2 - ); - $db->update_query("maillogs", $update_array, "tid > '0'"); - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges5"); -} - -function upgrade30_dbchanges5() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Updating Database"); - - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->table_exists("questions")) - { - $db->drop_table("questions"); - } - - if($db->table_exists("questionsessions")) - { - $db->drop_table("questionsessions"); - } - - if($db->table_exists("spamlog")) - { - $db->drop_table("spamlog"); - } - - $collation = $db->build_create_table_collation(); - - switch($db->type) - { - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."questions ( - qid INTEGER PRIMARY KEY, - question varchar(200) NOT NULL default '', - answer varchar(150) NOT NULL default '', - shown int unsigned NOT NULL default 0, - correct int unsigned NOT NULL default 0, - incorrect int unsigned NOT NULL default 0, - active tinyint(1) NOT NULL default '0' - );"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."questionsessions ( - sid varchar(32) NOT NULL default '', - qid int unsigned NOT NULL default '0', - dateline int unsigned NOT NULL default '0' - );"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."spamlog ( - sid INTEGER PRIMARY KEY, - username varchar(120) NOT NULL DEFAULT '', - email varchar(220) NOT NULL DEFAULT '', - ipaddress blob(16) NOT NULL default '', - dateline int unsigned NOT NULL default '0', - data TEXT NOT NULL - );"); - break; - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."questions ( - qid serial, - question varchar(200) NOT NULL default '', - answer varchar(150) NOT NULL default '', - shown int NOT NULL default 0, - correct int NOT NULL default 0, - incorrect int NOT NULL default 0, - active smallint NOT NULL default '0', - PRIMARY KEY (qid) - );"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."questionsessions ( - sid varchar(32) NOT NULL default '', - qid int NOT NULL default '0', - dateline int NOT NULL default '0', - UNIQUE (sid) - );"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."spamlog ( - sid serial, - username varchar(120) NOT NULL DEFAULT '', - email varchar(220) NOT NULL DEFAULT '', - ipaddress bytea NOT NULL default '', - dateline numeric(30,0) NOT NULL default '0', - data text NOT NULL default '', - PRIMARY KEY (sid) - );"); - break; - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."questions ( - qid int unsigned NOT NULL auto_increment, - question varchar(200) NOT NULL default '', - answer varchar(150) NOT NULL default '', - shown int unsigned NOT NULL default 0, - correct int unsigned NOT NULL default 0, - incorrect int unsigned NOT NULL default 0, - active tinyint(1) NOT NULL default '0', - PRIMARY KEY (qid) - ) ENGINE=MyISAM{$collation}"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."questionsessions ( - sid varchar(32) NOT NULL default '', - qid int unsigned NOT NULL default '0', - dateline int unsigned NOT NULL default '0', - PRIMARY KEY (sid) - ) ENGINE=MyISAM{$collation}"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."spamlog ( - sid int unsigned NOT NULL auto_increment, - username varchar(120) NOT NULL DEFAULT '', - email varchar(220) NOT NULL DEFAULT '', - ipaddress varbinary(16) NOT NULL default '', - dateline int unsigned NOT NULL default '0', - data text NOT NULL, - PRIMARY KEY (sid) - ) ENGINE=MyISAM{$collation}"); - } - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges6"); -} - -function upgrade30_dbchanges6() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Updating Database"); - - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->table_exists("buddyrequests")) - { - $db->drop_table("buddyrequests"); - } - - $collation = $db->build_create_table_collation(); - - switch($db->type) - { - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."buddyrequests ( - id serial, - uid int NOT NULL, - touid int NOT NULL, - date int NOT NULL, - PRIMARY KEY (id) - );"); - break; - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."buddyrequests ( - id INTEGER PRIMARY KEY, - uid bigint unsigned NOT NULL, - touid bigint unsigned NOT NULL, - date int unsigned NOT NULL - );"); - break; - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."buddyrequests ( - id int(10) UNSIGNED NOT NULL auto_increment, - uid bigint(30) UNSIGNED NOT NULL, - touid bigint(30) UNSIGNED NOT NULL, - date int(11) UNSIGNED NOT NULL, - KEY (uid), - KEY (touid), - PRIMARY KEY (id) - ) ENGINE=MyISAM{$collation};"); - break; - } - - if($db->field_exists('msn', 'users')) - { - $db->drop_column("users", "msn"); - } - - if($db->field_exists('postbit', 'profilefields')) - { - $db->drop_column("profilefields", "postbit"); - } - - if($db->field_exists('skype', 'users')) - { - $db->drop_column("users", "skype"); - } - - if($db->field_exists('google', 'users')) - { - $db->drop_column("users", "google"); - } - - if($db->field_exists('cplanguage', 'adminoptions')) - { - $db->drop_column("adminoptions", "cplanguage"); - } - - if($db->field_exists('showimages', 'users')) - { - $db->drop_column("users", "showimages"); - } - - if($db->field_exists('showvideos', 'users')) - { - $db->drop_column("users", "showvideos"); - } - - if($db->field_exists('caninvitemembers', 'groupleaders')) - { - $db->drop_column("groupleaders", "caninvitemembers"); - } - - if($db->field_exists('invite', 'joinrequests')) - { - $db->drop_column("joinrequests", "invite"); - } - - if($db->field_exists('registration', 'profilefields')) - { - $db->drop_column("profilefields", "registration"); - } - - if($db->field_exists('validated', 'awaitingactivation')) - { - $db->drop_column("awaitingactivation", "validated"); - } - - if($db->field_exists('sourceeditor', 'users')) - { - $db->drop_column("users", "sourceeditor"); - } - - if($db->field_exists('buddyrequestspm', 'users')) - { - $db->drop_column("users", "buddyrequestspm"); - } - - if($db->field_exists('buddyrequestsauto', 'users')) - { - $db->drop_column("users", "buddyrequestsauto"); - } - - if($db->field_exists('ipaddress', 'privatemessages')) - { - $db->drop_column("privatemessages", "ipaddress"); - } - - if($db->field_exists('maxoptions', 'polls')) - { - $db->drop_column("polls", "maxoptions"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("profilefields", "postbit", "smallint NOT NULL default '0' AFTER profile"); - $db->add_column("users", "skype", "varchar(75) NOT NULL default '' AFTER yahoo"); - $db->add_column("users", "google", "varchar(75) NOT NULL default '' AFTER skype"); - $db->add_column("adminoptions", "cplanguage", "varchar(50) NOT NULL default '' AFTER cpstyle"); - $db->add_column("users", "showimages", "smallint NOT NULL default '1' AFTER threadmode"); - $db->add_column("users", "showvideos", "smallint NOT NULL default '1' AFTER showimages"); - $db->add_column("users", "buddyrequestspm", "smallint NOT NULL default '1' AFTER pmnotify"); - $db->add_column("users", "buddyrequestsauto", "smallint NOT NULL default '0' AFTER buddyrequestspm"); - $db->add_column("groupleaders", "caninvitemembers", "smallint NOT NULL default '0'"); - $db->add_column("joinrequests", "invite", "smallint NOT NULL default '0'"); - $db->add_column("profilefields", "registration", "smallint NOT NULL default '0' AFTER required"); - $db->add_column("awaitingactivation", "validated", "smallint NOT NULL default '0' AFTER type"); - $db->add_column("users", "sourceeditor", "smallint NOT NULL default '0'"); - break; - default: - $db->add_column("profilefields", "postbit", "tinyint(1) NOT NULL default '0' AFTER profile"); - $db->add_column("users", "skype", "varchar(75) NOT NULL default '' AFTER yahoo"); - $db->add_column("users", "google", "varchar(75) NOT NULL default '' AFTER skype"); - $db->add_column("adminoptions", "cplanguage", "varchar(50) NOT NULL default '' AFTER cpstyle"); - $db->add_column("users", "showimages", "tinyint(1) NOT NULL default '1' AFTER threadmode"); - $db->add_column("users", "showvideos", "tinyint(1) NOT NULL default '1' AFTER showimages"); - $db->add_column("users", "buddyrequestspm", "tinyint(1) NOT NULL default '1' AFTER pmnotify"); - $db->add_column("users", "buddyrequestsauto", "tinyint(1) NOT NULL default '0' AFTER buddyrequestspm"); - $db->add_column("groupleaders", "caninvitemembers", "tinyint(1) NOT NULL default '0'"); - $db->add_column("joinrequests", "invite", "tinyint(1) NOT NULL default '0'"); - $db->add_column("profilefields", "registration", "tinyint(1) NOT NULL default '0' AFTER required"); - $db->add_column("awaitingactivation", "validated", "tinyint(1) NOT NULL default '0' AFTER type"); - $db->add_column("users", "sourceeditor", "tinyint(1) NOT NULL default '0'"); - break; - } - - switch($db->type) - { - case "pgsql": - $db->add_column("privatemessages", "ipaddress", "bytea NOT NULL default ''"); - $db->add_column("polls", "maxoptions", "smallint NOT NULL default '0'"); - break; - case "sqlite": - $db->add_column("privatemessages", "ipaddress", "blob(16) NOT NULL default ''"); - $db->add_column("polls", "maxoptions", "smallint NOT NULL default '0'"); - break; - default: - $db->add_column("privatemessages", "ipaddress", "varbinary(16) NOT NULL default ''"); - $db->add_column("polls", "maxoptions", "smallint unsigned NOT NULL default '0'"); - break; - } - - $groups = range(1, 39); - - $sql = implode(',', $groups); - $db->update_query("templategroups", array('isdefault' => 1), "gid IN ({$sql})"); - - if($db->table_exists('reportedposts')) - { - $db->update_query("reportedposts", array('type' => 'post')); - } - - $db->insert_query("questions", array('question' => 'What does 2 + 2 equal?', 'answer' => '4\nFour', 'active' => '1')); - - $query = $db->simple_select("attachtypes", "COUNT(*) as numexists", "extension='psd'"); - if($db->fetch_field($query, "numexists") == 0) - { - $db->insert_query("attachtypes", array('name' => "Adobe Photoshop File", 'mimetype' => 'application/x-photoshop', 'extension' => "psd", 'maxsize' => '1024', 'icon' => 'images/attachtypes/psd.png')); - } - // SQLite... As we modify tables below we need to close all cursors before... - if($db->type == "sqlite") - { - $query->closeCursor(); - } - - $query = $db->simple_select("templategroups", "COUNT(*) as numexists", "prefix='video'"); - if($db->fetch_field($query, "numexists") == 0) - { - $db->insert_query("templategroups", array('prefix' => 'video', 'title' => '', 'isdefault' => '1')); - } - // SQLite... As we modify tables below we need to close all cursors before... - if($db->type == "sqlite") - { - $query->closeCursor(); - } - - $query = $db->simple_select("templategroups", "COUNT(*) as numexists", "prefix='php'"); - if($db->fetch_field($query, "numexists") != 0) - { - $db->update_query("templategroups", array('prefix' => 'announcement', 'title' => ''), "prefix='php'"); - } - // SQLite... As we modify tables below we need to close all cursors before... - if($db->type == "sqlite") - { - $query->closeCursor(); - } - - $query = $db->simple_select("templategroups", "COUNT(*) as numexists", "prefix='redirect'"); - if($db->fetch_field($query, "numexists") != 0) - { - $db->update_query("templategroups", array('prefix' => 'posticons', 'title' => ''), "prefix='redirect'"); - } - // SQLite... As we modify tables below we need to close all cursors before... - if($db->type == "sqlite") - { - $query->closeCursor(); - } - - // Sync usergroups with canbereported; no moderators or banned groups - echo "

    Updating usergroup permissions...

    "; - $groups = array(); - $usergroups = $cache->read('usergroups'); - - foreach($usergroups as $group) - { - if($group['canmodcp'] || $group['isbannedgroup']) - { - continue; - } - - $groups[] = "'{$group['gid']}'"; - } - - if(!empty($groups)) - { - $usergroups = implode(',', $groups); - $db->update_query('usergroups', array('canbereported' => 1), "gid IN ({$usergroups})"); - } - - $db->update_query('usergroups', array('canviewboardclosed' => 1), 'cancp = 1'); - - if($db->table_exists('reportedposts')) - { - if($db->field_exists("pid", "reportedposts") && !$db->field_exists("id", "reportedposts")) - { - switch($db->type) - { - case "pgsql": - $db->rename_column("reportedposts", "pid", "id", "int", true, "'0'"); - break; - default: - $db->rename_column("reportedposts", "pid", "id", "int unsigned NOT NULL default '0'"); - } - } - - if($db->field_exists("tid", "reportedposts") && !$db->field_exists("id2", "reportedposts")) - { - switch($db->type) - { - case "pgsql": - $db->rename_column("reportedposts", "tid", "id2", "int", true, "'0'"); - break; - default: - $db->rename_column("reportedposts", "tid", "id2", "int unsigned NOT NULL default '0'"); - } - } - - if($db->field_exists("fid", "reportedposts") && !$db->field_exists("id3", "reportedposts")) - { - switch($db->type) - { - case "pgsql": - $db->rename_column("reportedposts", "fid", "id3", "int", true, "'0'"); - break; - default: - $db->rename_column("reportedposts", "fid", "id3", "int unsigned NOT NULL default '0'"); - } - } - } - - if($db->table_exists('reportedposts')) - { - if($db->table_exists("reportedcontent")) - { - $db->drop_table("reportedcontent"); - } - - $db->rename_table("reportedposts", "reportedcontent"); - - $cache->delete('reportedposts'); - } - - $db->update_query("settings", array('optionscode' => 'select\r\n0=No CAPTCHA\r\n1=MyBB Default CAPTCHA\r\n2=reCAPTCHA\r\n3=Are You a Human'), "name='captchaimage'"); - $db->update_query("settings", array('optionscode' => 'select\r\ninstant=Instant Activation\r\nverify=Send Email Verification\r\nrandompass=Send Random Password\r\nadmin=Administrator Activation\r\nboth=Email Verification & Administrator Activation'), "name='regtype'"); - $db->update_query("settings", array('optionscode' => $db->escape_string('php -')), "name='timezoneoffset'"); - - // Update tasks - $added_tasks = sync_tasks(); - - // For the version check task, set a random date and hour (so all MyBB installs don't query mybb.com all at the same time) - $update_array = array( - 'hour' => rand(0, 23), - 'weekday' => rand(0, 6) - ); - - $db->update_query("tasks", $update_array, "file = 'versioncheck'"); - - echo "

    Added {$added_tasks} new tasks.

    "; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_threadcount"); -} - -function upgrade30_threadcount() -{ - global $db, $output; - - $output->print_header("Counting user thread count"); - - if(!$_POST['theadspage']) - { - $threads = 500; - } - else - { - $threads = (int)$_POST['theadspage']; - } - - if($_POST['threadstart']) - { - $startat = (int)$_POST['threadstart']; - $upper = $startat+$threads; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $threads; - $lower = 0; - } - - $query = $db->simple_select("users", "COUNT(uid) AS usercount"); - $cnt = $db->fetch_array($query); - - if($upper > $cnt['usercount']) - { - $upper = $cnt['usercount']; - } - - echo "

    Counting thread count of user #{$lower} to #{$upper} ({$cnt['usercount']} Total)

    "; - flush(); - - $threadnum = false; - - $query = $db->simple_select("users", "threadnum, uid", "", array('limit_start' => $lower, 'limit' => $threads)); - while($thread = $db->fetch_array($query)) - { - $query2 = $db->simple_select("threads", "COUNT(tid) AS thread_count", "uid='{$thread['uid']}' AND visible = 1"); - $num_threads = $db->fetch_field($query2, "thread_count"); - - $db->update_query("users", array('threadnum' => $num_threads), "uid = '{$thread['uid']}'"); - - $threadnum = true; - } - - $remaining = $upper-$cnt['usercount']; - if($remaining && $threadnum) - { - $nextact = "30_threadcount"; - $startat = $startat+$threads; - $contents = "

    Done. Click Next to move on to the next set of thread counts.

    "; - } - else - { - $nextact = "30_dbchanges_optimize1"; - $contents = "

    Done

    All users have had their thread count counted. Click next to continue.

    "; - } - $output->print_contents($contents); - - global $footer_extra; - $footer_extra = ""; - - $output->print_footer($nextact); -} - -function upgrade30_dbchanges_optimize1() -{ - global $output, $mybb, $db; - - $output->print_header("Optimizing Database"); - - echo "

    Performing necessary optimization queries...

    "; - flush(); - - switch($db->type) - { - case "pgsql": - $db->modify_column("adminoptions", "loginattempts", "smallint", "set", "'0'"); - $db->modify_column("adminviews", "perpage", "smallint", "set", "'0'"); - $db->modify_column("calendars", "disporder", "smallint", "set", "'0'"); - $db->modify_column("calendars", "eventlimit", "smallint", "set", "'0'"); - $db->modify_column("events", "timezone", "varchar(5)", "set", "''"); - $db->modify_column("forums", "lastposttid", "int", "set", "'0'"); - $db->modify_column("mailerrors", "smtpcode", "smallint", "set", "'0'"); - $db->modify_column("maillogs", "touid", "int", "set", "'0'"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."polls ALTER COLUMN numvotes DROP DEFAULT"); // We need to drop the default first as PostgreSQL can't cast default values - $db->modify_column("polls", "numvotes", "int USING (trim(numvotes)::int)", "set", "'0'"); - $db->modify_column("profilefields", "postnum", "smallint", "set", "'0'"); - $db->modify_column("reputation", "reputation", "smallint", "set", "'0'"); - $db->modify_column("spiders", "theme", "smallint", "set", "'0'"); - $db->modify_column("spiders", "usergroup", "smallint", "set", "'0'"); - $db->modify_column("templates", "sid", "smallint", "set", "'0'"); - $db->modify_column("themestylesheets", "tid", "smallint", "set", "'0'"); - $db->modify_column("usergroups", "canusesigxposts", "smallint", "set", "'0'"); - $db->modify_column("users", "timezone", "varchar(5)", "set", "''"); - $db->modify_column("users", "reputation", "int", "set", "'0'"); - $db->modify_column("warninglevels", "percentage", "smallint", "set", "'0'"); - $db->modify_column("warningtypes", "points", "smallint", "set", "'0'"); - $db->modify_column("warnings", "points", "smallint", "set", "'0'"); - break; - case "sqlite": - $db->modify_column("adminoptions", "loginattempts", "smallint NOT NULL default '0'"); - $db->modify_column("adminviews", "perpage", "smallint NOT NULL default '0'"); - $db->modify_column("calendars", "disporder", "smallint NOT NULL default '0'"); - $db->modify_column("calendars", "eventlimit", "smallint NOT NULL default '0'"); - $db->modify_column("events", "timezone", "varchar(5) NOT NULL default ''"); - $db->modify_column("forums", "lastposttid", "int NOT NULL default '0'"); - $db->modify_column("mailerrors", "smtpcode", "smallint NOT NULL default '0'"); - $db->modify_column("maillogs", "touid", "int NOT NULL default '0'"); - $db->modify_column("polls", "numvotes", "int NOT NULL default '0'"); - $db->modify_column("profilefields", "postnum", "smallint NOT NULL default '0'"); - $db->modify_column("reputation", "reputation", "smallint NOT NULL default '0'"); - $db->modify_column("spiders", "theme", "smallint NOT NULL default '0'"); - $db->modify_column("spiders", "usergroup", "smallint NOT NULL default '0'"); - $db->modify_column("templates", "sid", "smallint NOT NULL default '0'"); - $db->modify_column("themestylesheets", "tid", "smallint NOT NULL default '0'"); - $db->modify_column("usergroups", "canusesigxposts", "smallint NOT NULL default '0'"); - $db->modify_column("users", "timezone", "varchar(5) NOT NULL default ''"); - $db->modify_column("users", "reputation", "int NOT NULL default '0'"); - $db->modify_column("warninglevels", "percentage", "smallint NOT NULL default '0'"); - $db->modify_column("warningtypes", "points", "smallint NOT NULL default '0'"); - $db->modify_column("warnings", "points", "smallint NOT NULL default '0'"); - break; - default: - $db->modify_column("adminoptions", "loginattempts", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("adminviews", "perpage", "smallint(4) NOT NULL default '0'"); - $db->modify_column("calendars", "disporder", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("calendars", "eventlimit", "smallint(3) NOT NULL default '0'"); - $db->modify_column("events", "timezone", "varchar(5) NOT NULL default ''"); - $db->modify_column("forums", "lastposttid", "int unsigned NOT NULL default '0'"); - $db->modify_column("mailerrors", "smtpcode", "smallint(5) unsigned NOT NULL default '0'"); - $db->modify_column("maillogs", "touid", "int unsigned NOT NULL default '0'"); - $db->modify_column("polls", "numvotes", "int unsigned NOT NULL default '0'"); - $db->modify_column("profilefields", "postnum", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("reputation", "reputation", "smallint NOT NULL default '0'"); - $db->modify_column("spiders", "theme", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("spiders", "usergroup", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("templates", "sid", "smallint NOT NULL default '0'"); - $db->modify_column("themestylesheets", "tid", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("usergroups", "canusesigxposts", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("users", "timezone", "varchar(5) NOT NULL default ''"); - $db->modify_column("users", "reputation", "int NOT NULL default '0'"); - $db->modify_column("warninglevels", "percentage", "smallint(3) NOT NULL default '0'"); - $db->modify_column("warningtypes", "points", "smallint unsigned NOT NULL default '0'"); - $db->modify_column("warnings", "points", "smallint unsigned NOT NULL default '0'"); - break; - } - - if($db->type != "pgsql") - { - // PgSQL doesn't support longtext - if($db->type == "sqlite") - { - // And SQLite doesn't like text columns without a default value... - $db->modify_column("themestylesheets", "stylesheet", "longtext NOT NULL default ''"); - } - else - { - // ...while MySQL hates text columns with a default value - $db->modify_column("themestylesheets", "stylesheet", "longtext NOT NULL"); - } - } - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges_optimize2"); -} - -function upgrade30_dbchanges_optimize2() -{ - global $output, $mybb, $db; - - $output->print_header("Optimizing Database"); - - echo "

    Performing necessary optimization queries...

    "; - echo "

    Adding indexes to tables...

    "; - flush(); - - if($db->index_exists('sessions', 'location1')) - { - $db->drop_index('sessions', 'location1'); - } - - if($db->index_exists('sessions', 'location2')) - { - $db->drop_index('sessions', 'location2'); - } - - if($db->type == "mysql" || $db->type == "mysqli") - { - $update_data = array( - 'adminlog' => 'uid', - 'banfilters' => 'type', - 'events' => 'cid', - 'forumsubscriptions' => 'uid', - 'moderatorlog' => array('uid', 'fid'), - 'polls' => 'tid', - 'reportedcontent' => 'reportstatus', - 'settings' => 'gid', - 'themestylesheets' => 'tid', - 'warnings' => 'uid', - 'forumpermissions' => array('fid' => array('fid', 'gid')), - 'sessions' => array('location' => array('location1', 'location2')), - 'templates' => array('sid' => array('sid', 'title')) - ); - - foreach($update_data as $table => $index) - { - if(!is_array($index)) - { - $index = array($index); - } - - foreach($index as $_index => $keys) - { - if(!is_array($keys)) - { - if(!$db->index_exists($table, $keys)) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."{$table} ADD INDEX (`{$keys}`)"); - } - } - else - { - if(!$db->index_exists($table, $_index)) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."{$table} ADD INDEX `{$_index}`(`".implode('`, `', $keys)."`)"); - } - } - } - } - } - - echo "

    Dropping old indexes from tables...

    "; - - if($db->index_exists('attachments', 'posthash')) - { - $db->drop_index('attachments', 'posthash'); - } - - if($db->index_exists('reportedcontent', 'dateline')) - { - $db->drop_index('reportedcontent', 'dateline'); - } - - if($db->index_exists('reputation', 'pid')) - { - $db->drop_index('reputation', 'pid'); - } - - if($db->index_exists('reputation', 'dateline')) - { - $db->drop_index('reputation', 'dateline'); - } - - if($db->index_exists('users', 'birthday')) - { - $db->drop_index('users', 'birthday'); - } - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges_optimize3"); -} - -function upgrade30_dbchanges_optimize3() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Optimizing Database"); - - echo "

    Performing necessary optimization queries...

    "; - flush(); - - $to_tinyint = array( - "adminoptions" => array("codepress"), - "adminviews" => array("visibility"), - "announcements" => array("allowhtml", "allowmycode", "allowsmilies"), - "attachments" => array("visible"), - "banfilters" => array("type"), - "calendars" => array("startofweek", "showbirthdays", "moderation", "allowhtml", "allowmycode", "allowimgcode", "allowvideocode", "allowsmilies"), - "calendarpermissions" => array("canviewcalendar", "canaddevents", "canbypasseventmod", "canmoderateevents"), - "events" => array("visible", "private", "ignoretimezone", "usingtime"), - "forumpermissions" => array("canview", "canviewthreads", "canonlyviewownthreads", "candlattachments", "canpostthreads", "canpostreplys", "canpostattachments", "canratethreads", "caneditposts", "candeleteposts", "candeletethreads", "caneditattachments", "canpostpolls", "canvotepolls", "cansearch"), - "forums" => array("active", "open", "allowhtml", "allowmycode", "allowsmilies", "allowimgcode", "allowvideocode", "allowpicons", "allowtratings", "usepostcounts", "showinjump", "overridestyle", "rulestype"), - "groupleaders" => array("canmanagemembers", "canmanagerequests"), - "helpdocs" => array("usetranslation", "enabled"), - "helpsections" => array("usetranslation", "enabled"), - "moderators" => array("isgroup", "caneditposts", "candeleteposts", "canviewips", "canopenclosethreads", "canmanagethreads", "canmovetononmodforum", "canusecustomtools"), - "mycode" => array("active"), - "polls" => array("closed", "multiple", "public"), - "posts" => array("includesig", "smilieoff", "visible"), - "privatemessages" => array("status", "includesig", "smilieoff", "receipt"), - "profilefields" => array("required"), - "reportedcontent" => array("reportstatus"), - "sessions" => array("anonymous", "nopermission"), - "settinggroups" => array("isdefault"), - "settings" => array("isdefault"), - "smilies" => array("showclickable"), - "tasks" => array("enabled", "logging"), - "themes" => array("def"), - "threads" => array("sticky", "visible"), - "threadsubscriptions" => array("notification"), - "usergroups" => array("isbannedgroup", "canview", "canviewthreads", "canviewprofiles", "candlattachments", "canviewboardclosed", "canpostthreads", "canpostreplys", "canpostattachments", "canratethreads", "caneditposts", "candeleteposts", "candeletethreads", "caneditattachments", "canpostpolls", "canvotepolls", "canundovotes", "canusepms", "cansendpms", "cantrackpms", "candenypmreceipts", "cansendemail", "cansendemailoverride", "canviewmemberlist", "canviewcalendar", "canaddevents", "canbypasseventmod", "canmoderateevents", "canviewonline", "canviewwolinvis", "canviewonlineips", "cancp", "issupermod", "cansearch", "canusercp", "canuploadavatars", "canratemembers", "canchangename", "canbereported", "showforumteam", "usereputationsystem", "cangivereputations", "candisplaygroup", "cancustomtitle", "canwarnusers", "canreceivewarnings", "canmodcp", "showinbirthdaylist", "canoverridepm", "canusesig", "signofollow"), - "users" => array("allownotices", "hideemail", "subscriptionmethod", "invisible", "receivepms", "receivefrombuddy", "pmnotice", "pmnotify", "showsigs", "showavatars", "showquickreply", "showredirect", "showcodebuttons", "coppauser", "classicpostbit"), - "warnings" => array("expired") - ); - - foreach($to_tinyint as $table => $columns) - { - echo "

    {$table}: Converting column type to tinyint

    "; - $change_column = array(); - foreach($columns as $column) - { - if($db->type == "pgsql") - { - $db->modify_column($table, $column, "smallint", "set", "'0'"); - } - else if($db->type == "sqlite") - { - $change_column[] = "CHANGE {$column} {$column} tinyint(1) NOT NULL default '0'"; - } - else - { - $change_column[] = "MODIFY {$column} tinyint(1) NOT NULL default '0'"; - } - } - if($db->type != "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."{$table} ".implode(", ", $change_column)); - } - } - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges_optimize4"); -} - -function upgrade30_dbchanges_optimize4() -{ - global $cache, $output, $mybb, $db; - - $output->print_header("Optimizing Database"); - - echo "

    Performing necessary optimization queries...

    "; - flush(); - - $to_int = array( - "adminlog" => array("dateline"), - "adminsessions" => array("dateline", "lastactive"), - "announcements" => array("startdate", "enddate"), - "attachments" => array("dateuploaded"), - "awaitingactivation" => array("dateline"), - "banfilters" => array("lastuse", "dateline"), - "banned" => array("dateline", "lifted"), - "captcha" => array("dateline"), - "delayedmoderation" => array("delaydateline", "dateline"), - "forumsread" => array("dateline"), - "joinrequests" => array("dateline"), - "massemails" => array("dateline", "senddate"), - "mailerrors" => array("dateline"), - "maillogs" => array("dateline"), - "moderatorlog" => array("dateline"), - "polls" => array("dateline", "timeout"), - "pollvotes" => array("dateline"), - "posts" => array("dateline", "edittime"), - "privatemessages" => array("dateline", "deletetime", "statustime", "readtime"), - "promotionlogs" => array("dateline"), - "reportedcontent" => array("dateline", "lastreport"), - "reputation" => array("dateline"), - "searchlog" => array("dateline"), - "sessions" => array("time"), - "spiders" => array("lastvisit"), - "stats" => array("dateline"), - "tasks" => array("nextrun", "lastrun", "locked"), - "tasklog" => array("dateline"), - "templates" => array("dateline"), - "themestylesheets" => array("lastmodified"), - "threads" => array("dateline", "lastpost"), - "threadsread" => array("dateline"), - "threadsubscriptions" => array("dateline"), - "threadsread" => array("dateline"), - "usergroups" => array("reputationpower", "maxreputationsday", "maxreputationsperuser", "maxreputationsperthread", "attachquota"), - "users" => array("regdate", "lastactive", "lastvisit", "lastpost", "timeonline", "moderationtime", "suspensiontime", "suspendsigtime"), - "warningtypes" => array("expirationtime"), - "warnings" => array("dateline", "expires", "daterevoked") - ); - - foreach($to_int as $table => $columns) - { - echo "

    {$table}: Converting column type to int

    "; - $change_column = array(); - foreach($columns as $column) - { - if($db->type == "pgsql") - { - $db->modify_column($table, $column, "int", "set", "'0'"); - } - else if($db->type == "sqlite") - { - $change_column[] = "CHANGE {$column} {$column} int unsigned NOT NULL default '0'"; - } - else - { - $change_column[] = "MODIFY {$column} int unsigned NOT NULL default '0'"; - } - } - if($db->type != "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."{$table} ".implode(", ", $change_column)); - } - } - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges_smilies"); -} - -function upgrade30_dbchanges_smilies() -{ - global $cache, $output, $db; - - $output->print_header("Updating Smilies"); - - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->type == 'pgsql') - { - $db->modify_column("smilies", "find", "text", "set"); - } - else - { - $db->modify_column("smilies", "find", "text NOT NULL"); - } - - $query = $db->simple_select('smilies', 'sid, image, find', '', array('order_by' => 'image, sid')); - $last_image = null; - $last_sid = 0; - $skip = array(); - while($smilie = $db->fetch_array($query)) - { - if(in_array($smilie['sid'], $skip)) - { - continue; - } - - if($smilie['image'] == $last_image && $smilie['image'] != null) - { - $dupe_query = $db->simple_select('smilies', 'sid, find', 'image = "'.$db->escape_string($smilie['image']).'"'); - $dupes = ''; - $find = array(); - $skip = array(); - while($dupe = $db->fetch_array($dupe_query)) - { - if($dupe['sid'] != $last_sid) - { - $dupes .= (int)$dupe['sid'].','; - $find[] = trim($dupe['find']); - $skip[] = (int)$dupe['sid']; - } - else - { - $find[] = $dupe['find']; - } - } - $dupes = rtrim($dupes, ','); - $db->delete_query('smilies', 'sid IN('.$dupes.')'); - $db->update_query('smilies', array('find' => implode("\n", $find)), 'sid = "'.(int)$last_sid.'"'); - $db->free_result($dupe_query); - } - else - { - $last_sid = $smilie['sid']; - $last_image = $smilie['image']; - } - } - - $cache->update_smilies(); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("30_dbchanges_ip"); -} - -function upgrade30_dbchanges_ip() -{ - global $mybb, $db, $output; - - $output->print_header("IP Conversion"); - - $ipstart = $iptable = ''; - - switch($mybb->input['iptask']) - { - case 8: - echo "

    Adding database indices (3/3)...

    "; - flush(); - - if(!$db->index_exists('users', 'lastip')) - { - // This may take a while - if($db->type == "mysql" || $db->type == "mysqli") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX lastip (lastip)"); - } - elseif($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX (`lastip`)"); - } - } - $next_task = 9; - break; - case 7: - echo "

    Adding database indices (2/3)...

    "; - flush(); - - if(!$db->index_exists('users', 'regip')) - { - // This may take a while - if($db->type == "mysql" || $db->type == "mysqli") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX regip (regip)"); - } - elseif($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD INDEX (`regip`)"); - } - } - $next_task = 8; - break; - case 6: - echo "

    Adding database indices (1/3)...

    "; - flush(); - - if(!$db->index_exists('posts', 'ipaddress')) - { - // This may take a while - if($db->type == "mysql" || $db->type == "mysqli") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD INDEX ipaddress (ipaddress)"); - } - elseif($db->type == "pgsql") - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD INDEX (`ipaddress`)"); - } - } - $next_task = 7; - break; - case 5: - if(!$_POST['ipspage']) - { - $ipp = 5000; - } - else - { - $ipp = (int)$_POST['ipspage']; - } - - if($_POST['ipstart']) - { - $startat = (int)$_POST['ipstart']; - $upper = $startat+$ipp-1; - $lower = $startat; - } - else - { - $startat = 0; - $upper = $ipp; - $lower = 0; - } - - $next_task = 5; - switch($mybb->input['iptable']) - { - case 7: - echo "

    Converting user IPs...

    "; - flush(); - $query = $db->simple_select("users", "COUNT(uid) AS ipcount"); - if($db->type == "mysql" || $db->type == "mysqli") - { - $next_task = 6; - } - else - { - $next_task = 9; - } - break; - case 6: - echo "

    Converting thread rating IPs...

    "; - flush(); - $query = $db->simple_select("threadratings", "COUNT(rid) AS ipcount"); - break; - case 5: - echo "

    Converting session IPs...

    "; - flush(); - $query = $db->simple_select("sessions", "COUNT(sid) AS ipcount"); - break; - case 4: - echo "

    Converting post IPs...

    "; - flush(); - $query = $db->simple_select("posts", "COUNT(pid) AS ipcount"); - break; - case 3: - echo "

    Converting moderator log IPs...

    "; - flush(); - $query = $db->simple_select("moderatorlog", "COUNT(DISTINCT ipaddress) AS ipcount"); - break; - case 2: - echo "

    Converting mail log IPs...

    "; - flush(); - $query = $db->simple_select("maillogs", "COUNT(mid) AS ipcount"); - break; - default: - echo "

    Converting admin log IPs...

    "; - flush(); - $query = $db->simple_select("adminlog", "COUNT(DISTINCT ipaddress) AS ipcount"); - break; - } - $cnt = $db->fetch_array($query); - - if($upper > $cnt['ipcount']) - { - $upper = $cnt['ipcount']; - } - - echo "

    Converting ip {$lower} to {$upper} ({$cnt['ipcount']} Total)

    "; - flush(); - - $ipaddress = false; - - switch($mybb->input['iptable']) - { - case 7: - $query = $db->simple_select("users", "uid, regip, lastip", "", array('limit_start' => $lower, 'limit' => $ipp)); - break; - case 6: - $query = $db->simple_select("threadratings", "rid, ipaddress", "", array('limit_start' => $lower, 'limit' => $ipp)); - break; - case 5: - $query = $db->simple_select("sessions", "sid, ip", "", array('limit_start' => $lower, 'limit' => $ipp)); - break; - case 4: - $query = $db->simple_select("posts", "pid, ipaddress", "", array('limit_start' => $lower, 'limit' => $ipp)); - break; - case 3: - $query = $db->simple_select("moderatorlog", "DISTINCT(ipaddress)", "", array('limit_start' => $lower, 'limit' => $ipp)); - break; - case 2: - $query = $db->simple_select("maillogs", "mid, ipaddress", "", array('limit_start' => $lower, 'limit' => $ipp)); - break; - default: - $query = $db->simple_select("adminlog", "DISTINCT(ipaddress)", "", array('limit_start' => $lower, 'limit' => $ipp)); - $mybb->input['iptable'] = 1; - break; - } - while($data = $db->fetch_array($query)) - { - // Skip invalid IPs - switch($mybb->input['iptable']) - { - case 7: - $ip1 = my_inet_pton($db->unescape_binary($data['regip'])); - $ip2 = my_inet_pton($db->unescape_binary($data['lastip'])); - if($ip1 === false && $ip2 === false) - { - continue; - } - break; - case 5: - $ip = my_inet_pton($db->unescape_binary($data['ip'])); - if($ip === false) - { - continue; - } - break; - case 6: - case 4: - case 3: - case 2: - default: - $ip = my_inet_pton($db->unescape_binary($data['ipaddress'])); - if($ip === false) - { - continue; - } - break; - } - - switch($mybb->input['iptable']) - { - case 7: - $db->update_query("users", array('regip' => $db->escape_binary($ip1), 'lastip' => $db->escape_binary($ip2)), "uid = '".(int)$data['uid']."'"); - break; - case 6: - $db->update_query("threadratings", array('ipaddress' => $db->escape_binary($ip)), "rid = '".(int)$data['rid']."'"); - break; - case 5: - $db->update_query("sessions", array('ip' => $db->escape_binary($ip)), "sid = '".(int)$data['sid']."'"); - break; - case 4: - $db->update_query("posts", array('ipaddress' => $db->escape_binary($ip)), "pid = '".(int)$data['pid']."'"); - break; - case 3: - $db->update_query("moderatorlog", array('ipaddress' => $db->escape_binary($ip)), "ipaddress = '".$db->escape_string($data['ipaddress'])."'"); - break; - case 2: - $db->update_query("maillogs", array('ipaddress' => $db->escape_binary($ip)), "mid = '".(int)$data['mid']."'"); - break; - default: - $db->update_query("adminlog", array('ipaddress' => $db->escape_binary($ip)), "ipaddress = '".$db->escape_string($data['ipaddress'])."'"); - break; - } - $ipaddress = true; - } - - $remaining = $upper-$cnt['ipcount']; - if($remaining && $ipaddress) - { - $startat = $startat+$ipp; - $ipstart = ""; - $iptable = $mybb->input['iptable']; - } - else - { - $iptable = $mybb->input['iptable']+1; - } - if($iptable <= 10) - { - $iptable = ""; - } - break; - case 4: - $next_task = 4; - switch($mybb->input['iptable']) - { - case 10: - echo "

    Updating user table (4/4)...

    "; - flush(); - - $table = 'users'; - $column = 'lastip'; - $next_task = 5; - break; - case 9: - echo "

    Updating user table (3/4)...

    "; - flush(); - - $table = 'users'; - $column = 'regip'; - break; - case 8: - echo "

    Updating threadreating table...

    "; - flush(); - - $table = 'threadratings'; - $column = 'ipaddress'; - break; - case 7: - echo "

    Updating session table...

    "; - flush(); - - $table = 'sessions'; - $column = 'ip'; - break; - case 6: - echo "

    Updating searchlog table...

    "; - flush(); - - $table = 'searchlog'; - $column = 'ipaddress'; - // Skip conversion - $db->delete_query('searchlog'); - break; - case 5: - echo "

    Updating post table (2/2)...

    "; - flush(); - - $table = 'posts'; - $column = 'ipaddress'; - break; - case 4: - echo "

    Updating moderatorlog table...

    "; - flush(); - - $table = 'moderatorlog'; - $column = 'ipaddress'; - break; - case 3: - echo "

    Updating maillog table...

    "; - flush(); - - $table = 'maillogs'; - $column = 'ipaddress'; - break; - case 2: - echo "

    Updating adminsession table...

    "; - flush(); - - $table = 'adminsessions'; - $column = 'ip'; - // Skip conversion - $db->delete_query('adminsessions'); - break; - default: - echo "

    Updating adminlog table...

    "; - flush(); - - $mybb->input['iptable'] = 1; - $table = 'adminlog'; - $column = 'ipaddress'; - break; - } - // Truncate invalid IPs - $db->write_query("UPDATE ".TABLE_PREFIX."{$table} SET {$column} = SUBSTR({$column}, 16) WHERE LENGTH({$column})>16"); - switch($db->type) - { - case "pgsql": - // Drop default value before converting the column - $db->modify_column($table, $column, false, false); - $db->modify_column($table, $column, "bytea USING {$column}::bytea", 'set', "''"); - break; - case "sqlite": - $db->modify_column($table, $column, "blob(16) NOT NULL default ''"); - break; - default: - $db->modify_column($table, $column, "varbinary(16) NOT NULL default ''"); - break; - } - if($mybb->input['iptable'] < 10) - { - $iptable = "input['iptable']+1)."\" />"; - } - break; - case 3: - echo "

    Updating user table (2/4)...

    "; - flush(); - - if($db->field_exists('longlastip', 'users')) - { - // This may take a while - $db->drop_column("users", "longlastip"); - } - $next_task = 4; - break; - case 2: - echo "

    Updating user table (1/4)...

    "; - flush(); - - if($db->field_exists('longregip', 'users')) - { - // This may take a while - $db->drop_column("users", "longregip"); - } - $next_task = 3; - break; - default: - echo "

    Updating post table (1/2)...

    "; - flush(); - - if($db->field_exists('longipaddress', 'posts')) - { - // This may take a while - $db->drop_column("posts", "longipaddress"); - } - $next_task = 2; - break; - } - - if($next_task == 9) - { - $contents = "

    Click next to continue with the upgrade process.

    "; - $nextact = "30_updatetheme"; - } - else - { - $contents = "

    {$iptable}{$ipstart}Done. Click Next to continue the IP conversion.

    "; - - global $footer_extra; - $footer_extra = ""; - $nextact = "30_dbchanges_ip"; - } - - $output->print_contents($contents); - - $output->print_footer($nextact); -} - -function upgrade30_updatetheme() -{ - global $db, $mybb, $output, $config; - - if(file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php"; - } - else if(file_exists(MYBB_ROOT."admin/inc/functions_themes.php")) - { - require_once MYBB_ROOT."admin/inc/functions_themes.php"; - } - else - { - $output->print_error("Please make sure your admin directory is uploaded correctly."); - } - - $output->print_header("Updating Themes"); - - // New default user star - $contents = "

    Updating the Default user star image... "; - $db->update_query("usergroups", array('starimage' => 'images/star.png'), "starimage='images/star.gif'"); - $contents .= "done.

    "; - - $contents .= "

    Adding new stylesheets... "; - - $query = $db->simple_select("themes", "*", "tid='1'"); - - $theme = $db->fetch_array($query); - $properties = my_unserialize($theme['properties']); - $stylesheets = my_unserialize($theme['stylesheets']); - - $old = array("global.css", "usercp.css", "modcp.css", "star_ratings.css"); - require_once MYBB_ROOT."inc/class_xml.php"; - $colors = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme.xml'); - $parser = new XMLParser($colors); - $tree = $parser->get_tree(); - - if(is_array($tree) && is_array($tree['theme'])) - { - if(is_array($tree['theme']['stylesheets'])) - { - foreach($tree['theme']['stylesheets']['stylesheet'] as $stylesheet) - { - $new_stylesheet = array( - "name" => $db->escape_string($stylesheet['attributes']['name']), - "tid" => 1, - "attachedto" => $db->escape_string($stylesheet['attributes']['attachedto']), - "stylesheet" => $db->escape_string($stylesheet['value']), - "lastmodified" => TIME_NOW, - "cachefile" => $db->escape_string($stylesheet['attributes']['name']) - ); - - if(in_array($new_stylesheet['name'], $old)) - { - // We can update the disporder here - $properties['disporder'][$stylesheet['attributes']['name']] = $stylesheet['attributes']['disporder']; - } - else - { - // Insert new stylesheet - $sid = $db->insert_query("themestylesheets", $new_stylesheet); - $css_url = "css.php?stylesheet={$sid}"; - - $cached = cache_stylesheet($tid, $stylesheet['attributes']['name'], $stylesheet['value']); - - if($cached) - { - $css_url = $cached; - } - - // Add to display and stylesheet list - $properties['disporder'][$stylesheet['attributes']['name']] = $stylesheet['attributes']['disporder']; - $attachedto = $stylesheet['attributes']['attachedto']; - if(!$attachedto) - { - $attachedto = "global"; - } - - // private.php?compose,folders|usercp.php,global|global - $attachedto = explode("|", $attachedto); - foreach($attachedto as $attached_file) - { - $attached_actions = explode(",", $attached_file); - $attached_file = array_shift($attached_actions); - if(count($attached_actions) == 0) - { - $attached_actions = array("global"); - } - - foreach($attached_actions as $action) - { - $stylesheets[$attached_file][$action][] = $css_url; - } - } - } - } - } - } - - $update_array = array( - "properties" => $db->escape_string(my_serialize($properties)), - "stylesheets" => $db->escape_string(my_serialize($stylesheets)) - ); - - $db->update_query("themes", $update_array, "tid = '1'"); - - $contents .= "done.

    "; - - $contents .= "

    Adding a disporder to all stylesheets... "; - - $query = $db->simple_select("themes", "tid,properties,stylesheets"); - while($theme = $db->fetch_array($query)) - { - $properties = my_unserialize($theme['properties']); - $stylesheets = my_unserialize($theme['stylesheets']); - - // Disporder already set? - if(isset($properties['disporder']) && !empty($properties['disporder'])) - { - continue; - } - - $disporder = 1; - - // First go through all own stylesheets - $query2 = $db->simple_select("themestylesheets", "name", "tid='{$theme['tid']}'"); - while($name = $db->fetch_field($query2, "name")) - { - $properties['disporder'][$name] = $disporder; - $disporder++; - } - - // Next go through the inherited stylesheets - if(!empty($stylesheets)) - { - foreach($stylesheets as $a) - { - foreach($a as $file => $stylesheet) - { - // Don't ask me... Throws an error otherwise - if(empty($stylesheet)) - { - continue; - } - foreach($stylesheet as $s) - { - $name = pathinfo($s, PATHINFO_BASENAME); - if(empty($properties['disporder']) || !in_array($name, array_keys($properties['disporder']))) - { - $properties['disporder'][$name] = $disporder; - $disporder++; - } - } - } - } - } - - $db->update_query("themes", array("properties" => $db->escape_string(my_serialize($properties))), "tid='{$theme['tid']}'"); - } - - $contents .= "done.

    "; - - $contents .= "

    Adding the Default colors... "; - - $query = $db->simple_select("themes", "*", "tid = '2'"); - - // Someone deleted the default theme... :o - if($db->num_rows($query) != 0) - { - $theme = $db->fetch_array($query); - $properties = my_unserialize($theme['properties']); - $stylesheets = my_unserialize($theme['stylesheets']); - - $properties['editortheme'] = "mybb.css"; // New editor, so reset the theme for it - $properties['tablespace'] = 5; - $properties['borderwidth'] = 0; - // Reset the logo if it's still the default one - if($properties['logo'] == "images/logo.gif") - { - $properties['logo'] = "images/logo.png"; - } - - require_once MYBB_ROOT."inc/class_xml.php"; - $colors = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme_colors.xml'); - $parser = new XMLParser($colors); - $tree = $parser->get_tree(); - - if(is_array($tree) && is_array($tree['colors'])) - { - if(is_array($tree['colors']['scheme'])) - { - foreach($tree['colors']['scheme'] as $tag => $value) - { - $exp = explode("=", $value['value']); - - $properties['colors'][$exp[0]] = $exp[1]; - } - } - - if(is_array($tree['colors']['stylesheets'])) - { - $count = count($properties['disporder']) + 1; - foreach($tree['colors']['stylesheets']['stylesheet'] as $stylesheet) - { - $new_stylesheet = array( - "name" => $db->escape_string($stylesheet['attributes']['name']), - "tid" => 2, - "attachedto" => $db->escape_string($stylesheet['attributes']['attachedto']), - "stylesheet" => $db->escape_string($stylesheet['value']), - "lastmodified" => TIME_NOW, - "cachefile" => $db->escape_string($stylesheet['attributes']['name']) - ); - - $sid = $db->insert_query("themestylesheets", $new_stylesheet); - $css_url = "css.php?stylesheet={$sid}"; - - $cached = cache_stylesheet($tid, $stylesheet['attributes']['name'], $stylesheet['value']); - - if($cached) - { - $css_url = $cached; - } - - // Add to display and stylesheet list - $properties['disporder'][$stylesheet['attributes']['name']] = $count; - $stylesheets[$stylesheet['attributes']['attachedto']]['global'][] = $css_url; - - ++$count; - } - } - - $update_array = array( - "properties" => $db->escape_string(my_serialize($properties)), - "stylesheets" => $db->escape_string(my_serialize($stylesheets)) - ); - - $db->update_query("themes", $update_array, "tid = '2'"); - } - } - - $contents .= "done.

    "; - - $contents .= '

    Re-caching and minifying existing stylesheets...

    '; - - $num_re_cached = recache_existing_styles(); - - $contents .= "Done. {$num_re_cached} stylesheets re-cached."; - - echo $contents; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - - if(!isset($config['secret_pin']) && is_writable(MYBB_ROOT."inc/config.php")) - { - $output->print_footer("30_acppin"); - } - else - { - $output->print_footer("30_done"); - } -} - -function upgrade30_acppin() -{ - global $config, $output; - - $output->print_header("Add an ACP PIN"); - - echo "

    We added a new security function in 1.8: The possibility to set a security PIN which you need to enter the ACP.
    \n"; - echo "If you don't want to set a PIN you can simply skip this step (leave the field below empty). You can still set the PIN later (see the docs to see how).

    \n"; - echo '
    -
    ACP PIN Configuration
    - - - - - - - - - - -
    ACP Security PIN
    -
    '; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - - $output->print_footer("30_acppin_submit"); -} - -function upgrade30_acppin_submit() -{ - global $db, $mybb, $output, $config; - - $output->print_header("Writing the config file"); - - $content = "

    We're now writing your PIN (if you've entered one) to the config.php file... "; - - if(!is_writable(MYBB_ROOT."inc/config.php")) - { - $content .= "Failed (config.php not writable)"; - } - else if(isset($config['secret_pin'])) - { - $content .= "Skipped (PIN already set)"; - } - else - { - $pin = addslashes($mybb->get_input('pin')); - - $file = @fopen(MYBB_ROOT."inc/config.php", "r+"); - - $contents = ''; - while(!@feof($file)) - { - $contents .= @fread($file, 8436); - } - - $contents_temp = str_replace(array("\r", "\t", "\n", " ", "\0", "\x0B"), '', $contents); - - // Set the pointer before the closing php tag to remove it - $pos = strrpos($contents, "?>"); - if(my_substr($contents_temp, -2) == "?>") - { - @fseek($file, $pos, SEEK_SET); - } - - @fwrite($file, " -/** - * Admin CP Secret PIN - * If you wish to request a PIN - * when someone tries to login - * on your Admin CP, enter it below. - */ - -\$config['secret_pin'] = '{$pin}';"); - - @fclose($file); - - $content .= "Done"; - } - - echo $content."

    "; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - - $output->print_footer("30_done"); -} - -/** - * Re-cache the existing stylesheets so that they get minified. - * - * @return int The number of re-cached stylesheets. - */ -function recache_existing_styles() -{ - global $db; - - $query = $db->simple_select('themestylesheets', '*'); - - $num_updated = 0; - - while($stylesheet = $db->fetch_array($query)) - { - if (cache_stylesheet((int) $stylesheet['tid'], $stylesheet['name'], $stylesheet['stylesheet'])) - { - ++$num_updated; - } - } - - return $num_updated; -} diff --git a/html/forums/install/resources/upgrade31.php b/html/forums/install/resources/upgrade31.php deleted file mode 100644 index 8066626..0000000 --- a/html/forums/install/resources/upgrade31.php +++ /dev/null @@ -1,59 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade31_dbchanges() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - $query = $db->simple_select("templategroups", "COUNT(*) as numexists", "prefix='sendthread'"); - if($db->fetch_field($query, "numexists") == 0) - { - $db->insert_query("templategroups", array('prefix' => 'sendthread', 'title' => '', 'isdefault' => '1')); - } - - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'statslimit\', \'maxmultipagelinks\', \'deleteinvites\', \'gziplevel\', \'subforumsindex\', \'showbirthdayspostlimit\', \'threadsperpage\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'hottopic\', \'hottopicviews\', \'announcementlimit\', \'postsperpage\', \'threadreadcut\', \'similarityrating\', \'similarlimit\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'minnamelength\', \'maxnamelength\', \'minpasswordlength\', \'maxpasswordlength\', \'betweenregstime\', \'maxregsbetweentime\', \'failedcaptchalogincount\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'failedlogincount\', \'failedlogintime\', \'regtime\', \'maxsigimages\', \'siglength\', \'avatarsize\', \'customtitlemaxlength\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'minmessagelength\', \'maxmessagelength\', \'postfloodsecs\', \'postmergemins\', \'maxpostimages\', \'maxpostvideos\', \'subscribeexcerpt\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'wordwrap\', \'maxquotedepth\', \'polloptionlimit\', \'maxpolloptions\', \'polltimelimit\', \'maxattachments\', \'attachthumbh\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'attachthumbw\', \'membersperpage\', \'repsperpage\', \'maxreplength\', \'minreplength\', \'maxwarningpoints\', \'pmfloodsecs\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'maxpmquotedepth\', \'wolcutoffmins\', \'refreshwol\', \'prunepostcount\', \'dayspruneregistered\', \'dayspruneunactivated\', \'portal_numannouncements\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'portal_showdiscussionsnum\', \'searchfloodtime\', \'minsearchword\', \'searchhardlimit\', \'smilieinsertertot\', \'smilieinsertercols\', \'maxloginattempts\') AND optionscode=\'text\''); - $db->update_query('settings', array('optionscode' => 'numeric'), 'name IN (\'loginattemptstimeout\', \'contact_maxsubjectlength\', \'contact_minmessagelength\', \'contact_maxmessagelength\', \'purgespammerpostlimit\', \'purgespammerbangroup\', \'statscachetime\') AND optionscode=\'text\''); - - // Update help documents - $query = $db->simple_select('helpdocs', 'document', 'hid=\'3\''); - $helpdoc = $db->fetch_array($query); - if(my_strpos($helpdoc['document'], ';key={1}') !== false) - { - $helpdoc['document'] = str_replace(';key={1}', ';my_post_key={1}', $helpdoc['document']); - } - $db->update_query('helpdocs', array('document' => $db->escape_string($helpdoc['document'])), 'hid=\'3\''); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("31_done"); -} \ No newline at end of file diff --git a/html/forums/install/resources/upgrade32.php b/html/forums/install/resources/upgrade32.php deleted file mode 100644 index bd3d7b1..0000000 --- a/html/forums/install/resources/upgrade32.php +++ /dev/null @@ -1,86 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade32_dbchanges() -{ - global $db, $output; - - // Unset old ACP cookies from front-end since they're not needed anymore - my_unsetcookie('adminsid'); - my_unsetcookie('acploginattempts'); - my_unsetcookie('acp_view'); - my_unsetcookie('inlinemod_useracp'); - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('candeletereputations', 'usergroups')) - { - $db->drop_column("usergroups", "candeletereputations"); - } - - if($db->field_exists('authsecret', 'adminoptions')) - { - $db->drop_column("adminoptions", "authsecret"); - } - - if($db->field_exists('recovery_codes', 'adminoptions')) - { - $db->drop_column("adminoptions", "recovery_codes"); - } - - if($db->field_exists('authenticated', 'adminsessions')) - { - $db->drop_column("adminsessions", "authenticated"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("usergroups", "candeletereputations", "smallint NOT NULL default '0' AFTER cangivereputations"); - $db->add_column("adminoptions", "authsecret", "varchar(16) NOT NULL default ''"); - $db->add_column("adminoptions", "recovery_codes", "varchar(177) NOT NULL default ''"); - $db->add_column("adminsessions", "authenticated", "smallint NOT NULL default '0'"); - break; - case "sqlite": - $db->add_column("usergroups", "candeletereputations", "tinyint(1) NOT NULL default '0'"); - $db->add_column("adminoptions", "authsecret", "varchar(16) NOT NULL default ''"); - $db->add_column("adminoptions", "recovery_codes", "varchar(177) NOT NULL default ''"); - $db->add_column("adminsessions", "authenticated", "tinyint(1) NOT NULL default '0'"); - break; - default: - $db->add_column("usergroups", "candeletereputations", "tinyint(1) NOT NULL default '0' AFTER cangivereputations"); - $db->add_column("adminoptions", "authsecret", "varchar(16) NOT NULL default ''"); - $db->add_column("adminoptions", "recovery_codes", "varchar(177) NOT NULL default ''"); - $db->add_column("adminsessions", "authenticated", "tinyint(1) NOT NULL default '0'"); - break; - } - - // Delete forumpermissions belonging to a deleted forum - $db->delete_query("forumpermissions", "fid NOT IN(SELECT fid FROM {$db->table_prefix}forums)"); - - $db->update_query("settings", array('optionscode' => 'select\r\n0=No CAPTCHA\r\n1=MyBB Default CAPTCHA\r\n2=reCAPTCHA\r\n3=Are You a Human\r\n4=NoCAPTCHA reCAPTCHA'), "name='captchaimage'"); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("32_done"); -} \ No newline at end of file diff --git a/html/forums/install/resources/upgrade33.php b/html/forums/install/resources/upgrade33.php deleted file mode 100644 index a02c3b3..0000000 --- a/html/forums/install/resources/upgrade33.php +++ /dev/null @@ -1,38 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade33_dbchanges() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('2fasecret', 'adminoptions') && !$db->field_exists('authsecret', 'adminoptions')) - { - $db->rename_column('adminoptions', '2fasecret', 'authsecret', "varchar(16) NOT NULL default ''"); - } - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("33_done"); -} diff --git a/html/forums/install/resources/upgrade34.php b/html/forums/install/resources/upgrade34.php deleted file mode 100644 index 83c30c8..0000000 --- a/html/forums/install/resources/upgrade34.php +++ /dev/null @@ -1,23 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.8.5 */ diff --git a/html/forums/install/resources/upgrade35.php b/html/forums/install/resources/upgrade35.php deleted file mode 100644 index 07c15b9..0000000 --- a/html/forums/install/resources/upgrade35.php +++ /dev/null @@ -1,188 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade35_dbchanges() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('subscriptionkey', 'threadsubscriptions')) - { - $db->drop_column("threadsubscriptions", "subscriptionkey"); - } - - if($db->type != 'pgsql') - { - $db->modify_column('adminsessions', 'useragent', "varchar(200) NOT NULL default ''"); - $db->modify_column('sessions', 'useragent', "varchar(200) NOT NULL default ''"); - } - else - { - $db->modify_column('adminsessions', 'useragent', "varchar(200)", "set", "''"); - $db->modify_column('sessions', 'useragent', "varchar(200)", "set", "''"); - } - - // Remove "Are You a Human" captcha - $db->update_query('settings', array('value' => '1'), "name='captchaimage' AND value='3'"); - $db->delete_query('settings', "name IN ('ayahpublisherkey', 'ayahscoringkey')"); - $db->delete_query('templates', "title IN ('member_register_regimage_ayah', 'post_captcha_ayah')"); - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("35_dbchanges2"); -} - -function upgrade35_dbchanges2() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary optimization queries...

    "; - flush(); - - switch($db->type) - { - // PostgreSQL and SQLite do not support unsigned ints - case "pgsql": - $db->modify_column("buddyrequests", "uid", "int", "set", "'0'"); - $db->modify_column("buddyrequests", "touid", "int", "set", "'0'"); - $db->modify_column("buddyrequests", "date", "int", "set", "'0'"); - break; - case "sqlite": - $db->modify_column("threadratings", "rating", "tinyint(1) NOT NULL default '0'"); - $db->modify_column("buddyrequests", "uid", "int NOT NULL default '0'"); - $db->modify_column("buddyrequests", "touid", "int NOT NULL default '0'"); - $db->modify_column("buddyrequests", "date", "int NOT NULL default '0'"); - break; - default: - $db->modify_column("adminviews", "perpage", "smallint(4) unsigned NOT NULL default '0'"); - $db->modify_column("attachments", "filesize", "int(10) unsigned NOT NULL default '0'"); - $db->modify_column("attachtypes", "maxsize", "int(15) unsigned NOT NULL default '0'"); - $db->modify_column("banned", "olddisplaygroup", "int unsigned NOT NULL default '0'"); - $db->modify_column("buddyrequests", "uid", "int unsigned NOT NULL default '0'"); - $db->modify_column("buddyrequests", "touid", "int unsigned NOT NULL default '0'"); - $db->modify_column("buddyrequests", "date", "int unsigned NOT NULL default '0'"); - $db->modify_column("calendars", "eventlimit", "smallint(3) unsigned NOT NULL default '0'"); - $db->modify_column("massemails", "perpage", "smallint(4) unsigned NOT NULL default '50'"); - $db->modify_column("promotions", "posts", "int unsigned NOT NULL default '0'"); - $db->modify_column("promotions", "threads", "int unsigned NOT NULL default '0'"); - $db->modify_column("promotions", "registered", "int unsigned NOT NULL default '0'"); - $db->modify_column("promotions", "online", "int unsigned NOT NULL default '0'"); - $db->modify_column("promotions", "referrals", "int unsigned NOT NULL default '0'"); - $db->modify_column("promotions", "warnings", "int unsigned NOT NULL default '0'"); - $db->modify_column("sessions", "location1", "int(10) unsigned NOT NULL default '0'"); - $db->modify_column("sessions", "location2", "int(10) unsigned NOT NULL default '0'"); - $db->modify_column("threadratings", "rating", "tinyint(1) unsigned NOT NULL default '0'"); - $db->modify_column("threads", "views", "int(100) unsigned NOT NULL default '0'"); - $db->modify_column("threads", "replies", "int(100) unsigned NOT NULL default '0'"); - break; - } - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("35_dbchanges3"); -} - -function upgrade35_dbchanges3() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary optimization queries...

    "; - flush(); - - switch($db->type) - { - // PostgreSQL and SQLite do not support unsigned ints - case "sqlite": - $db->modify_column("usergroups", "type", "tinyint(1) NOT NULL default '2'"); - $db->modify_column("users", "loginattempts", "smallint(2) NOT NULL default '1'"); - break; - case "mysql": - case "mysqli": - $db->modify_column("usergroups", "type", "tinyint(1) unsigned NOT NULL default '2'"); - $db->modify_column("usergroups", "stars", "smallint(4) unsigned NOT NULL default '0'"); - $db->modify_column("usergroups", "pmquota", "int(3) unsigned NOT NULL default '0'"); - $db->modify_column("usergroups", "maxpmrecipients", "int(4) unsigned NOT NULL default '5'"); - $db->modify_column("usergroups", "maxemails", "int(3) unsigned NOT NULL default '5'"); - $db->modify_column("usergroups", "emailfloodtime", "int(3) unsigned NOT NULL default '5'"); - $db->modify_column("usergroups", "maxwarningsday", "int(3) unsigned NOT NULL default '3'"); - $db->modify_column("usergroups", "edittimelimit", "int(4) unsigned NOT NULL default '0'"); - $db->modify_column("usergroups", "maxposts", "int(4) unsigned NOT NULL default '0'"); - $db->modify_column("users", "postnum", "int(10) unsigned NOT NULL default '0'"); - $db->modify_column("users", "threadnum", "int(10) unsigned NOT NULL default '0'"); - $db->modify_column("users", "ppp", "smallint(6) unsigned NOT NULL default '0'"); - $db->modify_column("users", "tpp", "smallint(6) unsigned NOT NULL default '0'"); - $db->modify_column("users", "daysprune", "smallint(6) unsigned NOT NULL default '0'"); - $db->modify_column("users", "totalpms", "int(10) unsigned NOT NULL default '0'"); - $db->modify_column("users", "unreadpms", "int(10) unsigned NOT NULL default '0'"); - $db->modify_column("users", "warningpoints", "int(3) unsigned NOT NULL default '0'"); - $db->modify_column("users", "loginattempts", "smallint(2) unsigned NOT NULL default '1'"); - $db->modify_column("usertitles", "stars", "smallint(4) unsigned NOT NULL default '0'"); - $db->modify_column("warninglevels", "percentage", "smallint(3) unsigned NOT NULL default '0'"); - break; - } - - global $footer_extra; - $footer_extra = ""; - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("35_dbchanges4"); -} - -function upgrade35_dbchanges4() -{ - global $mybb, $output; - - $output->print_header("Adding index files"); - echo "

    Adding index files to attachment directories...

    "; - flush(); - - $dir = @opendir('../'.$mybb->settings['uploadspath']); - if($dir) - { - while(($file = @readdir($dir)) !== false) - { - $filename = "../{$mybb->settings['uploadspath']}/{$file}"; - $indexfile = "{$filename}/index.html"; - - if(preg_match('#^[0-9]{6}$#', $file) && @is_dir($filename) && @is_writable($filename) && !file_exists($indexfile)) - { - $index = @fopen($indexfile, 'w'); - @fwrite($index, "\n\n\n\n\n \n\n"); - @fclose($index); - } - } - - @closedir($dir); - } - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("35_done"); -} diff --git a/html/forums/install/resources/upgrade36.php b/html/forums/install/resources/upgrade36.php deleted file mode 100644 index 302e159..0000000 --- a/html/forums/install/resources/upgrade36.php +++ /dev/null @@ -1,235 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade36_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('enabled', 'attachtypes')) - { - $db->drop_column('attachtypes', 'enabled'); - } - - if($db->field_exists('groups', 'attachtypes')) - { - $db->drop_column('attachtypes', 'groups'); - } - - if($db->field_exists('forums', 'attachtypes')) - { - $db->drop_column('attachtypes', 'forums'); - } - - if($db->field_exists('avatarfile', 'attachtypes')) - { - $db->drop_column('attachtypes', 'avatarfile'); - } - - switch($db->type) - { - case "pgsql": - $db->add_column('attachtypes', 'enabled', "smallint NOT NULL default '1'"); - $db->add_column('attachtypes', 'groups', "text NOT NULL default '-1'"); - $db->add_column('attachtypes', 'forums', "text NOT NULL default '-1'"); - $db->add_column('attachtypes', 'avatarfile', "smallint NOT NULL default '0'"); - break; - default: - $db->add_column('attachtypes', 'enabled', "tinyint(1) NOT NULL default '1'"); - $db->add_column('attachtypes', 'groups', "TEXT NOT NULL"); - $db->add_column('attachtypes', 'forums', "TEXT NOT NULL"); - $db->add_column('attachtypes', 'avatarfile', "tinyint(1) NOT NULL default '0'"); - - $db->update_query('attachtypes', array('groups' => '-1', 'forums' => '-1')); - break; - } - - $db->update_query('attachtypes', array('avatarfile' => 1), "atid IN (2, 4, 7, 11)"); - - if($mybb->settings['username_method'] == 1 || $mybb->settings['username_method'] == 2) - { - $query = $db->simple_select('users', 'email, COUNT(email) AS duplicates', "email!=''", array('group_by' => 'email HAVING duplicates>1')); - if($db->num_rows($query)) - { - $db->update_query('settings', array('value' => 0), "name='username_method'"); - } - else - { - $db->update_query('settings', array('value' => 0), "name='allowmultipleemails'"); - } - } - - $query = $db->simple_select("templategroups", "COUNT(*) as numexists", "prefix='mycode'"); - if($db->fetch_field($query, "numexists") == 0) - { - $db->insert_query("templategroups", array('prefix' => 'mycode', 'title' => '', 'isdefault' => '1')); - } - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("36_dbchanges2"); -} - -function upgrade36_dbchanges2() -{ - global $output, $db, $cache; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('reasonid', 'reportedcontent')) - { - $db->drop_column("reportedcontent", "reasonid"); - } - - switch($db->type) - { - case "pgsql": - case "sqlite": - $db->add_column("reportedcontent", "reasonid", "smallint NOT NULL default '0' AFTER reportstatus"); - break; - default: - $db->add_column("reportedcontent", "reasonid", "smallint unsigned NOT NULL default '0' AFTER reportstatus"); - break; - } - - - if($db->table_exists("reportreasons")) - { - $db->drop_table("reportreasons"); - } - - $collation = $db->build_create_table_collation(); - - switch($db->type) - { - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."reportreasons ( - rid serial, - title varchar(250) NOT NULL default '', - appliesto varchar(250) NOT NULL default '', - extra smallint NOT NULL default '0', - disporder smallint NOT NULL default '0', - PRIMARY KEY (rid) - );"); - break; - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."reportreasons ( - rid INTEGER PRIMARY KEY, - title varchar(250) NOT NULL default '', - appliesto varchar(250) NOT NULL default '', - extra tinyint(1) NOT NULL default '0', - disporder smallint NOT NULL default '0', - );"); - break; - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."reportreasons ( - rid int unsigned NOT NULL auto_increment, - title varchar(250) NOT NULL default '', - appliesto varchar(250) NOT NULL default '', - extra tinyint(1) NOT NULL default '0', - disporder smallint unsigned NOT NULL default '0', - PRIMARY KEY (rid) - ) ENGINE=MyISAM{$collation};"); - break; - } - - $reportreasons = array( - array( - 'rid' => 1, - 'title' => "", - 'appliesto' => "all", - 'extra' => 1, - 'disporder' => 99 - ), - array( - 'rid' => 2, - 'title' => "", - 'appliesto' => "all", - 'extra' => 0, - 'disporder' => 1 - ), - array( - 'rid' => 3, - 'title' => "", - 'appliesto' => "all", - 'extra' => 0, - 'disporder' => 2 - ), - array( - 'rid' => 4, - 'title' => "", - 'appliesto' => "all", - 'extra' => 0, - 'disporder' => 3 - ), - array( - 'rid' => 5, - 'title' => "", - 'appliesto' => "post", - 'extra' => 0, - 'disporder' => 4 - ) - ); - - $db->insert_query_multiple('reportreasons', $reportreasons); - - $templang = new MyLanguage(); - $templang->set_path(MYBB_ROOT."inc/languages"); - - $langs = array_keys($templang->get_languages()); - - foreach($langs as $langname) - { - unset($templang); - $templang = new MyLanguage(); - $templang->set_path(MYBB_ROOT."inc/languages"); - $templang->set_language($langname); - $templang->load("report"); - - if(!empty($templang->report_reason_rules) && $templang->report_reason_rules != '') - { - $db->update_query("reportedcontent", array("reasonid" => 2, "reason" => ''), "reason = '".$db->escape_string("\n".$templang->report_reason_rules)."'"); - } - if(!empty($templang->report_reason_bad) && $templang->report_reason_bad != '') - { - $db->update_query("reportedcontent", array("reasonid" => 3, "reason" => ''), "reason = '".$db->escape_string("\n".$templang->report_reason_bad)."'"); - } - if(!empty($templang->report_reason_spam) && $templang->report_reason_spam != '') - { - $db->update_query("reportedcontent", array("reasonid" => 4, "reason" => ''), "reason = '".$db->escape_string("\n".$templang->report_reason_spam)."'"); - } - if(!empty($templang->report_reason_wrong) && $templang->report_reason_wrong != '') - { - $db->update_query("reportedcontent", array("reasonid" => 5, "reason" => ''), "reason = '".$db->escape_string("\n".$templang->report_reason_wrong)."'"); - } - } - - // Any reason not converted is treated as "Other" with extra text specified - $db->update_query("reportedcontent", array('reasonid' => 1), "reason != ''"); - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("36_done"); -} diff --git a/html/forums/install/resources/upgrade37.php b/html/forums/install/resources/upgrade37.php deleted file mode 100644 index f37bc73..0000000 --- a/html/forums/install/resources/upgrade37.php +++ /dev/null @@ -1,55 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -function upgrade37_dbchanges() -{ - global $db, $output; - - $output->print_header("Updating Database"); - echo "

    Performing necessary upgrade queries...

    "; - flush(); - - if($db->field_exists('canviewdeletionnotice', 'usergroups')) - { - $db->drop_column("usergroups", "canviewdeletionnotice"); - } - - if($db->field_exists('canviewdeletionnotice', 'forumpermissions')) - { - $db->drop_column("forumpermissions", "canviewdeletionnotice"); - } - - switch($db->type) - { - case "pgsql": - $db->add_column("forumpermissions", "canviewdeletionnotice", "smallint NOT NULL default '0' AFTER caneditattachments"); - $db->add_column("usergroups", "canviewdeletionnotice", "smallint NOT NULL default '0' AFTER caneditattachments"); - break; - default: - $db->add_column("forumpermissions", "canviewdeletionnotice", "tinyint(1) NOT NULL default '0' AFTER caneditattachments"); - $db->add_column("usergroups", "canviewdeletionnotice", "tinyint(1) NOT NULL default '0' AFTER caneditattachments"); - break; - } - - $output->print_contents("

    Click next to continue with the upgrade process.

    "); - $output->print_footer("37_done"); -} \ No newline at end of file diff --git a/html/forums/install/resources/upgrade38.php b/html/forums/install/resources/upgrade38.php deleted file mode 100644 index 9e0d8ff..0000000 --- a/html/forums/install/resources/upgrade38.php +++ /dev/null @@ -1,23 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.8.9 */ diff --git a/html/forums/install/resources/upgrade39.php b/html/forums/install/resources/upgrade39.php deleted file mode 100644 index 3d2a191..0000000 --- a/html/forums/install/resources/upgrade39.php +++ /dev/null @@ -1,23 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.8.10 */ diff --git a/html/forums/install/resources/upgrade4.php b/html/forums/install/resources/upgrade4.php deleted file mode 100644 index d944bcb..0000000 --- a/html/forums/install/resources/upgrade4.php +++ /dev/null @@ -1,81 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 1, - "requires_deactivated_plugins" => 1, -); - -@set_time_limit(0); - -function upgrade4_dbchanges() -{ - global $db, $output; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - - $db->write_query("UPDATE ".TABLE_PREFIX."users SET style='0' WHERE style='-1';"); - $db->write_query("UPDATE ".TABLE_PREFIX."users SET displaygroup='0' WHERE displaygroup='-1';"); - $db->write_query("UPDATE ".TABLE_PREFIX."forums SET style='0' WHERE style='-1';"); - $query = $db->simple_select("adminoptions", "uid='0'"); - $test = $db->fetch_array($query); - if(!isset($test['uid'])) - { - $db->write_query("UPDATE ".TABLE_PREFIX."adminoptions SET uid='0' WHERE uid='-1';"); - } - - if($db->field_exists('messageindex', "threads")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads DROP messageindex;"); - } - if($db->field_exists('subjectindex', "threads")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads DROP subjectindex;"); - } - if($db->field_exists('moderators', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP moderators;"); - } - - if($db->field_exists('version', "templates")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates DROP version;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates ADD version varchar(20) NOT NULL default '0';"); - - if($db->field_exists('status', "templates")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates DROP status;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates ADD status varchar(10) NOT NULL default '';"); - - if($db->field_exists('dateline', "templates")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates DROP dateline;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."templates ADD dateline int(10) NOT NULL default '0';"); - - $db->write_query("UPDATE ".TABLE_PREFIX."templates SET version='100.06' WHERE sid>0"); - - echo "Done

    "; - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("4_done"); -} - diff --git a/html/forums/install/resources/upgrade40.php b/html/forums/install/resources/upgrade40.php deleted file mode 100644 index 67ad591..0000000 --- a/html/forums/install/resources/upgrade40.php +++ /dev/null @@ -1,23 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do for 1.8.11 */ diff --git a/html/forums/install/resources/upgrade5.php b/html/forums/install/resources/upgrade5.php deleted file mode 100644 index 0600c8b..0000000 --- a/html/forums/install/resources/upgrade5.php +++ /dev/null @@ -1,639 +0,0 @@ - 1, - "revert_all_themes" => 1, - "revert_all_settings" => 2, - "requires_deactivated_plugins" => 1, -); - -@set_time_limit(0); - -function upgrade5_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users CHANGE avatartype avatartype varchar(10) NOT NULL;"); - if($db->field_exists('totalpms', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP totalpms;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD totalpms int(10) NOT NULL default '0' AFTER showcodebuttons;"); - - - if($db->field_exists('newpms', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP newpms;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD newpms int(10) NOT NULL default '0' AFTER totalpms;"); - - - if($db->field_exists('unreadpms', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP unreadpms;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD unreadpms int(10) NOT NULL default '0' AFTER newpms;"); - - - if($db->field_exists('showredirect', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP showredirect;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD showredirect char(3) NOT NULL default '' AFTER showquickreply;"); - - - if($db->field_exists('avatardimensions', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP avatardimensions;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users ADD avatardimensions varchar(10) NOT NULL default '' AFTER avatar;"); - - - if($db->field_exists('unapprovedposts', "threads")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads DROP unapprovedposts;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads ADD unapprovedposts INT(10) unsigned NOT NULL default '0' AFTER visible;"); - - - if($db->field_exists('unapprovedthreads', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP unapprovedthreads;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD unapprovedthreads INT(10) unsigned NOT NULL default '0' AFTER rules;"); - - - if($db->field_exists('unapprovedposts', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP unapprovedposts;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD unapprovedposts INT(10) unsigned NOT NULL default '0' AFTER rules;"); - - - if($db->field_exists('defaultdatecut', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP defaultdatecut;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD defaultdatecut smallint(4) unsigned NOT NULL default '0' AFTER unapprovedposts;"); - - - if($db->field_exists('defaultsortby', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP defaultsortby;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD defaultsortby varchar(10) NOT NULL default '' AFTER defaultdatecut;"); - - - if($db->field_exists('defaultsortorder', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP defaultsortorder;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD defaultsortorder varchar(4) NOT NULL default '' AFTER defaultsortby;"); - - - if($db->field_exists('lastposteruid', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP lastposteruid;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD lastposteruid int(10) unsigned NOT NULL default '0' AFTER lastposter;"); - - - if($db->field_exists('lastpostsubject', "forums")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums DROP lastpostsubject;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forums ADD lastpostsubject varchar(120) NOT NULL default '' AFTER lastposttid"); - - - if($db->field_exists('lastposteruid', "threads")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads DROP lastposteruid;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads ADD lastposteruid int unsigned NOT NULL default '0' AFTER lastposter"); - - - if($db->field_exists('canmanagemembers', "groupleaders")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."groupleaders DROP canmanagemembers;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."groupleaders ADD canmanagemembers char(3) NOT NULL default '' AFTER uid;"); - - - if($db->field_exists('canmanagerequests', "groupleaders")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."groupleaders DROP canmanagerequests;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."groupleaders ADD canmanagerequests char(3) NOT NULL default '' AFTER canmanagemembers;"); - - - if($db->field_exists('caneditlangs', "adminoptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions DROP caneditlangs;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions ADD caneditlangs char(3) NOT NULL default '' AFTER canedithelp;"); - - - if($db->field_exists('canrundbtools', "adminoptions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions DROP canrundbtools;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."adminoptions ADD canrundbtools char(3) NOT NULL default ''"); - - - if($db->field_exists('allowedgroups', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP allowedgroups;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes ADD allowedgroups text NOT NULL AFTER extracss;"); - - - if($db->field_exists('canmovetononmodforum', "moderators")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderators DROP canmovetononmodforum;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderators ADD canmovetononmodforum char(3) NOT NULL default '' AFTER canmanagethreads;"); - - - if($db->field_exists('csscached', "themes")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes DROP csscached;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."themes ADD csscached bigint(30) NOT NULL default '0'"); - - - $db->write_query("UPDATE ".TABLE_PREFIX."adminoptions SET caneditlangs='yes' WHERE canrunmaint='yes'"); - $db->write_query("UPDATE ".TABLE_PREFIX."adminoptions SET caneditlangs='no' WHERE canrunmaint='no'"); - $db->write_query("UPDATE ".TABLE_PREFIX."adminoptions SET canrundbtools='yes' WHERE canrunmaint='yes'"); - $db->write_query("UPDATE ".TABLE_PREFIX."adminoptions SET canrundbtools='no' WHERE canrunmaint='no'"); - $db->write_query("UPDATE ".TABLE_PREFIX."settings SET optionscode='select\r\ninstant=Instant Activation\r\nverify=Send Email Verification\r\nrandompass=Send Random Password\r\nadmin=Administrator Activation' WHERE name = 'regtype'"); - $db->write_query("UPDATE ".TABLE_PREFIX."users SET totalpms='-1', newpms='-1', unreadpms='-1'"); - $db->write_query("UPDATE ".TABLE_PREFIX."settings SET name='maxmessagelength' WHERE name='messagelength'"); - - $collation = $db->build_create_table_collation(); - - $db->drop_table("mycode"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."mycode ( - cid int unsigned NOT NULL auto_increment, - title varchar(100) NOT NULL default '', - description text NOT NULL, - regex text NOT NULL, - replacement text NOT NULL, - active char(3) NOT NULL default '', - PRIMARY KEY(cid) - ) ENGINE=MyISAM{$collation};"); - - $db->drop_table("templategroups"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."templategroups ( - gid int unsigned NOT NULL auto_increment, - prefix varchar(50) NOT NULL default '', - title varchar(100) NOT NULL default '', - PRIMARY KEY (gid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('1','calendar','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('2','editpost','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('3','email','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('4','emailsubject','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('5','forumbit','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('6','forumjump','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('7','forumdisplay','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('8','index','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('9','error','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('10','memberlist','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('11','multipage','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('12','private','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('13','portal','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('14','postbit','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('15','redirect','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('16','showthread','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('17','usercp','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('18','online','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('19','moderation','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('20','nav','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('21','search','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('22','showteam','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('23','reputation','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('24','newthread','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('25','newreply','');"); - $db->write_query("INSERT INTO ".TABLE_PREFIX."templategroups (gid,prefix,title) VALUES ('26','member','');"); - - $db->drop_table("searchlog"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."searchlog ( - sid varchar(32) NOT NULL default '', - uid int unsigned NOT NULL default '0', - dateline bigint(30) NOT NULL default '0', - ipaddress varchar(120) NOT NULL default '', - threads text NOT NULL, - posts text NOT NULL, - searchtype varchar(10) NOT NULL default '', - resulttype varchar(10) NOT NULL default '', - querycache text NOT NULL, - keywords text NOT NULL, - PRIMARY KEY (sid) - ) ENGINE=MyISAM{$collation};"); - - $db->write_query("UPDATE ".TABLE_PREFIX."settings SET name='bannedemails' WHERE name='emailban' LIMIT 1"); - $db->write_query("UPDATE ".TABLE_PREFIX."settings SET name='bannedips' WHERE name='ipban' LIMIT 1"); - - $query = $db->simple_select("settings", "value", "name='bannedusernames'"); - $bannedusernames = $db->fetch_field($query, 'sid'); - $bannedusernames = explode(" ", $bannedusernames); - $bannedusernames = implode(",", $bannedusernames); - $query = $db->write_query("UPDATE ".TABLE_PREFIX."settings SET value='".$db->escape_string($bannedusernames)."' WHERE name='bannedusernames'"); - - $query = $db->simple_select("settings", "value", "name='bannedemails'"); - $bannedemails = $db->fetch_field($query, 'sid'); - $bannedemails = explode(" ", $bannedemails); - $bannedemails = implode(",", $bannedemails); - $query = $db->write_query("UPDATE ".TABLE_PREFIX."settings SET value='".$db->escape_string($bannedemails)."' WHERE name='bannedemails'"); - - $query = $db->simple_select("settings", "value", "name='bannedips'"); - $bannedips = $db->fetch_field($query, 'sid'); - $bannedips = explode(" ", $bannedips); - $bannedips = implode(",", $bannedips); - $db->update_query("settings", array('value' => $db->escape_string($bannedips)), "name='bannedips'"); - - $db->drop_table("reputation"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."reputation ( - rid int unsigned NOT NULL auto_increment, - uid int unsigned NOT NULL default '0', - adduid int unsigned NOT NULL default '0', - reputation bigint(30) NOT NULL default '0', - dateline bigint(30) NOT NULL default '0', - comments text NOT NULL, - PRIMARY KEY(rid) - ) ENGINE=MyISAM{$collation};"); - - $db->drop_table("mailqueue"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."mailqueue ( - mid int unsigned NOT NULL auto_increment, - mailto varchar(200) NOT NULL, - mailfrom varchar(200) NOT NULL, - subject varchar(200) NOT NULL, - message text NOT NULL, - headers text NOT NULL, - PRIMARY KEY(mid) - ) ENGINE=MyISAM{$collation};"); - - $db->update_query("users", array('reputation' => 0)); - - $db->update_query("usergroups", array('reputationpower' => 1)); - $db->update_query("usergroups", array('reputationpower' => 2), "cancp='yes'"); - - if($db->field_exists('rating', "users")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP rating;"); - } - - if($db->field_exists('attachmentcount', "threads")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads DROP attachmentcount;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads ADD attachmentcount int(10) unsigned NOT NULL default '0'"); - - - if($db->field_exists('posthash', "posts")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts DROP posthash;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD posthash varchar(32) NOT NULL default '' AFTER visible"); - - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."attachtypes CHANGE extension extension varchar(10) NOT NULL;"); - - if($db->field_exists('deletetime', "threads")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads DROP deletetime;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."threads ADD deletetime int(10) unsigned NOT NULL default '0' AFTER attachmentcount"); - - - if($db->field_exists('loginattempts', "sessions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."sessions DROP loginattempts;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."sessions ADD loginattempts tinyint(2) NOT NULL default '1'"); - - - if($db->field_exists('failedlogin', "sessions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."sessions DROP failedlogin;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."sessions ADD failedlogin bigint(30) NOT NULL default '0'"); - - - if($db->field_exists('canviewthreads', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP canviewthreads;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD canviewthreads char(3) NOT NULL default '' AFTER canview"); - - - if($db->field_exists('canviewthreads', "forumpermissions")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumpermissions DROP canviewthreads;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."forumpermissions ADD canviewthreads char(3) NOT NULL default '' AFTER canview"); - - - $db->drop_table("captcha"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."captcha ( - imagehash varchar(32) NOT NULL default '', - imagestring varchar(8) NOT NULL default '', - dateline bigint(30) NOT NULL default '0' - ) ENGINE=MyISAM{$collation};"); - - if($db->field_exists('data', "moderatorlog")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderatorlog DROP data;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."moderatorlog ADD data text NOT NULL AFTER action;"); - - - $db->drop_table("adminsessions"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."adminsessions ( - sid varchar(32) NOT NULL default '', - uid int unsigned NOT NULL default '0', - loginkey varchar(50) NOT NULL default '', - ip varchar(40) NOT NULL default '', - dateline bigint(30) NOT NULL default '0', - lastactive bigint(30) NOT NULL default '0' - ) ENGINE=MyISAM{$collation};"); - - $db->drop_table("modtools"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."modtools ( - tid smallint unsigned NOT NULL auto_increment, - name varchar(200) NOT NULL, - description text NOT NULL, - forums text NOT NULL, - type char(1) NOT NULL default '', - postoptions text NOT NULL, - threadoptions text NOT NULL, - PRIMARY KEY (tid) - ) ENGINE=MyISAM{$collation};"); - - if($db->field_exists('disporder', "usergroups")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups DROP disporder;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."usergroups ADD disporder smallint(6) NOT NULL default '0' AFTER image"); - - - $db->write_query("UPDATE ".TABLE_PREFIX."usergroups SET canviewthreads=canview"); - $db->write_query("UPDATE ".TABLE_PREFIX."forumpermissions SET canviewthreads=canview"); - - $contents .= "Done

    "; - $contents .= "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("5_redoconfig"); -} - -function upgrade5_redoconfig() -{ - global $db, $output, $config, $mybb; - $output->print_header("Rewriting config.php"); - - $uid = 0; - if($mybb->input['username'] != '' && !$mybb->input['uid']) - { - $user = get_user_by_username($mybb->input['username']); - - $uid = (int)$user['uid']; - - if(!$uid) - { - echo "

    The username you entered could not be found.
    Please ensure you corectly enter a valid username.

    "; - } - } - else if($mybb->input['uid']) - { - $uid = $mybb->input['uid']; - } - - if(!$uid) - { - echo "

    Please enter your primary administrator username. The user ID of the username you enter here will be written in to the new configuration file which will prevent this account from being banned, edited or deleted.

    "; - echo "

    Username:

    "; - echo "

    "; - $output->print_footer("5_redoconfig"); - exit; - } - - $fh = @fopen(MYBB_ROOT."inc/config.php", "w"); - if(!$fh) - { - echo "

    Unable to open inc/config.php
    Before the upgrade process can continue, you need to changes the permissions of inc/config.php so it is writable.

    "; - $output->print_footer("5_redoconfig"); - exit; - } - - if(!$config['admindir']) - { - $config['admindir'] = "admin"; - } - - if(!$config['cachestore']) - { - $config['cachestore'] = "db"; - } - $configdata = ""; - - fwrite($fh, $configdata); - fclose($fh); - echo "

    The configuration file has successfully been rewritten.

    "; - echo "

    Click next to continue with the upgrade process.

    "; - $output->print_footer("5_lastposts"); - -} - -function upgrade5_lastposts() -{ - global $db, $output; - $output->print_header("Rebuilding Last Post Columns"); - - if(!$_POST['tpp']) - { - echo "

    The next step in the upgrade process involves rebuilding the last post information for every thread in your forum. Below, please enter the number of threads to process per page.

    "; - echo "

    Threads Per Page:

    "; - echo "

    Once you're ready, press next to begin the rebuild process.

    "; - $output->print_footer("5_lastposts"); - } - else - { - $query = $db->simple_select("threads", "COUNT(*) as num_threads", "closed NOT LIKE 'moved|%'"); - $num_threads = $db->fetch_field($query, 'num_threads'); - $tpp = (int)$_POST['tpp']; - $start = (int)$_POST['start']; - $end = $start+$tpp; - if($end > $num_threads) - { - $end = $num_threads; - } - echo "

    Updating {$start} to {$end} of {$num_threads}...

    "; - - $query = $db->simple_select("threads", "tid, firstpost", "closed NOT LIKE 'moved|%'", array("order_by" => "tid", "order_dir" => "asc", "limit" => $tpp, "limit_start" => $start)); - - while($thread = $db->fetch_array($query)) - { - $recount_thread = get_thread($thread['tid']); - $count = array(); - - $query = $db->simple_select("posts", "COUNT(pid) AS replies", "tid='{$thread['tid']}' AND pid!='{$recount_thread['firstpost']}' AND visible='1'"); - $count['replies'] = $db->fetch_field($query, "replies"); - - // Unapproved posts - $query = $db->simple_select("posts", "COUNT(pid) AS unapprovedposts", "tid='{$thread['tid']}' AND pid != '{$recount_thread['firstpost']}' AND visible='0'"); - $count['unapprovedposts'] = $db->fetch_field($query, "unapprovedposts"); - - // Attachment count - $query = $db->query(" - SELECT COUNT(aid) AS attachment_count - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (a.pid=p.pid) - WHERE p.tid='{$thread['tid']}' AND a.visible=1 - "); - $count['attachmentcount'] = $db->fetch_field($query, "attachment_count"); - - $db->update_query("threads", $count, "tid='{$thread['tid']}'"); - update_thread_data($thread['tid']); - - if($thread['firstpost'] == 0) - { - update_first_post($thread['tid']); - } - } - echo "

    Done

    "; - if($end >= $num_threads) - { - echo "

    The rebuild process has completed successfully. Click next to continue with the upgrade."; - $output->print_footer("5_forumlastposts"); - } - else - { - echo "

    Click Next to continue with the build process.

    "; - echo ""; - echo ""; - $output->print_footer("5_lastposts"); - } - } -} - -function upgrade5_forumlastposts() -{ - global $db, $output; - $output->print_header("Rebuilding Forum Last Posts"); - echo "

    Rebuilding last post information for forums..

    "; - $query = $db->simple_select("forums", "fid"); - while($forum = $db->fetch_array($query)) - { - update_forum_lastpost($forum['fid']); - } - echo "

    Done"; - echo "

    Click next to continue with the upgrade process.

    "; - $output->print_footer("5_indexes"); -} - -function upgrade5_indexes() -{ - global $db, $output; - - $output->print_header("Indexing"); - echo "

    Checking and creating fulltext database indexes..

    "; - - - if($db->is_fulltext("threads", "subject")) - { - $db->drop_index("threads", "subject"); - } - if($db->is_fulltext("threads", "subject_2")) - { - $db->drop_index("threads", "subject_2"); - } - - if($db->supports_fulltext("threads")) - { - $db->create_fulltext_index("threads", "subject"); - } - if($db->supports_fulltext_boolean("posts")) - { - if(!$db->is_fulltext("posts", "message")) - { - $db->create_fulltext_index("posts", "message"); - } - } - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("5_done"); -} diff --git a/html/forums/install/resources/upgrade6.php b/html/forums/install/resources/upgrade6.php deleted file mode 100644 index 4364b82..0000000 --- a/html/forums/install/resources/upgrade6.php +++ /dev/null @@ -1,41 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0, - "requires_deactivated_plugins" => 0, -); - -@set_time_limit(0); - -function upgrade6_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - - $db->write_query("ALTER TABLE ".TABLE_PREFIX."mycode CHANGE regex regex text NOT NULL"); - $db->write_query("ALTER TABLE ".TABLE_PREFIX."mycode CHANGE replacement replacement text NOT NULL"); - - $contents = "Done

    "; - $contents .= "

    Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("6_done"); -} - diff --git a/html/forums/install/resources/upgrade7.php b/html/forums/install/resources/upgrade7.php deleted file mode 100644 index 04b0bb6..0000000 --- a/html/forums/install/resources/upgrade7.php +++ /dev/null @@ -1,26 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0, - "requires_deactivated_plugins" => 0, -); - -@set_time_limit(0); - -/* Nothing to do from 1.2.1 to 1.2.2 */ - diff --git a/html/forums/install/resources/upgrade8.php b/html/forums/install/resources/upgrade8.php deleted file mode 100644 index d1c66eb..0000000 --- a/html/forums/install/resources/upgrade8.php +++ /dev/null @@ -1,50 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0, - "requires_deactivated_plugins" => 0, -); - -@set_time_limit(0); - -function upgrade8_dbchanges() -{ - global $db, $output, $mybb; - - $output->print_header("Performing Queries"); - - echo "

    Performing necessary upgrade queries..

    "; - - if($db->field_exists('oldadditionalgroups', "banned")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned DROP oldadditionalgroups;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned ADD oldadditionalgroups TEXT NOT NULL AFTER oldgroup"); - - - if($db->field_exists('olddisplaygroup', "banned")) - { - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned DROP olddisplaygroup;"); - } - $db->write_query("ALTER TABLE ".TABLE_PREFIX."banned ADD olddisplaygroup int NOT NULL default '0' AFTER oldadditionalgroups"); - - $contents .= "Click next to continue with the upgrade process.

    "; - $output->print_contents($contents); - $output->print_footer("8_done"); -} - diff --git a/html/forums/install/resources/upgrade9.php b/html/forums/install/resources/upgrade9.php deleted file mode 100644 index 40bc0c6..0000000 --- a/html/forums/install/resources/upgrade9.php +++ /dev/null @@ -1,25 +0,0 @@ - 0, - "revert_all_themes" => 0, - "revert_all_settings" => 0 -); - -@set_time_limit(0); - -/* Nothing to do from 1.2.3 to 1.2.7 */ - diff --git a/html/forums/install/resources/usergroups.xml b/html/forums/install/resources/usergroups.xml deleted file mode 100644 index 4cb9553..0000000 --- a/html/forums/install/resources/usergroups.xml +++ /dev/null @@ -1,641 +0,0 @@ - - - - - - <![CDATA[Guests]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <![CDATA[Registered]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <![CDATA[Super Moderators]]> - - {username}]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <![CDATA[Administrators]]> - - {username}]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <![CDATA[Awaiting Activation]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <![CDATA[Moderators]]> - - {username}]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <![CDATA[Banned]]> - - {username}
    ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/html/forums/install/stylesheet.css b/html/forums/install/stylesheet.css deleted file mode 100644 index fff7f22..0000000 --- a/html/forums/install/stylesheet.css +++ /dev/null @@ -1,387 +0,0 @@ -/** - * MyBB Installer CSS - * (c) 2014 MyBB Group - */ - -body { - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - font-size: 12px; - background: #fff; - color: #333; - margin: 0; -} - -a { - color: #035488; - text-decoration: none; -} - -a:hover { - color: #444; - text-decoration: underline; -} - -#container { - margin: auto auto; - width: 880px; -} - -/* Logo */ -#logo h1 { - background: #fff url('images/logo.png') no-repeat 0 5px; - height: 82px; - margin: 0 0 2px 0; - padding: 3px; -} - -/* Header */ -#header { - clear: both; - background: #efefef; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; - padding: 12px; - font-size: 20px; - color: #444; - margin-bottom: 20px; -} - -/* Inner Container */ -#inner_container { - background: #fff; -} - -/* Progress Side bar */ -#progress { - width: 230px; - float: left; - margin: 0; - padding: 10px 0 0 5px; - padding-right: 0px; - font-size: 11px; - border-right: 1px solid #e7e7e7; -} -#progress ul { - list-style: none; - padding: 0 0 0 10px; - margin: 0; -} - -#progress li { - color: #888; - font-weight: normal; - margin: 4px 0 12px; - padding: 2px 0 1px 24px; - background-image: url("images/inactive.png"); - background-position: 0 0; - background-repeat: no-repeat; -} - -#progress li.active { - background-image: url("images/active.png"); - color: #333; - padding-top: 0; - font-size: 14px; - font-weight: bold; -} - -#progress li.intro { - background-position: 0 -20px; -} - -#progress li.license { - background-position: 0 -40px; -} - -#progress li.requirements_check { - background-position: 0 -60px; -} - -#progress li.database_info { - background-position: 0 -80px; -} - -#progress li.create_tables { - background-position: 0 -100px; -} - -#progress li.populate_tables { - background-position: 0 -120px; -} - -#progress li.templates { - background-position: 0 -140px; -} - -#progress li.configuration { - background-position: 0 -160px; -} - -#progress li.adminuser { - background-position: 0 -180px; -} - -#progress li.final { - background-position: 0 -200px; -} - -/* Content Area */ -#content { - margin-left: 235px; - width: 580px; - padding: 10px 20px 0 30px; - border-left: 1px solid #e7e7e7; -} - -* html #content { - width: 580px; -} - -/* Heading Styles */ -h2 { - margin: 0; - font-size: 20px; - padding-bottom: 5px; - border-bottom: 1px dotted #ccc; -} - -h3 { - font-size: 14px; - margin: 5px 0; -} - -h4 { - font-size: 12px; - margin: 5px 0; -} - -/* License Agreement */ -.license_agreement { - margin: 10px auto; - padding: 10px; - overflow: scroll; - height: 400px; - width: 560px; - border: 1px solid #ccc; -} - -.license_agreement ul { - padding: 0; - margin: 15px; -} - -/* Next Button */ -#next_button, .next_button { - text-align: right; - width: auto; -} - -/* Footer */ -#footer { - clear: both; - background: #f5f5f5; - margin-top: 20px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - padding: 8px; - font-size: 11px; - text-align: right; - vertical-align: middle; - color: #666; - margin-bottom: 20px; -} - -/* Tables */ -.border_wrapper { - margin: 0; - padding: 1px; - margin-top: 14px; - border-top: 0; - border: 1px solid #ccc; - border-radius: 6px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; -} - -.border_wrapper div.title { - background: #0066a2 url(images/thead.png) top left repeat-x; - color: #fff; - border-bottom: 1px solid #263c30; - padding: 8px; - font-weight: bold; - text-align: left; - font-size: 120%; - border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; -} - -.border_wrapper div.title a { - color: #fff; - text-decoration: none; -} - -table.general { - background: #ccc; - width: 100%; -} - -table.general td { - border-top: 1px solid #fafafa; - border-bottom: 1px solid #ccc; - border-right: 1px solid #ccc; - border-left: 1px solid #fafafa; -} - -table.general tr td:last-child { - border-right: 0; -} - -table.general tr td:first-child { - border-left: 0; -} - -table.general tr:last-child td { - border-bottom: 0; -} - -table.bottom_cell_border td { - border-right: 0; - border-left: 0; -} - -table.general tr.last td { - border-bottom: 0; -} - -table.bottom_cell_border td { - border-right: 0; - border-left: 0; -} - -table.general td { - background: #f5f5f5; - padding: 6px; - vertical-align: top; -} - -table.general th { - background: #0f0f0f url(images/tcat.png) repeat-x; - color: #fff; - border-top: 1px solid #444; - border-bottom: 1px solid #000; - padding: 8px; - font-size: 96%; - font-weight: bold; - text-align: left; -} - -table.general th a, table.general th { - color: #fff; - text-decoration: none; -} - -table .alt_row td { - background: #f1f1f1; -} - -/* Forms */ -input.text_input { - border: 1px solid #aaa; - width: 300px; - padding: 4px; - font-size: 13px; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - outline: 0; -} - -select { - border: 1px solid #aaa; - padding: 4px; - font-size: 12px; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - outline: 0; -} - -input.text_input:focus, select:focus { - border: 1px solid #777; -} - -input.submit_button { - border: 1px solid #999; - padding: 4px 7px; - background: #e3e3e3 url(images/submit_bg.png) repeat-x top; - color: #444; - font-weight: bold; - font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; - margin-right: 3px; - font-size: 1.1em; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - margin-top: 4px; - margin-right: 3px; -} - -input.submit_button:hover { - border: 1px solid #666; - cursor: pointer; -} - -label { - font-weight: bold; -} - -.field_description, small { - color: #444; - font-size: 11px; -} - -/* Misc */ -.invisible { - display: none; -} - -.pass { - color: green; -} - -.fail { - color: red; -} - -.error { - background: #FFF6BF; - border: 1px solid #FFD324; - margin: 10px auto; - padding: 5px 10px 10px 10px; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.error p { - margin-bottom: 0; -} - -.success { - background: #D6ECA6; - border: 1px solid #8DC93E; - text-align: center; - margin: 10px auto; - padding: 10px; - font-weight: bold; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.upgrade_note { - background: #efefef; -} \ No newline at end of file diff --git a/html/forums/install/upgrade.php b/html/forums/install/upgrade.php deleted file mode 100644 index c0e3915..0000000 --- a/html/forums/install/upgrade.php +++ /dev/null @@ -1,1142 +0,0 @@ - $config['dbtype'], - "database" => $config['database'], - "table_prefix" => $config['table_prefix'], - "hostname" => $config['hostname'], - "username" => $config['username'], - "password" => $config['password'], - "encoding" => $config['db_encoding'], - ); -} -$mybb->config = &$config; - -// Include the files necessary for installation -require_once MYBB_ROOT."inc/class_timers.php"; -require_once MYBB_ROOT."inc/class_xml.php"; -require_once MYBB_ROOT.'inc/class_language.php'; - -$lang = new MyLanguage(); -$lang->set_path(MYBB_ROOT.'install/resources/'); -$lang->load('language'); - -// If we're upgrading from an SQLite installation, make sure we still work. -if($config['database']['type'] == 'sqlite3' || $config['database']['type'] == 'sqlite2') -{ - $config['database']['type'] = 'sqlite'; -} - -// Load DB interface -require_once MYBB_ROOT."inc/db_base.php"; - -require_once MYBB_ROOT."inc/db_{$config['database']['type']}.php"; -switch($config['database']['type']) -{ - case "sqlite": - $db = new DB_SQLite; - break; - case "pgsql": - $db = new DB_PgSQL; - break; - case "mysqli": - $db = new DB_MySQLi; - break; - default: - $db = new DB_MySQL; -} - -// Connect to Database -define('TABLE_PREFIX', $config['database']['table_prefix']); -$db->connect($config['database']); -$db->set_table_prefix(TABLE_PREFIX); -$db->type = $config['database']['type']; - -// Load Settings -if(file_exists(MYBB_ROOT."inc/settings.php")) -{ - require_once MYBB_ROOT."inc/settings.php"; -} - -if(!file_exists(MYBB_ROOT."inc/settings.php") || !$settings) -{ - if(function_exists('rebuild_settings')) - { - rebuild_settings(); - } - else - { - $options = array( - "order_by" => "title", - "order_dir" => "ASC" - ); - - $query = $db->simple_select("settings", "value, name", "", $options); - - $settings = array(); - while($setting = $db->fetch_array($query)) - { - $setting['value'] = str_replace("\"", "\\\"", $setting['value']); - $settings[$setting['name']] = $setting['value']; - } - } -} - -$settings['wolcutoff'] = $settings['wolcutoffmins']*60; -$settings['bbname_orig'] = $settings['bbname']; -$settings['bbname'] = strip_tags($settings['bbname']); - -// Fix for people who for some specify a trailing slash on the board URL -if(substr($settings['bburl'], -1) == "/") -{ - $settings['bburl'] = my_substr($settings['bburl'], 0, -1); -} - -$mybb->settings = &$settings; -$mybb->parse_cookies(); - -require_once MYBB_ROOT."inc/class_datacache.php"; -$cache = new datacache; - -// Load cache -$cache->cache(); - -$mybb->cache = &$cache; - -require_once MYBB_ROOT."inc/class_session.php"; -$session = new session; -$session->init(); -$mybb->session = &$session; - -// Include the necessary contants for installation -$grouppermignore = array("gid", "type", "title", "description", "namestyle", "usertitle", "stars", "starimage", "image"); -$groupzerogreater = array("pmquota", "maxpmrecipients", "maxreputationsday", "attachquota", "maxemails", "maxwarningsday", "maxposts", "edittimelimit", "canusesigxposts", "maxreputationsperuser", "maxreputationsperthread", "emailfloodtime"); -$displaygroupfields = array("title", "description", "namestyle", "usertitle", "stars", "starimage", "image"); -$fpermfields = array('canview', 'canviewthreads', 'candlattachments', 'canpostthreads', 'canpostreplys', 'canpostattachments', 'canratethreads', 'caneditposts', 'candeleteposts', 'candeletethreads', 'caneditattachments', 'canpostpolls', 'canvotepolls', 'cansearch', 'modposts', 'modthreads', 'modattachments', 'mod_edit_posts'); - -// Include the installation resources -require_once INSTALL_ROOT."resources/output.php"; -$output = new installerOutput; -$output->script = "upgrade.php"; -$output->title = "MyBB Upgrade Wizard"; - -if(file_exists("lock")) -{ - $output->print_error($lang->locked); -} -else -{ - $mybb->input['action'] = $mybb->get_input('action'); - if($mybb->input['action'] == "logout" && $mybb->user['uid']) - { - // Check session ID if we have one - if($mybb->get_input('logoutkey') !== $mybb->user['logoutkey']) - { - $output->print_error("Your user ID could not be verified to log you out. This may have been because a malicious Javascript was attempting to log you out automatically. If you intended to log out, please click the Log Out button at the top menu."); - } - - my_unsetcookie("mybbuser"); - - if($mybb->user['uid']) - { - $time = TIME_NOW; - $lastvisit = array( - "lastactive" => $time-900, - "lastvisit" => $time, - ); - $db->update_query("users", $lastvisit, "uid='".$mybb->user['uid']."'"); - } - header("Location: upgrade.php"); - } - else if($mybb->input['action'] == "do_login" && $mybb->request_method == "post") - { - require_once MYBB_ROOT."inc/functions_user.php"; - - if(!username_exists($mybb->get_input('username'))) - { - $output->print_error("The username you have entered appears to be invalid."); - } - $options = array( - 'fields' => array('username', 'password', 'salt', 'loginkey') - ); - $user = get_user_by_username($mybb->get_input('username'), $options); - - if(!$user['uid']) - { - $output->print_error("The username you have entered appears to be invalid."); - } - else - { - $user = validate_password_from_uid($user['uid'], $mybb->get_input('password'), $user); - if(!$user['uid']) - { - $output->print_error("The password you entered is incorrect. If you have forgotten your password, click here. Otherwise, go back and try again."); - } - } - - my_setcookie("mybbuser", $user['uid']."_".$user['loginkey'], null, true); - - header("Location: ./upgrade.php"); - } - - $output->steps = array($lang->upgrade); - - if($mybb->user['uid'] == 0) - { - $output->print_header($lang->please_login, "errormsg", 0, 1); - - $output->print_contents('

    '.$lang->login_desc.'

    -
    -
    - - - - - - - - - - - - - - - - -
    '.$lang->login.'
    '.$lang->login_username.':
    '.$lang->login_password.':
    '.$lang->login_password_desc.'
    -
    -
    - - -
    -
    '); - $output->print_footer(""); - - exit; - } - else if($mybb->usergroup['cancp'] != 1 && $mybb->usergroup['cancp'] != 'yes') - { - $output->print_error($lang->sprintf($lang->no_permision, $mybb->user['logoutkey'])); - } - - if(!$mybb->input['action'] || $mybb->input['action'] == "intro") - { - $output->print_header(); - - if($db->table_exists("upgrade_data")) - { - $db->drop_table("upgrade_data"); - } - $db->write_query("CREATE TABLE ".TABLE_PREFIX."upgrade_data ( - title varchar(30) NOT NULL, - contents text NOT NULL, - UNIQUE (title) - );"); - - $dh = opendir(INSTALL_ROOT."resources"); - - $upgradescripts = array(); - while(($file = readdir($dh)) !== false) - { - if(preg_match("#upgrade([0-9]+).php$#i", $file, $match)) - { - $upgradescripts[$match[1]] = $file; - $key_order[] = $match[1]; - } - } - closedir($dh); - natsort($key_order); - $key_order = array_reverse($key_order); - - // Figure out which version we last updated from (as of 1.6) - $version_history = $cache->read("version_history"); - - // If array is empty then we must be upgrading to 1.6 since that's when this feature was added - if(empty($version_history)) - { - $next_update_version = 17; // 16+1 - } - else - { - $next_update_version = (int)(end($version_history)+1); - } - - $vers = ''; - foreach($key_order as $k => $key) - { - $file = $upgradescripts[$key]; - $upgradescript = file_get_contents(INSTALL_ROOT."resources/$file"); - preg_match("#Upgrade Script:(.*)#i", $upgradescript, $verinfo); - preg_match("#upgrade([0-9]+).php$#i", $file, $keynum); - if(trim($verinfo[1])) - { - if($keynum[1] == $next_update_version) - { - $vers .= "\n"; - } - else - { - $vers .= "\n"; - } - } - } - unset($upgradescripts); - unset($upgradescript); - - $output->print_contents($lang->sprintf($lang->upgrade_welcome, $mybb->version)."

    ".$lang->upgrade_send_stats); - $output->print_footer("doupgrade"); - } - elseif($mybb->input['action'] == "doupgrade") - { - add_upgrade_store("allow_anonymous_info", $mybb->get_input('allow_anonymous_info', MyBB::INPUT_INT)); - require_once INSTALL_ROOT."resources/upgrade".$mybb->get_input('from', MyBB::INPUT_INT).".php"; - if($db->table_exists("datacache") && $upgrade_detail['requires_deactivated_plugins'] == 1 && $mybb->get_input('donewarning') != "true") - { - $plugins = $cache->read('plugins', true); - if(!empty($plugins['active'])) - { - $output->print_header(); - $lang->plugin_warning = "get_input('from', MyBB::INPUT_INT)."\" />\n\n

    Warning:

    There are still ".count($plugins['active'])." plugin(s) active. Active plugins can sometimes cause problems during an upgrade procedure or may break your forum afterward. It is strongly reccommended that you deactivate your plugins before continuing.


    "; - $output->print_contents($lang->sprintf($lang->plugin_warning, $mybb->version)); - $output->print_footer("doupgrade"); - } - else - { - add_upgrade_store("startscript", $mybb->get_input('from', MyBB::INPUT_INT)); - $runfunction = next_function($mybb->get_input('from', MyBB::INPUT_INT)); - } - } - else - { - add_upgrade_store("startscript", $mybb->get_input('from', MyBB::INPUT_INT)); - $runfunction = next_function($mybb->get_input('from', MyBB::INPUT_INT)); - } - } - $currentscript = get_upgrade_store("currentscript"); - $system_upgrade_detail = get_upgrade_store("upgradedetail"); - - if($mybb->input['action'] == "templates") - { - $runfunction = "upgradethemes"; - } - elseif($mybb->input['action'] == "rebuildsettings") - { - $runfunction = "buildsettings"; - } - elseif($mybb->input['action'] == "buildcaches") - { - $runfunction = "buildcaches"; - } - elseif($mybb->input['action'] == "finished") - { - $runfunction = "upgradedone"; - } - else // Busy running modules, come back later - { - $bits = explode("_", $mybb->input['action'], 2); - if($bits[1]) // We're still running a module - { - $from = $bits[0]; - $runfunction = next_function($bits[0], $bits[1]); - - } - } - - // Fetch current script we're in - if(function_exists($runfunction)) - { - $runfunction(); - } -} - -/** - * Do the upgrade changes - */ -function upgradethemes() -{ - global $output, $db, $system_upgrade_detail, $lang, $mybb; - - $output->print_header($lang->upgrade_templates_reverted); - - $charset = $db->build_create_table_collation(); - - if($system_upgrade_detail['revert_all_templates'] > 0) - { - $db->drop_table("templates"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."templates ( - tid int unsigned NOT NULL auto_increment, - title varchar(120) NOT NULL default '', - template text NOT NULL, - sid int(10) NOT NULL default '0', - version varchar(20) NOT NULL default '0', - status varchar(10) NOT NULL default '', - dateline int(10) NOT NULL default '0', - PRIMARY KEY (tid) - ) ENGINE=MyISAM{$charset};"); - } - - if($system_upgrade_detail['revert_all_themes'] > 0) - { - $db->drop_table("themes"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."themes ( - tid smallint unsigned NOT NULL auto_increment, - name varchar(100) NOT NULL default '', - pid smallint unsigned NOT NULL default '0', - def smallint(1) NOT NULL default '0', - properties text NOT NULL, - stylesheets text NOT NULL, - allowedgroups text NOT NULL, - PRIMARY KEY (tid) - ) ENGINE=MyISAM{$charset};"); - - $db->drop_table("themestylesheets"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."themestylesheets( - sid int unsigned NOT NULL auto_increment, - name varchar(30) NOT NULL default '', - tid int unsigned NOT NULL default '0', - attachedto text NOT NULL, - stylesheet text NOT NULL, - cachefile varchar(100) NOT NULL default '', - lastmodified bigint(30) NOT NULL default '0', - PRIMARY KEY(sid) - ) ENGINE=MyISAM{$charset};"); - - $contents = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme.xml'); - if(file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php"; - } - else if(file_exists(MYBB_ROOT."admin/inc/functions_themes.php")) - { - require_once MYBB_ROOT."admin/inc/functions_themes.php"; - } - else - { - $output->print_error("Please make sure your admin directory is uploaded correctly."); - } - import_theme_xml($contents, array("templateset" => -2, "no_templates" => 1, "version_compat" => 1)); - $tid = build_new_theme("Default", null, 1); - - $db->update_query("themes", array("def" => 1), "tid='{$tid}'"); - $db->update_query("users", array('style' => $tid)); - $db->update_query("forums", array('style' => 0)); - - $db->drop_table("templatesets"); - $db->write_query("CREATE TABLE ".TABLE_PREFIX."templatesets ( - sid smallint unsigned NOT NULL auto_increment, - title varchar(120) NOT NULL default '', - PRIMARY KEY (sid) - ) ENGINE=MyISAM{$charset};"); - - $db->insert_query("templatesets", array('title' => 'Default Templates')); - } - else - { - // Re-import master - $contents = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme.xml'); - if(file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php")) - { - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions_themes.php"; - } - elseif(file_exists(MYBB_ROOT."admin/inc/functions_themes.php")) - { - require_once MYBB_ROOT."admin/inc/functions.php"; - require_once MYBB_ROOT."admin/inc/functions_themes.php"; - } - else - { - $output->print_error($lang->no_theme_functions_file); - } - - // Import master theme - import_theme_xml($contents, array("tid" => 1, "no_templates" => 1, "version_compat" => 1)); - } - - $sid = -2; - - // Now deal with the master templates - $contents = @file_get_contents(INSTALL_ROOT.'resources/mybb_theme.xml'); - $parser = new XMLParser($contents); - $tree = $parser->get_tree(); - - $theme = $tree['theme']; - - if(is_array($theme['templates'])) - { - $templates = $theme['templates']['template']; - foreach($templates as $template) - { - $templatename = $db->escape_string($template['attributes']['name']); - $templateversion = (int)$template['attributes']['version']; - $templatevalue = $db->escape_string($template['value']); - $time = TIME_NOW; - $query = $db->simple_select("templates", "tid", "sid='-2' AND title='".$db->escape_string($templatename)."'"); - $oldtemp = $db->fetch_array($query); - if($oldtemp['tid']) - { - $update_array = array( - 'template' => $templatevalue, - 'version' => $templateversion, - 'dateline' => $time - ); - $db->update_query("templates", $update_array, "title='".$db->escape_string($templatename)."' AND sid='-2'"); - } - else - { - $insert_array = array( - 'title' => $templatename, - 'template' => $templatevalue, - 'sid' => $sid, - 'version' => $templateversion, - 'dateline' => $time - ); - - $db->insert_query("templates", $insert_array); - ++$newcount; - } - } - } - - $output->print_contents($lang->upgrade_templates_reverted_success); - $output->print_footer("rebuildsettings"); -} - -/** - * Update the settings - */ -function buildsettings() -{ - global $db, $output, $system_upgrade_detail, $lang; - - if(!is_writable(MYBB_ROOT."inc/settings.php")) - { - $output->print_header("Rebuilding Settings"); - echo "

    Error: Unable to open inc/settings.php

    Before the upgrade process can continue, you need to changes the permissions of inc/settings.php so it is writable.

    "; - $output->print_footer("rebuildsettings"); - exit; - } - $synccount = sync_settings($system_upgrade_detail['revert_all_settings']); - - $output->print_header($lang->upgrade_settings_sync); - $output->print_contents($lang->sprintf($lang->upgrade_settings_sync_success, $synccount[1], $synccount[0])); - $output->print_footer("buildcaches"); -} - -/** - * Rebuild caches - */ -function buildcaches() -{ - global $db, $output, $cache, $lang, $mybb; - - $output->print_header($lang->upgrade_datacache_building); - - $contents .= $lang->upgrade_building_datacache; - - $cache->update_version(); - $cache->update_attachtypes(); - $cache->update_smilies(); - $cache->update_badwords(); - $cache->update_usergroups(); - $cache->update_forumpermissions(); - $cache->update_stats(); - $cache->update_statistics(); - $cache->update_moderators(); - $cache->update_forums(); - $cache->update_usertitles(); - $cache->update_reportedcontent(); - $cache->update_awaitingactivation(); - $cache->update_mycode(); - $cache->update_profilefields(); - $cache->update_posticons(); - $cache->update_update_check(); - $cache->update_tasks(); - $cache->update_spiders(); - $cache->update_bannedips(); - $cache->update_banned(); - $cache->update_birthdays(); - $cache->update_most_replied_threads(); - $cache->update_most_viewed_threads(); - $cache->update_groupleaders(); - $cache->update_threadprefixes(); - $cache->update_forumsdisplay(); - $cache->update_reportreasons(true); - - $contents .= $lang->done."

    "; - - $output->print_contents("$contents

    ".$lang->upgrade_continue."

    "); - $output->print_footer("finished"); -} - -/** - * Called as latest function. Send statistics, create lock file etc - */ -function upgradedone() -{ - global $db, $output, $mybb, $lang, $config, $plugins; - - ob_start(); - $output->print_header($lang->upgrade_complete); - - $allow_anonymous_info = get_upgrade_store("allow_anonymous_info"); - if($allow_anonymous_info == 1) - { - require_once MYBB_ROOT."inc/functions_serverstats.php"; - $build_server_stats = build_server_stats(0, '', $mybb->version_code, $mybb->config['database']['encoding']); - - if($build_server_stats['info_sent_success'] == false) - { - echo $build_server_stats['info_image']; - } - } - ob_end_flush(); - - // Attempt to run an update check - require_once MYBB_ROOT.'inc/functions_task.php'; - $query = $db->simple_select('tasks', 'tid', "file='versioncheck'"); - $update_check = $db->fetch_array($query); - if($update_check) - { - // Load plugin system for update check - require_once MYBB_ROOT."inc/class_plugins.php"; - $plugins = new pluginSystem; - - run_task($update_check['tid']); - } - - if(is_writable("./")) - { - $lock = @fopen("./lock", "w"); - $written = @fwrite($lock, "1"); - @fclose($lock); - if($written) - { - $lock_note = $lang->sprintf($lang->upgrade_locked, $config['admin_dir']); - } - } - if(!$written) - { - $lock_note = "

    ".$lang->upgrade_removedir."

    "; - } - - // Rebuild inc/settings.php at the end of the upgrade - if(function_exists('rebuild_settings')) - { - rebuild_settings(); - } - else - { - $options = array( - "order_by" => "title", - "order_dir" => "ASC" - ); - - $query = $db->simple_select("settings", "value, name", "", $options); - while($setting = $db->fetch_array($query)) - { - $setting['value'] = str_replace("\"", "\\\"", $setting['value']); - $settings[$setting['name']] = $setting['value']; - } - } - - $output->print_contents($lang->sprintf($lang->upgrade_congrats, $mybb->version, $lock_note)); - $output->print_footer(); -} - -/** - * Show the finish page - */ -function whatsnext() -{ - global $output, $db, $system_upgrade_detail, $lang; - - if($system_upgrade_detail['revert_all_templates'] > 0) - { - $output->print_header($lang->upgrade_template_reversion); - $output->print_contents($lang->upgrade_template_reversion_success); - $output->print_footer("templates"); - } - else - { - upgradethemes(); - } -} - -/** - * Determine the next function we need to call - * - * @param int $from - * @param string $func - * - * @return string - */ -function next_function($from, $func="dbchanges") -{ - global $oldvers, $system_upgrade_detail, $currentscript, $cache; - - load_module("upgrade".$from.".php"); - if(function_exists("upgrade".$from."_".$func)) - { - $function = "upgrade".$from."_".$func; - } - else - { - // We're done with our last upgrade script, so add it to the upgrade scripts we've already completed. - $version_history = $cache->read("version_history"); - $version_history[$from] = $from; - $cache->update("version_history", $version_history); - - $from = $from+1; - if(file_exists(INSTALL_ROOT."resources/upgrade".$from.".php")) - { - $function = next_function($from); - } - } - - if(!$function) - { - $function = "whatsnext"; - } - return $function; -} - -/** - * @param string $module - */ -function load_module($module) -{ - global $system_upgrade_detail, $currentscript, $upgrade_detail; - - require_once INSTALL_ROOT."resources/".$module; - if($currentscript != $module) - { - foreach($upgrade_detail as $key => $val) - { - if(!$system_upgrade_detail[$key] || $val > $system_upgrade_detail[$key]) - { - $system_upgrade_detail[$key] = $val; - } - } - add_upgrade_store("upgradedetail", $system_upgrade_detail); - add_upgrade_store("currentscript", $module); - } -} - -/** - * Get a value from our upgrade data cache - * - * @param string $title - * - * @return mixed - */ -function get_upgrade_store($title) -{ - global $db; - - $query = $db->simple_select("upgrade_data", "*", "title='".$db->escape_string($title)."'"); - $data = $db->fetch_array($query); - return my_unserialize($data['contents']); -} - -/** - * @param string $title - * @param mixed $contents - */ -function add_upgrade_store($title, $contents) -{ - global $db; - - $replace_array = array( - "title" => $db->escape_string($title), - "contents" => $db->escape_string(my_serialize($contents)) - ); - $db->replace_query("upgrade_data", $replace_array, "title"); -} - -/** - * @param int $redo 2 means that all setting tables will be dropped and recreated - * - * @return array - */ -function sync_settings($redo=0) -{ - global $db; - - $settingcount = $groupcount = 0; - $settings = $settinggroups = array(); - if($redo == 2) - { - $db->drop_table("settinggroups"); - switch($db->type) - { - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settinggroups ( - gid serial, - name varchar(100) NOT NULL default '', - title varchar(220) NOT NULL default '', - description text NOT NULL default '', - disporder smallint NOT NULL default '0', - isdefault int NOT NULL default '0', - PRIMARY KEY (gid) - );"); - break; - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settinggroups ( - gid INTEGER PRIMARY KEY, - name varchar(100) NOT NULL default '', - title varchar(220) NOT NULL default '', - description TEXT NOT NULL, - disporder smallint NOT NULL default '0', - isdefault int(1) NOT NULL default '0' - );"); - break; - case "mysql": - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settinggroups ( - gid smallint unsigned NOT NULL auto_increment, - name varchar(100) NOT NULL default '', - title varchar(220) NOT NULL default '', - description text NOT NULL, - disporder smallint unsigned NOT NULL default '0', - isdefault int(1) NOT NULL default '0', - PRIMARY KEY (gid) - ) ENGINE=MyISAM;"); - } - - $db->drop_table("settings"); - - switch($db->type) - { - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settings ( - sid serial, - name varchar(120) NOT NULL default '', - title varchar(120) NOT NULL default '', - description text NOT NULL default '', - optionscode text NOT NULL default '', - value text NOT NULL default '', - disporder smallint NOT NULL default '0', - gid smallint NOT NULL default '0', - isdefault int NOT NULL default '0', - PRIMARY KEY (sid) - );"); - break; - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settings ( - sid INTEGER PRIMARY KEY, - name varchar(120) NOT NULL default '', - title varchar(120) NOT NULL default '', - description TEXT NOT NULL, - optionscode TEXT NOT NULL, - value TEXT NOT NULL, - disporder smallint NOT NULL default '0', - gid smallint NOT NULL default '0', - isdefault int(1) NOT NULL default '0' - );"); - break; - case "mysql": - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."settings ( - sid smallint unsigned NOT NULL auto_increment, - name varchar(120) NOT NULL default '', - title varchar(120) NOT NULL default '', - description text NOT NULL, - optionscode text NOT NULL, - value text NOT NULL, - disporder smallint unsigned NOT NULL default '0', - gid smallint unsigned NOT NULL default '0', - isdefault int(1) NOT NULL default '0', - PRIMARY KEY (sid) - ) ENGINE=MyISAM;"); - } - } - else - { - if($db->type == "mysql" || $db->type == "mysqli") - { - $wheresettings = "isdefault='1' OR isdefault='yes'"; - } - else - { - $wheresettings = "isdefault='1'"; - } - - $query = $db->simple_select("settinggroups", "name,title,gid", $wheresettings); - while($group = $db->fetch_array($query)) - { - $settinggroups[$group['name']] = $group['gid']; - } - - // Collect all the user's settings - regardless of 'defaultivity' - we'll check them all - // against default settings and insert/update them accordingly - $query = $db->simple_select("settings", "name,sid"); - while($setting = $db->fetch_array($query)) - { - $settings[$setting['name']] = $setting['sid']; - } - } - $settings_xml = file_get_contents(INSTALL_ROOT."resources/settings.xml"); - $parser = new XMLParser($settings_xml); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - $settinggroupnames = array(); - $settingnames = array(); - - foreach($tree['settings'][0]['settinggroup'] as $settinggroup) - { - $settinggroupnames[] = $settinggroup['attributes']['name']; - - $groupdata = array( - "name" => $db->escape_string($settinggroup['attributes']['name']), - "title" => $db->escape_string($settinggroup['attributes']['title']), - "description" => $db->escape_string($settinggroup['attributes']['description']), - "disporder" => (int)$settinggroup['attributes']['disporder'], - "isdefault" => $settinggroup['attributes']['isdefault'] - ); - if(!$settinggroups[$settinggroup['attributes']['name']] || $redo == 2) - { - $gid = $db->insert_query("settinggroups", $groupdata); - ++$groupcount; - } - else - { - $gid = $settinggroups[$settinggroup['attributes']['name']]; - $db->update_query("settinggroups", $groupdata, "gid='{$gid}'"); - } - - if(!$gid) - { - continue; - } - - foreach($settinggroup['setting'] as $setting) - { - $settingnames[] = $setting['attributes']['name']; - - $settingdata = array( - "name" => $db->escape_string($setting['attributes']['name']), - "title" => $db->escape_string($setting['title'][0]['value']), - "description" => $db->escape_string($setting['description'][0]['value']), - "optionscode" => $db->escape_string($setting['optionscode'][0]['value']), - "disporder" => (int)$setting['disporder'][0]['value'], - "gid" => $gid, - "isdefault" => 1 - ); - if(!$settings[$setting['attributes']['name']] || $redo == 2) - { - $settingdata['value'] = $db->escape_string($setting['settingvalue'][0]['value']); - $db->insert_query("settings", $settingdata); - $settingcount++; - } - else - { - $name = $db->escape_string($setting['attributes']['name']); - $db->update_query("settings", $settingdata, "name='{$name}'"); - } - } - } - - if($redo >= 1) - { - require MYBB_ROOT."inc/settings.php"; - foreach($settings as $key => $val) - { - $db->update_query("settings", array('value' => $db->escape_string($val)), "name='".$db->escape_string($key)."'"); - } - } - unset($settings); - $query = $db->simple_select("settings", "*", "", array('order_by' => 'title')); - while($setting = $db->fetch_array($query)) - { - $setting['value'] = str_replace("\"", "\\\"", $setting['value']); - $settings .= "\$settings['{$setting['name']}'] = \"".$setting['value']."\";\n"; - } - $settings = "drop_table("tasks"); - switch($db->type) - { - case "pgsql": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."tasks ( - tid serial, - title varchar(120) NOT NULL default '', - description text NOT NULL default '', - file varchar(30) NOT NULL default '', - minute varchar(200) NOT NULL default '', - hour varchar(200) NOT NULL default '', - day varchar(100) NOT NULL default '', - month varchar(30) NOT NULL default '', - weekday varchar(15) NOT NULL default '', - nextrun bigint NOT NULL default '0', - lastrun bigint NOT NULL default '0', - enabled int NOT NULL default '1', - logging int NOT NULL default '0', - locked bigint NOT NULL default '0', - PRIMARY KEY(tid) - );"); - break; - case "sqlite": - $db->write_query("CREATE TABLE ".TABLE_PREFIX."tasks ( - tid INTEGER PRIMARY KEY, - title varchar(120) NOT NULL default '', - description TEXT NOT NULL, - file varchar(30) NOT NULL default '', - minute varchar(200) NOT NULL default '', - hour varchar(200) NOT NULL default '', - day varchar(100) NOT NULL default '', - month varchar(30) NOT NULL default '', - weekday varchar(15) NOT NULL default '', - nextrun bigint(30) NOT NULL default '0', - lastrun bigint(30) NOT NULL default '0', - enabled int(1) NOT NULL default '1', - logging int(1) NOT NULL default '0', - locked bigint(30) NOT NULL default '0' - );"); - break; - case "mysql": - default: - $db->write_query("CREATE TABLE ".TABLE_PREFIX."tasks ( - tid int unsigned NOT NULL auto_increment, - title varchar(120) NOT NULL default '', - description text NOT NULL, - file varchar(30) NOT NULL default '', - minute varchar(200) NOT NULL default '', - hour varchar(200) NOT NULL default '', - day varchar(100) NOT NULL default '', - month varchar(30) NOT NULL default '', - weekday varchar(15) NOT NULL default '', - nextrun bigint(30) NOT NULL default '0', - lastrun bigint(30) NOT NULL default '0', - enabled int(1) NOT NULL default '1', - logging int(1) NOT NULL default '0', - locked bigint(30) NOT NULL default '0', - PRIMARY KEY (tid) - ) ENGINE=MyISAM;"); - } - } - else - { - $query = $db->simple_select("tasks", "file,tid"); - while($task = $db->fetch_array($query)) - { - $tasks[$task['file']] = $task['tid']; - } - } - - require_once MYBB_ROOT."inc/functions_task.php"; - $task_file = file_get_contents(INSTALL_ROOT.'resources/tasks.xml'); - $parser = new XMLParser($task_file); - $parser->collapse_dups = 0; - $tree = $parser->get_tree(); - - // Resync tasks - foreach($tree['tasks'][0]['task'] as $task) - { - if(!$tasks[$task['file'][0]['value']] || $redo == 2) - { - $new_task = array( - 'title' => $db->escape_string($task['title'][0]['value']), - 'description' => $db->escape_string($task['description'][0]['value']), - 'file' => $db->escape_string($task['file'][0]['value']), - 'minute' => $db->escape_string($task['minute'][0]['value']), - 'hour' => $db->escape_string($task['hour'][0]['value']), - 'day' => $db->escape_string($task['day'][0]['value']), - 'weekday' => $db->escape_string($task['weekday'][0]['value']), - 'month' => $db->escape_string($task['month'][0]['value']), - 'enabled' => $db->escape_string($task['enabled'][0]['value']), - 'logging' => $db->escape_string($task['logging'][0]['value']) - ); - - $new_task['nextrun'] = fetch_next_run($new_task); - - $db->insert_query("tasks", $new_task); - $taskcount++; - } - else - { - $update_task = array( - 'title' => $db->escape_string($task['title'][0]['value']), - 'description' => $db->escape_string($task['description'][0]['value']), - 'file' => $db->escape_string($task['file'][0]['value']), - ); - - $db->update_query("tasks", $update_task, "file='".$db->escape_string($task['file'][0]['value'])."'"); - } - } - - return $taskcount; -} - -/** - * Write our settings to the settings file - */ -function write_settings() -{ - global $db; - $query = $db->simple_select("settings", "*", "", array('order_by' => 'title')); - while($setting = $db->fetch_array($query)) - { - $setting['value'] = $db->escape_string($setting['value']); - $settings .= "\$settings['{$setting['name']}'] = \"{$setting['value']}\";\n"; - } - if(!empty($settings)) - { - $settings = "' + - '.sceditor-dropdown { text-align: ' + ($('body').css('direction') === 'rtl' ? 'right' :'left') + '; }' + - '').appendTo('body'); - - - - /******************************************** - * Update editor to use align= as alignment * - ********************************************/ - $.sceditor.plugins.bbcode.bbcode - .set('align', { - html: function(element, attrs, content) { - return '
    ' + content + '
    '; - }, - isInline: false - }) - .set('center', { format: '[align=center]{0}[/align]' }) - .set('left', { format: '[align=left]{0}[/align]' }) - .set('right', { format: '[align=right]{0}[/align]' }) - .set('justify', { format: '[align=justify]{0}[/align]' }); - - $.sceditor.command - .set('center', { txtExec: ['[align=center]', '[/align]'] }) - .set('left', { txtExec: ['[align=left]', '[/align]'] }) - .set('right', { txtExec: ['[align=right]', '[/align]'] }) - .set('justify', { txtExec: ['[align=justify]', '[/align]'] }); - - - - /************************************************ - * Update font to support MyBB's BBCode dialect * - ************************************************/ - $.sceditor.plugins.bbcode.bbcode - .set('list', { - html: function(element, attrs, content) { - var type = (attrs.defaultattr === '1' ? 'ol' : 'ul'); - - if(attrs.defaultattr === 'a') - type = 'ol type="a"'; - - return '<' + type + '>' + content + ''; - }, - - breakAfter: false - }) - .set('ul', { format: '[list]{0}[/list]' }) - .set('ol', { - format: function($elm, content) { - var type = ($elm.attr('type') === 'a' ? 'a' : '1'); - - return '[list=' + type + ']' + content + '[/list]'; - } - }) - .set('li', { format: '[*]{0}', excludeClosing: true }) - .set('*', { excludeClosing: true, isInline: true }); - - $.sceditor.command - .set('bulletlist', { txtExec: ['[list]\n[*]', '\n[/list]'] }) - .set('orderedlist', { txtExec: ['[list=1]\n[*]', '\n[/list]'] }); - - - - /*********************************************************** - * Update size tag to use xx-small-xx-large instead of 1-7 * - ***********************************************************/ - $.sceditor.plugins.bbcode.bbcode.set('size', { - format: function($elm, content) { - var fontSize, - sizes = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'], - size = $elm.attr('size');; - - if (!size) { - fontSize = $elm.css('fontSize'); - // Most browsers return px value but IE returns 1-7 - if(fontSize.indexOf('px') > -1) { - // convert size to an int - fontSize = fontSize.replace('px', '') - 0; - size = 1; - - if(fontSize > 9) - size = 2; - if(fontSize > 12) - size = 3; - if(fontSize > 15) - size = 4; - if(fontSize > 17) - size = 5; - if(fontSize > 23) - size = 6; - if(fontSize > 31) - size = 7; - } - else { - size = (~~fontSize) + 1; - } - - if(size > 7) - size = 7; - if(size < 1) - size = 1; - - size = sizes[size-1]; - } - else { - size = sizes[size-1]; - } - - return '[size=' + size + ']' + content + '[/size]'; - }, - html: function(token, attrs, content) { - var sizes = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'], - size = $.inArray(attrs.defaultattr, sizes)+1; - if (!isNaN(attrs.defaultattr)) { - size = attrs.defaultattr; - if(size > 7) - size = 7; - if(size < 1) - size = 1; - } - if (size < 0) { - size = 0; - } - return '' + content + ''; - } - }); - - $.sceditor.command.set('size', { - _dropDown: function(editor, caller, callback) { - var content = $('
    '), - clickFunc = function (e) { - callback($(this).data('size')); - editor.closeDropDown(true); - e.preventDefault(); - }; - - for (var i=1; i <= 7; i++) - content.append($('' + i + '').click(clickFunc)); - - editor.createDropDown(caller, 'fontsize-picker', content); - }, - exec: function (caller) { - var editor = this; - - $.sceditor.command.get('size')._dropDown( - editor, - caller, - function(fontSize) { - editor.execCommand('fontsize', fontSize); - } - ); - }, - txtExec: function(caller) { - var editor = this, - sizes = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']; - - $.sceditor.command.get('size')._dropDown( - editor, - caller, - function(size) { - size = (~~size); - size = (size > 7) ? 7 : ( (size < 1) ? 1 : size ); - - editor.insertText('[size=' + sizes[size-1] + ']', '[/size]'); - } - ); - } - }); - - - - /******************************************** - * Update quote to support pid and dateline * - ********************************************/ - $.sceditor.plugins.bbcode.bbcode.set('quote', { - format: function(element, content) { - var author = '', - $elm = $(element), - $cite = $elm.children('cite').first(); - $cite.html($cite.text()); - - if($cite.length === 1 || $elm.data('author')) - { - author = $cite.text() || $elm.data('author'); - - $elm.data('author', author); - $cite.remove(); - - content = this.elementToBbcode($(element)); - author = '=' + author.replace(/(^\s+|\s+$)/g, ''); - - $elm.prepend($cite); - } - - if($elm.data('pid')) - author += " pid='" + $elm.data('pid') + "'"; - - if($elm.data('dateline')) - author += " dateline='" + $elm.data('dateline') + "'"; - - return '[quote' + author + ']' + content + '[/quote]'; - }, - html: function(token, attrs, content) { - var data = ''; - - if(attrs.pid) - data += ' data-pid="' + attrs.pid + '"'; - - if(attrs.dateline) - data += ' data-dateline="' + attrs.dateline + '"'; - - if(typeof attrs.defaultattr !== "undefined") - content = '' + attrs.defaultattr.replace(/ /g, ' ') + '' + content; - - return '' + content + ''; - }, - quoteType: function(val, name) { - return "'" + val.replace("'", "\\'") + "'"; - }, - breakStart: true, - breakEnd: true - }); - - - - /************************************************************ - * Update font tag to allow limiting to only first in stack * - ************************************************************/ - $.sceditor.plugins.bbcode.bbcode.set('font', { - format: function(element, content) { - var font; - - if(element[0].nodeName.toLowerCase() !== 'font' || !(font = element.attr('face'))) - font = element.css('font-family'); - - - if(typeof font == 'string' && font != '' && font != 'defaultattr') - { - return '[font=' + this.stripQuotes(font) + ']' + content + '[/font]'; - } - else - { - return content; - } - }, - html: function(token, attrs, content) { - if(typeof attrs.defaultattr == 'string' && attrs.defaultattr != '' && attrs.defaultattr != '{defaultattr}') - { - return '' + content + ''; - } - else - { - return content; - } - } - }); - - - - /************************ - * Add MyBB PHP command * - ************************/ - $.sceditor.plugins.bbcode.bbcode.set('php', { - allowsEmpty: true, - isInline: false, - allowedChildren: ['#', '#newline'], - format: '[php]{0}[/php]', - html: '{0}' - }); - - $.sceditor.command.set("php", { - _dropDown: function (editor, caller) { - var $content; - - $content = $( - '
    ' + - ' ' + - '",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("'; - } else { - msgbox += '
    '; - } - msgbox += '
    '+ - '
    '+ - '
    '+ opts.closeText +'
    '+ - '
    '+ - ''+ - '
    '+ - ''; - - t.jqib = $(msgbox).appendTo($body); - t.jqi = t.jqib.children('.'+ opts.prefix); - t.jqif = t.jqib.children('.'+ opts.prefix +'fade'); - - //if a string was passed, convert to a single state - if(message.constructor === String){ - message = { - state0: { - title: opts.title, - html: message, - buttons: opts.buttons, - position: opts.position, - focus: opts.focus, - defaultButton: opts.defaultButton, - submit: opts.submit - } - }; - } - - //build the states - t.options.states = {}; - var k,v; - for(k in message){ - v = $.extend({},Imp.defaults.state,{name:k},message[k]); - t.addState(v.name, v); - - if(t.currentStateName === ''){ - t.currentStateName = v.name; - } - } - - //Events - t.jqi.on('click', '.'+ opts.prefix +'buttons button', function(e){ - var $t = $(this), - $state = $t.parents('.'+ opts.prefix +'state'), - statename = $state.data('jqi-name'), - stateobj = t.options.states[statename], - msg = $state.children('.'+ opts.prefix +'message'), - clicked = stateobj.buttons[$t.text()] || stateobj.buttons[$t.html()], - forminputs = {}; - - // disable for a moment to prevent multiple clicks - if(t.options.buttonTimeout > 0){ - t.disableStateButtons(statename); - setTimeout(function(){ - t.enableStateButtons(statename); - }, t.options.buttonTimeout); - } - - // if for some reason we couldn't get the value - if(clicked === undefined){ - for(var i in stateobj.buttons){ - if(stateobj.buttons[i].title === $t.text() || stateobj.buttons[i].title === $t.html()){ - clicked = stateobj.buttons[i].value; - } - } - } - - //collect all form element values from all states. - $.each(t.jqi.children('form').serializeArray(),function(i,obj){ - if (forminputs[obj.name] === undefined) { - forminputs[obj.name] = obj.value; - } else if (typeof forminputs[obj.name] === Array || typeof forminputs[obj.name] === 'object') { - forminputs[obj.name].push(obj.value); - } else { - forminputs[obj.name] = [forminputs[obj.name],obj.value]; - } - }); - - // trigger an event - var promptsubmite = new $.Event('impromptu:submit'); - promptsubmite.stateName = stateobj.name; - promptsubmite.state = $state; - $state.trigger(promptsubmite, [clicked, msg, forminputs]); - - if(!promptsubmite.isDefaultPrevented()){ - t.close(true, clicked,msg,forminputs); - } - }); - - // if the fade is clicked blink the prompt - var fadeClicked = function(){ - if(opts.persistent){ - var offset = (opts.top.toString().indexOf('%') >= 0? ($window.height()*(parseInt(opts.top,10)/100)) : parseInt(opts.top,10)), - top = parseInt(t.jqi.css('top').replace('px',''),10) - offset; - - //$window.scrollTop(top); - $('html,body').animate({ scrollTop: top }, 'fast', function(){ - var i = 0; - t.jqib.addClass(opts.prefix +'warning'); - var intervalid = setInterval(function(){ - t.jqib.toggleClass(opts.prefix +'warning'); - if(i++ > 1){ - clearInterval(intervalid); - t.jqib.removeClass(opts.prefix +'warning'); - } - }, 100); - }); - } - else { - t.close(true); - } - }; - - // listen for esc or tab keys - var keyDownEventHandler = function(e){ - var key = (window.event) ? event.keyCode : e.keyCode; - - //escape key closes - if(key === 27) { - fadeClicked(); - } - - //enter key pressed trigger the default button if its not on it, ignore if it is a textarea - if(key === 13){ - var $defBtn = t.getCurrentState().find('.'+ opts.prefix +'defaultbutton'); - var $tgt = $(e.target); - - if($tgt.is('textarea,.'+opts.prefix+'button') === false && $defBtn.length > 0){ - e.preventDefault(); - $defBtn.click(); - } - } - - //constrain tabs, tabs should iterate through the state and not leave - if (key === 9){ - var $inputels = $('input,select,textarea,button',t.getCurrentState()); - var fwd = !e.shiftKey && e.target === $inputels[$inputels.length-1]; - var back = e.shiftKey && e.target === $inputels[0]; - if (fwd || back) { - setTimeout(function(){ - if (!$inputels){ - return; - } - var el = $inputels[back===true ? $inputels.length-1 : 0]; - - if (el){ - el.focus(); - } - },10); - return false; - } - } - }; - - t.position(); - t.style(); - - // store copy of the window resize function for interal use only - t._windowResize = function(e){ - t.position(e); - }; - $window.resize({ animate: false }, t._windowResize); - - t.jqif.click(fadeClicked); - t.jqi.find('.'+ opts.prefix +'close').click(function(){ t.close(); }); - t.jqi.find('.'+ opts.prefix +'form').submit(function(){ return false; }); - t.jqib.on("keydown",keyDownEventHandler) - .on('impromptu:loaded', opts.loaded) - .on('impromptu:close', opts.close) - .on('impromptu:statechanging', opts.statechanging) - .on('impromptu:statechanged', opts.statechanged); - - // Show it - t.jqif[opts.show](opts.overlayspeed); - t.jqi[opts.show](opts.promptspeed, function(){ - - t.goToState( - isNaN(opts.initialState) ? opts.initialState : - t.jqi.find('.'+ opts.prefix +'states .'+ opts.prefix +'state').eq(opts.initialState).data('jqi-name') - ); - - t.jqib.trigger('impromptu:loaded'); - }); - - // Timeout - if(opts.timeout > 0){ - t.timeout = setTimeout(function(){ t.close(true); },opts.timeout); - } - - return t; - }, - - /** - * close - Closes the prompt - * @param callback Function - called when the transition is complete - * @param clicked String - value of the button clicked (only used internally) - * @param msg jQuery - The state message body (only used internally) - * @param forvals Object - key/value pairs of all form field names and values (only used internally) - * @return Imp - the instance of this Impromptu object - */ - close: function(callCallback, clicked, msg, formvals){ - var t = this; - Imp.removeFromStack(t.id); - - if(t.timeout){ - clearTimeout(t.timeout); - t.timeout = false; - } - - if(t.jqib){ - t.jqib[t.options.hide]('fast',function(){ - - t.jqib.trigger('impromptu:close', [clicked,msg,formvals]); - - t.jqib.remove(); - - $(window).off('resize', t._windowResize); - - if(typeof callCallback === 'function'){ - callCallback(); - } - }); - } - t.currentStateName = ""; - - return t; - }, - - /** - * addState - Injects a state into the prompt - * @param statename String - Name of the state - * @param stateobj Object - options for the state - * @param afterState String - selector of the state to insert after - * @return jQuery - the newly created state - */ - addState: function(statename, stateobj, afterState) { - var t = this, - state = '', - $state = null, - arrow = '', - title = '', - opts = t.options, - $jqistates = t.jqi.find('.'+ opts.prefix +'states'), - buttons = [], - showHtml,defbtn,k,v,l,i=0; - - stateobj = $.extend({},Imp.defaults.state, {name:statename}, stateobj); - - if(stateobj.position.arrow !== null){ - arrow = '
    '; - } - if(stateobj.title && stateobj.title !== ''){ - title = '
    '+ stateobj.title +'
    '; - } - - showHtml = stateobj.html; - if (typeof stateobj.html === 'function') { - showHtml = 'Error: html function must return text'; - } - - state += '
    '+ - arrow + title + - '
    ' + showHtml +'
    '+ - '
    '; - - // state buttons may be in object or array, lets convert objects to arrays - if($.isArray(stateobj.buttons)){ - buttons = stateobj.buttons; - } - else if($.isPlainObject(stateobj.buttons)){ - for(k in stateobj.buttons){ - if(stateobj.buttons.hasOwnProperty(k)){ - buttons.push({ title: k, value: stateobj.buttons[k] }); - } - } - } - - // iterate over each button and create them - for(i=0, l=buttons.length; i' + v.title + ''; - } - - state += '
    '; - - $state = $(state).css({display:'none'}); - - $state.on('impromptu:submit', stateobj.submit); - - if(afterState !== undefined){ - t.getState(afterState).after($state); - } - else{ - $jqistates.append($state); - } - - t.options.states[statename] = stateobj; - - return $state; - }, - - /** - * removeState - Removes a state from the prompt - * @param state String - Name of the state - * @param newState String - Name of the state to transition to - * @return Boolean - returns true on success, false on failure - */ - removeState: function(state, newState) { - var t = this, - $state = t.getState(state), - rm = function(){ $state.remove(); }; - - if($state.length === 0){ - return false; - } - - // transition away from it before deleting - if($state.css('display') !== 'none'){ - if(newState !== undefined && t.getState(newState).length > 0){ - t.goToState(newState, false, rm); - } - else if($state.next().length > 0){ - t.nextState(rm); - } - else if($state.prev().length > 0){ - t.prevState(rm); - } - else{ - t.close(); - } - } - else{ - $state.slideUp('slow', rm); - } - - return true; - }, - - /** - * getApi - Get the api, so you can extract it from $.prompt stack - * @return jQuery - the prompt - */ - getApi: function() { - return this; - }, - - /** - * getBox - Get the box containing fade and prompt - * @return jQuery - the prompt - */ - getBox: function() { - return this.jqib; - }, - - /** - * getPrompt - Get the prompt - * @return jQuery - the prompt - */ - getPrompt: function() { - return this.jqi; - }, - - /** - * getState - Get the state by its name - * @param statename String - Name of the state - * @return jQuery - the state - */ - getState: function(statename) { - return this.jqi.find('[data-jqi-name="'+ statename +'"]'); - }, - - /** - * getCurrentState - Get the current visible state - * @return jQuery - the current visible state - */ - getCurrentState: function() { - return this.getState(this.getCurrentStateName()); - }, - - /** - * getCurrentStateName - Get the name of the current visible state/substate - * @return String - the current visible state's name - */ - getCurrentStateName: function() { - return this.currentStateName; - }, - - /** - * disableStateButtons - Disables the buttons in a state - * @param statename String - Name of the state containing buttons - * @param buttons Array - Array of button values to disable. By default all are disabled - * @param enable Boolean - True to enable the buttons instead of disabling (internally use only) - * @return Void - */ - disableStateButtons: function(statename, buttons, enable) { - var t = this; - - if($.isArray(statename)){ - buttons = statename; - statename = null; - } - - t.getState(statename || t.getCurrentStateName()).find('.'+ t.options.prefix + 'button').each(function(i,btn){ - if(buttons === undefined || $.inArray(btn.value, buttons) !== -1){ - btn.disabled = !enable; - } - }); - }, - - /** - * enableStateButtons - Enables the buttons in a state - * @param statename String - Name of the state containing buttons. Defaults to current state - * @param buttons Array - Array of button values to enable. By default all are enabled - * @return Void - */ - enableStateButtons: function(statename, buttons) { - this.disableStateButtons(statename, buttons, true); - }, - - /** - * position - Repositions the prompt (Used internally) - * @return void - */ - position: function(e){ - var t = this, - restoreFx = $.fx.off, - $state = t.getCurrentState(), - stateObj = t.options.states[$state.data('jqi-name')], - pos = stateObj? stateObj.position : undefined, - $window = $(window), - bodyHeight = document.body.scrollHeight, //$(document.body).outerHeight(true), - windowHeight = $(window).height(), - documentHeight = $(document).height(), - height = (bodyHeight > windowHeight) ? bodyHeight : windowHeight, - scrollTop = parseInt($window.scrollTop(),10), - top = scrollTop + (t.options.top.toString().indexOf('%') >= 0? - (windowHeight*(parseInt(t.options.top,10)/100)) : parseInt(t.options.top,10)); - - // when resizing the window turn off animation - if(e !== undefined && e.data.animate === false){ - $.fx.off = true; - } - - t.jqib.css({ - position: "absolute", - height: height, - width: "100%", - top: 0, - left: 0, - right: 0, - bottom: 0 - }); - t.jqif.css({ - position: "fixed", - height: height, - width: "100%", - top: 0, - left: 0, - right: 0, - bottom: 0 - }); - - // tour positioning - if(pos && pos.container){ - var offset = $(pos.container).offset(), - hasScrolled = false; - - if($.isPlainObject(offset) && offset.top !== undefined){ - top = (offset.top + pos.y) - (t.options.top.toString().indexOf('%') >= 0? (windowHeight*(parseInt(t.options.top,10)/100)) : parseInt(t.options.top,10)); - - t.jqi.css({ - position: "absolute" - }); - t.jqi.animate({ - top: offset.top + pos.y, - left: offset.left + pos.x, - marginLeft: 0, - width: (pos.width !== undefined)? pos.width : null - }, function(){ - // if it didn't scroll before, check that the bottom is within view. Since width - // is animated we must use the callback before we know the height - if(!hasScrolled && (offset.top + pos.y + t.jqi.outerHeight(true)) > (scrollTop + windowHeight)){ - $('html,body').animate({ scrollTop: top }, 'slow', 'swing', function(){}); - hasScrolled = true; - } - }); - - // scroll if the top is out of the viewing area - if(top < scrollTop || top > scrollTop + windowHeight){ - $('html,body').animate({ scrollTop: top }, 'slow', 'swing', function(){}); - hasScrolled = true; - } - } - } - // custom state width animation - else if(pos && pos.width){ - t.jqi.css({ - position: "absolute", - left: '50%' - }); - t.jqi.animate({ - top: pos.y || top, - left: pos.x || '50%', - marginLeft: ((pos.width/2)*-1), - width: pos.width - }); - } - // standard prompt positioning - else{ - t.jqi.css({ - position: "absolute", - top: top, - left: '50%',//$window.width()/2, - marginLeft: ((t.jqi.outerWidth(false)/2)*-1) - }); - } - - // restore fx settings - if(e !== undefined && e.data.animate === false){ - $.fx.off = restoreFx; - } - }, - - /** - * style - Restyles the prompt (Used internally) - * @return void - */ - style: function(){ - var t = this; - - t.jqif.css({ - zIndex: t.options.zIndex, - display: "none", - opacity: t.options.opacity - }); - t.jqi.css({ - zIndex: t.options.zIndex+1, - display: "none" - }); - t.jqib.css({ - zIndex: t.options.zIndex - }); - }, - - /** - * goToState - Goto the specified state - * @param state String - name of the state to transition to - * @param subState Boolean - true to be a sub state within the currently open state - * @param callback Function - called when the transition is complete - * @return jQuery - the newly active state - */ - goToState: function(state, subState, callback) { - var t = this, - $jqi = t.jqi, - jqiopts = t.options, - $state = t.getState(state), - stateobj = jqiopts.states[$state.data('jqi-name')], - promptstatechanginge = new $.Event('impromptu:statechanging'), - opts = t.options; - - if(stateobj !== undefined){ - - - if (typeof stateobj.html === 'function') { - var contentLaterFunc = stateobj.html; - $state.find('.' + opts.prefix +'message ').html(contentLaterFunc()); - } - - // subState can be ommitted - if(typeof subState === 'function'){ - callback = subState; - subState = false; - } - - t.jqib.trigger(promptstatechanginge, [t.getCurrentStateName(), state]); - - if(!promptstatechanginge.isDefaultPrevented() && $state.length > 0){ - t.jqi.find('.'+ opts.prefix +'parentstate').removeClass(opts.prefix +'parentstate'); - - if(subState){ // hide any open substates - // get rid of any substates - t.jqi.find('.'+ opts.prefix +'substate').not($state) - .slideUp(jqiopts.promptspeed) - .removeClass('.'+ opts.prefix +'substate') - .find('.'+ opts.prefix +'arrow').hide(); - - // add parent state class so it can be visible, but blocked - t.jqi.find('.'+ opts.prefix +'state:visible').addClass(opts.prefix +'parentstate'); - - // add substate class so we know it will be smaller - $state.addClass(opts.prefix +'substate'); - } - else{ // hide any open states - t.jqi.find('.'+ opts.prefix +'state').not($state) - .slideUp(jqiopts.promptspeed) - .find('.'+ opts.prefix +'arrow').hide(); - } - t.currentStateName = stateobj.name; - - $state.slideDown(jqiopts.promptspeed,function(){ - var $t = $(this); - t.enableStateButtons(); - - // if focus is a selector, find it, else its button index - if(typeof(stateobj.focus) === 'string'){ - $t.find(stateobj.focus).eq(0).focus(); - } - else{ - $t.find('.'+ opts.prefix +'defaultbutton').focus(); - } - - $t.find('.'+ opts.prefix +'arrow').show(jqiopts.promptspeed); - - if (typeof callback === 'function'){ - t.jqib.on('impromptu:statechanged', callback); - } - t.jqib.trigger('impromptu:statechanged', [state]); - if (typeof callback === 'function'){ - t.jqib.off('impromptu:statechanged', callback); - } - }); - if(!subState){ - t.position(); - } - } // end isDefaultPrevented() - }// end stateobj !== undefined - - return $state; - }, - - /** - * nextState - Transition to the next state - * @param callback Function - called when the transition is complete - * @return jQuery - the newly active state - */ - nextState: function(callback) { - var t = this, - $next = t.getCurrentState().next(); - if($next.length > 0){ - t.goToState( $next.data('jqi-name'), callback ); - } - return $next; - }, - - /** - * prevState - Transition to the previous state - * @param callback Function - called when the transition is complete - * @return jQuery - the newly active state - */ - prevState: function(callback) { - var t = this, - $prev = t.getCurrentState().prev(); - if($prev.length > 0){ - t.goToState( $prev.data('jqi-name'), callback ); - } - return $prev; - } - - }; - - // ######################################################################## - // $.prompt will manage a queue of Impromptu instances - // ######################################################################## - - /** - * $.prompt create a new Impromptu instance and push it on the stack of instances - * @param message String/Object - String of html or Object of states - * @param options Object - Options to set the prompt - * @return jQuery - the jQuery object of the prompt within the modal - */ - $.prompt = function(message, options){ - var api = new Imp(message, options); - return api.jqi; - }; - - /** - * Copy over static methods - */ - $.each(Imp, function(k,v){ - $.prompt[k] = v; - }); - - /** - * Create a proxy for accessing all instance methods. The close method pops from queue. - */ - $.each(Imp.prototype, function(k,v){ - $.prompt[k] = function(){ - var api = Imp.getLast(); // always use the last instance on the stack - - if(api && typeof api[k] === "function"){ - return api[k].apply(api, arguments); - } - }; - }); - - // ######################################################################## - // jQuery Plugin and public access - // ######################################################################## - - /** - * Enable using $('.selector').prompt({}); - * This will grab the html within the prompt as the prompt message - */ - $.fn.prompt = function(options){ - if(options === undefined){ - options = {}; - } - if(options.withDataAndEvents === undefined){ - options.withDataAndEvents = false; - } - - $.prompt($(this).clone(options.withDataAndEvents).html(),options); - }; - - /** - * Export it as Impromptu and $.prompt - * Can be used from here forth as new Impromptu(states, opts) - */ - window.Impromptu = Imp; - -})); - -/*! - * jQuery Cookie Plugin v1.4.1 - * https://github.com/carhartl/jquery-cookie - * - * Copyright 2013 Klaus Hartl - * Released under the MIT license - */ -(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // CommonJS - factory(require('jquery')); - } else { - // Browser globals - factory(jQuery); - } -}(function ($) { - - var pluses = /\+/g; - - function encode(s) { - return config.raw ? s : encodeURIComponent(s); - } - - function decode(s) { - return config.raw ? s : decodeURIComponent(s); - } - - function stringifyCookieValue(value) { - return encode(config.json ? JSON.stringify(value) : String(value)); - } - - function parseCookieValue(s) { - if (s.indexOf('"') === 0) { - // This is a quoted cookie as according to RFC2068, unescape... - s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); - } - - try { - // Replace server-side written pluses with spaces. - // If we can't decode the cookie, ignore it, it's unusable. - // If we can't parse the cookie, ignore it, it's unusable. - s = decodeURIComponent(s.replace(pluses, ' ')); - return config.json ? JSON.parse(s) : s; - } catch(e) {} - } - - function read(s, converter) { - var value = config.raw ? s : parseCookieValue(s); - return $.isFunction(converter) ? converter(value) : value; - } - - var config = $.cookie = function (key, value, options) { - - // Write - - if (value !== undefined && !$.isFunction(value)) { - options = $.extend({}, config.defaults, options); - - if (typeof options.expires === 'number') { - var days = options.expires, t = options.expires = new Date(); - t.setTime(+t + days * 864e+5); - } - - return (document.cookie = [ - encode(key), '=', stringifyCookieValue(value), - options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE - options.path ? '; path=' + options.path : '', - options.domain ? '; domain=' + options.domain : '', - options.secure ? '; secure' : '' - ].join('')); - } - - // Read - - var result = key ? undefined : {}; - - // To prevent the for loop in the first place assign an empty array - // in case there are no cookies at all. Also prevents odd result when - // calling $.cookie(). - var cookies = document.cookie ? document.cookie.split('; ') : []; - - for (var i = 0, l = cookies.length; i < l; i++) { - var parts = cookies[i].split('='); - var name = decode(parts.shift()); - var cookie = parts.join('='); - - if (key && key === name) { - // If second argument (value) is a function it's a converter... - result = read(cookie, value); - break; - } - - // Prevent storing a cookie that we couldn't decode. - if (!key && (cookie = read(cookie)) !== undefined) { - result[name] = cookie; - } - } - - return result; - }; - - config.defaults = {}; - - $.removeCookie = function (key, options) { - if ($.cookie(key) === undefined) { - return false; - } - - // Must not alter options, thus extending a fresh object... - $.cookie(key, '', $.extend({}, options, { expires: -1 })); - return !$.cookie(key); - }; - -})); \ No newline at end of file diff --git a/html/forums/jscripts/jquery.plugins.min.js b/html/forums/jscripts/jquery.plugins.min.js deleted file mode 100644 index b86cec5..0000000 --- a/html/forums/jscripts/jquery.plugins.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t){t.jGrowl=function(e,i){0===t("#jGrowl").length&&t('
    ').addClass(i&&i.position?i.position:t.jGrowl.defaults.position).appendTo(i&&i.appendTo?i.appendTo:t.jGrowl.defaults.appendTo),t("#jGrowl").jGrowl(e,i)},t.fn.jGrowl=function(e,i){if(void 0===i&&t.isPlainObject(e)&&(i=e,e=i.message),t.isFunction(this.each)){var o=arguments;return this.each(function(){void 0===t(this).data("jGrowl.instance")&&(t(this).data("jGrowl.instance",t.extend(new t.fn.jGrowl,{notifications:[],element:null,interval:null})),t(this).data("jGrowl.instance").startup(this)),t.isFunction(t(this).data("jGrowl.instance")[e])?t(this).data("jGrowl.instance")[e].apply(t(this).data("jGrowl.instance"),t.makeArray(o).slice(1)):t(this).data("jGrowl.instance").create(e,i)})}},t.extend(t.fn.jGrowl.prototype,{defaults:{pool:0,header:"",group:"",sticky:!1,position:"top-right",appendTo:"body",glue:"after",theme:"default",themeState:"highlight",corners:"10px",check:250,life:3e3,closeDuration:"normal",openDuration:"normal",easing:"swing",closer:!0,closeTemplate:"×",closerTemplate:"
    [ close all ]
    ",log:function(){},beforeOpen:function(){},afterOpen:function(){},open:function(){},beforeClose:function(){},close:function(){},click:function(){},animateOpen:{opacity:"show"},animateClose:{opacity:"hide"}},notifications:[],element:null,interval:null,create:function(e,i){var o=t.extend({},this.defaults,i);"undefined"!=typeof o.speed&&(o.openDuration=o.speed,o.closeDuration=o.speed),this.notifications.push({message:e,options:o}),o.log.apply(this.element,[this.element,e,o])},render:function(e){var i=this,o=e.message,n=e.options;n.themeState=""===n.themeState?"":"ui-state-"+n.themeState;var s=t("
    ").addClass("jGrowl-notification alert "+n.themeState+" ui-corner-all"+(void 0!==n.group&&""!==n.group?" "+n.group:"")).append(t("";return c+="
    ",p=t(c).css({display:"none"}),p.on("impromptu:submit",o.submit),void 0!==n?u.getState(n).after(p):g.append(p),u.options.states[i]=o,p},removeState:function(t,e){var i=this,o=i.getState(t),n=function(){o.remove()};return 0===o.length?!1:("none"!==o.css("display")?void 0!==e&&i.getState(e).length>0?i.goToState(e,!1,n):o.next().length>0?i.nextState(n):o.prev().length>0?i.prevState(n):i.close():o.slideUp("slow",n),!0)},getApi:function(){return this},getBox:function(){return this.jqib},getPrompt:function(){return this.jqi},getState:function(t){return this.jqi.find('[data-jqi-name="'+t+'"]')},getCurrentState:function(){return this.getState(this.getCurrentStateName())},getCurrentStateName:function(){return this.currentStateName},disableStateButtons:function(e,i,o){var n=this;t.isArray(e)&&(i=e,e=null),n.getState(e||n.getCurrentStateName()).find("."+n.options.prefix+"button").each(function(e,n){(void 0===i||-1!==t.inArray(n.value,i))&&(n.disabled=!o)})},enableStateButtons:function(t,e){this.disableStateButtons(t,e,!0)},position:function(e){var i=this,o=t.fx.off,n=i.getCurrentState(),s=i.options.states[n.data("jqi-name")],a=s?s.position:void 0,r=t(window),l=document.body.scrollHeight,d=t(window).height(),u=(t(document).height(),l>d?l:d),c=parseInt(r.scrollTop(),10),p=c+(i.options.top.toString().indexOf("%")>=0?d*(parseInt(i.options.top,10)/100):parseInt(i.options.top,10));if(void 0!==e&&e.data.animate===!1&&(t.fx.off=!0),i.jqib.css({position:"absolute",height:u,width:"100%",top:0,left:0,right:0,bottom:0}),i.jqif.css({position:"fixed",height:u,width:"100%",top:0,left:0,right:0,bottom:0}),a&&a.container){var f=t(a.container).offset(),h=!1;t.isPlainObject(f)&&void 0!==f.top&&(p=f.top+a.y-(i.options.top.toString().indexOf("%")>=0?d*(parseInt(i.options.top,10)/100):parseInt(i.options.top,10)),i.jqi.css({position:"absolute"}),i.jqi.animate({top:f.top+a.y,left:f.left+a.x,marginLeft:0,width:void 0!==a.width?a.width:null},function(){!h&&f.top+a.y+i.jqi.outerHeight(!0)>c+d&&(t("html,body").animate({scrollTop:p},"slow","swing",function(){}),h=!0)}),(c>p||p>c+d)&&(t("html,body").animate({scrollTop:p},"slow","swing",function(){}),h=!0))}else a&&a.width?(i.jqi.css({position:"absolute",left:"50%"}),i.jqi.animate({top:a.y||p,left:a.x||"50%",marginLeft:a.width/2*-1,width:a.width})):i.jqi.css({position:"absolute",top:p,left:"50%",marginLeft:i.jqi.outerWidth(!1)/2*-1});void 0!==e&&e.data.animate===!1&&(t.fx.off=o)},style:function(){var t=this;t.jqif.css({zIndex:t.options.zIndex,display:"none",opacity:t.options.opacity}),t.jqi.css({zIndex:t.options.zIndex+1,display:"none"}),t.jqib.css({zIndex:t.options.zIndex})},goToState:function(e,i,o){var n=this,s=(n.jqi,n.options),a=n.getState(e),r=s.states[a.data("jqi-name")],l=new t.Event("impromptu:statechanging"),d=n.options;if(void 0!==r){if("function"==typeof r.html){var u=r.html;a.find("."+d.prefix+"message ").html(u())}"function"==typeof i&&(o=i,i=!1),n.jqib.trigger(l,[n.getCurrentStateName(),e]),!l.isDefaultPrevented()&&a.length>0&&(n.jqi.find("."+d.prefix+"parentstate").removeClass(d.prefix+"parentstate"),i?(n.jqi.find("."+d.prefix+"substate").not(a).slideUp(s.promptspeed).removeClass("."+d.prefix+"substate").find("."+d.prefix+"arrow").hide(),n.jqi.find("."+d.prefix+"state:visible").addClass(d.prefix+"parentstate"),a.addClass(d.prefix+"substate")):n.jqi.find("."+d.prefix+"state").not(a).slideUp(s.promptspeed).find("."+d.prefix+"arrow").hide(),n.currentStateName=r.name,a.slideDown(s.promptspeed,function(){var i=t(this);n.enableStateButtons(),"string"==typeof r.focus?i.find(r.focus).eq(0).focus():i.find("."+d.prefix+"defaultbutton").focus(),i.find("."+d.prefix+"arrow").show(s.promptspeed),"function"==typeof o&&n.jqib.on("impromptu:statechanged",o),n.jqib.trigger("impromptu:statechanged",[e]),"function"==typeof o&&n.jqib.off("impromptu:statechanged",o)}),i||n.position())}return a},nextState:function(t){var e=this,i=e.getCurrentState().next();return i.length>0&&e.goToState(i.data("jqi-name"),t),i},prevState:function(t){var e=this,i=e.getCurrentState().prev();return i.length>0&&e.goToState(i.data("jqi-name"),t),i}},t.prompt=function(t,i){var o=new e(t,i);return o.jqi},t.each(e,function(e,i){t.prompt[e]=i}),t.each(e.prototype,function(i){t.prompt[i]=function(){var t=e.getLast();return t&&"function"==typeof t[i]?t[i].apply(t,arguments):void 0}}),t.fn.prompt=function(e){void 0===e&&(e={}),void 0===e.withDataAndEvents&&(e.withDataAndEvents=!1),t.prompt(t(this).clone(e.withDataAndEvents).html(),e)},window.Impromptu=e}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){function e(t){return r.raw?t:encodeURIComponent(t)}function i(t){return r.raw?t:decodeURIComponent(t)}function o(t){return e(r.json?JSON.stringify(t):String(t))}function n(t){0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return t=decodeURIComponent(t.replace(a," ")),r.json?JSON.parse(t):t}catch(e){}}function s(e,i){var o=r.raw?e:n(e);return t.isFunction(i)?i(o):o}var a=/\+/g,r=t.cookie=function(n,a,l){if(void 0!==a&&!t.isFunction(a)){if(l=t.extend({},r.defaults,l),"number"==typeof l.expires){var d=l.expires,u=l.expires=new Date;u.setTime(+u+864e5*d)}return document.cookie=[e(n),"=",o(a),l.expires?"; expires="+l.expires.toUTCString():"",l.path?"; path="+l.path:"",l.domain?"; domain="+l.domain:"",l.secure?"; secure":""].join("")}for(var c=n?void 0:{},p=document.cookie?document.cookie.split("; "):[],f=0,h=p.length;h>f;f++){var m=p[f].split("="),g=i(m.shift()),v=m.join("=");if(n&&n===g){c=s(v,a);break}n||void 0===(v=s(v))||(c[g]=v)}return c};r.defaults={},t.removeCookie=function(e,i){return void 0===t.cookie(e)?!1:(t.cookie(e,"",t.extend({},i,{expires:-1})),!t.cookie(e))}}); \ No newline at end of file diff --git a/html/forums/jscripts/post.js b/html/forums/jscripts/post.js deleted file mode 100644 index 23905c1..0000000 --- a/html/forums/jscripts/post.js +++ /dev/null @@ -1,122 +0,0 @@ -var Post = { - init: function() - { - $(document).ready(function(){ - }); - }, - - loadMultiQuoted: function() - { - if(use_xmlhttprequest == 1) - { - tid = document.input.tid.value; - - $.ajax( - { - url: 'xmlhttp.php?action=get_multiquoted&tid='+tid, - type: 'get', - complete: function (request, status) - { - Post.multiQuotedLoaded(request, status); - } - }); - - return false; - } - else - { - return true; - } - }, - - loadMultiQuotedAll: function() - { - if(use_xmlhttprequest == 1) - { - $.ajax( - { - url: 'xmlhttp.php?action=get_multiquoted&load_all=1', - type: 'get', - complete: function (request, status) - { - Post.multiQuotedLoaded(request, status); - } - }); - - return false; - } - else - { - return true; - } - }, - - multiQuotedLoaded: function(request) - { - var json = $.parseJSON(request.responseText); - if(typeof response == 'object') - { - if(json.hasOwnProperty("errors")) - { - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.post_fetch_error + ' ' + message, {theme:'jgrowl_error'}); - }); - return false; - } - } - - var id = 'message'; - if(typeof $('textarea').sceditor != 'undefined') - { - $('textarea').sceditor('instance').insert(json.message); - } - else - { - if($('#' + id).value) - { - $('#' + id).value += "\n"; - } - $('#' + id).val($('#' + id).val() + json.message); - } - - $('#multiquote_unloaded').hide(); - document.input.quoted_ids.value = 'all'; - }, - - clearMultiQuoted: function() - { - $('#multiquote_unloaded').hide(); - Cookie.unset('multiquote'); - }, - - removeAttachment: function(aid) - { - $.prompt(removeattach_confirm, { - buttons:[ - {title: yes_confirm, value: true}, - {title: no_confirm, value: false} - ], - submit: function(e,v,m,f){ - if(v == true) - { - document.input.attachmentaid.value = aid; - document.input.attachmentact.value = "remove"; - - $("input[name=rem]").parents('form').append(''); - $('#rem_submit').click(); - } - } - }); - - return false; - }, - - attachmentAction: function(aid,action) - { - document.input.attachmentaid.value = aid; - document.input.attachmentact.value = action; - } -}; - -Post.init(); \ No newline at end of file diff --git a/html/forums/jscripts/question.js b/html/forums/jscripts/question.js deleted file mode 100644 index c8ffea6..0000000 --- a/html/forums/jscripts/question.js +++ /dev/null @@ -1,39 +0,0 @@ -var question = { - refresh: function() - { - var question_id = $('#question_id').val(); - - $.ajax( - { - url: 'xmlhttp.php?action=refresh_question&question_id='+question_id, - method: 'get', - dataType: 'json', - complete: function (request) - { - question.refresh_complete(request); - } - }); - - return false; - }, - - refresh_complete: function(request) - { - var json = $.parseJSON(request.responseText); - if(json.hasOwnProperty("errors")) - { - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.question_fetch_failure + ' ' + message, {theme:'jgrowl_error'}); - }); - } - else if(json.question && json.sid) - { - $("#question").text(json.question); - $("#question_id").val(json.sid); - } - - $('#answer').removeClass('error valid').val('').removeAttr('aria-invalid').removeData('previousValue') - .next('label').remove(); - } -}; \ No newline at end of file diff --git a/html/forums/jscripts/rating.js b/html/forums/jscripts/rating.js deleted file mode 100644 index adcc4da..0000000 --- a/html/forums/jscripts/rating.js +++ /dev/null @@ -1,136 +0,0 @@ -var Rating = { - init: function() - { - var rating_elements = $(".star_rating"); - rating_elements.each(function() - { - var rating_element = $(this); - var elements = rating_element.find("li a"); - if(rating_element.hasClass("star_rating_notrated")) - { - elements.each(function() - { - var element = $(this); - element.click(function() - { - var parameterString = element.attr("href").replace(/.*\?(.*)/, "$1"); - return Rating.add_rating(parameterString); - }); - }); - } - else - { - elements.each(function() - { - var element = $(this); - element.attr("onclick", "return false;"); - element.css("cursor", "default"); - var element_id = element.attr("href").replace(/.*\?(.*)/, "$1").match(/tid=(.*)&(.*)&/)[1]; - element.attr("title", $("#current_rating_"+element_id).text()); - }); - } - }); - }, - - build_forumdisplay: function(tid, options) - { - var list = $("#rating_thread_"+tid); - if(!list.length) - { - return; - } - - list.addClass("star_rating") - .addClass(options.extra_class); - - list_classes = new Array(); - list_classes[1] = 'one_star'; - list_classes[2] = 'two_stars'; - list_classes[3] = 'three_stars'; - list_classes[4] = 'four_stars'; - list_classes[5] = 'five_stars'; - - for(var i = 1; i <= 5; i++) - { - var list_element = $("
  • "); - var list_element_a = $(""); - list_element_a.addClass(list_classes[i]) - .attr("title", lang.stars[i]) - .attr("href", "./ratethread.php?tid="+tid+"&rating="+i+"&my_post_key="+my_post_key) - .html(i); - list_element.append(list_element_a); - list.append(list_element); - } - }, - - add_rating: function(parameterString) - { - var tid = parameterString.match(/tid=(.*)&(.*)&/)[1]; - var rating = parameterString.match(/rating=(.*)&(.*)/)[1]; - $.ajax( - { - url: 'ratethread.php?ajax=1&my_post_key='+my_post_key+'&tid='+tid+'&rating='+rating, - async: true, - method: 'post', - dataType: 'json', - complete: function (request) - { - Rating.rating_added(request, tid); - } - }); - return false; - }, - - rating_added: function(request, element_id) - { - var json = $.parseJSON(request.responseText); - if(json.hasOwnProperty("errors")) - { - $.each(json.errors, function(i, error) - { - $.jGrowl(lang.ratings_update_error + ' ' + error, {theme:'jgrowl_error'}); - }); - } - else if(json.hasOwnProperty("success")) - { - var element = $("#rating_thread_"+element_id); - element.parent().before(element.next()); - element.removeClass("star_rating_notrated"); - - $.jGrowl(json.success, {theme:'jgrowl_success'}); - if(json.hasOwnProperty("average")) - { - $("#current_rating_"+element_id).html(json.average); - } - - var rating_elements = $(".star_rating"); - rating_elements.each(function() - { - var rating_element = $(this); - var elements = rating_element.find("li a"); - if(rating_element.hasClass('star_rating_notrated')) - { - elements.each(function() - { - var element = $(this); - if(element.attr("id") == "rating_thread_" + element_id) - { - element.attr("onclick", "return false;") - .css("cursor", "default") - .attr("title", $("#current_rating_"+element_id).text()); - } - }); - } - }); - $("#current_rating_"+element_id).css("width", json.width+"%"); - } - } -}; - -if(use_xmlhttprequest == 1) -{ - $(function() - { - Rating.init(); - }); -} \ No newline at end of file diff --git a/html/forums/jscripts/report.js b/html/forums/jscripts/report.js deleted file mode 100644 index 8bc1199..0000000 --- a/html/forums/jscripts/report.js +++ /dev/null @@ -1,49 +0,0 @@ -var Report = { - init: function() - { - $(document).ready(function(){ - }); - }, - - reportPost: function(pid) - { - MyBB.popupWindow("/report.php?modal=1&type=post&pid="+pid); - }, - - reportUser: function(pid) - { - MyBB.popupWindow("/report.php?modal=1&type=profile&pid="+pid); - }, - - reportReputation: function(pid) - { - MyBB.popupWindow("/report.php?modal=1&type=reputation&pid="+pid); - }, - - submitReport: function(pid) - { - // Get form, serialize it and send it - var datastring = $(".reportData_"+pid).serialize(); - $.ajax({ - type: "POST", - url: "report.php?modal=1", - data: datastring, - dataType: "html", - success: function(data) { - // Replace modal HTML - $('.modal_'+pid).fadeOut('slow', function() { - $('.modal_'+pid).html(data); - $('.modal_'+pid).fadeIn('slow'); - $('.modal').fadeIn('slow'); - }); - }, - error: function(){ - alert(lang.unknown_error); - } - }); - - return false; - } -}; - -Report.init(); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_plugins/bbcode.js b/html/forums/jscripts/sceditor/editor_plugins/bbcode.js deleted file mode 100644 index 8ef5841..0000000 --- a/html/forums/jscripts/sceditor/editor_plugins/bbcode.js +++ /dev/null @@ -1,2 +0,0 @@ -/* SCEditor v1.4.7 | (C) 2015, Sam Clarke | sceditor.com/license */ -!function(a,b,c){"use strict";var d=a.sceditor,e=d.plugins,f=d.escapeEntities,g=d.escapeUriScheme,h=d.ie,i=h&&11>h,j=d.command.get,k={bold:{txtExec:["[b]","[/b]"]},italic:{txtExec:["[i]","[/i]"]},underline:{txtExec:["[u]","[/u]"]},strike:{txtExec:["[s]","[/s]"]},subscript:{txtExec:["[sub]","[/sub]"]},superscript:{txtExec:["[sup]","[/sup]"]},left:{txtExec:["[left]","[/left]"]},center:{txtExec:["[center]","[/center]"]},right:{txtExec:["[right]","[/right]"]},justify:{txtExec:["[justify]","[/justify]"]},font:{txtExec:function(a){var b=this;j("font")._dropDown(b,a,function(a){b.insertText("[font="+a+"]","[/font]")})}},size:{txtExec:function(a){var b=this;j("size")._dropDown(b,a,function(a){b.insertText("[size="+a+"]","[/size]")})}},color:{txtExec:function(a){var b=this;j("color")._dropDown(b,a,function(a){b.insertText("[color="+a+"]","[/color]")})}},bulletlist:{txtExec:function(b,c){var d="";a.each(c.split(/\r?\n/),function(){d+=(d?"\n":"")+"[li]"+this+"[/li]"}),this.insertText("[ul]\n"+d+"\n[/ul]")}},orderedlist:{txtExec:function(b,c){var d="";a.each(c.split(/\r?\n/),function(){d+=(d?"\n":"")+"[li]"+this+"[/li]"}),e.bbcode.bbcode.get(""),this.insertText("[ol]\n"+d+"\n[/ol]")}},table:{txtExec:["[table][tr][td]","[/td][/tr][/table]"]},horizontalrule:{txtExec:["[hr]"]},code:{txtExec:["[code]","[/code]"]},image:{txtExec:function(a,b){var c=this,d=prompt(c._("Enter the image URL:"),b);d&&c.insertText("[img]"+d+"[/img]")}},email:{txtExec:function(a,b){var c=this,d=b&&b.indexOf("@")>-1?null:b,e=prompt(c._("Enter the e-mail address:"),d?"":b),f=prompt(c._("Enter the displayed text:"),d||e)||e;e&&c.insertText("[email="+e+"]"+f+"[/email]")}},link:{txtExec:function(b,c){var d=this,e=/^[a-z]+:\/\//i.test(a.trim(c))?null:c,f=prompt(d._("Enter URL:"),e?"http://":a.trim(c)),g=prompt(d._("Enter the displayed text:"),e||f)||f;f&&d.insertText("[url="+f+"]"+g+"[/url]")}},quote:{txtExec:["[quote]","[/quote]"]},youtube:{txtExec:function(a){var b=this;j("youtube")._dropDown(b,a,function(a){b.insertText("[youtube]"+a+"[/youtube]")})}},rtl:{txtExec:["[rtl]","[/rtl]"]},ltr:{txtExec:["[ltr]","[/ltr]"]}},l=function(a){return a?a.replace(/\\(.)/g,"$1").replace(/^(["'])(.*?)\1$/,"$2"):a},m=function(){var a,b=arguments;return b[0].replace(/\{(\d+)\}/g,function(c,d){return b[d-0+1]!==a?b[d-0+1]:"{"+d+"}"})},n={OPEN:"open",CONTENT:"content",NEWLINE:"newline",CLOSE:"close"},o=function(a,b,c,d,e,f){var g=this;g.type=a,g.name=b,g.val=c,g.attrs=d||{},g.children=e||[],g.closing=f||null};o.prototype={clone:function(a){var b=this;return new o(b.type,b.name,b.val,b.attrs,a?b.children:[],b.closing?b.closing.clone():null)},splitAt:function(b){var c,d=this,e=0,f=d.children.length;if("number"!=typeof b&&(b=a.inArray(b,d.children)),0>b||b>f)return null;for(;f--;)f>=b?e++:f=0;return c=d.clone(),c.children=d.children.splice(b,e),c}};var p=function(b){if(!(this instanceof p))return new p(b);var d,g,j,k,m,q,r,s,t,u,v,w,x,y,z,A=this;d=function(){A.bbcodes=e.bbcode.bbcodes,A.opts=a.extend({},p.defaults,b)},A.tokenize=function(a){var b,c,d,e=[],f=[{type:n.CLOSE,regex:/^\[\/[^\[\]]+\]/},{type:n.OPEN,regex:/^\[[^\[\]]+\]/},{type:n.NEWLINE,regex:/^(\r\n|\r|\n)/},{type:n.CONTENT,regex:/^([^\[\r\n]+|\[)/}];f.reverse();a:for(;a.length;){for(d=f.length;d--;)if(c=f[d].type,(b=a.match(f[d].regex))&&b[0]){e.push(g(c,b[0])),a=a.substr(b[0].length);continue a}a.length&&e.push(g(n.CONTENT,a)),a=""}return e},g=function(b,c){var d,f,g,h=/\[([^\]\s=]+)(?:([^\]]+))?\]/,i=/\[\/([^\[\]]+)\]/;return b===n.OPEN&&(d=c.match(h))&&(g=y(d[1]),d[2]&&(d[2]=a.trim(d[2]))&&(f=j(d[2]))),b===n.CLOSE&&(d=c.match(i))&&(g=y(d[1])),b===n.NEWLINE&&(g="#newline"),g&&(b!==n.OPEN&&b!==n.CLOSE||e.bbcode.bbcodes[g])||(b=n.CONTENT,g="#"),new o(b,g,c,f)},j=function(a){var b,c=/([^\s=]+)=(?:(?:(["'])((?:\\\2|[^\2])*?)\2)|((?:.(?!\s\S+=))*.))/g,d={};if("="===a.charAt(0)&&a.indexOf("=",1)<0)d.defaultattr=l(a.substr(1));else for("="===a.charAt(0)&&(a="defaultattr"+a);b=c.exec(a);)d[y(b[1])]=l(b[3])||b[4];return d},A.parse=function(a,b){var c=k(A.tokenize(a)),d=A.opts;return d.fixInvalidChildren&&t(c),d.removeEmptyTags&&s(c),d.fixInvalidNesting&&q(c),m(c,null,b),d.removeEmptyTags&&s(c),c},w=function(a,b,c){for(var d=c.length;d--;)if(c[d].type===b&&c[d].name===a)return!0;return!1},r=function(b,c){var d=b?A.bbcodes[b.name]:{},e=d.allowedChildren;return A.opts.fixInvalidChildren&&e?a.inArray(c.name||"#",e)>-1:!0},k=function(b){for(var c,d,e,f,g,h,i,j=[],k=[],l=[],m=function(){return z(l)},o=function(a){m()?m().children.push(a):k.push(a)},p=function(b){return m()&&(d=A.bbcodes[m().name])&&d.closedBy&&a.inArray(b,d.closedBy)>-1};c=b.shift();){switch(i=b[0],c.type){case n.OPEN:p(c.name)&&l.pop(),o(c),d=A.bbcodes[c.name],d&&d.isSelfClosing||!d.closedBy&&!w(c.name,n.CLOSE,b)?d&&d.isSelfClosing||(c.type=n.CONTENT):l.push(c);break;case n.CLOSE:if(m()&&c.name!==m().name&&p("/"+c.name)&&l.pop(),m()&&c.name===m().name)m().closing=c,l.pop();else if(w(c.name,n.OPEN,l)){for(;e=l.pop();){if(e.name===c.name){e.closing=c;break}f=e.clone(),j.length>1&&f.children.push(z(j)),j.push(f)}for(o(z(j)),g=j.length;g--;)l.push(j[g]);j.length=0}else c.type=n.CONTENT,o(c);break;case n.NEWLINE:m()&&i&&p((i.type===n.CLOSE?"/":"")+i.name)&&(i.type!==n.CLOSE||i.name!==m().name)&&(d=A.bbcodes[m().name],d&&d.breakAfter?l.pop():d&&d.isInline===!1&&A.opts.breakAfterBlock&&d.breakAfter!==!1&&l.pop()),o(c);break;default:o(c)}h=c}return k},m=function(a,b,c){var d,e,f,g,h,i,j,k,l=a.length;b&&(g=A.bbcodes[b.name]);for(var o=l;o--;)if(d=a[o])if(d.type===n.NEWLINE){if(e=o>0?a[o-1]:null,f=l-1>o?a[o+1]:null,k=!1,!c&&g&&g.isSelfClosing!==!0&&(e?i||f||(g.isInline===!1&&A.opts.breakEndBlock&&g.breakEnd!==!1&&(k=!0),g.breakEnd&&(k=!0),i=k):(g.isInline===!1&&A.opts.breakStartBlock&&g.breakStart!==!1&&(k=!0),g.breakStart&&(k=!0))),e&&e.type===n.OPEN&&(h=A.bbcodes[e.name])&&(c?h.isInline===!1&&(k=!0):(h.isInline===!1&&A.opts.breakAfterBlock&&h.breakAfter!==!1&&(k=!0),h.breakAfter&&(k=!0))),!c&&!j&&f&&f.type===n.OPEN&&(h=A.bbcodes[f.name])&&(h.isInline===!1&&A.opts.breakBeforeBlock&&h.breakBefore!==!1&&(k=!0),h.breakBefore&&(k=!0),j=k,k)){a.splice(o,1);continue}k&&a.splice(o,1),j=!1}else d.type===n.OPEN&&m(d.children,d,c)},q=function(b,c,d,e){var f,g,h,i,j,k,l=function(a){var b=A.bbcodes[a.name];return!b||b.isInline!==!1};for(c=c||[],e=e||b,g=0;g1?c[c.length-2].children:e,i=a.inArray(h,j),i>-1))return k.children.splice(a.inArray(f,k.children),1),void j.splice(i+1,0,f,k);c.push(f),q(f.children,c,d||l(f),e),c.pop(f)}},t=function(a,b){for(var c,d,e=a.length;e--;)(c=a[e])&&(r(b,c)||(c.name=null,c.type=n.CONTENT,r(b,c)?(d=[e+1,0].concat(c.children),c.closing&&(c.closing.name=null,c.closing.type=n.CONTENT,d.push(c.closing)),e+=d.length-1,Array.prototype.splice.apply(a,d)):b.children.splice(e,1)),c.type===n.OPEN&&t(c.children,c))},s=function(b){for(var c,d,e=function(a){for(var b=a.length;b--;){var c=a[b].type;if(c===n.OPEN||c===n.CLOSE)return!1;if(c===n.CONTENT&&/\S|\u00A0/.test(a[b].val))return!1}return!0},f=b.length;f--;)(c=b[f])&&c.type===n.OPEN&&(d=A.bbcodes[c.name],s(c.children),e(c.children)&&d&&!d.isSelfClosing&&!d.allowsEmpty&&b.splice.apply(b,a.merge([f,1],c.children)))},A.toHTML=function(a,b){return u(A.parse(a,b),!0)},u=function(b,d){var g,j,k,l,m,o,p,q,r,s=[];for(q=function(a){return(!a||(a.isHtmlInline!==g?a.isHtmlInline:a.isInline))!==!1};b.length>0;)if(j=b.shift()){if(j.type===n.OPEN)r=j.children[j.children.length-1]||{},k=A.bbcodes[j.name],o=d&&q(k),l=u(j.children,!1),k&&k.html?(q(k)||!q(A.bbcodes[r.name])||k.isPreFormatted||k.skipLastLineBreak||i||(l+="
    "),a.isFunction(k.html)?m=k.html.call(A,j,j.attrs,l):(j.attrs[0]=l,m=e.bbcode.formatBBCodeString(k.html,j.attrs))):m=j.val+l+(j.closing?j.closing.val:"");else{if(j.type===n.NEWLINE){if(!d){s.push("
    ");continue}p||(s.push("
    "),(8>h||c.documentMode&&c.documentMode<8)&&s.push(" ")),i||s.push("
    "),b.length||s.push("
    "),s.push("
    \n"),p=!1;continue}o=d,m=f(j.val,!0)}o&&!p?(s.push("
    "),p=!0):!o&&p&&(s.push("
    \n"),p=!1),s.push(m)}return p&&s.push("\n"),s.join("")},A.toBBCode=function(a,b){return v(A.parse(a,b))},v=function(a){for(var b,c,d,e,f,g,h,i,j,k,l=[];a.length>0;)if(b=a.shift())if(d=A.bbcodes[b.name],e=!(!d||d.isInline!==!1),f=d&&d.isSelfClosing,h=e&&A.opts.breakBeforeBlock&&d.breakBefore!==!1||d&&d.breakBefore,i=e&&!f&&A.opts.breakStartBlock&&d.breakStart!==!1||d&&d.breakStart,j=e&&A.opts.breakEndBlock&&d.breakEnd!==!1||d&&d.breakEnd,k=e&&A.opts.breakAfterBlock&&d.breakAfter!==!1||d&&d.breakAfter,g=(d?d.quoteType:null)||A.opts.quoteType||p.QuoteType.auto,d||b.type!==n.OPEN)if(b.type===n.OPEN){if(h&&l.push("\n"),l.push("["+b.name),b.attrs){b.attrs.defaultattr&&(l.push("=",x(b.attrs.defaultattr,g,"defaultattr")),delete b.attrs.defaultattr);for(c in b.attrs)b.attrs.hasOwnProperty(c)&&l.push(" ",c,"=",x(b.attrs[c],g,c))}l.push("]"),i&&l.push("\n"),b.children&&l.push(v(b.children)),f||d.excludeClosing||(j&&l.push("\n"),l.push("[/"+b.name+"]")),k&&l.push("\n"),b.closing&&f&&l.push(b.closing.val)}else l.push(b.val);else l.push(b.val),b.children&&l.push(v(b.children)),b.closing&&l.push(b.closing.val);return l.join("")},x=function(b,c,d){var e=p.QuoteType,f=/\s|=/.test(b);return a.isFunction(c)?c(b,d):c===e.never||c===e.auto&&!f?b:'"'+b.replace("\\","\\\\").replace('"','\\"')+'"'},z=function(a){return a.length?a[a.length-1]:null},y=function(a){return a.toLowerCase()},d()};p.QuoteType={always:1,never:2,auto:3},p.defaults={breakBeforeBlock:!1,breakStartBlock:!1,breakEndBlock:!1,breakAfterBlock:!0,removeEmptyTags:!0,fixInvalidNesting:!0,fixInvalidChildren:!0,quoteType:p.QuoteType.auto},a.sceditorBBCodePlugin=e.bbcode=function(){var b,f,g,h,j=this;j.bbcodes=e.bbcode.bbcodes,j.stripQuotes=l;var n={},o={},q={ul:["li","ol","ul"],ol:["li","ol","ul"],table:["tr"],tr:["td","th"],code:["br","p","div"]};j.init=function(){j.opts=this.opts,b(),this.commands=a.extend(!0,{},k,this.commands),this.toBBCode=j.signalToSource,this.fromBBCode=j.signalToWysiwyg},b=function(){a.each(j.bbcodes,function(b){var c,d=j.bbcodes[b].tags,e=j.bbcodes[b].styles;d&&a.each(d,function(a,d){c=j.bbcodes[b].isInline===!1,n[a]=n[a]||{},n[a][c]=n[a][c]||{},n[a][c][b]=d}),e&&a.each(e,function(a,d){c=j.bbcodes[b].isInline===!1,o[c]=o[c]||{},o[c][a]=o[c][a]||{},o[c][a][b]=d})})},f=function(b,c,e){var f,g,h=d.dom.getStyle;return e=!!e,o[e]?(a.each(o[e],function(d,e){f=h(b[0],d),f&&h(b.parent()[0],d)!==f&&a.each(e,function(d,e){(!e||a.inArray(f.toString(),e)>-1)&&(g=j.bbcodes[d].format,c=a.isFunction(g)?g.call(j,b,c):m(g,c))})}),c):c},g=function(b,c,e){var f,g,h=b[0],k=h.nodeName.toLowerCase();e=!!e,n[k]&&n[k][e]&&a.each(n[k][e],function(d,e){(!e||(f=!1,a.each(e,function(c,d){return!b.attr(c)||d&&a.inArray(b.attr(c),d)<0?void 0:(f=!0,!1)}),f))&&(g=j.bbcodes[d].format,c=a.isFunction(g)?g.call(j,b,c):m(g,c))});var l=d.dom.isInline;if(e&&(!l(h,!0)||"br"===k)){for(var o,p,q,r=h.previousSibling;r&&(a(r).hasClass("sceditor-ignore")||1===r.nodeType&&!a(r).is("br")&&l(r,!0)&&!r.firstChild);)r=r.previousSibling;do{for(p=h.parentNode,q=p.lastChild;a(q).hasClass("sceditor-ignore");)q=q.previousSibling;o=q===h,h=p}while(p&&o&&l(p,!0));(!o||"li"===k||"br"===k&&i)&&(c+="\n"),"br"!==k&&r&&!a(r).is("br")&&l(r,!0)&&(c="\n"+c)}return c},j.signalToSource=function(b,e){var f,g,h=new p(j.opts.parserOptions);return e||("string"==typeof b?(f=a("
    ").css("visibility","hidden").appendTo(c.body).html(b),e=f):e=a(b)),e&&e.jquery?(d.dom.removeWhiteSpace(e[0]),g=j.elementToBbcode(e),f&&f.remove(),g=h.toBBCode(g,!0),j.opts.bbcodeTrim&&(g=a.trim(g)),g):""},j.elementToBbcode=function(b){var c=function(b,e){var h="";return d.dom.traverse(b,function(b){var d=a(b),j="",k=b.nodeType,l=b.nodeName.toLowerCase(),m=q[l],n=b.firstChild,o=!0;if("object"==typeof e&&(o=a.inArray(l,e)>-1,d.is("img")&&d.data("sceditor-emoticon")&&(o=!0),o||(m=e)),3===k||1===k)if(1===k){if(d.hasClass("sceditor-ignore"))return;if(d.hasClass("sceditor-nlf")&&(!n||!i&&1===b.childNodes.length&&/br/i.test(n.nodeName)))return;"iframe"!==l&&(j=c(b,m)),o?("code"!==l&&(j=f(d,j),j=g(d,j),j=f(d,j,!0)),h+=g(d,j,!0)):h+=j}else h+=b.nodeValue},!1,!0),h};return c(b[0])},j.signalToWysiwyg=function(b,c){var d=new p(j.opts.parserOptions),e=d.toHTML(j.opts.bbcodeTrim?a.trim(b):b);return c?h(e):e},h=function(b){var e,f,g,h=a("
    ").hide().appendTo(c.body),j=h[0];return g=function(b,e){if(!d.dom.hasStyling(b)){if(i||1!==b.childNodes.length||!a(b.firstChild).is("br"))for(;f=b.firstChild;)j.insertBefore(f,b);if(e){var g=j.lastChild;b!==g&&a(g).is("div")&&b.nextSibling===g&&j.insertBefore(c.createElement("br"),b)}j.removeChild(b)}},j.innerHTML=b.replace(/<\/div>\n/g,"
    "),(e=j.firstChild)&&a(e).is("div")&&g(e,!0),(e=j.lastChild)&&a(e).is("div")&&g(e),j=j.innerHTML,h.remove(),j}},e.bbcode.formatBBCodeString=function(a,b){return a.replace(/\{([^}]+)\}/g,function(a,c){var d,e=!0;return"!"===c.charAt(0)&&(e=!1,c=c.substring(1)),"0"===c&&(e=!1),b[c]===d?a:e?f(b[c],!0):b[c]})};var q=function(a){return a=parseInt(a,10),isNaN(a)?"00":(a=Math.max(0,Math.min(a,255)).toString(16),a.length<2?"0"+a:a)},r=function(a){var b;return a=a||"#000",(b=a.match(/rgb\((\d{1,3}),\s*?(\d{1,3}),\s*?(\d{1,3})\)/i))?"#"+q(b[1])+q(b[2]-0)+q(b[3]-0):(b=a.match(/#([0-f])([0-f])([0-f])\s*?$/i))?"#"+b[1]+b[1]+b[2]+b[2]+b[3]+b[3]:a},s={b:{tags:{b:null,strong:null},styles:{"font-weight":["bold","bolder","401","700","800","900"]},format:"[b]{0}[/b]",html:"{0}"},i:{tags:{i:null,em:null},styles:{"font-style":["italic","oblique"]},format:"[i]{0}[/i]",html:"{0}"},u:{tags:{u:null},styles:{"text-decoration":["underline"]},format:"[u]{0}[/u]",html:"{0}"},s:{tags:{s:null,strike:null},styles:{"text-decoration":["line-through"]},format:"[s]{0}[/s]",html:"{0}"},sub:{tags:{sub:null},format:"[sub]{0}[/sub]",html:"{0}"},sup:{tags:{sup:null},format:"[sup]{0}[/sup]",html:"{0}"},font:{tags:{font:{face:null}},styles:{"font-family":null},quoteType:p.QuoteType.never,format:function(a,b){var c;return a.is("font")&&(c=a.attr("face"))||(c=a.css("font-family")),"[font="+l(c)+"]"+b+"[/font]"},html:'{0}'},size:{tags:{font:{size:null}},styles:{"font-size":null},format:function(a,b){var c=a.attr("size"),d=2;return c||(c=a.css("fontSize")),c.indexOf("px")>-1?(c=c.replace("px","")-0,12>c&&(d=1),c>15&&(d=3),c>17&&(d=4),c>23&&(d=5),c>31&&(d=6),c>47&&(d=7)):d=c,"[size="+d+"]"+b+"[/size]"},html:'{!0}'},color:{tags:{font:{color:null}},styles:{color:null},quoteType:p.QuoteType.never,format:function(a,b){var c;return a.is("font")&&(c=a.attr("color"))||(c=a[0].style.color||a.css("color")),"[color="+r(c)+"]"+b+"[/color]"},html:function(a,b,c){return''+c+""}},ul:{tags:{ul:null},breakStart:!0,isInline:!1,skipLastLineBreak:!0,format:"[ul]{0}[/ul]",html:"
      {0}
    "},list:{breakStart:!0,isInline:!1,skipLastLineBreak:!0,html:"
      {0}
    "},ol:{tags:{ol:null},breakStart:!0,isInline:!1,skipLastLineBreak:!0,format:"[ol]{0}[/ol]",html:"
      {0}
    "},li:{tags:{li:null},isInline:!1,closedBy:["/ul","/ol","/list","*","li"],format:"[li]{0}[/li]",html:"
  • {0}
  • "},"*":{isInline:!1,closedBy:["/ul","/ol","/list","*","li"],html:"
  • {0}
  • "},table:{tags:{table:null},isInline:!1,isHtmlInline:!0,skipLastLineBreak:!0,format:"[table]{0}[/table]",html:"
    {0}
    "},tr:{tags:{tr:null},isInline:!1,skipLastLineBreak:!0,format:"[tr]{0}[/tr]",html:"{0}"},th:{tags:{th:null},allowsEmpty:!0,isInline:!1,format:"[th]{0}[/th]",html:"{0}"},td:{tags:{td:null},allowsEmpty:!0,isInline:!1,format:"[td]{0}[/td]",html:"{0}"},emoticon:{allowsEmpty:!0,tags:{img:{src:null,"data-sceditor-emoticon":null}},format:function(a,b){return a.data("sceditor-emoticon")+b},html:"{0}"},hr:{tags:{hr:null},allowsEmpty:!0,isSelfClosing:!0,isInline:!1,format:"[hr]{0}",html:"
    "},img:{allowsEmpty:!0,tags:{img:{src:null}},allowedChildren:["#"],quoteType:p.QuoteType.never,format:function(a,b){var c,d,e="",f=a[0],g=function(a){return f.style?f.style[a]:null};return a.attr("data-sceditor-emoticon")?b:(c=a.attr("width")||g("width"),d=a.attr("height")||g("height"),(f.complete&&(c||d)||c&&d)&&(e="="+a.width()+"x"+a.height()),"[img"+e+"]"+a.attr("src")+"[/img]")},html:function(a,b,c){var d,e,h,i,j="";return e=b.width,h=b.height,b.defaultattr&&(i=b.defaultattr.split(/x/i),e=i[0],h=2===i.length?i[1]:i[0]),e!==d&&(j+=' width="'+f(e,!0)+'"'),h!==d&&(j+=' height="'+f(h,!0)+'"'),"'}},url:{allowsEmpty:!0,tags:{a:{href:null}},quoteType:p.QuoteType.never,format:function(a,b){var c=a.attr("href");return"mailto:"===c.substr(0,7)?'[email="'+c.substr(7)+'"]'+b+"[/email]":"[url="+c+"]"+b+"[/url]"},html:function(a,b,c){return b.defaultattr=f(b.defaultattr,!0)||c,''+c+""}},email:{quoteType:p.QuoteType.never,html:function(a,b,c){return''+c+""}},quote:{tags:{blockquote:null},isInline:!1,quoteType:p.QuoteType.never,format:function(b,c){var d="",e=a(b),f=e.children("cite").first();return(1===f.length||e.data("author"))&&(d=f.text()||e.data("author"),e.data("author",d),f.remove(),c=this.elementToBbcode(a(b)),d="="+d.replace(/(^\s+|\s+$)/g,""),e.prepend(f)),"[quote"+d+"]"+c+"[/quote]"},html:function(a,b,c){return b.defaultattr&&(c=""+f(b.defaultattr)+""+c),"
    "+c+"
    "}},code:{tags:{code:null},isInline:!1,allowedChildren:["#","#newline"],format:"[code]{0}[/code]",html:"{0}"},left:{styles:{"text-align":["left","-webkit-left","-moz-left","-khtml-left"]},isInline:!1,format:"[left]{0}[/left]",html:'
    {0}
    '},center:{styles:{"text-align":["center","-webkit-center","-moz-center","-khtml-center"]},isInline:!1,format:"[center]{0}[/center]",html:'
    {0}
    '},right:{styles:{"text-align":["right","-webkit-right","-moz-right","-khtml-right"]},isInline:!1,format:"[right]{0}[/right]",html:'
    {0}
    '},justify:{styles:{"text-align":["justify","-webkit-justify","-moz-justify","-khtml-justify"]},isInline:!1,format:"[justify]{0}[/justify]",html:'
    {0}
    '},youtube:{allowsEmpty:!0,tags:{iframe:{"data-youtube-id":null}},format:function(a,b){return a=a.attr("data-youtube-id"),a?"[youtube]"+a+"[/youtube]":b},html:''},rtl:{styles:{direction:["rtl"]},format:"[rtl]{0}[/rtl]",html:'
    {0}
    '},ltr:{styles:{direction:["ltr"]},format:"[ltr]{0}[/ltr]",html:'
    {0}
    '},ignore:{}};e.bbcode.bbcode={get:function(a){return s[a]||null},set:function(b,c){return b&&c?(c=a.extend(s[b]||{},c),c.remove=function(){delete s[b]},s[b]=c,this):!1},rename:function(a,b){return a in s?(s[b]=s[a],delete s[a],this):!1},remove:function(a){return a in s&&delete s[a],this}},a.fn.sceditorBBCodePlugin=function(b){return b=b||{},a.isPlainObject(b)&&(b.plugins=(b.plugins||"")+"bbcode"),this.sceditor(b)},e.bbcode.normaliseColour=r,e.bbcode.formatString=m,e.bbcode.stripQuotes=l,e.bbcode.bbcodes=s,d.BBCodeParser=p}(jQuery,window,document); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_plugins/format.js b/html/forums/jscripts/sceditor/editor_plugins/format.js deleted file mode 100644 index 5072de2..0000000 --- a/html/forums/jscripts/sceditor/editor_plugins/format.js +++ /dev/null @@ -1,2 +0,0 @@ -/* SCEditor v1.4.7 | (C) 2015, Sam Clarke | sceditor.com/license */ -!function(a){"use strict";a.sceditor.plugins.format=function(){var b,c,d=this,e={p:"Paragraph",h1:"Heading 1",h2:"Heading 2",h3:"Heading 3",h4:"Heading 4",h5:"Heading 5",h6:"Heading 6",address:"Address",pre:"Preformatted Text"};d.init=function(){var b=this.opts,d=b.paragraphformat;b.plugins&&b.plugins.indexOf("bbcode")>-1||(d&&(d.tags&&(e=d.tags),d.excludeTags&&a.each(d.excludeTags,function(a,b){delete e[b]})),this.commands.format||(this.commands.format={exec:c,txtExec:c,tooltip:"Format Paragraph"}),b.toolbar===a.sceditor.defaultOptions.toolbar&&(b.toolbar=b.toolbar.replace(",color,",",color,format,")))},b=function(a,b){a.sourceMode()?a.insert("<"+b+">",""):a.execCommand("formatblock","<"+b+">")},c=function(c){var d=this,f=a("
    ");a.each(e,function(c,e){a(''+(e.name||e)+"").click(function(){return d.closeDropDown(!0),e.exec?e.exec(d):b(d,c),!1}).appendTo(f)}),d.createDropDown(c,"format",f)}}}(jQuery); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_plugins/index.html b/html/forums/jscripts/sceditor/editor_plugins/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/jscripts/sceditor/editor_plugins/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_plugins/undo.js b/html/forums/jscripts/sceditor/editor_plugins/undo.js deleted file mode 100644 index 541d7cb..0000000 --- a/html/forums/jscripts/sceditor/editor_plugins/undo.js +++ /dev/null @@ -1,2 +0,0 @@ -/* SCEditor v1.4.7 | (C) 2015, Sam Clarke | sceditor.com/license */ -!function(a){"use strict";a.sceditor.plugins.undo=function(){var a,b,c=this,d=0,e=50,f=[],g=[],h=!1,i=function(c){h=!0,b=c.value,a.sourceMode(c.sourceMode),a.val(c.value,!1),a.focus(),c.sourceMode?a.sourceEditorCaret(c.caret):a.getRangeHelper().restoreRange(),h=!1},j=function(a,b){var c,d,e,f,g=a.length,h=b.length,i=Math.max(g,h);for(c=0;i>c&&a.charAt(c)===b.charAt(c);c++);for(e=h>g?h-g:0,f=g>h?g-h:0,d=i-1;d>=0&&a.charAt(d-e)===b.charAt(d-f);d--);return d-c+1};c.init=function(){a=this,e=a.undoLimit||e,a.addShortcut("ctrl+z",c.undo),a.addShortcut("ctrl+shift+z",c.redo),a.addShortcut("ctrl+y",c.redo)},c.undo=function(){var b=g.pop(),c=a.val(null,!1);return b&&!f.length&&c===b.value&&(b=g.pop()),b&&(f.length||f.push({caret:a.sourceEditorCaret(),sourceMode:a.sourceMode(),value:c}),f.push(b),i(b)),!1},c.redo=function(){var a=f.pop();return g.length||(g.push(a),a=f.pop()),a&&(g.push(a),i(a)),!1},c.signalReady=function(){var c=a.val(null,!1);b=c,g.push({caret:this.sourceEditorCaret(),sourceMode:this.sourceMode(),value:c})},c.signalValuechangedEvent=function(c){var i=c.rawValue;e>0&&g.length>e&&g.shift(),!h&&b&&b!==i&&(f.length=0,d+=j(b,i),20>d||50>d&&!/\s$/g.test(c.rawValue)||(g.push({caret:a.sourceEditorCaret(),sourceMode:a.sourceMode(),value:i}),d=0,b=i))}}}(jQuery); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_plugins/xhtml.js b/html/forums/jscripts/sceditor/editor_plugins/xhtml.js deleted file mode 100644 index 100dc95..0000000 --- a/html/forums/jscripts/sceditor/editor_plugins/xhtml.js +++ /dev/null @@ -1,2 +0,0 @@ -/* SCEditor v1.4.7 | (C) 2015, Sam Clarke | sceditor.com/license */ -!function(a){"use strict";var b=a.sceditor,c=b.plugins,d=b.dom,e={bold:{txtExec:["",""]},italic:{txtExec:["",""]},underline:{txtExec:['',""]},strike:{txtExec:['',""]},subscript:{txtExec:["",""]},superscript:{txtExec:["",""]},left:{txtExec:['
    ',"
    "]},center:{txtExec:['
    ',"
    "]},right:{txtExec:['
    ',"
    "]},justify:{txtExec:['
    ',"
    "]},font:{txtExec:function(a){var c=this;b.command.get("font")._dropDown(c,a,function(a){c.insertText('',"")})}},size:{txtExec:function(a){var c=this;b.command.get("size")._dropDown(c,a,function(a){c.insertText('',"")})}},color:{txtExec:function(a){var c=this;b.command.get("color")._dropDown(c,a,function(a){c.insertText('',"")})}},bulletlist:{txtExec:["
    • ","
    "]},orderedlist:{txtExec:["
    1. ","
    "]},table:{txtExec:["
    ","
    "]},horizontalrule:{txtExec:["
    "]},code:{txtExec:["",""]},image:{txtExec:function(a,b){var c=prompt(this._("Enter the image URL:"),b);c&&this.insertText('')}},email:{txtExec:function(a,b){var c,d,e=b&&b.indexOf("@")>-1?null:b;c=prompt(this._("Enter the e-mail address:"),e?"":b),d=prompt(this._("Enter the displayed text:"),e||c)||c,c&&this.insertText(''+d+"")}},link:{txtExec:function(a,b){var c=b&&b.indexOf("http://")>-1?null:b,d=prompt(this._("Enter URL:"),c?"http://":b),e=prompt(this._("Enter the displayed text:"),c||d)||d;d&&this.insertText(''+e+"")}},quote:{txtExec:["
    ","
    "]},youtube:{txtExec:function(a){var c=this;b.command.get("youtube")._dropDown(c,a,function(a){c.insertText('')})}},rtl:{txtExec:['
    ',"
    "]},ltr:{txtExec:['
    ',"
    "]}};b.XHTMLSerializer=function(){var c,e,f,g,h,i,j,k,l,m,n=this,o={indentStr:" "},p=[],q=0;c=function(a){var b={"&":"&","<":"<",">":">",'"':"""};return a?a.replace(/[&<>"]/g,function(a){return b[a]||a}):""},e=function(a){return a.replace(/[\r\n]/," ").replace(/[^\S|\u00A0]+/g," ")},n.serialize=function(a,b){if(p=[],b)for(a=a.firstChild;a;)f(a),a=a.nextSibling;else f(a);return p.join("")},f=function(a,b){switch(a.nodeType){case 1:var c=a.nodeName.toLowerCase();"!"===c?j(a):h(a,b);break;case 3:k(a,b);break;case 4:i(a);break;case 8:j(a);break;case 9:case 11:g(a);break;case 2:case 5:case 6:case 7:case 10:case 12:}},g=function(a){for(var b=a.firstChild;b;)f(b),b=b.nextSibling},h=function(e,g){var h,i,j,k=e.nodeName.toLowerCase(),n="iframe"===k,o=e.attributes.length,p=e.firstChild,r=g||/pre(?:\-wrap)?$/i.test(a(e).css("whiteSpace")),s=!e.firstChild&&!d.canHaveChildren(e)&&!n;if(!a(e).hasClass("sceditor-ignore")){for(l("<"+k,!g&&m(e));o--;)i=e.attributes[o],(!b.ie||i.specified||"input"===k&&"value"===i.name)&&(j=b.ie<8&&/style/i.test(i.name)?e.style.cssText:i.value,l(" "+i.name.toLowerCase()+'="'+c(j)+'"',!1));for(l(s?" />":">",!1),n||(h=p);h;)q++,f(h,r),h=h.nextSibling,q--;s||l("",!r&&!n&&m(e)&&p&&m(p))}},i=function(a){l("")},j=function(a){l("")},k=function(a,b){var d=a.nodeValue;b||(d=e(d)),d&&l(c(d),!b&&m(a))},l=function(a,b){var c=q;if(b!==!1)for(p.length&&p.push("\n");c--;)p.push(o.indentStr);p.push(a)},m=function(a){var b=a.previousSibling;return 1!==a.nodeType&&b?!d.isInline(b):b||d.isInline(a.parentNode)?!d.isInline(a):!0}},c.xhtml=function(){var f,g,h,i,j,k,l,m=this,n={},o={};m.init=function(){a.isEmptyObject(c.xhtml.converters||{})||a.each(c.xhtml.converters,function(b,c){a.each(c.tags,function(a){n[a]||(n[a]=[]),n[a].push(c)})}),this.commands=a.extend(!0,{},e,this.commands)},m.signalToSource=function(a,c){return c=c.jquery?c[0]:c,f(c),i(c),k(c),l(c),(new b.XHTMLSerializer).serialize(c,!0)},m.signalToWysiwyg=function(a){return a},m.convertTagTo=d.convertElement,g=function(c,d,e){n[c]&&a.each(n[c],function(f,g){g.tags[c]?a.each(g.tags[c],function(c,f){e.getAttributeNode&&(c=e.getAttributeNode(c),!c||b.ie<8&&!c.specified||f&&a.inArray(c.value,f)<0||g.conv.call(m,e,d))}):g.conv&&g.conv.call(m,e,d)})},f=function(b){d.traverse(b,function(b){var c=a(b),d=b.nodeName.toLowerCase();g("*",c,b),g(d,c,b)},!0)},h=function(a,b){var c=a.childNodes,e=a.nodeName.toLowerCase(),f=a.nodeValue,g=c.length;if(b&&"br"===e)return!0;if(!d.canHaveChildren(a))return!1;if(f&&/\S|\u00A0/.test(f))return!1;for(;g--;)if(!h(c[g],!a.previousSibling&&!a.nextSibling))return!1;return!0},i=function(b){d.traverse(b,function(b){var e,f=b.nodeName.toLowerCase(),g="iframe"!==f&&h(b),i=b.parentNode,j=b.nodeType,k=!d.isInline(b),l=b.previousSibling,m=b.nextSibling,n=b.ownerDocument,o=c.xhtml.allowedTags,p=c.xhtml.disallowedTags;if(3!==j&&(4===j?f="!cdata":("!"===f||8===j)&&(f="!comment"),g?e=!0:o&&o.length?e=a.inArray(f,o)<0:p&&p.length&&(e=a.inArray(f,p)>-1),e)){if(!g){for(k&&l&&d.isInline(l)&&i.insertBefore(n.createTextNode(" "),b);b.firstChild;)i.insertBefore(b.firstChild,m);k&&m&&d.isInline(m)&&i.insertBefore(n.createTextNode(" "),m)}i.removeChild(b)}},!0)},j=function(b,c){var d={};return b&&a.extend(d,b),c?(a.each(c,function(b,c){a.isArray(c)?d[b]=a.merge(d[b]||[],c):d[b]||(d[b]=null)}),d):d},l=function(b){var c=[],e=function(){c.length&&(a("

    ",b.ownerDocument).insertBefore(c[0]).append(c),c=[])};d.removeWhiteSpace(b);for(var f=b.firstChild;f;)d.isInline(f)&&!a(f).is(".sceditor-ignore")?c.push(f):e(),f=f.nextSibling;e()},k=function(b){var e,f,g,h,i,k,l=c.xhtml.allowedAttribs,m=l&&!a.isEmptyObject(l),n=c.xhtml.disallowedAttribs,p=n&&!a.isEmptyObject(n);o={},d.traverse(b,function(b){if(b.attributes&&(e=b.nodeName.toLowerCase(),h=b.attributes.length))for(o[e]||(o[e]=m?j(l["*"],l[e]):j(n["*"],n[e]));h--;)f=b.attributes[h],g=f.name,i=o[e][g],k=!1,m?k=null!==i&&(!a.isArray(i)||a.inArray(f.value,i)<0):p&&(k=null===i||a.isArray(i)&&a.inArray(f.value,i)>-1),k&&b.removeAttribute(g)})}},c.xhtml.converters=[{tags:{"*":{width:null}},conv:function(a,b){b.css("width",b.attr("width")).removeAttr("width")}},{tags:{"*":{height:null}},conv:function(a,b){b.css("height",b.attr("height")).removeAttr("height")}},{tags:{li:{value:null}},conv:function(a,c){b.ie<8?a.removeAttribute("value"):c.removeAttr("value")}},{tags:{"*":{text:null}},conv:function(a,b){b.css("color",b.attr("text")).removeAttr("text")}},{tags:{"*":{color:null}},conv:function(a,b){b.css("color",b.attr("color")).removeAttr("color")}},{tags:{"*":{face:null}},conv:function(a,b){b.css("fontFamily",b.attr("face")).removeAttr("face")}},{tags:{"*":{align:null}},conv:function(a,b){b.css("textAlign",b.attr("align")).removeAttr("align")}},{tags:{"*":{border:null}},conv:function(a,b){b.css("borderWidth",b.attr("border")).removeAttr("border")}},{tags:{applet:{name:null},img:{name:null},layer:{name:null},map:{name:null},object:{name:null},param:{name:null}},conv:function(a,b){b.attr("id")||b.attr("id",b.attr("name")),b.removeAttr("name")}},{tags:{"*":{vspace:null}},conv:function(a,b){b.css("marginTop",b.attr("vspace")-0).css("marginBottom",b.attr("vspace")-0).removeAttr("vspace")}},{tags:{"*":{hspace:null}},conv:function(a,b){b.css("marginLeft",b.attr("hspace")-0).css("marginRight",b.attr("hspace")-0).removeAttr("hspace")}},{tags:{hr:{noshade:null}},conv:function(a,b){b.css("borderStyle","solid").removeAttr("noshade")}},{tags:{"*":{nowrap:null}},conv:function(a,b){b.css("white-space","nowrap").removeAttr("nowrap")}},{tags:{big:null},conv:function(b){a(this.convertTagTo(b,"span")).css("fontSize","larger")}},{tags:{small:null},conv:function(b){a(this.convertTagTo(b,"span")).css("fontSize","smaller")}},{tags:{b:null},conv:function(b){a(this.convertTagTo(b,"strong"))}},{tags:{u:null},conv:function(b){a(this.convertTagTo(b,"span")).css("textDecoration","underline")}},{tags:{i:null},conv:function(b){a(this.convertTagTo(b,"em"))}},{tags:{s:null,strike:null},conv:function(b){a(this.convertTagTo(b,"span")).css("textDecoration","line-through")}},{tags:{dir:null},conv:function(a){this.convertTagTo(a,"ul")}},{tags:{center:null},conv:function(b){a(this.convertTagTo(b,"div")).css("textAlign","center")}},{tags:{font:{size:null}},conv:function(a,c){var d=c.css("fontSize"),e=d;"+0"!==e&&(b.ie<9&&(e=10,d>1&&(e=13),d>2&&(e=16),d>3&&(e=18),d>4&&(e=24),d>5&&(e=32),d>6&&(e=48)),c.css("fontSize",e)),c.removeAttr("size")}},{tags:{font:null},conv:function(a){this.convertTagTo(a,"span")}},{tags:{"*":{type:["_moz"]}},conv:function(a,b){b.removeAttr("type")}},{tags:{"*":{_moz_dirty:null}},conv:function(a,b){b.removeAttr("_moz_dirty")}},{tags:{"*":{_moz_editor_bogus_node:null}},conv:function(a,b){b.remove()}}],c.xhtml.allowedAttribs={},c.xhtml.disallowedAttribs={},c.xhtml.allowedTags=[],c.xhtml.disallowedTags=[]}(jQuery); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/buttons.css b/html/forums/jscripts/sceditor/editor_themes/buttons.css deleted file mode 100644 index b1f7213..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/buttons.css +++ /dev/null @@ -1,763 +0,0 @@ -/** - * Buttons theme - * - * Copyright (C) 2013, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/) - * Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/) - */ -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -@font-face { - font-family: 'Monocons'; - src: url('monocons/monocons.eot'); - src: url('monocons/monocons.eot?#iefix') format('embedded-opentype'), url('monocons/monocons.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} -.sceditor-button div:before, -div.sceditor-grip { - font-family: 'Monocons'; - font-size: 16px; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; -} -.sceditor-button-youtube div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e000'); -} -.sceditor-button-unlink div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e001'); -} -.sceditor-button-underline div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e002'); -} -.sceditor-button-time div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e003'); -} -.sceditor-button-table div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e004'); -} -.sceditor-button-superscript div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e005'); -} -.sceditor-button-subscript div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e006'); -} -.sceditor-button-strike div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e007'); -} -.sceditor-button-source div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e008'); -} -.sceditor-button-size div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e009'); -} -.sceditor-button-rtl div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00a'); -} -.sceditor-button-right div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00b'); -} -.sceditor-button-removeformat div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00c'); -} -.sceditor-button-quote div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00d'); -} -.sceditor-button-print div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00e'); -} -.sceditor-button-pastetext div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00f'); -} -.sceditor-button-paste div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e010'); -} -.sceditor-button-orderedlist div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e011'); -} -.sceditor-button-maximize div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e012'); -} -.sceditor-button-ltr div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e013'); -} -.sceditor-button-link div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e014'); -} -.sceditor-button-left div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e015'); -} -.sceditor-button-justify div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e016'); -} -.sceditor-button-italic div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e017'); -} -.sceditor-button-image div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e018'); -} -.sceditor-button-horizontalrule div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e019'); -} -.sceditor-button-format div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01c'); -} -.sceditor-button-font div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01d'); -} -.sceditor-button-emoticon div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01e'); -} -.sceditor-button-email div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01f'); -} -.sceditor-button-bold div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e020'); -} -.sceditor-button-date div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e021'); -} -.sceditor-button-cut div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e022'); -} -.sceditor-button-copy div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e023'); -} -.sceditor-button-color div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e024'); -} -.sceditor-button-code div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e025'); -} -.sceditor-button-center div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e026'); -} -.sceditor-button-bulletlist div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e027'); -} -div.sceditor-grip { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01b'); -} -.rtl div.sceditor-grip { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01a'); -} -.sceditor-button-youtube div:before { - content: "\e000"; -} -.sceditor-button-unlink div:before { - content: "\e001"; -} -.sceditor-button-underline div:before { - content: "\e002"; -} -.sceditor-button-time div:before { - content: "\e003"; -} -.sceditor-button-table div:before { - content: "\e004"; -} -.sceditor-button-superscript div:before { - content: "\e005"; -} -.sceditor-button-subscript div:before { - content: "\e006"; -} -.sceditor-button-strike div:before { - content: "\e007"; -} -.sceditor-button-source div:before { - content: "\e008"; -} -.sceditor-button-size div:before { - content: "\e009"; -} -.sceditor-button-rtl div:before { - content: "\e00a"; -} -.sceditor-button-right div:before { - content: "\e00b"; -} -.sceditor-button-removeformat div:before { - content: "\e00c"; -} -.sceditor-button-quote div:before { - content: "\e00d"; -} -.sceditor-button-print div:before { - content: "\e00e"; -} -.sceditor-button-pastetext div:before { - content: "\e00f"; -} -.sceditor-button-paste div:before { - content: "\e010"; -} -.sceditor-button-orderedlist div:before { - content: "\e011"; -} -.sceditor-button-maximize div:before { - content: "\e012"; -} -.sceditor-button-ltr div:before { - content: "\e013"; -} -.sceditor-button-link div:before { - content: "\e014"; -} -.sceditor-button-left div:before { - content: "\e015"; -} -.sceditor-button-justify div:before { - content: "\e016"; -} -.sceditor-button-italic div:before { - content: "\e017"; -} -.sceditor-button-image div:before { - content: "\e018"; -} -.sceditor-button-horizontalrule div:before { - content: "\e019"; -} -.sceditor-button-format div:before { - content: "\e01c"; -} -.sceditor-button-font div:before { - content: "\e01d"; -} -.sceditor-button-emoticon div:before { - content: "\e01e"; -} -.sceditor-button-email div:before { - content: "\e01f"; -} -.sceditor-button-bold div:before { - content: "\e020"; -} -.sceditor-button-date div:before { - content: "\e021"; -} -.sceditor-button-cut div:before { - content: "\e022"; -} -.sceditor-button-copy div:before { - content: "\e023"; -} -.sceditor-button-color div:before { - content: "\e024"; -} -.sceditor-button-code div:before { - content: "\e025"; -} -.sceditor-button-center div:before { - content: "\e026"; -} -.sceditor-button-bulletlist div:before { - content: "\e027"; -} -div.sceditor-grip:before { - content: "\e01b"; -} -.rtl div.sceditor-grip:before { - content: "\e01a"; -} -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -/*--------------------------------------------------- - LESS Elements 0.7 - --------------------------------------------------- - A set of useful LESS mixins - More info at: http://lesselements.com - ---------------------------------------------------*/ -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, -.sceditor-container div, -div.sceditor-dropdown, -div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, -.sceditor-container textarea { - line-height: 1; - border: 0; - outline: none; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 0; - margin: 5px; - resize: none; - background: #fff; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 99% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 10; - opacity: 0.3; -} -.ie6 div.sceditor-resize-cover, -.ie7 div.sceditor-resize-cover, -.ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100% !important; - width: 100% !important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - z-index: 2000; -} -html.sceditor-maximize, -body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -/** - * Dropdown styleing - */ -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 4000; - padding: 10px; - line-height: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, -div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, -div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, -div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, -div.sceditor-fontsize-picker, -div.sceditor-format { - padding: 6px 0; -} -div.sceditor-emoticons, -div.sceditor-more-emoticons, -div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-emoticons img, -.sceditor-more-emoticons img { - padding: 0; - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-dropdown a:hover { - background: #eee; -} -.sceditor-fontsize-option, -.sceditor-font-option, -.sceditor-format a { - display: block; - padding: 7px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 7px 13px; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -/** - * Toolbar styleing - */ -div.sceditor-toolbar { - overflow: hidden; - padding: 3px 5px 2px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #ddd; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #aaa; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, -.ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - /* Needed for Safari 5? */ - - text-indent: -9999px; -} -.ie .sceditor-button { - text-indent: 0; -} -.ie6 .sceditor-button, -.ie7 .sceditor-button { - float: none !important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, -.sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: 0.3; -} -.text .sceditor-button, -.text .sceditor-button div, -.sceditor-button.text, -.sceditor-button.text div, -.text-icon .sceditor-button, -.text-icon .sceditor-button div, -.sceditor-button.text-icon, -.sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; - text-indent: 0; -} -.text .sceditor-button div, -.sceditor-button.text div { - padding: 0 2px; - background: none; -} -.text-icon .sceditor-button div, -.sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl div.sceditor-toolbar { - text-align: right; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} -.ie7 .sceditor-button div, -.ie6 .sceditor-button div { - font-family: 'Monocons'; - overflow: visible; - font-size: 16px; - line-height: 1; - text-indent: 0; -} -div.sceditor-grip { - height: 16px; - width: 16px; -} -.sceditor-button div:before, -div.sceditor-grip:before { - text-indent: 0; - line-height: 17px; - width: 16px; - height: 16px; - display: block; - color: #333; - text-shadow: 0 1px #fff; -} -.sceditor-container { - border-color: #111; -} -div.sceditor-toolbar { - color: #fff; - background: #2b2b2b; - border-color: #111; -} -div.sceditor-group { - margin: 2px 5px 2px 0; - border: 0; - background: #777777; - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc3Nzc3NyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQwJSIgc3RvcC1jb2xvcj0iIzU1NTU1NSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0NDQ0NDQiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); - background: -moz-linear-gradient(top, #777777 0%, #555555 40%, #444444 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #777777), color-stop(40%, #555555), color-stop(100%, #444444)); - background: -webkit-linear-gradient(top, #777777 0%, #555555 40%, #444444 100%); - background: -o-linear-gradient(top, #777777 0%, #555555 40%, #444444 100%); - background: -ms-linear-gradient(top, #777777 0%, #555555 40%, #444444 100%); - background: linear-gradient(to bottom, #777777 0%, #555555 40%, #444444 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#777777', endColorstr='#444444', GradientType=0); -} -.sceditor-button div:before, -div.sceditor-grip:before { - color: #ddd; - text-shadow: 0 1px #000; -} -.sceditor-container.sourceMode { - background: #1f1f1f; -} -.sceditor-container textarea { - color: #fff; - background: #1f1f1f; -} - -/* Additional buttons (for MyBB) */ -.sceditor-button-video div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e000'); -} - -.sceditor-button-video div:before { - content: "\e000"; -} - -.sceditor-button-php div { - *zoom: expression(this.runtimeStyle['zoom'] = '0', this.innerHTML = '\24C5'); -} - -.sceditor-button-php div:before { - content: "\24C5"; - font-size: 17px; - line-height: 0.85; -} - -.sceditor-button-php:hover { - text-decoration: none; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/default.css b/html/forums/jscripts/sceditor/editor_themes/default.css deleted file mode 100644 index b1a1f0b..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/default.css +++ /dev/null @@ -1,559 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -div.sceditor-grip, -.sceditor-button div { - background-image: url('famfamfam.png'); - background-repeat: no-repeat; - width: 16px; - height: 16px; -} -.sceditor-button-youtube div { - background-position: 0px 0px; -} -.sceditor-button-link div { - background-position: 0px -16px; -} -.sceditor-button-unlink div { - background-position: 0px -32px; -} -.sceditor-button-underline div { - background-position: 0px -48px; -} -.sceditor-button-time div { - background-position: 0px -64px; -} -.sceditor-button-table div { - background-position: 0px -80px; -} -.sceditor-button-superscript div { - background-position: 0px -96px; -} -.sceditor-button-subscript div { - background-position: 0px -112px; -} -.sceditor-button-strike div { - background-position: 0px -128px; -} -.sceditor-button-source div { - background-position: 0px -144px; -} -.sceditor-button-size div { - background-position: 0px -160px; -} -.sceditor-button-rtl div { - background-position: 0px -176px; -} -.sceditor-button-right div { - background-position: 0px -192px; -} -.sceditor-button-removeformat div { - background-position: 0px -208px; -} -.sceditor-button-quote div { - background-position: 0px -224px; -} -.sceditor-button-print div { - background-position: 0px -240px; -} -.sceditor-button-pastetext div { - background-position: 0px -256px; -} -.sceditor-button-paste div { - background-position: 0px -272px; -} -.sceditor-button-orderedlist div { - background-position: 0px -288px; -} -.sceditor-button-maximize div { - background-position: 0px -304px; -} -.sceditor-button-ltr div { - background-position: 0px -320px; -} -.sceditor-button-left div { - background-position: 0px -336px; -} -.sceditor-button-justify div { - background-position: 0px -352px; -} -.sceditor-button-italic div { - background-position: 0px -368px; -} -.sceditor-button-image div { - background-position: 0px -384px; -} -.sceditor-button-horizontalrule div { - background-position: 0px -400px; -} -.sceditor-button-format div { - background-position: 0px -416px; -} -.sceditor-button-font div { - background-position: 0px -432px; -} -.sceditor-button-emoticon div { - background-position: 0px -448px; -} -.sceditor-button-email div { - background-position: 0px -464px; -} -.sceditor-button-date div { - background-position: 0px -480px; -} -.sceditor-button-cut div { - background-position: 0px -496px; -} -.sceditor-button-copy div { - background-position: 0px -512px; -} -.sceditor-button-color div { - background-position: 0px -528px; -} -.sceditor-button-code div { - background-position: 0px -544px; -} -.sceditor-button-center div { - background-position: 0px -560px; -} -.sceditor-button-bulletlist div { - background-position: 0px -576px; -} -.sceditor-button-bold div { - background-position: 0px -592px; -} -div.sceditor-grip { - background-position: 0px -608px; - width: 10px; - height: 10px; -} -.rtl div.sceditor-grip { - background-position: 0px -618px; - width: 10px; - height: 10px; -} -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -/*--------------------------------------------------- - LESS Elements 0.7 - --------------------------------------------------- - A set of useful LESS mixins - More info at: http://lesselements.com - ---------------------------------------------------*/ -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, -.sceditor-container div, -div.sceditor-dropdown, -div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, -.sceditor-container textarea { - line-height: 1; - border: 0; - outline: none; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 0; - margin: 5px; - resize: none; - background: #fff; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 99% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 10; - opacity: 0.3; -} -.ie6 div.sceditor-resize-cover, -.ie7 div.sceditor-resize-cover, -.ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100% !important; - width: 100% !important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - z-index: 2000; -} -html.sceditor-maximize, -body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -/** - * Dropdown styleing - */ -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 4000; - padding: 10px; - line-height: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, -div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, -div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, -div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, -div.sceditor-fontsize-picker, -div.sceditor-format { - padding: 6px 0; -} -div.sceditor-emoticons, -div.sceditor-more-emoticons, -div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-emoticons img, -.sceditor-more-emoticons img { - padding: 0; - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-dropdown a:hover { - background: #eee; -} -.sceditor-fontsize-option, -.sceditor-font-option, -.sceditor-format a { - display: block; - padding: 7px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 7px 13px; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -/** - * Toolbar styleing - */ -div.sceditor-toolbar { - overflow: hidden; - padding: 3px 5px 2px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #ddd; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #aaa; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, -.ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - /* Needed for Safari 5? */ - - text-indent: -9999px; -} -.ie .sceditor-button { - text-indent: 0; -} -.ie6 .sceditor-button, -.ie7 .sceditor-button { - float: none !important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, -.sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: 0.3; -} -.text .sceditor-button, -.text .sceditor-button div, -.sceditor-button.text, -.sceditor-button.text div, -.text-icon .sceditor-button, -.text-icon .sceditor-button div, -.sceditor-button.text-icon, -.sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; - text-indent: 0; -} -.text .sceditor-button div, -.sceditor-button.text div { - padding: 0 2px; - background: none; -} -.text-icon .sceditor-button div, -.sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl div.sceditor-toolbar { - text-align: right; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} - -/* Additional buttons (for MyBB) */ -.sceditor-button-video div { - - background-image: url(video.png); - -} -.sceditor-button-php div { - - background-image: url(php.png); - -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/alien.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/alien.png deleted file mode 100644 index 1f61c7ef2748091e45ead27e63ab7e8e1fd9d2c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmV;B0&o3^P)*kDPpj$Oal_&7M75Cr_S~-ELQFYpa@@oAvD3GaWvBShHr$ z5;^2%6CxXBxVdT5CRJ5c$?x|o7z_%C-EOxKI~)$JUAtD~GA5l6*)YSC)2C0%=kqBX z4l5dsDi(_gh-ssb6<1eR>%f5nVhm&Bg~<9CcAJltC=!Vv(aV=F6QGSga#~tiR8di( z&6_uiu{h#|6IZNQp|-X*R*@=8l9J=`cvN3sFQ?O~B}*eqD3s%t1IIUf9hrdFj%noJorG zXZ;ZaMeTCAbpQT+End7B*;E|KFNNaXx^d%1W=G2Q6$*tQ;e~K+T*R6+Ymn_Q^v(2^ zhZxRp+qR8Yz|E_pqXUSUh?P+$TEBihvP*`cx&AgI3}+a?%_m>P!-o&GYSk){LvFtR z!@-7~D_5@M7Fm_7R;zeToHKpo!Yg)8uk!YijoP34J7d3nS q{Q2*Jm^S+UN(ekn&I*Wg<$nd;OcOb#VVeg40000}h z!nNk(Pb2;zx(FNLl5i3e#A@Q)KtdK>M(icfwDnA&{tBS)I&XTf#bn+^;2g1uxY$$3 zvP%g&da0r3T6Z|m41t=#WC@P{Y?R-W`f{-zTAZlM0iC22AAX zQMoD|t3Qp$^LK=RGn6e;WS&9_97~)|RL=V_9uwsz*y}BDGzn;IhOOF!=|VjQcdPLC z%TeGg_i(Q-q3)rpgZlE9XNu;l&W;qI>olPAG`KoWRcbROdW`K;;lTItc<9Pgdbn2> zvMhv{xACWB*c%j?Bo#6lnyC&W+cUBJ4KdSyiC|fH;j8zBVWz?)!h9(*z;A8hkP5vk zQ}DvA!7M#r7Jjwiha_dGo|nJcRE`Ei8`H4#

    sjE(?pAx2xcw<)Xu?2oza|#jED1 zHDEeVgW=8TDE>BER1YP zMbEr=EO{o3g{E)zbpxD zKgZz3n}b+*q344=f6e>R7~7SO=^Pa=iKPNZl~#ysMH);W&BEA@Gz_drLf0R$Sn`yZ z-8^=9zIu9kjrtFK9gC68shHTCfvLk;EMRDyiHSYw7}=PD{w0Y*w)3@cP){GfdI3KU ze?AkAu0@F$TAPev5)5xh5##=)iRhUVhvpxm@!Mk|fj@8Dh_R@NdqDwyQnSZ@;NpDHjs1xn P00000NkvXXu0mjfueGsn diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/angry.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/angry.png deleted file mode 100644 index 08987d7e24331490e9a93f0b21fdb5c5902e9188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmV+n1M~ceP)&(BJ@RY+do@YGA09aF& zExi7m_yopDjOQ5D3?D&hD&utts|iI}G2_(-u1UuFHw)0US%z?f2BBItI({p~@6YGr zzAKZ!+wit42uZY#VPSN9^>i*mZ92^M88BxhSXz(iE*+u`YK-rZ;nRmQz}x=QXWeo_ z)y)?qjMV*HPMznSMo1nL;57ptGbFbO^A0BN)gjibMqs}T2j9%a&F94r@xFqPWJ!## zHoa4b*?v7Fmx(0sa!mijq>{r((rAMUz8&TG`Ei=*=Zr*Ac-kY^ry$m@!}%wqGnpXa zX~GD?WyHKqPwhg7Wf=ao2=`x>$fc)SR)F3!CEEe`gCFkf1G8&`^z!g|BURA&2&4wo3zPfJyCw#I7Z{OzPKQ zwq1p2RRw%oi!t<7E`GQ>g$rL6g{MDsRT6x=%Mhz$(oQwaLb7T|LZSf;=6lslrbMh( zhQO{;jQ&&r=et>W;F1I`JZ;*P~nPtBgu=)qUB;oDM-(7rN~FaZ%cQcii_rXq~~kWaE*kEVk48KI}Q z+UM}`-Kp??myd}*3o*$AlN*aDJ^EulhQ7#w?X66FaC_3~pTpws>)uNe@#6!jsCzjR z-cPdO`7jGL&!pq~JCkwGMG32aU#onu&ogQnL4wj$w(1AFru+pEDAX;nF)`Hu0000< KMNUMnLSTYd0DTAm diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/blink.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/blink.png deleted file mode 100644 index 96a1a8551df78bbf7b83a4167948a6fa6061d91c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmVt-RvY zuyEpN;&GyhuyRH$mqsD;rBn>&D&T6@!P%lk|MxQd@I(@BzbF!{ z4hZ6lCKavb*uO7Zp6Z{hlBjt_Q8q~wnuElzp0`J`&2iA9IOvvvE_1Byk zzS8=QjEe#@CIsirz=8#sw;(uYMqt_m--rR;E-mbp3RJ(8jB8F0TVi7cA(urGALqQ9 z2H%(w!C5oTI5KVzESSL|X>dpCX;;HqB*Qlk@Rfc*M2N!U@4X@l-ab8F1(yhkm*;;u z$yT2h&RPYQze~p*=SMKzpn`8$M~5y- z1=$R*-@`YcfxBLTjjVJ`ypix5Vb?^Klpl0p!T@Yb_rSD%pGms7Q7yK*RB%?xu=-6Z z+MeV$-6{&7&w4V6pNVf!i{Q8(m=YvY3?0d62V+|J`qc0=Dqzh|$I{11`0|!0CVWN| zo^bcYk+7CZ;cZp2?a(S{@Pw92xM-YKKf+`xcv}>(mq@VsbqZ!)i^rYkhJ!u5Uq9?m zetak%_EHHvO$xpxwi5q^Z&R@Fb^^Y%}F diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/blush.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/blush.png deleted file mode 100644 index 5a921678f6081da4fb2fcc356b164b3e8f0b0f85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7G_P)+69vfjxj7f#Cqa&%kTI^T2lxzm+6Q1QqKIoY}o|eBRcZG&6iiJ$-w2K%DT; zzX?D6lJf3X6~;~WR{}RFI%1)qLIzkHxPRxZT2?=BpU%|PTTBEP5HEy6@KsNBQo$3i zOy;C#|{Vl3n8%Mf&a48p(BXmh`1C{ zs*72BKs|e`Ro@*rSB-`m2&~<^OX=91)@s2zgUN**j{KL`KbwpO1+~jN9ytOl5NWYB zY&)=yZcX+CV6C~qy|!GnkvIdBD0a#S^vTr52>>t)-szOl*utPua)yn&#{hfI4eq#B zdk4&P!AuigzoRR;4zM z+VJkGpcs{)2~>qv2f%>2e`O=nJ%U977%UjzmEpX8b$2L)*Kg_p?<FwP>hgxP4Jb#q$~jZGdK9!x8)3hiwLw zR^Mw_J$0=XQ*R*x@q$kRzU)b+cwYP?=e;q0{^hXf_0^@(p0{b=m?2#wdMPYH7%?&M z+c?L^qdXH5nR|UL^@80K*a=t_0Qd=b6?kr`7wn48|4K;V7YRP=;s5{u07*qoM6N<$ Ef|75AivR!s diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/cheerful.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/cheerful.png deleted file mode 100644 index 5a04b02886842b90f2817c755add7237fa875b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmVkfsQ&aN zo8G*`0W31N>R{>61Dyt-!vIUW9_AJujI|m}7b`KEBtgnb4}AK9b+-^J60*#W*cH0Q z8^(GqENyz0u#C}zA*toGlroiLI644_|Kv=!6SiXE6Tf|EkLhwXXTdTOy!enaUF*-m z_idDY6O~`C#CVznJx6`;;~Tbu^f9q;NysWMDpf(0w}tzHir3mKqqVRhZ0{ zVKCGW2Y+!CgbT&O!lq~mOjIt~1({f&V+q={d@r2Qs)eaWg{fQ_hQj?&wA@t?=7@#E zWAxHQ8KRA4gh;^fJ;^ixWoW7> z#!3YyGb9)c_Ce!%*Gq)OjlurhXmcY6ULrY16Ai9TiP>Tq#*+fjci0R03wY9bV&Ssj z1@7DvW0ew?1`2EzNty*zB%=!Il`xjeF_k63aD)%Kce&%hxAuZ?u~_)zFYnl4IL;r_ zc~b7x_0V_76Rm4q@Y8EH5PrRjf9%~S{&vA=oFAsLCD)YoAMr%zCRZHzn%DI%!Ey1@ z)6g>NOIhlQVVc}{qW`&I$Yjj9%no?4EcSN?P)si`y{l~wo4<8H=RQvip7g#Xv+f;k zXj8`1W4V;k&zB9|Cr i==#(^VuT74hnvCTHmwl6r_icf1rYumQHW81cE+mlJ--LGo(=kG~Jo8&2fPs&dKc&yCZ z_|yBgcEqd1Mk1FOUW3_ECB{=ENZaFu-#)bMWw8PwmpKq; z!}t5b(5QvEL(e5##?gaAQu942%~X!j*dSb6#bg_IW-HbB=w(+iB-hW| zKA9mw-wi)3`qG|BUl$6u3kU9%*aHC1MeQ5_7IJcI5ekc2VkI!ra;Z}+qowk8i@uqB z8Ac)lP_oON3G;-)(Fy7_HfSuD+o64kxNjy;NqcHirgcu2Kn8GY=F?9?_zPsX>XkQW+*wf-rE+ z2ZfvY9u^3NJ3}{n@;x!sC}D1*z*d2zm7yXTt)Ni}L#3QAc{Iuoy=Ogf`9DV{+$I#h zwe(vDj3xwPwm{04V``w_W+j(!Q4`I+p2=ifHXa{CK3G?2E#9iwz|lgWXY z&J4m#b})yPCzAp&8t#jM%U)a-zrqO=)6butwa?+$e@^JW=#Ak!z8DE7!hEUhgMlmF z=soR$mc6bx{Fj6E&q4fsEuek5ve*d)+g#Co+#Ov<+>p248JB2@|9@&{<@>V!!EPe* li3tvs?+zqJsDPy^1^~}@y$CO3ClLSu002ovPDHLkV1lj(W3>PP diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/credits.txt b/html/forums/jscripts/sceditor/editor_themes/emoticons/credits.txt deleted file mode 100644 index 2ffdaeb..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/emoticons/credits.txt +++ /dev/null @@ -1,9 +0,0 @@ -Presenting, Nomicons: The Full Monty :o - -Credits: -Oscar Gruno, aka Nominell v. 2.0 -> oscargruno@mac.com -Andy Fedosjeenko, aka Nightwolf -> bobo@animevanguard.com - -Copyright (C) 2001-Infinity, Oscar Gruno & Andy Fedosjeenko - -You can redistribute these files as much as you like, as long as you keep this file with them and give us the proper credit. You may even rape them if you please, just give us credit for our work. \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/cwy.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/cwy.png deleted file mode 100644 index 135f6972eb46f80ff1c289fff22aa981692206a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmV;#0z3VQP)WQ6j< z8pAq9!2VF<6Ag#YnE8SP-?pb=V2e3KiwwYx^g!gxYJ3usFeiSO6DEQaw|2G#L-Njx_7&WmmhIlRA~l6|AhbJOFY zKbQ{lX(6l^#UvnDT?F$f0rdORkhv+DWH>%NlD^(|{_FWo4omw+;`4@NDgkfi#9~p;Fn`G*aQf=sEEJmuMdHTPSbSaN*o!{U90000WP)oBwy|vedAF8f^b#VmB?UO zgYz+~hiyD`f~hjO?1v%|9lFT6tkH>lXPBy2#_^c@1;f-TI4kMvQkT9+L_w$h?>bZ4 ztd=zmlNpm-3H536*-tM0WRzjwe9#pAll}-rO)BaE=NaB6*U0)zcHGWo#n1c-Kk_PE z&T7SO<}Z=cq;7G?xNssK(c;XbozCR??oFnClyJaZIRQM?llXC0Nr-=?4g4;sAoZy! z?Qo{j4>(s?WqT4J*!<1D%V~g(8G%8WOqnaQxia>xO$+zwME>~8AcZyg?cn@;5?8sh z=(64G8TfPA0q?_9=Fsy@!1c_)L{oxESr`-MCH{9^ zRpLi z@FKHZ1~Jb>M0ibPW$fd9a^FjWU*~vf+bEhDEV}$?lSOV|@L9YN5iv!BWry_2jLb&#V@prQcI0&rZsx#4mW6xd78&GpphGPK z(j&c*{2_y6aY#wBjNm?7?h@IToYbTz@?UKv|L8k%Hj(_NVirLa0HtXk SGfFuC0000#p|FB?N+&m>g7 z@o3O|!yy3^xyChcPicYaYk;Y1;GWdNHKu{1Uj7Bm9KhyqCpslKCYyLv-%KYmby$V=rC0I`9;lStNobWeaVe?3? z2u|8ACbbtNboMD=t(RaWlZTdnqB&umuTW>CMklQh6B?3g{6!OL|MHj$&R!DMiAk7@ z;SDjIaNbv_H&jdDpjqA2nFLpB;!B_Zq>aVfvOdLIOxQCR$sM51V$`cBb(GCXX zaCAyxtr0<&m4w-yvDp7XC@1{GS9s6o&xb%)z=y3t%(lac+{1DvVfi7sX98Qj2!?zf z77oT^d`%QSeKH8#(>wKH?>hcn6buDCSZhUWOWaDF-7-STMD}Jetkpso@_1N09FOUZ z(b)eU``0@;$EjaWMc-(l?5}9(=;lntd{`<4OhB-_sfY(%dLkC~$1z#{S7D$r^X%)L zD>!WWAPm!caHF~y4u=V|TJa=ap zxDB^GoRCGQ6Xy^;f4!XmdzTj8Ap?A)jGkgWJbhZYTGUu6mf_czqQPys5BEKkQ2X!= zA&X5LB`kt}(tyB>5tuarGbRM4jqpzx;2qS#-L8hUOooat6Y%hL!Smc#C}dd}@mJj!JV)taSWR2 zfn}ayDXsJ4G%m@XCEpyf@u$n2t`j;YE_@PkPI+ibk zkCuBpLRX^#YuO^SeICog2BFYwqe>sm5L1U(@|6CdGGD(2t_C>?Q!)Bu919nPLW{Ll z0q=kYfeGDS0fR~1UiOp)#x(Hus^F}VVKqGkqu<9KBy1l|7lSw2KdJ*J_DDEpwEGyN zgBw!A)2@KMOoFA2Nof8cnuSe5;b-X|#Dn+5+owigggTB3B;$;RWVC`|HN4$Qxawpu z=cHi%uXwC`I-G?c3x$`zbXOS6MPj&{^18b28u6h}SC+q7~f<>NIIb5|;SPMj0-js;hpJK7@$uO4v z#f}4?o{pZ;QpKmSFw@D|OT}dY@pgxQI^p5yB{QPtT zX8%jX>h@%;WfB?56enS6eIn-nh{M=d(fHxhaSv6%TW z1`Y2-;(uD=GdG0@zpvx^VBaSi2^+)lj)BAo6|hvr0QjlZQ_Bj>n*aa+07*qoM6N<$ Ef?`N$QUCw| diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/face.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/face.png deleted file mode 100644 index d0cdafacbdd2b7199be3302ee10902195307aac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmV0~nN5Ij*djczzC-^FPZXP@1q{SB9V54?ya|1INV<3V&80!NzgLcW``}DHf(xtVo zcxdtw7uXK?9KeFMt{ph{(7k&X-C*N(vX%^+S;bT{5o6KcvgVAuEu++xv)-C*?7ea8 z;=oyAwEYAE>n*)l>4aT(>cN%-vM8ch1T+a;G6Ea&cFPVMwXs;2JsDUx1^3-%vkr18 zG8sUEC>no@=2jnGYO!p#QVC$66x?OqHCizS3?#_!p`djNBQdP8q=Gx8;ED_PWq*Ps z4@qi%tm|$w04t=Ri7pUBl!U)Tq(%aIkAxrrQt+GM!Gcgofe#RVi)a8s6eJSrUJ~)u z!03d6vr_Ph_dlxWq7Aji4GBtuHZUKhCg3X`S9bdT*?b4^R0`hr{M%(}69sNsifZ9k ztp$Y&fvO5oOnHh)PhH;Mn62OgDfsUEQGe}IFHBJ%uS=o8GXj?dsK~oUpy>wUsE-wz zV!YsmPwMnf$7_K1e!Z7h%PlXQvRlU@>#fyq$`+)s!pzP!Z#F|j4>p;8<6ajb( bSZV?Q#t*?w)fnc800000NkvXXu0mjfNn~K{ diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/getlost.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/getlost.png deleted file mode 100644 index 203c59d94ae9211560f8600fc4c68c7591f939cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 777 zcmV+k1NQuhP)x0LJnEOndGu1}xZQJ%y2XD@#Y5L4bzPi7Rg|(K0S#}D( zaAz(DTnan_+zVU)zDx&t0iA(K&HI%~djuVJ3h@33$An+peq(_P&dqY#Np)ClS+JnO zv>7D^jxDiro&Fy9!=a0J3OYytmjjLOzx~jQpMCmBve^I;09XftQ3hQ!6xT(x>AHcw zH}S-Q!O-Fkh2u-;(- z-1Ec|(xrF16S?QfWu!~@M#nl>lF3T0KRcx3xay<8@EGLY%P!3NCJID?kQ9r5*7k(t zR+ltF;&b6i9=sd)Hf}O!9dne7n`b?iG}kA_tW5u}!+#K$> zD0A^+H{{3`BqEHvQP-O5Qqq(h)^$R}papt|&0&|@*Rh9)FK%=z;M@}ePCin4aPcb5 ztmT^F3k|D_cI)897byiSC_A|Uu_jdNIuP#yMF8FcmYM(ngM_@nI8C|c00000NkvXX Hu0mjfX^eOz diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/grin.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/grin.png deleted file mode 100644 index 297a16e74d60239ff30457fb099fbf41d4e964bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP)qGH5! z;xge%ggN%tdB9x@yyUPF;(IRLMY%Yw69hRe1k9KK_zSh~j# zEwHFMeiUkwMgz%XfTS^~NgR#pxKXGKAAwTep~$xx0K0oi*s)kNmCFi+ER!JK>pxUQ zW#mZIB#g$Asj>_U2^KfLV=2{iFmg?`@Z(HvP2UjWLgDO_TO?5$IGk%yClW}I)NmaI zB-DK`4;+d@hXF|YrG_J`#aTL2D7>k6Uxk`Ff|@pp1x>IdQ3$mlZUibrhoRVY5VG|( z@a?!X3$F=<-Z7>FP({r}V%riV2#6nvs<2@waUX;nLk;-ck!PWsP?%dlAFHT_4gDmL z2t*_5h-=J|P#w|F6j+!p6z1hS4?-pVl|y{+wOs_6Y+W@(Kap=G^o`clK$3+wgu*$;*GnMRLKCGP13B2W+I?3>{3AIW zT`9)G*)1pbhrj3KkZ+-Z64wD8O8HynPh})Om&ezA5-fYqj+RSr1TCWsyIb2)Wn0!#RS_|_cquogga5d@IAllY=iAn Z{sY6o>MkIK#M=M>002ovPDHLkV1k&yHS7QY diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/happy.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/happy.png deleted file mode 100644 index 63261a715e16025af3a0f6807c39e427ebcf5499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)Ujwm9W498q2+T!LFN-`z!>I2s#V$GX5XxyNIuiON0i4pa`sqp*rnYi!D z1c*L_atc4tA3*K5YLajE0I|NpWt(a;wBT#O{_)ZNzeJB;8FXvG1Y(n$R z7sQQ}{;XnAq{oJ6za1EG0R0X``|OBx+YoB8AXsIDdyfYD-psP>*3t0!q1QMNIxgyW#MU$T%U+womq^6W#^xe%AjA! zng8k{oizPABfJMR82&X6_g@w-q^HQjSJu6iLsPZT)NHbdV{jdR2`k5;CKLQcI!vrr z;KzrOh44jLSkbvvgD_1OeL^G>WvISaqQ{DGvk8F`9VRy_Q2Bbg5Ejcqr-vHDG(z;s zlIbD~m~IQgO(ZPVk}w|~A7%*Qh%9uu3v>w4U!&A{nnV^6W<)zp2sIesKcvCL+B|f; zpFTra)v;E|3mxg;#Oad%>7R!k1;?=?`6%0Ot-Rf~8uXj@Zd)hmj>L zYNye+2$>GS5)Itj6&U>~8$Iu);ekuygz&WK2m9+ko=k&#hXR2j4Nr-rOt?YMqNxfk z0tITgw<$38OEv~RO2-d(^1c2_IHq4c3tgkpeXpj&NjvA=t%U!eiUkD6-dzef*XLsN zhb)$De>4e{Gs0JIzQ^I?yOS{RT{b5E%*Et-VqGr9IT-yh8$(}Yp!2O%d~kch{Ex%* z=j&ctmmeQULg~w?82BU|{U4^G_?cvUPgA_-qB!~aTG9jiJW)b;7>>Da{s(q7`3p5& V=ze3QI3EB2002ovPDHLkV1naearFQI diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/heart.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/heart.png deleted file mode 100644 index 7b0810ec5d6abbb3340d00239154256d1d56bc45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)1+qP}nwr#a(Vsx=>8%=CXCcEwX$4+t2S>7KWK=Oz3zYCj%BUn@x zYsEFOLDUgpb`NF59I;a@6J>p?Lx)`a0u=KE`8aDJN+eDJBMYB+{zCXt#2gj#`<{@^yaWGjKyk7|H8*8Mc zoPWcQZC;>iO}hNawj3B!tv9g{iCAK`P4V4?L43%|@ z2-D+-MZvRHc+W|==|W+s6hG5LQ?AX_(m9Uo6mNT|a$l4IZ{-8Gr!m6yPQrR)lYlSE z!CWv|bdg!h+y%T}C3teKDqUdRrfR*9qIjclbz{QS4< zER7TkCrdQNer8KW@>~9g9{?0@#^6GNdGG)L002ov JPDHLkV1m;X0nY#c diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/kissing.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/kissing.png deleted file mode 100644 index e8689745f58b3b5d58bb1b53a6764cc4b204eefb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmV+d1O5DoP)F-&yqam z2%frMsRV2V90?o*YzhGU0=y2q0DS+*+qK$!K*81oE?afQ^y+U)WI)O@vQ;%AXP1ek9 zar=woFB```z;6IL)~*6vd-9RXt-Rfi6_R3tPPAa6DUZ^~yQGkimJ@PIr);x%nIm^B ztqNQfj50(J*k;XDa_1d@z{)jbQP4rnae;!gEE>`uZM|6ur9fp7h}Y~hNS?riP;9ok zfCps3^;cXzi8Yx)-gs(Fh@Lz@xdvo&V%{=k1+ZQgRNgqe^C4Uoi9co$$q51SPY9d? zAPfFI*x$mn9Ns!`vm+7!E`Y}4nl^;T)*ZuR0=8wr*T4I*CX?1Rd@OYa89!2k_i~j9 z-f-BO#Y`Ky{@QH--pqo}zW3EMjjd0Mci*am!2JHh90y&bB$sb^BVWs;}N{gOrU{O<7|(Enw$><@a90C+(KO zY5(uw#TU^9EHpd00kI}j>N*hb0!0Ac0+yNp01wHdZMdszb^rhX07*qoM6N<$f_*1% A?*IS* diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/laughing.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/laughing.png deleted file mode 100644 index 6049cf46845aaec34dedd4c1b6938c37c970b074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmV;&0yzDNP)qy_{1Du+nrG4C%{044E?E66kPGZ)wTBc?L#wA8)`e9 zkVN-09$^%mSm}WNJUO&wD(ET+B}*$YS|rC%h7=v)0v!I!8q}8hP~WM9@~_`8X-&K6 zK_cjDRWLNDfkq9`pn;)Y4SkIY+EN9Ev!&>b5+G)~1HOLExS9I$LXw#=PWbL}hPGS@ zL!BD0KVeOfkU`>mWh5QS5TiTT0~i0lIn$#IQ(pMoKcAapIA2b)xFzBwXt)!rfVx}t zqxn+w#|hAK*#*D9XG+p%c;P0W9Zqbi3br&A2{>53o`ucbo#pC{9l$N zT+a(LtAYj4vE`zEY6d(boC})?334)+n_hh4MWKSz9S$K5qufiFFB&|fGy7b zXhyOVsUrtWPUFy%|4;gFjoK@r)xnuREj5 zm*L~g(oSeQ?}+AOcBtB6jeXynP5c~Y{=R-?`*Qvd3#4tdM<{H0-xQ$|_5oWlQ|! tEfenhn%@VzmXXTnBPdN}^ZH;H%MJMAuk~|XE|CBL002ovPDHLkV1jvRPY(b9 diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/ninja.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/ninja.png deleted file mode 100644 index fd3c6bb81fc512c421d8f0e8dcd09faa8a72bad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 583 zcmV-N0=WH&P)@4Pq$ee1- zV0(M}LZyV#Dy3se?-0+#_(slDfWSJGHv0X3X*3#Auh%7;%?hekt5T^{#C2UEhurai zfaWWOlrCc|7K>6S6gaax-=wTkM_#D1050$hb5g(16*$cvurh*%h0E~u<0Gk z&9-fTnUM>72L=-L)*5f?X;>%}($#H;F>>n-tF8AEBR!#7%!Y{ZO~ZI+>%Cy>O?Wsk zB#bOt?)n)JJp)FS=HW2u@kL(%Gb8}?3JC9(WtqpO VO5p}cMI-nwwY_7jwjI>A;@XI6+qT_jtZm!2$1~Xsem(aT@4uR8lYH0r%eg!Pz_zk! z;|=FV#}FqI&l9zToe^bjTsCq8-GsMAz5PWWe2FL}0*z;IP05Z}>&QqR_Yn;VCOHZ3Cuk2v1rO8nYnKZ-T#74`+!AWp8ERmh+=$#axMyWpTvU zd*01PV9<>4gq0;MW2_8F8vaL0k!oQ-q`)svaHL-lu~OmbkKPauf2UDI!LkcZOlAqD zq*%B;G(yYo)Wcn&!rX5;c;NC_Aw5+pe0BHRS+rCWEzR=3fTbkCq=03Vn<+{Y0=))! zYc*KjBg0P*Cko+9QepGRAr*qOTw2zq63!>g493j}_8H)-*I;Fz3@vY@3Spg8Xm?R( zkRrqci#AFKu8*4liZIwq!a6kxb20o;nh?%Qg$`%627x{UF9#D6nGi56;`Z=}0fBBE zyj3bJ@5;gO2dNu`t;4(IywRayo+y0%z!42rK+Ny!OM1h50ve5V|^!q1r)e=h|OUK%5Wr?0=*-~9Ph3Y-Np_-a*R zuQ-xmw~o-VXth}lU$qj>JQ)^$&BXM_srd0Oe%D_M$NHydqGz;F_F5|JbaL)uIlPq$ z77$!^7s+7XlZ}NRGgy}YSORFyJU_iipTj5jBw+gcOf3JEjg>vb?rbV&Vd1At%zl}M zk++la;T>@iKZgz9*L}1vKRuX$hF6j?{b?$uK1xB|vx)eDmU!>QF_FKo2p{YVL_OhR gxXf)4KiF;MZ@2U4Zk>h(u>b%707*qoM6N<$f_a*KOaK4? diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/pouty.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/pouty.png deleted file mode 100644 index 77cee996c65aabf6ec0a33feb0bb5f8f117eba18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmV+d1O5DoP)ms7w6<*<&$g|xJ#%$V+t)NrUZ2_IyEypO6~-90 zWmzY9*TuOUa6E7wa5-=k0I&e~7x)dB{nhYNX@j80_5+^WYq$8h3(qca)ZtkU*rx`g z40UxC<}WNUYFdf*9`z#dszn>u0zD*v6M@gJym0$tZ@+bCve^g`0T>H{PBp5iDfT3M z|3@FgrkCde_W?64?4UTn507K<_tTH=w#Uh*ZilSJVgexq7_b#1l|V*vr7ZD9<+7Wbad5`N1%V(WU||=I z-p7HLhTtK)?IKsT#3TRxuvhRO{`-E<@EKo;VaL1xI5-4_Nx^9C5+WW55%-KsYFyAZ zKnO1HY){aMTW_G(MqIGbI7C;qiz;in`!qmZ2>v^3ZW&cn=!){S28c(|2BR!gu~12q z7E}AJSlFBb{2zip+wDZ9FCiUFQ5EG|tMM>K8Fx*Um4y_^KuXfDs17J5*DHWu!<{mt zxm$ho|LCEIE6;#S3k zdQE51gvZw=AF$U0R{%!?0P}%=Y<}I~0lO{BO14<0=F$a-CIA2c07*qoM6N<$f^%SQ AO#lD@ diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/sad.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/sad.png deleted file mode 100644 index 66696d6809cbe50df44aed535c7567b0766c8a4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)YasQ={>y2*6M~% zscqtL7=|_mV*eX7x}Dr{`qfjjYc!twOCV+vBC(Jq#!`Wl1Pt~q!9u18GjS0Z-yce{ zv`@UjGGlc0&i6QMddnL_dqXjGA{^69FdZ8~-{S{DF|s`f-GBPy|JOWDe;m&Le7*Cq zI}W_>jq;!TF|;`lgBt=+`n50iz2S+I%l6`g7hj|nu+2bx5{N&6FqGX)sDPy^1^_J0 V-PLq-_jv#S002ovPDHLkV1o4eb}aw^ diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/shocked.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/shocked.png deleted file mode 100644 index 525ce5f68b60aea39cc8113c88d5910c312bda2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmV+n1M~ceP)%-T))pfAFTk~Qx<*r z=_@w2#8bo?B8M0e;A?)y?`)S7ie&-B=HEVYK=5{NREJA2S*XH9o)VQ;0&#V%2Yz|q z9>O<7z!E|h-A6n^RGwJriHUMGjP*L0ngq0Tt;KA$8qG-?!^vZl>l} zC^3;PLGNW>{Q8caAbmzG+!VUQo0_VjrjbxA=%o7&hVRj#r7ATr)~GO*Bg0UbKhFQ* zBna1wg+R71jCDGB}1wBKD2_KAg~V_7m7YgOEwMI|f}P{Y!!g0V`0sZ0rmLVVG* z*KL8Yq$wnTJKEgD!3B~#G^=5*S7NqAhKb}r^k4Kw!8#u4e6es#$T|=16Jxa!mPQJ; zuz>qbjHN*dV}%^k*%FLI`l9EA2hRQIAP6^#h0p)-fjvgz12B^><>r{{srgOH`9hM( zFq0?2Se!rlFLSZL(8Z?b+a2rXyhi60x*>kxS+z3Fdy`v^JH1v-;SV6A1}S- zHiv^hI-={07ly9;U^t8j^`UET^q==a&oOs2?{LAsZ|&!A4$E&}KU2S)|IHEk8(q+K z$PJzQU6H%W31_K^HL}NrJL?0-l%`wioVgWTQm1uIhZVuF3=|<-tD9Zg~r=q*#2B&N(`7K+T8xC z^g3l2w_!_08ZH#el)cpW@opqz?ay!D!Y%h$p3P_kow4%-$Hy6zNL=ZAo z48|Ad#D*vBeB6y9lWdT+OGR!CERnIN0}~#HFz4eR*v~J1n>Lf4hS2|#7ftrqk)i{y zUrYlh)n3ihVg8qh256w}({|`hAKD&tBHvhx0UWP^=X##>VaD6AJ{|vBYMhQ5dDo9l zM_s76l)#f3_+i*h|8L-;Z-gc#+Gt?)bp*cBz>kBj`F~xRz!;*9zH-$y<^;eC9S?ah z@fn?>PpLt_Pp6&IY_A=q=9>)QX$_oGX_3na1r;_5s$e>7x=7eG*kMJ^;k@!h4J?_a zs~tVhdKt7TunB57JUX{J>sWW{!gyAiFco1fo-qeVL<8 zi~W-88!gB_jHg>+Fyg0PR!O7RRhHS&`IsC1E_yKJhL4^Uu`OeqYr5M`SiT7+gqzx4 zG4)~0XuQi#4@y{2(xw9%Y`3A(3KKH*x5O?E@yl0=_I74Kg(Vi$-fThj^=6cu yYo-JKYio;LzG4*Ev7%F=&lKAni&23 diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/sideways.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/sideways.png deleted file mode 100644 index cd652a247fe6e72f8badbcb5c58fd284d5e471a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmV+v1MB>WP)YNT^s+-oYkzEEy^b_4Ij z`<_8aqAMBKF*-JV8whQi9M-<8U>hV@UIBBL9EJu77V=}U_7flQz7)e^PbW-#^&ywp zy4}$fY#+TEj)`l4$!md$YvCBb2KEsq?v=yXEP=Wx7A1cN;?)P7r+KU(B$*pyQ|f=A zu=Xq97`uifB%8eEI86HBP2Pl|ArZ>#Xzc!yX1bo?DhluT>_rb4+vRK)S2LL);d$a} z5Mx)9(A+M8wk#Gid&BVI6Ruo(n<)G(<)09~RJJqdRH-ZDVC|8?F+u^SK(Y}zK}+tGKwlAq#pEyyF84b{ z*gTjVNgHh+l(8V1i69Xel9ABd91m?#H0E}Pp#CR1={iyPNAgbrv?tasDI5b#IxI+r zWgL<@`lTc^RK-A<5sv9if!Oh`2N(V-3h(^n88;~NqF}6xr{&oDn0Qc15)utaVege3 z+X8iNB<6O7VDx`KeDs(L7v6F5#om12YhS4IB4MbGr6pP06JhI2;IMoG%#HCdRK`G^ z6M^|XA(&j{j~#E*>^5=7$xlzhp3z*%@BUDxheKN!1$}u86A&yP4Q)Xrl&N8u+YwB% z+|ND1VrJ>-o$Yg2{jMh_w*_PIU?`TDU@0Yx@^d?bF})!GL;v_<#hY$t{~S*KzTSV# z6+1ujMBT5xm|WwJiIsk+`OX{L-*(4)kGKfm*M)tsKQd|=8iMjvclHnVa&ib`PTTza Sb;oT00000yB?;w*%|L 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 IM6N<$g5n-;^Z)<= diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/tongue.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/tongue.png deleted file mode 100644 index 26538dd40296715915563ff5588375a57e67e913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)y#@1z>czI z;p4Xi1rt{hpA&V2k%OgK8LJESC*;e7#CLB#5{A^D649F}fvs5uYl9NqCq+2*MI2s# zFce%HLb#2PiOwS~A-eZ|5)W&q8m>Vd+#?)XN^7y!tA?XliRB^*{(CzLTwB(M`fepu zKYd5=LgO(J6L}_d@J{Q283QnFfOkp{&$te*0S%mON|;L}DE}!QPu~_a$Mxk2nJkpp zoAGNBTtixTC-u1fiYOnLS)V5<%~TF!o(RW2U^CrCgz$yez593=oLy>e7Cs4MnvV{c zWc66p(!TgD2ym4O$C%uL*{5JjPL|UqbmZsY*nc_n$7}vnnr-HpshLsEfj=UYg z3BTeCTSoIFaMN-zwY3D3JSMbo_p9J&kYP1TfYu*kIAJ|sXtYqJn`Vf~Z6r*j0fT1f z?jvEnl!Pf5`74$aF7SmWbBzox8r63YJPA)ksNo$w*KQ>(86$thY!bGOqzTzZdq!AC z*4Q6wZ8BI(MOZwRh^8;uNjLI^-=}>U$M(e4tAux04U7>q8#de5U-ZGQO_v;wS_zEV z$(Y+4hr_Rgal&u-!t39DC=|v*A)Jj;xOx=u465KAQGyB25Aea|oedJ03j|m^nt+Ml zqVeWE!JP2AjTd|0>5rmeE)>8~Ct*wCX5uC}NqjO#jTq*90hW#@VCL@_9Da$t>%E*~ zVFE(S(AIctd!_9_t*5KLw*7QmR1gvG=0Ojht-IH=D8dwTvphksrP$IQV5 ztei>0Y6g*>MCn8<9!bF5?pTce9ECrh5B2*wZ2G=lqkTE@W;hzZiNegkF_``<8ugz> z;1DhG)w_cId|&=Q*e{3%!opx_R_6DE-BHd0ZOhENJ~G&y00000NkvXXu0mjf_fK9R diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/unsure.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/unsure.png deleted file mode 100644 index b8882124c1270a6f0039f95c75675af52ae02516..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763 zcmViy$ zV^#F22sYSS^bUUd*n@%6_geDiECoynQfM9u@OXnCM*ZkeLC11JCUYhnys|k6<{Tw# z#qYAgO^MI9NR6=)sBT5z)I7G*eFP_7_~qxgkXg-BST7&je%I zpH5WzIWJs&d1D~ks;#6|*tE?~%jOI@46j6}yAp~MGu^3h1uu-tza@Z$Y!|&0S~6uY zMu|{=Ee!GNe5mj>FH~ux#IR&5fZ}(E^ldh%D^RF}B|{41YatPaB5#K;6;|;=wdREo z=1e(kg-RlQy9tsn;wV%wZ25AS)1)vwk3`+2VB~G{?jTIayA;L_+L|XPgW5@Wh|HQT zLqmcHx`z>{J{5?VV4u7{xF zpdXG;a;3smyzr};|2ji;HyoyD5#0`3g)L9UButbmgEdP^WMY`21kl_GL-ol(6m9Xw z^xqw+@XPiO`_TCXUeMePgYlJs9zI)%B~8rWFGX`Z6g8&f-@Sc4v+o{d!gG>vb0#c1?0a+0g*hT?j%w z5!7D}X8Gz90jSvTi~NmV*gnp=i{Q{j_?q&&6HZKbL-Z;yl<^)0|IBSaCjO+>M}o&)UQ@di7^&xVllRlfiL002ovPDHLkV1mL$W0U{@ diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/w00t.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/w00t.png deleted file mode 100644 index 4ed21f2957beda0472bae60208093f8ff59431da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)*6yyEn2?7MAM!@d__= zs%c5mbS@meeyj(|)4~@Ue6Xae9SMhU;fb5u0`dJ?lyTA@sqGDJ~>@!iBHj90JN?QmyfeWGovT}rFjKj(=dJGJh&MZZOD%ga)ftQ1 zNUfVo4&~Mh6Wi$N?h(#-waHsnh=2e>CEL-%7NX_}Z9T)oVOl#|JXq+i+p?Qu9Wl9; zmGW>fKE66sx5Sdpwm3S>5f7$24> aO~)@2`V$37G^)!00000)P5Px2kFZ+m+Hc&R+} z<<;=n1-~cl?{rQwT{G&zL*n2Y(z|7=z+tB3LpNFsI2;xGxd=r$=Jg zw|?ONFybE}B#|fM6-MEv$&oPUtKcZtz*$AGdo_BBRj_5s(Rp5kwWC77|Lx0oK1?Y4 z{S%+I^xer6cGYR&ZqxxysX${Y+zmST_yrO6965}aM7Xjr62E`s-NLg1A<6t0n~pAt zg`+|Zcl|(^K$DIDle%lQ^v;$kgZ^|fc8{l;u4niPg>Q}dIRN$o6iWQsYVrqfSlNe%#ec zIEv)3-bg{$;W$(+4|_nEQ*}6zI@(pG1h}-0VE3wfVKP^_0zEkrm@g%xeRm8pX3$8d z3x)Fz&xoKtaTF`yu4K|0fuu&sA(^{E0Y`xhwp%ICpNL1xrbz7gKY$Bo3x#iw`pysf zb4jqLOL%jr7VatqNk~+wfU8W-WK!7EL@=IBMEkB7)GZCeh%bD=r{4V&d-H*bp)j6H zgzdJ7H;HQEERqsj)RQHF?Pdy$XA;n{Ck9Qc!m;CDs@*2;xPR%%*)nRsGB+IhR4)p}iog9Hu{k_q`x^R%FLsUyMEdMdG_46ozOv# m>5MdnsgE>z_Y52C3v(9>0qfFkr|!)F0000#F+ID-*v8`Zi+qQyd+qP}Hwr$%szPERIl3F)exhEUz;MW}hri~$k?>}Q` zL_9>yBZ7%)hQ}P^9M_Cj&SF<$>F@8D;?znfB%PC>Awq@vP$d$Mx#ReJd;I#Q3Al!9 z#op&1utXoCoTYaX_YeuYX4|7aPJ{L|9Xc|*p|KXNNg6aoC{b};f~|jAfor*kd&NnH zk}E!b!KgIsuqRm5nX4aIMZw+Z%D)SpIlBH>?JWs>R@&p^=M0OvcQ`qVO^97**Epj+ zU5l=~yI24b6b_D6U-rb||GIauoiG-2qWrPH-#0^ZyoOe%?@Nk>!^TREy5P6hj6se^ zhLbNjv&xB&gSOu<7k|UXD$ly%;GY&OUnm}lD38p#EI|hy2}q8Dz6k_zo^DXADO854 z^X`aRZp-oz@!UmubzP_&9cdbpkUU?Ya`DaL&=w&USJ14!}cT< zx-!&2HcNZSR+C(X_GC5fK+pF)UmF_haCo^JUU}RKDSMqko=Zc?AOG_$6I5UGKyw&P zkVrd7qe)1JEH#++R3)0DRWRbA0^y|mJ2Vg z%|Dr=aGxVsQgzm)Us$r=5&2u~5Vg<>zrA9_!Zsp+_>yoK^DFn4SB!D+cXNa-wnpI= zTNG@xLC73S?Ek?OKfh!oymBZ0v6xSU5_JrZIX0e;#k6r7orijdjI^Oz00000NkvXX Hu0mjfDyn}V diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/wink.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/wink.png deleted file mode 100644 index d3e610bd807ccba9cb54baaf8fef381863733d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2*VP)m1O_b#j!2lPY{puz5x!yOmw-Op} zz94F$@n;2#LK7B*r>($@4VbneJY_{_+=9S>3H~-coTVz1znO-c&x@RsVg(_~Vu-Ky zzmti;kQw1gD@$0$SQ(Hs{EyVvtc5*KfuA4em3~e{i^9_$xjq*DE+el3(}HAL#Deor zNJMCqw%?_PyHbVuU$b!kWzmxK6jAufzPB=Ht0vl-g@Y;ZKOnU+ETmPM5a=_&Tc^Rw zei?pzC|(l2C<H8fBnakNpKd*;Hy*dmPpD3d$cTCYf-~j zql7bGhNWN9G4oL}ez=qW^;eQ(J&&00000NkvXXu0mjfg}`xz diff --git a/html/forums/jscripts/sceditor/editor_themes/emoticons/wub.png b/html/forums/jscripts/sceditor/editor_themes/emoticons/wub.png deleted file mode 100644 index 75c353159d4cbfee228ee120681c9889f354abdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 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 Gp#K4sIo}=t diff --git a/html/forums/jscripts/sceditor/editor_themes/index.html b/html/forums/jscripts/sceditor/editor_themes/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/modern.css b/html/forums/jscripts/sceditor/editor_themes/modern.css deleted file mode 100644 index 852aeac..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/modern.css +++ /dev/null @@ -1,650 +0,0 @@ -/** - * Modern theme - * - * Copyright (C) 2012, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/) - * Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/) - */ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -div.sceditor-grip, -.sceditor-button div { - background-image: url('famfamfam.png'); - background-repeat: no-repeat; - width: 16px; - height: 16px; -} -.sceditor-button-youtube div { - background-position: 0px 0px; -} -.sceditor-button-link div { - background-position: 0px -16px; -} -.sceditor-button-unlink div { - background-position: 0px -32px; -} -.sceditor-button-underline div { - background-position: 0px -48px; -} -.sceditor-button-time div { - background-position: 0px -64px; -} -.sceditor-button-table div { - background-position: 0px -80px; -} -.sceditor-button-superscript div { - background-position: 0px -96px; -} -.sceditor-button-subscript div { - background-position: 0px -112px; -} -.sceditor-button-strike div { - background-position: 0px -128px; -} -.sceditor-button-source div { - background-position: 0px -144px; -} -.sceditor-button-size div { - background-position: 0px -160px; -} -.sceditor-button-rtl div { - background-position: 0px -176px; -} -.sceditor-button-right div { - background-position: 0px -192px; -} -.sceditor-button-removeformat div { - background-position: 0px -208px; -} -.sceditor-button-quote div { - background-position: 0px -224px; -} -.sceditor-button-print div { - background-position: 0px -240px; -} -.sceditor-button-pastetext div { - background-position: 0px -256px; -} -.sceditor-button-paste div { - background-position: 0px -272px; -} -.sceditor-button-orderedlist div { - background-position: 0px -288px; -} -.sceditor-button-maximize div { - background-position: 0px -304px; -} -.sceditor-button-ltr div { - background-position: 0px -320px; -} -.sceditor-button-left div { - background-position: 0px -336px; -} -.sceditor-button-justify div { - background-position: 0px -352px; -} -.sceditor-button-italic div { - background-position: 0px -368px; -} -.sceditor-button-image div { - background-position: 0px -384px; -} -.sceditor-button-horizontalrule div { - background-position: 0px -400px; -} -.sceditor-button-format div { - background-position: 0px -416px; -} -.sceditor-button-font div { - background-position: 0px -432px; -} -.sceditor-button-emoticon div { - background-position: 0px -448px; -} -.sceditor-button-email div { - background-position: 0px -464px; -} -.sceditor-button-date div { - background-position: 0px -480px; -} -.sceditor-button-cut div { - background-position: 0px -496px; -} -.sceditor-button-copy div { - background-position: 0px -512px; -} -.sceditor-button-color div { - background-position: 0px -528px; -} -.sceditor-button-code div { - background-position: 0px -544px; -} -.sceditor-button-center div { - background-position: 0px -560px; -} -.sceditor-button-bulletlist div { - background-position: 0px -576px; -} -.sceditor-button-bold div { - background-position: 0px -592px; -} -div.sceditor-grip { - background-position: 0px -608px; - width: 10px; - height: 10px; -} -.rtl div.sceditor-grip { - background-position: 0px -618px; - width: 10px; - height: 10px; -} -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -/*--------------------------------------------------- - LESS Elements 0.7 - --------------------------------------------------- - A set of useful LESS mixins - More info at: http://lesselements.com - ---------------------------------------------------*/ -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, -.sceditor-container div, -div.sceditor-dropdown, -div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, -.sceditor-container textarea { - line-height: 1; - border: 0; - outline: none; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 0; - margin: 5px; - resize: none; - background: #fff; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 99% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 10; - opacity: 0.3; -} -.ie6 div.sceditor-resize-cover, -.ie7 div.sceditor-resize-cover, -.ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100% !important; - width: 100% !important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - z-index: 2000; -} -html.sceditor-maximize, -body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -/** - * Dropdown styleing - */ -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 4000; - padding: 10px; - line-height: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, -div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, -div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, -div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, -div.sceditor-fontsize-picker, -div.sceditor-format { - padding: 6px 0; -} -div.sceditor-emoticons, -div.sceditor-more-emoticons, -div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-emoticons img, -.sceditor-more-emoticons img { - padding: 0; - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-dropdown a:hover { - background: #eee; -} -.sceditor-fontsize-option, -.sceditor-font-option, -.sceditor-format a { - display: block; - padding: 7px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 7px 13px; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -/** - * Toolbar styleing - */ -div.sceditor-toolbar { - overflow: hidden; - padding: 3px 5px 2px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #ddd; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #aaa; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, -.ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - /* Needed for Safari 5? */ - - text-indent: -9999px; -} -.ie .sceditor-button { - text-indent: 0; -} -.ie6 .sceditor-button, -.ie7 .sceditor-button { - float: none !important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, -.sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: 0.3; -} -.text .sceditor-button, -.text .sceditor-button div, -.sceditor-button.text, -.sceditor-button.text div, -.text-icon .sceditor-button, -.text-icon .sceditor-button div, -.sceditor-button.text-icon, -.sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; - text-indent: 0; -} -.text .sceditor-button div, -.sceditor-button.text div { - padding: 0 2px; - background: none; -} -.text-icon .sceditor-button div, -.sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl div.sceditor-toolbar { - text-align: right; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} -.sceditor-container { - border: 1px solid #999; -} -.sceditor-container textarea { - font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace; - background: #2e3436; - color: #fff; - margin: 0; - padding: 5px; -} -div.sceditor-toolbar { - background: #ccc; - background: -moz-linear-gradient(top, #cccccc 0%, #b2b2b2 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #cccccc), color-stop(100%, #b2b2b2)); - background: -webkit-linear-gradient(top, #cccccc 0%, #b2b2b2 100%); - background: -o-linear-gradient(top, #cccccc 0%, #b2b2b2 100%); - background: -ms-linear-gradient(top, #cccccc 0%, #b2b2b2 100%); - background: linear-gradient(to bottom, #cccccc 0%, #b2b2b2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cccccc', endColorstr='#b2b2b2', GradientType=0); -} -.ie9 div.sceditor-toolbar { - filter: none; - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2NjY2NjYyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiMmIyYjIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -div.sceditor-group { - display: inline; - background: transparent; - margin: 0; - padding: 0; - border: 0; -} -.sceditor-button { - padding: 4px; - margin: 2px 1px 2px 3px; - height: 16px; - -webkit-border-radius: 12px; - -moz-border-radius: 12px; - border-radius: 12px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.sceditor-button:hover, -.sceditor-button.active, -.sceditor-button.active:hover { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button:hover { - background: #fff; - background: rgba(255, 255, 255, 0.75); - margin: 1px 0 1px 2px; - border: 1px solid #eee; -} -.sceditor-button.disabled:hover { - margin: 2px 1px 2px 3px; - border: 0; -} -.sceditor-button.active { - background: #b1b1b1; - background: rgba(0, 0, 0, 0.1); - margin: 1px 0 1px 2px; - border: 1px solid #999; -} -.sceditor-button.active:hover { - background: #fff; - background: rgba(255, 255, 255, 0.25); -} -.sceditor-button:active, -.sceditor-button.active:active { - margin: 1px 0 1px 2px; - border: 1px solid #999; - -webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.5); - -moz-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.5); - box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.5); -} -.sceditor-button div { - margin: 0; -} - -/* Additional buttons (for MyBB) */ -.sceditor-button-video div { - - background-image: url(video.png); - -} -.sceditor-button-php div { - - background-image: url(php.png); - -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/monocons.css b/html/forums/jscripts/sceditor/editor_themes/monocons.css deleted file mode 100644 index 8abcf95..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/monocons.css +++ /dev/null @@ -1,719 +0,0 @@ -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -@font-face { - font-family: 'Monocons'; - src: url('monocons/monocons.eot'); - src: url('monocons/monocons.eot?#iefix') format('embedded-opentype'), url('monocons/monocons.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} -.sceditor-button div:before, -div.sceditor-grip { - font-family: 'Monocons'; - font-size: 16px; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; -} -.sceditor-button-youtube div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e000'); -} -.sceditor-button-unlink div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e001'); -} -.sceditor-button-underline div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e002'); -} -.sceditor-button-time div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e003'); -} -.sceditor-button-table div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e004'); -} -.sceditor-button-superscript div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e005'); -} -.sceditor-button-subscript div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e006'); -} -.sceditor-button-strike div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e007'); -} -.sceditor-button-source div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e008'); -} -.sceditor-button-size div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e009'); -} -.sceditor-button-rtl div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00a'); -} -.sceditor-button-right div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00b'); -} -.sceditor-button-removeformat div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00c'); -} -.sceditor-button-quote div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00d'); -} -.sceditor-button-print div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00e'); -} -.sceditor-button-pastetext div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e00f'); -} -.sceditor-button-paste div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e010'); -} -.sceditor-button-orderedlist div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e011'); -} -.sceditor-button-maximize div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e012'); -} -.sceditor-button-ltr div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e013'); -} -.sceditor-button-link div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e014'); -} -.sceditor-button-left div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e015'); -} -.sceditor-button-justify div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e016'); -} -.sceditor-button-italic div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e017'); -} -.sceditor-button-image div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e018'); -} -.sceditor-button-horizontalrule div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e019'); -} -.sceditor-button-format div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01c'); -} -.sceditor-button-font div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01d'); -} -.sceditor-button-emoticon div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01e'); -} -.sceditor-button-email div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01f'); -} -.sceditor-button-bold div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e020'); -} -.sceditor-button-date div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e021'); -} -.sceditor-button-cut div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e022'); -} -.sceditor-button-copy div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e023'); -} -.sceditor-button-color div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e024'); -} -.sceditor-button-code div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e025'); -} -.sceditor-button-center div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e026'); -} -.sceditor-button-bulletlist div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e027'); -} -div.sceditor-grip { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01b'); -} -.rtl div.sceditor-grip { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e01a'); -} -.sceditor-button-youtube div:before { - content: "\e000"; -} -.sceditor-button-unlink div:before { - content: "\e001"; -} -.sceditor-button-underline div:before { - content: "\e002"; -} -.sceditor-button-time div:before { - content: "\e003"; -} -.sceditor-button-table div:before { - content: "\e004"; -} -.sceditor-button-superscript div:before { - content: "\e005"; -} -.sceditor-button-subscript div:before { - content: "\e006"; -} -.sceditor-button-strike div:before { - content: "\e007"; -} -.sceditor-button-source div:before { - content: "\e008"; -} -.sceditor-button-size div:before { - content: "\e009"; -} -.sceditor-button-rtl div:before { - content: "\e00a"; -} -.sceditor-button-right div:before { - content: "\e00b"; -} -.sceditor-button-removeformat div:before { - content: "\e00c"; -} -.sceditor-button-quote div:before { - content: "\e00d"; -} -.sceditor-button-print div:before { - content: "\e00e"; -} -.sceditor-button-pastetext div:before { - content: "\e00f"; -} -.sceditor-button-paste div:before { - content: "\e010"; -} -.sceditor-button-orderedlist div:before { - content: "\e011"; -} -.sceditor-button-maximize div:before { - content: "\e012"; -} -.sceditor-button-ltr div:before { - content: "\e013"; -} -.sceditor-button-link div:before { - content: "\e014"; -} -.sceditor-button-left div:before { - content: "\e015"; -} -.sceditor-button-justify div:before { - content: "\e016"; -} -.sceditor-button-italic div:before { - content: "\e017"; -} -.sceditor-button-image div:before { - content: "\e018"; -} -.sceditor-button-horizontalrule div:before { - content: "\e019"; -} -.sceditor-button-format div:before { - content: "\e01c"; -} -.sceditor-button-font div:before { - content: "\e01d"; -} -.sceditor-button-emoticon div:before { - content: "\e01e"; -} -.sceditor-button-email div:before { - content: "\e01f"; -} -.sceditor-button-bold div:before { - content: "\e020"; -} -.sceditor-button-date div:before { - content: "\e021"; -} -.sceditor-button-cut div:before { - content: "\e022"; -} -.sceditor-button-copy div:before { - content: "\e023"; -} -.sceditor-button-color div:before { - content: "\e024"; -} -.sceditor-button-code div:before { - content: "\e025"; -} -.sceditor-button-center div:before { - content: "\e026"; -} -.sceditor-button-bulletlist div:before { - content: "\e027"; -} -div.sceditor-grip:before { - content: "\e01b"; -} -.rtl div.sceditor-grip:before { - content: "\e01a"; -} -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -/*--------------------------------------------------- - LESS Elements 0.7 - --------------------------------------------------- - A set of useful LESS mixins - More info at: http://lesselements.com - ---------------------------------------------------*/ -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, -.sceditor-container div, -div.sceditor-dropdown, -div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, -.sceditor-container textarea { - line-height: 1; - border: 0; - outline: none; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 0; - margin: 5px; - resize: none; - background: #fff; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 99% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 10; - opacity: 0.3; -} -.ie6 div.sceditor-resize-cover, -.ie7 div.sceditor-resize-cover, -.ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100% !important; - width: 100% !important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - z-index: 2000; -} -html.sceditor-maximize, -body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -/** - * Dropdown styleing - */ -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 4000; - padding: 10px; - line-height: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, -div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, -div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, -div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, -div.sceditor-fontsize-picker, -div.sceditor-format { - padding: 6px 0; -} -div.sceditor-emoticons, -div.sceditor-more-emoticons, -div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-emoticons img, -.sceditor-more-emoticons img { - padding: 0; - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-dropdown a:hover { - background: #eee; -} -.sceditor-fontsize-option, -.sceditor-font-option, -.sceditor-format a { - display: block; - padding: 7px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 7px 13px; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -/** - * Toolbar styleing - */ -div.sceditor-toolbar { - overflow: hidden; - padding: 3px 5px 2px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #ddd; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #aaa; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, -.ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - /* Needed for Safari 5? */ - - text-indent: -9999px; -} -.ie .sceditor-button { - text-indent: 0; -} -.ie6 .sceditor-button, -.ie7 .sceditor-button { - float: none !important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, -.sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: 0.3; -} -.text .sceditor-button, -.text .sceditor-button div, -.sceditor-button.text, -.sceditor-button.text div, -.text-icon .sceditor-button, -.text-icon .sceditor-button div, -.sceditor-button.text-icon, -.sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; - text-indent: 0; -} -.text .sceditor-button div, -.sceditor-button.text div { - padding: 0 2px; - background: none; -} -.text-icon .sceditor-button div, -.sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl div.sceditor-toolbar { - text-align: right; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} -.ie7 .sceditor-button div, -.ie6 .sceditor-button div { - font-family: 'Monocons'; - overflow: visible; - font-size: 16px; - line-height: 1; - text-indent: 0; -} -div.sceditor-grip { - height: 16px; - width: 16px; -} -.sceditor-button div:before, -div.sceditor-grip:before { - text-indent: 0; - line-height: 17px; - width: 16px; - height: 16px; - display: block; - color: #333; - text-shadow: 0 1px #fff; -} - -/* Additonal buttons (for MyBB) */ -.sceditor-button-video div { - *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '\e000'); -} - -.sceditor-button-video div:before { - content: "\e000"; -} - -.sceditor-button-php div { - *zoom: expression(this.runtimeStyle['zoom'] = '0', this.innerHTML = '\24C5'); -} - -.sceditor-button-php div:before { - content: "\24C5"; - font-size: 17px; - line-height: 0.85; -} - -.sceditor-button-php:hover { - text-decoration: none; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/monocons/monocons.eot b/html/forums/jscripts/sceditor/editor_themes/monocons/monocons.eot deleted file mode 100644 index 1db65477102f5e38d4de4d2b0b7618557c505593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8028 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 diff --git a/html/forums/jscripts/sceditor/editor_themes/monocons/monocons.ttf b/html/forums/jscripts/sceditor/editor_themes/monocons/monocons.ttf deleted file mode 100644 index d100abdf72a460aa813066000555d43240e47ded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7860 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 aEObwBt`HleB`z_7y|Zxc`vPwKX8Ru)Dfl)3 diff --git a/html/forums/jscripts/sceditor/editor_themes/mybb.css b/html/forums/jscripts/sceditor/editor_themes/mybb.css deleted file mode 100644 index e6c5f23..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/mybb.css +++ /dev/null @@ -1,585 +0,0 @@ -html { - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 0.9em; -} - -.sceditor-button div, div.sceditor-grip { - background-image: url(famfamfam.png); - width: 16px; - height: 16px; - background-repeat: no-repeat; -} -.sceditor-button-youtube div { - - background-position: 0px 0px; - -} -.sceditor-button-link div { - - background-position: 0px -16px; - -} -.sceditor-button-unlink div { - - background-position: 0px -32px; - -} -.sceditor-button-underline div { - - background-position: 0px -48px; - -} -.sceditor-button-time div { - - background-position: 0px -64px; - -} -.sceditor-button-table div { - - background-position: 0px -80px; - -} -.sceditor-button-superscript div { - - background-position: 0px -96px; - -} -.sceditor-button-subscript div { - - background-position: 0px -112px; - -} -.sceditor-button-strike div { - - background-position: 0px -128px; - -} -.sceditor-button-source div { - - background-position: 0px -144px; - -} -.sceditor-button-size div { - - background-position: 0px -160px; - -} -.sceditor-button-rtl div { - - background-position: 0px -176px; - -} -.sceditor-button-right div { - - background-position: 0px -192px; - -} -.sceditor-button-removeformat div { - - background-position: 0px -208px; - -} -.sceditor-button-quote div { - - background-position: 0px -224px; - -} -.sceditor-button-print div { - - background-position: 0px -240px; - -} -.sceditor-button-pastetext div { - - background-position: 0px -256px; - -} -.sceditor-button-paste div { - - background-position: 0px -272px; - -} -.sceditor-button-orderedlist div { - - background-position: 0px -288px; - -} -.sceditor-button-maximize div { - - background-position: 0px -304px; - -} -.sceditor-button-ltr div { - - background-position: 0px -320px; - -} -.sceditor-button-left div { - - background-position: 0px -336px; - -} -.sceditor-button-justify div { - - background-position: 0px -352px; - -} -.sceditor-button-italic div { - - background-position: 0px -368px; - -} -.sceditor-button-image div { - - background-position: 0px -384px; - -} -.sceditor-button-horizontalrule div { - - background-position: 0px -400px; - -} -.sceditor-button-format div { - - background-position: 0px -416px; - -} -.sceditor-button-font div { - - background-position: 0px -432px; - -} -.sceditor-button-emoticon div { - - background-position: 0px -448px; - -} -.sceditor-emoticons img { - cursor: pointer; -} -.sceditor-button-email div { - - background-position: 0px -464px; - -} -.sceditor-button-date div { - - background-position: 0px -480px; - -} -.sceditor-button-cut div { - - background-position: 0px -496px; - -} -.sceditor-button-copy div { - - background-position: 0px -512px; - -} -.sceditor-button-color div { - - background-position: 0px -528px; - -} -.sceditor-button-code div { - - background-position: 0px -544px; - -} -.sceditor-button-center div { - - background-position: 0px -560px; - -} -.sceditor-button-bulletlist div { - - background-position: 0px -576px; - -} -.sceditor-button-bold div { - - background-position: 0px -592px; - -} -div.sceditor-grip { - - background-position: 0px -608px; - - width: 10px; - - height: 10px; - -} -.rtl div.sceditor-grip { - - background-position: 0px -618px; - - width: 10px; - - height: 10px; - -} -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - padding: 0 4px; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - z-index: 1001; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, .sceditor-container div, div.sceditor-dropdown, div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, .sceditor-container textarea { - border: 0; - outline: 0; - font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 4px; - margin: 5px; - resize: none; - background: #fff; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 99% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 2; - opacity: .3; -} -.ie6 div.sceditor-resize-cover, .ie7 div.sceditor-resize-cover, .ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100%!important; - width: 100%!important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -html.sceditor-maximize, body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 6; - padding: 10px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, div.sceditor-fontsize-picker { - padding: 6px 0; -} -div.sceditor-insertemoticon, div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-insertemoticon img, .sceditor-more-emoticons img { - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-more:hover { - background: #eee; -} -.sceditor-fontsize-option, .sceditor-font-option { - display: block; - padding: 4px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 4px 13px; -} -.sceditor-fontsize-option:hover, .sceditor-font-option:hover { - background: #eee; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -div.sceditor-toolbar { - overflow: hidden; - padding: 2px 2px 1px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #eee; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #ccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, .ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - border: 1px solid #eee; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 .sceditor-button, .ie7 .sceditor-button { - float: none!important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, .sceditor-button:active, .sceditor-button.active { - background: #fff; - /*-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2); - box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2)*/border: 1px solid #ddd; -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2), inset 0 0 8px rgba(0, 0, 0, 0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2), inset 0 0 8px rgba(0, 0, 0, 0.3); - box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2), inset 0 0 8px rgba(0, 0, 0, 0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, .sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: .3; -} -.text .sceditor-button, .text .sceditor-button div, .sceditor-button.text, .sceditor-button.text div, .text-icon .sceditor-button, .text-icon .sceditor-button div, .sceditor-button.text-icon, .sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; -} -.text .sceditor-button div, .sceditor-button.text div { - padding: 0 2px; - background: 0; -} -.text-icon .sceditor-button div, .sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} -.sceditor-container { - padding: 0 4px; - overflow: hidden; -} -.sceditor-container .sceditor-toolbar, .sceditor-container iframe, .sceditor-container textarea { - margin: 0 -4px; -} - -/* Additional buttons (for MyBB) */ -.sceditor-button-video div { - - background-image: url(video.png); - -} -.sceditor-button-php div { - - background-image: url(php.png); - -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/office-toolbar.css b/html/forums/jscripts/sceditor/editor_themes/office-toolbar.css deleted file mode 100644 index 5abf97f..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/office-toolbar.css +++ /dev/null @@ -1,705 +0,0 @@ -/** - * Copyright (C) 2012, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/) - * Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/) - */ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -div.sceditor-grip, -.sceditor-button div { - background-image: url('famfamfam.png'); - background-repeat: no-repeat; - width: 16px; - height: 16px; -} -.sceditor-button-youtube div { - background-position: 0px 0px; -} -.sceditor-button-link div { - background-position: 0px -16px; -} -.sceditor-button-unlink div { - background-position: 0px -32px; -} -.sceditor-button-underline div { - background-position: 0px -48px; -} -.sceditor-button-time div { - background-position: 0px -64px; -} -.sceditor-button-table div { - background-position: 0px -80px; -} -.sceditor-button-superscript div { - background-position: 0px -96px; -} -.sceditor-button-subscript div { - background-position: 0px -112px; -} -.sceditor-button-strike div { - background-position: 0px -128px; -} -.sceditor-button-source div { - background-position: 0px -144px; -} -.sceditor-button-size div { - background-position: 0px -160px; -} -.sceditor-button-rtl div { - background-position: 0px -176px; -} -.sceditor-button-right div { - background-position: 0px -192px; -} -.sceditor-button-removeformat div { - background-position: 0px -208px; -} -.sceditor-button-quote div { - background-position: 0px -224px; -} -.sceditor-button-print div { - background-position: 0px -240px; -} -.sceditor-button-pastetext div { - background-position: 0px -256px; -} -.sceditor-button-paste div { - background-position: 0px -272px; -} -.sceditor-button-orderedlist div { - background-position: 0px -288px; -} -.sceditor-button-maximize div { - background-position: 0px -304px; -} -.sceditor-button-ltr div { - background-position: 0px -320px; -} -.sceditor-button-left div { - background-position: 0px -336px; -} -.sceditor-button-justify div { - background-position: 0px -352px; -} -.sceditor-button-italic div { - background-position: 0px -368px; -} -.sceditor-button-image div { - background-position: 0px -384px; -} -.sceditor-button-horizontalrule div { - background-position: 0px -400px; -} -.sceditor-button-format div { - background-position: 0px -416px; -} -.sceditor-button-font div { - background-position: 0px -432px; -} -.sceditor-button-emoticon div { - background-position: 0px -448px; -} -.sceditor-button-email div { - background-position: 0px -464px; -} -.sceditor-button-date div { - background-position: 0px -480px; -} -.sceditor-button-cut div { - background-position: 0px -496px; -} -.sceditor-button-copy div { - background-position: 0px -512px; -} -.sceditor-button-color div { - background-position: 0px -528px; -} -.sceditor-button-code div { - background-position: 0px -544px; -} -.sceditor-button-center div { - background-position: 0px -560px; -} -.sceditor-button-bulletlist div { - background-position: 0px -576px; -} -.sceditor-button-bold div { - background-position: 0px -592px; -} -div.sceditor-grip { - background-position: 0px -608px; - width: 10px; - height: 10px; -} -.rtl div.sceditor-grip { - background-position: 0px -618px; - width: 10px; - height: 10px; -} -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -/*--------------------------------------------------- - LESS Elements 0.7 - --------------------------------------------------- - A set of useful LESS mixins - More info at: http://lesselements.com - ---------------------------------------------------*/ -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, -.sceditor-container div, -div.sceditor-dropdown, -div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, -.sceditor-container textarea { - line-height: 1; - border: 0; - outline: none; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 0; - margin: 5px; - resize: none; - background: #fff; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 99% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 10; - opacity: 0.3; -} -.ie6 div.sceditor-resize-cover, -.ie7 div.sceditor-resize-cover, -.ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100% !important; - width: 100% !important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - z-index: 2000; -} -html.sceditor-maximize, -body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -/** - * Dropdown styleing - */ -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 4000; - padding: 10px; - line-height: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, -div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, -div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, -div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, -div.sceditor-fontsize-picker, -div.sceditor-format { - padding: 6px 0; -} -div.sceditor-emoticons, -div.sceditor-more-emoticons, -div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-emoticons img, -.sceditor-more-emoticons img { - padding: 0; - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-dropdown a:hover { - background: #eee; -} -.sceditor-fontsize-option, -.sceditor-font-option, -.sceditor-format a { - display: block; - padding: 7px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 7px 13px; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -/** - * Toolbar styleing - */ -div.sceditor-toolbar { - overflow: hidden; - padding: 3px 5px 2px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #ddd; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #aaa; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, -.ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - /* Needed for Safari 5? */ - - text-indent: -9999px; -} -.ie .sceditor-button { - text-indent: 0; -} -.ie6 .sceditor-button, -.ie7 .sceditor-button { - float: none !important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, -.sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: 0.3; -} -.text .sceditor-button, -.text .sceditor-button div, -.sceditor-button.text, -.sceditor-button.text div, -.text-icon .sceditor-button, -.text-icon .sceditor-button div, -.sceditor-button.text-icon, -.sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; - text-indent: 0; -} -.text .sceditor-button div, -.sceditor-button.text div { - padding: 0 2px; - background: none; -} -.text-icon .sceditor-button div, -.sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl div.sceditor-toolbar { - text-align: right; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} -.sceditor-container { - border: 1px solid #8db2e3; -} -.sceditor-container textarea { - font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace; -} -div.sceditor-toolbar { - border-bottom: 1px solid #95a9c3; - background: #dee8f5; - background: -moz-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dee8f5), color-stop(29%, #c7d8ed), color-stop(61%, #ccdcee), color-stop(100%, #c0d8ef)); - background: -webkit-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: -o-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: -ms-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: linear-gradient(to bottom, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dee8f5', endColorstr='#c0d8ef', GradientType=0); -} -.ie9 div.sceditor-toolbar { - filter: none; - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RlZThmNSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjI5JSIgc3RvcC1jb2xvcj0iI2M3ZDhlZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjYxJSIgc3RvcC1jb2xvcj0iI2NjZGNlZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjMGQ4ZWYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -div.sceditor-group { - border: 1px solid #7596bf; - background: transparent; - padding: 0; - background: #cadcf0; - background: -moz-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(24%, #cadcf0), color-stop(38%, #bcd0e9), color-stop(99%, #d0e1f7)); - background: -webkit-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: -o-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: -ms-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: linear-gradient(to bottom, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cadcf0', endColorstr='#d0e1f7', GradientType=0); -} -.ie9 div.sceditor-group { - filter: none; - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIyNCUiIHN0b3AtY29sb3I9IiNjYWRjZjAiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIzOCUiIHN0b3AtY29sb3I9IiNiY2QwZTkiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSI5OSUiIHN0b3AtY29sb3I9IiNkMGUxZjciIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.sceditor-button { - height: 16px; - padding: 3px 4px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea; - -moz-box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea; - box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea; -} -.sceditor-button:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.sceditor-button:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.sceditor-button div { - margin: 0; -} -.ie9 .sceditor-button { - filter: none !important; -} -.sceditor-button.active { - background: #fbdbb5; - background: -moz-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(11%, #fbdbb5), color-stop(29%, #feb456), color-stop(99%, #fdeb9f)); - background: -webkit-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: -o-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: -ms-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbdbb5', endColorstr='#fdeb9f', GradientType=0); - -webkit-box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea; - -moz-box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea; - box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea; -} -.ie9 .sceditor-button.active { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiNmYmRiYjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiNmZWI0NTYiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSI5OSUiIHN0b3AtY29sb3I9IiNmZGZkOWYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.sceditor-button:hover { - background: #fef7d5; - background: -moz-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fef7d5), color-stop(42%, #fae5a9), color-stop(42%, #ffd048), color-stop(100%, #ffe59f)); - background: -webkit-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: -o-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: -ms-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: linear-gradient(to bottom, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fef7d5', endColorstr='#ffe59f', GradientType=0); - -webkit-box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc; - -moz-box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc; - box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc; -} -.ie9 .sceditor-button:hover { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZjdkNSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQyJSIgc3RvcC1jb2xvcj0iI2ZhZTVhOSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQyJSIgc3RvcC1jb2xvcj0iI2ZmZDA0OCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmU1OWYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.sceditor-button:active { - background: #e7a66d; - background: -moz-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e7a66d), color-stop(1%, #fcb16d), color-stop(42%, #ff8d05), color-stop(100%, #ffc450)); - background: -webkit-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: -o-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: -ms-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: linear-gradient(to bottom, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e7a66d', endColorstr='#ffc450', GradientType=0); - -webkit-box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33; - -moz-box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33; - box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33; -} -.ie9 .sceditor-button:active { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U3YTY2ZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjElIiBzdG9wLWNvbG9yPSIjZmNiMTZkIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNDIlIiBzdG9wLWNvbG9yPSIjZmY4ZDA1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmYzQ1MCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=); -} -.sceditor-button.active:hover { - background: #dba368; - background: -moz-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dba368), color-stop(4%, #ffbd79), color-stop(34%, #fea335), color-stop(66%, #ffc64c), color-stop(100%, #fee069)); - background: -webkit-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: -o-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: -ms-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: linear-gradient(to bottom, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dba368', endColorstr='#fee069', GradientType=0); - -webkit-box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b; - -moz-box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b; - box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b; -} -.ie9 .sceditor-button.active:hover { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiYTM2OCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQlIiBzdG9wLWNvbG9yPSIjZmZiZDc5IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMzQlIiBzdG9wLWNvbG9yPSIjZmVhMzM1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNjYlIiBzdG9wLWNvbG9yPSIjZmZjNjRjIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZlZTA2OSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=); -} - -/* Additional buttons (for MyBB) */ -.sceditor-button-video div { - - background-image: url(video.png); - -} -.sceditor-button-php div { - - background-image: url(php.png); - -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/office.css b/html/forums/jscripts/sceditor/editor_themes/office.css deleted file mode 100644 index 1a79c41..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/office.css +++ /dev/null @@ -1,734 +0,0 @@ -/** - * Copyright (C) 2012, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/) - * Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/) - */ -/** - * Copyright (C) 2012, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/) - * Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/) - */ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -div.sceditor-grip, -.sceditor-button div { - background-image: url('famfamfam.png'); - background-repeat: no-repeat; - width: 16px; - height: 16px; -} -.sceditor-button-youtube div { - background-position: 0px 0px; -} -.sceditor-button-link div { - background-position: 0px -16px; -} -.sceditor-button-unlink div { - background-position: 0px -32px; -} -.sceditor-button-underline div { - background-position: 0px -48px; -} -.sceditor-button-time div { - background-position: 0px -64px; -} -.sceditor-button-table div { - background-position: 0px -80px; -} -.sceditor-button-superscript div { - background-position: 0px -96px; -} -.sceditor-button-subscript div { - background-position: 0px -112px; -} -.sceditor-button-strike div { - background-position: 0px -128px; -} -.sceditor-button-source div { - background-position: 0px -144px; -} -.sceditor-button-size div { - background-position: 0px -160px; -} -.sceditor-button-rtl div { - background-position: 0px -176px; -} -.sceditor-button-right div { - background-position: 0px -192px; -} -.sceditor-button-removeformat div { - background-position: 0px -208px; -} -.sceditor-button-quote div { - background-position: 0px -224px; -} -.sceditor-button-print div { - background-position: 0px -240px; -} -.sceditor-button-pastetext div { - background-position: 0px -256px; -} -.sceditor-button-paste div { - background-position: 0px -272px; -} -.sceditor-button-orderedlist div { - background-position: 0px -288px; -} -.sceditor-button-maximize div { - background-position: 0px -304px; -} -.sceditor-button-ltr div { - background-position: 0px -320px; -} -.sceditor-button-left div { - background-position: 0px -336px; -} -.sceditor-button-justify div { - background-position: 0px -352px; -} -.sceditor-button-italic div { - background-position: 0px -368px; -} -.sceditor-button-image div { - background-position: 0px -384px; -} -.sceditor-button-horizontalrule div { - background-position: 0px -400px; -} -.sceditor-button-format div { - background-position: 0px -416px; -} -.sceditor-button-font div { - background-position: 0px -432px; -} -.sceditor-button-emoticon div { - background-position: 0px -448px; -} -.sceditor-button-email div { - background-position: 0px -464px; -} -.sceditor-button-date div { - background-position: 0px -480px; -} -.sceditor-button-cut div { - background-position: 0px -496px; -} -.sceditor-button-copy div { - background-position: 0px -512px; -} -.sceditor-button-color div { - background-position: 0px -528px; -} -.sceditor-button-code div { - background-position: 0px -544px; -} -.sceditor-button-center div { - background-position: 0px -560px; -} -.sceditor-button-bulletlist div { - background-position: 0px -576px; -} -.sceditor-button-bold div { - background-position: 0px -592px; -} -div.sceditor-grip { - background-position: 0px -608px; - width: 10px; - height: 10px; -} -.rtl div.sceditor-grip { - background-position: 0px -618px; - width: 10px; - height: 10px; -} -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -/*--------------------------------------------------- - LESS Elements 0.7 - --------------------------------------------------- - A set of useful LESS mixins - More info at: http://lesselements.com - ---------------------------------------------------*/ -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, -.sceditor-container div, -div.sceditor-dropdown, -div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, -.sceditor-container textarea { - line-height: 1; - border: 0; - outline: none; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 0; - margin: 5px; - resize: none; - background: #fff; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 90% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 10; - opacity: 0.3; -} -.ie6 div.sceditor-resize-cover, -.ie7 div.sceditor-resize-cover, -.ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100% !important; - width: 100% !important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - z-index: 2000; -} -html.sceditor-maximize, -body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -/** - * Dropdown styleing - */ -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 4000; - padding: 10px; - line-height: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, -div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, -div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, -div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, -div.sceditor-fontsize-picker, -div.sceditor-format { - padding: 6px 0; -} -div.sceditor-emoticons, -div.sceditor-more-emoticons, -div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-emoticons img, -.sceditor-more-emoticons img { - padding: 0; - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-dropdown a:hover { - background: #eee; -} -.sceditor-fontsize-option, -.sceditor-font-option, -.sceditor-format a { - display: block; - padding: 7px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 7px 13px; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -/** - * Toolbar styleing - */ -div.sceditor-toolbar { - overflow: hidden; - padding: 3px 5px 2px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #ddd; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #aaa; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, -.ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - /* Needed for Safari 5? */ - - text-indent: -9999px; -} -.ie .sceditor-button { - text-indent: 0; -} -.ie6 .sceditor-button, -.ie7 .sceditor-button { - float: none !important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, -.sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: 0.3; -} -.text .sceditor-button, -.text .sceditor-button div, -.sceditor-button.text, -.sceditor-button.text div, -.text-icon .sceditor-button, -.text-icon .sceditor-button div, -.sceditor-button.text-icon, -.sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; - text-indent: 0; -} -.text .sceditor-button div, -.sceditor-button.text div { - padding: 0 2px; - background: none; -} -.text-icon .sceditor-button div, -.sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl div.sceditor-toolbar { - text-align: right; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} -.sceditor-container { - border: 1px solid #8db2e3; -} -.sceditor-container textarea { - font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace; -} -div.sceditor-toolbar { - border-bottom: 1px solid #95a9c3; - background: #dee8f5; - background: -moz-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dee8f5), color-stop(29%, #c7d8ed), color-stop(61%, #ccdcee), color-stop(100%, #c0d8ef)); - background: -webkit-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: -o-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: -ms-linear-gradient(top, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - background: linear-gradient(to bottom, #dee8f5 0%, #c7d8ed 29%, #ccdcee 61%, #c0d8ef 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dee8f5', endColorstr='#c0d8ef', GradientType=0); -} -.ie9 div.sceditor-toolbar { - filter: none; - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RlZThmNSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjI5JSIgc3RvcC1jb2xvcj0iI2M3ZDhlZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjYxJSIgc3RvcC1jb2xvcj0iI2NjZGNlZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjMGQ4ZWYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -div.sceditor-group { - border: 1px solid #7596bf; - background: transparent; - padding: 0; - background: #cadcf0; - background: -moz-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(24%, #cadcf0), color-stop(38%, #bcd0e9), color-stop(99%, #d0e1f7)); - background: -webkit-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: -o-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: -ms-linear-gradient(top, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - background: linear-gradient(to bottom, #cadcf0 24%, #bcd0e9 38%, #d0e1f7 99%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cadcf0', endColorstr='#d0e1f7', GradientType=0); -} -.ie9 div.sceditor-group { - filter: none; - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIyNCUiIHN0b3AtY29sb3I9IiNjYWRjZjAiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIzOCUiIHN0b3AtY29sb3I9IiNiY2QwZTkiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSI5OSUiIHN0b3AtY29sb3I9IiNkMGUxZjciIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.sceditor-button { - height: 16px; - padding: 3px 4px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea; - -moz-box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea; - box-shadow: inset 0 1px #d5e3f1, inset 0 -1px #e3edfb, inset 1px 0 #cddcef, inset -1px 0 #b8ceea; -} -.sceditor-button:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.sceditor-button:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.sceditor-button div { - margin: 0; -} -.ie9 .sceditor-button { - filter: none !important; -} -.sceditor-button.active { - background: #fbdbb5; - background: -moz-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(11%, #fbdbb5), color-stop(29%, #feb456), color-stop(99%, #fdeb9f)); - background: -webkit-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: -o-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: -ms-linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - background: linear-gradient(top, #fbdbb5 11%, #feb456 29%, #fdeb9f 99%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbdbb5', endColorstr='#fdeb9f', GradientType=0); - -webkit-box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea; - -moz-box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea; - box-shadow: inset 0 1px #ebd1b4, inset 0 -1px #ffe47f, inset -1px 0 #b8ceea; -} -.ie9 .sceditor-button.active { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiNmYmRiYjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiNmZWI0NTYiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSI5OSUiIHN0b3AtY29sb3I9IiNmZGZkOWYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.sceditor-button:hover { - background: #fef7d5; - background: -moz-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fef7d5), color-stop(42%, #fae5a9), color-stop(42%, #ffd048), color-stop(100%, #ffe59f)); - background: -webkit-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: -o-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: -ms-linear-gradient(top, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - background: linear-gradient(to bottom, #fef7d5 0%, #fae5a9 42%, #ffd048 42%, #ffe59f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fef7d5', endColorstr='#ffe59f', GradientType=0); - -webkit-box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc; - -moz-box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc; - box-shadow: inset 0 1px #fffbe8, inset -1px 0 #ffefc4, inset 0 -1px #fff9cc; -} -.ie9 .sceditor-button:hover { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZjdkNSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQyJSIgc3RvcC1jb2xvcj0iI2ZhZTVhOSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQyJSIgc3RvcC1jb2xvcj0iI2ZmZDA0OCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmU1OWYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.sceditor-button:active { - background: #e7a66d; - background: -moz-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e7a66d), color-stop(1%, #fcb16d), color-stop(42%, #ff8d05), color-stop(100%, #ffc450)); - background: -webkit-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: -o-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: -ms-linear-gradient(top, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - background: linear-gradient(to bottom, #e7a66d 0%, #fcb16d 1%, #ff8d05 42%, #ffc450 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e7a66d', endColorstr='#ffc450', GradientType=0); - -webkit-box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33; - -moz-box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33; - box-shadow: inset 0 1px 1px #7b6645, inset 0 -1px #d19c33; -} -.ie9 .sceditor-button:active { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U3YTY2ZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjElIiBzdG9wLWNvbG9yPSIjZmNiMTZkIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNDIlIiBzdG9wLWNvbG9yPSIjZmY4ZDA1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmYzQ1MCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=); -} -.sceditor-button.active:hover { - background: #dba368; - background: -moz-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dba368), color-stop(4%, #ffbd79), color-stop(34%, #fea335), color-stop(66%, #ffc64c), color-stop(100%, #fee069)); - background: -webkit-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: -o-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: -ms-linear-gradient(top, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - background: linear-gradient(to bottom, #dba368 0%, #ffbd79 4%, #fea335 34%, #ffc64c 66%, #fee069 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dba368', endColorstr='#fee069', GradientType=0); - -webkit-box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b; - -moz-box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b; - box-shadow: inset 0 1px 1px #9e8255, inset 0 -1px #fcce6b; -} -.ie9 .sceditor-button.active:hover { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiYTM2OCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQlIiBzdG9wLWNvbG9yPSIjZmZiZDc5IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMzQlIiBzdG9wLWNvbG9yPSIjZmVhMzM1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNjYlIiBzdG9wLWNvbG9yPSIjZmZjNjRjIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZlZTA2OSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=); -} -.sceditor-container { - background: #a3c2ea; - background: -moz-linear-gradient(top, #a3c2ea 0%, #6d92c1 39%, #577fb3 64%, #6591cc 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #a3c2ea), color-stop(39%, #6d92c1), color-stop(64%, #577fb3), color-stop(100%, #6591cc)); - background: -webkit-linear-gradient(top, #a3c2ea 0%, #6d92c1 39%, #577fb3 64%, #6591cc 100%); - background: -o-linear-gradient(top, #a3c2ea 0%, #6d92c1 39%, #577fb3 64%, #6591cc 100%); - background: -ms-linear-gradient(top, #a3c2ea 0%, #6d92c1 39%, #577fb3 64%, #6591cc 100%); - background: linear-gradient(top, #a3c2ea 0%, #6d92c1 39%, #577fb3 64%, #6591cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#a3c2ea', endColorstr='#6591cc', GradientType=0); -} -.sceditor-container iframe, -.sceditor-container textarea { - border: 1px solid #646464; - background: #fff; - margin: 7px 4.5%; - padding: 20px; - -webkit-box-shadow: 1px 1px 5px #293a52; - -moz-box-shadow: 1px 1px 5px #293a52; - box-shadow: 1px 1px 5px #293a52; -} - -/* Additional buttons (for MyBB) */ -.sceditor-button-video div { - - background-image: url(video.png); - -} -.sceditor-button-php div { - - background-image: url(php.png); - -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/php.png b/html/forums/jscripts/sceditor/editor_themes/php.png deleted file mode 100644 index 2cec03c0546aa294bfae89a24a4ff31e5fd382d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmV;^0WAKBP)eYn5+st~94ofjY+$$BgP6@`FdB`Z zR;x*(R4O4ZE-onH#p{`XB{-c|Kvu;W*Eb8OkrKb?5SX6X7?FUh? z7pYus;>37ZL?ftFMoB=+c=J}w?u(bchlYkVz{AIBqJX|bFy7cS3|gH9JRT1r3B--G z09yMcSXK}~V2${>fJ@Hc7Phk=YbnNDE1h0JaF9vJx;9R;nt9@_o+)yZbD#hK002ov JPDHLkV1j^6(Ki49 diff --git a/html/forums/jscripts/sceditor/editor_themes/square.css b/html/forums/jscripts/sceditor/editor_themes/square.css deleted file mode 100644 index 2bda9c6..0000000 --- a/html/forums/jscripts/sceditor/editor_themes/square.css +++ /dev/null @@ -1,668 +0,0 @@ -/** - * Square theme - * - * This theme is best suited to short toolbars that - * don't span multiple lines. - * - * Copyright (C) 2012, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Icons by Mark James (http://www.famfamfam.com/lab/icons/silk/) - * Licensed under the Creative Commons CC-BY license (http://creativecommons.org/licenses/by/3.0/) - */ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -div.sceditor-grip, -.sceditor-button div { - background-image: url('famfamfam.png'); - background-repeat: no-repeat; - width: 16px; - height: 16px; -} -.sceditor-button-youtube div { - background-position: 0px 0px; -} -.sceditor-button-link div { - background-position: 0px -16px; -} -.sceditor-button-unlink div { - background-position: 0px -32px; -} -.sceditor-button-underline div { - background-position: 0px -48px; -} -.sceditor-button-time div { - background-position: 0px -64px; -} -.sceditor-button-table div { - background-position: 0px -80px; -} -.sceditor-button-superscript div { - background-position: 0px -96px; -} -.sceditor-button-subscript div { - background-position: 0px -112px; -} -.sceditor-button-strike div { - background-position: 0px -128px; -} -.sceditor-button-source div { - background-position: 0px -144px; -} -.sceditor-button-size div { - background-position: 0px -160px; -} -.sceditor-button-rtl div { - background-position: 0px -176px; -} -.sceditor-button-right div { - background-position: 0px -192px; -} -.sceditor-button-removeformat div { - background-position: 0px -208px; -} -.sceditor-button-quote div { - background-position: 0px -224px; -} -.sceditor-button-print div { - background-position: 0px -240px; -} -.sceditor-button-pastetext div { - background-position: 0px -256px; -} -.sceditor-button-paste div { - background-position: 0px -272px; -} -.sceditor-button-orderedlist div { - background-position: 0px -288px; -} -.sceditor-button-maximize div { - background-position: 0px -304px; -} -.sceditor-button-ltr div { - background-position: 0px -320px; -} -.sceditor-button-left div { - background-position: 0px -336px; -} -.sceditor-button-justify div { - background-position: 0px -352px; -} -.sceditor-button-italic div { - background-position: 0px -368px; -} -.sceditor-button-image div { - background-position: 0px -384px; -} -.sceditor-button-horizontalrule div { - background-position: 0px -400px; -} -.sceditor-button-format div { - background-position: 0px -416px; -} -.sceditor-button-font div { - background-position: 0px -432px; -} -.sceditor-button-emoticon div { - background-position: 0px -448px; -} -.sceditor-button-email div { - background-position: 0px -464px; -} -.sceditor-button-date div { - background-position: 0px -480px; -} -.sceditor-button-cut div { - background-position: 0px -496px; -} -.sceditor-button-copy div { - background-position: 0px -512px; -} -.sceditor-button-color div { - background-position: 0px -528px; -} -.sceditor-button-code div { - background-position: 0px -544px; -} -.sceditor-button-center div { - background-position: 0px -560px; -} -.sceditor-button-bulletlist div { - background-position: 0px -576px; -} -.sceditor-button-bold div { - background-position: 0px -592px; -} -div.sceditor-grip { - background-position: 0px -608px; - width: 10px; - height: 10px; -} -.rtl div.sceditor-grip { - background-position: 0px -618px; - width: 10px; - height: 10px; -} -/** - * SCEditor - * http://www.ssceditor.com/ - * - * Copyright (C) 2011-12, Sam Clarke (samclarke.com) - * - * SCEditor is licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - */ -/*--------------------------------------------------- - LESS Elements 0.7 - --------------------------------------------------- - A set of useful LESS mixins - More info at: http://lesselements.com - ---------------------------------------------------*/ -.sceditor-container { - position: relative; - background: #fff; - border: 1px solid #d9d9d9; - font-size: 13px; - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - color: #222; - line-height: 1; - font-weight: bold; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100% !important; -} -.sceditor-container, -.sceditor-container div, -div.sceditor-dropdown, -div.sceditor-dropdown div { - padding: 0; - margin: 0; - z-index: 3; -} -.sceditor-container iframe, -.sceditor-container textarea { - line-height: 1; - border: 0; - outline: none; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 13px; - color: #111; - padding: 0; - margin: 5px; - resize: none; - background: #fff; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 99% !important; -} -div.sceditor-resize-cover { - position: absolute; - top: 0; - left: 0; - background: #000; - width: 100%; - height: 100%; - z-index: 10; - opacity: 0.3; -} -.ie6 div.sceditor-resize-cover, -.ie7 div.sceditor-resize-cover, -.ie8 div.sceditor-resize-cover { - background: #efefef; -} -.sceditor-container.ie6 { - overflow: hidden; -} -div.sceditor-grip { - overflow: hidden; - width: 10px; - height: 10px; - cursor: pointer; - position: absolute; - bottom: 0; - right: 0; - z-index: 3; -} -.sceditor-maximize { - position: fixed; - top: 0; - left: 0; - height: 100% !important; - width: 100% !important; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - z-index: 2000; -} -html.sceditor-maximize, -body.sceditor-maximize { - height: 100%; - width: 100%; - padding: 0; - margin: 0; - overflow: hidden; -} -.ie6.sceditor-maximize { - position: absolute; -} -.sceditor-maximize div.sceditor-grip { - display: none; -} -.sceditor-maximize div.sceditor-toolbar { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -/** - * Dropdown styleing - */ -div.sceditor-dropdown { - position: absolute; - border: 1px solid #ccc; - background: #fff; - color: #333; - z-index: 4000; - padding: 10px; - line-height: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); -} -div.sceditor-dropdown a, -div.sceditor-dropdown a:link { - color: #333; -} -div.sceditor-dropdown form { - margin: 0; -} -div.sceditor-dropdown label { - display: block; - font-weight: bold; - color: #3c3c3c; - padding: 4px 0; -} -div.sceditor-dropdown input, -div.sceditor-dropdown textarea { - font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; - outline: 0; - padding: 4px; - border: 1px solid #ccc; - border-top-color: #888; - margin: 0 0 .75em; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-dropdown textarea { - padding: 6px; -} -div.sceditor-dropdown input:focus, -div.sceditor-dropdown textarea:focus { - border-color: #aaa; - border-top-color: #666; - -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); -} -div.sceditor-dropdown .button { - font-weight: bold; - color: #444; - padding: 6px 12px; - background: #ececec; - border: solid 1px #ccc; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - cursor: pointer; - margin: .3em 0 0; -} -div.sceditor-dropdown .button:hover { - background: #f3f3f3; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); -} -div.sceditor-font-picker, -div.sceditor-fontsize-picker, -div.sceditor-format { - padding: 6px 0; -} -div.sceditor-emoticons, -div.sceditor-more-emoticons, -div.sceditor-color-picker { - padding: 0; -} -.sceditor-pastetext textarea { - border: 1px solid #bbb; - width: 20em; -} -.sceditor-emoticons img, -.sceditor-more-emoticons img { - padding: 0; - cursor: pointer; - margin: 2px; -} -.sceditor-more { - border-top: 1px solid #bbb; - display: block; - text-align: center; - cursor: pointer; - font-weight: bold; - padding: 6px 0; -} -.sceditor-dropdown a:hover { - background: #eee; -} -.sceditor-fontsize-option, -.sceditor-font-option, -.sceditor-format a { - display: block; - padding: 7px 10px; - cursor: pointer; - text-decoration: none; - color: #222; -} -.sceditor-fontsize-option { - padding: 7px 13px; -} -.sceditor-color-column { - float: left; -} -.sceditor-color-option { - display: block; - border: 1px solid #fff; - height: 10px; - width: 10px; - overflow: hidden; -} -.sceditor-color-option:hover { - border: 1px solid #333; -} -/** - * Toolbar styleing - */ -div.sceditor-toolbar { - overflow: hidden; - padding: 3px 5px 2px; - background: #f7f7f7; - border-bottom: 1px solid #c0c0c0; - line-height: 0; - text-align: left; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group { - display: inline-block; - background: #ddd; - margin: 1px 5px 1px 0; - padding: 1px; - border-bottom: 1px solid #aaa; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.ie6 div.sceditor-group, -.ie7 div.sceditor-group { - display: inline; - zoom: 1; -} -.sceditor-button { - float: left; - cursor: pointer; - padding: 3px 5px; - width: 16px; - height: 20px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - /* Needed for Safari 5? */ - - text-indent: -9999px; -} -.ie .sceditor-button { - text-indent: 0; -} -.ie6 .sceditor-button, -.ie7 .sceditor-button { - float: none !important; - display: inline; - zoom: 1; -} -.ie6 .sceditor-button { - padding: 0; -} -.ie6 .sceditor-button div { - margin: 5px; -} -.ie7 .sceditor-button div { - margin: 5px 0; -} -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2); -} -.sceditor-button:active { - background: #fff; - -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - -moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); - box-shadow: inset 1px 1px 0 rgba(0,0,0,0.3), inset -1px 0 rgba(0,0,0,0.3), inset 0 -1px 0 rgba(0,0,0,0.2), inset 0 0 8px rgba(0,0,0,0.3); -} -.sceditor-button.disabled:hover { - background: inherit; - cursor: default; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.sceditor-button, -.sceditor-button div { - display: block; -} -.sceditor-button div { - margin: 2px 0; - padding: 0; - overflow: hidden; - line-height: 0; - font-size: 0; - color: transparent; -} -.sceditor-button.disabled div { - filter: alpha(opacity=30); - opacity: 0.3; -} -.text .sceditor-button, -.text .sceditor-button div, -.sceditor-button.text, -.sceditor-button.text div, -.text-icon .sceditor-button, -.text-icon .sceditor-button div, -.sceditor-button.text-icon, -.sceditor-button.text-icon div { - width: auto; - overflow: visible; - line-height: 16px; - font-size: 1em; - color: inherit; - text-indent: 0; -} -.text .sceditor-button div, -.sceditor-button.text div { - padding: 0 2px; - background: none; -} -.text-icon .sceditor-button div, -.sceditor-button.text-icon div { - padding: 0 2px 0 20px; -} -.rtl div.sceditor-toolbar { - text-align: right; -} -.rtl .sceditor-button { - float: right; -} -.rtl div.sceditor-grip { - right: auto; - left: 0; -} -.sceditor-container { - border: 1px solid #d6d6d6; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.sceditor-container textarea { - font-family: Consolas, "Bitstream Vera Sans Mono", "Andale Mono", Monaco, "DejaVu Sans Mono", "Lucida Console", monospace; - background: #2e3436; - color: #fff; - margin: 0; - padding: 5px; -} -div.sceditor-toolbar, -div.sceditor-group { - background: #f2f2f2; - background: -moz-linear-gradient(top, #f2f2f2 0%, #dddddd 89%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(89%, #dddddd)); - background: -webkit-linear-gradient(top, #f2f2f2 0%, #dddddd 89%); - background: -o-linear-gradient(top, #f2f2f2 0%, #dddddd 89%); - background: -ms-linear-gradient(top, #f2f2f2 0%, #dddddd 89%); - background: linear-gradient(to bottom, #f2f2f2 0%, #dddddd 89%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#dddddd', GradientType=0); -} -div.sceditor-toolbar { - padding: 0; - border-bottom: 1px solid #bbb; - -moz-background-size: 100% 32px; - -o-background-size: 100% 32px; - -webkit-background-size: 100% 32px; - background-size: 100% 32px; -} -div.sceditor-group { - margin: 0; - padding: 2px 4px; - border: 0; - border-right: 1px solid #ccc; - border-left: 1px solid #eaeaea; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -div.sceditor-group:last-child { - border-right: 0; -} -div.sceditor-group:first-child { - border-left: 0; -} -.sceditor-button { - height: 16px; - padding: 5px; - margin: 1px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} -.sceditor-button div { - margin: 0; -} -.sceditor-button.active, -.sceditor-button:hover, -.sceditor-button:active, -.sceditor-button.active:hover { - margin: 0; - box-shadow: none; -} -.sceditor-button.active { - background: #f4f4f4; - border: 1px solid #ccc; -} -.sceditor-button:hover { - background: #fefefe; - border: 1px solid #ddd; -} -.sceditor-button.disabled:hover { - margin: 1px; - border: 0; -} -.sceditor-button:active { - background: #eee; - border: 1px solid #ccc; -} -.sceditor-button.active:hover { - background: #f8f8f8; - border: 1px solid #ddd; -} - -/* Additional buttons (for MyBB) */ -.sceditor-button-video div { - - background-image: url(video.png); - -} -.sceditor-button-php div { - - background-image: url(php.png); - -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/editor_themes/video.png b/html/forums/jscripts/sceditor/editor_themes/video.png deleted file mode 100644 index d230cd420fea2fb1f811c10b326cd1fef77cab10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%A_P)_+Q2pKTjs+xE<7+qP}p;;dunS$3vI9+I8|u&&G~q2!hq+2Vpl0-%k~@$E)(LCq z_OGFf(CJ%6hj$gVx=Bz+@cDo?lgadx?SL`91$l4{vfwJZd@E>oEuz6Zjc-*6ywCB1 zI?UDb0X<_#;aWw5eh#(jY1C;aA@@w9-Z+Gh6%oA4@qs#m&j*a@bedL2yPa!jwJn1_ zzA3hbSaJ@5_%zBigZNUF0(F>cYNF)Zxc1kLho=_wb$)QLj+WHylFxSQhoQ$~^*8v(GhbYqSB44#5fIQ_ka^xGJ zj^OhFcQhKM)kRtO94+2cR9cUIp~7+q>M+;M2YiebS?CINmJ`(2PSD`FprFoqhAJ{# zs@nl|1fLHC!{IRfJsYjo3sk6&Q7qd>e#bVlTi21>v4$qsK01O&pbm3`d?3o$Yq8#- zN_&nnA5Ei5~w5i5CUZBce~vqWP9Cgy+^b290||("state"===c?g.push(!!f):"instance"===c?g.push(f):f||new b(this,c))}),g.length?1===g.length?g[0]:a(g):this):void 0}}.call(b,c,b,a),!(void 0!==d&&(a.exports=d))},function(a){a.exports=jQuery},function(a,b,c){var d;d=function(){"use strict";var a=c(1),b=c(3),d=c(8),e=c(9),f=c(5),g=c(4),h=c(10),i=window,j=document,k=a(i),l=a(j),m=g.ie,n=m&&11>m,o=function(c,p){var q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb,mb,nb,ob,pb,qb,rb,sb,tb,ub=this,vb=c.get?c.get(0):c,wb=a(vb),xb=[],yb=[],zb=[],Ab={},Bb=[],Cb={};ub.commands=a.extend(!0,{},p.commands||o.commands),ub.opts=p=a.extend({},o.defaultOptions,p),K=function(){wb.data("sceditor",ub),a.each(p,function(b,c){a.isPlainObject(c)&&(p[b]=a.extend(!0,{},c))}),p.locale&&"en"!==p.locale&&Q(),q=a('

    ').insertAfter(wb).css("z-index",p.zIndex),m&&q.addClass("ie ie"+m),H=!!wb.attr("required"),wb.removeAttr("required"),P(),W(),R(),O(),U(),S(),T(),g.isWysiwygSupported||ub.toggleSourceMode(),hb();var b=function(){k.unbind("load",b),p.autofocus&&mb(),p.autoExpand&&ub.expandToContent(),fb(),C.call("ready")};k.load(b),j.readyState&&"complete"===j.readyState&&b()},P=function(){var c=p.plugins;c=c?c.toString().split(","):[],C=new b(ub),a.each(c,function(b,c){C.register(a.trim(c))})},Q=function(){var a;A=o.locale[p.locale],A||(a=p.locale.split("-"),A=o.locale[a[0]]),A&&A.dateFormat&&(p.dateFormat=A.dateFormat)},O=function(){var b,c;w=a("").hide(),s=a(''),p.spellcheck||w.attr("spellcheck","false"),"https:"===i.location.protocol&&s.attr("src","javascript:false"),q.append(s).append(w),t=s[0],x=w[0],ub.dimensions(p.width||wb.width(),p.height||wb.height()),b=X(),b.open(),b.write(h("html",{attrs:m?' class="ie ie"'+m:"",spellcheck:p.spellcheck?"":'spellcheck="false"',charset:p.charset,style:p.style})),b.close(),v=a(b),u=a(b.body),ub.readOnly(!!p.readOnly),(g.ios||m)&&(u.height("100%"),m||u.bind("touchend",ub.focus)),c=wb.attr("tabindex"),w.attr("tabindex",c),s.attr("tabindex",c),B=new d(t.contentWindow),ub.val(wb.hide().val())},S=function(){p.autoUpdate&&(u.bind("blur",tb),w.bind("blur",tb)),null===p.rtl&&(p.rtl="rtl"===w.css("direction")),ub.rtl(!!p.rtl),p.autoExpand&&v.bind("keyup",ub.expandToContent),p.resizeEnabled&&V(),q.attr("id",p.id),ub.emoticons(p.emoticonsEnabled)},T=function(){var b=m?"selectionchange":"keyup focus blur contextmenu mouseup touchend click",c="keydown keyup keypress focus blur contextmenu";l.click(eb),a(vb.form).bind("reset",bb).submit(ub.updateOriginal),k.bind("resize orientationChanged",fb),u.keypress(ab).keydown($).keydown(_).keyup(jb).blur(rb).keyup(sb).bind("paste",Y).bind(b,kb).bind(c,db),p.emoticonsCompat&&i.getSelection&&u.keyup(ob),w.blur(rb).keyup(sb).keydown($).bind(c,db),v.mousedown(cb).blur(rb).bind(b,kb).bind("beforedeactivate keyup mouseup",N).keyup(jb).focus(function(){z=null}),q.bind("selectionchanged",lb).bind("selectionchanged",hb).bind("selectionchanged valuechanged nodechanged",db)},R=function(){var b,c=ub.commands,d=(p.toolbarExclude||"").split(","),e=p.toolbar.split("|");r=a('
    '),a.each(e,function(e,f){b=a('
    '),a.each(f.split(","),function(e,f){var g,i,j=c[f];!j||a.inArray(f,d)>-1||(i=j.shortcut,g=h("toolbarButton",{name:f,dispName:ub._(j.tooltip||f)},!0),g.data("sceditor-txtmode",!!j.txtExec).data("sceditor-wysiwygmode",!!j.exec).toggleClass("disabled",!j.exec).mousedown(function(){(!m||9>m)&&(J=!0)}).click(function(){var b=a(this);return b.hasClass("disabled")||M(b,j),hb(),!1}),j.tooltip&&g.attr("title",ub._(j.tooltip)+(i?"("+i+")":"")),i&&ub.addShortcut(i,f),j.state?zb.push({name:f,state:j.state}):"string"==typeof j.exec&&zb.push({name:f,state:j.exec}),b.append(g),Cb[f]=g)}),b[0].firstChild&&r.append(b)}),a(p.toolbarContainer||q).append(r)},U=function(){a.each(ub.commands,function(b,c){c.forceNewLineAfter&&a.isArray(c.forceNewLineAfter)&&(yb=a.merge(yb,c.forceNewLineAfter))}),jb()},V=function(){var b,c,d,e,f,g,h=a('
    '),j=a('
    '),k="touchmove mousemove",n="touchcancel touchend mouseup",o=0,r=0,s=0,t=0,u=0,v=0,w=q.width(),x=q.height(),y=!1,z=ub.rtl();b=p.resizeMinHeight||x/1.5,c=p.resizeMaxHeight||2.5*x,d=p.resizeMinWidth||w/1.25,e=p.resizeMaxWidth||1.25*w,f=function(a){"touchmove"===a.type?(a=i.event,s=a.changedTouches[0].pageX,t=a.changedTouches[0].pageY):(s=a.pageX,t=a.pageY);var f=v+(t-r),g=z?u-(s-o):u+(s-o);e>0&&g>e&&(g=e),d>0&&d>g&&(g=d),p.resizeWidth||(g=!1),c>0&&f>c&&(f=c),b>0&&b>f&&(f=b),p.resizeHeight||(f=!1),(g||f)&&(ub.dimensions(g,f),7>m&&q.height(f)),a.preventDefault()},g=function(a){y&&(y=!1,j.hide(),q.removeClass("resizing").height("auto"),l.unbind(k,f),l.unbind(n,g),a.preventDefault())},q.append(h),q.append(j.hide()),h.bind("touchstart mousedown",function(a){"touchstart"===a.type?(a=i.event,o=a.touches[0].pageX,r=a.touches[0].pageY):(o=a.pageX,r=a.pageY),u=q.width(),v=q.height(),y=!0,q.addClass("resizing"),j.show(),l.bind(k,f),l.bind(n,g),7>m&&q.height(v),a.preventDefault()})},W=function(){var b,c=p.emoticons,d=p.emoticonsRoot;a.isPlainObject(c)&&p.emoticonsEnabled&&a.each(c,function(e,f){a.each(f,function(a,f){d&&(f={url:d+(f.url||f),tooltip:f.tooltip||a},c[e][a]=f),b=j.createElement("img"),b.src=f.url||f,xb.push(b)})})},mb=function(){var b,c,d=v[0],f=u[0],g=f.firstChild,h=!!p.autofocusEnd;if(q.is(":visible")){if(ub.sourceMode())return c=h?x.value.length:0,void(x.setSelectionRange?x.setSelectionRange(c,c):(b=x.createTextRange(),b.moveEnd("character",c),b.collapse(!1),b.select()));if(e.removeWhiteSpace(f),h)for((g=f.lastChild)||(g=d.createElement("p"),u.append(g));g.lastChild;)g=g.lastChild,!n&&a(g).is("br")&&g.previousSibling&&(g=g.previousSibling);d.createRange?(b=d.createRange(),e.canHaveChildren(g)?b.selectNodeContents(g):(b.setStartBefore(g),h&&b.setStartAfter(g))):(b=f.createTextRange(),b.moveToElementText(3!==g.nodeType?g:g.parentNode)),b.collapse(!h),B.selectRange(b),F=b,h&&(v.scrollTop(f.scrollHeight),u.scrollTop(f.scrollHeight)),ub.focus()}},ub.readOnly=function(a){return"boolean"!=typeof a?"readonly"===w.attr("readonly"):(u[0].contentEditable=!a,a?w.attr("readonly","readonly"):w.removeAttr("readonly"),gb(a),ub)},ub.rtl=function(a){var b=a?"rtl":"ltr";return"boolean"!=typeof a?"rtl"===w.attr("dir"):(u.attr("dir",b),w.attr("dir",b),q.removeClass("rtl").removeClass("ltr").addClass(b),ub)},gb=function(b){var c=ub.inSourceMode()?"txtmode":"wysiwygmode";a.each(Cb,function(a,d){b!==!0&&d.data("sceditor-"+c)?d.removeClass("disabled"):d.addClass("disabled")})},ub.width=function(a,b){return a||0===a?(ub.dimensions(a,null,b),ub):q.width()},ub.dimensions=function(a,b,c){var d,e=8>m||j.documentMode<8?2:0;return a=a||0===a?a:!1,b=b||0===b?b:!1,a===!1&&b===!1?{width:ub.width(),height:ub.height()}:(s.data("outerWidthOffset")===d&&ub.updateStyleCache(),a!==!1&&(c!==!1&&(p.width=a),b===!1&&(b=q.height(),c=!1),q.width(a),a&&a.toString().indexOf("%")>-1&&(a=q.width()),s.width(a-s.data("outerWidthOffset")),w.width(a-w.data("outerWidthOffset")),g.ios&&u&&u.width(a-s.data("outerWidthOffset")-(u.outerWidth(!0)-u.width()))),b!==!1&&(c!==!1&&(p.height=b),b&&b.toString().indexOf("%")>-1&&(b=q.height(b).height(),q.height("auto")),b-=p.toolbarContainer?0:r.outerHeight(!0),s.height(b-s.data("outerHeightOffset")),w.height(b-e-w.data("outerHeightOffset"))),ub)},ub.updateStyleCache=function(){s.data("outerWidthOffset",s.outerWidth(!0)-s.width()),w.data("outerWidthOffset",w.outerWidth(!0)-w.width()),s.data("outerHeightOffset",s.outerHeight(!0)-s.height()),w.data("outerHeightOffset",w.outerHeight(!0)-w.height())},ub.height=function(a,b){return a||0===a?(ub.dimensions(null,a,b),ub):q.height()},ub.maximize=function(b){return"undefined"==typeof b?q.is(".sceditor-maximize"):(b=!!b,7>m&&a("html, body").toggleClass("sceditor-maximize",b),q.toggleClass("sceditor-maximize",b),ub.width(b?"100%":p.width,!1),ub.height(b?"100%":p.height,!1),ub)},ub.expandToContent=function(a){var b=q.height(),c=b-s.height(),d=u[0].scrollHeight||v[0].documentElement.scrollHeight,e=p.resizeMaxHeight||2*(p.height||wb.height());d+=c,(a===!0||e>=d)&&d>b&&ub.height(d)},ub.destroy=function(){C&&(C.destroy(),B=null,z=null,C=null,l.unbind("click",eb),k.unbind("resize orientationChanged",fb),a(vb.form).unbind("reset",bb).unbind("submit",ub.updateOriginal),u.unbind(),v.unbind().find("*").remove(),w.unbind().remove(),r.remove(),q.unbind().find("*").unbind().remove(),q.remove(),wb.removeData("sceditor").removeData("sceditorbbcode").show(),H&&wb.attr("required","required"))},ub.createDropDown=function(b,c,d,e){var f,g="sceditor-"+c,h=y&&y.is("."+g);ub.closeDropDown(),h||(e!==!1&&a(d).find(":not(input,textarea)").filter(function(){return 1===this.nodeType}).attr("unselectable","on"),f={top:b.offset().top,left:b.offset().left,marginTop:b.outerHeight()},a.extend(f,p.dropDownCss),y=a('
    ').css(f).append(d).appendTo(a("body")).on("click focusin",function(a){a.stopPropagation()}),setTimeout(function(){y.find("input,textarea").first().focus()}))},eb=function(a){3!==a.which&&y&&(tb(),ub.closeDropDown())},Y=function(a){var b,c,d,e=u[0],f=v[0],g=0,h=j.createElement("div"),i=f.createDocumentFragment(),k=a?a.clipboardData:!1;if(p.disablePasting)return!1;if(p.enablePasteFiltering){if(B.saveRange(),j.body.appendChild(h),k&&k.getData&&((b=k.getData("text/html"))||(b=k.getData("text/plain"))))return h.innerHTML=b,Z(e,h),!1;for(d=u.scrollTop()||v.scrollTop();e.firstChild;)i.appendChild(e.firstChild);return c=function(a,b){if(a.childNodes.length>0||g>25){for(;a.firstChild;)b.appendChild(a.firstChild);for(;i.firstChild;)a.appendChild(i.firstChild);u.scrollTop(d),v.scrollTop(d),b.childNodes.length>0?Z(a,b):B.restoreRange()}else g++,setTimeout(function(){c(a,b)},20)},c(e,h),ub.focus(),!0}},Z=function(b,c){e.fixNesting(c);var d=c.innerHTML;C.hasHandler("toSource")&&(d=C.callOnlyFirst("toSource",d,a(c))),c.parentNode.removeChild(c),C.hasHandler("toWysiwyg")&&(d=C.callOnlyFirst("toWysiwyg",d,!0)),B.restoreRange(),ub.wysiwygEditorInsertHtml(d,null,!0)},ub.closeDropDown=function(a){y&&(y.unbind().remove(),y=null),a===!0&&ub.focus()},X=function(){return t.contentDocument?t.contentDocument:t.contentWindow&&t.contentWindow.document?t.contentWindow.document:t.document},ub.wysiwygEditorInsertHtml=function(b,c,d){var f,g,h,i=s.height();ub.focus(),(d||!a(E).is("code")&&0===a(E).parents("code").length)&&(B.insertHTML(b,c),B.saveRange(),L(u[0]),f=u.find("#sceditor-end-marker").show(),g=u.scrollTop()||v.scrollTop(),h=e.getOffset(f[0]).top+1.5*f.outerHeight(!0)-i,f.hide(),(h>g||g>h+i)&&(u.scrollTop(h),v.scrollTop(h)),qb(!1),B.restoreRange(),jb())},ub.wysiwygEditorInsertText=function(a,b){ub.wysiwygEditorInsertHtml(f.entities(a),f.entities(b))},ub.insertText=function(a,b){return ub.inSourceMode()?ub.sourceEditorInsertText(a,b):ub.wysiwygEditorInsertText(a,b),ub},ub.sourceEditorInsertText=function(a,b){var c,d,e,f=x.selectionStart,g=x.selectionEnd;d=x.scrollTop,x.focus(),"undefined"!=typeof f?(e=x.value,b&&(a+=e.substring(f,g)+b),x.value=e.substring(0,f)+a+e.substring(g,e.length),x.selectionStart=f+a.length-(b?b.length:0),x.selectionEnd=x.selectionStart):(c=j.selection.createRange(),b&&(a+=c.text+b),c.text=a,b&&c.moveEnd("character",0-b.length),c.moveStart("character",c.End-c.Start),c.select()),x.scrollTop=d,x.focus(),qb()},ub.getRangeHelper=function(){return B},ub.sourceEditorCaret=function(a){var b,c={};return x.focus(),"undefined"!=typeof x.selectionStart?a?(x.selectionStart=a.start,x.selectionEnd=a.end):(c.start=x.selectionStart,c.end=x.selectionEnd):(b=j.selection.createRange(),a?(b.moveEnd("character",a.end),b.moveStart("character",a.start),b.select()):(c.start=b.Start,c.end=b.End)),a?this:c},ub.val=function(a,b){return"string"!=typeof a?ub.inSourceMode()?ub.getSourceEditorValue(!1):ub.getWysiwygEditorValue(b):(ub.inSourceMode()?ub.setSourceEditorValue(a):(b!==!1&&C.hasHandler("toWysiwyg")&&(a=C.callOnlyFirst("toWysiwyg",a)),ub.setWysiwygEditorValue(a)),ub)},ub.insert=function(b,c,d,e,f){if(ub.inSourceMode())return ub.sourceEditorInsertText(b,c),ub;if(c){var g=B.selectedHtml(),h=a("
    ").appendTo(a("body")).hide().html(g);d!==!1&&C.hasHandler("toSource")&&(g=C.callOnlyFirst("toSource",g,h)),h.remove(),b+=g+c}return d!==!1&&C.hasHandler("toWysiwyg")&&(b=C.callOnlyFirst("toWysiwyg",b,!0)),d!==!1&&f===!0&&(b=b.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")),ub.wysiwygEditorInsertHtml(b),ub},ub.getWysiwygEditorValue=function(a){var b,c,d=B.hasSelection();return d?B.saveRange():z&&z.getBookmark&&(c=z.getBookmark()),e.fixNesting(u[0]),b=u.html(),a!==!1&&C.hasHandler("toSource")&&(b=C.callOnlyFirst("toSource",b,u)),d?(B.restoreRange(),z=null):c&&(z.moveToBookmark(c),z=null),b},ub.getBody=function(){return u},ub.getContentAreaContainer=function(){return s},ub.getSourceEditorValue=function(a){var b=w.val();return a!==!1&&C.hasHandler("toWysiwyg")&&(b=C.callOnlyFirst("toWysiwyg",b)),b},ub.setWysiwygEditorValue=function(a){a||(a="

    "+(m?"":"
    ")+"

    "),u[0].innerHTML=a,L(u[0]),jb(),qb()},ub.setSourceEditorValue=function(a){w.val(a),qb()},ub.updateOriginal=function(){wb.val(ub.val())},L=function(b){if(p.emoticonsEnabled&&!a(b).parents("code").length){var c=b.ownerDocument,d="\\s| | | | | ",g=[],i=[],j=a.extend({},p.emoticons.more,p.emoticons.dropdown,p.emoticons.hidden);a.each(j,function(a){p.emoticonsCompat&&(i[a]=new RegExp("(>|^|"+d+")"+f.regex(a)+"($|<|"+d+")")),g.push(a)});var k=function(b){for(b=b.firstChild;b;){var d,f,l,m,n,o,q,r=b.parentNode,s=b.nodeValue;if(3!==b.nodeType)a(b).is("code")||k(b);else if(s)for(n=g.length;n--;)f=g[n],q=p.emoticonsCompat?s.search(i[f]):s.indexOf(f),q>-1&&(o=b.nextSibling,l=j[f],d=s.substr(q).split(f),s=s.substr(0,q)+d.shift(),b.nodeValue=s,m=e.parseHTML(h("emoticon",{key:f,url:l.url||l,tooltip:l.tooltip||f}),c),r.insertBefore(m[0],o),r.insertBefore(c.createTextNode(d.join(f)),o));b=b.nextSibling}};k(b),p.emoticonsCompat&&(Bb=u.find("img[data-sceditor-emoticon]"))}},ub.inSourceMode=function(){return q.hasClass("sourceMode")},ub.sourceMode=function(a){var b=ub.inSourceMode();return"boolean"!=typeof a?b:((b&&!a||!b&&a)&&ub.toggleSourceMode(),ub)},ub.toggleSourceMode=function(){var a=ub.inSourceMode();(g.isWysiwygSupported||!a)&&(a||(B.saveRange(),B.clear()),ub.blur(),a?ub.setWysiwygEditorValue(ub.getSourceEditorValue()):ub.setSourceEditorValue(ub.getWysiwygEditorValue()),z=null,w.toggle(),s.toggle(),q.toggleClass("wysiwygMode",a).toggleClass("sourceMode",!a),gb(),hb())},ib=function(){return x.focus(),"undefined"!=typeof x.selectionStart?x.value.substring(x.selectionStart,x.selectionEnd):j.selection.createRange().text},M=function(b,c){ub.inSourceMode()?c.txtExec&&(a.isArray(c.txtExec)?ub.sourceEditorInsertText.apply(ub,c.txtExec):c.txtExec.call(ub,b,ib())):c.exec&&(a.isFunction(c.exec)?c.exec.call(ub,b):ub.execCommand(c.exec,c.hasOwnProperty("execParam")?c.execParam:null))},N=function(){m&&(z=B.selectedRange())},ub.execCommand=function(b,c){var d=!1,e=ub.commands[b],f=a(B.parentNode());if(ub.focus(),!f.is("code")&&0===f.parents("code").length){try{d=v[0].execCommand(b,!1,c)}catch(g){}!d&&e&&e.errorMessage&&alert(ub._(e.errorMessage)),hb()}},kb=function(){function b(){B&&!B.compare(F)&&(F=B.cloneSelected(),q.trigger(a.Event("selectionchanged"))),G=!1}G||(G=!0,m?b():setTimeout(b,100))},lb=function(){var b,c=B.parentNode();D!==c&&(b=D,D=c,E=B.getFirstBlockParent(c),q.trigger(a.Event("nodechanged",{oldNode:b,newNode:D})))},ub.currentNode=function(){return D},ub.currentBlockNode=function(){return E},hb=function(a){var b,c,d="active",e=v[0],f=ub.sourceMode();if(ub.readOnly())return void r.find(d).removeClass(d);f||(c=a?a.newNode:B.parentNode(),b=B.getFirstBlockParent(c));for(var g=0;g-1&&(h=e.queryCommandState(j)?1:0)}catch(l){}}else k||(h=j.call(ub,c,b));i.toggleClass("disabled",k||0>h).toggleClass(d,h>0)}},ab=function(b){var c,d,f,g,h="code,blockquote,pre",i="li,ul,ol";return b.originalEvent.defaultPrevented?void 0:(ub.closeDropDown(),c=a(E).closest(h+","+i).first(),13===b.which&&c.length&&!c.is(i)?(z=null,d=v[0].createElement("br"),B.insertNode(d),n||(f=d.parentNode,g=f.lastChild,g&&3===g.nodeType&&""===g.nodeValue&&(f.removeChild(g),g=f.lastChild),!e.isInline(f,!0)&&g===d&&e.isInline(d.previousSibling)&&B.insertHTML("
    ")),!1):void 0)},jb=function(){var b,c,d,f=u[0];e.rTraverse(f,function(g){return b=g.nodeName.toLowerCase(),a.inArray(b,yb)>-1&&(c=!0),3===g.nodeType&&!/^\s*$/.test(g.nodeValue)||"br"===b||n&&!g.firstChild&&!e.isInline(g,!1)?(c&&(d=v[0].createElement("p"),d.className="sceditor-nlf",d.innerHTML=n?"":"
    ",f.appendChild(d)),!1):void 0})},bb=function(){ub.val(wb.val())},cb=function(){ub.closeDropDown(),z=null},fb=function(){var a=p.height,b=p.width;ub.maximize()?ub.dimensions("100%","100%",!1):(a&&a.toString().indexOf("%")>-1||b&&b.toString().indexOf("%")>-1)&&ub.dimensions(b,a)},ub._=function(){var a,b=arguments;return A&&A[b[0]]&&(b[0]=A[b[0]]),b[0].replace(/\{(\d+)\}/g,function(c,d){return b[d-0+1]!==a?b[d-0+1]:"{"+d+"}"})},db=function(b){C.call(b.type+"Event",b,ub);var c=b.target===x?"scesrc":"scewys",d=a.Event(b);d.type=c+b.type,q.trigger(d,ub)},ub.bind=function(b,c,d,e){b=b.split(" ");for(var f=b.length;f--;)a.isFunction(c)&&(d||q.bind("scewys"+b[f],c),e||q.bind("scesrc"+b[f],c),"valuechanged"===b[f]&&(qb.hasHandler=!0));return ub},ub.unbind=function(b,c,d,e){b=b.split(" ");for(var f=b.length;f--;)a.isFunction(c)&&(d||q.unbind("scewys"+b[f],c),e||q.unbind("scesrc"+b[f],c));return ub},ub.blur=function(b,c,d){return a.isFunction(b)?ub.bind("blur",b,c,d):ub.sourceMode()?w.blur():u.blur(),ub},ub.focus=function(b,c,d){if(a.isFunction(b))ub.bind("focus",b,c,d);else if(ub.inSourceMode())x.focus();else{var e,f=B.selectedRange();F||B.hasSelection()||mb(),!n&&f&&1===f.endOffset&&f.collapsed&&(e=f.endContainer,e&&1===e.childNodes.length&&a(e.firstChild).is("br")&&(f.setStartBefore(e.firstChild),f.collapse(!0),B.selectRange(f))),t.contentWindow.focus(),u[0].focus(),z&&(B.selectRange(z),z=null)}return ub},ub.keyDown=function(a,b,c){return ub.bind("keydown",a,b,c)},ub.keyPress=function(a,b,c){return ub.bind("keypress",a,b,c)},ub.keyUp=function(a,b,c){return ub.bind("keyup",a,b,c)},ub.nodeChanged=function(a){return ub.bind("nodechanged",a,!1,!0)},ub.selectionChanged=function(a){return ub.bind("selectionchanged",a,!1,!0)},ub.valueChanged=function(a,b,c){return ub.bind("valuechanged",a,b,c)},nb=function(b){var c,d=0,e=ub.emoticonsCache,f=String.fromCharCode(b.which);return a(E).is("code")||a(E).parents("code").length?void 0:(e||(e=[],a.each(a.extend({},p.emoticons.more,p.emoticons.dropdown,p.emoticons.hidden),function(a,b){e[d++]=[a,h("emoticon",{key:a,url:b.url||b,tooltip:b.tooltip||a})]}),e.sort(function(a,b){return a[0].length-b[0].length}),ub.emoticonsCache=e,ub.longestEmoticonCode=e[e.length-1][0].length),c=B.raplaceKeyword(ub.emoticonsCache,!0,!0,ub.longestEmoticonCode,p.emoticonsCompat,f),c&&p.emoticonsCompat?(Bb=u.find("img[data-sceditor-emoticon]"),/^\s$/.test(f)):!c)},ob=function(){if(Bb.length){var b,c,d,e,f,g,h=ub.currentBlockNode(),i=!1,j=/[^\s\xA0\u2002\u2003\u2009\u00a0]+/;Bb=a.map(Bb,function(k){return k&&k.parentNode?a.contains(h,k)?(b=k.previousSibling,c=k.nextSibling,f=b.nodeValue,null===f&&(f=b.innerText||""),b&&j.test(b.nodeValue.slice(-1))||c&&j.test((c.nodeValue||"")[0])?(d=k.parentNode,e=B.cloneSelected(),g=e.startContainer,f+=a(k).data("sceditor-emoticon"),g===c?i=f.length+e.startOffset:g===h&&h.childNodes[e.startOffset]===c?i=f.length:g===b&&(i=e.startOffset),c&&3===c.nodeType||(c=d.insertBefore(d.ownerDocument.createTextNode(""),c)),c.insertData(0,f),d.removeChild(b),d.removeChild(k),i!==!1&&(e.setStart(c,i),e.collapse(!0),B.selectRange(e)),null):k):k:null})}},ub.emoticons=function(b){return b||b===!1?(p.emoticonsEnabled=b,b?(u.keypress(nb),ub.sourceMode()||(B.saveRange(),L(u[0]),Bb=u.find("img[data-sceditor-emoticon]"),qb(!1),B.restoreRange())):(u.find("img[data-sceditor-emoticon]").replaceWith(function(){return a(this).data("sceditor-emoticon")}),Bb=[],u.unbind("keypress",nb),qb()),ub):p.emoticonsEnabled},ub.css=function(b){return I||(I=a('

    ',toolbarButton:'
    {dispName}
    ',emoticon:'{key}',fontOpt:'{font}',sizeOpt:'{size}',pastetext:'
    ',table:'
    ',image:'
    ',email:'
    ',link:'
    ',youtubeMenu:'
    ',youtube:''};return function(b,c,d){var e=a[b];return $.each(c,function(a,b){e=e.replace(new RegExp("\\{"+a+"\\}","g"),b)}),d&&(e=$(e)),e}}.call(b,c,b,a),!(void 0!==d&&(a.exports=d))}]),function(a,b,c){"use strict";var d=a.sceditor,e=d.plugins,f=d.escapeEntities,g=d.escapeUriScheme,h=d.ie,i=h&&11>h,j=d.command.get,k={bold:{txtExec:["[b]","[/b]"]},italic:{txtExec:["[i]","[/i]"]},underline:{txtExec:["[u]","[/u]"]},strike:{txtExec:["[s]","[/s]"]},subscript:{txtExec:["[sub]","[/sub]"]},superscript:{txtExec:["[sup]","[/sup]"]},left:{txtExec:["[left]","[/left]"]},center:{txtExec:["[center]","[/center]"]},right:{txtExec:["[right]","[/right]"]},justify:{txtExec:["[justify]","[/justify]"]},font:{txtExec:function(a){var b=this;j("font")._dropDown(b,a,function(a){b.insertText("[font="+a+"]","[/font]")})}},size:{txtExec:function(a){var b=this;j("size")._dropDown(b,a,function(a){b.insertText("[size="+a+"]","[/size]")})}},color:{txtExec:function(a){var b=this;j("color")._dropDown(b,a,function(a){b.insertText("[color="+a+"]","[/color]")})}},bulletlist:{txtExec:function(b,c){var d="";a.each(c.split(/\r?\n/),function(){d+=(d?"\n":"")+"[li]"+this+"[/li]"}),this.insertText("[ul]\n"+d+"\n[/ul]")}},orderedlist:{txtExec:function(b,c){var d="";a.each(c.split(/\r?\n/),function(){d+=(d?"\n":"")+"[li]"+this+"[/li]"}),e.bbcode.bbcode.get(""),this.insertText("[ol]\n"+d+"\n[/ol]")}},table:{txtExec:["[table][tr][td]","[/td][/tr][/table]"]},horizontalrule:{txtExec:["[hr]"]},code:{txtExec:["[code]","[/code]"]},image:{txtExec:function(a,b){var c=this,d=prompt(c._("Enter the image URL:"),b);d&&c.insertText("[img]"+d+"[/img]")}},email:{txtExec:function(a,b){var c=this,d=b&&b.indexOf("@")>-1?null:b,e=prompt(c._("Enter the e-mail address:"),d?"":b),f=prompt(c._("Enter the displayed text:"),d||e)||e;e&&c.insertText("[email="+e+"]"+f+"[/email]")}},link:{txtExec:function(b,c){var d=this,e=/^[a-z]+:\/\//i.test(a.trim(c))?null:c,f=prompt(d._("Enter URL:"),e?"http://":a.trim(c)),g=prompt(d._("Enter the displayed text:"),e||f)||f;f&&d.insertText("[url="+f+"]"+g+"[/url]")}},quote:{txtExec:["[quote]","[/quote]"]},youtube:{txtExec:function(a){var b=this;j("youtube")._dropDown(b,a,function(a){b.insertText("[youtube]"+a+"[/youtube]")})}},rtl:{txtExec:["[rtl]","[/rtl]"]},ltr:{txtExec:["[ltr]","[/ltr]"]}},l=function(a){return a?a.replace(/\\(.)/g,"$1").replace(/^(["'])(.*?)\1$/,"$2"):a},m=function(){var a,b=arguments;return b[0].replace(/\{(\d+)\}/g,function(c,d){return b[d-0+1]!==a?b[d-0+1]:"{"+d+"}"})},n={OPEN:"open",CONTENT:"content",NEWLINE:"newline",CLOSE:"close"},o=function(a,b,c,d,e,f){var g=this;g.type=a,g.name=b,g.val=c,g.attrs=d||{},g.children=e||[],g.closing=f||null};o.prototype={clone:function(a){var b=this;return new o(b.type,b.name,b.val,b.attrs,a?b.children:[],b.closing?b.closing.clone():null)},splitAt:function(b){var c,d=this,e=0,f=d.children.length;if("number"!=typeof b&&(b=a.inArray(b,d.children)),0>b||b>f)return null;for(;f--;)f>=b?e++:f=0;return c=d.clone(),c.children=d.children.splice(b,e),c}};var p=function(b){if(!(this instanceof p))return new p(b);var d,g,j,k,m,q,r,s,t,u,v,w,x,y,z,A=this;d=function(){A.bbcodes=e.bbcode.bbcodes,A.opts=a.extend({},p.defaults,b)},A.tokenize=function(a){var b,c,d,e=[],f=[{type:n.CLOSE,regex:/^\[\/[^\[\]]+\]/},{type:n.OPEN,regex:/^\[[^\[\]]+\]/},{type:n.NEWLINE,regex:/^(\r\n|\r|\n)/},{type:n.CONTENT,regex:/^([^\[\r\n]+|\[)/}];f.reverse();a:for(;a.length;){for(d=f.length;d--;)if(c=f[d].type,(b=a.match(f[d].regex))&&b[0]){e.push(g(c,b[0])),a=a.substr(b[0].length);continue a}a.length&&e.push(g(n.CONTENT,a)),a=""}return e},g=function(b,c){var d,f,g,h=/\[([^\]\s=]+)(?:([^\]]+))?\]/,i=/\[\/([^\[\]]+)\]/;return b===n.OPEN&&(d=c.match(h))&&(g=y(d[1]),d[2]&&(d[2]=a.trim(d[2]))&&(f=j(d[2]))),b===n.CLOSE&&(d=c.match(i))&&(g=y(d[1])),b===n.NEWLINE&&(g="#newline"),g&&(b!==n.OPEN&&b!==n.CLOSE||e.bbcode.bbcodes[g])||(b=n.CONTENT,g="#"),new o(b,g,c,f)},j=function(a){var b,c=/([^\s=]+)=(?:(?:(["'])((?:\\\2|[^\2])*?)\2)|((?:.(?!\s\S+=))*.))/g,d={};if("="===a.charAt(0)&&a.indexOf("=",1)<0)d.defaultattr=l(a.substr(1));else for("="===a.charAt(0)&&(a="defaultattr"+a);b=c.exec(a);)d[y(b[1])]=l(b[3])||b[4];return d},A.parse=function(a,b){var c=k(A.tokenize(a)),d=A.opts;return d.fixInvalidChildren&&t(c),d.removeEmptyTags&&s(c),d.fixInvalidNesting&&q(c),m(c,null,b),d.removeEmptyTags&&s(c),c},w=function(a,b,c){for(var d=c.length;d--;)if(c[d].type===b&&c[d].name===a)return!0;return!1},r=function(b,c){var d=b?A.bbcodes[b.name]:{},e=d.allowedChildren;return A.opts.fixInvalidChildren&&e?a.inArray(c.name||"#",e)>-1:!0},k=function(b){for(var c,d,e,f,g,h,i,j=[],k=[],l=[],m=function(){return z(l)},o=function(a){m()?m().children.push(a):k.push(a)},p=function(b){return m()&&(d=A.bbcodes[m().name])&&d.closedBy&&a.inArray(b,d.closedBy)>-1};c=b.shift();){switch(i=b[0],c.type){case n.OPEN:p(c.name)&&l.pop(),o(c),d=A.bbcodes[c.name],d&&d.isSelfClosing||!d.closedBy&&!w(c.name,n.CLOSE,b)?d&&d.isSelfClosing||(c.type=n.CONTENT):l.push(c);break;case n.CLOSE:if(m()&&c.name!==m().name&&p("/"+c.name)&&l.pop(),m()&&c.name===m().name)m().closing=c,l.pop();else if(w(c.name,n.OPEN,l)){for(;e=l.pop();){if(e.name===c.name){e.closing=c;break}f=e.clone(),j.length>1&&f.children.push(z(j)),j.push(f)}for(o(z(j)),g=j.length;g--;)l.push(j[g]);j.length=0}else c.type=n.CONTENT,o(c);break;case n.NEWLINE:m()&&i&&p((i.type===n.CLOSE?"/":"")+i.name)&&(i.type!==n.CLOSE||i.name!==m().name)&&(d=A.bbcodes[m().name],d&&d.breakAfter?l.pop():d&&d.isInline===!1&&A.opts.breakAfterBlock&&d.breakAfter!==!1&&l.pop()),o(c);break;default:o(c)}h=c}return k},m=function(a,b,c){var d,e,f,g,h,i,j,k,l=a.length;b&&(g=A.bbcodes[b.name]);for(var o=l;o--;)if(d=a[o])if(d.type===n.NEWLINE){if(e=o>0?a[o-1]:null,f=l-1>o?a[o+1]:null,k=!1,!c&&g&&g.isSelfClosing!==!0&&(e?i||f||(g.isInline===!1&&A.opts.breakEndBlock&&g.breakEnd!==!1&&(k=!0),g.breakEnd&&(k=!0),i=k):(g.isInline===!1&&A.opts.breakStartBlock&&g.breakStart!==!1&&(k=!0),g.breakStart&&(k=!0))),e&&e.type===n.OPEN&&(h=A.bbcodes[e.name])&&(c?h.isInline===!1&&(k=!0):(h.isInline===!1&&A.opts.breakAfterBlock&&h.breakAfter!==!1&&(k=!0),h.breakAfter&&(k=!0))),!c&&!j&&f&&f.type===n.OPEN&&(h=A.bbcodes[f.name])&&(h.isInline===!1&&A.opts.breakBeforeBlock&&h.breakBefore!==!1&&(k=!0),h.breakBefore&&(k=!0),j=k,k)){a.splice(o,1);continue}k&&a.splice(o,1),j=!1}else d.type===n.OPEN&&m(d.children,d,c)},q=function(b,c,d,e){var f,g,h,i,j,k,l=function(a){var b=A.bbcodes[a.name];return!b||b.isInline!==!1};for(c=c||[],e=e||b,g=0;g1?c[c.length-2].children:e,i=a.inArray(h,j),i>-1))return k.children.splice(a.inArray(f,k.children),1),void j.splice(i+1,0,f,k);c.push(f),q(f.children,c,d||l(f),e),c.pop(f)}},t=function(a,b){for(var c,d,e=a.length;e--;)(c=a[e])&&(r(b,c)||(c.name=null,c.type=n.CONTENT,r(b,c)?(d=[e+1,0].concat(c.children),c.closing&&(c.closing.name=null,c.closing.type=n.CONTENT,d.push(c.closing)),e+=d.length-1,Array.prototype.splice.apply(a,d)):b.children.splice(e,1)),c.type===n.OPEN&&t(c.children,c))},s=function(b){for(var c,d,e=function(a){for(var b=a.length;b--;){var c=a[b].type;if(c===n.OPEN||c===n.CLOSE)return!1;if(c===n.CONTENT&&/\S|\u00A0/.test(a[b].val))return!1}return!0},f=b.length;f--;)(c=b[f])&&c.type===n.OPEN&&(d=A.bbcodes[c.name],s(c.children),e(c.children)&&d&&!d.isSelfClosing&&!d.allowsEmpty&&b.splice.apply(b,a.merge([f,1],c.children)))},A.toHTML=function(a,b){return u(A.parse(a,b),!0)},u=function(b,d){var g,j,k,l,m,o,p,q,r,s=[];for(q=function(a){return(!a||(a.isHtmlInline!==g?a.isHtmlInline:a.isInline))!==!1};b.length>0;)if(j=b.shift()){if(j.type===n.OPEN)r=j.children[j.children.length-1]||{},k=A.bbcodes[j.name],o=d&&q(k),l=u(j.children,!1),k&&k.html?(q(k)||!q(A.bbcodes[r.name])||k.isPreFormatted||k.skipLastLineBreak||i||(l+="
    "),a.isFunction(k.html)?m=k.html.call(A,j,j.attrs,l):(j.attrs[0]=l,m=e.bbcode.formatBBCodeString(k.html,j.attrs))):m=j.val+l+(j.closing?j.closing.val:"");else{if(j.type===n.NEWLINE){if(!d){s.push("
    ");continue}p||(s.push("
    "),(8>h||c.documentMode&&c.documentMode<8)&&s.push(" ")),i||s.push("
    "),b.length||s.push("
    "),s.push("
    \n"),p=!1;continue}o=d,m=f(j.val,!0)}o&&!p?(s.push("
    "),p=!0):!o&&p&&(s.push("
    \n"),p=!1),s.push(m)}return p&&s.push("
    \n"),s.join("")},A.toBBCode=function(a,b){return v(A.parse(a,b))},v=function(a){for(var b,c,d,e,f,g,h,i,j,k,l=[];a.length>0;)if(b=a.shift())if(d=A.bbcodes[b.name],e=!(!d||d.isInline!==!1),f=d&&d.isSelfClosing,h=e&&A.opts.breakBeforeBlock&&d.breakBefore!==!1||d&&d.breakBefore,i=e&&!f&&A.opts.breakStartBlock&&d.breakStart!==!1||d&&d.breakStart,j=e&&A.opts.breakEndBlock&&d.breakEnd!==!1||d&&d.breakEnd,k=e&&A.opts.breakAfterBlock&&d.breakAfter!==!1||d&&d.breakAfter,g=(d?d.quoteType:null)||A.opts.quoteType||p.QuoteType.auto,d||b.type!==n.OPEN)if(b.type===n.OPEN){if(h&&l.push("\n"),l.push("["+b.name),b.attrs){b.attrs.defaultattr&&(l.push("=",x(b.attrs.defaultattr,g,"defaultattr")),delete b.attrs.defaultattr);for(c in b.attrs)b.attrs.hasOwnProperty(c)&&l.push(" ",c,"=",x(b.attrs[c],g,c))}l.push("]"),i&&l.push("\n"),b.children&&l.push(v(b.children)),f||d.excludeClosing||(j&&l.push("\n"),l.push("[/"+b.name+"]")),k&&l.push("\n"),b.closing&&f&&l.push(b.closing.val)}else l.push(b.val);else l.push(b.val),b.children&&l.push(v(b.children)),b.closing&&l.push(b.closing.val);return l.join("")},x=function(b,c,d){var e=p.QuoteType,f=/\s|=/.test(b);return a.isFunction(c)?c(b,d):c===e.never||c===e.auto&&!f?b:'"'+b.replace("\\","\\\\").replace('"','\\"')+'"'},z=function(a){return a.length?a[a.length-1]:null},y=function(a){return a.toLowerCase()},d()};p.QuoteType={always:1,never:2,auto:3},p.defaults={breakBeforeBlock:!1,breakStartBlock:!1,breakEndBlock:!1,breakAfterBlock:!0,removeEmptyTags:!0,fixInvalidNesting:!0,fixInvalidChildren:!0,quoteType:p.QuoteType.auto},a.sceditorBBCodePlugin=e.bbcode=function(){var b,f,g,h,j=this;j.bbcodes=e.bbcode.bbcodes,j.stripQuotes=l;var n={},o={},q={ul:["li","ol","ul"],ol:["li","ol","ul"],table:["tr"],tr:["td","th"],code:["br","p","div"]};j.init=function(){j.opts=this.opts,b(),this.commands=a.extend(!0,{},k,this.commands),this.toBBCode=j.signalToSource,this.fromBBCode=j.signalToWysiwyg},b=function(){a.each(j.bbcodes,function(b){var c,d=j.bbcodes[b].tags,e=j.bbcodes[b].styles;d&&a.each(d,function(a,d){c=j.bbcodes[b].isInline===!1,n[a]=n[a]||{},n[a][c]=n[a][c]||{},n[a][c][b]=d}),e&&a.each(e,function(a,d){c=j.bbcodes[b].isInline===!1,o[c]=o[c]||{},o[c][a]=o[c][a]||{},o[c][a][b]=d})})},f=function(b,c,e){var f,g,h=d.dom.getStyle;return e=!!e,o[e]?(a.each(o[e],function(d,e){f=h(b[0],d),f&&h(b.parent()[0],d)!==f&&a.each(e,function(d,e){(!e||a.inArray(f.toString(),e)>-1)&&(g=j.bbcodes[d].format,c=a.isFunction(g)?g.call(j,b,c):m(g,c))})}),c):c},g=function(b,c,e){var f,g,h=b[0],k=h.nodeName.toLowerCase();e=!!e,n[k]&&n[k][e]&&a.each(n[k][e],function(d,e){(!e||(f=!1,a.each(e,function(c,d){return!b.attr(c)||d&&a.inArray(b.attr(c),d)<0?void 0:(f=!0,!1)}),f))&&(g=j.bbcodes[d].format,c=a.isFunction(g)?g.call(j,b,c):m(g,c))});var l=d.dom.isInline;if(e&&(!l(h,!0)||"br"===k)){for(var o,p,q,r=h.previousSibling;r&&(a(r).hasClass("sceditor-ignore")||1===r.nodeType&&!a(r).is("br")&&l(r,!0)&&!r.firstChild);)r=r.previousSibling;do{for(p=h.parentNode,q=p.lastChild;a(q).hasClass("sceditor-ignore");)q=q.previousSibling;o=q===h,h=p}while(p&&o&&l(p,!0));(!o||"li"===k||"br"===k&&i)&&(c+="\n"),"br"!==k&&r&&!a(r).is("br")&&l(r,!0)&&(c="\n"+c)}return c},j.signalToSource=function(b,e){var f,g,h=new p(j.opts.parserOptions);return e||("string"==typeof b?(f=a("
    ").css("visibility","hidden").appendTo(c.body).html(b),e=f):e=a(b)),e&&e.jquery?(d.dom.removeWhiteSpace(e[0]),g=j.elementToBbcode(e),f&&f.remove(),g=h.toBBCode(g,!0),j.opts.bbcodeTrim&&(g=a.trim(g)),g):""},j.elementToBbcode=function(b){var c=function(b,e){var h="";return d.dom.traverse(b,function(b){var d=a(b),j="",k=b.nodeType,l=b.nodeName.toLowerCase(),m=q[l],n=b.firstChild,o=!0;if("object"==typeof e&&(o=a.inArray(l,e)>-1,d.is("img")&&d.data("sceditor-emoticon")&&(o=!0),o||(m=e)),3===k||1===k)if(1===k){if(d.hasClass("sceditor-ignore"))return;if(d.hasClass("sceditor-nlf")&&(!n||!i&&1===b.childNodes.length&&/br/i.test(n.nodeName)))return;"iframe"!==l&&(j=c(b,m)),o?("code"!==l&&(j=f(d,j),j=g(d,j),j=f(d,j,!0)),h+=g(d,j,!0)):h+=j}else h+=b.nodeValue},!1,!0),h};return c(b[0])},j.signalToWysiwyg=function(b,c){var d=new p(j.opts.parserOptions),e=d.toHTML(j.opts.bbcodeTrim?a.trim(b):b);return c?h(e):e},h=function(b){var e,f,g,h=a("
    ").hide().appendTo(c.body),j=h[0];return g=function(b,e){if(!d.dom.hasStyling(b)){if(i||1!==b.childNodes.length||!a(b.firstChild).is("br"))for(;f=b.firstChild;)j.insertBefore(f,b);if(e){var g=j.lastChild;b!==g&&a(g).is("div")&&b.nextSibling===g&&j.insertBefore(c.createElement("br"),b)}j.removeChild(b)}},j.innerHTML=b.replace(/<\/div>\n/g,"
    "),(e=j.firstChild)&&a(e).is("div")&&g(e,!0),(e=j.lastChild)&&a(e).is("div")&&g(e),j=j.innerHTML,h.remove(),j}},e.bbcode.formatBBCodeString=function(a,b){return a.replace(/\{([^}]+)\}/g,function(a,c){var d,e=!0;return"!"===c.charAt(0)&&(e=!1,c=c.substring(1)),"0"===c&&(e=!1),b[c]===d?a:e?f(b[c],!0):b[c]})};var q=function(a){return a=parseInt(a,10),isNaN(a)?"00":(a=Math.max(0,Math.min(a,255)).toString(16),a.length<2?"0"+a:a)},r=function(a){var b;return a=a||"#000",(b=a.match(/rgb\((\d{1,3}),\s*?(\d{1,3}),\s*?(\d{1,3})\)/i))?"#"+q(b[1])+q(b[2]-0)+q(b[3]-0):(b=a.match(/#([0-f])([0-f])([0-f])\s*?$/i))?"#"+b[1]+b[1]+b[2]+b[2]+b[3]+b[3]:a -},s={b:{tags:{b:null,strong:null},styles:{"font-weight":["bold","bolder","401","700","800","900"]},format:"[b]{0}[/b]",html:"{0}"},i:{tags:{i:null,em:null},styles:{"font-style":["italic","oblique"]},format:"[i]{0}[/i]",html:"{0}"},u:{tags:{u:null},styles:{"text-decoration":["underline"]},format:"[u]{0}[/u]",html:"{0}"},s:{tags:{s:null,strike:null},styles:{"text-decoration":["line-through"]},format:"[s]{0}[/s]",html:"{0}"},sub:{tags:{sub:null},format:"[sub]{0}[/sub]",html:"{0}"},sup:{tags:{sup:null},format:"[sup]{0}[/sup]",html:"{0}"},font:{tags:{font:{face:null}},styles:{"font-family":null},quoteType:p.QuoteType.never,format:function(a,b){var c;return a.is("font")&&(c=a.attr("face"))||(c=a.css("font-family")),"[font="+l(c)+"]"+b+"[/font]"},html:'{0}'},size:{tags:{font:{size:null}},styles:{"font-size":null},format:function(a,b){var c=a.attr("size"),d=2;return c||(c=a.css("fontSize")),c.indexOf("px")>-1?(c=c.replace("px","")-0,12>c&&(d=1),c>15&&(d=3),c>17&&(d=4),c>23&&(d=5),c>31&&(d=6),c>47&&(d=7)):d=c,"[size="+d+"]"+b+"[/size]"},html:'{!0}'},color:{tags:{font:{color:null}},styles:{color:null},quoteType:p.QuoteType.never,format:function(a,b){var c;return a.is("font")&&(c=a.attr("color"))||(c=a[0].style.color||a.css("color")),"[color="+r(c)+"]"+b+"[/color]"},html:function(a,b,c){return''+c+""}},ul:{tags:{ul:null},breakStart:!0,isInline:!1,skipLastLineBreak:!0,format:"[ul]{0}[/ul]",html:"
      {0}
    "},list:{breakStart:!0,isInline:!1,skipLastLineBreak:!0,html:"
      {0}
    "},ol:{tags:{ol:null},breakStart:!0,isInline:!1,skipLastLineBreak:!0,format:"[ol]{0}[/ol]",html:"
      {0}
    "},li:{tags:{li:null},isInline:!1,closedBy:["/ul","/ol","/list","*","li"],format:"[li]{0}[/li]",html:"
  • {0}
  • "},"*":{isInline:!1,closedBy:["/ul","/ol","/list","*","li"],html:"
  • {0}
  • "},table:{tags:{table:null},isInline:!1,isHtmlInline:!0,skipLastLineBreak:!0,format:"[table]{0}[/table]",html:"{0}
    "},tr:{tags:{tr:null},isInline:!1,skipLastLineBreak:!0,format:"[tr]{0}[/tr]",html:"{0}"},th:{tags:{th:null},allowsEmpty:!0,isInline:!1,format:"[th]{0}[/th]",html:"{0}"},td:{tags:{td:null},allowsEmpty:!0,isInline:!1,format:"[td]{0}[/td]",html:"{0}"},emoticon:{allowsEmpty:!0,tags:{img:{src:null,"data-sceditor-emoticon":null}},format:function(a,b){return a.data("sceditor-emoticon")+b},html:"{0}"},hr:{tags:{hr:null},allowsEmpty:!0,isSelfClosing:!0,isInline:!1,format:"[hr]{0}",html:"
    "},img:{allowsEmpty:!0,tags:{img:{src:null}},allowedChildren:["#"],quoteType:p.QuoteType.never,format:function(a,b){var c,d,e="",f=a[0],g=function(a){return f.style?f.style[a]:null};return a.attr("data-sceditor-emoticon")?b:(c=a.attr("width")||g("width"),d=a.attr("height")||g("height"),(f.complete&&(c||d)||c&&d)&&(e="="+a.width()+"x"+a.height()),"[img"+e+"]"+a.attr("src")+"[/img]")},html:function(a,b,c){var d,e,h,i,j="";return e=b.width,h=b.height,b.defaultattr&&(i=b.defaultattr.split(/x/i),e=i[0],h=2===i.length?i[1]:i[0]),e!==d&&(j+=' width="'+f(e,!0)+'"'),h!==d&&(j+=' height="'+f(h,!0)+'"'),"'}},url:{allowsEmpty:!0,tags:{a:{href:null}},quoteType:p.QuoteType.never,format:function(a,b){var c=a.attr("href");return"mailto:"===c.substr(0,7)?'[email="'+c.substr(7)+'"]'+b+"[/email]":"[url="+c+"]"+b+"[/url]"},html:function(a,b,c){return b.defaultattr=f(b.defaultattr,!0)||c,''+c+""}},email:{quoteType:p.QuoteType.never,html:function(a,b,c){return''+c+""}},quote:{tags:{blockquote:null},isInline:!1,quoteType:p.QuoteType.never,format:function(b,c){var d="",e=a(b),f=e.children("cite").first();return(1===f.length||e.data("author"))&&(d=f.text()||e.data("author"),e.data("author",d),f.remove(),c=this.elementToBbcode(a(b)),d="="+d.replace(/(^\s+|\s+$)/g,""),e.prepend(f)),"[quote"+d+"]"+c+"[/quote]"},html:function(a,b,c){return b.defaultattr&&(c=""+f(b.defaultattr)+""+c),"
    "+c+"
    "}},code:{tags:{code:null},isInline:!1,allowedChildren:["#","#newline"],format:"[code]{0}[/code]",html:"{0}"},left:{styles:{"text-align":["left","-webkit-left","-moz-left","-khtml-left"]},isInline:!1,format:"[left]{0}[/left]",html:'
    {0}
    '},center:{styles:{"text-align":["center","-webkit-center","-moz-center","-khtml-center"]},isInline:!1,format:"[center]{0}[/center]",html:'
    {0}
    '},right:{styles:{"text-align":["right","-webkit-right","-moz-right","-khtml-right"]},isInline:!1,format:"[right]{0}[/right]",html:'
    {0}
    '},justify:{styles:{"text-align":["justify","-webkit-justify","-moz-justify","-khtml-justify"]},isInline:!1,format:"[justify]{0}[/justify]",html:'
    {0}
    '},youtube:{allowsEmpty:!0,tags:{iframe:{"data-youtube-id":null}},format:function(a,b){return a=a.attr("data-youtube-id"),a?"[youtube]"+a+"[/youtube]":b},html:''},rtl:{styles:{direction:["rtl"]},format:"[rtl]{0}[/rtl]",html:'
    {0}
    '},ltr:{styles:{direction:["ltr"]},format:"[ltr]{0}[/ltr]",html:'
    {0}
    '},ignore:{}};e.bbcode.bbcode={get:function(a){return s[a]||null},set:function(b,c){return b&&c?(c=a.extend(s[b]||{},c),c.remove=function(){delete s[b]},s[b]=c,this):!1},rename:function(a,b){return a in s?(s[b]=s[a],delete s[a],this):!1},remove:function(a){return a in s&&delete s[a],this}},a.fn.sceditorBBCodePlugin=function(b){return b=b||{},a.isPlainObject(b)&&(b.plugins=(b.plugins||"")+"bbcode"),this.sceditor(b)},e.bbcode.normaliseColour=r,e.bbcode.formatString=m,e.bbcode.stripQuotes=l,e.bbcode.bbcodes=s,d.BBCodeParser=p}(jQuery,window,document); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/jquery.sceditor.default.min.css b/html/forums/jscripts/sceditor/jquery.sceditor.default.min.css deleted file mode 100644 index 1fb79d7..0000000 --- a/html/forums/jscripts/sceditor/jquery.sceditor.default.min.css +++ /dev/null @@ -1 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */body,code:before,html,p,table{margin:0;padding:0;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:13px;color:#111}html{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}body{position:relative;overflow:auto;min-height:100%;word-wrap:break-word}ol,ul{margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}table,td{border:1px dotted #000;empty-cells:show}code:before{position:absolute;content:'Code:';top:-1.35em;left:0}code{margin-top:1.5em;position:relative;background:#eee;border:1px solid #aaa;white-space:pre;padding:.25em}.ie6 code,.ie7 code{margin-top:0}code,code:before{display:block;text-align:left}blockquote{position:relative;background:#fff6c7;margin:.25em 0;border:1px solid #aaa;padding:.25em}blockquote cite{font-weight:700;display:block;font-size:1em;border-bottom:1px solid #aaa}h1,h2,h3,h4,h5,h6{padding:0;margin:0}div,p{min-height:1.25em} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/jquery.sceditor.min.js b/html/forums/jscripts/sceditor/jquery.sceditor.min.js deleted file mode 100644 index 3e922ce..0000000 --- a/html/forums/jscripts/sceditor/jquery.sceditor.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* SCEditor v1.4.7 | (C) 2015, Sam Clarke | sceditor.com/license */ -!function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){var d;d=function(){"use strict";var a=c(1),b=c(2),d=c(3),e=c(4),f=c(5);a.sceditor=b,b.commands=c(6),b.defaultOptions=c(7),b.RangeHelper=c(8),b.dom=c(9),b.ie=e.ie,b.ios=e.ios,b.isWysiwygSupported=e.isWysiwygSupported,b.regexEscape=f.regex,b.escapeEntities=f.entities,b.escapeUriScheme=f.uriScheme,b.PluginManager=d,b.plugins=d.plugins,a.fn.sceditor=function(c){var d,f,g=[];return c=c||{},c.runWithoutWysiwygSupport||e.isWysiwygSupported?(this.each(function(){d=this.jquery?this:a(this),f=d.data("sceditor"),d.parents(".sceditor-container").length>0||("state"===c?g.push(!!f):"instance"===c?g.push(f):f||new b(this,c))}),g.length?1===g.length?g[0]:a(g):this):void 0}}.call(b,c,b,a),!(void 0!==d&&(a.exports=d))},function(a){a.exports=jQuery},function(a,b,c){var d;d=function(){"use strict";var a=c(1),b=c(3),d=c(8),e=c(9),f=c(5),g=c(4),h=c(10),i=window,j=document,k=a(i),l=a(j),m=g.ie,n=m&&11>m,o=function(c,p){var q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb,mb,nb,ob,pb,qb,rb,sb,tb,ub=this,vb=c.get?c.get(0):c,wb=a(vb),xb=[],yb=[],zb=[],Ab={},Bb=[],Cb={};ub.commands=a.extend(!0,{},p.commands||o.commands),ub.opts=p=a.extend({},o.defaultOptions,p),K=function(){wb.data("sceditor",ub),a.each(p,function(b,c){a.isPlainObject(c)&&(p[b]=a.extend(!0,{},c))}),p.locale&&"en"!==p.locale&&Q(),q=a('
    ').insertAfter(wb).css("z-index",p.zIndex),m&&q.addClass("ie ie"+m),H=!!wb.attr("required"),wb.removeAttr("required"),P(),W(),R(),O(),U(),S(),T(),g.isWysiwygSupported||ub.toggleSourceMode(),hb();var b=function(){k.unbind("load",b),p.autofocus&&mb(),p.autoExpand&&ub.expandToContent(),fb(),C.call("ready")};k.load(b),j.readyState&&"complete"===j.readyState&&b()},P=function(){var c=p.plugins;c=c?c.toString().split(","):[],C=new b(ub),a.each(c,function(b,c){C.register(a.trim(c))})},Q=function(){var a;A=o.locale[p.locale],A||(a=p.locale.split("-"),A=o.locale[a[0]]),A&&A.dateFormat&&(p.dateFormat=A.dateFormat)},O=function(){var b,c;w=a("").hide(),s=a(''),p.spellcheck||w.attr("spellcheck","false"),"https:"===i.location.protocol&&s.attr("src","javascript:false"),q.append(s).append(w),t=s[0],x=w[0],ub.dimensions(p.width||wb.width(),p.height||wb.height()),b=X(),b.open(),b.write(h("html",{attrs:m?' class="ie ie"'+m:"",spellcheck:p.spellcheck?"":'spellcheck="false"',charset:p.charset,style:p.style})),b.close(),v=a(b),u=a(b.body),ub.readOnly(!!p.readOnly),(g.ios||m)&&(u.height("100%"),m||u.bind("touchend",ub.focus)),c=wb.attr("tabindex"),w.attr("tabindex",c),s.attr("tabindex",c),B=new d(t.contentWindow),ub.val(wb.hide().val())},S=function(){p.autoUpdate&&(u.bind("blur",tb),w.bind("blur",tb)),null===p.rtl&&(p.rtl="rtl"===w.css("direction")),ub.rtl(!!p.rtl),p.autoExpand&&v.bind("keyup",ub.expandToContent),p.resizeEnabled&&V(),q.attr("id",p.id),ub.emoticons(p.emoticonsEnabled)},T=function(){var b=m?"selectionchange":"keyup focus blur contextmenu mouseup touchend click",c="keydown keyup keypress focus blur contextmenu";l.click(eb),a(vb.form).bind("reset",bb).submit(ub.updateOriginal),k.bind("resize orientationChanged",fb),u.keypress(ab).keydown($).keydown(_).keyup(jb).blur(rb).keyup(sb).bind("paste",Y).bind(b,kb).bind(c,db),p.emoticonsCompat&&i.getSelection&&u.keyup(ob),w.blur(rb).keyup(sb).keydown($).bind(c,db),v.mousedown(cb).blur(rb).bind(b,kb).bind("beforedeactivate keyup mouseup",N).keyup(jb).focus(function(){z=null}),q.bind("selectionchanged",lb).bind("selectionchanged",hb).bind("selectionchanged valuechanged nodechanged",db)},R=function(){var b,c=ub.commands,d=(p.toolbarExclude||"").split(","),e=p.toolbar.split("|");r=a('
    '),a.each(e,function(e,f){b=a('
    '),a.each(f.split(","),function(e,f){var g,i,j=c[f];!j||a.inArray(f,d)>-1||(i=j.shortcut,g=h("toolbarButton",{name:f,dispName:ub._(j.tooltip||f)},!0),g.data("sceditor-txtmode",!!j.txtExec).data("sceditor-wysiwygmode",!!j.exec).toggleClass("disabled",!j.exec).mousedown(function(){(!m||9>m)&&(J=!0)}).click(function(){var b=a(this);return b.hasClass("disabled")||M(b,j),hb(),!1}),j.tooltip&&g.attr("title",ub._(j.tooltip)+(i?"("+i+")":"")),i&&ub.addShortcut(i,f),j.state?zb.push({name:f,state:j.state}):"string"==typeof j.exec&&zb.push({name:f,state:j.exec}),b.append(g),Cb[f]=g)}),b[0].firstChild&&r.append(b)}),a(p.toolbarContainer||q).append(r)},U=function(){a.each(ub.commands,function(b,c){c.forceNewLineAfter&&a.isArray(c.forceNewLineAfter)&&(yb=a.merge(yb,c.forceNewLineAfter))}),jb()},V=function(){var b,c,d,e,f,g,h=a('
    '),j=a('
    '),k="touchmove mousemove",n="touchcancel touchend mouseup",o=0,r=0,s=0,t=0,u=0,v=0,w=q.width(),x=q.height(),y=!1,z=ub.rtl();b=p.resizeMinHeight||x/1.5,c=p.resizeMaxHeight||2.5*x,d=p.resizeMinWidth||w/1.25,e=p.resizeMaxWidth||1.25*w,f=function(a){"touchmove"===a.type?(a=i.event,s=a.changedTouches[0].pageX,t=a.changedTouches[0].pageY):(s=a.pageX,t=a.pageY);var f=v+(t-r),g=z?u-(s-o):u+(s-o);e>0&&g>e&&(g=e),d>0&&d>g&&(g=d),p.resizeWidth||(g=!1),c>0&&f>c&&(f=c),b>0&&b>f&&(f=b),p.resizeHeight||(f=!1),(g||f)&&(ub.dimensions(g,f),7>m&&q.height(f)),a.preventDefault()},g=function(a){y&&(y=!1,j.hide(),q.removeClass("resizing").height("auto"),l.unbind(k,f),l.unbind(n,g),a.preventDefault())},q.append(h),q.append(j.hide()),h.bind("touchstart mousedown",function(a){"touchstart"===a.type?(a=i.event,o=a.touches[0].pageX,r=a.touches[0].pageY):(o=a.pageX,r=a.pageY),u=q.width(),v=q.height(),y=!0,q.addClass("resizing"),j.show(),l.bind(k,f),l.bind(n,g),7>m&&q.height(v),a.preventDefault()})},W=function(){var b,c=p.emoticons,d=p.emoticonsRoot;a.isPlainObject(c)&&p.emoticonsEnabled&&a.each(c,function(e,f){a.each(f,function(a,f){d&&(f={url:d+(f.url||f),tooltip:f.tooltip||a},c[e][a]=f),b=j.createElement("img"),b.src=f.url||f,xb.push(b)})})},mb=function(){var b,c,d=v[0],f=u[0],g=f.firstChild,h=!!p.autofocusEnd;if(q.is(":visible")){if(ub.sourceMode())return c=h?x.value.length:0,void(x.setSelectionRange?x.setSelectionRange(c,c):(b=x.createTextRange(),b.moveEnd("character",c),b.collapse(!1),b.select()));if(e.removeWhiteSpace(f),h)for((g=f.lastChild)||(g=d.createElement("p"),u.append(g));g.lastChild;)g=g.lastChild,!n&&a(g).is("br")&&g.previousSibling&&(g=g.previousSibling);d.createRange?(b=d.createRange(),e.canHaveChildren(g)?b.selectNodeContents(g):(b.setStartBefore(g),h&&b.setStartAfter(g))):(b=f.createTextRange(),b.moveToElementText(3!==g.nodeType?g:g.parentNode)),b.collapse(!h),B.selectRange(b),F=b,h&&(v.scrollTop(f.scrollHeight),u.scrollTop(f.scrollHeight)),ub.focus()}},ub.readOnly=function(a){return"boolean"!=typeof a?"readonly"===w.attr("readonly"):(u[0].contentEditable=!a,a?w.attr("readonly","readonly"):w.removeAttr("readonly"),gb(a),ub)},ub.rtl=function(a){var b=a?"rtl":"ltr";return"boolean"!=typeof a?"rtl"===w.attr("dir"):(u.attr("dir",b),w.attr("dir",b),q.removeClass("rtl").removeClass("ltr").addClass(b),ub)},gb=function(b){var c=ub.inSourceMode()?"txtmode":"wysiwygmode";a.each(Cb,function(a,d){b!==!0&&d.data("sceditor-"+c)?d.removeClass("disabled"):d.addClass("disabled")})},ub.width=function(a,b){return a||0===a?(ub.dimensions(a,null,b),ub):q.width()},ub.dimensions=function(a,b,c){var d,e=8>m||j.documentMode<8?2:0;return a=a||0===a?a:!1,b=b||0===b?b:!1,a===!1&&b===!1?{width:ub.width(),height:ub.height()}:(s.data("outerWidthOffset")===d&&ub.updateStyleCache(),a!==!1&&(c!==!1&&(p.width=a),b===!1&&(b=q.height(),c=!1),q.width(a),a&&a.toString().indexOf("%")>-1&&(a=q.width()),s.width(a-s.data("outerWidthOffset")),w.width(a-w.data("outerWidthOffset")),g.ios&&u&&u.width(a-s.data("outerWidthOffset")-(u.outerWidth(!0)-u.width()))),b!==!1&&(c!==!1&&(p.height=b),b&&b.toString().indexOf("%")>-1&&(b=q.height(b).height(),q.height("auto")),b-=p.toolbarContainer?0:r.outerHeight(!0),s.height(b-s.data("outerHeightOffset")),w.height(b-e-w.data("outerHeightOffset"))),ub)},ub.updateStyleCache=function(){s.data("outerWidthOffset",s.outerWidth(!0)-s.width()),w.data("outerWidthOffset",w.outerWidth(!0)-w.width()),s.data("outerHeightOffset",s.outerHeight(!0)-s.height()),w.data("outerHeightOffset",w.outerHeight(!0)-w.height())},ub.height=function(a,b){return a||0===a?(ub.dimensions(null,a,b),ub):q.height()},ub.maximize=function(b){return"undefined"==typeof b?q.is(".sceditor-maximize"):(b=!!b,7>m&&a("html, body").toggleClass("sceditor-maximize",b),q.toggleClass("sceditor-maximize",b),ub.width(b?"100%":p.width,!1),ub.height(b?"100%":p.height,!1),ub)},ub.expandToContent=function(a){var b=q.height(),c=b-s.height(),d=u[0].scrollHeight||v[0].documentElement.scrollHeight,e=p.resizeMaxHeight||2*(p.height||wb.height());d+=c,(a===!0||e>=d)&&d>b&&ub.height(d)},ub.destroy=function(){C&&(C.destroy(),B=null,z=null,C=null,l.unbind("click",eb),k.unbind("resize orientationChanged",fb),a(vb.form).unbind("reset",bb).unbind("submit",ub.updateOriginal),u.unbind(),v.unbind().find("*").remove(),w.unbind().remove(),r.remove(),q.unbind().find("*").unbind().remove(),q.remove(),wb.removeData("sceditor").removeData("sceditorbbcode").show(),H&&wb.attr("required","required"))},ub.createDropDown=function(b,c,d,e){var f,g="sceditor-"+c,h=y&&y.is("."+g);ub.closeDropDown(),h||(e!==!1&&a(d).find(":not(input,textarea)").filter(function(){return 1===this.nodeType}).attr("unselectable","on"),f={top:b.offset().top,left:b.offset().left,marginTop:b.outerHeight()},a.extend(f,p.dropDownCss),y=a('
    ').css(f).append(d).appendTo(a("body")).on("click focusin",function(a){a.stopPropagation()}),setTimeout(function(){y.find("input,textarea").first().focus()}))},eb=function(a){3!==a.which&&y&&(tb(),ub.closeDropDown())},Y=function(a){var b,c,d,e=u[0],f=v[0],g=0,h=j.createElement("div"),i=f.createDocumentFragment(),k=a?a.clipboardData:!1;if(p.disablePasting)return!1;if(p.enablePasteFiltering){if(B.saveRange(),j.body.appendChild(h),k&&k.getData&&((b=k.getData("text/html"))||(b=k.getData("text/plain"))))return h.innerHTML=b,Z(e,h),!1;for(d=u.scrollTop()||v.scrollTop();e.firstChild;)i.appendChild(e.firstChild);return c=function(a,b){if(a.childNodes.length>0||g>25){for(;a.firstChild;)b.appendChild(a.firstChild);for(;i.firstChild;)a.appendChild(i.firstChild);u.scrollTop(d),v.scrollTop(d),b.childNodes.length>0?Z(a,b):B.restoreRange()}else g++,setTimeout(function(){c(a,b)},20)},c(e,h),ub.focus(),!0}},Z=function(b,c){e.fixNesting(c);var d=c.innerHTML;C.hasHandler("toSource")&&(d=C.callOnlyFirst("toSource",d,a(c))),c.parentNode.removeChild(c),C.hasHandler("toWysiwyg")&&(d=C.callOnlyFirst("toWysiwyg",d,!0)),B.restoreRange(),ub.wysiwygEditorInsertHtml(d,null,!0)},ub.closeDropDown=function(a){y&&(y.unbind().remove(),y=null),a===!0&&ub.focus()},X=function(){return t.contentDocument?t.contentDocument:t.contentWindow&&t.contentWindow.document?t.contentWindow.document:t.document},ub.wysiwygEditorInsertHtml=function(b,c,d){var f,g,h,i=s.height();ub.focus(),(d||!a(E).is("code")&&0===a(E).parents("code").length)&&(B.insertHTML(b,c),B.saveRange(),L(u[0]),f=u.find("#sceditor-end-marker").show(),g=u.scrollTop()||v.scrollTop(),h=e.getOffset(f[0]).top+1.5*f.outerHeight(!0)-i,f.hide(),(h>g||g>h+i)&&(u.scrollTop(h),v.scrollTop(h)),qb(!1),B.restoreRange(),jb())},ub.wysiwygEditorInsertText=function(a,b){ub.wysiwygEditorInsertHtml(f.entities(a),f.entities(b))},ub.insertText=function(a,b){return ub.inSourceMode()?ub.sourceEditorInsertText(a,b):ub.wysiwygEditorInsertText(a,b),ub},ub.sourceEditorInsertText=function(a,b){var c,d,e,f=x.selectionStart,g=x.selectionEnd;d=x.scrollTop,x.focus(),"undefined"!=typeof f?(e=x.value,b&&(a+=e.substring(f,g)+b),x.value=e.substring(0,f)+a+e.substring(g,e.length),x.selectionStart=f+a.length-(b?b.length:0),x.selectionEnd=x.selectionStart):(c=j.selection.createRange(),b&&(a+=c.text+b),c.text=a,b&&c.moveEnd("character",0-b.length),c.moveStart("character",c.End-c.Start),c.select()),x.scrollTop=d,x.focus(),qb()},ub.getRangeHelper=function(){return B},ub.sourceEditorCaret=function(a){var b,c={};return x.focus(),"undefined"!=typeof x.selectionStart?a?(x.selectionStart=a.start,x.selectionEnd=a.end):(c.start=x.selectionStart,c.end=x.selectionEnd):(b=j.selection.createRange(),a?(b.moveEnd("character",a.end),b.moveStart("character",a.start),b.select()):(c.start=b.Start,c.end=b.End)),a?this:c},ub.val=function(a,b){return"string"!=typeof a?ub.inSourceMode()?ub.getSourceEditorValue(!1):ub.getWysiwygEditorValue(b):(ub.inSourceMode()?ub.setSourceEditorValue(a):(b!==!1&&C.hasHandler("toWysiwyg")&&(a=C.callOnlyFirst("toWysiwyg",a)),ub.setWysiwygEditorValue(a)),ub)},ub.insert=function(b,c,d,e,f){if(ub.inSourceMode())return ub.sourceEditorInsertText(b,c),ub;if(c){var g=B.selectedHtml(),h=a("
    ").appendTo(a("body")).hide().html(g);d!==!1&&C.hasHandler("toSource")&&(g=C.callOnlyFirst("toSource",g,h)),h.remove(),b+=g+c}return d!==!1&&C.hasHandler("toWysiwyg")&&(b=C.callOnlyFirst("toWysiwyg",b,!0)),d!==!1&&f===!0&&(b=b.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")),ub.wysiwygEditorInsertHtml(b),ub},ub.getWysiwygEditorValue=function(a){var b,c,d=B.hasSelection();return d?B.saveRange():z&&z.getBookmark&&(c=z.getBookmark()),e.fixNesting(u[0]),b=u.html(),a!==!1&&C.hasHandler("toSource")&&(b=C.callOnlyFirst("toSource",b,u)),d?(B.restoreRange(),z=null):c&&(z.moveToBookmark(c),z=null),b},ub.getBody=function(){return u},ub.getContentAreaContainer=function(){return s},ub.getSourceEditorValue=function(a){var b=w.val();return a!==!1&&C.hasHandler("toWysiwyg")&&(b=C.callOnlyFirst("toWysiwyg",b)),b},ub.setWysiwygEditorValue=function(a){a||(a="

    "+(m?"":"
    ")+"

    "),u[0].innerHTML=a,L(u[0]),jb(),qb()},ub.setSourceEditorValue=function(a){w.val(a),qb()},ub.updateOriginal=function(){wb.val(ub.val())},L=function(b){if(p.emoticonsEnabled&&!a(b).parents("code").length){var c=b.ownerDocument,d="\\s| | | | | ",g=[],i=[],j=a.extend({},p.emoticons.more,p.emoticons.dropdown,p.emoticons.hidden);a.each(j,function(a){p.emoticonsCompat&&(i[a]=new RegExp("(>|^|"+d+")"+f.regex(a)+"($|<|"+d+")")),g.push(a)});var k=function(b){for(b=b.firstChild;b;){var d,f,l,m,n,o,q,r=b.parentNode,s=b.nodeValue;if(3!==b.nodeType)a(b).is("code")||k(b);else if(s)for(n=g.length;n--;)f=g[n],q=p.emoticonsCompat?s.search(i[f]):s.indexOf(f),q>-1&&(o=b.nextSibling,l=j[f],d=s.substr(q).split(f),s=s.substr(0,q)+d.shift(),b.nodeValue=s,m=e.parseHTML(h("emoticon",{key:f,url:l.url||l,tooltip:l.tooltip||f}),c),r.insertBefore(m[0],o),r.insertBefore(c.createTextNode(d.join(f)),o));b=b.nextSibling}};k(b),p.emoticonsCompat&&(Bb=u.find("img[data-sceditor-emoticon]"))}},ub.inSourceMode=function(){return q.hasClass("sourceMode")},ub.sourceMode=function(a){var b=ub.inSourceMode();return"boolean"!=typeof a?b:((b&&!a||!b&&a)&&ub.toggleSourceMode(),ub)},ub.toggleSourceMode=function(){var a=ub.inSourceMode();(g.isWysiwygSupported||!a)&&(a||(B.saveRange(),B.clear()),ub.blur(),a?ub.setWysiwygEditorValue(ub.getSourceEditorValue()):ub.setSourceEditorValue(ub.getWysiwygEditorValue()),z=null,w.toggle(),s.toggle(),q.toggleClass("wysiwygMode",a).toggleClass("sourceMode",!a),gb(),hb())},ib=function(){return x.focus(),"undefined"!=typeof x.selectionStart?x.value.substring(x.selectionStart,x.selectionEnd):j.selection.createRange().text},M=function(b,c){ub.inSourceMode()?c.txtExec&&(a.isArray(c.txtExec)?ub.sourceEditorInsertText.apply(ub,c.txtExec):c.txtExec.call(ub,b,ib())):c.exec&&(a.isFunction(c.exec)?c.exec.call(ub,b):ub.execCommand(c.exec,c.hasOwnProperty("execParam")?c.execParam:null))},N=function(){m&&(z=B.selectedRange())},ub.execCommand=function(b,c){var d=!1,e=ub.commands[b],f=a(B.parentNode());if(ub.focus(),!f.is("code")&&0===f.parents("code").length){try{d=v[0].execCommand(b,!1,c)}catch(g){}!d&&e&&e.errorMessage&&alert(ub._(e.errorMessage)),hb()}},kb=function(){function b(){B&&!B.compare(F)&&(F=B.cloneSelected(),q.trigger(a.Event("selectionchanged"))),G=!1}G||(G=!0,m?b():setTimeout(b,100))},lb=function(){var b,c=B.parentNode();D!==c&&(b=D,D=c,E=B.getFirstBlockParent(c),q.trigger(a.Event("nodechanged",{oldNode:b,newNode:D})))},ub.currentNode=function(){return D},ub.currentBlockNode=function(){return E},hb=function(a){var b,c,d="active",e=v[0],f=ub.sourceMode();if(ub.readOnly())return void r.find(d).removeClass(d);f||(c=a?a.newNode:B.parentNode(),b=B.getFirstBlockParent(c));for(var g=0;g-1&&(h=e.queryCommandState(j)?1:0)}catch(l){}}else k||(h=j.call(ub,c,b));i.toggleClass("disabled",k||0>h).toggleClass(d,h>0)}},ab=function(b){var c,d,f,g,h="code,blockquote,pre",i="li,ul,ol";return b.originalEvent.defaultPrevented?void 0:(ub.closeDropDown(),c=a(E).closest(h+","+i).first(),13===b.which&&c.length&&!c.is(i)?(z=null,d=v[0].createElement("br"),B.insertNode(d),n||(f=d.parentNode,g=f.lastChild,g&&3===g.nodeType&&""===g.nodeValue&&(f.removeChild(g),g=f.lastChild),!e.isInline(f,!0)&&g===d&&e.isInline(d.previousSibling)&&B.insertHTML("
    ")),!1):void 0)},jb=function(){var b,c,d,f=u[0];e.rTraverse(f,function(g){return b=g.nodeName.toLowerCase(),a.inArray(b,yb)>-1&&(c=!0),3===g.nodeType&&!/^\s*$/.test(g.nodeValue)||"br"===b||n&&!g.firstChild&&!e.isInline(g,!1)?(c&&(d=v[0].createElement("p"),d.className="sceditor-nlf",d.innerHTML=n?"":"
    ",f.appendChild(d)),!1):void 0})},bb=function(){ub.val(wb.val())},cb=function(){ub.closeDropDown(),z=null},fb=function(){var a=p.height,b=p.width;ub.maximize()?ub.dimensions("100%","100%",!1):(a&&a.toString().indexOf("%")>-1||b&&b.toString().indexOf("%")>-1)&&ub.dimensions(b,a)},ub._=function(){var a,b=arguments;return A&&A[b[0]]&&(b[0]=A[b[0]]),b[0].replace(/\{(\d+)\}/g,function(c,d){return b[d-0+1]!==a?b[d-0+1]:"{"+d+"}"})},db=function(b){C.call(b.type+"Event",b,ub);var c=b.target===x?"scesrc":"scewys",d=a.Event(b);d.type=c+b.type,q.trigger(d,ub)},ub.bind=function(b,c,d,e){b=b.split(" ");for(var f=b.length;f--;)a.isFunction(c)&&(d||q.bind("scewys"+b[f],c),e||q.bind("scesrc"+b[f],c),"valuechanged"===b[f]&&(qb.hasHandler=!0));return ub},ub.unbind=function(b,c,d,e){b=b.split(" ");for(var f=b.length;f--;)a.isFunction(c)&&(d||q.unbind("scewys"+b[f],c),e||q.unbind("scesrc"+b[f],c));return ub},ub.blur=function(b,c,d){return a.isFunction(b)?ub.bind("blur",b,c,d):ub.sourceMode()?w.blur():u.blur(),ub},ub.focus=function(b,c,d){if(a.isFunction(b))ub.bind("focus",b,c,d);else if(ub.inSourceMode())x.focus();else{var e,f=B.selectedRange();F||B.hasSelection()||mb(),!n&&f&&1===f.endOffset&&f.collapsed&&(e=f.endContainer,e&&1===e.childNodes.length&&a(e.firstChild).is("br")&&(f.setStartBefore(e.firstChild),f.collapse(!0),B.selectRange(f))),t.contentWindow.focus(),u[0].focus(),z&&(B.selectRange(z),z=null)}return ub},ub.keyDown=function(a,b,c){return ub.bind("keydown",a,b,c)},ub.keyPress=function(a,b,c){return ub.bind("keypress",a,b,c)},ub.keyUp=function(a,b,c){return ub.bind("keyup",a,b,c)},ub.nodeChanged=function(a){return ub.bind("nodechanged",a,!1,!0)},ub.selectionChanged=function(a){return ub.bind("selectionchanged",a,!1,!0)},ub.valueChanged=function(a,b,c){return ub.bind("valuechanged",a,b,c)},nb=function(b){var c,d=0,e=ub.emoticonsCache,f=String.fromCharCode(b.which);if(!a(E).is("code")&&!a(E).parents("code").length)return e||(e=[],a.each(a.extend({},p.emoticons.more,p.emoticons.dropdown,p.emoticons.hidden),function(a,b){e[d++]=[a,h("emoticon",{key:a,url:b.url||b,tooltip:b.tooltip||a})]}),e.sort(function(a,b){return a[0].length-b[0].length}),ub.emoticonsCache=e,ub.longestEmoticonCode=e[e.length-1][0].length),c=B.raplaceKeyword(ub.emoticonsCache,!0,!0,ub.longestEmoticonCode,p.emoticonsCompat,f),c&&p.emoticonsCompat?(Bb=u.find("img[data-sceditor-emoticon]"),/^\s$/.test(f)):!c},ob=function(){if(Bb.length){var b,c,d,e,f,g,h=ub.currentBlockNode(),i=!1,j=/[^\s\xA0\u2002\u2003\u2009\u00a0]+/;Bb=a.map(Bb,function(k){return k&&k.parentNode?a.contains(h,k)?(b=k.previousSibling,c=k.nextSibling,f=b.nodeValue,null===f&&(f=b.innerText||""),b&&j.test(b.nodeValue.slice(-1))||c&&j.test((c.nodeValue||"")[0])?(d=k.parentNode,e=B.cloneSelected(),g=e.startContainer,f+=a(k).data("sceditor-emoticon"),g===c?i=f.length+e.startOffset:g===h&&h.childNodes[e.startOffset]===c?i=f.length:g===b&&(i=e.startOffset),c&&3===c.nodeType||(c=d.insertBefore(d.ownerDocument.createTextNode(""),c)),c.insertData(0,f),d.removeChild(b),d.removeChild(k),i!==!1&&(e.setStart(c,i),e.collapse(!0),B.selectRange(e)),null):k):k:null})}},ub.emoticons=function(b){return b||b===!1?(p.emoticonsEnabled=b,b?(u.keypress(nb),ub.sourceMode()||(B.saveRange(),L(u[0]),Bb=u.find("img[data-sceditor-emoticon]"),qb(!1),B.restoreRange())):(u.find("img[data-sceditor-emoticon]").replaceWith(function(){return a(this).data("sceditor-emoticon")}),Bb=[],u.unbind("keypress",nb),qb()),ub):p.emoticonsEnabled},ub.css=function(b){return I||(I=a('

    ',toolbarButton:'
    {dispName}
    ',emoticon:'{key}',fontOpt:'{font}',sizeOpt:'{size}',pastetext:'
    ',table:'
    ',image:'
    ',email:'
    ',link:'
    ',youtubeMenu:'
    ',youtube:''};return function(b,c,d){var e=a[b];return $.each(c,function(a,b){e=e.replace(new RegExp("\\{"+a+"\\}","g"),b)}),d&&(e=$(e)),e}}.call(b,c,b,a),!(void 0!==d&&(a.exports=d))}]); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/jquery.sceditor.xhtml.min.js b/html/forums/jscripts/sceditor/jquery.sceditor.xhtml.min.js deleted file mode 100644 index 5d1da15..0000000 --- a/html/forums/jscripts/sceditor/jquery.sceditor.xhtml.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* SCEditor v1.4.7 | (C) 2015, Sam Clarke | sceditor.com/license */ -!function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){var d;d=function(){"use strict";var a=c(1),b=c(2),d=c(3),e=c(4),f=c(5);a.sceditor=b,b.commands=c(6),b.defaultOptions=c(7),b.RangeHelper=c(8),b.dom=c(9),b.ie=e.ie,b.ios=e.ios,b.isWysiwygSupported=e.isWysiwygSupported,b.regexEscape=f.regex,b.escapeEntities=f.entities,b.escapeUriScheme=f.uriScheme,b.PluginManager=d,b.plugins=d.plugins,a.fn.sceditor=function(c){var d,f,g=[];return c=c||{},c.runWithoutWysiwygSupport||e.isWysiwygSupported?(this.each(function(){d=this.jquery?this:a(this),f=d.data("sceditor"),d.parents(".sceditor-container").length>0||("state"===c?g.push(!!f):"instance"===c?g.push(f):f||new b(this,c))}),g.length?1===g.length?g[0]:a(g):this):void 0}}.call(b,c,b,a),!(void 0!==d&&(a.exports=d))},function(a){a.exports=jQuery},function(a,b,c){var d;d=function(){"use strict";var a=c(1),b=c(3),d=c(8),e=c(9),f=c(5),g=c(4),h=c(10),i=window,j=document,k=a(i),l=a(j),m=g.ie,n=m&&11>m,o=function(c,p){var q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb,mb,nb,ob,pb,qb,rb,sb,tb,ub=this,vb=c.get?c.get(0):c,wb=a(vb),xb=[],yb=[],zb=[],Ab={},Bb=[],Cb={};ub.commands=a.extend(!0,{},p.commands||o.commands),ub.opts=p=a.extend({},o.defaultOptions,p),K=function(){wb.data("sceditor",ub),a.each(p,function(b,c){a.isPlainObject(c)&&(p[b]=a.extend(!0,{},c))}),p.locale&&"en"!==p.locale&&Q(),q=a('
    ').insertAfter(wb).css("z-index",p.zIndex),m&&q.addClass("ie ie"+m),H=!!wb.attr("required"),wb.removeAttr("required"),P(),W(),R(),O(),U(),S(),T(),g.isWysiwygSupported||ub.toggleSourceMode(),hb();var b=function(){k.unbind("load",b),p.autofocus&&mb(),p.autoExpand&&ub.expandToContent(),fb(),C.call("ready")};k.load(b),j.readyState&&"complete"===j.readyState&&b()},P=function(){var c=p.plugins;c=c?c.toString().split(","):[],C=new b(ub),a.each(c,function(b,c){C.register(a.trim(c))})},Q=function(){var a;A=o.locale[p.locale],A||(a=p.locale.split("-"),A=o.locale[a[0]]),A&&A.dateFormat&&(p.dateFormat=A.dateFormat)},O=function(){var b,c;w=a("").hide(),s=a(''),p.spellcheck||w.attr("spellcheck","false"),"https:"===i.location.protocol&&s.attr("src","javascript:false"),q.append(s).append(w),t=s[0],x=w[0],ub.dimensions(p.width||wb.width(),p.height||wb.height()),b=X(),b.open(),b.write(h("html",{attrs:m?' class="ie ie"'+m:"",spellcheck:p.spellcheck?"":'spellcheck="false"',charset:p.charset,style:p.style})),b.close(),v=a(b),u=a(b.body),ub.readOnly(!!p.readOnly),(g.ios||m)&&(u.height("100%"),m||u.bind("touchend",ub.focus)),c=wb.attr("tabindex"),w.attr("tabindex",c),s.attr("tabindex",c),B=new d(t.contentWindow),ub.val(wb.hide().val())},S=function(){p.autoUpdate&&(u.bind("blur",tb),w.bind("blur",tb)),null===p.rtl&&(p.rtl="rtl"===w.css("direction")),ub.rtl(!!p.rtl),p.autoExpand&&v.bind("keyup",ub.expandToContent),p.resizeEnabled&&V(),q.attr("id",p.id),ub.emoticons(p.emoticonsEnabled)},T=function(){var b=m?"selectionchange":"keyup focus blur contextmenu mouseup touchend click",c="keydown keyup keypress focus blur contextmenu";l.click(eb),a(vb.form).bind("reset",bb).submit(ub.updateOriginal),k.bind("resize orientationChanged",fb),u.keypress(ab).keydown($).keydown(_).keyup(jb).blur(rb).keyup(sb).bind("paste",Y).bind(b,kb).bind(c,db),p.emoticonsCompat&&i.getSelection&&u.keyup(ob),w.blur(rb).keyup(sb).keydown($).bind(c,db),v.mousedown(cb).blur(rb).bind(b,kb).bind("beforedeactivate keyup mouseup",N).keyup(jb).focus(function(){z=null}),q.bind("selectionchanged",lb).bind("selectionchanged",hb).bind("selectionchanged valuechanged nodechanged",db)},R=function(){var b,c=ub.commands,d=(p.toolbarExclude||"").split(","),e=p.toolbar.split("|");r=a('
    '),a.each(e,function(e,f){b=a('
    '),a.each(f.split(","),function(e,f){var g,i,j=c[f];!j||a.inArray(f,d)>-1||(i=j.shortcut,g=h("toolbarButton",{name:f,dispName:ub._(j.tooltip||f)},!0),g.data("sceditor-txtmode",!!j.txtExec).data("sceditor-wysiwygmode",!!j.exec).toggleClass("disabled",!j.exec).mousedown(function(){(!m||9>m)&&(J=!0)}).click(function(){var b=a(this);return b.hasClass("disabled")||M(b,j),hb(),!1}),j.tooltip&&g.attr("title",ub._(j.tooltip)+(i?"("+i+")":"")),i&&ub.addShortcut(i,f),j.state?zb.push({name:f,state:j.state}):"string"==typeof j.exec&&zb.push({name:f,state:j.exec}),b.append(g),Cb[f]=g)}),b[0].firstChild&&r.append(b)}),a(p.toolbarContainer||q).append(r)},U=function(){a.each(ub.commands,function(b,c){c.forceNewLineAfter&&a.isArray(c.forceNewLineAfter)&&(yb=a.merge(yb,c.forceNewLineAfter))}),jb()},V=function(){var b,c,d,e,f,g,h=a('
    '),j=a('
    '),k="touchmove mousemove",n="touchcancel touchend mouseup",o=0,r=0,s=0,t=0,u=0,v=0,w=q.width(),x=q.height(),y=!1,z=ub.rtl();b=p.resizeMinHeight||x/1.5,c=p.resizeMaxHeight||2.5*x,d=p.resizeMinWidth||w/1.25,e=p.resizeMaxWidth||1.25*w,f=function(a){"touchmove"===a.type?(a=i.event,s=a.changedTouches[0].pageX,t=a.changedTouches[0].pageY):(s=a.pageX,t=a.pageY);var f=v+(t-r),g=z?u-(s-o):u+(s-o);e>0&&g>e&&(g=e),d>0&&d>g&&(g=d),p.resizeWidth||(g=!1),c>0&&f>c&&(f=c),b>0&&b>f&&(f=b),p.resizeHeight||(f=!1),(g||f)&&(ub.dimensions(g,f),7>m&&q.height(f)),a.preventDefault()},g=function(a){y&&(y=!1,j.hide(),q.removeClass("resizing").height("auto"),l.unbind(k,f),l.unbind(n,g),a.preventDefault())},q.append(h),q.append(j.hide()),h.bind("touchstart mousedown",function(a){"touchstart"===a.type?(a=i.event,o=a.touches[0].pageX,r=a.touches[0].pageY):(o=a.pageX,r=a.pageY),u=q.width(),v=q.height(),y=!0,q.addClass("resizing"),j.show(),l.bind(k,f),l.bind(n,g),7>m&&q.height(v),a.preventDefault()})},W=function(){var b,c=p.emoticons,d=p.emoticonsRoot;a.isPlainObject(c)&&p.emoticonsEnabled&&a.each(c,function(e,f){a.each(f,function(a,f){d&&(f={url:d+(f.url||f),tooltip:f.tooltip||a},c[e][a]=f),b=j.createElement("img"),b.src=f.url||f,xb.push(b)})})},mb=function(){var b,c,d=v[0],f=u[0],g=f.firstChild,h=!!p.autofocusEnd;if(q.is(":visible")){if(ub.sourceMode())return c=h?x.value.length:0,void(x.setSelectionRange?x.setSelectionRange(c,c):(b=x.createTextRange(),b.moveEnd("character",c),b.collapse(!1),b.select()));if(e.removeWhiteSpace(f),h)for((g=f.lastChild)||(g=d.createElement("p"),u.append(g));g.lastChild;)g=g.lastChild,!n&&a(g).is("br")&&g.previousSibling&&(g=g.previousSibling);d.createRange?(b=d.createRange(),e.canHaveChildren(g)?b.selectNodeContents(g):(b.setStartBefore(g),h&&b.setStartAfter(g))):(b=f.createTextRange(),b.moveToElementText(3!==g.nodeType?g:g.parentNode)),b.collapse(!h),B.selectRange(b),F=b,h&&(v.scrollTop(f.scrollHeight),u.scrollTop(f.scrollHeight)),ub.focus()}},ub.readOnly=function(a){return"boolean"!=typeof a?"readonly"===w.attr("readonly"):(u[0].contentEditable=!a,a?w.attr("readonly","readonly"):w.removeAttr("readonly"),gb(a),ub)},ub.rtl=function(a){var b=a?"rtl":"ltr";return"boolean"!=typeof a?"rtl"===w.attr("dir"):(u.attr("dir",b),w.attr("dir",b),q.removeClass("rtl").removeClass("ltr").addClass(b),ub)},gb=function(b){var c=ub.inSourceMode()?"txtmode":"wysiwygmode";a.each(Cb,function(a,d){b!==!0&&d.data("sceditor-"+c)?d.removeClass("disabled"):d.addClass("disabled")})},ub.width=function(a,b){return a||0===a?(ub.dimensions(a,null,b),ub):q.width()},ub.dimensions=function(a,b,c){var d,e=8>m||j.documentMode<8?2:0;return a=a||0===a?a:!1,b=b||0===b?b:!1,a===!1&&b===!1?{width:ub.width(),height:ub.height()}:(s.data("outerWidthOffset")===d&&ub.updateStyleCache(),a!==!1&&(c!==!1&&(p.width=a),b===!1&&(b=q.height(),c=!1),q.width(a),a&&a.toString().indexOf("%")>-1&&(a=q.width()),s.width(a-s.data("outerWidthOffset")),w.width(a-w.data("outerWidthOffset")),g.ios&&u&&u.width(a-s.data("outerWidthOffset")-(u.outerWidth(!0)-u.width()))),b!==!1&&(c!==!1&&(p.height=b),b&&b.toString().indexOf("%")>-1&&(b=q.height(b).height(),q.height("auto")),b-=p.toolbarContainer?0:r.outerHeight(!0),s.height(b-s.data("outerHeightOffset")),w.height(b-e-w.data("outerHeightOffset"))),ub)},ub.updateStyleCache=function(){s.data("outerWidthOffset",s.outerWidth(!0)-s.width()),w.data("outerWidthOffset",w.outerWidth(!0)-w.width()),s.data("outerHeightOffset",s.outerHeight(!0)-s.height()),w.data("outerHeightOffset",w.outerHeight(!0)-w.height())},ub.height=function(a,b){return a||0===a?(ub.dimensions(null,a,b),ub):q.height()},ub.maximize=function(b){return"undefined"==typeof b?q.is(".sceditor-maximize"):(b=!!b,7>m&&a("html, body").toggleClass("sceditor-maximize",b),q.toggleClass("sceditor-maximize",b),ub.width(b?"100%":p.width,!1),ub.height(b?"100%":p.height,!1),ub)},ub.expandToContent=function(a){var b=q.height(),c=b-s.height(),d=u[0].scrollHeight||v[0].documentElement.scrollHeight,e=p.resizeMaxHeight||2*(p.height||wb.height());d+=c,(a===!0||e>=d)&&d>b&&ub.height(d)},ub.destroy=function(){C&&(C.destroy(),B=null,z=null,C=null,l.unbind("click",eb),k.unbind("resize orientationChanged",fb),a(vb.form).unbind("reset",bb).unbind("submit",ub.updateOriginal),u.unbind(),v.unbind().find("*").remove(),w.unbind().remove(),r.remove(),q.unbind().find("*").unbind().remove(),q.remove(),wb.removeData("sceditor").removeData("sceditorbbcode").show(),H&&wb.attr("required","required"))},ub.createDropDown=function(b,c,d,e){var f,g="sceditor-"+c,h=y&&y.is("."+g);ub.closeDropDown(),h||(e!==!1&&a(d).find(":not(input,textarea)").filter(function(){return 1===this.nodeType}).attr("unselectable","on"),f={top:b.offset().top,left:b.offset().left,marginTop:b.outerHeight()},a.extend(f,p.dropDownCss),y=a('
    ').css(f).append(d).appendTo(a("body")).on("click focusin",function(a){a.stopPropagation()}),setTimeout(function(){y.find("input,textarea").first().focus()}))},eb=function(a){3!==a.which&&y&&(tb(),ub.closeDropDown())},Y=function(a){var b,c,d,e=u[0],f=v[0],g=0,h=j.createElement("div"),i=f.createDocumentFragment(),k=a?a.clipboardData:!1;if(p.disablePasting)return!1;if(p.enablePasteFiltering){if(B.saveRange(),j.body.appendChild(h),k&&k.getData&&((b=k.getData("text/html"))||(b=k.getData("text/plain"))))return h.innerHTML=b,Z(e,h),!1;for(d=u.scrollTop()||v.scrollTop();e.firstChild;)i.appendChild(e.firstChild);return c=function(a,b){if(a.childNodes.length>0||g>25){for(;a.firstChild;)b.appendChild(a.firstChild);for(;i.firstChild;)a.appendChild(i.firstChild);u.scrollTop(d),v.scrollTop(d),b.childNodes.length>0?Z(a,b):B.restoreRange()}else g++,setTimeout(function(){c(a,b)},20)},c(e,h),ub.focus(),!0}},Z=function(b,c){e.fixNesting(c);var d=c.innerHTML;C.hasHandler("toSource")&&(d=C.callOnlyFirst("toSource",d,a(c))),c.parentNode.removeChild(c),C.hasHandler("toWysiwyg")&&(d=C.callOnlyFirst("toWysiwyg",d,!0)),B.restoreRange(),ub.wysiwygEditorInsertHtml(d,null,!0)},ub.closeDropDown=function(a){y&&(y.unbind().remove(),y=null),a===!0&&ub.focus()},X=function(){return t.contentDocument?t.contentDocument:t.contentWindow&&t.contentWindow.document?t.contentWindow.document:t.document},ub.wysiwygEditorInsertHtml=function(b,c,d){var f,g,h,i=s.height();ub.focus(),(d||!a(E).is("code")&&0===a(E).parents("code").length)&&(B.insertHTML(b,c),B.saveRange(),L(u[0]),f=u.find("#sceditor-end-marker").show(),g=u.scrollTop()||v.scrollTop(),h=e.getOffset(f[0]).top+1.5*f.outerHeight(!0)-i,f.hide(),(h>g||g>h+i)&&(u.scrollTop(h),v.scrollTop(h)),qb(!1),B.restoreRange(),jb())},ub.wysiwygEditorInsertText=function(a,b){ub.wysiwygEditorInsertHtml(f.entities(a),f.entities(b))},ub.insertText=function(a,b){return ub.inSourceMode()?ub.sourceEditorInsertText(a,b):ub.wysiwygEditorInsertText(a,b),ub},ub.sourceEditorInsertText=function(a,b){var c,d,e,f=x.selectionStart,g=x.selectionEnd;d=x.scrollTop,x.focus(),"undefined"!=typeof f?(e=x.value,b&&(a+=e.substring(f,g)+b),x.value=e.substring(0,f)+a+e.substring(g,e.length),x.selectionStart=f+a.length-(b?b.length:0),x.selectionEnd=x.selectionStart):(c=j.selection.createRange(),b&&(a+=c.text+b),c.text=a,b&&c.moveEnd("character",0-b.length),c.moveStart("character",c.End-c.Start),c.select()),x.scrollTop=d,x.focus(),qb()},ub.getRangeHelper=function(){return B},ub.sourceEditorCaret=function(a){var b,c={};return x.focus(),"undefined"!=typeof x.selectionStart?a?(x.selectionStart=a.start,x.selectionEnd=a.end):(c.start=x.selectionStart,c.end=x.selectionEnd):(b=j.selection.createRange(),a?(b.moveEnd("character",a.end),b.moveStart("character",a.start),b.select()):(c.start=b.Start,c.end=b.End)),a?this:c},ub.val=function(a,b){return"string"!=typeof a?ub.inSourceMode()?ub.getSourceEditorValue(!1):ub.getWysiwygEditorValue(b):(ub.inSourceMode()?ub.setSourceEditorValue(a):(b!==!1&&C.hasHandler("toWysiwyg")&&(a=C.callOnlyFirst("toWysiwyg",a)),ub.setWysiwygEditorValue(a)),ub)},ub.insert=function(b,c,d,e,f){if(ub.inSourceMode())return ub.sourceEditorInsertText(b,c),ub;if(c){var g=B.selectedHtml(),h=a("
    ").appendTo(a("body")).hide().html(g);d!==!1&&C.hasHandler("toSource")&&(g=C.callOnlyFirst("toSource",g,h)),h.remove(),b+=g+c}return d!==!1&&C.hasHandler("toWysiwyg")&&(b=C.callOnlyFirst("toWysiwyg",b,!0)),d!==!1&&f===!0&&(b=b.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")),ub.wysiwygEditorInsertHtml(b),ub},ub.getWysiwygEditorValue=function(a){var b,c,d=B.hasSelection();return d?B.saveRange():z&&z.getBookmark&&(c=z.getBookmark()),e.fixNesting(u[0]),b=u.html(),a!==!1&&C.hasHandler("toSource")&&(b=C.callOnlyFirst("toSource",b,u)),d?(B.restoreRange(),z=null):c&&(z.moveToBookmark(c),z=null),b},ub.getBody=function(){return u},ub.getContentAreaContainer=function(){return s},ub.getSourceEditorValue=function(a){var b=w.val();return a!==!1&&C.hasHandler("toWysiwyg")&&(b=C.callOnlyFirst("toWysiwyg",b)),b},ub.setWysiwygEditorValue=function(a){a||(a="

    "+(m?"":"
    ")+"

    "),u[0].innerHTML=a,L(u[0]),jb(),qb()},ub.setSourceEditorValue=function(a){w.val(a),qb()},ub.updateOriginal=function(){wb.val(ub.val())},L=function(b){if(p.emoticonsEnabled&&!a(b).parents("code").length){var c=b.ownerDocument,d="\\s| | | | | ",g=[],i=[],j=a.extend({},p.emoticons.more,p.emoticons.dropdown,p.emoticons.hidden);a.each(j,function(a){p.emoticonsCompat&&(i[a]=new RegExp("(>|^|"+d+")"+f.regex(a)+"($|<|"+d+")")),g.push(a)});var k=function(b){for(b=b.firstChild;b;){var d,f,l,m,n,o,q,r=b.parentNode,s=b.nodeValue;if(3!==b.nodeType)a(b).is("code")||k(b);else if(s)for(n=g.length;n--;)f=g[n],q=p.emoticonsCompat?s.search(i[f]):s.indexOf(f),q>-1&&(o=b.nextSibling,l=j[f],d=s.substr(q).split(f),s=s.substr(0,q)+d.shift(),b.nodeValue=s,m=e.parseHTML(h("emoticon",{key:f,url:l.url||l,tooltip:l.tooltip||f}),c),r.insertBefore(m[0],o),r.insertBefore(c.createTextNode(d.join(f)),o));b=b.nextSibling}};k(b),p.emoticonsCompat&&(Bb=u.find("img[data-sceditor-emoticon]"))}},ub.inSourceMode=function(){return q.hasClass("sourceMode")},ub.sourceMode=function(a){var b=ub.inSourceMode();return"boolean"!=typeof a?b:((b&&!a||!b&&a)&&ub.toggleSourceMode(),ub)},ub.toggleSourceMode=function(){var a=ub.inSourceMode();(g.isWysiwygSupported||!a)&&(a||(B.saveRange(),B.clear()),ub.blur(),a?ub.setWysiwygEditorValue(ub.getSourceEditorValue()):ub.setSourceEditorValue(ub.getWysiwygEditorValue()),z=null,w.toggle(),s.toggle(),q.toggleClass("wysiwygMode",a).toggleClass("sourceMode",!a),gb(),hb())},ib=function(){return x.focus(),"undefined"!=typeof x.selectionStart?x.value.substring(x.selectionStart,x.selectionEnd):j.selection.createRange().text},M=function(b,c){ub.inSourceMode()?c.txtExec&&(a.isArray(c.txtExec)?ub.sourceEditorInsertText.apply(ub,c.txtExec):c.txtExec.call(ub,b,ib())):c.exec&&(a.isFunction(c.exec)?c.exec.call(ub,b):ub.execCommand(c.exec,c.hasOwnProperty("execParam")?c.execParam:null))},N=function(){m&&(z=B.selectedRange())},ub.execCommand=function(b,c){var d=!1,e=ub.commands[b],f=a(B.parentNode());if(ub.focus(),!f.is("code")&&0===f.parents("code").length){try{d=v[0].execCommand(b,!1,c)}catch(g){}!d&&e&&e.errorMessage&&alert(ub._(e.errorMessage)),hb()}},kb=function(){function b(){B&&!B.compare(F)&&(F=B.cloneSelected(),q.trigger(a.Event("selectionchanged"))),G=!1}G||(G=!0,m?b():setTimeout(b,100))},lb=function(){var b,c=B.parentNode();D!==c&&(b=D,D=c,E=B.getFirstBlockParent(c),q.trigger(a.Event("nodechanged",{oldNode:b,newNode:D})))},ub.currentNode=function(){return D},ub.currentBlockNode=function(){return E},hb=function(a){var b,c,d="active",e=v[0],f=ub.sourceMode();if(ub.readOnly())return void r.find(d).removeClass(d);f||(c=a?a.newNode:B.parentNode(),b=B.getFirstBlockParent(c));for(var g=0;g-1&&(h=e.queryCommandState(j)?1:0)}catch(l){}}else k||(h=j.call(ub,c,b));i.toggleClass("disabled",k||0>h).toggleClass(d,h>0)}},ab=function(b){var c,d,f,g,h="code,blockquote,pre",i="li,ul,ol";return b.originalEvent.defaultPrevented?void 0:(ub.closeDropDown(),c=a(E).closest(h+","+i).first(),13===b.which&&c.length&&!c.is(i)?(z=null,d=v[0].createElement("br"),B.insertNode(d),n||(f=d.parentNode,g=f.lastChild,g&&3===g.nodeType&&""===g.nodeValue&&(f.removeChild(g),g=f.lastChild),!e.isInline(f,!0)&&g===d&&e.isInline(d.previousSibling)&&B.insertHTML("
    ")),!1):void 0)},jb=function(){var b,c,d,f=u[0];e.rTraverse(f,function(g){return b=g.nodeName.toLowerCase(),a.inArray(b,yb)>-1&&(c=!0),3===g.nodeType&&!/^\s*$/.test(g.nodeValue)||"br"===b||n&&!g.firstChild&&!e.isInline(g,!1)?(c&&(d=v[0].createElement("p"),d.className="sceditor-nlf",d.innerHTML=n?"":"
    ",f.appendChild(d)),!1):void 0})},bb=function(){ub.val(wb.val())},cb=function(){ub.closeDropDown(),z=null},fb=function(){var a=p.height,b=p.width;ub.maximize()?ub.dimensions("100%","100%",!1):(a&&a.toString().indexOf("%")>-1||b&&b.toString().indexOf("%")>-1)&&ub.dimensions(b,a)},ub._=function(){var a,b=arguments;return A&&A[b[0]]&&(b[0]=A[b[0]]),b[0].replace(/\{(\d+)\}/g,function(c,d){return b[d-0+1]!==a?b[d-0+1]:"{"+d+"}"})},db=function(b){C.call(b.type+"Event",b,ub);var c=b.target===x?"scesrc":"scewys",d=a.Event(b);d.type=c+b.type,q.trigger(d,ub)},ub.bind=function(b,c,d,e){b=b.split(" ");for(var f=b.length;f--;)a.isFunction(c)&&(d||q.bind("scewys"+b[f],c),e||q.bind("scesrc"+b[f],c),"valuechanged"===b[f]&&(qb.hasHandler=!0));return ub},ub.unbind=function(b,c,d,e){b=b.split(" ");for(var f=b.length;f--;)a.isFunction(c)&&(d||q.unbind("scewys"+b[f],c),e||q.unbind("scesrc"+b[f],c));return ub},ub.blur=function(b,c,d){return a.isFunction(b)?ub.bind("blur",b,c,d):ub.sourceMode()?w.blur():u.blur(),ub},ub.focus=function(b,c,d){if(a.isFunction(b))ub.bind("focus",b,c,d);else if(ub.inSourceMode())x.focus();else{var e,f=B.selectedRange();F||B.hasSelection()||mb(),!n&&f&&1===f.endOffset&&f.collapsed&&(e=f.endContainer,e&&1===e.childNodes.length&&a(e.firstChild).is("br")&&(f.setStartBefore(e.firstChild),f.collapse(!0),B.selectRange(f))),t.contentWindow.focus(),u[0].focus(),z&&(B.selectRange(z),z=null)}return ub},ub.keyDown=function(a,b,c){return ub.bind("keydown",a,b,c)},ub.keyPress=function(a,b,c){return ub.bind("keypress",a,b,c)},ub.keyUp=function(a,b,c){return ub.bind("keyup",a,b,c)},ub.nodeChanged=function(a){return ub.bind("nodechanged",a,!1,!0)},ub.selectionChanged=function(a){return ub.bind("selectionchanged",a,!1,!0)},ub.valueChanged=function(a,b,c){return ub.bind("valuechanged",a,b,c)},nb=function(b){var c,d=0,e=ub.emoticonsCache,f=String.fromCharCode(b.which);return a(E).is("code")||a(E).parents("code").length?void 0:(e||(e=[],a.each(a.extend({},p.emoticons.more,p.emoticons.dropdown,p.emoticons.hidden),function(a,b){e[d++]=[a,h("emoticon",{key:a,url:b.url||b,tooltip:b.tooltip||a})]}),e.sort(function(a,b){return a[0].length-b[0].length}),ub.emoticonsCache=e,ub.longestEmoticonCode=e[e.length-1][0].length),c=B.raplaceKeyword(ub.emoticonsCache,!0,!0,ub.longestEmoticonCode,p.emoticonsCompat,f),c&&p.emoticonsCompat?(Bb=u.find("img[data-sceditor-emoticon]"),/^\s$/.test(f)):!c)},ob=function(){if(Bb.length){var b,c,d,e,f,g,h=ub.currentBlockNode(),i=!1,j=/[^\s\xA0\u2002\u2003\u2009\u00a0]+/;Bb=a.map(Bb,function(k){return k&&k.parentNode?a.contains(h,k)?(b=k.previousSibling,c=k.nextSibling,f=b.nodeValue,null===f&&(f=b.innerText||""),b&&j.test(b.nodeValue.slice(-1))||c&&j.test((c.nodeValue||"")[0])?(d=k.parentNode,e=B.cloneSelected(),g=e.startContainer,f+=a(k).data("sceditor-emoticon"),g===c?i=f.length+e.startOffset:g===h&&h.childNodes[e.startOffset]===c?i=f.length:g===b&&(i=e.startOffset),c&&3===c.nodeType||(c=d.insertBefore(d.ownerDocument.createTextNode(""),c)),c.insertData(0,f),d.removeChild(b),d.removeChild(k),i!==!1&&(e.setStart(c,i),e.collapse(!0),B.selectRange(e)),null):k):k:null})}},ub.emoticons=function(b){return b||b===!1?(p.emoticonsEnabled=b,b?(u.keypress(nb),ub.sourceMode()||(B.saveRange(),L(u[0]),Bb=u.find("img[data-sceditor-emoticon]"),qb(!1),B.restoreRange())):(u.find("img[data-sceditor-emoticon]").replaceWith(function(){return a(this).data("sceditor-emoticon")}),Bb=[],u.unbind("keypress",nb),qb()),ub):p.emoticonsEnabled},ub.css=function(b){return I||(I=a('

    ',toolbarButton:'
    {dispName}
    ',emoticon:'{key}',fontOpt:'{font}',sizeOpt:'{size}',pastetext:'
    ',table:'
    ',image:'
    ',email:'
    ',link:'
    ',youtubeMenu:'
    ',youtube:''};return function(b,c,d){var e=a[b];return $.each(c,function(a,b){e=e.replace(new RegExp("\\{"+a+"\\}","g"),b)}),d&&(e=$(e)),e}}.call(b,c,b,a),!(void 0!==d&&(a.exports=d))}]),function(a){"use strict";var b=a.sceditor,c=b.plugins,d=b.dom,e={bold:{txtExec:["",""]},italic:{txtExec:["",""]},underline:{txtExec:['',""]},strike:{txtExec:['',""]},subscript:{txtExec:["",""]},superscript:{txtExec:["",""]},left:{txtExec:['
    ',"
    "]},center:{txtExec:['
    ',"
    "]},right:{txtExec:['
    ',"
    "]},justify:{txtExec:['
    ',"
    "]},font:{txtExec:function(a){var c=this;b.command.get("font")._dropDown(c,a,function(a){c.insertText('',"")})}},size:{txtExec:function(a){var c=this;b.command.get("size")._dropDown(c,a,function(a){c.insertText('',"")})}},color:{txtExec:function(a){var c=this;b.command.get("color")._dropDown(c,a,function(a){c.insertText('',"")})}},bulletlist:{txtExec:["
    • ","
    "]},orderedlist:{txtExec:["
    1. ","
    "]},table:{txtExec:["
    ","
    "]},horizontalrule:{txtExec:["
    "]},code:{txtExec:["",""]},image:{txtExec:function(a,b){var c=prompt(this._("Enter the image URL:"),b);c&&this.insertText('')}},email:{txtExec:function(a,b){var c,d,e=b&&b.indexOf("@")>-1?null:b;c=prompt(this._("Enter the e-mail address:"),e?"":b),d=prompt(this._("Enter the displayed text:"),e||c)||c,c&&this.insertText(''+d+"")}},link:{txtExec:function(a,b){var c=b&&b.indexOf("http://")>-1?null:b,d=prompt(this._("Enter URL:"),c?"http://":b),e=prompt(this._("Enter the displayed text:"),c||d)||d;d&&this.insertText(''+e+"")}},quote:{txtExec:["
    ","
    "]},youtube:{txtExec:function(a){var c=this;b.command.get("youtube")._dropDown(c,a,function(a){c.insertText('')})}},rtl:{txtExec:['
    ',"
    "]},ltr:{txtExec:['
    ',"
    "]}};b.XHTMLSerializer=function(){var c,e,f,g,h,i,j,k,l,m,n=this,o={indentStr:" "},p=[],q=0;c=function(a){var b={"&":"&","<":"<",">":">",'"':"""};return a?a.replace(/[&<>"]/g,function(a){return b[a]||a}):""},e=function(a){return a.replace(/[\r\n]/," ").replace(/[^\S|\u00A0]+/g," ")},n.serialize=function(a,b){if(p=[],b)for(a=a.firstChild;a;)f(a),a=a.nextSibling;else f(a);return p.join("")},f=function(a,b){switch(a.nodeType){case 1:var c=a.nodeName.toLowerCase();"!"===c?j(a):h(a,b);break;case 3:k(a,b);break;case 4:i(a);break;case 8:j(a);break;case 9:case 11:g(a);break;case 2:case 5:case 6:case 7:case 10:case 12:}},g=function(a){for(var b=a.firstChild;b;)f(b),b=b.nextSibling},h=function(e,g){var h,i,j,k=e.nodeName.toLowerCase(),n="iframe"===k,o=e.attributes.length,p=e.firstChild,r=g||/pre(?:\-wrap)?$/i.test(a(e).css("whiteSpace")),s=!e.firstChild&&!d.canHaveChildren(e)&&!n;if(!a(e).hasClass("sceditor-ignore")){for(l("<"+k,!g&&m(e));o--;)i=e.attributes[o],(!b.ie||i.specified||"input"===k&&"value"===i.name)&&(j=b.ie<8&&/style/i.test(i.name)?e.style.cssText:i.value,l(" "+i.name.toLowerCase()+'="'+c(j)+'"',!1));for(l(s?" />":">",!1),n||(h=p);h;)q++,f(h,r),h=h.nextSibling,q--;s||l("",!r&&!n&&m(e)&&p&&m(p))}},i=function(a){l("")},j=function(a){l("")},k=function(a,b){var d=a.nodeValue;b||(d=e(d)),d&&l(c(d),!b&&m(a))},l=function(a,b){var c=q;if(b!==!1)for(p.length&&p.push("\n");c--;)p.push(o.indentStr);p.push(a)},m=function(a){var b=a.previousSibling;return 1!==a.nodeType&&b?!d.isInline(b):b||d.isInline(a.parentNode)?!d.isInline(a):!0}},c.xhtml=function(){var f,g,h,i,j,k,l,m=this,n={},o={};m.init=function(){a.isEmptyObject(c.xhtml.converters||{})||a.each(c.xhtml.converters,function(b,c){a.each(c.tags,function(a){n[a]||(n[a]=[]),n[a].push(c)})}),this.commands=a.extend(!0,{},e,this.commands)},m.signalToSource=function(a,c){return c=c.jquery?c[0]:c,f(c),i(c),k(c),l(c),(new b.XHTMLSerializer).serialize(c,!0)},m.signalToWysiwyg=function(a){return a},m.convertTagTo=d.convertElement,g=function(c,d,e){n[c]&&a.each(n[c],function(f,g){g.tags[c]?a.each(g.tags[c],function(c,f){e.getAttributeNode&&(c=e.getAttributeNode(c),!c||b.ie<8&&!c.specified||f&&a.inArray(c.value,f)<0||g.conv.call(m,e,d))}):g.conv&&g.conv.call(m,e,d)})},f=function(b){d.traverse(b,function(b){var c=a(b),d=b.nodeName.toLowerCase();g("*",c,b),g(d,c,b)},!0)},h=function(a,b){var c=a.childNodes,e=a.nodeName.toLowerCase(),f=a.nodeValue,g=c.length;if(b&&"br"===e)return!0;if(!d.canHaveChildren(a))return!1;if(f&&/\S|\u00A0/.test(f))return!1;for(;g--;)if(!h(c[g],!a.previousSibling&&!a.nextSibling))return!1;return!0},i=function(b){d.traverse(b,function(b){var e,f=b.nodeName.toLowerCase(),g="iframe"!==f&&h(b),i=b.parentNode,j=b.nodeType,k=!d.isInline(b),l=b.previousSibling,m=b.nextSibling,n=b.ownerDocument,o=c.xhtml.allowedTags,p=c.xhtml.disallowedTags;if(3!==j&&(4===j?f="!cdata":("!"===f||8===j)&&(f="!comment"),g?e=!0:o&&o.length?e=a.inArray(f,o)<0:p&&p.length&&(e=a.inArray(f,p)>-1),e)){if(!g){for(k&&l&&d.isInline(l)&&i.insertBefore(n.createTextNode(" "),b);b.firstChild;)i.insertBefore(b.firstChild,m);k&&m&&d.isInline(m)&&i.insertBefore(n.createTextNode(" "),m)}i.removeChild(b)}},!0)},j=function(b,c){var d={};return b&&a.extend(d,b),c?(a.each(c,function(b,c){a.isArray(c)?d[b]=a.merge(d[b]||[],c):d[b]||(d[b]=null)}),d):d},l=function(b){var c=[],e=function(){c.length&&(a("

    ",b.ownerDocument).insertBefore(c[0]).append(c),c=[])};d.removeWhiteSpace(b);for(var f=b.firstChild;f;)d.isInline(f)&&!a(f).is(".sceditor-ignore")?c.push(f):e(),f=f.nextSibling;e()},k=function(b){var e,f,g,h,i,k,l=c.xhtml.allowedAttribs,m=l&&!a.isEmptyObject(l),n=c.xhtml.disallowedAttribs,p=n&&!a.isEmptyObject(n);o={},d.traverse(b,function(b){if(b.attributes&&(e=b.nodeName.toLowerCase(),h=b.attributes.length))for(o[e]||(o[e]=m?j(l["*"],l[e]):j(n["*"],n[e]));h--;)f=b.attributes[h],g=f.name,i=o[e][g],k=!1,m?k=null!==i&&(!a.isArray(i)||a.inArray(f.value,i)<0):p&&(k=null===i||a.isArray(i)&&a.inArray(f.value,i)>-1),k&&b.removeAttribute(g)})}},c.xhtml.converters=[{tags:{"*":{width:null}},conv:function(a,b){b.css("width",b.attr("width")).removeAttr("width")}},{tags:{"*":{height:null}},conv:function(a,b){b.css("height",b.attr("height")).removeAttr("height")}},{tags:{li:{value:null}},conv:function(a,c){b.ie<8?a.removeAttribute("value"):c.removeAttr("value")}},{tags:{"*":{text:null}},conv:function(a,b){b.css("color",b.attr("text")).removeAttr("text")}},{tags:{"*":{color:null}},conv:function(a,b){b.css("color",b.attr("color")).removeAttr("color")}},{tags:{"*":{face:null}},conv:function(a,b){b.css("fontFamily",b.attr("face")).removeAttr("face")}},{tags:{"*":{align:null}},conv:function(a,b){b.css("textAlign",b.attr("align")).removeAttr("align")}},{tags:{"*":{border:null}},conv:function(a,b){b.css("borderWidth",b.attr("border")).removeAttr("border")}},{tags:{applet:{name:null},img:{name:null},layer:{name:null},map:{name:null},object:{name:null},param:{name:null}},conv:function(a,b){b.attr("id")||b.attr("id",b.attr("name")),b.removeAttr("name")}},{tags:{"*":{vspace:null}},conv:function(a,b){b.css("marginTop",b.attr("vspace")-0).css("marginBottom",b.attr("vspace")-0).removeAttr("vspace")}},{tags:{"*":{hspace:null}},conv:function(a,b){b.css("marginLeft",b.attr("hspace")-0).css("marginRight",b.attr("hspace")-0).removeAttr("hspace")}},{tags:{hr:{noshade:null}},conv:function(a,b){b.css("borderStyle","solid").removeAttr("noshade")}},{tags:{"*":{nowrap:null}},conv:function(a,b){b.css("white-space","nowrap").removeAttr("nowrap")}},{tags:{big:null},conv:function(b){a(this.convertTagTo(b,"span")).css("fontSize","larger")}},{tags:{small:null},conv:function(b){a(this.convertTagTo(b,"span")).css("fontSize","smaller")}},{tags:{b:null},conv:function(b){a(this.convertTagTo(b,"strong"))}},{tags:{u:null},conv:function(b){a(this.convertTagTo(b,"span")).css("textDecoration","underline")}},{tags:{i:null},conv:function(b){a(this.convertTagTo(b,"em"))}},{tags:{s:null,strike:null},conv:function(b){a(this.convertTagTo(b,"span")).css("textDecoration","line-through")}},{tags:{dir:null},conv:function(a){this.convertTagTo(a,"ul")}},{tags:{center:null},conv:function(b){a(this.convertTagTo(b,"div")).css("textAlign","center")}},{tags:{font:{size:null}},conv:function(a,c){var d=c.css("fontSize"),e=d;"+0"!==e&&(b.ie<9&&(e=10,d>1&&(e=13),d>2&&(e=16),d>3&&(e=18),d>4&&(e=24),d>5&&(e=32),d>6&&(e=48)),c.css("fontSize",e)),c.removeAttr("size")}},{tags:{font:null},conv:function(a){this.convertTagTo(a,"span")}},{tags:{"*":{type:["_moz"]}},conv:function(a,b){b.removeAttr("type")}},{tags:{"*":{_moz_dirty:null}},conv:function(a,b){b.removeAttr("_moz_dirty")}},{tags:{"*":{_moz_editor_bogus_node:null}},conv:function(a,b){b.remove()}}],c.xhtml.allowedAttribs={},c.xhtml.disallowedAttribs={},c.xhtml.allowedTags=[],c.xhtml.disallowedTags=[]}(jQuery); \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.buttons.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.buttons.css deleted file mode 100644 index 1d12561..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.buttons.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #111; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.default.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.default.css deleted file mode 100644 index 1d12561..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.default.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #111; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.modern.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.modern.css deleted file mode 100644 index 1d12561..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.modern.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #111; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.monocons.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.monocons.css deleted file mode 100644 index 1d12561..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.monocons.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #111; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.mybb.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.mybb.css deleted file mode 100644 index 01fe3df..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.mybb.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #333; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office-toolbar.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office-toolbar.css deleted file mode 100644 index 1d12561..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office-toolbar.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #111; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office.css deleted file mode 100644 index 1d12561..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.office.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #111; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.square.css b/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.square.css deleted file mode 100644 index 1d12561..0000000 --- a/html/forums/jscripts/sceditor/textarea_styles/jquery.sceditor.square.css +++ /dev/null @@ -1,143 +0,0 @@ -/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ -html, body, p, code:before, table { - margin: 0; - padding: 0; - font-family: Tahoma, Verdana, Arial, Sans-Serif; - font-size: 14px; - color: #111; -} - -html { - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - height: 100%; - - /* Needed for iOS scrolling bug fix */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -body { - /* Needed for iOS scrolling bug fix */ - position: relative; - overflow: auto; - - /* Needed so the cursor will be placed at the end of the content - when the there isn't enought content to fill the full viewport */ - min-height: 100%; - word-wrap: break-word; -} - -table, td { - border: 1px dotted #000; - - /* Show empty cells so they can be edited */ - empty-cells: show; -} - -code:before { - font-weight: bold; - content: 'Code:'; - display: block; - border-bottom: 1px solid #ccc; - padding: 4px 0 3px 0; - margin-bottom: 10px; -} - -code.phpcodeblock:before { - content: 'PHP Code:' !important; -} - -code { - font-family: Monaco, Consolas, Courier, monospace; - font-size: 13px !important; - padding: 10px; - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - white-space: pre; - display: block; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -.ie6 code, .ie7 code { - margin-top: 0; -} - -code:before, code { - display: block; - text-align: left; -} - -blockquote { - position: relative; - background: white; - margin: .25em .05em 0 0; - border: 1px solid #ccc; - padding: 10px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; -} - -blockquote cite { - font-weight: bold; - font-style: normal; - display: block; - font-size: 1em; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding-bottom: 3px; -} - -/* prevent divs from being collapsed */ -div { - min-height: 1.25em; -} - -h1, h2, h3, h4, h5, h6 { - padding: 0; - margin: 0; -} - -ul, ol { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} - -img { - max-width: 100%; -} - -font[size="1"] { - font-size: xx-small; -} - -font[size="2"] { - font-size: x-small; -} - -font[size="3"] { - font-size: small; -} - -font[size="4"] { - font-size: medium; -} - -font[size="5"] { - font-size: large; -} - -font[size="6"] { - font-size: x-large; -} - -font[size="7"] { - font-size: xx-large; -} \ No newline at end of file diff --git a/html/forums/jscripts/select2/select2-spinner.gif b/html/forums/jscripts/select2/select2-spinner.gif deleted file mode 100644 index 5b33f7e54f4e55b6b8774d86d96895db9af044b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 zcma*odr(tX9tZI2z31lM+(&YVk%mZ}5P~KlG2s=WSbGzm0!x7^P##Mnh7t-jP!X0Q zk_SQ}Po-L1tlDK;6l?(>v)e5ZBQx4|Y-Q?nr@Px3?9h(3ZWr3^tj=`TP57gKr87N$ zp2wWee1GRRCwo_xahnw)5cxNPJbCg2L6DV|6`#+yw6v6!mDS$f9-JvFD^n;GQ&UrZ zzh5jCkByB101O60U0q#p_1BM>Cv-vP?&s4@g_((4_1L=L$(a91)0=J91Gas#R{McE znYG^9*0A5YZ>#;~+Wkn(W5B0^yELIYLP!K}mB~<)AM@1&nqekynuaEGqPrzoH|KodRXJy)%+w_fu3nE5>@Bd_b zqC$EQ;{c`T&?EsNO|igL9gC7Ygxv?aQUEXMq?~>wg{EyW;VcJ37CUF#HjrT=KQO_* zS>M9yydXk18D(+QDJ1>r);Lav_uYKp$T?4vr{Q$lTo&pKv^?(>L-)G2*lwH!Ah7k? z7oH<8h-(KTKt5V6$8gF)C7Io&P5=SjTh)=zV=E2EUhQZP##L8S{d%UK>>+y82>+FV+#^BzW7u3F)Bb>=lYQ%%j`F>ASe zo*cw@V#u6T`A2He;70mR(V&iV&-7{qP~=SRf&jm9-T{*ZeZ}$rd0#6c&fLG^xJcf5 z+p<`wJYgW+_s*V{uI$nMB;%8`S_3>PfGOj3Rq}@Cx^+j?rk92fANSFDBYnOqQ>Vdj z)(|$AhP4t&Lb=Gvo2#3Gl%9<=Gv`Mz?Po@P4iLF!x}GUWJICDlFk-hS^Whyh7x~VH z@0vD1>HYD4&e+~yzS*-sFR{9`{QEEZO1zg7>R&7cHts-6j!xHVdA8eI+ZlVzd%`es zJT@$#GX(gvCJ1oJN%yLBK}{V=V;seo;!w|Yte!W1%5qLNFWqvZW>h&IiH+oPT=b@E zPhGzv5=(Un*X>v`>%8h_nj^NdYcE6NHS_ifkCV$*D)Tqrbu`s;<=t<4 zAHNqNV?6(g<1PY-w@#I-WYFViz?9TrkMr)u0g`O`u|>T;k|2sV*YF^punvT;$SuTy{j3Gv)yqD!R_CF>yR)MzmmYS5v+~R zXAdD%ng9?df;wd8GxR#%3O+gz};Vo;)sK%Bj-q>Oq%R7JU-KD?vYu>#2UjaDo z&8$>5xW~?KPD_#XFToU1hIb*VOMidUr6iYiO0N|i-7s`T8!cFT`rN!^1Pt78J93i6 z5HI1wIM$94m{3SLDvISDe6$ZG1;eq_D9RTaaC>=cO{@Bs>$IlPCPJJ$h$)-3vzNUQ6OsN#_zWxey!_9%hxwH2_dEJi=yY|1c7nDm2_Lm!Cof8-R_+9UkS zcBE(o47yE)oMR(Q=dp1a2wTX5KvvGyLqlWTa7V&!A*|w|)ax~1_~aJ0=_Lilg*0iQk7#ZD EAHN$8j{pDw diff --git a/html/forums/jscripts/select2/select2.css b/html/forums/jscripts/select2/select2.css deleted file mode 100644 index f851510..0000000 --- a/html/forums/jscripts/select2/select2.css +++ /dev/null @@ -1,696 +0,0 @@ -/* -Version: 3.5.3 Timestamp: Wed Aug 19 21:55:46 EDT 2015 -*/ -.select2-container { - margin: 0; - position: relative; - display: inline-block; - vertical-align: middle; -} - -.select2-container, -.select2-drop, -.select2-search, -.select2-search input { - /* - Force border-box so that % widths fit the parent - container without overlap because of margin/padding. - More Info : http://www.quirksmode.org/css/box.html - */ - -webkit-box-sizing: border-box; /* webkit */ - -moz-box-sizing: border-box; /* firefox */ - box-sizing: border-box; /* css3 */ -} - -.select2-container .select2-choice { - display: block; - height: 26px; - padding: 0 0 0 8px; - overflow: hidden; - position: relative; - - border: 1px solid #aaa; - white-space: nowrap; - line-height: 26px; - color: #444; - text-decoration: none; - - border-radius: 4px; - - background-clip: padding-box; - - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - background-color: #fff; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); - background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); - background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); - background-image: linear-gradient(to top, #eee 0%, #fff 50%); -} - -html[dir="rtl"] .select2-container .select2-choice { - padding: 0 8px 0 0; -} - -.select2-container.select2-drop-above .select2-choice { - border-bottom-color: #aaa; - - border-radius: 0 0 4px 4px; - - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff)); - background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%); - background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0); - background-image: linear-gradient(to bottom, #eee 0%, #fff 90%); -} - -.select2-container.select2-allowclear .select2-choice .select2-chosen { - margin-right: 42px; -} - -.select2-container .select2-choice > .select2-chosen { - margin-right: 26px; - display: block; - overflow: hidden; - - white-space: nowrap; - - text-overflow: ellipsis; - float: none; - width: auto; - - /* MyBB modification start - Search container min-width */ - min-width: 120px; - /* MyBB modification end */ -} - -html[dir="rtl"] .select2-container .select2-choice > .select2-chosen { - margin-left: 26px; - margin-right: 0; -} - -.select2-container .select2-choice abbr { - display: none; - width: 12px; - height: 12px; - position: absolute; - right: 24px; - top: 8px; - - font-size: 1px; - text-decoration: none; - - border: 0; - background: url('select2.png') right top no-repeat; - cursor: pointer; - outline: 0; -} - -.select2-container.select2-allowclear .select2-choice abbr { - display: inline-block; -} - -.select2-container .select2-choice abbr:hover { - background-position: right -11px; - cursor: pointer; -} - -.select2-drop-mask { - border: 0; - margin: 0; - padding: 0; - position: fixed; - left: 0; - top: 0; - min-height: 100%; - min-width: 100%; - height: auto; - width: auto; - opacity: 0; - z-index: 9998; - /* styles required for IE to work */ - background-color: #fff; - filter: alpha(opacity=0); -} - -.select2-drop { - width: 100%; - margin-top: -1px; - position: absolute; - z-index: 9999; - top: 100%; - - background: #fff; - color: #000; - border: 1px solid #aaa; - border-top: 0; - - border-radius: 0 0 4px 4px; - - -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); - box-shadow: 0 4px 5px rgba(0, 0, 0, .15); -} - -.select2-drop.select2-drop-above { - margin-top: 1px; - border-top: 1px solid #aaa; - border-bottom: 0; - - border-radius: 4px 4px 0 0; - - -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); - box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); -} - -.select2-drop-active { - border: 1px solid #5897fb; - border-top: none; -} - -.select2-drop.select2-drop-above.select2-drop-active { - border-top: 1px solid #5897fb; -} - -.select2-drop-auto-width { - border-top: 1px solid #aaa; - width: auto; -} - -.select2-container .select2-choice .select2-arrow { - display: inline-block; - width: 18px; - height: 100%; - position: absolute; - right: 0; - top: 0; - - border-left: 1px solid #aaa; - border-radius: 0 4px 4px 0; - - background-clip: padding-box; - - background: #ccc; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); - background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); - background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0); - background-image: linear-gradient(to top, #ccc 0%, #eee 60%); -} - -html[dir="rtl"] .select2-container .select2-choice .select2-arrow { - left: 0; - right: auto; - - border-left: none; - border-right: 1px solid #aaa; - border-radius: 4px 0 0 4px; -} - -.select2-container .select2-choice .select2-arrow b { - display: block; - width: 100%; - height: 100%; - background: url('select2.png') no-repeat 0 1px; -} - -html[dir="rtl"] .select2-container .select2-choice .select2-arrow b { - background-position: 2px 1px; -} - -.select2-search { - display: inline-block; - width: 100%; - min-height: 26px; - margin: 0; - padding: 4px 4px 0 4px; - - position: relative; - z-index: 10000; - - white-space: nowrap; -} - -.select2-search input { - width: 100%; - height: auto !important; - min-height: 26px; - padding: 4px 20px 4px 5px; - margin: 0; - - outline: 0; - font-family: sans-serif; - font-size: 1em; - - border: 1px solid #aaa; - border-radius: 0; - - -webkit-box-shadow: none; - box-shadow: none; - - background: #fff url('select2.png') no-repeat 100% -22px; - background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); - background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; -} - -html[dir="rtl"] .select2-search input { - padding: 4px 5px 4px 20px; - - background: #fff url('select2.png') no-repeat -37px -22px; - background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); - background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; -} - -.select2-search input.select2-active { - background: #fff url('select2-spinner.gif') no-repeat 100%; - background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); - background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; -} - -.select2-container-active .select2-choice, -.select2-container-active .select2-choices { - border: 1px solid #5897fb; - outline: none; - - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); - box-shadow: 0 0 5px rgba(0, 0, 0, .3); -} - -.select2-dropdown-open .select2-choice { - border-bottom-color: transparent; - -webkit-box-shadow: 0 1px 0 #fff inset; - box-shadow: 0 1px 0 #fff inset; - - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - - background-color: #eee; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee)); - background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%); - background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); - background-image: linear-gradient(to top, #fff 0%, #eee 50%); -} - -.select2-dropdown-open.select2-drop-above .select2-choice, -.select2-dropdown-open.select2-drop-above .select2-choices { - border: 1px solid #5897fb; - border-top-color: transparent; - - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee)); - background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%); - background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); - background-image: linear-gradient(to bottom, #fff 0%, #eee 50%); -} - -.select2-dropdown-open .select2-choice .select2-arrow { - background: transparent; - border-left: none; - filter: none; -} -html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow { - border-right: none; -} - -.select2-dropdown-open .select2-choice .select2-arrow b { - background-position: -18px 1px; -} - -html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b { - background-position: -16px 1px; -} - -.select2-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -/* results */ -.select2-results { - max-height: 200px; - padding: 0 0 0 4px; - margin: 4px 4px 4px 0; - position: relative; - overflow-x: hidden; - overflow-y: auto; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -html[dir="rtl"] .select2-results { - padding: 0 4px 0 0; - margin: 4px 0 4px 4px; -} - -.select2-results ul.select2-result-sub { - margin: 0; - padding-left: 0; -} - -.select2-results li { - list-style: none; - display: list-item; - background-image: none; -} - -.select2-results li.select2-result-with-children > .select2-result-label { - font-weight: bold; -} - -.select2-results .select2-result-label { - padding: 3px 7px 4px; - margin: 0; - cursor: pointer; - - min-height: 1em; - - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.select2-results-dept-1 .select2-result-label { padding-left: 20px } -.select2-results-dept-2 .select2-result-label { padding-left: 40px } -.select2-results-dept-3 .select2-result-label { padding-left: 60px } -.select2-results-dept-4 .select2-result-label { padding-left: 80px } -.select2-results-dept-5 .select2-result-label { padding-left: 100px } -.select2-results-dept-6 .select2-result-label { padding-left: 110px } -.select2-results-dept-7 .select2-result-label { padding-left: 120px } - -.select2-results .select2-highlighted { - background: #3875d7; - color: #fff; -} - -.select2-results li em { - background: #feffde; - font-style: normal; -} - -.select2-results .select2-highlighted em { - background: transparent; -} - -.select2-results .select2-highlighted ul { - background: #fff; - color: #000; -} - -.select2-results .select2-no-results, -.select2-results .select2-searching, -.select2-results .select2-ajax-error, -.select2-results .select2-selection-limit { - background: #f4f4f4; - display: list-item; - padding-left: 5px; -} - -/* -disabled look for disabled choices in the results dropdown -*/ -.select2-results .select2-disabled.select2-highlighted { - color: #666; - background: #f4f4f4; - display: list-item; - cursor: default; -} -.select2-results .select2-disabled { - background: #f4f4f4; - display: list-item; - cursor: default; -} - -.select2-results .select2-selected { - display: none; -} - -.select2-more-results.select2-active { - background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%; -} - -.select2-results .select2-ajax-error { - background: rgba(255, 50, 50, .2); -} - -.select2-more-results { - background: #f4f4f4; - display: list-item; -} - -/* disabled styles */ - -.select2-container.select2-container-disabled .select2-choice { - background-color: #f4f4f4; - background-image: none; - border: 1px solid #ddd; - cursor: default; -} - -.select2-container.select2-container-disabled .select2-choice .select2-arrow { - background-color: #f4f4f4; - background-image: none; - border-left: 0; -} - -.select2-container.select2-container-disabled .select2-choice abbr { - display: none; -} - - -/* multiselect */ - -.select2-container-multi .select2-choices { - height: auto !important; - height: 1%; - margin: 0; - padding: 0 5px 0 0; - position: relative; - - border: 1px solid #aaa; - cursor: text; - overflow: hidden; - - background-color: #fff; - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); - background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%); - background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%); - background-image: linear-gradient(to bottom, #eee 1%, #fff 15%); -} - -html[dir="rtl"] .select2-container-multi .select2-choices { - padding: 0 0 0 5px; -} - -.select2-locked { - padding: 3px 5px 3px 5px !important; -} - -.select2-container-multi .select2-choices { - min-height: 26px; -} - -.select2-container-multi.select2-container-active .select2-choices { - border: 1px solid #5897fb; - outline: none; - - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); - box-shadow: 0 0 5px rgba(0, 0, 0, .3); -} -.select2-container-multi .select2-choices li { - float: left; - list-style: none; -} -html[dir="rtl"] .select2-container-multi .select2-choices li -{ - float: right; -} -.select2-container-multi .select2-choices .select2-search-field { - margin: 0; - padding: 0; - white-space: nowrap; -} - -.select2-container-multi .select2-choices .select2-search-field input { - padding: 5px; - margin: 1px 0; - - font-family: sans-serif; - font-size: 100%; - color: #666; - outline: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - background: transparent !important; -} - -.select2-container-multi .select2-choices .select2-search-field input.select2-active { - background: #fff url('select2-spinner.gif') no-repeat 100% !important; -} - -.select2-default { - color: #999 !important; -} - -.select2-container-multi .select2-choices .select2-search-choice { - padding: 3px 5px 3px 18px; - margin: 3px 0 3px 5px; - position: relative; - - line-height: 13px; - color: #333; - cursor: default; - border: 1px solid #aaaaaa; - - border-radius: 3px; - - -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); - box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); - - background-clip: padding-box; - - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - background-color: #e4e4e4; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); - background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); - background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); - background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); -} -html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice -{ - margin: 3px 5px 3px 0; - padding: 3px 18px 3px 5px; -} -.select2-container-multi .select2-choices .select2-search-choice .select2-chosen { - cursor: default; -} -.select2-container-multi .select2-choices .select2-search-choice-focus { - background: #d4d4d4; -} - -.select2-search-choice-close { - display: block; - width: 12px; - height: 13px; - position: absolute; - right: 3px; - top: 4px; - - font-size: 1px; - outline: none; - background: url('select2.png') right top no-repeat; -} -html[dir="rtl"] .select2-search-choice-close { - right: auto; - left: 3px; -} - -.select2-container-multi .select2-search-choice-close { - left: 3px; -} - -html[dir="rtl"] .select2-container-multi .select2-search-choice-close { - left: auto; - right: 2px; -} - -.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover { - background-position: right -11px; -} -.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close { - background-position: right -11px; -} - -/* disabled styles */ -.select2-container-multi.select2-container-disabled .select2-choices { - background-color: #f4f4f4; - background-image: none; - border: 1px solid #ddd; - cursor: default; -} - -.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { - padding: 3px 5px 3px 5px; - border: 1px solid #ddd; - background-image: none; - background-color: #f4f4f4; -} - -.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none; - background: none; -} -/* end multiselect */ - - -.select2-result-selectable .select2-match, -.select2-result-unselectable .select2-match { - text-decoration: underline; -} - -.select2-offscreen, .select2-offscreen:focus { - clip: rect(0 0 0 0) !important; - width: 1px !important; - height: 1px !important; - border: 0 !important; - margin: 0 !important; - padding: 0 !important; - overflow: hidden !important; - position: absolute !important; - outline: 0 !important; - left: 0px !important; - top: 0px !important; -} - -.select2-display-none { - display: none; -} - -.select2-measure-scrollbar { - position: absolute; - top: -10000px; - left: -10000px; - width: 100px; - height: 100px; - overflow: scroll; -} - -/* Retina-ize icons */ - -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) { - .select2-search input, - .select2-search-choice-close, - .select2-container .select2-choice abbr, - .select2-container .select2-choice .select2-arrow b { - background-image: url('select2x2.png') !important; - background-repeat: no-repeat !important; - background-size: 60px 40px !important; - } - - .select2-search input { - background-position: 100% -21px !important; - } -} diff --git a/html/forums/jscripts/select2/select2.min.js b/html/forums/jscripts/select2/select2.min.js deleted file mode 100644 index 22fe4c6..0000000 --- a/html/forums/jscripts/select2/select2.min.js +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 2014 Igor Vaynberg - -Version: 3.5.3 Timestamp: Wed Aug 19 21:55:46 EDT 2015 - -This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU -General Public License version 2 (the "GPL License"). You may choose either license to govern your -use of this software only upon the condition that you accept all of the terms of either the Apache -License or the GPL License. - -You may obtain a copy of the Apache License and the GPL License at: - -http://www.apache.org/licenses/LICENSE-2.0 -http://www.gnu.org/licenses/gpl-2.0.html - -Unless required by applicable law or agreed to in writing, software distributed under the Apache License -or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -either express or implied. See the Apache License and the GPL License for the specific language governing -permissions and limitations under the Apache License and the GPL License. -*/ -!function(a){"undefined"==typeof a.fn.each2&&a.extend(a.fn,{each2:function(b){for(var c=a([0]),d=-1,e=this.length;++dc;c+=1)if(r(a,b[c]))return c;return-1}function q(){var b=a(l);b.appendTo(document.body);var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function r(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function s(a,b,c){var d,e,f;if(null===a||a.length<1)return[];for(d=a.split(b),e=0,f=d.length;f>e;e+=1)d[e]=c(d[e]);return d}function t(a){return a.outerWidth(!1)-a.width()}function u(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function v(c){c.on("mousemove",function(c){var d=h;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function w(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function x(a,b){var c=w(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){p(a.target,b.get())>=0&&c(a)})}function y(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus();var e=b.offsetWidth>0||b.offsetHeight>0;e&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function z(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function A(a){a.preventDefault(),a.stopPropagation()}function B(a){a.preventDefault(),a.stopImmediatePropagation()}function C(b){if(!g){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);g=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),g.attr("class","select2-sizer"),a(document.body).append(g)}return g.text(b.val()),g.width()}function D(b,c,d){var e,g,f=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0===this.indexOf("select2-")&&f.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0!==this.indexOf("select2-")&&(g=d(this),g&&f.push(g))})),b.attr("class",f.join(" "))}function E(a,b,c,d){var e=o(a.toUpperCase()).indexOf(o(b.toUpperCase())),f=b.length;return 0>e?(c.push(d(a)),void 0):(c.push(d(a.substring(0,e))),c.push(""),c.push(d(a.substring(e,e+f))),c.push(""),c.push(d(a.substring(e+f,a.length))),void 0)}function F(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})}function G(c){var d,e=null,f=c.quietMillis||100,g=c.url,h=this;return function(i){window.clearTimeout(d),d=window.setTimeout(function(){var d=c.data,f=g,j=c.transport||a.fn.select2.ajaxDefaults.transport,k={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},l=a.extend({},a.fn.select2.ajaxDefaults.params,k);d=d?d.call(h,i.term,i.page,i.context):null,f="function"==typeof f?f.call(h,i.term,i.page,i.context):f,e&&"function"==typeof e.abort&&e.abort(),c.params&&(a.isFunction(c.params)?a.extend(l,c.params.call(h)):a.extend(l,c.params)),a.extend(l,{url:f,dataType:c.dataType,data:d,success:function(a){var b=c.results(a,i.page,i);i.callback(b)},error:function(a,b,c){var d={hasError:!0,jqXHR:a,textStatus:b,errorThrown:c};i.callback(d)}}),e=j.call(h,l)},f)}}function H(b){var d,e,c=b,f=function(a){return""+a.text};a.isArray(c)&&(e=c,c={results:e}),a.isFunction(c)===!1&&(e=c,c=function(){return e});var g=c();return g.text&&(f=g.text,a.isFunction(f)||(d=g.text,f=function(a){return a[d]})),function(b){var g,d=b.term,e={results:[]};return""===d?(b.callback(c()),void 0):(g=function(c,e){var h,i;if(c=c[0],c.children){h={};for(i in c)c.hasOwnProperty(i)&&(h[i]=c[i]);h.children=[],a(c.children).each2(function(a,b){g(b,h.children)}),(h.children.length||b.matcher(d,f(h),c))&&e.push(h)}else b.matcher(d,f(c),c)&&e.push(c)},a(c().results).each2(function(a,b){g(b,e.results)}),b.callback(e),void 0)}}function I(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]},h=d?c(e):c;a.isArray(h)&&(a(h).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g))}}function J(b,c){if(a.isFunction(b))return!0;if(!b)return!1;if("string"==typeof b)return!0;throw new Error(c+" must be a string, function, or falsy value")}function K(b,c){if(a.isFunction(b)){var d=Array.prototype.slice.call(arguments,2);return b.apply(c,d)}return b}function L(b){var c=0;return a.each(b,function(a,b){b.children?c+=L(b.children):c++}),c}function M(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||e.tokenSeparators.length<1)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice.call(this,h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(r(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:void 0}function N(){var b=this;a.each(arguments,function(a,c){b[c].remove(),b[c]=null})}function O(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select2===b){var c,d,e,f,g,i,j,h={x:0,y:0},k={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case k.LEFT:case k.RIGHT:case k.UP:case k.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case k.SHIFT:case k.CTRL:case k.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="

    ",m={"\u24b6":"A","\uff21":"A","\xc0":"A","\xc1":"A","\xc2":"A","\u1ea6":"A","\u1ea4":"A","\u1eaa":"A","\u1ea8":"A","\xc3":"A","\u0100":"A","\u0102":"A","\u1eb0":"A","\u1eae":"A","\u1eb4":"A","\u1eb2":"A","\u0226":"A","\u01e0":"A","\xc4":"A","\u01de":"A","\u1ea2":"A","\xc5":"A","\u01fa":"A","\u01cd":"A","\u0200":"A","\u0202":"A","\u1ea0":"A","\u1eac":"A","\u1eb6":"A","\u1e00":"A","\u0104":"A","\u023a":"A","\u2c6f":"A","\ua732":"AA","\xc6":"AE","\u01fc":"AE","\u01e2":"AE","\ua734":"AO","\ua736":"AU","\ua738":"AV","\ua73a":"AV","\ua73c":"AY","\u24b7":"B","\uff22":"B","\u1e02":"B","\u1e04":"B","\u1e06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24b8":"C","\uff23":"C","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\xc7":"C","\u1e08":"C","\u0187":"C","\u023b":"C","\ua73e":"C","\u24b9":"D","\uff24":"D","\u1e0a":"D","\u010e":"D","\u1e0c":"D","\u1e10":"D","\u1e12":"D","\u1e0e":"D","\u0110":"D","\u018b":"D","\u018a":"D","\u0189":"D","\ua779":"D","\u01f1":"DZ","\u01c4":"DZ","\u01f2":"Dz","\u01c5":"Dz","\u24ba":"E","\uff25":"E","\xc8":"E","\xc9":"E","\xca":"E","\u1ec0":"E","\u1ebe":"E","\u1ec4":"E","\u1ec2":"E","\u1ebc":"E","\u0112":"E","\u1e14":"E","\u1e16":"E","\u0114":"E","\u0116":"E","\xcb":"E","\u1eba":"E","\u011a":"E","\u0204":"E","\u0206":"E","\u1eb8":"E","\u1ec6":"E","\u0228":"E","\u1e1c":"E","\u0118":"E","\u1e18":"E","\u1e1a":"E","\u0190":"E","\u018e":"E","\u24bb":"F","\uff26":"F","\u1e1e":"F","\u0191":"F","\ua77b":"F","\u24bc":"G","\uff27":"G","\u01f4":"G","\u011c":"G","\u1e20":"G","\u011e":"G","\u0120":"G","\u01e6":"G","\u0122":"G","\u01e4":"G","\u0193":"G","\ua7a0":"G","\ua77d":"G","\ua77e":"G","\u24bd":"H","\uff28":"H","\u0124":"H","\u1e22":"H","\u1e26":"H","\u021e":"H","\u1e24":"H","\u1e28":"H","\u1e2a":"H","\u0126":"H","\u2c67":"H","\u2c75":"H","\ua78d":"H","\u24be":"I","\uff29":"I","\xcc":"I","\xcd":"I","\xce":"I","\u0128":"I","\u012a":"I","\u012c":"I","\u0130":"I","\xcf":"I","\u1e2e":"I","\u1ec8":"I","\u01cf":"I","\u0208":"I","\u020a":"I","\u1eca":"I","\u012e":"I","\u1e2c":"I","\u0197":"I","\u24bf":"J","\uff2a":"J","\u0134":"J","\u0248":"J","\u24c0":"K","\uff2b":"K","\u1e30":"K","\u01e8":"K","\u1e32":"K","\u0136":"K","\u1e34":"K","\u0198":"K","\u2c69":"K","\ua740":"K","\ua742":"K","\ua744":"K","\ua7a2":"K","\u24c1":"L","\uff2c":"L","\u013f":"L","\u0139":"L","\u013d":"L","\u1e36":"L","\u1e38":"L","\u013b":"L","\u1e3c":"L","\u1e3a":"L","\u0141":"L","\u023d":"L","\u2c62":"L","\u2c60":"L","\ua748":"L","\ua746":"L","\ua780":"L","\u01c7":"LJ","\u01c8":"Lj","\u24c2":"M","\uff2d":"M","\u1e3e":"M","\u1e40":"M","\u1e42":"M","\u2c6e":"M","\u019c":"M","\u24c3":"N","\uff2e":"N","\u01f8":"N","\u0143":"N","\xd1":"N","\u1e44":"N","\u0147":"N","\u1e46":"N","\u0145":"N","\u1e4a":"N","\u1e48":"N","\u0220":"N","\u019d":"N","\ua790":"N","\ua7a4":"N","\u01ca":"NJ","\u01cb":"Nj","\u24c4":"O","\uff2f":"O","\xd2":"O","\xd3":"O","\xd4":"O","\u1ed2":"O","\u1ed0":"O","\u1ed6":"O","\u1ed4":"O","\xd5":"O","\u1e4c":"O","\u022c":"O","\u1e4e":"O","\u014c":"O","\u1e50":"O","\u1e52":"O","\u014e":"O","\u022e":"O","\u0230":"O","\xd6":"O","\u022a":"O","\u1ece":"O","\u0150":"O","\u01d1":"O","\u020c":"O","\u020e":"O","\u01a0":"O","\u1edc":"O","\u1eda":"O","\u1ee0":"O","\u1ede":"O","\u1ee2":"O","\u1ecc":"O","\u1ed8":"O","\u01ea":"O","\u01ec":"O","\xd8":"O","\u01fe":"O","\u0186":"O","\u019f":"O","\ua74a":"O","\ua74c":"O","\u01a2":"OI","\ua74e":"OO","\u0222":"OU","\u24c5":"P","\uff30":"P","\u1e54":"P","\u1e56":"P","\u01a4":"P","\u2c63":"P","\ua750":"P","\ua752":"P","\ua754":"P","\u24c6":"Q","\uff31":"Q","\ua756":"Q","\ua758":"Q","\u024a":"Q","\u24c7":"R","\uff32":"R","\u0154":"R","\u1e58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1e5a":"R","\u1e5c":"R","\u0156":"R","\u1e5e":"R","\u024c":"R","\u2c64":"R","\ua75a":"R","\ua7a6":"R","\ua782":"R","\u24c8":"S","\uff33":"S","\u1e9e":"S","\u015a":"S","\u1e64":"S","\u015c":"S","\u1e60":"S","\u0160":"S","\u1e66":"S","\u1e62":"S","\u1e68":"S","\u0218":"S","\u015e":"S","\u2c7e":"S","\ua7a8":"S","\ua784":"S","\u24c9":"T","\uff34":"T","\u1e6a":"T","\u0164":"T","\u1e6c":"T","\u021a":"T","\u0162":"T","\u1e70":"T","\u1e6e":"T","\u0166":"T","\u01ac":"T","\u01ae":"T","\u023e":"T","\ua786":"T","\ua728":"TZ","\u24ca":"U","\uff35":"U","\xd9":"U","\xda":"U","\xdb":"U","\u0168":"U","\u1e78":"U","\u016a":"U","\u1e7a":"U","\u016c":"U","\xdc":"U","\u01db":"U","\u01d7":"U","\u01d5":"U","\u01d9":"U","\u1ee6":"U","\u016e":"U","\u0170":"U","\u01d3":"U","\u0214":"U","\u0216":"U","\u01af":"U","\u1eea":"U","\u1ee8":"U","\u1eee":"U","\u1eec":"U","\u1ef0":"U","\u1ee4":"U","\u1e72":"U","\u0172":"U","\u1e76":"U","\u1e74":"U","\u0244":"U","\u24cb":"V","\uff36":"V","\u1e7c":"V","\u1e7e":"V","\u01b2":"V","\ua75e":"V","\u0245":"V","\ua760":"VY","\u24cc":"W","\uff37":"W","\u1e80":"W","\u1e82":"W","\u0174":"W","\u1e86":"W","\u1e84":"W","\u1e88":"W","\u2c72":"W","\u24cd":"X","\uff38":"X","\u1e8a":"X","\u1e8c":"X","\u24ce":"Y","\uff39":"Y","\u1ef2":"Y","\xdd":"Y","\u0176":"Y","\u1ef8":"Y","\u0232":"Y","\u1e8e":"Y","\u0178":"Y","\u1ef6":"Y","\u1ef4":"Y","\u01b3":"Y","\u024e":"Y","\u1efe":"Y","\u24cf":"Z","\uff3a":"Z","\u0179":"Z","\u1e90":"Z","\u017b":"Z","\u017d":"Z","\u1e92":"Z","\u1e94":"Z","\u01b5":"Z","\u0224":"Z","\u2c7f":"Z","\u2c6b":"Z","\ua762":"Z","\u24d0":"a","\uff41":"a","\u1e9a":"a","\xe0":"a","\xe1":"a","\xe2":"a","\u1ea7":"a","\u1ea5":"a","\u1eab":"a","\u1ea9":"a","\xe3":"a","\u0101":"a","\u0103":"a","\u1eb1":"a","\u1eaf":"a","\u1eb5":"a","\u1eb3":"a","\u0227":"a","\u01e1":"a","\xe4":"a","\u01df":"a","\u1ea3":"a","\xe5":"a","\u01fb":"a","\u01ce":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1ead":"a","\u1eb7":"a","\u1e01":"a","\u0105":"a","\u2c65":"a","\u0250":"a","\ua733":"aa","\xe6":"ae","\u01fd":"ae","\u01e3":"ae","\ua735":"ao","\ua737":"au","\ua739":"av","\ua73b":"av","\ua73d":"ay","\u24d1":"b","\uff42":"b","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24d2":"c","\uff43":"c","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\xe7":"c","\u1e09":"c","\u0188":"c","\u023c":"c","\ua73f":"c","\u2184":"c","\u24d3":"d","\uff44":"d","\u1e0b":"d","\u010f":"d","\u1e0d":"d","\u1e11":"d","\u1e13":"d","\u1e0f":"d","\u0111":"d","\u018c":"d","\u0256":"d","\u0257":"d","\ua77a":"d","\u01f3":"dz","\u01c6":"dz","\u24d4":"e","\uff45":"e","\xe8":"e","\xe9":"e","\xea":"e","\u1ec1":"e","\u1ebf":"e","\u1ec5":"e","\u1ec3":"e","\u1ebd":"e","\u0113":"e","\u1e15":"e","\u1e17":"e","\u0115":"e","\u0117":"e","\xeb":"e","\u1ebb":"e","\u011b":"e","\u0205":"e","\u0207":"e","\u1eb9":"e","\u1ec7":"e","\u0229":"e","\u1e1d":"e","\u0119":"e","\u1e19":"e","\u1e1b":"e","\u0247":"e","\u025b":"e","\u01dd":"e","\u24d5":"f","\uff46":"f","\u1e1f":"f","\u0192":"f","\ua77c":"f","\u24d6":"g","\uff47":"g","\u01f5":"g","\u011d":"g","\u1e21":"g","\u011f":"g","\u0121":"g","\u01e7":"g","\u0123":"g","\u01e5":"g","\u0260":"g","\ua7a1":"g","\u1d79":"g","\ua77f":"g","\u24d7":"h","\uff48":"h","\u0125":"h","\u1e23":"h","\u1e27":"h","\u021f":"h","\u1e25":"h","\u1e29":"h","\u1e2b":"h","\u1e96":"h","\u0127":"h","\u2c68":"h","\u2c76":"h","\u0265":"h","\u0195":"hv","\u24d8":"i","\uff49":"i","\xec":"i","\xed":"i","\xee":"i","\u0129":"i","\u012b":"i","\u012d":"i","\xef":"i","\u1e2f":"i","\u1ec9":"i","\u01d0":"i","\u0209":"i","\u020b":"i","\u1ecb":"i","\u012f":"i","\u1e2d":"i","\u0268":"i","\u0131":"i","\u24d9":"j","\uff4a":"j","\u0135":"j","\u01f0":"j","\u0249":"j","\u24da":"k","\uff4b":"k","\u1e31":"k","\u01e9":"k","\u1e33":"k","\u0137":"k","\u1e35":"k","\u0199":"k","\u2c6a":"k","\ua741":"k","\ua743":"k","\ua745":"k","\ua7a3":"k","\u24db":"l","\uff4c":"l","\u0140":"l","\u013a":"l","\u013e":"l","\u1e37":"l","\u1e39":"l","\u013c":"l","\u1e3d":"l","\u1e3b":"l","\u017f":"l","\u0142":"l","\u019a":"l","\u026b":"l","\u2c61":"l","\ua749":"l","\ua781":"l","\ua747":"l","\u01c9":"lj","\u24dc":"m","\uff4d":"m","\u1e3f":"m","\u1e41":"m","\u1e43":"m","\u0271":"m","\u026f":"m","\u24dd":"n","\uff4e":"n","\u01f9":"n","\u0144":"n","\xf1":"n","\u1e45":"n","\u0148":"n","\u1e47":"n","\u0146":"n","\u1e4b":"n","\u1e49":"n","\u019e":"n","\u0272":"n","\u0149":"n","\ua791":"n","\ua7a5":"n","\u01cc":"nj","\u24de":"o","\uff4f":"o","\xf2":"o","\xf3":"o","\xf4":"o","\u1ed3":"o","\u1ed1":"o","\u1ed7":"o","\u1ed5":"o","\xf5":"o","\u1e4d":"o","\u022d":"o","\u1e4f":"o","\u014d":"o","\u1e51":"o","\u1e53":"o","\u014f":"o","\u022f":"o","\u0231":"o","\xf6":"o","\u022b":"o","\u1ecf":"o","\u0151":"o","\u01d2":"o","\u020d":"o","\u020f":"o","\u01a1":"o","\u1edd":"o","\u1edb":"o","\u1ee1":"o","\u1edf":"o","\u1ee3":"o","\u1ecd":"o","\u1ed9":"o","\u01eb":"o","\u01ed":"o","\xf8":"o","\u01ff":"o","\u0254":"o","\ua74b":"o","\ua74d":"o","\u0275":"o","\u01a3":"oi","\u0223":"ou","\ua74f":"oo","\u24df":"p","\uff50":"p","\u1e55":"p","\u1e57":"p","\u01a5":"p","\u1d7d":"p","\ua751":"p","\ua753":"p","\ua755":"p","\u24e0":"q","\uff51":"q","\u024b":"q","\ua757":"q","\ua759":"q","\u24e1":"r","\uff52":"r","\u0155":"r","\u1e59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1e5b":"r","\u1e5d":"r","\u0157":"r","\u1e5f":"r","\u024d":"r","\u027d":"r","\ua75b":"r","\ua7a7":"r","\ua783":"r","\u24e2":"s","\uff53":"s","\xdf":"s","\u015b":"s","\u1e65":"s","\u015d":"s","\u1e61":"s","\u0161":"s","\u1e67":"s","\u1e63":"s","\u1e69":"s","\u0219":"s","\u015f":"s","\u023f":"s","\ua7a9":"s","\ua785":"s","\u1e9b":"s","\u24e3":"t","\uff54":"t","\u1e6b":"t","\u1e97":"t","\u0165":"t","\u1e6d":"t","\u021b":"t","\u0163":"t","\u1e71":"t","\u1e6f":"t","\u0167":"t","\u01ad":"t","\u0288":"t","\u2c66":"t","\ua787":"t","\ua729":"tz","\u24e4":"u","\uff55":"u","\xf9":"u","\xfa":"u","\xfb":"u","\u0169":"u","\u1e79":"u","\u016b":"u","\u1e7b":"u","\u016d":"u","\xfc":"u","\u01dc":"u","\u01d8":"u","\u01d6":"u","\u01da":"u","\u1ee7":"u","\u016f":"u","\u0171":"u","\u01d4":"u","\u0215":"u","\u0217":"u","\u01b0":"u","\u1eeb":"u","\u1ee9":"u","\u1eef":"u","\u1eed":"u","\u1ef1":"u","\u1ee5":"u","\u1e73":"u","\u0173":"u","\u1e77":"u","\u1e75":"u","\u0289":"u","\u24e5":"v","\uff56":"v","\u1e7d":"v","\u1e7f":"v","\u028b":"v","\ua75f":"v","\u028c":"v","\ua761":"vy","\u24e6":"w","\uff57":"w","\u1e81":"w","\u1e83":"w","\u0175":"w","\u1e87":"w","\u1e85":"w","\u1e98":"w","\u1e89":"w","\u2c73":"w","\u24e7":"x","\uff58":"x","\u1e8b":"x","\u1e8d":"x","\u24e8":"y","\uff59":"y","\u1ef3":"y","\xfd":"y","\u0177":"y","\u1ef9":"y","\u0233":"y","\u1e8f":"y","\xff":"y","\u1ef7":"y","\u1e99":"y","\u1ef5":"y","\u01b4":"y","\u024f":"y","\u1eff":"y","\u24e9":"z","\uff5a":"z","\u017a":"z","\u1e91":"z","\u017c":"z","\u017e":"z","\u1e93":"z","\u1e95":"z","\u01b6":"z","\u0225":"z","\u0240":"z","\u2c6c":"z","\ua763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038a":"\u0399","\u03aa":"\u0399","\u038c":"\u039f","\u038e":"\u03a5","\u03ab":"\u03a5","\u038f":"\u03a9","\u03ac":"\u03b1","\u03ad":"\u03b5","\u03ae":"\u03b7","\u03af":"\u03b9","\u03ca":"\u03b9","\u0390":"\u03b9","\u03cc":"\u03bf","\u03cd":"\u03c5","\u03cb":"\u03c5","\u03b0":"\u03c5","\u03c9":"\u03c9","\u03c2":"\u03c3"};i=a(document),f=function(){var a=1;return function(){return a++}}(),c=O(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,g=".select2-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select2")!==b&&null!==c.element.data("select2")&&c.element.data("select2").destroy(),this.container=this.createContainer(),this.liveRegion=a(".select2-hidden-accessible"),0==this.liveRegion.length&&(this.liveRegion=a("",{role:"status","aria-live":"polite"}).addClass("select2-hidden-accessible").appendTo(document.body)),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+f()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",c.element.attr("title")),this.body=a(document.body),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",c.element.attr("style")),this.container.css(K(c.containerCss,this.opts.element)),this.container.addClass(K(c.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container).on("click.select2",A),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(c.dropdownCssClass,this.opts.element)),this.dropdown.data("select2",this),this.dropdown.on("click",A),this.results=d=this.container.find(g),this.search=e=this.container.find("input.select2-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",A),v(this.results),this.dropdown.on("mousemove-filtered",g,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",g,this.bind(function(a){this._touchEvent=!0,this.highlightUnderEvent(a)})),this.dropdown.on("touchmove",g,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",g,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),x(80,this.results),this.dropdown.on("scroll-debounced",g,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select2-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select2-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),A(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),A(a))}),u(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select2-focused")}),e.on("blur",function(){e.removeClass("select2-focused")}),this.dropdown.on("mouseup",g,this.bind(function(b){a(b.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(a){a.stopPropagation()}),this.lastSearchTerm=b,a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),j=j||q(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",c.searchInputPlaceholder)},destroy:function(){var a=this.opts.element,c=a.data("select2"),d=this;this.close(),a.length&&a[0].detachEvent&&d._sync&&a.each(function(){d._sync&&this.detachEvent("onpropertychange",d._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,c!==b&&(c.container.remove(),c.liveRegion.remove(),c.dropdown.remove(),a.removeData("select2").off(".select2"),a.is("input[type='hidden']")?a.css("display",""):(a.show().prop("autofocus",this.autofocus||!1),this.elementTabIndex?a.attr({tabindex:this.elementTabIndex}):a.removeAttr("tabindex"),a.show())),N.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:r(a.attr("locked"),"locked")||r(a.data("locked"),!0)}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:void 0},prepareOpts:function(c){var d,e,g,h,i=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a ","
    "," ","
      ","
    ","
    "].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var b,c,d;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),b=this.search.get(0),b.createTextRange?(c=b.createTextRange(),c.collapse(!1),c.select()):b.setSelectionRange&&(d=this.search.val().length,b.setSelectionRange(d,d))),this.prefillNextSearchTerm(),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){a("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"selection","focusser")},initContainer:function(){var b,g,c=this.container,d=this.dropdown,e=f();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=b=c.find(".select2-choice"),this.focusser=c.find(".select2-focusser"),b.find(".select2-chosen").attr("id","select2-chosen-"+e),this.focusser.attr("aria-labelledby","select2-chosen-"+e),this.results.attr("id","select2-results-"+e),this.search.attr("aria-owns","select2-results-"+e),this.focusser.attr("id","s2id_autogen"+e),g=a("label[for='"+this.opts.element.attr("id")+"']"),this.opts.element.on("focus.select2",this.bind(function(){this.focus()})),this.focusser.prev().text(g.text()).attr("for",this.focusser.attr("id"));var h=this.opts.element.attr("title");this.opts.element.attr("title",h||g.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(a("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&229!=a.keyCode){if(a.which===k.PAGE_UP||a.which===k.PAGE_DOWN)return A(a),void 0;switch(a.which){case k.UP:case k.DOWN:return this.moveHighlight(a.which===k.UP?-1:1),A(a),void 0;case k.ENTER:return this.selectHighlighted(),A(a),void 0;case k.TAB:return this.selectHighlighted({noFocus:!0}),void 0;case k.ESC:return this.cancel(a),A(a),void 0}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.results&&this.results.length>1&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&a.which!==k.TAB&&!k.isControl(a)&&!k.isFunctionKey(a)&&a.which!==k.ESC){if(this.opts.openOnEnter===!1&&a.which===k.ENTER)return A(a),void 0;if(a.which==k.DOWN||a.which==k.UP||a.which==k.ENTER&&this.opts.openOnEnter){if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return;return this.open(),A(a),void 0}return a.which==k.DELETE||a.which==k.BACKSPACE?(this.opts.allowClear&&this.clear(),A(a),void 0):void 0}})),u(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){if(this.opts.minimumResultsForSearch>=0){if(a.stopPropagation(),this.opened())return;this.open()}})),b.on("mousedown touchstart","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),B(a),this.close(),this.selection&&this.selection.focus())})),b.on("mousedown touchstart",this.bind(function(c){n(b),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),A(c)})),d.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),b.on("focus",this.bind(function(a){A(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(a.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.hide(),this.setPlaceholder()},clear:function(b){var c=this.selection.data("select2-data");if(c){var d=a.Event("select2-clearing");if(this.opts.element.trigger(d),d.isDefaultPrevented())return;var e=this.getPlaceholderOption();this.opts.element.val(e?e.val():""),this.selection.find(".select2-chosen").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),b!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder(),c.lastSearchTerm=c.search.val())})}},isPlaceholderOptionSelected:function(){var a;return this.getPlaceholder()===b?!1:(a=this.getPlaceholderOption())!==b&&a.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===b||null===this.opts.element.val()},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find("option").filter(function(){return this.selected&&!this.disabled});b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=r(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===b?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&a!==b){if(this.select&&this.getPlaceholderOption()===b)return;this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(a,b,c){var d=0,e=this;if(this.findHighlightableChoices().each2(function(a,b){return r(e.id(b.data("select2-data")),e.opts.element.val())?(d=a,!1):void 0}),c!==!1&&(b===!0&&d>=0?this.highlight(d):this.highlight(0)),b===!0){var g=this.opts.minimumResultsForSearch;g>=0&&this.showSearch(L(a.results)>=g)}},showSearch:function(b){this.showSearchInput!==b&&(this.showSearchInput=b,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!b),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!b),a(this.dropdown,this.container).toggleClass("select2-with-searchbox",b))},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select2-selected",val:this.id(a),choice:a}),this.lastSearchTerm=this.search.val(),this.close(),b&&b.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),r(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,e,c=this.selection.find(".select2-chosen");this.selection.data("select2-data",a),c.empty(),null!==a&&(d=this.opts.formatSelection(a,c,this.opts.escapeMarkup)),d!==b&&c.append(d),e=this.opts.formatSelectionCssClass(a,c),e!==b&&c.addClass(e),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select2-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1],this.opts.debug&&console&&console.warn&&console.warn('Select2: The second option to `select2("val")` is not supported in Select2 4.0.0. The `change` event will always be triggered in 4.0.0.')),this.select)this.opts.debug&&console&&console.warn&&console.warn('Select2: Setting the value on a "," ","","
    ","
      ","
    ","
    "].join(""));return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=s(c.val(),b.separator,b.transformVal),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return r(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;c0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",b,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.hide(),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(a).addClass("select2-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),this.prefillNextSearchTerm(),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(b){var c={},d=[],e=this;a(b).each(function(){e.id(this)in c||(c[e.id(this)]=0,d.push(this))}),this.selection.find(".select2-search-choice").remove(),this.addSelectedChoice(d),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer.call(this,a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,b){this.triggerSelect(a)&&""!==a.text&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),this.lastSearchTerm=this.search.val(),this.clearSearch(),this.updateResults(),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(a,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.prefillNextSearchTerm()&&this.updateResults(),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),b&&b.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(b){var c=this.getVal(),d=this;a(b).each(function(){c.push(d.createChoice(this))}),this.setVal(c)},createChoice:function(c){var i,j,d=!c.locked,e=a("
  • "),f=a("
  • "),g=d?e:f,h=this.id(c);return i=this.opts.formatSelection(c,g.find("div"),this.opts.escapeMarkup),i!=b&&g.find("div").replaceWith(a("
    ").html(i)),j=this.opts.formatSelectionCssClass(c,g.find("div")),j!=b&&g.addClass(j),d&&g.find(".select2-search-choice-close").on("mousedown",A).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(this.unselect(a(b.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),A(b),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),g.data("select2-data",c),g.insertBefore(this.searchContainer),h},unselect:function(b){var d,e,c=this.getVal();if(b=b.closest(".select2-search-choice"),0===b.length)throw"Invalid argument: "+b+". Must be .select2-search-choice";if(d=b.data("select2-data")){var f=a.Event("select2-removing");if(f.val=this.id(d),f.choice=d,this.opts.element.trigger(f),f.isDefaultPrevented())return!1;for(;(e=p(this.id(d),c))>=0;)c.splice(e,1),this.setVal(c),this.select&&this.postprocessResults();return b.remove(),this.opts.element.trigger({type:"select2-removed",val:this.id(d),choice:d}),this.triggerChange({removed:d}),!0}},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select2-result"),f=this.results.find(".select2-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select2-data"));p(c,d)>=0&&(b.addClass("select2-selected"),b.find(".select2-result-selectable").addClass("select2-selected"))}),f.each2(function(a,b){b.is(".select2-result-selectable")||0!==b.find(".select2-result-selectable:not(.select2-selected)").length||b.addClass("select2-selected")}),-1==this.highlight()&&c!==!1&&this.opts.closeOnSelect===!0&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select2-result:not(.select2-selected)").length>0&&(!a||a&&!a.more&&0===this.results.find(".select2-no-results").length)&&J(g.opts.formatNoMatches,"formatNoMatches")&&this.results.append("
  • "+K(g.opts.formatNoMatches,g.opts.element,g.search.val())+"
  • ")},getMaxSearchWidth:function(){return this.selection.width()-t(this.search)},resizeSearch:function(){var a,b,c,d,e,f=t(this.search);a=C(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(Math.floor(e))},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),s(a,this.opts.separator,this.opts.transformVal))},setVal:function(b){if(this.select)this.select.val(b);else{var c=[],d={};a(b).each(function(){this in d||(c.push(this),d[this]=0)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator))}},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;c. Attach to instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){b.push(c.opts.id(a(this).data("select2-data")))}),this.setVal(b),this.triggerChange()},data:function(b,c){var e,f,d=this;return 0===arguments.length?this.selection.children(".select2-search-choice").map(function(){return a(this).data("select2-data")}).get():(f=this.data(),b||(b=[]),e=a.map(b,function(a){return d.opts.id(a)}),this.setVal(e),this.updateSelection(b),this.clearSearch(),c&&this.triggerChange(this.buildChangeDetails(f,this.data())),void 0)}}),a.fn.select2=function(){var d,e,f,g,h,c=Array.prototype.slice.call(arguments,0),i=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],j=["opened","isFocused","container","dropdown"],k=["val","data"],l={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?h=d.element.prop("multiple"):(h=d.multiple||!1,"tags"in d&&(d.multiple=h=!0)),e=h?new window.Select2["class"].multi:new window.Select2["class"].single,e.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(p(c[0],i)<0)throw"Unknown method: "+c[0];if(g=b,e=a(this).data("select2"),e===b)return;if(f=c[0],"container"===f?g=e.container:"dropdown"===f?g=e.dropdown:(l[f]&&(f=l[f]),g=e[f].apply(e,c.slice(1))),p(c[0],j)>=0||p(c[0],k)>=0&&1==c.length)return!1}}),g===b?this:g},a.fn.select2.defaults={debug:!1,width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return E(this.text(a),c.term,e,d),e.join("")},transformVal:function(b){return a.trim(b)},formatSelection:function(a,c,d){return a?d(this.text(a)):b},sortResults:function(a){return a},formatResultCssClass:function(a){return a.css},formatSelectionCssClass:function(){return b},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a==b?null:a.id},text:function(b){return b&&this.data&&this.data.text?a.isFunction(this.data.text)?this.data.text(b):b[this.data.text]:b.text},matcher:function(a,b){return o(""+b).toUpperCase().indexOf(o(""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:F,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null},nextSearchTerm:function(){return b},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(a){var b="ontouchstart"in window||navigator.msMaxTouchPoints>0;return b?a.opts.minimumResultsForSearch<0?!1:!0:!0}},a.fn.select2.locales=[],a.fn.select2.locales.en={formatMatches:function(a){return 1===a?"One result is available, press enter to select it.":a+" results are available, use up and down arrow keys to navigate."},formatNoMatches:function(){return"No matches found"},formatAjaxError:function(){return"Loading failed"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" or more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results\u2026"},formatSearching:function(){return"Searching\u2026"}},a.extend(a.fn.select2.defaults,a.fn.select2.locales.en),a.fn.select2.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:G,local:H,tags:I},util:{debounce:w,markMatch:E,escapeMarkup:F,stripDiacritics:o},"class":{"abstract":c,single:d,multi:e}}}}(jQuery); \ No newline at end of file diff --git a/html/forums/jscripts/select2/select2.png b/html/forums/jscripts/select2/select2.png deleted file mode 100644 index 44e10d63d8de8002128ed225dba0f2cbb4d1492b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)Ydt1Y2h&Wccvm zi&5WuULFe(##}H_ogiF97No#&2n#F*XU8!J*Ki5Kaa6WCOUJ_@$T^2(mY3o5I0-qI zkIJeWU?iMYS<_uE6bgye|hEz@(q8q9|pqX`;$S|H{R4$uOu z|IH({Epm9z)1i%f{?*_SkPk-@`3D9h58gs3|IhAtFmNj&=OuFe;F#YIIY$uwUky%+ zClJQ`U~Cu2hcW+Tup8jfc<>X;Zhy?cbkC??J(Vj|s1OBn(ad|T24*Af_XNjBsegU5 zL{t|DZ%`3M@C3qYbK7B}l3)vj=XeTX8?qY<2FjN&ADXzGkaHZ7%?*ERuN7g(MfX}Xbcb-k;##^T!*S3T|FEMIpYznh$o-8}J61KlT1QEl?eoA&5MW P00000NkvXXu0mjf*T?~` diff --git a/html/forums/jscripts/select2/select2x2.png b/html/forums/jscripts/select2/select2x2.png deleted file mode 100644 index c657a145f7d73e75a52a922a1792ef1eb4b6d5a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmV?P)`r+wFXxOF^IZS}gTNp#&YnG+B>Be>I7-}HB>xx!hlpz=$Czk=30x%mdOHIX z`LQEzw7^96#*H7C$SL?T31e={k68zgz&98?gTX8stb@T$mj4YpbynDm7HM1D?UIY_ zIdhui{Y{@sp3?IJ_i%4Ji;jgM}0%>#A>|l1Q!2wX(Ru_H|Aec76RXiW1Q!2yv0vTDL!G&oHH|H}>t3<86|ATWVJU=SDt z27y6f5Eulm`5&owWguB9qhDTIN8p%oJMuxYQCX7Zy>tj1EAEU5SQUTePw{t1=otdX z`Q~O5_m@18W3pAY$O(BYKczBbJIxQwGxviD_EoORvLRzP%Iz|yDn7`%<_0Ek*TniM zmnMu~DA(n;`6hRp8<@a-^Spf|E2p?-nY=WC2Lx^?`|OpjI? zKLm~ycxNVX!7chMx99-umZaR5Ra0EENnV=3{bmPdnPfLOZpoqvGw3@klj3c3RK?d4 zaMO^n>*cO|HF1B&*yv!Z(r!QgmS=K7_RCSZC~xgI*GK^ZbJ#HCpkdTuLmnc<3e0g~ zHAF6cj*1*7FbDqqA%O?dEn|`+a>T$G8=1gFjvtuF0|K`^GJ#tjxut>G+b&N14}n2o Z`~!aV9(=B&`KJH?002ovPDHLkV1n^1SNZ?| diff --git a/html/forums/jscripts/thread.js b/html/forums/jscripts/thread.js deleted file mode 100644 index d03a4a3..0000000 --- a/html/forums/jscripts/thread.js +++ /dev/null @@ -1,572 +0,0 @@ -var Thread = { - init: function() - { - $(document).ready(function(){ - Thread.quickEdit(); - Thread.initQuickReply(); - Thread.initMultiQuote(); - - // Set spinner image - $('#quickreply_spinner img').attr('src', spinner_image); - }); - }, - - initMultiQuote: function() - { - var quoted = Cookie.get('multiquote'); - if(quoted) - { - var post_ids = quoted.split("|"); - - $.each(post_ids, function(key, value) { - var mquote_a = $("#multiquote_"+value).closest('a'); - if(mquote_a.length) - { - mquote_a.removeClass('postbit_multiquote').addClass('postbit_multiquote_on'); - } - }); - - var mquote_quick = $('#quickreply_multiquote'); - if(mquote_quick.length) - { - mquote_quick.show(); - } - } - return true; - }, - - multiQuote: function(pid) - { - var new_post_ids = new Array(); - var quoted = Cookie.get("multiquote"); - var is_new = true; - if(quoted) - { - var post_ids = quoted.split("|"); - - $.each(post_ids, function(key, post_id) { - if(post_id != pid && post_id != '') - { - new_post_ids[new_post_ids.length] = post_id; - } - else if(post_id == pid) - { - is_new = false; - } - }); - } - - var mquote_a = $("#multiquote_"+pid).closest('a') - if(is_new == true) - { - new_post_ids[new_post_ids.length] = pid; - mquote_a.removeClass('postbit_multiquote').addClass('postbit_multiquote_on'); - } - else - { - mquote_a.removeClass('postbit_multiquote_on').addClass('postbit_multiquote'); - } - - var mquote_quick = $('#quickreply_multiquote'); - if(mquote_quick.length) - { - if(new_post_ids.length) - { - mquote_quick.show(); - } - else - { - mquote_quick.hide(); - } - } - Cookie.set("multiquote", new_post_ids.join("|")); - }, - - loadMultiQuoted: function() - { - if(use_xmlhttprequest == 1) - { - // Spinner! - var mquote_spinner = $('#quickreply_spinner'); - mquote_spinner.show(); - - $.ajax( - { - url: 'xmlhttp.php?action=get_multiquoted&load_all=1', - type: 'get', - complete: function (request, status) - { - Thread.multiQuotedLoaded(request, status); - - // Get rid of spinner - mquote_spinner.hide(); - } - }); - - return false; - } - else - { - return true; - } - }, - - multiQuotedLoaded: function(request) - { - var json = $.parseJSON(request.responseText); - if(typeof json == 'object') - { - if(json.hasOwnProperty("errors")) - { - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.post_fetch_error + ' ' + message, {theme:'jgrowl_error'}); - }); - return false; - } - } - - if(typeof $('textarea').sceditor != 'undefined') - { - $('textarea').sceditor('instance').insert(json.message); - } - else - { - var id = $('#message'); - if(id.value) - { - id.value += "\n"; - } - id.val(id.val() + json.message); - } - - Thread.clearMultiQuoted(); - $('#quickreply_multiquote').hide(); - $('#quoted_ids').val('all'); - - $('#message').focus(); - }, - - clearMultiQuoted: function() - { - $('#quickreply_multiquote').hide(); - var quoted = Cookie.get("multiquote"); - if(quoted) - { - var post_ids = quoted.split("|"); - - $.each(post_ids, function(key, post_id) { - var mquote_a = $("#multiquote_"+post_id).closest('a'); - if(mquote_a.length) - { - mquote_a.removeClass('postbit_multiquote_on').addClass('postbit_multiquote'); - } - }); - } - Cookie.unset('multiquote'); - }, - - quickEdit: function(el) - { - if(typeof el === 'undefined' || !el.length) el = '.post_body'; - - $(el).each(function() - { - // Take pid out of the id attribute - id = $(this).attr('id'); - pid = id.replace( /[^\d.]/g, ''); - - $('#pid_' + pid).editable("xmlhttp.php?action=edit_post&do=update_post&pid=" + pid + '&my_post_key=' + my_post_key, - { - indicator: spinner, - loadurl: "xmlhttp.php?action=edit_post&do=get_post&pid=" + pid, - type: "textarea", - rows: 12, - submit: lang.save_changes, - cancel: lang.cancel_edit, - event: "edit" + pid, // Triggered by the event "edit_[pid]", - onblur: "ignore", - dataType: "json", - submitdata: function (values, settings) - { - id = $(this).attr('id'); - pid = id.replace( /[^\d.]/g, ''); - return { - editreason: $("#quickedit_" + pid + "_editreason").val() - } - }, - callback: function(values, settings) - { - id = $(this).attr('id'); - pid = id.replace( /[^\d.]/g, ''); - - var json = $.parseJSON(values); - if(typeof json == 'object') - { - if(json.hasOwnProperty("errors")) - { - $(".jGrowl").jGrowl("close"); - - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.quick_edit_update_error + ' ' + message, {theme:'jgrowl_error'}); - }); - $(this).html($('#pid_' + pid + '_temp').html()); - } - else if(json.hasOwnProperty("moderation_post")) - { - $(".jGrowl").jGrowl("close"); - - $(this).html(json.message); - - // No more posts on this page? (testing for "1" as the last post would be removed here) - if($('.post').length == 1) - { - alert(json.moderation_post); - window.location = json.url; - } - else - { - $.jGrowl(json.moderation_post, {theme:'jgrowl_success'}); - $('#post_' + pid).slideToggle(); - } - } - else if(json.hasOwnProperty("moderation_thread")) - { - $(".jGrowl").jGrowl("close"); - - $(this).html(json.message); - - alert(json.moderation_thread); - - // Redirect user to forum - window.location = json.url; - } - else - { - // Change html content - $(this).html(json.message); - $('#edited_by_' + pid).html(json.editedmsg); - } - } - else - { - // Change html content - $(this).html(json.message); - $('#edited_by_' + pid).html(json.editedmsg); - } - $('#pid_' + pid + '_temp').remove(); - } - }); - }); - - $('.quick_edit_button').each(function() - { - $(this).on("click", function(e) - { - e.preventDefault(); - - // Take pid out of the id attribute - id = $(this).attr('id'); - pid = id.replace( /[^\d.]/g, ''); - - // Create a copy of the post - if($('#pid_' + pid + '_temp').length == 0) - { - $('#pid_' + pid).clone().attr('id','pid_' + pid + '_temp').appendTo("body").hide(); - } - - // Trigger the edit event - $('#pid_' + pid).trigger("edit" + pid); - - // Edit Reason - $('#pid_' + pid + ' textarea').attr('id', 'quickedit_' + pid); - if(allowEditReason == 1 && $('#quickedit_' + pid + '_editreason').length == 0) - { - $('#quickedit_' + pid).after('
    '); - } - }); - }); - - return false; - }, - - initQuickReply: function() - { - if($('#quick_reply_form').length && use_xmlhttprequest == 1) - { - // Bind closing event to our popup menu - $('#quick_reply_submit').bind('click', function(e) { - return Thread.quickReply(e); - }); - } - }, - - quickReply: function(e) - { - e.stopPropagation(); - - if(this.quick_replying) - { - return false; - } - - this.quick_replying = 1; - var post_body = $('#quick_reply_form').serialize(); - - // Spinner! - var qreply_spinner = $('#quickreply_spinner'); - qreply_spinner.show(); - - $.ajax( - { - url: 'newreply.php?ajax=1', - type: 'post', - data: post_body, - dataType: 'html', - complete: function (request, status) - { - Thread.quickReplyDone(request, status); - - // Get rid of spinner - qreply_spinner.hide(); - } - }); - - return false; - }, - - quickReplyDone: function(request, status) - { - this.quick_replying = 0; - - var json = $.parseJSON(request.responseText); - if(typeof json == 'object') - { - if(json.hasOwnProperty("errors")) - { - $(".jGrowl").jGrowl("close"); - - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.quick_reply_post_error + ' ' + message, {theme:'jgrowl_error'}); - }); - $('#quickreply_spinner').hide(); - } - } - - if($('#captcha_trow').length) - { - cap = json.data.match(/^([0-9a-zA-Z]+)(\|([0-9a-zA-Z]+)|)<\/captcha>/); - if(cap) - { - json.data = json.data.replace(/^(.*)<\/captcha>/, ''); - - if(cap[1] == "reload") - { - Recaptcha.reload(); - } - else if($("#captcha_img").length) - { - if(cap[1]) - { - imghash = cap[1]; - $('#imagehash').val(imghash); - if(cap[3]) - { - $('#imagestring').attr('type', 'hidden').val(cap[3]); - // hide the captcha - $('#captcha_trow').hide(); - } - else - { - $('#captcha_img').attr('src', "captcha.php?action=regimage&imagehash="+imghash); - $('#imagestring').attr('type', 'text').val(''); - $('#captcha_trow').show(); - } - } - } - } - } - - if(json.hasOwnProperty("errors")) - return false; - - if(json.data.match(/id="post_([0-9]+)"/)) - { - var pid = json.data.match(/id="post_([0-9]+)"/)[1]; - var post = document.createElement("div"); - - $('#posts').append(json.data); - - if (typeof inlineModeration != "undefined") // Guests don't have this object defined - $("#inlinemod_" + pid).on('change', inlineModeration.checkItem); - - Thread.quickEdit("#pid_" + pid); - - // Eval javascript - $(json.data).filter("script").each(function(e) { - eval($(this).text()); - }); - - $('#quick_reply_form')[0].reset(); - - var lastpid = $('#lastpid'); - if(lastpid.length) - { - lastpid.val(pid); - } - } - else - { - // Eval javascript - $(json.data).filter("script").each(function(e) { - eval($(this).text()); - }); - } - - $(".jGrowl").jGrowl("close"); - }, - - showIgnoredPost: function(pid) - { - $('#ignored_post_'+pid).slideToggle("slow"); - $('#post_'+pid).slideToggle("slow"); - }, - - showDeletedPost: function(pid) - { - $('#deleted_post_'+pid).slideToggle("slow"); - $('#post_'+pid).slideToggle("slow"); - }, - - deletePost: function(pid) - { - $.prompt(quickdelete_confirm, { - buttons:[ - {title: yes_confirm, value: true}, - {title: no_confirm, value: false} - ], - submit: function(e,v,m,f){ - if(v == true) - { - $.ajax( - { - url: 'editpost.php?ajax=1&action=deletepost&delete=1&my_post_key='+my_post_key+'&pid='+pid, - type: 'post', - complete: function (request, status) - { - var json = $.parseJSON(request.responseText); - if(json.hasOwnProperty("errors")) - { - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.quick_delete_error + ' ' + message, {theme:'jgrowl_error'}); - }); - } - else if(json.hasOwnProperty("data")) - { - // Soft deleted - if(json.data == 1) - { - // Change CSS class of div 'post_[pid]' - $("#post_"+pid).addClass("unapproved_post deleted_post"); - - $("#quick_delete_" + pid).hide(); - $("#quick_restore_" + pid).show(); - - $.jGrowl(lang.quick_delete_success, {theme:'jgrowl_success'}); - } - else if(json.data == 2) - { - // Actually deleted - $('#post_'+pid).slideToggle("slow"); - - $.jGrowl(lang.quick_delete_success, {theme:'jgrowl_success'}); - } else if(json.data == 3) - { - // deleted thread --> redirect - - if(!json.hasOwnProperty("url")) - { - $.jGrowl(lang.unknown_error, {theme:'jgrowl_error'}); - } - - // set timeout for redirect - window.setTimeout(function() - { - window.location = json.url; - }, 3000); - - // print success message - $.jGrowl(lang.quick_delete_thread_success, {theme:'jgrowl_success'}); - } - } - else - { - $.jGrowl(lang.unknown_error, {theme:'jgrowl_error'}); - } - } - }); - } - } - }); - - return false; - }, - - - restorePost: function(pid) - { - $.prompt(quickrestore_confirm, { - buttons:[ - {title: yes_confirm, value: true}, - {title: no_confirm, value: false} - ], - submit: function(e,v,m,f){ - if(v == true) - { - $.ajax( - { - url: 'editpost.php?ajax=1&action=restorepost&restore=1&my_post_key='+my_post_key+'&pid='+pid, - type: 'post', - complete: function (request, status) - { - var json = $.parseJSON(request.responseText); - if(json.hasOwnProperty("errors")) - { - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.quick_restore_error + ' ' + message, {theme:'jgrowl_error'}); - }); - } - else if(json.hasOwnProperty("data")) - { - // Change CSS class of div 'post_[pid]' - $("#post_"+pid).removeClass("unapproved_post deleted_post"); - - $("#quick_delete_" + pid).show(); - $("#quick_restore_" + pid).hide(); - - $.jGrowl(lang.quick_restore_success, {theme:'jgrowl_success'}); - } - else - { - $.jGrowl(lang.unknown_error, {theme:'jgrowl_error'}); - } - } - }); - } - } - }); - - return false; - }, - - viewNotes: function(tid) - { - MyBB.popupWindow("/moderation.php?action=viewthreadnotes&tid="+tid+"&modal=1"); - } -}; - -Thread.init(); \ No newline at end of file diff --git a/html/forums/jscripts/usercp.js b/html/forums/jscripts/usercp.js deleted file mode 100644 index c9de7c1..0000000 --- a/html/forums/jscripts/usercp.js +++ /dev/null @@ -1,258 +0,0 @@ -var UserCP = { - init: function() - { - }, - - openBuddySelect: function(field) - { - if(!$("#"+field).length) - { - return false; - } - this.buddy_field = '#'+field; - if($("#buddyselect_container").length) - { - UserCP.buddySelectLoaded(); - return false; - } - if(use_xmlhttprequest == 1) - { - $.ajax( - { - url: 'xmlhttp.php?action=get_buddyselect', - async: true, - complete: function (request) - { - UserCP.buddySelectLoaded(request); - } - }); - } - }, - - buddySelectLoaded: function(request) - { - var buddyselect_container = $("#buddyselect_container"); - // Using new copy - if(request) - { - try { - var json = $.parseJSON(request.responseText); - if(json.hasOwnProperty("errors")) - { - $.each(json.errors, function(i, message) - { - $.jGrowl(lang.buddylist_error + message, {theme:'jgrowl_error'}); - }); - return false; - } - } catch (e) { - if(request.responseText) - { - if(buddyselect_container.length) - { - buddyselect_container.remove(); - } - var container = $("
    "); - container.attr("id", "buddyselect_container"); - container.hide(); - container.html(request.responseText); - $("body").append(container); - } - } - } - else - { - buddyselect_container.hide(); - $("#buddyselect_container input:checked").each(function() - { - $(this).attr("checked", false); - }); - $("#buddyselect_buddies").html(""); - container = buddyselect_container; - } - - // Clone off screen - var clone = container.clone(true); - $("body").append(clone); - clone.css("width", "300px") - .css("top", "-10000px") - .css("display", "block") - .remove(); - - // Center it on the page - $("#buddyselect_container").css("top", "50%") - .css("left", "50%") - .css("position", "fixed") - .css("display", "block") - .css("z-index", "1000") - .css("text-align", "left") - .css("margin-left", -$("#buddyselect_container").outerWidth() / 2 + 'px') - .css("margin-top", -$("#buddyselect_container").outerHeight() / 2 + 'px'); - }, - - selectBuddy: function(uid, username) - { - var checkbox = $("#checkbox_"+uid); - var buddyselect_buddies_uid = $("#buddyselect_buddies_"+uid); - var buddyselect_buddies = $("#buddyselect_buddies"); - // Buddy already in list - remove - if(buddyselect_buddies_uid.length) - { - buddyselect_buddies_uid.remove(); - var buddies = buddyselect_buddies.text(); - if(buddies.charAt(0) == ",") - { - first_buddy = buddyselect_buddies.children()[0]; - first_buddy.innerHTML = first_buddy.innerHTML.substr(1, first_buddy.innerHTML.length); - } - } - // Add buddy to list - else - { - var buddies = buddyselect_buddies.text(); - if(buddies != "") - { - username = ", "+username; - } - var buddy = $(""); - buddy.attr("id", "buddyselect_buddies_"+uid) - .html(username); - buddyselect_buddies.append(buddy); - } - }, - - closeBuddySelect: function(canceled) - { - if(canceled != true) - { - var buddies = $("#buddyselect_buddies").text(); - existing_buddies = $(this.buddy_field).select2("data"); - if(existing_buddies.length) - { - // We already have stuff in our text box we must merge it with the new array we're going to create from the selected buddies - // We don't need to care about having dupes because Select2 treats items by ID and we two items have the same ID, there are no dupes because only one exists - // ^At least according to my tests :D (Pirata Nervo - so blame me for that if something goes wrong) - var newbuddies = []; - exp_buddies = buddies.split(","); - $.each(exp_buddies, function(index, buddy) - { - buddy = buddy.replace(/^\s+|\s+$/g, ""); - - var newbuddy = { id: buddy, text: buddy }; - newbuddies.push(newbuddy); - }); - - // Merge both - var newarray = $.merge(existing_buddies, newbuddies); - - // Update data - $(this.buddy_field).select2("data", newarray); - - } - else - { - var newbuddies = []; - exp_buddies = buddies.split(","); - $.each(exp_buddies, function(index, value ){ - var newbuddy = { id: value.replace(/,\s?/g, ", "), text: value.replace(/,\s?/g, ", ") }; - newbuddies.push(newbuddy); - }); - $(this.buddy_field).select2("data", newbuddies); - } - $(this.buddy_field).select2("focus"); - } - $("#buddyselect_container").hide(); - }, - - addBuddy: function(type) - { - var type_submit = $("#"+type+"_submit"); - var type_add_username = $("#"+type+"_add_username"); - - if(type_add_username.val().length == 0) - { - return false; - } - if(use_xmlhttprequest != 1) - { - return true; - } - - var old_value = type_submit.val(); - - type_add_username.attr("disabled", true); - type_submit.attr("disabled", true); - - if(type == "ignored") - { - type_submit.attr("value", lang.adding_ignored); - var list = "ignore"; - } - else - { - type_submit.attr("value", lang.adding_buddy); - var list = "buddy"; - } - - $.ajax( - { - type: 'post', - url: 'usercp.php?action=do_editlists&my_post_key='+my_post_key+'&manage='+type, - data: { ajax: 1, add_username: type_add_username.val() }, - async: false, - complete: function (request) - { - if(request.responseText.indexOf("buddy_count") >= 0 || request.responseText.indexOf("ignored_count") >= 0) - { - $("#"+list+"_list").html(request.responseText); - } - else - { - $("#sentrequests").html(request.responseText); - } - - type_submit.removeAttr("disabled"); - type_add_username.removeAttr("disabled"); - type_submit.attr("value", old_value); - type_add_username.val(""); - type_add_username.focus(); - type_add_username.select2('data', null); - } - }); - - return false; - }, - - removeBuddy: function(type, uid) - { - if(type == "ignored") - { - var message = lang.remove_ignored; - } - else - { - var message = lang.remove_buddy; - } - - $.prompt(message, { - buttons:[ - {title: yes_confirm, value: true}, - {title: no_confirm, value: false} - ], - submit: function(e,v,m,f){ - if(v == true) - { - $.ajax( - { - type: 'post', - url: 'usercp.php?action=do_editlists&my_post_key='+my_post_key+'&manage='+type+'&delete='+uid, - data: { ajax: 1 }, - async: false - }); - } - } - }); - - return false; - } -}; diff --git a/html/forums/jscripts/validate/additional-methods.min.js b/html/forums/jscripts/validate/additional-methods.min.js deleted file mode 100644 index b63c3ca..0000000 --- a/html/forums/jscripts/validate/additional-methods.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery Validation Plugin - v1.14.0 - 6/30/2015 - * http://jqueryvalidation.org/ - * Copyright (c) 2015 Jörn Zaefferer; Licensed MIT */ -!function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a):a(jQuery)}(function(a){!function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length<=d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length>=d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a,c,d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("accept",function(b,c,d){var e,f,g="string"==typeof d?d.replace(/\s/g,"").replace(/,/g,"|"):"image/*",h=this.optional(c);if(h)return h;if("file"===a(c).attr("type")&&(g=g.replace(/\*/g,".*"),c.files&&c.files.length))for(e=0;ec;c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bank account number"),a.validator.addMethod("bankorgiroaccountNL",function(b,c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a,b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a)},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a){"use strict";var b,c,d,e,f,g,h=[];if(a=a.toUpperCase(),!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)"))return!1;for(d=0;9>d;d++)h[d]=parseInt(a.charAt(d),10);for(c=h[2]+h[4]+h[6],e=1;8>e;e+=2)f=(2*h[e]).toString(),g=f.charAt(1),c+=parseInt(f.charAt(0),10)+(""===g?0:parseInt(g,10));return/^[ABCDEFGHJNPQRSUVW]{1}/.test(a)?(c+="",b=10-parseInt(c.charAt(c.length-1),10),a+=b,h[8].toString()===String.fromCharCode(64+b)||h[8].toString()===a.charAt(a.length-1)):!1},"Please specify a valid CIF number."),a.validator.addMethod("cpfBR",function(a){if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var b,c,d,e,f=0;if(b=parseInt(a.substring(9,10),10),c=parseInt(a.substring(10,11),10),d=function(a,b){var c=10*a%11;return(10===c||11===c)&&(c=0),c===b},""===a||"00000000000"===a||"11111111111"===a||"22222222222"===a||"33333333333"===a||"44444444444"===a||"55555555555"===a||"66666666666"===a||"77777777777"===a||"88888888888"===a||"99999999999"===a)return!1;for(e=1;9>=e;e++)f+=parseInt(a.substring(e-1,e),10)*(11-e);if(d(f,b)){for(f=0,e=1;10>=e;e++)f+=parseInt(a.substring(e-1,e),10)*(12-e);return d(f,c)}return!1},"Please specify a valid CPF number"),a.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&/^(5[12345])/.test(a)?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:128&d?!0:!1},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a,b,c){var d,e="string"==typeof c,f=e?c:c[0],g=e?!0:c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a,b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},a.validator.messages.date),a.validator.addMethod("dateITA",function(a,b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(Date.UTC(f,e-1,d,12,0,0,0)),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d?!0:!1):h=!1,this.optional(b)||h},a.validator.messages.date),a.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},a.validator.messages.date),a.validator.addMethod("extension",function(a,b,c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp("\\.("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a,b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("iban",function(a,b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="";if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0;j9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("nieES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[T]{1}/.test(a)?a[8]===/^[T]{1}[A-Z0-9]{8}$/.test(a):/^[XYZ]{1}/.test(a)?a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.replace("X","0").replace("Y","1").replace("Z","2").substring(0,8)%23):!1:!1},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):/^[KLM]{1}/.test(a)?a[8]===String.fromCharCode(64):!1:!1},"Please specify a valid NIF number."),jQuery.validator.addMethod("notEqualTo",function(b,c,d){return this.optional(c)||!a.validator.methods.equalTo.call(this,b,c,d)},"Please enter a different value, values must not be the same."),a.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a,b,c){return this.optional(b)?!0:("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("postalCodeCA",function(a,b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeBR",function(a,b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalcodeIT",function(a,b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a,b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a,b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),a.validator.addMethod("stateUS",function(a,b,c){var d,e="undefined"==typeof c,f=e||"undefined"==typeof c.caseSensitive?!1:c.caseSensitive,g=e||"undefined"==typeof c.includeTerritories?!1:c.includeTerritories,h=e||"undefined"==typeof c.includeMilitary?!1:c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b,c,d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a,b){return this.optional(b)||/^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([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])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;17>b;b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0;c").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,d=d.concat(c.errorList)}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||-1!==a.inArray(c.keyCode,d)||(b.name in this.submitted||b===this.lastElement)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors();var b,c=this.elements().removeData("previousValue").removeAttr("aria-invalid");if(this.settings.unhighlight)for(b=0;c[b];b++)this.settings.unhighlight.call(this,c[b],this.settings.errorClass,"");else c.removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=b.type;return"radio"===e||"checkbox"===e?this.findByName(b.name).filter(":checked").val():"number"===e&&"undefined"!=typeof b.validity?b.validity.badInput?!1:d.val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j instanceof TypeError&&(j.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+"")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g=this.errorsFor(b),h=this.idOrName(b),i=a(b).attr("aria-describedby");g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(g=a("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(c||""),d=g,this.settings.wrapper&&(d=g.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is("label")?g.attr("for",h):0===g.parents("label[for='"+h+"']").length&&(f=g.attr("id").replace(/(:|\.|\[|\]|\$)/g,"\\$1"),i?i.match(new RegExp("\\b"+f+"\\b"))||(i+=" "+f):i=f,a(b).attr("aria-describedby",i),e=this.groups[b.name],e&&a.each(this.groups,function(b,c){c===e&&a("[name='"+b+"']",this.currentForm).attr("aria-describedby",g.attr("id"))}))),!c&&this.settings.success&&(g.text(""),"string"==typeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShow=this.toShow.add(g)},errorsFor:function(b){var c=this.idOrName(b),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+d.replace(/\s+/g,", #")),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.off(".validate-equalTo").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&&{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}});var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)})}); \ No newline at end of file diff --git a/html/forums/managegroup.php b/html/forums/managegroup.php deleted file mode 100644 index 7fb85bb..0000000 --- a/html/forums/managegroup.php +++ /dev/null @@ -1,441 +0,0 @@ -load("managegroup"); - -$gid = $mybb->get_input('gid', MyBB::INPUT_INT); -if(!isset($groupscache[$gid])) -{ - error($lang->invalid_group); -} -$usergroup = $groupscache[$gid]; -$lang->nav_group_management = $lang->sprintf($lang->nav_group_management, htmlspecialchars_uni($usergroup['title'])); -add_breadcrumb($lang->nav_group_memberships, "usercp.php?action=usergroups"); -add_breadcrumb($lang->nav_group_management, "managegroup.php?gid=$gid"); - -$mybb->input['action'] = $mybb->get_input('action'); - -if($mybb->input['action'] == "joinrequests") -{ - add_breadcrumb($lang->nav_join_requests); -} - -// Check that this user is actually a leader of this group -$query = $db->simple_select("groupleaders", "*", "uid='{$mybb->user['uid']}' AND gid='{$gid}'"); -$groupleader = $db->fetch_array($query); - -if(!$groupleader['uid'] && $mybb->usergroup['cancp'] != 1) -{ - error($lang->not_leader_of_this_group); -} - -if($mybb->input['action'] == "do_add" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($groupleader['canmanagemembers'] == 0) - { - error_no_permission(); - } - - $plugins->run_hooks("managegroup_do_add_start"); - - $options = array( - 'fields' => array('additionalgroups', 'usergroup') - ); - - $user = get_user_by_username($mybb->get_input('username'), $options); - - if($user['uid']) - { - $additionalgroups = explode(',', $user['additionalgroups']); - if($user['usergroup'] != $gid && !in_array($gid, $additionalgroups)) - { - join_usergroup($user['uid'], $gid); - $db->delete_query("joinrequests", "uid='{$user['uid']}' AND gid='{$gid}'"); - $plugins->run_hooks("managegroup_do_add_end"); - redirect("managegroup.php?gid=".$gid, $lang->user_added); - } - else - { - error($lang->error_alreadyingroup); - } - } - else - { - error($lang->error_invalidusername); - } -} -elseif($mybb->input['action'] == "do_invite" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($groupleader['caninvitemembers'] == 0) - { - error_no_permission(); - } - - $plugins->run_hooks("managegroup_do_invite_start"); - - $options = array( - 'fields' => array('additionalgroups', 'usergroup', 'language') - ); - - $user = get_user_by_username($mybb->get_input('inviteusername'), $options); - - if($user['uid']) - { - $additionalgroups = explode(',', $user['additionalgroups']); - if($user['usergroup'] != $gid && !in_array($gid, $additionalgroups)) - { - $query = $db->simple_select("joinrequests", "rid", "uid = '".(int)$user['uid']."' AND gid = '".(int)$gid."'", array("limit" => 1)); - $pendinginvite = $db->fetch_array($query); - if($pendinginvite['rid']) - { - error($lang->error_alreadyinvited); - } - else - { - $usergroups_cache = $cache->read('usergroups'); - $usergroup = $usergroups_cache[$gid]; - - $joinrequest = array( - "uid" => $user['uid'], - "gid" => $usergroup['gid'], - "dateline" => TIME_NOW, - "invite" => 1 - ); - $db->insert_query("joinrequests", $joinrequest); - - $lang_var = 'invite_pm_message'; - if($mybb->settings['deleteinvites'] != 0) - { - $lang_var .= '_expires'; - } - - $pm = array( - 'subject' => array('invite_pm_subject', $usergroup['title']), - 'message' => array($lang_var, $usergroup['title'], $mybb->settings['bburl'], $mybb->settings['deleteinvites']), - 'touid' => $user['uid'], - 'language' => $user['language'], - 'language_file' => 'managegroup' - ); - - send_pm($pm, $mybb->user['uid'], true); - - $plugins->run_hooks("managegroup_do_invite_end"); - - redirect("managegroup.php?gid=".$gid, $lang->user_invited); - } - } - else - { - error($lang->error_alreadyingroup); - } - } - else - { - error($lang->error_invalidusername); - } -} -elseif($mybb->input['action'] == "do_joinrequests" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($groupleader['canmanagerequests'] == 0) - { - error_no_permission(); - } - - $plugins->run_hooks("managegroup_do_joinrequests_start"); - - $uidin = null; - if(is_array($mybb->get_input('request', MyBB::INPUT_ARRAY))) - { - $uidin = array(); - foreach($mybb->get_input('request', MyBB::INPUT_ARRAY) as $uid => $what) - { - if($what == "accept") - { - join_usergroup($uid, $gid); - $uidin[] = (int)$uid; - } - elseif($what == "decline") - { - $uidin[] = (int)$uid; - } - } - } - if(is_array($uidin) && !empty($uidin)) - { - $uids = implode(",", $uidin); - $db->delete_query("joinrequests", "uid IN ({$uids}) AND gid='{$gid}'"); - } - - $plugins->run_hooks("managegroup_do_joinrequests_end"); - - redirect("managegroup.php?gid={$gid}", $lang->join_requests_moderated); -} -elseif($mybb->input['action'] == "joinrequests") -{ - $users = ""; - $plugins->run_hooks("managegroup_joinrequests_start"); - - $query = $db->query(" - SELECT j.*, u.uid, u.username, u.postnum, u.regdate - FROM ".TABLE_PREFIX."joinrequests j - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=j.uid) - WHERE j.gid='{$gid}' AND j.uid != 0 - ORDER BY u.username ASC - "); - while($user = $db->fetch_array($query)) - { - $user['reason'] = htmlspecialchars_uni($user['reason']); - $altbg = alt_trow(); - $regdate = my_date($mybb->settings['dateformat'], $user['regdate']); - $user['username'] = htmlspecialchars_uni($user['username']); - $user['profilelink'] = build_profile_link($user['username'], $user['uid']); - eval("\$users .= \"".$templates->get("managegroup_joinrequests_request")."\";"); - } - if(!$users) - { - error($lang->no_requests); - } - $lang->join_requests = $lang->sprintf($lang->join_requests_title, htmlspecialchars_uni($usergroup['title'])); - - $plugins->run_hooks("managegroup_joinrequests_end"); - - eval("\$joinrequests = \"".$templates->get("managegroup_joinrequests")."\";"); - output_page($joinrequests); -} -elseif($mybb->input['action'] == "do_manageusers" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($groupleader['canmanagemembers'] == 0) - { - error_no_permission(); - } - - $plugins->run_hooks("managegroup_do_manageusers_start"); - - if(is_array($mybb->get_input('removeuser', MyBB::INPUT_ARRAY))) - { - foreach($mybb->get_input('removeuser', MyBB::INPUT_ARRAY) as $uid) - { - leave_usergroup($uid, $gid); - } - } - else - { - error($lang->no_users_selected); - } - - $plugins->run_hooks("managegroup_do_manageusers_end"); - - redirect("managegroup.php?gid={$gid}", $lang->users_removed); -} -else -{ - $plugins->run_hooks("managegroup_start"); - - $lang->members_of = $lang->sprintf($lang->members_of, htmlspecialchars_uni($usergroup['title'])); - $lang->add_member = $lang->sprintf($lang->add_member, htmlspecialchars_uni($usergroup['title'])); - $lang->invite_member = $lang->sprintf($lang->invite_member, htmlspecialchars_uni($usergroup['title'])); - $joinrequests = ''; - if($usergroup['type'] == 5) - { - $usergrouptype = $lang->group_public_invite; - } - elseif($usergroup['type'] == 4) - { - $query = $db->simple_select("joinrequests", "COUNT(*) AS req", "gid='{$gid}'"); - $numrequests = $db->fetch_array($query); - if($numrequests['req']) - { - $lang->num_requests_pending = $lang->sprintf($lang->num_requests_pending, $numrequests['req']); - eval("\$joinrequests = \"".$templates->get("managegroup_requestnote")."\";"); - } - $usergrouptype = $lang->group_public_moderated; - } - elseif($usergroup['type'] == 3) - { - $usergrouptype = $lang->group_public_not_moderated; - } - elseif($usergroup['type'] == 2) - { - $usergrouptype = $lang->group_private; - } - else - { - $usergrouptype = $lang->group_default; - } - - $group_leaders = ''; - - // Display group leaders (if there is any) - $query = $db->query(" - SELECT g.*, u.username, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."groupleaders g - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=g.uid) - WHERE g.gid = '{$gid}' - "); - - $leaders_array = array(); - - if($db->num_rows($query)) - { - $loop = 1; - $leaders = ''; - $leader_count = $db->num_rows($query); - while($leader = $db->fetch_array($query)) - { - $leader['username'] = htmlspecialchars_uni($leader['username']); - $leader_name = format_name($leader['username'], $leader['usergroup'], $leader['displaygroup']); - $leader_profile_link = build_profile_link($leader_name, $leader['uid']); - - $leaders_array[] = $leader['uid']; - - // Get commas... - if($loop != $leader_count) - { - $comma = $lang->comma; - } - else - { - $comma = ''; - } - - ++$loop; - eval("\$leaders .= \"".$templates->get("managegroup_leaders_bit")."\";"); - } - - eval("\$group_leaders = \"".$templates->get("managegroup_leaders")."\";"); - } - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("users", "*", "','||additionalgroups||',' LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username')); - break; - default: - $query = $db->simple_select("users", "*", "CONCAT(',',additionalgroups,',') LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username')); - } - - $numusers = $db->num_rows($query); - - $perpage = (int)$mybb->settings['membersperpage']; - if($perpage < 1) - { - $perpage = 20; - } - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - if($page && $page > 0) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - $multipage = multipage($numusers, $perpage, $page, "managegroup.php?gid=".$gid); - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("users", "*", "','||additionalgroups||',' LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username', 'limit' => $perpage, 'limit_start' => $start)); - break; - default: - $query = $db->simple_select("users", "*", "CONCAT(',',additionalgroups,',') LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username', 'limit' => $perpage, 'limit_start' => $start)); - } - - $users = ""; - while($user = $db->fetch_array($query)) - { - $altbg = alt_trow(); - $regdate = my_date('relative', $user['regdate']); - $post = $user; - $sendpm = $email = ''; - if($mybb->settings['enablepms'] == 1 && $post['receivepms'] != 0 && $mybb->usergroup['cansendpms'] == 1 && my_strpos(",".$post['ignorelist'].",", ",".$mybb->user['uid'].",") === false) - { - eval("\$sendpm = \"".$templates->get("postbit_pm")."\";"); - } - - if($user['hideemail'] != 1) - { - eval("\$email = \"".$templates->get("postbit_email")."\";"); - } - else - { - $email = ''; - } - - $user['username'] = htmlspecialchars_uni($user['username']); - $user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']); - $user['profilelink'] = build_profile_link($user['username'], $user['uid']); - if(in_array($user['uid'], $leaders_array)) - { - $leader = $lang->leader; - } - else - { - $leader = ''; - } - - // Checkbox for user management - only if current user is allowed - $checkbox = ''; - if($groupleader['canmanagemembers'] == 1) - { - eval("\$checkbox = \"".$templates->get("managegroup_user_checkbox")."\";"); - } - - eval("\$users .= \"".$templates->get("managegroup_user")."\";"); - } - - if(!$users) - { - eval("\$users = \"".$templates->get("managegroup_no_users")."\";"); - } - - $add_user = ''; - $remove_users = ''; - if($groupleader['canmanagemembers'] == 1) - { - eval("\$add_user = \"".$templates->get("managegroup_adduser")."\";"); - eval("\$remove_users = \"".$templates->get("managegroup_removeusers")."\";"); - } - - if($usergroup['type'] == 5 && $groupleader['caninvitemembers'] == 1) - { - eval("\$invite_user = \"".$templates->get("managegroup_inviteuser")."\";"); - } - - $plugins->run_hooks("managegroup_end"); - - eval("\$manageusers = \"".$templates->get("managegroup")."\";"); - output_page($manageusers); -} diff --git a/html/forums/member.php b/html/forums/member.php deleted file mode 100644 index cca9e0a..0000000 --- a/html/forums/member.php +++ /dev/null @@ -1,3068 +0,0 @@ -load("member"); - -$mybb->input['action'] = $mybb->get_input('action'); - -// Make navigation -switch($mybb->input['action']) -{ - case "register": - case "do_register": - add_breadcrumb($lang->nav_register); - break; - case "activate": - add_breadcrumb($lang->nav_activate); - break; - case "resendactivation": - add_breadcrumb($lang->nav_resendactivation); - break; - case "lostpw": - add_breadcrumb($lang->nav_lostpw); - break; - case "resetpassword": - add_breadcrumb($lang->nav_resetpassword); - break; - case "login": - add_breadcrumb($lang->nav_login); - break; - case "emailuser": - add_breadcrumb($lang->nav_emailuser); - break; -} - -if(($mybb->input['action'] == "register" || $mybb->input['action'] == "do_register") && $mybb->usergroup['cancp'] != 1) -{ - if($mybb->settings['disableregs'] == 1) - { - error($lang->registrations_disabled); - } - if($mybb->user['uid'] != 0) - { - error($lang->error_alreadyregistered); - } - if($mybb->settings['betweenregstime'] && $mybb->settings['maxregsbetweentime']) - { - $time = TIME_NOW; - $datecut = $time-(60*60*$mybb->settings['betweenregstime']); - $query = $db->simple_select("users", "*", "regip=".$db->escape_binary($session->packedip)." AND regdate > '$datecut'"); - $regcount = $db->num_rows($query); - if($regcount >= $mybb->settings['maxregsbetweentime']) - { - $lang->error_alreadyregisteredtime = $lang->sprintf($lang->error_alreadyregisteredtime, $regcount, $mybb->settings['betweenregstime']); - error($lang->error_alreadyregisteredtime); - } - } -} - -if($mybb->input['action'] == "do_register" && $mybb->request_method == "post") -{ - $plugins->run_hooks("member_do_register_start"); - - // Are checking how long it takes for users to register? - if($mybb->settings['regtime'] > 0) - { - // Is the field actually set? - if(isset($mybb->input['regtime'])) - { - // Check how long it took for this person to register - $timetook = TIME_NOW - $mybb->get_input('regtime', MyBB::INPUT_INT); - - // See if they registered faster than normal - if($timetook < $mybb->settings['regtime']) - { - // This user registered pretty quickly, bot detected! - $lang->error_spam_deny_time = $lang->sprintf($lang->error_spam_deny_time, $mybb->settings['regtime'], $timetook); - error($lang->error_spam_deny_time); - } - } - else - { - error($lang->error_spam_deny); - } - } - - // If we have hidden CATPCHA enabled and it's filled, deny registration - if($mybb->settings['hiddencaptchaimage']) - { - $string = $mybb->settings['hiddencaptchaimagefield']; - - if(!empty($mybb->input[$string])) - { - error($lang->error_spam_deny); - } - } - - if($mybb->settings['regtype'] == "randompass") - { - - $password_length = (int)$mybb->settings['minpasswordlength']; - if($password_length < 8) - { - $password_length = min(8, (int)$mybb->settings['maxpasswordlength']); - } - - $mybb->input['password'] = random_str($password_length, $mybb->settings['requirecomplexpasswords']); - $mybb->input['password2'] = $mybb->input['password']; - } - - if($mybb->settings['regtype'] == "verify" || $mybb->settings['regtype'] == "admin" || $mybb->settings['regtype'] == "both" || $mybb->get_input('coppa', MyBB::INPUT_INT) == 1) - { - $usergroup = 5; - } - else - { - $usergroup = 2; - } - - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler("insert"); - - $coppauser = 0; - if(isset($mybb->cookies['coppauser'])) - { - $coppauser = (int)$mybb->cookies['coppauser']; - } - - // Set the data for the new user. - $user = array( - "username" => $mybb->get_input('username'), - "password" => $mybb->get_input('password'), - "password2" => $mybb->get_input('password2'), - "email" => $mybb->get_input('email'), - "email2" => $mybb->get_input('email2'), - "usergroup" => $usergroup, - "referrer" => $mybb->get_input('referrername'), - "timezone" => $mybb->get_input('timezoneoffset'), - "language" => $mybb->get_input('language'), - "profile_fields" => $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY), - "regip" => $session->packedip, - "coppa_user" => $coppauser, - "regcheck1" => $mybb->get_input('regcheck1'), - "regcheck2" => $mybb->get_input('regcheck2'), - "registration" => true - ); - - // Do we have a saved COPPA DOB? - if(isset($mybb->cookies['coppadob'])) - { - list($dob_day, $dob_month, $dob_year) = explode("-", $mybb->cookies['coppadob']); - $user['birthday'] = array( - "day" => $dob_day, - "month" => $dob_month, - "year" => $dob_year - ); - } - - $user['options'] = array( - "allownotices" => $mybb->get_input('allownotices', MyBB::INPUT_INT), - "hideemail" => $mybb->get_input('hideemail', MyBB::INPUT_INT), - "subscriptionmethod" => $mybb->get_input('subscriptionmethod', MyBB::INPUT_INT), - "receivepms" => $mybb->get_input('receivepms', MyBB::INPUT_INT), - "pmnotice" => $mybb->get_input('pmnotice', MyBB::INPUT_INT), - "pmnotify" => $mybb->get_input('pmnotify', MyBB::INPUT_INT), - "invisible" => $mybb->get_input('invisible', MyBB::INPUT_INT), - "dstcorrection" => $mybb->get_input('dstcorrection') - ); - - $userhandler->set_data($user); - - $errors = ""; - - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - } - - if($mybb->settings['enablestopforumspam_on_register']) - { - require_once MYBB_ROOT . '/inc/class_stopforumspamchecker.php'; - - $stop_forum_spam_checker = new StopForumSpamChecker( - $plugins, - $mybb->settings['stopforumspam_min_weighting_before_spam'], - $mybb->settings['stopforumspam_check_usernames'], - $mybb->settings['stopforumspam_check_emails'], - $mybb->settings['stopforumspam_check_ips'], - $mybb->settings['stopforumspam_log_blocks'] - ); - - try { - if($stop_forum_spam_checker->is_user_a_spammer($user['username'], $user['email'], get_ip())) - { - error($lang->sprintf($lang->error_stop_forum_spam_spammer, - $stop_forum_spam_checker->getErrorText(array( - 'stopforumspam_check_usernames', - 'stopforumspam_check_emails', - 'stopforumspam_check_ips' - )))); - } - } - catch (Exception $e) - { - if($mybb->settings['stopforumspam_block_on_error']) - { - error($lang->error_stop_forum_spam_fetching); - } - } - } - - if($mybb->settings['captchaimage']) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $captcha = new captcha; - - if($captcha->validate_captcha() == false) - { - // CAPTCHA validation failed - foreach($captcha->get_errors() as $error) - { - $errors[] = $error; - } - } - } - - // If we have a security question, check to see if answer is correct - if($mybb->settings['securityquestion']) - { - $question_id = $db->escape_string($mybb->get_input('question_id')); - $answer = $db->escape_string($mybb->get_input('answer')); - - $query = $db->query(" - SELECT q.*, s.sid - FROM ".TABLE_PREFIX."questionsessions s - LEFT JOIN ".TABLE_PREFIX."questions q ON (q.qid=s.qid) - WHERE q.active='1' AND s.sid='{$question_id}' - "); - if($db->num_rows($query) > 0) - { - $question = $db->fetch_array($query); - $valid_answers = explode("\n", $question['answer']); - $validated = 0; - - foreach($valid_answers as $answers) - { - if(my_strtolower($answers) == my_strtolower($answer)) - { - $validated = 1; - } - } - - if($validated != 1) - { - $update_question = array( - "incorrect" => $question['incorrect'] + 1 - ); - $db->update_query("questions", $update_question, "qid='{$question['qid']}'"); - - $errors[] = $lang->error_question_wrong; - } - else - { - $update_question = array( - "correct" => $question['correct'] + 1 - ); - $db->update_query("questions", $update_question, "qid='{$question['qid']}'"); - } - - $db->delete_query("questionsessions", "sid='{$sid}'"); - } - } - - if(is_array($errors)) - { - $username = htmlspecialchars_uni($mybb->get_input('username')); - $email = htmlspecialchars_uni($mybb->get_input('email')); - $email2 = htmlspecialchars_uni($mybb->get_input('email2')); - $referrername = htmlspecialchars_uni($mybb->get_input('referrername')); - - $allownoticescheck = $hideemailcheck = $no_auto_subscribe_selected = $instant_email_subscribe_selected = $instant_pm_subscribe_selected = $no_subscribe_selected = ''; - $receivepmscheck = $pmnoticecheck = $pmnotifycheck = $invisiblecheck = $dst_auto_selected = $dst_enabled_selected = $dst_disabled_selected = ''; - - if($mybb->get_input('allownotices', MyBB::INPUT_INT) == 1) - { - $allownoticescheck = "checked=\"checked\""; - } - - if($mybb->get_input('hideemail', MyBB::INPUT_INT) == 1) - { - $hideemailcheck = "checked=\"checked\""; - } - - if($mybb->get_input('subscriptionmethod', MyBB::INPUT_INT) == 1) - { - $no_subscribe_selected = "selected=\"selected\""; - } - else if($mybb->get_input('subscriptionmethod', MyBB::INPUT_INT) == 2) - { - $instant_email_subscribe_selected = "selected=\"selected\""; - } - else if($mybb->get_input('subscriptionmethod', MyBB::INPUT_INT) == 3) - { - $instant_pm_subscribe_selected = "selected=\"selected\""; - } - else - { - $no_auto_subscribe_selected = "selected=\"selected\""; - } - - if($mybb->get_input('receivepms', MyBB::INPUT_INT) == 1) - { - $receivepmscheck = "checked=\"checked\""; - } - - if($mybb->get_input('pmnotice', MyBB::INPUT_INT) == 1) - { - $pmnoticecheck = " checked=\"checked\""; - } - - if($mybb->get_input('pmnotify', MyBB::INPUT_INT) == 1) - { - $pmnotifycheck = "checked=\"checked\""; - } - - if($mybb->get_input('invisible', MyBB::INPUT_INT) == 1) - { - $invisiblecheck = "checked=\"checked\""; - } - - if($mybb->get_input('dstcorrection', MyBB::INPUT_INT) == 2) - { - $dst_auto_selected = "selected=\"selected\""; - } - else if($mybb->get_input('dstcorrection', MyBB::INPUT_INT) == 1) - { - $dst_enabled_selected = "selected=\"selected\""; - } - else - { - $dst_disabled_selected = "selected=\"selected\""; - } - - $regerrors = inline_error($errors); - $mybb->input['action'] = "register"; - $fromreg = 1; - } - else - { - $user_info = $userhandler->insert_user(); - - // Invalidate solved captcha - if($mybb->settings['captchaimage']) - { - $captcha->invalidate_captcha(); - } - - if($mybb->settings['regtype'] != "randompass" && !isset($mybb->cookies['coppauser'])) - { - // Log them in - my_setcookie("mybbuser", $user_info['uid']."_".$user_info['loginkey'], null, true); - } - - if(isset($mybb->cookies['coppauser'])) - { - $lang->redirect_registered_coppa_activate = $lang->sprintf($lang->redirect_registered_coppa_activate, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); - my_unsetcookie("coppauser"); - my_unsetcookie("coppadob"); - $plugins->run_hooks("member_do_register_end"); - error($lang->redirect_registered_coppa_activate); - } - else if($mybb->settings['regtype'] == "verify") - { - $activationcode = random_str(); - $now = TIME_NOW; - $activationarray = array( - "uid" => $user_info['uid'], - "dateline" => TIME_NOW, - "code" => $activationcode, - "type" => "r" - ); - $db->insert_query("awaitingactivation", $activationarray); - $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']); - switch($mybb->settings['username_method']) - { - case 0: - $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - case 1: - $emailmessage = $lang->sprintf($lang->email_activateaccount1, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - case 2: - $emailmessage = $lang->sprintf($lang->email_activateaccount2, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - default: - $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - } - my_mail($user_info['email'], $emailsubject, $emailmessage); - - $lang->redirect_registered_activation = $lang->sprintf($lang->redirect_registered_activation, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); - - $plugins->run_hooks("member_do_register_end"); - - error($lang->redirect_registered_activation); - } - else if($mybb->settings['regtype'] == "randompass") - { - $emailsubject = $lang->sprintf($lang->emailsubject_randompassword, $mybb->settings['bbname']); - switch($mybb->settings['username_method']) - { - case 0: - $emailmessage = $lang->sprintf($lang->email_randompassword, $user['username'], $mybb->settings['bbname'], $user_info['username'], $user_info['password']); - break; - case 1: - $emailmessage = $lang->sprintf($lang->email_randompassword1, $user['username'], $mybb->settings['bbname'], $user_info['username'], $user_info['password']); - break; - case 2: - $emailmessage = $lang->sprintf($lang->email_randompassword2, $user['username'], $mybb->settings['bbname'], $user_info['username'], $user_info['password']); - break; - default: - $emailmessage = $lang->sprintf($lang->email_randompassword, $user['username'], $mybb->settings['bbname'], $user_info['username'], $user_info['password']); - break; - } - my_mail($user_info['email'], $emailsubject, $emailmessage); - - $plugins->run_hooks("member_do_register_end"); - - error($lang->redirect_registered_passwordsent); - } - else if($mybb->settings['regtype'] == "admin") - { - $groups = $cache->read("usergroups"); - $admingroups = array(); - if(!empty($groups)) // Shouldn't be... - { - foreach($groups as $group) - { - if($group['cancp'] == 1) - { - $admingroups[] = (int)$group['gid']; - } - } - } - - if(!empty($admingroups)) - { - $sqlwhere = 'usergroup IN ('.implode(',', $admingroups).')'; - foreach($admingroups as $admingroup) - { - switch($db->type) - { - case 'pgsql': - case 'sqlite': - $sqlwhere .= " OR ','||additionalgroups||',' LIKE '%,{$admingroup},%'"; - break; - default: - $sqlwhere .= " OR CONCAT(',',additionalgroups,',') LIKE '%,{$admingroup},%'"; - break; - } - } - $q = $db->simple_select('users', 'uid,username,email,language', $sqlwhere); - while($recipient = $db->fetch_array($q)) - { - // First we check if the user's a super admin: if yes, we don't care about permissions - $is_super_admin = is_super_admin($recipient['uid']); - if(!$is_super_admin) - { - // Include admin functions - if(!file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php")) - { - continue; - } - - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; - - // Verify if we have permissions to access user-users - require_once MYBB_ROOT.$mybb->config['admin_dir']."/modules/user/module_meta.php"; - if(function_exists("user_admin_permissions")) - { - // Get admin permissions - $adminperms = get_admin_permissions($recipient['uid']); - - $permissions = user_admin_permissions(); - if(array_key_exists('users', $permissions['permissions']) && $adminperms['user']['users'] != 1) - { - continue; // No permissions - } - } - } - - // Load language - if($recipient['language'] != $lang->language && $lang->language_exists($recipient['language'])) - { - $reset_lang = true; - $lang->set_language($recipient['language']); - $lang->load("member"); - } - - $subject = $lang->sprintf($lang->newregistration_subject, $mybb->settings['bbname']); - $message = $lang->sprintf($lang->newregistration_message, $recipient['username'], $mybb->settings['bbname'], $user['username']); - my_mail($recipient['email'], $subject, $message); - } - - // Reset language - if(isset($reset_lang)) - { - $lang->set_language($mybb->settings['bblanguage']); - $lang->load("member"); - } - } - - $lang->redirect_registered_admin_activate = $lang->sprintf($lang->redirect_registered_admin_activate, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); - - $plugins->run_hooks("member_do_register_end"); - - error($lang->redirect_registered_admin_activate); - } - else if($mybb->settings['regtype'] == "both") - { - $groups = $cache->read("usergroups"); - $admingroups = array(); - if(!empty($groups)) // Shouldn't be... - { - foreach($groups as $group) - { - if($group['cancp'] == 1) - { - $admingroups[] = (int)$group['gid']; - } - } - } - - if(!empty($admingroups)) - { - $sqlwhere = 'usergroup IN ('.implode(',', $admingroups).')'; - foreach($admingroups as $admingroup) - { - switch($db->type) - { - case 'pgsql': - case 'sqlite': - $sqlwhere .= " OR ','||additionalgroups||',' LIKE '%,{$admingroup},%'"; - break; - default: - $sqlwhere .= " OR CONCAT(',',additionalgroups,',') LIKE '%,{$admingroup},%'"; - break; - } - } - $q = $db->simple_select('users', 'uid,username,email,language', $sqlwhere); - while($recipient = $db->fetch_array($q)) - { - // First we check if the user's a super admin: if yes, we don't care about permissions - $is_super_admin = is_super_admin($recipient['uid']); - if(!$is_super_admin) - { - // Include admin functions - if(!file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php")) - { - continue; - } - - require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; - - // Verify if we have permissions to access user-users - require_once MYBB_ROOT.$mybb->config['admin_dir']."/modules/user/module_meta.php"; - if(function_exists("user_admin_permissions")) - { - // Get admin permissions - $adminperms = get_admin_permissions($recipient['uid']); - - $permissions = user_admin_permissions(); - if(array_key_exists('users', $permissions['permissions']) && $adminperms['user']['users'] != 1) - { - continue; // No permissions - } - } - } - - // Load language - if($recipient['language'] != $lang->language && $lang->language_exists($recipient['language'])) - { - $reset_lang = true; - $lang->set_language($recipient['language']); - $lang->load("member"); - } - - $subject = $lang->sprintf($lang->newregistration_subject, $mybb->settings['bbname']); - $message = $lang->sprintf($lang->newregistration_message, $recipient['username'], $mybb->settings['bbname'], $user['username']); - my_mail($recipient['email'], $subject, $message); - } - - // Reset language - if(isset($reset_lang)) - { - $lang->set_language($mybb->settings['bblanguage']); - $lang->load("member"); - } - } - - $activationcode = random_str(); - $activationarray = array( - "uid" => $user_info['uid'], - "dateline" => TIME_NOW, - "code" => $activationcode, - "type" => "b" - ); - $db->insert_query("awaitingactivation", $activationarray); - $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']); - switch($mybb->settings['username_method']) - { - case 0: - $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - case 1: - $emailmessage = $lang->sprintf($lang->email_activateaccount1, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - case 2: - $emailmessage = $lang->sprintf($lang->email_activateaccount2, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - default: - $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); - break; - } - my_mail($user_info['email'], $emailsubject, $emailmessage); - - $lang->redirect_registered_activation = $lang->sprintf($lang->redirect_registered_activation, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); - - $plugins->run_hooks("member_do_register_end"); - - error($lang->redirect_registered_activation); - } - else - { - $lang->redirect_registered = $lang->sprintf($lang->redirect_registered, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); - - $plugins->run_hooks("member_do_register_end"); - - redirect("index.php", $lang->redirect_registered); - } - } -} - -if($mybb->input['action'] == "coppa_form") -{ - if(!$mybb->settings['faxno']) - { - $mybb->settings['faxno'] = " "; - } - - $plugins->run_hooks("member_coppa_form"); - - eval("\$coppa_form = \"".$templates->get("member_coppa_form")."\";"); - output_page($coppa_form); -} - -if($mybb->input['action'] == "register") -{ - $bdaysel = ''; - if($mybb->settings['coppa'] == "disabled") - { - $bdaysel = $bday2blank = ''; - } - $mybb->input['bday1'] = $mybb->get_input('bday1', MyBB::INPUT_INT); - for($day = 1; $day <= 31; ++$day) - { - $selected = ''; - if($mybb->input['bday1'] == $day) - { - $selected = " selected=\"selected\""; - } - - eval("\$bdaysel .= \"".$templates->get("member_register_day")."\";"); - } - - $mybb->input['bday2'] = $mybb->get_input('bday2', MyBB::INPUT_INT); - $bdaymonthsel = array(); - foreach(range(1, 12) as $number) - { - $bdaymonthsel[$number] = ''; - } - $bdaymonthsel[$mybb->input['bday2']] = "selected=\"selected\""; - $mybb->input['bday3'] = $mybb->get_input('bday3', MyBB::INPUT_INT); - - if($mybb->input['bday3'] == 0) - { - $mybb->input['bday3'] = ''; - } - - // Is COPPA checking enabled? - if($mybb->settings['coppa'] != "disabled" && !isset($mybb->input['step'])) - { - // Just selected DOB, we check - if($mybb->input['bday1'] && $mybb->input['bday2'] && $mybb->input['bday3']) - { - my_unsetcookie("coppauser"); - - $months = get_bdays($mybb->input['bday3']); - if($mybb->input['bday2'] < 1 || $mybb->input['bday2'] > 12 || $mybb->input['bday3'] < (date("Y")-100) || $mybb->input['bday3'] > date("Y") || $mybb->input['bday1'] > $months[$mybb->input['bday2']-1]) - { - error($lang->error_invalid_birthday); - } - - $bdaytime = @mktime(0, 0, 0, $mybb->input['bday2'], $mybb->input['bday1'], $mybb->input['bday3']); - - // Store DOB in cookie so we can save it with the registration - my_setcookie("coppadob", "{$mybb->input['bday1']}-{$mybb->input['bday2']}-{$mybb->input['bday3']}", -1); - - // User is <= 13, we mark as a coppa user - if($bdaytime >= mktime(0, 0, 0, my_date('n'), my_date('d'), my_date('Y')-13)) - { - my_setcookie("coppauser", 1, -0); - $under_thirteen = true; - } - $mybb->request_method = ""; - } - // Show DOB select form - else - { - $plugins->run_hooks("member_register_coppa"); - - my_unsetcookie("coppauser"); - - eval("\$coppa = \"".$templates->get("member_register_coppa")."\";"); - output_page($coppa); - exit; - } - } - - if((!isset($mybb->input['agree']) && !isset($mybb->input['regsubmit'])) && $fromreg == 0 || $mybb->request_method != "post") - { - $coppa_agreement = ''; - // Is this user a COPPA user? We need to show the COPPA agreement too - if($mybb->settings['coppa'] != "disabled" && ($mybb->cookies['coppauser'] == 1 || $under_thirteen)) - { - if($mybb->settings['coppa'] == "deny") - { - error($lang->error_need_to_be_thirteen); - } - $lang->coppa_agreement_1 = $lang->sprintf($lang->coppa_agreement_1, $mybb->settings['bbname']); - eval("\$coppa_agreement = \"".$templates->get("member_register_agreement_coppa")."\";"); - } - - $plugins->run_hooks("member_register_agreement"); - - eval("\$agreement = \"".$templates->get("member_register_agreement")."\";"); - output_page($agreement); - } - else - { - $plugins->run_hooks("member_register_start"); - - $validator_extra = ''; - - if(isset($mybb->input['timezoneoffset'])) - { - $timezoneoffset = $mybb->get_input('timezoneoffset'); - } - else - { - $timezoneoffset = $mybb->settings['timezoneoffset']; - } - $tzselect = build_timezone_select("timezoneoffset", $timezoneoffset, true); - - $stylelist = build_theme_select("style"); - - if($mybb->settings['usertppoptions']) - { - $tppoptions = ''; - $explodedtpp = explode(",", $mybb->settings['usertppoptions']); - if(is_array($explodedtpp)) - { - foreach($explodedtpp as $val) - { - $val = trim($val); - $tpp_option = $lang->sprintf($lang->tpp_option, $val); - eval("\$tppoptions .= \"".$templates->get("usercp_options_tppselect_option")."\";"); - } - } - eval("\$tppselect = \"".$templates->get("usercp_options_tppselect")."\";"); - } - if($mybb->settings['userpppoptions']) - { - $pppoptions = ''; - $explodedppp = explode(",", $mybb->settings['userpppoptions']); - if(is_array($explodedppp)) - { - foreach($explodedppp as $val) - { - $val = trim($val); - $ppp_option = $lang->sprintf($lang->ppp_option, $val); - eval("\$pppoptions .= \"".$templates->get("usercp_options_pppselect_option")."\";"); - } - } - eval("\$pppselect = \"".$templates->get("usercp_options_pppselect")."\";"); - } - if($mybb->settings['usereferrals'] == 1 && !$mybb->user['uid']) - { - if(isset($mybb->cookies['mybb']['referrer'])) - { - $query = $db->simple_select("users", "uid,username", "uid='".(int)$mybb->cookies['mybb']['referrer']."'"); - $ref = $db->fetch_array($query); - $ref['username'] = htmlspecialchars_uni($ref['username']); - $referrername = $ref['username']; - } - elseif(isset($referrer)) - { - $query = $db->simple_select("users", "username", "uid='".(int)$referrer['uid']."'"); - $ref = $db->fetch_array($query); - $ref['username'] = htmlspecialchars_uni($ref['username']); - $referrername = $ref['username']; - } - elseif(!empty($referrername)) - { - $ref = get_user_by_username($referrername); - if(!$ref['uid']) - { - $errors[] = $lang->error_badreferrer; - } - } - else - { - $referrername = ''; - } - if(isset($quickreg)) - { - $refbg = "trow1"; - } - else - { - $refbg = "trow2"; - } - eval("\$referrer = \"".$templates->get("member_register_referrer")."\";"); - } - else - { - $referrer = ''; - } - $mybb->input['profile_fields'] = $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY); - // Custom profile fields baby! - $altbg = "trow1"; - $requiredfields = $customfields = ''; - - if($mybb->settings['regtype'] == "verify" || $mybb->settings['regtype'] == "admin" || $mybb->settings['regtype'] == "both" || $mybb->get_input('coppa', MyBB::INPUT_INT) == 1) - { - $usergroup = 5; - } - else - { - $usergroup = 2; - } - - $pfcache = $cache->read('profilefields'); - - if(is_array($pfcache)) - { - foreach($pfcache as $profilefield) - { - if($profilefield['required'] != 1 && $profilefield['registration'] != 1 || !is_member($profilefield['editableby'], array('usergroup' => $mybb->user['usergroup'], 'additionalgroups' => $usergroup))) - { - continue; - } - - $code = $select = $val = $options = $expoptions = $useropts = ''; - $seloptions = array(); - $profilefield['type'] = htmlspecialchars_uni($profilefield['type']); - $thing = explode("\n", $profilefield['type'], "2"); - $type = trim($thing[0]); - $options = $thing[1]; - $select = ''; - $field = "fid{$profilefield['fid']}"; - $profilefield['description'] = htmlspecialchars_uni($profilefield['description']); - $profilefield['name'] = htmlspecialchars_uni($profilefield['name']); - if($errors && isset($mybb->input['profile_fields'][$field])) - { - $userfield = $mybb->input['profile_fields'][$field]; - } - else - { - $userfield = ''; - } - if($type == "multiselect") - { - if($errors) - { - $useropts = $userfield; - } - else - { - $useropts = explode("\n", $userfield); - } - if(is_array($useropts)) - { - foreach($useropts as $key => $val) - { - $seloptions[$val] = $val; - } - } - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $val = trim($val); - $val = str_replace("\n", "\\n", $val); - - $sel = ""; - if(isset($seloptions[$val]) && $val == $seloptions[$val]) - { - $sel = ' selected="selected"'; - } - - eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); - } - if(!$profilefield['length']) - { - $profilefield['length'] = 3; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_multiselect")."\";"); - } - } - elseif($type == "select") - { - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $val = trim($val); - $val = str_replace("\n", "\\n", $val); - $sel = ""; - if($val == $userfield) - { - $sel = ' selected="selected"'; - } - - eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); - } - if(!$profilefield['length']) - { - $profilefield['length'] = 1; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_select")."\";"); - } - } - elseif($type == "radio") - { - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $checked = ""; - if($val == $userfield) - { - $checked = 'checked="checked"'; - } - - eval("\$code .= \"".$templates->get("usercp_profile_profilefields_radio")."\";"); - } - } - } - elseif($type == "checkbox") - { - if($errors) - { - $useropts = $userfield; - } - else - { - $useropts = explode("\n", $userfield); - } - if(is_array($useropts)) - { - foreach($useropts as $key => $val) - { - $seloptions[$val] = $val; - } - } - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $checked = ""; - if(isset($seloptions[$val]) && $val == $seloptions[$val]) - { - $checked = 'checked="checked"'; - } - - eval("\$code .= \"".$templates->get("usercp_profile_profilefields_checkbox")."\";"); - } - } - } - elseif($type == "textarea") - { - $value = htmlspecialchars_uni($userfield); - eval("\$code = \"".$templates->get("usercp_profile_profilefields_textarea")."\";"); - } - else - { - $value = htmlspecialchars_uni($userfield); - $maxlength = ""; - if($profilefield['maxlength'] > 0) - { - $maxlength = " maxlength=\"{$profilefield['maxlength']}\""; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_text")."\";"); - } - - if($profilefield['required'] == 1) - { - // JS validator extra, choose correct selectors for everything except single select which always has value - if($type != 'select') - { - if($type == "textarea") - { - $inp_selector = "$('textarea[name=\"profile_fields[{$field}]\"]')"; - } - elseif($type == "multiselect") - { - $inp_selector = "$('select[name=\"profile_fields[{$field}][]\"]')"; - } - elseif($type == "checkbox") - { - $inp_selector = "$('input[name=\"profile_fields[{$field}][]\"]')"; - } - else - { - $inp_selector = "$('input[name=\"profile_fields[{$field}]\"]')"; - } - - $validator_extra .= " - {$inp_selector}.rules('add', { - required: true, - messages: { - required: '{$lang->js_validator_not_empty}' - } - });\n"; - } - - eval("\$requiredfields .= \"".$templates->get("member_register_customfield")."\";"); - } - else - { - eval("\$customfields .= \"".$templates->get("member_register_customfield")."\";"); - } - } - - if($requiredfields) - { - eval("\$requiredfields = \"".$templates->get("member_register_requiredfields")."\";"); - } - - if($customfields) - { - eval("\$customfields = \"".$templates->get("member_register_additionalfields")."\";"); - } - } - - if(!isset($fromreg)) - { - $allownoticescheck = "checked=\"checked\""; - $hideemailcheck = ''; - $receivepmscheck = "checked=\"checked\""; - $pmnoticecheck = " checked=\"checked\""; - $pmnotifycheck = ''; - $invisiblecheck = ''; - if($mybb->settings['dstcorrection'] == 1) - { - $enabledstcheck = "checked=\"checked\""; - } - $no_auto_subscribe_selected = $instant_email_subscribe_selected = $instant_pm_subscribe_selected = $no_subscribe_selected = ''; - $dst_auto_selected = $dst_enabled_selected = $dst_disabled_selected = ''; - $username = $email = $email2 = ''; - $regerrors = ''; - } - // Spambot registration image thingy - if($mybb->settings['captchaimage']) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $captcha = new captcha(true, "member_register_regimage"); - - if($captcha->html) - { - $regimage = $captcha->html; - - if($mybb->settings['captchaimage'] == 1) - { - // JS validator extra for our default CAPTCHA - $validator_extra .= " - $('#imagestring').rules('add', { - required: true, - remote:{ - url: 'xmlhttp.php?action=validate_captcha', - type: 'post', - dataType: 'json', - data: - { - imagehash: function () { - return $('#imagehash').val(); - }, - my_post_key: my_post_key - }, - }, - messages: { - remote: '{$lang->js_validator_no_image_text}' - } - });\n"; - } - } - } - - // Security Question - $questionbox = ''; - if($mybb->settings['securityquestion']) - { - $sid = generate_question(); - $query = $db->query(" - SELECT q.question, s.sid - FROM ".TABLE_PREFIX."questionsessions s - LEFT JOIN ".TABLE_PREFIX."questions q ON (q.qid=s.qid) - WHERE q.active='1' AND s.sid='{$sid}' - "); - if($db->num_rows($query) > 0) - { - $question = $db->fetch_array($query); - - $refresh = ''; - // Total questions - $q = $db->simple_select('questions', 'COUNT(qid) as num', 'active=1'); - $num = $db->fetch_field($q, 'num'); - if($num > 1) - { - eval("\$refresh = \"".$templates->get("member_register_question_refresh")."\";"); - } - - eval("\$questionbox = \"".$templates->get("member_register_question")."\";"); - - $validator_extra .= " - $('#answer').rules('add', { - required: true, - remote:{ - url: 'xmlhttp.php?action=validate_question', - type: 'post', - dataType: 'json', - data: - { - question: function () { - return $('#question_id').val(); - }, - my_post_key: my_post_key - }, - }, - messages: { - remote: '{$lang->js_validator_no_security_question}' - } - });\n"; - } - } - - $hiddencaptcha = ''; - // Hidden CAPTCHA for Spambots - if($mybb->settings['hiddencaptchaimage']) - { - $captcha_field = $mybb->settings['hiddencaptchaimagefield']; - - eval("\$hiddencaptcha = \"".$templates->get("member_register_hiddencaptcha")."\";"); - } - if($mybb->settings['regtype'] != "randompass") - { - // JS validator extra - $lang->js_validator_password_length = $lang->sprintf($lang->js_validator_password_length, $mybb->settings['minpasswordlength']); - - // See if the board has "require complex passwords" enabled. - if($mybb->settings['requirecomplexpasswords'] == 1) - { - $lang->password = $lang->complex_password = $lang->sprintf($lang->complex_password, $mybb->settings['minpasswordlength']); - - $validator_extra .= " - $('#password').rules('add', { - required: true, - minlength: {$mybb->settings['minpasswordlength']}, - remote:{ - url: 'xmlhttp.php?action=complex_password', - type: 'post', - dataType: 'json', - data: - { - my_post_key: my_post_key - }, - }, - messages: { - minlength: '{$lang->js_validator_password_length}', - required: '{$lang->js_validator_password_length}', - remote: '{$lang->js_validator_no_image_text}' - } - });\n"; - } - else - { - $validator_extra .= " - $('#password').rules('add', { - required: true, - minlength: {$mybb->settings['minpasswordlength']}, - messages: { - minlength: '{$lang->js_validator_password_length}', - required: '{$lang->js_validator_password_length}' - } - });\n"; - } - - $validator_extra .= " - $('#password2').rules('add', { - required: true, - minlength: {$mybb->settings['minpasswordlength']}, - equalTo: '#password', - messages: { - minlength: '{$lang->js_validator_password_length}', - required: '{$lang->js_validator_password_length}', - equalTo: '{$lang->js_validator_password_matches}' - } - });\n"; - - eval("\$passboxes = \"".$templates->get("member_register_password")."\";"); - } - - // JS validator extra - if($mybb->settings['maxnamelength'] > 0 && $mybb->settings['minnamelength'] > 0) - { - $lang->js_validator_username_length = $lang->sprintf($lang->js_validator_username_length, $mybb->settings['minnamelength'], $mybb->settings['maxnamelength']); - } - - $languages = $lang->get_languages(); - $langoptions = $boardlanguage = ''; - if(count($languages) > 1) - { - foreach($languages as $name => $language) - { - $language = htmlspecialchars_uni($language); - - $sel = ''; - if($mybb->get_input('language') == $name) - { - $sel = " selected=\"selected\""; - } - - eval('$langoptions .= "'.$templates->get('usercp_options_language_option').'";'); - } - - eval('$boardlanguage = "'.$templates->get('member_register_language').'";'); - } - - // Set the time so we can find automated signups - $time = TIME_NOW; - - $plugins->run_hooks("member_register_end"); - - eval("\$registration = \"".$templates->get("member_register")."\";"); - output_page($registration); - } -} - -if($mybb->input['action'] == "activate") -{ - $plugins->run_hooks("member_activate_start"); - - if(isset($mybb->input['username'])) - { - $mybb->input['username'] = $mybb->get_input('username'); - $options = array( - 'username_method' => $mybb->settings['username_method'], - 'fields' => '*', - ); - $user = get_user_by_username($mybb->input['username'], $options); - if(!$user) - { - switch($mybb->settings['username_method']) - { - case 0: - error($lang->error_invalidpworusername); - break; - case 1: - error($lang->error_invalidpworusername1); - break; - case 2: - error($lang->error_invalidpworusername2); - break; - default: - error($lang->error_invalidpworusername); - break; - } - } - $uid = $user['uid']; - } - else - { - $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); - } - if(isset($mybb->input['code']) && $user) - { - $query = $db->simple_select("awaitingactivation", "*", "uid='".$user['uid']."' AND (type='r' OR type='e' OR type='b')"); - $activation = $db->fetch_array($query); - if(!$activation['uid']) - { - error($lang->error_alreadyactivated); - } - if($activation['code'] !== $mybb->get_input('code')) - { - error($lang->error_badactivationcode); - } - - if($activation['type'] == "b" && $activation['validated'] == 1) - { - error($lang->error_alreadyvalidated); - } - - $db->delete_query("awaitingactivation", "uid='".$user['uid']."' AND (type='r' OR type='e')"); - - if($user['usergroup'] == 5 && $activation['type'] != "e" && $activation['type'] != "b") - { - $db->update_query("users", array("usergroup" => 2), "uid='".$user['uid']."'"); - - $cache->update_awaitingactivation(); - } - if($activation['type'] == "e") - { - $newemail = array( - "email" => $db->escape_string($activation['misc']), - ); - $db->update_query("users", $newemail, "uid='".$user['uid']."'"); - $plugins->run_hooks("member_activate_emailupdated"); - - redirect("usercp.php", $lang->redirect_emailupdated); - } - elseif($activation['type'] == "b") - { - $update = array( - "validated" => 1, - ); - $db->update_query("awaitingactivation", $update, "uid='".$user['uid']."' AND type='b'"); - $plugins->run_hooks("member_activate_emailactivated"); - - redirect("index.php", $lang->redirect_accountactivated_admin, "", true); - } - else - { - $plugins->run_hooks("member_activate_accountactivated"); - - redirect("index.php", $lang->redirect_accountactivated); - } - } - else - { - $plugins->run_hooks("member_activate_form"); - - $code = htmlspecialchars_uni($mybb->get_input('code')); - - if(!isset($user['username'])) - { - $user['username'] = ''; - } - $user['username'] = htmlspecialchars_uni($user['username']); - - eval("\$activate = \"".$templates->get("member_activate")."\";"); - output_page($activate); - } -} - -if($mybb->input['action'] == "resendactivation") -{ - $plugins->run_hooks("member_resendactivation"); - - if($mybb->settings['regtype'] == "admin") - { - error($lang->error_activated_by_admin); - } - if($mybb->user['uid'] && $mybb->user['usergroup'] != 5) - { - error($lang->error_alreadyactivated); - } - - $query = $db->simple_select("awaitingactivation", "*", "uid='".$user['uid']."' AND type='b'"); - $activation = $db->fetch_array($query); - - if($activation['validated'] == 1) - { - error($lang->error_activated_by_admin); - } - - $plugins->run_hooks("member_resendactivation_end"); - - eval("\$activate = \"".$templates->get("member_resendactivation")."\";"); - output_page($activate); -} - -if($mybb->input['action'] == "do_resendactivation" && $mybb->request_method == "post") -{ - $plugins->run_hooks("member_do_resendactivation_start"); - - if($mybb->settings['regtype'] == "admin") - { - error($lang->error_activated_by_admin); - } - - $query = $db->query(" - SELECT u.uid, u.username, u.usergroup, u.email, a.code, a.type, a.validated - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."awaitingactivation a ON (a.uid=u.uid AND a.type='r' OR a.type='b') - WHERE u.email='".$db->escape_string($mybb->get_input('email'))."' - "); - $numusers = $db->num_rows($query); - if($numusers < 1) - { - error($lang->error_invalidemail); - } - else - { - while($user = $db->fetch_array($query)) - { - if($user['type'] == "b" && $user['validated'] == 1) - { - error($lang->error_activated_by_admin); - } - - if($user['usergroup'] == 5) - { - if(!$user['code']) - { - $user['code'] = random_str(); - $uid = $user['uid']; - $awaitingarray = array( - "uid" => $uid, - "dateline" => TIME_NOW, - "code" => $user['code'], - "type" => $user['type'] - ); - $db->insert_query("awaitingactivation", $awaitingarray); - } - $username = $user['username']; - $email = $user['email']; - $activationcode = $user['code']; - $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']); - switch($mybb->settings['username_method']) - { - case 0: - $emailmessage = $lang->sprintf($lang->email_activateaccount, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); - break; - case 1: - $emailmessage = $lang->sprintf($lang->email_activateaccount1, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); - break; - case 2: - $emailmessage = $lang->sprintf($lang->email_activateaccount2, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); - break; - default: - $emailmessage = $lang->sprintf($lang->email_activateaccount, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); - break; - } - my_mail($email, $emailsubject, $emailmessage); - } - } - $plugins->run_hooks("member_do_resendactivation_end"); - - redirect("index.php", $lang->redirect_activationresent); - } -} - -if($mybb->input['action'] == "lostpw") -{ - $plugins->run_hooks("member_lostpw"); - - eval("\$lostpw = \"".$templates->get("member_lostpw")."\";"); - output_page($lostpw); -} - -if($mybb->input['action'] == "do_lostpw" && $mybb->request_method == "post") -{ - $plugins->run_hooks("member_do_lostpw_start"); - - $email = $db->escape_string($email); - $query = $db->simple_select("users", "*", "email='".$db->escape_string($mybb->get_input('email'))."'"); - $numusers = $db->num_rows($query); - if($numusers < 1) - { - error($lang->error_invalidemail); - } - else - { - while($user = $db->fetch_array($query)) - { - $db->delete_query("awaitingactivation", "uid='{$user['uid']}' AND type='p'"); - $user['activationcode'] = random_str(30); - $now = TIME_NOW; - $uid = $user['uid']; - $awaitingarray = array( - "uid" => $user['uid'], - "dateline" => TIME_NOW, - "code" => $user['activationcode'], - "type" => "p" - ); - $db->insert_query("awaitingactivation", $awaitingarray); - $username = $user['username']; - $email = $user['email']; - $activationcode = $user['activationcode']; - $emailsubject = $lang->sprintf($lang->emailsubject_lostpw, $mybb->settings['bbname']); - switch($mybb->settings['username_method']) - { - case 0: - $emailmessage = $lang->sprintf($lang->email_lostpw, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); - break; - case 1: - $emailmessage = $lang->sprintf($lang->email_lostpw1, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); - break; - case 2: - $emailmessage = $lang->sprintf($lang->email_lostpw2, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); - break; - default: - $emailmessage = $lang->sprintf($lang->email_lostpw, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); - break; - } - my_mail($email, $emailsubject, $emailmessage); - } - } - $plugins->run_hooks("member_do_lostpw_end"); - - redirect("index.php", $lang->redirect_lostpwsent, "", true); -} - -if($mybb->input['action'] == "resetpassword") -{ - $plugins->run_hooks("member_resetpassword_start"); - - if(isset($mybb->input['username'])) - { - $mybb->input['username'] = $mybb->get_input('username'); - $options = array( - 'username_method' => $mybb->settings['username_method'], - 'fields' => '*', - ); - $user = get_user_by_username($mybb->input['username'], $options); - if(!$user) - { - switch($mybb->settings['username_method']) - { - case 0: - error($lang->error_invalidpworusername); - break; - case 1: - error($lang->error_invalidpworusername1); - break; - case 2: - error($lang->error_invalidpworusername2); - break; - default: - error($lang->error_invalidpworusername); - break; - } - } - } - else - { - $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); - } - - if(isset($mybb->input['code']) && $user) - { - $query = $db->simple_select("awaitingactivation", "code", "uid='".$user['uid']."' AND type='p'"); - $activationcode = $db->fetch_field($query, 'code'); - $now = TIME_NOW; - if(!$activationcode || $activationcode !== $mybb->get_input('code')) - { - error($lang->error_badlostpwcode); - } - $db->delete_query("awaitingactivation", "uid='".$user['uid']."' AND type='p'"); - $username = $user['username']; - - // Generate a new password, then update it - $password_length = (int)$mybb->settings['minpasswordlength']; - - if($password_length < 8) - { - $password_length = min(8, (int)$mybb->settings['maxpasswordlength']); - } - - // Set up user handler. - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('update'); - - while(!$userhandler->verify_password()) - { - $password = random_str($password_length, $mybb->settings['requirecomplexpasswords']); - - $userhandler->set_data(array( - 'uid' => $user['uid'], - 'username' => $user['username'], - 'email' => $user['email'], - 'password' => $password - )); - - $userhandler->set_validated(true); - $userhandler->errors = array(); - } - - $userhandler->update_user(); - - $logindetails = array( - 'salt' => $userhandler->data['salt'], - 'password' => $userhandler->data['saltedpw'], - 'loginkey' => $userhandler->data['loginkey'], - ); - - $email = $user['email']; - - $plugins->run_hooks("member_resetpassword_process"); - - $emailsubject = $lang->sprintf($lang->emailsubject_passwordreset, $mybb->settings['bbname']); - $emailmessage = $lang->sprintf($lang->email_passwordreset, $username, $mybb->settings['bbname'], $password); - my_mail($email, $emailsubject, $emailmessage); - - $plugins->run_hooks("member_resetpassword_reset"); - - error($lang->redirect_passwordreset); - } - else - { - $plugins->run_hooks("member_resetpassword_form"); - - switch($mybb->settings['username_method']) - { - case 0: - $lang_username = $lang->username; - break; - case 1: - $lang_username = $lang->username1; - break; - case 2: - $lang_username = $lang->username2; - break; - default: - $lang_username = $lang->username; - break; - } - - $code = $mybb->get_input('code'); - - if(!isset($user['username'])) - { - $user['username'] = ''; - } - $user['username'] = htmlspecialchars_uni($user['username']); - - eval("\$activate = \"".$templates->get("member_resetpassword")."\";"); - output_page($activate); - } -} - -$do_captcha = $correct = false; -$inline_errors = ""; -if($mybb->input['action'] == "do_login" && $mybb->request_method == "post") -{ - $plugins->run_hooks("member_do_login_start"); - - // Is a fatal call if user has had too many tries - $errors = array(); - $logins = login_attempt_check(); - - require_once MYBB_ROOT."inc/datahandlers/login.php"; - $loginhandler = new LoginDataHandler("get"); - - if($mybb->get_input('quick_password') && $mybb->get_input('quick_username')) - { - $mybb->input['password'] = $mybb->get_input('quick_password'); - $mybb->input['username'] = $mybb->get_input('quick_username'); - $mybb->input['remember'] = $mybb->get_input('quick_remember'); - } - - $user = array( - 'username' => $mybb->get_input('username'), - 'password' => $mybb->get_input('password'), - 'remember' => $mybb->get_input('remember'), - 'imagestring' => $mybb->get_input('imagestring') - ); - - $options = array( - 'fields' => 'loginattempts', - 'username_method' => (int)$mybb->settings['username_method'], - ); - - $user_loginattempts = get_user_by_username($user['username'], $options); - $user['loginattempts'] = (int)$user_loginattempts['loginattempts']; - - $loginhandler->set_data($user); - $validated = $loginhandler->validate_login(); - - if(!$validated) - { - $mybb->input['action'] = "login"; - $mybb->request_method = "get"; - - my_setcookie('loginattempts', $logins + 1); - $db->update_query("users", array('loginattempts' => 'loginattempts+1'), "uid='".(int)$loginhandler->login_data['uid']."'", 1, true); - - $errors = $loginhandler->get_friendly_errors(); - - $user['loginattempts'] = (int)$loginhandler->login_data['loginattempts']; - - // If we need a captcha set it here - if($mybb->settings['failedcaptchalogincount'] > 0 && ($user['loginattempts'] > $mybb->settings['failedcaptchalogincount'] || (int)$mybb->cookies['loginattempts'] > $mybb->settings['failedcaptchalogincount'])) - { - $do_captcha = true; - $correct = $loginhandler->captcha_verified; - } - } - else if($validated && $loginhandler->captcha_verified == true) - { - // Successful login - if($loginhandler->login_data['coppauser']) - { - error($lang->error_awaitingcoppa); - } - - $loginhandler->complete_login(); - - $plugins->run_hooks("member_do_login_end"); - - $mybb->input['url'] = $mybb->get_input('url'); - - if(!empty($mybb->input['url']) && my_strpos(basename($mybb->input['url']), 'member.php') === false && !preg_match('#^javascript:#i', $mybb->input['url'])) - { - if((my_strpos(basename($mybb->input['url']), 'newthread.php') !== false || my_strpos(basename($mybb->input['url']), 'newreply.php') !== false) && my_strpos($mybb->input['url'], '&processed=1') !== false) - { - $mybb->input['url'] = str_replace('&processed=1', '', $mybb->input['url']); - } - - $mybb->input['url'] = str_replace('&', '&', $mybb->input['url']); - - // Redirect to the URL if it is not member.php - redirect($mybb->input['url'], $lang->redirect_loggedin); - } - else - { - - redirect("index.php", $lang->redirect_loggedin); - } - } - - $plugins->run_hooks("member_do_login_end"); -} - -if($mybb->input['action'] == "login") -{ - $plugins->run_hooks("member_login"); - - $member_loggedin_notice = ""; - if($mybb->user['uid'] != 0) - { - $mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); - $lang->already_logged_in = $lang->sprintf($lang->already_logged_in, build_profile_link($mybb->user['username'], $mybb->user['uid'])); - eval("\$member_loggedin_notice = \"".$templates->get("member_loggedin_notice")."\";"); - } - - // Checks to make sure the user can login; they haven't had too many tries at logging in. - // Is a fatal call if user has had too many tries - login_attempt_check(); - - // Redirect to the page where the user came from, but not if that was the login page. - if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], "action=login") === false) - { - $redirect_url = htmlentities($_SERVER['HTTP_REFERER']); - } - else - { - $redirect_url = ''; - } - - $captcha = ''; - // Show captcha image for guests if enabled and only if we have to do - if($mybb->settings['captchaimage'] && $do_captcha == true) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $login_captcha = new captcha(false, "post_captcha"); - - if($login_captcha->type == 1) - { - if(!$correct) - { - $login_captcha->build_captcha(); - } - else - { - $captcha = $login_captcha->build_hidden_captcha(); - } - } - elseif($login_captcha->type == 2 || $login_captcha->type == 4) - { - $login_captcha->build_recaptcha(); - } - - if($login_captcha->html) - { - $captcha = $login_captcha->html; - } - } - - $username = ""; - $password = ""; - if(isset($mybb->input['username']) && $mybb->request_method == "post") - { - $username = htmlspecialchars_uni($mybb->get_input('username')); - } - - if(isset($mybb->input['password']) && $mybb->request_method == "post") - { - $password = htmlspecialchars_uni($mybb->get_input('password')); - } - - if(!empty($errors)) - { - $mybb->input['action'] = "login"; - $mybb->request_method = "get"; - - $inline_errors = inline_error($errors); - } - - switch($mybb->settings['username_method']) - { - case 1: - $lang->username = $lang->username1; - break; - case 2: - $lang->username = $lang->username2; - break; - default: - break; - } - - $plugins->run_hooks("member_login_end"); - - eval("\$login = \"".$templates->get("member_login")."\";"); - output_page($login); -} - -if($mybb->input['action'] == "logout") -{ - $plugins->run_hooks("member_logout_start"); - - if(!$mybb->user['uid']) - { - redirect("index.php", $lang->redirect_alreadyloggedout); - } - - // Check session ID if we have one - if(isset($mybb->input['sid']) && $mybb->get_input('sid') !== $session->sid) - { - error($lang->error_notloggedout); - } - // Otherwise, check logoutkey - else if(!isset($mybb->input['sid']) && $mybb->get_input('logoutkey') !== $mybb->user['logoutkey']) - { - error($lang->error_notloggedout); - } - - my_unsetcookie("mybbuser"); - my_unsetcookie("sid"); - - if($mybb->user['uid']) - { - $time = TIME_NOW; - // Run this after the shutdown query from session system - $db->shutdown_query("UPDATE ".TABLE_PREFIX."users SET lastvisit='{$time}', lastactive='{$time}' WHERE uid='{$mybb->user['uid']}'"); - $db->delete_query("sessions", "sid = '{$session->sid}'"); - } - - $plugins->run_hooks("member_logout_end"); - - redirect("index.php", $lang->redirect_loggedout); -} - -if($mybb->input['action'] == "viewnotes") -{ - $uid = $mybb->get_input('uid', MyBB::INPUT_INT); - $user = get_user($uid); - - // Make sure we are looking at a real user here. - if(!$user) - { - error($lang->error_nomember); - } - - if($mybb->user['uid'] == 0 || $mybb->usergroup['canmodcp'] != 1) - { - error_no_permission(); - } - - $user['username'] = htmlspecialchars_uni($user['username']); - $lang->view_notes_for = $lang->sprintf($lang->view_notes_for, $user['username']); - - $user['usernotes'] = nl2br(htmlspecialchars_uni($user['usernotes'])); - - $plugins->run_hooks('member_viewnotes'); - - eval("\$viewnotes = \"".$templates->get("member_viewnotes", 1, 0)."\";"); - echo $viewnotes; - exit; -} - -if($mybb->input['action'] == "profile") -{ - $plugins->run_hooks("member_profile_start"); - - if($mybb->usergroup['canviewprofiles'] == 0) - { - error_no_permission(); - } - - $uid = $mybb->get_input('uid', MyBB::INPUT_INT); - if($uid) - { - $memprofile = get_user($uid); - } - elseif($mybb->user['uid']) - { - $memprofile = $mybb->user; - } - else - { - $memprofile = false; - } - - if(!$memprofile) - { - error($lang->error_nomember); - } - - $uid = $memprofile['uid']; - - $me_username = $memprofile['username']; - $memprofile['username'] = htmlspecialchars_uni($memprofile['username']); - $lang->profile = $lang->sprintf($lang->profile, $memprofile['username']); - - // Get member's permissions - $memperms = user_permissions($memprofile['uid']); - - $lang->nav_profile = $lang->sprintf($lang->nav_profile, $memprofile['username']); - add_breadcrumb($lang->nav_profile); - - $lang->users_forum_info = $lang->sprintf($lang->users_forum_info, $memprofile['username']); - $lang->users_contact_details = $lang->sprintf($lang->users_contact_details, $memprofile['username']); - $lang->send_pm = $lang->sprintf($lang->send_pm, $memprofile['username']); - $lang->away_note = $lang->sprintf($lang->away_note, $memprofile['username']); - $lang->users_additional_info = $lang->sprintf($lang->users_additional_info, $memprofile['username']); - $lang->users_signature = $lang->sprintf($lang->users_signature, $memprofile['username']); - $lang->send_user_email = $lang->sprintf($lang->send_user_email, $memprofile['username']); - - $useravatar = format_avatar($memprofile['avatar'], $memprofile['avatardimensions']); - eval("\$avatar = \"".$templates->get("member_profile_avatar")."\";"); - - $website = $sendemail = $sendpm = $contact_details = ''; - - if(my_validate_url($memprofile['website']) && !is_member($mybb->settings['hidewebsite']) && $memperms['canchangewebsite'] == 1) - { - $memprofile['website'] = htmlspecialchars_uni($memprofile['website']); - $bgcolor = alt_trow(); - eval("\$website = \"".$templates->get("member_profile_website")."\";"); - } - - if($memprofile['hideemail'] != 1 && (my_strpos(",".$memprofile['ignorelist'].",", ",".$mybb->user['uid'].",") === false || $mybb->usergroup['cansendemailoverride'] != 0)) - { - $bgcolor = alt_trow(); - eval("\$sendemail = \"".$templates->get("member_profile_email")."\";"); - } - - if($mybb->settings['enablepms'] != 0 && (($memprofile['receivepms'] != 0 && $memperms['canusepms'] != 0 && my_strpos(",".$memprofile['ignorelist'].",", ",".$mybb->user['uid'].",") === false) || $mybb->usergroup['canoverridepm'] == 1)) - { - $bgcolor = alt_trow(); - eval('$sendpm = "'.$templates->get("member_profile_pm").'";'); - } - - $contact_fields = array(); - $any_contact_field = false; - foreach(array('icq', 'aim', 'yahoo', 'skype', 'google') as $field) - { - $contact_fields[$field] = ''; - $settingkey = 'allow'.$field.'field'; - - if(!empty($memprofile[$field]) && is_member($mybb->settings[$settingkey], array('usergroup' => $memprofile['usergroup'], 'additionalgroups' => $memprofile['additionalgroups']))) - { - $any_contact_field = true; - - if($field == 'icq') - { - $memprofile[$field] = (int)$memprofile[$field]; - } - else - { - $memprofile[$field] = htmlspecialchars_uni($memprofile[$field]); - } - $tmpl = 'member_profile_contact_fields_'.$field; - - $bgcolors[$field] = alt_trow(); - eval('$contact_fields[\''.$field.'\'] = "'.$templates->get($tmpl).'";'); - } - } - - if($any_contact_field || $sendemail || $sendpm || $website) - { - eval('$contact_details = "'.$templates->get("member_profile_contact_details").'";'); - } - - $signature = ''; - if($memprofile['signature'] && ($memprofile['suspendsignature'] == 0 || $memprofile['suspendsigtime'] < TIME_NOW) && !is_member($mybb->settings['hidesignatures']) && $memperms['canusesig'] && $memperms['canusesigxposts'] <= $memprofile['postnum']) - { - $sig_parser = array( - "allow_html" => $mybb->settings['sightml'], - "allow_mycode" => $mybb->settings['sigmycode'], - "allow_smilies" => $mybb->settings['sigsmilies'], - "allow_imgcode" => $mybb->settings['sigimgcode'], - "me_username" => $me_username, - "filter_badwords" => 1 - ); - - if($memperms['signofollow']) - { - $sig_parser['nofollow_on'] = 1; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $sig_parser['allow_imgcode'] = 0; - } - - $memprofile['signature'] = $parser->parse_message($memprofile['signature'], $sig_parser); - eval("\$signature = \"".$templates->get("member_profile_signature")."\";"); - } - - $daysreg = (TIME_NOW - $memprofile['regdate']) / (24*3600); - - if($daysreg < 1) - { - $daysreg = 1; - } - - $stats = $cache->read("stats"); - - // Format post count, per day count and percent of total - $ppd = $memprofile['postnum'] / $daysreg; - $ppd = round($ppd, 2); - if($ppd > $memprofile['postnum']) - { - $ppd = $memprofile['postnum']; - } - - $numposts = $stats['numposts']; - if($numposts == 0) - { - $post_percent = "0"; - } - else - { - $post_percent = $memprofile['postnum']*100/$numposts; - $post_percent = round($post_percent, 2); - } - - if($post_percent > 100) - { - $post_percent = 100; - } - - // Format thread count, per day count and percent of total - $tpd = $memprofile['threadnum'] / $daysreg; - $tpd = round($tpd, 2); - if($tpd > $memprofile['threadnum']) - { - $tpd = $memprofile['threadnum']; - } - - $numthreads = $stats['numthreads']; - if($numthreads == 0) - { - $thread_percent = "0"; - } - else - { - $thread_percent = $memprofile['threadnum']*100/$numthreads; - $thread_percent = round($thread_percent, 2); - } - - if($thread_percent > 100) - { - $thread_percent = 100; - } - - $findposts = $findthreads = ''; - if($mybb->usergroup['cansearch'] == 1) - { - eval("\$findposts = \"".$templates->get("member_profile_findposts")."\";"); - eval("\$findthreads = \"".$templates->get("member_profile_findthreads")."\";"); - } - - $awaybit = ''; - if($memprofile['away'] == 1 && $mybb->settings['allowaway'] != 0) - { - $lang->away_note = $lang->sprintf($lang->away_note, $memprofile['username']); - $awaydate = my_date($mybb->settings['dateformat'], $memprofile['awaydate']); - if(!empty($memprofile['awayreason'])) - { - $reason = $parser->parse_badwords($memprofile['awayreason']); - $awayreason = htmlspecialchars_uni($reason); - } - else - { - $awayreason = $lang->away_no_reason; - } - if($memprofile['returndate'] == '') - { - $returndate = "$lang->unknown"; - } - else - { - $returnhome = explode("-", $memprofile['returndate']); - - // PHP native date functions use integers so timestamps for years after 2038 will not work - // Thus we use adodb_mktime - if($returnhome[2] >= 2038) - { - require_once MYBB_ROOT."inc/functions_time.php"; - $returnmkdate = adodb_mktime(0, 0, 0, $returnhome[1], $returnhome[0], $returnhome[2]); - $returndate = my_date($mybb->settings['dateformat'], $returnmkdate, "", 1, true); - } - else - { - $returnmkdate = mktime(0, 0, 0, $returnhome[1], $returnhome[0], $returnhome[2]); - $returndate = my_date($mybb->settings['dateformat'], $returnmkdate); - } - - // If our away time has expired already, we should be back, right? - if($returnmkdate < TIME_NOW) - { - $db->update_query('users', array('away' => '0', 'awaydate' => '0', 'returndate' => '', 'awayreason' => ''), 'uid=\''.(int)$memprofile['uid'].'\''); - - // Update our status to "not away" - $memprofile['away'] = 0; - } - } - - // Check if our away status is set to 1, it may have been updated already (see a few lines above) - if($memprofile['away'] == 1) - { - eval("\$awaybit = \"".$templates->get("member_profile_away")."\";"); - } - } - - $memprofile['timezone'] = (float)$memprofile['timezone']; - - if($memprofile['dst'] == 1) - { - $memprofile['timezone']++; - if(my_substr($memprofile['timezone'], 0, 1) != "-") - { - $memprofile['timezone'] = "+{$memprofile['timezone']}"; - } - } - - $memregdate = my_date($mybb->settings['dateformat'], $memprofile['regdate']); - $memlocaldate = gmdate($mybb->settings['dateformat'], TIME_NOW + ($memprofile['timezone'] * 3600)); - $memlocaltime = gmdate($mybb->settings['timeformat'], TIME_NOW + ($memprofile['timezone'] * 3600)); - - $localtime = $lang->sprintf($lang->local_time_format, $memlocaldate, $memlocaltime); - - if($memprofile['lastactive']) - { - $memlastvisitdate = my_date($mybb->settings['dateformat'], $memprofile['lastactive']); - $memlastvisitsep = $lang->comma; - $memlastvisittime = my_date($mybb->settings['timeformat'], $memprofile['lastactive']); - } - else - { - $memlastvisitdate = $lang->lastvisit_never; - $memlastvisitsep = ''; - $memlastvisittime = ''; - } - - if($memprofile['birthday']) - { - $membday = explode("-", $memprofile['birthday']); - - if($memprofile['birthdayprivacy'] != 'none') - { - if($membday[0] && $membday[1] && $membday[2]) - { - $lang->membdayage = $lang->sprintf($lang->membdayage, get_age($memprofile['birthday'])); - - $bdayformat = fix_mktime($mybb->settings['dateformat'], $membday[2]); - $membday = mktime(0, 0, 0, $membday[1], $membday[0], $membday[2]); - $membday = date($bdayformat, $membday); - - $membdayage = $lang->membdayage; - } - elseif($membday[2]) - { - $membday = mktime(0, 0, 0, 1, 1, $membday[2]); - $membday = date("Y", $membday); - $membdayage = ''; - } - else - { - $membday = mktime(0, 0, 0, $membday[1], $membday[0], 0); - $membday = date("F j", $membday); - $membdayage = ''; - } - } - - if($memprofile['birthdayprivacy'] == 'age') - { - $membday = $lang->birthdayhidden; - } - else if($memprofile['birthdayprivacy'] == 'none') - { - $membday = $lang->birthdayhidden; - $membdayage = ''; - } - } - else - { - $membday = $lang->not_specified; - $membdayage = ''; - } - - if(!$memprofile['displaygroup']) - { - $memprofile['displaygroup'] = $memprofile['usergroup']; - } - - // Grab the following fields from the user's displaygroup - $displaygroupfields = array( - "title", - "usertitle", - "stars", - "starimage", - "image", - "usereputationsystem" - ); - $displaygroup = usergroup_displaygroup($memprofile['displaygroup']); - - // Get the user title for this user - unset($usertitle); - unset($stars); - $starimage = ''; - if(trim($memprofile['usertitle']) != '') - { - // User has custom user title - $usertitle = $memprofile['usertitle']; - } - elseif(trim($displaygroup['usertitle']) != '') - { - // User has group title - $usertitle = $displaygroup['usertitle']; - } - else - { - // No usergroup title so get a default one - $usertitles = $cache->read('usertitles'); - - if(is_array($usertitles)) - { - foreach($usertitles as $title) - { - if($memprofile['postnum'] >= $title['posts']) - { - $usertitle = $title['title']; - $stars = $title['stars']; - $starimage = $title['starimage']; - - break; - } - } - } - } - - $usertitle = htmlspecialchars_uni($usertitle); - - if($displaygroup['stars'] || $displaygroup['usertitle']) - { - // Set the number of stars if display group has constant number of stars - $stars = $displaygroup['stars']; - } - elseif(!$stars) - { - if(!is_array($usertitles)) - { - $usertitles = $cache->read('usertitles'); - } - - // This is for cases where the user has a title, but the group has no defined number of stars (use number of stars as per default usergroups) - if(is_array($usertitles)) - { - foreach($usertitles as $title) - { - if($memprofile['postnum'] >= $title['posts']) - { - $stars = $title['stars']; - $starimage = $title['starimage']; - break; - } - } - } - } - - $groupimage = ''; - if(!empty($displaygroup['image'])) - { - if(!empty($mybb->user['language'])) - { - $language = $mybb->user['language']; - } - else - { - $language = $mybb->settings['bblanguage']; - } - $displaygroup['image'] = str_replace("{lang}", $language, $displaygroup['image']); - $displaygroup['image'] = str_replace("{theme}", $theme['imgdir'], $displaygroup['image']); - eval("\$groupimage = \"".$templates->get("member_profile_groupimage")."\";"); - } - - if(empty($starimage)) - { - $starimage = $displaygroup['starimage']; - } - - if(!empty($starimage)) - { - // Only display stars if we have an image to use... - $starimage = str_replace("{theme}", $theme['imgdir'], $starimage); - $userstars = ''; - for($i = 0; $i < $stars; ++$i) - { - eval("\$userstars .= \"".$templates->get("member_profile_userstar", 1, 0)."\";"); - } - } - - // User is currently online and this user has permissions to view the user on the WOL - $timesearch = TIME_NOW - $mybb->settings['wolcutoffmins']*60; - $query = $db->simple_select("sessions", "location,nopermission", "uid='$uid' AND time>'{$timesearch}'", array('order_by' => 'time', 'order_dir' => 'DESC', 'limit' => 1)); - $session = $db->fetch_array($query); - - $online_status = ''; - if($memprofile['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $memprofile['uid'] == $mybb->user['uid']) - { - // Lastvisit - if($memprofile['lastactive']) - { - $memlastvisitsep = $lang->comma; - $memlastvisitdate = my_date('relative', $memprofile['lastactive']); - } - - // Time Online - $timeonline = $lang->none_registered; - if($memprofile['timeonline'] > 0) - { - $timeonline = nice_time($memprofile['timeonline']); - } - - // Online? - if(!empty($session)) - { - // Fetch their current location - $lang->load("online"); - require_once MYBB_ROOT."inc/functions_online.php"; - $activity = fetch_wol_activity($session['location'], $session['nopermission']); - $location = build_friendly_wol_location($activity); - $location_time = my_date($mybb->settings['timeformat'], $memprofile['lastactive']); - - eval("\$online_status = \"".$templates->get("member_profile_online")."\";"); - } - // User is offline - else - { - eval("\$online_status = \"".$templates->get("member_profile_offline")."\";"); - } - } - - if($memprofile['invisible'] == 1 && $mybb->usergroup['canviewwolinvis'] != 1 && $memprofile['uid'] != $mybb->user['uid']) - { - $memlastvisitsep = ''; - $memlastvisittime = ''; - $memlastvisitdate = $lang->lastvisit_never; - - if($memprofile['lastactive']) - { - // We have had at least some active time, hide it instead - $memlastvisitdate = $lang->lastvisit_hidden; - } - - $timeonline = $lang->timeonline_hidden; - } - - // Reset the background colours to keep it inline - $alttrow = 'trow1'; - - // Build Referral - $referrals = ''; - if($mybb->settings['usereferrals'] == 1) - { - $bg_color = alt_trow(); - - eval("\$referrals = \"".$templates->get("member_profile_referrals")."\";"); - } - - // Fetch the reputation for this user - $reputation = ''; - if($memperms['usereputationsystem'] == 1 && $displaygroup['usereputationsystem'] == 1 && $mybb->settings['enablereputation'] == 1) - { - $bg_color = alt_trow(); - $reputation = get_reputation($memprofile['reputation']); - - // If this user has permission to give reputations show the vote link - $vote_link = ''; - if($mybb->usergroup['cangivereputations'] == 1 && $memprofile['uid'] != $mybb->user['uid'] && ($mybb->settings['posrep'] || $mybb->settings['neurep'] || $mybb->settings['negrep'])) - { - eval("\$vote_link = \"".$templates->get("member_profile_reputation_vote")."\";"); - } - - eval("\$reputation = \"".$templates->get("member_profile_reputation")."\";"); - } - - $warning_level = ''; - if($mybb->settings['enablewarningsystem'] != 0 && $memperms['canreceivewarnings'] != 0 && ($mybb->usergroup['canwarnusers'] != 0 || ($mybb->user['uid'] == $memprofile['uid'] && $mybb->settings['canviewownwarning'] != 0))) - { - $bg_color = alt_trow(); - - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - - $warning_level = round($memprofile['warningpoints']/$mybb->settings['maxwarningpoints']*100); - - if($warning_level > 100) - { - $warning_level = 100; - } - - $warn_user = ''; - $warning_link = 'usercp.php'; - $warning_level = get_colored_warning_level($warning_level); - if($mybb->usergroup['canwarnusers'] != 0 && $memprofile['uid'] != $mybb->user['uid']) - { - eval("\$warn_user = \"".$templates->get("member_profile_warn")."\";"); - $warning_link = "warnings.php?uid={$memprofile['uid']}"; - } - - eval("\$warning_level = \"".$templates->get("member_profile_warninglevel")."\";"); - } - - $bgcolor = $alttrow = 'trow1'; - $customfields = $profilefields = ''; - - $query = $db->simple_select("userfields", "*", "ufid = '{$uid}'"); - $userfields = $db->fetch_array($query); - - // If this user is an Administrator or a Moderator then we wish to show all profile fields - $pfcache = $cache->read('profilefields'); - - if(is_array($pfcache)) - { - foreach($pfcache as $customfield) - { - if($mybb->usergroup['cancp'] != 1 && $mybb->usergroup['issupermod'] != 1 && $mybb->usergroup['canmodcp'] != 1 && !is_member($customfield['viewableby']) || !$customfield['profile']) - { - continue; - } - - $thing = explode("\n", $customfield['type'], "2"); - $type = trim($thing[0]); - - $customfieldval = $customfield_val = ''; - $field = "fid{$customfield['fid']}"; - - if(isset($userfields[$field])) - { - $useropts = explode("\n", $userfields[$field]); - $customfieldval = $comma = ''; - if(is_array($useropts) && ($type == "multiselect" || $type == "checkbox")) - { - foreach($useropts as $val) - { - if($val != '') - { - eval("\$customfield_val .= \"".$templates->get("member_profile_customfields_field_multi_item")."\";"); - } - } - if($customfield_val != '') - { - eval("\$customfieldval = \"".$templates->get("member_profile_customfields_field_multi")."\";"); - } - } - else - { - $parser_options = array( - "allow_html" => $customfield['allowhtml'], - "allow_mycode" => $customfield['allowmycode'], - "allow_smilies" => $customfield['allowsmilies'], - "allow_imgcode" => $customfield['allowimgcode'], - "allow_videocode" => $customfield['allowvideocode'], - #"nofollow_on" => 1, - "filter_badwords" => 1 - ); - - if($customfield['type'] == "textarea") - { - $parser_options['me_username'] = $memprofile['username']; - } - else - { - $parser_options['nl2br'] = 0; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_imgcode'] = 0; - } - - $customfieldval = $parser->parse_message($userfields[$field], $parser_options); - } - } - - if($customfieldval) - { - $customfield['name'] = htmlspecialchars_uni($customfield['name']); - eval("\$customfields .= \"".$templates->get("member_profile_customfields_field")."\";"); - $bgcolor = alt_trow(); - } - } - } - - if($customfields) - { - eval("\$profilefields = \"".$templates->get("member_profile_customfields")."\";"); - } - - $memprofile['postnum'] = my_number_format($memprofile['postnum']); - $lang->ppd_percent_total = $lang->sprintf($lang->ppd_percent_total, my_number_format($ppd), $post_percent); - - $memprofile['threadnum'] = my_number_format($memprofile['threadnum']); - $lang->tpd_percent_total = $lang->sprintf($lang->tpd_percent_total, my_number_format($tpd), $thread_percent); - - $formattedname = format_name($memprofile['username'], $memprofile['usergroup'], $memprofile['displaygroup']); - - $bannedbit = ''; - if($memperms['isbannedgroup'] == 1 && $mybb->usergroup['canbanusers'] == 1) - { - // Fetch details on their ban - $query = $db->simple_select('banned b LEFT JOIN '.TABLE_PREFIX.'users a ON (b.admin=a.uid)', 'b.*, a.username AS adminuser', "b.uid='{$uid}'", array('limit' => 1)); - $memban = $db->fetch_array($query); - - if($memban['reason']) - { - $memban['reason'] = htmlspecialchars_uni($parser->parse_badwords($memban['reason'])); - } - else - { - $memban['reason'] = $lang->na; - } - - if($memban['lifted'] == 'perm' || $memban['lifted'] == '' || $memban['bantime'] == 'perm' || $memban['bantime'] == '---') - { - $banlength = $lang->permanent; - $timeremaining = $lang->na; - } - else - { - // Set up the array of ban times. - $bantimes = fetch_ban_times(); - - $banlength = $bantimes[$memban['bantime']]; - $remaining = $memban['lifted']-TIME_NOW; - - $timeremaining = nice_time($remaining, array('short' => 1, 'seconds' => false)).""; - - $banned_class = ''; - if($remaining < 3600) - { - $banned_class = "high_banned"; - } - else if($remaining < 86400) - { - $banned_class = "moderate_banned"; - } - else if($remaining < 604800) - { - $banned_class = "low_banned"; - } - else - { - $banned_class = "normal_banned"; - } - - eval('$timeremaining = "'.$templates->get('member_profile_banned_remaining').'";'); - } - - $memban['adminuser'] = build_profile_link(htmlspecialchars_uni($memban['adminuser']), $memban['admin']); - - // Display a nice warning to the user - eval('$bannedbit = "'.$templates->get('member_profile_banned').'";'); - } - - $adminoptions = ''; - if($mybb->usergroup['cancp'] == 1 && $mybb->config['hide_admin_links'] != 1) - { - eval("\$adminoptions = \"".$templates->get("member_profile_adminoptions")."\";"); - } - - $modoptions = $viewnotes = $editnotes = $editprofile = $banuser = $manageuser = ''; - $can_purge_spammer = purgespammer_show($memprofile['postnum'], $memprofile['usergroup'], $memprofile['uid']); - if($mybb->usergroup['canmodcp'] == 1 || $can_purge_spammer) - { - if($mybb->usergroup['canuseipsearch'] == 1) - { - $memprofile['regip'] = my_inet_ntop($db->unescape_binary($memprofile['regip'])); - $memprofile['lastip'] = my_inet_ntop($db->unescape_binary($memprofile['lastip'])); - - eval("\$ipaddress = \"".$templates->get("member_profile_modoptions_ipaddress")."\";"); - } - - $memprofile['usernotes'] = nl2br(htmlspecialchars_uni($memprofile['usernotes'])); - - if(!empty($memprofile['usernotes'])) - { - if(strlen($memprofile['usernotes']) > 100) - { - eval("\$viewnotes = \"".$templates->get("member_profile_modoptions_viewnotes")."\";"); - $memprofile['usernotes'] = my_substr($memprofile['usernotes'], 0, 100)."... {$viewnotes}"; - } - } - else - { - $memprofile['usernotes'] = $lang->no_usernotes; - } - - if($mybb->usergroup['caneditprofiles'] == 1) - { - eval("\$editprofile = \"".$templates->get("member_profile_modoptions_editprofile")."\";"); - eval("\$editnotes = \"".$templates->get("member_profile_modoptions_editnotes")."\";"); - } - - if($mybb->usergroup['canbanusers'] == 1 && (!$memban['uid'] || $memban['uid'] && ($mybb->user['uid'] == $memban['admin']) || $mybb->usergroup['issupermod'] == 1 || $mybb->usergroup['cancp'] == 1)) - { - eval("\$banuser = \"".$templates->get("member_profile_modoptions_banuser")."\";"); - } - - if($can_purge_spammer) - { - eval("\$purgespammer = \"".$templates->get('member_profile_modoptions_purgespammer')."\";"); - } - - if(!empty($editprofile) || !empty($banuser) || !empty($purgespammer)) - { - eval("\$manageuser = \"".$templates->get("member_profile_modoptions_manageuser")."\";"); - } - - eval("\$modoptions = \"".$templates->get("member_profile_modoptions")."\";"); - } - - $add_remove_options = array(); - $buddy_options = $ignore_options = $report_options = ''; - if($mybb->user['uid'] != $memprofile['uid'] && $mybb->user['uid'] != 0) - { - $buddy_list = explode(',', $mybb->user['buddylist']); - $ignore_list = explode(',', $mybb->user['ignorelist']); - - if(in_array($uid, $buddy_list)) - { - $add_remove_options = array('url' => "usercp.php?action=do_editlists&delete={$uid}&my_post_key={$mybb->post_code}", 'class' => 'remove_buddy_button', 'lang' => $lang->remove_from_buddy_list); - } - else - { - $add_remove_options = array('url' => "usercp.php?action=do_editlists&add_username=".urlencode($memprofile['username'])."&my_post_key={$mybb->post_code}", 'class' => 'add_buddy_button', 'lang' => $lang->add_to_buddy_list); - } - - if(!in_array($uid, $ignore_list)) - { - eval("\$buddy_options = \"".$templates->get("member_profile_addremove")."\";"); // Add/Remove Buddy - } - - if(in_array($uid, $ignore_list)) - { - $add_remove_options = array('url' => "usercp.php?action=do_editlists&manage=ignored&delete={$uid}&my_post_key={$mybb->post_code}", 'class' => 'remove_ignore_button', 'lang' => $lang->remove_from_ignore_list); - } - else - { - $add_remove_options = array('url' => "usercp.php?action=do_editlists&manage=ignored&add_username=".urlencode($memprofile['username'])."&my_post_key={$mybb->post_code}", 'class' => 'add_ignore_button', 'lang' => $lang->add_to_ignore_list); - } - - if(!in_array($uid, $buddy_list)) - { - eval("\$ignore_options = \"".$templates->get("member_profile_addremove")."\";"); // Add/Remove Ignore - } - - if(isset($memperms['canbereported']) && $memperms['canbereported'] == 1) - { - $add_remove_options = array('url' => "javascript:Report.reportUser({$memprofile['uid']});", 'class' => 'report_user_button', 'lang' => $lang->report_user); - eval("\$report_options = \"".$templates->get("member_profile_addremove")."\";"); // Report User - } - } - - $plugins->run_hooks("member_profile_end"); - - eval("\$profile = \"".$templates->get("member_profile")."\";"); - output_page($profile); -} - -if($mybb->input['action'] == "do_emailuser" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("member_do_emailuser_start"); - - // Guests or those without permission can't email other users - if($mybb->usergroup['cansendemail'] == 0) - { - error_no_permission(); - } - - // Check group limits - if($mybb->usergroup['maxemails'] > 0) - { - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $query = $db->simple_select("maillogs", "COUNT(*) AS sent_count", "{$user_check} AND dateline >= '".(TIME_NOW - (60*60*24))."'"); - $sent_count = $db->fetch_field($query, "sent_count"); - if($sent_count >= $mybb->usergroup['maxemails']) - { - $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']); - error($lang->error_max_emails_day); - } - } - - // Check email flood control - if($mybb->usergroup['emailfloodtime'] > 0) - { - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $timecut = TIME_NOW-$mybb->usergroup['emailfloodtime']*60; - - $query = $db->simple_select("maillogs", "mid, dateline", "{$user_check} AND dateline > '{$timecut}'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_email = $db->fetch_array($query); - - // Users last email was within the flood time, show the error - if($last_email['mid']) - { - $remaining_time = ($mybb->usergroup['emailfloodtime']*60)-(TIME_NOW-$last_email['dateline']); - - if($remaining_time == 1) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_second, $mybb->usergroup['emailfloodtime']); - } - elseif($remaining_time < 60) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_seconds, $mybb->usergroup['emailfloodtime'], $remaining_time); - } - elseif($remaining_time > 60 && $remaining_time < 120) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_minute, $mybb->usergroup['emailfloodtime']); - } - else - { - $remaining_time_minutes = ceil($remaining_time/60); - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_minutes, $mybb->usergroup['emailfloodtime'], $remaining_time_minutes); - } - - error($lang->error_emailflooding); - } - } - - $query = $db->simple_select("users", "uid, username, email, hideemail", "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); - $to_user = $db->fetch_array($query); - - if(!$to_user['username']) - { - error($lang->error_invalidusername); - } - - if($to_user['hideemail'] != 0) - { - error($lang->error_hideemail); - } - - $errors = array(); - - if($mybb->user['uid']) - { - $mybb->input['fromemail'] = $mybb->user['email']; - $mybb->input['fromname'] = $mybb->user['username']; - } - - if(!validate_email_format($mybb->input['fromemail'])) - { - $errors[] = $lang->error_invalidfromemail; - } - - if(empty($mybb->input['fromname'])) - { - $errors[] = $lang->error_noname; - } - - if(empty($mybb->input['subject'])) - { - $errors[] = $lang->error_no_email_subject; - } - - if(empty($mybb->input['message'])) - { - $errors[] = $lang->error_no_email_message; - } - - if($mybb->settings['captchaimage'] && $mybb->user['uid'] == 0) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $captcha = new captcha; - - if($captcha->validate_captcha() == false) - { - // CAPTCHA validation failed - foreach($captcha->get_errors() as $error) - { - $errors[] = $error; - } - } - } - - if(count($errors) == 0) - { - if($mybb->settings['mail_handler'] == 'smtp') - { - $from = $mybb->input['fromemail']; - } - else - { - $from = "{$mybb->input['fromname']} <{$mybb->input['fromemail']}>"; - } - - $message = $lang->sprintf($lang->email_emailuser, $to_user['username'], $mybb->input['fromname'], $mybb->settings['bbname'], $mybb->settings['bburl'], $mybb->get_input('message')); - my_mail($to_user['email'], $mybb->get_input('subject'), $message, $from, "", "", false, "text", "", $mybb->input['fromemail']); - - if($mybb->settings['mail_logging'] > 0) - { - // Log the message - $log_entry = array( - "subject" => $db->escape_string($mybb->get_input('subject')), - "message" => $db->escape_string($mybb->get_input('message')), - "dateline" => TIME_NOW, - "fromuid" => $mybb->user['uid'], - "fromemail" => $db->escape_string($mybb->input['fromemail']), - "touid" => $to_user['uid'], - "toemail" => $db->escape_string($to_user['email']), - "tid" => 0, - "ipaddress" => $db->escape_binary($session->packedip), - "type" => 1 - ); - $db->insert_query("maillogs", $log_entry); - } - - $plugins->run_hooks("member_do_emailuser_end"); - - redirect(get_profile_link($to_user['uid']), $lang->redirect_emailsent); - } - else - { - $mybb->input['action'] = "emailuser"; - } -} - -if($mybb->input['action'] == "emailuser") -{ - $plugins->run_hooks("member_emailuser_start"); - - // Guests or those without permission can't email other users - if($mybb->usergroup['cansendemail'] == 0) - { - error_no_permission(); - } - - // Check group limits - if($mybb->usergroup['maxemails'] > 0) - { - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $query = $db->simple_select("maillogs", "COUNT(*) AS sent_count", "{$user_check} AND dateline >= '".(TIME_NOW - (60*60*24))."'"); - $sent_count = $db->fetch_field($query, "sent_count"); - if($sent_count >= $mybb->usergroup['maxemails']) - { - $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']); - error($lang->error_max_emails_day); - } - } - - // Check email flood control - if($mybb->usergroup['emailfloodtime'] > 0) - { - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $timecut = TIME_NOW-$mybb->usergroup['emailfloodtime']*60; - - $query = $db->simple_select("maillogs", "mid, dateline", "{$user_check} AND dateline > '{$timecut}'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_email = $db->fetch_array($query); - - // Users last email was within the flood time, show the error - if($last_email['mid']) - { - $remaining_time = ($mybb->usergroup['emailfloodtime']*60)-(TIME_NOW-$last_email['dateline']); - - if($remaining_time == 1) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_second, $mybb->usergroup['emailfloodtime']); - } - elseif($remaining_time < 60) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_seconds, $mybb->usergroup['emailfloodtime'], $remaining_time); - } - elseif($remaining_time > 60 && $remaining_time < 120) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_minute, $mybb->usergroup['emailfloodtime']); - } - else - { - $remaining_time_minutes = ceil($remaining_time/60); - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_minutes, $mybb->usergroup['emailfloodtime'], $remaining_time_minutes); - } - - error($lang->error_emailflooding); - } - } - - $query = $db->simple_select("users", "uid, username, email, hideemail, ignorelist", "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); - $to_user = $db->fetch_array($query); - - $to_user['username'] = htmlspecialchars_uni($to_user['username']); - $lang->email_user = $lang->sprintf($lang->email_user, $to_user['username']); - - if(!$to_user['uid']) - { - error($lang->error_invaliduser); - } - - if($to_user['hideemail'] != 0) - { - error($lang->error_hideemail); - } - - if($to_user['ignorelist'] && (my_strpos(",".$to_user['ignorelist'].",", ",".$mybb->user['uid'].",") !== false && $mybb->usergroup['cansendemailoverride'] != 1)) - { - error_no_permission(); - } - - if(isset($errors) && count($errors) > 0) - { - $errors = inline_error($errors); - $fromname = htmlspecialchars_uni($mybb->get_input('fromname')); - $fromemail = htmlspecialchars_uni($mybb->get_input('fromemail')); - $subject = htmlspecialchars_uni($mybb->get_input('subject')); - $message = htmlspecialchars_uni($mybb->get_input('message')); - } - else - { - $errors = ''; - $fromname = ''; - $fromemail = ''; - $subject = ''; - $message = ''; - } - - // Generate CAPTCHA? - if($mybb->settings['captchaimage'] && $mybb->user['uid'] == 0) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $post_captcha = new captcha(true, "post_captcha"); - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } - } - else - { - $captcha = ''; - } - - $from_email = ''; - if($mybb->user['uid'] == 0) - { - eval("\$from_email = \"".$templates->get("member_emailuser_guest")."\";"); - } - - $plugins->run_hooks("member_emailuser_end"); - - eval("\$emailuser = \"".$templates->get("member_emailuser")."\";"); - output_page($emailuser); -} - -if(!$mybb->input['action']) -{ - header("Location: index.php"); -} diff --git a/html/forums/memberlist.php b/html/forums/memberlist.php deleted file mode 100644 index a690000..0000000 --- a/html/forums/memberlist.php +++ /dev/null @@ -1,459 +0,0 @@ -load("memberlist"); - -if($mybb->settings['enablememberlist'] == 0) -{ - error($lang->memberlist_disabled); -} - -$plugins->run_hooks("memberlist_start"); - -add_breadcrumb($lang->nav_memberlist, "memberlist.php"); - -if($mybb->usergroup['canviewmemberlist'] == 0) -{ - error_no_permission(); -} - -// Showing advanced search page? -if($mybb->get_input('action') == "search") -{ - $plugins->run_hooks("memberlist_search"); - add_breadcrumb($lang->nav_memberlist_search); - - $contact_fields = array(); - foreach(array('aim', 'skype', 'google', 'yahoo', 'icq') as $field) - { - $contact_fields[$field] = ''; - $settingkey = 'allow'.$field.'field'; - - if($mybb->settings[$settingkey] != '' && is_member($mybb->settings[$settingkey], array('usergroup' => $mybb->usergroup['usergroup'], 'additionalgroups' => $mybb->usergroup['additionalgroups']))) - { - $tmpl = 'memberlist_search_'.$field; - - $lang_string = 'search_'.$field; - $lang_string = $lang->{$lang_string}; - - $bgcolors[$field] = alt_trow(); - eval('$contact_fields[\''.$field.'\'] = "'.$templates->get('memberlist_search_contact_field').'";'); - } - } - - eval("\$search_page = \"".$templates->get("memberlist_search")."\";"); - output_page($search_page); -} -else -{ - $colspan = 6; - $search_url = ''; - - // Incoming sort field? - if(isset($mybb->input['sort'])) - { - $mybb->input['sort'] = strtolower($mybb->get_input('sort')); - } - else - { - $mybb->input['sort'] = $mybb->settings['default_memberlist_sortby']; - } - - $sort_selected = array( - 'regdate' => '', - 'lastvisit' => '', - 'reputation' => '', - 'postnum' => '', - 'referrals' => '', - 'username' => '' - ); - - switch($mybb->input['sort']) - { - case "regdate": - $sort_field = "u.regdate"; - break; - case "lastvisit": - $sort_field = "u.lastactive"; - break; - case "reputation": - $sort_field = "u.reputation"; - break; - case "postnum": - $sort_field = "u.postnum"; - break; - case "threadnum": - $sort_field = "u.threadnum"; - break; - case "referrals": - $sort_field = "u.referrals"; - break; - default: - $sort_field = "u.username"; - $mybb->input['sort'] = 'username'; - break; - } - $sort_selected[$mybb->input['sort']] = " selected=\"selected\""; - - // Incoming sort order? - if(isset($mybb->input['order'])) - { - $mybb->input['order'] = strtolower($mybb->input['order']); - } - else - { - $mybb->input['order'] = strtolower($mybb->settings['default_memberlist_order']); - } - - $order_check = array('ascending' => '', 'descending' => ''); - if($mybb->input['order'] == "ascending" || (!$mybb->input['order'] && $mybb->input['sort'] == 'username')) - { - $sort_order = "ASC"; - $sortordernow = "ascending"; - $oppsort = $lang->desc; - $oppsortnext = "descending"; - $mybb->input['order'] = "ascending"; - } - else - { - $sort_order = "DESC"; - $sortordernow = "descending"; - $oppsort = $lang->asc; - $oppsortnext = "ascending"; - $mybb->input['order'] = "descending"; - } - $order_check[$mybb->input['order']] = " checked=\"checked\""; - - // Incoming results per page? - $mybb->input['perpage'] = $mybb->get_input('perpage', MyBB::INPUT_INT); - if($mybb->input['perpage'] > 0 && $mybb->input['perpage'] <= 500) - { - $per_page = $mybb->input['perpage']; - } - else if($mybb->settings['membersperpage']) - { - $per_page = $mybb->input['perpage'] = (int)$mybb->settings['membersperpage']; - } - else - { - $per_page = $mybb->input['perpage'] = 20; - } - - $search_query = '1=1'; - $search_url = ""; - - // Limiting results to a certain letter - if(isset($mybb->input['letter'])) - { - $letter = chr(ord($mybb->get_input('letter'))); - if($mybb->input['letter'] == -1) - { - $search_query .= " AND u.username NOT REGEXP('[a-zA-Z]')"; - } - else if(strlen($letter) == 1) - { - $search_query .= " AND u.username LIKE '".$db->escape_string_like($letter)."%'"; - } - $search_url .= "&letter={$letter}"; - } - - // Searching for a matching username - $search_username = htmlspecialchars_uni(trim($mybb->get_input('username'))); - if($search_username != '') - { - $username_like_query = $db->escape_string_like($search_username); - - // Name begins with - if($mybb->input['username_match'] == "begins") - { - $search_query .= " AND u.username LIKE '".$username_like_query."%'"; - $search_url .= "&username_match=begins"; - } - // Just contains - else - { - $search_query .= " AND u.username LIKE '%".$username_like_query."%'"; - } - - $search_url .= "&username=".urlencode($search_username); - } - - // Website contains - $mybb->input['website'] = trim($mybb->get_input('website')); - $search_website = htmlspecialchars_uni($mybb->input['website']); - if(trim($mybb->input['website'])) - { - $search_query .= " AND u.website LIKE '%".$db->escape_string_like($mybb->input['website'])."%'"; - $search_url .= "&website=".urlencode($mybb->input['website']); - } - - // Search by contact field input - foreach(array('aim', 'icq', 'google', 'skype', 'yahoo') as $cfield) - { - $csetting = 'allow'.$cfield.'field'; - $mybb->input[$cfield] = trim($mybb->get_input($cfield)); - if($mybb->input[$cfield] && $mybb->settings[$csetting] != '') - { - if($mybb->settings[$csetting] != -1) - { - $gids = explode(',', (string)$mybb->settings[$csetting]); - - $search_query .= " AND ("; - $or = ''; - foreach($gids as $gid) - { - $gid = (int)$gid; - $search_query .= $or.'u.usergroup=\''.$gid.'\''; - switch($db->type) - { - case 'pgsql': - case 'sqlite': - $search_query .= " OR ','||u.additionalgroups||',' LIKE '%,{$gid},%'"; - break; - default: - $search_query .= " OR CONCAT(',',u.additionalgroups,',') LIKE '%,{$gid},%'"; - break; - } - $or = ' OR '; - } - $search_query .= ")"; - } - if($cfield == 'icq') - { - $search_query .= " AND u.{$cfield} LIKE '%".(int)$mybb->input[$cfield]."%'"; - } - else - { - $search_query .= " AND u.{$cfield} LIKE '%".$db->escape_string_like($mybb->input[$cfield])."%'"; - } - $search_url .= "&{$cfield}=".urlencode($mybb->input[$cfield]); - } - } - - $usergroups_cache = $cache->read('usergroups'); - - $group = array(); - foreach($usergroups_cache as $gid => $groupcache) - { - if($groupcache['showmemberlist'] == 0) - { - $group[] = (int)$gid; - } - } - - if(is_array($group) && !empty($group)) - { - $hiddengroup = implode(',', $group); - - $search_query .= " AND u.usergroup NOT IN ({$hiddengroup})"; - - foreach($group as $hidegid) - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $search_query .= " AND ','||u.additionalgroups||',' NOT LIKE '%,{$hidegid},%'"; - break; - default: - $search_query .= " AND CONCAT(',',u.additionalgroups,',') NOT LIKE '%,{$hidegid},%'"; - break; - } - } - } - - $sorturl = htmlspecialchars_uni("memberlist.php?perpage={$mybb->input['perpage']}{$search_url}"); - $search_url = htmlspecialchars_uni("memberlist.php?sort={$mybb->input['sort']}&order={$mybb->input['order']}&perpage={$mybb->input['perpage']}{$search_url}"); - - $plugins->run_hooks('memberlist_intermediate'); - - $query = $db->simple_select("users u", "COUNT(*) AS users", "{$search_query}"); - $num_users = $db->fetch_field($query, "users"); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - if($page && $page > 0) - { - $start = ($page - 1) * $per_page; - } - else - { - $start = 0; - $page = 1; - } - - $sort = htmlspecialchars_uni($mybb->input['sort']); - eval("\$orderarrow['{$sort}'] = \"".$templates->get("memberlist_orderarrow")."\";"); - - // Referral? - if($mybb->settings['usereferrals'] == 1) - { - $colspan = 7; - eval("\$referral_header = \"".$templates->get("memberlist_referrals")."\";"); - } - - $multipage = multipage($num_users, $per_page, $page, $search_url); - - // Cache a few things - $usertitles = $cache->read('usertitles'); - $usertitles_cache = array(); - foreach($usertitles as $usertitle) - { - $usertitles_cache[$usertitle['posts']] = $usertitle; - } - $users = ''; - $query = $db->query(" - SELECT u.*, f.* - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - WHERE {$search_query} - ORDER BY {$sort_field} {$sort_order} - LIMIT {$start}, {$per_page} - "); - while($user = $db->fetch_array($query)) - { - $user = $plugins->run_hooks("memberlist_user", $user); - - $alt_bg = alt_trow(); - - $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); - - $user['profilelink'] = build_profile_link($user['username'], $user['uid']); - - // Get the display usergroup - if(empty($user['displaygroup'])) - { - $user['displaygroup'] = $user['usergroup']; - } - $usergroup = $usergroups_cache[$user['displaygroup']]; - - // Build referral? - if($mybb->settings['usereferrals'] == 1) - { - eval("\$referral_bit = \"".$templates->get("memberlist_referrals_bit")."\";"); - } - - $usergroup['groupimage'] = ''; - // Work out the usergroup/title stuff - if(!empty($usergroup['image'])) - { - if(!empty($mybb->user['language'])) - { - $language = $mybb->user['language']; - } - else - { - $language = $mybb->settings['bblanguage']; - } - $usergroup['image'] = str_replace("{lang}", $language, $usergroup['image']); - $usergroup['image'] = str_replace("{theme}", $theme['imgdir'], $usergroup['image']); - eval("\$usergroup['groupimage'] = \"".$templates->get("memberlist_user_groupimage")."\";"); - } - - $has_custom_title = 0; - if(trim($user['usertitle']) != "") - { - $has_custom_title = 1; - } - - if($usergroup['usertitle'] != "" && !$has_custom_title) - { - $user['usertitle'] = $usergroup['usertitle']; - } - elseif(is_array($usertitles_cache) && !$usergroup['usertitle']) - { - foreach($usertitles_cache as $posts => $titleinfo) - { - if($user['postnum'] >= $posts) - { - if(!$has_custom_title) - { - $user['usertitle'] = $titleinfo['title']; - } - $user['stars'] = $titleinfo['stars']; - $user['starimage'] = $titleinfo['starimage']; - break; - } - } - } - - $user['usertitle'] = htmlspecialchars_uni($user['usertitle']); - - if(!empty($usergroup['stars'])) - { - $user['stars'] = $usergroup['stars']; - } - - if(empty($user['starimage'])) - { - $user['starimage'] = $usergroup['starimage']; - } - - $user['userstars'] = ''; - if(!empty($user['starimage'])) - { - // Only display stars if we have an image to use... - $starimage = str_replace("{theme}", $theme['imgdir'], $user['starimage']); - - for($i = 0; $i < $user['stars']; ++$i) - { - eval("\$user['userstars'] .= \"".$templates->get("memberlist_user_userstar", 1, 0)."\";"); - } - } - - if($user['userstars'] && $usergroup['groupimage']) - { - $user['userstars'] = "
    ".$user['userstars']; - } - - // Show avatar - $useravatar = format_avatar($user['avatar'], $user['avatardimensions'], my_strtolower($mybb->settings['memberlistmaxavatarsize'])); - eval("\$user['avatar'] = \"".$templates->get("memberlist_user_avatar")."\";"); - - if($user['invisible'] == 1 && $mybb->usergroup['canviewwolinvis'] != 1 && $user['uid'] != $mybb->user['uid']) - { - $user['lastvisit'] = $lang->lastvisit_never; - - if($user['lastvisit']) - { - // We have had at least some active time, hide it instead - $user['lastvisit'] = $lang->lastvisit_hidden; - } - } - else - { - $user['lastvisit'] = my_date('relative', $user['lastactive']); - } - - $user['regdate'] = my_date('relative', $user['regdate']); - $user['postnum'] = my_number_format($user['postnum']); - $user['threadnum'] = my_number_format($user['threadnum']); - eval("\$users .= \"".$templates->get("memberlist_user")."\";"); - } - - // Do we have no results? - if(!$users) - { - eval("\$users = \"".$templates->get("memberlist_error")."\";"); - } - - $plugins->run_hooks("memberlist_end"); - - eval("\$memberlist = \"".$templates->get("memberlist")."\";"); - output_page($memberlist); -} \ No newline at end of file diff --git a/html/forums/misc.php b/html/forums/misc.php deleted file mode 100644 index 2038dfa..0000000 --- a/html/forums/misc.php +++ /dev/null @@ -1,1082 +0,0 @@ -load("misc"); - -$plugins->run_hooks("misc_start"); - -$mybb->input['action'] = $mybb->get_input('action'); -if($mybb->input['action'] == "dstswitch" && $mybb->request_method == "post" && $mybb->user['uid'] > 0) -{ - if($mybb->user['dstcorrection'] == 2) - { - if($mybb->user['dst'] == 1) - { - $update_array = array("dst" => 0); - } - else - { - $update_array = array("dst" => 1); - } - } - $db->update_query("users", $update_array, "uid='{$mybb->user['uid']}'"); - if(!isset($mybb->input['ajax'])) - { - redirect("index.php", $lang->dst_settings_updated); - } - else - { - echo "done"; - exit; - } -} -elseif($mybb->input['action'] == "markread") -{ - if($mybb->user['uid'] && verify_post_check($mybb->get_input('my_post_key'), true) !== true) - { - // Protect our user's unread forums from CSRF - error($lang->invalid_post_code); - } - - if(isset($mybb->input['fid'])) - { - $validforum = get_forum($mybb->input['fid']); - if(!$validforum) - { - if(!isset($mybb->input['ajax'])) - { - error($lang->error_invalidforum); - } - else - { - echo 0; - exit; - } - } - - require_once MYBB_ROOT."/inc/functions_indicators.php"; - mark_forum_read($mybb->input['fid']); - - $plugins->run_hooks("misc_markread_forum"); - - if(!isset($mybb->input['ajax'])) - { - redirect(get_forum_link($mybb->input['fid']), $lang->redirect_markforumread); - } - else - { - echo 1; - exit; - } - } - else - { - - $plugins->run_hooks("misc_markread_end"); - require_once MYBB_ROOT."/inc/functions_indicators.php"; - mark_all_forums_read(); - redirect("index.php", $lang->redirect_markforumsread); - } -} -elseif($mybb->input['action'] == "clearpass") -{ - $plugins->run_hooks("misc_clearpass"); - - if(isset($mybb->input['fid'])) - { - if(!verify_post_check($mybb->get_input('my_post_key'))) - { - error($lang->invalid_post_code); - } - - my_unsetcookie("forumpass[".$mybb->get_input('fid', MyBB::INPUT_INT)."]"); - redirect("index.php", $lang->redirect_forumpasscleared); - } -} -elseif($mybb->input['action'] == "rules") -{ - if(isset($mybb->input['fid'])) - { - $plugins->run_hooks("misc_rules_start"); - - $fid = $mybb->input['fid']; - - $forum = get_forum($fid); - if(!$forum || $forum['type'] != "f" || $forum['rules'] == '') - { - error($lang->error_invalidforum); - } - - $forumpermissions = forum_permissions($forum['fid']); - if($forumpermissions['canview'] != 1) - { - error_no_permission(); - } - - if(!$forum['rulestitle']) - { - $forum['rulestitle'] = $lang->sprintf($lang->forum_rules, $forum['name']); - } - - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser(); - $parser_options = array( - "allow_html" => 1, - "allow_mycode" => 1, - "allow_smilies" => 1, - "allow_imgcode" => 1, - "filter_badwords" => 1 - ); - - $forum['rules'] = $parser->parse_message($forum['rules'], $parser_options); - - // Make navigation - build_forum_breadcrumb($mybb->input['fid']); - add_breadcrumb($forum['rulestitle']); - - $plugins->run_hooks("misc_rules_end"); - - eval("\$rules = \"".$templates->get("misc_rules_forum")."\";"); - output_page($rules); - } - -} -elseif($mybb->input['action'] == "do_helpsearch" && $mybb->request_method == "post") -{ - $plugins->run_hooks("misc_do_helpsearch_start"); - - if($mybb->settings['helpsearch'] != 1) - { - error($lang->error_helpsearchdisabled); - } - - // Check if search flood checking is enabled and user is not admin - if($mybb->settings['searchfloodtime'] > 0 && $mybb->usergroup['cancp'] != 1) - { - // Fetch the time this user last searched - $timecut = TIME_NOW-$mybb->settings['searchfloodtime']; - $query = $db->simple_select("searchlog", "*", "uid='{$mybb->user['uid']}' AND dateline > '$timecut'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_search = $db->fetch_array($query); - // Users last search was within the flood time, show the error - if($last_search['sid']) - { - $remaining_time = $mybb->settings['searchfloodtime']-(TIME_NOW-$last_search['dateline']); - if($remaining_time == 1) - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding_1, $mybb->settings['searchfloodtime']); - } - else - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding, $mybb->settings['searchfloodtime'], $remaining_time); - } - error($lang->error_searchflooding); - } - } - - if($mybb->get_input('name', MyBB::INPUT_INT) != 1 && $mybb->get_input('document', MyBB::INPUT_INT) != 1) - { - error($lang->error_nosearchresults); - } - - if($mybb->get_input('document', MyBB::INPUT_INT) == 1) - { - $resulttype = "helpdoc"; - } - else - { - $resulttype = "helpname"; - } - - $search_data = array( - "keywords" => $mybb->get_input('keywords'), - "name" => $mybb->get_input('name', MyBB::INPUT_INT), - "document" => $mybb->get_input('document', MyBB::INPUT_INT), - ); - - if($db->can_search == true) - { - require_once MYBB_ROOT."inc/functions_search.php"; - - $search_results = helpdocument_perform_search_mysql($search_data); - } - else - { - error($lang->error_no_search_support); - } - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => '', - "posts" => '', - "resulttype" => $resulttype, - "querycache" => $search_results['querycache'], - "keywords" => $db->escape_string($mybb->get_input('keywords')), - ); - $plugins->run_hooks("misc_do_helpsearch_process"); - - $db->insert_query("searchlog", $searcharray); - - $plugins->run_hooks("misc_do_helpsearch_end"); - redirect("misc.php?action=helpresults&sid={$sid}", $lang->redirect_searchresults); -} -elseif($mybb->input['action'] == "helpresults") -{ - if($mybb->settings['helpsearch'] != 1) - { - error($lang->error_helpsearchdisabled); - } - - $sid = $mybb->get_input('sid'); - $query = $db->simple_select("searchlog", "*", "sid='".$db->escape_string($sid)."' AND uid='{$mybb->user['uid']}'"); - $search = $db->fetch_array($query); - - if(!$search) - { - error($lang->error_invalidsearch); - } - - $plugins->run_hooks("misc_helpresults_start"); - - add_breadcrumb($lang->nav_helpdocs, "misc.php?action=help"); - add_breadcrumb($lang->search_results, "misc.php?action=helpresults&sid={$sid}"); - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - // Work out pagination, which page we're at, as well as the limits. - $perpage = $mybb->settings['threadsperpage']; - $page = $mybb->get_input('page', MyBB::INPUT_INT); - if($page > 0) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - $end = $start + $perpage; - $lower = $start+1; - $upper = $end; - - // Work out if we have terms to highlight - $highlight = ""; - if($search['keywords']) - { - $highlight = "&highlight=".urlencode($search['keywords']); - } - - // Do Multi Pages - $query = $db->simple_select("helpdocs", "COUNT(*) AS total", "hid IN(".$db->escape_string($search['querycache']).")"); - $helpcount = $db->fetch_array($query); - - if($upper > $helpcount) - { - $upper = $helpcount; - } - $multipage = multipage($helpcount['total'], $perpage, $page, "misc.php?action=helpresults&sid='".htmlspecialchars_uni($mybb->get_input('sid'))."'"); - $helpdoclist = ''; - - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser(); - - $query = $db->query(" - SELECT h.*, s.enabled - FROM ".TABLE_PREFIX."helpdocs h - LEFT JOIN ".TABLE_PREFIX."helpsections s ON (s.sid=h.sid) - WHERE h.hid IN(".$db->escape_string($search['querycache']).") AND h.enabled='1' AND s.enabled='1' - LIMIT {$start}, {$perpage} - "); - while($helpdoc = $db->fetch_array($query)) - { - $bgcolor = alt_trow(); - - if(my_strlen($helpdoc['name']) > 50) - { - $helpdoc['name'] = htmlspecialchars_uni(my_substr($helpdoc['name'], 0, 50)."..."); - } - else - { - $helpdoc['name'] = htmlspecialchars_uni($helpdoc['name']); - } - - $parser_options = array( - 'allow_html' => 1, - 'allow_mycode' => 0, - 'allow_smilies' => 0, - 'allow_imgcode' => 0, - 'filter_badwords' => 1 - ); - $helpdoc['helpdoc'] = my_strip_tags($parser->parse_message($helpdoc['document'], $parser_options)); - - if(my_strlen($helpdoc['helpdoc']) > 350) - { - $prev = my_substr($helpdoc['helpdoc'], 0, 350)."..."; - } - else - { - $prev = $helpdoc['helpdoc']; - } - - $plugins->run_hooks("misc_helpresults_bit"); - - eval("\$helpdoclist .= \"".$templates->get("misc_helpresults_bit")."\";"); - } - - if($db->num_rows($query) == 0) - { - eval("\$helpdoclist = \"".$templates->get("misc_helpresults_noresults")."\";"); - } - - $plugins->run_hooks("misc_helpresults_end"); - - eval("\$helpresults = \"".$templates->get("misc_helpresults")."\";"); - output_page($helpresults); -} -elseif($mybb->input['action'] == "help") -{ - $lang->load("helpdocs"); - $lang->load("helpsections"); - $lang->load("customhelpdocs"); - $lang->load("customhelpsections"); - - $hid = $mybb->get_input('hid', MyBB::INPUT_INT); - add_breadcrumb($lang->nav_helpdocs, "misc.php?action=help"); - - if($hid) - { - $query = $db->query(" - SELECT h.*, s.enabled AS section - FROM ".TABLE_PREFIX."helpdocs h - LEFT JOIN ".TABLE_PREFIX."helpsections s ON (s.sid=h.sid) - WHERE h.hid='{$hid}' - "); - - $helpdoc = $db->fetch_array($query); - if($helpdoc['section'] != 0 && $helpdoc['enabled'] != 0) - { - $plugins->run_hooks("misc_help_helpdoc_start"); - - // If we have incoming search terms to highlight - get it done (only if not using translation). - if(!empty($mybb->input['highlight']) && $helpdoc['usetranslation'] != 1) - { - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser(); - - $highlight = $mybb->input['highlight']; - $helpdoc['name'] = $parser->highlight_message($helpdoc['name'], $highlight); - $helpdoc['document'] = $parser->highlight_message($helpdoc['document'], $highlight); - } - - if($helpdoc['usetranslation'] == 1) - { - $langnamevar = "d".$helpdoc['hid']."_name"; - $langdescvar = "d".$helpdoc['hid']."_desc"; - $langdocvar = "d".$helpdoc['hid']."_document"; - if($lang->$langnamevar) - { - $helpdoc['name'] = $lang->$langnamevar; - } - if($lang->$langdescvar) - { - $helpdoc['description'] = $lang->$langdescvar; - } - if($lang->$langdocvar) - { - $helpdoc['document'] = $lang->$langdocvar; - } - } - - if($helpdoc['hid'] == 3) - { - $helpdoc['document'] = $lang->sprintf($helpdoc['document'], $mybb->post_code); - } - - add_breadcrumb($helpdoc['name']); - - $plugins->run_hooks("misc_help_helpdoc_end"); - - eval("\$helppage = \"".$templates->get("misc_help_helpdoc")."\";"); - output_page($helppage); - } - else - { - error($lang->error_invalidhelpdoc); - } - } - else - { - $plugins->run_hooks("misc_help_section_start"); - - $query = $db->simple_select("helpdocs", "*", "", array('order_by' => 'sid, disporder')); - while($helpdoc = $db->fetch_array($query)) - { - $helpdocs[$helpdoc['sid']][$helpdoc['disporder']][$helpdoc['hid']] = $helpdoc; - } - unset($helpdoc); - $sections = ''; - $query = $db->simple_select("helpsections", "*", "enabled != 0", array('order_by' => 'disporder')); - while($section = $db->fetch_array($query)) - { - if($section['usetranslation'] == 1) - { - $langnamevar = "s".$section['sid']."_name"; - $langdescvar = "s".$section['sid']."_desc"; - if($lang->$langnamevar) - { - $section['name'] = $lang->$langnamevar; - } - if($lang->$langdescvar) - { - $section['description'] = $lang->$langdescvar; - } - } - if(is_array($helpdocs[$section['sid']])) - { - $helpbits = ''; - foreach($helpdocs[$section['sid']] as $key => $bit) - { - foreach($bit as $key => $helpdoc) - { - if($helpdoc['enabled'] != 0) - { - if($helpdoc['usetranslation'] == 1) - { - $langnamevar = "d".$helpdoc['hid'].'_name'; - $langdescvar = "d".$helpdoc['hid'].'_desc'; - if($lang->$langnamevar) - { - $helpdoc['name'] = $lang->$langnamevar; - } - if($lang->$langdescvar) - { - $helpdoc['description'] = $lang->$langdescvar; - } - } - $altbg = alt_trow(); - eval("\$helpbits .= \"".$templates->get("misc_help_section_bit")."\";"); - } - } - $expdisplay = ''; - $sname = "sid_".$section['sid']."_c"; - if(isset($collapsed[$sname]) && $collapsed[$sname] == "display: show;") - { - $expcolimage = "collapse_collapsed.png"; - $expdisplay = "display: none;"; - $expthead = " thead_collapsed"; - } - else - { - $expcolimage = "collapse.png"; - $expthead = ""; - } - } - eval("\$sections .= \"".$templates->get("misc_help_section")."\";"); - } - } - - if($mybb->settings['helpsearch'] == 1) - { - eval("\$search = \"".$templates->get("misc_help_search")."\";"); - } - - $plugins->run_hooks("misc_help_section_end"); - - eval("\$help = \"".$templates->get("misc_help")."\";"); - output_page($help); - } -} -elseif($mybb->input['action'] == "buddypopup") -{ - $plugins->run_hooks("misc_buddypopup_start"); - - if($mybb->user['uid'] == 0) - { - error_no_permission(); - } - - if(isset($mybb->input['removebuddy']) && verify_post_check($mybb->input['my_post_key'])) - { - $buddies = $mybb->user['buddylist']; - $namesarray = explode(",", $buddies); - $mybb->input['removebuddy'] = $mybb->get_input('removebuddy', MyBB::INPUT_INT); - if(is_array($namesarray)) - { - foreach($namesarray as $key => $buddyid) - { - if($buddyid == $mybb->input['removebuddy']) - { - unset($namesarray[$key]); - } - } - $buddylist = implode(',', $namesarray); - $db->update_query("users", array('buddylist' => $buddylist), "uid='".$mybb->user['uid']."'"); - $mybb->user['buddylist'] = $buddylist; - } - } - - // Load Buddies - $buddies = ''; - if($mybb->user['buddylist'] != "") - { - $buddys = array('online' => '', 'offline' => ''); - $timecut = TIME_NOW - $mybb->settings['wolcutoff']; - - $query = $db->simple_select("users", "*", "uid IN ({$mybb->user['buddylist']})", array('order_by' => 'lastactive')); - - while($buddy = $db->fetch_array($query)) - { - $buddy['username'] = htmlspecialchars_uni($buddy['username']); - $buddy_name = format_name($buddy['username'], $buddy['usergroup'], $buddy['displaygroup']); - $profile_link = build_profile_link($buddy_name, $buddy['uid'], '_blank', 'if(window.opener) { window.opener.location = this.href; return false; }'); - - $send_pm = ''; - if($mybb->user['receivepms'] != 0 && $buddy['receivepms'] != 0 && $groupscache[$buddy['usergroup']]['canusepms'] != 0) - { - eval("\$send_pm = \"".$templates->get("misc_buddypopup_user_sendpm")."\";"); - } - - if($buddy['lastactive']) - { - $last_active = $lang->sprintf($lang->last_active, my_date('relative', $buddy['lastactive'])); - } - else - { - $last_active = $lang->sprintf($lang->last_active, $lang->never); - } - - $buddy['avatar'] = format_avatar($buddy['avatar'], $buddy['avatardimensions'], '44x44'); - - if($buddy['lastactive'] > $timecut && ($buddy['invisible'] == 0 || $mybb->user['usergroup'] == 4) && $buddy['lastvisit'] != $buddy['lastactive']) - { - $bonline_alt = alt_trow(); - eval("\$buddys['online'] .= \"".$templates->get("misc_buddypopup_user_online")."\";"); - } - else - { - $boffline_alt = alt_trow(); - eval("\$buddys['offline'] .= \"".$templates->get("misc_buddypopup_user_offline")."\";"); - } - } - - $colspan = ' colspan="2"'; - if(empty($buddys['online'])) - { - $error = $lang->online_none; - eval("\$buddys['online'] = \"".$templates->get("misc_buddypopup_user_none")."\";"); - } - - if(empty($buddys['offline'])) - { - $error = $lang->offline_none; - eval("\$buddys['offline'] = \"".$templates->get("misc_buddypopup_user_none")."\";"); - } - - eval("\$buddies = \"".$templates->get("misc_buddypopup_user")."\";"); - } - else - { - // No buddies? :( - $colspan = ''; - $error = $lang->no_buddies; - eval("\$buddies = \"".$templates->get("misc_buddypopup_user_none")."\";"); - } - - $plugins->run_hooks("misc_buddypopup_end"); - - eval("\$buddylist = \"".$templates->get("misc_buddypopup", 1, 0)."\";"); - echo $buddylist; - exit; -} -elseif($mybb->input['action'] == "whoposted") -{ - $numposts = 0; - $altbg = alt_trow(); - $whoposted = ''; - $tid = $mybb->get_input('tid', MyBB::INPUT_INT); - $thread = get_thread($tid); - - // Make sure we are looking at a real thread here. - if(!$thread) - { - error($lang->error_invalidthread); - } - - // Make sure we are looking at a real thread here. - if(($thread['visible'] == -1 && !is_moderator($thread['fid'], "canviewdeleted")) || ($thread['visible'] == 0 && !is_moderator($thread['fid'], "canviewunapprove")) || $thread['visible'] > 1) - { - error($lang->error_invalidthread); - } - - if(is_moderator($thread['fid'], "canviewdeleted") || is_moderator($thread['fid'], "canviewunapprove")) - { - if(is_moderator($thread['fid'], "canviewunapprove") && !is_moderator($thread['fid'], "canviewdeleted")) - { - $show_posts = "p.visible IN (0,1)"; - } - elseif(is_moderator($thread['fid'], "canviewdeleted") && !is_moderator($thread['fid'], "canviewunapprove")) - { - $show_posts = "p.visible IN (-1,1)"; - } - else - { - $show_posts = "p.visible IN (-1,0,1)"; - } - } - else - { - $show_posts = "p.visible = 1"; - } - - // Does the thread belong to a valid forum? - $forum = get_forum($thread['fid']); - if(!$forum || $forum['type'] != "f") - { - error($lang->error_invalidforum); - } - - // Does the user have permission to view this thread? - $forumpermissions = forum_permissions($forum['fid']); - - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid'])) - { - error_no_permission(); - } - - // Check if this forum is password protected and we have a valid password - check_forum_password($forum['fid']); - - if($mybb->get_input('sort') != 'username') - { - $sortsql = ' ORDER BY posts DESC'; - } - else - { - $sortsql = ' ORDER BY p.username ASC'; - } - $whoposted = ''; - $query = $db->query(" - SELECT COUNT(p.pid) AS posts, p.username AS postusername, u.uid, u.username, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE tid='".$tid."' AND $show_posts - GROUP BY u.uid, p.username, u.uid, u.username, u.usergroup, u.displaygroup - ".$sortsql." - "); - while($poster = $db->fetch_array($query)) - { - if($poster['username'] == '') - { - $poster['username'] = $poster['postusername']; - } - $poster['username'] = htmlspecialchars_uni($poster['username']); - $poster['postusername'] = htmlspecialchars_uni($poster['postusername']); - $poster_name = format_name($poster['username'], $poster['usergroup'], $poster['displaygroup']); - if($poster['uid']) - { - $onclick = "opener.location.href='".get_profile_link($poster['uid'])."'; return false;"; - } - $profile_link = build_profile_link($poster_name, $poster['uid'], '_blank', $onclick); - $numposts += $poster['posts']; - eval("\$whoposted .= \"".$templates->get("misc_whoposted_poster")."\";"); - $altbg = alt_trow(); - } - $numposts = my_number_format($numposts); - $poster['posts'] = my_number_format($poster['posts']); - eval("\$whop = \"".$templates->get("misc_whoposted", 1, 0)."\";"); - echo $whop; - exit; -} -elseif($mybb->input['action'] == "smilies") -{ - $smilies = ''; - if(!empty($mybb->input['popup']) && !empty($mybb->input['editor'])) - { // make small popup list of smilies - $editor = preg_replace('#([^a-zA-Z0-9_-]+)#', '', $mybb->get_input('editor')); - $e = 1; - $smile_icons = ''; - $class = alt_trow(1); - $smilies_cache = $cache->read("smilies"); - - if(is_array($smilies_cache)) - { - $extra_class = ' smilie_pointer'; - foreach($smilies_cache as $smilie) - { - $smilie['image'] = str_replace("{theme}", $theme['imgdir'], $smilie['image']); - $smilie['image'] = htmlspecialchars_uni($mybb->get_asset_url($smilie['image'])); - $smilie['name'] = htmlspecialchars_uni($smilie['name']); - - // Only show the first text to replace in the box - $temp = explode("\n", $smilie['find']); // use temporary variable for php 5.3 compatibility - $smilie['find'] = $temp[0]; - - $smilie['find'] = htmlspecialchars_uni($smilie['find']); - $smilie_insert = str_replace(array('\\', "'"), array('\\\\', "\'"), $smilie['find']); - - $onclick = " onclick=\"MyBBEditor.insertText(' $smilie_insert ');\""; - eval('$smilie_image = "'.$templates->get('smilie', 1, 0).'";'); - eval("\$smile_icons .= \"".$templates->get("misc_smilies_popup_smilie")."\";"); - if($e == 2) - { - eval("\$smilies .= \"".$templates->get("misc_smilies_popup_row")."\";"); - $smile_icons = ''; - $e = 1; - $class = alt_trow(); - } - else - { - $e = 2; - } - } - } - - if($e == 2) - { - eval("\$smilies .= \"".$templates->get("misc_smilies_popup_empty")."\";"); - } - - if(!$smilies) - { - eval("\$smilies = \"".$templates->get("misc_smilies_popup_no_smilies")."\";"); - } - - eval("\$smiliespage = \"".$templates->get("misc_smilies_popup", 1, 0)."\";"); - output_page($smiliespage); - } - else - { - add_breadcrumb($lang->nav_smilies); - $class = "trow1"; - $smilies_cache = $cache->read("smilies"); - - if(is_array($smilies_cache)) - { - $extra_class = $onclick = ''; - foreach($smilies_cache as $smilie) - { - $smilie['image'] = str_replace("{theme}", $theme['imgdir'], $smilie['image']); - $smilie['image'] = htmlspecialchars_uni($mybb->get_asset_url($smilie['image'])); - $smilie['name'] = htmlspecialchars_uni($smilie['name']); - - $smilie['find'] = nl2br(htmlspecialchars_uni($smilie['find'])); - eval('$smilie_image = "'.$templates->get('smilie').'";'); - eval("\$smilies .= \"".$templates->get("misc_smilies_smilie")."\";"); - $class = alt_trow(); - } - } - - if(!$smilies) - { - eval("\$smilies = \"".$templates->get("misc_smilies_no_smilies")."\";"); - } - - eval("\$smiliespage = \"".$templates->get("misc_smilies")."\";"); - output_page($smiliespage); - } -} -elseif($mybb->input['action'] == "imcenter") -{ - $mybb->input['imtype'] = $mybb->get_input('imtype'); - if($mybb->input['imtype'] != "aim" && $mybb->input['imtype'] != "skype" && $mybb->input['imtype'] != "yahoo") - { - $message = $lang->error_invalidimtype; - eval("\$error = \"".$templates->get("misc_imcenter_error", 1, 0)."\";"); - echo $error; - exit; - } - - $uid = $mybb->get_input('uid', MyBB::INPUT_INT); - $user = get_user($uid); - - if(!$user) - { - $message = $lang->error_invaliduser; - eval("\$error = \"".$templates->get("misc_imcenter_error", 1, 0)."\";"); - echo $error; - exit; - } - - if(empty($user[$mybb->input['imtype']])) - { - $message = $lang->error_invalidimtype; - eval("\$error = \"".$templates->get("misc_imcenter_error", 1, 0)."\";"); - echo $error; - exit; - } - - $settingkey = 'allow'.$mybb->input['imtype'].'field'; - if(!is_member($mybb->settings[$settingkey], $user)) - { - $message = $lang->error_nopermission_user_ajax; - eval("\$error = \"".$templates->get("misc_imcenter_error", 1, 0)."\";"); - echo $error; - exit; - } - - // Build IM navigation bar - $navigationbar = $navsep = $imtype = $imtype_lang = ''; - if(!empty($user['aim']) && is_member($mybb->settings['allowaimfield'], array('usergroup' => $user['usergroup'], 'additionalgroups' => $user['additionalgroups']))) - { - $imtype = "aim"; - $imtype_lang = $lang->aol_im; - eval("\$navigationbar .= \"".$templates->get("misc_imcenter_nav")."\";"); - $navsep = ' - '; - } - if(!empty($user['skype']) && is_member($mybb->settings['allowskypefield'], array('usergroup' => $user['usergroup'], 'additionalgroups' => $user['additionalgroups']))) - { - $imtype = "skype"; - $imtype_lang = $lang->skype; - eval("\$navigationbar .= \"".$templates->get("misc_imcenter_nav")."\";"); - $navsep = ' - '; - } - if(!empty($user['yahoo']) && is_member($mybb->settings['allowyahoofield'], array('usergroup' => $user['usergroup'], 'additionalgroups' => $user['additionalgroups']))) - { - $imtype = "yahoo"; - $imtype_lang = $lang->yahoo_im; - eval("\$navigationbar .= \"".$templates->get("misc_imcenter_nav")."\";"); - } - - $user['skype'] = htmlspecialchars_uni($user['skype']); - $user['yahoo'] = htmlspecialchars_uni($user['yahoo']); - $user['aim'] = htmlspecialchars_uni($user['aim']); - - $user['username'] = htmlspecialchars_uni($user['username']); - - $lang->chat_on_skype = $lang->sprintf($lang->chat_on_skype, $user['username']); - $lang->call_on_skype = $lang->sprintf($lang->call_on_skype, $user['username']); - - $imtemplate = "misc_imcenter_".$mybb->input['imtype']; - eval("\$imcenter = \"".$templates->get($imtemplate, 1, 0)."\";"); - echo $imcenter; - exit; -} -elseif($mybb->input['action'] == "syndication") -{ - $plugins->run_hooks("misc_syndication_start"); - - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - $version = $mybb->get_input('version'); - $new_limit = $mybb->get_input('limit', MyBB::INPUT_INT); - $forums = $mybb->get_input('forums', MyBB::INPUT_ARRAY); - $limit = 15; - if(!empty($new_limit) && $new_limit != $limit) - { - $limit = $new_limit; - } - $feedurl = ''; - $add = false; - - add_breadcrumb($lang->nav_syndication); - $unviewable = get_unviewable_forums(); - $inactiveforums = get_inactive_forums(); - $unexp1 = explode(',', $unviewable); - $unexp2 = explode(',', $inactiveforums); - $unexp = array_merge($unexp1, $unexp2); - - if(is_array($forums)) - { - foreach($unexp as $fid) - { - $unview[$fid] = true; - } - - $syndicate = ''; - $comma = ''; - $all = false; - foreach($forums as $fid) - { - if($fid == "all") - { - $all = true; - break; - } - elseif(ctype_digit($fid)) - { - if(!isset($unview[$fid])) - { - $syndicate .= $comma.$fid; - $comma = ","; - $flist[$fid] = true; - } - } - } - $url = $mybb->settings['bburl']."/syndication.php"; - if(!$all) - { - $url .= "?fid=$syndicate"; - $add = true; - } - - // If the version is not RSS2.0, set the type to Atom1.0. - if($version != "rss2.0") - { - if(!$add) - { - $url .= "?"; - } - else - { - $url .= "&"; - } - $url .= "type=atom1.0"; - $add = true; - } - if((int)$limit > 0) - { - if($limit > 50) - { - $limit = 50; - } - if(!$add) - { - $url .= "?"; - } - else - { - $url .= "&"; - } - if(is_numeric($limit)) - { - $url .= "limit=$limit"; - } - } - eval("\$feedurl = \"".$templates->get("misc_syndication_feedurl")."\";"); - } - unset($GLOBALS['forumcache']); - - // If there is no version in the input, check the default (RSS2.0). - if($version == "atom1.0") - { - $atom1check = "checked=\"checked\""; - $rss2check = ''; - } - else - { - $atom1check = ''; - $rss2check = "checked=\"checked\""; - } - $forumselect = makesyndicateforums(); - - $plugins->run_hooks("misc_syndication_end"); - - eval("\$syndication = \"".$templates->get("misc_syndication")."\";"); - output_page($syndication); -} -elseif($mybb->input['action'] == "clearcookies") -{ - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("misc_clearcookies"); - - $remove_cookies = array('mybbuser', 'mybb[announcements]', 'mybb[lastvisit]', 'mybb[lastactive]', 'collapsed', 'mybb[forumread]', 'mybb[threadsread]', 'mybbadmin', - 'mybblang', 'mybbtheme', 'multiquote', 'mybb[readallforums]', 'coppauser', 'coppadob', 'mybb[referrer]'); - - foreach($remove_cookies as $name) - { - my_unsetcookie($name); - } - redirect("index.php", $lang->redirect_cookiescleared); -} - -/** - * Build a list of forums for RSS multiselect. - * - * @param int $pid Parent forum ID. - * @param string $selitem deprecated - * @param boolean $addselect Whether to add selected attribute or not. - * @param string $depth HTML for the depth of the forum. - * @return string HTML of the list of forums for CSS. - */ -function makesyndicateforums($pid=0, $selitem="", $addselect=true, $depth="") -{ - global $db, $forumcache, $permissioncache, $mybb, $forumlist, $forumlistbits, $flist, $lang, $unexp, $templates; - - $pid = (int)$pid; - $forumlist = ''; - - if(!is_array($forumcache)) - { - // Get Forums - $query = $db->simple_select("forums", "*", "linkto = '' AND active!=0", array('order_by' => 'pid, disporder')); - while($forum = $db->fetch_array($query)) - { - $forumcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; - } - } - - if(!is_array($permissioncache)) - { - $permissioncache = forum_permissions(); - } - - if(is_array($forumcache[$pid])) - { - foreach($forumcache[$pid] as $key => $main) - { - foreach($main as $key => $forum) - { - $perms = $permissioncache[$forum['fid']]; - if($perms['canview'] == 1 || $mybb->settings['hideprivateforums'] == 0) - { - $optionselected = ''; - if(isset($flist[$forum['fid']])) - { - $optionselected = 'selected="selected"'; - $selecteddone = "1"; - } - - if($forum['password'] == '' && !in_array($forum['fid'], $unexp) || $forum['password'] && isset($mybb->cookies['forumpass'][$forum['fid']]) && $mybb->cookies['forumpass'][$forum['fid']] === md5($mybb->user['uid'].$forum['password'])) - { - eval("\$forumlistbits .= \"".$templates->get("misc_syndication_forumlist_forum")."\";"); - } - - if(!empty($forumcache[$forum['fid']])) - { - $newdepth = $depth."    "; - $forumlistbits .= makesyndicateforums($forum['fid'], '', 0, $newdepth); - } - } - } - } - } - - if($addselect) - { - $addsel = ''; - if(empty($selecteddone)) - { - $addsel = ' selected="selected"'; - } - - eval("\$forumlist = \"".$templates->get("misc_syndication_forumlist")."\";"); - } - - return $forumlist; -} diff --git a/html/forums/modcp.php b/html/forums/modcp.php deleted file mode 100644 index 841bc8b..0000000 --- a/html/forums/modcp.php +++ /dev/null @@ -1,4830 +0,0 @@ -load("modcp"); -$lang->load("announcements"); - -if($mybb->user['uid'] == 0 || $mybb->usergroup['canmodcp'] != 1) -{ - error_no_permission(); -} - -if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) -{ - $mybb->settings['threadsperpage'] = 20; -} - -$tflist = $flist = $tflist_queue_threads = $flist_queue_threads = $tflist_queue_posts = $flist_queue_posts = $tflist_queue_attach = -$flist_queue_attach = $wflist_reports = $tflist_reports = $flist_reports = $tflist_modlog = $flist_modlog = $errors = ''; -// SQL for fetching items only related to forums this user moderates -$moderated_forums = array(); -if($mybb->usergroup['issupermod'] != 1) -{ - $query = $db->simple_select("moderators", "*", "(id='{$mybb->user['uid']}' AND isgroup = '0') OR (id='{$mybb->user['usergroup']}' AND isgroup = '1')"); - - $numannouncements = $nummodqueuethreads = $nummodqueueposts = $nummodqueueattach = $numreportedposts = $nummodlogs = 0; - while($forum = $db->fetch_array($query)) - { - // For Announcements - if($forum['canmanageannouncements'] == 1) - { - ++$numannouncements; - } - - // For the Mod Queues - if($forum['canapproveunapprovethreads'] == 1) - { - $flist_queue_threads .= ",'{$forum['fid']}'"; - - $children = get_child_list($forum['fid']); - if(!empty($children)) - { - $flist_queue_threads .= ",'".implode("','", $children)."'"; - } - ++$nummodqueuethreads; - } - - if($forum['canapproveunapproveposts'] == 1) - { - $flist_queue_posts .= ",'{$forum['fid']}'"; - - $children = get_child_list($forum['fid']); - if(!empty($children)) - { - $flist_queue_posts .= ",'".implode("','", $children)."'"; - } - ++$nummodqueueposts; - } - - if($forum['canapproveunapproveattachs'] == 1) - { - $flist_queue_attach .= ",'{$forum['fid']}'"; - - $children = get_child_list($forum['fid']); - if(!empty($children)) - { - $flist_queue_attach .= ",'".implode("','", $children)."'"; - } - ++$nummodqueueattach; - } - - // For Reported posts - if($forum['canmanagereportedposts'] == 1) - { - $flist_reports .= ",'{$forum['fid']}'"; - - $children = get_child_list($forum['fid']); - if(!empty($children)) - { - $flist_reports .= ",'".implode("','", $children)."'"; - } - ++$numreportedposts; - } - - // For the Mod Log - if($forum['canviewmodlog'] == 1) - { - $flist_modlog .= ",'{$forum['fid']}'"; - - $children = get_child_list($forum['fid']); - if(!empty($children)) - { - $flist_modlog .= ",'".implode("','", $children)."'"; - } - ++$nummodlogs; - } - - $flist .= ",'{$forum['fid']}'"; - - $children = get_child_list($forum['fid']); - if(!empty($children)) - { - $flist .= ",'".implode("','", $children)."'"; - } - $moderated_forums[] = $forum['fid']; - } - if($flist_queue_threads) - { - $tflist_queue_threads = " AND t.fid IN (0{$flist_queue_threads})"; - $flist_queue_threads = " AND fid IN (0{$flist_queue_threads})"; - } - if($flist_queue_posts) - { - $tflist_queue_posts = " AND t.fid IN (0{$flist_queue_posts})"; - $flist_queue_posts = " AND fid IN (0{$flist_queue_posts})"; - } - if($flist_queue_attach) - { - $tflist_queue_attach = " AND t.fid IN (0{$flist_queue_attach})"; - $flist_queue_attach = " AND fid IN (0{$flist_queue_attach})"; - } - if($flist_reports) - { - $wflist_reports = "WHERE r.id3 IN (0{$flist_reports})"; - $tflist_reports = " AND r.id3 IN (0{$flist_reports})"; - $flist_reports = " AND id3 IN (0{$flist_reports})"; - } - if($flist_modlog) - { - $tflist_modlog = " AND t.fid IN (0{$flist_modlog})"; - $flist_modlog = " AND fid IN (0{$flist_modlog})"; - } - if($flist) - { - $tflist = " AND t.fid IN (0{$flist})"; - $flist = " AND fid IN (0{$flist})"; - } -} - -// Retrieve a list of unviewable forums -$unviewableforums = get_unviewable_forums(); -$inactiveforums = get_inactive_forums(); -$unviewablefids1 = $unviewablefids2 = array(); - -if($unviewableforums) -{ - $flist .= " AND fid NOT IN ({$unviewableforums})"; - $tflist .= " AND t.fid NOT IN ({$unviewableforums})"; - - $unviewablefids1 = explode(',', $unviewableforums); -} - -if($inactiveforums) -{ - $flist .= " AND fid NOT IN ({$inactiveforums})"; - $tflist .= " AND t.fid NOT IN ({$inactiveforums})"; - - $unviewablefids2 = explode(',', $inactiveforums); -} - -$unviewableforums = array_merge($unviewablefids1, $unviewablefids2); - -if(!isset($collapsedimg['modcpforums'])) -{ - $collapsedimg['modcpforums'] = ''; -} - -if(!isset($collapsed['modcpforums_e'])) -{ - $collapsed['modcpforums_e'] = ''; -} - -if(!isset($collapsedimg['modcpusers'])) -{ - $collapsedimg['modcpusers'] = ''; -} - -if(!isset($collapsed['modcpusers_e'])) -{ - $collapsed['modcpusers_e'] = ''; -} - -// Fetch the Mod CP menu -$nav_announcements = $nav_modqueue = $nav_reportcenter = $nav_modlogs = $nav_editprofile = $nav_banning = $nav_warninglogs = $nav_ipsearch = $nav_forums_posts = $modcp_nav_users = ''; -if(($numannouncements > 0 || $mybb->usergroup['issupermod'] == 1) && $mybb->usergroup['canmanageannounce'] == 1) -{ - eval("\$nav_announcements = \"".$templates->get("modcp_nav_announcements")."\";"); -} - -if(($nummodqueuethreads > 0 || $nummodqueueposts > 0 || $nummodqueueattach > 0 || $mybb->usergroup['issupermod'] == 1) && $mybb->usergroup['canmanagemodqueue'] == 1) -{ - eval("\$nav_modqueue = \"".$templates->get("modcp_nav_modqueue")."\";"); -} - -if(($numreportedposts > 0 || $mybb->usergroup['issupermod'] == 1) && $mybb->usergroup['canmanagereportedcontent'] == 1) -{ - eval("\$nav_reportcenter = \"".$templates->get("modcp_nav_reportcenter")."\";"); -} - -if(($nummodlogs > 0 || $mybb->usergroup['issupermod'] == 1) && $mybb->usergroup['canviewmodlogs'] == 1) -{ - eval("\$nav_modlogs = \"".$templates->get("modcp_nav_modlogs")."\";"); -} - -if($mybb->usergroup['caneditprofiles'] == 1) -{ - eval("\$nav_editprofile = \"".$templates->get("modcp_nav_editprofile")."\";"); -} - -if($mybb->usergroup['canbanusers'] == 1) -{ - eval("\$nav_banning = \"".$templates->get("modcp_nav_banning")."\";"); -} - -if($mybb->usergroup['canviewwarnlogs'] == 1) -{ - eval("\$nav_warninglogs = \"".$templates->get("modcp_nav_warninglogs")."\";"); -} - -if($mybb->usergroup['canuseipsearch'] == 1) -{ - eval("\$nav_ipsearch = \"".$templates->get("modcp_nav_ipsearch")."\";"); -} - -$plugins->run_hooks("modcp_nav"); - -if(!empty($nav_announcements) || !empty($nav_modqueue) || !empty($nav_reportcenter) || !empty($nav_modlogs)) -{ - eval("\$modcp_nav_forums_posts = \"".$templates->get("modcp_nav_forums_posts")."\";"); -} - -if(!empty($nav_editprofile) || !empty($nav_banning) || !empty($nav_warninglogs) || !empty($nav_ipsearch)) -{ - eval("\$modcp_nav_users = \"".$templates->get("modcp_nav_users")."\";"); -} - -eval("\$modcp_nav = \"".$templates->get("modcp_nav")."\";"); - -$plugins->run_hooks("modcp_start"); - -// Make navigation -add_breadcrumb($lang->nav_modcp, "modcp.php"); - -$mybb->input['action'] = $mybb->get_input('action'); -if($mybb->input['action'] == "do_reports") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $mybb->input['reports'] = $mybb->get_input('reports', MyBB::INPUT_ARRAY); - if(empty($mybb->input['reports'])) - { - error($lang->error_noselected_reports); - } - - $sql = '1=1'; - if(empty($mybb->input['allbox'])) - { - $mybb->input['reports'] = array_map("intval", $mybb->input['reports']); - $rids = implode("','", $mybb->input['reports']); - - $sql = "rid IN ('0','{$rids}')"; - } - - $plugins->run_hooks("modcp_do_reports"); - - $db->update_query("reportedcontent", array('reportstatus' => 1), "{$sql}{$flist_reports}"); - $cache->update_reportedcontent(); - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - - redirect("modcp.php?action=reports&page={$page}", $lang->redirect_reportsmarked); -} - -if($mybb->input['action'] == "reports") -{ - if($mybb->usergroup['canmanagereportedcontent'] == 0) - { - error_no_permission(); - } - - if($numreportedposts == 0 && $mybb->usergroup['issupermod'] != 1) - { - error($lang->you_cannot_view_reported_posts); - } - - $lang->load('report'); - add_breadcrumb($lang->mcp_nav_report_center, "modcp.php?action=reports"); - - $perpage = $mybb->settings['threadsperpage']; - if(!$perpage) - { - $perpage = 20; - } - - // Multipage - if($mybb->usergroup['cancp'] || $mybb->usergroup['issupermod']) - { - $query = $db->simple_select("reportedcontent", "COUNT(rid) AS count", "reportstatus ='0'"); - $report_count = $db->fetch_field($query, "count"); - } - else - { - $query = $db->simple_select('reportedcontent', 'id3', "reportstatus='0' AND (type = 'post' OR type = '')"); - - $report_count = 0; - while($fid = $db->fetch_field($query, 'id3')) - { - if(is_moderator($fid, "canmanagereportedposts")) - { - ++$report_count; - } - } - unset($fid); - } - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - - $postcount = (int)$report_count; - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page && $page > 0) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $multipage = $reportspages = ''; - if($postcount > $perpage) - { - $multipage = multipage($postcount, $perpage, $page, "modcp.php?action=reports"); - eval("\$reportspages = \"".$templates->get("modcp_reports_multipage")."\";"); - } - - $plugins->run_hooks("modcp_reports_start"); - - // Reports - $reports = ''; - $query = $db->query(" - SELECT r.*, u.username, rr.title - FROM ".TABLE_PREFIX."reportedcontent r - LEFT JOIN ".TABLE_PREFIX."users u ON (r.uid = u.uid) - LEFT JOIN ".TABLE_PREFIX."reportreasons rr ON (r.reasonid = rr.rid) - WHERE r.reportstatus = '0'{$tflist_reports} - ORDER BY r.reports DESC - LIMIT {$start}, {$perpage} - "); - - if(!$db->num_rows($query)) - { - // No unread reports - eval("\$reports = \"".$templates->get("modcp_reports_noreports")."\";"); - } - else - { - $reportedcontent = $cache->read("reportedcontent"); - $reportcache = $usercache = $postcache = array(); - - while($report = $db->fetch_array($query)) - { - if($report['type'] == 'profile' || $report['type'] == 'reputation') - { - // Profile UID is in ID - if(!isset($usercache[$report['id']])) - { - $usercache[$report['id']] = $report['id']; - } - - // Reputation comment? The offender is the ID2 - if($report['type'] == 'reputation') - { - if(!isset($usercache[$report['id2']])) - { - $usercache[$report['id2']] = $report['id2']; - } - if(!isset($usercache[$report['id3']])) - { - // The user who was offended - $usercache[$report['id3']] = $report['id3']; - } - } - } - else if(!$report['type'] || $report['type'] == 'post') - { - // This (should) be a post - $postcache[$report['id']] = $report['id']; - } - - // Lastpost info - is it missing (pre-1.8)? - $lastposter = $report['uid']; - if(!$report['lastreport']) - { - // Last reporter is our first reporter - $report['lastreport'] = $report['dateline']; - } - - if($report['reporters']) - { - $reporters = my_unserialize($report['reporters']); - - if(is_array($reporters)) - { - $lastposter = end($reporters); - } - } - - if(!isset($usercache[$lastposter])) - { - $usercache[$lastposter] = $lastposter; - } - - $report['lastreporter'] = $lastposter; - $reportcache[] = $report; - } - - // Report Center gets messy - // Find information about our users (because we don't log it when they file a report) - if(!empty($usercache)) - { - $sql = implode(',', array_keys($usercache)); - $query = $db->simple_select("users", "uid, username", "uid IN ({$sql})"); - - while($user = $db->fetch_array($query)) - { - $usercache[$user['uid']] = $user; - } - } - - // Messy * 2 - // Find out post information for our reported posts - if(!empty($postcache)) - { - $sql = implode(',', array_keys($postcache)); - $query = $db->query(" - SELECT p.pid, p.uid, p.username, p.tid, t.subject - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (p.tid = t.tid) - WHERE p.pid IN ({$sql}) - "); - - while($post = $db->fetch_array($query)) - { - $postcache[$post['pid']] = $post; - } - } - - $plugins->run_hooks('modcp_reports_intermediate'); - - // Now that we have all of the information needed, display the reports - foreach($reportcache as $report) - { - $trow = alt_trow(); - - if(!$report['type']) - { - // Assume a post - $report['type'] = 'post'; - } - - // Report Information - $report_data = array(); - - switch($report['type']) - { - case 'post': - $post = get_post_link($report['id'])."#pid{$report['id']}"; - $user = build_profile_link(htmlspecialchars_uni($postcache[$report['id']]['username']), $postcache[$report['id']]['uid']); - $report_data['content'] = $lang->sprintf($lang->report_info_post, $post, $user); - - $thread_link = get_thread_link($postcache[$report['id']]['tid']); - $thread_subject = htmlspecialchars_uni($parser->parse_badwords($postcache[$report['id']]['subject'])); - $report_data['content'] .= $lang->sprintf($lang->report_info_post_thread, $thread_link, $thread_subject); - - break; - case 'profile': - $user = build_profile_link(htmlspecialchars_uni($usercache[$report['id']]['username']), $usercache[$report['id']]['uid']); - $report_data['content'] = $lang->sprintf($lang->report_info_profile, $user); - break; - case 'reputation': - $reputation_link = "reputation.php?uid={$usercache[$report['id3']]['uid']}#rid{$report['id']}"; - $bad_user = build_profile_link(htmlspecialchars_uni($usercache[$report['id2']]['username']), $usercache[$report['id2']]['uid']); - $report_data['content'] = $lang->sprintf($lang->report_info_reputation, $reputation_link, $bad_user); - - $good_user = build_profile_link(htmlspecialchars_uni($usercache[$report['id3']]['username']), $usercache[$report['id3']]['uid']); - $report_data['content'] .= $lang->sprintf($lang->report_info_rep_profile, $good_user); - break; - } - - // Report reason and comment - if($report['reasonid'] > 0) - { - $reason = htmlspecialchars_uni($lang->parse($report['title'])); - - if(empty($report['reason'])) - { - eval("\$report_data['comment'] = \"".$templates->get("modcp_reports_report_comment")."\";"); - } - else - { - $comment = htmlspecialchars_uni($report['reason']); - eval("\$report_data['comment'] = \"".$templates->get("modcp_reports_report_comment_extra")."\";"); - } - } - else - { - $report_data['comment'] = $lang->na; - } - - $report_reports = 1; - if($report['reports']) - { - $report_data['reports'] = my_number_format($report['reports']); - } - - if($report['lastreporter']) - { - if(is_array($usercache[$report['lastreporter']])) - { - $lastreport_user = build_profile_link(htmlspecialchars_uni($usercache[$report['lastreporter']]['username']), $report['lastreporter']); - } - elseif($usercache[$report['lastreporter']] > 0) - { - $lastreport_user = $lang->na_deleted; - } - - $lastreport_date = my_date('relative', $report['lastreport']); - $report_data['lastreporter'] = $lang->sprintf($lang->report_info_lastreporter, $lastreport_date, $lastreport_user); - } - - $plugins->run_hooks("modcp_reports_report"); - eval("\$reports .= \"".$templates->get("modcp_reports_report")."\";"); - } - } - - $plugins->run_hooks("modcp_reports_end"); - - eval("\$reportedcontent = \"".$templates->get("modcp_reports")."\";"); - output_page($reportedcontent); -} - -if($mybb->input['action'] == "allreports") -{ - if($mybb->usergroup['canmanagereportedcontent'] == 0) - { - error_no_permission(); - } - - $lang->load('report'); - - add_breadcrumb($lang->report_center, "modcp.php?action=reports"); - add_breadcrumb($lang->all_reports, "modcp.php?action=allreports"); - - if(!$mybb->settings['threadsperpage']) - { - $mybb->settings['threadsperpage'] = 20; - } - - // Figure out if we need to display multiple pages. - $perpage = $mybb->settings['threadsperpage']; - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - if($mybb->usergroup['cancp'] || $mybb->usergroup['issupermod']) - { - $query = $db->simple_select("reportedcontent", "COUNT(rid) AS count"); - $report_count = $db->fetch_field($query, "count"); - } - else - { - $query = $db->simple_select('reportedcontent', 'id3', "type = 'post' OR type = ''"); - - $report_count = 0; - while($fid = $db->fetch_field($query, 'id3')) - { - if(is_moderator($fid, "canmanagereportedposts")) - { - ++$report_count; - } - } - unset($fid); - } - - if(isset($mybb->input['rid'])) - { - $mybb->input['rid'] = $mybb->get_input('rid', MyBB::INPUT_INT); - $query = $db->simple_select("reportedcontent", "COUNT(rid) AS count", "rid <= '".$mybb->input['rid']."'"); - $result = $db->fetch_field($query, "count"); - if(($result % $perpage) == 0) - { - $page = $result / $perpage; - } - else - { - $page = (int)$result / $perpage + 1; - } - } - $postcount = (int)$report_count; - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - $upper = $start+$perpage; - - $multipage = multipage($postcount, $perpage, $page, "modcp.php?action=allreports"); - $allreportspages = ''; - if($postcount > $perpage) - { - eval("\$allreportspages = \"".$templates->get("modcp_reports_multipage")."\";"); - } - - $plugins->run_hooks("modcp_allreports_start"); - - $query = $db->query(" - SELECT r.*, u.username, p.username AS postusername, up.uid AS postuid, t.subject AS threadsubject, prrep.username AS repusername, pr.username AS profileusername, rr.title - FROM ".TABLE_PREFIX."reportedcontent r - LEFT JOIN ".TABLE_PREFIX."posts p ON (r.id=p.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (p.tid=t.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (r.uid=u.uid) - LEFT JOIN ".TABLE_PREFIX."users up ON (p.uid=up.uid) - LEFT JOIN ".TABLE_PREFIX."users pr ON (pr.uid=r.id) - LEFT JOIN ".TABLE_PREFIX."users prrep ON (prrep.uid=r.id2) - LEFT JOIN ".TABLE_PREFIX."reportreasons rr ON (r.reasonid = rr.rid) - {$wflist_reports} - ORDER BY r.dateline DESC - LIMIT {$start}, {$perpage} - "); - - $allreports = ''; - if(!$db->num_rows($query)) - { - eval("\$allreports = \"".$templates->get("modcp_reports_allnoreports")."\";"); - } - else - { - while($report = $db->fetch_array($query)) - { - $trow = alt_trow(); - - if($report['type'] == 'post') - { - $post = get_post_link($report['id'])."#pid{$report['id']}"; - $user = build_profile_link(htmlspecialchars_uni($report['postusername']), $report['postuid']); - $report_data['content'] = $lang->sprintf($lang->report_info_post, $post, $user); - - $thread_link = get_thread_link($report['id2']); - $thread_subject = htmlspecialchars_uni($parser->parse_badwords($report['threadsubject'])); - $report_data['content'] .= $lang->sprintf($lang->report_info_post_thread, $thread_link, $thread_subject); - } - else if($report['type'] == 'profile') - { - $user = build_profile_link(htmlspecialchars_uni($report['profileusername']), $report['id']); - $report_data['content'] = $lang->sprintf($lang->report_info_profile, $user); - } - else if($report['type'] == 'reputation') - { - $user = build_profile_link(htmlspecialchars_uni($report['repusername']), $report['id2']); - $reputation_link = "reputation.php?uid={$report['id3']}#rid{$report['id']}"; - $report_data['content'] = $lang->sprintf($lang->report_info_reputation, $reputation_link, $user); - } - - // Report reason and comment - if($report['reasonid'] > 0) - { - $reason = htmlspecialchars_uni($lang->parse($report['title'])); - - if(empty($report['reason'])) - { - eval("\$report_data['comment'] = \"".$templates->get("modcp_reports_report_comment")."\";"); - } - else - { - $comment = htmlspecialchars_uni($report['reason']); - eval("\$report_data['comment'] = \"".$templates->get("modcp_reports_report_comment_extra")."\";"); - } - } - else - { - $report_data['comment'] = $lang->na; - } - - $report['reporterlink'] = get_profile_link($report['uid']); - if(!$report['username']) - { - $report['username'] = $lang->na_deleted; - $report['reporterlink'] = $post; - } - $report['username'] = htmlspecialchars_uni($report['username']); - - $report_data['reports'] = my_number_format($report['reports']); - $report_data['time'] = my_date('relative', $report['dateline']); - - $plugins->run_hooks("modcp_allreports_report"); - eval("\$allreports .= \"".$templates->get("modcp_reports_allreport")."\";"); - } - } - - $plugins->run_hooks("modcp_allreports_end"); - - eval("\$allreportedcontent = \"".$templates->get("modcp_reports_allreports")."\";"); - output_page($allreportedcontent); -} - -if($mybb->input['action'] == "modlogs") -{ - if($mybb->usergroup['canviewmodlogs'] == 0) - { - error_no_permission(); - } - - if($nummodlogs == 0 && $mybb->usergroup['issupermod'] != 1) - { - error($lang->you_cannot_view_mod_logs); - } - - add_breadcrumb($lang->mcp_nav_modlogs, "modcp.php?action=modlogs"); - - $perpage = $mybb->get_input('perpage', MyBB::INPUT_INT); - if(!$perpage || $perpage <= 0) - { - $perpage = $mybb->settings['threadsperpage']; - } - - $where = ''; - - // Searching for entries by a particular user - if($mybb->get_input('uid', MyBB::INPUT_INT)) - { - $where .= " AND l.uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"; - } - - // Searching for entries in a specific forum - if($mybb->get_input('fid', MyBB::INPUT_INT)) - { - $where .= " AND t.fid='".$mybb->get_input('fid', MyBB::INPUT_INT)."'"; - } - - $mybb->input['sortby'] = $mybb->get_input('sortby'); - - // Order? - switch($mybb->input['sortby']) - { - case "username": - $sortby = "u.username"; - break; - case "forum": - $sortby = "f.name"; - break; - case "thread": - $sortby = "t.subject"; - break; - default: - $sortby = "l.dateline"; - } - $order = $mybb->get_input('order'); - if($order != "asc") - { - $order = "desc"; - } - - $plugins->run_hooks("modcp_modlogs_start"); - - $query = $db->query(" - SELECT COUNT(l.dateline) AS count - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=l.tid) - WHERE 1=1 {$where}{$tflist_modlog} - "); - $rescount = $db->fetch_field($query, "count"); - - // Figure out if we need to display multiple pages. - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $postcount = (int)$rescount; - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $page_url = 'modcp.php?action=modlogs&perpage='.$perpage; - foreach(array('uid', 'fid') as $field) - { - $mybb->input[$field] = $mybb->get_input($field, MyBB::INPUT_INT); - if(!empty($mybb->input[$field])) - { - $page_url .= "&{$field}=".$mybb->input[$field]; - } - } - foreach(array('sortby', 'order') as $field) - { - $mybb->input[$field] = htmlspecialchars_uni($mybb->get_input($field)); - if(!empty($mybb->input[$field])) - { - $page_url .= "&{$field}=".$mybb->input[$field]; - } - } - - $multipage = multipage($postcount, $perpage, $page, $page_url); - $resultspages = ''; - if($postcount > $perpage) - { - eval("\$resultspages = \"".$templates->get("modcp_modlogs_multipage")."\";"); - } - $query = $db->query(" - SELECT l.*, u.username, u.usergroup, u.displaygroup, t.subject AS tsubject, f.name AS fname, p.subject AS psubject - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=l.tid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=l.fid) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=l.pid) - WHERE 1=1 {$where}{$tflist_modlog} - ORDER BY {$sortby} {$order} - LIMIT {$start}, {$perpage} - "); - $results = ''; - while($logitem = $db->fetch_array($query)) - { - $information = ''; - $logitem['action'] = htmlspecialchars_uni($logitem['action']); - $log_date = my_date('relative', $logitem['dateline']); - $trow = alt_trow(); - $logitem['username'] = htmlspecialchars_uni($logitem['username']); - $username = format_name($logitem['username'], $logitem['usergroup'], $logitem['displaygroup']); - $logitem['profilelink'] = build_profile_link($username, $logitem['uid']); - $logitem['ipaddress'] = my_inet_ntop($db->unescape_binary($logitem['ipaddress'])); - - if($logitem['tsubject']) - { - $logitem['tsubject'] = htmlspecialchars_uni($parser->parse_badwords($logitem['tsubject'])); - $logitem['thread'] = get_thread_link($logitem['tid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_thread")."\";"); - } - if($logitem['fname']) - { - $logitem['forum'] = get_forum_link($logitem['fid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_forum")."\";"); - } - if($logitem['psubject']) - { - $logitem['psubject'] = htmlspecialchars_uni($parser->parse_badwords($logitem['psubject'])); - $logitem['post'] = get_post_link($logitem['pid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_post")."\";"); - } - - // Edited a user or managed announcement? - if(!$logitem['tsubject'] || !$logitem['fname'] || !$logitem['psubject']) - { - $data = my_unserialize($logitem['data']); - if(!empty($data['uid'])) - { - $data['username'] = htmlspecialchars_uni($data['username']); - $information = $lang->sprintf($lang->edited_user_info, htmlspecialchars_uni($data['username']), get_profile_link($data['uid'])); - } - if(!empty($data['aid'])) - { - $data['subject'] = htmlspecialchars_uni($parser->parse_badwords($data['subject'])); - $data['announcement'] = get_announcement_link($data['aid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_announcement")."\";"); - } - } - - $plugins->run_hooks("modcp_modlogs_result"); - - eval("\$results .= \"".$templates->get("modcp_modlogs_result")."\";"); - } - - if(!$results) - { - eval("\$results = \"".$templates->get("modcp_modlogs_noresults")."\";"); - } - - $plugins->run_hooks("modcp_modlogs_filter"); - - // Fetch filter options - $sortbysel = array('username' => '', 'forum' => '', 'thread' => '', 'dateline' => ''); - $sortbysel[$mybb->input['sortby']] = "selected=\"selected\""; - $ordersel = array('asc' => '', 'desc' => ''); - $ordersel[$order] = "selected=\"selected\""; - $user_options = ''; - $query = $db->query(" - SELECT DISTINCT l.uid, u.username - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (l.uid=u.uid) - ORDER BY u.username ASC - "); - while($user = $db->fetch_array($query)) - { - // Deleted Users - if(!$user['username']) - { - $user['username'] = $lang->na_deleted; - } - - $selected = ''; - if($mybb->get_input('uid', MyBB::INPUT_INT) == $user['uid']) - { - $selected = " selected=\"selected\""; - } - - $user['username'] = htmlspecialchars_uni($user['username']); - eval("\$user_options .= \"".$templates->get("modcp_modlogs_user")."\";"); - } - - $forum_select = build_forum_jump("", $mybb->get_input('fid', MyBB::INPUT_INT), 1, '', 0, true, '', "fid"); - - eval("\$modlogs = \"".$templates->get("modcp_modlogs")."\";"); - output_page($modlogs); -} - -if($mybb->input['action'] == "do_delete_announcement") -{ - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canmanageannounce'] == 0) - { - error_no_permission(); - } - - $aid = $mybb->get_input('aid'); - $query = $db->simple_select("announcements", "aid, subject, fid", "aid='{$aid}'"); - $announcement = $db->fetch_array($query); - - if(!$announcement) - { - error($lang->error_invalid_announcement); - } - if(($mybb->usergroup['issupermod'] != 1 && $announcement['fid'] == -1) || ($announcement['fid'] != -1 && !is_moderator($announcement['fid'], "canmanageannouncements")) || ($unviewableforums && in_array($announcement['fid'], $unviewableforums))) - { - error_no_permission(); - } - - $plugins->run_hooks("modcp_do_delete_announcement"); - - $db->delete_query("announcements", "aid='{$aid}'"); - log_moderator_action(array("aid" => $announcement['aid'], "subject" => $announcement['subject']), $lang->announcement_deleted); - $cache->update_forumsdisplay(); - - redirect("modcp.php?action=announcements", $lang->redirect_delete_announcement); -} - -if($mybb->input['action'] == "delete_announcement") -{ - if($mybb->usergroup['canmanageannounce'] == 0) - { - error_no_permission(); - } - - $aid = $mybb->get_input('aid'); - $query = $db->simple_select("announcements", "aid, subject, fid", "aid='{$aid}'"); - - $announcement = $db->fetch_array($query); - $announcement['subject'] = htmlspecialchars_uni($parser->parse_badwords($announcement['subject'])); - - if(!$announcement) - { - error($lang->error_invalid_announcement); - } - - if(($mybb->usergroup['issupermod'] != 1 && $announcement['fid'] == -1) || ($announcement['fid'] != -1 && !is_moderator($announcement['fid'], "canmanageannouncements")) || ($unviewableforums && in_array($announcement['fid'], $unviewableforums))) - { - error_no_permission(); - } - - $plugins->run_hooks("modcp_delete_announcement"); - - eval("\$announcements = \"".$templates->get("modcp_announcements_delete")."\";"); - output_page($announcements); -} - -if($mybb->input['action'] == "do_new_announcement") -{ - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canmanageannounce'] == 0) - { - error_no_permission(); - } - - $announcement_fid = $mybb->get_input('fid', MyBB::INPUT_INT); - if(($mybb->usergroup['issupermod'] != 1 && $announcement_fid == -1) || ($announcement_fid != -1 && !is_moderator($announcement_fid, "canmanageannouncements")) || ($unviewableforums && in_array($announcement_fid, $unviewableforums))) - { - error_no_permission(); - } - - $errors = array(); - - $mybb->input['title'] = $mybb->get_input('title'); - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - $mybb->input['message'] = $mybb->get_input('message'); - if(!trim($mybb->input['message'])) - { - $errors[] = $lang->error_missing_message; - } - - if(!$announcement_fid) - { - $errors[] = $lang->error_missing_forum; - } - - $mybb->input['starttime_time'] = $mybb->get_input('starttime_time'); - $mybb->input['endtime_time'] = $mybb->get_input('endtime_time'); - $startdate = @explode(" ", $mybb->input['starttime_time']); - $startdate = @explode(":", $startdate[0]); - $enddate = @explode(" ", $mybb->input['endtime_time']); - $enddate = @explode(":", $enddate[0]); - - if(stristr($mybb->input['starttime_time'], "pm")) - { - $startdate[0] = 12+$startdate[0]; - if($startdate[0] >= 24) - { - $startdate[0] = "00"; - } - } - - if(stristr($mybb->input['endtime_time'], "pm")) - { - $enddate[0] = 12+$enddate[0]; - if($enddate[0] >= 24) - { - $enddate[0] = "00"; - } - } - - $mybb->input['starttime_month'] = $mybb->get_input('starttime_month'); - $months = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); - if(!in_array($mybb->input['starttime_month'], $months)) - { - $mybb->input['starttime_month'] = '01'; - } - - $localized_time_offset = (float)$mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - - $startdate = gmmktime((int)$startdate[0], (int)$startdate[1], 0, $mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT)) - $localized_time_offset; - if(!checkdate($mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT)) || $startdate < 0 || $startdate == false) - { - $errors[] = $lang->error_invalid_start_date; - } - - if($mybb->get_input('endtime_type', MyBB::INPUT_INT) == 2) - { - $enddate = '0'; - $mybb->input['endtime_month'] = '01'; - } - else - { - $mybb->input['endtime_month'] = $mybb->get_input('endtime_month'); - if(!in_array($mybb->input['endtime_month'], $months)) - { - $mybb->input['endtime_month'] = '01'; - } - $enddate = gmmktime((int)$enddate[0], (int)$enddate[1], 0, $mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT)) - $localized_time_offset; - if(!checkdate($mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT)) || $enddate < 0 || $enddate == false) - { - $errors[] = $lang->error_invalid_end_date; - } - - if($enddate <= $startdate) - { - $errors[] = $lang->error_end_before_start; - } - } - - if($mybb->get_input('allowhtml', MyBB::INPUT_INT) == 1) - { - $allowhtml = 1; - } - else - { - $allowhtml = 0; - } - if($mybb->get_input('allowmycode', MyBB::INPUT_INT) == 1) - { - $allowmycode = 1; - } - else - { - $allowmycode = 0; - } - if($mybb->get_input('allowsmilies', MyBB::INPUT_INT) == 1) - { - $allowsmilies = 1; - } - else - { - $allowsmilies = 0; - } - - $plugins->run_hooks("modcp_do_new_announcement_start"); - - if(!$errors) - { - if(isset($mybb->input['preview'])) - { - $preview = array(); - $mybb->input['action'] = 'new_announcement'; - } - else - { - $insert_announcement = array( - 'fid' => $announcement_fid, - 'uid' => $mybb->user['uid'], - 'subject' => $db->escape_string($mybb->input['title']), - 'message' => $db->escape_string($mybb->input['message']), - 'startdate' => $startdate, - 'enddate' => $enddate, - 'allowhtml' => $allowhtml, - 'allowmycode' => $allowmycode, - 'allowsmilies' => $allowsmilies - ); - $aid = $db->insert_query("announcements", $insert_announcement); - - log_moderator_action(array("aid" => $aid, "subject" => $db->escape_string($mybb->input['title'])), $lang->announcement_added); - - $plugins->run_hooks("modcp_do_new_announcement_end"); - - $cache->update_forumsdisplay(); - redirect("modcp.php?action=announcements", $lang->redirect_add_announcement); - } - } - else - { - $mybb->input['action'] = 'new_announcement'; - } -} - -if($mybb->input['action'] == "new_announcement") -{ - if($mybb->usergroup['canmanageannounce'] == 0) - { - error_no_permission(); - } - - add_breadcrumb($lang->mcp_nav_announcements, "modcp.php?action=announcements"); - add_breadcrumb($lang->add_announcement, "modcp.php?action=new_announcements"); - - $announcement_fid = $mybb->get_input('fid', MyBB::INPUT_INT); - - if(($mybb->usergroup['issupermod'] != 1 && $announcement_fid == -1) || ($announcement_fid != -1 && !is_moderator($announcement_fid, "canmanageannouncements")) || ($unviewableforums && in_array($announcement_fid, $unviewableforums))) - { - error_no_permission(); - } - - // Deal with inline errors - if(!empty($errors) || isset($preview)) - { - if(!empty($errors)) - { - $errors = inline_error($errors); - } - else - { - $errors = ''; - } - - // Set $announcement to input stuff - $announcement['subject'] = $mybb->input['title']; - $announcement['message'] = $mybb->input['message']; - $announcement['allowhtml'] = $allowhtml; - $announcement['allowmycode'] = $allowmycode; - $announcement['allowsmilies'] = $allowsmilies; - - $startmonth = $mybb->input['starttime_month']; - $startdateyear = htmlspecialchars_uni($mybb->input['starttime_year']); - $startday = $mybb->get_input('starttime_day', MyBB::INPUT_INT); - $starttime_time = htmlspecialchars_uni($mybb->input['starttime_time']); - $endmonth = $mybb->input['endtime_month']; - $enddateyear = htmlspecialchars_uni($mybb->input['endtime_year']); - $endday = $mybb->get_input('endtime_day', MyBB::INPUT_INT); - $endtime_time = htmlspecialchars_uni($mybb->input['endtime_time']); - } - else - { - $localized_time = TIME_NOW + (float)$mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - - $starttime_time = gmdate($mybb->settings['timeformat'], $localized_time); - $endtime_time = gmdate($mybb->settings['timeformat'], $localized_time); - $startday = $endday = gmdate("j", $localized_time); - $startmonth = $endmonth = gmdate("m", $localized_time); - $startdateyear = gmdate("Y", $localized_time); - - $announcement = array( - 'subject' => '', - 'message' => '', - 'allowhtml' => 1, - 'allowmycode' => 1, - 'allowsmilies' => 1 - ); - - $enddateyear = $startdateyear+1; - } - - // Generate form elements - $startdateday = $enddateday = ''; - for($day = 1; $day <= 31; ++$day) - { - if($startday == $day) - { - $selected = " selected=\"selected\""; - eval("\$startdateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - else - { - $selected = ''; - eval("\$startdateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - - if($endday == $day) - { - $selected = " selected=\"selected\""; - eval("\$enddateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - else - { - $selected = ''; - eval("\$enddateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - } - - $startmonthsel = $endmonthsel = array(); - foreach(array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12') as $month) - { - $startmonthsel[$month] = ''; - $endmonthsel[$month] = ''; - } - $startmonthsel[$startmonth] = "selected=\"selected\""; - $endmonthsel[$endmonth] = "selected=\"selected\""; - - $startdatemonth = $enddatemonth = ''; - - eval("\$startdatemonth .= \"".$templates->get("modcp_announcements_month_start")."\";"); - eval("\$enddatemonth .= \"".$templates->get("modcp_announcements_month_end")."\";"); - - $title = htmlspecialchars_uni($announcement['subject']); - $message = htmlspecialchars_uni($announcement['message']); - - $html_sel = $mycode_sel = $smilies_sel = array('yes' => '', 'no' => ''); - if($announcement['allowhtml']) - { - $html_sel['yes'] = ' checked="checked"'; - } - else - { - $html_sel['no'] = ' checked="checked"'; - } - - if($announcement['allowmycode']) - { - $mycode_sel['yes'] = ' checked="checked"'; - } - else - { - $mycode_sel['no'] = ' checked="checked"'; - } - - if($announcement['allowsmilies']) - { - $smilies_sel['yes'] = ' checked="checked"'; - } - else - { - $smilies_sel['no'] = ' checked="checked"'; - } - - $end_type_sel = array('infinite' => '', 'finite' => ''); - if(!isset($mybb->input['endtime_type']) || $mybb->input['endtime_type'] == 2) - { - $end_type_sel['infinite'] = ' checked="checked"'; - } - else - { - $end_type_sel['finite'] = ' checked="checked"'; - } - - // MyCode editor - $codebuttons = build_mycode_inserter(); - $smilieinserter = build_clickable_smilies(); - - if(isset($preview)) - { - $announcementarray = array( - 'aid' => 0, - 'fid' => $announcement_fid, - 'uid' => $mybb->user['uid'], - 'subject' => $mybb->input['title'], - 'message' => $mybb->input['message'], - 'allowhtml' => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - 'allowmycode' => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - 'allowsmilies' => $mybb->get_input('allowsmilies', MyBB::INPUT_INT), - 'dateline' => TIME_NOW, - 'userusername' => $mybb->user['username'], - ); - - $array = $mybb->user; - foreach($array as $key => $element) - { - $announcementarray[$key] = $element; - } - - // Gather usergroup data from the cache - // Field => Array Key - $data_key = array( - 'title' => 'grouptitle', - 'usertitle' => 'groupusertitle', - 'stars' => 'groupstars', - 'starimage' => 'groupstarimage', - 'image' => 'groupimage', - 'namestyle' => 'namestyle', - 'usereputationsystem' => 'usereputationsystem' - ); - - foreach($data_key as $field => $key) - { - $announcementarray[$key] = $groupscache[$announcementarray['usergroup']][$field]; - } - - require_once MYBB_ROOT."inc/functions_post.php"; - $postbit = build_postbit($announcementarray, 3); - eval("\$preview = \"".$templates->get("previewpost")."\";"); - } - else - { - $preview = ''; - } - - $plugins->run_hooks("modcp_new_announcement"); - - eval("\$announcements = \"".$templates->get("modcp_announcements_new")."\";"); - output_page($announcements); -} - -if($mybb->input['action'] == "do_edit_announcement") -{ - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canmanageannounce'] == 0) - { - error_no_permission(); - } - - // Get the announcement - $aid = $mybb->get_input('aid', MyBB::INPUT_INT); - $query = $db->simple_select("announcements", "*", "aid='{$aid}'"); - $announcement = $db->fetch_array($query); - - // Check that it exists - if(!$announcement) - { - error($lang->error_invalid_announcement); - } - - // Mod has permissions to edit this announcement - if(($mybb->usergroup['issupermod'] != 1 && $announcement['fid'] == -1) || ($announcement['fid'] != -1 && !is_moderator($announcement['fid'], "canmanageannouncements")) || ($unviewableforums && in_array($announcement['fid'], $unviewableforums))) - { - error_no_permission(); - } - - $errors = array(); - - // Basic error checking - $mybb->input['title'] = $mybb->get_input('title'); - if(!trim($mybb->input['title'])) - { - $errors[] = $lang->error_missing_title; - } - - $mybb->input['message'] = $mybb->get_input('message'); - if(!trim($mybb->input['message'])) - { - $errors[] = $lang->error_missing_message; - } - - $mybb->input['starttime_time'] = $mybb->get_input('starttime_time'); - $mybb->input['endtime_time'] = $mybb->get_input('endtime_time'); - $startdate = @explode(" ", $mybb->input['starttime_time']); - $startdate = @explode(":", $startdate[0]); - $enddate = @explode(" ", $mybb->input['endtime_time']); - $enddate = @explode(":", $enddate[0]); - - if(stristr($mybb->input['starttime_time'], "pm")) - { - $startdate[0] = 12+$startdate[0]; - if($startdate[0] >= 24) - { - $startdate[0] = "00"; - } - } - - if(stristr($mybb->input['endtime_time'], "pm")) - { - $enddate[0] = 12+$enddate[0]; - if($enddate[0] >= 24) - { - $enddate[0] = "00"; - } - } - - $mybb->input['starttime_month'] = $mybb->get_input('starttime_month'); - $months = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); - if(!in_array($mybb->input['starttime_month'], $months)) - { - $mybb->input['starttime_month'] = '01'; - } - - $localized_time_offset = (float)$mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - - $startdate = gmmktime((int)$startdate[0], (int)$startdate[1], 0, $mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT)) - $localized_time_offset; - if(!checkdate($mybb->get_input('starttime_month', MyBB::INPUT_INT), $mybb->get_input('starttime_day', MyBB::INPUT_INT), $mybb->get_input('starttime_year', MyBB::INPUT_INT)) || $startdate < 0 || $startdate == false) - { - $errors[] = $lang->error_invalid_start_date; - } - - if($mybb->get_input('endtime_type', MyBB::INPUT_INT) == "2") - { - $enddate = '0'; - $mybb->input['endtime_month'] = '01'; - } - else - { - $mybb->input['endtime_month'] = $mybb->get_input('endtime_month'); - if(!in_array($mybb->input['endtime_month'], $months)) - { - $mybb->input['endtime_month'] = '01'; - } - $enddate = gmmktime((int)$enddate[0], (int)$enddate[1], 0, $mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT)) - $localized_time_offset; - if(!checkdate($mybb->get_input('endtime_month', MyBB::INPUT_INT), $mybb->get_input('endtime_day', MyBB::INPUT_INT), $mybb->get_input('endtime_year', MyBB::INPUT_INT)) || $enddate < 0 || $enddate == false) - { - $errors[] = $lang->error_invalid_end_date; - } - elseif($enddate <= $startdate) - { - $errors[] = $lang->error_end_before_start; - } - } - - if($mybb->get_input('allowhtml', MyBB::INPUT_INT) == 1) - { - $allowhtml = 1; - } - else - { - $allowhtml = 0; - } - if($mybb->get_input('allowmycode', MyBB::INPUT_INT) == 1) - { - $allowmycode = 1; - } - else - { - $allowmycode = 0; - } - if($mybb->get_input('allowsmilies', MyBB::INPUT_INT) == 1) - { - $allowsmilies = 1; - } - else - { - $allowsmilies = 0; - } - - $plugins->run_hooks("modcp_do_edit_announcement_start"); - - // Proceed to update if no errors - if(!$errors) - { - if(isset($mybb->input['preview'])) - { - $preview = array(); - $mybb->input['action'] = 'edit_announcement'; - } - else - { - $update_announcement = array( - 'uid' => $mybb->user['uid'], - 'subject' => $db->escape_string($mybb->input['title']), - 'message' => $db->escape_string($mybb->input['message']), - 'startdate' => $startdate, - 'enddate' => $enddate, - 'allowhtml' => $allowhtml, - 'allowmycode' => $allowmycode, - 'allowsmilies' => $allowsmilies - ); - $db->update_query("announcements", $update_announcement, "aid='{$aid}'"); - - log_moderator_action(array("aid" => $announcement['aid'], "subject" => $db->escape_string($mybb->input['title'])), $lang->announcement_edited); - - $plugins->run_hooks("modcp_do_edit_announcement_end"); - - $cache->update_forumsdisplay(); - redirect("modcp.php?action=announcements", $lang->redirect_edit_announcement); - } - } - else - { - $mybb->input['action'] = 'edit_announcement'; - } -} - -if($mybb->input['action'] == "edit_announcement") -{ - if($mybb->usergroup['canmanageannounce'] == 0) - { - error_no_permission(); - } - - $aid = $mybb->get_input('aid', MyBB::INPUT_INT); - - add_breadcrumb($lang->mcp_nav_announcements, "modcp.php?action=announcements"); - add_breadcrumb($lang->edit_announcement, "modcp.php?action=edit_announcements&aid={$aid}"); - - // Get announcement - if(!isset($announcement) || $mybb->request_method != 'post') - { - $query = $db->simple_select("announcements", "*", "aid='{$aid}'"); - $announcement = $db->fetch_array($query); - } - - if(!$announcement) - { - error($lang->error_invalid_announcement); - } - if(($mybb->usergroup['issupermod'] != 1 && $announcement['fid'] == -1) || ($announcement['fid'] != -1 && !is_moderator($announcement['fid'], "canmanageannouncements")) || ($unviewableforums && in_array($announcement['fid'], $unviewableforums))) - { - error_no_permission(); - } - - if(!$announcement['startdate']) - { - // No start date? Make it now. - $announcement['startdate'] = TIME_NOW; - } - - $makeshift_end = false; - if(!$announcement['enddate']) - { - $makeshift_end = true; - $makeshift_time = TIME_NOW; - if($announcement['startdate']) - { - $makeshift_time = $announcement['startdate']; - } - - // No end date? Make it a year from now. - $announcement['enddate'] = $makeshift_time + (60 * 60 * 24 * 366); - } - - // Deal with inline errors - if(!empty($errors) || isset($preview)) - { - if(!empty($errors)) - { - $errors = inline_error($errors); - } - else - { - $errors = ''; - } - - // Set $announcement to input stuff - $announcement['subject'] = $mybb->input['title']; - $announcement['message'] = $mybb->input['message']; - $announcement['allowhtml'] = $allowhtml; - $announcement['allowmycode'] = $allowmycode; - $announcement['allowsmilies'] = $allowsmilies; - - $startmonth = $mybb->input['starttime_month']; - $startdateyear = htmlspecialchars_uni($mybb->input['starttime_year']); - $startday = $mybb->get_input('starttime_day', MyBB::INPUT_INT); - $starttime_time = htmlspecialchars_uni($mybb->input['starttime_time']); - $endmonth = $mybb->input['endtime_month']; - $enddateyear = htmlspecialchars_uni($mybb->input['endtime_year']); - $endday = $mybb->get_input('endtime_day', MyBB::INPUT_INT); - $endtime_time = htmlspecialchars_uni($mybb->input['endtime_time']); - - $errored = true; - } - else - { - $localized_time_startdate = $announcement['startdate'] + (float)$mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - $localized_time_enddate = $announcement['enddate'] + (float)$mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - - $starttime_time = gmdate($mybb->settings['timeformat'], $localized_time_startdate); - $endtime_time = gmdate($mybb->settings['timeformat'], $localized_time_enddate); - - $startday = gmdate('j', $localized_time_startdate); - $endday = gmdate('j', $localized_time_enddate); - - $startmonth = gmdate('m', $localized_time_startdate); - $endmonth = gmdate('m', $localized_time_enddate); - - $startdateyear = gmdate('Y', $localized_time_startdate); - $enddateyear = gmdate('Y', $localized_time_enddate); - - $errored = false; - } - - // Generate form elements - $startdateday = $enddateday = ''; - for($day = 1; $day <= 31; ++$day) - { - if($startday == $day) - { - $selected = " selected=\"selected\""; - eval("\$startdateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - else - { - $selected = ''; - eval("\$startdateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - - if($endday == $day) - { - $selected = " selected=\"selected\""; - eval("\$enddateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - else - { - $selected = ''; - eval("\$enddateday .= \"".$templates->get("modcp_announcements_day")."\";"); - } - } - - $startmonthsel = $endmonthsel = array(); - foreach(array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12') as $month) - { - $startmonthsel[$month] = ''; - $endmonthsel[$month] = ''; - } - $startmonthsel[$startmonth] = "selected=\"selected\""; - $endmonthsel[$endmonth] = "selected=\"selected\""; - - $startdatemonth = $enddatemonth = ''; - - eval("\$startdatemonth .= \"".$templates->get("modcp_announcements_month_start")."\";"); - eval("\$enddatemonth .= \"".$templates->get("modcp_announcements_month_end")."\";"); - - $title = htmlspecialchars_uni($announcement['subject']); - $message = htmlspecialchars_uni($announcement['message']); - - $html_sel = $mycode_sel = $smilies_sel = array('yes' => '', 'no' => ''); - if($announcement['allowhtml']) - { - $html_sel['yes'] = ' checked="checked"'; - } - else - { - $html_sel['no'] = ' checked="checked"'; - } - - if($announcement['allowmycode']) - { - $mycode_sel['yes'] = ' checked="checked"'; - } - else - { - $mycode_sel['no'] = ' checked="checked"'; - } - - if($announcement['allowsmilies']) - { - $smilies_sel['yes'] = ' checked="checked"'; - } - else - { - $smilies_sel['no'] = ' checked="checked"'; - } - - $end_type_sel = array('infinite' => '', 'finite' => ''); - if(($errored && $mybb->get_input('endtime_type', MyBB::INPUT_INT) == 2) || (!$errored && (int)$announcement['enddate'] == 0) || $makeshift_end == true) - { - $end_type_sel['infinite'] = ' checked="checked"'; - } - else - { - $end_type_sel['finite'] = ' checked="checked"'; - } - - // MyCode editor - $codebuttons = build_mycode_inserter(); - $smilieinserter = build_clickable_smilies(); - - if(isset($preview)) - { - $announcementarray = array( - 'aid' => $announcement['aid'], - 'fid' => $announcement['fid'], - 'uid' => $mybb->user['uid'], - 'subject' => $mybb->input['title'], - 'message' => $mybb->input['message'], - 'allowhtml' => $mybb->get_input('allowhtml', MyBB::INPUT_INT), - 'allowmycode' => $mybb->get_input('allowmycode', MyBB::INPUT_INT), - 'allowsmilies' => $mybb->get_input('allowsmilies', MyBB::INPUT_INT), - 'dateline' => TIME_NOW, - 'userusername' => $mybb->user['username'], - ); - - $array = $mybb->user; - foreach($array as $key => $element) - { - $announcementarray[$key] = $element; - } - - // Gather usergroup data from the cache - // Field => Array Key - $data_key = array( - 'title' => 'grouptitle', - 'usertitle' => 'groupusertitle', - 'stars' => 'groupstars', - 'starimage' => 'groupstarimage', - 'image' => 'groupimage', - 'namestyle' => 'namestyle', - 'usereputationsystem' => 'usereputationsystem' - ); - - foreach($data_key as $field => $key) - { - $announcementarray[$key] = $groupscache[$announcementarray['usergroup']][$field]; - } - - require_once MYBB_ROOT."inc/functions_post.php"; - $postbit = build_postbit($announcementarray, 3); - eval("\$preview = \"".$templates->get("previewpost")."\";"); - } - else - { - $preview = ''; - } - - $plugins->run_hooks("modcp_edit_announcement"); - - eval("\$announcements = \"".$templates->get("modcp_announcements_edit")."\";"); - output_page($announcements); -} - -if($mybb->input['action'] == "announcements") -{ - if($mybb->usergroup['canmanageannounce'] == 0) - { - error_no_permission(); - } - - if($numannouncements == 0 && $mybb->usergroup['issupermod'] != 1) - { - error($lang->you_cannot_manage_announcements); - } - - add_breadcrumb($lang->mcp_nav_announcements, "modcp.php?action=announcements"); - - // Fetch announcements into their proper arrays - $query = $db->simple_select("announcements", "aid, fid, subject, enddate"); - $announcements = $global_announcements = array(); - while($announcement = $db->fetch_array($query)) - { - if($announcement['fid'] == -1) - { - $global_announcements[$announcement['aid']] = $announcement; - continue; - } - $announcements[$announcement['fid']][$announcement['aid']] = $announcement; - } - - $announcements_global = ''; - if($mybb->usergroup['issupermod'] == 1) - { - if($global_announcements && $mybb->usergroup['issupermod'] == 1) - { - // Get the global announcements - foreach($global_announcements as $aid => $announcement) - { - $trow = alt_trow(); - if($announcement['startdate'] > TIME_NOW || ($announcement['enddate'] < TIME_NOW && $announcement['enddate'] != 0)) - { - eval("\$icon = \"".$templates->get("modcp_announcements_announcement_expired")."\";"); - } - else - { - eval("\$icon = \"".$templates->get("modcp_announcements_announcement_active")."\";"); - } - - $subject = htmlspecialchars_uni($parser->parse_badwords($announcement['subject'])); - - eval("\$announcements_global .= \"".$templates->get("modcp_announcements_announcement_global")."\";"); - } - } - else - { - // No global announcements - eval("\$announcements_global = \"".$templates->get("modcp_no_announcements_global")."\";"); - } - eval("\$announcements_global = \"".$templates->get("modcp_announcements_global")."\";"); - } - - $announcements_forum = ''; - fetch_forum_announcements(); - - if(!$announcements_forum) - { - eval("\$announcements_forum = \"".$templates->get("modcp_no_announcements_forum")."\";"); - } - - $plugins->run_hooks("modcp_announcements"); - - eval("\$announcements = \"".$templates->get("modcp_announcements")."\";"); - output_page($announcements); -} - -if($mybb->input['action'] == "do_modqueue") -{ - require_once MYBB_ROOT."inc/class_moderation.php"; - $moderation = new Moderation; - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canmanagemodqueue'] == 0) - { - error_no_permission(); - } - - $plugins->run_hooks("modcp_do_modqueue_start"); - - $mybb->input['threads'] = $mybb->get_input('threads', MyBB::INPUT_ARRAY); - $mybb->input['posts'] = $mybb->get_input('posts', MyBB::INPUT_ARRAY); - $mybb->input['attachments'] = $mybb->get_input('attachments', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['threads'])) - { - $threads = array_map("intval", array_keys($mybb->input['threads'])); - $threads_to_approve = $threads_to_delete = array(); - // Fetch threads - $query = $db->simple_select("threads", "tid", "tid IN (".implode(",", $threads)."){$flist_queue_threads}"); - while($thread = $db->fetch_array($query)) - { - if(!isset($mybb->input['threads'][$thread['tid']])) - { - continue; - } - $action = $mybb->input['threads'][$thread['tid']]; - if($action == "approve") - { - $threads_to_approve[] = $thread['tid']; - } - else if($action == "delete") - { - $threads_to_delete[] = $thread['tid']; - } - } - if(!empty($threads_to_approve)) - { - $moderation->approve_threads($threads_to_approve); - log_moderator_action(array('tids' => $threads_to_approve), $lang->multi_approve_threads); - } - if(!empty($threads_to_delete)) - { - if($mybb->settings['soft_delete'] == 1) - { - $moderation->soft_delete_threads($threads_to_delete); - log_moderator_action(array('tids' => $threads_to_delete), $lang->multi_soft_delete_threads); - } - else - { - foreach($threads_to_delete as $tid) - { - $moderation->delete_thread($tid); - } - log_moderator_action(array('tids' => $threads_to_delete), $lang->multi_delete_threads); - } - } - - $plugins->run_hooks("modcp_do_modqueue_end"); - - redirect("modcp.php?action=modqueue", $lang->redirect_threadsmoderated); - } - else if(!empty($mybb->input['posts'])) - { - $posts = array_map("intval", array_keys($mybb->input['posts'])); - // Fetch posts - $posts_to_approve = $posts_to_delete = array(); - $query = $db->simple_select("posts", "pid", "pid IN (".implode(",", $posts)."){$flist_queue_posts}"); - while($post = $db->fetch_array($query)) - { - if(!isset($mybb->input['posts'][$post['pid']])) - { - continue; - } - $action = $mybb->input['posts'][$post['pid']]; - if($action == "approve") - { - $posts_to_approve[] = $post['pid']; - } - else if($action == "delete" && $mybb->settings['soft_delete'] != 1) - { - $moderation->delete_post($post['pid']); - } - else if($action == "delete") - { - $posts_to_delete[] = $post['pid']; - } - } - if(!empty($posts_to_approve)) - { - $moderation->approve_posts($posts_to_approve); - log_moderator_action(array('pids' => $posts_to_approve), $lang->multi_approve_posts); - } - if(!empty($posts_to_delete)) - { - if($mybb->settings['soft_delete'] == 1) - { - $moderation->soft_delete_posts($posts_to_delete); - log_moderator_action(array('pids' => $posts_to_delete), $lang->multi_soft_delete_posts); - } - else - { - log_moderator_action(array('pids' => $posts_to_delete), $lang->multi_delete_posts); - } - } - - $plugins->run_hooks("modcp_do_modqueue_end"); - - redirect("modcp.php?action=modqueue&type=posts", $lang->redirect_postsmoderated); - } - else if(!empty($mybb->input['attachments'])) - { - $attachments = array_map("intval", array_keys($mybb->input['attachments'])); - $query = $db->query(" - SELECT a.pid, a.aid - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (a.pid=p.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE aid IN (".implode(",", $attachments)."){$tflist_queue_attach} - "); - while($attachment = $db->fetch_array($query)) - { - if(!isset($mybb->input['attachments'][$attachment['aid']])) - { - continue; - } - $action = $mybb->input['attachments'][$attachment['aid']]; - if($action == "approve") - { - $db->update_query("attachments", array("visible" => 1), "aid='{$attachment['aid']}'"); - } - else if($action == "delete") - { - remove_attachment($attachment['pid'], '', $attachment['aid']); - } - } - - $plugins->run_hooks("modcp_do_modqueue_end"); - - redirect("modcp.php?action=modqueue&type=attachments", $lang->redirect_attachmentsmoderated); - } -} - -if($mybb->input['action'] == "modqueue") -{ - $navsep = ''; - - if($mybb->usergroup['canmanagemodqueue'] == 0) - { - error_no_permission(); - } - - if($nummodqueuethreads == 0 && $nummodqueueposts == 0 && $nummodqueueattach == 0 && $mybb->usergroup['issupermod'] != 1) - { - error($lang->you_cannot_use_mod_queue); - } - - $mybb->input['type'] = $mybb->get_input('type'); - $threadqueue = $postqueue = $attachmentqueue = ''; - if($mybb->input['type'] == "threads" || !$mybb->input['type'] && ($nummodqueuethreads > 0 || $mybb->usergroup['issupermod'] == 1)) - { - if($nummodqueuethreads == 0 && $mybb->usergroup['issupermod'] != 1) - { - error($lang->you_cannot_moderate_threads); - } - - $forum_cache = $cache->read("forums"); - - $query = $db->simple_select("threads", "COUNT(tid) AS unapprovedthreads", "visible='0' {$flist_queue_threads}"); - $unapproved_threads = $db->fetch_field($query, "unapprovedthreads"); - - // Figure out if we need to display multiple pages. - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $perpage = $mybb->settings['threadsperpage']; - $pages = $unapproved_threads / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $multipage = multipage($unapproved_threads, $perpage, $page, "modcp.php?action=modqueue&type=threads"); - - $query = $db->query(" - SELECT t.tid, t.dateline, t.fid, t.subject, t.username AS threadusername, p.message AS postmessage, u.username AS username, t.uid - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=t.firstpost) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=t.uid) - WHERE t.visible='0' {$tflist_queue_threads} - ORDER BY t.lastpost DESC - LIMIT {$start}, {$perpage} - "); - $threads = ''; - while($thread = $db->fetch_array($query)) - { - $altbg = alt_trow(); - $thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - $thread['threadlink'] = get_thread_link($thread['tid']); - $forum_link = get_forum_link($thread['fid']); - $forum_name = $forum_cache[$thread['fid']]['name']; - $threaddate = my_date('relative', $thread['dateline']); - - if($thread['username'] == "") - { - if($thread['threadusername'] != "") - { - $thread['threadusername'] = htmlspecialchars_uni($thread['threadusername']); - $profile_link = $thread['threadusername']; - } - else - { - $profile_link = $lang->guest; - } - } - else - { - $thread['username'] = htmlspecialchars_uni($thread['username']); - $profile_link = build_profile_link($thread['username'], $thread['uid']); - } - - $thread['postmessage'] = nl2br(htmlspecialchars_uni($thread['postmessage'])); - eval("\$forum = \"".$templates->get("modcp_modqueue_link_forum")."\";"); - eval("\$threads .= \"".$templates->get("modcp_modqueue_threads_thread")."\";"); - } - - if(!$threads && $mybb->input['type'] == "threads") - { - eval("\$threads = \"".$templates->get("modcp_modqueue_threads_empty")."\";"); - } - - if($threads) - { - add_breadcrumb($lang->mcp_nav_modqueue_threads, "modcp.php?action=modqueue&type=threads"); - - $plugins->run_hooks("modcp_modqueue_threads_end"); - - if($nummodqueueposts > 0 || $mybb->usergroup['issupermod'] == 1) - { - $navsep = " | "; - eval("\$post_link = \"".$templates->get("modcp_modqueue_post_link")."\";"); - } - - if($mybb->settings['enableattachments'] == 1 && ($nummodqueueattach > 0 || $mybb->usergroup['issupermod'] == 1)) - { - $navsep = " | "; - eval("\$attachment_link = \"".$templates->get("modcp_modqueue_attachment_link")."\";"); - } - - eval("\$mass_controls = \"".$templates->get("modcp_modqueue_masscontrols")."\";"); - eval("\$threadqueue = \"".$templates->get("modcp_modqueue_threads")."\";"); - output_page($threadqueue); - } - $type = 'threads'; - } - - if($mybb->input['type'] == "posts" || (!$mybb->input['type'] && !$threadqueue && ($nummodqueueposts > 0 || $mybb->usergroup['issupermod'] == 1))) - { - if($nummodqueueposts == 0 && $mybb->usergroup['issupermod'] != 1) - { - error($lang->you_cannot_moderate_posts); - } - - $forum_cache = $cache->read("forums"); - - $query = $db->query(" - SELECT COUNT(pid) AS unapprovedposts - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.visible='0' {$tflist_queue_posts} AND t.firstpost != p.pid - "); - $unapproved_posts = $db->fetch_field($query, "unapprovedposts"); - - // Figure out if we need to display multiple pages. - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $perpage = $mybb->settings['postsperpage']; - $pages = $unapproved_posts / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $multipage = multipage($unapproved_posts, $perpage, $page, "modcp.php?action=modqueue&type=posts"); - - $query = $db->query(" - SELECT p.pid, p.subject, p.message, p.username AS postusername, t.subject AS threadsubject, t.tid, u.username, p.uid, t.fid, p.dateline - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.visible='0' {$tflist_queue_posts} AND t.firstpost != p.pid - ORDER BY p.dateline DESC - LIMIT {$start}, {$perpage} - "); - $posts = ''; - while($post = $db->fetch_array($query)) - { - $altbg = alt_trow(); - $post['threadsubject'] = htmlspecialchars_uni($parser->parse_badwords($post['threadsubject'])); - $post['subject'] = htmlspecialchars_uni($parser->parse_badwords($post['subject'])); - $post['threadlink'] = get_thread_link($post['tid']); - $post['postlink'] = get_post_link($post['pid'], $post['tid']); - $forum_link = get_forum_link($post['fid']); - $forum_name = $forum_cache[$post['fid']]['name']; - $postdate = my_date('relative', $post['dateline']); - - if($post['username'] == "") - { - if($post['postusername'] != "") - { - $post['postusername'] = htmlspecialchars_uni($post['postusername']); - $profile_link = $post['postusername']; - } - else - { - $profile_link = $lang->guest; - } - } - else - { - $post['username'] = htmlspecialchars_uni($post['username']); - $profile_link = build_profile_link($post['username'], $post['uid']); - } - - eval("\$thread = \"".$templates->get("modcp_modqueue_link_thread")."\";"); - eval("\$forum = \"".$templates->get("modcp_modqueue_link_forum")."\";"); - $post['message'] = nl2br(htmlspecialchars_uni($post['message'])); - eval("\$posts .= \"".$templates->get("modcp_modqueue_posts_post")."\";"); - } - - if(!$posts && $mybb->input['type'] == "posts") - { - eval("\$posts = \"".$templates->get("modcp_modqueue_posts_empty")."\";"); - } - - if($posts) - { - add_breadcrumb($lang->mcp_nav_modqueue_posts, "modcp.php?action=modqueue&type=posts"); - - $plugins->run_hooks("modcp_modqueue_posts_end"); - - if($nummodqueuethreads > 0 || $mybb->usergroup['issupermod'] == 1) - { - $navsep = " | "; - eval("\$thread_link = \"".$templates->get("modcp_modqueue_thread_link")."\";"); - } - - if($mybb->settings['enableattachments'] == 1 && ($nummodqueueattach > 0 || $mybb->usergroup['issupermod'] == 1)) - { - $navsep = " | "; - eval("\$attachment_link = \"".$templates->get("modcp_modqueue_attachment_link")."\";"); - } - - eval("\$mass_controls = \"".$templates->get("modcp_modqueue_masscontrols")."\";"); - eval("\$postqueue = \"".$templates->get("modcp_modqueue_posts")."\";"); - output_page($postqueue); - } - } - - if($mybb->input['type'] == "attachments" || (!$mybb->input['type'] && !$postqueue && !$threadqueue && $mybb->settings['enableattachments'] == 1 && ($nummodqueueattach > 0 || $mybb->usergroup['issupermod'] == 1))) - { - if($mybb->settings['enableattachments'] == 0) - { - error($lang->attachments_disabled); - } - - if($nummodqueueattach == 0 && $mybb->usergroup['issupermod'] != 1) - { - error($lang->you_cannot_moderate_attachments); - } - - $query = $db->query(" - SELECT COUNT(aid) AS unapprovedattachments - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE a.visible='0'{$tflist_queue_attach} - "); - $unapproved_attachments = $db->fetch_field($query, "unapprovedattachments"); - - // Figure out if we need to display multiple pages. - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $perpage = $mybb->settings['postsperpage']; - $pages = $unapproved_attachments / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $multipage = multipage($unapproved_attachments, $perpage, $page, "modcp.php?action=modqueue&type=attachments"); - - $query = $db->query(" - SELECT a.*, p.subject AS postsubject, p.dateline, p.uid, u.username, t.tid, t.subject AS threadsubject - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE a.visible='0'{$tflist_queue_attach} - ORDER BY a.dateuploaded DESC - LIMIT {$start}, {$perpage} - "); - $attachments = ''; - while($attachment = $db->fetch_array($query)) - { - $altbg = alt_trow(); - - if(!$attachment['dateuploaded']) - { - $attachment['dateuploaded'] = $attachment['dateline']; - } - - $attachdate = my_date('relative', $attachment['dateuploaded']); - - $attachment['postsubject'] = htmlspecialchars_uni($parser->parse_badwords($attachment['postsubject'])); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - $attachment['threadsubject'] = htmlspecialchars_uni($parser->parse_badwords($attachment['threadsubject'])); - $attachment['filesize'] = get_friendly_size($attachment['filesize']); - - $link = get_post_link($attachment['pid'], $attachment['tid']) . "#pid{$attachment['pid']}"; - $thread_link = get_thread_link($attachment['tid']); - $attachment['username'] = htmlspecialchars_uni($attachment['username']); - $profile_link = build_profile_link($attachment['username'], $attachment['uid']); - - eval("\$attachments .= \"".$templates->get("modcp_modqueue_attachments_attachment")."\";"); - } - - if(!$attachments && $mybb->input['type'] == "attachments") - { - eval("\$attachments = \"".$templates->get("modcp_modqueue_attachments_empty")."\";"); - } - - if($attachments) - { - add_breadcrumb($lang->mcp_nav_modqueue_attachments, "modcp.php?action=modqueue&type=attachments"); - - $plugins->run_hooks("modcp_modqueue_attachments_end"); - - if($nummodqueuethreads > 0 || $mybb->usergroup['issupermod'] == 1) - { - eval("\$thread_link = \"".$templates->get("modcp_modqueue_thread_link")."\";"); - $navsep = " | "; - } - - if($nummodqueueposts > 0 || $mybb->usergroup['issupermod'] == 1) - { - eval("\$post_link = \"".$templates->get("modcp_modqueue_post_link")."\";"); - $navsep = " | "; - } - - eval("\$mass_controls = \"".$templates->get("modcp_modqueue_masscontrols")."\";"); - eval("\$attachmentqueue = \"".$templates->get("modcp_modqueue_attachments")."\";"); - output_page($attachmentqueue); - } - } - - // Still nothing? All queues are empty! :-D - if(!$threadqueue && !$postqueue && !$attachmentqueue) - { - add_breadcrumb($lang->mcp_nav_modqueue, "modcp.php?action=modqueue"); - - $plugins->run_hooks("modcp_modqueue_end"); - - eval("\$queue = \"".$templates->get("modcp_modqueue_empty")."\";"); - output_page($queue); - } -} - -if($mybb->input['action'] == "do_editprofile") -{ - // Verify incoming POST request - verify_post_check($mybb->input['my_post_key']); - - if($mybb->usergroup['caneditprofiles'] == 0) - { - error_no_permission(); - } - - $user = get_user($mybb->input['uid']); - if(!$user) - { - error($lang->error_nomember); - } - - // Check if the current user has permission to edit this user - if(!modcp_can_manage_user($user['uid'])) - { - error_no_permission(); - } - - $plugins->run_hooks("modcp_do_editprofile_start"); - - if($mybb->get_input('away', MyBB::INPUT_INT) == 1 && $mybb->settings['allowaway'] != 0) - { - $awaydate = TIME_NOW; - if(!empty($mybb->input['awayday'])) - { - // If the user has indicated that they will return on a specific day, but not month or year, assume it is current month and year - if(!$mybb->get_input('awaymonth', MyBB::INPUT_INT)) - { - $mybb->input['awaymonth'] = my_date('n', $awaydate); - } - if(!$mybb->get_input('awayyear', MyBB::INPUT_INT)) - { - $mybb->input['awayyear'] = my_date('Y', $awaydate); - } - - $return_month = (int)substr($mybb->get_input('awaymonth'), 0, 2); - $return_day = (int)substr($mybb->get_input('awayday'), 0, 2); - $return_year = min((int)$mybb->get_input('awayyear'), 9999); - - // Check if return date is after the away date. - $returntimestamp = gmmktime(0, 0, 0, $return_month, $return_day, $return_year); - $awaytimestamp = gmmktime(0, 0, 0, my_date('n', $awaydate), my_date('j', $awaydate), my_date('Y', $awaydate)); - if($return_year < my_date('Y', $awaydate) || ($returntimestamp < $awaytimestamp && $return_year == my_date('Y', $awaydate))) - { - error($lang->error_modcp_return_date_past); - } - - $returndate = "{$return_day}-{$return_month}-{$return_year}"; - } - else - { - $returndate = ""; - } - $away = array( - "away" => 1, - "date" => $awaydate, - "returndate" => $returndate, - "awayreason" => $mybb->get_input('awayreason') - ); - } - else - { - $away = array( - "away" => 0, - "date" => '', - "returndate" => '', - "awayreason" => '' - ); - } - - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler('update'); - - // Set the data for the new user. - $updated_user = array( - "uid" => $user['uid'], - "profile_fields" => $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY), - "profile_fields_editable" => true, - "website" => $mybb->get_input('website'), - "icq" => $mybb->get_input('icq'), - "aim" => $mybb->get_input('aim'), - "yahoo" => $mybb->get_input('yahoo'), - "skype" => $mybb->get_input('skype'), - "google" => $mybb->get_input('google'), - "signature" => $mybb->get_input('signature'), - "usernotes" => $mybb->get_input('usernotes'), - "away" => $away - ); - - $updated_user['birthday'] = array( - "day" => $mybb->get_input('birthday_day', MyBB::INPUT_INT), - "month" => $mybb->get_input('birthday_month', MyBB::INPUT_INT), - "year" => $mybb->get_input('birthday_year', MyBB::INPUT_INT) - ); - - if(!empty($mybb->input['usertitle'])) - { - $updated_user['usertitle'] = $mybb->get_input('usertitle'); - } - else if(!empty($mybb->input['reverttitle'])) - { - $updated_user['usertitle'] = ''; - } - - if(!empty($mybb->input['remove_avatar'])) - { - $updated_user['avatarurl'] = ''; - } - - // Set the data of the user in the datahandler. - $userhandler->set_data($updated_user); - $errors = ''; - - // Validate the user and get any errors that might have occurred. - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - $mybb->input['action'] = "editprofile"; - } - else - { - // Are we removing an avatar from this user? - if(!empty($mybb->input['remove_avatar'])) - { - $extra_user_updates = array( - "avatar" => "", - "avatardimensions" => "", - "avatartype" => "" - ); - remove_avatars($user['uid']); - } - - // Moderator "Options" (suspend signature, suspend/moderate posting) - $moderator_options = array( - 1 => array( - "action" => "suspendsignature", // The moderator action we're performing - "period" => "action_period", // The time period we've selected from the dropdown box - "time" => "action_time", // The time we've entered - "update_field" => "suspendsignature", // The field in the database to update if true - "update_length" => "suspendsigtime" // The length of suspension field in the database - ), - 2 => array( - "action" => "moderateposting", - "period" => "modpost_period", - "time" => "modpost_time", - "update_field" => "moderateposts", - "update_length" => "moderationtime" - ), - 3 => array( - "action" => "suspendposting", - "period" => "suspost_period", - "time" => "suspost_time", - "update_field" => "suspendposting", - "update_length" => "suspensiontime" - ) - ); - - require_once MYBB_ROOT."inc/functions_warnings.php"; - foreach($moderator_options as $option) - { - $mybb->input[$option['time']] = $mybb->get_input($option['time'], MyBB::INPUT_INT); - $mybb->input[$option['period']] = $mybb->get_input($option['period']); - if(empty($mybb->input[$option['action']])) - { - if($user[$option['update_field']] == 1) - { - // We're revoking the suspension - $extra_user_updates[$option['update_field']] = 0; - $extra_user_updates[$option['update_length']] = 0; - } - - // Skip this option if we haven't selected it - continue; - } - - else - { - if($mybb->input[$option['time']] == 0 && $mybb->input[$option['period']] != "never" && $user[$option['update_field']] != 1) - { - // User has selected a type of ban, but not entered a valid time frame - $string = $option['action']."_error"; - $errors[] = $lang->$string; - } - - if(!is_array($errors)) - { - $suspend_length = fetch_time_length((int)$mybb->input[$option['time']], $mybb->input[$option['period']]); - - if($user[$option['update_field']] == 1 && ($mybb->input[$option['time']] || $mybb->input[$option['period']] == "never")) - { - // We already have a suspension, but entered a new time - if($suspend_length == "-1") - { - // Permanent ban on action - $extra_user_updates[$option['update_length']] = 0; - } - elseif($suspend_length && $suspend_length != "-1") - { - // Temporary ban on action - $extra_user_updates[$option['update_length']] = TIME_NOW + $suspend_length; - } - } - elseif(!$user[$option['update_field']]) - { - // New suspension for this user... bad user! - $extra_user_updates[$option['update_field']] = 1; - if($suspend_length == "-1") - { - $extra_user_updates[$option['update_length']] = 0; - } - else - { - $extra_user_updates[$option['update_length']] = TIME_NOW + $suspend_length; - } - } - } - } - } - - // Those with javascript turned off will be able to select both - cheeky! - // Check to make sure we're not moderating AND suspending posting - if(isset($extra_user_updates) && $extra_user_updates['moderateposts'] && $extra_user_updates['suspendposting']) - { - $errors[] = $lang->suspendmoderate_error; - } - - if(is_array($errors)) - { - $mybb->input['action'] = "editprofile"; - } - else - { - $plugins->run_hooks("modcp_do_editprofile_update"); - - // Continue with the update if there is no errors - $user_info = $userhandler->update_user(); - if(!empty($extra_user_updates)) - { - $db->update_query("users", $extra_user_updates, "uid='{$user['uid']}'"); - } - log_moderator_action(array("uid" => $user['uid'], "username" => $user['username']), $lang->edited_user); - - $plugins->run_hooks("modcp_do_editprofile_end"); - - redirect("modcp.php?action=finduser", $lang->redirect_user_updated); - } - } -} - -if($mybb->input['action'] == "editprofile") -{ - if($mybb->usergroup['caneditprofiles'] == 0) - { - error_no_permission(); - } - - add_breadcrumb($lang->mcp_nav_editprofile, "modcp.php?action=editprofile"); - - $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); - if(!$user) - { - error($lang->error_nomember); - } - - // Check if the current user has permission to edit this user - if(!modcp_can_manage_user($user['uid'])) - { - error_no_permission(); - } - - if(!my_validate_url($user['website'])) - { - $user['website'] = ''; - } - - if($user['icq'] != "0") - { - $user['icq'] = (int)$user['icq']; - } - - if(!$errors) - { - $mybb->input = array_merge($user, $mybb->input); - $birthday = explode('-', $user['birthday']); - if(!isset($birthday[1])) - { - $birthday[1] = ''; - } - if(!isset($birthday[2])) - { - $birthday[2] = ''; - } - list($mybb->input['birthday_day'], $mybb->input['birthday_month'], $mybb->input['birthday_year']) = $birthday; - } - else - { - $errors = inline_error($errors); - } - - // Sanitize all input - foreach(array('usertitle', 'website', 'icq', 'aim', 'yahoo', 'skype', 'google', 'signature', 'birthday_day', 'birthday_month', 'birthday_year') as $field) - { - $mybb->input[$field] = htmlspecialchars_uni($mybb->get_input($field)); - } - - // Custom user title, check to see if we have a default group title - if(!$user['displaygroup']) - { - $user['displaygroup'] = $user['usergroup']; - } - - $displaygroupfields = array('usertitle'); - $display_group = usergroup_displaygroup($user['displaygroup']); - - if(!empty($display_group['usertitle'])) - { - $defaulttitle = htmlspecialchars_uni($display_group['usertitle']); - } - else - { - // Go for post count title if a group default isn't set - $usertitles = $cache->read('usertitles'); - - foreach($usertitles as $title) - { - if($title['posts'] <= $user['postnum']) - { - $defaulttitle = $title['title']; - break; - } - } - } - - $user['usertitle'] = htmlspecialchars_uni($user['usertitle']); - - if(empty($user['usertitle'])) - { - $lang->current_custom_usertitle = ''; - } - - $bdaydaysel = $selected = ''; - for($day = 1; $day <= 31; ++$day) - { - if($mybb->input['birthday_day'] == $day) - { - $selected = "selected=\"selected\""; - } - else - { - $selected = ''; - } - - eval("\$bdaydaysel .= \"".$templates->get("usercp_profile_day")."\";"); - } - - $bdaymonthsel = array(); - foreach(range(1, 12) as $month) - { - $bdaymonthsel[$month] = ''; - } - $bdaymonthsel[$mybb->input['birthday_month']] = 'selected="selected"'; - - if($mybb->settings['allowaway'] != 0) - { - $awaycheck = array('', ''); - if($errors) - { - if($user['away'] == 1) - { - $awaycheck[1] = "checked=\"checked\""; - } - else - { - $awaycheck[0] = "checked=\"checked\""; - } - $returndate = array(); - $returndate[0] = $mybb->get_input('awayday'); - $returndate[1] = $mybb->get_input('awaymonth'); - $returndate[2] = $mybb->get_input('awayyear', MyBB::INPUT_INT); - $user['awayreason'] = htmlspecialchars_uni($mybb->get_input('awayreason')); - } - else - { - $user['awayreason'] = htmlspecialchars_uni($user['awayreason']); - if($user['away'] == 1) - { - $awaydate = my_date($mybb->settings['dateformat'], $user['awaydate']); - $awaycheck[1] = "checked=\"checked\""; - $awaynotice = $lang->sprintf($lang->away_notice_away, $awaydate); - } - else - { - $awaynotice = $lang->away_notice; - $awaycheck[0] = "checked=\"checked\""; - } - $returndate = explode("-", $user['returndate']); - } - $returndatesel = $selected = ''; - for($day = 1; $day <= 31; ++$day) - { - if($returndate[0] == $day) - { - $selected = "selected=\"selected\""; - } - else - { - $selected = ''; - } - - eval("\$returndatesel .= \"".$templates->get("usercp_profile_day")."\";"); - } - - $returndatemonthsel = array(); - foreach(range(1, 12) as $month) - { - $returndatemonthsel[$month] = ''; - } - if(isset($returndate[1])) - { - $returndatemonthsel[$returndate[1]] = " selected=\"selected\""; - } - - if(!isset($returndate[2])) - { - $returndate[2] = ''; - } - - eval("\$awaysection = \"".$templates->get("usercp_profile_away")."\";"); - } - - $plugins->run_hooks("modcp_editprofile_start"); - - // Fetch profile fields - $query = $db->simple_select("userfields", "*", "ufid='{$user['uid']}'"); - $user_fields = $db->fetch_array($query); - - $requiredfields = ''; - $customfields = ''; - $mybb->input['profile_fields'] = $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY); - - $pfcache = $cache->read('profilefields'); - - if(is_array($pfcache)) - { - foreach($pfcache as $profilefield) - { - $userfield = $code = $select = $val = $options = $expoptions = $useropts = ''; - $seloptions = array(); - $profilefield['type'] = htmlspecialchars_uni($profilefield['type']); - $profilefield['name'] = htmlspecialchars_uni($profilefield['name']); - $profilefield['description'] = htmlspecialchars_uni($profilefield['description']); - $thing = explode("\n", $profilefield['type'], "2"); - $type = $thing[0]; - if(isset($thing[1])) - { - $options = $thing[1]; - } - $field = "fid{$profilefield['fid']}"; - if($errors) - { - if(isset($mybb->input['profile_fields'][$field])) - { - $userfield = $mybb->input['profile_fields'][$field]; - } - } - else - { - $userfield = $user_fields[$field]; - } - if($type == "multiselect") - { - if($errors) - { - $useropts = $userfield; - } - else - { - $useropts = explode("\n", $userfield); - } - if(is_array($useropts)) - { - foreach($useropts as $key => $val) - { - $seloptions[$val] = $val; - } - } - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $val = trim($val); - $val = str_replace("\n", "\\n", $val); - - $sel = ""; - if(isset($seloptions[$val]) && $val == $seloptions[$val]) - { - $sel = " selected=\"selected\""; - } - - eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); - } - if(!$profilefield['length']) - { - $profilefield['length'] = 3; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_multiselect")."\";"); - } - } - elseif($type == "select") - { - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $val = trim($val); - $val = str_replace("\n", "\\n", $val); - $sel = ""; - if($val == $userfield) - { - $sel = " selected=\"selected\""; - } - - eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); - } - if(!$profilefield['length']) - { - $profilefield['length'] = 1; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_select")."\";"); - } - } - elseif($type == "radio") - { - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $checked = ""; - if($val == $userfield) - { - $checked = " checked=\"checked\""; - } - - eval("\$code .= \"".$templates->get("usercp_profile_profilefields_radio")."\";"); - } - } - } - elseif($type == "checkbox") - { - if($errors) - { - $useropts = $userfield; - } - else - { - $useropts = explode("\n", $userfield); - } - if(is_array($useropts)) - { - foreach($useropts as $key => $val) - { - $seloptions[$val] = $val; - } - } - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $checked = ""; - if(isset($seloptions[$val]) && $val == $seloptions[$val]) - { - $checked = " checked=\"checked\""; - } - - eval("\$code .= \"".$templates->get("usercp_profile_profilefields_checkbox")."\";"); - } - } - } - elseif($type == "textarea") - { - $value = htmlspecialchars_uni($userfield); - eval("\$code = \"".$templates->get("usercp_profile_profilefields_textarea")."\";"); - } - else - { - $value = htmlspecialchars_uni($userfield); - $maxlength = ""; - if($profilefield['maxlength'] > 0) - { - $maxlength = " maxlength=\"{$profilefield['maxlength']}\""; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_text")."\";"); - } - - if($profilefield['required'] == 1) - { - eval("\$requiredfields .= \"".$templates->get("usercp_profile_customfield")."\";"); - } - else - { - eval("\$customfields .= \"".$templates->get("usercp_profile_customfield")."\";"); - } - $altbg = alt_trow(); - } - } - if($customfields) - { - eval("\$customfields = \"".$templates->get("usercp_profile_profilefields")."\";"); - } - - $user['username'] = htmlspecialchars_uni($user['username']); - $lang->edit_profile = $lang->sprintf($lang->edit_profile, $user['username']); - $profile_link = build_profile_link(format_name($user['username'], $user['usergroup'], $user['displaygroup']), $user['uid']); - - $user['signature'] = htmlspecialchars_uni($user['signature']); - $codebuttons = build_mycode_inserter("signature"); - - // Do we mark the suspend signature box? - if($user['suspendsignature'] || ($mybb->get_input('suspendsignature', MyBB::INPUT_INT) && !empty($errors))) - { - $checked = 1; - $checked_item = "checked=\"checked\""; - } - else - { - $checked = 0; - $checked_item = ''; - } - - // Do we mark the moderate posts box? - if($user['moderateposts'] || ($mybb->get_input('moderateposting', MyBB::INPUT_INT) && !empty($errors))) - { - $modpost_check = 1; - $modpost_checked = "checked=\"checked\""; - } - else - { - $modpost_check = 0; - $modpost_checked = ''; - } - - // Do we mark the suspend posts box? - if($user['suspendposting'] || ($mybb->get_input('suspendposting', MyBB::INPUT_INT) && !empty($errors))) - { - $suspost_check = 1; - $suspost_checked = "checked=\"checked\""; - } - else - { - $suspost_check = 0; - $suspost_checked = ''; - } - - $moderator_options = array( - 1 => array( - "action" => "suspendsignature", // The input action for this option - "option" => "suspendsignature", // The field in the database that this option relates to - "time" => "action_time", // The time we've entered - "length" => "suspendsigtime", // The length of suspension field in the database - "select_option" => "action" // The name of the select box of this option - ), - 2 => array( - "action" => "moderateposting", - "option" => "moderateposts", - "time" => "modpost_time", - "length" => "moderationtime", - "select_option" => "modpost" - ), - 3 => array( - "action" => "suspendposting", - "option" => "suspendposting", - "time" => "suspost_time", - "length" => "suspensiontime", - "select_option" => "suspost" - ) - ); - - $periods = array( - "hours" => $lang->expire_hours, - "days" => $lang->expire_days, - "weeks" => $lang->expire_weeks, - "months" => $lang->expire_months, - "never" => $lang->expire_permanent - ); - - $suspendsignature_info = $moderateposts_info = $suspendposting_info = ''; - $action_options = $modpost_options = $suspost_options = ''; - foreach($moderator_options as $option) - { - $mybb->input[$option['time']] = $mybb->get_input($option['time'], MyBB::INPUT_INT); - // Display the suspension info, if this user has this option suspended - if($user[$option['option']]) - { - if($user[$option['length']] == 0) - { - // User has a permanent ban - $string = $option['option']."_perm"; - $suspension_info = $lang->$string; - } - else - { - // User has a temporary (or limited) ban - $string = $option['option']."_for"; - $for_date = my_date('relative', $user[$option['length']], '', 2); - $suspension_info = $lang->sprintf($lang->$string, $for_date); - } - - switch($option['option']) - { - case "suspendsignature": - eval("\$suspendsignature_info = \"".$templates->get("modcp_editprofile_suspensions_info")."\";"); - break; - case "moderateposts": - eval("\$moderateposts_info = \"".$templates->get("modcp_editprofile_suspensions_info")."\";"); - break; - case "suspendposting": - eval("\$suspendposting_info = \"".$templates->get("modcp_editprofile_suspensions_info")."\";"); - break; - } - } - - // Generate the boxes for this option - $selection_options = ''; - foreach($periods as $key => $value) - { - $string = $option['select_option']."_period"; - if($mybb->get_input($string) == $key) - { - $selected = "selected=\"selected\""; - } - else - { - $selected = ''; - } - - eval("\$selection_options .= \"".$templates->get("modcp_editprofile_select_option")."\";"); - } - - $select_name = $option['select_option']."_period"; - switch($option['option']) - { - case "suspendsignature": - eval("\$action_options = \"".$templates->get("modcp_editprofile_select")."\";"); - break; - case "moderateposts": - eval("\$modpost_options = \"".$templates->get("modcp_editprofile_select")."\";"); - break; - case "suspendposting": - eval("\$suspost_options = \"".$templates->get("modcp_editprofile_select")."\";"); - break; - } - } - - eval("\$suspend_signature = \"".$templates->get("modcp_editprofile_signature")."\";"); - - if(!isset($newtitle)) - { - $newtitle = ''; - } - - $plugins->run_hooks("modcp_editprofile_end"); - - eval("\$edituser = \"".$templates->get("modcp_editprofile")."\";"); - output_page($edituser); -} - -if($mybb->input['action'] == "finduser") -{ - if($mybb->usergroup['caneditprofiles'] == 0) - { - error_no_permission(); - } - - add_breadcrumb($lang->mcp_nav_users, "modcp.php?action=finduser"); - - $perpage = $mybb->get_input('perpage', MyBB::INPUT_INT); - if(!$perpage || $perpage <= 0) - { - $perpage = $mybb->settings['threadsperpage']; - } - $where = ''; - - if(isset($mybb->input['username'])) - { - switch($db->type) - { - case 'mysql': - case 'mysqli': - $field = 'username'; - break; - default: - $field = 'LOWER(username)'; - break; - } - $where = " AND {$field} LIKE '%".my_strtolower($db->escape_string_like($mybb->get_input('username')))."%'"; - } - - // Sort order & direction - switch($mybb->get_input('sortby')) - { - case "lastvisit": - $sortby = "lastvisit"; - break; - case "postnum": - $sortby = "postnum"; - break; - case "username": - $sortby = "username"; - break; - default: - $sortby = "regdate"; - } - $sortbysel = array('lastvisit' => '', 'postnum' => '', 'username' => '', 'regdate' => ''); - $sortbysel[$mybb->get_input('sortby')] = " selected=\"selected\""; - $order = $mybb->get_input('order'); - if($order != "asc") - { - $order = "desc"; - } - $ordersel = array('asc' => '', 'desc' => ''); - $ordersel[$order] = " selected=\"selected\""; - - $query = $db->simple_select("users", "COUNT(uid) AS count", "1=1 {$where}"); - $user_count = $db->fetch_field($query, "count"); - - // Figure out if we need to display multiple pages. - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page'); - } - - $pages = $user_count / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $page_url = 'modcp.php?action=finduser'; - foreach(array('username', 'sortby', 'order') as $field) - { - if(!empty($mybb->input[$field])) - { - $page_url .= "&{$field}=".$mybb->input[$field]; - } - } - - $multipage = multipage($user_count, $perpage, $page, $page_url); - - $usergroups_cache = $cache->read("usergroups"); - - $plugins->run_hooks("modcp_finduser_start"); - - // Fetch out results - $query = $db->simple_select("users", "*", "1=1 {$where}", array("order_by" => $sortby, "order_dir" => $order, "limit" => $perpage, "limit_start" => $start)); - $users = ''; - while($user = $db->fetch_array($query)) - { - $alt_row = alt_trow(); - $user['username'] = htmlspecialchars_uni($user['username']); - $user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']); - $user['postnum'] = my_number_format($user['postnum']); - $regdate = my_date('relative', $user['regdate']); - - if($user['invisible'] == 1 && $mybb->usergroup['canviewwolinvis'] != 1 && $user['uid'] != $mybb->user['uid']) - { - $lastdate = $lang->lastvisit_never; - - if($user['lastvisit']) - { - // We have had at least some active time, hide it instead - $lastdate = $lang->lastvisit_hidden; - } - } - else - { - $lastdate = my_date('relative', $user['lastvisit']); - } - - $usergroup = htmlspecialchars_uni($usergroups_cache[$user['usergroup']]['title']); - eval("\$users .= \"".$templates->get("modcp_finduser_user")."\";"); - } - - // No results? - if(!$users) - { - eval("\$users = \"".$templates->get("modcp_finduser_noresults")."\";"); - } - - $plugins->run_hooks("modcp_finduser_end"); - - eval("\$finduser = \"".$templates->get("modcp_finduser")."\";"); - output_page($finduser); -} - -if($mybb->input['action'] == "warninglogs") -{ - if($mybb->usergroup['canviewwarnlogs'] == 0) - { - error_no_permission(); - } - - add_breadcrumb($lang->mcp_nav_warninglogs, "modcp.php?action=warninglogs"); - - // Filter options - $where_sql = ''; - $mybb->input['filter'] = $mybb->get_input('filter', MyBB::INPUT_ARRAY); - $mybb->input['search'] = $mybb->get_input('search', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['filter']['username'])) - { - $search_user = get_user_by_username($mybb->input['filter']['username']); - - $mybb->input['filter']['uid'] = (int)$search_user['uid']; - $mybb->input['filter']['username'] = htmlspecialchars_uni($mybb->input['filter']['username']); - } - else - { - $mybb->input['filter']['username'] = ''; - } - if(!empty($mybb->input['filter']['uid'])) - { - $search['uid'] = (int)$mybb->input['filter']['uid']; - $where_sql .= " AND w.uid='{$search['uid']}'"; - if(!isset($mybb->input['search']['username'])) - { - $user = get_user($mybb->input['search']['uid']); - $mybb->input['search']['username'] = htmlspecialchars_uni($user['username']); - } - } - else - { - $mybb->input['filter']['uid'] = ''; - } - if(!empty($mybb->input['filter']['mod_username'])) - { - $mod_user = get_user_by_username($mybb->input['filter']['mod_username']); - - $mybb->input['filter']['mod_uid'] = (int)$mod_user['uid']; - $mybb->input['filter']['mod_username'] = htmlspecialchars_uni($mybb->input['filter']['mod_username']); - } - else - { - $mybb->input['filter']['mod_username'] = ''; - } - if(!empty($mybb->input['filter']['mod_uid'])) - { - $search['mod_uid'] = (int)$mybb->input['filter']['mod_uid']; - $where_sql .= " AND w.issuedby='{$search['mod_uid']}'"; - if(!isset($mybb->input['search']['mod_username'])) - { - $mod_user = get_user($mybb->input['search']['uid']); - $mybb->input['search']['mod_username'] = htmlspecialchars_uni($mod_user['username']); - } - } - else - { - $mybb->input['filter']['mod_uid'] = ''; - } - if(!empty($mybb->input['filter']['reason'])) - { - $search['reason'] = $db->escape_string_like($mybb->input['filter']['reason']); - $where_sql .= " AND (w.notes LIKE '%{$search['reason']}%' OR t.title LIKE '%{$search['reason']}%' OR w.title LIKE '%{$search['reason']}%')"; - $mybb->input['filter']['reason'] = htmlspecialchars_uni($mybb->input['filter']['reason']); - } - else - { - $mybb->input['filter']['reason'] = ''; - } - $sortbysel = array('username' => '', 'expires' => '', 'issuedby' => '', 'dateline' => ''); - if(!isset($mybb->input['filter']['sortby'])) - { - $mybb->input['filter']['sortby'] = ''; - } - switch($mybb->input['filter']['sortby']) - { - case "username": - $sortby = "u.username"; - $sortbysel['username'] = ' selected="selected"'; - break; - case "expires": - $sortby = "w.expires"; - $sortbysel['expires'] = ' selected="selected"'; - break; - case "issuedby": - $sortby = "i.username"; - $sortbysel['issuedby'] = ' selected="selected"'; - break; - default: // "dateline" - $sortby = "w.dateline"; - $sortbysel['dateline'] = ' selected="selected"'; - } - if(!isset($mybb->input['filter']['order'])) - { - $mybb->input['filter']['order'] = ''; - } - $order = $mybb->input['filter']['order']; - $ordersel = array('asc' => '', 'desc' => ''); - if($order != "asc") - { - $order = "desc"; - $ordersel['desc'] = ' selected="selected"'; - } - else - { - $ordersel['asc'] = ' selected="selected"'; - } - - $plugins->run_hooks("modcp_warninglogs_start"); - - // Pagination stuff - $sql = " - SELECT COUNT(wid) as count - FROM - ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (w.tid=t.tid) - WHERE 1=1 - {$where_sql} - "; - $query = $db->query($sql); - $total_warnings = $db->fetch_field($query, 'count'); - $page = $mybb->get_input('page', MyBB::INPUT_INT); - if($page <= 0) - { - $page = 1; - } - $per_page = 20; - if(isset($mybb->input['filter']['per_page']) && (int)$mybb->input['filter']['per_page'] > 0) - { - $per_page = (int)$mybb->input['filter']['per_page']; - } - $start = ($page-1) * $per_page; - // Build the base URL for pagination links - $url = 'modcp.php?action=warninglogs'; - if(is_array($mybb->input['filter']) && count($mybb->input['filter'])) - { - foreach($mybb->input['filter'] as $field => $value) - { - $value = urlencode($value); - $url .= "&filter[{$field}]={$value}"; - } - } - $multipage = multipage($total_warnings, $per_page, $page, $url); - - // The actual query - $sql = " - SELECT - w.wid, w.title as custom_title, w.points, w.dateline, w.issuedby, w.expires, w.expired, w.daterevoked, w.revokedby, - t.title, - u.uid, u.username, u.usergroup, u.displaygroup, - i.uid as mod_uid, i.username as mod_username, i.usergroup as mod_usergroup, i.displaygroup as mod_displaygroup - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."users u ON (w.uid=u.uid) - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (w.tid=t.tid) - LEFT JOIN ".TABLE_PREFIX."users i ON (i.uid=w.issuedby) - WHERE 1=1 - {$where_sql} - ORDER BY {$sortby} {$order} - LIMIT {$start}, {$per_page} - "; - $query = $db->query($sql); - - - $warning_list = ''; - while($row = $db->fetch_array($query)) - { - $trow = alt_trow(); - $row['username'] = htmlspecialchars_uni($row['username']); - $username = format_name($row['username'], $row['usergroup'], $row['displaygroup']); - $username_link = build_profile_link($username, $row['uid']); - $row['mod_username'] = htmlspecialchars_uni($row['mod_username']); - $mod_username = format_name($row['mod_username'], $row['mod_usergroup'], $row['mod_displaygroup']); - $mod_username_link = build_profile_link($mod_username, $row['mod_uid']); - $issued_date = my_date($mybb->settings['dateformat'], $row['dateline']).' '.my_date($mybb->settings['timeformat'], $row['dateline']); - $revoked_text = ''; - if($row['daterevoked'] > 0) - { - $revoked_date = my_date('relative', $row['daterevoked']); - eval("\$revoked_text = \"".$templates->get("modcp_warninglogs_warning_revoked")."\";"); - } - if($row['expires'] > 0) - { - $expire_date = my_date('relative', $row['expires'], '', 2); - } - else - { - $expire_date = $lang->never; - } - $title = $row['title']; - if(empty($row['title'])) - { - $title = $row['custom_title']; - } - $title = htmlspecialchars_uni($title); - if($row['points'] >= 0) - { - $points = '+'.$row['points']; - } - - eval("\$warning_list .= \"".$templates->get("modcp_warninglogs_warning")."\";"); - } - - if(!$warning_list) - { - eval("\$warning_list = \"".$templates->get("modcp_warninglogs_nologs")."\";"); - } - - $plugins->run_hooks("modcp_warninglogs_end"); - - eval("\$warninglogs = \"".$templates->get("modcp_warninglogs")."\";"); - output_page($warninglogs); -} - -if($mybb->input['action'] == "ipsearch") -{ - if($mybb->usergroup['canuseipsearch'] == 0) - { - error_no_permission(); - } - - add_breadcrumb($lang->mcp_nav_ipsearch, "modcp.php?action=ipsearch"); - - $mybb->input['ipaddress'] = $mybb->get_input('ipaddress'); - if($mybb->input['ipaddress']) - { - if(!is_array($groupscache)) - { - $groupscache = $cache->read("usergroups"); - } - - $ipaddressvalue = htmlspecialchars_uni($mybb->input['ipaddress']); - - $ip_range = fetch_ip_range($mybb->input['ipaddress']); - - $post_results = $user_results = 0; - - // Searching post IP addresses - if(isset($mybb->input['search_posts'])) - { - if($ip_range) - { - if(!is_array($ip_range)) - { - $post_ip_sql = "p.ipaddress=".$db->escape_binary($ip_range); - } - else - { - $post_ip_sql = "p.ipaddress BETWEEN ".$db->escape_binary($ip_range[0])." AND ".$db->escape_binary($ip_range[1]); - } - } - - $plugins->run_hooks("modcp_ipsearch_posts_start"); - - if($post_ip_sql) - { - $where_sql = ''; - - $unviewable_forums = get_unviewable_forums(true); - - if($unviewable_forums) - { - $where_sql .= " AND p.fid NOT IN ({$unviewable_forums})"; - } - - if($inactiveforums) - { - $where_sql .= " AND p.fid NOT IN ({$inactiveforums})"; - } - - // Check group permissions if we can't view threads not started by us - $onlyusfids = array(); - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forumpermissions) - { - if(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - - if(!empty($onlyusfids)) - { - $where_sql .= " AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - // Moderators can view unapproved/deleted posts - if($mybb->usergroup['issupermod'] != 1) - { - $unapprove_forums = array(); - $deleted_forums = array(); - $visible_sql = " AND (p.visible = 1 AND t.visible = 1)"; - $query = $db->simple_select("moderators", "fid, canviewunapprove, canviewdeleted", "(id='{$mybb->user['uid']}' AND isgroup='0') OR (id='{$mybb->user['usergroup']}' AND isgroup='1')"); - while($moderator = $db->fetch_array($query)) - { - if($moderator['canviewunapprove'] == 1) - { - $unapprove_forums[] = $moderator['fid']; - } - - if($moderator['canviewdeleted'] == 1) - { - $deleted_forums[] = $moderator['fid']; - } - } - - if(!empty($unapprove_forums)) - { - $visible_sql .= " OR (p.visible = 0 AND p.fid IN(".implode(',', $unapprove_forums).")) OR (t.visible = 0 AND t.fid IN(".implode(',', $unapprove_forums)."))"; - } - if(!empty($deleted_forums)) - { - $visible_sql .= " OR (p.visible = -1 AND p.fid IN(".implode(',', $deleted_forums).")) OR (t.visible = -1 AND t.fid IN(".implode(',', $deleted_forums)."))"; - } - } - else - { - // Super moderators (and admins) - $visible_sql = " AND p.visible >= -1"; - } - - $query = $db->query(" - SELECT COUNT(p.pid) AS count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid = p.tid) - WHERE {$post_ip_sql}{$where_sql}{$visible_sql} - "); - $post_results = $db->fetch_field($query, "count"); - } - } - - // Searching user IP addresses - if(isset($mybb->input['search_users'])) - { - if($ip_range) - { - if(!is_array($ip_range)) - { - $user_ip_sql = "regip=".$db->escape_binary($ip_range)." OR lastip=".$db->escape_binary($ip_range); - } - else - { - $user_ip_sql = "regip BETWEEN ".$db->escape_binary($ip_range[0])." AND ".$db->escape_binary($ip_range[1])." OR lastip BETWEEN ".$db->escape_binary($ip_range[0])." AND ".$db->escape_binary($ip_range[1]); - } - } - - $plugins->run_hooks("modcp_ipsearch_users_start"); - - if($user_ip_sql) - { - $query = $db->simple_select('users', 'COUNT(uid) AS count', $user_ip_sql); - - $user_results = $db->fetch_field($query, "count"); - } - } - - $total_results = $post_results+$user_results; - - if(!$total_results) - { - $total_results = 1; - } - - // Now we have the result counts, paginate - $perpage = $mybb->get_input('perpage', MyBB::INPUT_INT); - if(!$perpage || $perpage <= 0) - { - $perpage = $mybb->settings['threadsperpage']; - } - - // Figure out if we need to display multiple pages. - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $pages = $total_results / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $page_url = "modcp.php?action=ipsearch&perpage={$perpage}"; - foreach(array('ipaddress', 'search_users', 'search_posts') as $input) - { - if(!empty($mybb->input[$input])) - { - $page_url .= "&{$input}=".urlencode($mybb->input[$input]); - } - } - $multipage = multipage($total_results, $perpage, $page, $page_url); - - $post_limit = $perpage; - $results = ''; - if(isset($mybb->input['search_users']) && $user_results && $start <= $user_results) - { - $query = $db->simple_select('users', 'username, uid, regip, lastip', $user_ip_sql, - array('order_by' => 'regdate', 'order_dir' => 'DESC', 'limit_start' => $start, 'limit' => $perpage)); - - while($ipaddress = $db->fetch_array($query)) - { - $result = false; - $ipaddress['username'] = htmlspecialchars_uni($ipaddress['username']); - $profile_link = build_profile_link($ipaddress['username'], $ipaddress['uid']); - $trow = alt_trow(); - $ip = false; - if(is_array($ip_range)) - { - if(strcmp($ip_range[0], $ipaddress['regip']) <= 0 && strcmp($ip_range[1], $ipaddress['regip']) >= 0) - { - eval("\$subject = \"".$templates->get("modcp_ipsearch_result_regip")."\";"); - $ip = my_inet_ntop($db->unescape_binary($ipaddress['regip'])); - } - elseif(strcmp($ip_range[0], $ipaddress['lastip']) <= 0 && strcmp($ip_range[1], $ipaddress['lastip']) >= 0) - { - eval("\$subject = \"".$templates->get("modcp_ipsearch_result_lastip")."\";"); - $ip = my_inet_ntop($db->unescape_binary($ipaddress['lastip'])); - } - } - elseif($ipaddress['regip'] == $ip_range) - { - eval("\$subject = \"".$templates->get("modcp_ipsearch_result_regip")."\";"); - $ip = my_inet_ntop($db->unescape_binary($ipaddress['regip'])); - } - elseif($ipaddress['lastip'] == $ip_range) - { - eval("\$subject = \"".$templates->get("modcp_ipsearch_result_lastip")."\";"); - $ip = my_inet_ntop($db->unescape_binary($ipaddress['lastip'])); - } - if($ip) - { - eval("\$results .= \"".$templates->get("modcp_ipsearch_result")."\";"); - $result = true; - } - if($result) - { - --$post_limit; - } - } - } - $post_start = 0; - if($total_results > $user_results && $post_limit) - { - $post_start = $start-$user_results; - if($post_start < 0) - { - $post_start = 0; - } - } - if(isset($mybb->input['search_posts']) && $post_results && (!isset($mybb->input['search_users']) || (isset($mybb->input['search_users']) && $post_limit > 0))) - { - $ipaddresses = $tids = $uids = array(); - - $query = $db->query(" - SELECT p.username AS postusername, p.uid, p.subject, p.pid, p.tid, p.ipaddress - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid = p.tid) - WHERE {$post_ip_sql}{$where_sql}{$visible_sql} - ORDER BY p.dateline desc - LIMIT {$post_start}, {$post_limit} - "); - while($ipaddress = $db->fetch_array($query)) - { - $tids[$ipaddress['tid']] = $ipaddress['pid']; - $uids[$ipaddress['uid']] = $ipaddress['pid']; - $ipaddresses[$ipaddress['pid']] = $ipaddress; - } - - if(!empty($ipaddresses)) - { - $query = $db->simple_select("threads", "subject, tid", "tid IN(".implode(',', array_keys($tids)).")"); - while($thread = $db->fetch_array($query)) - { - $ipaddresses[$tids[$thread['tid']]]['threadsubject'] = $thread['subject']; - } - unset($tids); - - $query = $db->simple_select("users", "username, uid", "uid IN(".implode(',', array_keys($uids)).")"); - while($user = $db->fetch_array($query)) - { - $ipaddresses[$uids[$user['uid']]]['username'] = $user['username']; - } - unset($uids); - - foreach($ipaddresses as $ipaddress) - { - $ip = my_inet_ntop($db->unescape_binary($ipaddress['ipaddress'])); - if(!$ipaddress['username']) - { - $ipaddress['username'] = $ipaddress['postusername']; // Guest username support - } - $ipaddress['username'] = htmlspecialchars_uni($ipaddress['username']); - $trow = alt_trow(); - if(!$ipaddress['subject']) - { - $ipaddress['subject'] = "RE: {$ipaddress['threadsubject']}"; - } - - $ipaddress['postlink'] = get_post_link($ipaddress['pid'], $ipaddress['tid']); - $ipaddress['subject'] = htmlspecialchars_uni($parser->parse_badwords($ipaddress['subject'])); - $ipaddress['profilelink'] = build_profile_link($ipaddress['username'], $ipaddress['uid']); - - eval("\$subject = \"".$templates->get("modcp_ipsearch_result_post")."\";"); - eval("\$results .= \"".$templates->get("modcp_ipsearch_result")."\";"); - } - } - } - - if(!$results) - { - eval("\$results = \"".$templates->get("modcp_ipsearch_noresults")."\";"); - } - - if($ipaddressvalue) - { - $lang->ipsearch_results = $lang->sprintf($lang->ipsearch_results, $ipaddressvalue); - } - else - { - $lang->ipsearch_results = $lang->ipsearch; - } - - $ipaddress = $ipaddress_url = $misc_info_link = ''; - if(!strstr($mybb->input['ipaddress'], "*") && !strstr($mybb->input['ipaddress'], "/")) - { - $ipaddress = htmlspecialchars_uni($mybb->input['ipaddress']); - $ipaddress_url = urlencode($mybb->input['ipaddress']); - eval("\$misc_info_link = \"".$templates->get("modcp_ipsearch_results_information")."\";"); - } - - eval("\$ipsearch_results = \"".$templates->get("modcp_ipsearch_results")."\";"); - } - - // Fetch filter options - if(!$mybb->input['ipaddress']) - { - $mybb->input['search_posts'] = 1; - $mybb->input['search_users'] = 1; - } - $usersearchselect = $postsearchselect = ''; - if(isset($mybb->input['search_posts'])) - { - $postsearchselect = "checked=\"checked\""; - } - if(isset($mybb->input['search_users'])) - { - $usersearchselect = "checked=\"checked\""; - } - - $plugins->run_hooks("modcp_ipsearch_end"); - - eval("\$ipsearch = \"".$templates->get("modcp_ipsearch")."\";"); - output_page($ipsearch); -} - -if($mybb->input['action'] == "iplookup") -{ - if($mybb->usergroup['canuseipsearch'] == 0) - { - error_no_permission(); - } - - $mybb->input['ipaddress'] = $mybb->get_input('ipaddress'); - $lang->ipaddress_misc_info = $lang->sprintf($lang->ipaddress_misc_info, htmlspecialchars_uni($mybb->input['ipaddress'])); - $ipaddress_location = $lang->na; - $ipaddress_host_name = $lang->na; - $modcp_ipsearch_misc_info = ''; - if(!strstr($mybb->input['ipaddress'], "*")) - { - // Return GeoIP information if it is available to us - if(function_exists('geoip_record_by_name')) - { - $ip_record = @geoip_record_by_name($mybb->input['ipaddress']); - if($ip_record) - { - $ipaddress_location = htmlspecialchars_uni(utf8_encode($ip_record['country_name'])); - if($ip_record['city']) - { - $ipaddress_location .= $lang->comma.htmlspecialchars_uni(utf8_encode($ip_record['city'])); - } - } - } - - $ipaddress_host_name = htmlspecialchars_uni(@gethostbyaddr($mybb->input['ipaddress'])); - - // gethostbyaddr returns the same ip on failure - if($ipaddress_host_name == $mybb->input['ipaddress']) - { - $ipaddress_host_name = $lang->na; - } - } - - $plugins->run_hooks("modcp_iplookup_end"); - - eval("\$iplookup = \"".$templates->get('modcp_ipsearch_misc_info', 1, 0)."\";"); - echo($iplookup); - exit; -} - -if($mybb->input['action'] == "banning") -{ - if($mybb->usergroup['canbanusers'] == 0) - { - error_no_permission(); - } - - add_breadcrumb($lang->mcp_nav_banning, "modcp.php?action=banning"); - - if(!$mybb->settings['threadsperpage']) - { - $mybb->settings['threadsperpage'] = 20; - } - - // Figure out if we need to display multiple pages. - $perpage = $mybb->settings['threadsperpage']; - if($mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - $query = $db->simple_select("banned", "COUNT(uid) AS count"); - $banned_count = $db->fetch_field($query, "count"); - - $postcount = (int)$banned_count; - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - $upper = $start+$perpage; - - $multipage = multipage($postcount, $perpage, $page, "modcp.php?action=banning"); - - $plugins->run_hooks("modcp_banning_start"); - - $query = $db->query(" - SELECT b.*, a.username AS adminuser, u.username - FROM ".TABLE_PREFIX."banned b - LEFT JOIN ".TABLE_PREFIX."users u ON (b.uid=u.uid) - LEFT JOIN ".TABLE_PREFIX."users a ON (b.admin=a.uid) - ORDER BY dateline DESC - LIMIT {$start}, {$perpage} - "); - - // Get the banned users - $bannedusers = ''; - while($banned = $db->fetch_array($query)) - { - $banned['username'] = htmlspecialchars_uni($banned['username']); - $profile_link = build_profile_link($banned['username'], $banned['uid']); - - // Only show the edit & lift links if current user created ban, or is super mod/admin - $edit_link = ''; - if($mybb->user['uid'] == $banned['admin'] || !$banned['adminuser'] || $mybb->usergroup['issupermod'] == 1 || $mybb->usergroup['cancp'] == 1) - { - eval("\$edit_link = \"".$templates->get("modcp_banning_edit")."\";"); - } - - $admin_profile = build_profile_link(htmlspecialchars_uni($banned['adminuser']), $banned['admin']); - - $trow = alt_trow(); - - if($banned['reason']) - { - $banned['reason'] = htmlspecialchars_uni($parser->parse_badwords($banned['reason'])); - } - else - { - $banned['reason'] = $lang->na; - } - - if($banned['lifted'] == 'perm' || $banned['lifted'] == '' || $banned['bantime'] == 'perm' || $banned['bantime'] == '---') - { - $banlength = $lang->permanent; - $timeremaining = $lang->na; - } - else - { - $banlength = $bantimes[$banned['bantime']]; - $remaining = $banned['lifted']-TIME_NOW; - - $timeremaining = nice_time($remaining, array('short' => 1, 'seconds' => false)).""; - - $banned_class = ''; - $ban_remaining = "{$timeremaining} {$lang->ban_remaining}"; - - if($remaining <= 0) - { - $banned_class = "imminent_banned"; - $ban_remaining = $lang->ban_ending_imminently; - } - if($remaining < 3600) - { - $banned_class = "high_banned"; - } - else if($remaining < 86400) - { - $banned_class = "moderate_banned"; - } - else if($remaining < 604800) - { - $banned_class = "low_banned"; - } - else - { - $banned_class = "normal_banned"; - } - - eval('$timeremaining = "'.$templates->get('modcp_banning_remaining').'";'); - } - - eval("\$bannedusers .= \"".$templates->get("modcp_banning_ban")."\";"); - } - - if(!$bannedusers) - { - eval("\$bannedusers = \"".$templates->get("modcp_banning_nobanned")."\";"); - } - - $plugins->run_hooks("modcp_banning"); - - eval("\$bannedpage = \"".$templates->get("modcp_banning")."\";"); - output_page($bannedpage); -} - -if($mybb->input['action'] == "liftban") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canbanusers'] == 0) - { - error_no_permission(); - } - - $query = $db->simple_select("banned", "*", "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); - $ban = $db->fetch_array($query); - - if(!$ban) - { - error($lang->error_invalidban); - } - - // Permission to edit this ban? - if($mybb->user['uid'] != $ban['admin'] && $mybb->usergroup['issupermod'] != 1 && $mybb->usergroup['cancp'] != 1) - { - error_no_permission(); - } - - $plugins->run_hooks("modcp_liftban_start"); - - $query = $db->simple_select("users", "username", "uid = '{$ban['uid']}'"); - $username = $db->fetch_field($query, "username"); - - $updated_group = array( - 'usergroup' => $ban['oldgroup'], - 'additionalgroups' => $ban['oldadditionalgroups'], - 'displaygroup' => $ban['olddisplaygroup'] - ); - $db->update_query("users", $updated_group, "uid='{$ban['uid']}'"); - $db->delete_query("banned", "uid='{$ban['uid']}'"); - - $cache->update_banned(); - $cache->update_moderators(); - log_moderator_action(array("uid" => $ban['uid'], "username" => $username), $lang->lifted_ban); - - $plugins->run_hooks("modcp_liftban_end"); - - redirect("modcp.php?action=banning", $lang->redirect_banlifted); -} - -if($mybb->input['action'] == "do_banuser" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canbanusers'] == 0) - { - error_no_permission(); - } - - // Editing an existing ban - if($mybb->get_input('uid', MyBB::INPUT_INT)) - { - // Get the users info from their uid - $query = $db->query(" - SELECT b.*, u.uid, u.username, u.usergroup, u.additionalgroups, u.displaygroup - FROM ".TABLE_PREFIX."banned b - LEFT JOIN ".TABLE_PREFIX."users u ON (b.uid=u.uid) - WHERE b.uid='{$mybb->input['uid']}' - "); - $user = $db->fetch_array($query); - - $existing_ban = false; - if($user['uid']) - { - $existing_ban = true; - } - - // Permission to edit this ban? - if($existing_ban && $mybb->user['uid'] != $user['admin'] && $mybb->usergroup['issupermod'] != 1 && $mybb->usergroup['cancp'] != 1) - { - error_no_permission(); - } - } - - // Creating a new ban - if(!$existing_ban) - { - // Get the users info from their Username - $options = array( - 'fields' => array('username', 'usergroup', 'additionalgroups', 'displaygroup') - ); - - $user = get_user_by_username($mybb->input['username'], $options); - - if(!$user['uid']) - { - $errors[] = $lang->invalid_username; - } - } - - if($user['uid'] == $mybb->user['uid']) - { - $errors[] = $lang->error_cannotbanself; - } - - // Have permissions to ban this user? - if(!modcp_can_manage_user($user['uid'])) - { - $errors[] = $lang->error_cannotbanuser; - } - - // Check for an incoming reason - if(empty($mybb->input['banreason'])) - { - $errors[] = $lang->error_nobanreason; - } - - // Check banned group - $usergroups_cache = $cache->read('usergroups'); - $usergroup = $usergroups_cache[$mybb->get_input('usergroup', MyBB::INPUT_INT)]; - $query = $db->simple_select("usergroups", "gid", "isbannedgroup=1 AND gid='".$mybb->get_input('usergroup', MyBB::INPUT_INT)."'"); - - if(empty($usergroup['gid']) || empty($usergroup['isbannedgroup'])) - { - $errors[] = $lang->error_nobangroup; - } - - // If this is a new ban, we check the user isn't already part of a banned group - if(!$existing_ban && $user['uid']) - { - $query = $db->simple_select("banned", "uid", "uid='{$user['uid']}'"); - if($db->fetch_field($query, "uid")) - { - $errors[] = $lang->error_useralreadybanned; - } - } - - $plugins->run_hooks("modcp_do_banuser_start"); - - // Still no errors? Ban the user - if(!$errors) - { - // Ban the user - if($mybb->get_input('liftafter') == '---') - { - $lifted = 0; - } - else - { - if(!isset($user['dateline'])) - { - $user['dateline'] = 0; - } - $lifted = ban_date2timestamp($mybb->get_input('liftafter'), $user['dateline']); - } - - $banreason = my_substr($mybb->get_input('banreason'), 0, 255); - - if($existing_ban) - { - $update_array = array( - 'gid' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'dateline' => TIME_NOW, - 'bantime' => $db->escape_string($mybb->get_input('liftafter')), - 'lifted' => $db->escape_string($lifted), - 'reason' => $db->escape_string($banreason) - ); - - $db->update_query('banned', $update_array, "uid='{$user['uid']}'"); - } - else - { - $insert_array = array( - 'uid' => $user['uid'], - 'gid' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'oldgroup' => (int)$user['usergroup'], - 'oldadditionalgroups' => (string)$user['additionalgroups'], - 'olddisplaygroup' => (int)$user['displaygroup'], - 'admin' => (int)$mybb->user['uid'], - 'dateline' => TIME_NOW, - 'bantime' => $db->escape_string($mybb->get_input('liftafter')), - 'lifted' => $db->escape_string($lifted), - 'reason' => $db->escape_string($banreason) - ); - - $db->insert_query('banned', $insert_array); - } - - // Move the user to the banned group - $update_array = array( - 'usergroup' => $mybb->get_input('usergroup', MyBB::INPUT_INT), - 'displaygroup' => 0, - 'additionalgroups' => '', - ); - $db->update_query('users', $update_array, "uid = {$user['uid']}"); - - $cache->update_banned(); - - // Log edit or add ban - if($existing_ban) - { - log_moderator_action(array("uid" => $user['uid'], "username" => $user['username']), $lang->edited_user_ban); - } - else - { - log_moderator_action(array("uid" => $user['uid'], "username" => $user['username']), $lang->banned_user); - } - - $plugins->run_hooks("modcp_do_banuser_end"); - - if($existing_ban) - { - redirect("modcp.php?action=banning", $lang->redirect_banuser_updated); - } - else - { - redirect("modcp.php?action=banning", $lang->redirect_banuser); - } - } - // Otherwise has errors, throw back to ban page - else - { - $mybb->input['action'] = "banuser"; - } -} - -if($mybb->input['action'] == "banuser") -{ - add_breadcrumb($lang->mcp_nav_banning, "modcp.php?action=banning"); - - if($mybb->usergroup['canbanusers'] == 0) - { - error_no_permission(); - } - - $mybb->input['uid'] = $mybb->get_input('uid', MyBB::INPUT_INT); - if($mybb->input['uid']) - { - add_breadcrumb($lang->mcp_nav_editing_ban); - } - else - { - add_breadcrumb($lang->mcp_nav_ban_user); - } - - $plugins->run_hooks("modcp_banuser_start"); - - $banuser_username = ''; - $banreason = ''; - - // If incoming user ID, we are editing a ban - if($mybb->input['uid']) - { - $query = $db->query(" - SELECT b.*, u.username, u.uid - FROM ".TABLE_PREFIX."banned b - LEFT JOIN ".TABLE_PREFIX."users u ON (b.uid=u.uid) - WHERE b.uid='{$mybb->input['uid']}' - "); - $banned = $db->fetch_array($query); - if($banned['username']) - { - $username = $banned['username'] = htmlspecialchars_uni($banned['username']); - $banreason = htmlspecialchars_uni($banned['reason']); - $uid = $mybb->input['uid']; - $user = get_user($banned['uid']); - $lang->ban_user = $lang->edit_ban; // Swap over lang variables - eval("\$banuser_username = \"".$templates->get("modcp_banuser_editusername")."\";"); - } - } - - // Permission to edit this ban? - if($banned['uid'] && $mybb->user['uid'] != $banned['admin'] && $mybb->usergroup['issupermod'] != 1 && $mybb->usergroup['cancp'] != 1) - { - error_no_permission(); - } - - // New ban! - if(!$banuser_username) - { - if($mybb->input['uid']) - { - $user = get_user($mybb->input['uid']); - $user['username'] = htmlspecialchars_uni($user['username']); - $username = $user['username']; - } - else - { - $username = htmlspecialchars_uni($mybb->get_input('username')); - } - eval("\$banuser_username = \"".$templates->get("modcp_banuser_addusername")."\";"); - } - - // Coming back to this page from an error? - if($errors) - { - $errors = inline_error($errors); - $banned = array( - "bantime" => $mybb->get_input('liftafter'), - "reason" => $mybb->get_input('reason'), - "gid" => $mybb->get_input('gid', MyBB::INPUT_INT) - ); - $banreason = htmlspecialchars_uni($mybb->get_input('banreason')); - } - - // Generate the banned times dropdown - $liftlist = ''; - foreach($bantimes as $time => $title) - { - $selected = ''; - if(isset($banned['bantime']) && $banned['bantime'] == $time) - { - $selected = " selected=\"selected\""; - } - - $thattime = ''; - if($time != '---') - { - $dateline = TIME_NOW; - if(isset($banned['dateline'])) - { - $dateline = $banned['dateline']; - } - - $thatime = my_date("D, jS M Y @ {$mybb->settings['timeformat']}", ban_date2timestamp($time, $dateline)); - $thattime = " ({$thatime})"; - } - - eval("\$liftlist .= \"".$templates->get("modcp_banuser_liftlist")."\";"); - } - - $bangroup_option = $bangroups = ''; - $numgroups = $banned_group = 0; - $groupscache = $cache->read("usergroups"); - - foreach($groupscache as $key => $group) - { - if($group['isbannedgroup']) - { - $selected = ""; - if(isset($banned['gid']) && $banned['gid'] == $group['gid']) - { - $selected = " selected=\"selected\""; - } - - $group['title'] = htmlspecialchars_uni($group['title']); - eval("\$bangroup_option .= \"".$templates->get("modcp_banuser_bangroups_group")."\";"); - $banned_group = $group['gid']; - ++$numgroups; - } - } - - if($numgroups == 0) - { - error($lang->no_banned_group); - } - elseif($numgroups > 1) - { - eval("\$bangroups = \"".$templates->get("modcp_banuser_bangroups")."\";"); - } - else - { - eval("\$bangroups = \"".$templates->get("modcp_banuser_bangroups_hidden")."\";"); - } - - if(!empty($banned['uid'])) - { - eval("\$lift_link = \"".$templates->get("modcp_banuser_lift")."\";"); - $uid = $banned['uid']; - } - else - { - $lift_link = ''; - $uid = 0; - } - - $plugins->run_hooks("modcp_banuser_end"); - - eval("\$banuser = \"".$templates->get("modcp_banuser")."\";"); - output_page($banuser); -} - -if($mybb->input['action'] == "do_modnotes") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("modcp_do_modnotes_start"); - - // Update Moderator Notes cache - $update_cache = array( - "modmessage" => $mybb->get_input('modnotes') - ); - $cache->update("modnotes", $update_cache); - - $plugins->run_hooks("modcp_do_modnotes_end"); - - redirect("modcp.php", $lang->redirect_modnotes); -} - -if(!$mybb->input['action']) -{ - $awaitingattachments = $awaitingposts = $awaitingthreads = $awaitingmoderation = ''; - - if($mybb->usergroup['canmanagemodqueue'] == 1) - { - if($mybb->settings['enableattachments'] == 1 && ($nummodqueueattach > 0 || $mybb->usergroup['issupermod'] == 1)) - { - if($nummodqueueposts > 0 || $mybb->usergroup['issupermod'] == 1) - { - $bgcolor = "trow1"; - } - else - { - $bgcolor = "trow2"; - } - - $query = $db->query(" - SELECT COUNT(aid) AS unapprovedattachments - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE a.visible='0' {$tflist} - "); - $unapproved_attachments = $db->fetch_field($query, "unapprovedattachments"); - - if($unapproved_attachments > 0) - { - $query = $db->query(" - SELECT t.tid, p.pid, p.uid, t.username, a.filename, a.dateuploaded - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=a.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE a.visible='0' {$tflist} - ORDER BY a.dateuploaded DESC - LIMIT 1 - "); - $attachment = $db->fetch_array($query); - $attachment['date'] = my_date('relative', $attachment['dateuploaded']); - $attachment['username'] = htmlspecialchars_uni($attachment['username']); - $attachment['profilelink'] = build_profile_link($attachment['username'], $attachment['uid']); - $attachment['link'] = get_post_link($attachment['pid'], $attachment['tid']); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - $unapproved_attachments = my_number_format($unapproved_attachments); - - eval("\$latest_attachment = \"".$templates->get("modcp_lastattachment")."\";"); - } - else - { - eval("\$latest_attachment = \"".$templates->get("modcp_awaitingmoderation_none")."\";"); - } - - eval("\$awaitingattachments = \"".$templates->get("modcp_awaitingattachments")."\";"); - } - - if($nummodqueueposts > 0 || $mybb->usergroup['issupermod'] == 1) - { - $query = $db->query(" - SELECT COUNT(pid) AS unapprovedposts - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.visible='0' {$tflist} AND t.firstpost != p.pid - "); - $unapproved_posts = $db->fetch_field($query, "unapprovedposts"); - - if($unapproved_posts > 0) - { - $query = $db->query(" - SELECT p.pid, p.tid, p.subject, p.uid, p.username, p.dateline - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.visible='0' {$tflist} AND t.firstpost != p.pid - ORDER BY p.dateline DESC - LIMIT 1 - "); - $post = $db->fetch_array($query); - $post['date'] = my_date('relative', $post['dateline']); - $post['username'] = htmlspecialchars_uni($post['username']); - $post['profilelink'] = build_profile_link($post['username'], $post['uid']); - $post['link'] = get_post_link($post['pid'], $post['tid']); - $post['subject'] = $post['fullsubject'] = $parser->parse_badwords($post['subject']); - if(my_strlen($post['subject']) > 25) - { - $post['subject'] = my_substr($post['subject'], 0, 25)."..."; - } - $post['subject'] = htmlspecialchars_uni($post['subject']); - $post['fullsubject'] = htmlspecialchars_uni($post['fullsubject']); - $unapproved_posts = my_number_format($unapproved_posts); - - eval("\$latest_post = \"".$templates->get("modcp_lastpost")."\";"); - } - else - { - eval("\$latest_post = \"".$templates->get("modcp_awaitingmoderation_none")."\";"); - } - - eval("\$awaitingposts = \"".$templates->get("modcp_awaitingposts")."\";"); - } - - if($nummodqueuethreads > 0 || $mybb->usergroup['issupermod'] == 1) - { - $query = $db->simple_select("threads", "COUNT(tid) AS unapprovedthreads", "visible='0' {$flist_queue_threads}"); - $unapproved_threads = $db->fetch_field($query, "unapprovedthreads"); - - if($unapproved_threads > 0) - { - $query = $db->simple_select("threads", "tid, subject, uid, username, dateline", "visible='0' {$flist_queue_threads}", array('order_by' => 'dateline', 'order_dir' => 'DESC', 'limit' => 1)); - $thread = $db->fetch_array($query); - $thread['date'] = my_date('relative', $thread['dateline']); - $thread['username'] = htmlspecialchars_uni($thread['username']); - $thread['profilelink'] = build_profile_link($thread['username'], $thread['uid']); - $thread['link'] = get_thread_link($thread['tid']); - $thread['subject'] = $thread['fullsubject'] = $parser->parse_badwords($thread['subject']); - if(my_strlen($thread['subject']) > 25) - { - $post['subject'] = my_substr($thread['subject'], 0, 25)."..."; - } - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - $thread['fullsubject'] = htmlspecialchars_uni($thread['fullsubject']); - $unapproved_threads = my_number_format($unapproved_threads); - - eval("\$latest_thread = \"".$templates->get("modcp_lastthread")."\";"); - } - else - { - eval("\$latest_thread = \"".$templates->get("modcp_awaitingmoderation_none")."\";"); - } - - eval("\$awaitingthreads = \"".$templates->get("modcp_awaitingthreads")."\";"); - } - - if(!empty($awaitingattachments) || !empty($awaitingposts) || !empty($awaitingthreads)) - { - eval("\$awaitingmoderation = \"".$templates->get("modcp_awaitingmoderation")."\";"); - } - } - - $latestfivemodactions = ''; - if(($nummodlogs > 0 || $mybb->usergroup['issupermod'] == 1) && $mybb->usergroup['canviewmodlogs'] == 1) - { - $where = ''; - if($tflist_modlog) - { - $where = "WHERE (t.fid <> 0 {$tflist_modlog}) OR (!l.fid)"; - } - - $query = $db->query(" - SELECT l.*, u.username, u.usergroup, u.displaygroup, t.subject AS tsubject, f.name AS fname, p.subject AS psubject - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=l.tid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=l.fid) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=l.pid) - {$where} - ORDER BY l.dateline DESC - LIMIT 5 - "); - - $modlogresults = ''; - while($logitem = $db->fetch_array($query)) - { - $information = ''; - $logitem['action'] = htmlspecialchars_uni($logitem['action']); - $log_date = my_date('relative', $logitem['dateline']); - $trow = alt_trow(); - $logitem['username'] = htmlspecialchars_uni($logitem['username']); - $username = format_name($logitem['username'], $logitem['usergroup'], $logitem['displaygroup']); - $logitem['profilelink'] = build_profile_link($username, $logitem['uid']); - $logitem['ipaddress'] = my_inet_ntop($db->unescape_binary($logitem['ipaddress'])); - - if($logitem['tsubject']) - { - $logitem['tsubject'] = htmlspecialchars_uni($parser->parse_badwords($logitem['tsubject'])); - $logitem['thread'] = get_thread_link($logitem['tid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_thread")."\";"); - } - if($logitem['fname']) - { - $logitem['forum'] = get_forum_link($logitem['fid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_forum")."\";"); - } - if($logitem['psubject']) - { - $logitem['psubject'] = htmlspecialchars_uni($parser->parse_badwords($logitem['psubject'])); - $logitem['post'] = get_post_link($logitem['pid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_post")."\";"); - } - - // Edited a user or managed announcement? - if(!$logitem['tsubject'] || !$logitem['fname'] || !$logitem['psubject']) - { - $data = my_unserialize($logitem['data']); - if($data['uid']) - { - $information = $lang->sprintf($lang->edited_user_info, htmlspecialchars_uni($data['username']), get_profile_link($data['uid'])); - } - if($data['aid']) - { - $data['subject'] = htmlspecialchars_uni($parser->parse_badwords($data['subject'])); - $data['announcement'] = get_announcement_link($data['aid']); - eval("\$information .= \"".$templates->get("modcp_modlogs_result_announcement")."\";"); - } - } - - $plugins->run_hooks("modcp_modlogs_result"); - - eval("\$modlogresults .= \"".$templates->get("modcp_modlogs_result")."\";"); - } - - if(!$modlogresults) - { - eval("\$modlogresults = \"".$templates->get("modcp_modlogs_nologs")."\";"); - } - - eval("\$latestfivemodactions = \"".$templates->get("modcp_latestfivemodactions")."\";"); - } - - $query = $db->query(" - SELECT b.*, a.username AS adminuser, u.username - FROM ".TABLE_PREFIX."banned b - LEFT JOIN ".TABLE_PREFIX."users u ON (b.uid=u.uid) - LEFT JOIN ".TABLE_PREFIX."users a ON (b.admin=a.uid) - WHERE b.bantime != '---' AND b.bantime != 'perm' - ORDER BY lifted ASC - LIMIT 5 - "); - - $banned_cache = array(); - while($banned = $db->fetch_array($query)) - { - $banned['remaining'] = $banned['lifted']-TIME_NOW; - $banned_cache[$banned['remaining'].$banned['uid']] = $banned; - - unset($banned); - } - - // Get the banned users - $bannedusers = ''; - foreach($banned_cache as $banned) - { - $banned['username'] = htmlspecialchars_uni($banned['username']); - $profile_link = build_profile_link($banned['username'], $banned['uid']); - - // Only show the edit & lift links if current user created ban, or is super mod/admin - $edit_link = ''; - if($mybb->user['uid'] == $banned['admin'] || !$banned['adminuser'] || $mybb->usergroup['issupermod'] == 1 || $mybb->usergroup['cancp'] == 1) - { - eval("\$edit_link = \"".$templates->get("modcp_banning_edit")."\";"); - } - - $admin_profile = build_profile_link(htmlspecialchars_uni($banned['adminuser']), $banned['admin']); - - $trow = alt_trow(); - - if($banned['reason']) - { - $banned['reason'] = htmlspecialchars_uni($parser->parse_badwords($banned['reason'])); - } - else - { - $banned['reason'] = $lang->na; - } - - if($banned['lifted'] == 'perm' || $banned['lifted'] == '' || $banned['bantime'] == 'perm' || $banned['bantime'] == '---') - { - $banlength = $lang->permanent; - $timeremaining = $lang->na; - } - else - { - $banlength = $bantimes[$banned['bantime']]; - $remaining = $banned['remaining']; - - $timeremaining = nice_time($remaining, array('short' => 1, 'seconds' => false)).""; - - $banned_class = ''; - $ban_remaining = "{$timeremaining} {$lang->ban_remaining}"; - - if($remaining <= 0) - { - $banned_class = "imminent_banned"; - $ban_remaining = $lang->ban_ending_imminently; - } - else if($remaining < 3600) - { - $banned_class = "high_banned"; - } - else if($remaining < 86400) - { - $banned_class = "moderate_banned"; - } - else if($remaining < 604800) - { - $banned_class = "low_banned"; - } - else - { - $banned_class = "normal_banned"; - } - - eval('$timeremaining = "'.$templates->get('modcp_banning_remaining').'";'); - } - - eval("\$bannedusers .= \"".$templates->get("modcp_banning_ban")."\";"); - } - - if(!$bannedusers) - { - eval("\$bannedusers = \"".$templates->get("modcp_nobanned")."\";"); - } - - $modnotes = $cache->read("modnotes"); - $modnotes = htmlspecialchars_uni($modnotes['modmessage']); - - $plugins->run_hooks("modcp_end"); - - eval("\$modcp = \"".$templates->get("modcp")."\";"); - output_page($modcp); -} diff --git a/html/forums/moderation.php b/html/forums/moderation.php deleted file mode 100644 index d7cf7b0..0000000 --- a/html/forums/moderation.php +++ /dev/null @@ -1,3329 +0,0 @@ -load("moderation"); - -$plugins->run_hooks("moderation_start"); - -$tid = $mybb->get_input('tid', MyBB::INPUT_INT); -$pid = $mybb->get_input('pid', MyBB::INPUT_INT); -$fid = $mybb->get_input('fid', MyBB::INPUT_INT); -$pmid = $mybb->get_input('pmid', MyBB::INPUT_INT); - -if($pid) -{ - $post = get_post($pid); - if(!$post) - { - error($lang->error_invalidpost); - } - $tid = $post['tid']; -} - -if($tid) -{ - $thread = get_thread($tid); - if(!$thread) - { - error($lang->error_invalidthread); - } - $fid = $thread['fid']; -} - -if($fid) -{ - $modlogdata['fid'] = $fid; - $forum = get_forum($fid); - - // Make navigation - build_forum_breadcrumb($fid); - - // Get our permissions all nice and setup - $permissions = forum_permissions($fid); -} - -if($pmid > 0) -{ - $query = $db->simple_select('privatemessages', 'uid, subject, ipaddress, fromid', "pmid = $pmid"); - - $pm = $db->fetch_array($query); - - if(!$pm) - { - error($lang->error_invalidpm); - } -} - -// Get some navigation if we need it -$mybb->input['action'] = $mybb->get_input('action'); -switch($mybb->input['action']) -{ - case "reports": - add_breadcrumb($lang->reported_posts); - break; - case "allreports": - add_breadcrumb($lang->all_reported_posts); - break; - -} - -if(isset($thread)) -{ - $thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - add_breadcrumb($thread['subject'], get_thread_link($thread['tid'])); - $modlogdata['tid'] = $thread['tid']; -} - -if(isset($forum)) -{ - // Check if this forum is password protected and we have a valid password - check_forum_password($forum['fid']); -} - -$mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); -eval("\$loginbox = \"".$templates->get("changeuserbox")."\";"); - -$allowable_moderation_actions = array("getip", "getpmip", "cancel_delayedmoderation", "delayedmoderation", "threadnotes", "purgespammer", "viewthreadnotes"); - -if($mybb->request_method != "post" && !in_array($mybb->input['action'], $allowable_moderation_actions)) -{ - error_no_permission(); -} - -// Begin! -switch($mybb->input['action']) -{ - // Delayed Moderation - case "cancel_delayedmoderation": - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - add_breadcrumb($lang->delayed_moderation); - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks('moderation_cancel_delayedmoderation'); - - $db->delete_query("delayedmoderation", "did='".$mybb->get_input('did', MyBB::INPUT_INT)."'"); - - if($tid == 0) - { - moderation_redirect(get_forum_link($fid), $lang->redirect_delayed_moderation_cancelled); - } - else - { - moderation_redirect("moderation.php?action=delayedmoderation&tid={$tid}&my_post_key={$mybb->post_code}", $lang->redirect_delayed_moderation_cancelled); - } - break; - case "do_delayedmoderation": - case "delayedmoderation": - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $localized_time_offset = $mybb->user['timezone']*3600 + $mybb->user['dst']*3600; - - if(!$mybb->get_input('date_day', MyBB::INPUT_INT)) - { - $mybb->input['date_day'] = gmdate('d', TIME_NOW + $localized_time_offset); - } - if(!$mybb->get_input('date_month', MyBB::INPUT_INT)) - { - $mybb->input['date_month'] = gmdate('m', TIME_NOW + $localized_time_offset); - } - - // Assume in-line moderation if TID is not set - if(!empty($mybb->input['tid'])) - { - $mybb->input['tids'] = $tid; - } - else - { - if($mybb->get_input('inlinetype') == 'search') - { - $tids = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - $tids = getids($fid, "forum"); - } - if(count($tids) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $mybb->input['tids'] = $tids; - } - - add_breadcrumb($lang->delayed_moderation); - - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $errors = array(); - $customthreadtools = ""; - - $allowed_types = array('openclosethread', 'softdeleterestorethread', 'deletethread', 'move', 'stick', 'merge', 'removeredirects', 'removesubscriptions', 'approveunapprovethread'); - - $mybb->input['type'] = $mybb->get_input('type'); - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("modtools", 'tid, name', "(','||forums||',' LIKE '%,$fid,%' OR ','||forums||',' LIKE '%,-1,%' OR forums='') AND type = 't'"); - break; - default: - $query = $db->simple_select("modtools", 'tid, name', "(CONCAT(',',forums,',') LIKE '%,$fid,%' OR CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='') AND type = 't'"); - } - while($tool = $db->fetch_array($query)) - { - $allowed_types[] = "modtool_".$tool['tid']; - - $tool['name'] = htmlspecialchars_uni($tool['name']); - - $checked = ""; - if($mybb->input['type'] == "modtool_".$tool['tid']) - { - $checked = "checked=\"checked\""; - } - - eval("\$customthreadtools .= \"".$templates->get("moderation_delayedmoderation_custommodtool")."\";"); - } - - $mybb->input['delayedmoderation'] = $mybb->get_input('delayedmoderation', MyBB::INPUT_ARRAY); - - if($mybb->input['action'] == "do_delayedmoderation" && $mybb->request_method == "post") - { - if(!in_array($mybb->input['type'], $allowed_types)) - { - $mybb->input['type'] = ''; - $errors[] = $lang->error_delayedmoderation_unsupported_type; - } - - if($mybb->input['type'] == 'move' && (!isset($mybb->input['delayedmoderation']['method']) || !in_array($mybb->input['delayedmoderation']['method'], array('move', 'redirect', 'copy')))) - { - $mybb->input['delayedmoderation']['method'] = ''; - $errors[] = $lang->error_delayedmoderation_unsupported_method; - } - - if($mybb->input['type'] == 'move') - { - $newforum = get_forum($fid); - if(!$newforum || $newforum['type'] != "f" || $newforum['type'] == "f" && $newforum['linkto'] != '') - { - $errors[] = $lang->error_invalidforum; - } - } - - if($mybb->input['date_day'] > 31 || $mybb->input['date_day'] < 1) - { - $errors[] = $lang->error_delayedmoderation_invalid_date_day; - } - - if($mybb->input['date_month'] > 12 || $mybb->input['date_month'] < 1) - { - $errors[] = $lang->error_delayedmoderation_invalid_date_month; - } - - if($mybb->input['date_year'] < gmdate('Y', TIME_NOW + $localized_time_offset)) - { - $errors[] = $lang->error_delayedmoderation_invalid_date_year; - } - - $date_time = explode(' ', $mybb->get_input('date_time')); - $date_time = explode(':', (string)$date_time[0]); - - if(stristr($mybb->input['date_time'], 'pm')) - { - $date_time[0] = 12+$date_time[0]; - if($date_time[0] >= 24) - { - $date_time[0] = '00'; - } - } - - $rundate = gmmktime((int)$date_time[0], (int)$date_time[1], date('s', TIME_NOW), $mybb->get_input('date_month', MyBB::INPUT_INT), $mybb->get_input('date_day', MyBB::INPUT_INT), $mybb->get_input('date_year', MyBB::INPUT_INT)) - $localized_time_offset; - - if(!$errors) - { - if(is_array($mybb->input['tids'])) - { - $mybb->input['tids'] = implode(',' , $mybb->input['tids']); - } - - $did = $db->insert_query("delayedmoderation", array( - 'type' => $db->escape_string($mybb->input['type']), - 'delaydateline' => (int)$rundate, - 'uid' => $mybb->user['uid'], - 'tids' => $db->escape_string($mybb->input['tids']), - 'fid' => $fid, - 'dateline' => TIME_NOW, - 'inputs' => $db->escape_string(my_serialize($mybb->input['delayedmoderation'])) - )); - - $plugins->run_hooks('moderation_do_delayedmoderation'); - - $rundate_format = my_date('relative', $rundate, '', 2); - $lang->redirect_delayed_moderation_thread = $lang->sprintf($lang->redirect_delayed_moderation_thread, $rundate_format); - - if(!empty($mybb->input['tid'])) - { - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_delayed_moderation_thread); - } - else - { - if($mybb->get_input('inlinetype') == 'search') - { - moderation_redirect(get_forum_link($fid), $lang->sprintf($lang->redirect_delayed_moderation_search, $rundate_format)); - } - else - { - moderation_redirect(get_forum_link($fid), $lang->sprintf($lang->redirect_delayed_moderation_forum, $rundate_format)); - } - } - } - else - { - $type_selected = array(); - foreach($allowed_types as $type) - { - $type_selected[$type] = ''; - } - $type_selected[$mybb->get_input('type')] = "checked=\"checked\""; - $method_selected = array('move' => '', 'redirect' => '', 'copy' => ''); - if(isset($mybb->input['delayedmoderation']['method'])) - { - $method_selected[$mybb->input['delayedmoderation']['method']] = "checked=\"checked\""; - } - - foreach(array('redirect_expire', 'new_forum', 'subject', 'threadurl') as $value) - { - if(!isset($mybb->input['delayedmoderation'][$value])) - { - $mybb->input['delayedmoderation'][$value] = ''; - } - } - $mybb->input['delayedmoderation']['redirect_expire'] = (int)$mybb->input['delayedmoderation']['redirect_expire']; - $mybb->input['delayedmoderation']['new_forum'] = (int)$mybb->input['delayedmoderation']['new_forum']; - $mybb->input['delayedmoderation']['subject'] = htmlspecialchars_uni($mybb->input['delayedmoderation']['subject']); - $mybb->input['delayedmoderation']['threadurl'] = htmlspecialchars_uni($mybb->input['delayedmoderation']['threadurl']); - - $forumselect = build_forum_jump("", $mybb->input['delayedmoderation']['new_forum'], 1, '', 0, true, '', "delayedmoderation[new_forum]"); - } - } - else - { - $type_selected = array(); - foreach($allowed_types as $type) - { - $type_selected[$type] = ''; - } - $type_selected['openclosethread'] = "checked=\"checked\""; - $method_selected = array('move' => 'checked="checked"', 'redirect' => '', 'copy' => ''); - - $mybb->input['delayedmoderation']['redirect_expire'] = ''; - $mybb->input['delayedmoderation']['subject'] = $thread['subject']; - $mybb->input['delayedmoderation']['threadurl'] = ''; - - $forumselect = build_forum_jump("", $fid, 1, '', 0, true, '', "delayedmoderation[new_forum]"); - } - - if(isset($errors) && count($errors) > 0) - { - $display_errors = inline_error($errors); - } - else - { - $display_errors = ''; - } - - $forum_cache = $cache->read("forums"); - - $actions = array( - 'openclosethread' => $lang->open_close_thread, - 'softdeleterestorethread' => $lang->softdelete_restore_thread, - 'deletethread' => $lang->delete_thread, - 'move' => $lang->move_copy_thread, - 'stick' => $lang->stick_unstick_thread, - 'merge' => $lang->merge_threads, - 'removeredirects' => $lang->remove_redirects, - 'removesubscriptions' => $lang->remove_subscriptions, - 'approveunapprovethread' => $lang->approve_unapprove_thread - ); - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("modtools", 'tid, name', "(','||forums||',' LIKE '%,$fid,%' OR ','||forums||',' LIKE '%,-1,%' OR forums='') AND type = 't'"); - break; - default: - $query = $db->simple_select("modtools", 'tid, name', "(CONCAT(',',forums,',') LIKE '%,$fid,%' OR CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='') AND type = 't'"); - } - while($tool = $db->fetch_array($query)) - { - $actions['modtool_'.$tool['tid']] = htmlspecialchars_uni($tool['name']); - } - - $delayedmods = ''; - $trow = alt_trow(1); - if($tid == 0) - { - // Inline thread moderation is used - if($mybb->get_input('inlinetype') == 'search') - { - $tids = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $tids = getids($fid, "forum"); - } - $where_array = array(); - switch($db->type) - { - case "pgsql": - case "sqlite": - foreach($tids as $like) - { - $where_array[] = "','||d.tids||',' LIKE '%,".$db->escape_string($like).",%'"; - } - $where_statement = implode(" OR ", $where_array); - break; - default: - foreach($tids as $like) - { - $where_array[] = "CONCAT(',',d.tids,',') LIKE '%,".$db->escape_string($like).",%'"; - } - $where_statement = implode(" OR ", $where_array); - } - $query = $db->query(" - SELECT d.*, u.username, f.name AS fname - FROM ".TABLE_PREFIX."delayedmoderation d - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=d.uid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=d.fid) - WHERE ".$where_statement." - ORDER BY d.dateline DESC - LIMIT 0, 20 - "); - } - else - { - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->query(" - SELECT d.*, u.username, f.name AS fname - FROM ".TABLE_PREFIX."delayedmoderation d - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=d.uid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=d.fid) - WHERE ','||d.tids||',' LIKE '%,{$tid},%' - ORDER BY d.dateline DESC - LIMIT 0, 20 - "); - break; - default: - $query = $db->query(" - SELECT d.*, u.username, f.name AS fname - FROM ".TABLE_PREFIX."delayedmoderation d - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=d.uid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=d.fid) - WHERE CONCAT(',',d.tids,',') LIKE '%,{$tid},%' - ORDER BY d.dateline DESC - LIMIT 0, 20 - "); - } - } - - while($delayedmod = $db->fetch_array($query)) - { - $delayedmod['dateline'] = my_date("jS M Y, {$mybb->settings['timeformat']}", $delayedmod['delaydateline']); - $delayedmod['username'] = htmlspecialchars_uni($delayedmod['username']); - $delayedmod['profilelink'] = build_profile_link($delayedmod['username'], $delayedmod['uid']); - $delayedmod['action'] = $actions[$delayedmod['type']]; - $info = ''; - if(strpos($delayedmod['tids'], ',') === false) - { - $delayed_thread = get_thread($delayedmod['tids']); - $delayed_thread['link'] = get_thread_link($delayed_thread['tid']); - $delayed_thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($delayed_thread['subject'])); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_thread_single")."\";"); - } - else - { - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_thread_multiple")."\";"); - } - - if($delayedmod['fname']) - { - $delayedmod['link'] = get_forum_link($delayedmod['fid']); - $delayedmod['fname'] = htmlspecialchars_uni($delayedmod['fname']); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_forum")."\";"); - } - $delayedmod['inputs'] = my_unserialize($delayedmod['inputs']); - - if($delayedmod['type'] == 'move') - { - $delayedmod['link'] = get_forum_link($delayedmod['inputs']['new_forum']); - $delayedmod['name'] = htmlspecialchars_uni($forum_cache[$delayedmod['inputs']['new_forum']]['name']); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_new_forum")."\";"); - - if($delayedmod['inputs']['method'] == "redirect") - { - if((int)$delayedmod['inputs']['redirect_expire'] == 0) - { - $redirect_expire_bit = $lang->redirect_forever; - } - else - { - $redirect_expire_bit = (int)$delayedmod['inputs']['redirect_expire']." {$lang->days}"; - } - - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_redirect")."\";"); - } - } - else if($delayedmod['type'] == 'merge') - { - $delayedmod['subject'] = htmlspecialchars_uni($delayedmod['inputs']['subject']); - $delayedmod['threadurl'] = htmlspecialchars_uni($delayedmod['inputs']['threadurl']); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_merge")."\";"); - } - - eval("\$delayedmods .= \"".$templates->get("moderation_delayedmodaction_notes")."\";"); - $trow = alt_trow(); - } - if(!$delayedmods) - { - $cols = 5; - eval("\$delayedmods = \"".$templates->get("moderation_delayedmodaction_error")."\";"); - } - - $url = ''; - if($mybb->get_input('tid', MyBB::INPUT_INT)) - { - $lang->threads = $lang->thread; - $thread['link'] = get_thread_link($tid); - eval("\$threads = \"".$templates->get("moderation_delayedmoderation_thread")."\";"); - eval("\$moderation_delayedmoderation_merge = \"".$templates->get("moderation_delayedmoderation_merge")."\";"); - } - else - { - if($mybb->get_input('inlinetype') == 'search') - { - $tids = getids($mybb->get_input('searchid'), 'search'); - $url = htmlspecialchars_uni($mybb->get_input('url')); - } - else - { - $tids = getids($fid, "forum"); - } - if(count($tids) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $threads = $lang->sprintf($lang->threads_selected, count($tids)); - $moderation_delayedmoderation_merge = ''; - } - $mybb->input['redirect_expire'] = $mybb->get_input('redirect_expire'); - eval("\$moderation_delayedmoderation_move = \"".$templates->get("moderation_delayedmoderation_move")."\";"); - - // Generate form elements for date form - $dateday = ''; - for($day = 1; $day <= 31; ++$day) - { - $selected = ''; - if($mybb->get_input('date_day', MyBB::INPUT_INT) == $day) - { - $selected = ' selected="selected"'; - } - eval('$dateday .= "'.$templates->get('moderation_delayedmoderation_date_day').'";'); - } - - $datemonth = array(); - foreach(array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12') as $month) - { - $datemonth[$month] = ''; - if($mybb->get_input('date_month', MyBB::INPUT_INT) == (int)$month) - { - $datemonth[$month] = ' selected="selected"'; - } - } - - - eval('$datemonth = "'.$templates->get('moderation_delayedmoderation_date_month').'";'); - - $dateyear = gmdate('Y', TIME_NOW + $localized_time_offset); - $datetime = gmdate($mybb->settings['timeformat'], TIME_NOW + $localized_time_offset); - - $plugins->run_hooks("moderation_delayedmoderation"); - - eval("\$delayedmoderation = \"".$templates->get("moderation_delayedmoderation")."\";"); - output_page($delayedmoderation); - break; - // Open or close a thread - case "openclosethread": - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canopenclosethreads")) - { - error_no_permission(); - } - - if($thread['closed'] == 1) - { - $openclose = $lang->opened; - $redirect = $lang->redirect_openthread; - $moderation->open_threads($tid); - } - else - { - $openclose = $lang->closed; - $redirect = $lang->redirect_closethread; - $moderation->close_threads($tid); - } - - $lang->mod_process = $lang->sprintf($lang->mod_process, $openclose); - - log_moderator_action($modlogdata, $lang->mod_process); - - moderation_redirect(get_thread_link($thread['tid']), $redirect); - break; - - // Stick or unstick that post to the top bab! - case "stick": - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canstickunstickthreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_stick"); - - if($thread['sticky'] == 1) - { - $stuckunstuck = $lang->unstuck; - $redirect = $lang->redirect_unstickthread; - $moderation->unstick_threads($tid); - } - else - { - $stuckunstuck = $lang->stuck; - $redirect = $lang->redirect_stickthread; - $moderation->stick_threads($tid); - } - - $lang->mod_process = $lang->sprintf($lang->mod_process, $stuckunstuck); - - log_moderator_action($modlogdata, $lang->mod_process); - - moderation_redirect(get_thread_link($thread['tid']), $redirect); - break; - - // Remove redirects to a specific thread - case "removeredirects": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_removeredirects"); - - $moderation->remove_redirects($tid); - - log_moderator_action($modlogdata, $lang->redirects_removed); - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_redirectsremoved); - break; - - // Delete thread confirmation page - case "deletethread": - - add_breadcrumb($lang->nav_deletethread); - - if(!is_moderator($fid, "candeletethreads")) - { - if($permissions['candeletethreads'] != 1 || $mybb->user['uid'] != $thread['uid']) - { - error_no_permission(); - } - } - - $plugins->run_hooks("moderation_deletethread"); - - eval("\$deletethread = \"".$templates->get("moderation_deletethread")."\";"); - output_page($deletethread); - break; - - // Delete the actual thread here - case "do_deletethread": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "candeletethreads")) - { - if($permissions['candeletethreads'] != 1 || $mybb->user['uid'] != $thread['uid']) - { - error_no_permission(); - } - } - - $plugins->run_hooks("moderation_do_deletethread"); - - // Log the subject of the deleted thread - $modlogdata['thread_subject'] = $thread['subject']; - - $thread['subject'] = $db->escape_string($thread['subject']); - $lang->thread_deleted = $lang->sprintf($lang->thread_deleted, $thread['subject']); - log_moderator_action($modlogdata, $lang->thread_deleted); - - $moderation->delete_thread($tid); - - mark_reports($tid, "thread"); - moderation_redirect(get_forum_link($fid), $lang->redirect_threaddeleted); - break; - - // Delete the poll from a thread confirmation page - case "deletepoll": - add_breadcrumb($lang->nav_deletepoll); - - if(!is_moderator($fid, "canmanagepolls")) - { - if($permissions['candeletethreads'] != 1 || $mybb->user['uid'] != $thread['uid']) - { - error_no_permission(); - } - } - - $plugins->run_hooks("moderation_deletepoll"); - - $query = $db->simple_select("polls", "pid", "tid='$tid'"); - $poll = $db->fetch_array($query); - if(!$poll) - { - error($lang->error_invalidpoll); - } - - eval("\$deletepoll = \"".$templates->get("moderation_deletepoll")."\";"); - output_page($deletepoll); - break; - - // Delete the actual poll here! - case "do_deletepoll": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!isset($mybb->input['delete'])) - { - error($lang->redirect_pollnotdeleted); - } - if(!is_moderator($fid, "canmanagepolls")) - { - if($permissions['candeletethreads'] != 1 || $mybb->user['uid'] != $thread['uid']) - { - error_no_permission(); - } - } - $query = $db->simple_select("polls", "pid", "tid = $tid"); - $poll = $db->fetch_array($query); - if(!$poll) - { - error($lang->error_invalidpoll); - } - - $plugins->run_hooks("moderation_do_deletepoll"); - - $lang->poll_deleted = $lang->sprintf($lang->poll_deleted, $thread['subject']); - log_moderator_action($modlogdata, $lang->poll_deleted); - - $moderation->delete_poll($poll['pid']); - - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_polldeleted); - break; - - // Approve a thread - case "approvethread": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canapproveunapprovethreads")) - { - error_no_permission(); - } - $thread = get_thread($tid); - - $plugins->run_hooks("moderation_approvethread"); - - $lang->thread_approved = $lang->sprintf($lang->thread_approved, $thread['subject']); - log_moderator_action($modlogdata, $lang->thread_approved); - - $moderation->approve_threads($tid, $fid); - - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_threadapproved); - break; - - // Unapprove a thread - case "unapprovethread": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canapproveunapprovethreads")) - { - error_no_permission(); - } - $thread = get_thread($tid); - - $plugins->run_hooks("moderation_unapprovethread"); - - $lang->thread_unapproved = $lang->sprintf($lang->thread_unapproved, $thread['subject']); - log_moderator_action($modlogdata, $lang->thread_unapproved); - - $moderation->unapprove_threads($tid); - - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_threadunapproved); - break; - - // Restore a thread - case "restorethread": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canrestorethreads")) - { - error_no_permission(); - } - $thread = get_thread($tid); - - $plugins->run_hooks("moderation_restorethread"); - - $lang->thread_restored = $lang->sprintf($lang->thread_restored, $thread['subject']); - log_moderator_action($modlogdata, $lang->thread_restored); - - $moderation->restore_threads($tid); - - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_threadrestored); - break; - - // Soft delete a thread - case "softdeletethread": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "cansoftdeletethreads")) - { - error_no_permission(); - } - $thread = get_thread($tid); - - $plugins->run_hooks("moderation_softdeletethread"); - - $lang->thread_soft_deleted = $lang->sprintf($lang->thread_soft_deleted, $thread['subject']); - log_moderator_action($modlogdata, $lang->thread_soft_deleted); - - $moderation->soft_delete_threads($tid); - - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_threadsoftdeleted); - break; - - // Move a thread - case "move": - add_breadcrumb($lang->nav_move); - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_move"); - - $forumselect = build_forum_jump("", '', 1, '', 0, true, '', "moveto"); - eval("\$movethread = \"".$templates->get("moderation_move")."\";"); - output_page($movethread); - break; - - // Let's get this thing moving! - case "do_move": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $moveto = $mybb->get_input('moveto', MyBB::INPUT_INT); - $method = $mybb->get_input('method'); - - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - // Check if user has moderator permission to move to destination - if(!is_moderator($moveto, "canmanagethreads") && !is_moderator($fid, "canmovetononmodforum")) - { - error_no_permission(); - } - $newperms = forum_permissions($moveto); - if($newperms['canview'] == 0 && !is_moderator($fid, "canmovetononmodforum")) - { - error_no_permission(); - } - - $newforum = get_forum($moveto); - if(!$newforum || $newforum['type'] != "f" || $newforum['type'] == "f" && $newforum['linkto'] != '') - { - error($lang->error_invalidforum); - } - if($method != "copy" && $thread['fid'] == $moveto) - { - error($lang->error_movetosameforum); - } - - $plugins->run_hooks('moderation_do_move'); - - $expire = 0; - if($mybb->get_input('redirect_expire', MyBB::INPUT_INT) > 0) - { - $expire = TIME_NOW + ($mybb->get_input('redirect_expire', MyBB::INPUT_INT) * 86400); - } - - $the_thread = $tid; - - $newtid = $moderation->move_thread($tid, $moveto, $method, $expire); - - switch($method) - { - case "copy": - log_moderator_action($modlogdata, $lang->thread_copied); - break; - default: - case "move": - case "redirect": - log_moderator_action($modlogdata, $lang->thread_moved); - break; - } - - moderation_redirect(get_thread_link($newtid), $lang->redirect_threadmoved); - break; - - // Viewing thread notes - case "viewthreadnotes": - if(!is_moderator($fid)) - { - error_no_permission(); - } - - // Make sure we are looking at a real thread here. - if(!$thread) - { - error($lang->error_nomember); - } - - $plugins->run_hooks('moderation_viewthreadnotes'); - - $lang->view_notes_for = $lang->sprintf($lang->view_notes_for, $thread['subject']); - - $thread['notes'] = nl2br(htmlspecialchars_uni($thread['notes'])); - - eval("\$viewthreadnotes = \"".$templates->get("moderation_viewthreadnotes", 1, 0)."\";"); - echo $viewthreadnotes; - break; - - // Thread notes editor - case "threadnotes": - add_breadcrumb($lang->nav_threadnotes); - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - $thread['notes'] = htmlspecialchars_uni($parser->parse_badwords($thread['notes'])); - $trow = alt_trow(1); - - if(is_moderator($fid, "canviewmodlog")) - { - $query = $db->query(" - SELECT l.*, u.username, t.subject AS tsubject, f.name AS fname, p.subject AS psubject - FROM ".TABLE_PREFIX."moderatorlog l - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=l.tid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=l.fid) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=l.pid) - WHERE t.tid='$tid' - ORDER BY l.dateline DESC - LIMIT 0, 20 - "); - $modactions = ''; - while($modaction = $db->fetch_array($query)) - { - $modaction['dateline'] = my_date("jS M Y, G:i", $modaction['dateline']); - $modaction['username'] = htmlspecialchars_uni($modaction['username']); - $modaction['profilelink'] = build_profile_link($modaction['username'], $modaction['uid']); - $modaction['action'] = htmlspecialchars_uni($modaction['action']); - $info = ''; - if($modaction['tsubject']) - { - $modaction['tsubject'] = htmlspecialchars_uni($parser->parse_badwords($modaction['tsubject'])); - $modaction['threadlink'] = get_thread_link($modaction['tid']); - eval("\$info .= \"".$templates->get("moderation_threadnotes_modaction_thread")."\";"); - } - if($modaction['fname']) - { - $modaction['fname'] = htmlspecialchars_uni($modaction['fname']); - $modaction['forumlink'] = get_forum_link($modaction['fid']); - eval("\$info .= \"".$templates->get("moderation_threadnotes_modaction_forum")."\";"); - } - if($modaction['psubject']) - { - - $modaction['psubject'] = htmlspecialchars_uni($parser->parse_badwords($modaction['psubject'])); - $modaction['postlink'] = get_post_link($modaction['pid']); - eval("\$info .= \"".$templates->get("moderation_threadnotes_modaction_post")."\";"); - } - - eval("\$modactions .= \"".$templates->get("moderation_threadnotes_modaction")."\";"); - $trow = alt_trow(); - } - if(!$modactions) - { - eval("\$modactions = \"".$templates->get("moderation_threadnotes_modaction_error")."\";"); - } - } - - $actions = array( - 'openclosethread' => $lang->open_close_thread, - 'deletethread' => $lang->delete_thread, - 'move' => $lang->move_copy_thread, - 'stick' => $lang->stick_unstick_thread, - 'merge' => $lang->merge_threads, - 'removeredirects' => $lang->remove_redirects, - 'removesubscriptions' => $lang->remove_subscriptions, - 'approveunapprovethread' => $lang->approve_unapprove_thread - ); - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("modtools", 'tid, name', "(','||forums||',' LIKE '%,$fid,%' OR ','||forums||',' LIKE '%,-1,%' OR forums='') AND type = 't'"); - break; - default: - $query = $db->simple_select("modtools", 'tid, name', "(CONCAT(',',forums,',') LIKE '%,$fid,%' OR CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='') AND type = 't'"); - } - while($tool = $db->fetch_array($query)) - { - $actions['modtool_'.$tool['tid']] = htmlspecialchars_uni($tool['name']); - } - - $forum_cache = $cache->read("forums"); - - $trow = alt_trow(1); - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->query(" - SELECT d.*, u.username, f.name AS fname - FROM ".TABLE_PREFIX."delayedmoderation d - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=d.uid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=d.fid) - WHERE ','||d.tids||',' LIKE '%,{$tid},%' - ORDER BY d.dateline DESC - LIMIT 0, 20 - "); - break; - default: - $query = $db->query(" - SELECT d.*, u.username, f.name AS fname - FROM ".TABLE_PREFIX."delayedmoderation d - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=d.uid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=d.fid) - WHERE CONCAT(',',d.tids,',') LIKE '%,{$tid},%' - ORDER BY d.dateline DESC - LIMIT 0, 20 - "); - } - $delayedmods = ''; - while($delayedmod = $db->fetch_array($query)) - { - $delayedmod['dateline'] = my_date("jS M Y, G:i", $delayedmod['delaydateline']); - $delayedmod['username'] = htmlspecialchars_uni($delayedmod['username']); - $delayedmod['profilelink'] = build_profile_link($delayedmod['username'], $delayedmod['uid']); - $delayedmod['action'] = $actions[$delayedmod['type']]; - $info = ''; - if(strpos($delayedmod['tids'], ',') === false) - { - $delayed_thread['link'] = get_thread_link($delayedmod['tids']); - $delayed_thread['subject'] = htmlspecialchars_uni($thread['subject']); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_thread_single")."\";"); - } - else - { - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_thread_multiple")."\";"); - } - - if($delayedmod['fname']) - { - $delayedmod['link'] = get_forum_link($delayedmod['fid']); - $delayedmod['fname'] = htmlspecialchars_uni($delayedmod['fname']); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_forum")."\";"); - } - $delayedmod['inputs'] = my_unserialize($delayedmod['inputs']); - - if($delayedmod['type'] == 'move') - { - $delayedmod['link'] = get_forum_link($delayedmod['inputs']['new_forum']); - $delayedmod['name'] = htmlspecialchars_uni($forum_cache[$delayedmod['inputs']['new_forum']]['name']); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_new_forum")."\";"); - - if($delayedmod['inputs']['method'] == "redirect") - { - if((int)$delayedmod['inputs']['redirect_expire'] == 0) - { - $redirect_expire_bit = $lang->redirect_forever; - } - else - { - $redirect_expire_bit = (int)$delayedmod['inputs']['redirect_expire']." {$lang->days}"; - } - - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_redirect")."\";"); - } - } - else if($delayedmod['type'] == 'merge') - { - $delayedmod['subject'] = htmlspecialchars_uni($delayedmod['inputs']['subject']); - $delayedmod['threadurl'] = htmlspecialchars_uni($delayedmod['inputs']['threadurl']); - eval("\$info .= \"".$templates->get("moderation_delayedmodaction_notes_merge")."\";"); - } - - eval("\$delayedmods .= \"".$templates->get("moderation_threadnotes_delayedmodaction")."\";"); - $trow = alt_trow(); - } - if(!$delayedmods) - { - $cols = 4; - eval("\$delayedmods = \"".$templates->get("moderation_delayedmodaction_error")."\";"); - } - - $plugins->run_hooks("moderation_threadnotes"); - - eval("\$threadnotes = \"".$templates->get("moderation_threadnotes")."\";"); - output_page($threadnotes); - break; - - // Update the thread notes! - case "do_threadnotes": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_do_threadnotes"); - - log_moderator_action($modlogdata, $lang->thread_notes_edited); - $sqlarray = array( - "notes" => $db->escape_string($mybb->get_input('threadnotes')), - ); - $db->update_query("threads", $sqlarray, "tid='$tid'"); - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_threadnotesupdated); - break; - - // Let's look up the ip address of a post - case "getip": - add_breadcrumb($lang->nav_getip); - if(!is_moderator($fid, "canviewips")) - { - error_no_permission(); - } - - $post['ipaddress'] = my_inet_ntop($db->unescape_binary($post['ipaddress'])); - $hostname = @gethostbyaddr($post['ipaddress']); - if(!$hostname || $hostname == $post['ipaddress']) - { - $hostname = $lang->resolve_fail; - } - - $post['username'] = htmlspecialchars_uni($post['username']); - $username = build_profile_link($post['username'], $post['uid']); - - // Moderator options - $modoptions = ""; - if($mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canuseipsearch'] == 1) - { - $ipaddress = $post['ipaddress']; - eval("\$modoptions = \"".$templates->get("moderation_getip_modoptions")."\";"); - } - - $plugins->run_hooks('moderation_getip'); - - eval("\$getip = \"".$templates->get("moderation_getip")."\";"); - output_page($getip); - break; - - // Let's look up the ip address of a PM - case "getpmip": - if($pmid <= 0) - { - error($lang->error_invalidpm); - } - add_breadcrumb($lang->nav_pms, "private.php"); - $pm['subject'] = htmlspecialchars_uni($parser->parse_badwords($pm['subject'])); - add_breadcrumb($pm['subject'], "private.php?action=read&pmid={$pmid}"); - add_breadcrumb($lang->nav_getpmip); - if(!$mybb->usergroup['issupermod']) - { - error_no_permission(); - } - - $pm['ipaddress'] = my_inet_ntop($db->unescape_binary($pm['ipaddress'])); - $hostname = @gethostbyaddr($pm['ipaddress']); - if(!$hostname || $hostname == $pm['ipaddress']) - { - $hostname = $lang->resolve_fail; - } - - $name = $db->fetch_field($db->simple_select('users', 'username', "uid = {$pm['fromid']}"), 'username'); - $username = build_profile_link($name, $pm['fromid']); - - // Moderator options - $modoptions = ""; - if($mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canuseipsearch'] == 1) - { - $ipaddress = $pm['ipaddress']; - eval("\$modoptions = \"".$templates->get("moderation_getip_modoptions")."\";"); - } - - $plugins->run_hooks('moderation_getpmip'); - - eval("\$getpmip = \"".$templates->get("moderation_getpmip")."\";"); - output_page($getpmip); - break; - - // Merge threads - case "merge": - add_breadcrumb($lang->nav_merge); - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_merge"); - - eval("\$merge = \"".$templates->get("moderation_merge")."\";"); - output_page($merge); - break; - - // Let's get those threads together baby! (Merge threads) - case "do_merge": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_do_merge"); - - // explode at # sign in a url (indicates a name reference) and reassign to the url - $realurl = explode("#", $mybb->get_input('threadurl')); - $mybb->input['threadurl'] = $realurl[0]; - - // Are we using an SEO URL? - if(substr($mybb->input['threadurl'], -4) == "html") - { - // Get thread to merge's tid the SEO way - preg_match("#thread-([0-9]+)?#i", $mybb->input['threadurl'], $threadmatch); - preg_match("#post-([0-9]+)?#i", $mybb->input['threadurl'], $postmatch); - - if($threadmatch[1]) - { - $parameters['tid'] = $threadmatch[1]; - } - - if($postmatch[1]) - { - $parameters['pid'] = $postmatch[1]; - } - } - else - { - // Get thread to merge's tid the normal way - $splitloc = explode(".php", $mybb->input['threadurl']); - $temp = explode("&", my_substr($splitloc[1], 1)); - - if(!empty($temp)) - { - for($i = 0; $i < count($temp); $i++) - { - $temp2 = explode("=", $temp[$i], 2); - $parameters[$temp2[0]] = $temp2[1]; - } - } - else - { - $temp2 = explode("=", $splitloc[1], 2); - $parameters[$temp2[0]] = $temp2[1]; - } - } - - if(!empty($parameters['pid']) && empty($parameters['tid'])) - { - $post = get_post($parameters['pid']); - $mergetid = (int)$post['tid']; - } - elseif(!empty($parameters['tid'])) - { - $mergetid = (int)$parameters['tid']; - } - else - { - $mergetid = 0; - } - $mergethread = get_thread($mergetid); - if(!$mergethread) - { - error($lang->error_badmergeurl); - } - if($mergetid == $tid) - { // sanity check - error($lang->error_mergewithself); - } - if(!is_moderator($mergethread['fid'], "canmanagethreads")) - { - error_no_permission(); - } - if(isset($mybb->input['subject'])) - { - $subject = $mybb->get_input('subject'); - } - else - { - $subject = $thread['subject']; - } - - $moderation->merge_threads($mergetid, $tid, $subject); - - log_moderator_action($modlogdata, $lang->thread_merged); - - moderation_redirect(get_thread_link($tid), $lang->redirect_threadsmerged); - break; - - // Divorce the posts in this thread (Split!) - case "split": - add_breadcrumb($lang->nav_split); - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - $query = $db->query(" - SELECT p.*, u.* - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (p.uid=u.uid) - WHERE tid='$tid' - ORDER BY dateline ASC - "); - $numposts = $db->num_rows($query); - if($numposts <= 1) - { - error($lang->error_cantsplitonepost); - } - - $altbg = "trow1"; - $posts = ''; - while($post = $db->fetch_array($query)) - { - $postdate = my_date('relative', $post['dateline']); - $post['username'] = htmlspecialchars_uni($post['username']); - - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "filter_badwords" => 1 - ); - if($post['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - $message = $parser->parse_message($post['message'], $parser_options); - eval("\$posts .= \"".$templates->get("moderation_split_post")."\";"); - $altbg = alt_trow(); - } - $forumselect = build_forum_jump("", $fid, 1, '', 0, true, '', "moveto"); - - $plugins->run_hooks("moderation_split"); - - eval("\$split = \"".$templates->get("moderation_split")."\";"); - output_page($split); - break; - - // Let's break them up buddy! (Do the split) - case "do_split": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_do_split"); - - $mybb->input['splitpost'] = $mybb->get_input('splitpost', MyBB::INPUT_ARRAY); - if(empty($mybb->input['splitpost'])) - { - error($lang->error_nosplitposts); - } - $query = $db->simple_select("posts", "COUNT(*) AS totalposts", "tid='{$tid}'"); - $count = $db->fetch_array($query); - - if($count['totalposts'] == 1) - { - error($lang->error_cantsplitonepost); - } - - if($count['totalposts'] == count($mybb->input['splitpost'])) - { - error($lang->error_cantsplitall); - } - - if(!empty($mybb->input['moveto'])) - { - $moveto = $mybb->get_input('moveto', MyBB::INPUT_INT); - } - else - { - $moveto = $fid; - } - - $newforum = get_forum($moveto); - if(!$newforum || $newforum['type'] != "f" || $newforum['type'] == "f" && $newforum['linkto'] != '') - { - error($lang->error_invalidforum); - } - - $pids = array(); - - // move the selected posts over - $query = $db->simple_select("posts", "pid", "tid='$tid'"); - while($post = $db->fetch_array($query)) - { - if(isset($mybb->input['splitpost'][$post['pid']]) && $mybb->input['splitpost'][$post['pid']] == 1) - { - $pids[] = $post['pid']; - } - mark_reports($post['pid'], "post"); - } - - $newtid = $moderation->split_posts($pids, $tid, $moveto, $mybb->get_input('newsubject')); - - log_moderator_action($modlogdata, $lang->thread_split); - - moderation_redirect(get_thread_link($newtid), $lang->redirect_threadsplit); - break; - - // Delete Thread Subscriptions - case "removesubscriptions": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!is_moderator($fid, "canmanagethreads")) - { - error_no_permission(); - } - - $plugins->run_hooks("moderation_removesubscriptions"); - - $moderation->remove_thread_subscriptions($tid, true); - - log_moderator_action($modlogdata, $lang->removed_subscriptions); - - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_removed_subscriptions); - break; - - // Delete Threads - Inline moderation - case "multideletethreads": - add_breadcrumb($lang->nav_multi_deletethreads); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'candeletethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'candeletethreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $inlineids = implode("|", $threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - $return_url = htmlspecialchars_uni($mybb->get_input('url')); - eval("\$multidelete = \"".$templates->get("moderation_inline_deletethreads")."\";"); - output_page($multidelete); - break; - - // Actually delete the threads - Inline moderation - case "do_multideletethreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $threadlist = explode("|", $mybb->get_input('threads')); - if(!is_moderator_by_tids($threadlist, "candeletethreads")) - { - error_no_permission(); - } - foreach($threadlist as $tid) - { - $tid = (int)$tid; - $moderation->delete_thread($tid); - $tlist[] = $tid; - } - log_moderator_action($modlogdata, $lang->multi_deleted_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - mark_reports($tlist, "threads"); - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsdeleted); - break; - - // Open threads - Inline moderation - case "multiopenthreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canopenclosethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canopenclosethreads')) - { - error_no_permission(); - } - } - - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->open_threads($threads); - - log_moderator_action($modlogdata, $lang->multi_opened_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsopened); - break; - - // Close threads - Inline moderation - case "multiclosethreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canopenclosethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canopenclosethreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->close_threads($threads); - - log_moderator_action($modlogdata, $lang->multi_closed_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsclosed); - break; - - // Approve threads - Inline moderation - case "multiapprovethreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canapproveunapprovethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canapproveunapprovethreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->approve_threads($threads, $fid); - - log_moderator_action($modlogdata, $lang->multi_approved_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - $cache->update_stats(); - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsapproved); - break; - - // Unapprove threads - Inline moderation - case "multiunapprovethreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canapproveunapprovethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canapproveunapprovethreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->unapprove_threads($threads, $fid); - - log_moderator_action($modlogdata, $lang->multi_unapproved_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - $cache->update_stats(); - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsunapproved); - break; - - // Restore threads - Inline moderation - case "multirestorethreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canrestorethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canrestorethreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->restore_threads($threads); - - log_moderator_action($modlogdata, $lang->multi_restored_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - $cache->update_stats(); - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsrestored); - break; - - // Soft delete threads - Inline moderation - case "multisoftdeletethreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'cansoftdeletethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'cansoftdeletethreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->soft_delete_threads($threads); - - log_moderator_action($modlogdata, $lang->multi_soft_deleted_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - $cache->update_stats(); - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadssoftdeleted); - break; - - // Stick threads - Inline moderation - case "multistickthreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canstickunstickthreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canstickunstickthreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->stick_threads($threads); - - log_moderator_action($modlogdata, $lang->multi_stuck_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsstuck); - break; - - // Unstick threads - Inline moderaton - case "multiunstickthreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canstickunstickthreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canstickunstickthreads')) - { - error_no_permission(); - } - } - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - - $moderation->unstick_threads($threads); - - log_moderator_action($modlogdata, $lang->multi_unstuck_threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - moderation_redirect(get_forum_link($fid), $lang->redirect_inline_threadsunstuck); - break; - - // Move threads - Inline moderation - case "multimovethreads": - add_breadcrumb($lang->nav_multi_movethreads); - - if(!empty($mybb->input['searchid'])) - { - // From search page - $threads = getids($mybb->get_input('searchid'), 'search'); - if(!is_moderator_by_tids($threads, 'canmanagethreads')) - { - error_no_permission(); - } - } - else - { - $threads = getids($fid, 'forum'); - if(!is_moderator($fid, 'canmanagethreads')) - { - error_no_permission(); - } - } - - if(count($threads) < 1) - { - error($lang->error_inline_nothreadsselected); - } - $inlineids = implode("|", $threads); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($fid, 'forum'); - } - $forumselect = build_forum_jump("", '', 1, '', 0, true, '', "moveto"); - $return_url = htmlspecialchars_uni($mybb->get_input('url')); - eval("\$movethread = \"".$templates->get("moderation_inline_movethreads")."\";"); - output_page($movethread); - break; - - // Actually move the threads in Inline moderation - case "do_multimovethreads": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $moveto = $mybb->get_input('moveto', MyBB::INPUT_INT); - $threadlist = explode("|", $mybb->get_input('threads')); - if(!is_moderator_by_tids($threadlist, 'canmanagethreads')) - { - error_no_permission(); - } - foreach($threadlist as $tid) - { - $tids[] = (int)$tid; - } - // Make sure moderator has permission to move to the new forum - $newperms = forum_permissions($moveto); - if(($newperms['canview'] == 0 || !is_moderator($moveto, 'canmanagethreads')) && !is_moderator_by_tids($tids, 'canmovetononmodforum')) - { - error_no_permission(); - } - - $newforum = get_forum($moveto); - if(!$newforum || $newforum['type'] != "f" || $newforum['type'] == "f" && $newforum['linkto'] != '') - { - error($lang->error_invalidforum); - } - - $moderation->move_threads($tids, $moveto); - - log_moderator_action($modlogdata, $lang->multi_moved_threads); - - moderation_redirect(get_forum_link($moveto), $lang->redirect_inline_threadsmoved); - break; - - // Delete posts - Inline moderation - case "multideleteposts": - add_breadcrumb($lang->nav_multi_deleteposts); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - - if(count($posts) < 1) - { - error($lang->error_inline_nopostsselected); - } - if(!is_moderator_by_pids($posts, "candeleteposts")) - { - error_no_permission(); - } - $inlineids = implode("|", $posts); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - - $return_url = htmlspecialchars_uni($mybb->get_input('url')); - - eval("\$multidelete = \"".$templates->get("moderation_inline_deleteposts")."\";"); - output_page($multidelete); - break; - - // Actually delete the posts in inline moderation - case "do_multideleteposts": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $postlist = explode("|", $mybb->get_input('posts')); - if(!is_moderator_by_pids($postlist, "candeleteposts")) - { - error_no_permission(); - } - $postlist = array_map('intval', $postlist); - $pids = implode(',', $postlist); - - $tids = array(); - if($pids) - { - $query = $db->simple_select("threads", "tid", "firstpost IN({$pids})"); - while($threadid = $db->fetch_field($query, "tid")) - { - $tids[] = $threadid; - } - } - - $deletecount = 0; - foreach($postlist as $pid) - { - $pid = (int)$pid; - $moderation->delete_post($pid); - $plist[] = $pid; - $deletecount++; - } - - // If we have multiple threads, we must be coming from the search - if(!empty($tids)) - { - foreach($tids as $tid) - { - $moderation->delete_thread($tid); - mark_reports($tid, "thread"); - $url = get_forum_link($fid); - } - } - // Otherwise we're just deleting from showthread.php - else - { - $query = $db->simple_select("posts", "pid", "tid = $tid"); - $numposts = $db->num_rows($query); - if(!$numposts) - { - $moderation->delete_thread($tid); - mark_reports($tid, "thread"); - $url = get_forum_link($fid); - } - else - { - mark_reports($plist, "posts"); - $url = get_thread_link($thread['tid']); - } - } - - $lang->deleted_selective_posts = $lang->sprintf($lang->deleted_selective_posts, $deletecount); - log_moderator_action($modlogdata, $lang->deleted_selective_posts); - moderation_redirect($url, $lang->redirect_postsdeleted); - break; - - // Merge posts - Inline moderation - case "multimergeposts": - add_breadcrumb($lang->nav_multi_mergeposts); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - - // Add the selected posts from other threads - foreach($mybb->cookies as $key => $value) - { - if(strpos($key, "inlinemod_thread") !== false && $key != "inlinemod_thread$tid") - { - $inlinepostlist = explode("|", $mybb->cookies[$key]); - foreach($inlinepostlist as $p) - { - $p = (int)$p; - - if(!empty($p)) - { - $posts[] = (int)$p; - } - } - // Remove the cookie once its data is retrieved - my_unsetcookie($key); - } - } - - if(empty($posts)) - { - error($lang->error_inline_nopostsselected); - } - - if(!is_moderator_by_pids($posts, "canmanagethreads")) - { - error_no_permission(); - } - - $postlist = ""; - $query = $db->query(" - SELECT p.*, u.* - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (p.uid=u.uid) - WHERE pid IN (".implode($posts, ",").") - ORDER BY dateline ASC - "); - $altbg = "trow1"; - while($post = $db->fetch_array($query)) - { - $postdate = my_date('relative', $post['dateline']); - - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "filter_badwords" => 1 - ); - if($post['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - $message = $parser->parse_message($post['message'], $parser_options); - eval("\$postlist .= \"".$templates->get("moderation_mergeposts_post")."\";"); - $altbg = alt_trow(); - } - - $inlineids = implode("|", $posts); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - - $return_url = htmlspecialchars_uni($mybb->get_input('url')); - - eval("\$multimerge = \"".$templates->get("moderation_inline_mergeposts")."\";"); - output_page($multimerge); - break; - - // Actually merge the posts - Inline moderation - case "do_multimergeposts": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $mergepost = $mybb->get_input('mergepost', MyBB::INPUT_ARRAY); - if(count($mergepost) <= 1) - { - error($lang->error_nomergeposts); - } - - foreach($mergepost as $pid => $yes) - { - $postlist[] = (int)$pid; - } - - if(!is_moderator_by_pids($postlist, "canmanagethreads")) - { - error_no_permission(); - } - - $masterpid = $moderation->merge_posts($postlist, $tid, $mybb->input['sep']); - - mark_reports($postlist, "posts"); - log_moderator_action($modlogdata, $lang->merged_selective_posts); - moderation_redirect(get_post_link($masterpid)."#pid$masterpid", $lang->redirect_inline_postsmerged); - break; - - // Split posts - Inline moderation - case "multisplitposts": - add_breadcrumb($lang->nav_multi_splitposts); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - - if(count($posts) < 1) - { - error($lang->error_inline_nopostsselected); - } - - if(!is_moderator_by_pids($posts, "canmanagethreads")) - { - error_no_permission(); - } - $posts = array_map('intval', $posts); - $pidin = implode(',', $posts); - - // Make sure that we are not splitting a thread with one post - // Select number of posts in each thread that the splitted post is in - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) - GROUP BY p.tid, p.pid - "); - $threads = $pcheck = array(); - while($tcheck = $db->fetch_array($query)) - { - if((int)$tcheck['count'] <= 1) - { - error($lang->error_cantsplitonepost); - } - $threads[] = $pcheck[] = $tcheck['tid']; // Save tids for below - } - - // Make sure that we are not splitting all posts in the thread - // The query does not return a row when the count is 0, so find if some threads are missing (i.e. 0 posts after removal) - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) AND q.pid NOT IN ($pidin) - GROUP BY p.tid, p.pid - "); - $pcheck2 = array(); - while($tcheck = $db->fetch_array($query)) - { - if($tcheck['count'] > 0) - { - $pcheck2[] = $tcheck['tid']; - } - } - if(count($pcheck2) != count($pcheck)) - { - // One or more threads do not have posts after splitting - error($lang->error_cantsplitall); - } - - $inlineids = implode("|", $posts); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - $forumselect = build_forum_jump("", $fid, 1, '', 0, true, '', "moveto"); - - $return_url = htmlspecialchars_uni($mybb->get_input('url')); - - eval("\$splitposts = \"".$templates->get("moderation_inline_splitposts")."\";"); - output_page($splitposts); - break; - - // Actually split the posts - Inline moderation - case "do_multisplitposts": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plist = array(); - $postlist = explode("|", $mybb->get_input('posts')); - foreach($postlist as $pid) - { - $pid = (int)$pid; - $plist[] = $pid; - } - - if(!is_moderator_by_pids($plist, "canmanagethreads")) - { - error_no_permission(); - } - - // Ensure all posts exist - $posts = array(); - if(!empty($plist)) - { - $query = $db->simple_select('posts', 'pid', 'pid IN ('.implode(',', $plist).')'); - while($pid = $db->fetch_field($query, 'pid')) - { - $posts[] = $pid; - } - } - - if(empty($posts)) - { - error($lang->error_inline_nopostsselected); - } - - $pidin = implode(',', $posts); - - // Make sure that we are not splitting a thread with one post - // Select number of posts in each thread that the splitted post is in - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) - GROUP BY p.tid, p.pid - "); - $pcheck = array(); - while($tcheck = $db->fetch_array($query)) - { - if((int)$tcheck['count'] <= 1) - { - error($lang->error_cantsplitonepost); - } - $pcheck[] = $tcheck['tid']; // Save tids for below - } - - // Make sure that we are not splitting all posts in the thread - // The query does not return a row when the count is 0, so find if some threads are missing (i.e. 0 posts after removal) - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) AND q.pid NOT IN ($pidin) - GROUP BY p.tid, p.pid - "); - $pcheck2 = array(); - while($tcheck = $db->fetch_array($query)) - { - if($tcheck['count'] > 0) - { - $pcheck2[] = $tcheck['tid']; - } - } - if(count($pcheck2) != count($pcheck)) - { - // One or more threads do not have posts after splitting - error($lang->error_cantsplitall); - } - - if(isset($mybb->input['moveto'])) - { - $moveto = $mybb->get_input('moveto', MyBB::INPUT_INT); - } - else - { - $moveto = $fid; - } - - $newforum = get_forum($moveto); - if(!$newforum || $newforum['type'] != "f" || $newforum['type'] == "f" && $newforum['linkto'] != '') - { - error($lang->error_invalidforum); - } - - $newsubject = $mybb->get_input('newsubject'); - $newtid = $moderation->split_posts($posts, $tid, $moveto, $newsubject); - - $pid_list = implode(', ', $posts); - $lang->split_selective_posts = $lang->sprintf($lang->split_selective_posts, $pid_list, $newtid); - log_moderator_action($modlogdata, $lang->split_selective_posts); - - moderation_redirect(get_thread_link($newtid), $lang->redirect_threadsplit); - break; - - // Move posts - Inline moderation - case "multimoveposts": - add_breadcrumb($lang->nav_multi_moveposts); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - - if(count($posts) < 1) - { - error($lang->error_inline_nopostsselected); - } - - if(!is_moderator_by_pids($posts, "canmanagethreads")) - { - error_no_permission(); - } - $posts = array_map('intval', $posts); - $pidin = implode(',', $posts); - - // Make sure that we are not moving posts in a thread with one post - // Select number of posts in each thread that the moved post is in - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) - GROUP BY p.tid, p.pid - "); - $threads = $pcheck = array(); - while($tcheck = $db->fetch_array($query)) - { - if((int)$tcheck['count'] <= 1) - { - error($lang->error_cantsplitonepost); - } - $threads[] = $pcheck[] = $tcheck['tid']; // Save tids for below - } - - // Make sure that we are not moving all posts in the thread - // The query does not return a row when the count is 0, so find if some threads are missing (i.e. 0 posts after removal) - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) AND q.pid NOT IN ($pidin) - GROUP BY p.tid, p.pid - "); - $pcheck2 = array(); - while($tcheck = $db->fetch_array($query)) - { - if($tcheck['count'] > 0) - { - $pcheck2[] = $tcheck['tid']; - } - } - if(count($pcheck2) != count($pcheck)) - { - // One or more threads do not have posts after splitting - error($lang->error_cantmoveall); - } - - $inlineids = implode("|", $posts); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - $forumselect = build_forum_jump("", $fid, 1, '', 0, true, '', "moveto"); - eval("\$moveposts = \"".$templates->get("moderation_inline_moveposts")."\";"); - output_page($moveposts); - break; - - // Actually split the posts - Inline moderation - case "do_multimoveposts": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("moderation_do_multimoveposts"); - - // explode at # sign in a url (indicates a name reference) and reassign to the url - $realurl = explode("#", $mybb->get_input('threadurl')); - $mybb->input['threadurl'] = $realurl[0]; - - // Are we using an SEO URL? - if(substr($mybb->input['threadurl'], -4) == "html") - { - // Get thread to merge's tid the SEO way - preg_match("#thread-([0-9]+)?#i", $mybb->input['threadurl'], $threadmatch); - preg_match("#post-([0-9]+)?#i", $mybb->input['threadurl'], $postmatch); - - if($threadmatch[1]) - { - $parameters['tid'] = $threadmatch[1]; - } - - if($postmatch[1]) - { - $parameters['pid'] = $postmatch[1]; - } - } - else - { - // Get thread to merge's tid the normal way - $splitloc = explode(".php", $mybb->input['threadurl']); - $temp = explode("&", my_substr($splitloc[1], 1)); - - if(!empty($temp)) - { - for($i = 0; $i < count($temp); $i++) - { - $temp2 = explode("=", $temp[$i], 2); - $parameters[$temp2[0]] = $temp2[1]; - } - } - else - { - $temp2 = explode("=", $splitloc[1], 2); - $parameters[$temp2[0]] = $temp2[1]; - } - } - - if(!empty($parameters['pid']) && empty($parameters['tid'])) - { - $query = $db->simple_select("posts", "tid", "pid='".(int)$parameters['pid']."'"); - $post = $db->fetch_array($query); - $newtid = $post['tid']; - } - elseif(!empty($parameters['tid'])) - { - $newtid = $parameters['tid']; - } - else - { - $newtid = 0; - } - $newtid = (int)$newtid; - $newthread = get_thread($newtid); - if(!$newthread) - { - error($lang->error_badmovepostsurl); - } - if($newtid == $tid) - { // sanity check - error($lang->error_movetoself); - } - - $postlist = explode("|", $mybb->get_input('posts')); - $plist = array(); - foreach($postlist as $pid) - { - $pid = (int)$pid; - $plist[] = $pid; - } - - if(!is_moderator_by_pids($plist, "canmanagethreads")) - { - error_no_permission(); - } - - // Ensure all posts exist - $posts = array(); - if(!empty($plist)) - { - $query = $db->simple_select('posts', 'pid', 'pid IN ('.implode(',', $plist).')'); - while($pid = $db->fetch_field($query, 'pid')) - { - $posts[] = $pid; - } - } - - if(empty($posts)) - { - error($lang->error_inline_nopostsselected); - } - - $pidin = implode(',', $posts); - - // Make sure that we are not moving posts in a thread with one post - // Select number of posts in each thread that the moved post is in - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) - GROUP BY p.tid, p.pid - "); - $threads = $pcheck = array(); - while($tcheck = $db->fetch_array($query)) - { - if((int)$tcheck['count'] <= 1) - { - error($lang->error_cantsplitonepost); - } - $threads[] = $pcheck[] = $tcheck['tid']; // Save tids for below - } - - // Make sure that we are not moving all posts in the thread - // The query does not return a row when the count is 0, so find if some threads are missing (i.e. 0 posts after removal) - $query = $db->query(" - SELECT DISTINCT p.tid, COUNT(q.pid) as count - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."posts q ON (p.tid=q.tid) - WHERE p.pid IN ($pidin) AND q.pid NOT IN ($pidin) - GROUP BY p.tid, p.pid - "); - $pcheck2 = array(); - while($tcheck = $db->fetch_array($query)) - { - if($tcheck['count'] > 0) - { - $pcheck2[] = $tcheck['tid']; - } - } - if(count($pcheck2) != count($pcheck)) - { - // One or more threads do not have posts after splitting - error($lang->error_cantmoveall); - } - - $newtid = $moderation->split_posts($posts, $tid, $newthread['fid'], $db->escape_string($newthread['subject']), $newtid); - - $pid_list = implode(', ', $posts); - $lang->move_selective_posts = $lang->sprintf($lang->move_selective_posts, $pid_list, $newtid); - log_moderator_action($modlogdata, $lang->move_selective_posts); - - moderation_redirect(get_thread_link($newtid), $lang->redirect_moveposts); - break; - - // Approve posts - Inline moderation - case "multiapproveposts": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - if(count($posts) < 1) - { - error($lang->error_inline_nopostsselected); - } - - if(!is_moderator_by_pids($posts, "canapproveunapproveposts")) - { - error_no_permission(); - } - - $pids = array(); - foreach($posts as $pid) - { - $pids[] = (int)$pid; - } - - $moderation->approve_posts($pids); - - log_moderator_action($modlogdata, $lang->multi_approve_posts); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_inline_postsapproved); - break; - - // Unapprove posts - Inline moderation - case "multiunapproveposts": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - - if(count($posts) < 1) - { - error($lang->error_inline_nopostsselected); - } - $pids = array(); - - if(!is_moderator_by_pids($posts, "canapproveunapproveposts")) - { - error_no_permission(); - } - foreach($posts as $pid) - { - $pids[] = (int)$pid; - } - - $moderation->unapprove_posts($pids); - - log_moderator_action($modlogdata, $lang->multi_unapprove_posts); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_inline_postsunapproved); - break; - - // Restore posts - Inline moderation - case "multirestoreposts": - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - if(count($posts) < 1) - { - error($lang->error_inline_nopostsselected); - } - - if(!is_moderator_by_pids($posts, "canrestoreposts")) - { - error_no_permission(); - } - - $pids = array(); - foreach($posts as $pid) - { - $pids[] = (int)$pid; - } - - $moderation->restore_posts($pids); - - log_moderator_action($modlogdata, $lang->multi_restore_posts); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_inline_postsrestored); - break; - - // Soft delete posts - Inline moderation - case "multisoftdeleteposts": - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->get_input('inlinetype') == 'search') - { - $posts = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $posts = getids($tid, 'thread'); - } - - if(count($posts) < 1) - { - error($lang->error_inline_nopostsselected); - } - $pids = array(); - - if(!is_moderator_by_pids($posts, "cansoftdeleteposts")) - { - error_no_permission(); - } - foreach($posts as $pid) - { - $pids[] = (int)$pid; - } - - $moderation->soft_delete_posts($pids); - log_moderator_action($modlogdata, $lang->multi_soft_delete_posts); - - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - } - else - { - clearinline($tid, 'thread'); - } - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_inline_postssoftdeleted); - break; - case "do_purgespammer": - case "purgespammer": - require_once MYBB_ROOT."inc/functions_user.php"; - - $groups = explode(",", $mybb->settings['purgespammergroups']); - if(!in_array($mybb->user['usergroup'], $groups)) - { - error_no_permission(); - } - - $uid = $mybb->input['uid']; - $user = get_user($uid); - if(!$user['uid'] || !purgespammer_show($user['postnum'], $user['usergroup'], $user['uid'])) - { - error($lang->purgespammer_invalid_user); - } - - if($mybb->input['action'] == "do_purgespammer") - { - verify_post_check($mybb->get_input('my_post_key')); - - $user_deleted = false; - - // Run the hooks first to avoid any issues when we delete the user - $plugins->run_hooks("moderation_purgespammer_purge"); - - require_once MYBB_ROOT.'inc/datahandlers/user.php'; - $userhandler = new UserDataHandler('delete'); - - if($mybb->settings['purgespammerbandelete'] == "ban") - { - // First delete everything - $userhandler->delete_content($uid); - $userhandler->delete_posts($uid); - - // Next ban him (or update the banned reason, shouldn't happen) - $query = $db->simple_select("banned", "uid", "uid = '{$uid}'"); - if($db->num_rows($query) > 0) - { - $banupdate = array( - "reason" => $db->escape_string($mybb->settings['purgespammerbanreason']) - ); - $db->update_query('banned', $banupdate, "uid = '{$uid}'"); - } - else - { - $insert = array( - "uid" => $uid, - "gid" => (int)$mybb->settings['purgespammerbangroup'], - "oldgroup" => 2, - "oldadditionalgroups" => "", - "olddisplaygroup" => 0, - "admin" => (int)$mybb->user['uid'], - "dateline" => TIME_NOW, - "bantime" => "---", - "lifted" => 0, - "reason" => $db->escape_string($mybb->settings['purgespammerbanreason']) - ); - $db->insert_query('banned', $insert); - } - - // Add the IP's to the banfilters - foreach(array($user['regip'], $user['lastip']) as $ip) - { - $ip = my_inet_ntop($db->unescape_binary($ip)); - $query = $db->simple_select("banfilters", "type", "type = 1 AND filter = '".$db->escape_string($ip)."'"); - if($db->num_rows($query) == 0) - { - $insert = array( - "filter" => $db->escape_string($ip), - "type" => 1, - "dateline" => TIME_NOW - ); - $db->insert_query("banfilters", $insert); - } - } - - // Clear the profile - $userhandler->clear_profile($uid, $mybb->settings['purgespammerbangroup']); - - $cache->update_banned(); - $cache->update_bannedips(); - $cache->update_awaitingactivation(); - - // Update reports cache - $cache->update_reportedcontent(); - } - elseif($mybb->settings['purgespammerbandelete'] == "delete") - { - $user_deleted = $userhandler->delete_user($uid, 1); - } - - // Submit the user to stop forum spam - if(!empty($mybb->settings['purgespammerapikey'])) - { - $sfs = @fetch_remote_file("http://stopforumspam.com/add.php?username=" . urlencode($user['username']) . "&ip_addr=" . urlencode(my_inet_ntop($db->unescape_binary($user['lastip']))) . "&email=" . urlencode($user['email']) . "&api_key=" . urlencode($mybb->settings['purgespammerapikey'])); - } - - log_moderator_action(array('uid' => $uid, 'username' => $user['username']), $lang->purgespammer_modlog); - - if($user_deleted) - { - redirect($mybb->settings['bburl'], $lang->purgespammer_success); - } - else - { - redirect(get_profile_link($uid), $lang->purgespammer_success); - } - } - else if($mybb->input['action'] == "purgespammer") - { - $plugins->run_hooks("moderation_purgespammer_show"); - - add_breadcrumb($lang->purgespammer); - $lang->purgespammer_purge = $lang->sprintf($lang->purgespammer_purge, htmlspecialchars_uni($user['username'])); - if($mybb->settings['purgespammerbandelete'] == "ban") - { - $lang->purgespammer_purge_desc = $lang->sprintf($lang->purgespammer_purge_desc, $lang->purgespammer_ban); - } - else - { - $lang->purgespammer_purge_desc = $lang->sprintf($lang->purgespammer_purge_desc, $lang->purgespammer_delete); - } - eval("\$purgespammer = \"".$templates->get('moderation_purgespammer')."\";"); - output_page($purgespammer); - } - break; - default: - require_once MYBB_ROOT."inc/class_custommoderation.php"; - $custommod = new CustomModeration; - $tool = $custommod->tool_info($mybb->get_input('action', MyBB::INPUT_INT)); - if($tool !== false) - { - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $options = my_unserialize($tool['threadoptions']); - - if(!is_member($tool['groups'])) - { - error_no_permission(); - } - - if(!empty($options['confirmation']) && empty($mybb->input['confirm'])) - { - add_breadcrumb($lang->confirm_execute_tool); - - $lang->confirm_execute_tool_desc = $lang->sprintf($lang->confirm_execute_tool_desc, htmlspecialchars_uni($tool['name'])); - - $modtype = $mybb->get_input('modtype'); - $inlinetype = $mybb->get_input('inlinetype'); - $searchid = $mybb->get_input('searchid'); - $url = htmlspecialchars_uni($mybb->get_input('url')); - $plugins->run_hooks('moderation_confirmation'); - - eval('$page = "'.$templates->get('moderation_confirmation').'";'); - - output_page($page); - exit; - } - - if($tool['type'] == 't' && $mybb->get_input('modtype') == 'inlinethread') - { - if($mybb->get_input('inlinetype') == 'search') - { - $tids = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $tids = getids($fid, "forum"); - } - if(count($tids) < 1) - { - error($lang->error_inline_nopostsselected); - } - if(!is_moderator_by_tids($tids, "canusecustomtools")) - { - error_no_permission(); - } - - $thread_options = my_unserialize($tool['threadoptions']); - if($thread_options['movethread'] && $forum_cache[$thread_options['movethread']]['type'] != "f") - { - error($lang->error_movetocategory); - } - - $custommod->execute($mybb->get_input('action', MyBB::INPUT_INT), $tids); - $lang->custom_tool = $lang->sprintf($lang->custom_tool, $tool['name']); - log_moderator_action($modlogdata, $lang->custom_tool); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - $lang->redirect_customtool_search = $lang->sprintf($lang->redirect_customtool_search, $tool['name']); - $return_url = htmlspecialchars_uni($mybb->get_input('url')); - redirect($return_url, $lang->redirect_customtool_search); - } - else - { - clearinline($fid, "forum"); - $lang->redirect_customtool_forum = $lang->sprintf($lang->redirect_customtool_forum, $tool['name']); - redirect(get_forum_link($fid), $lang->redirect_customtool_forum); - } - break; - } - elseif($tool['type'] == 't' && $mybb->get_input('modtype') == 'thread') - { - if(!is_moderator_by_tids($tid, "canusecustomtools")) - { - error_no_permission(); - } - - $thread_options = my_unserialize($tool['threadoptions']); - if($thread_options['movethread'] && $forum_cache[$thread_options['movethread']]['type'] != "f") - { - error($lang->error_movetocategory); - } - - $ret = $custommod->execute($mybb->get_input('action', MyBB::INPUT_INT), $tid); - $lang->custom_tool = $lang->sprintf($lang->custom_tool, $tool['name']); - log_moderator_action($modlogdata, $lang->custom_tool); - if($ret == 'forum') - { - $lang->redirect_customtool_forum = $lang->sprintf($lang->redirect_customtool_forum, $tool['name']); - moderation_redirect(get_forum_link($fid), $lang->redirect_customtool_forum); - } - else - { - $lang->redirect_customtool_thread = $lang->sprintf($lang->redirect_customtool_thread, $tool['name']); - moderation_redirect(get_thread_link($thread['tid']), $lang->redirect_customtool_thread); - } - break; - } - elseif($tool['type'] == 'p' && $mybb->get_input('modtype') == 'inlinepost') - { - if($mybb->get_input('inlinetype') == 'search') - { - $pids = getids($mybb->get_input('searchid'), 'search'); - } - else - { - $pids = getids($tid, 'thread'); - } - - if(count($pids) < 1) - { - error($lang->error_inline_nopostsselected); - } - if(!is_moderator_by_pids($pids, "canusecustomtools")) - { - error_no_permission(); - } - - // Get threads which are associated with the posts - $tids = array(); - $options = array( - 'order_by' => 'dateline', - 'order_dir' => 'asc' - ); - $query = $db->simple_select("posts", "DISTINCT tid, dateline", "pid IN (".implode(',',$pids).")", $options); - while($row = $db->fetch_array($query)) - { - $tids[] = $row['tid']; - } - - $ret = $custommod->execute($mybb->get_input('action', MyBB::INPUT_INT), $tids, $pids); - $lang->custom_tool = $lang->sprintf($lang->custom_tool, $tool['name']); - log_moderator_action($modlogdata, $lang->custom_tool); - if($mybb->get_input('inlinetype') == 'search') - { - clearinline($mybb->get_input('searchid', MyBB::INPUT_INT), 'search'); - $lang->redirect_customtool_search = $lang->sprintf($lang->redirect_customtool_search, $tool['name']); - $return_url = htmlspecialchars_uni($mybb->get_input('url')); - redirect($return_url, $lang->redirect_customtool_search); - } - else - { - clearinline($tid, 'thread'); - if($ret == 'forum') - { - $lang->redirect_customtool_forum = $lang->sprintf($lang->redirect_customtool_forum, $tool['name']); - moderation_redirect(get_forum_link($fid), $lang->redirect_customtool_forum); - } - else - { - $lang->redirect_customtool_thread = $lang->sprintf($lang->redirect_customtool_thread, $tool['name']); - moderation_redirect(get_thread_link($tid), $lang->redirect_customtool_thread); - } - } - - break; - } - } - error_no_permission(); - break; -} - -/** - * Some little handy functions for our inline moderation - * - * @param int $id - * @param string $type - * - * @return array - */ -function getids($id, $type) -{ - global $mybb; - - $newids = array(); - $cookie = "inlinemod_".$type.$id; - if(isset($mybb->cookies[$cookie])) - { - $cookie_ids = explode("|", $mybb->cookies[$cookie]); - - foreach($cookie_ids as $cookie_id) - { - if(empty($cookie_id)) - { - continue; - } - - if($cookie_id == 'ALL') - { - $newids += getallids($id, $type); - } - else - { - $newids[] = (int)$cookie_id; - } - } - } - - return $newids; -} - -/** - * @param int $id - * @param string $type - * - * @return array - */ -function getallids($id, $type) -{ - global $db, $mybb; - - $ids = array(); - - // Get any removed threads (after our user hit 'all') - $removed_ids = array(); - $cookie = "inlinemod_".$type.$id."_removed"; - if(isset($mybb->cookies[$cookie])) - { - $removed_ids = explode("|", $mybb->cookies[$cookie]); - - if(!is_array($removed_ids)) - { - $removed_ids = array(); - } - } - - // "Select all Threads in this forum" only supported by forumdisplay and search - if($type == 'forum') - { - $query = $db->simple_select("threads", "tid", "fid='".(int)$id."'"); - while($tid = $db->fetch_field($query, "tid")) - { - if(in_array($tid, $removed_ids)) - { - continue; - } - - $ids[] = $tid; - } - } - else if($type == 'search') - { - $query = $db->simple_select("searchlog", "resulttype, posts, threads", "sid='".$db->escape_string($id)."' AND uid='{$mybb->user['uid']}'", 1); - $searchlog = $db->fetch_array($query); - if($searchlog['resulttype'] == 'posts') - { - $ids = explode(',', $searchlog['posts']); - } - else - { - $ids = explode(',', $searchlog['threads']); - } - - if(is_array($ids)) - { - foreach($ids as $key => $tid) - { - if(in_array($tid, $removed_ids)) - { - unset($ids[$key]); - } - } - } - } - - return $ids; -} - -/** - * @param int $id - * @param string $type - */ -function clearinline($id, $type) -{ - my_unsetcookie("inlinemod_".$type.$id); - my_unsetcookie("inlinemod_{$type}{$id}_removed"); -} - -/** - * @param int $id - * @param string $type - */ -function extendinline($id, $type) -{ - my_setcookie("inlinemod_{$type}{$id}", '', TIME_NOW+3600); - my_setcookie("inlinemod_{$type}{$id}_removed", '', TIME_NOW+3600); -} - -/** - * Checks if the current user is a moderator of all the posts specified - * - * Note: If no posts are specified, this function will return true. It is the - * responsibility of the calling script to error-check this case if necessary. - * - * @param array $posts Array of post IDs - * @param string $permission Permission to check - * @return bool True if moderator of all; false otherwise - */ -function is_moderator_by_pids($posts, $permission='') -{ - global $db, $mybb; - - // Speedy determination for supermods/admins and guests - if($mybb->usergroup['issupermod']) - { - return true; - } - elseif(!$mybb->user['uid']) - { - return false; - } - // Make an array of threads if not an array - if(!is_array($posts)) - { - $posts = array($posts); - } - // Validate input - $posts = array_map('intval', $posts); - $posts[] = 0; - // Get forums - $posts_string = implode(',', $posts); - $query = $db->simple_select("posts", "DISTINCT fid", "pid IN ($posts_string)"); - while($forum = $db->fetch_array($query)) - { - if(!is_moderator($forum['fid'], $permission)) - { - return false; - } - } - return true; -} - -/** - * Checks if the current user is a moderator of all the threads specified - * - * Note: If no threads are specified, this function will return true. It is the - * responsibility of the calling script to error-check this case if necessary. - * - * @param array $threads Array of thread IDs - * @param string $permission Permission to check - * @return bool True if moderator of all; false otherwise - */ -function is_moderator_by_tids($threads, $permission='') -{ - global $db, $mybb; - - // Speedy determination for supermods/admins and guests - if($mybb->usergroup['issupermod']) - { - return true; - } - elseif(!$mybb->user['uid']) - { - return false; - } - // Make an array of threads if not an array - if(!is_array($threads)) - { - $threads = array($threads); - } - // Validate input - $threads = array_map('intval', $threads); - $threads[] = 0; - // Get forums - $threads_string = implode(',', $threads); - $query = $db->simple_select("threads", "DISTINCT fid", "tid IN ($threads_string)"); - while($forum = $db->fetch_array($query)) - { - if(!is_moderator($forum['fid'], $permission)) - { - return false; - } - } - return true; -} - -/** - * Special redirect that takes a return URL into account - * @param string $url URL - * @param string $message Message - * @param string $title Title - */ -function moderation_redirect($url, $message="", $title="") -{ - global $mybb; - if(!empty($mybb->input['url'])) - { - redirect(htmlentities($mybb->input['url']), $message, $title); - } - redirect($url, $message, $title); -} diff --git a/html/forums/newreply.php b/html/forums/newreply.php deleted file mode 100644 index 0e2f736..0000000 --- a/html/forums/newreply.php +++ /dev/null @@ -1,1548 +0,0 @@ -load("newreply"); - -// Get the pid and tid and replyto from the input. -$tid = $mybb->get_input('tid', MyBB::INPUT_INT); -$replyto = $mybb->get_input('replyto', MyBB::INPUT_INT); - -// AJAX quick reply? -if(!empty($mybb->input['ajax'])) -{ - unset($mybb->input['previewpost']); -} - -// Edit a draft post. -$pid = 0; -$editdraftpid = ''; -$mybb->input['action'] = $mybb->get_input('action'); -if(($mybb->input['action'] == "editdraft" || $mybb->input['action'] == "do_newreply") && $mybb->get_input('pid', MyBB::INPUT_INT)) -{ - $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - $post = get_post($pid); - if(!$post) - { - error($lang->error_invalidpost); - } - else if($mybb->user['uid'] != $post['uid']) - { - error($lang->error_post_noperms); - } - $pid = $post['pid']; - $tid = $post['tid']; - eval("\$editdraftpid = \"".$templates->get("newreply_draftinput")."\";"); -} - -// Set up $thread and $forum for later use. -$thread = get_thread($tid); -if(!$thread) -{ - error($lang->error_invalidthread); -} -$fid = $thread['fid']; - -// Get forum info -$forum = get_forum($fid); -if(!$forum) -{ - error($lang->error_invalidforum); -} - -// Make navigation -build_forum_breadcrumb($fid); -$thread_subject = $thread['subject']; -$thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); -add_breadcrumb($thread['subject'], get_thread_link($thread['tid'])); -add_breadcrumb($lang->nav_newreply); - -$forumpermissions = forum_permissions($fid); - -// See if everything is valid up to here. -if(isset($post) && (($post['visible'] == 0 && !is_moderator($fid, "canviewunapprove")) || ($post['visible'] < 0 && $post['uid'] != $mybb->user['uid']))) -{ - error($lang->error_invalidpost); -} -if(($thread['visible'] == 0 && !is_moderator($fid, "canviewunapprove")) || $thread['visible'] < 0) -{ - error($lang->error_invalidthread); -} -if($forum['open'] == 0 || $forum['type'] != "f") -{ - error($lang->error_closedinvalidforum); -} -if($forumpermissions['canview'] == 0 || $forumpermissions['canpostreplys'] == 0) -{ - error_no_permission(); -} - -if($mybb->user['suspendposting'] == 1) -{ - $suspendedpostingtype = $lang->error_suspendedposting_permanent; - if($mybb->user['suspensiontime']) - { - $suspendedpostingtype = $lang->sprintf($lang->error_suspendedposting_temporal, my_date($mybb->settings['dateformat'], $mybb->user['suspensiontime'])); - } - - $lang->error_suspendedposting = $lang->sprintf($lang->error_suspendedposting, $suspendedpostingtype, my_date($mybb->settings['timeformat'], $mybb->user['suspensiontime'])); - - error($lang->error_suspendedposting); -} - -if(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] == 1 && $thread['uid'] != $mybb->user['uid']) -{ - error_no_permission(); -} - -if(isset($forumpermissions['canonlyreplyownthreads']) && $forumpermissions['canonlyreplyownthreads'] == 1 && $thread['uid'] != $mybb->user['uid']) -{ - error_no_permission(); -} - -// Coming from quick reply? Set some defaults -if($mybb->get_input('method') == "quickreply") -{ - if($mybb->user['subscriptionmethod'] == 1) - { - $mybb->input['postoptions']['subscriptionmethod'] = "none"; - } - else if($mybb->user['subscriptionmethod'] == 2) - { - $mybb->input['postoptions']['subscriptionmethod'] = "email"; - } - else if($mybb->user['subscriptionmethod'] == 3) - { - $mybb->input['postoptions']['subscriptionmethod'] = "pm"; - } -} - -// Check if this forum is password protected and we have a valid password -check_forum_password($forum['fid']); - -if($mybb->settings['bbcodeinserter'] != 0 && $forum['allowmycode'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0)) -{ - $codebuttons = build_mycode_inserter("message", $forum['allowsmilies']); - if($forum['allowsmilies'] != 0) - { - $smilieinserter = build_clickable_smilies(); - } -} - -// Display a login box or change user box? -if($mybb->user['uid'] != 0) -{ - $mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); - eval("\$loginbox = \"".$templates->get("changeuserbox")."\";"); -} -else -{ - if(empty($mybb->input['previewpost']) && $mybb->input['action'] != "do_newreply") - { - $username = ''; - } - else - { - $username = htmlspecialchars_uni($mybb->get_input('username')); - } - eval("\$loginbox = \"".$templates->get("loginbox")."\";"); -} - -// Check to see if the thread is closed, and if the user is a mod. -if(!is_moderator($fid, "canpostclosedthreads")) -{ - if($thread['closed'] == 1) - { - error($lang->redirect_threadclosed); - } -} - -// No weird actions allowed, show new reply form if no regular action. -if($mybb->input['action'] != "do_newreply" && $mybb->input['action'] != "editdraft") -{ - $mybb->input['action'] = "newreply"; -} - -// Even if we are previewing, still show the new reply form. -if(!empty($mybb->input['previewpost'])) -{ - $mybb->input['action'] = "newreply"; -} - -// Setup a unique posthash for attachment management -if(!$mybb->get_input('posthash') && !$pid) -{ - $mybb->input['posthash'] = md5($thread['tid'].$mybb->user['uid'].random_str()); -} - -if((empty($_POST) && empty($_FILES)) && $mybb->get_input('processed', MyBB::INPUT_INT) == 1) -{ - error($lang->error_cannot_upload_php_post); -} - -$errors = array(); -$maximageserror = $attacherror = ''; -if($mybb->settings['enableattachments'] == 1 && !$mybb->get_input('attachmentaid', MyBB::INPUT_INT) && ($mybb->get_input('newattachment') || $mybb->get_input('updateattachment') || ($mybb->input['action'] == "do_newreply" && $mybb->get_input('submit') && $_FILES['attachment']))) -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($pid) - { - $attachwhere = "pid='{$pid}'"; - } - else - { - $attachwhere = "posthash='".$db->escape_string($mybb->get_input('posthash'))."'"; - } - - // If there's an attachment, check it and upload it - if($forumpermissions['canpostattachments'] != 0) - { - // If attachment exists.. - if(!empty($_FILES['attachment']['name']) && !empty($_FILES['attachment']['type'])) - { - if($_FILES['attachment']['size'] > 0) - { - $query = $db->simple_select("attachments", "aid", "filename='".$db->escape_string($_FILES['attachment']['name'])."' AND {$attachwhere}"); - $updateattach = $db->fetch_field($query, "aid"); - - require_once MYBB_ROOT."inc/functions_upload.php"; - - $update_attachment = false; - if($updateattach > 0 && $mybb->get_input('updateattachment')) - { - $update_attachment = true; - } - $attachedfile = upload_attachment($_FILES['attachment'], $update_attachment); - } - else - { - $errors[] = $lang->error_uploadempty; - $mybb->input['action'] = "newreply"; - } - } - } - - if(!empty($attachedfile['error'])) - { - $errors[] = $attachedfile['error']; - $mybb->input['action'] = "newreply"; - } - - if(!$mybb->get_input('submit')) - { - eval("\$editdraftpid = \"".$templates->get("newreply_draftinput")."\";"); - $mybb->input['action'] = "newreply"; - } -} - -// Remove an attachment. -if($mybb->settings['enableattachments'] == 1 && $mybb->get_input('attachmentaid', MyBB::INPUT_INT) && $mybb->get_input('attachmentact') == "remove") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - require_once MYBB_ROOT."inc/functions_upload.php"; - remove_attachment($pid, $mybb->get_input('posthash'), $mybb->get_input('attachmentaid', MyBB::INPUT_INT)); - if(!$mybb->get_input('submit')) - { - eval("\$editdraftpid = \"".$templates->get("newreply_draftinput")."\";"); - $mybb->input['action'] = "newreply"; - } -} - -$reply_errors = ''; -$quoted_ids = array(); -$hide_captcha = false; - -// Check the maximum posts per day for this user -if($mybb->usergroup['maxposts'] > 0 && $mybb->usergroup['cancp'] != 1) -{ - $daycut = TIME_NOW-60*60*24; - $query = $db->simple_select("posts", "COUNT(*) AS posts_today", "uid='{$mybb->user['uid']}' AND visible='1' AND dateline>{$daycut}"); - $post_count = $db->fetch_field($query, "posts_today"); - if($post_count >= $mybb->usergroup['maxposts']) - { - $lang->error_maxposts = $lang->sprintf($lang->error_maxposts, $mybb->usergroup['maxposts']); - error($lang->error_maxposts); - } -} - -if($mybb->input['action'] == "do_newreply" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("newreply_do_newreply_start"); - - // If this isn't a logged in user, then we need to do some special validation. - if($mybb->user['uid'] == 0) - { - // If they didn't specify a username then give them "Guest" - if(!$mybb->get_input('username')) - { - $username = $lang->guest; - } - // Otherwise use the name they specified. - else - { - $username = $mybb->get_input('username'); - } - $uid = 0; - - - if($mybb->settings['stopforumspam_on_newreply']) - { - require_once MYBB_ROOT . '/inc/class_stopforumspamchecker.php'; - - $stop_forum_spam_checker = new StopForumSpamChecker( - $plugins, - $mybb->settings['stopforumspam_min_weighting_before_spam'], - $mybb->settings['stopforumspam_check_usernames'], - $mybb->settings['stopforumspam_check_emails'], - $mybb->settings['stopforumspam_check_ips'], - $mybb->settings['stopforumspam_log_blocks'] - ); - - try { - if($stop_forum_spam_checker->is_user_a_spammer($mybb->get_input('username'), '', get_ip())) - { - error($lang->sprintf($lang->error_stop_forum_spam_spammer, - $stop_forum_spam_checker->getErrorText(array( - 'stopforumspam_check_usernames', - 'stopforumspam_check_ips' - )))); - } - } - catch (Exception $e) - { - if($mybb->settings['stopforumspam_block_on_error']) - { - error($lang->error_stop_forum_spam_fetching); - } - } - } - } - // This user is logged in. - else - { - $username = $mybb->user['username']; - $uid = $mybb->user['uid']; - } - - // Attempt to see if this post is a duplicate or not - if($uid > 0) - { - $user_check = "p.uid='{$uid}'"; - } - else - { - $user_check = "p.ipaddress=".$db->escape_binary($session->packedip); - } - if(!$mybb->get_input('savedraft')) - { - $query = $db->simple_select("posts p", "p.pid, p.visible", "{$user_check} AND p.tid='{$thread['tid']}' AND p.subject='".$db->escape_string($mybb->get_input('subject'))."' AND p.message='".$db->escape_string($mybb->get_input('message'))."' AND p.visible != '-2' AND p.dateline>".(TIME_NOW-600)); - $duplicate_check = $db->fetch_field($query, "pid"); - if($duplicate_check) - { - error($lang->error_post_already_submitted); - } - } - - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("insert"); - - // Set the post data that came from the input to the $post array. - $post = array( - "tid" => $mybb->get_input('tid', MyBB::INPUT_INT), - "replyto" => $mybb->get_input('replyto', MyBB::INPUT_INT), - "fid" => $thread['fid'], - "subject" => $mybb->get_input('subject'), - "icon" => $mybb->get_input('icon', MyBB::INPUT_INT), - "uid" => $uid, - "username" => $username, - "message" => $mybb->get_input('message'), - "ipaddress" => $session->packedip, - "posthash" => $mybb->get_input('posthash') - ); - - if(isset($mybb->input['pid'])) - { - $post['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - } - - // Are we saving a draft post? - if($mybb->get_input('savedraft') && $mybb->user['uid']) - { - $post['savedraft'] = 1; - } - else - { - $post['savedraft'] = 0; - } - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(!isset($postoptions['signature'])) - { - $postoptions['signature'] = 0; - } - if(!isset($postoptions['subscriptionmethod'])) - { - $postoptions['subscriptionmethod'] = 0; - } - if(!isset($postoptions['disablesmilies'])) - { - $postoptions['disablesmilies'] = 0; - } - - // Set up the post options from the input. - $post['options'] = array( - "signature" => $postoptions['signature'], - "subscriptionmethod" => $postoptions['subscriptionmethod'], - "disablesmilies" => $postoptions['disablesmilies'] - ); - - // Apply moderation options if we have them - $post['modoptions'] = $mybb->get_input('modoptions', MyBB::INPUT_ARRAY); - - $posthandler->set_data($post); - - // Now let the post handler do all the hard work. - $valid_post = $posthandler->validate_post(); - - $post_errors = array(); - // Fetch friendly error messages if this is an invalid post - if(!$valid_post) - { - $post_errors = $posthandler->get_friendly_errors(); - } - - // Mark thread as read - require_once MYBB_ROOT."inc/functions_indicators.php"; - mark_thread_read($tid, $fid); - - // Check captcha image - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $post_captcha = new captcha(false, "post_captcha"); - - if($post_captcha->validate_captcha() == false) - { - // CAPTCHA validation failed - foreach($post_captcha->get_errors() as $error) - { - $post_errors[] = $error; - } - } - else - { - $hide_captcha = true; - } - - if($mybb->get_input('ajax', MyBB::INPUT_INT)) - { - if($post_captcha->type == 1) - { - $randomstr = random_str(5); - $imagehash = md5(random_str(12)); - - $imagearray = array( - "imagehash" => $imagehash, - "imagestring" => $randomstr, - "dateline" => TIME_NOW - ); - - $db->insert_query("captcha", $imagearray); - - //header("Content-type: text/html; charset={$lang->settings['charset']}"); - $data = ''; - $data .= "$imagehash"; - - if($hide_captcha) - { - $data .= "|$randomstr"; - } - - $data .= ""; - - //header("Content-type: application/json; charset={$lang->settings['charset']}"); - $json_data = array("data" => $data); - } - else if($post_captcha->type == 2) - { - //header("Content-type: text/html; charset={$lang->settings['charset']}"); - $data = "reload"; - - //header("Content-type: application/json; charset={$lang->settings['charset']}"); - $json_data = array("data" => $data); - } - } - } - - // One or more errors returned, fetch error list and throw to newreply page - if(count($post_errors) > 0) - { - $reply_errors = inline_error($post_errors, '', $json_data); - $mybb->input['action'] = "newreply"; - } - else - { - $postinfo = $posthandler->insert_post(); - $pid = $postinfo['pid']; - $visible = $postinfo['visible']; - $closed = $postinfo['closed']; - - // Invalidate solved captcha - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - $post_captcha->invalidate_captcha(); - } - - $force_redirect = false; - - // Deciding the fate - if($visible == -2) - { - // Draft post - $lang->redirect_newreply = $lang->draft_saved; - $url = "usercp.php?action=drafts"; - } - elseif($visible == 1) - { - // Visible post - $lang->redirect_newreply .= $lang->redirect_newreply_post; - $url = get_post_link($pid, $tid)."#pid{$pid}"; - } - else - { - // Moderated post - $lang->redirect_newreply .= '
    '.$lang->redirect_newreply_moderation; - $url = get_thread_link($tid); - - // User must see moderation notice, regardless of redirect settings - $force_redirect = true; - } - - // Mark any quoted posts so they're no longer selected - attempts to maintain those which weren't selected - if(isset($mybb->input['quoted_ids']) && isset($mybb->cookies['multiquote']) && $mybb->settings['multiquote'] != 0) - { - // We quoted all posts - remove the entire cookie - if($mybb->get_input('quoted_ids') == "all") - { - my_unsetcookie("multiquote"); - } - // Only quoted a few - attempt to remove them from the cookie - else - { - $quoted_ids = explode("|", $mybb->get_input('quoted_ids')); - $multiquote = explode("|", $mybb->cookies['multiquote']); - if(is_array($multiquote) && is_array($quoted_ids)) - { - foreach($multiquote as $key => $quoteid) - { - // If this ID was quoted, remove it from the multiquote list - if(in_array($quoteid, $quoted_ids)) - { - unset($multiquote[$key]); - } - } - // Still have an array - set the new cookie - if(is_array($multiquote)) - { - $new_multiquote = implode(",", $multiquote); - my_setcookie("multiquote", $new_multiquote); - } - // Otherwise, unset it - else - { - my_unsetcookie("multiquote"); - } - } - } - } - - $plugins->run_hooks("newreply_do_newreply_end"); - - // This was a post made via the ajax quick reply - we need to do some special things here - if($mybb->get_input('ajax', MyBB::INPUT_INT)) - { - // Visible post - if($visible == 1) - { - // Set post counter - $postcounter = $thread['replies'] + 1; - - if(is_moderator($fid, "canviewunapprove")) - { - $postcounter += $thread['unapprovedposts']; - } - if(is_moderator($fid, "canviewdeleted")) - { - $postcounter += $thread['deletedposts']; - } - - // Was there a new post since we hit the quick reply button? - if($mybb->get_input('lastpid', MyBB::INPUT_INT)) - { - $query = $db->simple_select("posts", "pid", "tid = '{$tid}' AND pid != '{$pid}'", array("order_by" => "pid", "order_dir" => "desc")); - $new_post = $db->fetch_array($query); - if($new_post['pid'] != $mybb->get_input('lastpid', MyBB::INPUT_INT)) - { - redirect(get_thread_link($tid, 0, "lastpost")); - } - } - - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - // Lets see if this post is on the same page as the one we're viewing or not - // if it isn't, redirect us - if($perpage > 0 && (($postcounter) % $perpage) == 0) - { - $post_page = ($postcounter) / $mybb->settings['postsperpage']; - } - else - { - $post_page = (int)($postcounter / $mybb->settings['postsperpage']) + 1; - } - - if($post_page > $mybb->get_input('from_page', MyBB::INPUT_INT)) - { - redirect(get_thread_link($tid, 0, "lastpost")); - exit; - } - - // Return the post HTML and display it inline - $query = $db->query(" - SELECT u.*, u.username AS userusername, p.*, f.*, eu.username AS editusername - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - LEFT JOIN ".TABLE_PREFIX."users eu ON (eu.uid=p.edituid) - WHERE p.pid='{$pid}' - "); - $post = $db->fetch_array($query); - - // Now lets fetch all of the attachments for this post - $query = $db->simple_select("attachments", "*", "pid='{$pid}'"); - while($attachment = $db->fetch_array($query)) - { - $attachcache[$attachment['pid']][$attachment['aid']] = $attachment; - } - - // Establish altbg - may seem like this is backwards, but build_postbit reverses it - if(($postcounter - $mybb->settings['postsperpage']) % 2 != 0) - { - $altbg = "trow1"; - } - else - { - $altbg = "trow2"; - } - - $charset = "UTF-8"; - if($lang->settings['charset']) - { - $charset = $lang->settings['charset']; - } - - require_once MYBB_ROOT."inc/functions_post.php"; - $pid = $post['pid']; - $post = build_postbit($post); - - $data = ''; - $data .= $post; - - // Build a new posthash incase the user wishes to quick reply again - $new_posthash = md5($mybb->user['uid'].random_str()); - $data .= "\n"; - - header("Content-type: application/json; charset={$lang->settings['charset']}"); - echo json_encode(array("data" => $data)); - - exit; - } - // Post is in the moderation queue - else - { - redirect(get_thread_link($tid, 0, "lastpost"), $lang->redirect_newreply_moderation, "", true); - exit; - } - } - else - { - $lang->redirect_newreply .= $lang->sprintf($lang->redirect_return_forum, get_forum_link($fid)); - redirect($url, $lang->redirect_newreply, "", $force_redirect); - exit; - } - } -} - -// Show the newreply form. -if($mybb->input['action'] == "newreply" || $mybb->input['action'] == "editdraft") -{ - $plugins->run_hooks("newreply_start"); - - $quote_ids = $multiquote_external = ''; - // If this isn't a preview and we're not editing a draft, then handle quoted posts - if(empty($mybb->input['previewpost']) && !$reply_errors && $mybb->input['action'] != "editdraft" && !$mybb->get_input('attachmentaid', MyBB::INPUT_INT) && !$mybb->get_input('newattachment') && !$mybb->get_input('updateattachment') && !$mybb->get_input('rem')) - { - $message = ''; - $quoted_posts = array(); - // Handle multiquote - if(isset($mybb->cookies['multiquote']) && $mybb->settings['multiquote'] != 0) - { - $multiquoted = explode("|", $mybb->cookies['multiquote']); - foreach($multiquoted as $post) - { - $quoted_posts[$post] = (int)$post; - } - } - // Handle incoming 'quote' button - if($replyto) - { - $quoted_posts[$replyto] = $replyto; - } - - // Quoting more than one post - fetch them - if(count($quoted_posts) > 0) - { - $external_quotes = 0; - $quoted_posts = implode(",", $quoted_posts); - $unviewable_forums = get_unviewable_forums(); - $inactiveforums = get_inactive_forums(); - if($unviewable_forums) - { - $unviewable_forums = "AND t.fid NOT IN ({$unviewable_forums})"; - } - if($inactiveforums) - { - $inactiveforums = "AND t.fid NOT IN ({$inactiveforums})"; - } - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - $onlyusfids = array(); - $onlyusforums = ''; - foreach($group_permissions as $gpfid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $gpfid; - } - } - if(!empty($onlyusfids)) - { - $onlyusforums = "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - if(is_moderator($fid, 'canviewunapprove') && is_moderator($fid, 'canviewdeleted')) - { - $visible_where = "AND p.visible IN (-1,0,1)"; - } - elseif(is_moderator($fid, 'canviewunapprove') && !is_moderator($fid, 'canviewdeleted')) - { - $visible_where = "AND p.visible IN (0,1)"; - } - elseif(!is_moderator($fid, 'canviewunapprove') && is_moderator($fid, 'canviewdeleted')) - { - $visible_where = "AND p.visible IN (-1,1)"; - } - else - { - $visible_where = "AND p.visible=1"; - } - - require_once MYBB_ROOT."inc/functions_posting.php"; - $query = $db->query(" - SELECT p.subject, p.message, p.pid, p.tid, p.username, p.dateline, u.username AS userusername - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.pid IN ({$quoted_posts}) {$unviewable_forums} {$inactiveforums} {$onlyusforums} {$visible_where} - "); - $load_all = $mybb->get_input('load_all_quotes', MyBB::INPUT_INT); - while($quoted_post = $db->fetch_array($query)) - { - // Only show messages for the current thread - if($quoted_post['tid'] == $tid || $load_all == 1) - { - // If this post was the post for which a quote button was clicked, set the subject - if($replyto == $quoted_post['pid']) - { - $subject = preg_replace('#^RE:\s?#i', '', $quoted_post['subject']); - // Subject too long? Shorten it to avoid error message - if(my_strlen($subject) > 85) - { - $subject = my_substr($subject, 0, 82).'...'; - } - $subject = "RE: ".$subject; - } - $message .= parse_quoted_message($quoted_post); - $quoted_ids[] = $quoted_post['pid']; - } - // Count the rest - else - { - ++$external_quotes; - } - } - if($mybb->settings['maxquotedepth'] != '0') - { - $message = remove_message_quotes($message); - } - if($external_quotes > 0) - { - if($external_quotes == 1) - { - $multiquote_text = $lang->multiquote_external_one; - $multiquote_deselect = $lang->multiquote_external_one_deselect; - $multiquote_quote = $lang->multiquote_external_one_quote; - } - else - { - $multiquote_text = $lang->sprintf($lang->multiquote_external, $external_quotes); - $multiquote_deselect = $lang->multiquote_external_deselect; - $multiquote_quote = $lang->multiquote_external_quote; - } - eval("\$multiquote_external = \"".$templates->get("newreply_multiquote_external")."\";"); - } - if(is_array($quoted_ids) && count($quoted_ids) > 0) - { - $quoted_ids = implode("|", $quoted_ids); - } - } - } - - if(isset($mybb->input['quoted_ids'])) - { - $quoted_ids = htmlspecialchars_uni($mybb->get_input('quoted_ids', MyBB::INPUT_INT)); - } - - if(isset($mybb->input['previewpost'])) - { - $previewmessage = $mybb->get_input('message'); - } - if(empty($message)) - { - $message = $mybb->get_input('message'); - } - $message = htmlspecialchars_uni($message); - - $postoptionschecked = array('signature' => '', 'disablesmilies' => ''); - $postoptions_subscriptionmethod_dont = $postoptions_subscriptionmethod_none = $postoptions_subscriptionmethod_email = $postoptions_subscriptionmethod_pm = ''; - - // Set up the post options. - if(!empty($mybb->input['previewpost']) || $reply_errors != '') - { - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - - if(isset($postoptions['signature']) && $postoptions['signature'] == 1) - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "none") - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "email") - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "pm") - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - if(isset($postoptions['disablesmilies']) && $postoptions['disablesmilies'] == 1) - { - $postoptionschecked['disablesmilies'] = " checked=\"checked\""; - } - $subject = $mybb->input['subject']; - } - elseif($mybb->input['action'] == "editdraft" && $mybb->user['uid']) - { - $message = htmlspecialchars_uni($post['message']); - $subject = $post['subject']; - if($post['includesig'] != 0) - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - if($post['smilieoff'] == 1) - { - $postoptionschecked['disablesmilies'] = " checked=\"checked\""; - } - if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "none") - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "email") - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "pm") - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - $mybb->input['icon'] = $post['icon']; - } - else - { - if($mybb->user['signature'] != '') - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - if($mybb->user['subscriptionmethod'] == 1) - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if($mybb->user['subscriptionmethod'] == 2) - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if($mybb->user['subscriptionmethod'] == 3) - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - } - - if($forum['allowpicons'] != 0) - { - $posticons = get_post_icons(); - } - - // No subject? - if(!isset($subject)) - { - if(!empty($mybb->input['subject'])) - { - $subject = $mybb->get_input('subject'); - } - else - { - $subject = $thread_subject; - // Subject too long? Shorten it to avoid error message - if(my_strlen($subject) > 85) - { - $subject = my_substr($subject, 0, 82).'...'; - } - $subject = "RE: ".$subject; - } - } - - // Preview a post that was written. - $preview = ''; - if(!empty($mybb->input['previewpost'])) - { - // If this isn't a logged in user, then we need to do some special validation. - if($mybb->user['uid'] == 0) - { - // If they didn't specify a username then give them "Guest" - if(!$mybb->get_input('username')) - { - $username = $lang->guest; - } - // Otherwise use the name they specified. - else - { - $username = $mybb->get_input('username'); - } - $uid = 0; - } - // This user is logged in. - else - { - $username = $mybb->user['username']; - $uid = $mybb->user['uid']; - } - - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("insert"); - $posthandler->action = "post"; - - // Set the post data that came from the input to the $post array. - $post = array( - "tid" => $mybb->get_input('tid', MyBB::INPUT_INT), - "replyto" => $mybb->get_input('replyto', MyBB::INPUT_INT), - "fid" => $thread['fid'], - "subject" => $mybb->get_input('subject'), - "icon" => $mybb->get_input('icon', MyBB::INPUT_INT), - "uid" => $uid, - "username" => $username, - "message" => $mybb->get_input('message'), - "ipaddress" => $session->packedip, - "posthash" => $mybb->get_input('posthash') - ); - - if(isset($mybb->input['pid'])) - { - $post['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - } - - $posthandler->set_data($post); - - // Now let the post handler do all the hard work. - $valid_post = $posthandler->verify_message(); - $valid_subject = $posthandler->verify_subject(); - - // guest post --> verify author - if($post['uid'] == 0) - { - $valid_username = $posthandler->verify_author(); - } - else - { - $valid_username = true; - } - - $post_errors = array(); - // Fetch friendly error messages if this is an invalid post - if(!$valid_post || !$valid_subject || !$valid_username) - { - $post_errors = $posthandler->get_friendly_errors(); - } - - // One or more errors returned, fetch error list and throw to newreply page - if(count($post_errors) > 0) - { - $reply_errors = inline_error($post_errors); - } - else - { - $quote_ids = htmlspecialchars_uni($mybb->get_input('quote_ids')); - if(!isset($mybb->input['username'])) - { - $mybb->input['username'] = $lang->guest; - } - $mybb->input['icon'] = $mybb->get_input('icon', MyBB::INPUT_INT); - $query = $db->query(" - SELECT u.*, f.* - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - WHERE u.uid='".$mybb->user['uid']."' - "); - $post = $db->fetch_array($query); - if(!$mybb->user['uid'] || !$post['username']) - { - $post['username'] = $mybb->get_input('username'); - } - else - { - $post['userusername'] = $mybb->user['username']; - $post['username'] = $mybb->user['username']; - } - $post['message'] = $previewmessage; - $post['subject'] = $subject; - $post['icon'] = $mybb->get_input('icon', MyBB::INPUT_INT); - $mybb->input['postoptions'] = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(isset($mybb->input['postoptions']['disablesmilies'])) - { - $post['smilieoff'] = $mybb->input['postoptions']['disablesmilies']; - } - $post['dateline'] = TIME_NOW; - if(isset($mybb->input['postoptions']['signature'])) - { - $post['includesig'] = $mybb->input['postoptions']['signature']; - } - if(!isset($post['includesig']) || $post['includesig'] != 1) - { - $post['includesig'] = 0; - } - - // Fetch attachments assigned to this post. - if($mybb->get_input('pid', MyBB::INPUT_INT)) - { - $attachwhere = "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"; - } - else - { - $attachwhere = "posthash='".$db->escape_string($mybb->get_input('posthash'))."'"; - } - - $query = $db->simple_select("attachments", "*", $attachwhere); - while($attachment = $db->fetch_array($query)) - { - $attachcache[0][$attachment['aid']] = $attachment; - } - - $postbit = build_postbit($post, 1); - eval("\$preview = \"".$templates->get("previewpost")."\";"); - } - } - - $subject = htmlspecialchars_uni($parser->parse_badwords($subject)); - - $posthash = htmlspecialchars_uni($mybb->get_input('posthash')); - - // Do we have attachment errors? - if(count($errors) > 0) - { - $reply_errors = inline_error($errors); - } - - // Get a listing of the current attachments. - if($mybb->settings['enableattachments'] != 0 && $forumpermissions['canpostattachments'] != 0) - { - $attachcount = 0; - if($pid) - { - $attachwhere = "pid='$pid'"; - } - else - { - $attachwhere = "posthash='".$db->escape_string($posthash)."'"; - } - $attachments = ''; - $query = $db->simple_select("attachments", "*", $attachwhere); - while($attachment = $db->fetch_array($query)) - { - $attachment['size'] = get_friendly_size($attachment['filesize']); - $attachment['icon'] = get_attachment_icon(get_extension($attachment['filename'])); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - - if($mybb->settings['bbcodeinserter'] != 0 && $forum['allowmycode'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0)) - { - eval("\$postinsert = \"".$templates->get("post_attachments_attachment_postinsert")."\";"); - } - - $attach_mod_options = ''; - eval("\$attach_rem_options = \"".$templates->get("post_attachments_attachment_remove")."\";"); - - if($attachment['visible'] != 1) - { - eval("\$attachments .= \"".$templates->get("post_attachments_attachment_unapproved")."\";"); - } - else - { - eval("\$attachments .= \"".$templates->get("post_attachments_attachment")."\";"); - } - $attachcount++; - } - - $noshowattach = ''; - $query = $db->simple_select("attachments", "SUM(filesize) AS ausage", "uid='".$mybb->user['uid']."'"); - $usage = $db->fetch_array($query); - - if($usage['ausage'] > ($mybb->usergroup['attachquota']*1024) && $mybb->usergroup['attachquota'] != 0) - { - $noshowattach = 1; - } - - if($mybb->usergroup['attachquota'] == 0) - { - $friendlyquota = $lang->unlimited; - } - else - { - $friendlyquota = get_friendly_size($mybb->usergroup['attachquota']*1024); - } - - $friendlyusage = get_friendly_size($usage['ausage']); - $lang->attach_quota = $lang->sprintf($lang->attach_quota, $friendlyusage, $friendlyquota); - - if($mybb->settings['maxattachments'] == 0 || ($mybb->settings['maxattachments'] != 0 && $attachcount < $mybb->settings['maxattachments']) && !$noshowattach) - { - eval("\$attach_add_options = \"".$templates->get("post_attachments_add")."\";"); - } - - if(($mybb->usergroup['caneditattachments'] || $forumpermissions['caneditattachments']) && $attachcount > 0) - { - eval("\$attach_update_options = \"".$templates->get("post_attachments_update")."\";"); - } - - if($attach_add_options || $attach_update_options) - { - eval("\$newattach = \"".$templates->get("post_attachments_new")."\";"); - } - - eval("\$attachbox = \"".$templates->get("post_attachments")."\";"); - } - - // If the user is logged in, provide a save draft button. - if($mybb->user['uid']) - { - eval("\$savedraftbutton = \"".$templates->get("post_savedraftbutton", 1, 0)."\";"); - } - - // Show captcha image for guests if enabled - $captcha = ''; - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - $correct = false; - require_once MYBB_ROOT.'inc/class_captcha.php'; - $post_captcha = new captcha(false, "post_captcha"); - - if((!empty($mybb->input['previewpost']) || $hide_captcha == true) && $post_captcha->type == 1) - { - // If previewing a post - check their current captcha input - if correct, hide the captcha input area - // ... but only if it's a default one, reCAPTCHA and Are You a Human must be filled in every time due to draconian limits - if($post_captcha->validate_captcha() == true) - { - $correct = true; - - // Generate a hidden list of items for our captcha - $captcha = $post_captcha->build_hidden_captcha(); - } - } - - if(!$correct) - { - if($post_captcha->type == 1) - { - $post_captcha->build_captcha(); - } - elseif($post_captcha->type == 2 || $post_captcha->type == 4) - { - $post_captcha->build_recaptcha(); - } - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } - } - else if($correct && ($post_captcha->type == 2 || $post_captcha->type == 4)) - { - $post_captcha->build_recaptcha(); - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } - } - } - - $reviewmore = ''; - if($mybb->settings['threadreview'] != 0) - { - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - if(is_moderator($fid, "canviewunapprove")) - { - $visibility = "(visible='1' OR visible='0')"; - } - else - { - $visibility = "visible='1'"; - } - $query = $db->simple_select("posts", "COUNT(pid) AS post_count", "tid='{$tid}' AND {$visibility}"); - $numposts = $db->fetch_field($query, "post_count"); - - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - if($numposts > $mybb->settings['postsperpage']) - { - $numposts = $mybb->settings['postsperpage']; - $lang->thread_review_more = $lang->sprintf($lang->thread_review_more, $mybb->settings['postsperpage'], get_thread_link($tid)); - eval("\$reviewmore = \"".$templates->get("newreply_threadreview_more")."\";"); - } - - $query = $db->simple_select("posts", "pid", "tid='{$tid}' AND {$visibility}", array("order_by" => "dateline", "order_dir" => "desc", "limit" => $mybb->settings['postsperpage'])); - while($post = $db->fetch_array($query)) - { - $pidin[] = $post['pid']; - } - - $pidin = implode(",", $pidin); - - // Fetch attachments - $query = $db->simple_select("attachments", "*", "pid IN ($pidin)"); - while($attachment = $db->fetch_array($query)) - { - $attachcache[$attachment['pid']][$attachment['aid']] = $attachment; - } - $query = $db->query(" - SELECT p.*, u.username AS userusername - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (p.uid=u.uid) - WHERE pid IN ($pidin) - ORDER BY dateline DESC - "); - $postsdone = 0; - $altbg = "trow1"; - $reviewbits = ''; - while($post = $db->fetch_array($query)) - { - if($post['userusername']) - { - $post['username'] = $post['userusername']; - } - $reviewpostdate = my_date('relative', $post['dateline']); - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "me_username" => $post['username'], - "filter_badwords" => 1 - ); - if($post['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_videocode'] = 0; - } - - $post['username'] = htmlspecialchars_uni($post['username']); - - if($post['visible'] != 1) - { - $altbg = "trow_shaded"; - } - - $post['message'] = $parser->parse_message($post['message'], $parser_options); - get_post_attachments($post['pid'], $post); - $reviewmessage = $post['message']; - eval("\$reviewbits .= \"".$templates->get("newreply_threadreview_post")."\";"); - if($altbg == "trow1") - { - $altbg = "trow2"; - } - else - { - $altbg = "trow1"; - } - } - eval("\$threadreview = \"".$templates->get("newreply_threadreview")."\";"); - } - - // Hide signature option if no permission - $signature = ''; - if($mybb->usergroup['canusesig'] == 1 && !$mybb->user['suspendsignature']) - { - eval("\$signature = \"".$templates->get('newreply_signature')."\";"); - } - - // Can we disable smilies or are they disabled already? - $disablesmilies = ''; - if($forum['allowsmilies'] != 0) - { - eval("\$disablesmilies = \"".$templates->get("newreply_disablesmilies")."\";"); - } - - $postoptions = ''; - if(!empty($signature) || !empty($disablesmilies)) - { - eval("\$postoptions = \"".$templates->get("newreply_postoptions")."\";"); - $bgcolor = "trow2"; - } - else - { - $bgcolor = "trow1"; - } - - $modoptions = ''; - // Show the moderator options. - if(is_moderator($fid)) - { - if($mybb->get_input('processed', MyBB::INPUT_INT)) - { - $mybb->input['modoptions'] = $mybb->get_input('modoptions', MyBB::INPUT_ARRAY); - if(!isset($mybb->input['modoptions']['closethread'])) - { - $mybb->input['modoptions']['closethread'] = 0; - } - $closed = (int)$mybb->input['modoptions']['closethread']; - if(!isset($mybb->input['modoptions']['stickthread'])) - { - $mybb->input['modoptions']['stickthread'] = 0; - } - $stuck = (int)$mybb->input['modoptions']['stickthread']; - } - else - { - $closed = $thread['closed']; - $stuck = $thread['sticky']; - } - - if($closed) - { - $closecheck = ' checked="checked"'; - } - else - { - $closecheck = ''; - } - - if($stuck) - { - $stickycheck = ' checked="checked"'; - } - else - { - $stickycheck = ''; - } - - $closeoption = ''; - if(is_moderator($thread['fid'], "canopenclosethreads")) - { - eval("\$closeoption = \"".$templates->get("newreply_modoptions_close")."\";"); - } - - $stickoption = ''; - if(is_moderator($thread['fid'], "canstickunstickthreads")) - { - eval("\$stickoption = \"".$templates->get("newreply_modoptions_stick")."\";"); - } - - if(!empty($closeoption) || !empty($stickoption)) - { - eval("\$modoptions = \"".$templates->get("newreply_modoptions")."\";"); - $bgcolor = "trow1"; - } - else - { - $bgcolor = "trow2"; - } - } - else - { - $bgcolor = "trow2"; - } - - // Fetch subscription select box - eval("\$subscriptionmethod = \"".$templates->get("post_subscription_method")."\";"); - - $lang->post_reply_to = $lang->sprintf($lang->post_reply_to, $thread['subject']); - $lang->reply_to = $lang->sprintf($lang->reply_to, $thread['subject']); - - // Do we have any forum rules to show for this forum? - $forumrules = ''; - if($forum['rulestype'] >= 2 && $forum['rules']) - { - if(!$forum['rulestitle']) - { - $forum['rulestitle'] = $lang->sprintf($lang->forum_rules, $forum['name']); - } - - if(!$parser) - { - require_once MYBB_ROOT.'inc/class_parser.php'; - $parser = new postParser; - } - - $rules_parser = array( - "allow_html" => 1, - "allow_mycode" => 1, - "allow_smilies" => 1, - "allow_imgcode" => 1 - ); - - $forum['rules'] = $parser->parse_message($forum['rules'], $rules_parser); - $foruminfo = $forum; - - if($forum['rulestype'] == 3) - { - eval("\$forumrules = \"".$templates->get("forumdisplay_rules")."\";"); - } - else if($forum['rulestype'] == 2) - { - eval("\$forumrules = \"".$templates->get("forumdisplay_rules_link")."\";"); - } - } - - $moderation_notice = ''; - if(!is_moderator($forum['fid'], "canapproveunapproveattachs")) - { - if($forumpermissions['modattachments'] == 1 && $forumpermissions['canpostattachments'] != 0) - { - $moderation_text = $lang->moderation_forum_attachments; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - if(!is_moderator($forum['fid'], "canapproveunapproveposts")) - { - if($forumpermissions['modposts'] == 1) - { - $moderation_text = $lang->moderation_forum_posts; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - - if($mybb->user['moderateposts'] == 1) - { - $moderation_text = $lang->moderation_user_posts; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - - $plugins->run_hooks("newreply_end"); - - $forum['name'] = strip_tags($forum['name']); - - eval("\$newreply = \"".$templates->get("newreply")."\";"); - output_page($newreply); -} diff --git a/html/forums/newthread.php b/html/forums/newthread.php deleted file mode 100644 index 7897218..0000000 --- a/html/forums/newthread.php +++ /dev/null @@ -1,1189 +0,0 @@ -load("newthread"); - -$tid = $pid = 0; -$mybb->input['action'] = $mybb->get_input('action'); -$mybb->input['tid'] = $mybb->get_input('tid', MyBB::INPUT_INT); -$mybb->input['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); -if($mybb->input['action'] == "editdraft" || ($mybb->get_input('savedraft') && $mybb->input['tid']) || ($mybb->input['tid'] && $mybb->input['pid'])) -{ - $thread = get_thread($mybb->input['tid']); - - $query = $db->simple_select("posts", "*", "tid='".$mybb->get_input('tid', MyBB::INPUT_INT)."' AND visible='-2'", array('order_by' => 'dateline', 'limit' => 1)); - $post = $db->fetch_array($query); - - if(!$thread['tid'] || !$post['pid'] || $thread['visible'] != -2 || $thread['uid'] != $mybb->user['uid']) - { - error($lang->invalidthread); - } - - $pid = $post['pid']; - $fid = $thread['fid']; - $tid = $thread['tid']; - eval("\$editdraftpid = \"".$templates->get("newthread_draftinput")."\";"); -} -else -{ - $fid = $mybb->get_input('fid', MyBB::INPUT_INT); - $editdraftpid = ''; -} - -// Fetch forum information. -$forum = get_forum($fid); -if(!$forum) -{ - error($lang->error_invalidforum); -} - -// Draw the navigation -build_forum_breadcrumb($fid); -add_breadcrumb($lang->nav_newthread); - -$forumpermissions = forum_permissions($fid); - -if($forum['open'] == 0 || $forum['type'] != "f" || $forum['linkto'] != "") -{ - error($lang->error_closedinvalidforum); -} - -if($forumpermissions['canview'] == 0 || $forumpermissions['canpostthreads'] == 0) -{ - error_no_permission(); -} - -if($mybb->user['suspendposting'] == 1) -{ - $suspendedpostingtype = $lang->error_suspendedposting_permanent; - if($mybb->user['suspensiontime']) - { - $suspendedpostingtype = $lang->sprintf($lang->error_suspendedposting_temporal, my_date($mybb->settings['dateformat'], $mybb->user['suspensiontime'])); - } - - $lang->error_suspendedposting = $lang->sprintf($lang->error_suspendedposting, $suspendedpostingtype, my_date($mybb->settings['timeformat'], $mybb->user['suspensiontime'])); - - error($lang->error_suspendedposting); -} - -// Check if this forum is password protected and we have a valid password -check_forum_password($forum['fid']); - -// If MyCode is on for this forum and the MyCode editor is enabled in the Admin CP, draw the code buttons and smilie inserter. -if($mybb->settings['bbcodeinserter'] != 0 && $forum['allowmycode'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0)) -{ - $codebuttons = build_mycode_inserter("message", $forum['allowsmilies']); - if($forum['allowsmilies'] != 0) - { - $smilieinserter = build_clickable_smilies(); - } -} - -// Does this forum allow post icons? If so, fetch the post icons. -if($forum['allowpicons'] != 0) -{ - $posticons = get_post_icons(); -} - -// If we have a currently logged in user then fetch the change user box. -if($mybb->user['uid'] != 0) -{ - $mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); - eval("\$loginbox = \"".$templates->get("changeuserbox")."\";"); -} - -// Otherwise we have a guest, determine the "username" and get the login box. -else -{ - if(!isset($mybb->input['previewpost']) && $mybb->input['action'] != "do_newthread") - { - $username = ''; - } - else - { - $username = htmlspecialchars_uni($mybb->get_input('username')); - } - eval("\$loginbox = \"".$templates->get("loginbox")."\";"); -} - -// If we're not performing a new thread insert and not editing a draft then we're posting a new thread. -if($mybb->input['action'] != "do_newthread" && $mybb->input['action'] != "editdraft") -{ - $mybb->input['action'] = "newthread"; -} - -// Previewing a post, overwrite the action to the new thread action. -if(!empty($mybb->input['previewpost'])) -{ - $mybb->input['action'] = "newthread"; -} - -// Setup a unique posthash for attachment management -if(!$mybb->get_input('posthash') && !$pid) -{ - $mybb->input['posthash'] = md5($mybb->user['uid'].random_str()); -} - -if((empty($_POST) && empty($_FILES)) && $mybb->get_input('processed', MyBB::INPUT_INT) == 1) -{ - error($lang->error_cannot_upload_php_post); -} - -$errors = array(); -$maximageserror = $attacherror = ''; - -// Handle attachments if we've got any. -if($mybb->settings['enableattachments'] == 1 && !$mybb->get_input('attachmentaid', MyBB::INPUT_INT) && ($mybb->get_input('newattachment') || $mybb->get_input('updateattachment') || ($mybb->input['action'] == "do_newthread" && $mybb->get_input('submit') && $_FILES['attachment']))) -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->input['action'] == "editdraft" || ($mybb->input['tid'] && $mybb->input['pid'])) - { - $attachwhere = "pid='{$pid}'"; - } - else - { - $attachwhere = "posthash='".$db->escape_string($mybb->get_input('posthash'))."'"; - } - - // If there's an attachment, check it and upload it - if($forumpermissions['canpostattachments'] != 0) - { - if(!empty($_FILES['attachment']['name']) && !empty($_FILES['attachment']['type'])) - { - if($_FILES['attachment']['size'] > 0) - { - $query = $db->simple_select("attachments", "aid", "filename='".$db->escape_string($_FILES['attachment']['name'])."' AND {$attachwhere}"); - $updateattach = $db->fetch_field($query, "aid"); - - require_once MYBB_ROOT."inc/functions_upload.php"; - - $update_attachment = false; - if($updateattach > 0 && $mybb->get_input('updateattachment')) - { - $update_attachment = true; - } - $attachedfile = upload_attachment($_FILES['attachment'], $update_attachment); - } - else - { - $errors[] = $lang->error_uploadempty; - $mybb->input['action'] = "newthread"; - } - } - } - - // Error with attachments - should use new inline errors? - if(!empty($attachedfile['error'])) - { - $errors[] = $attachedfile['error']; - $mybb->input['action'] = "newthread"; - } - - // If we were dealing with an attachment but didn't click 'Post Thread', force the new thread page again. - if(!$mybb->get_input('submit')) - { - //$editdraftpid = ""; - $mybb->input['action'] = "newthread"; - } -} - -// Are we removing an attachment from the thread? -if($mybb->settings['enableattachments'] == 1 && $mybb->get_input('attachmentaid', MyBB::INPUT_INT) && $mybb->get_input('attachmentact') == "remove") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - require_once MYBB_ROOT."inc/functions_upload.php"; - remove_attachment($pid, $mybb->get_input('posthash'), $mybb->get_input('attachmentaid', MyBB::INPUT_INT)); - if(!$mybb->get_input('submit')) - { - $mybb->input['action'] = "newthread"; - } -} - -$thread_errors = ""; -$hide_captcha = false; - -// Check the maximum posts per day for this user -if($mybb->usergroup['maxposts'] > 0 && $mybb->usergroup['cancp'] != 1) -{ - $daycut = TIME_NOW-60*60*24; - $query = $db->simple_select("posts", "COUNT(*) AS posts_today", "uid='{$mybb->user['uid']}' AND visible='1' AND dateline>{$daycut}"); - $post_count = $db->fetch_field($query, "posts_today"); - if($post_count >= $mybb->usergroup['maxposts']) - { - $lang->error_maxposts = $lang->sprintf($lang->error_maxposts, $mybb->usergroup['maxposts']); - error($lang->error_maxposts); - } -} - -// Performing the posting of a new thread. -if($mybb->input['action'] == "do_newthread" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("newthread_do_newthread_start"); - - // If this isn't a logged in user, then we need to do some special validation. - if($mybb->user['uid'] == 0) - { - // If they didn't specify a username then give them "Guest" - if(!$mybb->get_input('username')) - { - $username = $lang->guest; - } - // Otherwise use the name they specified. - else - { - $username = $mybb->get_input('username'); - } - $uid = 0; - - if(!$mybb->user['uid'] && $mybb->settings['stopforumspam_on_newthread']) - { - require_once MYBB_ROOT . '/inc/class_stopforumspamchecker.php'; - - $stop_forum_spam_checker = new StopForumSpamChecker( - $plugins, - $mybb->settings['stopforumspam_min_weighting_before_spam'], - $mybb->settings['stopforumspam_check_usernames'], - $mybb->settings['stopforumspam_check_emails'], - $mybb->settings['stopforumspam_check_ips'], - $mybb->settings['stopforumspam_log_blocks'] - ); - - try { - if($stop_forum_spam_checker->is_user_a_spammer($mybb->get_input('username'), '', get_ip())) - { - $errors[] = $lang->sprintf($lang->error_stop_forum_spam_spammer, - $stop_forum_spam_checker->getErrorText(array( - 'stopforumspam_check_usernames', - 'stopforumspam_check_ips' - ))); - } - } - catch (Exception $e) - { - if($mybb->settings['stopforumspam_block_on_error']) - { - $errors[] = $lang->error_stop_forum_spam_fetching; - } - } - } - } - // This user is logged in. - else - { - $username = $mybb->user['username']; - $uid = $mybb->user['uid']; - } - - // Attempt to see if this post is a duplicate or not - if($uid > 0) - { - $user_check = "p.uid='{$uid}'"; - } - else - { - $user_check = "p.ipaddress=".$db->escape_binary($session->packedip); - } - if(!$mybb->get_input('savedraft') && !$pid) - { - $query = $db->simple_select("posts p", "p.pid", "$user_check AND p.fid='{$forum['fid']}' AND p.subject='".$db->escape_string($mybb->get_input('subject'))."' AND p.message='".$db->escape_string($mybb->get_input('message'))."' AND p.dateline>".(TIME_NOW-600)); - $duplicate_check = $db->fetch_field($query, "pid"); - if($duplicate_check) - { - error($lang->error_post_already_submitted); - } - } - - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("insert"); - $posthandler->action = "thread"; - - // Set the thread data that came from the input to the $thread array. - $new_thread = array( - "fid" => $forum['fid'], - "subject" => $mybb->get_input('subject'), - "prefix" => $mybb->get_input('threadprefix', MyBB::INPUT_INT), - "icon" => $mybb->get_input('icon', MyBB::INPUT_INT), - "uid" => $uid, - "username" => $username, - "message" => $mybb->get_input('message'), - "ipaddress" => $session->packedip, - "posthash" => $mybb->get_input('posthash') - ); - - if($pid != '') - { - $new_thread['pid'] = $pid; - } - - // Are we saving a draft thread? - if($mybb->get_input('savedraft') && $mybb->user['uid']) - { - $new_thread['savedraft'] = 1; - } - else - { - $new_thread['savedraft'] = 0; - } - - // Is this thread already a draft and we're updating it? - if(isset($thread['tid']) && $thread['visible'] == -2) - { - $new_thread['tid'] = $thread['tid']; - } - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(!isset($postoptions['signature'])) - { - $postoptions['signature'] = 0; - } - if(!isset($postoptions['subscriptionmethod'])) - { - $postoptions['subscriptionmethod'] = 0; - } - if(!isset($postoptions['disablesmilies'])) - { - $postoptions['disablesmilies'] = 0; - } - - // Set up the thread options from the input. - $new_thread['options'] = array( - "signature" => $postoptions['signature'], - "subscriptionmethod" => $postoptions['subscriptionmethod'], - "disablesmilies" => $postoptions['disablesmilies'] - ); - - // Apply moderation options if we have them - $new_thread['modoptions'] = $mybb->get_input('modoptions', MyBB::INPUT_ARRAY); - - $posthandler->set_data($new_thread); - - // Now let the post handler do all the hard work. - $valid_thread = $posthandler->validate_thread(); - - $post_errors = array(); - // Fetch friendly error messages if this is an invalid thread - if(!$valid_thread) - { - $post_errors = $posthandler->get_friendly_errors(); - } - - // Check captcha image - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $post_captcha = new captcha; - - if($post_captcha->validate_captcha() == false) - { - // CAPTCHA validation failed - foreach($post_captcha->get_errors() as $error) - { - $post_errors[] = $error; - } - } - else - { - $hide_captcha = true; - } - } - - // One or more errors returned, fetch error list and throw to newthread page - if(count($post_errors) > 0) - { - $thread_errors = inline_error($post_errors); - $mybb->input['action'] = "newthread"; - } - // No errors were found, it is safe to insert the thread. - else - { - $thread_info = $posthandler->insert_thread(); - $tid = $thread_info['tid']; - $visible = $thread_info['visible']; - - // Invalidate solved captcha - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - $post_captcha->invalidate_captcha(); - } - - $force_redirect = false; - - // Mark thread as read - require_once MYBB_ROOT."inc/functions_indicators.php"; - mark_thread_read($tid, $fid); - - // We were updating a draft thread, send them back to the draft listing. - if($new_thread['savedraft'] == 1) - { - $lang->redirect_newthread = $lang->draft_saved; - $url = "usercp.php?action=drafts"; - } - - // A poll was being posted with this thread, throw them to poll posting page. - else if($mybb->get_input('postpoll', MyBB::INPUT_INT) && $forumpermissions['canpostpolls']) - { - $url = "polls.php?action=newpoll&tid=$tid&polloptions=".$mybb->get_input('numpolloptions', MyBB::INPUT_INT); - $lang->redirect_newthread .= $lang->redirect_newthread_poll; - } - - // This thread is stuck in the moderation queue, send them back to the forum. - else if(!$visible) - { - // Moderated thread - $lang->redirect_newthread .= $lang->redirect_newthread_moderation; - $url = get_forum_link($fid); - - // User must see moderation notice, regardless of redirect settings - $force_redirect = true; - } - - // The thread is being made in a forum the user cannot see threads in, send them back to the forum. - else if($visible == 1 && $forumpermissions['canviewthreads'] != 1) - { - $lang->redirect_newthread .= $lang->redirect_newthread_unviewable; - $url = get_forum_link($fid); - - // User must see permission notice, regardless of redirect settings - $force_redirect = true; - } - - // This is just a normal thread - send them to it. - else - { - // Visible thread - $lang->redirect_newthread .= $lang->redirect_newthread_thread; - $url = get_thread_link($tid); - } - - // Mark any quoted posts so they're no longer selected - attempts to maintain those which weren't selected - if(isset($mybb->input['quoted_ids']) && isset($mybb->cookies['multiquote']) && $mybb->settings['multiquote'] != 0) - { - // We quoted all posts - remove the entire cookie - if($mybb->get_input('quoted_ids') == "all") - { - my_unsetcookie("multiquote"); - } - } - - $plugins->run_hooks("newthread_do_newthread_end"); - - // Hop to it! Send them to the next page. - if(!$mybb->get_input('postpoll', MyBB::INPUT_INT)) - { - $lang->redirect_newthread .= $lang->sprintf($lang->redirect_return_forum, get_forum_link($fid)); - } - redirect($url, $lang->redirect_newthread, "", $force_redirect); - } -} - -if($mybb->input['action'] == "newthread" || $mybb->input['action'] == "editdraft") -{ - $plugins->run_hooks("newthread_start"); - - // Do we have attachment errors? - if(count($errors) > 0) - { - $thread_errors = inline_error($errors); - } - - $multiquote_external = $quoted_ids = ''; - - $subject = $message = ''; - // If this isn't a preview and we're not editing a draft, then handle quoted posts - if(empty($mybb->input['previewpost']) && !$thread_errors && $mybb->input['action'] != "editdraft") - { - $quoted_posts = array(); - // Handle multiquote - if(isset($mybb->cookies['multiquote']) && $mybb->settings['multiquote'] != 0) - { - $multiquoted = explode("|", $mybb->cookies['multiquote']); - foreach($multiquoted as $post) - { - $quoted_posts[$post] = (int)$post; - } - } - - // Quoting more than one post - fetch them - if(count($quoted_posts) > 0) - { - $external_quotes = 0; - $quoted_posts = implode(",", $quoted_posts); - $unviewable_forums = get_unviewable_forums(); - $inactiveforums = get_inactive_forums(); - if($unviewable_forums) - { - $unviewable_forums = "AND t.fid NOT IN ({$unviewable_forums})"; - } - if($inactiveforums) - { - $inactiveforums = "AND t.fid NOT IN ({$inactiveforums})"; - } - - if(is_moderator($fid)) - { - $visible_where = "AND p.visible != 2"; - } - else - { - $visible_where = "AND p.visible > 0"; - } - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - $onlyusfids = array(); - $onlyusforums = ''; - foreach($group_permissions as $gpfid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $gpfid; - } - } - if(!empty($onlyusfids)) - { - $onlyusforums = "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - if($mybb->get_input('load_all_quotes', MyBB::INPUT_INT) == 1) - { - $query = $db->query(" - SELECT p.subject, p.message, p.pid, p.tid, p.username, p.dateline, u.username AS userusername - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.pid IN ({$quoted_posts}) {$unviewable_forums} {$inactiveforums} {$onlyusforums} {$visible_where} - ORDER BY p.dateline - "); - while($quoted_post = $db->fetch_array($query)) - { - if($quoted_post['userusername']) - { - $quoted_post['username'] = $quoted_post['userusername']; - } - $quoted_post['message'] = preg_replace('#(^|\r|\n)/me ([^\r\n<]*)#i', "\\1* {$quoted_post['username']} \\2", $quoted_post['message']); - $quoted_post['message'] = preg_replace('#(^|\r|\n)/slap ([^\r\n<]*)#i', "\\1* {$quoted_post['username']} {$lang->slaps} \\2 {$lang->with_trout}", $quoted_post['message']); - $quoted_post['message'] = preg_replace("#\[attachment=([0-9]+?)\]#i", '', $quoted_post['message']); - $message .= "[quote='{$quoted_post['username']}' pid='{$quoted_post['pid']}' dateline='{$quoted_post['dateline']}']\n{$quoted_post['message']}\n[/quote]\n\n"; - } - - $quoted_ids = "all"; - } - else - { - $query = $db->query(" - SELECT COUNT(*) AS quotes - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE p.pid IN ({$quoted_posts}) {$unviewable_forums} {$inactiveforums} {$onlyusforums} {$visible_where} - "); - $external_quotes = $db->fetch_field($query, 'quotes'); - - if($external_quotes > 0) - { - if($external_quotes == 1) - { - $multiquote_text = $lang->multiquote_external_one; - $multiquote_deselect = $lang->multiquote_external_one_deselect; - $multiquote_quote = $lang->multiquote_external_one_quote; - } - else - { - $multiquote_text = $lang->sprintf($lang->multiquote_external, $external_quotes); - $multiquote_deselect = $lang->multiquote_external_deselect; - $multiquote_quote = $lang->multiquote_external_quote; - } - eval("\$multiquote_external = \"".$templates->get("newthread_multiquote_external")."\";"); - } - } - } - } - - if(isset($mybb->input['quoted_ids'])) - { - $quoted_ids = htmlspecialchars_uni($mybb->get_input('quoted_ids')); - } - - $postoptionschecked = array('signature' => '', 'disablesmilies' => ''); - $postoptions_subscriptionmethod_dont = $postoptions_subscriptionmethod_none = $postoptions_subscriptionmethod_email = $postoptions_subscriptionmethod_pm = ''; - $postpollchecked = ''; - - // Check the various post options if we're - // a -> previewing a post - // b -> removing an attachment - // c -> adding a new attachment - // d -> have errors from posting - - if(!empty($mybb->input['previewpost']) || $mybb->get_input('attachmentaid', MyBB::INPUT_INT) || $mybb->get_input('newattachment') || $mybb->get_input('updateattachment') || $thread_errors) - { - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(isset($postoptions['signature']) && $postoptions['signature'] == 1) - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "none") - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "email") - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if(isset($postoptions['subscriptionmethod']) && $postoptions['subscriptionmethod'] == "pm") - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - if(isset($postoptions['disablesmilies']) && $postoptions['disablesmilies'] == 1) - { - $postoptionschecked['disablesmilies'] = " checked=\"checked\""; - } - if($mybb->get_input('postpoll', MyBB::INPUT_INT) == 1) - { - $postpollchecked = "checked=\"checked\""; - } - $numpolloptions = $mybb->get_input('numpolloptions', MyBB::INPUT_INT); - } - - // Editing a draft thread - else if($mybb->input['action'] == "editdraft" && $mybb->user['uid']) - { - $mybb->input['threadprefix'] = $thread['prefix']; - $message = htmlspecialchars_uni($post['message']); - $subject = htmlspecialchars_uni($post['subject']); - if($post['includesig'] != 0) - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - if($post['smilieoff'] == 1) - { - $postoptionschecked['disablesmilies'] = " checked=\"checked\""; - } - $icon = $post['icon']; - if($forum['allowpicons'] != 0) - { - $posticons = get_post_icons(); - } - if($postoptions['subscriptionmethod'] == "none") - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if($postoptions['subscriptionmethod'] == "email") - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if($postoptions['subscriptionmethod'] == "pm") - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - } - - // Otherwise, this is our initial visit to this page. - else - { - if($mybb->user['signature'] != '') - { - $postoptionschecked['signature'] = " checked=\"checked\""; - } - if($mybb->user['subscriptionmethod'] == 1) - { - $postoptions_subscriptionmethod_none = "checked=\"checked\""; - } - else if($mybb->user['subscriptionmethod'] == 2) - { - $postoptions_subscriptionmethod_email = "checked=\"checked\""; - } - else if($mybb->user['subscriptionmethod'] == 3) - { - $postoptions_subscriptionmethod_pm = "checked=\"checked\""; - } - else - { - $postoptions_subscriptionmethod_dont = "checked=\"checked\""; - } - $numpolloptions = "2"; - } - - $preview = ''; - - // If we're preving a post then generate the preview. - if(!empty($mybb->input['previewpost'])) - { - // If this isn't a logged in user, then we need to do some special validation. - if($mybb->user['uid'] == 0) - { - // If they didn't specify a username then give them "Guest" - if(!$mybb->get_input('username')) - { - $username = $lang->guest; - } - // Otherwise use the name they specified. - else - { - $username = $mybb->get_input('username'); - } - $uid = 0; - } - // This user is logged in. - else - { - $username = $mybb->user['username']; - $uid = $mybb->user['uid']; - } - - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("insert"); - $posthandler->action = "thread"; - - // Set the thread data that came from the input to the $thread array. - $new_thread = array( - "fid" => $forum['fid'], - "prefix" => $mybb->get_input('threadprefix', MyBB::INPUT_INT), - "subject" => $mybb->get_input('subject'), - "icon" => $mybb->get_input('icon'), - "uid" => $uid, - "username" => $username, - "message" => $mybb->get_input('message'), - "ipaddress" => $session->packedip, - "posthash" => $mybb->get_input('posthash') - ); - - if($pid != '') - { - $new_thread['pid'] = $pid; - } - - $posthandler->set_data($new_thread); - - // Now let the post handler do all the hard work. - $valid_thread = $posthandler->verify_message(); - $valid_subject = $posthandler->verify_subject(); - - // guest post --> verify author - if($new_thread['uid'] == 0) - { - $valid_username = $posthandler->verify_author(); - } - else - { - $valid_username = true; - } - - $post_errors = array(); - // Fetch friendly error messages if this is an invalid post - if(!$valid_thread || !$valid_subject || !$valid_username) - { - $post_errors = $posthandler->get_friendly_errors(); - } - - // One or more errors returned, fetch error list and throw to newreply page - if(count($post_errors) > 0) - { - $thread_errors = inline_error($post_errors); - } - else - { - if(empty($mybb->input['username'])) - { - $mybb->input['username'] = $lang->guest; - } - $query = $db->query(" - SELECT u.*, f.* - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - WHERE u.uid='".$mybb->user['uid']."' - "); - $post = $db->fetch_array($query); - if(!$mybb->user['uid'] || !$post['username']) - { - $post['username'] = htmlspecialchars_uni($mybb->get_input('username')); - } - else - { - $post['userusername'] = $mybb->user['username']; - $post['username'] = $mybb->user['username']; - } - $previewmessage = $mybb->get_input('message'); - $post['message'] = $previewmessage; - $post['subject'] = $mybb->get_input('subject'); - $post['icon'] = $mybb->get_input('icon', MyBB::INPUT_INT); - $mybb->input['postoptions'] = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(isset($mybb->input['postoptions']['disablesmilies'])) - { - $post['smilieoff'] = $mybb->input['postoptions']['disablesmilies']; - } - $post['dateline'] = TIME_NOW; - if(isset($mybb->input['postoptions']['signature'])) - { - $post['includesig'] = $mybb->input['postoptions']['signature']; - } - if(!isset($post['includesig']) || $post['includesig'] != 1) - { - $post['includesig'] = 0; - } - - // Fetch attachments assigned to this post - if($mybb->get_input('pid', MyBB::INPUT_INT)) - { - $attachwhere = "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"; - } - else - { - $attachwhere = "posthash='".$db->escape_string($mybb->get_input('posthash'))."'"; - } - - $query = $db->simple_select("attachments", "*", $attachwhere); - while($attachment = $db->fetch_array($query)) - { - $attachcache[0][$attachment['aid']] = $attachment; - } - - $postbit = build_postbit($post, 1); - eval("\$preview = \"".$templates->get("previewpost")."\";"); - } - $message = htmlspecialchars_uni($mybb->get_input('message')); - $subject = htmlspecialchars_uni($mybb->get_input('subject')); - } - - // Removing an attachment or adding a new one, or showing thread errors. - else if($mybb->get_input('attachmentaid', MyBB::INPUT_INT) || $mybb->get_input('newattachment') || $mybb->get_input('updateattachment') || $thread_errors) - { - $message = htmlspecialchars_uni($mybb->get_input('message')); - $subject = htmlspecialchars_uni($mybb->get_input('subject')); - } - - // Generate thread prefix selector - if(!$mybb->get_input('threadprefix', MyBB::INPUT_INT)) - { - $mybb->input['threadprefix'] = 0; - } - - $prefixselect = build_prefix_select($forum['fid'], $mybb->get_input('threadprefix', MyBB::INPUT_INT)); - - $posthash = htmlspecialchars_uni($mybb->get_input('posthash')); - - // Hide signature option if no permission - $signature = ''; - if($mybb->usergroup['canusesig'] == 1 && !$mybb->user['suspendsignature']) - { - eval("\$signature = \"".$templates->get('newthread_signature')."\";"); - } - - // Can we disable smilies or are they disabled already? - $disablesmilies = ''; - if($forum['allowsmilies'] != 0) - { - eval("\$disablesmilies = \"".$templates->get("newthread_disablesmilies")."\";"); - } - - $postoptions = ''; - if(!empty($signature) || !empty($disablesmilies)) - { - eval("\$postoptions = \"".$templates->get("newthread_postoptions")."\";"); - $bgcolor = "trow2"; - $bgcolor2 = "trow1"; - } - else - { - $bgcolor = "trow1"; - $bgcolor2 = "trow2"; - } - - $modoptions = ''; - // Show the moderator options - if(is_moderator($fid)) - { - $modoptions = $mybb->get_input('modoptions', MyBB::INPUT_ARRAY); - if(isset($modoptions['closethread']) && $modoptions['closethread'] == 1) - { - $closecheck = "checked=\"checked\""; - } - else - { - $closecheck = ''; - } - if(isset($modoptions['stickthread']) && $modoptions['stickthread'] == 1) - { - $stickycheck = "checked=\"checked\""; - } - else - { - $stickycheck = ''; - } - - $closeoption = ''; - if(is_moderator($thread['fid'], "canopenclosethreads")) - { - eval("\$closeoption = \"".$templates->get("newreply_modoptions_close")."\";"); - } - - $stickoption = ''; - if(is_moderator($thread['fid'], "canstickunstickthreads")) - { - eval("\$stickoption = \"".$templates->get("newreply_modoptions_stick")."\";"); - } - - if(!empty($closeoption) || !empty($stickoption)) - { - eval("\$modoptions = \"".$templates->get("newreply_modoptions")."\";"); - $bgcolor = "trow1"; - $bgcolor2 = "trow2"; - } - else - { - $bgcolor = "trow2"; - $bgcolor2 = "trow1"; - } - } - else - { - $bgcolor = "trow2"; - $bgcolor2 = "trow1"; - } - - // Fetch subscription select box - eval("\$subscriptionmethod = \"".$templates->get("post_subscription_method")."\";"); - - if($mybb->settings['enableattachments'] != 0 && $forumpermissions['canpostattachments'] != 0) - { // Get a listing of the current attachments, if there are any - $attachcount = 0; - if($mybb->input['action'] == "editdraft" || ($mybb->input['tid'] && $mybb->input['pid'])) - { - $attachwhere = "pid='$pid'"; - } - else - { - $attachwhere = "posthash='".$db->escape_string($posthash)."'"; - } - $query = $db->simple_select("attachments", "*", $attachwhere); - $attachments = ''; - while($attachment = $db->fetch_array($query)) - { - $attachment['size'] = get_friendly_size($attachment['filesize']); - $attachment['icon'] = get_attachment_icon(get_extension($attachment['filename'])); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - - if($mybb->settings['bbcodeinserter'] != 0 && $forum['allowmycode'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0)) - { - eval("\$postinsert = \"".$templates->get("post_attachments_attachment_postinsert")."\";"); - } - - eval("\$attach_rem_options = \"".$templates->get("post_attachments_attachment_remove")."\";"); - - $attach_mod_options = ''; - if($attachment['visible'] != 1) - { - eval("\$attachments .= \"".$templates->get("post_attachments_attachment_unapproved")."\";"); - } - else - { - eval("\$attachments .= \"".$templates->get("post_attachments_attachment")."\";"); - } - $attachcount++; - } - $query = $db->simple_select("attachments", "SUM(filesize) AS ausage", "uid='".$mybb->user['uid']."'"); - $usage = $db->fetch_array($query); - if($usage['ausage'] > ($mybb->usergroup['attachquota']*1024) && $mybb->usergroup['attachquota'] != 0) - { - $noshowattach = 1; - } - if($mybb->usergroup['attachquota'] == 0) - { - $friendlyquota = $lang->unlimited; - } - else - { - $friendlyquota = get_friendly_size($mybb->usergroup['attachquota']*1024); - } - $friendlyusage = get_friendly_size($usage['ausage']); - $lang->attach_quota = $lang->sprintf($lang->attach_quota, $friendlyusage, $friendlyquota); - if($mybb->settings['maxattachments'] == 0 || ($mybb->settings['maxattachments'] != 0 && $attachcount < $mybb->settings['maxattachments']) && !isset($noshowattach)) - { - eval("\$attach_add_options = \"".$templates->get("post_attachments_add")."\";"); - } - - if(($mybb->usergroup['caneditattachments'] || $forumpermissions['caneditattachments']) && $attachcount > 0) - { - eval("\$attach_update_options = \"".$templates->get("post_attachments_update")."\";"); - } - - if($attach_add_options || $attach_update_options) - { - eval("\$newattach = \"".$templates->get("post_attachments_new")."\";"); - } - eval("\$attachbox = \"".$templates->get("post_attachments")."\";"); - - $bgcolor = alt_trow(); - } - - if($mybb->user['uid']) - { - eval("\$savedraftbutton = \"".$templates->get("post_savedraftbutton", 1, 0)."\";"); - } - - $captcha = ''; - - // Show captcha image for guests if enabled - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - $correct = false; - require_once MYBB_ROOT.'inc/class_captcha.php'; - $post_captcha = new captcha(false, "post_captcha"); - - if((!empty($mybb->input['previewpost']) || $hide_captcha == true) && $post_captcha->type == 1) - { - // If previewing a post - check their current captcha input - if correct, hide the captcha input area - // ... but only if it's a default one, reCAPTCHA and Are You a Human must be filled in every time due to draconian limits - if($post_captcha->validate_captcha() == true) - { - $correct = true; - - // Generate a hidden list of items for our captcha - $captcha = $post_captcha->build_hidden_captcha(); - } - } - - if(!$correct) - { - if($post_captcha->type == 1) - { - $post_captcha->build_captcha(); - } - elseif($post_captcha->type == 2 || $post_captcha->type == 4) - { - $post_captcha->build_recaptcha(); - } - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } - } - else if($correct && ($post_captcha->type == 2 || $post_captcha->type == 4)) - { - $post_captcha->build_recaptcha(); - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } - } - } - - if($forumpermissions['canpostpolls'] != 0) - { - $lang->max_options = $lang->sprintf($lang->max_options, $mybb->settings['maxpolloptions']); - eval("\$pollbox = \"".$templates->get("newthread_postpoll")."\";"); - } - - // Do we have any forum rules to show for this forum? - $forumrules = ''; - if($forum['rulestype'] >= 2 && $forum['rules']) - { - if(!$forum['rulestitle']) - { - $forum['rulestitle'] = $lang->sprintf($lang->forum_rules, $forum['name']); - } - - if(!$parser) - { - require_once MYBB_ROOT.'inc/class_parser.php'; - $parser = new postParser; - } - - $rules_parser = array( - "allow_html" => 1, - "allow_mycode" => 1, - "allow_smilies" => 1, - "allow_imgcode" => 1 - ); - - $forum['rules'] = $parser->parse_message($forum['rules'], $rules_parser); - $foruminfo = $forum; - - if($forum['rulestype'] == 3) - { - eval("\$forumrules = \"".$templates->get("forumdisplay_rules")."\";"); - } - else if($forum['rulestype'] == 2) - { - eval("\$forumrules = \"".$templates->get("forumdisplay_rules_link")."\";"); - } - } - - $moderation_notice = ''; - if(!is_moderator($forum['fid'], "canapproveunapproveattachs")) - { - if($forumpermissions['modattachments'] == 1 && $forumpermissions['canpostattachments'] != 0) - { - $moderation_text = $lang->moderation_forum_attachments; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - - if(!is_moderator($forum['fid'], "canapproveunapprovethreads")) - { - if($forumpermissions['modthreads'] == 1) - { - $moderation_text = $lang->moderation_forum_thread; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - - if(!is_moderator($forum['fid'], "canapproveunapproveposts")) - { - if($mybb->user['moderateposts'] == 1) - { - $moderation_text = $lang->moderation_user_posts; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - - $plugins->run_hooks("newthread_end"); - - $forum['name'] = strip_tags($forum['name']); - $lang->newthread_in = $lang->sprintf($lang->newthread_in, $forum['name']); - - eval("\$newthread = \"".$templates->get("newthread")."\";"); - output_page($newthread); -} - diff --git a/html/forums/online.php b/html/forums/online.php deleted file mode 100644 index 9a52528..0000000 --- a/html/forums/online.php +++ /dev/null @@ -1,284 +0,0 @@ -load("online"); - -if($mybb->usergroup['canviewonline'] == 0) -{ - error_no_permission(); -} - -// Make navigation -add_breadcrumb($lang->nav_online, "online.php"); - -if($mybb->get_input('action') == "today") -{ - add_breadcrumb($lang->nav_onlinetoday); - - $plugins->run_hooks("online_today_start"); - - $threshold = TIME_NOW-(60*60*24); - $query = $db->simple_select("users", "COUNT(uid) AS users", "lastactive > '{$threshold}'"); - $todaycount = $db->fetch_field($query, "users"); - - $query = $db->simple_select("users", "COUNT(uid) AS users", "lastactive > '{$threshold}' AND invisible = '1'"); - $invis_count = $db->fetch_field($query, "users"); - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - // Add pagination - $perpage = $mybb->settings['threadsperpage']; - - if($mybb->get_input('page', MyBB::INPUT_INT) > 0) - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($page-1) * $perpage; - $pages = ceil($todaycount / $perpage); - if($page > $pages) - { - $start = 0; - $page = 1; - } - } - else - { - $start = 0; - $page = 1; - } - - $query = $db->simple_select("users", "*", "lastactive > '{$threshold}'", array("order_by" => "lastactive", "order_dir" => "desc", "limit" => $perpage, "limit_start" => $start)); - - $todayrows = ''; - while($online = $db->fetch_array($query)) - { - $invisiblemark = ''; - if($online['invisible'] == 1) - { - $invisiblemark = "*"; - } - - if($online['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $online['uid'] == $mybb->user['uid']) - { - $username = format_name(htmlspecialchars_uni($online['username']), $online['usergroup'], $online['displaygroup']); - $online['profilelink'] = build_profile_link($username, $online['uid']); - $onlinetime = my_date($mybb->settings['timeformat'], $online['lastactive']); - - eval("\$todayrows .= \"".$templates->get("online_today_row")."\";"); - } - } - - $todaycount = my_number_format($todaycount); - $invis_count = my_number_format($invis_count); - - if($todaycount == 1) - { - $onlinetoday = $lang->member_online_today; - } - else - { - $onlinetoday = $lang->sprintf($lang->members_were_online_today, $todaycount); - } - - if($invis_count) - { - $string = $lang->members_online_hidden; - - if($invis_count == 1) - { - $string = $lang->member_online_hidden; - } - - $onlinetoday .= $lang->sprintf($string, $invis_count); - } - - $multipage = multipage($todaycount, $perpage, $page, "online.php?action=today"); - - $plugins->run_hooks("online_today_end"); - - eval("\$today = \"".$templates->get("online_today")."\";"); - output_page($today); -} -else -{ - $plugins->run_hooks("online_start"); - - // Custom sorting options - if($mybb->get_input('sortby') == "username") - { - $sql = "u.username ASC, s.time DESC"; - $refresh_string = "?sortby=username"; - } - elseif($mybb->get_input('sortby') == "location") - { - $sql = "s.location, s.time DESC"; - $refresh_string = "?sortby=location"; - } - // Otherwise sort by last refresh - else - { - switch($db->type) - { - case "sqlite": - case "pgsql": - $sql = "s.time DESC"; - break; - default: - $sql = "IF( s.uid >0, 1, 0 ) DESC, s.time DESC"; - break; - } - $refresh_string = ''; - } - - $timesearch = TIME_NOW - $mybb->settings['wolcutoffmins']*60; - - // Exactly how many users are currently online? - switch($db->type) - { - case "sqlite": - $sessions = array(); - $query = $db->simple_select("sessions", "sid", "time > {$timesearch}"); - while($sid = $db->fetch_field($query, "sid")) - { - $sessions[$sid] = 1; - } - $online_count = count($sessions); - unset($sessions); - break; - case "pgsql": - default: - $query = $db->simple_select("sessions", "COUNT(sid) as online", "time > {$timesearch}"); - $online_count = $db->fetch_field($query, "online"); - break; - } - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - // How many pages are there? - $perpage = $mybb->settings['threadsperpage']; - - if($mybb->get_input('page', MyBB::INPUT_INT) > 0) - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($page-1) * $perpage; - $pages = ceil($online_count / $perpage); - if($page > $pages) - { - $start = 0; - $page = 1; - } - } - else - { - $start = 0; - $page = 1; - } - - // Assemble page URL - $multipage = multipage($online_count, $perpage, $page, "online.php".$refresh_string); - - // Query for active sessions - $query = $db->query(" - SELECT DISTINCT s.sid, s.ip, s.uid, s.time, s.location, u.username, s.nopermission, u.invisible, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."sessions s - LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid) - WHERE s.time>'$timesearch' - ORDER BY $sql - LIMIT {$start}, {$perpage} - "); - - // Fetch spiders - $spiders = $cache->read("spiders"); - - while($user = $db->fetch_array($query)) - { - $plugins->run_hooks("online_user"); - - // Fetch the WOL activity - $user['activity'] = fetch_wol_activity($user['location'], $user['nopermission']); - - $botkey = my_strtolower(str_replace("bot=", '', $user['sid'])); - - // Have a registered user - if($user['uid'] > 0) - { - if(empty($users[$user['uid']]) || $users[$user['uid']]['time'] < $user['time']) - { - $users[$user['uid']] = $user; - } - } - // Otherwise this session is a bot - else if(my_strpos($user['sid'], "bot=") !== false && $spiders[$botkey]) - { - $user['bot'] = $spiders[$botkey]['name']; - $user['usergroup'] = $spiders[$botkey]['usergroup']; - $guests[] = $user; - } - // Or a guest - else - { - $guests[] = $user; - } - } - - // Now we build the actual online rows - we do this separately because we need to query all of the specific activity and location information - $online_rows = ''; - if(isset($users) && is_array($users)) - { - reset($users); - foreach($users as $user) - { - $online_rows .= build_wol_row($user); - } - } - if(isset($guests) && is_array($guests)) - { - reset($guests); - foreach($guests as $user) - { - $online_rows .= build_wol_row($user); - } - } - - // Fetch the most online information - $most_online = $cache->read("mostonline"); - $record_count = $most_online['numusers']; - $record_date = my_date('relative', $most_online['time']); - - // Set automatic refreshing if enabled - if($mybb->settings['refreshwol'] > 0) - { - $refresh_time = $mybb->settings['refreshwol'] * 60; - eval("\$refresh = \"".$templates->get("online_refresh")."\";"); - } - - $plugins->run_hooks("online_end"); - - eval("\$online = \"".$templates->get("online")."\";"); - output_page($online); -} diff --git a/html/forums/polls.php b/html/forums/polls.php deleted file mode 100644 index 7caaeb5..0000000 --- a/html/forums/polls.php +++ /dev/null @@ -1,1204 +0,0 @@ -load("polls"); - -$plugins->run_hooks("polls_start"); - -if($mybb->user['uid'] != 0) -{ - $mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); - eval("\$loginbox = \"".$templates->get("changeuserbox")."\";"); -} -else -{ - eval("\$loginbox = \"".$templates->get("loginbox")."\";"); -} - -$mybb->input['action'] = $mybb->get_input('action'); -if(!empty($mybb->input['updateoptions'])) -{ - if($mybb->input['action'] == "do_editpoll") - { - $mybb->input['action'] = "editpoll"; - } - else - { - $mybb->input['action'] = "newpoll"; - } -} -if($mybb->input['action'] == "newpoll") -{ - // Form for new poll - $tid = $mybb->get_input('tid', MyBB::INPUT_INT); - - $plugins->run_hooks("polls_newpoll_start"); - - $thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - if(!$thread) - { - error($lang->error_invalidthread); - } - - // Is the currently logged in user a moderator of this forum? - $ismod = is_moderator($thread['fid']); - - // Make sure we are looking at a real thread here. - if(($thread['visible'] != 1 && $ismod == false) || ($thread['visible'] > 1 && $ismod == true)) - { - error($lang->error_invalidthread); - } - - $fid = $thread['fid']; - $forumpermissions = forum_permissions($fid); - - // Get forum info - $forum = get_forum($fid); - if(!$forum) - { - error($lang->error_invalidforum); - } - else - { - // Is our forum closed? - if($forum['open'] == 0 && !is_moderator($fid, "canmanagepolls")) - { - // Doesn't look like it is - error($lang->error_closedinvalidforum); - } - } - // Make navigation - build_forum_breadcrumb($fid); - add_breadcrumb(htmlspecialchars_uni($thread['subject']), get_thread_link($thread['tid'])); - add_breadcrumb($lang->nav_postpoll); - - // No permission if: Not thread author; not moderator; no forum perms to view, post threads, post polls - if(($thread['uid'] != $mybb->user['uid'] && !is_moderator($fid, "canmanagepolls")) || ($forumpermissions['canview'] == 0 || $forumpermissions['canpostthreads'] == 0 || $forumpermissions['canpostpolls'] == 0)) - { - error_no_permission(); - } - - if($thread['poll']) - { - error($lang->error_pollalready); - } - - $time = TIME_NOW; - if($thread['dateline'] < ($time-($mybb->settings['polltimelimit']*60*60)) && $mybb->settings['polltimelimit'] != 0 && $ismod == false) - { - $lang->poll_time_limit = $lang->sprintf($lang->poll_time_limit, $mybb->settings['polltimelimit']); - error($lang->poll_time_limit); - } - - // Sanitize number of poll options - if($mybb->get_input('numpolloptions', MyBB::INPUT_INT) > 0) - { - $mybb->input['polloptions'] = $mybb->get_input('numpolloptions', MyBB::INPUT_INT); - } - if($mybb->settings['maxpolloptions'] && $mybb->get_input('polloptions', MyBB::INPUT_INT) > $mybb->settings['maxpolloptions']) - { // Too big - $polloptions = $mybb->settings['maxpolloptions']; - } - elseif($mybb->get_input('polloptions', MyBB::INPUT_INT) < 2) - { // Too small - $polloptions = 2; - } - else - { // Just right - $polloptions = $mybb->get_input('polloptions', MyBB::INPUT_INT); - } - - $question = htmlspecialchars_uni($mybb->get_input('question')); - - $postoptionschecked = array('public' => '', 'multiple' => ''); - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_INT); - if(isset($postoptions['multiple']) && $postoptions['multiple'] == 1) - { - $postoptionschecked['multiple'] = 'checked="checked"'; - } - if(isset($postoptions['public']) && $postoptions['public'] == 1) - { - $postoptionschecked['public'] = 'checked="checked"'; - } - - $options = $mybb->get_input('options', MyBB::INPUT_ARRAY); - $optionbits = ''; - for($i = 1; $i <= $polloptions; ++$i) - { - if(!isset($options[$i])) - { - $options[$i] = ''; - } - $option = $options[$i]; - $option = htmlspecialchars_uni($option); - eval("\$optionbits .= \"".$templates->get("polls_newpoll_option")."\";"); - $option = ""; - } - - if($mybb->get_input('timeout', MyBB::INPUT_INT) > 0) - { - $timeout = $mybb->get_input('timeout', MyBB::INPUT_INT); - } - else - { - $timeout = 0; - } - - if($mybb->get_input('maxoptions', MyBB::INPUT_INT) > 0 && $mybb->get_input('maxoptions', MyBB::INPUT_INT) < $polloptions) - { - $maxoptions = $mybb->get_input('maxoptions', MyBB::INPUT_INT); - } - else - { - $maxoptions = 0; - } - - $plugins->run_hooks("polls_newpoll_end"); - - eval("\$newpoll = \"".$templates->get("polls_newpoll")."\";"); - output_page($newpoll); -} -if($mybb->input['action'] == "do_newpoll" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("polls_do_newpoll_start"); - - $thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - if(!$thread) - { - error($lang->error_invalidthread); - } - - $fid = $thread['fid']; - $forumpermissions = forum_permissions($fid); - - // Get forum info - $forum = get_forum($fid); - if(!$forum) - { - error($lang->error_invalidforum); - } - else - { - // Is our forum closed? - if($forum['open'] == 0 && !is_moderator($fid, "canmanagepolls")) - { - // Doesn't look like it is - error($lang->error_closedinvalidforum); - } - } - - // No permission if: Not thread author; not moderator; no forum perms to view, post threads, post polls - if(($thread['uid'] != $mybb->user['uid'] && !is_moderator($fid, "canmanagepolls")) || ($forumpermissions['canview'] == 0 || $forumpermissions['canpostthreads'] == 0 || $forumpermissions['canpostpolls'] == 0)) - { - error_no_permission(); - } - - if($thread['poll']) - { - error($lang->error_pollalready); - } - - $polloptions = $mybb->get_input('polloptions', MyBB::INPUT_INT); - if($mybb->settings['maxpolloptions'] && $polloptions > $mybb->settings['maxpolloptions']) - { - $polloptions = $mybb->settings['maxpolloptions']; - } - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(!isset($postoptions['multiple']) || $postoptions['multiple'] != '1') - { - $postoptions['multiple'] = 0; - } - - if(!isset($postoptions['public']) || $postoptions['public'] != '1') - { - $postoptions['public'] = 0; - } - - if($polloptions < 2) - { - $polloptions = "2"; - } - $optioncount = "0"; - $options = $mybb->get_input('options', MyBB::INPUT_ARRAY); - - for($i = 1; $i <= $polloptions; ++$i) - { - if(!isset($options[$i])) - { - $options[$i] = ''; - } - - if($mybb->settings['polloptionlimit'] != 0 && my_strlen($options[$i]) > $mybb->settings['polloptionlimit']) - { - $lengtherror = 1; - break; - } - - if(strpos($options[$i], '||~|~||') !== false) - { - $sequenceerror = 1; - break; - } - - if(trim($options[$i]) != "") - { - $optioncount++; - } - } - - if(isset($lengtherror)) - { - error($lang->error_polloptiontoolong); - } - - if(isset($sequenceerror)) - { - error($lang->error_polloptionsequence); - } - - $mybb->input['question'] = $mybb->get_input('question'); - - if(trim($mybb->input['question']) == '' || $optioncount < 2) - { - error($lang->error_noquestionoptions); - } - - $optionslist = ''; - $voteslist = ''; - for($i = 1; $i <= $polloptions; ++$i) - { - if(trim($options[$i]) != '') - { - if($optionslist != '') - { - $optionslist .= '||~|~||'; - $voteslist .= '||~|~||'; - } - $optionslist .= trim($options[$i]); - $voteslist .= '0'; - } - } - - if($mybb->get_input('timeout', MyBB::INPUT_INT) > 0) - { - $timeout = $mybb->get_input('timeout', MyBB::INPUT_INT); - } - else - { - $timeout = 0; - } - - if($mybb->get_input('maxoptions', MyBB::INPUT_INT) > 0 && $mybb->get_input('maxoptions', MyBB::INPUT_INT) < $polloptions) - { - $maxoptions = $mybb->get_input('maxoptions', MyBB::INPUT_INT); - } - else - { - $maxoptions = 0; - } - - $newpoll = array( - "tid" => $thread['tid'], - "question" => $db->escape_string($mybb->input['question']), - "dateline" => TIME_NOW, - "options" => $db->escape_string($optionslist), - "votes" => $db->escape_string($voteslist), - "numoptions" => (int)$optioncount, - "numvotes" => 0, - "timeout" => $timeout, - "closed" => 0, - "multiple" => $postoptions['multiple'], - "public" => $postoptions['public'], - "maxoptions" => $maxoptions - ); - - $plugins->run_hooks("polls_do_newpoll_process"); - - $pid = $db->insert_query("polls", $newpoll); - - $db->update_query("threads", array('poll' => $pid), "tid='".$thread['tid']."'"); - - $plugins->run_hooks("polls_do_newpoll_end"); - - if($thread['visible'] == 1) - { - redirect(get_thread_link($thread['tid']), $lang->redirect_pollposted); - } - else - { - redirect(get_forum_link($thread['fid']), $lang->redirect_pollpostedmoderated); - } -} - -if($mybb->input['action'] == "editpoll") -{ - $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - - $plugins->run_hooks("polls_editpoll_start"); - - $query = $db->simple_select("polls", "*", "pid='$pid'"); - $poll = $db->fetch_array($query); - - if(!$poll) - { - error($lang->error_invalidpoll); - } - - $query = $db->simple_select("threads", "*", "poll='$pid'"); - $thread = $db->fetch_array($query); - if(!$thread) - { - error($lang->error_invalidthread); - } - - $tid = $thread['tid']; - $fid = $thread['fid']; - - // Make navigation - build_forum_breadcrumb($fid); - add_breadcrumb(htmlspecialchars_uni($thread['subject']), get_thread_link($thread['tid'])); - add_breadcrumb($lang->nav_editpoll); - - $forumpermissions = forum_permissions($fid); - - // Get forum info - $forum = get_forum($fid); - if(!$forum) - { - error($lang->error_invalidforum); - } - else - { - // Is our forum closed? - if($forum['open'] == 0 && !is_moderator($fid, "canmanagepolls")) - { - // Doesn't look like it is - error($lang->error_closedinvalidforum); - } - } - - if(!is_moderator($fid, "canmanagepolls")) - { - error_no_permission(); - } - - $postoptionschecked = array('closed' => '', 'multiple' => '', 'public' => ''); - - $polldate = my_date($mybb->settings['dateformat'], $poll['dateline']); - if(empty($mybb->input['updateoptions'])) - { - if($poll['closed'] == 1) - { - $postoptionschecked['closed'] = 'checked="checked"'; - } - - if($poll['multiple'] == 1) - { - $postoptionschecked['multiple'] = 'checked="checked"'; - } - - if($poll['public'] == 1) - { - $postoptionschecked['public'] = 'checked="checked"'; - } - - $optionsarray = explode("||~|~||", $poll['options']); - $votesarray = explode("||~|~||", $poll['votes']); - - $poll['totvotes'] = 0; - for($i = 1; $i <= $poll['numoptions']; ++$i) - { - $poll['totvotes'] = $poll['totvotes'] + $votesarray[$i-1]; - } - - $question = htmlspecialchars_uni($poll['question']); - $numoptions = $poll['numoptions']; - $optionbits = ""; - for($i = 0; $i < $numoptions; ++$i) - { - $counter = $i + 1; - $option = $optionsarray[$i]; - $option = htmlspecialchars_uni($option); - $optionvotes = (int)$votesarray[$i]; - - if(!$optionvotes) - { - $optionvotes = 0; - } - - eval("\$optionbits .= \"".$templates->get("polls_editpoll_option")."\";"); - $option = ""; - $optionvotes = ""; - } - - if(!$poll['timeout']) - { - $timeout = 0; - } - else - { - $timeout = $poll['timeout']; - } - - if(!$poll['maxoptions']) - { - $maxoptions = 0; - } - else - { - $maxoptions = $poll['maxoptions']; - } - } - else - { - if($mybb->settings['maxpolloptions'] && $mybb->get_input('numoptions', MyBB::INPUT_INT) > $mybb->settings['maxpolloptions']) - { - $numoptions = $mybb->settings['maxpolloptions']; - } - elseif($mybb->get_input('numoptions', MyBB::INPUT_INT) < 2) - { - $numoptions = 2; - } - else - { - $numoptions = $mybb->get_input('numoptions', MyBB::INPUT_INT); - } - $question = htmlspecialchars_uni($mybb->input['question']); - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(isset($postoptions['multiple']) && $postoptions['multiple'] == 1) - { - $postoptionschecked['multiple'] = 'checked="checked"'; - } - - if(isset($postoptions['public']) && $postoptions['public'] == 1) - { - $postoptionschecked['public'] = 'checked="checked"'; - } - - if(isset($postoptions['closed']) && $postoptions['closed'] == 1) - { - $postoptionschecked['closed'] = 'checked="checked"'; - } - - $options = $mybb->get_input('options', MyBB::INPUT_ARRAY); - $votes = $mybb->get_input('votes', MyBB::INPUT_ARRAY); - $optionbits = ''; - for($i = 1; $i <= $numoptions; ++$i) - { - $counter = $i; - if(!isset($options[$i])) - { - $options[$i] = ''; - } - $option = htmlspecialchars_uni($options[$i]); - if(!isset($votes[$i])) - { - $votes[$i] = 0; - } - $optionvotes = (int)$votes[$i]; - - if(!$optionvotes) - { - $optionvotes = 0; - } - - eval("\$optionbits .= \"".$templates->get("polls_editpoll_option")."\";"); - $option = ""; - } - - if($mybb->get_input('timeout', MyBB::INPUT_INT) > 0) - { - $timeout = $mybb->get_input('timeout', MyBB::INPUT_INT); - } - else - { - $timeout = 0; - } - - if(!$poll['maxoptions']) - { - $maxoptions = 0; - } - else - { - $maxoptions = $poll['maxoptions']; - } - } - - $plugins->run_hooks("polls_editpoll_end"); - - eval("\$editpoll = \"".$templates->get("polls_editpoll")."\";"); - output_page($editpoll); -} - -if($mybb->input['action'] == "do_editpoll" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("polls_do_editpoll_start"); - - $query = $db->simple_select("polls", "*", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $poll = $db->fetch_array($query); - - if(!$poll) - { - error($lang->error_invalidpoll); - } - - $query = $db->simple_select("threads", "*", "poll='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $thread = $db->fetch_array($query); - if(!$thread) - { - error($lang->error_invalidthread); - } - - $forumpermissions = forum_permissions($thread['fid']); - - // Get forum info - $forum = get_forum($thread['fid']); - $fid = $thread['fid']; - if(!$forum) - { - error($lang->error_invalidforum); - } - else - { - // Is our forum closed? - if($forum['open'] == 0 && !is_moderator($fid, "canmanagepolls")) - { - // Doesn't look like it is - error($lang->error_closedinvalidforum); - } - } - - if(!is_moderator($thread['fid'], "canmanagepolls")) - { - error_no_permission(); - } - - if($mybb->settings['maxpolloptions'] && $mybb->get_input('numoptions', MyBB::INPUT_INT) > $mybb->settings['maxpolloptions']) - { - $numoptions = $mybb->settings['maxpolloptions']; - } - elseif($mybb->get_input('numoptions', MyBB::INPUT_INT) < 2) - { - $numoptions = 2; - } - else - { - $numoptions = $mybb->get_input('numoptions', MyBB::INPUT_INT); - } - - $postoptions = $mybb->get_input('postoptions', MyBB::INPUT_ARRAY); - if(!isset($postoptions['multiple']) || $postoptions['multiple'] != '1') - { - $postoptions['multiple'] = 0; - } - - if(!isset($postoptions['public']) || $postoptions['public'] != '1') - { - $postoptions['public'] = 0; - } - - if(!isset($postoptions['closed']) || $postoptions['closed'] != '1') - { - $postoptions['closed'] = 0; - } - $optioncount = "0"; - $options = $mybb->input['options']; - - for($i = 1; $i <= $numoptions; ++$i) - { - if(!isset($options[$i])) - { - $options[$i] = ''; - } - - if($mybb->settings['polloptionlimit'] != 0 && my_strlen($options[$i]) > $mybb->settings['polloptionlimit']) - { - $lengtherror = 1; - break; - } - - if(strpos($options[$i], '||~|~||') !== false) - { - $sequenceerror = 1; - break; - } - - if(trim($options[$i]) != "") - { - $optioncount++; - } - } - - if(isset($lengtherror)) - { - error($lang->error_polloptiontoolong); - } - - if(isset($sequenceerror)) - { - error($lang->error_polloptionsequence); - } - - $mybb->input['question'] = $mybb->get_input('question'); - if(trim($mybb->input['question']) == '' || $optioncount < 2) - { - error($lang->error_noquestionoptions); - } - - $optionslist = ''; - $voteslist = ''; - $numvotes = ''; - $votes = $mybb->input['votes']; - for($i = 1; $i <= $numoptions; ++$i) - { - if(trim($options[$i]) != '') - { - if($optionslist != '') - { - $optionslist .= "||~|~||"; - $voteslist .= "||~|~||"; - } - - $optionslist .= trim($options[$i]); - if(!isset($votes[$i]) || (int)$votes[$i] <= 0) - { - $votes[$i] = "0"; - } - $voteslist .= $votes[$i]; - $numvotes = $numvotes + $votes[$i]; - } - } - - if($mybb->get_input('timeout', MyBB::INPUT_INT) > 0) - { - $timeout = $mybb->get_input('timeout', MyBB::INPUT_INT); - } - else - { - $timeout = 0; - } - - if($mybb->get_input('maxoptions', MyBB::INPUT_INT) > 0 && $mybb->get_input('maxoptions', MyBB::INPUT_INT) < $numoptions) - { - $maxoptions = $mybb->get_input('maxoptions', MyBB::INPUT_INT); - } - else - { - $maxoptions = 0; - } - - $updatedpoll = array( - "question" => $db->escape_string($mybb->input['question']), - "options" => $db->escape_string($optionslist), - "votes" => $db->escape_string($voteslist), - "numoptions" => (int)$optioncount, - "numvotes" => $numvotes, - "timeout" => $timeout, - "closed" => $postoptions['closed'], - "multiple" => $postoptions['multiple'], - "public" => $postoptions['public'], - "maxoptions" => $maxoptions - ); - - $plugins->run_hooks("polls_do_editpoll_process"); - - $db->update_query("polls", $updatedpoll, "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - - $plugins->run_hooks("polls_do_editpoll_end"); - - $modlogdata['fid'] = $thread['fid']; - $modlogdata['tid'] = $thread['tid']; - log_moderator_action($modlogdata, $lang->poll_edited); - - redirect(get_thread_link($thread['tid']), $lang->redirect_pollupdated); -} - -if($mybb->input['action'] == "showresults") -{ - $query = $db->simple_select("polls", "*", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $poll = $db->fetch_array($query); - - if(!$poll) - { - error($lang->error_invalidpoll); - } - - $tid = $poll['tid']; - $thread = get_thread($tid); - if(!$thread) - { - error($lang->error_invalidthread); - } - - $fid = $thread['fid']; - - // Get forum info - $forum = get_forum($fid); - if(!$forum) - { - error($lang->error_invalidforum); - } - - $forumpermissions = forum_permissions($forum['fid']); - - $plugins->run_hooks("polls_showresults_start"); - - if($forumpermissions['canviewthreads'] == 0 || $forumpermissions['canview'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid'])) - { - error_no_permission(); - } - - // Make navigation - build_forum_breadcrumb($fid); - add_breadcrumb(htmlspecialchars_uni($thread['subject']), get_thread_link($thread['tid'])); - add_breadcrumb($lang->nav_pollresults); - - $voters = $votedfor = array(); - - // Calculate votes - $query = $db->query(" - SELECT v.*, u.username - FROM ".TABLE_PREFIX."pollvotes v - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=v.uid) - WHERE v.pid='{$poll['pid']}' - ORDER BY u.username - "); - while($voter = $db->fetch_array($query)) - { - // Mark for current user's vote - if($mybb->user['uid'] == $voter['uid'] && $mybb->user['uid']) - { - $votedfor[$voter['voteoption']] = 1; - } - - // Count number of guests and users without a username (assumes they've been deleted) - if($voter['uid'] == 0 || $voter['username'] == '') - { - // Add one to the number of voters for guests - ++$guest_voters[$voter['voteoption']]; - } - else - { - $voters[$voter['voteoption']][$voter['uid']] = htmlspecialchars_uni($voter['username']); - } - } - - $optionsarray = explode("||~|~||", $poll['options']); - $votesarray = explode("||~|~||", $poll['votes']); - $poll['totvotes'] = 0; - for($i = 1; $i <= $poll['numoptions']; ++$i) - { - $poll['totvotes'] = $poll['totvotes'] + $votesarray[$i-1]; - } - - $polloptions = ''; - for($i = 1; $i <= $poll['numoptions']; ++$i) - { - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "filter_badwords" => 1 - ); - $option = $parser->parse_message($optionsarray[$i-1], $parser_options); - - $votes = $votesarray[$i-1]; - $number = $i; - // Make the mark for current user's voted option - if(!empty($votedfor[$number])) - { - $optionbg = 'trow2'; - $votestar = '*'; - } - else - { - $optionbg = 'trow1'; - $votestar = ''; - } - - if($votes == 0) - { - $percent = 0; - } - else - { - $percent = number_format($votes / $poll['totvotes'] * 100, 2); - } - - $imagewidth = round($percent); - $comma = ''; - $guest_comma = ''; - $userlist = ''; - $guest_count = 0; - if($poll['public'] == 1 || is_moderator($fid, "canmanagepolls")) - { - if(isset($voters[$number]) && is_array($voters[$number])) - { - foreach($voters[$number] as $uid => $username) - { - $userlist .= $comma.build_profile_link($username, $uid); - $comma = $guest_comma = $lang->comma; - } - } - - if(isset($guest_voters[$number]) && $guest_voters[$number] > 0) - { - if($guest_voters[$number] == 1) - { - $userlist .= $guest_comma.$lang->guest_count; - } - else - { - $userlist .= $guest_comma.$lang->sprintf($lang->guest_count_multiple, $guest_voters[$number]); - } - } - } - eval("\$polloptions .= \"".$templates->get("polls_showresults_resultbit")."\";"); - } - - if($poll['totvotes']) - { - $totpercent = '100%'; - } - else - { - $totpercent = '0%'; - } - - $plugins->run_hooks("polls_showresults_end"); - - $poll['question'] = htmlspecialchars_uni($poll['question']); - eval("\$showresults = \"".$templates->get("polls_showresults")."\";"); - output_page($showresults); -} -if($mybb->input['action'] == "vote" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $query = $db->simple_select("polls", "*", "pid='".$mybb->get_input('pid')."'"); - $poll = $db->fetch_array($query); - - if(!$poll) - { - error($lang->error_invalidpoll); - } - - $plugins->run_hooks("polls_vote_start"); - - $poll['timeout'] = $poll['timeout']*60*60*24; - - $query = $db->simple_select("threads", "*", "poll='".(int)$poll['pid']."'"); - $thread = $db->fetch_array($query); - - if(!$thread || $thread['visible'] == 0) - { - error($lang->error_invalidthread); - } - - $fid = $thread['fid']; - $forumpermissions = forum_permissions($fid); - if($forumpermissions['canvotepolls'] == 0) - { - error_no_permission(); - } - - // Get forum info - $forum = get_forum($fid); - if(!$forum) - { - error($lang->error_invalidforum); - } - else - { - // Is our forum closed? - if($forum['open'] == 0) - { - // Doesn't look like it is - error($lang->error_closedinvalidforum); - } - } - - $expiretime = $poll['dateline'] + $poll['timeout']; - $now = TIME_NOW; - if($poll['closed'] == 1 || $thread['closed'] == 1 || ($expiretime < $now && $poll['timeout'])) - { - error($lang->error_pollclosed); - } - - if(!isset($mybb->input['option'])) - { - error($lang->error_nopolloptions); - } - - // Check if the user has voted before... - if($mybb->user['uid']) - { - $query = $db->simple_select("pollvotes", "*", "uid='".$mybb->user['uid']."' AND pid='".$poll['pid']."'"); - $votecheck = $db->fetch_array($query); - } - - if($votecheck['vid'] || (isset($mybb->cookies['pollvotes'][$poll['pid']]) && $mybb->cookies['pollvotes'][$poll['pid']] !== "")) - { - error($lang->error_alreadyvoted); - } - elseif(!$mybb->user['uid']) - { - // Give a cookie to guests to inhibit revotes - if(is_array($mybb->input['option'])) - { - // We have multiple options here... - $votes_cookie = implode(',', array_keys($mybb->input['option'])); - } - else - { - $votes_cookie = $mybb->input['option']; - } - - my_setcookie("pollvotes[{$poll['pid']}]", $votes_cookie); - } - - $votesql = ''; - $now = TIME_NOW; - $votesarray = explode("||~|~||", $poll['votes']); - $option = $mybb->input['option']; - $numvotes = (int)$poll['numvotes']; - if($poll['multiple'] == 1) - { - if(is_array($option)) - { - $total_options = 0; - - foreach($option as $voteoption => $vote) - { - if($vote == 1 && isset($votesarray[$voteoption-1])) - { - if($votesql) - { - $votesql .= ","; - } - $votesql .= "('".$poll['pid']."','".$mybb->user['uid']."','".$db->escape_string($voteoption)."','$now')"; - $votesarray[$voteoption-1]++; - $numvotes = $numvotes+1; - $total_options++; - } - } - - if($total_options > $poll['maxoptions'] && $poll['maxoptions'] != 0) - { - error($lang->sprintf($lang->error_maxpolloptions, $poll['maxoptions'])); - } - } - } - else - { - if(is_array($option) || !isset($votesarray[$option-1])) - { - error($lang->error_nopolloptions); - } - $votesql = "('".$poll['pid']."','".$mybb->user['uid']."','".$db->escape_string($option)."','$now')"; - $votesarray[$option-1]++; - $numvotes = $numvotes+1; - } - - if(!$votesql) - { - error($lang->error_nopolloptions); - } - - $db->write_query(" - INSERT INTO - ".TABLE_PREFIX."pollvotes (pid,uid,voteoption,dateline) - VALUES $votesql - "); - $voteslist = ''; - for($i = 1; $i <= $poll['numoptions']; ++$i) - { - if($i > 1) - { - $voteslist .= "||~|~||"; - } - $voteslist .= $votesarray[$i-1]; - } - $updatedpoll = array( - "votes" => $db->escape_string($voteslist), - "numvotes" => (int)$numvotes, - ); - - $plugins->run_hooks("polls_vote_process"); - - $db->update_query("polls", $updatedpoll, "pid='".$poll['pid']."'"); - - $plugins->run_hooks("polls_vote_end"); - - redirect(get_thread_link($poll['tid']), $lang->redirect_votethanks); -} - -if($mybb->input['action'] == "do_undovote") -{ - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canundovotes'] != 1) - { - error_no_permission(); - } - - $query = $db->simple_select("polls", "*", "pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $poll = $db->fetch_array($query); - - if(!$poll['pid']) - { - error($lang->error_invalidpoll); - } - - $plugins->run_hooks("polls_do_undovote_start"); - - $poll['numvotes'] = (int)$poll['numvotes']; - - // We do not have $forum_cache available here since no forums permissions are checked in undo vote - // Get thread ID and then get forum info - $thread = get_thread($poll['tid']); - if(!$thread || $thread['visible'] == 0) - { - error($lang->error_invalidthread); - } - - $fid = $thread['fid']; - - // Get forum info - $forum = get_forum($fid); - if(!$forum) - { - error($lang->error_invalidforum); - } - else - { - // Is our forum closed? - if($forum['open'] == 0) - { - // Doesn't look like it is - error($lang->error_closedinvalidforum); - } - } - - $poll['timeout'] = $poll['timeout']*60*60*24; - - - $expiretime = $poll['dateline'] + $poll['timeout']; - if($poll['closed'] == 1 || $thread['closed'] == 1 || ($expiretime < TIME_NOW && $poll['timeout'])) - { - error($lang->error_pollclosed); - } - - // Check if the user has voted before... - $vote_options = array(); - if($mybb->user['uid']) - { - $query = $db->simple_select("pollvotes", "vid,voteoption", "uid='".$mybb->user['uid']."' AND pid='".$poll['pid']."'"); - while($voteoption = $db->fetch_array($query)) - { - $vote_options[$voteoption['vid']] = $voteoption['voteoption']; - } - } - elseif(isset($mybb->cookies['pollvotes'][$poll['pid']])) - { - // for Guests, we simply see if they've got the cookie - $vote_options = explode(',', $mybb->cookies['pollvotes'][$poll['pid']]); - } - - if(empty($vote_options)) - { - error($lang->error_notvoted); - } - else if(!$mybb->user['uid']) - { - // clear cookie for Guests - my_setcookie("pollvotes[{$poll['pid']}]", ""); - } - - // Note, this is not thread safe! - $votesarray = explode("||~|~||", $poll['votes']); - if(count($votesarray) > $poll['numoptions']) - { - $votesarray = array_slice(0, $poll['numoptions']); - } - - if($poll['multiple'] == 1) - { - foreach($vote_options as $vote) - { - if(isset($votesarray[$vote-1])) - { - --$votesarray[$vote-1]; - --$poll['numvotes']; - } - } - } - else - { - $voteoption = reset($vote_options); - if(isset($votesarray[$voteoption-1])) - { - --$votesarray[$voteoption-1]; - --$poll['numvotes']; - } - } - - // check if anything < 0 - possible if Guest vote undoing is allowed (generally Guest unvoting should be disabled >_>) - if($poll['numvotes'] < 0) - { - $poll['numvotes'] = 0; - } - - foreach($votesarray as $i => $votes) - { - if($votes < 0) - { - $votesarray[$i] = 0; - } - } - - $voteslist = implode("||~|~||", $votesarray); - $updatedpoll = array( - "votes" => $db->escape_string($voteslist), - "numvotes" => (int)$poll['numvotes'], - ); - - $plugins->run_hooks("polls_do_undovote_process"); - - $db->delete_query("pollvotes", "uid='".$mybb->user['uid']."' AND pid='".$poll['pid']."'"); - $db->update_query("polls", $updatedpoll, "pid='".$poll['pid']."'"); - - $plugins->run_hooks("polls_do_undovote_end"); - - redirect(get_thread_link($poll['tid']), $lang->redirect_unvoted); -} - diff --git a/html/forums/portal.php b/html/forums/portal.php deleted file mode 100644 index 8c40890..0000000 --- a/html/forums/portal.php +++ /dev/null @@ -1,712 +0,0 @@ -load("portal"); - -if($mybb->settings['portal'] == 0) -{ - error($lang->portal_disabled); -} - -// Fetch the current URL -$portal_url = get_current_location(); -$file_name = strtok(my_strtolower(basename($portal_url)), '?'); - -add_breadcrumb($lang->nav_portal, $file_name); - -$plugins->run_hooks("portal_start"); - -$tunviewwhere = $unviewwhere = ''; -// get forums user cannot view -$unviewable = get_unviewable_forums(true); -if($unviewable) -{ - $unviewwhere = " AND fid NOT IN ($unviewable)"; - $tunviewwhere = " AND t.fid NOT IN ($unviewable)"; -} - -// get inactive forums -$inactive = get_inactive_forums(); -if($inactive) -{ - $unviewwhere .= " AND fid NOT IN ($inactive)"; - $tunviewwhere .= " AND t.fid NOT IN ($inactive)"; -} - -$mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); - -$welcome = ''; -// If user is known, welcome them -if($mybb->settings['portal_showwelcome'] != 0) -{ - if($mybb->user['uid'] != 0) - { - // Get number of new posts, threads, announcements - $query = $db->simple_select("posts", "COUNT(pid) AS newposts", "visible=1 AND dateline>'".$mybb->user['lastvisit']."'{$unviewwhere}"); - $newposts = $db->fetch_field($query, "newposts"); - if($newposts) - { - // If there aren't any new posts, there is no point in wasting two more queries - $query = $db->simple_select("threads", "COUNT(tid) AS newthreads", "visible=1 AND dateline>'".$mybb->user['lastvisit']."'{$unviewwhere}"); - $newthreads = $db->fetch_field($query, "newthreads"); - - $newann = 0; - if(!empty($mybb->settings['portal_announcementsfid'])) - { - $annfidswhere = ''; - if($mybb->settings['portal_announcementsfid'] != -1) - { - $announcementsfids = explode(',', (string)$mybb->settings['portal_announcementsfid']); - if(is_array($announcementsfids)) - { - foreach($announcementsfids as &$fid) - { - $fid = (int)$fid; - } - unset($fid); - - $announcementsfids = implode(',', $announcementsfids); - - $annfidswhere = " AND fid IN (".$announcementsfids.")"; - } - } - - $query = $db->simple_select("threads", "COUNT(tid) AS newann", "visible=1 AND dateline>'".$mybb->user['lastvisit']."'{$annfidswhere}{$unviewwhere}"); - $newann = $db->fetch_field($query, "newann"); - } - } - else - { - $newposts = 0; - $newthreads = 0; - $newann = 0; - } - - // Make the text - if($newann == 1) - { - $lang->new_announcements = $lang->new_announcement; - } - else - { - $lang->new_announcements = $lang->sprintf($lang->new_announcements, $newann); - } - if($newthreads == 1) - { - $lang->new_threads = $lang->new_thread; - } - else - { - $lang->new_threads = $lang->sprintf($lang->new_threads, $newthreads); - } - if($newposts == 1) - { - $lang->new_posts = $lang->new_post; - } - else - { - $lang->new_posts = $lang->sprintf($lang->new_posts, $newposts); - } - eval("\$welcometext = \"".$templates->get("portal_welcome_membertext")."\";"); - - } - else - { - $lang->guest_welcome_registration = $lang->sprintf($lang->guest_welcome_registration, $mybb->settings['bburl'].'/member.php?action=register'); - $mybb->user['username'] = $lang->guest; - switch($mybb->settings['username_method']) - { - case 0: - $username = $lang->username; - break; - case 1: - $username = $lang->username1; - break; - case 2: - $username = $lang->username2; - break; - default: - $username = $lang->username; - break; - } - eval("\$welcometext = \"".$templates->get("portal_welcome_guesttext")."\";"); - } - $lang->welcome = $lang->sprintf($lang->welcome, $mybb->user['username']); - eval("\$welcome = \"".$templates->get("portal_welcome")."\";"); -} - -$pms = ''; -// Private messages box -if($mybb->settings['portal_showpms'] != 0) -{ - if($mybb->user['uid'] != 0 && $mybb->user['receivepms'] != 0 && $mybb->usergroup['canusepms'] != 0 && $mybb->settings['enablepms'] != 0) - { - $messages['pms_total'] = $mybb->user['pms_total']; - $messages['pms_unread'] = $mybb->user['pms_unread']; - - $lang->pms_received_new = $lang->sprintf($lang->pms_received_new, $mybb->user['username'], $messages['pms_unread']); - eval("\$pms = \"".$templates->get("portal_pms")."\";"); - } -} - -$stats = ''; -// Get Forum Statistics -if($mybb->settings['portal_showstats'] != 0) -{ - $stats = $cache->read("stats"); - $stats['numthreads'] = my_number_format($stats['numthreads']); - $stats['numposts'] = my_number_format($stats['numposts']); - $stats['numusers'] = my_number_format($stats['numusers']); - if(!$stats['lastusername']) - { - eval("\$newestmember = \"".$templates->get("portal_stats_nobody")."\";"); - } - else - { - $newestmember = build_profile_link($stats['lastusername'], $stats['lastuid']); - } - eval("\$stats = \"".$templates->get("portal_stats")."\";"); -} - -$search = ''; -// Search box -if($mybb->settings['portal_showsearch'] != 0) -{ - eval("\$search = \"".$templates->get("portal_search")."\";"); -} - -$whosonline = ''; -// Get the online users -if($mybb->settings['portal_showwol'] != 0 && $mybb->usergroup['canviewonline'] != 0) -{ - if($mybb->settings['wolorder'] == 'username') - { - $order_by = 'u.username ASC'; - $order_by2 = 's.time DESC'; - } - else - { - $order_by = 's.time DESC'; - $order_by2 = 'u.username ASC'; - } - - $timesearch = TIME_NOW - $mybb->settings['wolcutoff']; - $comma = ''; - $guestcount = $membercount = $botcount = $anoncount = 0; - $onlinemembers = ''; - $doneusers = array(); - $query = $db->query(" - SELECT s.sid, s.ip, s.uid, s.time, s.location, u.username, u.invisible, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."sessions s - LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid) - WHERE s.time>'$timesearch' - ORDER BY {$order_by}, {$order_by2} - "); - while($user = $db->fetch_array($query)) - { - - // Create a key to test if this user is a search bot. - $botkey = my_strtolower(str_replace("bot=", '', $user['sid'])); - - if($user['uid'] == "0") - { - ++$guestcount; - } - elseif(my_strpos($user['sid'], "bot=") !== false && $session->bots[$botkey]) - { - // The user is a search bot. - $onlinemembers .= $comma.format_name($session->bots[$botkey], $session->botgroup); - $comma = $lang->comma; - ++$botcount; - } - else - { - if(empty($doneusers[$user['uid']]) || $doneusers[$user['uid']] < $user['time']) - { - ++$membercount; - - $doneusers[$user['uid']] = $user['time']; - - // If the user is logged in anonymously, update the count for that. - if($user['invisible'] == 1) - { - ++$anoncount; - } - - if($user['invisible'] == 1) - { - $invisiblemark = "*"; - } - else - { - $invisiblemark = ''; - } - - if(($user['invisible'] == 1 && ($mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid'])) || $user['invisible'] != 1) - { - $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); - $user['profilelink'] = get_profile_link($user['uid']); - eval("\$onlinemembers .= \"".$templates->get("portal_whosonline_memberbit", 1, 0)."\";"); - $comma = $lang->comma; - } - } - } - } - - $onlinecount = $membercount + $guestcount + $botcount; - - // If we can see invisible users add them to the count - if($mybb->usergroup['canviewwolinvis'] == 1) - { - $onlinecount += $anoncount; - } - - // If we can't see invisible users but the user is an invisible user incriment the count by one - if($mybb->usergroup['canviewwolinvis'] != 1 && isset($mybb->user['invisible']) && $mybb->user['invisible'] == 1) - { - ++$onlinecount; - } - - // Most users online - $mostonline = $cache->read("mostonline"); - if($onlinecount > $mostonline['numusers']) - { - $time = TIME_NOW; - $mostonline['numusers'] = $onlinecount; - $mostonline['time'] = $time; - $cache->update("mostonline", $mostonline); - } - $recordcount = $mostonline['numusers']; - $recorddate = my_date('relative', $mostonline['time']); - - if($onlinecount == 1) - { - $lang->online_users = $lang->online_user; - } - else - { - $lang->online_users = $lang->sprintf($lang->online_users, $onlinecount); - } - $lang->online_counts = $lang->sprintf($lang->online_counts, $membercount, $guestcount); - eval("\$whosonline = \"".$templates->get("portal_whosonline")."\";"); -} - -$latestthreads = ''; -// Latest forum discussions -if($mybb->settings['portal_showdiscussions'] != 0 && $mybb->settings['portal_showdiscussionsnum'] && $mybb->settings['portal_excludediscussion'] != -1) -{ - $altbg = alt_trow(); - $threadlist = ''; - - $excludeforums = ''; - if(!empty($mybb->settings['portal_excludediscussion'])) - { - $excludeforums = "AND t.fid NOT IN ({$mybb->settings['portal_excludediscussion']})"; - } - - $query = $db->query(" - SELECT t.tid, t.fid, t.uid, t.lastpost, t.lastposteruid, t.lastposter, t.subject, t.replies, t.views, u.username - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=t.uid) - WHERE 1=1 {$excludeforums}{$tunviewwhere} AND t.visible='1' AND t.closed NOT LIKE 'moved|%' - ORDER BY t.lastpost DESC - LIMIT 0, ".$mybb->settings['portal_showdiscussionsnum'] - ); - while($thread = $db->fetch_array($query)) - { - $forumpermissions[$thread['fid']] = forum_permissions($thread['fid']); - - // Make sure we can view this thread - if(isset($forumpermissions[$thread['fid']]['canonlyviewownthreads']) && $forumpermissions[$thread['fid']]['canonlyviewownthreads'] == 1 && $thread['uid'] != $mybb->user['uid']) - { - continue; - } - - $lastpostdate = my_date('relative', $thread['lastpost']); - $lastposter = htmlspecialchars_uni($thread['lastposter']); - $thread['replies'] = my_number_format($thread['replies']); - $thread['views'] = my_number_format($thread['views']); - - // Don't link to guest's profiles (they have no profile). - if($thread['lastposteruid'] == 0) - { - $lastposterlink = $lastposter; - } - else - { - $lastposterlink = build_profile_link($lastposter, $thread['lastposteruid']); - } - - $thread['subject'] = $thread['fullsubject'] = $parser->parse_badwords($thread['subject']); - if(my_strlen($thread['subject']) > 25) - { - $thread['subject'] = my_substr($thread['subject'], 0, 25) . "..."; - } - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - $thread['fullsubject'] = htmlspecialchars_uni($thread['fullsubject']); - - $thread['threadlink'] = get_thread_link($thread['tid']); - $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); - $thread['forumlink'] = get_forum_link($thread['fid']); - $thread['forumname'] = $forum_cache[$thread['fid']]['name']; - eval("\$threadlist .= \"".$templates->get("portal_latestthreads_thread")."\";"); - $altbg = alt_trow(); - } - if($threadlist) - { - // Show the table only if there are threads - eval("\$latestthreads = \"".$templates->get("portal_latestthreads")."\";"); - } -} - -$announcements = ''; -if(!empty($mybb->settings['portal_announcementsfid'])) -{ - // Get latest news announcements - // Build where clause - $annfidswhere = ''; - $announcementcount = 0; - if($mybb->settings['portal_announcementsfid'] != -1) - { - // First validate announcement fids: - $announcementsfids = explode(',', (string)$mybb->settings['portal_announcementsfid']); - if(is_array($announcementsfids)) - { - foreach($announcementsfids as $fid) - { - $fid_array[] = (int)$fid; - } - unset($fid); - - $announcementsfids = implode(',', $fid_array); - - $annfidswhere = " AND t.fid IN ($announcementsfids)"; - } - } - - // And get them! - foreach($forum_cache as $fid => $f) - { - if(empty($fid_array) || (is_array($fid_array) && in_array($fid, $fid_array))) - { - $forum[$fid] = $f; - } - } - - $query = $db->simple_select("threads t", "COUNT(t.tid) AS threads", "t.visible='1'{$annfidswhere}{$tunviewwhere} AND t.closed NOT LIKE 'moved|%'", array('limit' => 1)); - $announcementcount = $db->fetch_field($query, "threads"); - - $numannouncements = (int)$mybb->settings['portal_numannouncements']; - if(!$numannouncements) - { - $numannouncements = 10; // Default back to 10 - } - - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $pages = $announcementcount / $numannouncements; - $pages = ceil($pages); - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $numannouncements; - } - else - { - $start = 0; - $page = 1; - } - - $multipage = multipage($announcementcount, $numannouncements, $page, $file_name); - - $pids = ''; - $tids = ''; - $comma = ''; - $posts = array(); - $attachmentcount = array(); - $query = $db->query(" - SELECT p.pid, p.message, p.tid, p.smilieoff, t.attachmentcount - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE t.visible='1'{$annfidswhere}{$tunviewwhere} AND t.closed NOT LIKE 'moved|%' AND t.firstpost=p.pid - ORDER BY t.dateline DESC - LIMIT {$start}, {$numannouncements}" - ); - while($getid = $db->fetch_array($query)) - { - $attachmentcount[$getid['tid']] = $getid['attachmentcount']; - foreach($attachmentcount as $tid => $attach_count) - { - if($attach_count > 0) - { - $pids .= ",'{$getid['pid']}'"; - } - - $posts[$getid['tid']] = $getid; - } - - $tids .= ",'{$getid['tid']}'"; - } - if(!empty($posts)) - { - if($pids != '' && $mybb->settings['enableattachments'] == 1) - { - $pids = "pid IN(0{$pids})"; - // Now lets fetch all of the attachments for these posts - $query = $db->simple_select("attachments", "*", $pids); - while($attachment = $db->fetch_array($query)) - { - $attachcache[$attachment['pid']][$attachment['aid']] = $attachment; - } - } - - if(is_array($forum)) - { - foreach($forum as $fid => $forumrow) - { - $forumpermissions[$fid] = forum_permissions($fid); - } - } - - $icon_cache = $cache->read("posticons"); - - $query = $db->query(" - SELECT t.*, t.username AS threadusername, u.username, u.avatar, u.avatardimensions - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) - WHERE t.tid IN (0{$tids}){$annfidswhere}{$tunviewwhere} AND t.visible='1' AND t.closed NOT LIKE 'moved|%' - ORDER BY t.dateline DESC - LIMIT 0, {$numannouncements}" - ); - while($announcement = $db->fetch_array($query)) - { - // Make sure we can view this announcement - if(isset($forumpermissions[$announcement['fid']]['canonlyviewownthreads']) && $forumpermissions[$announcement['fid']]['canonlyviewownthreads'] == 1 && $announcement['uid'] != $mybb->user['uid']) - { - continue; - } - - $announcement['message'] = $posts[$announcement['tid']]['message']; - $announcement['pid'] = $posts[$announcement['tid']]['pid']; - $announcement['smilieoff'] = $posts[$announcement['tid']]['smilieoff']; - $announcement['threadlink'] = get_thread_link($announcement['tid']); - $announcement['forumlink'] = get_forum_link($announcement['fid']); - $announcement['forumname'] = $forum_cache[$announcement['fid']]['name']; - - $announcement['username'] = htmlspecialchars_uni($announcement['username']); - $announcement['threadusername'] = htmlspecialchars_uni($announcement['threadusername']); - - if($announcement['uid'] == 0) - { - $profilelink = $announcement['threadusername']; - } - else - { - $profilelink = build_profile_link($announcement['username'], $announcement['uid']); - } - - if(!$announcement['username']) - { - $announcement['username'] = $announcement['threadusername']; - } - $announcement['subject'] = htmlspecialchars_uni($parser->parse_badwords($announcement['subject'])); - if($announcement['icon'] > 0 && $icon_cache[$announcement['icon']]) - { - $icon = $icon_cache[$announcement['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("portal_announcement_icon")."\";"); - } - else - { - $icon = " "; - } - - $useravatar = format_avatar($announcement['avatar'], $announcement['avatardimensions']); - eval("\$avatar = \"".$templates->get("portal_announcement_avatar")."\";"); - - $anndate = my_date('relative', $announcement['dateline']); - - if($announcement['replies']) - { - eval("\$numcomments = \"".$templates->get("portal_announcement_numcomments")."\";"); - } - else - { - eval("\$numcomments = \"".$templates->get("portal_announcement_numcomments_no")."\";"); - $lastcomment = ''; - } - - $senditem = ''; - if($mybb->user['uid'] > 0 && $mybb->usergroup['cansendemail'] == 1) - { - eval("\$senditem = \"".$templates->get("portal_announcement_send_item")."\";"); - } - - $plugins->run_hooks("portal_announcement"); - - $parser_options = array( - "allow_html" => $forum[$announcement['fid']]['allowhtml'], - "allow_mycode" => $forum[$announcement['fid']]['allowmycode'], - "allow_smilies" => $forum[$announcement['fid']]['allowsmilies'], - "allow_imgcode" => $forum[$announcement['fid']]['allowimgcode'], - "allow_videocode" => $forum[$announcement['fid']]['allowvideocode'], - "filter_badwords" => 1 - ); - if($announcement['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_videocode'] = 0; - } - - $message = $parser->parse_message($announcement['message'], $parser_options); - - $post['attachments'] = ''; - if($mybb->settings['enableattachments'] == 1 && isset($attachcache[$announcement['pid']]) && is_array($attachcache[$announcement['pid']])) - { // This post has 1 or more attachments - $validationcount = 0; - $id = $announcement['pid']; - $post['attachmentlist'] = $post['thumblist'] = $post['imagelist'] = $post['attachedthumbs'] = $post['attachedimages'] = ''; - foreach($attachcache[$id] as $aid => $attachment) - { - if($attachment['visible']) - { // There is an attachment thats visible! - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - $attachment['filesize'] = get_friendly_size($attachment['filesize']); - $ext = get_extension($attachment['filename']); - if($ext == "jpeg" || $ext == "gif" || $ext == "bmp" || $ext == "png" || $ext == "jpg") - { - $isimage = true; - } - else - { - $isimage = false; - } - $attachment['icon'] = get_attachment_icon($ext); - // Support for [attachment=id] code - if(stripos($message, "[attachment=".$attachment['aid']."]") !== false) - { - if($attachment['thumbnail'] != "SMALL" && $attachment['thumbnail'] != '') - { // We have a thumbnail to show (and its not the "SMALL" enough image - eval("\$attbit = \"".$templates->get("postbit_attachments_thumbnails_thumbnail")."\";"); - } - elseif($attachment['thumbnail'] == "SMALL" && $forumpermissions[$announcement['fid']]['candlattachments'] == 1) - { - // Image is small enough to show - no thumbnail - eval("\$attbit = \"".$templates->get("postbit_attachments_images_image")."\";"); - } - else - { - // Show standard link to attachment - eval("\$attbit = \"".$templates->get("postbit_attachments_attachment")."\";"); - } - $message = preg_replace("#\[attachment=".$attachment['aid']."]#si", $attbit, $message); - } - else - { - if($attachment['thumbnail'] != "SMALL" && $attachment['thumbnail'] != '') - { // We have a thumbnail to show - eval("\$post['thumblist'] .= \"".$templates->get("postbit_attachments_thumbnails_thumbnail")."\";"); - if($tcount == 5) - { - $thumblist .= "
    "; - $tcount = 0; - } - ++$tcount; - } - elseif($attachment['thumbnail'] == "SMALL" && $forumpermissions[$announcement['fid']]['candlattachments'] == 1) - { - // Image is small enough to show - no thumbnail - eval("\$post['imagelist'] .= \"".$templates->get("postbit_attachments_images_image")."\";"); - } - else - { - eval("\$post['attachmentlist'] .= \"".$templates->get("postbit_attachments_attachment")."\";"); - } - } - } - else - { - $validationcount++; - } - } - if($post['thumblist']) - { - eval("\$post['attachedthumbs'] = \"".$templates->get("postbit_attachments_thumbnails")."\";"); - } - if($post['imagelist']) - { - eval("\$post['attachedimages'] = \"".$templates->get("postbit_attachments_images")."\";"); - } - if($post['attachmentlist'] || $post['thumblist'] || $post['imagelist']) - { - eval("\$post['attachments'] = \"".$templates->get("postbit_attachments")."\";"); - } - } - - eval("\$announcements .= \"".$templates->get("portal_announcement")."\";"); - unset($post); - } - } -} - -$plugins->run_hooks("portal_end"); - -eval("\$portal = \"".$templates->get("portal")."\";"); -output_page($portal); \ No newline at end of file diff --git a/html/forums/printthread.php b/html/forums/printthread.php deleted file mode 100644 index fb2afb8..0000000 --- a/html/forums/printthread.php +++ /dev/null @@ -1,261 +0,0 @@ -load("printthread"); - -$plugins->run_hooks("printthread_start"); - -$thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - -if(!$thread) -{ - error($lang->error_invalidthread); -} - -$plugins->run_hooks("printthread_start"); - -$thread['threadprefix'] = $thread['displaystyle'] = ''; -if($thread['prefix']) -{ - $threadprefix = build_prefixes($thread['prefix']); - if(!empty($threadprefix)) - { - $thread['threadprefix'] = $threadprefix['prefix']; - $thread['displaystyle'] = $threadprefix['displaystyle']; - } -} - -$thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - -$fid = $thread['fid']; -$tid = $thread['tid']; - -// Is the currently logged in user a moderator of this forum? -$ismod = is_moderator($fid); - -// Make sure we are looking at a real thread here. -if(($thread['visible'] != 1 && $ismod == false) || ($thread['visible'] > 1 && $ismod == true)) -{ - error($lang->error_invalidthread); -} - -// Get forum info -$forum = get_forum($fid); -if(!$forum) -{ - error($lang->error_invalidforum); -} - -$breadcrumb = makeprintablenav(); - -$parentsexp = explode(",", $forum['parentlist']); -$numparents = count($parentsexp); -$tdepth = "-"; -for($i = 0; $i < $numparents; ++$i) -{ - $tdepth .= "-"; -} -$forumpermissions = forum_permissions($forum['fid']); - -if($forum['type'] != "f") -{ - error($lang->error_invalidforum); -} -if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid'])) -{ - error_no_permission(); -} - -// Check if this forum is password protected and we have a valid password -check_forum_password($forum['fid']); - -$page = $mybb->get_input('page', MyBB::INPUT_INT); - -// Paginate this thread -if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) -{ - $mybb->settings['postsperpage'] = 20; -} -$perpage = $mybb->settings['postsperpage']; -$postcount = (int)$thread['replies']+1; -$pages = ceil($postcount/$perpage); - -if($page > $pages) -{ - $page = 1; -} -if($page > 0) -{ - $start = ($page-1) * $perpage; -} -else -{ - $start = 0; - $page = 1; -} - -if($postcount > $perpage) -{ - $multipage = printthread_multipage($postcount, $perpage, $page, "printthread.php?tid={$tid}"); -} -else -{ - $multipage = ''; -} - -$thread['threadlink'] = get_thread_link($tid); - -$postrows = ''; -if(is_moderator($forum['fid'], "canviewunapprove")) -{ - $visible = "AND (p.visible='0' OR p.visible='1')"; -} -else -{ - $visible = "AND p.visible='1'"; -} -$query = $db->query(" - SELECT u.*, u.username AS userusername, p.* - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.tid='$tid' {$visible} - ORDER BY p.dateline - LIMIT {$start}, {$perpage} -"); -while($postrow = $db->fetch_array($query)) -{ - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "me_username" => $postrow['username'], - "shorten_urls" => 0, - "filter_badwords" => 1 - ); - if($postrow['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_videocode'] = 0; - } - - if($postrow['userusername']) - { - $postrow['username'] = $postrow['userusername']; - } - $postrow['username'] = htmlspecialchars_uni($postrow['username']); - $postrow['subject'] = htmlspecialchars_uni($parser->parse_badwords($postrow['subject'])); - $postrow['date'] = my_date($mybb->settings['dateformat'], $postrow['dateline'], null, 0); - $postrow['profilelink'] = build_profile_link($postrow['username'], $postrow['uid']); - - $postrow['message'] = $parser->parse_message($postrow['message'], $parser_options); - $plugins->run_hooks("printthread_post"); - eval("\$postrows .= \"".$templates->get("printthread_post")."\";"); -} - -$plugins->run_hooks("printthread_end"); - -eval("\$printable = \"".$templates->get("printthread")."\";"); -output_page($printable); - -/** - * @param int $pid - * @param string $depth - * - * @return string - */ -function makeprintablenav($pid=0, $depth="--") -{ - global $mybb, $db, $pforumcache, $fid, $forum, $lang, $templates; - if(!is_array($pforumcache)) - { - $parlist = build_parent_list($fid, "fid", "OR", $forum['parentlist']); - $query = $db->simple_select("forums", "name, fid, pid", "$parlist", array('order_by' => 'pid, disporder')); - while($forumnav = $db->fetch_array($query)) - { - $pforumcache[$forumnav['pid']][$forumnav['fid']] = $forumnav; - } - unset($forumnav); - } - $forums = ''; - if(is_array($pforumcache[$pid])) - { - foreach($pforumcache[$pid] as $key => $forumnav) - { - $forumnav['link'] = get_forum_link($forumnav['fid']); - eval("\$forums .= \"".$templates->get("printthread_nav")."\";"); - if(!empty($pforumcache[$forumnav['fid']])) - { - $newdepth = $depth."-"; - $forums .= makeprintablenav($forumnav['fid'], $newdepth); - } - } - } - return $forums; -} - -/** - * Output multipage navigation. - * - * @param int $count The total number of items. - * @param int $perpage The items per page. - * @param int $current_page The current page. - * @param string $url The URL base. - * - * @return string -*/ -function printthread_multipage($count, $perpage, $current_page, $url) -{ - global $lang, $templates; - $multipage = ""; - if($count > $perpage) - { - $pages = $count / $perpage; - $pages = ceil($pages); - - $mppage = null; - for($page = 1; $page <= $pages; ++$page) - { - if($page == $current_page) - { - eval("\$mppage .= \"".$templates->get("printthread_multipage_page_current")."\";"); - } - else - { - eval("\$mppage .= \"".$templates->get("printthread_multipage_page")."\";"); - } - } - - eval("\$multipage = \"".$templates->get("printthread_multipage")."\";"); - } - return $multipage; -} - diff --git a/html/forums/private.php b/html/forums/private.php deleted file mode 100644 index fba58c8..0000000 --- a/html/forums/private.php +++ /dev/null @@ -1,2475 +0,0 @@ -load("private"); - -if($mybb->settings['enablepms'] == 0) -{ - error($lang->pms_disabled); -} - -if($mybb->user['uid'] == '/' || $mybb->user['uid'] == 0 || $mybb->usergroup['canusepms'] == 0) -{ - error_no_permission(); -} - -if(!$mybb->user['pmfolders']) -{ - $mybb->user['pmfolders'] = "1**$%%$2**$%%$3**$%%$4**"; - - $sql_array = array( - "pmfolders" => $mybb->user['pmfolders'] - ); - $db->update_query("users", $sql_array, "uid = ".$mybb->user['uid']); -} - -$mybb->input['fid'] = $mybb->get_input('fid', MyBB::INPUT_INT); - -$folder_id = $folder_name = ''; - -$foldernames = array(); -$foldersexploded = explode("$%%$", $mybb->user['pmfolders']); -foreach($foldersexploded as $key => $folders) -{ - $folderinfo = explode("**", $folders, 2); - if($mybb->input['fid'] == $folderinfo[0]) - { - $sel = ' selected="selected"'; - } - else - { - $sel = ''; - } - $folderinfo[1] = get_pm_folder_name($folderinfo[0], $folderinfo[1]); - $foldernames[$folderinfo[0]] = $folderinfo[1]; - - $folder_id = $folderinfo[0]; - $folder_name = $folderinfo[1]; - - eval("\$folderjump_folder .= \"".$templates->get("private_jump_folders_folder")."\";"); - eval("\$folderoplist_folder .= \"".$templates->get("private_jump_folders_folder")."\";"); - eval("\$foldersearch_folder .= \"".$templates->get("private_jump_folders_folder")."\";"); -} - -eval("\$folderjump = \"".$templates->get("private_jump_folders")."\";"); -eval("\$folderoplist = \"".$templates->get("private_move")."\";"); -eval("\$foldersearch = \"".$templates->get("private_advanced_search_folders")."\";"); - -usercp_menu(); - -$plugins->run_hooks("private_start"); - -// Make navigation -add_breadcrumb($lang->nav_pms, "private.php"); - -$mybb->input['action'] = $mybb->get_input('action'); -switch($mybb->input['action']) -{ - case "send": - add_breadcrumb($lang->nav_send); - break; - case "tracking": - add_breadcrumb($lang->nav_tracking); - break; - case "folders": - add_breadcrumb($lang->nav_folders); - break; - case "empty": - add_breadcrumb($lang->nav_empty); - break; - case "export": - add_breadcrumb($lang->nav_export); - break; - case "advanced_search": - add_breadcrumb($lang->nav_search); - break; - case "results": - add_breadcrumb($lang->nav_results); - break; -} - -if(!empty($mybb->input['preview'])) -{ - $mybb->input['action'] = "send"; -} - -if(($mybb->input['action'] == "do_search" || $mybb->input['action'] == "do_stuff" && ($mybb->get_input('quick_search') || !$mybb->get_input('hop') && !$mybb->get_input('moveto') && !$mybb->get_input('delete'))) && $mybb->request_method == "post") -{ - $plugins->run_hooks("private_do_search_start"); - - // Simulate coming from our advanced search form with some preset options - if($mybb->get_input('quick_search')) - { - $mybb->input['action'] = "do_search"; - $mybb->input['subject'] = 1; - $mybb->input['message'] = 1; - $mybb->input['folder'] = $mybb->input['fid']; - unset($mybb->input['jumpto']); - unset($mybb->input['fromfid']); - } - - // Check if search flood checking is enabled and user is not admin - if($mybb->settings['searchfloodtime'] > 0 && $mybb->usergroup['cancp'] != 1) - { - // Fetch the time this user last searched - $timecut = TIME_NOW-$mybb->settings['searchfloodtime']; - $query = $db->simple_select("searchlog", "*", "uid='{$mybb->user['uid']}' AND dateline > '$timecut'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_search = $db->fetch_array($query); - // Users last search was within the flood time, show the error - if($last_search['sid']) - { - $remaining_time = $mybb->settings['searchfloodtime']-(TIME_NOW-$last_search['dateline']); - if($remaining_time == 1) - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding_1, $mybb->settings['searchfloodtime']); - } - else - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding, $mybb->settings['searchfloodtime'], $remaining_time); - } - error($lang->error_searchflooding); - } - } - - if($mybb->get_input('subject', MyBB::INPUT_INT) != 1 && $mybb->get_input('message', MyBB::INPUT_INT) != 1) - { - error($lang->error_nosearchresults); - } - - if($mybb->get_input('message', MyBB::INPUT_INT) == 1) - { - $resulttype = "pmmessages"; - } - else - { - $resulttype = "pmsubjects"; - } - - $search_data = array( - "keywords" => $mybb->get_input('keywords'), - "subject" => $mybb->get_input('subject', MyBB::INPUT_INT), - "message" => $mybb->get_input('message', MyBB::INPUT_INT), - "sender" => $mybb->get_input('sender'), - "status" => $mybb->get_input('status', MyBB::INPUT_ARRAY), - "folder" => $mybb->get_input('folder', MyBB::INPUT_ARRAY) - ); - - if($db->can_search == true) - { - require_once MYBB_ROOT."inc/functions_search.php"; - - $search_results = privatemessage_perform_search_mysql($search_data); - } - else - { - error($lang->error_no_search_support); - } - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => '', - "posts" => '', - "resulttype" => $resulttype, - "querycache" => $search_results['querycache'], - "keywords" => $db->escape_string($mybb->get_input('keywords')), - ); - $plugins->run_hooks("private_do_search_process"); - - $db->insert_query("searchlog", $searcharray); - - // Sender sort won't work yet - $sortby = array('subject', 'sender', 'dateline'); - - if(in_array($mybb->get_input('sort'), $sortby)) - { - $sortby = $mybb->get_input('sort'); - } - else - { - $sortby = "dateline"; - } - - if(my_strtolower($mybb->get_input('sortordr')) == "asc") - { - $sortorder = "asc"; - } - else - { - $sortorder = "desc"; - } - - $plugins->run_hooks("private_do_search_end"); - redirect("private.php?action=results&sid=".$sid."&sortby=".$sortby."&order=".$sortorder, $lang->redirect_searchresults); -} - -if($mybb->input['action'] == "results") -{ - $sid = $mybb->get_input('sid'); - $query = $db->simple_select("searchlog", "*", "sid='".$db->escape_string($sid)."' AND uid='{$mybb->user['uid']}'"); - $search = $db->fetch_array($query); - - if(!$search) - { - error($lang->error_invalidsearch); - } - - $plugins->run_hooks("private_results_start"); - - // Decide on our sorting fields and sorting order. - $order = my_strtolower($mybb->get_input('order')); - $sortby = my_strtolower($mybb->get_input('sortby')); - - $sortby_accepted = array('subject', 'username', 'dateline'); - - if(in_array($sortby, $sortby_accepted)) - { - $query_sortby = $sortby; - - if($query_sortby == "username") - { - $query_sortby = "fromusername"; - } - } - else - { - $sortby = $query_sortby = "dateline"; - } - - if($order != "asc") - { - $order = "desc"; - } - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - // Work out pagination, which page we're at, as well as the limits. - $perpage = $mybb->settings['threadsperpage']; - $page = $mybb->get_input('page', MyBB::INPUT_INT); - if($page > 0) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - $end = $start + $perpage; - $lower = $start+1; - $upper = $end; - - // Work out if we have terms to highlight - $highlight = ""; - if($search['keywords']) - { - $highlight = "&highlight=".urlencode($search['keywords']); - } - - // Do Multi Pages - $query = $db->simple_select("privatemessages", "COUNT(*) AS total", "pmid IN(".$db->escape_string($search['querycache']).")"); - $pmscount = $db->fetch_array($query); - - if($upper > $pmscount) - { - $upper = $pmscount; - } - $multipage = multipage($pmscount['total'], $perpage, $page, "private.php?action=results&sid=".htmlspecialchars_uni($mybb->get_input('sid'))."&sortby={$sortby}&order={$order}"); - $messagelist = ''; - - $icon_cache = $cache->read("posticons"); - - // Cache users in multiple recipients for sent & drafts folder - // Get all recipients into an array - $cached_users = $get_users = array(); - $users_query = $db->simple_select("privatemessages", "recipients", "pmid IN(".$db->escape_string($search['querycache']).")", array('limit_start' => $start, 'limit' => $perpage, 'order_by' => $query_sortby, 'order_dir' => $order)); - while($row = $db->fetch_array($users_query)) - { - $recipients = my_unserialize($row['recipients']); - if(is_array($recipients['to']) && count($recipients['to'])) - { - $get_users = array_merge($get_users, $recipients['to']); - } - - if(isset($recipients['bcc']) && is_array($recipients['bcc']) && count($recipients['bcc'])) - { - $get_users = array_merge($get_users, $recipients['bcc']); - } - } - - $get_users = implode(',', array_unique($get_users)); - - // Grab info - if($get_users) - { - $users_query = $db->simple_select("users", "uid, username, usergroup, displaygroup", "uid IN ({$get_users})"); - while($user = $db->fetch_array($users_query)) - { - $cached_users[$user['uid']] = $user; - } - } - - $query = $db->query(" - SELECT pm.*, fu.username AS fromusername, tu.username as tousername - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users fu ON (fu.uid=pm.fromid) - LEFT JOIN ".TABLE_PREFIX."users tu ON (tu.uid=pm.toid) - WHERE pm.pmid IN(".$db->escape_string($search['querycache']).") AND pm.uid='{$mybb->user['uid']}' - ORDER BY pm.{$query_sortby} {$order} - LIMIT {$start}, {$perpage} - "); - while($message = $db->fetch_array($query)) - { - $msgalt = $msgstatus = ''; - - // Determine Folder Icon - if($message['status'] == 0) - { - $msgstatus = 'new_pm'; - $msgalt = $lang->new_pm; - } - else if($message['status'] == 1) - { - $msgstatus = 'old_pm'; - $msgalt = $lang->old_pm; - } - else if($message['status'] == 3) - { - $msgstatus = 're_pm'; - $msgalt = $lang->reply_pm; - } - else if($message['status'] == 4) - { - $msgstatus = 'fw_pm'; - $msgalt = $lang->fwd_pm; - } - - $folder = $message['folder']; - - $tofromuid = 0; - if($folder == 2 || $folder == 3) - { - // Sent Items or Drafts Folder Check - $recipients = my_unserialize($message['recipients']); - $to_users = $bcc_users = ''; - if(count($recipients['to']) > 1 || (count($recipients['to']) == 1 && isset($recipients['bcc']) && count($recipients['bcc']) > 0)) - { - foreach($recipients['to'] as $uid) - { - $profilelink = get_profile_link($uid); - $user = $cached_users[$uid]; - $user['username'] = htmlspecialchars_uni($user['username']); - $username = format_name($user['username'], $user['usergroup'], $user['displaygroup']); - eval("\$to_users .= \"".$templates->get("private_multiple_recipients_user")."\";"); - } - if(isset($recipients['bcc']) && is_array($recipients['bcc']) && count($recipients['bcc'])) - { - eval("\$bcc_users = \"".$templates->get("private_multiple_recipients_bcc")."\";"); - foreach($recipients['bcc'] as $uid) - { - $profilelink = get_profile_link($uid); - $user = $cached_users[$uid]; - $user['username'] = htmlspecialchars_uni($user['username']); - $username = format_name($user['username'], $user['usergroup'], $user['displaygroup']); - eval("\$bcc_users .= \"".$templates->get("private_multiple_recipients_user")."\";"); - } - } - - eval("\$tofromusername = \"".$templates->get("private_multiple_recipients")."\";"); - } - else if($message['toid']) - { - $tofromusername = htmlspecialchars_uni($message['tousername']); - $tofromuid = $message['toid']; - } - else - { - $tofromusername = $lang->not_sent; - } - } - else - { - $tofromusername = htmlspecialchars_uni($message['fromusername']); - $tofromuid = $message['fromid']; - if($tofromuid == 0) - { - $tofromusername = $lang->mybb_engine; - } - } - - $tofromusername = build_profile_link($tofromusername, $tofromuid); - - $denyreceipt = ''; - - if($message['icon'] > 0 && $icon_cache[$message['icon']]) - { - $icon = $icon_cache[$message['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("private_messagebit_icon")."\";"); - } - else - { - $icon = ' '; - } - - if(!trim($message['subject'])) - { - $message['subject'] = $lang->pm_no_subject; - } - - $message['subject'] = $parser->parse_badwords($message['subject']); - - if(my_strlen($message['subject']) > 50) - { - $message['subject'] = htmlspecialchars_uni(my_substr($message['subject'], 0, 50)."..."); - } - else - { - $message['subject'] = htmlspecialchars_uni($message['subject']); - } - - if($message['folder'] != "3") - { - $senddate = my_date('relative', $message['dateline']); - } - else - { - $senddate = $lang->not_sent; - } - - $foldername = $foldernames[$message['folder']]; - - // What we do here is parse the post using our post parser, then strip the tags from it - $parser_options = array( - 'allow_html' => 0, - 'allow_mycode' => 1, - 'allow_smilies' => 0, - 'allow_imgcode' => 0, - 'filter_badwords' => 1 - ); - $message['message'] = strip_tags($parser->parse_message($message['message'], $parser_options)); - if(my_strlen($message['message']) > 200) - { - $message['message'] = my_substr($message['message'], 0, 200)."..."; - } - - eval("\$messagelist .= \"".$templates->get("private_search_messagebit")."\";"); - } - - if($db->num_rows($query) == 0) - { - eval("\$messagelist = \"".$templates->get("private_search_results_nomessages")."\";"); - } - - $plugins->run_hooks("private_results_end"); - - eval("\$results = \"".$templates->get("private_search_results")."\";"); - output_page($results); -} - -if($mybb->input['action'] == "advanced_search") -{ - $plugins->run_hooks("private_advanced_search"); - - eval("\$advanced_search = \"".$templates->get("private_advanced_search")."\";"); - - output_page($advanced_search); -} - -// Dismissing a new/unread PM notice -if($mybb->input['action'] == "dismiss_notice") -{ - if($mybb->user['pmnotice'] != 2) - { - exit; - } - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $updated_user = array( - "pmnotice" => 1 - ); - $db->update_query("users", $updated_user, "uid='{$mybb->user['uid']}'"); - - if(!empty($mybb->input['ajax'])) - { - echo 1; - exit; - } - else - { - header("Location: index.php"); - exit; - } -} - -$send_errors = ''; - -if($mybb->input['action'] == "do_send" && $mybb->request_method == "post") -{ - if($mybb->usergroup['cansendpms'] == 0) - { - error_no_permission(); - } - - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_send_do_send"); - - // Attempt to see if this PM is a duplicate or not - $to = array_map("trim", explode(",", $mybb->get_input('to'))); - $to_escaped = implode("','", array_map(array($db, 'escape_string'), array_map('my_strtolower', $to))); - $time_cutoff = TIME_NOW - (5 * 60 * 60); - $query = $db->query(" - SELECT pm.pmid - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users u ON(u.uid=pm.toid) - WHERE LOWER(u.username) IN ('{$to_escaped}') AND pm.dateline > {$time_cutoff} AND pm.fromid='{$mybb->user['uid']}' AND pm.subject='".$db->escape_string($mybb->get_input('subject'))."' AND pm.message='".$db->escape_string($mybb->get_input('message'))."' AND pm.folder!='3' - LIMIT 0, 1 - "); - $duplicate_check = $db->fetch_field($query, "pmid"); - if($duplicate_check) - { - error($lang->error_pm_already_submitted); - } - - require_once MYBB_ROOT."inc/datahandlers/pm.php"; - $pmhandler = new PMDataHandler(); - - $pm = array( - "subject" => $mybb->get_input('subject'), - "message" => $mybb->get_input('message'), - "icon" => $mybb->get_input('icon', MyBB::INPUT_INT), - "fromid" => $mybb->user['uid'], - "do" => $mybb->get_input('do'), - "pmid" => $mybb->get_input('pmid', MyBB::INPUT_INT), - "ipaddress" => $session->packedip - ); - - // Split up any recipients we have - $pm['to'] = $to; - if(!empty($mybb->input['bcc'])) - { - $pm['bcc'] = explode(",", $mybb->get_input('bcc')); - $pm['bcc'] = array_map("trim", $pm['bcc']); - } - - $mybb->input['options'] = $mybb->get_input('options', MyBB::INPUT_ARRAY); - - if(!$mybb->usergroup['cantrackpms']) - { - $mybb->input['options']['readreceipt'] = false; - } - - $pm['options'] = array(); - if(isset($mybb->input['options']['signature']) && $mybb->input['options']['signature'] == 1) - { - $pm['options']['signature'] = 1; - } - else - { - $pm['options']['signature'] = 0; - } - if(isset($mybb->input['options']['disablesmilies'])) - { - $pm['options']['disablesmilies'] = $mybb->input['options']['disablesmilies']; - } - if(isset($mybb->input['options']['savecopy']) && $mybb->input['options']['savecopy'] == 1) - { - $pm['options']['savecopy'] = 1; - } - else - { - $pm['options']['savecopy'] = 0; - } - if(isset($mybb->input['options']['readreceipt'])) - { - $pm['options']['readreceipt'] = $mybb->input['options']['readreceipt']; - } - - if(!empty($mybb->input['saveasdraft'])) - { - $pm['saveasdraft'] = 1; - } - $pmhandler->set_data($pm); - - // Now let the pm handler do all the hard work. - if(!$pmhandler->validate_pm()) - { - $pm_errors = $pmhandler->get_friendly_errors(); - $send_errors = inline_error($pm_errors); - $mybb->input['action'] = "send"; - } - else - { - $pminfo = $pmhandler->insert_pm(); - $plugins->run_hooks("private_do_send_end"); - - if(isset($pminfo['draftsaved'])) - { - redirect("private.php", $lang->redirect_pmsaved); - } - else - { - redirect("private.php", $lang->redirect_pmsent); - } - } -} - -if($mybb->input['action'] == "send") -{ - if($mybb->usergroup['cansendpms'] == 0) - { - error_no_permission(); - } - - $plugins->run_hooks("private_send_start"); - - $smilieinserter = $codebuttons = ''; - - if($mybb->settings['bbcodeinserter'] != 0 && $mybb->settings['pmsallowmycode'] != 0 && $mybb->user['showcodebuttons'] != 0) - { - $codebuttons = build_mycode_inserter("message", $mybb->settings['pmsallowsmilies']); - if($mybb->settings['pmsallowsmilies'] != 0) - { - $smilieinserter = build_clickable_smilies(); - } - } - - $lang->post_icon = $lang->message_icon; - - $posticons = get_post_icons(); - $message = htmlspecialchars_uni($parser->parse_badwords($mybb->get_input('message'))); - $subject = htmlspecialchars_uni($parser->parse_badwords($mybb->get_input('subject'))); - - $optionschecked = array('signature' => '', 'disablesmilies' => '', 'savecopy' => '', 'readreceipt' => ''); - $to = $bcc = ''; - - if(!empty($mybb->input['preview']) || $send_errors) - { - $options = $mybb->get_input('options', MyBB::INPUT_ARRAY); - if(isset($options['signature']) && $options['signature'] == 1) - { - $optionschecked['signature'] = 'checked="checked"'; - } - if(isset($options['disablesmilies']) && $options['disablesmilies'] == 1) - { - $optionschecked['disablesmilies'] = 'checked="checked"'; - } - if(isset($options['savecopy']) && $options['savecopy'] != 0) - { - $optionschecked['savecopy'] = 'checked="checked"'; - } - if(isset($options['readreceipt']) && $options['readreceipt'] != 0) - { - $optionschecked['readreceipt'] = 'checked="checked"'; - } - $to = htmlspecialchars_uni($mybb->get_input('to')); - $bcc = htmlspecialchars_uni($mybb->get_input('bcc')); - } - - $preview = ''; - // Preview - if(!empty($mybb->input['preview'])) - { - $options = $mybb->get_input('options', MyBB::INPUT_ARRAY); - $query = $db->query(" - SELECT u.username AS userusername, u.*, f.* - FROM ".TABLE_PREFIX."users u - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - WHERE u.uid='".$mybb->user['uid']."' - "); - - $post = $db->fetch_array($query); - - $post['userusername'] = $mybb->user['username']; - $post['postusername'] = $mybb->user['username']; - $post['message'] = $mybb->get_input('message'); - $post['subject'] = htmlspecialchars_uni($mybb->get_input('subject')); - $post['icon'] = $mybb->get_input('icon', MyBB::INPUT_INT); - if(!isset($options['disablesmilies'])) - { - $options['disablesmilies'] = 0; - } - $post['smilieoff'] = $options['disablesmilies']; - $post['dateline'] = TIME_NOW; - - if(!isset($options['signature'])) - { - $post['includesig'] = 0; - } - else - { - $post['includesig'] = 1; - } - - // Merge usergroup data from the cache - $data_key = array( - 'title' => 'grouptitle', - 'usertitle' => 'groupusertitle', - 'stars' => 'groupstars', - 'starimage' => 'groupstarimage', - 'image' => 'groupimage', - 'namestyle' => 'namestyle', - 'usereputationsystem' => 'usereputationsystem' - ); - - foreach($data_key as $field => $key) - { - $post[$key] = $groupscache[$post['usergroup']][$field]; - } - - $postbit = build_postbit($post, 2); - eval("\$preview = \"".$templates->get("previewpost")."\";"); - } - else if(!$send_errors) - { - // New PM, so load default settings - if($mybb->user['signature'] != '') - { - $optionschecked['signature'] = 'checked="checked"'; - } - if($mybb->usergroup['cantrackpms'] == 1) - { - $optionschecked['readreceipt'] = 'checked="checked"'; - } - $optionschecked['savecopy'] = 'checked="checked"'; - } - - // Draft, reply, forward - if($mybb->get_input('pmid') && empty($mybb->input['preview']) && !$send_errors) - { - $query = $db->query(" - SELECT pm.*, u.username AS quotename - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=pm.fromid) - WHERE pm.pmid='".$mybb->get_input('pmid', MyBB::INPUT_INT)."' AND pm.uid='{$mybb->user['uid']}' - "); - - $pm = $db->fetch_array($query); - $message = htmlspecialchars_uni($parser->parse_badwords($pm['message'])); - $subject = htmlspecialchars_uni($parser->parse_badwords($pm['subject'])); - - if($pm['folder'] == "3") - { - // message saved in drafts - $mybb->input['uid'] = $pm['toid']; - - if($pm['includesig'] == 1) - { - $optionschecked['signature'] = 'checked="checked"'; - } - if($pm['smilieoff'] == 1) - { - $optionschecked['disablesmilies'] = 'checked="checked"'; - } - if($pm['receipt']) - { - $optionschecked['readreceipt'] = 'checked="checked"'; - } - - // Get list of recipients - $recipients = my_unserialize($pm['recipients']); - $comma = $recipientids = ''; - if(isset($recipients['to']) && is_array($recipients['to'])) - { - foreach($recipients['to'] as $recipient) - { - $recipient_list['to'][] = $recipient; - $recipientids .= $comma.$recipient; - $comma = ','; - } - } - - if(isset($recipients['bcc']) && is_array($recipients['bcc'])) - { - foreach($recipients['bcc'] as $recipient) - { - $recipient_list['bcc'][] = $recipient; - $recipientids .= $comma.$recipient; - $comma = ','; - } - } - - if(!empty($recipientids)) - { - $query = $db->simple_select("users", "uid, username", "uid IN ({$recipientids})"); - while($user = $db->fetch_array($query)) - { - if(isset($recipients['bcc']) && is_array($recipients['bcc']) && in_array($user['uid'], $recipient_list['bcc'])) - { - $bcc .= htmlspecialchars_uni($user['username']).', '; - } - else - { - $to .= htmlspecialchars_uni($user['username']).', '; - } - } - } - } - else - { - // forward/reply - $subject = preg_replace("#(FW|RE):( *)#is", '', $subject); - $message = "[quote='{$pm['quotename']}']\n$message\n[/quote]"; - $message = preg_replace('#^/me (.*)$#im', "* ".$pm['quotename']." \\1", $message); - - require_once MYBB_ROOT."inc/functions_posting.php"; - - if($mybb->settings['maxpmquotedepth'] != '0') - { - $message = remove_message_quotes($message, $mybb->settings['maxpmquotedepth']); - } - - if($mybb->input['do'] == 'forward') - { - $subject = "Fw: $subject"; - } - elseif($mybb->input['do'] == 'reply') - { - $subject = "Re: $subject"; - $uid = $pm['fromid']; - if($mybb->user['uid'] == $uid) - { - $to = $mybb->user['username']; - } - else - { - $query = $db->simple_select('users', 'username', "uid='{$uid}'"); - $to = $db->fetch_field($query, 'username'); - } - $to = htmlspecialchars_uni($to); - } - else if($mybb->input['do'] == 'replyall') - { - $subject = "Re: $subject"; - - // Get list of recipients - $recipients = my_unserialize($pm['recipients']); - $recipientids = $pm['fromid']; - if(isset($recipients['to']) && is_array($recipients['to'])) - { - foreach($recipients['to'] as $recipient) - { - if($recipient == $mybb->user['uid']) - { - continue; - } - $recipientids .= ','.$recipient; - } - } - $comma = ''; - $query = $db->simple_select('users', 'uid, username', "uid IN ({$recipientids})"); - while($user = $db->fetch_array($query)) - { - $to .= $comma.htmlspecialchars_uni($user['username']); - $comma = $lang->comma; - } - } - } - } - - // New PM with recipient preset - if($mybb->get_input('uid', MyBB::INPUT_INT) && empty($mybb->input['preview'])) - { - $query = $db->simple_select('users', 'username', "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); - $to = htmlspecialchars_uni($db->fetch_field($query, 'username')).', '; - } - - $max_recipients = ''; - if($mybb->usergroup['maxpmrecipients'] > 0) - { - $max_recipients = $lang->sprintf($lang->max_recipients, $mybb->usergroup['maxpmrecipients']); - } - - if($send_errors) - { - $to = htmlspecialchars_uni($mybb->get_input('to')); - $bcc = htmlspecialchars_uni($mybb->get_input('bcc')); - } - - // Load the auto complete javascript if it is enabled. - eval("\$autocompletejs = \"".$templates->get("private_send_autocomplete")."\";"); - - $pmid = $mybb->get_input('pmid', MyBB::INPUT_INT); - $do = $mybb->get_input('do'); - if($do != "forward" && $do != "reply" && $do != "replyall") - { - $do = ''; - } - - $buddy_select_to = $buddy_select_bcc = ''; - // See if it's actually worth showing the buddylist icon. - if($mybb->user['buddylist'] != '' && $mybb->settings['use_xmlhttprequest'] == 1) - { - $buddy_select = 'to'; - eval("\$buddy_select_to = \"".$templates->get("private_send_buddyselect")."\";"); - $buddy_select = 'bcc'; - eval("\$buddy_select_bcc = \"".$templates->get("private_send_buddyselect")."\";"); - } - - // Hide tracking option if no permission - $private_send_tracking = ''; - if($mybb->usergroup['cantrackpms']) - { - eval("\$private_send_tracking = \"".$templates->get("private_send_tracking")."\";"); - } - - $plugins->run_hooks("private_send_end"); - - eval("\$send = \"".$templates->get("private_send")."\";"); - output_page($send); -} - -if($mybb->input['action'] == "read") -{ - $plugins->run_hooks("private_read"); - - $pmid = $mybb->get_input('pmid', MyBB::INPUT_INT); - - $query = $db->query(" - SELECT pm.*, u.*, f.* - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=pm.fromid) - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - WHERE pm.pmid='{$pmid}' AND pm.uid='".$mybb->user['uid']."' - "); - $pm = $db->fetch_array($query); - - if(!$pm) - { - error($lang->error_invalidpm); - } - - if($pm['folder'] == 3) - { - header("Location: private.php?action=send&pmid={$pm['pmid']}"); - exit; - } - - // If we've gotten a PM, attach the group info - $data_key = array( - 'title' => 'grouptitle', - 'usertitle' => 'groupusertitle', - 'stars' => 'groupstars', - 'starimage' => 'groupstarimage', - 'image' => 'groupimage', - 'namestyle' => 'namestyle' - ); - - foreach($data_key as $field => $key) - { - $pm[$key] = $groupscache[$pm['usergroup']][$field]; - } - - if($pm['receipt'] == 1) - { - if($mybb->usergroup['candenypmreceipts'] == 1 && $mybb->get_input('denyreceipt', MyBB::INPUT_INT) == 1) - { - $receiptadd = 0; - } - else - { - $receiptadd = 2; - } - } - - $action_time = ''; - if($pm['status'] == 0) - { - $time = TIME_NOW; - $updatearray = array( - 'status' => 1, - 'readtime' => $time - ); - - if(isset($receiptadd)) - { - $updatearray['receipt'] = $receiptadd; - } - - $db->update_query('privatemessages', $updatearray, "pmid='{$pmid}'"); - - // Update the unread count - it has now changed. - update_pm_count($mybb->user['uid'], 6); - - // Update PM notice value if this is our last unread PM - if($mybb->user['unreadpms']-1 <= 0 && $mybb->user['pmnotice'] == 2) - { - $updated_user = array( - "pmnotice" => 1 - ); - $db->update_query("users", $updated_user, "uid='{$mybb->user['uid']}'"); - } - } - // Replied PM? - else if($pm['status'] == 3 && $pm['statustime']) - { - $reply_string = $lang->you_replied_on; - $reply_date = my_date('relative', $pm['statustime']); - - if((TIME_NOW - $pm['statustime']) < 3600) - { - // Relative string for the first hour - $reply_string = $lang->you_replied; - } - - $actioned_on = $lang->sprintf($reply_string, $reply_date); - eval("\$action_time = \"".$templates->get("private_read_action")."\";"); - } - else if($pm['status'] == 4 && $pm['statustime']) - { - $forward_string = $lang->you_forwarded_on; - $forward_date = my_date('relative', $pm['statustime']); - - if((TIME_NOW - $pm['statustime']) < 3600) - { - $forward_string = $lang->you_forwarded; - } - - $actioned_on = $lang->sprintf($forward_string, $forward_date); - eval("\$action_time = \"".$templates->get("private_read_action")."\";"); - } - - $pm['userusername'] = $pm['username']; - $pm['subject'] = htmlspecialchars_uni($parser->parse_badwords($pm['subject'])); - - if($pm['fromid'] == 0) - { - $pm['username'] = $lang->mybb_engine; - } - - if(!$pm['username']) - { - $pm['username'] = $lang->na; - } - - // Fetch the recipients for this message - $pm['recipients'] = my_unserialize($pm['recipients']); - - if(is_array($pm['recipients']['to'])) - { - $uid_sql = implode(',', $pm['recipients']['to']); - } - else - { - $uid_sql = $pm['toid']; - $pm['recipients']['to'] = array($pm['toid']); - } - - $show_bcc = 0; - - // If we have any BCC recipients and this user is an Administrator, add them on to the query - if(isset($pm['recipients']['bcc']) && count($pm['recipients']['bcc']) > 0 && $mybb->usergroup['cancp'] == 1) - { - $show_bcc = 1; - $uid_sql .= ','.implode(',', $pm['recipients']['bcc']); - } - - // Fetch recipient names from the database - $bcc_recipients = $to_recipients = $bcc_form_val = array(); - $query = $db->simple_select('users', 'uid, username', "uid IN ({$uid_sql})"); - while($recipient = $db->fetch_array($query)) - { - // User is a BCC recipient - $recipient['username'] = htmlspecialchars_uni($recipient['username']); - if($show_bcc && in_array($recipient['uid'], $pm['recipients']['bcc'])) - { - $bcc_recipients[] = build_profile_link($recipient['username'], $recipient['uid']); - $bcc_form_val[] = $recipient['username']; - } - // User is a normal recipient - else if(in_array($recipient['uid'], $pm['recipients']['to'])) - { - $to_recipients[] = build_profile_link($recipient['username'], $recipient['uid']); - } - } - - $bcc = ''; - if(count($bcc_recipients) > 0) - { - $bcc_recipients = implode(', ', $bcc_recipients); - $bcc_form_val = implode(',', $bcc_form_val); - eval("\$bcc = \"".$templates->get("private_read_bcc")."\";"); - } - else - { - $bcc_form_val = ''; - } - - $replyall = false; - if(count($to_recipients) > 1) - { - $replyall = true; - } - - if(count($to_recipients) > 0) - { - $to_recipients = implode($lang->comma, $to_recipients); - } - else - { - $to_recipients = $lang->nobody; - } - - eval("\$pm['subject_extra'] = \"".$templates->get("private_read_to")."\";"); - - add_breadcrumb($pm['subject']); - $message = build_postbit($pm, 2); - - // Decide whether or not to show quick reply. - $quickreply = ''; - if($mybb->settings['pmquickreply'] != 0 && $mybb->user['showquickreply'] != 0 && $mybb->usergroup['cansendpms'] != 0 && $pm['fromid'] != 0 && $pm['folder'] != 3) - { - $trow = alt_trow(); - - $optionschecked = array('savecopy' => 'checked="checked"'); - if(!empty($mybb->user['signature'])) - { - $optionschecked['signature'] = 'checked="checked"'; - } - if($mybb->usergroup['cantrackpms'] == 1) - { - $optionschecked['readreceipt'] = 'checked="checked"'; - } - - require_once MYBB_ROOT.'inc/functions_posting.php'; - - $quoted_message = array( - 'message' => htmlspecialchars_uni($parser->parse_badwords($pm['message'])), - 'username' => $pm['username'], - 'quote_is_pm' => true - ); - $quoted_message = parse_quoted_message($quoted_message); - - if($mybb->settings['maxpmquotedepth'] != '0') - { - $quoted_message = remove_message_quotes($quoted_message, $mybb->settings['maxpmquotedepth']); - } - - $subject = preg_replace("#(FW|RE):( *)#is", '', $pm['subject']); - - if($mybb->user['uid'] == $pm['fromid']) - { - $to = htmlspecialchars_uni($mybb->user['username']); - } - else - { - $query = $db->simple_select('users', 'username', "uid='{$pm['fromid']}'"); - $to = htmlspecialchars_uni($db->fetch_field($query, 'username')); - } - - $private_send_tracking = ''; - if($mybb->usergroup['cantrackpms']) - { - $lang->options_read_receipt = $lang->quickreply_read_receipt; - - eval("\$private_send_tracking = \"".$templates->get("private_send_tracking")."\";"); - } - - eval("\$quickreply = \"".$templates->get("private_quickreply")."\";"); - } - - $plugins->run_hooks("private_read_end"); - - eval("\$read = \"".$templates->get("private_read")."\";"); - output_page($read); -} - -if($mybb->input['action'] == "tracking") -{ - if(!$mybb->usergroup['cantrackpms']) - { - error_no_permission(); - } - - $plugins->run_hooks("private_tracking_start"); - $readmessages = ''; - $unreadmessages = ''; - - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - // Figure out if we need to display multiple pages. - $perpage = $mybb->settings['postsperpage']; - - $query = $db->simple_select("privatemessages", "COUNT(pmid) as readpms", "receipt='2' AND folder!='3' AND status!='0' AND fromid='".$mybb->user['uid']."'"); - $postcount = $db->fetch_field($query, "readpms"); - - $page = $mybb->get_input('read_page', MyBB::INPUT_INT); - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('read_page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $read_multipage = multipage($postcount, $perpage, $page, "private.php?action=tracking&read_page={page}"); - - $query = $db->query(" - SELECT pm.pmid, pm.subject, pm.toid, pm.readtime, u.username as tousername - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=pm.toid) - WHERE pm.receipt='2' AND pm.folder!='3' AND pm.status!='0' AND pm.fromid='".$mybb->user['uid']."' - ORDER BY pm.readtime DESC - LIMIT {$start}, {$perpage} - "); - while($readmessage = $db->fetch_array($query)) - { - $readmessage['subject'] = htmlspecialchars_uni($parser->parse_badwords($readmessage['subject'])); - $readmessage['tousername'] = htmlspecialchars_uni($readmessage['tousername']); - $readmessage['profilelink'] = build_profile_link($readmessage['tousername'], $readmessage['toid']); - $readdate = my_date('relative', $readmessage['readtime']); - eval("\$readmessages .= \"".$templates->get("private_tracking_readmessage")."\";"); - } - - $stoptrackingread = ''; - if(!empty($readmessages)) - { - eval("\$stoptrackingread = \"".$templates->get("private_tracking_readmessage_stop")."\";"); - } - - if(!$readmessages) - { - eval("\$readmessages = \"".$templates->get("private_tracking_nomessage")."\";"); - } - - $query = $db->simple_select("privatemessages", "COUNT(pmid) as unreadpms", "receipt='1' AND folder!='3' AND status='0' AND fromid='".$mybb->user['uid']."'"); - $postcount = $db->fetch_field($query, "unreadpms"); - - $page = $mybb->get_input('unread_page', MyBB::INPUT_INT); - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('unread_page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $unread_multipage = multipage($postcount, $perpage, $page, "private.php?action=tracking&unread_page={page}"); - - $query = $db->query(" - SELECT pm.pmid, pm.subject, pm.toid, pm.dateline, u.username as tousername - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=pm.toid) - WHERE pm.receipt='1' AND pm.folder!='3' AND pm.status='0' AND pm.fromid='".$mybb->user['uid']."' - ORDER BY pm.dateline DESC - LIMIT {$start}, {$perpage} - "); - while($unreadmessage = $db->fetch_array($query)) - { - $unreadmessage['subject'] = htmlspecialchars_uni($parser->parse_badwords($unreadmessage['subject'])); - $unreadmessage['tousername'] = htmlspecialchars_uni($unreadmessage['tousername']); - $unreadmessage['profilelink'] = build_profile_link($unreadmessage['tousername'], $unreadmessage['toid']); - $senddate = my_date('relative', $unreadmessage['dateline']); - eval("\$unreadmessages .= \"".$templates->get("private_tracking_unreadmessage")."\";"); - } - - $stoptrackingunread = ''; - if(!empty($unreadmessages)) - { - eval("\$stoptrackingunread = \"".$templates->get("private_tracking_unreadmessage_stop")."\";"); - } - - if(!$unreadmessages) - { - $lang->no_readmessages = $lang->no_unreadmessages; - eval("\$unreadmessages = \"".$templates->get("private_tracking_nomessage")."\";"); - } - - $plugins->run_hooks("private_tracking_end"); - - eval("\$tracking = \"".$templates->get("private_tracking")."\";"); - output_page($tracking); -} - -if($mybb->input['action'] == "do_tracking" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_do_tracking_start"); - - if(!empty($mybb->input['stoptracking'])) - { - $mybb->input['readcheck'] = $mybb->get_input('readcheck', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['readcheck'])) - { - foreach($mybb->input['readcheck'] as $key => $val) - { - $sql_array = array( - "receipt" => 0 - ); - $db->update_query("privatemessages", $sql_array, "pmid=".(int)$key." AND fromid=".$mybb->user['uid']); - } - } - $plugins->run_hooks("private_do_tracking_end"); - redirect("private.php?action=tracking", $lang->redirect_pmstrackingstopped); - } - elseif(!empty($mybb->input['stoptrackingunread'])) - { - $mybb->input['unreadcheck'] = $mybb->get_input('unreadcheck', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['unreadcheck'])) - { - foreach($mybb->input['unreadcheck'] as $key => $val) - { - $sql_array = array( - "receipt" => 0 - ); - $db->update_query("privatemessages", $sql_array, "pmid=".(int)$key." AND fromid=".$mybb->user['uid']); - } - } - $plugins->run_hooks("private_do_tracking_end"); - redirect("private.php?action=tracking", $lang->redirect_pmstrackingstopped); - } - elseif(!empty($mybb->input['cancel'])) - { - $mybb->input['unreadcheck'] = $mybb->get_input('unreadcheck', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['unreadcheck'])) - { - foreach($mybb->input['unreadcheck'] as $pmid => $val) - { - $pmids[$pmid] = (int)$pmid; - } - - $pmids = implode(",", $pmids); - $query = $db->simple_select("privatemessages", "uid", "pmid IN ($pmids) AND fromid='".$mybb->user['uid']."'"); - while($pm = $db->fetch_array($query)) - { - $pmuids[$pm['uid']] = $pm['uid']; - } - - $db->delete_query("privatemessages", "pmid IN ($pmids) AND receipt='1' AND status='0' AND fromid='".$mybb->user['uid']."'"); - foreach($pmuids as $uid) - { - // Message is canceled, update PM count for this user - update_pm_count($uid); - } - } - $plugins->run_hooks("private_do_tracking_end"); - redirect("private.php?action=tracking", $lang->redirect_pmstrackingcanceled); - } -} - -if($mybb->input['action'] == "stopalltracking") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_stopalltracking_start"); - - $sql_array = array( - "receipt" => 0 - ); - $db->update_query("privatemessages", $sql_array, "receipt='2' AND folder!='3' AND status!='0' AND fromid=".$mybb->user['uid']); - - $plugins->run_hooks("private_stopalltracking_end"); - redirect("private.php?action=tracking", $lang->redirect_allpmstrackingstopped); -} - -if($mybb->input['action'] == "folders") -{ - $plugins->run_hooks("private_folders_start"); - - $folderlist = ''; - $foldersexploded = explode("$%%$", $mybb->user['pmfolders']); - foreach($foldersexploded as $key => $folders) - { - $folderinfo = explode("**", $folders, 2); - $foldername = $folderinfo[1]; - $fid = $folderinfo[0]; - $foldername = get_pm_folder_name($fid, $foldername); - - if($folderinfo[0] == "1" || $folderinfo[0] == "2" || $folderinfo[0] == "3" || $folderinfo[0] == "4") - { - $foldername2 = get_pm_folder_name($fid); - eval("\$folderlist .= \"".$templates->get("private_folders_folder_unremovable")."\";"); - unset($name); - } - else - { - eval("\$folderlist .= \"".$templates->get("private_folders_folder")."\";"); - } - } - - $newfolders = ''; - for($i = 1; $i <= 5; ++$i) - { - $fid = "new$i"; - $foldername = ''; - eval("\$newfolders .= \"".$templates->get("private_folders_folder")."\";"); - } - - $plugins->run_hooks("private_folders_end"); - - eval("\$folders = \"".$templates->get("private_folders")."\";"); - output_page($folders); -} - -if($mybb->input['action'] == "do_folders" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_do_folders_start"); - - $highestid = 2; - $folders = ''; - $donefolders = array(); - $mybb->input['folder'] = $mybb->get_input('folder', MyBB::INPUT_ARRAY); - foreach($mybb->input['folder'] as $key => $val) - { - if(empty($donefolders[$val]) )// Probably was a check for duplicate folder names, but doesn't seem to be used now - { - if(my_substr($key, 0, 3) == "new") // Create a new folder - { - ++$highestid; - $fid = (int)$highestid; - } - else // Editing an existing folder - { - if($key > $highestid) - { - $highestid = $key; - } - - $fid = (int)$key; - // Use default language strings if empty or value is language string - switch($fid) - { - case 1: - if($val == $lang->folder_inbox || trim($val) == '') - { - $val = ''; - } - break; - case 2: - if($val == $lang->folder_sent_items || trim($val) == '') - { - $val = ''; - } - break; - case 3: - if($val == $lang->folder_drafts || trim($val) == '') - { - $val = ''; - } - break; - case 4: - if($val == $lang->folder_trash || trim($val) == '') - { - $val = ''; - } - break; - } - } - - if($val != '' && trim($val) == '' && !($key >= 1 && $key <= 4)) - { - // If the name only contains whitespace and it's not a default folder, print an error - error($lang->error_emptypmfoldername); - } - - if($val != '' || ($key >= 1 && $key <= 4)) - { - // If there is a name or if this is a default folder, save it - $foldername = $db->escape_string(htmlspecialchars_uni($val)); - - if(my_strpos($foldername, "$%%$") === false) - { - if($folders != '') - { - $folders .= "$%%$"; - } - $folders .= "$fid**$foldername"; - } - else - { - error($lang->error_invalidpmfoldername); - } - } - else - { - // Delete PMs from the folder - $db->delete_query("privatemessages", "folder='$fid' AND uid='".$mybb->user['uid']."'"); - } - } - } - - $sql_array = array( - "pmfolders" => $folders - ); - $db->update_query("users", $sql_array, "uid='".$mybb->user['uid']."'"); - - // Update PM count - update_pm_count(); - - $plugins->run_hooks("private_do_folders_end"); - - redirect("private.php", $lang->redirect_pmfoldersupdated); -} - -if($mybb->input['action'] == "empty") -{ - if($mybb->user['totalpms'] == 0) - { - error($lang->error_nopms); - } - - $plugins->run_hooks("private_empty_start"); - - $foldersexploded = explode("$%%$", $mybb->user['pmfolders']); - $folderlist = ''; - foreach($foldersexploded as $key => $folders) - { - $folderinfo = explode("**", $folders, 2); - $fid = $folderinfo[0]; - $foldername = get_pm_folder_name($fid, $folderinfo[1]); - $query = $db->simple_select("privatemessages", "COUNT(*) AS pmsinfolder", " folder='$fid' AND uid='".$mybb->user['uid']."'"); - $thing = $db->fetch_array($query); - $foldercount = my_number_format($thing['pmsinfolder']); - eval("\$folderlist .= \"".$templates->get("private_empty_folder")."\";"); - } - - $plugins->run_hooks("private_empty_end"); - - eval("\$folders = \"".$templates->get("private_empty")."\";"); - output_page($folders); -} - -if($mybb->input['action'] == "do_empty" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_do_empty_start"); - - $emptyq = ''; - $mybb->input['empty'] = $mybb->get_input('empty', MyBB::INPUT_ARRAY); - $keepunreadq = ''; - if($mybb->get_input('keepunread', MyBB::INPUT_INT) == 1) - { - $keepunreadq = " AND status!='0'"; - } - if(!empty($mybb->input['empty'])) - { - foreach($mybb->input['empty'] as $key => $val) - { - if($val == 1) - { - $key = (int)$key; - if($emptyq) - { - $emptyq .= " OR "; - } - $emptyq .= "folder='$key'"; - } - } - - if($emptyq != '') - { - $db->delete_query("privatemessages", "($emptyq) AND uid='".$mybb->user['uid']."'{$keepunreadq}"); - } - } - - // Update PM count - update_pm_count(); - - $plugins->run_hooks("private_do_empty_end"); - redirect("private.php", $lang->redirect_pmfoldersemptied); -} - -if($mybb->input['action'] == "do_stuff" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_do_stuff"); - - if(!empty($mybb->input['hop'])) - { - header("Location: private.php?fid=".$mybb->get_input('jumpto')); - } - elseif(!empty($mybb->input['moveto'])) - { - $mybb->input['check'] = $mybb->get_input('check', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['check'])) - { - foreach($mybb->input['check'] as $key => $val) - { - $sql_array = array( - "folder" => $mybb->input['fid'] - ); - $db->update_query("privatemessages", $sql_array, "pmid='".(int)$key."' AND uid='".$mybb->user['uid']."'"); - } - } - // Update PM count - update_pm_count(); - - if(!empty($mybb->input['fromfid'])) - { - redirect("private.php?fid=".$mybb->get_input('fromfid', MyBB::INPUT_INT), $lang->redirect_pmsmoved); - } - else - { - redirect("private.php", $lang->redirect_pmsmoved); - } - } - elseif(!empty($mybb->input['delete'])) - { - $mybb->input['check'] = $mybb->get_input('check', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['check'])) - { - $pmssql = ''; - foreach($mybb->input['check'] as $key => $val) - { - if($pmssql) - { - $pmssql .= ","; - } - $pmssql .= "'".(int)$key."'"; - } - - $deletepms = array(); - $query = $db->simple_select("privatemessages", "pmid, folder", "pmid IN ($pmssql) AND uid='".$mybb->user['uid']."' AND folder='4'", array('order_by' => 'pmid')); - while($delpm = $db->fetch_array($query)) - { - $deletepms[$delpm['pmid']] = 1; - } - - foreach($mybb->input['check'] as $key => $val) - { - $key = (int)$key; - if(!empty($deletepms[$key])) - { - $db->delete_query("privatemessages", "pmid='$key' AND uid='".$mybb->user['uid']."'"); - } - else - { - $sql_array = array( - "folder" => 4, - "deletetime" => TIME_NOW - ); - $db->update_query("privatemessages", $sql_array, "pmid='".$key."' AND uid='".$mybb->user['uid']."'"); - } - } - } - // Update PM count - update_pm_count(); - - if(!empty($mybb->input['fromfid'])) - { - redirect("private.php?fid=".$mybb->get_input('fromfid', MyBB::INPUT_INT), $lang->redirect_pmsdeleted); - } - else - { - redirect("private.php", $lang->redirect_pmsdeleted); - } - } -} - -if($mybb->input['action'] == "delete") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_delete_start"); - - $query = $db->simple_select("privatemessages", "*", "pmid='".$mybb->get_input('pmid', MyBB::INPUT_INT)."' AND uid='".$mybb->user['uid']."' AND folder='4'", array('order_by' => 'pmid')); - if($db->num_rows($query) == 1) - { - $db->delete_query("privatemessages", "pmid='".$mybb->get_input('pmid', MyBB::INPUT_INT)."'"); - } - else - { - $sql_array = array( - "folder" => 4, - "deletetime" => TIME_NOW - ); - $db->update_query("privatemessages", $sql_array, "pmid='".$mybb->get_input('pmid', MyBB::INPUT_INT)."' AND uid='".$mybb->user['uid']."'"); - } - - // Update PM count - update_pm_count(); - - $plugins->run_hooks("private_delete_end"); - redirect("private.php", $lang->redirect_pmsdeleted); -} - -if($mybb->input['action'] == "export") -{ - if($mybb->user['totalpms'] == 0) - { - error($lang->error_nopms); - } - - $plugins->run_hooks("private_export_start"); - - $foldersexploded = explode("$%%$", $mybb->user['pmfolders']); - $folder_name = $folder_id = ''; - foreach($foldersexploded as $key => $folders) - { - $folderinfo = explode("**", $folders, 2); - $folderinfo[1] = get_pm_folder_name($folderinfo[0], $folderinfo[1]); - - $folder_id = $folderinfo[0]; - $folder_name = $folderinfo[1]; - - eval("\$folderlist_folder .= \"".$templates->get("private_archive_folders_folder")."\";"); - } - - eval("\$folderlist = \"".$templates->get("private_archive_folders")."\";"); - - $plugins->run_hooks("private_export_end"); - - eval("\$archive = \"".$templates->get("private_archive")."\";"); - - output_page($archive); -} - -if($mybb->input['action'] == "do_export" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("private_do_export_start"); - - $lang->private_messages_for = $lang->sprintf($lang->private_messages_for, htmlspecialchars_uni($mybb->user['username'])); - $exdate = my_date($mybb->settings['dateformat'], TIME_NOW, 0, 0); - $extime = my_date($mybb->settings['timeformat'], TIME_NOW, 0, 0); - $lang->exported_date = $lang->sprintf($lang->exported_date, $exdate, $extime); - $foldersexploded = explode("$%%$", $mybb->user['pmfolders']); - foreach($foldersexploded as $key => $folders) - { - $folderinfo = explode("**", $folders, 2); - $folderinfo[1] = get_pm_folder_name($folderinfo[0], $folderinfo[1]); - $foldersexploded[$key] = implode("**", $folderinfo); - } - - if($mybb->get_input('pmid', MyBB::INPUT_INT)) - { - $wsql = "pmid='".$mybb->get_input('pmid', MyBB::INPUT_INT)."' AND uid='".$mybb->user['uid']."'"; - } - else - { - if($mybb->get_input('daycut', MyBB::INPUT_INT) && ($mybb->get_input('dayway') != "disregard")) - { - $datecut = TIME_NOW-($mybb->get_input('daycut', MyBB::INPUT_INT) * 86400); - $wsql = "pm.dateline"; - if($mybb->get_input('dayway') == "older") - { - $wsql .= "<="; - } - else - { - $wsql .= ">="; - } - $wsql .= "'$datecut'"; - } - else - { - $wsql = "1=1"; - } - - $mybb->input['exportfolders'] = $mybb->get_input('exportfolders', MyBB::INPUT_ARRAY); - if(!empty($mybb->input['exportfolders'])) - { - $folderlst = ''; - foreach($mybb->input['exportfolders'] as $key => $val) - { - $val = $db->escape_string($val); - if($val == "all") - { - $folderlst = ''; - break; - } - else - { - if(!$folderlst) - { - $folderlst = " AND pm.folder IN ('$val'"; - } - else - { - $folderlst .= ",'$val'"; - } - } - } - if($folderlst) - { - $folderlst .= ")"; - } - $wsql .= "$folderlst"; - } - else - { - error($lang->error_pmnoarchivefolders); - } - - if($mybb->get_input('exportunread', MyBB::INPUT_INT) != 1) - { - $wsql .= " AND pm.status!='0'"; - } - } - $query = $db->query(" - SELECT pm.*, fu.username AS fromusername, tu.username AS tousername - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users fu ON (fu.uid=pm.fromid) - LEFT JOIN ".TABLE_PREFIX."users tu ON (tu.uid=pm.toid) - WHERE $wsql AND pm.uid='".$mybb->user['uid']."' - ORDER BY pm.folder ASC, pm.dateline DESC - "); - $numpms = $db->num_rows($query); - if(!$numpms) - { - error($lang->error_nopmsarchive); - } - - $mybb->input['exporttype'] = $mybb->get_input('exporttype'); - - $pmsdownload = $ids = ''; - while($message = $db->fetch_array($query)) - { - if($message['folder'] == 2 || $message['folder'] == 3) - { // Sent Items or Drafts Folder Check - if($message['toid']) - { - $tofromuid = $message['toid']; - if($mybb->input['exporttype'] == "txt") - { - $tofromusername = $message['tousername']; - } - else - { - $tofromusername = build_profile_link($message['tousername'], $tofromuid); - } - } - else - { - $tofromusername = $lang->not_sent; - } - $tofrom = $lang->to; - } - else - { - $tofromuid = $message['fromid']; - if($mybb->input['exporttype'] == "txt") - { - $tofromusername = $message['fromusername']; - } - else - { - $tofromusername = build_profile_link($message['fromusername'], $tofromuid); - } - - if($tofromuid == 0) - { - $tofromusername = $lang->mybb_engine; - } - $tofrom = $lang->from; - } - - if($tofromuid == 0) - { - $message['fromusername'] = $lang->mybb_engine; - } - - if(!$message['toid'] && $message['folder'] == 3) - { - $message['tousername'] = $lang->not_sent; - } - - $message['subject'] = $parser->parse_badwords($message['subject']); - if($message['folder'] != "3") - { - $senddate = my_date($mybb->settings['dateformat'], $message['dateline'], "", false); - $sendtime = my_date($mybb->settings['timeformat'], $message['dateline'], "", false); - $senddate .= " $lang->at $sendtime"; - } - else - { - $senddate = $lang->not_sent; - } - - if($mybb->input['exporttype'] == "html") - { - $parser_options = array( - "allow_html" => $mybb->settings['pmsallowhtml'], - "allow_mycode" => $mybb->settings['pmsallowmycode'], - "allow_smilies" => 0, - "allow_imgcode" => $mybb->settings['pmsallowimgcode'], - "allow_videocode" => $mybb->settings['pmsallowvideocode'], - "me_username" => $mybb->user['username'], - "filter_badwords" => 1 - ); - - $message['message'] = $parser->parse_message($message['message'], $parser_options); - $message['subject'] = htmlspecialchars_uni($message['subject']); - } - - if($mybb->input['exporttype'] == "txt" || $mybb->input['exporttype'] == "csv") - { - $message['message'] = str_replace("\r\n", "\n", $message['message']); - $message['message'] = str_replace("\n", "\r\n", $message['message']); - } - - if($mybb->input['exporttype'] == "csv") - { - $message['message'] = my_escape_csv($message['message']); - $message['subject'] = my_escape_csv($message['subject']); - $message['tousername'] = my_escape_csv($message['tousername']); - $message['fromusername'] = my_escape_csv($message['fromusername']); - } - - if(empty($donefolder[$message['folder']])) - { - reset($foldersexploded); - foreach($foldersexploded as $key => $val) - { - $folderinfo = explode("**", $val, 2); - if($folderinfo[0] == $message['folder']) - { - $foldername = $folderinfo[1]; - if($mybb->input['exporttype'] != "csv") - { - if($mybb->input['exporttype'] != "html") - { - $mybb->input['exporttype'] == "txt"; - } - eval("\$pmsdownload .= \"".$templates->get("private_archive_".$mybb->input['exporttype']."_folderhead", 1, 0)."\";"); - } - else - { - $foldername = my_escape_csv($folderinfo[1]); - } - $donefolder[$message['folder']] = 1; - } - } - } - - eval("\$pmsdownload .= \"".$templates->get("private_archive_".$mybb->input['exporttype']."_message", 1, 0)."\";"); - $ids .= ",'{$message['pmid']}'"; - } - - if($mybb->input['exporttype'] == "html") - { - // Gather global stylesheet for HTML - $query = $db->simple_select("themestylesheets", "stylesheet", "sid = '1'", array('limit' => 1)); - $css = $db->fetch_field($query, "stylesheet"); - } - - $plugins->run_hooks("private_do_export_end"); - - eval("\$archived = \"".$templates->get("private_archive_".$mybb->input['exporttype'], 1, 0)."\";"); - if($mybb->get_input('deletepms', MyBB::INPUT_INT) == 1) - { // delete the archived pms - $db->delete_query("privatemessages", "pmid IN ('0'$ids)"); - // Update PM count - update_pm_count(); - } - - if($mybb->input['exporttype'] == "html") - { - $filename = "pm-archive.html"; - $contenttype = "text/html"; - } - elseif($mybb->input['exporttype'] == "csv") - { - $filename = "pm-archive.csv"; - $contenttype = "application/octet-stream"; - } - else - { - $filename = "pm-archive.txt"; - $contenttype = "text/plain"; - } - - $archived = str_replace("\\\'","'",$archived); - header("Content-disposition: filename=$filename"); - header("Content-type: ".$contenttype); - - if($mybb->input['exporttype'] == "html") - { - output_page($archived); - } - else - { - echo "\xEF\xBB\xBF"; // UTF-8 BOM - echo $archived; - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("private_inbox"); - - if(!$mybb->input['fid'] || !array_key_exists($mybb->input['fid'], $foldernames)) - { - $mybb->input['fid'] = 1; - } - - $folder = $mybb->input['fid']; - $foldername = $foldernames[$folder]; - - if($folder == 2 || $folder == 3) - { // Sent Items Folder - $sender = $lang->sentto; - } - else - { - $sender = $lang->sender; - } - - $mybb->input['order'] = htmlspecialchars_uni($mybb->get_input('order')); - $ordersel = array('asc' => '', 'desc'); - switch(my_strtolower($mybb->input['order'])) - { - case "asc": - $sortordernow = "asc"; - $ordersel['asc'] = "selected=\"selected\""; - $oppsort = $lang->desc; - $oppsortnext = "desc"; - break; - default: - $sortordernow = "desc"; - $ordersel['desc'] = "selected=\"selected\""; - $oppsort = $lang->asc; - $oppsortnext = "asc"; - break; - } - - // Sort by which field? - $sortby = htmlspecialchars_uni($mybb->get_input('sortby')); - switch($mybb->get_input('sortby')) - { - case "subject": - $sortfield = "subject"; - break; - case "username": - $sortfield = "username"; - break; - default: - $sortby = "dateline"; - $sortfield = "dateline"; - $mybb->input['sortby'] = "dateline"; - break; - } - $orderarrow = $sortsel = array('subject' => '', 'username' => '', 'dateline' => ''); - $sortsel[$sortby] = "selected=\"selected\""; - - eval("\$orderarrow['$sortby'] = \"".$templates->get("private_orderarrow")."\";"); - - // Do Multi Pages - $query = $db->simple_select("privatemessages", "COUNT(*) AS total", "uid='".$mybb->user['uid']."' AND folder='$folder'"); - $pmscount = $db->fetch_array($query); - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $perpage = $mybb->settings['threadsperpage']; - $page = $mybb->get_input('page', MyBB::INPUT_INT); - - if($page > 0) - { - $start = ($page-1) *$perpage; - } - else - { - $start = 0; - $page = 1; - } - - $end = $start + $perpage; - $lower = $start+1; - $upper = $end; - - if($upper > $pmscount) - { - $upper = $pmscount; - } - - if($mybb->input['order'] || ($sortby && $sortby != "dateline")) - { - $page_url = "private.php?fid={$folder}&sortby={$sortby}&order={$sortordernow}"; - } - else - { - $page_url = "private.php?fid={$folder}"; - } - - $multipage = multipage($pmscount['total'], $perpage, $page, $page_url); - $messagelist = ''; - - $icon_cache = $cache->read("posticons"); - - // Cache users in multiple recipients for sent & drafts folder - if($folder == 2 || $folder == 3) - { - if($sortfield == "username") - { - $u = "u."; - } - else - { - $u = "pm."; - } - - // Get all recipients into an array - $cached_users = $get_users = array(); - $users_query = $db->query(" - SELECT pm.recipients - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=pm.toid) - WHERE pm.folder='{$folder}' AND pm.uid='{$mybb->user['uid']}' - ORDER BY {$u}{$sortfield} {$sortordernow} - LIMIT {$start}, {$perpage} - "); - while($row = $db->fetch_array($users_query)) - { - $recipients = my_unserialize($row['recipients']); - if(is_array($recipients['to']) && count($recipients['to'])) - { - $get_users = array_merge($get_users, $recipients['to']); - } - - if(isset($recipients['bcc']) && is_array($recipients['bcc']) && count($recipients['bcc'])) - { - $get_users = array_merge($get_users, $recipients['bcc']); - } - } - - $get_users = implode(',', array_unique($get_users)); - - // Grab info - if($get_users) - { - $users_query = $db->simple_select("users", "uid, username, usergroup, displaygroup", "uid IN ({$get_users})"); - while($user = $db->fetch_array($users_query)) - { - $cached_users[$user['uid']] = $user; - } - } - } - - if($folder == 2 || $folder == 3) - { - if($sortfield == "username") - { - $pm = "tu."; - } - else - { - $pm = "pm."; - } - } - else - { - if($sortfield == "username") - { - $pm = "fu."; - } - else - { - $pm = "pm."; - } - } - - $query = $db->query(" - SELECT pm.*, fu.username AS fromusername, tu.username as tousername - FROM ".TABLE_PREFIX."privatemessages pm - LEFT JOIN ".TABLE_PREFIX."users fu ON (fu.uid=pm.fromid) - LEFT JOIN ".TABLE_PREFIX."users tu ON (tu.uid=pm.toid) - WHERE pm.folder='$folder' AND pm.uid='".$mybb->user['uid']."' - ORDER BY {$pm}{$sortfield} {$sortordernow} - LIMIT $start, $perpage - "); - - if($db->num_rows($query) > 0) - { - while($message = $db->fetch_array($query)) - { - $msgalt = $msgstatus = ''; - - // Determine Folder Icon - if($message['status'] == 0) - { - $msgstatus = 'new_pm'; - $msgalt = $lang->new_pm; - } - else if($message['status'] == 1) - { - $msgstatus = 'old_pm'; - $msgalt = $lang->old_pm; - } - else if($message['status'] == 3) - { - $msgstatus = 're_pm'; - $msgalt = $lang->reply_pm; - } - else if($message['status'] == 4) - { - $msgstatus = 'fw_pm'; - $msgalt = $lang->fwd_pm; - } - - $tofromuid = 0; - if($folder == 2 || $folder == 3) - { // Sent Items or Drafts Folder Check - $recipients = my_unserialize($message['recipients']); - $to_users = $bcc_users = ''; - if(count($recipients['to']) > 1 || (count($recipients['to']) == 1 && isset($recipients['bcc']) && count($recipients['bcc']) > 0)) - { - foreach($recipients['to'] as $uid) - { - $profilelink = get_profile_link($uid); - $user = $cached_users[$uid]; - $user['username'] = htmlspecialchars_uni($user['username']); - $username = format_name($user['username'], $user['usergroup'], $user['displaygroup']); - if(!$user['username']) - { - $username = $lang->na; - } - eval("\$to_users .= \"".$templates->get("private_multiple_recipients_user")."\";"); - } - if(isset($recipients['bcc']) && is_array($recipients['bcc']) && count($recipients['bcc'])) - { - eval("\$bcc_users = \"".$templates->get("private_multiple_recipients_bcc")."\";"); - foreach($recipients['bcc'] as $uid) - { - $profilelink = get_profile_link($uid); - $user = $cached_users[$uid]; - $user['username'] = htmlspecialchars_uni($user['username']); - $username = format_name($user['username'], $user['usergroup'], $user['displaygroup']); - if(!$user['username']) - { - $username = $lang->na; - } - eval("\$bcc_users .= \"".$templates->get("private_multiple_recipients_user")."\";"); - } - } - - eval("\$tofromusername = \"".$templates->get("private_multiple_recipients")."\";"); - } - else if($message['toid']) - { - $tofromusername = htmlspecialchars_uni($message['tousername']); - $tofromuid = $message['toid']; - } - else - { - $tofromusername = $lang->not_sent; - } - } - else - { - $tofromusername = htmlspecialchars_uni($message['fromusername']); - $tofromuid = $message['fromid']; - if($tofromuid == 0) - { - $tofromusername = $lang->mybb_engine; - } - - if(!$tofromusername) - { - $tofromuid = 0; - $tofromusername = $lang->na; - } - } - - $tofromusername = build_profile_link($tofromusername, $tofromuid); - - if($mybb->usergroup['candenypmreceipts'] == 1 && $message['receipt'] == '1' && $message['folder'] != '3' && $message['folder'] != 2) - { - eval("\$denyreceipt = \"".$templates->get("private_messagebit_denyreceipt")."\";"); - } - else - { - $denyreceipt = ''; - } - - if($message['icon'] > 0 && $icon_cache[$message['icon']]) - { - $icon = $icon_cache[$message['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("private_messagebit_icon")."\";"); - } - else - { - $icon = ' '; - } - - if(!trim($message['subject'])) - { - $message['subject'] = $lang->pm_no_subject; - } - - $message['subject'] = htmlspecialchars_uni($parser->parse_badwords($message['subject'])); - if($message['folder'] != "3") - { - $senddate = my_date('relative', $message['dateline']); - } - else - { - $senddate = $lang->not_sent; - } - - $plugins->run_hooks("private_message"); - - eval("\$messagelist .= \"".$templates->get("private_messagebit")."\";"); - } - } - else - { - eval("\$messagelist .= \"".$templates->get("private_nomessages")."\";"); - } - - $pmspacebar = ''; - if($mybb->usergroup['pmquota'] != '0' && $mybb->usergroup['cancp'] != 1) - { - $query = $db->simple_select("privatemessages", "COUNT(*) AS total", "uid='".$mybb->user['uid']."'"); - $pmscount = $db->fetch_array($query); - if($pmscount['total'] == 0) - { - $spaceused = 0; - } - else - { - $spaceused = $pmscount['total'] / $mybb->usergroup['pmquota'] * 100; - } - $spaceused2 = 100 - $spaceused; - $belowhalf = $overhalf = ''; - if($spaceused <= "50") - { - $spaceused_severity = "low"; - $belowhalf = round($spaceused, 0)."%"; - if((int)$belowhalf > 100) - { - $belowhalf = "100%"; - } - } - else - { - if($spaceused <= "75") - { - $spaceused_severity = "medium"; - } - - else - { - $spaceused_severity = "high"; - } - - $overhalf = round($spaceused, 0)."%"; - if((int)$overhalf > 100) - { - $overhalf = "100%"; - } - } - - if($spaceused > 100) - { - $spaceused = 100; - $spaceused2 = 0; - } - - eval("\$pmspacebar = \"".$templates->get("private_pmspace")."\";"); - } - - $composelink = ''; - if($mybb->usergroup['cansendpms'] == 1) - { - eval("\$composelink = \"".$templates->get("private_composelink")."\";"); - } - - $emptyexportlink = ''; - if($mybb->user['totalpms'] > 0) - { - eval("\$emptyexportlink = \"".$templates->get("private_emptyexportlink")."\";"); - } - - $limitwarning = ''; - if($mybb->usergroup['pmquota'] != "0" && $pmscount['total'] >= $mybb->usergroup['pmquota'] && $mybb->usergroup['cancp'] != 1) - { - eval("\$limitwarning = \"".$templates->get("private_limitwarning")."\";"); - } - - $plugins->run_hooks("private_end"); - - eval("\$folder = \"".$templates->get("private")."\";"); - output_page($folder); -} diff --git a/html/forums/ratethread.php b/html/forums/ratethread.php deleted file mode 100644 index 23c54ea..0000000 --- a/html/forums/ratethread.php +++ /dev/null @@ -1,156 +0,0 @@ -get_input('my_post_key')); - -$lang->load("ratethread"); - -$tid = $mybb->get_input('tid'); -$thread = get_thread($tid); -if(!$thread) -{ - error($lang->error_invalidthread); -} - -// Is the currently logged in user a moderator of this forum? -$ismod = is_moderator($thread['fid']); - -// Make sure we are looking at a real thread here. -if(($thread['visible'] != 1 && $ismod == false) || ($thread['visible'] > 1 && $ismod == true)) -{ - error($lang->error_invalidthread); -} - -if($thread['uid'] == $mybb->user['uid']) -{ - error($lang->error_cannotrateownthread); -} - -$forumpermissions = forum_permissions($thread['fid']); -if($forumpermissions['canview'] == 0 || $forumpermissions['canratethreads'] == 0 || $mybb->usergroup['canratethreads'] == 0 || $mybb->settings['allowthreadratings'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0)) -{ - error_no_permission(); -} - -// Get forum info -$fid = $thread['fid']; -$forum = get_forum($fid); -if(!$forum) -{ - error($lang->error_invalidforum); -} - -// Get forum info -$forum = get_forum($fid); -if(!$forum) -{ - error($lang->error_invalidforum); -} -else -{ - // Is our forum closed? - if($forum['open'] == 0) - { - // Doesn't look like it is - error($lang->error_closedinvalidforum); - } -} - -// Check if this forum is password protected and we have a valid password -check_forum_password($forum['fid']); - -if($forum['allowtratings'] == 0) -{ - error_no_permission(); -} -$mybb->input['rating'] = $mybb->get_input('rating', MyBB::INPUT_INT); -if($mybb->input['rating'] < 1 || $mybb->input['rating'] > 5) -{ - error($lang->error_invalidrating); -} -$plugins->run_hooks("ratethread_start"); - -if($mybb->user['uid'] != 0) -{ - $whereclause = "uid='{$mybb->user['uid']}'"; -} -else -{ - $whereclause = "ipaddress=".$db->escape_binary($session->packedip); -} -$query = $db->simple_select("threadratings", "*", "{$whereclause} AND tid='{$tid}'"); -$ratecheck = $db->fetch_array($query); - -if($ratecheck['rid'] || isset($mybb->cookies['mybbratethread'][$tid])) -{ - error($lang->error_alreadyratedthread); -} -else -{ - $plugins->run_hooks("ratethread_process"); - - $db->write_query(" - UPDATE ".TABLE_PREFIX."threads - SET numratings=numratings+1, totalratings=totalratings+'{$mybb->input['rating']}' - WHERE tid='{$tid}' - "); - if($mybb->user['uid'] != 0) - { - $insertarray = array( - 'tid' => $tid, - 'uid' => $mybb->user['uid'], - 'rating' => $mybb->input['rating'], - 'ipaddress' => $db->escape_binary($session->packedip) - ); - $db->insert_query("threadratings", $insertarray); - } - else - { - $insertarray = array( - 'tid' => $tid, - 'rating' => $mybb->input['rating'], - 'ipaddress' => $db->escape_binary($session->packedip) - ); - $db->insert_query("threadratings", $insertarray); - $time = TIME_NOW; - my_setcookie("mybbratethread[{$tid}]", $mybb->input['rating']); - } -} -$plugins->run_hooks("ratethread_end"); - -if(!empty($mybb->input['ajax'])) -{ - $json = array("success" => $lang->rating_added); - $query = $db->simple_select("threads", "totalratings, numratings", "tid='$tid'", array('limit' => 1)); - $fetch = $db->fetch_array($query); - $width = 0; - if($fetch['numratings'] >= 0) - { - $averagerating = (float)round($fetch['totalratings']/$fetch['numratings'], 2); - $width = (int)round($averagerating)*20; - $fetch['numratings'] = (int)$fetch['numratings']; - $ratingvotesav = $lang->sprintf($lang->rating_votes_average, $fetch['numratings'], $averagerating); - $json = $json + array("average" => $ratingvotesav); - } - $json = $json + array("width" => $width); - - @header("Content-type: application/json; charset={$lang->settings['charset']}"); - echo json_encode($json); - exit; -} - -redirect(get_thread_link($thread['tid']), $lang->redirect_threadrated); diff --git a/html/forums/report.php b/html/forums/report.php deleted file mode 100644 index b551fc5..0000000 --- a/html/forums/report.php +++ /dev/null @@ -1,286 +0,0 @@ -load("report"); - -if(!$mybb->user['uid']) -{ - error_no_permission(); -} - -$plugins->run_hooks("report_start"); - -$report = array(); -$verified = false; -$report_type = 'post'; -$error = $report_type_db = ''; - -if(!empty($mybb->input['type'])) -{ - $report_type = htmlspecialchars_uni($mybb->get_input('type')); -} - -$report_title = $lang->report_content; -$report_string = "report_reason_{$report_type}"; - -if(isset($lang->$report_string)) -{ - $report_title = $lang->$report_string; -} - -$id = 0; -if($report_type == 'post') -{ - if($mybb->usergroup['canview'] == 0) - { - error_no_permission(); - } - - // Do we have a valid post? - $post = get_post($mybb->get_input('pid', MyBB::INPUT_INT)); - - if(!$post) - { - $error = $lang->error_invalid_report; - } - else - { - $id = $post['pid']; - $id2 = $post['tid']; - $report_type_db = "(type = 'post' OR type = '')"; - - // Check for a valid forum - $forum = get_forum($post['fid']); - - if(!isset($forum['fid'])) - { - $error = $lang->error_invalid_report; - } - else - { - $verified = true; - } - - // Password protected forums ......... yhummmmy! - $id3 = $forum['fid']; - check_forum_password($forum['parentlist']); - } -} -else if($report_type == 'profile') -{ - $user = get_user($mybb->get_input('pid', MyBB::INPUT_INT)); - - if(!isset($user['uid'])) - { - $error = $lang->error_invalid_report; - } - else - { - $id2 = $id3 = 0; // We don't use these on the profile - $id = $user['uid']; // id is the profile user - $permissions = user_permissions($user['uid']); - - if(empty($permissions['canbereported'])) - { - $error = $lang->error_invalid_report; - } - else - { - $verified = true; - $report_type_db = "type = 'profile'"; - } - } -} -else if($report_type == 'reputation') -{ - // Any member can report a reputation comment but let's make sure it exists first - $query = $db->simple_select("reputation", "*", "rid = '".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - - if(!$db->num_rows($query)) - { - $error = $lang->error_invalid_report; - } - else - { - $verified = true; - $reputation = $db->fetch_array($query); - - $id = $reputation['rid']; // id is the reputation id - $id2 = $reputation['adduid']; // id2 is the user who gave the comment - $id3 = $reputation['uid']; // id3 is the user who received the comment - - $report_type_db = "type = 'reputation'"; - } -} - -$plugins->run_hooks("report_type"); - -// Check for an existing report -if(!empty($report_type_db)) -{ - $query = $db->simple_select("reportedcontent", "*", "reportstatus != '1' AND id = '{$id}' AND {$report_type_db}"); - - if($db->num_rows($query)) - { - // Existing report - $report = $db->fetch_array($query); - $report['reporters'] = my_unserialize($report['reporters']); - - if($mybb->user['uid'] == $report['uid'] || is_array($report['reporters']) && in_array($mybb->user['uid'], $report['reporters'])) - { - $error = $lang->success_report_voted; - } - } -} - -$mybb->input['action'] = $mybb->get_input('action'); - -if(empty($error) && $verified == true && $mybb->input['action'] == "do_report" && $mybb->request_method == "post") -{ - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("report_do_report_start"); - - // Is this an existing report or a new offender? - if(!empty($report)) - { - // Existing report, add vote - $report['reporters'][] = $mybb->user['uid']; - update_report($report); - - $plugins->run_hooks("report_do_report_end"); - - eval("\$report_thanks = \"".$templates->get("report_thanks")."\";"); - echo $report_thanks; - exit; - } - else - { - // Bad user! - $new_report = array( - 'id' => $id, - 'id2' => $id2, - 'id3' => $id3, - 'uid' => $mybb->user['uid'] - ); - - // Figure out the reason - $rid = $mybb->get_input('reason', MyBB::INPUT_INT); - $query = $db->simple_select("reportreasons", "*", "rid = '{$rid}'"); - - if(!$db->num_rows($query)) - { - $error = $lang->error_invalid_report_reason; - $verified = false; - } - else - { - $reason = $db->fetch_array($query); - - $new_report['reasonid'] = $reason['rid']; - - if($reason['extra']) - { - $comment = trim($mybb->get_input('comment')); - if(empty($comment) || $comment == '') - { - $error = $lang->error_comment_required; - $verified = false; - } - else - { - if(my_strlen($comment) < 3) - { - $error = $lang->error_report_length; - $verified = false; - } - else - { - $new_report['reason'] = $comment; - } - } - } - } - - if(empty($error)) - { - add_report($new_report, $report_type); - - $plugins->run_hooks("report_do_report_end"); - - eval("\$report_thanks = \"".$templates->get("report_thanks")."\";"); - echo $report_thanks; - exit; - } - } -} - -if(!empty($error) || $verified == false) -{ - $mybb->input['action'] = ''; - - if($verified == false && empty($error)) - { - $error = $lang->error_invalid_report; - } -} - -if(!$mybb->input['action']) -{ - if(!empty($error)) - { - if($mybb->input['no_modal']) - { - eval("\$report_reasons = \"".$templates->get("report_error_nomodal")."\";"); - } - else - { - eval("\$report_reasons = \"".$templates->get("report_error")."\";"); - } - } - else - { - if(!empty($report)) - { - eval("\$report_reasons = \"".$templates->get("report_duplicate")."\";"); - } - else - { - $reportreasons = $cache->read('reportreasons'); - $reasons = $reportreasons[$report_type]; - $reasonslist = ''; - foreach($reasons as $reason) - { - $reason['title'] = htmlspecialchars_uni($lang->parse($reason['title'])); - eval("\$reasonslist .= \"".$templates->get("report_reason")."\";"); - } - eval("\$report_reasons = \"".$templates->get("report_reasons")."\";"); - } - } - - if($mybb->input['no_modal']) - { - echo $report_reasons; - exit; - } - - $plugins->run_hooks("report_end"); - - eval("\$report = \"".$templates->get("report", 1, 0)."\";"); - echo $report; - exit; -} diff --git a/html/forums/reputation.php b/html/forums/reputation.php deleted file mode 100644 index 49d41d9..0000000 --- a/html/forums/reputation.php +++ /dev/null @@ -1,1063 +0,0 @@ -load("reputation"); - -$plugins->run_hooks("reputation_start"); - -// Check if the reputation system is globally disabled or not. -if($mybb->settings['enablereputation'] != 1) -{ - error($lang->reputation_disabled); -} - -// Does this user have permission to view the board? -if($mybb->usergroup['canview'] != 1) -{ - error_no_permission(); -} - -// If we have a specified incoming username, validate it and fetch permissions for it -$uid = $mybb->get_input('uid', MyBB::INPUT_INT); -$user = get_user($uid); -if(!$user) -{ - error($lang->add_no_uid); -} -$user_permissions = user_permissions($uid); - -$mybb->input['action'] = $mybb->get_input('action'); - -// Here we perform our validation when adding a reputation to see if the user -// has permission or not. This is done here to save duplicating the same code. -if($mybb->input['action'] == "add" || $mybb->input['action'] == "do_add") -{ - // This user doesn't have permission to give reputations. - if($mybb->usergroup['cangivereputations'] != 1) - { - $message = $lang->add_no_permission; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // The user we're trying to give a reputation to doesn't have permission to receive reps. - if($user_permissions['usereputationsystem'] != 1) - { - $message = $lang->add_disabled; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // Is this user trying to give themself a reputation? - if($uid == $mybb->user['uid']) - { - $message = $lang->add_yours; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // If a post has been given but post ratings have been disabled, set the post to 0. This will mean all subsequent code will think no post was given. - if($mybb->settings['postrep'] != 1) - { - $mybb->input['pid'] = 0; - } - - if($mybb->get_input('pid', MyBB::INPUT_INT)) - { - // Make sure that this post exists, and that the author of the post we're giving this reputation for corresponds with the user the rep is being given to. - $post = get_post($mybb->get_input('pid', MyBB::INPUT_INT)); - if($post) - { - $thread = get_thread($post['tid']); - $forum = get_forum($thread['fid']); - $forumpermissions = forum_permissions($forum['fid']); - - // Post doesn't belong to that user or isn't visible - if($uid != $post['uid'] || $post['visible'] != 1) - { - $mybb->input['pid'] = 0; - } - - // Thread isn't visible - elseif($thread['visible'] != 1) - { - $mybb->input['pid'] = 0; - } - - // Current user can't see the forum - elseif($forumpermissions['canview'] == 0 || $forumpermissions['canpostreplys'] == 0 || $mybb->user['suspendposting'] == 1) - { - $mybb->input['pid'] = 0; - } - - // Current user can't see that thread - elseif(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] == 1 && $thread['uid'] != $mybb->user['uid']) - { - $mybb->input['pid'] = 0; - } - } - else - { - $mybb->input['pid'] = 0; - } - } - - $rid = 0; - - // Fetch the existing reputation for this user given by our current user if there is one. - // If multiple reputations is allowed, then this isn't needed - if($mybb->settings['multirep'] != 1 && $mybb->get_input('pid', MyBB::INPUT_INT) == 0) - { - $query = $db->simple_select("reputation", "*", "adduid='".$mybb->user['uid']."' AND uid='{$uid}' AND pid='0'"); - $existing_reputation = $db->fetch_array($query); - $rid = $existing_reputation['rid']; - $was_post = false; - } - if($mybb->get_input('pid', MyBB::INPUT_INT) != 0) - { - $query = $db->simple_select("reputation", "*", "adduid='".$mybb->user['uid']."' AND uid='{$uid}' AND pid = '".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - $existing_reputation = $db->fetch_array($query); - $rid = $existing_reputation['rid']; - $was_post = true; - } - - if($rid == 0 && ($mybb->input['action'] != "do_add" || ($mybb->input['action'] == "do_add" && empty($mybb->input['delete'])))) - { - $message = ''; - - // Check if this user has reached their "maximum reputations per day" quota - if($mybb->usergroup['maxreputationsday'] != 0) - { - $timesearch = TIME_NOW - (60 * 60 * 24); - $query = $db->simple_select("reputation", "*", "adduid='{$mybb->user['uid']}' AND dateline>'$timesearch'"); - $numtoday = $db->num_rows($query); - - // Reached the quota - error. - if($numtoday >= $mybb->usergroup['maxreputationsday']) - { - $message = $lang->add_maxperday; - } - } - - // Is the user giving too much reputation to another? - if(!$message && $mybb->usergroup['maxreputationsperuser'] != 0) - { - $timesearch = TIME_NOW - (60 * 60 * 24); - $query = $db->simple_select("reputation", "*", "uid='{$uid}' AND adduid='{$mybb->user['uid']}' AND dateline>'$timesearch'"); - $numtoday = $db->num_rows($query); - - if($numtoday >= $mybb->usergroup['maxreputationsperuser']) - { - $message = $lang->add_maxperuser; - } - } - - // We have the correct post, but has the user given too much reputation to another in the same thread? - if(!$message && $was_post && $mybb->usergroup['maxreputationsperthread'] != 0) - { - $timesearch = TIME_NOW - (60 * 60 * 24); - $query = $db->query(" - SELECT COUNT(p.pid) AS posts - FROM ".TABLE_PREFIX."reputation r - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid = r.pid) - WHERE r.uid = '{$uid}' AND r.adduid = '{$mybb->user['uid']}' AND p.tid = '{$post['tid']}' AND r.dateline > '{$timesearch}' - "); - - $numtoday = $db->fetch_field($query, 'posts'); - - if($numtoday >= $mybb->usergroup['maxreputationsperthread']) - { - $message = $lang->add_maxperthread; - } - } - - if($message) - { - if($mybb->input['nomodal']) - { - eval('$error = "'.$templates->get("reputation_add_error_nomodal", 1, 0).'";'); - } - else - { - eval('$error = "'.$templates->get("reputation_add_error", 1, 0).'";'); - } - echo $error; - exit; - } - } -} - -// Saving the new reputation -if($mybb->input['action'] == "do_add" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("reputation_do_add_start"); - - // Check if the reputation power they're trying to give is within their "power limit" - $reputation = abs($mybb->get_input('reputation', MyBB::INPUT_INT)); - - // Deleting our current reputation of this user. - if(!empty($mybb->input['delete'])) - { - // Only administrators, super moderators, as well as users who gave a specifc vote can delete one. - if($mybb->usergroup['issupermod'] != 1 && ($mybb->usergroup['candeletereputations'] != 1 || $existing_reputation['adduid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0)) - { - error_no_permission(); - } - - if($mybb->get_input('pid', MyBB::INPUT_INT) != 0) - { - $db->delete_query("reputation", "uid='{$uid}' AND adduid='".$mybb->user['uid']."' AND pid = '".$mybb->get_input('pid', MyBB::INPUT_INT)."'"); - } - else - { - $db->delete_query("reputation", "rid='{$rid}' AND uid='{$uid}' AND adduid='".$mybb->user['uid']."'"); - } - - // Recount the reputation of this user - keep it in sync. - $query = $db->simple_select("reputation", "SUM(reputation) AS reputation_count", "uid='{$uid}'"); - $reputation_value = $db->fetch_field($query, "reputation_count"); - - $db->update_query("users", array('reputation' => (int)$reputation_value), "uid='{$uid}'"); - eval("\$error = \"".$templates->get("reputation_deleted", 1, 0)."\";"); - echo $error; - exit; - } - - $mybb->input['comments'] = trim($mybb->get_input('comments')); // Trim whitespace to check for length - if(my_strlen($mybb->input['comments']) < $mybb->settings['minreplength'] && $mybb->get_input('pid', MyBB::INPUT_INT) == 0) - { - $message = $lang->add_no_comment; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // The power for the reputation they specified was invalid. - if($reputation > $mybb->usergroup['reputationpower']) - { - $message = $lang->add_invalidpower; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // The user is trying to give a negative reputation, but negative reps have been disabled. - if($mybb->get_input('reputation', MyBB::INPUT_INT) < 0 && $mybb->settings['negrep'] != 1) - { - $message = $lang->add_negative_disabled; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // This user is trying to give a neutral reputation, but neutral reps have been disabled. - if($mybb->get_input('reputation', MyBB::INPUT_INT) == 0 && $mybb->settings['neurep'] != 1) - { - $message = $lang->add_neutral_disabled; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // This user is trying to give a positive reputation, but positive reps have been disabled. - if($mybb->get_input('reputation', MyBB::INPUT_INT) > 0 && $mybb->settings['posrep'] != 1) - { - $message = $lang->add_positive_disabled; - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // The length of the comment is too long - if(my_strlen($mybb->input['comments']) > $mybb->settings['maxreplength']) - { - $message = $lang->sprintf($lang->add_toolong, $mybb->settings['maxreplength']); - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - echo $error; - exit; - } - - // Build array of reputation data. - $reputation = array( - "uid" => $uid, - "adduid" => $mybb->user['uid'], - "pid" => $mybb->get_input('pid', MyBB::INPUT_INT), - "reputation" => $mybb->get_input('reputation', MyBB::INPUT_INT), - "dateline" => TIME_NOW, - "comments" => $db->escape_string($mybb->input['comments']) - ); - - $plugins->run_hooks("reputation_do_add_process"); - - // Updating an existing reputation - if(!empty($existing_reputation['uid'])) - { - $db->update_query("reputation", $reputation, "rid='".$existing_reputation['rid']."'"); - - // Recount the reputation of this user - keep it in sync. - $query = $db->simple_select("reputation", "SUM(reputation) AS reputation_count", "uid='{$uid}'"); - $reputation_value = $db->fetch_field($query, "reputation_count"); - - $db->update_query("users", array('reputation' => (int)$reputation_value), "uid='{$uid}'"); - - $lang->vote_added = $lang->vote_updated; - $lang->vote_added_message = $lang->vote_updated_message; - } - // Insert a new reputation - else - { - $db->insert_query("reputation", $reputation); - - // Recount the reputation of this user - keep it in sync. - $query = $db->simple_select("reputation", "SUM(reputation) AS reputation_count", "uid='{$uid}'"); - $reputation_value = $db->fetch_field($query, "reputation_count"); - - $db->update_query("users", array('reputation' => (int)$reputation_value), "uid='{$uid}'"); - } - - $plugins->run_hooks("reputation_do_add_end"); - - eval("\$reputation = \"".$templates->get("reputation_added", 1, 0)."\";"); - echo $reputation; - exit; -} - -// Adding a new reputation -if($mybb->input['action'] == "add") -{ - $plugins->run_hooks("reputation_add_start"); - - // If we have an existing reputation for this user, the user can modify or delete it. - $user['username'] = htmlspecialchars_uni($user['username']); - if(!empty($existing_reputation['uid'])) - { - $vote_title = $lang->sprintf($lang->update_reputation_vote, $user['username']); - $vote_button = $lang->update_vote; - $comments = htmlspecialchars_uni($existing_reputation['comments']); - - if($mybb->usergroup['issupermod'] == 1 || ($mybb->usergroup['candeletereputations'] == 1 && $existing_reputation['adduid'] == $mybb->user['uid'] && $mybb->user['uid'] != 0)) - { - eval("\$delete_button = \"".$templates->get("reputation_add_delete")."\";"); - } - } - // Otherwise we're adding an entirely new reputation for this user. - else - { - $vote_title = $lang->sprintf($lang->add_reputation_vote, $user['username']); - $vote_button = $lang->add_vote; - $comments = ''; - $delete_button = ''; - } - $lang->user_comments = $lang->sprintf($lang->user_comments, $user['username']); - - if($mybb->get_input('pid', MyBB::INPUT_INT)) - { - $post_rep_info = $lang->sprintf($lang->add_reputation_to_post, $user['username']); - $lang->user_comments = $lang->no_comment_needed; - } - else - { - $post_rep_info = ''; - } - - // Draw the "power" options - if($mybb->settings['negrep'] || $mybb->settings['neurep'] || $mybb->settings['posrep']) - { - $vote_check = array(); - $positive_power = ''; - $negative_power = ''; - $reputationpower = (int)$mybb->usergroup['reputationpower']; - - foreach(range(-$mybb->usergroup['reputationpower'], $mybb->usergroup['reputationpower']) as $value) - { - $vote_check[$value] = ''; - } - - if(!empty($existing_reputation['uid']) && !$was_post) - { - $vote_check[$existing_reputation['reputation']] = " selected=\"selected\""; - } - - if($mybb->settings['neurep']) - { - $neutral_title = $lang->power_neutral; - eval("\$neutral_power = \"".$templates->get("reputation_add_neutral")."\";"); - } - - for($value = 1; $value <= $reputationpower; ++$value) - { - if($mybb->settings['posrep']) - { - $positive_title = $lang->sprintf($lang->power_positive, "+".$value); - eval("\$positive_power = \"".$templates->get("reputation_add_positive")."\";"); - } - - if($mybb->settings['negrep']) - { - $negative_title = $lang->sprintf($lang->power_negative, "-".$value); - $neg_value = "-{$value}"; - eval("\$negative_power .= \"".$templates->get("reputation_add_negative")."\";"); - } - } - - $mybb->input['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - - $plugins->run_hooks("reputation_add_end"); - eval("\$reputation_add = \"".$templates->get("reputation_add", 1, 0)."\";"); - } - else - { - $message = $lang->add_all_rep_disabled; - - $plugins->run_hooks("reputation_add_end_error"); - if($mybb->input['nomodal']) - { - eval("\$error = \"".$templates->get("reputation_add_error_nomodal", 1, 0)."\";"); - } - else - { - eval("\$error = \"".$templates->get("reputation_add_error", 1, 0)."\";"); - } - } - - echo $reputation_add; - exit; -} - -// Delete a specific reputation from a user. -if($mybb->input['action'] == "delete") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - // Fetch the existing reputation for this user given by our current user if there is one. - $query = $db->query(" - SELECT r.*, u.username - FROM ".TABLE_PREFIX."reputation r - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=r.adduid) - WHERE rid = '".$mybb->get_input('rid', MyBB::INPUT_INT)."' - "); - $existing_reputation = $db->fetch_array($query); - - // Only administrators, super moderators, as well as users who gave a specifc vote can delete one. - if($mybb->usergroup['issupermod'] != 1 && ($mybb->usergroup['candeletereputations'] != 1 || $existing_reputation['adduid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0)) - { - error_no_permission(); - } - - // Delete the specified reputation - $db->delete_query("reputation", "uid='{$uid}' AND rid='".$mybb->get_input('rid', MyBB::INPUT_INT)."'"); - - // Recount the reputation of this user - keep it in sync. - $query = $db->simple_select("reputation", "SUM(reputation) AS reputation_count", "uid='{$uid}'"); - $reputation_value = $db->fetch_field($query, "reputation_count"); - - // Create moderator log - log_moderator_action(array("uid" => $user['uid'], "username" => $user['username']), $lang->sprintf($lang->delete_reputation_log, $existing_reputation['username'], $existing_reputation['adduid'])); - - $db->update_query("users", array('reputation' => (int)$reputation_value), "uid='{$uid}'"); - - redirect("reputation.php?uid={$uid}", $lang->vote_deleted_message); -} - -// Otherwise, show a listing of reputations for the given user. -if(!$mybb->input['action']) -{ - if($mybb->usergroup['canviewprofiles'] == 0) - { - // Reputation page is a part of a profile - error_no_permission(); - } - - // Set display group to their user group if they don't have a display group. - if(!$user['displaygroup']) - { - $user['displaygroup'] = $user['usergroup']; - } - - // Fetch display group properties. - $displaygroupfields = array('title', 'description', 'namestyle', 'usertitle', 'stars', 'starimage', 'image', 'usereputationsystem'); - $display_group = usergroup_displaygroup($user['displaygroup']); - - if($user_permissions['usereputationsystem'] != 1 || $display_group['title'] && $display_group['usereputationsystem'] == 0) - { - // Group has reputation disabled or user has a display group that has reputation disabled - error($lang->reputations_disabled_group); - } - - $user['username'] = htmlspecialchars_uni($user['username']); - $lang->nav_profile = $lang->sprintf($lang->nav_profile, $user['username']); - $lang->reputation_report = $lang->sprintf($lang->reputation_report, $user['username']); - - // Format the user name using the group username style - $username = format_name($user['username'], $user['usergroup'], $user['displaygroup']); - - // Set display group to their user group if they don't have a display group. - if(!$user['displaygroup']) - { - $user['displaygroup'] = $user['usergroup']; - } - - $usertitle = ''; - - // This user has a custom user title - if(trim($user['usertitle']) != '') - { - $usertitle = $user['usertitle']; - } - // Using our display group's user title - elseif(trim($display_group['usertitle']) != '') - { - $usertitle = $display_group['usertitle']; - } - // Otherwise, fetch it from our titles table for the number of posts this user has - else - { - $usertitles = $cache->read('usertitles'); - foreach($usertitles as $title) - { - if($title['posts'] <= $user['postnum']) - { - $usertitle = $title['title']; - break; - } - } - unset($usertitles, $title); - } - - $usertitle = htmlspecialchars_uni($usertitle); - - // If the user has permission to add reputations - show the image - if($mybb->usergroup['cangivereputations'] == 1 && $mybb->user['uid'] != $user['uid'] && ($mybb->settings['posrep'] || $mybb->settings['neurep'] || $mybb->settings['negrep'])) - { - eval("\$add_reputation = \"".$templates->get("reputation_addlink")."\";"); - } - else - { - $add_reputation = ''; - } - - // Build navigation menu - add_breadcrumb($lang->nav_profile, get_profile_link($user['uid'])); - add_breadcrumb($lang->nav_reputation); - - // Check our specified conditionals for what type of reputations to show - $show_selected = array('all' => '', 'positive' => '', 'neutral' => '', 'negative' => ''); - switch($mybb->get_input('show')) - { - case "positive": - $s_url = "&show=positive"; - $conditions = 'AND r.reputation>0'; - $show_selected['positive'] = 'selected="selected"'; - break; - case "neutral": - $s_url = "&show=neutral"; - $conditions = 'AND r.reputation=0'; - $show_selected['neutral'] = 'selected="selected"'; - break; - case "negative": - $s_url = "&show=negative"; - $conditions = 'AND r.reputation<0'; - $show_selected['negative'] = 'selected="selected"'; - break; - default: - $s_url = '&show=all'; - $conditions = ''; - $show_select['all'] = 'selected="selected"'; - break; - } - - // Check the sorting options for the reputation list - $sort_selected = array('username' => '', 'last_ipdated' => ''); - switch($mybb->get_input('sort')) - { - case "username": - $s_url .= "&sort=username"; - $order = "u.username ASC"; - $sort_selected['username'] = 'selected="selected"'; - break; - default: - $s_url .= '&sort=dateline'; - $order = "r.dateline DESC"; - $sort_selected['last_updated'] = 'selected="selected"'; - break; - } - - if(empty($mybb->input['show']) && empty($mybb->input['sort'])) - { - $s_url = ''; - } - - // Fetch the total number of reputations for this user - $query = $db->simple_select("reputation r", "COUNT(r.rid) AS reputation_count", "r.uid='{$user['uid']}' $conditions"); - $reputation_count = $db->fetch_field($query, "reputation_count"); - - // If the user has no reputation, suspect 0... - if(!$user['reputation']) - { - $user['reputation'] = 0; - } - - // Quickly check to see if we're in sync... - $query = $db->simple_select("reputation", "SUM(reputation) AS reputation, COUNT(rid) AS total_reputation", "uid = '".$user['uid']."'"); - $reputation = $db->fetch_array($query); - - $sync_reputation = (int)$reputation['reputation']; - $total_reputation = $reputation['total_reputation']; - - if($sync_reputation != $user['reputation']) - { - // We're out of sync! Oh noes! - $db->update_query("users", array("reputation" => $sync_reputation), "uid = '".$user['uid']."'"); - $user['reputation'] = $sync_reputation; - } - - // Set default count variables to 0 - $positive_count = $negative_count = $neutral_count = 0; - $positive_week = $negative_week = $neutral_week = 0; - $positive_month = $negative_month = $neutral_month = 0; - $positive_6months = $negative_6months = $neutral_6months = 0; - - // Unix timestamps for when this week, month and last 6 months started - $last_week = TIME_NOW-604800; - $last_month = TIME_NOW-2678400; - $last_6months = TIME_NOW-16070400; - - // Query reputations for the "reputation card" - $query = $db->simple_select("reputation", "reputation, dateline", "uid='{$user['uid']}'"); - while($reputation_vote = $db->fetch_array($query)) - { - // This is a positive reputation - if($reputation_vote['reputation'] > 0) - { - $positive_count++; - if($reputation_vote['dateline'] >= $last_week) - { - $positive_week++; - } - if($reputation_vote['dateline'] >= $last_month) - { - $positive_month++; - } - if($reputation_vote['dateline'] >= $last_6months) - { - $positive_6months++; - } - } - // Negative reputation given - else if($reputation_vote['reputation'] < 0) - { - $negative_count++; - if($reputation_vote['dateline'] >= $last_week) - { - $negative_week++; - } - if($reputation_vote['dateline'] >= $last_month) - { - $negative_month++; - } - if($reputation_vote['dateline'] >= $last_6months) - { - $negative_6months++; - } - } - // Neutral reputation given - else - { - $neutral_count++; - if($reputation_vote['dateline'] >= $last_week) - { - $neutral_week++; - } - if($reputation_vote['dateline'] >= $last_month) - { - $neutral_month++; - } - if($reputation_vote['dateline'] >= $last_6months) - { - $neutral_6months++; - } - } - } - - // Format all reputation numbers - $rep_total = my_number_format($user['reputation']); - $f_positive_count = my_number_format($positive_count); - $f_negative_count = my_number_format($negative_count); - $f_neutral_count = my_number_format($neutral_count); - $f_positive_week = my_number_format($positive_week); - $f_negative_week = my_number_format($negative_week); - $f_neutral_week = my_number_format($neutral_week); - $f_positive_month = my_number_format($positive_month); - $f_negative_month = my_number_format($negative_month); - $f_neutral_month = my_number_format($neutral_month); - $f_positive_6months = my_number_format($positive_6months); - $f_negative_6months = my_number_format($negative_6months); - $f_neutral_6months = my_number_format($neutral_6months); - - // Format the user's 'total' reputation - if($user['reputation'] < 0) - { - $total_class = "_minus"; - } - elseif($user['reputation'] > 0) - { - $total_class = "_plus"; - } - else - { - $total_class = "_neutral"; - } - - // Figure out how many reps have come from posts / 'general' - // Posts - $query = $db->simple_select("reputation", "COUNT(rid) AS rep_posts", "uid = '".$user['uid']."' AND pid > 0"); - $rep_post_count = $db->fetch_field($query, "rep_posts"); - $rep_posts = my_number_format($rep_post_count); - - // General - // We count how many reps in total, then subtract the reps from posts - $rep_members = my_number_format($total_reputation - $rep_post_count); - - // Is negative reputation disabled? If so, tell the user - if($mybb->settings['negrep'] == 0) - { - $neg_rep_info = $lang->neg_rep_disabled; - } - - if($mybb->settings['posrep'] == 0) - { - $pos_rep_info = $lang->pos_rep_disabled; - } - - if($mybb->settings['neurep'] == 0) - { - $neu_rep_info = $lang->neu_rep_disabled; - } - - $perpage = (int)$mybb->settings['repsperpage']; - if($perpage < 1) - { - $perpage = 15; - } - - // Check if we're browsing a specific page of results - if($mybb->get_input('page', MyBB::INPUT_INT) > 0) - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - $start = ($page-1) * $perpage; - $pages = $reputation_count / $perpage; - $pages = ceil($pages); - if($page > $pages) - { - $start = 0; - $page = 1; - } - } - else - { - $start = 0; - $page = 1; - } - - $multipage = ''; - - // Build out multipage navigation - if($reputation_count > 0) - { - $multipage = multipage($reputation_count, $perpage, $page, "reputation.php?uid={$user['uid']}".$s_url); - } - - // Fetch the reputations which will be displayed on this page - $query = $db->query(" - SELECT r.*, r.uid AS rated_uid, u.uid, u.username, u.reputation AS user_reputation, u.usergroup AS user_usergroup, u.displaygroup AS user_displaygroup - FROM ".TABLE_PREFIX."reputation r - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=r.adduid) - WHERE r.uid='{$user['uid']}' $conditions - ORDER BY $order - LIMIT $start, {$perpage} - "); - - // Gather a list of items that have post reputation - $reputation_cache = $post_cache = $post_reputation = array(); - - while($reputation_vote = $db->fetch_array($query)) - { - $reputation_cache[] = $reputation_vote; - - // If this is a post, hold it and gather some information about it - if($reputation_vote['pid'] && !isset($post_cache[$reputation_vote['pid']])) - { - $post_cache[$reputation_vote['pid']] = $reputation_vote['pid']; - } - } - - if(!empty($post_cache)) - { - $pids = implode(',', $post_cache); - - $sql = array("p.pid IN ({$pids})"); - - // get forums user cannot view - $unviewable = get_unviewable_forums(true); - if($unviewable) - { - $sql[] = "p.fid NOT IN ({$unviewable})"; - } - - // get inactive forums - $inactive = get_inactive_forums(); - if($inactive) - { - $sql[] = "p.fid NOT IN ({$inactive})"; - } - - if(!$mybb->user['ismoderator']) - { - $sql[] = "p.visible='1'"; - $sql[] = "t.visible='1'"; - } - - $sql = implode(' AND ', $sql); - - $query = $db->query(" - SELECT p.pid, p.uid, p.fid, p.visible, p.message, t.tid, t.subject, t.visible AS thread_visible - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE {$sql} - "); - - $forumpermissions = array(); - - while($post = $db->fetch_array($query)) - { - if(($post['visible'] == 0 || $post['thread_visible'] == 0) && !is_moderator($post['fid'], 'canviewunapprove')) - { - continue; - } - - if(($post['visible'] == -1 || $post['thread_visible'] == -1) && !is_moderator($post['fid'], 'canviewdeleted')) - { - continue; - } - - if(!isset($forumpermissions[$post['fid']])) - { - $forumpermissions[$post['fid']] = forum_permissions($post['fid']); - } - - // Make sure we can view this post - if(isset($forumpermissions[$post['fid']]['canonlyviewownthreads']) && $forumpermissions[$post['fid']]['canonlyviewownthreads'] == 1 && $post['uid'] != $mybb->user['uid']) - { - continue; - } - - $post_reputation[$post['pid']] = $post; - } - } - - $reputation_votes = ''; - - foreach($reputation_cache as $reputation_vote) - { - // Get the reputation for the user who posted this comment - if($reputation_vote['adduid'] == 0) - { - $reputation_vote['user_reputation'] = 0; - } - - $reputation_vote['user_reputation'] = get_reputation($reputation_vote['user_reputation'], $reputation_vote['adduid']); - - // Format the username of this poster - if(!$reputation_vote['username']) - { - $reputation_vote['username'] = $lang->na; - $reputation_vote['user_reputation'] = ''; - } - else - { - $reputation_vote['username'] = format_name(htmlspecialchars_uni($reputation_vote['username']), $reputation_vote['user_usergroup'], $reputation_vote['user_displaygroup']); - $reputation_vote['username'] = build_profile_link($reputation_vote['username'], $reputation_vote['uid']); - $reputation_vote['user_reputation'] = "({$reputation_vote['user_reputation']})"; - } - - $vote_reputation = (int)$reputation_vote['reputation']; - - // This is a negative reputation - if($vote_reputation < 0) - { - $status_class = "trow_reputation_negative"; - $vote_type_class = "reputation_negative"; - $vote_type = $lang->negative; - } - // This is a neutral reputation - else if($vote_reputation == 0) - { - $status_class = "trow_reputation_neutral"; - $vote_type_class = "reputation_neutral"; - $vote_type = $lang->neutral; - } - // Otherwise, this is a positive reputation - else - { - $vote_reputation = "+{$vote_reputation}"; - $status_class = "trow_reputation_positive"; - $vote_type_class = "reputation_positive"; - $vote_type = $lang->positive; - } - - $vote_reputation = "({$vote_reputation})"; - - // Format the date this reputation was last modified - $last_updated_date = my_date('relative', $reputation_vote['dateline']); - $last_updated = $lang->sprintf($lang->last_updated, $last_updated_date); - - $user['username'] = htmlspecialchars_uni($user['username']); - - // Is this rating specific to a post? - $postrep_given = ''; - if($reputation_vote['pid']) - { - $postrep_given = $lang->sprintf($lang->postrep_given_nolink, $user['username']); - if(isset($post_reputation[$reputation_vote['pid']])) - { - $thread_link = get_thread_link($post_reputation[$reputation_vote['pid']]['tid']); - $subject = htmlspecialchars_uni($parser->parse_badwords($post_reputation[$reputation_vote['pid']]['subject'])); - - $thread_link = $lang->sprintf($lang->postrep_given_thread, $thread_link, $subject); - $link = get_post_link($reputation_vote['pid'])."#pid{$reputation_vote['pid']}"; - - $postrep_given = $lang->sprintf($lang->postrep_given, $link, $user['username'], $thread_link); - } - } - - // Does the current user have permission to delete this reputation? Show delete link - $delete_link = ''; - if($mybb->usergroup['issupermod'] == 1 || ($mybb->usergroup['candeletereputations'] == 1 && $reputation_vote['adduid'] == $mybb->user['uid'] && $mybb->user['uid'] != 0)) - { - eval("\$delete_link = \"".$templates->get("reputation_vote_delete")."\";"); - } - - $report_link = ''; - if($mybb->user['uid'] != 0) - { - eval("\$report_link = \"".$templates->get("reputation_vote_report")."\";"); - } - - // Parse smilies in the reputation vote - $reputation_parser = array( - "allow_html" => 0, - "allow_mycode" => 0, - "allow_smilies" => 1, - "allow_imgcode" => 0, - "filter_badwords" => 1 - ); - - $reputation_vote['comments'] = $parser->parse_message($reputation_vote['comments'], $reputation_parser); - if($reputation_vote['comments'] == '') - { - $reputation_vote['comments'] = $lang->no_comment; - } - - $plugins->run_hooks("reputation_vote"); - - eval("\$reputation_votes .= \"".$templates->get("reputation_vote")."\";"); - } - - // If we don't have any reputations display a nice message. - if(!$reputation_votes) - { - eval("\$reputation_votes = \"".$templates->get("reputation_no_votes")."\";"); - } - - $plugins->run_hooks("reputation_end"); - eval("\$reputation = \"".$templates->get("reputation")."\";"); - output_page($reputation); -} diff --git a/html/forums/rss.php b/html/forums/rss.php deleted file mode 100644 index b0ebb07..0000000 --- a/html/forums/rss.php +++ /dev/null @@ -1,19 +0,0 @@ -load("search"); - -add_breadcrumb($lang->nav_search, "search.php"); - -$mybb->input['action'] = $mybb->get_input('action'); -switch($mybb->input['action']) -{ - case "results": - add_breadcrumb($lang->nav_results); - break; - default: - break; -} - -if($mybb->usergroup['cansearch'] == 0) -{ - error_no_permission(); -} - -$now = TIME_NOW; -$mybb->input['keywords'] = trim($mybb->get_input('keywords')); - -$limitsql = ""; -if((int)$mybb->settings['searchhardlimit'] > 0) -{ - $limitsql = "LIMIT ".(int)$mybb->settings['searchhardlimit']; -} - -if($mybb->input['action'] == "results") -{ - $sid = $db->escape_string($mybb->get_input('sid')); - $query = $db->simple_select("searchlog", "*", "sid='$sid'"); - $search = $db->fetch_array($query); - - if(!$search['sid']) - { - error($lang->error_invalidsearch); - } - - $plugins->run_hooks("search_results_start"); - - // Decide on our sorting fields and sorting order. - $order = my_strtolower(htmlspecialchars_uni($mybb->get_input('order'))); - $sortby = my_strtolower(htmlspecialchars_uni($mybb->get_input('sortby'))); - - switch($sortby) - { - case "replies": - $sortfield = "t.replies"; - break; - case "views": - $sortfield = "t.views"; - break; - case "subject": - if($search['resulttype'] == "threads") - { - $sortfield = "t.subject"; - } - else - { - $sortfield = "p.subject"; - } - break; - case "forum": - $sortfield = "t.fid"; - break; - case "starter": - if($search['resulttype'] == "threads") - { - $sortfield = "t.username"; - } - else - { - $sortfield = "p.username"; - } - break; - case "lastpost": - default: - if($search['resulttype'] == "threads") - { - $sortfield = "t.lastpost"; - $sortby = "lastpost"; - } - else - { - $sortfield = "p.dateline"; - $sortby = "dateline"; - } - break; - } - - if($order != "asc") - { - $order = "desc"; - $oppsortnext = "asc"; - $oppsort = $lang->asc; - } - else - { - $oppsortnext = "desc"; - $oppsort = $lang->desc; - } - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - // Work out pagination, which page we're at, as well as the limits. - $perpage = $mybb->settings['threadsperpage']; - $page = $mybb->get_input('page'); - if($page > 0) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - $end = $start + $perpage; - $lower = $start+1; - $upper = $end; - - // Work out if we have terms to highlight - $highlight = ""; - if($search['keywords']) - { - if($mybb->seo_support == true) - { - $highlight = "?highlight=".urlencode($search['keywords']); - } - else - { - $highlight = "&highlight=".urlencode($search['keywords']); - } - } - - $sorturl = "search.php?action=results&sid={$sid}"; - $thread_url = ""; - $post_url = ""; - - $orderarrow = array('replies' => '', 'views' => '', 'subject' => '', 'forum' => '', 'starter' => '', 'lastpost' => '', 'dateline' => ''); - - eval("\$orderarrow['$sortby'] = \"".$templates->get("search_orderarrow")."\";"); - - // Read some caches we will be using - $forumcache = $cache->read("forums"); - $icon_cache = $cache->read("posticons"); - - $threads = array(); - - if($mybb->user['uid'] == 0) - { - // Build a forum cache. - $query = $db->query(" - SELECT fid - FROM ".TABLE_PREFIX."forums - WHERE active != 0 - ORDER BY pid, disporder - "); - - $forumsread = my_unserialize($mybb->cookies['mybb']['forumread']); - } - else - { - // Build a forum cache. - $query = $db->query(" - SELECT f.fid, fr.dateline AS lastread - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') - WHERE f.active != 0 - ORDER BY pid, disporder - "); - } - - while($forum = $db->fetch_array($query)) - { - if($mybb->user['uid'] == 0) - { - if($forumsread[$forum['fid']]) - { - $forum['lastread'] = $forumsread[$forum['fid']]; - } - } - $readforums[$forum['fid']] = $forum['lastread']; - } - $fpermissions = forum_permissions(); - - // Inline Mod Column for moderators - $inlinemodcol = $inlinecookie = ''; - $is_mod = $is_supermod = false; - if($mybb->usergroup['issupermod']) - { - $is_supermod = true; - } - if($is_supermod || is_moderator()) - { - eval("\$inlinemodcol = \"".$templates->get("search_results_inlinemodcol")."\";"); - $inlinecookie = "inlinemod_search".$sid; - $inlinecount = 0; - $is_mod = true; - $return_url = 'search.php?'.htmlspecialchars_uni($_SERVER['QUERY_STRING']); - } - - // Show search results as 'threads' - if($search['resulttype'] == "threads") - { - $threadcount = 0; - - // Moderators can view unapproved threads - $query = $db->simple_select("moderators", "fid, canviewunapprove, canviewdeleted", "(id='{$mybb->user['uid']}' AND isgroup='0') OR (id='{$mybb->user['usergroup']}' AND isgroup='1')"); - if($mybb->usergroup['issupermod'] == 1) - { - // Super moderators (and admins) - $unapproved_where = "t.visible>=-1"; - } - elseif($db->num_rows($query)) - { - // Normal moderators - $unapprove_forums = array(); - $deleted_forums = array(); - $unapproved_where = '(t.visible = 1'; - while($moderator = $db->fetch_array($query)) - { - if($moderator['canviewunapprove'] == 1) - { - $unapprove_forums[] = $moderator['fid']; - } - - if($moderator['canviewdeleted'] == 1) - { - $deleted_forums[] = $moderator['fid']; - } - } - - if(!empty($unapprove_forums)) - { - $unapproved_where .= " OR (t.visible = 0 AND t.fid IN(".implode(',', $unapprove_forums)."))"; - } - if(!empty($deleted_forums)) - { - $unapproved_where .= " OR (t.visible = -1 AND t.fid IN(".implode(',', $deleted_forums)."))"; - } - $unapproved_where .= ')'; - } - else - { - // Normal users - $unapproved_where = 't.visible>0'; - } - - // If we have saved WHERE conditions, execute them - if($search['querycache'] != "") - { - $where_conditions = $search['querycache']; - $query = $db->simple_select("threads t", "t.tid", $where_conditions. " AND {$unapproved_where} AND t.closed NOT LIKE 'moved|%' ORDER BY t.lastpost DESC {$limitsql}"); - while($thread = $db->fetch_array($query)) - { - $threads[$thread['tid']] = $thread['tid']; - $threadcount++; - } - // Build our list of threads. - if($threadcount > 0) - { - $search['threads'] = implode(",", $threads); - } - // No results. - else - { - error($lang->error_nosearchresults); - } - $where_conditions = "t.tid IN (".$search['threads'].")"; - } - // This search doesn't use a query cache, results stored in search table. - else - { - $where_conditions = "t.tid IN (".$search['threads'].")"; - $query = $db->simple_select("threads t", "COUNT(t.tid) AS resultcount", $where_conditions. " AND {$unapproved_where} AND t.closed NOT LIKE 'moved|%' {$limitsql}"); - $count = $db->fetch_array($query); - - if(!$count['resultcount']) - { - error($lang->error_nosearchresults); - } - $threadcount = $count['resultcount']; - } - - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - if(!empty($onlyusfids)) - { - $permsql .= "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $permsql .= " AND t.fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $permsql .= " AND t.fid NOT IN ($inactiveforums)"; - } - - // Begin selecting matching threads, cache them. - $sqlarray = array( - 'order_by' => $sortfield, - 'order_dir' => $order, - 'limit_start' => $start, - 'limit' => $perpage - ); - $query = $db->query(" - SELECT t.*, u.username AS userusername - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=t.uid) - WHERE $where_conditions AND {$unapproved_where} {$permsql} AND t.closed NOT LIKE 'moved|%' - ORDER BY $sortfield $order - LIMIT $start, $perpage - "); - - $threadprefixes = build_prefixes(); - $thread_cache = array(); - while($thread = $db->fetch_array($query)) - { - $thread['threadprefix'] = ''; - if($thread['prefix'] && !empty($threadprefixes[$thread['prefix']])) - { - $thread['threadprefix'] = $threadprefixes[$thread['prefix']]['displaystyle']; - } - $thread_cache[$thread['tid']] = $thread; - } - $thread_ids = implode(",", array_keys($thread_cache)); - - if(empty($thread_ids)) - { - error($lang->error_nosearchresults); - } - - // Fetch dot icons if enabled - if($mybb->settings['dotfolders'] != 0 && $mybb->user['uid'] && $thread_cache) - { - $p_unapproved_where = str_replace('t.', '', $unapproved_where); - $query = $db->simple_select("posts", "DISTINCT tid,uid", "uid='{$mybb->user['uid']}' AND tid IN({$thread_ids}) AND {$p_unapproved_where}"); - while($thread = $db->fetch_array($query)) - { - $thread_cache[$thread['tid']]['dot_icon'] = 1; - } - } - - // Fetch the read threads. - if($mybb->user['uid'] && $mybb->settings['threadreadcut'] > 0) - { - $query = $db->simple_select("threadsread", "tid,dateline", "uid='".$mybb->user['uid']."' AND tid IN(".$thread_ids.")"); - while($readthread = $db->fetch_array($query)) - { - $thread_cache[$readthread['tid']]['lastread'] = $readthread['dateline']; - } - } - - if(!$mybb->settings['maxmultipagelinks']) - { - $mybb->settings['maxmultipagelinks'] = 5; - } - - $results = ''; - - foreach($thread_cache as $thread) - { - $bgcolor = alt_trow(); - $folder = ''; - $prefix = ''; - - // Unapproved colour - if($thread['visible'] == 0) - { - $bgcolor = 'trow_shaded'; - } - elseif($thread['visible'] == -1) - { - $bgcolor = 'trow_shaded trow_deleted'; - } - - if($thread['userusername']) - { - $thread['username'] = $thread['userusername']; - } - $thread['username'] = htmlspecialchars_uni($thread['username']); - $thread['profilelink'] = build_profile_link($thread['username'], $thread['uid']); - - // If this thread has a prefix, insert a space between prefix and subject - if($thread['prefix'] != 0) - { - $thread['threadprefix'] .= ' '; - } - - $thread['subject'] = $parser->parse_badwords($thread['subject']); - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - - if(isset($icon_cache[$thread['icon']])) - { - $posticon = $icon_cache[$thread['icon']]; - $posticon['path'] = str_replace("{theme}", $theme['imgdir'], $posticon['path']); - $posticon['path'] = htmlspecialchars_uni($posticon['path']); - $posticon['name'] = htmlspecialchars_uni($posticon['name']); - eval("\$icon = \"".$templates->get("search_results_icon")."\";"); - } - else - { - $icon = " "; - } - if($thread['poll']) - { - $prefix = $lang->poll_prefix; - } - - // Determine the folder - $folder = ''; - $folder_label = ''; - if(isset($thread['dot_icon'])) - { - $folder = "dot_"; - $folder_label .= $lang->icon_dot; - } - $gotounread = ''; - $isnew = 0; - $donenew = 0; - $last_read = 0; - - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) - { - $forum_read = $readforums[$thread['fid']]; - - $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($forum_read == 0 || $forum_read < $read_cutoff) - { - $forum_read = $read_cutoff; - } - } - else - { - $forum_read = $forumsread[$thread['fid']]; - } - - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid'] && $thread['lastpost'] > $forum_read) - { - if($thread['lastread']) - { - $last_read = $thread['lastread']; - } - else - { - $last_read = $read_cutoff; - } - } - else - { - $last_read = my_get_array_cookie("threadread", $thread['tid']); - } - - if($forum_read > $last_read) - { - $last_read = $forum_read; - } - - if($thread['lastpost'] > $last_read && $last_read) - { - $folder .= "new"; - $new_class = "subject_new"; - $folder_label .= $lang->icon_new; - $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost").$highlight; - eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); - $unreadpost = 1; - } - else - { - $new_class = 'subject_old'; - $folder_label .= $lang->icon_no_new; - } - - if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews']) - { - $folder .= "hot"; - $folder_label .= $lang->icon_hot; - } - if($thread['closed'] == 1) - { - $folder .= "lock"; - $folder_label .= $lang->icon_lock; - } - $folder .= "folder"; - - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - $thread['pages'] = 0; - $thread['multipage'] = ''; - $threadpages = ''; - $morelink = ''; - $thread['posts'] = $thread['replies'] + 1; - if(is_moderator($thread['fid'], "canviewunapprove")) - { - $thread['posts'] += $thread['unapprovedposts']; - } - if(is_moderator($thread['fid'], "canviewdeleted")) - { - $thread['posts'] += $thread['deletedposts']; - } - - if($thread['posts'] > $mybb->settings['postsperpage']) - { - $thread['pages'] = $thread['posts'] / $mybb->settings['postsperpage']; - $thread['pages'] = ceil($thread['pages']); - if($thread['pages'] > $mybb->settings['maxmultipagelinks']) - { - $pagesstop = $mybb->settings['maxmultipagelinks'] - 1; - $page_link = get_thread_link($thread['tid'], $thread['pages']).$highlight; - eval("\$morelink = \"".$templates->get("forumdisplay_thread_multipage_more")."\";"); - } - else - { - $pagesstop = $thread['pages']; - } - for($i = 1; $i <= $pagesstop; ++$i) - { - $page_link = get_thread_link($thread['tid'], $i).$highlight; - eval("\$threadpages .= \"".$templates->get("forumdisplay_thread_multipage_page")."\";"); - } - eval("\$thread['multipage'] = \"".$templates->get("forumdisplay_thread_multipage")."\";"); - } - else - { - $threadpages = ''; - $morelink = ''; - $thread['multipage'] = ''; - } - $lastpostdate = my_date('relative', $thread['lastpost']); - $lastposter = htmlspecialchars_uni($thread['lastposter']); - $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); - $lastposteruid = $thread['lastposteruid']; - $thread_link = get_thread_link($thread['tid']); - - // Don't link to guest's profiles (they have no profile). - if($lastposteruid == 0) - { - $lastposterlink = $lastposter; - } - else - { - $lastposterlink = build_profile_link($lastposter, $lastposteruid); - } - - $thread['replies'] = my_number_format($thread['replies']); - $thread['views'] = my_number_format($thread['views']); - - $thread['forumlink'] = ''; - if($forumcache[$thread['fid']]) - { - $thread['forumlink_link'] = get_forum_link($thread['fid']); - $thread['forumlink_name'] = $forumcache[$thread['fid']]['name']; - eval("\$thread['forumlink'] = \"".$templates->get("search_results_threads_forumlink")."\";"); - } - - // If this user is the author of the thread and it is not closed or they are a moderator, they can edit - if(($thread['uid'] == $mybb->user['uid'] && $thread['closed'] != 1 && $mybb->user['uid'] != 0 && $fpermissions[$thread['fid']]['caneditposts'] == 1) || is_moderator($thread['fid'], "caneditposts")) - { - $inline_edit_class = "subject_editable"; - } - else - { - $inline_edit_class = ""; - } - - // If this thread has 1 or more attachments show the papperclip - if($mybb->settings['enableattachments'] == 1 && $thread['attachmentcount'] > 0) - { - if($thread['attachmentcount'] > 1) - { - $attachment_count = $lang->sprintf($lang->attachment_count_multiple, $thread['attachmentcount']); - } - else - { - $attachment_count = $lang->attachment_count; - } - - eval("\$attachment_count = \"".$templates->get("forumdisplay_thread_attachment_count")."\";"); - } - else - { - $attachment_count = ''; - } - - $inline_edit_tid = $thread['tid']; - - // Inline thread moderation - $inline_mod_checkbox = ''; - if($is_supermod || is_moderator($thread['fid'])) - { - if(isset($mybb->cookies[$inlinecookie]) && my_strpos($mybb->cookies[$inlinecookie], "|{$thread['tid']}|")) - { - $inlinecheck = "checked=\"checked\""; - ++$inlinecount; - } - else - { - $inlinecheck = ''; - } - eval("\$inline_mod_checkbox = \"".$templates->get("search_results_threads_inlinecheck")."\";"); - } - elseif($is_mod) - { - eval("\$inline_mod_checkbox = \"".$templates->get("search_results_threads_nocheck")."\";"); - } - - $plugins->run_hooks("search_results_thread"); - eval("\$results .= \"".$templates->get("search_results_threads_thread")."\";"); - } - if(!$results) - { - error($lang->error_nosearchresults); - } - $multipage = multipage($threadcount, $perpage, $page, "search.php?action=results&sid=$sid&sortby=$sortby&order=$order&uid=".$mybb->get_input('uid', MyBB::INPUT_INT)); - if($upper > $threadcount) - { - $upper = $threadcount; - } - - // Inline Thread Moderation Options - if($is_mod) - { - // If user has moderation tools available, prepare the Select All feature - $lang->page_selected = $lang->sprintf($lang->page_selected, count($thread_cache)); - $lang->all_selected = $lang->sprintf($lang->all_selected, (int)$threadcount); - $lang->select_all = $lang->sprintf($lang->select_all, (int)$threadcount); - eval("\$selectall = \"".$templates->get("search_threads_inlinemoderation_selectall")."\";"); - - $customthreadtools = ''; - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("modtools", "tid, name", "type='t' AND (','||forums||',' LIKE '%,-1,%' OR forums='')"); - break; - default: - $query = $db->simple_select("modtools", "tid, name", "type='t' AND (CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='')"); - } - - while($tool = $db->fetch_array($query)) - { - eval("\$customthreadtools .= \"".$templates->get("search_results_threads_inlinemoderation_custom_tool")."\";"); - } - // Build inline moderation dropdown - if(!empty($customthreadtools)) - { - eval("\$customthreadtools = \"".$templates->get("search_results_threads_inlinemoderation_custom")."\";"); - } - eval("\$inlinemod = \"".$templates->get("search_results_threads_inlinemoderation")."\";"); - } - - $plugins->run_hooks("search_results_end"); - - eval("\$searchresults = \"".$templates->get("search_results_threads")."\";"); - output_page($searchresults); - } - else // Displaying results as posts - { - if(!$search['posts']) - { - error($lang->error_nosearchresults); - } - - $postcount = 0; - - // Moderators can view unapproved threads - $query = $db->simple_select("moderators", "fid, canviewunapprove, canviewdeleted", "(id='{$mybb->user['uid']}' AND isgroup='0') OR (id='{$mybb->user['usergroup']}' AND isgroup='1')"); - if($mybb->usergroup['issupermod'] == 1) - { - // Super moderators (and admins) - $unapproved_where = "visible >= -1"; - } - elseif($db->num_rows($query)) - { - // Normal moderators - $unapprove_forums = array(); - $deleted_forums = array(); - $unapproved_where = '(visible = 1'; - - while($moderator = $db->fetch_array($query)) - { - if($moderator['canviewunapprove'] == 1) - { - $unapprove_forums[] = $moderator['fid']; - } - - if($moderator['canviewdeleted'] == 1) - { - $deleted_forums[] = $moderator['fid']; - } - } - - if(!empty($unapprove_forums)) - { - $unapproved_where .= " OR (visible = 0 AND fid IN(".implode(',', $unapprove_forums)."))"; - } - if(!empty($deleted_forums)) - { - $unapproved_where .= " OR (visible = -1 AND fid IN(".implode(',', $deleted_forums)."))"; - } - $unapproved_where .= ')'; - } - else - { - // Normal users - $unapproved_where = 'visible = 1'; - } - - $post_cache_options = array(); - if((int)$mybb->settings['searchhardlimit'] > 0) - { - $post_cache_options['limit'] = (int)$mybb->settings['searchhardlimit']; - } - - if(strpos($sortfield, 'p.') !== false) - { - $post_cache_options['order_by'] = str_replace('p.', '', $sortfield); - $post_cache_options['order_dir'] = $order; - } - - $tids = array(); - $pids = array(); - // Make sure the posts we're viewing we have permission to view. - $query = $db->simple_select("posts", "pid, tid", "pid IN(".$db->escape_string($search['posts']).") AND {$unapproved_where}", $post_cache_options); - while($post = $db->fetch_array($query)) - { - $pids[$post['pid']] = $post['tid']; - $tids[$post['tid']][$post['pid']] = $post['pid']; - } - - if(!empty($pids)) - { - $temp_pids = array(); - - $group_permissions = forum_permissions(); - $permsql = ''; - $onlyusfids = array(); - - foreach($group_permissions as $fid => $forum_permissions) - { - if(!empty($forum_permissions['canonlyviewownthreads'])) - { - $onlyusfids[] = $fid; - } - } - - if($onlyusfids) - { - $permsql .= " OR (fid IN(".implode(',', $onlyusfids).") AND uid!={$mybb->user['uid']})"; - } - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $permsql .= " OR fid IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $permsql .= " OR fid IN ($inactiveforums)"; - } - - // Check the thread records as well. If we don't have permissions, remove them from the listing. - $query = $db->simple_select("threads", "tid", "tid IN(".$db->escape_string(implode(',', $pids)).") AND ({$unapproved_where}{$permsql} OR closed LIKE 'moved|%')"); - while($thread = $db->fetch_array($query)) - { - if(array_key_exists($thread['tid'], $tids) != true) - { - $temp_pids = $tids[$thread['tid']]; - foreach($temp_pids as $pid) - { - unset($pids[$pid]); - unset($tids[$thread['tid']]); - } - } - } - unset($temp_pids); - } - - // Declare our post count - $postcount = count($pids); - - if(!$postcount) - { - error($lang->error_nosearchresults); - } - - // And now we have our sanatized post list - $search['posts'] = implode(',', array_keys($pids)); - - $tids = implode(",", array_keys($tids)); - - // Read threads - if($mybb->user['uid'] && $mybb->settings['threadreadcut'] > 0) - { - $query = $db->simple_select("threadsread", "tid, dateline", "uid='".$mybb->user['uid']."' AND tid IN(".$db->escape_string($tids).")"); - while($readthread = $db->fetch_array($query)) - { - $readthreads[$readthread['tid']] = $readthread['dateline']; - } - } - - $dot_icon = array(); - if($mybb->settings['dotfolders'] != 0 && $mybb->user['uid'] != 0) - { - $query = $db->simple_select("posts", "DISTINCT tid,uid", "uid='{$mybb->user['uid']}' AND tid IN({$db->escape_string($tids)}) AND {$unapproved_where}"); - while($post = $db->fetch_array($query)) - { - $dot_icon[$post['tid']] = true; - } - } - - $results = ''; - - $query = $db->query(" - SELECT p.*, u.username AS userusername, t.subject AS thread_subject, t.replies AS thread_replies, t.views AS thread_views, t.lastpost AS thread_lastpost, t.closed AS thread_closed, t.uid as thread_uid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE p.pid IN (".$db->escape_string($search['posts']).") - ORDER BY $sortfield $order - LIMIT $start, $perpage - "); - while($post = $db->fetch_array($query)) - { - $bgcolor = alt_trow(); - if($post['visible'] == 0) - { - $bgcolor = 'trow_shaded'; - } - elseif($post['visible'] == -1) - { - $bgcolor = 'trow_shaded trow_deleted'; - } - if($post['userusername']) - { - $post['username'] = $post['userusername']; - } - $post['username'] = htmlspecialchars_uni($post['username']); - $post['profilelink'] = build_profile_link($post['username'], $post['uid']); - $post['subject'] = $parser->parse_badwords($post['subject']); - $post['thread_subject'] = $parser->parse_badwords($post['thread_subject']); - $post['thread_subject'] = htmlspecialchars_uni($post['thread_subject']); - - if(isset($icon_cache[$post['icon']])) - { - $posticon = $icon_cache[$post['icon']]; - $posticon['path'] = str_replace("{theme}", $theme['imgdir'], $posticon['path']); - $posticon['path'] = htmlspecialchars_uni($posticon['path']); - $posticon['name'] = htmlspecialchars_uni($posticon['name']); - eval("\$icon = \"".$templates->get("search_results_icon")."\";"); - } - else - { - $icon = " "; - } - - $post['forumlink'] = ''; - if(!empty($forumcache[$thread['fid']])) - { - $post['forumlink_link'] = get_forum_link($post['fid']); - $post['forumlink_name'] = $forumcache[$post['fid']]['name']; - eval("\$post['forumlink'] = \"".$templates->get("search_results_posts_forumlink")."\";"); - } - - // Determine the folder - $folder = ''; - $folder_label = ''; - $gotounread = ''; - $isnew = 0; - $donenew = 0; - $last_read = 0; - $post['thread_lastread'] = $readthreads[$post['tid']]; - - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) - { - $forum_read = $readforums[$post['fid']]; - - $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($forum_read == 0 || $forum_read < $read_cutoff) - { - $forum_read = $read_cutoff; - } - } - else - { - $forum_read = $forumsread[$post['fid']]; - } - - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid'] && $post['thread_lastpost'] > $forum_read) - { - $cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($post['thread_lastpost'] > $cutoff) - { - if($post['thread_lastread']) - { - $last_read = $post['thread_lastread']; - } - else - { - $last_read = 1; - } - } - } - - if(isset($dot_icon[$post['tid']])) - { - $folder = "dot_"; - $folder_label .= $lang->icon_dot; - } - - if(!$last_read) - { - $readcookie = $threadread = my_get_array_cookie("threadread", $post['tid']); - if($readcookie > $forum_read) - { - $last_read = $readcookie; - } - elseif($forum_read > $mybb->user['lastvisit']) - { - $last_read = $forum_read; - } - else - { - $last_read = $mybb->user['lastvisit']; - } - } - - if($post['thread_lastpost'] > $last_read && $last_read) - { - $folder .= "new"; - $folder_label .= $lang->icon_new; - eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); - $unreadpost = 1; - } - else - { - $folder_label .= $lang->icon_no_new; - } - - if($post['thread_replies'] >= $mybb->settings['hottopic'] || $post['thread_views'] >= $mybb->settings['hottopicviews']) - { - $folder .= "hot"; - $folder_label .= $lang->icon_hot; - } - if($post['thread_closed'] == 1) - { - $folder .= "lock"; - $folder_label .= $lang->icon_lock; - } - $folder .= "folder"; - - $post['thread_replies'] = my_number_format($post['thread_replies']); - $post['thread_views'] = my_number_format($post['thread_views']); - - $post['forumlink'] = ''; - if($forumcache[$post['fid']]) - { - $post['forumlink_link'] = get_forum_link($post['fid']); - $post['forumlink_name'] = $forumcache[$post['fid']]['name']; - eval("\$post['forumlink'] = \"".$templates->get("search_results_posts_forumlink")."\";"); - } - - if(!$post['subject']) - { - $post['subject'] = $post['message']; - } - if(my_strlen($post['subject']) > 50) - { - $post['subject'] = htmlspecialchars_uni(my_substr($post['subject'], 0, 50)."..."); - } - else - { - $post['subject'] = htmlspecialchars_uni($post['subject']); - } - // What we do here is parse the post using our post parser, then strip the tags from it - $parser_options = array( - 'allow_html' => 0, - 'allow_mycode' => 1, - 'allow_smilies' => 0, - 'allow_imgcode' => 0, - 'filter_badwords' => 1 - ); - $post['message'] = strip_tags($parser->parse_message($post['message'], $parser_options)); - if(my_strlen($post['message']) > 200) - { - $prev = my_substr($post['message'], 0, 200)."..."; - } - else - { - $prev = $post['message']; - } - $posted = my_date('relative', $post['dateline']); - - $thread_url = get_thread_link($post['tid']); - $post_url = get_post_link($post['pid'], $post['tid']); - - // Inline post moderation - $inline_mod_checkbox = ''; - if($is_supermod || is_moderator($post['fid'])) - { - if(isset($mybb->cookies[$inlinecookie]) && my_strpos($mybb->cookies[$inlinecookie], "|{$post['pid']}|")) - { - $inlinecheck = "checked=\"checked\""; - ++$inlinecount; - } - else - { - $inlinecheck = ''; - } - eval("\$inline_mod_checkbox = \"".$templates->get("search_results_posts_inlinecheck")."\";"); - } - elseif($is_mod) - { - eval("\$inline_mod_checkbox = \"".$templates->get("search_results_posts_nocheck")."\";"); - } - - $plugins->run_hooks("search_results_post"); - eval("\$results .= \"".$templates->get("search_results_posts_post")."\";"); - } - if(!$results) - { - error($lang->error_nosearchresults); - } - $multipage = multipage($postcount, $perpage, $page, "search.php?action=results&sid=".htmlspecialchars_uni($mybb->get_input('sid'))."&sortby=$sortby&order=$order&uid=".$mybb->get_input('uid', MyBB::INPUT_INT)); - if($upper > $postcount) - { - $upper = $postcount; - } - - // Inline Post Moderation Options - if($is_mod) - { - // If user has moderation tools available, prepare the Select All feature - $num_results = $db->num_rows($query); - $lang->page_selected = $lang->sprintf($lang->page_selected, (int)$num_results); - $lang->select_all = $lang->sprintf($lang->select_all, (int)$postcount); - $lang->all_selected = $lang->sprintf($lang->all_selected, (int)$postcount); - eval("\$selectall = \"".$templates->get("search_posts_inlinemoderation_selectall")."\";"); - - $customthreadtools = $customposttools = ''; - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->simple_select("modtools", "tid, name, type", "type='p' AND (','||forums||',' LIKE '%,-1,%' OR forums='')"); - break; - default: - $query = $db->simple_select("modtools", "tid, name, type", "type='p' AND (CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='')"); - } - - while($tool = $db->fetch_array($query)) - { - eval("\$customposttools .= \"".$templates->get("search_results_posts_inlinemoderation_custom_tool")."\";"); - } - // Build inline moderation dropdown - if(!empty($customposttools)) - { - eval("\$customposttools = \"".$templates->get("search_results_posts_inlinemoderation_custom")."\";"); - } - eval("\$inlinemod = \"".$templates->get("search_results_posts_inlinemoderation")."\";"); - } - - $plugins->run_hooks("search_results_end"); - - eval("\$searchresults = \"".$templates->get("search_results_posts")."\";"); - output_page($searchresults); - } -} -elseif($mybb->input['action'] == "findguest") -{ - $where_sql = "uid='0'"; - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $where_sql .= " AND fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $where_sql .= " AND fid NOT IN ($inactiveforums)"; - } - - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - if(!empty($onlyusfids)) - { - $where_sql .= " AND fid NOT IN(".implode(',', $onlyusfids).")"; - } - - $options = array( - 'order_by' => 'dateline', - 'order_dir' => 'desc' - ); - - // Do we have a hard search limit? - if($mybb->settings['searchhardlimit'] > 0) - { - $options['limit'] = (int)$mybb->settings['searchhardlimit']; - } - - $pids = ''; - $comma = ''; - $query = $db->simple_select("posts", "pid", "{$where_sql}", $options); - while($pid = $db->fetch_field($query, "pid")) - { - $pids .= $comma.$pid; - $comma = ','; - } - - $tids = ''; - $comma = ''; - $query = $db->simple_select("threads", "tid", $where_sql); - while($tid = $db->fetch_field($query, "tid")) - { - $tids .= $comma.$tid; - $comma = ','; - } - - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => $db->escape_string($tids), - "posts" => $db->escape_string($pids), - "resulttype" => "posts", - "querycache" => '', - "keywords" => '' - ); - $plugins->run_hooks("search_do_search_process"); - $db->insert_query("searchlog", $searcharray); - redirect("search.php?action=results&sid=".$sid, $lang->redirect_searchresults); -} -elseif($mybb->input['action'] == "finduser") -{ - $where_sql = "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"; - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $where_sql .= " AND fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $where_sql .= " AND fid NOT IN ($inactiveforums)"; - } - - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - if(!empty($onlyusfids)) - { - $where_sql .= "AND ((fid IN(".implode(',', $onlyusfids).") AND uid='{$mybb->user['uid']}') OR fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - $options = array( - 'order_by' => 'dateline', - 'order_dir' => 'desc' - ); - - // Do we have a hard search limit? - if($mybb->settings['searchhardlimit'] > 0) - { - $options['limit'] = (int)$mybb->settings['searchhardlimit']; - } - - $pids = ''; - $comma = ''; - $query = $db->simple_select("posts", "pid", "{$where_sql}", $options); - while($pid = $db->fetch_field($query, "pid")) - { - $pids .= $comma.$pid; - $comma = ','; - } - - $tids = ''; - $comma = ''; - $query = $db->simple_select("threads", "tid", $where_sql); - while($tid = $db->fetch_field($query, "tid")) - { - $tids .= $comma.$tid; - $comma = ','; - } - - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => $db->escape_string($tids), - "posts" => $db->escape_string($pids), - "resulttype" => "posts", - "querycache" => '', - "keywords" => '' - ); - $plugins->run_hooks("search_do_search_process"); - $db->insert_query("searchlog", $searcharray); - redirect("search.php?action=results&sid=".$sid, $lang->redirect_searchresults); -} -elseif($mybb->input['action'] == "finduserthreads") -{ - $where_sql = "t.uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"; - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $where_sql .= " AND t.fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $where_sql .= " AND t.fid NOT IN ($inactiveforums)"; - } - - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - if(!empty($onlyusfids)) - { - $where_sql .= "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => '', - "posts" => '', - "resulttype" => "threads", - "querycache" => $db->escape_string($where_sql), - "keywords" => '' - ); - $plugins->run_hooks("search_do_search_process"); - $db->insert_query("searchlog", $searcharray); - redirect("search.php?action=results&sid=".$sid, $lang->redirect_searchresults); -} -elseif($mybb->input['action'] == "getnew") -{ - - $where_sql = "t.lastpost >= '".(int)$mybb->user['lastvisit']."'"; - - if($mybb->get_input('fid', MyBB::INPUT_INT)) - { - $where_sql .= " AND t.fid='".$mybb->get_input('fid', MyBB::INPUT_INT)."'"; - } - else if($mybb->get_input('fids')) - { - $fids = explode(',', $mybb->get_input('fids')); - foreach($fids as $key => $fid) - { - $fids[$key] = (int)$fid; - } - - if(!empty($fids)) - { - $where_sql .= " AND t.fid IN (".implode(',', $fids).")"; - } - } - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $where_sql .= " AND t.fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $where_sql .= " AND t.fid NOT IN ($inactiveforums)"; - } - - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - if(!empty($onlyusfids)) - { - $where_sql .= "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => '', - "posts" => '', - "resulttype" => "threads", - "querycache" => $db->escape_string($where_sql), - "keywords" => '' - ); - - $plugins->run_hooks("search_do_search_process"); - $db->insert_query("searchlog", $searcharray); - redirect("search.php?action=results&sid=".$sid, $lang->redirect_searchresults); -} -elseif($mybb->input['action'] == "getdaily") -{ - if($mybb->get_input('days', MyBB::INPUT_INT) < 1) - { - $days = 1; - } - else - { - $days = $mybb->get_input('days', MyBB::INPUT_INT); - } - $datecut = TIME_NOW-(86400*$days); - - $where_sql = "t.lastpost >='".$datecut."'"; - - if($mybb->get_input('fid', MyBB::INPUT_INT)) - { - $where_sql .= " AND t.fid='".$mybb->get_input('fid', MyBB::INPUT_INT)."'"; - } - else if($mybb->get_input('fids')) - { - $fids = explode(',', $mybb->get_input('fids')); - foreach($fids as $key => $fid) - { - $fids[$key] = (int)$fid; - } - - if(!empty($fids)) - { - $where_sql .= " AND t.fid IN (".implode(',', $fids).")"; - } - } - - $unsearchforums = get_unsearchable_forums(); - if($unsearchforums) - { - $where_sql .= " AND t.fid NOT IN ($unsearchforums)"; - } - $inactiveforums = get_inactive_forums(); - if($inactiveforums) - { - $where_sql .= " AND t.fid NOT IN ($inactiveforums)"; - } - - $permsql = ""; - $onlyusfids = array(); - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - foreach($group_permissions as $fid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } - } - if(!empty($onlyusfids)) - { - $where_sql .= "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))"; - } - - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => '', - "posts" => '', - "resulttype" => "threads", - "querycache" => $db->escape_string($where_sql), - "keywords" => '' - ); - - $plugins->run_hooks("search_do_search_process"); - $db->insert_query("searchlog", $searcharray); - redirect("search.php?action=results&sid=".$sid, $lang->redirect_searchresults); -} -elseif($mybb->input['action'] == "do_search" && $mybb->request_method == "post") -{ - $plugins->run_hooks("search_do_search_start"); - - // Check if search flood checking is enabled and user is not admin - if($mybb->settings['searchfloodtime'] > 0 && $mybb->usergroup['cancp'] != 1) - { - // Fetch the time this user last searched - if($mybb->user['uid']) - { - $conditions = "uid='{$mybb->user['uid']}'"; - } - else - { - $conditions = "uid='0' AND ipaddress=".$db->escape_binary($session->packedip); - } - $timecut = TIME_NOW-$mybb->settings['searchfloodtime']; - $query = $db->simple_select("searchlog", "*", "$conditions AND dateline > '$timecut'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_search = $db->fetch_array($query); - // Users last search was within the flood time, show the error - if($last_search['sid']) - { - $remaining_time = $mybb->settings['searchfloodtime']-(TIME_NOW-$last_search['dateline']); - if($remaining_time == 1) - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding_1, $mybb->settings['searchfloodtime']); - } - else - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding, $mybb->settings['searchfloodtime'], $remaining_time); - } - error($lang->error_searchflooding); - } - } - if($mybb->get_input('showresults') == "threads") - { - $resulttype = "threads"; - } - else - { - $resulttype = "posts"; - } - - $search_data = array( - "keywords" => $mybb->input['keywords'], - "author" => $mybb->get_input('author'), - "postthread" => $mybb->get_input('postthread', MyBB::INPUT_INT), - "matchusername" => $mybb->get_input('matchusername', MyBB::INPUT_INT), - "postdate" => $mybb->get_input('postdate', MyBB::INPUT_INT), - "pddir" => $mybb->get_input('pddir', MyBB::INPUT_INT), - "forums" => $mybb->input['forums'], - "findthreadst" => $mybb->get_input('findthreadst', MyBB::INPUT_INT), - "numreplies" => $mybb->get_input('numreplies', MyBB::INPUT_INT), - "threadprefix" => $mybb->get_input('threadprefix', MyBB::INPUT_ARRAY) - ); - - if(is_moderator() && !empty($mybb->input['visible'])) - { - $search_data['visible'] = $mybb->get_input('visible', MyBB::INPUT_INT); - } - - if($db->can_search == true) - { - if($mybb->settings['searchtype'] == "fulltext" && $db->supports_fulltext_boolean("posts") && $db->is_fulltext("posts")) - { - $search_results = perform_search_mysql_ft($search_data); - } - else - { - $search_results = perform_search_mysql($search_data); - } - } - else - { - error($lang->error_no_search_support); - } - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => $now, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => $search_results['threads'], - "posts" => $search_results['posts'], - "resulttype" => $resulttype, - "querycache" => $search_results['querycache'], - "keywords" => $db->escape_string($mybb->input['keywords']), - ); - $plugins->run_hooks("search_do_search_process"); - - $db->insert_query("searchlog", $searcharray); - - if(my_strtolower($mybb->get_input('sortordr')) == "asc" || my_strtolower($mybb->get_input('sortordr') == "desc")) - { - $sortorder = $mybb->get_input('sortordr'); - } - else - { - $sortorder = "desc"; - } - $sortby = htmlspecialchars_uni($mybb->get_input('sortby')); - $plugins->run_hooks("search_do_search_end"); - redirect("search.php?action=results&sid=".$sid."&sortby=".$sortby."&order=".$sortorder, $lang->redirect_searchresults); -} -else if($mybb->input['action'] == "thread") -{ - // Fetch thread info - $thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - $ismod = is_moderator($thread['fid']); - - if(!$thread || ($thread['visible'] != 1 && $ismod == false && ($thread['visible'] != -1 || $mybb->settings['soft_delete'] != 1 || !$mybb->user['uid'] || $mybb->user['uid'] != $thread['uid'])) || ($thread['visible'] > 1 && $ismod == true)) - { - error($lang->error_invalidthread); - } - - // Get forum info - $forum = get_forum($thread['fid']); - if(!$forum) - { - error($lang->error_invalidforum); - } - - $forum_permissions = forum_permissions($forum['fid']); - - if($forum['open'] == 0 || $forum['type'] != "f") - { - error($lang->error_closedinvalidforum); - } - if($forum_permissions['canview'] == 0 || $forum_permissions['canviewthreads'] != 1 || (isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid'])) - { - error_no_permission(); - } - - $plugins->run_hooks("search_thread_start"); - - // Check if search flood checking is enabled and user is not admin - if($mybb->settings['searchfloodtime'] > 0 && $mybb->usergroup['cancp'] != 1) - { - // Fetch the time this user last searched - if($mybb->user['uid']) - { - $conditions = "uid='{$mybb->user['uid']}'"; - } - else - { - $conditions = "uid='0' AND ipaddress=".$db->escape_binary($session->packedip); - } - $timecut = TIME_NOW-$mybb->settings['searchfloodtime']; - $query = $db->simple_select("searchlog", "*", "$conditions AND dateline > '$timecut'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_search = $db->fetch_array($query); - - // We shouldn't show remaining time if time is 0 or under. - $remaining_time = $mybb->settings['searchfloodtime']-(TIME_NOW-$last_search['dateline']); - // Users last search was within the flood time, show the error. - if($last_search['sid'] && $remaining_time > 0) - { - if($remaining_time == 1) - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding_1, $mybb->settings['searchfloodtime']); - } - else - { - $lang->error_searchflooding = $lang->sprintf($lang->error_searchflooding, $mybb->settings['searchfloodtime'], $remaining_time); - } - error($lang->error_searchflooding); - } - } - - $search_data = array( - "keywords" => $mybb->input['keywords'], - "postthread" => 1, - "tid" => $mybb->get_input('tid', MyBB::INPUT_INT) - ); - - if($db->can_search == true) - { - if($mybb->settings['searchtype'] == "fulltext" && $db->supports_fulltext_boolean("posts") && $db->is_fulltext("posts")) - { - $search_results = perform_search_mysql_ft($search_data); - } - else - { - $search_results = perform_search_mysql($search_data); - } - } - else - { - error($lang->error_no_search_support); - } - $sid = md5(uniqid(microtime(), true)); - $searcharray = array( - "sid" => $db->escape_string($sid), - "uid" => $mybb->user['uid'], - "dateline" => $now, - "ipaddress" => $db->escape_binary($session->packedip), - "threads" => $search_results['threads'], - "posts" => $search_results['posts'], - "resulttype" => 'posts', - "querycache" => $search_results['querycache'], - "keywords" => $db->escape_string($mybb->input['keywords']) - ); - $plugins->run_hooks("search_thread_process"); - - $db->insert_query("searchlog", $searcharray); - - $plugins->run_hooks("search_do_search_end"); - redirect("search.php?action=results&sid=".$sid, $lang->redirect_searchresults); -} -else -{ - $plugins->run_hooks("search_start"); - $srchlist = make_searchable_forums(); - $prefixselect = build_prefix_select('all', 'any', 1); - - $rowspan = 5; - - $moderator_options = ''; - if(is_moderator()) - { - $rowspan += 2; - eval("\$moderator_options = \"".$templates->get("search_moderator_options")."\";"); - } - - $plugins->run_hooks("search_end"); - - eval("\$search = \"".$templates->get("search")."\";"); - output_page($search); -} - - diff --git a/html/forums/sendthread.php b/html/forums/sendthread.php deleted file mode 100644 index 236b68f..0000000 --- a/html/forums/sendthread.php +++ /dev/null @@ -1,294 +0,0 @@ -load("sendthread"); - -// Get thread info -$tid = $mybb->get_input('tid', MyBB::INPUT_INT); -$thread = get_thread($tid); - -// Invalid thread -if(!$thread || $thread['visible'] != 1) -{ - error($lang->error_invalidthread); -} - -// Get thread prefix -$breadcrumbprefix = ''; -$threadprefix = array('prefix' => ''); -if($thread['prefix']) -{ - $threadprefix = build_prefixes($thread['prefix']); - if(!empty($threadprefix['displaystyle'])) - { - $breadcrumbprefix = $threadprefix['displaystyle'].' '; - } -} - -$thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - -// Make navigation -build_forum_breadcrumb($thread['fid']); -add_breadcrumb($breadcrumbprefix.$thread['subject'], get_thread_link($thread['tid'])); -add_breadcrumb($lang->nav_sendthread); - -// Get forum info -$forum = get_forum($thread['fid']); -$forumpermissions = forum_permissions($forum['fid']); - -// Invalid forum? -if(!$forum['fid'] || $forum['type'] != "f") -{ - error($lang->error_invalidforum); -} - -// This user can't view this forum or this thread -if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid'])) -{ - error_no_permission(); -} - -// Check if this forum is password protected and we have a valid password -check_forum_password($forum['fid']); - -if($mybb->usergroup['cansendemail'] == 0) -{ - error_no_permission(); -} - -// Check group limits -if($mybb->usergroup['maxemails'] > 0) -{ - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $query = $db->simple_select("maillogs", "COUNT(*) AS sent_count", "{$user_check} AND dateline >= '".(TIME_NOW - (60*60*24))."'"); - $sent_count = $db->fetch_field($query, "sent_count"); - if($sent_count >= $mybb->usergroup['maxemails']) - { - $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']); - error($lang->error_max_emails_day); - } -} - -// Check email flood control -if($mybb->usergroup['emailfloodtime'] > 0) -{ - if($mybb->user['uid'] > 0) - { - $user_check = "fromuid='{$mybb->user['uid']}'"; - } - else - { - $user_check = "ipaddress=".$db->escape_binary($session->packedip); - } - - $timecut = TIME_NOW-$mybb->usergroup['emailfloodtime']*60; - - $query = $db->simple_select("maillogs", "mid, dateline", "{$user_check} AND dateline > '{$timecut}'", array('order_by' => "dateline", 'order_dir' => "DESC")); - $last_email = $db->fetch_array($query); - - // Users last email was within the flood time, show the error - if($last_email['mid']) - { - $remaining_time = ($mybb->usergroup['emailfloodtime']*60)-(TIME_NOW-$last_email['dateline']); - - if($remaining_time == 1) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_second, $mybb->usergroup['emailfloodtime']); - } - elseif($remaining_time < 60) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_seconds, $mybb->usergroup['emailfloodtime'], $remaining_time); - } - elseif($remaining_time > 60 && $remaining_time < 120) - { - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_minute, $mybb->usergroup['emailfloodtime']); - } - else - { - $remaining_time_minutes = ceil($remaining_time/60); - $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_minutes, $mybb->usergroup['emailfloodtime'], $remaining_time_minutes); - } - - error($lang->error_emailflooding); - } -} - -$errors = array(); - -$mybb->input['action'] = $mybb->get_input('action'); -if($mybb->input['action'] == "do_sendtofriend" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->input['my_post_key']); - - $plugins->run_hooks("sendthread_do_sendtofriend_start"); - - if(!validate_email_format($mybb->input['email'])) - { - $errors[] = $lang->error_invalidemail; - } - - if($mybb->user['uid']) - { - $mybb->input['fromemail'] = $mybb->user['email']; - $mybb->input['fromname'] = $mybb->user['username']; - } - - if(!validate_email_format($mybb->input['fromemail'])) - { - $errors[] = $lang->error_invalidfromemail; - } - - if(empty($mybb->input['fromname'])) - { - $errors[] = $lang->error_noname; - } - - if(empty($mybb->input['subject'])) - { - $errors[] = $lang->error_nosubject; - } - - if(empty($mybb->input['message'])) - { - $errors[] = $lang->error_nomessage; - } - - if($mybb->settings['captchaimage'] && $mybb->user['uid'] == 0) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $captcha = new captcha; - - if($captcha->validate_captcha() == false) - { - // CAPTCHA validation failed - foreach($captcha->get_errors() as $error) - { - $errors[] = $error; - } - } - } - - // No errors detected - if(count($errors) == 0) - { - if($mybb->settings['mail_handler'] == 'smtp') - { - $from = $mybb->input['fromemail']; - } - else - { - $from = "{$mybb->input['fromname']} <{$mybb->input['fromemail']}>"; - } - - $threadlink = get_thread_link($thread['tid']); - - $message = $lang->sprintf($lang->email_sendtofriend, $mybb->input['fromname'], $mybb->settings['bbname'], $mybb->settings['bburl']."/".$threadlink, $mybb->input['message']); - - // Send the actual message - my_mail($mybb->input['email'], $mybb->input['subject'], $message, $from, "", "", false, "text", "", $mybb->input['fromemail']); - - if($mybb->settings['mail_logging'] > 0) - { - // Log the message - $log_entry = array( - "subject" => $db->escape_string($mybb->input['subject']), - "message" => $db->escape_string($message), - "dateline" => TIME_NOW, - "fromuid" => $mybb->user['uid'], - "fromemail" => $db->escape_string($mybb->input['fromemail']), - "touid" => 0, - "toemail" => $db->escape_string($mybb->input['email']), - "tid" => $thread['tid'], - "ipaddress" => $db->escape_binary($session->packedip), - "type" => 2 - ); - $db->insert_query("maillogs", $log_entry); - } - - $plugins->run_hooks("sendthread_do_sendtofriend_end"); - redirect(get_thread_link($thread['tid']), $lang->redirect_emailsent); - } - else - { - $mybb->input['action'] = ''; - } -} - -if(!$mybb->input['action']) -{ - $plugins->run_hooks("sendthread_start"); - - // Do we have some errors? - if(count($errors) >= 1) - { - $errors = inline_error($errors); - $email = htmlspecialchars_uni($mybb->input['email']); - $fromname = htmlspecialchars_uni($mybb->input['fromname']); - $fromemail = htmlspecialchars_uni($mybb->input['fromemail']); - $subject = htmlspecialchars_uni($mybb->input['subject']); - $message = htmlspecialchars_uni($mybb->input['message']); - } - else - { - $errors = ''; - $email = ''; - $fromname = ''; - $fromemail = ''; - $subject = $lang->sprintf($lang->emailsubject_sendtofriend, $mybb->settings['bbname']); - $message = ''; - } - - // Generate CAPTCHA? - if($mybb->settings['captchaimage'] && $mybb->user['uid'] == 0) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $post_captcha = new captcha(true, "post_captcha"); - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } - } - else - { - $captcha = ''; - } - - $from_email = ''; - if($mybb->user['uid'] == 0) - { - eval("\$from_email = \"".$templates->get("sendthread_fromemail")."\";"); - } - - $plugins->run_hooks("sendthread_end"); - - eval("\$sendtofriend = \"".$templates->get("sendthread")."\";"); - output_page($sendtofriend); -} diff --git a/html/forums/showteam.php b/html/forums/showteam.php deleted file mode 100644 index 5442b8b..0000000 --- a/html/forums/showteam.php +++ /dev/null @@ -1,208 +0,0 @@ -load('showteam'); - -add_breadcrumb($lang->nav_showteam); - -$plugins->run_hooks('showteam_start'); - -$timecut = TIME_NOW - $mybb->settings['wolcutoff']; - -$usergroups = array(); -$moderators = array(); -$users = array(); - -// Fetch the list of groups which are to be shown on the page -$query = $db->simple_select("usergroups", "gid, title, usertitle", "showforumteam=1", array('order_by' => 'disporder')); -while($usergroup = $db->fetch_array($query)) -{ - $usergroups[$usergroup['gid']] = $usergroup; -} - -if(empty($usergroups)) -{ - error($lang->error_noteamstoshow); -} - -// Fetch specific forum moderator details -if($usergroups[6]['gid']) -{ - $query = $db->query(" - SELECT m.*, f.name - FROM ".TABLE_PREFIX."moderators m - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=m.id) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=m.fid) - WHERE f.active = 1 AND m.isgroup = 0 - ORDER BY u.username - "); - while($moderator = $db->fetch_array($query)) - { - $moderators[$moderator['id']][] = $moderator; - } -} - -// Now query the users of those specific groups -$groups_in = implode(",", array_keys($usergroups)); -$users_in = implode(",", array_keys($moderators)); -if(!$groups_in) -{ - $groups_in = 0; -} -if(!$users_in) -{ - $users_in = 0; -} -$forum_permissions = forum_permissions(); - -$query = $db->simple_select("users", "uid, username, displaygroup, usergroup, ignorelist, hideemail, receivepms, lastactive, lastvisit, invisible, away", "displaygroup IN ($groups_in) OR (displaygroup='0' AND usergroup IN ($groups_in)) OR uid IN ($users_in)", array('order_by' => 'username')); -while($user = $db->fetch_array($query)) -{ - // If this user is a moderator - if(isset($moderators[$user['uid']])) - { - foreach($moderators[$user['uid']] as $forum) - { - if($forum_permissions[$forum['fid']]['canview'] == 1) - { - $forum_url = get_forum_link($forum['fid']); - eval("\$forumlist .= \"".$templates->get("showteam_moderators_forum")."\";"); - } - } - $user['forumlist'] = $forumlist; - $forumlist = ''; - $usergroups[6]['user_list'][$user['uid']] = $user; - } - - if($user['displaygroup'] == '6' || $user['usergroup'] == '6') - { - $usergroups[6]['user_list'][$user['uid']] = $user; - } - - // Are they also in another group which is being shown on the list? - if($user['displaygroup'] != 0) - { - $group = $user['displaygroup']; - } - else - { - $group = $user['usergroup']; - } - - if($usergroups[$group] && $group != 6) - { - $usergroups[$group]['user_list'][$user['uid']] = $user; - } -} - -// Now we have all of our user details we can display them. -$grouplist = ''; -foreach($usergroups as $usergroup) -{ - $usergrouprows = $modrows = ''; - - // If we have no users - don't show this group - if(!isset($usergroup['user_list'])) - { - continue; - } - - $bgcolor = ''; - foreach($usergroup['user_list'] as $user) - { - $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); - $user['profilelink'] = get_profile_link($user['uid']); - - // For the postbit templates - $post['uid'] = $user['uid']; - $emailcode = $pmcode = ''; - if($user['hideemail'] != 1) - { - eval("\$emailcode = \"".$templates->get("postbit_email")."\";"); - } - - if($user['receivepms'] != 0 && $mybb->settings['enablepms'] != 0 && my_strpos(",".$user['ignorelist'].",", ",".$mybb->user['uid'].",") === false) - { - eval("\$pmcode = \"".$templates->get("postbit_pm")."\";"); - } - - // For the online image - if($user['lastactive'] > $timecut && ($user['invisible'] == 0 || $mybb->usergroup['canviewwolinvis'] == 1) && $user['lastvisit'] != $user['lastactive']) - { - $status = "online"; - } - elseif($user['away'] == 1 && $mybb->settings['allowaway'] != 0) - { - $status = "away"; - } - else - { - $status = "offline"; - } - - if($user['invisible'] == 1 && $mybb->usergroup['canviewwolinvis'] != 1 && $user['uid'] != $mybb->user['uid']) - { - if($user['lastactive']) - { - $user['lastvisit'] = $lang->lastvisit_hidden; - } - else - { - $user['lastvisit'] = $lang->lastvisit_never; - } - } - else - { - $user['lastvisit'] = my_date('relative', $user['lastactive']); - } - - $bgcolor = alt_trow(); - - $plugins->run_hooks('showteam_user'); - - // If the current group is a moderator group - if($usergroup['gid'] == 6 && !empty($user['forumlist'])) - { - $forumslist = $user['forumlist']; - eval("\$modrows .= \"".$templates->get("showteam_moderators_mod")."\";"); - } - else - { - eval("\$usergrouprows .= \"".$templates->get("showteam_usergroup_user")."\";"); - } - } - - if($modrows && $usergroup['gid'] == 6) - { - eval("\$grouplist .= \"".$templates->get("showteam_moderators")."\";"); - } - - if($usergrouprows) - { - eval("\$grouplist .= \"".$templates->get("showteam_usergroup")."\";"); - } -} - -if(empty($grouplist)) -{ - error($lang->error_noteamstoshow); -} - -$plugins->run_hooks("showteam_end"); - -eval("\$showteam = \"".$templates->get("showteam")."\";"); -output_page($showteam); diff --git a/html/forums/showthread.php b/html/forums/showthread.php deleted file mode 100644 index 89ea001..0000000 --- a/html/forums/showthread.php +++ /dev/null @@ -1,1584 +0,0 @@ -load("showthread"); - -// If there is no tid but a pid, trick the system into thinking there was a tid anyway. -if(!empty($mybb->input['pid']) && !isset($mybb->input['tid'])) -{ - // see if we already have the post information - if(isset($style) && $style['pid'] == $mybb->get_input('pid', MyBB::INPUT_INT) && $style['tid']) - { - $mybb->input['tid'] = $style['tid']; - unset($style['tid']); // stop the thread caching code from being tricked - } - else - { - $options = array( - "limit" => 1 - ); - $query = $db->simple_select("posts", "fid,tid,visible", "pid=".$mybb->get_input('pid', MyBB::INPUT_INT), $options); - $post = $db->fetch_array($query); - - if(empty($post) || ($post['visible'] == 0 && !is_moderator($post['fid'], 'canviewunapprove')) || ($post['visible'] == -1 && !is_moderator($post['fid'], 'canviewdeleted'))) - { - // post does not exist --> show corresponding error - error($lang->error_invalidpost); - } - - $mybb->input['tid'] = $post['tid']; - } -} - -// Get the thread details from the database. -$thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - -if(!$thread || substr($thread['closed'], 0, 6) == "moved|") -{ - error($lang->error_invalidthread); -} - -// Get thread prefix if there is one. -$thread['threadprefix'] = ''; -$thread['displayprefix'] = ''; -if($thread['prefix'] != 0) -{ - $threadprefix = build_prefixes($thread['prefix']); - - if(!empty($threadprefix['prefix'])) - { - $thread['threadprefix'] = htmlspecialchars_uni($threadprefix['prefix']).' '; - $thread['displayprefix'] = $threadprefix['displaystyle'].' '; - } -} - -$reply_subject = $parser->parse_badwords($thread['subject']); -$thread['subject'] = htmlspecialchars_uni($reply_subject); -// Subject too long? Shorten it to avoid error message -if(my_strlen($reply_subject) > 85) -{ - $reply_subject = my_substr($reply_subject, 0, 82).'...'; -} -$reply_subject = htmlspecialchars_uni($reply_subject); -$tid = $thread['tid']; -$fid = $thread['fid']; - -if(!$thread['username']) -{ - $thread['username'] = $lang->guest; -} -$thread['username'] = htmlspecialchars_uni($thread['username']); - -// Is the currently logged in user a moderator of this forum? -if(is_moderator($fid)) -{ - $ismod = true; - if(is_moderator($fid, "canviewdeleted") == true || is_moderator($fid, "canviewunapprove") == true) - { - if(is_moderator($fid, "canviewunapprove") == true && is_moderator($fid, "canviewdeleted") == false) - { - $visibleonly = " AND visible IN (0,1)"; - $visibleonly2 = "AND p.visible IN (0,1) AND t.visible IN (0,1)"; - } - elseif(is_moderator($fid, "canviewdeleted") == true && is_moderator($fid, "canviewunapprove") == false) - { - $visibleonly = " AND visible IN (-1,1)"; - $visibleonly2 = "AND p.visible IN (-1,1) AND t.visible IN (-1,1)"; - } - else - { - $visibleonly = " AND visible IN (-1,0,1)"; - $visibleonly2 = "AND p.visible IN (-1,0,1) AND t.visible IN (-1,0,1)"; - } - } -} -else -{ - $ismod = false; - $visibleonly = " AND visible=1"; - $visibleonly2 = "AND p.visible=1 AND t.visible=1"; -} - -// Make sure we are looking at a real thread here. -if(($thread['visible'] != 1 && $ismod == false) || ($thread['visible'] == 0 && !is_moderator($fid, "canviewunapprove")) || ($thread['visible'] == -1 && !is_moderator($fid, "canviewdeleted"))) -{ - error($lang->error_invalidthread); -} - -$forumpermissions = forum_permissions($thread['fid']); - -// Does the user have permission to view this thread? -if($forumpermissions['canview'] != 1 || $forumpermissions['canviewthreads'] != 1) -{ - error_no_permission(); -} - -if(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] == 1 && $thread['uid'] != $mybb->user['uid']) -{ - error_no_permission(); -} - -$archive_url = build_archive_link("thread", $tid); - -// Does the thread belong to a valid forum? -$forum = get_forum($fid); -if(!$forum || $forum['type'] != "f") -{ - error($lang->error_invalidforum); -} - -$threadnoteslink = ''; -if(is_moderator($fid, "canmanagethreads") && !empty($thread['notes'])) -{ - eval('$threadnoteslink = "'.$templates->get('showthread_threadnoteslink').'";'); -} - -// Check if this forum is password protected and we have a valid password -check_forum_password($forum['fid']); - -// If there is no specific action, we must be looking at the thread. -if(!$mybb->get_input('action')) -{ - $mybb->input['action'] = "thread"; -} - -// Jump to the unread posts. -if($mybb->input['action'] == "newpost") -{ - // First, figure out what time the thread or forum were last read - $query = $db->simple_select("threadsread", "dateline", "uid='{$mybb->user['uid']}' AND tid='{$thread['tid']}'"); - $thread_read = $db->fetch_field($query, "dateline"); - - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) - { - $query = $db->simple_select("forumsread", "dateline", "fid='{$fid}' AND uid='{$mybb->user['uid']}'"); - $forum_read = $db->fetch_field($query, "dateline"); - - $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($forum_read == 0 || $forum_read < $read_cutoff) - { - $forum_read = $read_cutoff; - } - } - else - { - $forum_read = (int)my_get_array_cookie("forumread", $fid); - } - - if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid'] && $thread['lastpost'] > $forum_read) - { - $cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($thread['lastpost'] > $cutoff) - { - if($thread_read) - { - $lastread = $thread_read; - } - else - { - // Set $lastread to zero to make sure 'lastpost' is invoked in the last IF - $lastread = 0; - } - } - } - - if(!$lastread) - { - $readcookie = $threadread = (int)my_get_array_cookie("threadread", $thread['tid']); - if($readcookie > $forum_read) - { - $lastread = $readcookie; - } - else - { - $lastread = $forum_read; - } - } - - if($cutoff && $lastread < $cutoff) - { - $lastread = $cutoff; - } - - // Next, find the proper pid to link to. - $options = array( - "limit_start" => 0, - "limit" => 1, - "order_by" => "dateline", - "order_dir" => "asc" - ); - - $lastread = (int)$lastread; - $query = $db->simple_select("posts", "pid", "tid='{$tid}' AND dateline > '{$lastread}' {$visibleonly}", $options); - $newpost = $db->fetch_array($query); - - if($newpost['pid'] && $lastread) - { - $highlight = ''; - if($mybb->get_input('highlight')) - { - $string = "&"; - if($mybb->seo_support == true) - { - $string = "?"; - } - - $highlight = $string."highlight=".$mybb->get_input('highlight'); - } - - header("Location: ".htmlspecialchars_decode(get_post_link($newpost['pid'], $tid)).$highlight."#pid{$newpost['pid']}"); - } - else - { - // show them to the last post - $mybb->input['action'] = "lastpost"; - } -} - -// Jump to the last post. -if($mybb->input['action'] == "lastpost") -{ - if(my_strpos($thread['closed'], "moved|")) - { - $query = $db->query(" - SELECT p.pid - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON(p.tid=t.tid) - WHERE t.fid='".$thread['fid']."' AND t.closed NOT LIKE 'moved|%' {$visibleonly2} - ORDER BY p.dateline DESC - LIMIT 1 - "); - $pid = $db->fetch_field($query, "pid"); - } - else - { - $options = array( - 'order_by' => 'dateline', - 'order_dir' => 'desc', - 'limit_start' => 0, - 'limit' => 1 - ); - $query = $db->simple_select('posts', 'pid', "tid={$tid} {$visibleonly}", $options); - $pid = $db->fetch_field($query, "pid"); - } - header("Location: ".htmlspecialchars_decode(get_post_link($pid, $tid))."#pid{$pid}"); - exit; -} - -// Jump to the next newest posts. -if($mybb->input['action'] == "nextnewest") -{ - $options = array( - "limit_start" => 0, - "limit" => 1, - "order_by" => "lastpost" - ); - $query = $db->simple_select('threads', '*', "fid={$thread['fid']} AND lastpost > {$thread['lastpost']} {$visibleonly} AND closed NOT LIKE 'moved|%'", $options); - $nextthread = $db->fetch_array($query); - - // Are there actually next newest posts? - if(!$nextthread['tid']) - { - error($lang->error_nonextnewest); - } - $options = array( - "limit_start" => 0, - "limit" => 1, - "order_by" => "dateline", - "order_dir" => "desc" - ); - $query = $db->simple_select('posts', 'pid', "tid='{$nextthread['tid']}'", $options); - - // Redirect to the proper page. - $pid = $db->fetch_field($query, "pid"); - header("Location: ".htmlspecialchars_decode(get_post_link($pid, $nextthread['tid']))."#pid{$pid}"); - exit; -} - -// Jump to the next oldest posts. -if($mybb->input['action'] == "nextoldest") -{ - $options = array( - "limit" => 1, - "limit_start" => 0, - "order_by" => "lastpost", - "order_dir" => "desc" - ); - $query = $db->simple_select("threads", "*", "fid=".$thread['fid']." AND lastpost < ".$thread['lastpost']." {$visibleonly} AND closed NOT LIKE 'moved|%'", $options); - $nextthread = $db->fetch_array($query); - - // Are there actually next oldest posts? - if(!$nextthread['tid']) - { - error($lang->error_nonextoldest); - } - $options = array( - "limit_start" => 0, - "limit" => 1, - "order_by" => "dateline", - "order_dir" => "desc" - ); - $query = $db->simple_select("posts", "pid", "tid='".$nextthread['tid']."'", $options); - - // Redirect to the proper page. - $pid = $db->fetch_field($query, "pid"); - header("Location: ".htmlspecialchars_decode(get_post_link($pid, $nextthread['tid']))."#pid{$pid}"); - exit; -} - -$pid = $mybb->input['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - -// Forumdisplay cache -$forum_stats = $cache->read("forumsdisplay"); - -$breadcrumb_multipage = array(); -if($mybb->settings['showforumpagesbreadcrumb']) -{ - // How many pages are there? - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $query = $db->simple_select("forums", "threads, unapprovedthreads", "fid = '{$fid}'", array('limit' => 1)); - $forum_threads = $db->fetch_array($query); - $threadcount = $forum_threads['threads']; - - if(is_moderator($fid, "canviewunapprove") == true) - { - $threadcount += $forum_threads['unapprovedthreads']; - } - - // Limit to only our own threads - $uid_only = ''; - if(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] == 1) - { - $uid_only = " AND uid = '".$mybb->user['uid']."'"; - - $query = $db->simple_select("threads", "COUNT(tid) AS threads", "fid = '$fid' $visibleonly $uid_only", array('limit' => 1)); - $threadcount = $db->fetch_field($query, "threads"); - } - - // If we have 0 threads double check there aren't any "moved" threads - if($threadcount == 0) - { - $query = $db->simple_select("threads", "COUNT(tid) AS threads", "fid = '$fid' $visibleonly $uid_only", array('limit' => 1)); - $threadcount = $db->fetch_field($query, "threads"); - } - - $stickybit = " OR sticky=1"; - if($thread['sticky'] == 1) - { - $stickybit = " AND sticky=1"; - } - - // Figure out what page the thread is actually on - switch($db->type) - { - case "pgsql": - $query = $db->query(" - SELECT COUNT(tid) as threads - FROM ".TABLE_PREFIX."threads - WHERE fid = '$fid' AND (lastpost >= '".(int)$thread['lastpost']."'{$stickybit}) {$visibleonly} {$uid_only} - GROUP BY lastpost - ORDER BY lastpost DESC - "); - break; - default: - $query = $db->simple_select("threads", "COUNT(tid) as threads", "fid = '$fid' AND (lastpost >= '".(int)$thread['lastpost']."'{$stickybit}) {$visibleonly} {$uid_only}", array('order_by' => 'lastpost', 'order_dir' => 'desc')); - } - - $thread_position = $db->fetch_field($query, "threads"); - $thread_page = ceil(($thread_position/$mybb->settings['threadsperpage'])); - - $breadcrumb_multipage = array( - "num_threads" => $threadcount, - "current_page" => $thread_page - ); -} - -// Build the navigation. -build_forum_breadcrumb($fid, $breadcrumb_multipage); -add_breadcrumb($thread['displayprefix'].$thread['subject'], get_thread_link($thread['tid'])); - -$plugins->run_hooks("showthread_start"); - -// Show the entire thread (taking into account pagination). -if($mybb->input['action'] == "thread") -{ - if($thread['firstpost'] == 0) - { - update_first_post($tid); - } - - // Does this thread have a poll? - if($thread['poll']) - { - $options = array( - "limit" => 1 - ); - $query = $db->simple_select("polls", "*", "pid='".$thread['poll']."'", $options); - $poll = $db->fetch_array($query); - $poll['timeout'] = $poll['timeout']*60*60*24; - $expiretime = $poll['dateline'] + $poll['timeout']; - $now = TIME_NOW; - - // If the poll or the thread is closed or if the poll is expired, show the results. - if($poll['closed'] == 1 || $thread['closed'] == 1 || ($expiretime < $now && $poll['timeout'] > 0) || $forumpermissions['canvotepolls'] != 1) - { - $showresults = 1; - } - - // If the user is not a guest, check if he already voted. - if($mybb->user['uid'] != 0) - { - $query = $db->simple_select("pollvotes", "*", "uid='".$mybb->user['uid']."' AND pid='".$poll['pid']."'"); - while($votecheck = $db->fetch_array($query)) - { - $alreadyvoted = 1; - $votedfor[$votecheck['voteoption']] = 1; - } - } - else - { - if(isset($mybb->cookies['pollvotes'][$poll['pid']]) && $mybb->cookies['pollvotes'][$poll['pid']] !== "") - { - $alreadyvoted = 1; - } - } - $optionsarray = explode("||~|~||", $poll['options']); - $votesarray = explode("||~|~||", $poll['votes']); - $poll['question'] = htmlspecialchars_uni($poll['question']); - $polloptions = ''; - $totalvotes = 0; - $poll['totvotes'] = 0; - - for($i = 1; $i <= $poll['numoptions']; ++$i) - { - $poll['totvotes'] = $poll['totvotes'] + $votesarray[$i-1]; - } - - // Loop through the poll options. - for($i = 1; $i <= $poll['numoptions']; ++$i) - { - // Set up the parser options. - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "filter_badwords" => 1 - ); - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_videocode'] = 0; - } - - $option = $parser->parse_message($optionsarray[$i-1], $parser_options); - $votes = $votesarray[$i-1]; - $totalvotes += $votes; - $number = $i; - - // Mark the option the user voted for. - if(!empty($votedfor[$number])) - { - $optionbg = "trow2"; - $votestar = "*"; - } - else - { - $optionbg = "trow1"; - $votestar = ""; - } - - // If the user already voted or if the results need to be shown, do so; else show voting screen. - if(isset($alreadyvoted) || isset($showresults)) - { - if((int)$votes == "0") - { - $percent = "0"; - } - else - { - $percent = number_format($votes / $poll['totvotes'] * 100, 2); - } - $imagewidth = round($percent); - eval("\$polloptions .= \"".$templates->get("showthread_poll_resultbit")."\";"); - } - else - { - if($poll['multiple'] == 1) - { - eval("\$polloptions .= \"".$templates->get("showthread_poll_option_multiple")."\";"); - } - else - { - eval("\$polloptions .= \"".$templates->get("showthread_poll_option")."\";"); - } - } - } - - // If there are any votes at all, all votes together will be 100%; if there are no votes, all votes together will be 0%. - if($poll['totvotes']) - { - $totpercent = "100%"; - } - else - { - $totpercent = "0%"; - } - - // Check if user is allowed to edit posts; if so, show "edit poll" link. - $edit_poll = ''; - if(is_moderator($fid, 'canmanagepolls')) - { - eval("\$edit_poll = \"".$templates->get("showthread_poll_editpoll")."\";"); - } - - // Decide what poll status to show depending on the status of the poll and whether or not the user voted already. - if(isset($alreadyvoted) || isset($showresults)) - { - if($alreadyvoted) - { - $pollstatus = $lang->already_voted; - - if($mybb->usergroup['canundovotes'] == 1) - { - eval("\$pollstatus .= \"".$templates->get("showthread_poll_undovote")."\";"); - } - } - else - { - $pollstatus = $lang->poll_closed; - } - $lang->total_votes = $lang->sprintf($lang->total_votes, $totalvotes); - eval("\$pollbox = \"".$templates->get("showthread_poll_results")."\";"); - $plugins->run_hooks("showthread_poll_results"); - } - else - { - $closeon = ' '; - if($poll['timeout'] != 0) - { - $closeon = $lang->sprintf($lang->poll_closes, my_date($mybb->settings['dateformat'], $expiretime)); - } - - $publicnote = ' '; - if($poll['public'] == 1) - { - $publicnote = $lang->public_note; - } - - eval("\$pollbox = \"".$templates->get("showthread_poll")."\";"); - $plugins->run_hooks("showthread_poll"); - } - - } - else - { - $pollbox = ""; - } - - // Create the forum jump dropdown box. - if($mybb->settings['enableforumjump'] != 0) - { - $forumjump = build_forum_jump("", $fid, 1); - } - - // Fetch some links - $next_oldest_link = get_thread_link($tid, 0, "nextoldest"); - $next_newest_link = get_thread_link($tid, 0, "nextnewest"); - - // Mark this thread as read - mark_thread_read($tid, $fid); - - // If the forum is not open, show closed newreply button unless the user is a moderator of this forum. - $newthread = $newreply = ''; - if($forum['open'] != 0 && $forum['type'] == "f") - { - if($forumpermissions['canpostthreads'] != 0 && $mybb->user['suspendposting'] != 1) - { - eval("\$newthread = \"".$templates->get("showthread_newthread")."\";"); - } - - // Show the appropriate reply button if this thread is open or closed - if($forumpermissions['canpostreplys'] != 0 && $mybb->user['suspendposting'] != 1 && ($thread['closed'] != 1 || is_moderator($fid, "canpostclosedthreads")) && ($thread['uid'] == $mybb->user['uid'] || $forumpermissions['canonlyreplyownthreads'] != 1)) - { - eval("\$newreply = \"".$templates->get("showthread_newreply")."\";"); - } - elseif($thread['closed'] == 1) - { - eval("\$newreply = \"".$templates->get("showthread_newreply_closed")."\";"); - } - } - - // Create the admin tools dropdown box. - if($ismod == true) - { - $closelinkch = $stickch = ''; - - if($thread['closed'] == 1) - { - $closelinkch = ' checked="checked"'; - } - - if($thread['sticky']) - { - $stickch = ' checked="checked"'; - } - - if(is_moderator($thread['fid'], "canopenclosethreads")) - { - eval("\$closeoption .= \"".$templates->get("showthread_quickreply_options_close")."\";"); - } - - if(is_moderator($thread['fid'], "canstickunstickthreads")) - { - eval("\$closeoption .= \"".$templates->get("showthread_quickreply_options_stick")."\";"); - } - - $inlinecount = "0"; - $inlinecookie = "inlinemod_thread".$tid; - - $plugins->run_hooks("showthread_ismod"); - } - else - { - $modoptions = " "; - $inlinemod = $closeoption = ''; - } - - // Increment the thread view. - if($mybb->settings['delayedthreadviews'] == 1) - { - $db->shutdown_query("INSERT INTO ".TABLE_PREFIX."threadviews (tid) VALUES('{$tid}')"); - } - else - { - $db->shutdown_query("UPDATE ".TABLE_PREFIX."threads SET views=views+1 WHERE tid='{$tid}'"); - } - ++$thread['views']; - - // Work out the thread rating for this thread. - $rating = ''; - if($mybb->settings['allowthreadratings'] != 0 && $forum['allowtratings'] != 0) - { - $rated = 0; - $lang->load("ratethread"); - if($thread['numratings'] <= 0) - { - $thread['width'] = 0; - $thread['averagerating'] = 0; - $thread['numratings'] = 0; - } - else - { - $thread['averagerating'] = (float)round($thread['totalratings']/$thread['numratings'], 2); - $thread['width'] = (int)round($thread['averagerating'])*20; - $thread['numratings'] = (int)$thread['numratings']; - } - - if($thread['numratings']) - { - // At least >someone< has rated this thread, was it me? - // Check if we have already voted on this thread - it won't show hover effect then. - $query = $db->simple_select("threadratings", "uid", "tid='{$tid}' AND uid='{$mybb->user['uid']}'"); - $rated = $db->fetch_field($query, 'uid'); - } - - $not_rated = ''; - if(!$rated) - { - $not_rated = ' star_rating_notrated'; - } - - $ratingvotesav = $lang->sprintf($lang->rating_average, $thread['numratings'], $thread['averagerating']); - eval("\$ratethread = \"".$templates->get("showthread_ratethread")."\";"); - } - // Work out if we are showing unapproved posts as well (if the user is a moderator etc.) - if($ismod && is_moderator($fid, "canviewdeleted") == true && is_moderator($fid, "canviewunapprove") == false) - { - $visible = "AND p.visible IN (-1,1)"; - } - elseif($ismod && is_moderator($fid, "canviewdeleted") == false && is_moderator($fid, "canviewunapprove") == true) - { - $visible = "AND p.visible IN (0,1)"; - } - elseif($ismod && is_moderator($fid, "canviewdeleted") == true && is_moderator($fid, "canviewunapprove") == true) - { - $visible = "AND p.visible IN (-1,0,1)"; - } - elseif($forumpermissions['canviewdeletionnotice'] != 0 && $ismod == false) - { - $visible = "AND p.visible IN (-1,1)"; - } - else - { - $visible = "AND p.visible='1'"; - } - - // Can this user perform searches? If so, we can show them the "Search thread" form - if($forumpermissions['cansearch'] != 0) - { - eval("\$search_thread = \"".$templates->get("showthread_search")."\";"); - } - - // Fetch the ignore list for the current user if they have one - $ignored_users = array(); - if($mybb->user['uid'] > 0 && $mybb->user['ignorelist'] != "") - { - $ignore_list = explode(',', $mybb->user['ignorelist']); - foreach($ignore_list as $uid) - { - $ignored_users[$uid] = 1; - } - } - - // Fetch profile fields to display on postbit - $pfcache = $cache->read('profilefields'); - - if(is_array($pfcache)) - { - foreach($pfcache as $profilefield) - { - if($profilefield['postbit'] != 1) - { - continue; - } - - $profile_fields[$profilefield['fid']] = $profilefield; - } - } - - // Which thread mode is our user using by default? - if(!empty($mybb->user['threadmode'])) - { - $defaultmode = $mybb->user['threadmode']; - } - else if($mybb->settings['threadusenetstyle'] == 1) - { - $defaultmode = 'threaded'; - } - else - { - $defaultmode = 'linear'; - } - - // If mode is unset, set the default mode - if(!isset($mybb->input['mode'])) - { - $mybb->input['mode'] = $defaultmode; - } - - // Threaded or linear display? - $threadexbox = ''; - if($mybb->get_input('mode') == 'threaded') - { - $isfirst = 1; - - // Are we linked to a specific pid? - if($mybb->input['pid']) - { - $where = "AND p.pid='".$mybb->input['pid']."'"; - } - else - { - $where = " ORDER BY dateline LIMIT 0, 1"; - } - $query = $db->query(" - SELECT u.*, u.username AS userusername, p.*, f.*, eu.username AS editusername - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - LEFT JOIN ".TABLE_PREFIX."users eu ON (eu.uid=p.edituid) - WHERE p.tid='$tid' $visible $where - "); - $showpost = $db->fetch_array($query); - - // Choose what pid to display. - if(!$mybb->input['pid']) - { - $mybb->input['pid'] = $showpost['pid']; - } - - // Is there actually a pid to display? - if(!$showpost['pid']) - { - error($lang->error_invalidpost); - } - - $attachcache = array(); - if($mybb->settings['enableattachments'] == 1 && $thread['attachmentcount'] > 0 || is_moderator($fid, 'caneditposts')) - { - // Get the attachments for this post. - $query = $db->simple_select("attachments", "*", "pid=".$mybb->input['pid']); - while($attachment = $db->fetch_array($query)) - { - $attachcache[$attachment['pid']][$attachment['aid']] = $attachment; - } - } - - // Build the threaded post display tree. - $query = $db->query(" - SELECT p.username, p.uid, p.pid, p.replyto, p.subject, p.dateline - FROM ".TABLE_PREFIX."posts p - WHERE p.tid='$tid' - $visible - ORDER BY p.dateline - "); - while($post = $db->fetch_array($query)) - { - if(!$postsdone[$post['pid']]) - { - if($post['pid'] == $mybb->input['pid'] || ($isfirst && !$mybb->input['pid'])) - { - $postcounter = count($postsdone); - $isfirst = 0; - } - $tree[$post['replyto']][$post['pid']] = $post; - $postsdone[$post['pid']] = 1; - } - } - - $threadedbits = buildtree(); - $posts = build_postbit($showpost); - eval("\$threadexbox = \"".$templates->get("showthread_threadedbox")."\";"); - $plugins->run_hooks("showthread_threaded"); - } - else // Linear display - { - $threadexbox = ''; - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - // Figure out if we need to display multiple pages. - $page = 1; - $perpage = $mybb->settings['postsperpage']; - if($mybb->get_input('page', MyBB::INPUT_INT) && $mybb->get_input('page') != "last") - { - $page = $mybb->get_input('page', MyBB::INPUT_INT); - } - - if(!empty($mybb->input['pid'])) - { - $post = get_post($mybb->input['pid']); - if(empty($post) || ($post['visible'] == 0 && !is_moderator($post['fid'], 'canviewunapprove')) || ($post['visible'] == -1 && !is_moderator($post['fid'], 'canviewdeleted'))) - { - $footer .= ''; - } - else - { - $query = $db->query(" - SELECT COUNT(p.dateline) AS count FROM ".TABLE_PREFIX."posts p - WHERE p.tid = '{$tid}' - AND p.dateline <= '{$post['dateline']}' - {$visible} - "); - $result = $db->fetch_field($query, "count"); - if(($result % $perpage) == 0) - { - $page = $result / $perpage; - } - else - { - $page = (int)($result / $perpage) + 1; - } - } - } - - // Recount replies if user is a moderator to take into account unapproved posts. - if($ismod) - { - $query = $db->simple_select("posts p", "COUNT(*) AS replies", "p.tid='$tid' $visible"); - $cached_replies = $thread['replies']+$thread['unapprovedposts']+$thread['deletedposts']; - $thread['replies'] = $db->fetch_field($query, 'replies')-1; - - // The counters are wrong? Rebuild them - // This doesn't cover all cases however it is a good addition to the manual rebuild function - if($thread['replies'] != $cached_replies) - { - require_once MYBB_ROOT."/inc/functions_rebuild.php"; - rebuild_thread_counters($thread['tid']); - } - } - - $postcount = (int)$thread['replies']+1; - $pages = $postcount / $perpage; - $pages = ceil($pages); - - if($mybb->get_input('page') == "last") - { - $page = $pages; - } - - if($page > $pages || $page <= 0) - { - $page = 1; - } - - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - $upper = $start+$perpage; - - // Work out if we have terms to highlight - $highlight = ""; - $threadmode = ""; - if($mybb->seo_support == true) - { - if($mybb->get_input('highlight')) - { - $highlight = "?highlight=".urlencode($mybb->get_input('highlight')); - } - - if($defaultmode != "linear") - { - if($mybb->get_input('highlight')) - { - $threadmode = "&mode=linear"; - } - else - { - $threadmode = "?mode=linear"; - } - } - } - else - { - if(!empty($mybb->input['highlight'])) - { - if(is_array($mybb->input['highlight'])) - { - foreach($mybb->input['highlight'] as $highlight_word) - { - $highlight .= "&highlight[]=".urlencode($highlight_word); - } - } - else - { - $highlight = "&highlight=".urlencode($mybb->get_input('highlight')); - } - } - - if($defaultmode != "linear") - { - $threadmode = "&mode=linear"; - } - } - - $multipage = multipage($postcount, $perpage, $page, str_replace("{tid}", $tid, THREAD_URL_PAGED.$highlight.$threadmode)); - - // Lets get the pids of the posts on this page. - $pids = ""; - $comma = ''; - $query = $db->simple_select("posts p", "p.pid", "p.tid='$tid' $visible", array('order_by' => 'p.dateline', 'limit_start' => $start, 'limit' => $perpage)); - while($getid = $db->fetch_array($query)) - { - // Set the ID of the first post on page to $pid if it doesn't hold any value - // to allow this value to be used for Thread Mode/Linear Mode links - // and ensure the user lands on the correct page after changing view mode - if(empty($pid)) - { - $pid = $getid['pid']; - } - // Gather a comma separated list of post IDs - $pids .= "$comma'{$getid['pid']}'"; - $comma = ","; - } - if($pids) - { - $pids = "pid IN($pids)"; - - $attachcache = array(); - if($mybb->settings['enableattachments'] == 1 && $thread['attachmentcount'] > 0 || is_moderator($fid, 'caneditposts')) - { - // Now lets fetch all of the attachments for these posts. - $query = $db->simple_select("attachments", "*", $pids); - while($attachment = $db->fetch_array($query)) - { - $attachcache[$attachment['pid']][$attachment['aid']] = $attachment; - } - } - } - else - { - // If there are no pid's the thread is probably awaiting approval. - error($lang->error_invalidthread); - } - - // Get the actual posts from the database here. - $posts = ''; - $query = $db->query(" - SELECT u.*, u.username AS userusername, p.*, f.*, eu.username AS editusername - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid) - LEFT JOIN ".TABLE_PREFIX."users eu ON (eu.uid=p.edituid) - WHERE $pids - ORDER BY p.dateline - "); - while($post = $db->fetch_array($query)) - { - if($thread['firstpost'] == $post['pid'] && $thread['visible'] == 0) - { - $post['visible'] = 0; - } - $posts .= build_postbit($post); - $post = ''; - } - $plugins->run_hooks("showthread_linear"); - } - - // Show the similar threads table if wanted. - $similarthreads = ''; - if($mybb->settings['showsimilarthreads'] != 0) - { - $own_perm = ''; - if($forumpermissions['canonlyviewownthreads'] == 1) - { - $own_perm = " AND t.uid={$mybb->user['uid']}"; - } - - switch($db->type) - { - case "pgsql": - $query = $db->query(" - SELECT t.*, t.username AS threadusername, u.username - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid), plainto_tsquery ('".$db->escape_string($thread['subject'])."') AS query - WHERE t.fid='{$thread['fid']}' AND t.tid!='{$thread['tid']}' AND t.visible='1' AND t.closed NOT LIKE 'moved|%' AND t.subject @@ query{$own_perm} - ORDER BY t.lastpost DESC - OFFSET 0 LIMIT {$mybb->settings['similarlimit']} - "); - break; - default: - $query = $db->query(" - SELECT t.*, t.username AS threadusername, u.username, MATCH (t.subject) AGAINST ('".$db->escape_string($thread['subject'])."') AS relevance - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) - WHERE t.fid='{$thread['fid']}' AND t.tid!='{$thread['tid']}' AND t.visible='1' AND t.closed NOT LIKE 'moved|%'{$own_perm} AND MATCH (t.subject) AGAINST ('".$db->escape_string($thread['subject'])."') >= '{$mybb->settings['similarityrating']}' - ORDER BY t.lastpost DESC - LIMIT 0, {$mybb->settings['similarlimit']} - "); - } - - $count = 0; - $similarthreadbits = ''; - $icon_cache = $cache->read("posticons"); - while($similar_thread = $db->fetch_array($query)) - { - ++$count; - $trow = alt_trow(); - if($similar_thread['icon'] > 0 && $icon_cache[$similar_thread['icon']]) - { - $icon = $icon_cache[$similar_thread['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("forumdisplay_thread_icon")."\";"); - } - else - { - $icon = " "; - } - if(!$similar_thread['username']) - { - $similar_thread['username'] = $similar_thread['profilelink'] = htmlspecialchars_uni($similar_thread['threadusername']); - } - else - { - $similar_thread['username'] = htmlspecialchars_uni($similar_thread['username']); - $similar_thread['profilelink'] = build_profile_link($similar_thread['username'], $similar_thread['uid']); - } - - // If this thread has a prefix, insert a space between prefix and subject - if($similar_thread['prefix'] != 0) - { - $prefix = build_prefixes($similar_thread['prefix']); - if(!empty($prefix)) - { - $similar_thread['threadprefix'] = $prefix['displaystyle'].' '; - } - } - - $similar_thread['subject'] = $parser->parse_badwords($similar_thread['subject']); - $similar_thread['subject'] = htmlspecialchars_uni($similar_thread['subject']); - $similar_thread['threadlink'] = get_thread_link($similar_thread['tid']); - $similar_thread['lastpostlink'] = get_thread_link($similar_thread['tid'], 0, "lastpost"); - - $lastpostdate = my_date('relative', $similar_thread['lastpost']); - $lastposter = $similar_thread['lastposter']; - $lastposteruid = $similar_thread['lastposteruid']; - - // Don't link to guest's profiles (they have no profile). - if($lastposteruid == 0) - { - $lastposterlink = $lastposter; - } - else - { - $lastposterlink = build_profile_link($lastposter, $lastposteruid); - } - $similar_thread['replies'] = my_number_format($similar_thread['replies']); - $similar_thread['views'] = my_number_format($similar_thread['views']); - eval("\$similarthreadbits .= \"".$templates->get("showthread_similarthreads_bit")."\";"); - } - if($count) - { - eval("\$similarthreads = \"".$templates->get("showthread_similarthreads")."\";"); - } - } - - // Decide whether or not to show quick reply. - $quickreply = ''; - if($forumpermissions['canpostreplys'] != 0 && $mybb->user['suspendposting'] != 1 && ($thread['closed'] != 1 || is_moderator($fid, "canpostclosedthreads")) && $mybb->settings['quickreply'] != 0 && $mybb->user['showquickreply'] != '0' && $forum['open'] != 0 && ($thread['uid'] == $mybb->user['uid'] || $forumpermissions['canonlyreplyownthreads'] != 1)) - { - $query = $db->simple_select("posts", "pid", "tid='{$tid}'", array("order_by" => "pid", "order_dir" => "desc", "limit" => 1)); - $last_pid = $db->fetch_field($query, "pid"); - - // Show captcha image for guests if enabled - $captcha = ''; - if($mybb->settings['captchaimage'] && !$mybb->user['uid']) - { - require_once MYBB_ROOT.'inc/class_captcha.php'; - $post_captcha = new captcha(true, "post_captcha"); - - if($post_captcha->html) - { - $captcha = $post_captcha->html; - } - } - - $postoptionschecked = array('signature' => '', 'emailnotify' => ''); - if($mybb->user['signature']) - { - $postoptionschecked['signature'] = 'checked="checked"'; - } - - // Hide signature option if no permission - $option_signature = ''; - if($mybb->usergroup['canusesig'] && !$mybb->user['suspendsignature']) - { - eval("\$option_signature = \"".$templates->get('showthread_quickreply_options_signature')."\";"); - } - - if(isset($mybb->user['emailnotify']) && $mybb->user['emailnotify'] == 1) - { - $postoptionschecked['emailnotify'] = 'checked="checked"'; - } - - $trow = alt_trow(); - if($thread['closed'] == 1) - { - $trow = 'trow_shaded'; - } - - $moderation_notice = ''; - if(!is_moderator($forum['fid'], "canapproveunapproveposts")) - { - if($forumpermissions['modposts'] == 1) - { - $moderation_text = $lang->moderation_forum_posts; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - - if($mybb->user['moderateposts'] == 1) - { - $moderation_text = $lang->moderation_user_posts; - eval('$moderation_notice = "'.$templates->get('global_moderation_notice').'";'); - } - } - - $posthash = md5($mybb->user['uid'].random_str()); - eval("\$quickreply = \"".$templates->get("showthread_quickreply")."\";"); - } - - $moderationoptions = ''; - - // If the user is a moderator, show the moderation tools. - if($ismod) - { - $customthreadtools = $customposttools = $standardthreadtools = $standardposttools = ''; - - $threadnotesbox = $viewnotes = ''; - if(!empty($thread['notes'])) - { - $thread['notes'] = nl2br(htmlspecialchars_uni($thread['notes'])); - - if(strlen($thread['notes']) > 200) - { - eval("\$viewnotes = \"".$templates->get("showthread_threadnotes_viewnotes")."\";"); - $thread['notes'] = my_substr($thread['notes'], 0, 200)."... {$viewnotes}"; - } - - eval("\$threadnotesbox = \"".$templates->get("showthread_threadnotes")."\";"); - } - - if(is_moderator($forum['fid'], "canusecustomtools") && (!empty($forum_stats[-1]['modtools']) || !empty($forum_stats[$forum['fid']]['modtools']))) - { - $gids = explode(',', $mybb->user['additionalgroups']); - $gids[] = $mybb->user['usergroup']; - $gids = array_filter(array_unique($gids)); - switch($db->type) - { - case "pgsql": - case "sqlite": - foreach($gids as $gid) - { - $gid = (int)$gid; - $gidswhere .= " OR ','||groups||',' LIKE '%,{$gid},%'"; - } - $query = $db->simple_select("modtools", 'tid, name, type', "(','||forums||',' LIKE '%,$fid,%' OR ','||forums||',' LIKE '%,-1,%' OR forums='') AND (groups='' OR ','||groups||',' LIKE '%,-1,%'{$gidswhere})"); - break; - default: - foreach($gids as $gid) - { - $gid = (int)$gid; - $gidswhere .= " OR CONCAT(',',groups,',') LIKE '%,{$gid},%'"; - } - $query = $db->simple_select("modtools", 'tid, name, type', "(CONCAT(',',forums,',') LIKE '%,$fid,%' OR CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='') AND (groups='' OR CONCAT(',',groups,',') LIKE '%,-1,%'{$gidswhere})"); - break; - } - - while($tool = $db->fetch_array($query)) - { - if($tool['type'] == 'p') - { - eval("\$customposttools .= \"".$templates->get("showthread_inlinemoderation_custom_tool")."\";"); - } - else - { - eval("\$customthreadtools .= \"".$templates->get("showthread_moderationoptions_custom_tool")."\";"); - } - } - - // Build inline moderation dropdown - if(!empty($customposttools)) - { - eval("\$customposttools = \"".$templates->get("showthread_inlinemoderation_custom")."\";"); - } - } - - $inlinemodsoftdelete = $inlinemodrestore = $inlinemoddelete = $inlinemodmanage = $inlinemodapprove = ''; - - if(is_moderator($forum['fid'], "cansoftdeleteposts")) - { - eval("\$inlinemodsoftdelete = \"".$templates->get("showthread_inlinemoderation_softdelete")."\";"); - } - - if(is_moderator($forum['fid'], "canrestoreposts")) - { - eval("\$inlinemodrestore = \"".$templates->get("showthread_inlinemoderation_restore")."\";"); - } - - if(is_moderator($forum['fid'], "candeleteposts")) - { - eval("\$inlinemoddelete = \"".$templates->get("showthread_inlinemoderation_delete")."\";"); - } - - if(is_moderator($forum['fid'], "canmanagethreads")) - { - eval("\$inlinemodmanage = \"".$templates->get("showthread_inlinemoderation_manage")."\";"); - } - - if(is_moderator($forum['fid'], "canapproveunapproveposts")) - { - eval("\$inlinemodapprove = \"".$templates->get("showthread_inlinemoderation_approve")."\";"); - } - - if(!empty($inlinemodsoftdelete) || !empty($inlinemodrestore) || !empty($inlinemoddelete) || !empty($inlinemodmanage) || !empty($inlinemodapprove)) - { - eval("\$standardposttools = \"".$templates->get("showthread_inlinemoderation_standard")."\";"); - } - - // Only show inline mod menu if there's options to show - if(!empty($standardposttools) || !empty($customposttools)) - { - eval("\$inlinemod = \"".$templates->get("showthread_inlinemoderation")."\";"); - } - - // Build thread moderation dropdown - if(!empty($customthreadtools)) - { - eval("\$customthreadtools = \"".$templates->get("showthread_moderationoptions_custom")."\";"); - } - - $openclosethread = $stickunstickthread = $deletethread = $threadnotes = $managethread = $adminpolloptions = $approveunapprovethread = $softdeletethread = ''; - - if(is_moderator($forum['fid'], "canopenclosethreads")) - { - eval("\$openclosethread = \"".$templates->get("showthread_moderationoptions_openclose")."\";"); - } - - if(is_moderator($forum['fid'], "canstickunstickthreads")) - { - eval("\$stickunstickthread = \"".$templates->get("showthread_moderationoptions_stickunstick")."\";"); - } - - if(is_moderator($forum['fid'], "candeletethreads")) - { - eval("\$deletethread = \"".$templates->get("showthread_moderationoptions_delete")."\";"); - } - - if(is_moderator($forum['fid'], "canmanagethreads")) - { - eval("\$threadnotes = \"".$templates->get("showthread_moderationoptions_threadnotes")."\";"); - eval("\$managethread = \"".$templates->get("showthread_moderationoptions_manage")."\";"); - } - - if($pollbox && is_moderator($forum['fid'], "canmanagepolls")) - { - eval("\$adminpolloptions = \"".$templates->get("showthread_moderationoptions_deletepoll")."\";"); - } - - if(is_moderator($forum['fid'], "canapproveunapprovethreads")) - { - if($thread['visible'] == 0) - { - eval("\$approveunapprovethread = \"".$templates->get("showthread_moderationoptions_approve")."\";"); - } - else - { - eval("\$approveunapprovethread = \"".$templates->get("showthread_moderationoptions_unapprove")."\";"); - } - } - - if(is_moderator($forum['fid'], "cansoftdeletethreads") && $thread['visible'] != -1) - { - eval("\$softdeletethread = \"".$templates->get("showthread_moderationoptions_softdelete")."\";"); - } - elseif(is_moderator($forum['fid'], "canrestorethreads") && $thread['visible'] == -1) - { - eval("\$softdeletethread = \"".$templates->get("showthread_moderationoptions_restore")."\";"); - } - - if(!empty($openclosethread) || !empty($stickunstickthread) || !empty($deletethread) || !empty($managethread) || !empty($adminpolloptions) || !empty($approveunapprovethread) || !empty($softdeletethread)) - { - eval("\$standardthreadtools = \"".$templates->get("showthread_moderationoptions_standard")."\";"); - } - - // Only show mod menu if there's any options to show - if(!empty($standardthreadtools) || !empty($customthreadtools)) - { - eval("\$moderationoptions = \"".$templates->get("showthread_moderationoptions")."\";"); - } - } - - // Display 'send thread' link if permissions allow - $sendthread = ''; - if($mybb->usergroup['cansendemail'] == 1) - { - eval("\$sendthread = \"".$templates->get("showthread_send_thread")."\";"); - } - - // Display 'add poll' link to thread creator (or mods) if thread doesn't have a poll already - $addpoll = ''; - $time = TIME_NOW; - if(!$thread['poll'] && ($thread['uid'] == $mybb->user['uid'] || $ismod == true) && $forumpermissions['canpostpolls'] == 1 && $forum['open'] != 0 && $thread['closed'] != 1 && ($ismod == true || $thread['dateline'] > ($time-($mybb->settings['polltimelimit']*60*60)) || $mybb->settings['polltimelimit'] == 0)) - { - eval("\$addpoll = \"".$templates->get("showthread_add_poll")."\";"); - } - - // Subscription status - $add_remove_subscription = 'add'; - $add_remove_subscription_text = $lang->subscribe_thread; - - if($mybb->user['uid']) - { - $query = $db->simple_select("threadsubscriptions", "tid", "tid='".(int)$tid."' AND uid='".(int)$mybb->user['uid']."'", array('limit' => 1)); - - if($db->fetch_field($query, 'tid')) - { - $add_remove_subscription = 'remove'; - $add_remove_subscription_text = $lang->unsubscribe_thread; - } - - eval("\$addremovesubscription = \"".$templates->get("showthread_subscription")."\";"); - } - - $classic_header = ''; - if($mybb->settings['postlayout'] == "classic") - { - eval("\$classic_header = \"".$templates->get("showthread_classic_header")."\";"); - } - - // Get users viewing this thread - if($mybb->settings['browsingthisthread'] != 0) - { - $timecut = TIME_NOW - $mybb->settings['wolcutoff']; - - $comma = ''; - $guestcount = 0; - $membercount = 0; - $inviscount = 0; - $onlinemembers = ''; - $doneusers = array(); - - $query = $db->query(" - SELECT s.ip, s.uid, s.time, u.username, u.invisible, u.usergroup, u.displaygroup - FROM ".TABLE_PREFIX."sessions s - LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid) - WHERE s.time > '$timecut' AND location2='$tid' AND nopermission != 1 - ORDER BY u.username ASC, s.time DESC - "); - - while($user = $db->fetch_array($query)) - { - if($user['uid'] == 0) - { - ++$guestcount; - } - else if(empty($doneusers[$user['uid']]) || $doneusers[$user['uid']] < $user['time']) - { - ++$membercount; - $doneusers[$user['uid']] = $user['time']; - - $invisiblemark = ''; - if($user['invisible'] == 1) - { - $invisiblemark = "*"; - ++$inviscount; - } - - if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid']) - { - $user['profilelink'] = get_profile_link($user['uid']); - $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); - $user['reading'] = my_date($mybb->settings['timeformat'], $user['time']); - - eval("\$onlinemembers .= \"".$templates->get("showthread_usersbrowsing_user", 1, 0)."\";"); - $comma = $lang->comma; - } - } - } - - $guestsonline = ''; - if($guestcount) - { - $guestsonline = $lang->sprintf($lang->users_browsing_thread_guests, $guestcount); - } - - $invisonline = ''; - if($mybb->user['invisible'] == 1) - { - // the user was counted as invisible user --> correct the inviscount - $inviscount -= 1; - } - if($inviscount && $mybb->usergroup['canviewwolinvis'] != 1) - { - $invisonline = $lang->sprintf($lang->users_browsing_forum_invis, $inviscount); - } - - $onlinesep = ''; - if($invisonline != '' && $onlinemembers) - { - $onlinesep = $lang->comma; - } - - $onlinesep2 = ''; - if($invisonline != '' && $guestcount || $onlinemembers && $guestcount) - { - $onlinesep2 = $lang->comma; - } - - eval("\$usersbrowsing = \"".$templates->get("showthread_usersbrowsing")."\";"); - } - - $plugins->run_hooks("showthread_end"); - - eval("\$showthread = \"".$templates->get("showthread")."\";"); - output_page($showthread); -} - -/** - * Build a navigation tree for threaded display. - * - * @param int $replyto - * @param int $indent - * @return string - */ -function buildtree($replyto=0, $indent=0) -{ - global $tree, $mybb, $theme, $mybb, $pid, $tid, $templates, $parser, $lang; - - $indentsize = 13 * $indent; - - ++$indent; - $posts = ''; - if(is_array($tree[$replyto])) - { - foreach($tree[$replyto] as $key => $post) - { - $postdate = my_date('relative', $post['dateline']); - $post['subject'] = htmlspecialchars_uni($parser->parse_badwords($post['subject'])); - - if(!$post['subject']) - { - $post['subject'] = "[".$lang->no_subject."]"; - } - - $post['username'] = htmlspecialchars_uni($post['username']); - $post['profilelink'] = build_profile_link($post['username'], $post['uid']); - - if($mybb->input['pid'] == $post['pid']) - { - eval("\$posts .= \"".$templates->get("showthread_threaded_bitactive")."\";"); - } - else - { - eval("\$posts .= \"".$templates->get("showthread_threaded_bit")."\";"); - } - - if($tree[$post['pid']]) - { - $posts .= buildtree($post['pid'], $indent); - } - } - --$indent; - } - return $posts; -} diff --git a/html/forums/stats.php b/html/forums/stats.php deleted file mode 100644 index 9522fb3..0000000 --- a/html/forums/stats.php +++ /dev/null @@ -1,225 +0,0 @@ -load("stats"); - -add_breadcrumb($lang->nav_stats); - -$stats = $cache->read("stats"); - -if($stats['numthreads'] < 1 || $stats['numusers'] < 1) -{ - error($lang->not_enough_info_stats); -} - -if($mybb->settings['statsenabled'] != 1) -{ - error($lang->stats_disabled); -} - -$plugins->run_hooks("stats_start"); - -$repliesperthread = my_number_format(round((($stats['numposts'] - $stats['numthreads']) / $stats['numthreads']), 2)); -$postspermember = my_number_format(round(($stats['numposts'] / $stats['numusers']), 2)); -$threadspermember = my_number_format(round(($stats['numthreads'] / $stats['numusers']), 2)); - -// Get number of days since board start (might need improvement) -$query = $db->simple_select("users", "regdate", "", array('order_by' => 'regdate', 'limit' => 1)); -$result = $db->fetch_array($query); -$days = (TIME_NOW - $result['regdate']) / 86400; -if($days < 1) -{ - $days = 1; -} -// Get "per day" things -$postsperday = my_number_format(round(($stats['numposts'] / $days), 2)); -$threadsperday = my_number_format(round(($stats['numthreads'] / $days), 2)); -$membersperday = my_number_format(round(($stats['numusers'] / $days), 2)); - -// Get forum permissions -$unviewableforums = get_unviewable_forums(true); -$inactiveforums = get_inactive_forums(); -$unviewablefids = $inactivefids = array(); -$fidnot = ''; - -if($unviewableforums) -{ - $fidnot .= "AND fid NOT IN ($unviewableforums)"; - $unviewablefids = explode(',', $unviewableforums); -} -if($inactiveforums) -{ - $fidnot .= "AND fid NOT IN ($inactiveforums)"; - $inactivefids = explode(',', $inactiveforums); -} - -$unviewableforumsarray = array_merge($unviewablefids, $inactivefids); - -// Check group permissions if we can't view threads not started by us -$group_permissions = forum_permissions(); -$onlyusfids = array(); -foreach($group_permissions as $gpfid => $forum_permissions) -{ - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $gpfid; - } -} - -// Most replied-to threads -$most_replied = $cache->read("most_replied_threads"); - -if(!$most_replied) -{ - $cache->update_most_replied_threads(); - $most_replied = $cache->read("most_replied_threads", true); -} - -$mostreplies = ''; -if(!empty($most_replied)) -{ - foreach($most_replied as $key => $thread) - { - if( - !in_array($thread['fid'], $unviewableforumsarray) && - (!in_array($thread['fid'], $onlyusfids) || ($mybb->user['uid'] && $thread['uid'] == $mybb->user['uid'])) - ) - { - $thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - $numberbit = my_number_format($thread['replies']); - $numbertype = $lang->replies; - $thread['threadlink'] = get_thread_link($thread['tid']); - eval("\$mostreplies .= \"".$templates->get("stats_thread")."\";"); - } - } -} - -// Most viewed threads -$most_viewed = $cache->read("most_viewed_threads"); - -if(!$most_viewed) -{ - $cache->update_most_viewed_threads(); - $most_viewed = $cache->read("most_viewed_threads", true); -} - -$mostviews = ''; -if(!empty($most_viewed)) -{ - foreach($most_viewed as $key => $thread) - { - if( - !in_array($thread['fid'], $unviewableforumsarray) && - (!in_array($thread['fid'], $onlyusfids) || ($mybb->user['uid'] && $thread['uid'] == $mybb->user['uid'])) - ) - { - $thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); - $numberbit = my_number_format($thread['views']); - $numbertype = $lang->views; - $thread['threadlink'] = get_thread_link($thread['tid']); - eval("\$mostviews .= \"".$templates->get("stats_thread")."\";"); - } - } -} - -$statistics = $cache->read('statistics'); -$mybb->settings['statscachetime'] = (int)$mybb->settings['statscachetime']; - -if($mybb->settings['statscachetime'] < 1) -{ - $mybb->settings['statscachetime'] = 0; -} - -$interval = $mybb->settings['statscachetime']*3600; - -if(!$statistics || $interval == 0 || TIME_NOW - $interval > $statistics['time']) -{ - $cache->update_statistics(); - $statistics = $cache->read('statistics'); -} - -// Top forum -$query = $db->simple_select('forums', 'fid, name, threads, posts', "type='f'$fidnot", array('order_by' => 'posts', 'order_dir' => 'DESC', 'limit' => 1)); -$forum = $db->fetch_array($query); - -if(empty($forum['fid'])) -{ - $topforum = $lang->none; - $topforumposts = $lang->no; - $topforumthreads = $lang->no; -} -else -{ - $forum['name'] = htmlspecialchars_uni(strip_tags($forum['name'])); - $forum['link'] = get_forum_link($forum['fid']); - eval("\$topforum = \"".$templates->get("stats_topforum")."\";"); - $topforumposts = $forum['posts']; - $topforumthreads = $forum['threads']; -} - -// Top referrer defined for the templates even if we don't use it -$top_referrer = ''; -if($mybb->settings['statstopreferrer'] == 1 && isset($statistics['top_referrer']['uid'])) -{ - // Only show this if we have anything more the 0 referrals - if($statistics['top_referrer']['referrals'] > 0) - { - $toprefuser = build_profile_link(htmlspecialchars_uni($statistics['top_referrer']['username']), $statistics['top_referrer']['uid']); - $top_referrer = $lang->sprintf($lang->top_referrer, $toprefuser, my_number_format($statistics['top_referrer']['referrals'])); - } -} - -// Today's top poster -if(!isset($statistics['top_poster']['uid'])) -{ - $topposter = $lang->nobody; - $topposterposts = $lang->no_posts; -} -else -{ - if(!$statistics['top_poster']['uid']) - { - $topposter = $lang->guest; - } - else - { - $topposter = build_profile_link(htmlspecialchars_uni($statistics['top_poster']['username']), $statistics['top_poster']['uid']); - } - - $topposterposts = $statistics['top_poster']['poststoday']; -} - -// What percent of members have posted? -$posters = $statistics['posters']; -$havepostedpercent = my_number_format(round((($posters / $stats['numusers']) * 100), 2)) . "%"; - -$lang->todays_top_poster = $lang->sprintf($lang->todays_top_poster, $topposter, my_number_format($topposterposts)); -$lang->popular_forum = $lang->sprintf($lang->popular_forum, $topforum, my_number_format($topforumposts), my_number_format($topforumthreads)); - -$stats['numposts'] = my_number_format($stats['numposts']); -$stats['numthreads'] = my_number_format($stats['numthreads']); -$stats['numusers'] = my_number_format($stats['numusers']); -$stats['newest_user'] = build_profile_link($stats['lastusername'], $stats['lastuid']); - -$plugins->run_hooks("stats_end"); - -eval("\$stats = \"".$templates->get("stats")."\";"); -output_page($stats); diff --git a/html/forums/syndication.php b/html/forums/syndication.php deleted file mode 100644 index 2233569..0000000 --- a/html/forums/syndication.php +++ /dev/null @@ -1,235 +0,0 @@ -load("syndication"); - -// Load syndication class. -require_once MYBB_ROOT."inc/class_feedgeneration.php"; -$feedgenerator = new FeedGenerator(); - -// Load the post parser -require_once MYBB_ROOT."inc/class_parser.php"; -$parser = new postParser; - -// Find out the thread limit. -if($mybb->get_input('portal') && $mybb->settings['portal'] != 0) -{ - $thread_limit = $mybb->settings['portal_numannouncements']; -} -else -{ - $thread_limit = $mybb->get_input('limit', MyBB::INPUT_INT); -} - -if($thread_limit > 50) -{ - $thread_limit = 50; -} -else if(!$thread_limit || $thread_limit < 0) -{ - $thread_limit = 20; -} - -// Syndicate a specific forum or all viewable? -if($mybb->get_input('portal') && $mybb->settings['portal'] != 0) -{ - if($mybb->settings['portal_announcementsfid'] != '-1') - { - $forumlist = explode(',', $mybb->settings['portal_announcementsfid']); - } -} -elseif($mybb->get_input('fid')) -{ - $forumlist = explode(',', $mybb->get_input('fid')); -} - -// Get the forums the user is not allowed to see. -$unviewableforums = get_unviewable_forums(true); -$inactiveforums = get_inactive_forums(); - -$unviewable = ''; - -$plugins->run_hooks('syndication_start'); - -// If there are any, add SQL to exclude them. -if($unviewableforums) -{ - $unviewable .= " AND fid NOT IN($unviewableforums)"; -} - -if($inactiveforums) -{ - $unviewable .= " AND fid NOT IN($inactiveforums)"; -} - -// If there are no forums to syndicate, syndicate all viewable. -if(!empty($forumlist)) -{ - $forum_ids = "'-1'"; - foreach($forumlist as $fid) - { - $forum_ids .= ",'".(int)$fid."'"; - } - $forumlist = "AND fid IN ($forum_ids) $unviewable"; -} -else -{ - $forumlist = $unviewable; - $all_forums = 1; -} - -// Find out which title to add to the feed. -$title = $mybb->settings['bbname']; -$query = $db->simple_select("forums", "name, fid, allowhtml, allowmycode, allowsmilies, allowimgcode, allowvideocode", "1=1 ".$forumlist); -$comma = " - "; -while($forum = $db->fetch_array($query)) -{ - if(!$mybb->get_input('portal') || $mybb->settings['portal'] == 0) - { - $title .= $comma.$forum['name']; - $comma = $lang->comma; - } - $forumcache[$forum['fid']] = $forum; -} - -if($mybb->get_input('portal') && $mybb->settings['portal'] != 0) -{ - $title .= $comma.$lang->portal; -} - -// If syndicating all forums then cut the title back to "All Forums" -if(isset($all_forums)) -{ - if($mybb->get_input('portal') && $mybb->settings['portal'] != 0) - { - $title = $mybb->settings['bbname']." - ".$lang->portal; - } - else - { - $title = $mybb->settings['bbname']." - ".$lang->all_forums; - } -} - -// Set the feed type. -$feedgenerator->set_feed_format($mybb->get_input('type')); - -// Set the channel header. -$channel = array( - "title" => $title, - "link" => $mybb->settings['bburl']."/", - "date" => TIME_NOW, - "description" => $mybb->settings['bbname']." - ".$mybb->settings['bburl'] -); -$feedgenerator->set_channel($channel); - -$permsql = ""; -$onlyusfids = array(); - -// Check group permissions if we can't view threads not started by us -$group_permissions = forum_permissions(); -foreach($group_permissions as $fid => $forum_permissions) -{ - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $fid; - } -} -if(!empty($onlyusfids)) -{ - $permsql .= "AND ((fid IN(".implode(',', $onlyusfids).") AND uid='{$mybb->user['uid']}') OR fid NOT IN(".implode(',', $onlyusfids)."))"; -} - -// Get the threads to syndicate. -$query = $db->simple_select("threads", "subject, tid, dateline, firstpost", "visible='1' AND closed NOT LIKE 'moved|%' {$permsql} {$forumlist}", array('order_by' => 'dateline', 'order_dir' => 'DESC', 'limit' => $thread_limit)); -// Loop through all the threads. -while($thread = $db->fetch_array($query)) -{ - $items[$thread['tid']] = array( - "title" => $parser->parse_badwords($thread['subject']), - "link" => $channel['link'].get_thread_link($thread['tid']), - "date" => $thread['dateline'], - ); - - $firstposts[] = $thread['firstpost']; -} - -$plugins->run_hooks('syndication_get_posts'); - -if(!empty($firstposts)) -{ - $firstpostlist = "pid IN(".$db->escape_string(implode(',', $firstposts)).")"; - - if($mybb->settings['enableattachments'] == 1) - { - $attachments = array(); - $query = $db->simple_select("attachments", "*", $firstpostlist); - while($attachment = $db->fetch_array($query)) - { - if(!isset($attachments[$attachment['pid']])) - { - $attachments[$attachment['pid']] = array(); - } - $attachments[$attachment['pid']][] = $attachment; - } - } - - $query = $db->simple_select("posts", "message, edittime, tid, fid, pid", $firstpostlist, array('order_by' => 'dateline', 'order_dir' => 'desc')); - while($post = $db->fetch_array($query)) - { - $parser_options = array( - "allow_html" => $forumcache[$post['fid']]['allowhtml'], - "allow_mycode" => $forumcache[$post['fid']]['allowmycode'], - "allow_smilies" => $forumcache[$post['fid']]['allowsmilies'], - "allow_imgcode" => $forumcache[$post['fid']]['allowimgcode'], - "allow_videocode" => $forumcache[$post['fid']]['allowvideocode'], - "filter_badwords" => 1, - "filter_cdata" => 1 - ); - - $parsed_message = $parser->parse_message($post['message'], $parser_options); - - if($mybb->settings['enableattachments'] == 1 && isset($attachments[$post['pid']]) && is_array($attachments[$post['pid']])) - { - foreach($attachments[$post['pid']] as $attachment) - { - $ext = get_extension($attachment['filename']); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - $attachment['filesize'] = get_friendly_size($attachment['filesize']); - $attachment['icon'] = get_attachment_icon($ext); - eval("\$attbit = \"".$templates->get("postbit_attachments_attachment")."\";"); - if(stripos($parsed_message, "[attachment=".$attachment['aid']."]") !== false) - { - $parsed_message = preg_replace("#\[attachment=".$attachment['aid']."]#si", $attbit, $parsed_message); - } - else - { - $parsed_message .= "
    ".$attbit; - } - } - } - - $items[$post['tid']]['description'] = $parsed_message; - $items[$post['tid']]['updated'] = $post['edittime']; - $feedgenerator->add_item($items[$post['tid']]); - } -} - -// Then output the feed XML. -$feedgenerator->output_feed(); diff --git a/html/forums/task.php b/html/forums/task.php deleted file mode 100644 index 8295957..0000000 --- a/html/forums/task.php +++ /dev/null @@ -1,73 +0,0 @@ -set_language($mybb->settings['bblanguage']); -$lang->load("global"); -$lang->load("messages"); - -if(function_exists('mb_internal_encoding') && !empty($lang->settings['charset'])) -{ - @mb_internal_encoding($lang->settings['charset']); -} - -require_once MYBB_ROOT."inc/functions_task.php"; - -// Are tasks set to run via cron instead & are we accessing this file via the CLI? -// php task.php [tid] -if(PHP_SAPI == "cli") -{ - // Passing a specific task ID - if($_SERVER['argc'] == 2) - { - $query = $db->simple_select("tasks", "tid", "tid='".(int)$_SERVER['argv'][1]."'"); - $tid = $db->fetch_field($query, "tid"); - } - - if($tid) - { - run_task($tid); - } - else - { - run_task(); - } -} -// Otherwise false GIF image, only supports running next available task -else -{ - // Send our fake gif image (clear 1x1 transparent image) - header("Content-type: image/gif"); - header("Expires: Sat, 1 Jan 2000 01:00:00 GMT"); - header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - header("Cache-Control: no-cache, must-revalidate"); - header("Pragma: no-cache"); - echo base64_decode("R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); - - // If the use shutdown functionality is turned off, run any shutdown related items now. - if($mybb->use_shutdown == true) - { - add_shutdown("run_task"); - } - else - { - run_task(); - } -} diff --git a/html/forums/uploads/avatars/index.html b/html/forums/uploads/avatars/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/uploads/avatars/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/uploads/index.html b/html/forums/uploads/index.html deleted file mode 100644 index efd2f36..0000000 --- a/html/forums/uploads/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -  - - \ No newline at end of file diff --git a/html/forums/usercp.php b/html/forums/usercp.php deleted file mode 100644 index 40caf74..0000000 --- a/html/forums/usercp.php +++ /dev/null @@ -1,4155 +0,0 @@ -load("usercp"); - -if($mybb->user['uid'] == 0 || $mybb->usergroup['canusercp'] == 0) -{ - error_no_permission(); -} - -if(!$mybb->user['pmfolders']) -{ - $mybb->user['pmfolders'] = '1**$%%$2**$%%$3**$%%$4**'; - $db->update_query('users', array('pmfolders' => $mybb->user['pmfolders']), "uid = {$mybb->user['uid']}"); -} - -$errors = ''; - -$mybb->input['action'] = $mybb->get_input('action'); - -usercp_menu(); - -$plugins->run_hooks("usercp_start"); -if($mybb->input['action'] == "do_editsig" && $mybb->request_method == "post") -{ - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler(); - - $data = array( - 'uid' => $mybb->user['uid'], - 'signature' => $mybb->get_input('signature'), - ); - - $userhandler->set_data($data); - - if(!$userhandler->verify_signature()) - { - $error = inline_error($userhandler->get_friendly_errors()); - } - - if(isset($error) || !empty($mybb->input['preview'])) - { - $mybb->input['action'] = "editsig"; - } -} - -// Make navigation -add_breadcrumb($lang->nav_usercp, "usercp.php"); - -switch($mybb->input['action']) -{ - case "profile": - case "do_profile": - add_breadcrumb($lang->ucp_nav_profile); - break; - case "options": - case "do_options": - add_breadcrumb($lang->nav_options); - break; - case "email": - case "do_email": - add_breadcrumb($lang->nav_email); - break; - case "password": - case "do_password": - add_breadcrumb($lang->nav_password); - break; - case "changename": - case "do_changename": - add_breadcrumb($lang->nav_changename); - break; - case "subscriptions": - add_breadcrumb($lang->ucp_nav_subscribed_threads); - break; - case "forumsubscriptions": - add_breadcrumb($lang->ucp_nav_forum_subscriptions); - break; - case "editsig": - case "do_editsig": - add_breadcrumb($lang->nav_editsig); - break; - case "avatar": - case "do_avatar": - add_breadcrumb($lang->nav_avatar); - break; - case "notepad": - case "do_notepad": - add_breadcrumb($lang->ucp_nav_notepad); - break; - case "editlists": - case "do_editlists": - add_breadcrumb($lang->ucp_nav_editlists); - break; - case "drafts": - add_breadcrumb($lang->ucp_nav_drafts); - break; - case "usergroups": - add_breadcrumb($lang->ucp_nav_usergroups); - break; - case "attachments": - add_breadcrumb($lang->ucp_nav_attachments); - break; -} - -if($mybb->input['action'] == "do_profile" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_profile_start"); - - if($mybb->get_input('away', MyBB::INPUT_INT) == 1 && $mybb->settings['allowaway'] != 0) - { - $awaydate = TIME_NOW; - if(!empty($mybb->input['awayday'])) - { - // If the user has indicated that they will return on a specific day, but not month or year, assume it is current month and year - if(!$mybb->get_input('awaymonth', MyBB::INPUT_INT)) - { - $mybb->input['awaymonth'] = my_date('n', $awaydate); - } - if(!$mybb->get_input('awayyear', MyBB::INPUT_INT)) - { - $mybb->input['awayyear'] = my_date('Y', $awaydate); - } - - $return_month = (int)substr($mybb->get_input('awaymonth'), 0, 2); - $return_day = (int)substr($mybb->get_input('awayday'), 0, 2); - $return_year = min((int)$mybb->get_input('awayyear'), 9999); - - // Check if return date is after the away date. - $returntimestamp = gmmktime(0, 0, 0, $return_month, $return_day, $return_year); - $awaytimestamp = gmmktime(0, 0, 0, my_date('n', $awaydate), my_date('j', $awaydate), my_date('Y', $awaydate)); - if($return_year < my_date('Y', $awaydate) || ($returntimestamp < $awaytimestamp && $return_year == my_date('Y', $awaydate))) - { - error($lang->error_usercp_return_date_past); - } - - $returndate = "{$return_day}-{$return_month}-{$return_year}"; - } - else - { - $returndate = ""; - } - $away = array( - "away" => 1, - "date" => $awaydate, - "returndate" => $returndate, - "awayreason" => $mybb->get_input('awayreason') - ); - } - else - { - $away = array( - "away" => 0, - "date" => '', - "returndate" => '', - "awayreason" => '' - ); - } - - $bday = array( - "day" => $mybb->get_input('bday1', MyBB::INPUT_INT), - "month" => $mybb->get_input('bday2', MyBB::INPUT_INT), - "year" => $mybb->get_input('bday3', MyBB::INPUT_INT) - ); - - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler("update"); - - $user = array( - "uid" => $mybb->user['uid'], - "postnum" => $mybb->user['postnum'], - "usergroup" => $mybb->user['usergroup'], - "additionalgroups" => $mybb->user['additionalgroups'], - "birthday" => $bday, - "birthdayprivacy" => $mybb->get_input('birthdayprivacy'), - "away" => $away, - "profile_fields" => $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY) - ); - foreach(array('icq', 'aim', 'yahoo', 'skype', 'google') as $cfield) - { - $csetting = 'allow'.$cfield.'field'; - if($mybb->settings[$csetting] == '') - { - continue; - } - - if(!is_member($mybb->settings[$csetting])) - { - continue; - } - - if($cfield == 'icq') - { - $user[$cfield] = $mybb->get_input($cfield, 1); - } - else - { - $user[$cfield] = $mybb->get_input($cfield); - } - } - - if($mybb->usergroup['canchangewebsite'] == 1) - { - $user['website'] = $mybb->get_input('website'); - } - - if($mybb->usergroup['cancustomtitle'] == 1) - { - if($mybb->get_input('usertitle') != '') - { - $user['usertitle'] = $mybb->get_input('usertitle'); - } - else if(!empty($mybb->input['reverttitle'])) - { - $user['usertitle'] = ''; - } - } - $userhandler->set_data($user); - - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - - // Set allowed value otherwise select options disappear - if(in_array($lang->userdata_invalid_birthday_privacy, $errors)) - { - $mybb->input['birthdayprivacy'] = 'none'; - } - - $errors = inline_error($errors); - $mybb->input['action'] = "profile"; - } - else - { - $userhandler->update_user(); - - $plugins->run_hooks("usercp_do_profile_end"); - redirect("usercp.php?action=profile", $lang->redirect_profileupdated); - } -} - -if($mybb->input['action'] == "profile") -{ - if($errors) - { - $user = $mybb->input; - $bday = array(); - $bday[0] = $mybb->get_input('bday1', MyBB::INPUT_INT); - $bday[1] = $mybb->get_input('bday2', MyBB::INPUT_INT); - $bday[2] = $mybb->get_input('bday3', MyBB::INPUT_INT); - } - else - { - $user = $mybb->user; - $bday = explode("-", $user['birthday']); - if(!isset($bday[1])) - { - $bday[1] = 0; - } - if(!isset($bday[2])) - { - $bday[2] = ''; - } - } - - $plugins->run_hooks("usercp_profile_start"); - - $bdaydaysel = ''; - for($day = 1; $day <= 31; ++$day) - { - if($bday[0] == $day) - { - $selected = "selected=\"selected\""; - } - else - { - $selected = ''; - } - - eval("\$bdaydaysel .= \"".$templates->get("usercp_profile_day")."\";"); - } - - $bdaymonthsel = array(); - foreach(range(1, 12) as $month) - { - $bdaymonthsel[$month] = ''; - } - $bdaymonthsel[$bday[1]] = 'selected="selected"'; - - $allselected = $noneselected = $ageselected = ''; - if($user['birthdayprivacy'] == 'all' || !$user['birthdayprivacy']) - { - $allselected = " selected=\"selected\""; - } - else if($user['birthdayprivacy'] == 'none') - { - $noneselected = " selected=\"selected\""; - } - else if($user['birthdayprivacy'] == 'age') - { - $ageselected = " selected=\"selected\""; - } - - if(!my_validate_url($user['website'])) - { - $user['website'] = ''; - } - else - { - $user['website'] = htmlspecialchars_uni($user['website']); - } - - if($user['icq'] != "0") - { - $user['icq'] = (int)$user['icq']; - } - - if($user['icq'] == 0) - { - $user['icq'] = ''; - } - - if($errors) - { - $user['skype'] = htmlspecialchars_uni($user['skype']); - $user['google'] = htmlspecialchars_uni($user['google']); - $user['aim'] = htmlspecialchars_uni($user['aim']); - $user['yahoo'] = htmlspecialchars_uni($user['yahoo']); - } - - $contact_fields = array(); - $contactfields = ''; - $cfieldsshow = false; - - foreach(array('icq', 'aim', 'yahoo', 'skype', 'google') as $cfield) - { - $contact_fields[$cfield] = ''; - $csetting = 'allow'.$cfield.'field'; - if($mybb->settings[$csetting] == '') - { - continue; - } - - if(!is_member($mybb->settings[$csetting])) - { - continue; - } - - $cfieldsshow = true; - - $lang_string = 'contact_field_'.$cfield; - $lang_string = $lang->{$lang_string}; - $cfvalue = htmlspecialchars_uni($user[$cfield]); - - eval('$contact_fields[$cfield] = "'.$templates->get('usercp_profile_contact_fields_field').'";'); - } - - if($cfieldsshow) - { - eval('$contactfields = "'.$templates->get('usercp_profile_contact_fields').'";'); - } - - if($mybb->settings['allowaway'] != 0) - { - $awaycheck = array('', ''); - if($errors) - { - if($user['away'] == 1) - { - $awaycheck[1] = "checked=\"checked\""; - } - else - { - $awaycheck[0] = "checked=\"checked\""; - } - $returndate = array(); - $returndate[0] = $mybb->get_input('awayday', MyBB::INPUT_INT); - $returndate[1] = $mybb->get_input('awaymonth', MyBB::INPUT_INT); - $returndate[2] = $mybb->get_input('awayyear', MyBB::INPUT_INT); - $user['awayreason'] = htmlspecialchars_uni($mybb->get_input('awayreason')); - } - else - { - $user['awayreason'] = htmlspecialchars_uni($user['awayreason']); - if($mybb->user['away'] == 1) - { - $awaydate = my_date($mybb->settings['dateformat'], $mybb->user['awaydate']); - $awaycheck[1] = "checked=\"checked\""; - $awaynotice = $lang->sprintf($lang->away_notice_away, $awaydate); - } - else - { - $awaynotice = $lang->away_notice; - $awaycheck[0] = "checked=\"checked\""; - } - $returndate = explode("-", $mybb->user['returndate']); - if(!isset($returndate[1])) - { - $returndate[1] = 0; - } - if(!isset($returndate[2])) - { - $returndate[2] = ''; - } - } - - $returndatesel = ''; - for($day = 1; $day <= 31; ++$day) - { - if($returndate[0] == $day) - { - $selected = "selected=\"selected\""; - } - else - { - $selected = ''; - } - - eval("\$returndatesel .= \"".$templates->get("usercp_profile_day")."\";"); - } - - $returndatemonthsel = array(); - foreach(range(1, 12) as $month) - { - $returndatemonthsel[$month] = ''; - } - $returndatemonthsel[$returndate[1]] = "selected"; - - eval("\$awaysection = \"".$templates->get("usercp_profile_away")."\";"); - } - - // Custom profile fields baby! - $altbg = "trow1"; - $requiredfields = $customfields = ''; - $mybb->input['profile_fields'] = $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY); - - $pfcache = $cache->read('profilefields'); - - if(is_array($pfcache)) - { - foreach($pfcache as $profilefield) - { - if(!is_member($profilefield['editableby']) || ($profilefield['postnum'] && $profilefield['postnum'] > $mybb->user['postnum'])) - { - continue; - } - - $profilefield['type'] = htmlspecialchars_uni($profilefield['type']); - $profilefield['name'] = htmlspecialchars_uni($profilefield['name']); - $profilefield['description'] = htmlspecialchars_uni($profilefield['description']); - $thing = explode("\n", $profilefield['type'], "2"); - $type = $thing[0]; - if(isset($thing[1])) - { - $options = $thing[1]; - } - else - { - $options = array(); - } - $field = "fid{$profilefield['fid']}"; - $select = ''; - if($errors) - { - if(!isset($mybb->input['profile_fields'][$field])) - { - $mybb->input['profile_fields'][$field] = ''; - } - $userfield = $mybb->input['profile_fields'][$field]; - } - else - { - $userfield = $user[$field]; - } - if($type == "multiselect") - { - if($errors) - { - $useropts = $userfield; - } - else - { - $useropts = explode("\n", $userfield); - } - if(is_array($useropts)) - { - foreach($useropts as $key => $val) - { - $val = htmlspecialchars_uni($val); - $seloptions[$val] = $val; - } - } - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $val = trim($val); - $val = str_replace("\n", "\\n", $val); - - $sel = ""; - if(isset($seloptions[$val]) && $val == $seloptions[$val]) - { - $sel = " selected=\"selected\""; - } - - eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); - } - if(!$profilefield['length']) - { - $profilefield['length'] = 3; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_multiselect")."\";"); - } - } - elseif($type == "select") - { - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $val = trim($val); - $val = str_replace("\n", "\\n", $val); - $sel = ""; - if($val == htmlspecialchars_uni($userfield)) - { - $sel = " selected=\"selected\""; - } - - eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); - } - if(!$profilefield['length']) - { - $profilefield['length'] = 1; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_select")."\";"); - } - } - elseif($type == "radio") - { - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $checked = ""; - if($val == $userfield) - { - $checked = " checked=\"checked\""; - } - - eval("\$code .= \"".$templates->get("usercp_profile_profilefields_radio")."\";"); - } - } - } - elseif($type == "checkbox") - { - if($errors) - { - $useropts = $userfield; - } - else - { - $useropts = explode("\n", $userfield); - } - if(is_array($useropts)) - { - foreach($useropts as $key => $val) - { - $seloptions[$val] = $val; - } - } - $expoptions = explode("\n", $options); - if(is_array($expoptions)) - { - foreach($expoptions as $key => $val) - { - $checked = ""; - if(isset($seloptions[$val]) && $val == $seloptions[$val]) - { - $checked = " checked=\"checked\""; - } - - eval("\$code .= \"".$templates->get("usercp_profile_profilefields_checkbox")."\";"); - } - } - } - elseif($type == "textarea") - { - $value = htmlspecialchars_uni($userfield); - eval("\$code = \"".$templates->get("usercp_profile_profilefields_textarea")."\";"); - } - else - { - $value = htmlspecialchars_uni($userfield); - $maxlength = ""; - if($profilefield['maxlength'] > 0) - { - $maxlength = " maxlength=\"{$profilefield['maxlength']}\""; - } - - eval("\$code = \"".$templates->get("usercp_profile_profilefields_text")."\";"); - } - - if($profilefield['required'] == 1) - { - eval("\$requiredfields .= \"".$templates->get("usercp_profile_customfield")."\";"); - } - else - { - eval("\$customfields .= \"".$templates->get("usercp_profile_customfield")."\";"); - } - $altbg = alt_trow(); - $code = ""; - $select = ""; - $val = ""; - $options = ""; - $expoptions = ""; - $useropts = ""; - $seloptions = array(); - } - } - if($customfields) - { - eval("\$customfields = \"".$templates->get("usercp_profile_profilefields")."\";"); - } - - if($mybb->usergroup['cancustomtitle'] == 1) - { - if($mybb->usergroup['usertitle'] == "") - { - $defaulttitle = ''; - $usertitles = $cache->read('usertitles'); - - foreach($usertitles as $title) - { - if($title['posts'] <= $mybb->user['postnum']) - { - $defaulttitle = htmlspecialchars_uni($title['title']); - break; - } - } - } - else - { - $defaulttitle = htmlspecialchars_uni($mybb->usergroup['usertitle']); - } - - $newtitle = ''; - if(trim($user['usertitle']) == '') - { - $lang->current_custom_usertitle = ''; - } - else - { - if($errors) - { - $newtitle = htmlspecialchars_uni($user['usertitle']); - $user['usertitle'] = $mybb->user['usertitle']; - } - } - - $user['usertitle'] = htmlspecialchars_uni($user['usertitle']); - - $currentcustom = $reverttitle = ''; - if(!empty($mybb->user['usertitle'])) - { - eval("\$currentcustom = \"".$templates->get("usercp_profile_customtitle_currentcustom")."\";"); - - if($mybb->user['usertitle'] != $mybb->usergroup['usertitle']) - { - eval("\$reverttitle = \"".$templates->get("usercp_profile_customtitle_reverttitle")."\";"); - } - } - - eval("\$customtitle = \"".$templates->get("usercp_profile_customtitle")."\";"); - } - else - { - $customtitle = ""; - } - - if($mybb->usergroup['canchangewebsite'] == 1) - { - eval("\$website = \"".$templates->get("usercp_profile_website")."\";"); - } - - $plugins->run_hooks("usercp_profile_end"); - - eval("\$editprofile = \"".$templates->get("usercp_profile")."\";"); - output_page($editprofile); -} - -if($mybb->input['action'] == "do_options" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_options_start"); - - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler("update"); - - $user = array( - "uid" => $mybb->user['uid'], - "style" => $mybb->get_input('style', MyBB::INPUT_INT), - "dateformat" => $mybb->get_input('dateformat', MyBB::INPUT_INT), - "timeformat" => $mybb->get_input('timeformat', MyBB::INPUT_INT), - "timezone" => $db->escape_string($mybb->get_input('timezoneoffset')), - "language" => $mybb->get_input('language'), - 'usergroup' => $mybb->user['usergroup'], - 'additionalgroups' => $mybb->user['additionalgroups'] - ); - - $user['options'] = array( - "allownotices" => $mybb->get_input('allownotices', MyBB::INPUT_INT), - "hideemail" => $mybb->get_input('hideemail', MyBB::INPUT_INT), - "subscriptionmethod" => $mybb->get_input('subscriptionmethod', MyBB::INPUT_INT), - "invisible" => $mybb->get_input('invisible', MyBB::INPUT_INT), - "dstcorrection" => $mybb->get_input('dstcorrection', MyBB::INPUT_INT), - "threadmode" => $mybb->get_input('threadmode'), - "showimages" => $mybb->get_input('showimages', MyBB::INPUT_INT), - "showvideos" => $mybb->get_input('showvideos', MyBB::INPUT_INT), - "showsigs" => $mybb->get_input('showsigs', MyBB::INPUT_INT), - "showavatars" => $mybb->get_input('showavatars', MyBB::INPUT_INT), - "showquickreply" => $mybb->get_input('showquickreply', MyBB::INPUT_INT), - "receivepms" => $mybb->get_input('receivepms', MyBB::INPUT_INT), - "pmnotice" => $mybb->get_input('pmnotice', MyBB::INPUT_INT), - "receivefrombuddy" => $mybb->get_input('receivefrombuddy', MyBB::INPUT_INT), - "daysprune" => $mybb->get_input('daysprune', MyBB::INPUT_INT), - "showcodebuttons" => $mybb->get_input('showcodebuttons', MyBB::INPUT_INT), - "sourceeditor" => $mybb->get_input('sourceeditor', MyBB::INPUT_INT), - "pmnotify" => $mybb->get_input('pmnotify', MyBB::INPUT_INT), - "buddyrequestspm" => $mybb->get_input('buddyrequestspm', MyBB::INPUT_INT), - "buddyrequestsauto" => $mybb->get_input('buddyrequestsauto', MyBB::INPUT_INT), - "showredirect" => $mybb->get_input('showredirect', MyBB::INPUT_INT), - "classicpostbit" => $mybb->get_input('classicpostbit', MyBB::INPUT_INT) - ); - - if($mybb->settings['usertppoptions']) - { - $user['options']['tpp'] = $mybb->get_input('tpp', MyBB::INPUT_INT); - } - - if($mybb->settings['userpppoptions']) - { - $user['options']['ppp'] = $mybb->get_input('ppp', MyBB::INPUT_INT); - } - - $userhandler->set_data($user); - - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - $errors = inline_error($errors); - $mybb->input['action'] = "options"; - } - else - { - $userhandler->update_user(); - - $plugins->run_hooks("usercp_do_options_end"); - - redirect("usercp.php?action=options", $lang->redirect_optionsupdated); - } -} - -if($mybb->input['action'] == "options") -{ - $plugins->run_hooks("usercp_options_start"); - - if($errors != '') - { - $user = $mybb->input; - } - else - { - $user = $mybb->user; - } - - $languages = $lang->get_languages(); - $board_language = $langoptions = ''; - if(count($languages) > 1) - { - foreach($languages as $name => $language) - { - $language = htmlspecialchars_uni($language); - - $sel = ''; - if(isset($user['language']) && $user['language'] == $name) - { - $sel = " selected=\"selected\""; - } - - eval('$langoptions .= "'.$templates->get('usercp_options_language_option').'";'); - } - - eval('$board_language = "'.$templates->get('usercp_options_language').'";'); - } - - // Lets work out which options the user has selected and check the boxes - if(isset($user['allownotices']) && $user['allownotices'] == 1) - { - $allownoticescheck = "checked=\"checked\""; - } - else - { - $allownoticescheck = ""; - } - - if(isset($user['invisible']) && $user['invisible'] == 1) - { - $invisiblecheck = "checked=\"checked\""; - } - else - { - $invisiblecheck = ""; - } - - if(isset($user['hideemail']) && $user['hideemail'] == 1) - { - $hideemailcheck = "checked=\"checked\""; - } - else - { - $hideemailcheck = ""; - } - - $no_auto_subscribe_selected = $instant_email_subscribe_selected = $instant_pm_subscribe_selected = $no_subscribe_selected = ''; - if(isset($user['subscriptionmethod']) && $user['subscriptionmethod'] == 1) - { - $no_subscribe_selected = "selected=\"selected\""; - } - else if(isset($user['subscriptionmethod']) && $user['subscriptionmethod'] == 2) - { - $instant_email_subscribe_selected = "selected=\"selected\""; - } - else if(isset($user['subscriptionmethod']) && $user['subscriptionmethod'] == 3) - { - $instant_pm_subscribe_selected = "selected=\"selected\""; - } - else - { - $no_auto_subscribe_selected = "selected=\"selected\""; - } - - if(isset($user['showimages']) && $user['showimages'] == 1) - { - $showimagescheck = "checked=\"checked\""; - } - else - { - $showimagescheck = ""; - } - - if(isset($user['showvideos']) && $user['showvideos'] == 1) - { - $showvideoscheck = "checked=\"checked\""; - } - else - { - $showvideoscheck = ""; - } - - if(isset($user['showsigs']) && $user['showsigs'] == 1) - { - $showsigscheck = "checked=\"checked\""; - } - else - { - $showsigscheck = ""; - } - - if(isset($user['showavatars']) && $user['showavatars'] == 1) - { - $showavatarscheck = "checked=\"checked\""; - } - else - { - $showavatarscheck = ""; - } - - if(isset($user['showquickreply']) && $user['showquickreply'] == 1) - { - $showquickreplycheck = "checked=\"checked\""; - } - else - { - $showquickreplycheck = ""; - } - - if(isset($user['receivepms']) && $user['receivepms'] == 1) - { - $receivepmscheck = "checked=\"checked\""; - } - else - { - $receivepmscheck = ""; - } - - if(isset($user['receivefrombuddy']) && $user['receivefrombuddy'] == 1) - { - $receivefrombuddycheck = "checked=\"checked\""; - } - else - { - $receivefrombuddycheck = ""; - } - - if(isset($user['pmnotice']) && $user['pmnotice'] >= 1) - { - $pmnoticecheck = " checked=\"checked\""; - } - else - { - $pmnoticecheck = ""; - } - - $dst_auto_selected = $dst_enabled_selected = $dst_disabled_selected = ''; - if(isset($user['dstcorrection']) && $user['dstcorrection'] == 2) - { - $dst_auto_selected = "selected=\"selected\""; - } - else if(isset($user['dstcorrection']) && $user['dstcorrection'] == 1) - { - $dst_enabled_selected = "selected=\"selected\""; - } - else - { - $dst_disabled_selected = "selected=\"selected\""; - } - - if(isset($user['showcodebuttons']) && $user['showcodebuttons'] == 1) - { - $showcodebuttonscheck = "checked=\"checked\""; - } - else - { - $showcodebuttonscheck = ""; - } - - if(isset($user['sourceeditor']) && $user['sourceeditor'] == 1) - { - $sourcemodecheck = "checked=\"checked\""; - } - else - { - $sourcemodecheck = ""; - } - - if(isset($user['showredirect']) && $user['showredirect'] != 0) - { - $showredirectcheck = "checked=\"checked\""; - } - else - { - $showredirectcheck = ""; - } - - if(isset($user['pmnotify']) && $user['pmnotify'] != 0) - { - $pmnotifycheck = "checked=\"checked\""; - } - else - { - $pmnotifycheck = ''; - } - - if(isset($user['buddyrequestspm']) && $user['buddyrequestspm'] != 0) - { - $buddyrequestspmcheck = "checked=\"checked\""; - } - else - { - $buddyrequestspmcheck = ''; - } - - if(isset($user['buddyrequestsauto']) && $user['buddyrequestsauto'] != 0) - { - $buddyrequestsautocheck = "checked=\"checked\""; - } - else - { - $buddyrequestsautocheck = ''; - } - - if(!isset($user['threadmode']) || ($user['threadmode'] != "threaded" && $user['threadmode'] != "linear")) - { - $user['threadmode'] = ''; // Leave blank to show default - } - - if(isset($user['classicpostbit']) && $user['classicpostbit'] != 0) - { - $classicpostbitcheck = "checked=\"checked\""; - } - else - { - $classicpostbitcheck = ''; - } - - $date_format_options = $dateformat = ''; - foreach($date_formats as $key => $format) - { - $selected = ''; - if(isset($user['dateformat']) && $user['dateformat'] == $key) - { - $selected = " selected=\"selected\""; - } - - $dateformat = my_date($format, TIME_NOW, "", 0); - eval("\$date_format_options .= \"".$templates->get("usercp_options_date_format")."\";"); - } - - $time_format_options = $timeformat = ''; - foreach($time_formats as $key => $format) - { - $selected = ''; - if(isset($user['timeformat']) && $user['timeformat'] == $key) - { - $selected = " selected=\"selected\""; - } - - $timeformat = my_date($format, TIME_NOW, "", 0); - eval("\$time_format_options .= \"".$templates->get("usercp_options_time_format")."\";"); - } - - $tzselect = build_timezone_select("timezoneoffset", $mybb->user['timezone'], true); - - $pms_from_buddys = ''; - if($mybb->settings['allowbuddyonly'] == 1) - { - eval("\$pms_from_buddys = \"".$templates->get("usercp_options_pms_from_buddys")."\";"); - } - - $pms = ''; - if($mybb->settings['enablepms'] != 0 && $mybb->usergroup['canusepms'] == 1) - { - eval("\$pms = \"".$templates->get("usercp_options_pms")."\";"); - } - - $quick_reply = ''; - if($mybb->settings['quickreply'] == 1) - { - eval("\$quick_reply = \"".$templates->get("usercp_options_quick_reply")."\";"); - } - - $threadview = array('linear' => '', 'threaded' => ''); - if(isset($user['threadmode']) && is_scalar($user['threadmode'])) - { - $threadview[$user['threadmode']] = 'selected="selected"'; - } - $daysprunesel = array(1 => '', 5 => '', 10 => '', 20 => '', 50 => '', 75 => '', 100 => '', 365 => '', 9999 => ''); - if(isset($user['daysprune']) && is_numeric($user['daysprune'])) - { - $daysprunesel[$user['daysprune']] = 'selected="selected"'; - } - if(!isset($user['style'])) - { - $user['style'] = ''; - } - - $board_style = $stylelist = ''; - $stylelist = build_theme_select("style", $user['style']); - - if(!empty($stylelist)) - { - eval('$board_style = "'.$templates->get('usercp_options_style').'";'); - } - - $tppselect = $pppselect = ''; - if($mybb->settings['usertppoptions']) - { - $explodedtpp = explode(",", $mybb->settings['usertppoptions']); - $tppoptions = $tpp_option = ''; - if(is_array($explodedtpp)) - { - foreach($explodedtpp as $key => $val) - { - $val = trim($val); - $selected = ""; - if(isset($user['tpp']) && $user['tpp'] == $val) - { - $selected = " selected=\"selected\""; - } - - $tpp_option = $lang->sprintf($lang->tpp_option, $val); - eval("\$tppoptions .= \"".$templates->get("usercp_options_tppselect_option")."\";"); - } - } - eval("\$tppselect = \"".$templates->get("usercp_options_tppselect")."\";"); - } - - if($mybb->settings['userpppoptions']) - { - $explodedppp = explode(",", $mybb->settings['userpppoptions']); - $pppoptions = $ppp_option = ''; - if(is_array($explodedppp)) - { - foreach($explodedppp as $key => $val) - { - $val = trim($val); - $selected = ""; - if(isset($user['ppp']) && $user['ppp'] == $val) - { - $selected = " selected=\"selected\""; - } - - $ppp_option = $lang->sprintf($lang->ppp_option, $val); - eval("\$pppoptions .= \"".$templates->get("usercp_options_pppselect_option")."\";"); - } - } - eval("\$pppselect = \"".$templates->get("usercp_options_pppselect")."\";"); - } - - $plugins->run_hooks("usercp_options_end"); - - eval("\$editprofile = \"".$templates->get("usercp_options")."\";"); - output_page($editprofile); -} - -if($mybb->input['action'] == "do_email" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $errors = array(); - - $plugins->run_hooks("usercp_do_email_start"); - if(validate_password_from_uid($mybb->user['uid'], $mybb->get_input('password')) == false) - { - $errors[] = $lang->error_invalidpassword; - } - else - { - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler("update"); - - $user = array( - "uid" => $mybb->user['uid'], - "email" => $mybb->get_input('email'), - "email2" => $mybb->get_input('email2') - ); - - $userhandler->set_data($user); - - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - } - else - { - if($mybb->user['usergroup'] != "5" && $mybb->usergroup['cancp'] != 1 && $mybb->settings['regtype'] != "verify") - { - $uid = $mybb->user['uid']; - $username = $mybb->user['username']; - - // Emails require verification - $activationcode = random_str(); - $db->delete_query("awaitingactivation", "uid='".$mybb->user['uid']."'"); - - $newactivation = array( - "uid" => $mybb->user['uid'], - "dateline" => TIME_NOW, - "code" => $activationcode, - "type" => "e", - "misc" => $db->escape_string($mybb->get_input('email')) - ); - - $db->insert_query("awaitingactivation", $newactivation); - - $mail_message = $lang->sprintf($lang->email_changeemail, $mybb->user['username'], $mybb->settings['bbname'], $mybb->user['email'], $mybb->get_input('email'), $mybb->settings['bburl'], $activationcode, $mybb->user['username'], $mybb->user['uid']); - - $lang->emailsubject_changeemail = $lang->sprintf($lang->emailsubject_changeemail, $mybb->settings['bbname']); - my_mail($mybb->get_input('email'), $lang->emailsubject_changeemail, $mail_message); - - $plugins->run_hooks("usercp_do_email_verify"); - error($lang->redirect_changeemail_activation); - } - else - { - $userhandler->update_user(); - // Email requires no activation - $mail_message = $lang->sprintf($lang->email_changeemail_noactivation, $mybb->user['username'], $mybb->settings['bbname'], $mybb->user['email'], $mybb->get_input('email'), $mybb->settings['bburl']); - my_mail($mybb->get_input('email'), $lang->sprintf($lang->emailsubject_changeemail, $mybb->settings['bbname']), $mail_message); - $plugins->run_hooks("usercp_do_email_changed"); - redirect("usercp.php?action=email", $lang->redirect_emailupdated); - } - } - } - if(count($errors) > 0) - { - $mybb->input['action'] = "email"; - $errors = inline_error($errors); - } -} - -if($mybb->input['action'] == "email") -{ - // Coming back to this page after one or more errors were experienced, show fields the user previously entered (with the exception of the password) - if($errors) - { - $email = htmlspecialchars_uni($mybb->get_input('email')); - $email2 = htmlspecialchars_uni($mybb->get_input('email2')); - } - else - { - $email = $email2 = ''; - } - - $plugins->run_hooks("usercp_email"); - - eval("\$changemail = \"".$templates->get("usercp_email")."\";"); - output_page($changemail); -} - -if($mybb->input['action'] == "do_password" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $errors = array(); - - $plugins->run_hooks("usercp_do_password_start"); - if(validate_password_from_uid($mybb->user['uid'], $mybb->get_input('oldpassword')) == false) - { - $errors[] = $lang->error_invalidpassword; - } - else - { - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler("update"); - - $user = array( - "uid" => $mybb->user['uid'], - "password" => $mybb->get_input('password'), - "password2" => $mybb->get_input('password2') - ); - - $userhandler->set_data($user); - - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - } - else - { - $userhandler->update_user(); - my_setcookie("mybbuser", $mybb->user['uid']."_".$userhandler->data['loginkey'], null, true); - - // Notify the user by email that their password has been changed - $mail_message = $lang->sprintf($lang->email_changepassword, $mybb->user['username'], $mybb->user['email'], $mybb->settings['bbname'], $mybb->settings['bburl']); - $lang->emailsubject_changepassword = $lang->sprintf($lang->emailsubject_changepassword, $mybb->settings['bbname']); - my_mail($mybb->user['email'], $lang->emailsubject_changepassword, $mail_message); - - $plugins->run_hooks("usercp_do_password_end"); - redirect("usercp.php?action=password", $lang->redirect_passwordupdated); - } - } - if(count($errors) > 0) - { - $mybb->input['action'] = "password"; - $errors = inline_error($errors); - } -} - -if($mybb->input['action'] == "password") -{ - $plugins->run_hooks("usercp_password"); - - eval("\$editpassword = \"".$templates->get("usercp_password")."\";"); - output_page($editpassword); -} - -if($mybb->input['action'] == "do_changename" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_changename_start"); - if($mybb->usergroup['canchangename'] != 1) - { - error_no_permission(); - } - - if(validate_password_from_uid($mybb->user['uid'], $mybb->get_input('password')) == false) - { - $errors[] = $lang->error_invalidpassword; - } - else - { - // Set up user handler. - require_once MYBB_ROOT."inc/datahandlers/user.php"; - $userhandler = new UserDataHandler("update"); - - $user = array( - "uid" => $mybb->user['uid'], - "username" => $mybb->get_input('username') - ); - - $userhandler->set_data($user); - - if(!$userhandler->validate_user()) - { - $errors = $userhandler->get_friendly_errors(); - } - else - { - $userhandler->update_user(); - $plugins->run_hooks("usercp_do_changename_end"); - redirect("usercp.php?action=changename", $lang->redirect_namechanged); - - } - } - if(count($errors) > 0) - { - $errors = inline_error($errors); - $mybb->input['action'] = "changename"; - } -} - -if($mybb->input['action'] == "changename") -{ - $plugins->run_hooks("usercp_changename_start"); - if($mybb->usergroup['canchangename'] != 1) - { - error_no_permission(); - } - - $plugins->run_hooks("usercp_changename_end"); - - eval("\$changename = \"".$templates->get("usercp_changename")."\";"); - output_page($changename); -} - -if($mybb->input['action'] == "do_subscriptions") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_subscriptions_start"); - - if(!isset($mybb->input['check']) || !is_array($mybb->input['check'])) - { - error($lang->no_subscriptions_selected); - } - - // Clean input - only accept integers thanks! - $mybb->input['check'] = array_map('intval', $mybb->get_input('check', MyBB::INPUT_ARRAY)); - $tids = implode(",", $mybb->input['check']); - - // Deleting these subscriptions? - if($mybb->get_input('do') == "delete") - { - $db->delete_query("threadsubscriptions", "tid IN ($tids) AND uid='{$mybb->user['uid']}'"); - } - // Changing subscription type - else - { - if($mybb->get_input('do') == "no_notification") - { - $new_notification = 0; - } - else if($mybb->get_input('do') == "email_notification") - { - $new_notification = 1; - } - else if($mybb->get_input('do') == "pm_notification") - { - $new_notification = 2; - } - - // Update - $update_array = array("notification" => $new_notification); - $db->update_query("threadsubscriptions", $update_array, "tid IN ($tids) AND uid='{$mybb->user['uid']}'"); - } - - // Done, redirect - redirect("usercp.php?action=subscriptions", $lang->redirect_subscriptions_updated); -} - -if($mybb->input['action'] == "subscriptions") -{ - $plugins->run_hooks("usercp_subscriptions_start"); - - // Thread visiblity - $visible = "AND t.visible != 0"; - if(is_moderator() == true) - { - $visible = ''; - } - - // Do Multi Pages - $query = $db->query(" - SELECT COUNT(ts.tid) as threads - FROM ".TABLE_PREFIX."threadsubscriptions ts - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid = ts.tid) - WHERE ts.uid = '".$mybb->user['uid']."' AND t.visible >= 0 {$visible} - "); - $threadcount = $db->fetch_field($query, "threads"); - - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $perpage = $mybb->settings['threadsperpage']; - $page = $mybb->get_input('page', MyBB::INPUT_INT); - if($page > 0) - { - $start = ($page-1) * $perpage; - $pages = $threadcount / $perpage; - $pages = ceil($pages); - if($page > $pages || $page <= 0) - { - $start = 0; - $page = 1; - } - } - else - { - $start = 0; - $page = 1; - } - $end = $start + $perpage; - $lower = $start+1; - $upper = $end; - if($upper > $threadcount) - { - $upper = $threadcount; - } - $multipage = multipage($threadcount, $perpage, $page, "usercp.php?action=subscriptions"); - $fpermissions = forum_permissions(); - $del_subscriptions = $subscriptions = array(); - - // Fetch subscriptions - $query = $db->query(" - SELECT s.*, t.*, t.username AS threadusername, u.username - FROM ".TABLE_PREFIX."threadsubscriptions s - LEFT JOIN ".TABLE_PREFIX."threads t ON (s.tid=t.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) - WHERE s.uid='".$mybb->user['uid']."' and t.visible >= 0 {$visible} - ORDER BY t.lastpost DESC - LIMIT $start, $perpage - "); - while($subscription = $db->fetch_array($query)) - { - $forumpermissions = $fpermissions[$subscription['fid']]; - - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $subscription['uid'] != $mybb->user['uid'])) - { - // Hmm, you don't have permission to view this thread - unsubscribe! - $del_subscriptions[] = $subscription['sid']; - } - else if($subscription['tid']) - { - $subscriptions[$subscription['tid']] = $subscription; - } - } - - if(!empty($del_subscriptions)) - { - $sids = implode(',', $del_subscriptions); - - if($sids) - { - $db->delete_query("threadsubscriptions", "sid IN ({$sids}) AND uid='{$mybb->user['uid']}'"); - } - - $threadcount = $threadcount - count($del_subscriptions); - - if($threadcount < 0) - { - $threadcount = 0; - } - } - - if(!empty($subscriptions)) - { - $tids = implode(",", array_keys($subscriptions)); - $readforums = array(); - - // Build a forum cache. - $query = $db->query(" - SELECT f.fid, fr.dateline AS lastread - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') - WHERE f.active != 0 - ORDER BY pid, disporder - "); - - while($forum = $db->fetch_array($query)) - { - $readforums[$forum['fid']] = $forum['lastread']; - } - - // Check participation by the current user in any of these threads - for 'dot' folder icons - if($mybb->settings['dotfolders'] != 0) - { - $query = $db->simple_select("posts", "tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); - while($post = $db->fetch_array($query)) - { - $subscriptions[$post['tid']]['doticon'] = 1; - } - } - - // Read threads - if($mybb->settings['threadreadcut'] > 0) - { - $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); - while($readthread = $db->fetch_array($query)) - { - $subscriptions[$readthread['tid']]['lastread'] = $readthread['dateline']; - } - } - - $icon_cache = $cache->read("posticons"); - $threadprefixes = build_prefixes(); - - $threads = ''; - - // Now we can build our subscription list - foreach($subscriptions as $thread) - { - $bgcolor = alt_trow(); - - $folder = ''; - $prefix = ''; - $thread['threadprefix'] = ''; - - // If this thread has a prefix, insert a space between prefix and subject - if($thread['prefix'] != 0 && !empty($threadprefixes[$thread['prefix']])) - { - $thread['threadprefix'] = $threadprefixes[$thread['prefix']]['displaystyle'].' '; - } - - // Sanitize - $thread['subject'] = $parser->parse_badwords($thread['subject']); - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - - // Build our links - $thread['threadlink'] = get_thread_link($thread['tid']); - $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); - - // Fetch the thread icon if we have one - if($thread['icon'] > 0 && $icon_cache[$thread['icon']]) - { - $icon = $icon_cache[$thread['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("usercp_subscriptions_thread_icon")."\";"); - } - else - { - $icon = " "; - } - - // Determine the folder - $folder = ''; - $folder_label = ''; - - if(isset($thread['doticon'])) - { - $folder = "dot_"; - $folder_label .= $lang->icon_dot; - } - - $gotounread = ''; - $isnew = 0; - $donenew = 0; - $lastread = 0; - - if($mybb->settings['threadreadcut'] > 0) - { - $forum_read = $readforums[$thread['fid']]; - - $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($forum_read == 0 || $forum_read < $read_cutoff) - { - $forum_read = $read_cutoff; - } - } - - $cutoff = 0; - if($mybb->settings['threadreadcut'] > 0 && $thread['lastpost'] > $forum_read) - { - $cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - } - - if($thread['lastpost'] > $cutoff) - { - if($thread['lastread']) - { - $lastread = $thread['lastread']; - } - else - { - $lastread = 1; - } - } - - if(!$lastread) - { - $readcookie = $threadread = my_get_array_cookie("threadread", $thread['tid']); - if($readcookie > $forum_read) - { - $lastread = $readcookie; - } - else - { - $lastread = $forum_read; - } - } - - if($lastread && $lastread < $thread['lastpost']) - { - $folder .= "new"; - $folder_label .= $lang->icon_new; - $new_class = "subject_new"; - $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); - eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); - $unreadpost = 1; - } - else - { - $folder_label .= $lang->icon_no_new; - $new_class = "subject_old"; - } - - if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews']) - { - $folder .= "hot"; - $folder_label .= $lang->icon_hot; - } - - if($thread['closed'] == 1) - { - $folder .= "lock"; - $folder_label .= $lang->icon_lock; - } - - $folder .= "folder"; - - if($thread['visible'] == 0) - { - $bgcolor = "trow_shaded"; - } - - // Build last post info - $lastpostdate = my_date('relative', $thread['lastpost']); - $lastposter = htmlspecialchars_uni($thread['lastposter']); - $lastposteruid = $thread['lastposteruid']; - - // Don't link to guest's profiles (they have no profile). - if($lastposteruid == 0) - { - $lastposterlink = $lastposter; - } - else - { - $lastposterlink = build_profile_link($lastposter, $lastposteruid); - } - - $thread['replies'] = my_number_format($thread['replies']); - $thread['views'] = my_number_format($thread['views']); - - // What kind of notification type do we have here? - switch($thread['notification']) - { - case "2": // PM - $notification_type = $lang->pm_notification; - break; - case "1": // Email - $notification_type = $lang->email_notification; - break; - default: // No notification - $notification_type = $lang->no_notification; - } - - eval("\$threads .= \"".$templates->get("usercp_subscriptions_thread")."\";"); - } - - // Provide remove options - eval("\$remove_options = \"".$templates->get("usercp_subscriptions_remove")."\";"); - } - else - { - $remove_options = ''; - eval("\$threads = \"".$templates->get("usercp_subscriptions_none")."\";"); - } - - $plugins->run_hooks("usercp_subscriptions_end"); - - eval("\$subscriptions = \"".$templates->get("usercp_subscriptions")."\";"); - output_page($subscriptions); -} - -if($mybb->input['action'] == "forumsubscriptions") -{ - $plugins->run_hooks("usercp_forumsubscriptions_start"); - - // Build a forum cache. - $query = $db->query(" - SELECT f.fid, fr.dateline AS lastread - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') - WHERE f.active != 0 - ORDER BY pid, disporder - "); - $readforums = array(); - while($forum = $db->fetch_array($query)) - { - $readforums[$forum['fid']] = $forum['lastread']; - } - - $fpermissions = forum_permissions(); - require_once MYBB_ROOT."inc/functions_forumlist.php"; - - $query = $db->query(" - SELECT fs.*, f.*, t.subject AS lastpostsubject, fr.dateline AS lastread - FROM ".TABLE_PREFIX."forumsubscriptions fs - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid = fs.fid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid = f.lastposttid) - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') - WHERE f.type='f' AND fs.uid='".$mybb->user['uid']."' - ORDER BY f.name ASC - "); - - $forums = ''; - while($forum = $db->fetch_array($query)) - { - $forum_url = get_forum_link($forum['fid']); - $forumpermissions = $fpermissions[$forum['fid']]; - - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) - { - continue; - } - - $lightbulb = get_forum_lightbulb(array('open' => $forum['open'], 'lastread' => $forum['lastread']), array('lastpost' => $forum['lastpost'])); - $folder = $lightbulb['folder']; - - if(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0) - { - $posts = '-'; - $threads = '-'; - } - else - { - $posts = my_number_format($forum['posts']); - $threads = my_number_format($forum['threads']); - } - - if($forum['lastpost'] == 0 || $forum['lastposter'] == "") - { - eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_never")."\";"); - } - // Hide last post - elseif(isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $forum['lastposteruid'] != $mybb->user['uid']) - { - eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_hidden")."\";"); - } - else - { - $forum['lastpostsubject'] = $parser->parse_badwords($forum['lastpostsubject']); - $lastpost_date = my_date('relative', $forum['lastpost']); - $lastposttid = $forum['lastposttid']; - $lastposter = htmlspecialchars_uni($forum['lastposter']); - $lastpost_profilelink = build_profile_link($lastposter, $forum['lastposteruid']); - $full_lastpost_subject = $lastpost_subject = htmlspecialchars_uni($forum['lastpostsubject']); - if(my_strlen($lastpost_subject) > 25) - { - $lastpost_subject = my_substr($lastpost_subject, 0, 25) . "..."; - } - $lastpost_link = get_thread_link($forum['lastposttid'], 0, "lastpost"); - eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost")."\";"); - } - - if($mybb->settings['showdescriptions'] == 0) - { - $forum['description'] = ""; - } - - eval("\$forums .= \"".$templates->get("usercp_forumsubscriptions_forum")."\";"); - } - - if(!$forums) - { - eval("\$forums = \"".$templates->get("usercp_forumsubscriptions_none")."\";"); - } - - $plugins->run_hooks("usercp_forumsubscriptions_end"); - - eval("\$forumsubscriptions = \"".$templates->get("usercp_forumsubscriptions")."\";"); - output_page($forumsubscriptions); -} - -if($mybb->input['action'] == "do_editsig" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_editsig_start"); - - // User currently has a suspended signature - if($mybb->user['suspendsignature'] == 1 && $mybb->user['suspendsigtime'] > TIME_NOW) - { - error_no_permission(); - } - - if($mybb->get_input('updateposts') == "enable") - { - $update_signature = array( - "includesig" => 1 - ); - $db->update_query("posts", $update_signature, "uid='".$mybb->user['uid']."'"); - } - elseif($mybb->get_input('updateposts') == "disable") - { - $update_signature = array( - "includesig" => 0 - ); - $db->update_query("posts", $update_signature, "uid='".$mybb->user['uid']."'"); - } - $new_signature = array( - "signature" => $db->escape_string($mybb->get_input('signature')) - ); - $plugins->run_hooks("usercp_do_editsig_process"); - $db->update_query("users", $new_signature, "uid='".$mybb->user['uid']."'"); - $plugins->run_hooks("usercp_do_editsig_end"); - redirect("usercp.php?action=editsig", $lang->redirect_sigupdated); -} - -if($mybb->input['action'] == "editsig") -{ - $plugins->run_hooks("usercp_editsig_start"); - if(!empty($mybb->input['preview']) && empty($error)) - { - $sig = $mybb->get_input('signature'); - $template = "usercp_editsig_preview"; - } - elseif(empty($error)) - { - $sig = $mybb->user['signature']; - $template = "usercp_editsig_current"; - } - else - { - $sig = $mybb->get_input('signature'); - $template = false; - } - - if(!isset($error)) - { - $error = ''; - } - - if($mybb->user['suspendsignature'] && ($mybb->user['suspendsigtime'] == 0 || $mybb->user['suspendsigtime'] > 0 && $mybb->user['suspendsigtime'] > TIME_NOW)) - { - // User currently has no signature and they're suspended - error($lang->sig_suspended); - } - - if($mybb->usergroup['canusesig'] != 1) - { - // Usergroup has no permission to use this facility - error_no_permission(); - } - else if($mybb->usergroup['canusesig'] == 1 && $mybb->usergroup['canusesigxposts'] > 0 && $mybb->user['postnum'] < $mybb->usergroup['canusesigxposts']) - { - // Usergroup can use this facility, but only after x posts - error($lang->sprintf($lang->sig_suspended_posts, $mybb->usergroup['canusesigxposts'])); - } - - $signature = ''; - if($sig && $template) - { - $sig_parser = array( - "allow_html" => $mybb->settings['sightml'], - "allow_mycode" => $mybb->settings['sigmycode'], - "allow_smilies" => $mybb->settings['sigsmilies'], - "allow_imgcode" => $mybb->settings['sigimgcode'], - "me_username" => $mybb->user['username'], - "filter_badwords" => 1 - ); - - if($mybb->user['showimages'] != 1) - { - $sig_parser['allow_imgcode'] = 0; - } - - $sigpreview = $parser->parse_message($sig, $sig_parser); - eval("\$signature = \"".$templates->get($template)."\";"); - } - - // User has a current signature, so let's display it (but show an error message) - if($mybb->user['suspendsignature'] && $mybb->user['suspendsigtime'] > TIME_NOW) - { - $plugins->run_hooks("usercp_editsig_end"); - - // User either doesn't have permission, or has their signature suspended - eval("\$editsig = \"".$templates->get("usercp_editsig_suspended")."\";"); - } - else - { - // User is allowed to edit their signature - if($mybb->settings['sigsmilies'] == 1) - { - $sigsmilies = $lang->on; - $smilieinserter = build_clickable_smilies(); - } - else - { - $sigsmilies = $lang->off; - } - if($mybb->settings['sigmycode'] == 1) - { - $sigmycode = $lang->on; - } - else - { - $sigmycode = $lang->off; - } - if($mybb->settings['sightml'] == 1) - { - $sightml = $lang->on; - } - else - { - $sightml = $lang->off; - } - if($mybb->settings['sigimgcode'] == 1) - { - $sigimgcode = $lang->on; - } - else - { - $sigimgcode = $lang->off; - } - $sig = htmlspecialchars_uni($sig); - $lang->edit_sig_note2 = $lang->sprintf($lang->edit_sig_note2, $sigsmilies, $sigmycode, $sigimgcode, $sightml, $mybb->settings['siglength']); - - if($mybb->settings['bbcodeinserter'] != 0 || $mybb->user['showcodebuttons'] != 0) - { - $codebuttons = build_mycode_inserter("signature"); - } - - $plugins->run_hooks("usercp_editsig_end"); - - eval("\$editsig = \"".$templates->get("usercp_editsig")."\";"); - } - - output_page($editsig); -} - -if($mybb->input['action'] == "do_avatar" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_avatar_start"); - require_once MYBB_ROOT."inc/functions_upload.php"; - - $avatar_error = ""; - - if(!empty($mybb->input['remove'])) // remove avatar - { - $updated_avatar = array( - "avatar" => "", - "avatardimensions" => "", - "avatartype" => "" - ); - $db->update_query("users", $updated_avatar, "uid='".$mybb->user['uid']."'"); - remove_avatars($mybb->user['uid']); - } - elseif($_FILES['avatarupload']['name']) // upload avatar - { - if($mybb->usergroup['canuploadavatars'] == 0) - { - error_no_permission(); - } - $avatar = upload_avatar(); - if($avatar['error']) - { - $avatar_error = $avatar['error']; - } - else - { - if($avatar['width'] > 0 && $avatar['height'] > 0) - { - $avatar_dimensions = $avatar['width']."|".$avatar['height']; - } - $updated_avatar = array( - "avatar" => $avatar['avatar'].'?dateline='.TIME_NOW, - "avatardimensions" => $avatar_dimensions, - "avatartype" => "upload" - ); - $db->update_query("users", $updated_avatar, "uid='".$mybb->user['uid']."'"); - } - } - elseif($mybb->settings['allowremoteavatars']) // remote avatar - { - $mybb->input['avatarurl'] = trim($mybb->get_input('avatarurl')); - if(validate_email_format($mybb->input['avatarurl']) != false) - { - // Gravatar - $mybb->input['avatarurl'] = my_strtolower($mybb->input['avatarurl']); - - // If user image does not exist, or is a higher rating, use the mystery man - $email = md5($mybb->input['avatarurl']); - - $s = ''; - if(!$mybb->settings['maxavatardims']) - { - $mybb->settings['maxavatardims'] = '100x100'; // Hard limit of 100 if there are no limits - } - - // Because Gravatars are square, hijack the width - list($maxwidth, $maxheight) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); - $maxheight = (int)$maxwidth; - - // Rating? - $types = array('g', 'pg', 'r', 'x'); - $rating = $mybb->settings['useravatarrating']; - - if(!in_array($rating, $types)) - { - $rating = 'g'; - } - - $s = "?s={$maxheight}&r={$rating}&d=mm"; - - $updated_avatar = array( - "avatar" => "https://www.gravatar.com/avatar/{$email}{$s}", - "avatardimensions" => "{$maxheight}|{$maxheight}", - "avatartype" => "gravatar" - ); - - $db->update_query("users", $updated_avatar, "uid = '{$mybb->user['uid']}'"); - } - else - { - $mybb->input['avatarurl'] = preg_replace("#script:#i", "", $mybb->get_input('avatarurl')); - $ext = get_extension($mybb->input['avatarurl']); - - // Copy the avatar to the local server (work around remote URL access disabled for getimagesize) - $file = fetch_remote_file($mybb->input['avatarurl']); - if(!$file) - { - $avatar_error = $lang->error_invalidavatarurl; - } - else - { - $tmp_name = $mybb->settings['avataruploadpath']."/remote_".md5(random_str()); - $fp = @fopen($tmp_name, "wb"); - if(!$fp) - { - $avatar_error = $lang->error_invalidavatarurl; - } - else - { - fwrite($fp, $file); - fclose($fp); - list($width, $height, $type) = @getimagesize($tmp_name); - @unlink($tmp_name); - if(!$type) - { - $avatar_error = $lang->error_invalidavatarurl; - } - } - } - - if(empty($avatar_error)) - { - if($width && $height && $mybb->settings['maxavatardims'] != "") - { - list($maxwidth, $maxheight) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); - if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)) - { - $lang->error_avatartoobig = $lang->sprintf($lang->error_avatartoobig, $maxwidth, $maxheight); - $avatar_error = $lang->error_avatartoobig; - } - } - } - - if(empty($avatar_error)) - { - if($width > 0 && $height > 0) - { - $avatar_dimensions = (int)$width."|".(int)$height; - } - $updated_avatar = array( - "avatar" => $db->escape_string($mybb->input['avatarurl'].'?dateline='.TIME_NOW), - "avatardimensions" => $avatar_dimensions, - "avatartype" => "remote" - ); - $db->update_query("users", $updated_avatar, "uid='".$mybb->user['uid']."'"); - remove_avatars($mybb->user['uid']); - } - } - } - else // remote avatar, but remote avatars are not allowed - { - $avatar_error = $lang->error_remote_avatar_not_allowed; - } - - if(empty($avatar_error)) - { - $plugins->run_hooks("usercp_do_avatar_end"); - redirect("usercp.php?action=avatar", $lang->redirect_avatarupdated); - } - else - { - $mybb->input['action'] = "avatar"; - $avatar_error = inline_error($avatar_error); - } -} - -if($mybb->input['action'] == "avatar") -{ - $plugins->run_hooks("usercp_avatar_start"); - - $avatarmsg = $avatarurl = ''; - - if($mybb->user['avatartype'] == "upload" || stristr($mybb->user['avatar'], $mybb->settings['avataruploadpath'])) - { - $avatarmsg = "
    ".$lang->already_uploaded_avatar.""; - } - elseif($mybb->user['avatartype'] == "remote" || my_validate_url($mybb->user['avatar'])) - { - $avatarmsg = "
    ".$lang->using_remote_avatar.""; - $avatarurl = htmlspecialchars_uni($mybb->user['avatar']); - } - - $useravatar = format_avatar($mybb->user['avatar'], $mybb->user['avatardimensions'], '100x100'); - eval("\$currentavatar = \"".$templates->get("usercp_avatar_current")."\";"); - - if($mybb->settings['maxavatardims'] != "") - { - list($maxwidth, $maxheight) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); - $lang->avatar_note .= "
    ".$lang->sprintf($lang->avatar_note_dimensions, $maxwidth, $maxheight); - } - - if($mybb->settings['avatarsize']) - { - $maxsize = get_friendly_size($mybb->settings['avatarsize']*1024); - $lang->avatar_note .= "
    ".$lang->sprintf($lang->avatar_note_size, $maxsize); - } - - $plugins->run_hooks("usercp_avatar_intermediate"); - - $auto_resize = ''; - if($mybb->settings['avatarresizing'] == "auto") - { - eval("\$auto_resize = \"".$templates->get("usercp_avatar_auto_resize_auto")."\";"); - } - else if($mybb->settings['avatarresizing'] == "user") - { - eval("\$auto_resize = \"".$templates->get("usercp_avatar_auto_resize_user")."\";"); - } - - $avatarupload = ''; - if($mybb->usergroup['canuploadavatars'] == 1) - { - eval("\$avatarupload = \"".$templates->get("usercp_avatar_upload")."\";"); - } - - $avatar_remote = ''; - if($mybb->settings['allowremoteavatars'] == 1) - { - eval("\$avatar_remote = \"".$templates->get("usercp_avatar_remote")."\";"); - } - - $removeavatar = ''; - if(!empty($mybb->user['avatar'])) - { - eval("\$removeavatar = \"".$templates->get("usercp_avatar_remove")."\";"); - } - - $plugins->run_hooks("usercp_avatar_end"); - - if(!isset($avatar_error)) - { - $avatar_error = ''; - } - - eval("\$avatar = \"".$templates->get("usercp_avatar")."\";"); - output_page($avatar); -} - -if($mybb->input['action'] == "acceptrequest") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - // Validate request - $query = $db->simple_select('buddyrequests', '*', 'id='.$mybb->get_input('id', MyBB::INPUT_INT).' AND touid='.(int)$mybb->user['uid']); - $request = $db->fetch_array($query); - if(empty($request)) - { - error($lang->invalid_request); - } - - $plugins->run_hooks("usercp_acceptrequest_start"); - - $user = get_user($request['uid']); - if(!empty($user)) - { - // We want to add us to this user's buddy list - if($user['buddylist'] != '') - { - $user['buddylist'] = explode(',', $user['buddylist']); - } - else - { - $user['buddylist'] = array(); - } - - $user['buddylist'][] = (int)$mybb->user['uid']; - - // Now we have the new list, so throw it all back together - $new_list = implode(",", $user['buddylist']); - - // And clean it up a little to ensure there is no possibility of bad values - $new_list = preg_replace("#,{2,}#", ",", $new_list); - $new_list = preg_replace("#[^0-9,]#", "", $new_list); - - if(my_substr($new_list, 0, 1) == ",") - { - $new_list = my_substr($new_list, 1); - } - if(my_substr($new_list, -1) == ",") - { - $new_list = my_substr($new_list, 0, my_strlen($new_list)-2); - } - - $user['buddylist'] = $db->escape_string($new_list); - - $db->update_query("users", array('buddylist' => $user['buddylist']), "uid='".(int)$user['uid']."'"); - - - // We want to add the user to our buddy list - if($mybb->user['buddylist'] != '') - { - $mybb->user['buddylist'] = explode(',', $mybb->user['buddylist']); - } - else - { - $mybb->user['buddylist'] = array(); - } - - $mybb->user['buddylist'][] = (int)$request['uid']; - - // Now we have the new list, so throw it all back together - $new_list = implode(",", $mybb->user['buddylist']); - - // And clean it up a little to ensure there is no possibility of bad values - $new_list = preg_replace("#,{2,}#", ",", $new_list); - $new_list = preg_replace("#[^0-9,]#", "", $new_list); - - if(my_substr($new_list, 0, 1) == ",") - { - $new_list = my_substr($new_list, 1); - } - if(my_substr($new_list, -1) == ",") - { - $new_list = my_substr($new_list, 0, my_strlen($new_list)-2); - } - - $mybb->user['buddylist'] = $db->escape_string($new_list); - - $db->update_query("users", array('buddylist' => $mybb->user['buddylist']), "uid='".(int)$mybb->user['uid']."'"); - - $pm = array( - 'subject' => 'buddyrequest_accepted_request', - 'message' => 'buddyrequest_accepted_request_message', - 'touid' => $user['uid'], - 'language' => $user['language'], - 'language_file' => 'usercp' - ); - - send_pm($pm, $mybb->user['uid'], true); - - $db->delete_query('buddyrequests', 'id='.(int)$request['id']); - } - else - { - error($lang->user_doesnt_exist); - } - - $plugins->run_hooks("usercp_acceptrequest_end"); - - redirect("usercp.php?action=editlists", $lang->buddyrequest_accepted); -} - -elseif($mybb->input['action'] == "declinerequest") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - // Validate request - $query = $db->simple_select('buddyrequests', '*', 'id='.$mybb->get_input('id', MyBB::INPUT_INT).' AND touid='.(int)$mybb->user['uid']); - $request = $db->fetch_array($query); - if(empty($request)) - { - error($lang->invalid_request); - } - - $plugins->run_hooks("usercp_declinerequest_start"); - - $user = get_user($request['uid']); - if(!empty($user)) - { - $db->delete_query('buddyrequests', 'id='.(int)$request['id']); - } - else - { - error($lang->user_doesnt_exist); - } - - $plugins->run_hooks("usercp_declinerequest_end"); - - redirect("usercp.php?action=editlists", $lang->buddyrequest_declined); -} - -elseif($mybb->input['action'] == "cancelrequest") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - // Validate request - $query = $db->simple_select('buddyrequests', '*', 'id='.$mybb->get_input('id', MyBB::INPUT_INT).' AND uid='.(int)$mybb->user['uid']); - $request = $db->fetch_array($query); - if(empty($request)) - { - error($lang->invalid_request); - } - - $plugins->run_hooks("usercp_cancelrequest_start"); - - $db->delete_query('buddyrequests', 'id='.(int)$request['id']); - - $plugins->run_hooks("usercp_cancelrequest_end"); - - redirect("usercp.php?action=editlists", $lang->buddyrequest_cancelled); -} - -if($mybb->input['action'] == "do_editlists") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_editlists_start"); - - $existing_users = array(); - $selected_list = array(); - if($mybb->get_input('manage') == "ignored") - { - if($mybb->user['ignorelist']) - { - $existing_users = explode(",", $mybb->user['ignorelist']); - } - - if($mybb->user['buddylist']) - { - // Create a list of buddies... - $selected_list = explode(",", $mybb->user['buddylist']); - } - } - else - { - if($mybb->user['buddylist']) - { - $existing_users = explode(",", $mybb->user['buddylist']); - } - - if($mybb->user['ignorelist']) - { - // Create a list of ignored users - $selected_list = explode(",", $mybb->user['ignorelist']); - } - } - - $error_message = ""; - $message = ""; - - // Adding one or more users to this list - if($mybb->get_input('add_username')) - { - // Split up any usernames we have - $found_users = 0; - $adding_self = false; - $users = explode(",", $mybb->get_input('add_username')); - $users = array_map("trim", $users); - $users = array_unique($users); - foreach($users as $key => $username) - { - if(empty($username)) - { - unset($users[$key]); - continue; - } - - if(my_strtoupper($mybb->user['username']) == my_strtoupper($username)) - { - $adding_self = true; - unset($users[$key]); - continue; - } - $users[$key] = $db->escape_string($username); - } - - // Get the requests we have sent that are still pending - $query = $db->simple_select('buddyrequests', 'touid', 'uid='.(int)$mybb->user['uid']); - $requests = array(); - while($req = $db->fetch_array($query)) - { - $requests[$req['touid']] = true; - } - - // Get the requests we have received that are still pending - $query = $db->simple_select('buddyrequests', 'uid', 'touid='.(int)$mybb->user['uid']); - $requests_rec = array(); - while($req = $db->fetch_array($query)) - { - $requests_rec[$req['uid']] = true; - } - - $sent = false; - - // Fetch out new users - if(count($users) > 0) - { - switch($db->type) - { - case 'mysql': - case 'mysqli': - $field = 'username'; - break; - default: - $field = 'LOWER(username)'; - break; - } - $query = $db->simple_select("users", "uid,buddyrequestsauto,buddyrequestspm,language", "{$field} IN ('".my_strtolower(implode("','", $users))."')"); - while($user = $db->fetch_array($query)) - { - ++$found_users; - - // Make sure we're not adding a duplicate - if(in_array($user['uid'], $existing_users) || in_array($user['uid'], $selected_list)) - { - if($mybb->get_input('manage') == "ignored") - { - $error_message = "ignore"; - } - else - { - $error_message = "buddy"; - } - - // On another list? - $string = "users_already_on_".$error_message."_list"; - if(in_array($user['uid'], $selected_list)) - { - $string .= "_alt"; - } - - $error_message = $lang->$string; - array_pop($users); // To maintain a proper count when we call count($users) - continue; - } - - if(isset($requests[$user['uid']])) - { - if($mybb->get_input('manage') != "ignored") - { - $error_message = $lang->users_already_sent_request; - } - elseif($mybb->get_input('manage') == "ignored") - { - $error_message = $lang->users_already_sent_request_alt; - } - - array_pop($users); // To maintain a proper count when we call count($users) - continue; - } - - if(isset($requests_rec[$user['uid']])) - { - if($mybb->get_input('manage') != "ignored") - { - $error_message = $lang->users_already_rec_request; - } - elseif($mybb->get_input('manage') == "ignored") - { - $error_message = $lang->users_already_rec_request_alt; - } - - array_pop($users); // To maintain a proper count when we call count($users) - continue; - } - - // Do we have auto approval set to On? - if($user['buddyrequestsauto'] == 1 && $mybb->get_input('manage') != "ignored") - { - $existing_users[] = $user['uid']; - - $pm = array( - 'subject' => 'buddyrequest_new_buddy', - 'message' => 'buddyrequest_new_buddy_message', - 'touid' => $user['uid'], - 'receivepms' => (int)$user['buddyrequestspm'], - 'language' => $user['language'], - 'language_file' => 'usercp' - ); - - send_pm($pm); - } - elseif($user['buddyrequestsauto'] != 1 && $mybb->get_input('manage') != "ignored") - { - // Send request - $id = $db->insert_query('buddyrequests', array('uid' => (int)$mybb->user['uid'], 'touid' => (int)$user['uid'], 'date' => TIME_NOW)); - - $pm = array( - 'subject' => 'buddyrequest_received', - 'message' => 'buddyrequest_received_message', - 'touid' => $user['uid'], - 'receivepms' => (int)$user['buddyrequestspm'], - 'language' => $user['language'], - 'language_file' => 'usercp' - ); - - send_pm($pm); - - $sent = true; - } - elseif($mybb->get_input('manage') == "ignored") - { - $existing_users[] = $user['uid']; - } - } - } - - if($found_users < count($users)) - { - if($error_message) - { - $error_message .= "
    "; - } - - $error_message .= $lang->invalid_user_selected; - } - - if(($adding_self != true || ($adding_self == true && count($users) > 0)) && ($error_message == "" || count($users) > 1)) - { - if($mybb->get_input('manage') == "ignored") - { - $message = $lang->users_added_to_ignore_list; - } - else - { - $message = $lang->users_added_to_buddy_list; - } - } - - if($adding_self == true) - { - if($mybb->get_input('manage') == "ignored") - { - $error_message = $lang->cant_add_self_to_ignore_list; - } - else - { - $error_message = $lang->cant_add_self_to_buddy_list; - } - } - - if(count($existing_users) == 0) - { - $message = ""; - - if($sent === true) - { - $message = $lang->buddyrequests_sent_success; - } - } - } - - // Removing a user from this list - else if($mybb->get_input('delete', MyBB::INPUT_INT)) - { - // Check if user exists on the list - $key = array_search($mybb->get_input('delete', MyBB::INPUT_INT), $existing_users); - if($key !== false) - { - unset($existing_users[$key]); - $user = get_user($mybb->get_input('delete', MyBB::INPUT_INT)); - if(!empty($user)) - { - // We want to remove us from this user's buddy list - if($user['buddylist'] != '') - { - $user['buddylist'] = explode(',', $user['buddylist']); - } - else - { - $user['buddylist'] = array(); - } - - $key = array_search($mybb->get_input('delete', MyBB::INPUT_INT), $user['buddylist']); - unset($user['buddylist'][$key]); - - // Now we have the new list, so throw it all back together - $new_list = implode(",", $user['buddylist']); - - // And clean it up a little to ensure there is no possibility of bad values - $new_list = preg_replace("#,{2,}#", ",", $new_list); - $new_list = preg_replace("#[^0-9,]#", "", $new_list); - - if(my_substr($new_list, 0, 1) == ",") - { - $new_list = my_substr($new_list, 1); - } - if(my_substr($new_list, -1) == ",") - { - $new_list = my_substr($new_list, 0, my_strlen($new_list)-2); - } - - $user['buddylist'] = $db->escape_string($new_list); - - $db->update_query("users", array('buddylist' => $user['buddylist']), "uid='".(int)$user['uid']."'"); - } - - if($mybb->get_input('manage') == "ignored") - { - $message = $lang->removed_from_ignore_list; - } - else - { - $message = $lang->removed_from_buddy_list; - } - $user['username'] = htmlspecialchars_uni($user['username']); - $message = $lang->sprintf($message, $user['username']); - } - } - - // Now we have the new list, so throw it all back together - $new_list = implode(",", $existing_users); - - // And clean it up a little to ensure there is no possibility of bad values - $new_list = preg_replace("#,{2,}#", ",", $new_list); - $new_list = preg_replace("#[^0-9,]#", "", $new_list); - - if(my_substr($new_list, 0, 1) == ",") - { - $new_list = my_substr($new_list, 1); - } - if(my_substr($new_list, -1) == ",") - { - $new_list = my_substr($new_list, 0, my_strlen($new_list)-2); - } - - // And update - $user = array(); - if($mybb->get_input('manage') == "ignored") - { - $user['ignorelist'] = $db->escape_string($new_list); - $mybb->user['ignorelist'] = $user['ignorelist']; - } - else - { - $user['buddylist'] = $db->escape_string($new_list); - $mybb->user['buddylist'] = $user['buddylist']; - } - - $db->update_query("users", $user, "uid='".$mybb->user['uid']."'"); - - $plugins->run_hooks("usercp_do_editlists_end"); - - // Ajax based request, throw new list to browser - if(!empty($mybb->input['ajax'])) - { - if($mybb->get_input('manage') == "ignored") - { - $list = "ignore"; - } - else - { - $list = "buddy"; - } - - $message_js = ''; - if($message) - { - $message_js = "$.jGrowl('{$message}', {theme:'jgrowl_success'});"; - } - - if($error_message) - { - $message_js .= " $.jGrowl('{$error_message}', {theme:'jgrowl_error'});"; - } - - if($mybb->get_input('delete', MyBB::INPUT_INT)) - { - header("Content-type: text/javascript"); - echo "$(\"#".$mybb->get_input('manage')."_".$mybb->get_input('delete', MyBB::INPUT_INT)."\").remove();\n"; - if($new_list == "") - { - echo "\$(\"#".$mybb->get_input('manage')."_count\").html(\"0\");\n"; - if($mybb->get_input('manage') == "ignored") - { - echo "\$(\"#ignore_list\").html(\"
  • {$lang->ignore_list_empty}
  • \");\n"; - } - else - { - echo "\$(\"#buddy_list\").html(\"
  • {$lang->buddy_list_empty}
  • \");\n"; - } - } - else - { - echo "\$(\"#".$mybb->get_input('manage')."_count\").html(\"".count(explode(",", $new_list))."\");\n"; - } - echo $message_js; - exit; - } - $mybb->input['action'] = "editlists"; - } - else - { - if($error_message) - { - $message .= "
    ".$error_message; - } - redirect("usercp.php?action=editlists#".$mybb->get_input('manage'), $message); - } -} - -if($mybb->input['action'] == "editlists") -{ - $plugins->run_hooks("usercp_editlists_start"); - - $timecut = TIME_NOW - $mybb->settings['wolcutoff']; - - // Fetch out buddies - $buddy_count = 0; - $buddy_list = ''; - if($mybb->user['buddylist']) - { - $type = "buddy"; - $query = $db->simple_select("users", "*", "uid IN ({$mybb->user['buddylist']})", array("order_by" => "username")); - while($user = $db->fetch_array($query)) - { - $user['username'] = htmlspecialchars_uni($user['username']); - $profile_link = build_profile_link(format_name($user['username'], $user['usergroup'], $user['displaygroup']), $user['uid']); - if($user['lastactive'] > $timecut && ($user['invisible'] == 0 || $mybb->usergroup['canviewwolinvis'] == 1) && $user['lastvisit'] != $user['lastactive']) - { - $status = "online"; - } - else - { - $status = "offline"; - } - eval("\$buddy_list .= \"".$templates->get("usercp_editlists_user")."\";"); - ++$buddy_count; - } - } - - $lang->current_buddies = $lang->sprintf($lang->current_buddies, $buddy_count); - if(!$buddy_list) - { - eval("\$buddy_list = \"".$templates->get("usercp_editlists_no_buddies")."\";"); - } - - // Fetch out ignore list users - $ignore_count = 0; - $ignore_list = ''; - if($mybb->user['ignorelist']) - { - $type = "ignored"; - $query = $db->simple_select("users", "*", "uid IN ({$mybb->user['ignorelist']})", array("order_by" => "username")); - while($user = $db->fetch_array($query)) - { - $user['username'] = htmlspecialchars_uni($user['username']); - $profile_link = build_profile_link(format_name($user['username'], $user['usergroup'], $user['displaygroup']), $user['uid']); - if($user['lastactive'] > $timecut && ($user['invisible'] == 0 || $mybb->usergroup['canviewwolinvis'] == 1) && $user['lastvisit'] != $user['lastactive']) - { - $status = "online"; - } - else - { - $status = "offline"; - } - eval("\$ignore_list .= \"".$templates->get("usercp_editlists_user")."\";"); - ++$ignore_count; - } - } - - $lang->current_ignored_users = $lang->sprintf($lang->current_ignored_users, $ignore_count); - if(!$ignore_list) - { - eval("\$ignore_list = \"".$templates->get("usercp_editlists_no_ignored")."\";"); - } - - // If an AJAX request from buddy management, echo out whatever the new list is. - if($mybb->request_method == "post" && $mybb->input['ajax'] == 1) - { - if($mybb->input['manage'] == "ignored") - { - echo $ignore_list; - echo ""; - } - else - { - if(isset($sent) && $sent === true) - { - $sent_rows = ''; - $query = $db->query(" - SELECT r.*, u.username - FROM ".TABLE_PREFIX."buddyrequests r - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=r.touid) - WHERE r.uid=".(int)$mybb->user['uid']); - - while($request = $db->fetch_array($query)) - { - $bgcolor = alt_trow(); - $request['username'] = build_profile_link(htmlspecialchars_uni($request['username']), (int)$request['touid']); - $request['date'] = my_date($mybb->settings['dateformat'], $request['date'])." ".my_date($mybb->settings['timeformat'], $request['date']); - eval("\$sent_rows .= \"".$templates->get("usercp_editlists_sent_request", 1, 0)."\";"); - } - - if($sent_rows == '') - { - eval("\$sent_rows = \"".$templates->get("usercp_editlists_no_requests", 1, 0)."\";"); - } - - eval("\$sent_requests = \"".$templates->get("usercp_editlists_sent_requests", 1, 0)."\";"); - - echo $sentrequests; - echo $sent_requests.""; - } - else - { - echo $buddy_list; - echo ""; - } - } - exit; - } - - $received_rows = ''; - $query = $db->query(" - SELECT r.*, u.username - FROM ".TABLE_PREFIX."buddyrequests r - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=r.uid) - WHERE r.touid=".(int)$mybb->user['uid']); - - while($request = $db->fetch_array($query)) - { - $bgcolor = alt_trow(); - $request['username'] = build_profile_link(htmlspecialchars_uni($request['username']), (int)$request['uid']); - $request['date'] = my_date($mybb->settings['dateformat'], $request['date'])." ".my_date($mybb->settings['timeformat'], $request['date']); - eval("\$received_rows .= \"".$templates->get("usercp_editlists_received_request")."\";"); - } - - if($received_rows == '') - { - eval("\$received_rows = \"".$templates->get("usercp_editlists_no_requests")."\";"); - } - - eval("\$received_requests = \"".$templates->get("usercp_editlists_received_requests")."\";"); - - $sent_rows = ''; - $query = $db->query(" - SELECT r.*, u.username - FROM ".TABLE_PREFIX."buddyrequests r - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=r.touid) - WHERE r.uid=".(int)$mybb->user['uid']); - - while($request = $db->fetch_array($query)) - { - $bgcolor = alt_trow(); - $request['username'] = build_profile_link(htmlspecialchars_uni($request['username']), (int)$request['touid']); - $request['date'] = my_date($mybb->settings['dateformat'], $request['date'])." ".my_date($mybb->settings['timeformat'], $request['date']); - eval("\$sent_rows .= \"".$templates->get("usercp_editlists_sent_request")."\";"); - } - - if($sent_rows == '') - { - eval("\$sent_rows = \"".$templates->get("usercp_editlists_no_requests")."\";"); - } - - eval("\$sent_requests = \"".$templates->get("usercp_editlists_sent_requests")."\";"); - - $plugins->run_hooks("usercp_editlists_end"); - - eval("\$listpage = \"".$templates->get("usercp_editlists")."\";"); - output_page($listpage); -} - -if($mybb->input['action'] == "drafts") -{ - $plugins->run_hooks("usercp_drafts_start"); - - $query = $db->simple_select("posts", "COUNT(pid) AS draftcount", "visible='-2' AND uid='{$mybb->user['uid']}'"); - $draftcount = $db->fetch_field($query, 'draftcount'); - - $drafts = $disable_delete_drafts = ''; - $lang->drafts_count = $lang->sprintf($lang->drafts_count, my_number_format($draftcount)); - - // Show a listing of all of the current 'draft' posts or threads the user has. - if($draftcount) - { - $query = $db->query(" - SELECT p.subject, p.pid, t.tid, t.subject AS threadsubject, t.fid, f.name AS forumname, p.dateline, t.visible AS threadvisible, p.visible AS postvisible - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=t.fid) - WHERE p.uid = '{$mybb->user['uid']}' AND p.visible = '-2' - ORDER BY p.dateline DESC - "); - - while($draft = $db->fetch_array($query)) - { - $detail = ''; - $trow = alt_trow(); - if($draft['threadvisible'] == 1) // We're looking at a draft post - { - $draft['threadlink'] = get_thread_link($draft['tid']); - $draft['threadsubject'] = htmlspecialchars_uni($draft['threadsubject']); - eval("\$detail = \"".$templates->get("usercp_drafts_draft_thread")."\";"); - $editurl = "newreply.php?action=editdraft&pid={$draft['pid']}"; - $id = $draft['pid']; - $type = "post"; - } - elseif($draft['threadvisible'] == -2) // We're looking at a draft thread - { - $draft['forumlink'] = get_forum_link($draft['fid']); - $draft['forumname'] = htmlspecialchars_uni($draft['forumname']); - eval("\$detail = \"".$templates->get("usercp_drafts_draft_forum")."\";"); - $editurl = "newthread.php?action=editdraft&tid={$draft['tid']}"; - $id = $draft['tid']; - $type = "thread"; - } - - $draft['subject'] = htmlspecialchars_uni($draft['subject']); - $savedate = my_date('relative', $draft['dateline']); - eval("\$drafts .= \"".$templates->get("usercp_drafts_draft")."\";"); - } - } - else - { - $disable_delete_drafts = 'disabled="disabled"'; - eval("\$drafts = \"".$templates->get("usercp_drafts_none")."\";"); - } - - $plugins->run_hooks("usercp_drafts_end"); - - eval("\$draftlist = \"".$templates->get("usercp_drafts")."\";"); - output_page($draftlist); -} - -if($mybb->input['action'] == "do_drafts" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_drafts_start"); - $mybb->input['deletedraft'] = $mybb->get_input('deletedraft', MyBB::INPUT_ARRAY); - if(empty($mybb->input['deletedraft'])) - { - error($lang->no_drafts_selected); - } - $pidin = array(); - $tidin = array(); - foreach($mybb->input['deletedraft'] as $id => $val) - { - if($val == "post") - { - $pidin[] = "'".(int)$id."'"; - } - elseif($val == "thread") - { - $tidin[] = "'".(int)$id."'"; - } - } - if($tidin) - { - $tidin = implode(",", $tidin); - $db->delete_query("threads", "tid IN ($tidin) AND visible='-2' AND uid='".$mybb->user['uid']."'"); - $tidinp = "OR tid IN ($tidin)"; - } - if($pidin || $tidinp) - { - $pidinq = $tidin = ''; - if($pidin) - { - $pidin = implode(",", $pidin); - $pidinq = "pid IN ($pidin)"; - } - else - { - $pidinq = "1=0"; - } - $db->delete_query("posts", "($pidinq $tidinp) AND visible='-2' AND uid='".$mybb->user['uid']."'"); - } - $plugins->run_hooks("usercp_do_drafts_end"); - redirect("usercp.php?action=drafts", $lang->selected_drafts_deleted); -} - -if($mybb->input['action'] == "usergroups") -{ - $plugins->run_hooks("usercp_usergroups_start"); - $ingroups = ",".$mybb->user['usergroup'].",".$mybb->user['additionalgroups'].",".$mybb->user['displaygroup'].","; - - $usergroups = $mybb->cache->read('usergroups'); - - // Changing our display group - if($mybb->get_input('displaygroup', MyBB::INPUT_INT)) - { - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if(my_strpos($ingroups, ",".$mybb->input['displaygroup'].",") === false) - { - error($lang->not_member_of_group); - } - - $dispgroup = $usergroups[$mybb->get_input('displaygroup', MyBB::INPUT_INT)]; - if($dispgroup['candisplaygroup'] != 1) - { - error($lang->cannot_set_displaygroup); - } - $db->update_query("users", array('displaygroup' => $mybb->get_input('displaygroup', MyBB::INPUT_INT)), "uid='".$mybb->user['uid']."'"); - $cache->update_moderators(); - $plugins->run_hooks("usercp_usergroups_change_displaygroup"); - redirect("usercp.php?action=usergroups", $lang->display_group_changed); - exit; - } - - // Leaving a group - if($mybb->get_input('leavegroup', MyBB::INPUT_INT)) - { - // Verify incoming POST request - verify_post_check($mybb->input['my_post_key']); - - if(my_strpos($ingroups, ",".$mybb->get_input('leavegroup', MyBB::INPUT_INT).",") === false) - { - error($lang->not_member_of_group); - } - if($mybb->user['usergroup'] == $mybb->get_input('leavegroup', MyBB::INPUT_INT)) - { - error($lang->cannot_leave_primary_group); - } - - $usergroup = $usergroups[$mybb->get_input('leavegroup', MyBB::INPUT_INT)]; - if($usergroup['type'] != 4 && $usergroup['type'] != 3 && $usergroup['type'] != 5) - { - error($lang->cannot_leave_group); - } - leave_usergroup($mybb->user['uid'], $mybb->get_input('leavegroup', MyBB::INPUT_INT)); - $plugins->run_hooks("usercp_usergroups_leave_group"); - redirect("usercp.php?action=usergroups", $lang->left_group); - exit; - } - - $groupleaders = array(); - - // List of usergroup leaders - $query = $db->query(" - SELECT g.*, u.username, u.displaygroup, u.usergroup, u.email, u.language - FROM ".TABLE_PREFIX."groupleaders g - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=g.uid) - ORDER BY u.username ASC - "); - while($leader = $db->fetch_array($query)) - { - $groupleaders[$leader['gid']][$leader['uid']] = $leader; - } - - // Joining a group - if($mybb->get_input('joingroup', MyBB::INPUT_INT)) - { - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $usergroup = $usergroups[$mybb->get_input('joingroup', MyBB::INPUT_INT)]; - - if($usergroup['type'] == 5) - { - error($lang->cannot_join_invite_group); - } - - if(($usergroup['type'] != 4 && $usergroup['type'] != 3) || !$usergroup['gid']) - { - error($lang->cannot_join_group); - } - - if(my_strpos($ingroups, ",".$mybb->get_input('joingroup', MyBB::INPUT_INT).",") !== false) - { - error($lang->already_member_of_group); - } - - $query = $db->simple_select("joinrequests", "*", "uid='".$mybb->user['uid']."' AND gid='".$mybb->get_input('joingroup', MyBB::INPUT_INT)."'"); - $joinrequest = $db->fetch_array($query); - if($joinrequest['rid']) - { - error($lang->already_sent_join_request); - } - if($mybb->get_input('do') == "joingroup" && $usergroup['type'] == 4) - { - $now = TIME_NOW; - $joinrequest = array( - "uid" => $mybb->user['uid'], - "gid" => $mybb->get_input('joingroup', MyBB::INPUT_INT), - "reason" => $db->escape_string($mybb->get_input('reason')), - "dateline" => TIME_NOW - ); - - $db->insert_query("joinrequests", $joinrequest); - - if(array_key_exists($usergroup['gid'], $groupleaders)) - { - foreach($groupleaders[$usergroup['gid']] as $leader) - { - // Load language - $lang->set_language($leader['language']); - $lang->load("messages"); - - $subject = $lang->sprintf($lang->emailsubject_newjoinrequest, $mybb->settings['bbname']); - $message = $lang->sprintf($lang->email_groupleader_joinrequest, $leader['username'], $mybb->user['username'], $usergroup['title'], $mybb->settings['bbname'], $mybb->get_input('reason'), $mybb->settings['bburl'], $leader['gid']); - my_mail($leader['email'], $subject, $message); - } - } - - // Load language - $lang->set_language($mybb->user['language']); - $lang->load("messages"); - - $plugins->run_hooks("usercp_usergroups_join_group_request"); - redirect("usercp.php?action=usergroups", $lang->group_join_requestsent); - exit; - } - elseif($usergroup['type'] == 4) - { - $joingroup = $mybb->get_input('joingroup', MyBB::INPUT_INT); - eval("\$joinpage = \"".$templates->get("usercp_usergroups_joingroup")."\";"); - output_page($joinpage); - exit; - } - else - { - join_usergroup($mybb->user['uid'], $mybb->get_input('joingroup', MyBB::INPUT_INT)); - $plugins->run_hooks("usercp_usergroups_join_group"); - redirect("usercp.php?action=usergroups", $lang->joined_group); - } - } - - // Accepting invitation - if($mybb->get_input('acceptinvite', MyBB::INPUT_INT)) - { - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $usergroup = $usergroups[$mybb->get_input('acceptinvite', MyBB::INPUT_INT)]; - - if(my_strpos($ingroups, ",".$mybb->get_input('acceptinvite', MyBB::INPUT_INT).",") !== false) - { - error($lang->already_accepted_invite); - } - - $query = $db->simple_select("joinrequests", "*", "uid='".$mybb->user['uid']."' AND gid='".$mybb->get_input('acceptinvite', MyBB::INPUT_INT)."' AND invite='1'"); - $joinrequest = $db->fetch_array($query); - if($joinrequest['rid']) - { - join_usergroup($mybb->user['uid'], $mybb->get_input('acceptinvite', MyBB::INPUT_INT)); - $db->delete_query("joinrequests", "uid='{$mybb->user['uid']}' AND gid='".$mybb->get_input('acceptinvite', MyBB::INPUT_INT)."'"); - $plugins->run_hooks("usercp_usergroups_accept_invite"); - redirect("usercp.php?action=usergroups", $lang->joined_group); - } - else - { - error($lang->no_pending_invitation); - } - } - // Show listing of various group related things - - // List of groups this user is a leader of - $groupsledlist = ''; - - switch($db->type) - { - case "pgsql": - case "sqlite": - $query = $db->query(" - SELECT g.title, g.gid, g.type, COUNT(DISTINCT u.uid) AS users, COUNT(DISTINCT j.rid) AS joinrequests, l.canmanagerequests, l.canmanagemembers, l.caninvitemembers - FROM ".TABLE_PREFIX."groupleaders l - LEFT JOIN ".TABLE_PREFIX."usergroups g ON(g.gid=l.gid) - LEFT JOIN ".TABLE_PREFIX."users u ON(((','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%') OR u.usergroup = g.gid)) - LEFT JOIN ".TABLE_PREFIX."joinrequests j ON(j.gid=g.gid AND j.uid != 0) - WHERE l.uid='".$mybb->user['uid']."' - GROUP BY g.gid, g.title, g.type, l.canmanagerequests, l.canmanagemembers, l.caninvitemembers - "); - break; - default: - $query = $db->query(" - SELECT g.title, g.gid, g.type, COUNT(DISTINCT u.uid) AS users, COUNT(DISTINCT j.rid) AS joinrequests, l.canmanagerequests, l.canmanagemembers, l.caninvitemembers - FROM ".TABLE_PREFIX."groupleaders l - LEFT JOIN ".TABLE_PREFIX."usergroups g ON(g.gid=l.gid) - LEFT JOIN ".TABLE_PREFIX."users u ON(((CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%')) OR u.usergroup = g.gid)) - LEFT JOIN ".TABLE_PREFIX."joinrequests j ON(j.gid=g.gid AND j.uid != 0) - WHERE l.uid='".$mybb->user['uid']."' - GROUP BY g.gid, g.title, g.type, l.canmanagerequests, l.canmanagemembers, l.caninvitemembers - "); - } - - while($usergroup = $db->fetch_array($query)) - { - $memberlistlink = $moderaterequestslink = ''; - eval("\$memberlistlink = \"".$templates->get("usercp_usergroups_leader_usergroup_memberlist")."\";"); - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - if($usergroup['type'] != 4) - { - $usergroup['joinrequests'] = '--'; - } - if($usergroup['joinrequests'] > 0 && $usergroup['canmanagerequests'] == 1) - { - eval("\$moderaterequestslink = \"".$templates->get("usercp_usergroups_leader_usergroup_moderaterequests")."\";"); - } - $groupleader[$usergroup['gid']] = 1; - $trow = alt_trow(); - eval("\$groupsledlist .= \"".$templates->get("usercp_usergroups_leader_usergroup")."\";"); - } - $leadinggroups = ''; - if($groupsledlist) - { - eval("\$leadinggroups = \"".$templates->get("usercp_usergroups_leader")."\";"); - } - - // Fetch the list of groups the member is in - // Do the primary group first - $usergroup = $usergroups[$mybb->user['usergroup']]; - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - $usergroup['usertitle'] = htmlspecialchars_uni($usergroup['usertitle']); - $usergroup['description'] = htmlspecialchars_uni($usergroup['description']); - eval("\$leavelink = \"".$templates->get("usercp_usergroups_memberof_usergroup_leaveprimary")."\";"); - $trow = alt_trow(); - if($usergroup['candisplaygroup'] == 1 && $usergroup['gid'] == $mybb->user['displaygroup']) - { - eval("\$displaycode = \"".$templates->get("usercp_usergroups_memberof_usergroup_display")."\";"); - } - elseif($usergroup['candisplaygroup'] == 1) - { - eval("\$displaycode = \"".$templates->get("usercp_usergroups_memberof_usergroup_setdisplay")."\";"); - } - else - { - $displaycode = ''; - } - - eval("\$memberoflist = \"".$templates->get("usercp_usergroups_memberof_usergroup")."\";"); - $showmemberof = false; - if($mybb->user['additionalgroups']) - { - $query = $db->simple_select("usergroups", "*", "gid IN (".$mybb->user['additionalgroups'].") AND gid !='".$mybb->user['usergroup']."'", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $showmemberof = true; - - if(isset($groupleader[$usergroup['gid']])) - { - eval("\$leavelink = \"".$templates->get("usercp_usergroups_memberof_usergroup_leaveleader")."\";"); - } - elseif($usergroup['type'] != 4 && $usergroup['type'] != 3 && $usergroup['type'] != 5) - { - eval("\$leavelink = \"".$templates->get("usercp_usergroups_memberof_usergroup_leaveother")."\";"); - } - else - { - eval("\$leavelink = \"".$templates->get("usercp_usergroups_memberof_usergroup_leave")."\";"); - } - - $description = ''; - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - $usergroup['usertitle'] = htmlspecialchars_uni($usergroup['usertitle']); - if($usergroup['description']) - { - $usergroup['description'] = htmlspecialchars_uni($usergroup['description']); - eval("\$description = \"".$templates->get("usercp_usergroups_memberof_usergroup_description")."\";"); - } - $trow = alt_trow(); - if($usergroup['candisplaygroup'] == 1 && $usergroup['gid'] == $mybb->user['displaygroup']) - { - eval("\$displaycode = \"".$templates->get("usercp_usergroups_memberof_usergroup_display")."\";"); - } - elseif($usergroup['candisplaygroup'] == 1) - { - eval("\$displaycode = \"".$templates->get("usercp_usergroups_memberof_usergroup_setdisplay")."\";"); - } - else - { - $displaycode = ''; - } - eval("\$memberoflist .= \"".$templates->get("usercp_usergroups_memberof_usergroup")."\";"); - } - } - eval("\$membergroups = \"".$templates->get("usercp_usergroups_memberof")."\";"); - - // List of groups this user has applied for but has not been accepted in to - $query = $db->simple_select("joinrequests", "*", "uid='".$mybb->user['uid']."'"); - while($request = $db->fetch_array($query)) - { - $appliedjoin[$request['gid']] = $request['dateline']; - } - - // Fetch list of groups the member can join - $existinggroups = $mybb->user['usergroup']; - if($mybb->user['additionalgroups']) - { - $existinggroups .= ",".$mybb->user['additionalgroups']; - } - - $joinablegroups = $joinablegrouplist = ''; - $query = $db->simple_select("usergroups", "*", "(type='3' OR type='4' OR type='5') AND gid NOT IN ($existinggroups)", array('order_by' => 'title')); - while($usergroup = $db->fetch_array($query)) - { - $trow = alt_trow(); - - $description = ''; - $usergroup['title'] = htmlspecialchars_uni($usergroup['title']); - if($usergroup['description']) - { - $usergroup['description'] = htmlspecialchars_uni($usergroup['description']); - eval("\$description = \"".$templates->get("usercp_usergroups_joinable_usergroup_description")."\";"); - } - - // Moderating join requests? - if($usergroup['type'] == 4) - { - $conditions = $lang->usergroup_joins_moderated; - } - elseif($usergroup['type'] == 5) - { - $conditions = $lang->usergroup_joins_invite; - } - else - { - $conditions = $lang->usergroup_joins_anyone; - } - - if(isset($appliedjoin[$usergroup['gid']]) && $usergroup['type'] != 5) - { - $applydate = my_date('relative', $appliedjoin[$usergroup['gid']]); - $joinlink = $lang->sprintf($lang->join_group_applied, $applydate); - } - elseif(isset($appliedjoin[$usergroup['gid']]) && $usergroup['type'] == 5) - { - $joinlink = $lang->sprintf($lang->pending_invitation, $usergroup['gid'], $mybb->post_code); - } - elseif($usergroup['type'] == 5) - { - $joinlink = "--"; - } - else - { - eval("\$joinlink = \"".$templates->get("usercp_usergroups_joinable_usergroup_join")."\";"); - } - - $usergroupleaders = ''; - if(!empty($groupleaders[$usergroup['gid']])) - { - $comma = ''; - $usergroupleaders = ''; - foreach($groupleaders[$usergroup['gid']] as $leader) - { - $leader['username'] = format_name(htmlspecialchars_uni($leader['username']), $leader['usergroup'], $leader['displaygroup']); - $usergroupleaders .= $comma.build_profile_link($leader['username'], $leader['uid']); - $comma = $lang->comma; - } - $usergroupleaders = $lang->usergroup_leaders." ".$usergroupleaders; - } - - if(my_strpos($usergroupleaders, $mybb->user['username']) === false) - { - // User is already a leader of the group, so don't show as a "Join Group" - eval("\$joinablegrouplist .= \"".$templates->get("usercp_usergroups_joinable_usergroup")."\";"); - } - } - if($joinablegrouplist) - { - eval("\$joinablegroups = \"".$templates->get("usercp_usergroups_joinable")."\";"); - } - - $plugins->run_hooks("usercp_usergroups_end"); - - eval("\$groupmemberships = \"".$templates->get("usercp_usergroups")."\";"); - output_page($groupmemberships); -} - -if($mybb->input['action'] == "attachments") -{ - $plugins->run_hooks("usercp_attachments_start"); - require_once MYBB_ROOT."inc/functions_upload.php"; - - if($mybb->settings['enableattachments'] == 0) - { - error($lang->attachments_disabled); - } - - $attachments = ''; - - // Pagination - if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) - { - $mybb->settings['threadsperpage'] = 20; - } - - $perpage = $mybb->settings['threadsperpage']; - $page = $mybb->get_input('page', MyBB::INPUT_INT); - - if($page > 0) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $end = $start + $perpage; - $lower = $start+1; - - $query = $db->query(" - SELECT a.*, p.subject, p.dateline, t.tid, t.subject AS threadsubject - FROM ".TABLE_PREFIX."attachments a - LEFT JOIN ".TABLE_PREFIX."posts p ON (a.pid=p.pid) - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - WHERE a.uid='".$mybb->user['uid']."' - ORDER BY p.dateline DESC LIMIT {$start}, {$perpage} - "); - - $bandwidth = $totaldownloads = 0; - while($attachment = $db->fetch_array($query)) - { - if($attachment['dateline'] && $attachment['tid']) - { - $attachment['subject'] = htmlspecialchars_uni($parser->parse_badwords($attachment['subject'])); - $attachment['postlink'] = get_post_link($attachment['pid'], $attachment['tid']); - $attachment['threadlink'] = get_thread_link($attachment['tid']); - $attachment['threadsubject'] = htmlspecialchars_uni($parser->parse_badwords($attachment['threadsubject'])); - - $size = get_friendly_size($attachment['filesize']); - $icon = get_attachment_icon(get_extension($attachment['filename'])); - $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); - - $sizedownloads = $lang->sprintf($lang->attachment_size_downloads, $size, $attachment['downloads']); - $attachdate = my_date('relative', $attachment['dateline']); - $altbg = alt_trow(); - - eval("\$attachments .= \"".$templates->get("usercp_attachments_attachment")."\";"); - - // Add to bandwidth total - $bandwidth += ($attachment['filesize'] * $attachment['downloads']); - $totaldownloads += $attachment['downloads']; - } - else - { - // This little thing delets attachments without a thread/post - remove_attachment($attachment['pid'], $attachment['posthash'], $attachment['aid']); - } - } - - $query = $db->simple_select("attachments", "SUM(filesize) AS ausage, COUNT(aid) AS acount", "uid='".$mybb->user['uid']."'"); - $usage = $db->fetch_array($query); - $totalusage = $usage['ausage']; - $totalattachments = $usage['acount']; - $friendlyusage = get_friendly_size($totalusage); - if($mybb->usergroup['attachquota']) - { - $percent = round(($totalusage/($mybb->usergroup['attachquota']*1024))*100)."%"; - $attachquota = get_friendly_size($mybb->usergroup['attachquota']*1024); - $usagenote = $lang->sprintf($lang->attachments_usage_quota, $friendlyusage, $attachquota, $percent, $totalattachments); - } - else - { - $percent = $lang->unlimited; - $attachquota = $lang->unlimited; - $usagenote = $lang->sprintf($lang->attachments_usage, $friendlyusage, $totalattachments); - } - - $multipage = multipage($totalattachments, $perpage, $page, "usercp.php?action=attachments"); - $bandwidth = get_friendly_size($bandwidth); - - if(!$attachments) - { - eval("\$attachments = \"".$templates->get("usercp_attachments_none")."\";"); - $usagenote = ''; - } - - $plugins->run_hooks("usercp_attachments_end"); - - eval("\$manageattachments = \"".$templates->get("usercp_attachments")."\";"); - output_page($manageattachments); -} - -if($mybb->input['action'] == "do_attachments" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - $plugins->run_hooks("usercp_do_attachments_start"); - require_once MYBB_ROOT."inc/functions_upload.php"; - if(!isset($mybb->input['attachments']) || !is_array($mybb->input['attachments'])) - { - error($lang->no_attachments_selected); - } - $aids = implode(',', array_map('intval', $mybb->input['attachments'])); - $query = $db->simple_select("attachments", "*", "aid IN ($aids) AND uid='".$mybb->user['uid']."'"); - while($attachment = $db->fetch_array($query)) - { - remove_attachment($attachment['pid'], '', $attachment['aid']); - } - $plugins->run_hooks("usercp_do_attachments_end"); - redirect("usercp.php?action=attachments", $lang->attachments_deleted); -} - -if($mybb->input['action'] == "do_notepad" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - // Cap at 60,000 chars; text will allow up to 65535? - if(my_strlen($mybb->get_input('notepad')) > 60000) - { - $mybb->input['notepad'] = my_substr($mybb->get_input('notepad'), 0, 60000); - } - - $plugins->run_hooks("usercp_do_notepad_start"); - $db->update_query("users", array('notepad' => $db->escape_string($mybb->get_input('notepad'))), "uid='".$mybb->user['uid']."'"); - $plugins->run_hooks("usercp_do_notepad_end"); - redirect("usercp.php", $lang->redirect_notepadupdated); -} - -if(!$mybb->input['action']) -{ - // Get posts per day - $daysreg = (TIME_NOW - $mybb->user['regdate']) / (24*3600); - - if($daysreg < 1) - { - $daysreg = 1; - } - - $perday = $mybb->user['postnum'] / $daysreg; - $perday = round($perday, 2); - if($perday > $mybb->user['postnum']) - { - $perday = $mybb->user['postnum']; - } - - $stats = $cache->read("stats"); - $posts = $stats['numposts']; - if($posts == 0) - { - $percent = "0"; - } - else - { - $percent = $mybb->user['postnum']*100/$posts; - $percent = round($percent, 2); - } - - $colspan = 2; - $lang->posts_day = $lang->sprintf($lang->posts_day, my_number_format($perday), $percent); - $regdate = my_date('relative', $mybb->user['regdate']); - - $useravatar = format_avatar($mybb->user['avatar'], $mybb->user['avatardimensions'], '100x100'); - $avatar_username = htmlspecialchars_uni($mybb->user['username']); - eval("\$avatar = \"".$templates->get("usercp_currentavatar")."\";"); - - $usergroup = htmlspecialchars_uni($groupscache[$mybb->user['usergroup']]['title']); - if($mybb->user['usergroup'] == 5 && $mybb->settings['regtype'] != "admin") - { - eval("\$usergroup .= \"".$templates->get("usercp_resendactivation")."\";"); - } - // Make reputations row - $reputations = ''; - if($mybb->usergroup['usereputationsystem'] == 1 && $mybb->settings['enablereputation'] == 1) - { - $reputation_link = get_reputation($mybb->user['reputation']); - eval("\$reputation = \"".$templates->get("usercp_reputation")."\";"); - } - - $latest_warnings = ''; - if($mybb->settings['enablewarningsystem'] != 0 && $mybb->settings['canviewownwarning'] != 0) - { - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - $warning_level = round($mybb->user['warningpoints']/$mybb->settings['maxwarningpoints']*100); - if($warning_level > 100) - { - $warning_level = 100; - } - - if($mybb->user['warningpoints'] > $mybb->settings['maxwarningpoints']) - { - $mybb->user['warningpoints'] = $mybb->settings['maxwarningpoints']; - } - - if($warning_level > 0) - { - require_once MYBB_ROOT.'inc/datahandlers/warnings.php'; - $warningshandler = new WarningsHandler('update'); - - $warningshandler->expire_warnings(); - - $lang->current_warning_level = $lang->sprintf($lang->current_warning_level, $warning_level, $mybb->user['warningpoints'], $mybb->settings['maxwarningpoints']); - $warnings = ''; - // Fetch latest warnings - $query = $db->query(" - SELECT w.*, t.title AS type_title, u.username, p.subject AS post_subject - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=w.pid) - WHERE w.uid='{$mybb->user['uid']}' - ORDER BY w.expired ASC, w.dateline DESC - LIMIT 5 - "); - while($warning = $db->fetch_array($query)) - { - $post_link = ""; - if($warning['post_subject']) - { - $warning['post_subject'] = $parser->parse_badwords($warning['post_subject']); - $warning['post_subject'] = htmlspecialchars_uni($warning['post_subject']); - $warning['postlink'] = get_post_link($warning['pid']); - eval("\$post_link .= \"".$templates->get("usercp_warnings_warning_post")."\";"); - } - $warning['username'] = htmlspecialchars_uni($warning['username']); - $issuedby = build_profile_link($warning['username'], $warning['issuedby']); - $date_issued = my_date('relative', $warning['dateline']); - if($warning['type_title']) - { - $warning_type = $warning['type_title']; - } - else - { - $warning_type = $warning['title']; - } - $warning_type = htmlspecialchars_uni($warning_type); - if($warning['points'] > 0) - { - $warning['points'] = "+{$warning['points']}"; - } - $points = $lang->sprintf($lang->warning_points, $warning['points']); - - // Figure out expiration time - if($warning['daterevoked']) - { - $expires = $lang->warning_revoked; - } - elseif($warning['expired']) - { - $expires = $lang->already_expired; - } - elseif($warning['expires'] == 0) - { - $expires = $lang->never; - } - else - { - $expires = my_date('relative', $warning['expires']); - } - - $alt_bg = alt_trow(); - eval("\$warnings .= \"".$templates->get("usercp_warnings_warning")."\";"); - } - if($warnings) - { - eval("\$latest_warnings = \"".$templates->get("usercp_warnings")."\";"); - } - } - } - - // Format username - $username = format_name(htmlspecialchars_uni($mybb->user['username']), $mybb->user['usergroup'], $mybb->user['displaygroup']); - $username = build_profile_link($username, $mybb->user['uid']); - - // Format post numbers - $mybb->user['posts'] = my_number_format($mybb->user['postnum']); - - // Build referral link - if($mybb->settings['usereferrals'] == 1) - { - $referral_link = $lang->sprintf($lang->referral_link, $settings['bburl'], $mybb->user['uid']); - eval("\$referral_info = \"".$templates->get("usercp_referrals")."\";"); - } - - // User Notepad - $plugins->run_hooks("usercp_notepad_start"); - $mybb->user['notepad'] = htmlspecialchars_uni($mybb->user['notepad']); - eval("\$user_notepad = \"".$templates->get("usercp_notepad")."\";"); - $plugins->run_hooks("usercp_notepad_end"); - - // Thread Subscriptions with New Posts - $latest_subscribed = ''; - $query = $db->simple_select("threadsubscriptions", "sid", "uid = '".$mybb->user['uid']."'", array("limit" => 1)); - if($db->num_rows($query)) - { - $visible = "AND t.visible != 0"; - if(is_moderator() == true) - { - $visible = ''; - } - - $query = $db->query(" - SELECT s.*, t.*, t.username AS threadusername, u.username - FROM ".TABLE_PREFIX."threadsubscriptions s - LEFT JOIN ".TABLE_PREFIX."threads t ON (s.tid=t.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) - WHERE s.uid='".$mybb->user['uid']."' {$visible} - ORDER BY t.lastpost DESC - LIMIT 0, 10 - "); - - $fpermissions = forum_permissions(); - while($subscription = $db->fetch_array($query)) - { - $forumpermissions = $fpermissions[$subscription['fid']]; - if($forumpermissions['canview'] != 0 && $forumpermissions['canviewthreads'] != 0 && ($forumpermissions['canonlyviewownthreads'] == 0 || $subscription['uid'] == $mybb->user['uid'])) - { - $subscriptions[$subscription['tid']] = $subscription; - } - } - - if(is_array($subscriptions)) - { - $tids = implode(",", array_keys($subscriptions)); - - // Checking read - if($mybb->settings['threadreadcut'] > 0) - { - $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); - while($readthread = $db->fetch_array($query)) - { - if($readthread['dateline'] >= $subscriptions[$readthread['tid']]['lastpost']) - { - unset($subscriptions[$readthread['tid']]); // If it's already been read, then don't display the thread - } - else - { - $subscriptions[$readthread['tid']]['lastread'] = $readthread['dateline']; - } - } - } - - if($subscriptions) - { - if($mybb->settings['dotfolders'] != 0) - { - $query = $db->simple_select("posts", "tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); - while($post = $db->fetch_array($query)) - { - $subscriptions[$post['tid']]['doticon'] = 1; - } - } - - $icon_cache = $cache->read("posticons"); - $threadprefixes = build_prefixes(); - - foreach($subscriptions as $thread) - { - $folder = ''; - $folder_label = ''; - $gotounread = ''; - - if($thread['tid']) - { - $bgcolor = alt_trow(); - $thread['subject'] = $parser->parse_badwords($thread['subject']); - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - $thread['threadlink'] = get_thread_link($thread['tid']); - $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); - - // If this thread has a prefix... - if($thread['prefix'] != 0 && !empty($threadprefixes[$thread['prefix']])) - { - $thread['displayprefix'] = $threadprefixes[$thread['prefix']]['displaystyle'].' '; - } - else - { - $thread['displayprefix'] = ''; - } - - // Icons - if($thread['icon'] > 0 && isset($icon_cache[$thread['icon']])) - { - $icon = $icon_cache[$thread['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("usercp_subscriptions_thread_icon")."\";"); - } - else - { - $icon = " "; - } - - if($thread['doticon']) - { - $folder = "dot_"; - $folder_label .= $lang->icon_dot; - } - - // Check to see which icon we display - if($thread['lastread'] && $thread['lastread'] < $thread['lastpost']) - { - $folder .= "new"; - $folder_label .= $lang->icon_new; - $new_class = "subject_new"; - $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); - eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); - } - else - { - $folder_label .= $lang->icon_no_new; - $new_class = "subject_old"; - } - - $folder .= "folder"; - - if($thread['visible'] == 0) - { - $bgcolor = "trow_shaded"; - } - - $lastpostdate = my_date('relative', $thread['lastpost']); - $lastposter = htmlspecialchars_uni($thread['lastposter']); - $lastposteruid = $thread['lastposteruid']; - - if($lastposteruid == 0) - { - $lastposterlink = $lastposter; - } - else - { - $lastposterlink = build_profile_link($lastposter, $lastposteruid); - } - - $thread['replies'] = my_number_format($thread['replies']); - $thread['views'] = my_number_format($thread['views']); - $thread['username'] = htmlspecialchars_uni($thread['username']); - $thread['author'] = build_profile_link($thread['username'], $thread['uid']); - - eval("\$latest_subscribed_threads .= \"".$templates->get("usercp_latest_subscribed_threads")."\";"); - } - } - eval("\$latest_subscribed = \"".$templates->get("usercp_latest_subscribed")."\";"); - } - } - } - - // User's Latest Threads - - // Get unviewable forums - $f_perm_sql = ''; - $unviewable_forums = get_unviewable_forums(); - $inactiveforums = get_inactive_forums(); - if($unviewable_forums) - { - $f_perm_sql = " AND t.fid NOT IN ($unviewable_forums)"; - } - if($inactiveforums) - { - $f_perm_sql .= " AND t.fid NOT IN ($inactiveforums)"; - } - - $visible = " AND t.visible != 0"; - if(is_moderator() == true) - { - $visible = ''; - } - - $query = $db->query(" - SELECT t.*, t.username AS threadusername, u.username - FROM ".TABLE_PREFIX."threads t - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) - WHERE t.uid='".$mybb->user['uid']."' AND t.firstpost != 0 AND t.visible >= 0 {$visible}{$f_perm_sql} - ORDER BY t.lastpost DESC - LIMIT 0, 5 - "); - - // Figure out whether we can view these threads... - $threadcache = array(); - $fpermissions = forum_permissions(); - while($thread = $db->fetch_array($query)) - { - // Moderated, and not moderator? - if($thread['visible'] == 0 && is_moderator($thread['fid'], "canviewunapprove") === false) - { - continue; - } - - $forumpermissions = $fpermissions[$thread['fid']]; - if($forumpermissions['canview'] != 0 || $forumpermissions['canviewthreads'] != 0) - { - $threadcache[$thread['tid']] = $thread; - } - } - - $latest_threads = ''; - if(!empty($threadcache)) - { - $tids = implode(",", array_keys($threadcache)); - $readforums = array(); - - // Read Forums - $query = $db->query(" - SELECT f.fid, fr.dateline AS lastread - FROM ".TABLE_PREFIX."forums f - LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') - WHERE f.active != 0 - ORDER BY pid, disporder - "); - - while($forum = $db->fetch_array($query)) - { - $readforums[$forum['fid']] = $forum['lastread']; - } - - // Threads being read? - if($mybb->settings['threadreadcut'] > 0) - { - $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); - while($readthread = $db->fetch_array($query)) - { - $threadcache[$readthread['tid']]['lastread'] = $readthread['dateline']; - } - } - - // Icon Stuff - if($mybb->settings['dotfolders'] != 0) - { - $query = $db->simple_select("posts", "tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); - while($post = $db->fetch_array($query)) - { - $threadcache[$post['tid']]['doticon'] = 1; - } - } - - $icon_cache = $cache->read("posticons"); - $threadprefixes = build_prefixes(); - - // Run the threads... - $latest_threads_threads = ''; - foreach($threadcache as $thread) - { - if($thread['tid']) - { - $bgcolor = alt_trow(); - $folder = ''; - $folder_label = ''; - $prefix = ''; - $gotounread = ''; - $isnew = 0; - $donenew = 0; - $lastread = 0; - - // If this thread has a prefix... - if($thread['prefix'] != 0) - { - if(!empty($threadprefixes[$thread['prefix']])) - { - $thread['displayprefix'] = $threadprefixes[$thread['prefix']]['displaystyle'].' '; - } - } - else - { - $thread['displayprefix'] = ''; - } - - $thread['subject'] = $parser->parse_badwords($thread['subject']); - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - $thread['threadlink'] = get_thread_link($thread['tid']); - $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); - - if($thread['icon'] > 0 && $icon_cache[$thread['icon']]) - { - $icon = $icon_cache[$thread['icon']]; - $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); - $icon['path'] = htmlspecialchars_uni($icon['path']); - $icon['name'] = htmlspecialchars_uni($icon['name']); - eval("\$icon = \"".$templates->get("usercp_subscriptions_thread_icon")."\";"); - } - else - { - $icon = " "; - } - - if($mybb->settings['threadreadcut'] > 0) - { - $forum_read = $readforums[$thread['fid']]; - - $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - if($forum_read == 0 || $forum_read < $read_cutoff) - { - $forum_read = $read_cutoff; - } - } - - if($mybb->settings['threadreadcut'] > 0 && $thread['lastpost'] > $forum_read) - { - $cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; - } - - $cutoff = 0; - if($thread['lastpost'] > $cutoff) - { - if($thread['lastread']) - { - $lastread = $thread['lastread']; - } - } - - if(!$lastread) - { - $readcookie = $threadread = my_get_array_cookie("threadread", $thread['tid']); - if($readcookie > $forum_read) - { - $lastread = $readcookie; - } - else - { - $lastread = $forum_read; - } - } - - // Folder Icons - if($thread['doticon']) - { - $folder = "dot_"; - $folder_label .= $lang->icon_dot; - } - - if($thread['lastpost'] > $lastread && $lastread) - { - $folder .= "new"; - $folder_label .= $lang->icon_new; - $new_class = "subject_new"; - $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); - eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); - $unreadpost = 1; - } - else - { - $folder_label .= $lang->icon_no_new; - $new_class = "subject_old"; - } - - if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews']) - { - $folder .= "hot"; - $folder_label .= $lang->icon_hot; - } - - // Is our thread visible? - if($thread['visible'] == 0) - { - $bgcolor = 'trow_shaded'; - } - - if($thread['closed'] == 1) - { - $folder .= "lock"; - $folder_label .= $lang->icon_lock; - } - - $folder .= "folder"; - - $lastpostdate = my_date('relative', $thread['lastpost']); - $lastposter = htmlspecialchars_uni($thread['lastposter']); - $lastposteruid = $thread['lastposteruid']; - - if($lastposteruid == 0) - { - $lastposterlink = $lastposter; - } - else - { - $lastposterlink = build_profile_link($lastposter, $lastposteruid); - } - - $thread['replies'] = my_number_format($thread['replies']); - $thread['views'] = my_number_format($thread['views']); - $thread['username'] = htmlspecialchars_uni($thread['username']); - $thread['author'] = build_profile_link($thread['username'], $thread['uid']); - - eval("\$latest_threads_threads .= \"".$templates->get("usercp_latest_threads_threads")."\";"); - } - } - - eval("\$latest_threads = \"".$templates->get("usercp_latest_threads")."\";"); - } - - $plugins->run_hooks("usercp_end"); - - eval("\$usercp = \"".$templates->get("usercp")."\";"); - output_page($usercp); -} diff --git a/html/forums/usercp2.php b/html/forums/usercp2.php deleted file mode 100644 index ff5ff44..0000000 --- a/html/forums/usercp2.php +++ /dev/null @@ -1,251 +0,0 @@ -user['uid'] == 0) -{ - error_no_permission(); -} - -// Verify incoming POST request -verify_post_check($mybb->get_input('my_post_key')); - -$lang->load("usercp"); - -usercp_menu(); - -$server_http_referer = htmlentities($_SERVER['HTTP_REFERER']); - -$plugins->run_hooks("usercp2_start"); - -if($mybb->get_input('action') == "do_addsubscription" && $mybb->get_input('type') != "forum") -{ - $thread = get_thread($mybb->get_input('tid')); - if(!$thread) - { - error($lang->error_invalidthread); - } - - // Is the currently logged in user a moderator of this forum? - $ismod = is_moderator($thread['fid']); - - // Make sure we are looking at a real thread here. - if(($thread['visible'] != 1 && $ismod == false) || ($thread['visible'] > 1 && $ismod == true)) - { - error($lang->error_invalidthread); - } - - $forumpermissions = forum_permissions($thread['fid']); - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid'])) - { - error_no_permission(); - } - - $plugins->run_hooks("usercp2_do_addsubscription"); - - add_subscribed_thread($thread['tid'], $mybb->get_input('notification', MyBB::INPUT_INT)); - - if($mybb->get_input('referrer')) - { - $url = htmlspecialchars_uni($mybb->get_input('referrer')); - } - else - { - $url = get_thread_link($thread['tid']); - } - redirect($url, $lang->redirect_subscriptionadded); -} -elseif($mybb->get_input('action') == "addsubscription") -{ - if($mybb->get_input('type') == "forum") - { - $forum = get_forum($mybb->get_input('fid', MyBB::INPUT_INT)); - if(!$forum) - { - error($lang->error_invalidforum); - } - $forumpermissions = forum_permissions($forum['fid']); - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) - { - error_no_permission(); - } - - $plugins->run_hooks("usercp2_addsubscription_forum"); - - add_subscribed_forum($forum['fid']); - if($server_http_referer) - { - $url = $server_http_referer; - } - else - { - $url = "index.php"; - } - redirect($url, $lang->redirect_forumsubscriptionadded); - } - else - { - $thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - if(!$thread) - { - error($lang->error_invalidthread); - } - - // Is the currently logged in user a moderator of this forum? - $ismod = is_moderator($thread['fid']); - - // Make sure we are looking at a real thread here. - if(($thread['visible'] != 1 && $ismod == false) || ($thread['visible'] > 1 && $ismod == true)) - { - error($lang->error_invalidthread); - } - - add_breadcrumb($lang->nav_subthreads, "usercp.php?action=subscriptions"); - add_breadcrumb($lang->nav_addsubscription); - - $forumpermissions = forum_permissions($thread['fid']); - if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || (isset($forumpermissions['canonlyviewownthreads']) && $forumpermissions['canonlyviewownthreads'] != 0 && $thread['uid'] != $mybb->user['uid'])) - { - error_no_permission(); - } - $referrer = ''; - if($server_http_referer) - { - $referrer = $server_http_referer; - } - - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - $thread['subject'] = $parser->parse_badwords($thread['subject']); - $thread['subject'] = htmlspecialchars_uni($thread['subject']); - $lang->subscribe_to_thread = $lang->sprintf($lang->subscribe_to_thread, $thread['subject']); - - $notification_none_checked = $notification_email_checked = $notification_pm_checked = ''; - if($mybb->user['subscriptionmethod'] == 1 || $mybb->user['subscriptionmethod'] == 0) - { - $notification_none_checked = "checked=\"checked\""; - } - else if($mybb->user['subscriptionmethod'] == 2) - { - $notification_email_checked = "checked=\"checked\""; - } - else if($mybb->user['subscriptionmethod'] == 3) - { - $notification_pm_checked = "checked=\"checked\""; - } - - $plugins->run_hooks("usercp2_addsubscription_thread"); - - eval("\$add_subscription = \"".$templates->get("usercp_addsubscription_thread")."\";"); - output_page($add_subscription); - exit; - } -} -elseif($mybb->get_input('action') == "removesubscription") -{ - if($mybb->get_input('type') == "forum") - { - $forum = get_forum($mybb->get_input('fid', MyBB::INPUT_INT)); - if(!$forum) - { - error($lang->error_invalidforum); - } - - $plugins->run_hooks("usercp2_removesubscription_forum"); - - remove_subscribed_forum($forum['fid']); - if($server_http_referer) - { - $url = $server_http_referer; - } - else - { - $url = "usercp.php?action=forumsubscriptions"; - } - redirect($url, $lang->redirect_forumsubscriptionremoved); - } - else - { - $thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - if(!$thread) - { - error($lang->error_invalidthread); - } - - // Is the currently logged in user a moderator of this forum? - $ismod = is_moderator($thread['fid']); - - // Make sure we are looking at a real thread here. - if(($thread['visible'] != 1 && $ismod == false) || ($thread['visible'] > 1 && $ismod == true)) - { - error($lang->error_invalidthread); - } - - $plugins->run_hooks("usercp2_removesubscription_thread"); - - remove_subscribed_thread($thread['tid']); - if($server_http_referer) - { - $url = $server_http_referer; - } - else - { - $url = "usercp.php?action=subscriptions"; - } - redirect($url, $lang->redirect_subscriptionremoved); - } -} -elseif($mybb->get_input('action') == "removesubscriptions") -{ - if($mybb->get_input('type') == "forum") - { - $plugins->run_hooks("usercp2_removesubscriptions_forum"); - - $db->delete_query("forumsubscriptions", "uid='".$mybb->user['uid']."'"); - if($server_http_referer) - { - $url = $server_http_referer; - } - else - { - $url = "usercp.php?action=forumsubscriptions"; - } - redirect($url, $lang->redirect_forumsubscriptionsremoved); - } - else - { - $plugins->run_hooks("usercp2_removesubscriptions_thread"); - - $db->delete_query("threadsubscriptions", "uid='".$mybb->user['uid']."'"); - if($server_http_referer) - { - $url = $server_http_referer; - } - else - { - $url = "usercp.php?action=subscriptions"; - } - redirect($url, $lang->redirect_subscriptionsremoved); - } -} -else -{ - error($lang->error_invalidaction); -} - diff --git a/html/forums/warnings.php b/html/forums/warnings.php deleted file mode 100644 index ce57f66..0000000 --- a/html/forums/warnings.php +++ /dev/null @@ -1,872 +0,0 @@ -load("warnings"); - -if($mybb->settings['enablewarningsystem'] == 0) -{ - error($lang->error_warning_system_disabled); -} - -// Expire old warnings -require_once MYBB_ROOT.'inc/datahandlers/warnings.php'; -$warningshandler = new WarningsHandler('update'); - -$warningshandler->expire_warnings(); - -$mybb->input['action'] = $mybb->get_input('action'); - -$plugins->run_hooks("warnings_start"); - -// Actually warn a user -if($mybb->input['action'] == "do_warn" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canwarnusers'] != 1) - { - error_no_permission(); - } - - $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); - - if(!$user['uid']) - { - error($lang->error_invalid_user); - } - - $group_permissions = user_permissions($user['uid']); - - if($group_permissions['canreceivewarnings'] != 1) - { - error($lang->error_cant_warn_group); - } - - if(!modcp_can_manage_user($user['uid'])) - { - error($lang->error_cant_warn_user); - } - - $plugins->run_hooks("warnings_do_warn_start"); - - $warning = array( - 'uid' => $mybb->get_input('uid', MyBB::INPUT_INT), - 'notes' => $mybb->get_input('notes'), - 'type' => $mybb->get_input('type'), - 'custom_reason' => $mybb->get_input('custom_reason'), - 'custom_points' => $mybb->get_input('custom_points', MyBB::INPUT_INT), - 'expires' => $mybb->get_input('expires', MyBB::INPUT_INT), - 'expires_period' => $mybb->get_input('expires_period') - ); - - // Is this warning being given for a post? - if($mybb->get_input('pid', MyBB::INPUT_INT)) - { - $warning['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT); - - $post = get_post($warning['pid']); - - $forum_permissions = forum_permissions($post['fid']); - - if($forum_permissions['canview'] != 1) - { - error_no_permission(); - } - } - - $warningshandler->set_data($warning); - - if($warningshandler->validate_warning()) - { - $warninginfo = $warningshandler->insert_warning(); - - // Are we notifying the user? - if($mybb->get_input('send_pm', MyBB::INPUT_INT) == 1 && $group_permissions['canusepms'] != 0 && $mybb->settings['enablepms'] != 0) - { - - $pm = array( - 'subject' => $mybb->get_input('pm_subject'), - 'message' => $mybb->get_input('pm_message'), - 'touid' => $user['uid'] - ); - - $sender_uid = $mybb->user['uid']; - if($mybb->settings['allowanonwarningpms'] == 1 && $mybb->get_input('pm_anonymous', MyBB::INPUT_INT)) - { - $sender_uid = -1; - } - - // Some kind of friendly error notification - if(!send_pm($pm, $sender_uid, true)) - { - $warningshandler->friendly_action .= $lang->redirect_warned_pmerror; - } - } - - $plugins->run_hooks("warnings_do_warn_end"); - - $lang->redirect_warned = $lang->sprintf($lang->redirect_warned, htmlspecialchars_uni($user['username']), $warningshandler->new_warning_level, $warningshandler->friendly_action); - - if(!empty($post['pid'])) - { - redirect(get_post_link($post['pid']), $lang->redirect_warned); - } - else - { - redirect(get_profile_link($user['uid']), $lang->redirect_warned); - } - } - else - { - $warn_errors = $warningshandler->get_friendly_errors(); - $warn_errors = inline_error($warn_errors); - $mybb->input['action'] = 'warn'; - } -} - -// Warn a user -if($mybb->input['action'] == "warn") -{ - if($mybb->usergroup['canwarnusers'] != 1) - { - error_no_permission(); - } - - // Check we haven't exceeded the maximum number of warnings per day - if($mybb->usergroup['maxwarningsday'] != 0) - { - $timecut = TIME_NOW-60*60*24; - $query = $db->simple_select("warnings", "COUNT(wid) AS given_today", "issuedby='{$mybb->user['uid']}' AND dateline>'$timecut'"); - $given_today = $db->fetch_field($query, "given_today"); - if($given_today >= $mybb->usergroup['maxwarningsday']) - { - error($lang->sprintf($lang->warnings_reached_max_warnings_day, $mybb->usergroup['maxwarningsday'])); - } - } - - $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); - if(!$user) - { - error($lang->error_invalid_user); - } - - if($user['uid'] == $mybb->user['uid']) - { - error($lang->warnings_error_cannot_warn_self); - } - - if($user['warningpoints'] >= $mybb->settings['maxwarningpoints']) - { - error($lang->warnings_error_user_reached_max_warning); - } - - $group_permissions = user_permissions($user['uid']); - - if($group_permissions['canreceivewarnings'] != 1) - { - error($lang->error_cant_warn_group); - } - - if(!modcp_can_manage_user($user['uid'])) - { - error($lang->error_cant_warn_user); - } - - $post = $existing_warnings = ''; - - // Giving a warning for a specific post - if($mybb->get_input('pid', MyBB::INPUT_INT)) - { - $post = get_post($mybb->get_input('pid', MyBB::INPUT_INT)); - - if($post) - { - $thread = get_thread($post['tid']); - } - - if(!$post || !$thread) - { - error($lang->warnings_error_invalid_post); - } - - $forum_permissions = forum_permissions($thread['fid']); - if($forum_permissions['canview'] != 1) - { - error_no_permission(); - } - - $post['subject'] = $parser->parse_badwords($post['subject']); - $post['subject'] = htmlspecialchars_uni($post['subject']); - $post_link = get_post_link($post['pid']); - eval("\$post = \"".$templates->get("warnings_warn_post")."\";"); - - // Fetch any existing warnings issued for this post - $query = $db->query(" - SELECT w.*, t.title AS type_title, u.username - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby) - WHERE w.pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."' - ORDER BY w.expired ASC, w.dateline DESC - "); - $first = true; - $warnings = ''; - while($warning = $db->fetch_array($query)) - { - if($warning['expired'] != $last_expired || $first) - { - if($warning['expired'] == 0) - { - eval("\$warnings .= \"".$templates->get("warnings_active_header")."\";"); - } - else - { - eval("\$warnings .= \"".$templates->get("warnings_expired_header")."\";"); - } - } - $last_expired = $warning['expired']; - $first = false; - - $post_link = ""; - $warning['username'] = htmlspecialchars_uni($warning['username']); - $issuedby = build_profile_link($warning['username'], $warning['issuedby']); - $date_issued = my_date('relative', $warning['dateline']); - if($warning['type_title']) - { - $warning_type = $warning['type_title']; - } - else - { - $warning_type = $warning['title']; - } - $warning_type = htmlspecialchars_uni($warning_type); - if($warning['points'] > 0) - { - $warning['points'] = "+{$warning['points']}"; - } - $points = $lang->sprintf($lang->warning_points, $warning['points']); - if($warning['expired'] != 1) - { - if($warning['expires'] == 0) - { - $expires = $lang->never; - } - else - { - $expires = my_date($mybb->settings['dateformat'], $warning['expires']) . ", " . my_date($mybb->settings['timeformat'], $warning['expires']); - } - } - else - { - if($warning['daterevoked']) - { - $expires = $lang->warning_revoked; - } - else if($warning['expires']) - { - $expires = $lang->already_expired; - } - } - $alt_bg = alt_trow(); - $plugins->run_hooks("warnings_warning"); - eval("\$warnings .= \"".$templates->get("warnings_warning")."\";"); - } - if($warnings) - { - eval("\$existing_warnings = \"".$templates->get("warnings_warn_existing")."\";"); - } - } - - $plugins->run_hooks("warnings_warn_start"); - - $type_checked = array('custom' => ''); - $expires_period = array('hours' => '', 'days' => '', 'weeks' => '', 'months' => '', 'never' => ''); - $send_pm_checked = ''; - - // Coming here from failed do_warn? - $user['username'] = htmlspecialchars_uni($user['username']); - if(!empty($warn_errors)) - { - $notes = htmlspecialchars_uni($mybb->get_input('notes')); - if($mybb->get_input('type', MyBB::INPUT_INT)) - { - $type_checked[$mybb->get_input('type', MyBB::INPUT_INT)] = "checked=\"checked\""; - } - $pm_subject = htmlspecialchars_uni($mybb->get_input('pm_subject')); - $message = htmlspecialchars_uni($mybb->get_input('pm_message')); - if(!empty($mybb->input['send_pm'])) - { - $send_pm_checked = "checked=\"checked\""; - } - $custom_reason = htmlspecialchars_uni($mybb->get_input('custom_reason')); - $custom_points = $mybb->get_input('custom_points', MyBB::INPUT_INT); - $expires = $mybb->get_input('expires', MyBB::INPUT_INT); - if($mybb->get_input('expires_period', MyBB::INPUT_INT)) - { - $expires_period[$mybb->get_input('expires_period', MyBB::INPUT_INT)] = "selected=\"selected\""; - } - } - else - { - $notes = $custom_reason = $custom_points = $expires = ''; - $expires = 1; - $custom_points = 2; - $pm_subject = $lang->warning_pm_subject; - $message = $lang->sprintf($lang->warning_pm_message, $user['username'], $mybb->settings['bbname']); - $warn_errors = ''; - } - - $lang->nav_profile = $lang->sprintf($lang->nav_profile, $user['username']); - add_breadcrumb($lang->nav_profile, get_profile_link($user['uid'])); - add_breadcrumb($lang->nav_add_warning); - - $user_link = build_profile_link($user['username'], $user['uid']); - - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - - if(!is_array($groupscache)) - { - $groupscache = $cache->read("usergroups"); - } - - $current_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100); - - // Fetch warning levels - $levels = array(); - $query = $db->simple_select("warninglevels", "*"); - while($level = $db->fetch_array($query)) - { - $level['action'] = my_unserialize($level['action']); - switch($level['action']['type']) - { - case 1: - if($level['action']['length'] > 0) - { - $ban_length = fetch_friendly_expiration($level['action']['length']); - $lang_str = "expiration_".$ban_length['period']; - $period = $lang->sprintf($lang->result_period, $ban_length['time'], $lang->$lang_str); - } - else - { - $period = $lang->result_period_perm; - } - $group_name = $groupscache[$level['action']['usergroup']]['title']; - $level['friendly_action'] = $lang->sprintf($lang->result_banned, $group_name, $period); - break; - case 2: - if($level['action']['length'] > 0) - { - $period = fetch_friendly_expiration($level['action']['length']); - $lang_str = "expiration_".$period['period']; - $period = $lang->sprintf($lang->result_period, $period['time'], $lang->$lang_str); - } - else - { - $period = $lang->result_period_perm; - } - $level['friendly_action'] = $lang->sprintf($lang->result_suspended, $period); - break; - case 3: - if($level['action']['length'] > 0) - { - $period = fetch_friendly_expiration($level['action']['length']); - $lang_str = "expiration_".$period['period']; - $period = $lang->sprintf($lang->result_period, $period['time'], $lang->$lang_str); - } - else - { - $period = $lang->result_period_perm; - } - $level['friendly_action'] = $lang->sprintf($lang->result_moderated, $period); - break; - } - $levels[$level['percentage']] = $level; - } - krsort($levels); - - $types = ''; - - // Fetch all current warning types - $query = $db->simple_select("warningtypes", "*", "", array("order_by" => "title")); - while($type = $db->fetch_array($query)) - { - if(!isset($type_checked[$type['tid']])) - { - $type_checked[$type['tid']] = ''; - } - $checked = $type_checked[$type['tid']]; - $type['title'] = htmlspecialchars_uni($type['title']); - $new_warning_level = round(($user['warningpoints']+$type['points'])/$mybb->settings['maxwarningpoints']*100); - if($new_warning_level > 100) - { - $new_warning_level = 100; - } - if($type['points'] > 0) - { - $type['points'] = "+{$type['points']}"; - } - $points = $lang->sprintf($lang->warning_points, $type['points']); - - if(is_array($levels)) - { - foreach($levels as $level) - { - if($new_warning_level >= $level['percentage']) - { - $new_level = $level; - break; - } - } - } - $level_diff = $new_warning_level-$current_level; - $result = ''; - if(!empty($new_level['friendly_action'])) - { - eval("\$result = \"".$templates->get("warnings_warn_type_result")."\";"); - } - eval("\$types .= \"".$templates->get("warnings_warn_type")."\";"); - unset($new_level); - unset($result); - } - - $custom_warning = ''; - - if($mybb->settings['allowcustomwarnings'] != 0) - { - if(empty($types) && empty($warn_errors) || $mybb->get_input('type') == 'custom') - { - $type_checked['custom'] = "checked=\"checked\""; - } - - eval("\$custom_warning = \"".$templates->get("warnings_warn_custom")."\";"); - } - - $pm_notify = ''; - - if($group_permissions['canusepms'] != 0 && $mybb->user['receivepms'] != 0 && $mybb->settings['enablepms'] != 0) - { - $smilieinserter = $codebuttons = ""; - - if($mybb->settings['bbcodeinserter'] != 0 && $mybb->settings['pmsallowmycode'] != 0 && $mybb->user['showcodebuttons'] != 0) - { - $codebuttons = build_mycode_inserter("message", $mybb->settings['pmsallowsmilies']); - if($mybb->settings['pmsallowsmilies'] != 0) - { - $smilieinserter = build_clickable_smilies(); - } - } - - $anonymous_pm = ''; - if($mybb->settings['allowanonwarningpms'] == 1) - { - $checked = ''; - if($mybb->get_input('pm_anonymous', MyBB::INPUT_INT)) - { - $checked = ' checked="checked"'; - } - - eval('$anonymous_pm = "'.$templates->get('warnings_warn_pm_anonymous').'";'); - } - - eval("\$pm_notify = \"".$templates->get("warnings_warn_pm")."\";"); - } - - $plugins->run_hooks("warnings_warn_end"); - - eval("\$warn = \"".$templates->get("warnings_warn")."\";"); - output_page($warn); - exit; -} - -// Revoke a warning -if($mybb->input['action'] == "do_revoke" && $mybb->request_method == "post") -{ - // Verify incoming POST request - verify_post_check($mybb->get_input('my_post_key')); - - if($mybb->usergroup['canwarnusers'] != 1) - { - error_no_permission(); - } - - $warning = $warningshandler->get($mybb->input['wid']); - - if(!$warning) - { - error($lang->error_invalid_warning); - } - else if($warning['daterevoked']) - { - error($lang->warning_already_revoked); - } - - $user = get_user($warning['uid']); - - $group_permissions = user_permissions($user['uid']); - if($group_permissions['canreceivewarnings'] != 1) - { - error($lang->error_cant_warn_group); - } - - $plugins->run_hooks("warnings_do_revoke_start"); - - if(!trim($mybb->get_input('reason'))) - { - $warn_errors[] = $lang->no_revoke_reason; - $warn_errors = inline_error($warn_errors); - $mybb->input['action'] = "view"; - } - else - { - $warning_data = array( - 'wid' => $warning['wid'], - 'reason' => $mybb->get_input('reason'), - 'expired' => $warning['expired'], - 'uid' => $warning['uid'], - 'points' => $warning['points'] - ); - - $warningshandler->set_data($warning_data); - - $warningshandler->update_warning(); - - redirect("warnings.php?action=view&wid={$warning['wid']}", $lang->redirect_warning_revoked); - } -} - -// Detailed view of a warning -if($mybb->input['action'] == "view") -{ - if($mybb->usergroup['canwarnusers'] != 1) - { - error_no_permission(); - } - - $query = $db->query(" - SELECT w.*, t.title AS type_title, u.username, p.subject AS post_subject - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=w.pid) - WHERE w.wid='".$mybb->get_input('wid', MyBB::INPUT_INT)."' - "); - $warning = $db->fetch_array($query); - - if(!$warning) - { - error($lang->error_invalid_warning); - } - - $user = get_user((int)$warning['uid']); - if(!$user) - { - $user['username'] = $lang->guest; - } - $user['username'] = htmlspecialchars_uni($user['username']); - - $group_permissions = user_permissions($user['uid']); - if($group_permissions['canreceivewarnings'] != 1) - { - error($lang->error_cant_warn_group); - } - - $plugins->run_hooks("warnings_view_start"); - - $lang->nav_profile = $lang->sprintf($lang->nav_profile, $user['username']); - if($user['uid']) - { - add_breadcrumb($lang->nav_profile, get_profile_link($user['uid'])); - add_breadcrumb($lang->nav_warning_log, "warnings.php?uid={$user['uid']}"); - } - else - { - add_breadcrumb($lang->nav_profile); - add_breadcrumb($lang->nav_warning_log); - } - add_breadcrumb($lang->nav_view_warning); - - $user_link = build_profile_link($user['username'], $user['uid']); - - $post_link = ""; - if($warning['post_subject']) - { - $warning['post_subject'] = $parser->parse_badwords($warning['post_subject']); - $warning['post_subject'] = htmlspecialchars_uni($warning['post_subject']); - $post_link = get_post_link($warning['pid'])."#pid{$warning['pid']}"; - eval("\$warning_info = \"".$templates->get("warnings_view_post")."\";"); - } - else - { - eval("\$warning_info = \"".$templates->get("warnings_view_user")."\";"); - } - - $warning['username'] = htmlspecialchars_uni($warning['username']); - $issuedby = build_profile_link($warning['username'], $warning['issuedby']); - $notes = nl2br(htmlspecialchars_uni($warning['notes'])); - - $date_issued = my_date('relative', $warning['dateline']); - if($warning['type_title']) - { - $warning_type = $warning['type_title']; - } - else - { - $warning_type = $warning['title']; - } - $warning_type = htmlspecialchars_uni($warning_type); - if($warning['points'] > 0) - { - $warning['points'] = "+{$warning['points']}"; - } - - $revoked_date = ''; - - $points = $lang->sprintf($lang->warning_points, $warning['points']); - if($warning['expired'] != 1) - { - if($warning['expires'] == 0) - { - $expires = $lang->never; - } - else - { - $expires = my_date($mybb->settings['dateformat'], $warning['expires']) . ", " . my_date($mybb->settings['timeformat'], $warning['expires']); - } - $status = $lang->warning_active; - } - else - { - if($warning['daterevoked']) - { - $expires = $status = $lang->warning_revoked; - } - else if($warning['expires']) - { - $revoked_date = '('.my_date($mybb->settings['dateformat'], $warning['expires']).', '.my_date($mybb->settings['timeformat'], $warning['expires']).')'; - $expires = $status = $lang->already_expired; - } - } - - if(!$warning['daterevoked']) - { - if(!isset($warn_errors)) - { - $warn_errors = ''; - } - eval("\$revoke = \"".$templates->get("warnings_view_revoke")."\";"); - } - else - { - $date_revoked = my_date('relative', $warning['daterevoked']); - $revoked_user = get_user($warning['revokedby']); - if(!$revoked_user['username']) - { - $revoked_user['username'] = $lang->guest; - } - $revoked_user['username'] = htmlspecialchars_uni($revoked_user['username']); - $revoked_by = build_profile_link($revoked_user['username'], $revoked_user['uid']); - $revoke_reason = nl2br(htmlspecialchars_uni($warning['revokereason'])); - eval("\$revoke = \"".$templates->get("warnings_view_revoked")."\";"); - } - - $plugins->run_hooks("warnings_view_end"); - - eval("\$warning = \"".$templates->get("warnings_view")."\";"); - output_page($warning); -} - -// Showing list of warnings for a particular user -if(!$mybb->input['action']) -{ - if($mybb->usergroup['canwarnusers'] != 1) - { - error_no_permission(); - } - - $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); - if(!$user['uid']) - { - error($lang->error_invalid_user); - } - - $group_permissions = user_permissions($user['uid']); - if($group_permissions['canreceivewarnings'] != 1) - { - error($lang->error_cant_warn_group); - } - - $user['username'] = htmlspecialchars_uni($user['username']); - $lang->nav_profile = $lang->sprintf($lang->nav_profile, $user['username']); - add_breadcrumb($lang->nav_profile, get_profile_link($user['uid'])); - add_breadcrumb($lang->nav_warning_log); - - if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) - { - $mybb->settings['postsperpage'] = 20; - } - - // Figure out if we need to display multiple pages. - $perpage = $mybb->settings['postsperpage']; - $page = $mybb->get_input('page', MyBB::INPUT_INT); - - $query = $db->simple_select("warnings", "COUNT(wid) AS warning_count", "uid='{$user['uid']}'"); - $warning_count = $db->fetch_field($query, "warning_count"); - - $pages = ceil($warning_count/$perpage); - - if($page > $pages || $page <= 0) - { - $page = 1; - } - if($page) - { - $start = ($page-1) * $perpage; - } - else - { - $start = 0; - $page = 1; - } - - $multipage = multipage($warning_count, $perpage, $page, "warnings.php?uid={$user['uid']}"); - - if($mybb->settings['maxwarningpoints'] < 1) - { - $mybb->settings['maxwarningpoints'] = 10; - } - - $warning_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100); - if($warning_level > 100) - { - $warning_level = 100; - } - - if($user['warningpoints'] > $mybb->settings['maxwarningpoints']) - { - $user['warningpoints'] = $mybb->settings['maxwarningpoints']; - } - - if($warning_level > 0) - { - $lang->current_warning_level = $lang->sprintf($lang->current_warning_level, $warning_level, $user['warningpoints'], $mybb->settings['maxwarningpoints']); - } - else - { - $lang->current_warning_level = ""; - } - - // Fetch the actual warnings - $query = $db->query(" - SELECT w.*, t.title AS type_title, u.username, p.subject AS post_subject - FROM ".TABLE_PREFIX."warnings w - LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby) - LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=w.pid) - WHERE w.uid='{$user['uid']}' - ORDER BY w.expired ASC, w.dateline DESC - LIMIT {$start}, {$perpage} - "); - $warnings = ''; - while($warning = $db->fetch_array($query)) - { - if(!isset($last_expired) || $warning['expired'] != $last_expired) - { - if($warning['expired'] == 0) - { - eval("\$warnings .= \"".$templates->get("warnings_active_header")."\";"); - } - else - { - eval("\$warnings .= \"".$templates->get("warnings_expired_header")."\";"); - } - } - $last_expired = $warning['expired']; - - $post_link = ''; - if($warning['post_subject']) - { - $warning['post_subject'] = $parser->parse_badwords($warning['post_subject']); - $warning['post_subject'] = htmlspecialchars_uni($warning['post_subject']); - $warning['post_link'] = get_post_link($warning['pid']); - eval("\$post_link = \"".$templates->get("warnings_postlink")."\";"); - } - - $warning['username'] = htmlspecialchars_uni($warning['username']); - $issuedby = build_profile_link($warning['username'], $warning['issuedby']); - $date_issued = my_date('relative', $warning['dateline']); - if($warning['type_title']) - { - $warning_type = $warning['type_title']; - } - else - { - $warning_type = $warning['title']; - } - $warning_type = htmlspecialchars_uni($warning_type); - if($warning['points'] > 0) - { - $warning['points'] = "+{$warning['points']}"; - } - $points = $lang->sprintf($lang->warning_points, $warning['points']); - if($warning['expired'] != 1) - { - if($warning['expires'] == 0) - { - $expires = $lang->never; - } - else - { - $expires = my_date($mybb->settings['dateformat'], $warning['expires']) . ", " . my_date($mybb->settings['timeformat'], $warning['expires']); - } - } - else - { - if($warning['daterevoked']) - { - $expires = $lang->warning_revoked; - } - else if($warning['expires']) - { - $expires = $lang->already_expired; - } - } - $alt_bg = alt_trow(); - $plugins->run_hooks("warnings_warning"); - eval("\$warnings .= \"".$templates->get("warnings_warning")."\";"); - } - - if(!$warnings) - { - eval("\$warnings = \"".$templates->get("warnings_no_warnings")."\";"); - } - - $plugins->run_hooks("warnings_end"); - - eval("\$warnings = \"".$templates->get("warnings")."\";"); - output_page($warnings); -} - diff --git a/html/forums/xmlhttp.php b/html/forums/xmlhttp.php deleted file mode 100644 index d21d26a..0000000 --- a/html/forums/xmlhttp.php +++ /dev/null @@ -1,1087 +0,0 @@ -read("usergroups"); - -if(!is_array($groupscache)) -{ - $cache->update_usergroups(); - $groupscache = $cache->read("usergroups"); -} - -// Send no cache headers -header("Expires: Sat, 1 Jan 2000 01:00:00 GMT"); -header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); -header("Cache-Control: no-cache, must-revalidate"); -header("Pragma: no-cache"); - -// Create the session -require_once MYBB_ROOT."inc/class_session.php"; -$session = new session; -$session->init(); - -// Load the language we'll be using -if(!isset($mybb->settings['bblanguage'])) -{ - $mybb->settings['bblanguage'] = "english"; -} -if(isset($mybb->user['language']) && $lang->language_exists($mybb->user['language'])) -{ - $mybb->settings['bblanguage'] = $mybb->user['language']; -} -$lang->set_language($mybb->settings['bblanguage']); - -if(function_exists('mb_internal_encoding') && !empty($lang->settings['charset'])) -{ - @mb_internal_encoding($lang->settings['charset']); -} - -// Load the theme -// 1. Check cookies -if(!$mybb->user['uid'] && !empty($mybb->cookies['mybbtheme'])) -{ - $mybb->user['style'] = (int)$mybb->cookies['mybbtheme']; -} - -// 2. Load style -if(isset($mybb->user['style']) && (int)$mybb->user['style'] != 0) -{ - $loadstyle = "tid='".(int)$mybb->user['style']."'"; -} -else -{ - $loadstyle = "def='1'"; -} - -// Load basic theme information that we could be needing. -if($loadstyle != "def='1'") -{ - $query = $db->simple_select('themes', 'name, tid, properties, allowedgroups', $loadstyle, array('limit' => 1)); - $theme = $db->fetch_array($query); - - if(isset($theme['tid']) && !is_member($theme['allowedgroups']) && $theme['allowedgroups'] != 'all') - { - if(isset($mybb->cookies['mybbtheme'])) - { - my_unsetcookie('mybbtheme'); - } - - $loadstyle = "def='1'"; - } -} - -if($loadstyle == "def='1'") -{ - if(!$cache->read('default_theme')) - { - $cache->update_default_theme(); - } - - $theme = $cache->read('default_theme'); -} - -// No theme was found - we attempt to load the master or any other theme -if(!isset($theme['tid']) || isset($theme['tid']) && !$theme['tid']) -{ - // Missing theme was from a user, run a query to set any users using the theme to the default - $db->update_query('users', array('style' => 0), "style = '{$mybb->user['style']}'"); - - // Attempt to load the master or any other theme if the master is not available - $query = $db->simple_select('themes', 'name, tid, properties, stylesheets', '', array('order_by' => 'tid', 'limit' => 1)); - $theme = $db->fetch_array($query); -} -$theme = @array_merge($theme, my_unserialize($theme['properties'])); - -// Set the appropriate image language directory for this theme. -// Are we linking to a remote theme server? -if(my_validate_url($theme['imgdir'])) -{ - // If a language directory for the current language exists within the theme - we use it - if(!empty($mybb->user['language'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->user['language']; - } - else - { - // Check if a custom language directory exists for this theme - if(!empty($mybb->settings['bblanguage'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->settings['bblanguage']; - } - // Otherwise, the image language directory is the same as the language directory for the theme - else - { - $theme['imglangdir'] = $theme['imgdir']; - } - } -} -else -{ - $img_directory = $theme['imgdir']; - - if($mybb->settings['usecdn'] && !empty($mybb->settings['cdnpath'])) - { - $img_directory = rtrim($mybb->settings['cdnpath'], '/') . '/' . ltrim($theme['imgdir'], '/'); - } - - if(!@is_dir($img_directory)) - { - $theme['imgdir'] = 'images'; - } - - // If a language directory for the current language exists within the theme - we use it - if(!empty($mybb->user['language']) && is_dir($img_directory.'/'.$mybb->user['language'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->user['language']; - } - else - { - // Check if a custom language directory exists for this theme - if(is_dir($img_directory.'/'.$mybb->settings['bblanguage'])) - { - $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->settings['bblanguage']; - } - // Otherwise, the image language directory is the same as the language directory for the theme - else - { - $theme['imglangdir'] = $theme['imgdir']; - } - } - - $theme['imgdir'] = $mybb->get_asset_url($theme['imgdir']); - $theme['imglangdir'] = $mybb->get_asset_url($theme['imglangdir']); -} - -$templatelist = "postbit_editedby,xmlhttp_buddyselect_online,xmlhttp_buddyselect_offline,xmlhttp_buddyselect"; -$templates->cache($db->escape_string($templatelist)); - -if($lang->settings['charset']) -{ - $charset = $lang->settings['charset']; -} -// If not, revert to UTF-8 -else -{ - $charset = "UTF-8"; -} - -$lang->load("global"); -$lang->load("xmlhttp"); - -$closed_bypass = array("refresh_captcha", "validate_captcha"); - -$mybb->input['action'] = $mybb->get_input('action'); - -$plugins->run_hooks("xmlhttp"); - -// If the board is closed, the user is not an administrator and they're not trying to login, show the board closed message -if($mybb->settings['boardclosed'] == 1 && $mybb->usergroup['canviewboardclosed'] != 1 && !in_array($mybb->input['action'], $closed_bypass)) -{ - // Show error - if(!$mybb->settings['boardclosed_reason']) - { - $mybb->settings['boardclosed_reason'] = $lang->boardclosed_reason; - } - - $lang->error_boardclosed .= "
    {$mybb->settings['boardclosed_reason']}"; - - xmlhttp_error($lang->error_boardclosed); -} - -// Fetch a list of usernames beginning with a certain string (used for auto completion) -if($mybb->input['action'] == "get_users") -{ - $mybb->input['query'] = ltrim($mybb->get_input('query')); - - // If the string is less than 2 characters, quit. - if(my_strlen($mybb->input['query']) < 2) - { - exit; - } - - if($mybb->get_input('getone', MyBB::INPUT_INT) == 1) - { - $limit = 1; - } - else - { - $limit = 15; - } - - // Send our headers. - header("Content-type: application/json; charset={$charset}"); - - // Query for any matching users. - $query_options = array( - "order_by" => "username", - "order_dir" => "asc", - "limit_start" => 0, - "limit" => $limit - ); - - $plugins->run_hooks("xmlhttp_get_users_start"); - - $query = $db->simple_select("users", "uid, username", "username LIKE '".$db->escape_string_like($mybb->input['query'])."%'", $query_options); - if($limit == 1) - { - $user = $db->fetch_array($query); - $data = array('id' => $user['username'], 'text' => $user['username']); - } - else - { - $data = array(); - while($user = $db->fetch_array($query)) - { - $data[] = array('id' => $user['username'], 'text' => $user['username']); - } - } - - $plugins->run_hooks("xmlhttp_get_users_end"); - - echo json_encode($data); - exit; -} -// This action provides editing of thread/post subjects from within their respective list pages. -else if($mybb->input['action'] == "edit_subject" && $mybb->request_method == "post") -{ - // Verify POST request - if(!verify_post_check($mybb->get_input('my_post_key'), true)) - { - xmlhttp_error($lang->invalid_post_code); - } - - // We're editing a thread subject. - if($mybb->get_input('tid', MyBB::INPUT_INT)) - { - // Fetch the thread. - $thread = get_thread($mybb->get_input('tid', MyBB::INPUT_INT)); - if(!$thread) - { - xmlhttp_error($lang->thread_doesnt_exist); - } - - // Fetch some of the information from the first post of this thread. - $query_options = array( - "order_by" => "dateline", - "order_dir" => "asc", - ); - $query = $db->simple_select("posts", "pid,uid,dateline", "tid='".$thread['tid']."'", $query_options); - $post = $db->fetch_array($query); - } - else - { - exit; - } - - // Fetch the specific forum this thread/post is in. - $forum = get_forum($thread['fid']); - - // Missing thread, invalid forum? Error. - if(!$forum || $forum['type'] != "f") - { - xmlhttp_error($lang->thread_doesnt_exist); - } - - // Fetch forum permissions. - $forumpermissions = forum_permissions($forum['fid']); - - $plugins->run_hooks("xmlhttp_edit_subject_start"); - - // If this user is not a moderator with "caneditposts" permissions. - if(!is_moderator($forum['fid'], "caneditposts")) - { - // Thread is closed - no editing allowed. - if($thread['closed'] == 1) - { - xmlhttp_error($lang->thread_closed_edit_subjects); - } - // Forum is not open, user doesn't have permission to edit, or author doesn't match this user - don't allow editing. - else if($forum['open'] == 0 || $forumpermissions['caneditposts'] == 0 || $mybb->user['uid'] != $post['uid'] || $mybb->user['uid'] == 0) - { - xmlhttp_error($lang->no_permission_edit_subject); - } - // If we're past the edit time limit - don't allow editing. - else if($mybb->usergroup['edittimelimit'] != 0 && $post['dateline'] < (TIME_NOW-($mybb->usergroup['edittimelimit']*60))) - { - $lang->edit_time_limit = $lang->sprintf($lang->edit_time_limit, $mybb->usergroup['edittimelimit']); - xmlhttp_error($lang->edit_time_limit); - } - $ismod = false; - } - else - { - $ismod = true; - } - $subject = $mybb->get_input('value'); - if(my_strtolower($charset) != "utf-8") - { - if(function_exists("iconv")) - { - $subject = iconv($charset, "UTF-8//IGNORE", $subject); - } - else if(function_exists("mb_convert_encoding")) - { - $subject = @mb_convert_encoding($subject, $charset, "UTF-8"); - } - else if(my_strtolower($charset) == "iso-8859-1") - { - $subject = utf8_decode($subject); - } - } - - // Only edit subject if subject has actually been changed - if($thread['subject'] != $subject) - { - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("update"); - $posthandler->action = "post"; - - // Set the post data that came from the input to the $post array. - $updatepost = array( - "pid" => $post['pid'], - "tid" => $thread['tid'], - "prefix" => $thread['prefix'], - "subject" => $subject, - "edit_uid" => $mybb->user['uid'] - ); - $posthandler->set_data($updatepost); - - // Now let the post handler do all the hard work. - if(!$posthandler->validate_post()) - { - $post_errors = $posthandler->get_friendly_errors(); - xmlhttp_error($post_errors); - } - // No errors were found, we can call the update method. - else - { - $posthandler->update_post(); - if($ismod == true) - { - $modlogdata = array( - "tid" => $thread['tid'], - "fid" => $forum['fid'] - ); - log_moderator_action($modlogdata, $lang->edited_post); - } - } - } - - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - - // Send our headers. - header("Content-type: application/json; charset={$charset}"); - - $plugins->run_hooks("xmlhttp_edit_subject_end"); - - $mybb->input['value'] = $parser->parse_badwords($mybb->get_input('value')); - - // Spit the subject back to the browser. - $subject = substr($mybb->input['value'], 0, 120); // 120 is the varchar length for the subject column - echo json_encode(array("subject" => ''.htmlspecialchars_uni($subject).'')); - - // Close the connection. - exit; -} -else if($mybb->input['action'] == "edit_post") -{ - // Fetch the post from the database. - $post = get_post($mybb->get_input('pid', MyBB::INPUT_INT)); - - // No result, die. - if(!$post) - { - xmlhttp_error($lang->post_doesnt_exist); - } - - // Fetch the thread associated with this post. - $thread = get_thread($post['tid']); - - // Fetch the specific forum this thread/post is in. - $forum = get_forum($thread['fid']); - - // Missing thread, invalid forum? Error. - if(!$thread || !$forum || $forum['type'] != "f") - { - xmlhttp_error($lang->thread_doesnt_exist); - } - - // Check if this forum is password protected and we have a valid password - if(check_forum_password($forum['fid'], 0, true)) - { - xmlhttp_error($lang->wrong_forum_password); - } - - // Fetch forum permissions. - $forumpermissions = forum_permissions($forum['fid']); - - $plugins->run_hooks("xmlhttp_edit_post_start"); - - // If this user is not a moderator with "caneditposts" permissions. - if(!is_moderator($forum['fid'], "caneditposts")) - { - // Thread is closed - no editing allowed. - if($thread['closed'] == 1) - { - xmlhttp_error($lang->thread_closed_edit_message); - } - // Forum is not open, user doesn't have permission to edit, or author doesn't match this user - don't allow editing. - else if($forum['open'] == 0 || $forumpermissions['caneditposts'] == 0 || $mybb->user['uid'] != $post['uid'] || $mybb->user['uid'] == 0 || $mybb->user['suspendposting'] == 1) - { - xmlhttp_error($lang->no_permission_edit_post); - } - // If we're past the edit time limit - don't allow editing. - else if($mybb->usergroup['edittimelimit'] != 0 && $post['dateline'] < (TIME_NOW-($mybb->usergroup['edittimelimit']*60))) - { - $lang->edit_time_limit = $lang->sprintf($lang->edit_time_limit, $mybb->usergroup['edittimelimit']); - xmlhttp_error($lang->edit_time_limit); - } - // User can't edit unapproved post - if($post['visible'] == 0) - { - xmlhttp_error($lang->post_moderation); - } - } - - $plugins->run_hooks("xmlhttp_edit_post_end"); - - if($mybb->get_input('do') == "get_post") - { - // Send our headers. - header("Content-type: application/json; charset={$charset}"); - - // Send the contents of the post. - echo json_encode($post['message']); - exit; - } - else if($mybb->get_input('do') == "update_post") - { - // Verify POST request - if(!verify_post_check($mybb->get_input('my_post_key'), true)) - { - xmlhttp_error($lang->invalid_post_code); - } - - $message = $mybb->get_input('value'); - $editreason = $mybb->get_input('editreason'); - if(my_strtolower($charset) != "utf-8") - { - if(function_exists("iconv")) - { - $message = iconv($charset, "UTF-8//IGNORE", $message); - $editreason = iconv($charset, "UTF-8//IGNORE", $editreason); - } - else if(function_exists("mb_convert_encoding")) - { - $message = @mb_convert_encoding($message, $charset, "UTF-8"); - $editreason = @mb_convert_encoding($editreason, $charset, "UTF-8"); - } - else if(my_strtolower($charset) == "iso-8859-1") - { - $message = utf8_decode($message); - $editreason = utf8_decode($editreason); - } - } - - // Set up posthandler. - require_once MYBB_ROOT."inc/datahandlers/post.php"; - $posthandler = new PostDataHandler("update"); - $posthandler->action = "post"; - - // Set the post data that came from the input to the $post array. - $updatepost = array( - "pid" => $post['pid'], - "message" => $message, - "editreason" => $editreason, - "edit_uid" => $mybb->user['uid'] - ); - - // If this is the first post set the prefix. If a forum requires a prefix the quick edit would throw an error otherwise - if($post['pid'] == $thread['firstpost']) - { - $updatepost['prefix'] = $thread['prefix']; - } - - $posthandler->set_data($updatepost); - - // Now let the post handler do all the hard work. - if(!$posthandler->validate_post()) - { - $post_errors = $posthandler->get_friendly_errors(); - xmlhttp_error($post_errors); - } - // No errors were found, we can call the update method. - else - { - $postinfo = $posthandler->update_post(); - $visible = $postinfo['visible']; - if($visible == 0 && !is_moderator($post['fid'], "canviewunapprove")) - { - // Is it the first post? - if($thread['firstpost'] == $post['pid']) - { - echo json_encode(array("moderation_thread" => $lang->thread_moderation, 'url' => $mybb->settings['bburl'].'/'.get_forum_link($thread['fid']), "message" => $post['message'])); - exit; - } - else - { - echo json_encode(array("moderation_post" => $lang->post_moderation, 'url' => $mybb->settings['bburl'].'/'.get_thread_link($thread['tid']), "message" => $post['message'])); - exit; - } - } - } - - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - - $parser_options = array( - "allow_html" => $forum['allowhtml'], - "allow_mycode" => $forum['allowmycode'], - "allow_smilies" => $forum['allowsmilies'], - "allow_imgcode" => $forum['allowimgcode'], - "allow_videocode" => $forum['allowvideocode'], - "me_username" => $post['username'], - "filter_badwords" => 1 - ); - - $post['username'] = htmlspecialchars_uni($post['username']); - - if($post['smilieoff'] == 1) - { - $parser_options['allow_smilies'] = 0; - } - - if($mybb->user['showimages'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_imgcode'] = 0; - } - - if($mybb->user['showvideos'] != 1 && $mybb->user['uid'] != 0 || $mybb->settings['guestvideos'] != 1 && $mybb->user['uid'] == 0) - { - $parser_options['allow_videocode'] = 0; - } - - $post['message'] = $parser->parse_message($message, $parser_options); - - // Now lets fetch all of the attachments for these posts. - if($mybb->settings['enableattachments'] != 0) - { - $query = $db->simple_select("attachments", "*", "pid='{$post['pid']}'"); - while($attachment = $db->fetch_array($query)) - { - $attachcache[$attachment['pid']][$attachment['aid']] = $attachment; - } - - require_once MYBB_ROOT."inc/functions_post.php"; - - get_post_attachments($post['pid'], $post); - } - - // Figure out if we need to show an "edited by" message - // Only show if at least one of "showeditedby" or "showeditedbyadmin" is enabled - if($mybb->settings['showeditedby'] != 0 && $mybb->settings['showeditedbyadmin'] != 0) - { - $post['editdate'] = my_date('relative', TIME_NOW); - $post['editnote'] = $lang->sprintf($lang->postbit_edited, $post['editdate']); - $mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); - $post['editedprofilelink'] = build_profile_link($mybb->user['username'], $mybb->user['uid']); - $post['editreason'] = trim($editreason); - $editreason = ""; - if($post['editreason'] != "") - { - $post['editreason'] = $parser->parse_badwords($post['editreason']); - $post['editreason'] = htmlspecialchars_uni($post['editreason']); - eval("\$editreason = \"".$templates->get("postbit_editedby_editreason")."\";"); - } - eval("\$editedmsg = \"".$templates->get("postbit_editedby")."\";"); - } - - // Send our headers. - header("Content-type: application/json; charset={$charset}"); - - $editedmsg_response = null; - if($editedmsg) - { - $editedmsg_response = str_replace(array("\r", "\n"), "", $editedmsg); - } - - $plugins->run_hooks("xmlhttp_update_post"); - - echo json_encode(array("message" => $post['message']."\n", "editedmsg" => $editedmsg_response)); - exit; - } -} -// Fetch the list of multiquoted posts which are not in a specific thread -else if($mybb->input['action'] == "get_multiquoted") -{ - // If the cookie does not exist, exit - if(!array_key_exists("multiquote", $mybb->cookies)) - { - exit; - } - // Divide up the cookie using our delimeter - $multiquoted = explode("|", $mybb->cookies['multiquote']); - - $plugins->run_hooks("xmlhttp_get_multiquoted_start"); - - // No values - exit - if(!is_array($multiquoted)) - { - exit; - } - - // Loop through each post ID and sanitize it before querying - foreach($multiquoted as $post) - { - $quoted_posts[$post] = (int)$post; - } - - // Join the post IDs back together - $quoted_posts = implode(",", $quoted_posts); - - // Fetch unviewable forums - $unviewable_forums = get_unviewable_forums(); - $inactiveforums = get_inactive_forums(); - if($unviewable_forums) - { - $unviewable_forums = "AND t.fid NOT IN ({$unviewable_forums})"; - } - if($inactiveforums) - { - $inactiveforums = "AND t.fid NOT IN ({$inactiveforums})"; - } - - // Check group permissions if we can't view threads not started by us - $group_permissions = forum_permissions(); - $onlyusfids = array(); - foreach($group_permissions as $gpfid => $forum_permissions) - { - if(isset($forum_permissions['canonlyviewownthreads']) && $forum_permissions['canonlyviewownthreads'] == 1) - { - $onlyusfids[] = $gpfid; - } - } - - $message = ''; - - // Are we loading all quoted posts or only those not in the current thread? - if(empty($mybb->input['load_all'])) - { - $from_tid = "p.tid != '".$mybb->get_input('tid', MyBB::INPUT_INT)."' AND "; - } - else - { - $from_tid = ''; - } - - require_once MYBB_ROOT."inc/class_parser.php"; - $parser = new postParser; - - require_once MYBB_ROOT."inc/functions_posting.php"; - - $plugins->run_hooks("xmlhttp_get_multiquoted_intermediate"); - - // Query for any posts in the list which are not within the specified thread - $query = $db->query(" - SELECT p.subject, p.message, p.pid, p.tid, p.username, p.dateline, t.fid, t.uid AS thread_uid, p.visible, u.username AS userusername - FROM ".TABLE_PREFIX."posts p - LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) - LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid) - WHERE {$from_tid}p.pid IN ({$quoted_posts}) {$unviewable_forums} {$inactiveforums} - ORDER BY p.dateline - "); - while($quoted_post = $db->fetch_array($query)) - { - if( - (!is_moderator($quoted_post['fid'], "canviewunapprove") && $quoted_post['visible'] == 0) || - (!is_moderator($quoted_post['fid'], "canviewdeleted") && $quoted_post['visible'] == -1) || - (in_array($quoted_post['fid'], $onlyusfids) && (!$mybb->user['uid'] || $quoted_post['thread_uid'] != $mybb->user['uid'])) - ) - { - continue; - } - - $message .= parse_quoted_message($quoted_post, false); - } - if($mybb->settings['maxquotedepth'] != '0') - { - $message = remove_message_quotes($message); - } - - // Send our headers. - header("Content-type: application/json; charset={$charset}"); - - $plugins->run_hooks("xmlhttp_get_multiquoted_end"); - - echo json_encode(array("message" => $message)); - exit; -} -else if($mybb->input['action'] == "refresh_captcha") -{ - $imagehash = $db->escape_string($mybb->get_input('imagehash')); - $query = $db->simple_select("captcha", "dateline", "imagehash='$imagehash'"); - if($db->num_rows($query) == 0) - { - xmlhttp_error($lang->captcha_not_exists); - } - $db->delete_query("captcha", "imagehash='$imagehash'"); - $randomstr = random_str(5); - $imagehash = md5(random_str(12)); - $regimagearray = array( - "imagehash" => $imagehash, - "imagestring" => $randomstr, - "dateline" => TIME_NOW - ); - - $plugins->run_hooks("xmlhttp_refresh_captcha"); - - $db->insert_query("captcha", $regimagearray); - header("Content-type: application/json; charset={$charset}"); - echo json_encode(array("imagehash" => $imagehash)); - exit; -} -else if($mybb->input['action'] == "validate_captcha") -{ - header("Content-type: application/json; charset={$charset}"); - $imagehash = $db->escape_string($mybb->get_input('imagehash')); - $query = $db->simple_select("captcha", "imagestring", "imagehash='$imagehash'"); - if($db->num_rows($query) == 0) - { - echo json_encode($lang->captcha_valid_not_exists); - exit; - } - $imagestring = $db->fetch_field($query, 'imagestring'); - - $plugins->run_hooks("xmlhttp_validate_captcha"); - - if(my_strtolower($imagestring) == my_strtolower($mybb->get_input('imagestring'))) - { - //echo json_encode(array("success" => $lang->captcha_matches)); - echo json_encode("true"); - exit; - } - else - { - echo json_encode($lang->captcha_does_not_match); - exit; - } -} -else if($mybb->input['action'] == "refresh_question" && $mybb->settings['securityquestion']) -{ - header("Content-type: application/json; charset={$charset}"); - - $sid = $db->escape_string($mybb->get_input('question_id')); - $query = $db->query(" - SELECT q.qid, s.sid - FROM ".TABLE_PREFIX."questionsessions s - LEFT JOIN ".TABLE_PREFIX."questions q ON (q.qid=s.qid) - WHERE q.active='1' AND s.sid='{$sid}' - "); - - if($db->num_rows($query) == 0) - { - xmlhttp_error($lang->answer_valid_not_exists); - } - - $qsession = $db->fetch_array($query); - - // Delete previous question session - $db->delete_query("questionsessions", "sid='$sid'"); - - require_once MYBB_ROOT."inc/functions_user.php"; - - $sid = generate_question($qsession['qid']); - $query = $db->query(" - SELECT q.question, s.sid - FROM ".TABLE_PREFIX."questionsessions s - LEFT JOIN ".TABLE_PREFIX."questions q ON (q.qid=s.qid) - WHERE q.active='1' AND s.sid='{$sid}' AND q.qid!='{$qsession['qid']}' - "); - - $plugins->run_hooks("xmlhttp_refresh_question"); - - if($db->num_rows($query) > 0) - { - $question = $db->fetch_array($query); - - echo json_encode(array("question" => htmlspecialchars_uni($question['question']), 'sid' => htmlspecialchars_uni($question['sid']))); - exit; - } - else - { - xmlhttp_error($lang->answer_valid_not_exists); - } -} -elseif($mybb->input['action'] == "validate_question" && $mybb->settings['securityquestion']) -{ - header("Content-type: application/json; charset={$charset}"); - $sid = $db->escape_string($mybb->get_input('question')); - $answer = $db->escape_string($mybb->get_input('answer')); - - $query = $db->query(" - SELECT q.*, s.sid - FROM ".TABLE_PREFIX."questionsessions s - LEFT JOIN ".TABLE_PREFIX."questions q ON (q.qid=s.qid) - WHERE q.active='1' AND s.sid='{$sid}' - "); - - if($db->num_rows($query) == 0) - { - echo json_encode($lang->answer_valid_not_exists); - exit; - } - else - { - $question = $db->fetch_array($query); - $valid_answers = preg_split("/\r\n|\n|\r/", $question['answer']); - $validated = 0; - - foreach($valid_answers as $answers) - { - if(my_strtolower($answers) == my_strtolower($answer)) - { - $validated = 1; - } - } - - $plugins->run_hooks("xmlhttp_validate_question"); - - if($validated != 1) - { - echo json_encode($lang->answer_does_not_match); - exit; - } - else - { - echo json_encode("true"); - exit; - } - } - - exit; -} -else if($mybb->input['action'] == "complex_password") -{ - $password = trim($mybb->get_input('password')); - $password = str_replace(array(unichr(160), unichr(173), unichr(0xCA), dec_to_utf8(8238), dec_to_utf8(8237), dec_to_utf8(8203)), array(" ", "-", "", "", "", ""), $password); - - header("Content-type: application/json; charset={$charset}"); - - $plugins->run_hooks("xmlhttp_complex_password"); - - if(!preg_match("/^.*(?=.{".$mybb->settings['minpasswordlength'].",})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $password)) - { - echo json_encode($lang->complex_password_fails); - } - else - { - // Return nothing but an OK password if passes regex - echo json_encode("true"); - } - - exit; -} -else if($mybb->input['action'] == "username_availability") -{ - if(!verify_post_check($mybb->get_input('my_post_key'), true)) - { - xmlhttp_error($lang->invalid_post_code); - } - - require_once MYBB_ROOT."inc/functions_user.php"; - $username = $mybb->get_input('username'); - - // Fix bad characters - $username = trim_blank_chrs($username); - $username = str_replace(array(unichr(160), unichr(173), unichr(0xCA), dec_to_utf8(8238), dec_to_utf8(8237), dec_to_utf8(8203)), array(" ", "-", "", "", "", ""), $username); - - // Remove multiple spaces from the username - $username = preg_replace("#\s{2,}#", " ", $username); - - header("Content-type: application/json; charset={$charset}"); - - if(empty($username)) - { - echo json_encode($lang->banned_characters_username); - exit; - } - - // Check if the username belongs to the list of banned usernames. - $banned_username = is_banned_username($username, true); - if($banned_username) - { - echo json_encode($lang->banned_username); - exit; - } - - // Check for certain characters in username (<, >, &, and slashes) - if(strpos($username, "<") !== false || strpos($username, ">") !== false || strpos($username, "&") !== false || my_strpos($username, "\\") !== false || strpos($username, ";") !== false || strpos($username, ",") !== false || !validate_utf8_string($username, false, false)) - { - echo json_encode($lang->banned_characters_username); - exit; - } - - // Check if the username is actually already in use - $user = get_user_by_username($username); - - $plugins->run_hooks("xmlhttp_username_availability"); - - if($user['uid']) - { - $lang->username_taken = $lang->sprintf($lang->username_taken, htmlspecialchars_uni($username)); - echo json_encode($lang->username_taken); - exit; - } - else - { - //$lang->username_available = $lang->sprintf($lang->username_available, htmlspecialchars_uni($username)); - echo json_encode("true"); - exit; - } -} -else if($mybb->input['action'] == "username_exists") -{ - if(!verify_post_check($mybb->get_input('my_post_key'), true)) - { - xmlhttp_error($lang->invalid_post_code); - } - - require_once MYBB_ROOT."inc/functions_user.php"; - $username = $mybb->get_input('value'); - - header("Content-type: application/json; charset={$charset}"); - - if(!trim($username)) - { - echo json_encode(array("success" => 1)); - exit; - } - - // Check if the username actually exists - $user = get_user_by_username($username); - - $plugins->run_hooks("xmlhttp_username_exists"); - - if($user['uid']) - { - $lang->valid_username = $lang->sprintf($lang->valid_username, htmlspecialchars_uni($username)); - echo json_encode(array("success" => $lang->valid_username)); - exit; - } - else - { - $lang->invalid_username = $lang->sprintf($lang->invalid_username, htmlspecialchars_uni($username)); - echo json_encode($lang->invalid_username); - exit; - } -} -else if($mybb->input['action'] == "get_buddyselect") -{ - // Send our headers. - header("Content-type: text/plain; charset={$charset}"); - - if($mybb->user['buddylist'] != "") - { - $query_options = array( - "order_by" => "username", - "order_dir" => "asc" - ); - - $plugins->run_hooks("xmlhttp_get_buddyselect_start"); - - $timecut = TIME_NOW - $mybb->settings['wolcutoff']; - $query = $db->simple_select("users", "uid, username, usergroup, displaygroup, lastactive, lastvisit, invisible", "uid IN ({$mybb->user['buddylist']})", $query_options); - $online = array(); - $offline = array(); - while($buddy = $db->fetch_array($query)) - { - $buddy['username'] = htmlspecialchars_uni($buddy['username']); - $buddy_name = format_name($buddy['username'], $buddy['usergroup'], $buddy['displaygroup']); - $profile_link = build_profile_link($buddy_name, $buddy['uid'], '_blank'); - if($buddy['lastactive'] > $timecut && ($buddy['invisible'] == 0 || $mybb->user['usergroup'] == 4) && $buddy['lastvisit'] != $buddy['lastactive']) - { - eval("\$online[] = \"".$templates->get("xmlhttp_buddyselect_online")."\";"); - } - else - { - eval("\$offline[] = \"".$templates->get("xmlhttp_buddyselect_offline")."\";"); - } - } - $online = implode("", $online); - $offline = implode("", $offline); - - $plugins->run_hooks("xmlhttp_get_buddyselect_end"); - - eval("\$buddy_select = \"".$templates->get("xmlhttp_buddyselect")."\";"); - echo $buddy_select; - } - else - { - xmlhttp_error($lang->buddylist_error); - } -} - -/** - * Spits an XML Http based error message back to the browser - * - * @param string $message The message to send back. - */ -function xmlhttp_error($message) -{ - global $charset; - - // Send our headers. - header("Content-type: application/json; charset={$charset}"); - - // Do we have an array of messages? - if(is_array($message)) - { - $response = array(); - foreach($message as $error) - { - $response[] = $error; - } - - // Send the error messages. - echo json_encode(array("errors" => array($response))); - - exit; - } - - // Just a single error? Send it along. - echo json_encode(array("errors" => array($message))); - - exit; -} diff --git a/html/images/darth_vader-lightsaber-star_wars.jpg b/html/images/darth_vader-lightsaber-star_wars.jpg deleted file mode 100644 index 03e0046ed40bb65e46d1a73a2ad2439a8f09d920..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601074 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

    fFsk6x%@F&dO_8+O@7l?w37P9 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˴aBS=ls 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

      6V^(9dlU(@aImSHCLwpjY8Obdf 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 mNY+-~;5ze@k9x-qh?HwNH@@cB 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

      0dWQ<^r9Sn=$)0#r=0g2*U-PiAfRO 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 diff --git a/html/index.orig b/html/index.orig deleted file mode 100644 index 766401d..0000000 --- a/html/index.orig +++ /dev/null @@ -1,368 +0,0 @@ - - - - - - Apache2 Debian Default Page: It works - - - -

      - - -
      - - -
      -
      - It works! -
      -
      -

      - This is the default welcome page used to test the correct - operation of the Apache2 server after installation on Debian systems. - If you can read this page, it means that the Apache HTTP server installed at - this site is working properly. You should replace this file (located at - /var/www/html/index.html) before continuing to operate your HTTP server. -

      - - -

      - If you are a normal user of this web site and don't know what this page is - about, this probably means that the site is currently unavailable due to - maintenance. - If the problem persists, please contact the site's administrator. -

      - -
      -
      -
      - Configuration Overview -
      -
      -

      - Debian's Apache2 default configuration is different from the - upstream default configuration, and split into several files optimized for - interaction with Debian tools. The configuration system is - fully documented in - /usr/share/doc/apache2/README.Debian.gz. Refer to this for the full - documentation. Documentation for the web server itself can be - found by accessing the manual if the apache2-doc - package was installed on this server. - -

      -

      - The configuration layout for an Apache2 web server installation on Debian systems is as follows: -

      -
      -/etc/apache2/
      -|-- apache2.conf
      -|       `--  ports.conf
      -|-- mods-enabled
      -|       |-- *.load
      -|       `-- *.conf
      -|-- conf-enabled
      -|       `-- *.conf
      -|-- sites-enabled
      -|       `-- *.conf
      -          
      -
        -
      • - apache2.conf is the main configuration - file. It puts the pieces together by including all remaining configuration - files when starting up the web server. -
      • - -
      • - ports.conf is always included from the - main configuration file. It is used to determine the listening ports for - incoming connections, and this file can be customized anytime. -
      • - -
      • - Configuration files in the mods-enabled/, - conf-enabled/ and sites-enabled/ directories contain - particular configuration snippets which manage modules, global configuration - fragments, or virtual host configurations, respectively. -
      • - -
      • - They are activated by symlinking available - configuration files from their respective - *-available/ counterparts. These should be managed - by using our helpers - - a2enmod, - a2dismod, - - - a2ensite, - a2dissite, - - and - - a2enconf, - a2disconf - . See their respective man pages for detailed information. -
      • - -
      • - The binary is called apache2. Due to the use of - environment variables, in the default configuration, apache2 needs to be - started/stopped with /etc/init.d/apache2 or apache2ctl. - Calling /usr/bin/apache2 directly will not work with the - default configuration. -
      • -
      -
      - -
      -
      - Document Roots -
      - -
      -

      - By default, Debian does not allow access through the web browser to - any file apart of those located in /var/www, - public_html - directories (when enabled) and /usr/share (for web - applications). If your site is using a web document root - located elsewhere (such as in /srv) you may need to whitelist your - document root directory in /etc/apache2/apache2.conf. -

      -

      - The default Debian document root is /var/www/html. You - can make your own virtual hosts under /var/www. This is different - to previous releases which provides better security out of the box. -

      -
      - -
      -
      - Reporting Problems -
      -
      -

      - Please use the reportbug tool to report bugs in the - Apache2 package with Debian. However, check existing bug reports before reporting a new bug. -

      -

      - Please report bugs specific to modules (such as PHP and others) - to respective packages, not to the web server itself. -

      -
      - - - - -
      -
      -
      -
      - - - diff --git a/html/index.php b/html/index.php deleted file mode 100644 index da84142..0000000 --- a/html/index.php +++ /dev/null @@ -1,175 +0,0 @@ - - - - -SWG Source Server Main Page - - - - - - - - -
      - -
      - - - - -

      WELCOME

      -

      to

      -

      SWG Source Server v1.2

      -

      This is the Login frontend for your NGE server

      -

      Click below to Create a New Account

      -

      Register an Account

      -
      - - -
      -

      -

      -

      -
      - -
      - -
      - -
      -

      Server Status

      -
      - - Login Server: "; - echo $login ? "Online" : "Offline

      "; - echo "

      Game Server: "; - echo $game ? "Online" : "Offline

      "; - ?> - - - -
      -
      '.mysql_error() ); -//connects to Database - $db_select = mysql_select_db( mySQL_database, $db_link ) - or die( 'Error connecting to Database

      '.mysql_error() ); -//selects desired table - $chars= mysql_query("SELECT `online` FROM `characters` where `online`=1"); -//tells how much rows are there (will come helpfull with while loops) - $rows = mysql_num_rows($chars); - echo "

      Online Players:

      ".$rows.""; //prints out the $x number of players online -?> -
      - - - diff --git a/html/music/Star Wars Main Theme.mp3 b/html/music/Star Wars Main Theme.mp3 deleted file mode 100644 index 7202b00f29d2772938fd1393509e6f0da0d73b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8427310 zcmeFZWl-DS_wO5m1$QkH+}+(hxVyW%mE!L16fa(^6ff>joKmc4vEsBqfgC#j-<)&L z|K2nAe&;)LA9YP0B$=K4+4IgTYp=ET$_M(;1OfcDzY6^SrU3Mz$tf8JfN=o;*uPv9 z1OT9c0RWhnNBPUkm#5qz0010BLRp53RX~81=jF}6_E&*_p#b!u#c2ieFLD1u!oMH= zXA1m9?w{%Pcl5tj;4gCjTEf2*{4)jqBKObq`aAkxEASV&e=XtP3I3S^f06rVdi@>! zuNC-<+`pFa?*#u$fxpQ8Grj(f{?`ipMebiq_;-STrodn1{+V8XNB?UD{v!9UCHy%ATL+z=%N;T$ci@)*pRn3&X)uCCq!dFryaTS>0U$dpuFFBT*H zVz6#!-&{xx0AL^-CZ<$qJUYTRi}jaRFU@zDAub5a{I5de|8(Mo0D&MkK6IA8jXAiN zvC{ZwFZMFC+Q;=H=)Ff#!BuR>%K9La*1}89;)$ha@Ew7Y(|q-8Li`~+A)8-H_j}O{B{6G*CC0Vi+LRhQ=mIx-b>gQ6 zHZ}!!&GpWZSrsJA6jD1+BZ#;dvr!XXQN)J7z9KUA&Wto7x*jdb_TXsrB(Y@GgQ^ri zM`x(Wu1zR>EVkZ`7%3&|dw$wl5%*I4RB*4=+Gr9E3VO8|w-CScA@bht{JO2jj&}G) z(ydvD-vpA`vp6hwoE6LrW_;{8Xo6HaVlEV1w}YQRrNP{~;{`uSAxei!z+bBp2qMr= zw?j!KBH@*nRXf6>Z!ch%)kpbKsNrEw1T&}Bn8GV=w1X=vH?$LWn2;}Ckmor|MX!z7 zn4%-@ZDTUDqM)0Gl|ey9PE7}9b&JT+lV_r@RdK;e$aRMC3`=$AFHR^~lvgICrs9u0 zz^cGE*|S5*l6*&`zH>!yD3JNsCtepKGfbTd`Sq>(XMSkW%7fz4V(cNy0Q-b5T(_s=bH45F26pZBQg~&mPNl>MNZga zAWB^jY5U@2ExLM`yPY7?Rbh9aT(bWPT*>wdbDfd0+b45J1ebDW#ZAxJTH@MQlK8B- zv7Zbp%-u61It+e~#(uo&xKD=s8lSm}ArUap)Wj9HOR8S%;VB6x#V4e=)EVH-uo#e1 zMFKmYi^GZek?t4o*^e(>ZDWvu=M>4^bjRM{MX28tgNlulf{L|*h$rbMPjGmbjcs09 z7@6L6=KX_JM)Vd&P-YY6@%mX1v1kiqptAYPkk6&?i05cYbN+laTA+hYcH2#K__@Wx zo~V)FwWik^%Y>H9Z_&3o2Ei$)WSqs+5ik-G)SyAL9J5rQyR&b@{&b={`j1K9fIv?; zIFd0Fy?PXSGk#2X6p~1S+6gBd%0ApYO6c&v%U;c=pWdqMife`xFzdN?uE=$ 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

      F14GI4ub>SjLJ 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%0D`U2$yyu0>Y;4gm??BiNEw}5&{yt1=@PLr^So9 z>1MFfESE+iLT1pURw!}m3YE(cVMt^No}a^a3xko82zg>v0w@Z~qkz?|rn)+L^!t8V zTtjK03wWheSy-VL(6I@JxZ%CjuhwLs7%`v|9%r>7ZRYMk6chrvC&j8sH7UzT9=&r| ze8>47w}q2+*c;$NaNxXnlX!pj!*nFFvd}ZTzrDn`i(Cr%x)W+GlEJYrK#dNXs->;o z{FZJZd8t=-ZC^~SQo*Sv; zArUcoLQeC4Zd^Hol>8V&7;uY}J8{Rg5h7k{RAe^CO(gsA`*20#1fJ#C?dt(uJ&0?s zO10V}tq7HRV5=e?^J62s3vfADT#RB%Zh}S6l;x@Uz~p}4nr;g+*#B*y82&cOCZ>Oo zr^la74gF@4a4Ny1H(~0dWi|odXU?Fc*sJ)CH-wj^qq4t5eJWTH=aoAnAsX;(-*Bxqc5oV{I11V5SbLCK%@CQ;1H3@YQU%BV|JwY1uB#W-zrHw zY}#*lZTi^mx65_gM!w3K&mVbzJJc!oqFAM7Ggkx1GPD{c-t;j-mBv2mtax@ zs*yq6sTNfs&#T89gn80twEts{B9#C_IMfzS>v2r2^(=OcIE_4Fw>0 zG9Nr9HH|N2pPWonxUO$s3*+C0`Tq@a4YL4bwcFl}6XlraS3Ihs?l}n4v|Lg5pJt$P z0{h1U9V`d{Ko?*#1Ywv@jo75*1nWAQ{n`K>_F-65O76Dh>D}V{E@~_;Hy)7Qa4jZY zedvJh&vfqCJC}y!ZY|aahQ=RyvLV}(%%I*khxe$EhIY4yn9(Vu{YMHj`%Bb8zb+QI zTF#!hofBLsv>zEi^x@X;V;K`Fp;E^9xP$4p-{h&A!LqzQHlEm6Q|&B$Aa_sXB_E@; zTLesnU)wM4Ne+9*C=wWO<-y$mf(M%OA#lSZ*!DYqQ^Nyqt8T)pU*`# zq0tQk`hT8xIX-l&KA^4;Ce(7(Wrg>|pr!M``bg}H5)^l@B4xSctefx~QJH_l78M=G zetF%!I&)g$dC_NCgqZo7_vvNRu*k)?9oOb=HX-;r)_)fw(*#o7Ed>sN!KsKW?2igJ zBkk(Rc^U-Ze1mD4gsc66)KZdihz@DoiW<};k9??f0{k_68qXYagK{VGnIXB5k2(A< zfj`gL@nv`m#M|-etQT`&J1!WqDLES)Vg}$j|#$5n^&hvTccD zes$uKI!LZjdP`c;pAJ*o9=dSveYPJE^_lRnu8_ z3^s=o_AkABYAx=#&U@uwZJBiF!^^d@gC*uMs(Tx{FEsQ!3iWs=o{Q=ZW)y) zC!KO!l@T2z3ykO!uMIA$(z|G(Kh#r7RNB^a5bt&@bG8-D*h_R&*4<7vlp*F^UN?BB z*a!Rcqg8gdfHwQfLSKzMK;%I}aPeq82VR^=U^r zdF{B~j%nec^T?#aKdcb}qi+H0y_V~jGp1t_iq8TppQm4+JAUu}aJr5bUCb>JXjNq=&;L&lnirW$!k+0mI-jsr8^!8vRg#awgEdUEYr%O*wyB`%;XRFwPchaUV z*EZP|*16MD5>^?i7P(KOMHMx(CZ9-?3F+0I-gg#G&Q$WT1zMR}@R7 zU)7T&*!KgwLY^|#!qTkJRy|>%9Hx(oi=Tc>J>QFy3LgsU={;T&L)}BJJ~jSpmbrB8 z+N%+Xsi{|~{M|lW-}6=?N*y%FbK&5GpDN=G<5$V`pCkLNVVM`Wxjwro04UlnAh1Y4 z8^<@-gT_TrSI);*yTbRyoqMEL0`0^ z!wm0MO34rw>D#!AHx6O_I>+zYkTpAyT}+~@jb4}TcF~CB59xN`JD*-X>B~mm)W!7N zvR7|$G5F|+>L(6oMQ2d)az3Db>S!~k_%_FOG1kI^qc>z{F0{`Rdfj>rX=d?dWd^go z^wu)=6YTVqmh+5mQ6?)$Yv|jhn4T#i@n^r@H}vxphQ38r^Nod`NQ*ou^a!bIUc7U1 zG+LNY_&V@gVWO9er^ZpMlG3rtQ)tTv430q{r-4C|00G|OIAH^vrQZ2qkM!NTrT^s- zoW-`>hoL^O;(*_uHI%s0v>d^sB`ZHnBGr5Qs4l0dSj3kG$S!5BE&7cao}4I|E1sHqB32+*-WtrtqB z$-T2PiM*Kq_z}d}>wC6~1h8{=zCZoI;pWf3lk-WJ#MN;Ci3wXQgnul!nLPk=hvSHSl(08mmUHG^$fkc% zkhG-mZjn>mL0gyicP5nLWv!R2wM(2dwpXz^7qyxg1YXpO>91nG#Wqc9SQ#lmKuH{Q zdafB$Ld=4(P>7dxdZ7~vBa~yr1u4+x1z1_Z4W+A6$_W5f|k!!D8 z|Jb4hDa(e>{{wOV56f{g0cc0CCiZ5u_h6|en%VBhr5snpF>)P!afUUGg9WmV^pyLu zusG^8wmq3NUZ{ych5D+`pQ(YgBFuy}+v3d~(yI-N?X5|BSv_Zxi?1Wg(-zJu`pR$G zn{!oc21IX;Byk--_7SS7$o`x&(!+#5`#!`_nQfHPq&jZJYVgG@Z@A#7RtTLIx1_af zd$MRB3%^bF;(CC24l5EcbMkF{wEvp?`}lWTSyBW)D!ZOHsNaB=H7S_BbP3n}% zd9y4+;l~-DKfBt`qLE1hA12b*OV#c!kwwP*{_Wj-oR0%-tFs%(XiSkaqGD-E+#j*~F(3Jt=>r*({G?|`wovibtNO|ZCvoxk*@5q( z;!U8~*GH#sdC9xvs*QbvmVLA2O)=~s^cj{yb0MHqvP4=;=U_<&-E>%sC@WpEiGat z(#+tO5%A}t*yioWOFyELRxw8nn^iyNFSKM>j$LOutYcC;S!ytJiJ3XzFdhX6jwP*X zMbF$Ps~ca$a}Mj2V0b5@QSI~uHyFvQB6-%6N3buB*V8z%ql-K+C3QQmRe7#-Hs!if z-tKrgT(6*}lP+G=_I>$XMe;l?{JzpkTjzN^J1pa9TX0x$7sGQ&+eurFm-*x>lz42b zVrFxga8}c>THrL=UMVfF8t$9)>`zIQyKRXVI%Z~Cl93b~L#%ha{v2=c-;>vW zEce_SK*c3$V)sxws69z4farfxz>*Hf^oSACzLM$#Uszeg$LQi8%@{rHcfwSAU#T6F;AW8eQX{>~t#7I3OyiyJJeZXcyY_E|9-; zGlUCVTe{<8GVsR;OASK-sLsU%z$~k_jxtb}G*g%7NsbZJteCB_mr6ZFuZ1pZf0hV91t>!rhL}j*i}-pQG6&dltt|! z3kR4?0zDv&5pg3zl~|l9W3eTOzynM7&}AIbjE{}S>oS66fb(D8Bo>z0uE+fVwCRez z`V;^sJ>agde5_B(_S^kDQI(pHw9^t5oIOv@&b&q%h>zYkph(x~%;X;tU94{_0XL;8k< zr;oer%UDqM!eiy<+(wsdIKx?gWhGw0{=9;F!w~oBaMB!6+Ij;f#1sp`H)=ZgQTkwMOx44bNpn!hYcY9&noEbSo9z3m3Yk8}lZo84uv{FU- zeG%{sIW|jsUDv1T~QTMMW?OzlR zgQ!ZAoX$&>($ruRvtq3;@6=V`9Uozhf9tr#6nVj0llhZW-lo=u9$ARW!;4y)i}PJ~ z#k@GrMwu5SU1aU${*o{IEt{qD?v$qd-Euw5BMc?vNr~lsi%lXU5V%^eJZMzqlU{m* zgX^aAdO#!1>GoGZm}ryr8&ccKoziBI0;=Mz%O!Wqiyi*Q=3kfrJ=*~4Qips#Q2?%D z`k_)=Vr;G0M(0Ys$q<9aYen2@(z5?a$f!~t=4~nhL@WGU@tq9l{C2< z@Qf7AVE^|MR+F;U^2oj%!&?96g%2R8!YnaR){xZnj7Kr!T5G7(kT`Xzy1%XXpLbQ| zjGy{2{J%_3y9}tNt1-#@7SZMO1Y<#fiOKDNnrDm&#{6Y|5r;L--Hq_PHo@Yv)jz-Q zUhS0*vKwVlGTx+`V(hJQx*alO;ev-WtW=JgJFIKaD9)-e`oYUm0uRJj0xf{aaSi2{ zopZ=Do29nYYzy4*HPTG4?F)J%Ea-t@1v8&mdW*pdb6)pYl6dgObTYZLL-wx3OUsL0 z^R_cDY0;PU;Y$C*$(H<`@!=HShRc-*a8P;<8OgSNg+*Vhj@KK3X?4OKurQaU5Qkq_Y>pP;m0+-R(09dZv<5QPCgy;^}u zVP?u(uH=xwd|(FBH054JSA8yDFnWd8oZ<^qs!yr6R7dTaqy+ws-D&vh_fF`|K6iqT zWB!15jfCw^xFu4fyyf@?#BHB!n*N+3vpAe4?_SOQj_G$ZpEm5(6Nc2~u7GEEmWn-p z36j~eodB?;b|xuFod@q*$>i-N!u9{5I`=QG&Wr+B!gWnom?*kSDbmg%-tT%jCS^^T z6t(dzF@Ec4ieS{Cz*R5~u zzs-5k8y#UC_0%Jpl0ad zI$y;U;%>PaN?a!Y9w8!viB_2j{)R;`n)}FMsBV@-x-JgQmgmI?b-ngjim5No&f8)T z+tzeW6{{w)(^YQ2j+Wo5cW9le9=Qs1FTTjIBYOB=(}%OmdFX*eIaj`gNOIMTK2O3- zP*dy0p5KLfEcf(U!>*tbHvDFAC0~_abqGwxwmp^-~ zng0J3N+^&EtRVte4meDgnH*zC!6v40?(br_qGU1Xj^D9=g&TmCI$411n8`J&L}e6k z5+6sEmyQA}RN!I3sE`ExDaX{L?ykpI8iS_uH1EpYVzmX%+run3U(EVh`x!D!jmRSmCeyxFBC zF6Q){cA8KNAm3>jy`dTYQgmS^S^{*SAdnWE;A17EqzV!?i2F8;L9 zu?n#k*-0qMpjlCw(=cIR)<7dkFOwkNMPkxL(S_YTdQ-fWw%v8L_UrTn`0Ms@le>t+ zv!)k26RN7u(IF0ZoLg4oh-0mypP% zdqk+EtGiTZiO*FA@4b|w(ty|>GJwkmytiN5us|8CZol?v zYIb}jpHCaO(NyfbSUSf&^_omZuyNkABp1KKbTysd5y;~H9~kccl;r{=ECGO#ZPVvU ztUj0s$@T3(#(gd*MGpPwSWo%>o5@%C9kkSd-d6^2)r8u;J$etCT(RgNfUY6N*Ywet zP=fMJH(xh_)KT}&o096`kQwCAyv3t(bH;)ZomWBS5H65WkG0qGjY;vsY4LimQhy3+kftZh<$` zaoDavj*E9)U<(AmN-Z9uX&_xLcwl=FKX7=Jc;mT+liH7MUK4A_f>Jf!QkAwwB4 zJXNsS;$(=y)a@|X{%A|G^Fr+BBu(cE!Z;_4O@giao3{VHByOZxv??O%xhH$*lygHy zO7T0;l&gu+Zla@9Lwq@5F+W9ollLm)uukorNbSD0Hj!C!+efue-D_PyJkYamtg3fq zDQ0p>V8Y#TVtZx?TQQD|8GM*PT?~Qq6fG#1#xSH)S5zQn(aP#WEb#_2Qoo-A(FU&5 zC<1EaNQkh~?ZRv*CPS|Wt35!qV?{FQU<|zJp7fi;#kx5h5Uf-?I}Tslq?8DPgeNT8 znDRJ?Qul8XX65Ga_V+0FILgxq5KVpapEK$ISng3U#b@NcnccMXJy^=H6J@{4$99k+ zhpufi_%hvRaQ2M}JqZAifS@XkgZP|RRBd$?V@U4>&5Rk~jm*yz$2}H4KgP08qMP7| z2xVapZb%J*6kHNwpZw>=K%O8ZX{W(9wYcu8jm+AR7;$pfN+QWVTLUJYxL?KMns1*c z!TedYVf8(pVZ%+$Ohtv%QKn!l5Xy1foBmKl+=NKj*m@8v0F_aS{d#s9^nm>92KmGH z3m$VGp^>5N9_~}NA)7%rP<{SS0150vBd3t_13ovdJK5Pd=0+P;m>7oYoVl#UT?gF(3Ep$9U#lU5?m}h8uO)*wV!p zw@KTcio7$W97x0ojIt+;1F*Pfo76S<*f15rFrKJO?OJRo89W<7Baprhmq?7qD{Exv z2>^`QCbFoOjUBmYj1`v76&2gXF{a|ICZj+B_vZF}q=5>G_E%GC_=b?n$cE>>Ejk9 zq1kH(@6W!h*nEBVu`uvsQ8CelDEWS%OiBAfEDg(^D7A~VXmQECD%Vo&EPz-@O?Lcb zy(}+Odg|KLY3^lOXNI_hI!`zx3hpj}?3)_{@j+k--l&jdlo2nah@j0PUWCmu@K;2* z`q4*lu9u*s7?6rctc>+mVw~=f*Ywd}fSBUN;gRJLCr8u5+@5H$eKs$H2@v)2g zAZl(o1wM^#9(b}B1LuP0bZx~2!z89SN2$_)z;L!(x3q@vR+YUGUBRmy}5?=$a}JYw0PqR?)bz<|b{&WND{*7e5e;)=+Pe zdu(9R%=sevX_K}#_lc#*@TUFFYQ<%<`$zX=M_XCc((P*>3K<=K)S6S%gCzyvpR7EhMDc4*MYHEZN1o;hPlorwPn6 z2RlaFDIbmb!x_`ng5-?XvMcWnC-Pn21X!oHv>}qNFE#9;d_@9AFlp6!xzB?*x-DF| zR%3QYWq+=@LFZWCn|?PnH2qzCuPZU?7viaAih%Wv;PkWV>D)MYcj41VwIXZe-#TTg z`E#W(>s!C?EYGl+yS}`LP(D1&^{LJ{^j0B$`q5Y|hfGh|)VeYfZS4EjDG~H0DuC!U zggtd6sYj7K45d@!PaA=iZPrdHRi_Dr;*zKqro=?>Aq)`ibHPXvAr_65!QK#U%;4)s zT7l#Rkm6@rv@i)NdTtFSUMM{@-kVQaB%3`y!^17_zZc{Fh1CE3{DT~#ni5zIO;@kU zT_MHmJGqBFWn5X5w*dF&>LJo=(`SQ{x7l<7)Bpe}1(411gK7k?AU53VLW-3DQ*o}P z$szsy4c&84t*>)NIjz|PvgF0(0?g$*%wZ%Z#SBNP@HGbC-cSCY7oN(+u_* zWiyWESEVu!eK#W>U2rV@r4}$FbceaPYPd--HwofjdwjoJXubS`6t_leJ^#%0Ke+;m zU~5f391cz>F=C9|@bS~@^aff7(08XVoi?S@@`3EE63KCgtO}hiw2^-n4#v0BJ3>EnCHV zwjq^9Nz-607TMn$m-hp_SP@0z!}K%(G^DPoD?od&42$b^5g z{R8~4q9MVP&1x++#+_jBS-`@INhYr5Nh_kUp!B4XFQKF2L;Y;P85P3ljN#pteg%)m zs%|vq!l9nENB4EG_XVV_*+Ijdk9YHc+jrVj-?5v78Yc0225x@`;eaIJqQ{IuQb&K8 z$NTI`(tAPx$e%T|8$0iu`XxN0V;l@oD(gU@ER7mEhNX2aujt zj$SESNl9KDWDZVbOM|Rb6@#x5{|@l?p^A76A=Gk3QiWxG8W0SW$OSKwR`#u|%p9!K zwuFZF_=Jh1j{1OQp#XtvVeEsrU3?gOGW}&d7k&3b2|jc$Cvuz3vB()Dq)srS2o4Xy zG~>`Yr`~wPV6K$YLf_EuQt?5h;n>F^p)?Ii{5oQYNPrx%}}1Yy9p+=y3|ujjM-Aq6m=8 z)fu9t&IcRnIR0Bj?i)70am)$bqc5AiWIi{nwhv0gd%h9fz3kkrRFPg?^&b>7yAycFeQa`~G zu(~Q@p+IRNAMXD$+`rF%kUJlv1Xd3dJJ}29r8K(rp)g;!Tn2dzWmlg{=Dsg*R=T$d zAO`S(2ZObm1RP9<0rW7M3(iXtD*N}bvOC8fEw!x!^PFL~(WFuqx^FmVL^2#X zmgeK$$-g_iXCm(L*r9adl*n=;;XMJbgyKp0@Mc`FS~A>`$6_?Rh0u%Nn1 z(dJM?7@c-Xp~NL7sF)0P>8MB=WMh;Hrgoj4ry?CUI0lc-B*3UleS~mfusTLpI1I$5 zAIY)8Wlzn(!-gPvnX6k3Bd9olx)>}Q)SLj)M*|qjDBOo+Z-vH}mm;yQ+NGB{Ciz0r z1>kCt|6W}(`F9L&+7N*AM?av8WW<+9RgOTRtU?!}u2eO|yt~4V4W$M53Un1;JM+UC zrU^?J$Va)4nB)dK0O_a%23 z6|FhxF4xQQ@Kj`O6$)zJ**QAftJ;V#AGfRHxhwN5{O)Xdn6R zBZ#@}n~HyCawOjZc>9zC zz1I-c%-h@Xv{J?@&^gWM_fV0hFUzb(K0E`1)maJt$6DN&zye&2yx}<)EM&ywzPC+w z^CI7{gp|O0Nxp7v;<+Sga*|3?Ofalax57o|?YY|40Ofpc9Ev4Eg1-C@u%kc@os9vo zh#8vM=3X!$-Samsa(@$J6C!IWkBo`Kiu-fd7dHTaV`KhBaK{$C%_KfdbSJN?k#iaV zBq=Yl=#I|mCi^0mS{#LjcO7)8ZFyQdrUg#H{`5(+prvB!=E~!Mw}vgW*>#=$f$l3}L!~ zIlZz~4`sw`%BlIN9l@q1=hGKOIev+*ML!IrD|&e_dkwY`5SC!#^nuzD&KR0H{G#OS zyh)J}l_%G_0#BR%_#lwra}$egZ1~gt@RC{N>z0#95q3Z>0K=6v987iJd2D}u7*4<* z9&L)@XaH6+6zhl{X@93~597Rn%P13$js6bFMPcR?amhq;+kgL*J;}tR5g_BdKA<@x;cLYOs z&F$tz8}QEW3A>R#^VL6l!}mFb*s4&eAZlL@ zwv!l*$MiYMXL)xMuqot=&yYW&1TudK%vde`_x#}>88g2W;@7}#EVrNpfd7>EO(sfJ)w zpW)V|nMca>zPtCx(L1s~^HMy@e=`uEok8Q|kM)gfem5uN@}gp*uT#)9n?a();mkGyK}yzlXJ3CU659UHh1P$8HC~6ZtnaLAGYpNwCY$hCc_a3@g8vv@_kKSl zEbM2}SJtaf3Be*J)n>mbNkj@^sA!lbf|Vl)I0o3ECtW#dZFqFq+(OI@x|N-K2iT0Z z8#FPNfi~qpArYHQMm;@py`^=ZwSw#J(V(&|#xT6%REh3xj0VSIlJyB1&p+gMZTbss z6nlI4;9vKm134yXL8XxL-lwJVTYuZ{xDBLzCr@MJ2F5q#pIA1Ipx}n!oRkR28drtg zX&tJg^nK-}Wa>!GIex9EUJi+9h|=9@D8DHd=3(0(m%(`2HtxS1>tF}QFmgr(wT>4s z;7}lbF5GA0e5FqdXY7eH-_UL$; zRQA!t75S}BD7t6qvGwQ!@*+kUq!~X$))WK*Ds-2|t})UE(Z_MnB9WXBDkPFLamKjn!evC@GR_&-snE{s-w$ARhllsL4S#jU@>&cn)%i9vR z8JS)E%z#mq7xtnwnoeO~bG@p+>qZTz&RHW#l}ebmr9ZdAQW8yRG-D_#fo5HvugB78GwA3d^OAACYdz6mYc4qXQ|kOG3=zv$H73{8vSj->@tnGKkjE-`A4akHTkcg;4N%Uqw9qkPa z=2AdY#i)Dz87-Tl$S0HJi6eGk98fZCTT#Z>Sl5a@&ce*xVB@J%T3oIK{ZraolEzdg zwLAANQz2(;3b~zxL0mlB>f0(@>Xj^<=3W8BI2l(^-0uK`-}XYx1LWR`3z_Wl`83&& z$mFTy0=NPWOdrZd@c*nw@-<41+elA9VcPX-30br#1?wRP%A}?u%DQAW$T|ZjQ|PJ3 z4sLdT>~ax{c8)V=&vux+KKt}^-PM^X@oS{{4z)ge&(pi9QslvGX|X&G`HQdp($MYd z6&$u(O2){v$7#%3%m78Xv1884n-9m}r05`O99KZc?q8XtXayg@!Qn3 zlmbR-JY}{rvKO^0Z!Igt4|bR@lpz|WK8%Dl(K6G~D+LFS%}{*hmWOcIPZeK$vez@` ztH(rHlLGsoENKKEEV?p+TAa7e%>$X~X}0{y}a=3BdZ5-E@i4 z)rW<8npB2G3*^3{WUR>FaSF`dz^%ZafO_VlOqY@C#nnZFL?DBnH^vi;h4W&YAT@|3 z9a^d;Drcz;lSj~~fEnaYqOY>eJr`diTI-aQRS7PI0+B1r*=`-Cn+`(vzs%-rT}cl? zIk)V|5r*52+kY-mQC;8j@i0bTVoBKU%jnZldwlw17ke2!%y7|Cmnc0E$ zjP}fD)hpPhQr*4^n;bewx-=y^bVcYsxy}zQ0Zpc*W-Vccc`qzZ*uODgWK9<8Q}pl* zGFJN(2DvZ6sqFsH7^#TOLb4|dF_xD_vE$fM30bN1hDB5&G&FP&xP$|nD@mojE9VGE zEJD#jt7CwRd(nb|>CB0TC_JX+ERF*T=$*~bHA!3?!AJNshniiv2 zl#zmT_kDUi6dCjZ)7+dF;%2g36|*-7W6u<0nE`r~>hKWUGrKXJOSvMLWWXGOp0ZA- zhRwvz8Y&C;Fxe?lSDJF#Ng*m0vHZDB|2?ptYf~~-ABrT2rRR3io{9C%5;Ui|taXdl z@sMSDP3(tH9b**XB^hQVt^}Gfy?Db5Bzi-!1-otoZc!;;b0XQ_KZwb5bHpbmoI!N= zjdXZs!XNGnnL>?$}3Foix zjtm2?un{YpVMEo$gu`a%$lI6iAths;O}u$2yT%ZioNw1-n7#$;F81Tf#BV}!)u z2f!QaaDK-pf$@5%z7?nck39N6mYb#mP<;tBr3fz>geHOfLvEJD+5C~WVRk`SR!_IMw z2X6H%G{evIo9F6OBOh^UkW`XO%c92+wm@y3o$qmBFD9V(<9W!BMSzSK)NxqAo=|e4 zLG%kf<&Jv730`F8bN7$*X%`&1brWj8@6=}OYbg@wH^kVGvA44r(ZIz0HIkqZqvgR zrH8k~k+vY0B4r>~Mef#IHOD8wC+MQ2x=E6dyAcuV-{83opxV|m^;B|a_iX=WVt$%QZQ&5^%F!!u_)Uw(drhi@`!hCzaRL$S=R-;CMk zhA{I!MS_M84z}P%%>(5A4^O(@2oxK&jY*dB8l~joZX+G`4Qy(cBP# zj1L@2$}JMz{;YRj757QQ3eR2S=ttR%YfRVT8kr?%(T|!k1N^36%t(9fm@pf(I!wrC z$^BQB>j;GG06;6lX12}hw}S8JJ5hWJaXIPo)-C-vsjSlX2e%?qr~uTTv;bgm1y8Vj zoh}TvFxa9_vu$tK<(%-yZn_c4?RMRajtQZZc7^_w<2Lt^onn5}Eh~vSYtHb+)n|=< z1~bp}L~i)Q6R3Q6&0KB^{(P5y!OF!=-&&={yw0pP;={s5FfTVZ=Lb2<^{kV=u2aeB z=qM%Lmt1B2zL>Um-$vJ!V*gzczU7Z39*j%x7-^ty(JfBspgSI4egoK@pju}(0T1FG$)Oo6BN5~nx6$Z59yArXbi^3Q&k(%*Kx6E!m%noY%N?8a7!eW zU+5fW9pD##P!toN1!h3&XSo}Yn2iasv7KL<9WhpDMb$?4_3p?y7a5LMw`ojm=lBA- z-RA~wfxy-iH{^31cs~-Y*Oh0#FR8YJ+gEt$pDpAa*#dMP3e)Wgol2KhT1@}t+E}Z) zd5g8C>@!cM(Zg%J+SZ^^haUxS>D=`9;TC18mzKhFNVdPNs_MR<9&V(){t26Cltm<_ zs2e@H=x|SoAwY3qMOiRcTLGZ5`BIT)QT6KuC21H)<*hBr$l|e2S&@-2p9D99k6E20 zVG`y+68u&~8BAftqv#}fpW*frMwX2C6H&7`S5h!yFabLc6qP9hM>DX;ngiq%=?JeY zDeCd`^tAe_rI;3Ms8#xqgfbt*gcj=PP~^;)q3598rKDU zM@`|GFC@@+3#7>(Wo+GPNH$${${9Qp$b_!lnYrfkT|FDiLD~zsG{ZgOLav#b;bih_^r&w=LZx z12BcANTd70Kyr%76DTknpefLcrcN)zU6)o8c0(1VR}F$7^H5Hj_fiN6uU5 zRMI24tllw`&houp5Rsxg>DY!VJLA+7v;PUf1`d=8irb<{6$E#%5Dx~d#DjhzLKp|5 zt3}aV)aX7%aEBO}jcdk;X{^JBZZw_~7h6R=7>pR@G#E9WA+_HcL9FqqNk^ptPRsQt zae!EyD0|*`uvCzv4HfRq6D*q?8p;N!V+4(Hw~E;eE!u5!W*>vuQ3zy8yVrea^^t`> z_+xXTJNYA}3j8Nff(|0}pVan$bBF)ke7KcOk!(x!72Z`_BmgI`EJ+|FI(v=Uzy*+Az!?z#2rKy7Jjq%gZy@!AcW zW0Nx%NU~z*YGFd;P`g}QYRnpn`=nxYp zg80t#m>zL)r{8kq^i( z$0}J2VjV1k3B1W zTU7=$Q&oWU<`iP$;8P5R!#MdZwVNLbu`9y1dj-I`mt_jrsIlYtvIZZZIRo{)v90%^ zm-q`=3w5?wTp%VTvp(9WkyA=oh0QxqCas78=qP;g?~{K}n}8K@!m_=XC2oUw=%^Kf zXT3j-{AYiag1mn$hsXecz66=946D0ZC*e)1!fZP^1Z8c&JJ*M_h(5Zn=3pF@U&7eX zD5b#1Z*Vjfq~}p9l43B~6v3N9$r(kt`WrGrY!$3cp?Xpqu_jPpt;?(vUpl z8|mDsmptBEcFZ(>ZNxWeP1-vTwbZ5G%oX`opHqZt(MeV#f04@Lxt{P;3?VqyJiEl0 zk;bFpwhIX5bsTGK+D60bl}}S|a^5n3swFikFX42;PL& zN{m0D?OJ?5B!n7!qdf>vdlYN12NMxE88=jdr>Am?Z|KqkID*{a#G;tHSPNoCY=EJr zr(rDr-79otQ{o*z8Cv`3?(3#OBZ?TnTT|(WdS?yEyO5jY z?EQ-L^U}g%=4;pOIpM6-43OjIT!5vl$^G^g&Pm2kK&Gi?HrneAKh-aazkbIz*RaN*)fD zCrhcj59TIjGOW%2p&SpnMkk961<-7v?G!d*-=P(WU-TFIZ(#f1O!p6RXo~XJik%rn zk;EI3fj7y$8J^6calsDUpHHRD>%%ZN`VK(PMxqi@Vh?r)$k`5x3jhECTm5E6%Z5!t zDgyP;U9%1+gL;hfH)k8U3VpHttq|__^y5PxuF51{=vTYQ#2r)^cK_Ri7svBk&4iz2 z0usn;^2jAUd8onbnWNzSrB`PqwLOh%$Gm~3F)^oNQMRXM~THXGJEF+6l@ZDxwQx%$Nc@S`vAR=zPtdK+(oeV&k zpyJhC-c{?;)bnxZ$$3=ZSzsPhQ=;U*O_YQEdr@Q5}f~o&^HhIN7?Hm-uo*SoC_D?B%pp z6t}HqxugH;14?rY-6|S|WQfZsGG!Cm#;))7S@{Fs;aP1>uqbNwqMDog_*vEvX(<|? zNp#3&E2lku`}VDH{^qyQhTT%P^h@6lwy&H~&%HYodFVzBc}5#5M64Zp>mE>im(7R7 zUh+mlPQNq&ee2|4~VG-dT6@l(p z2tbf<$WAbzvN7>{=!KwT6a}#31{V|Xx`hDiCECP;7NjjO%DQ0?3mIBjA;BRDmw32l zSb=si-!HzqN;#>|>aOm=sIZ*L|6ZT_2f0jJ0C41n$*L#A4R~teWL#K%^pe%T>>+Q+ zj>Vhi!zm<~3I(9JDdG4ku(v)emV#Gyj3SHKRJ5oRU(gKWgk(oI^SgO-S~Scgf(^NK z%pY|9U3i6ZwUDOK3O*x;9$S>v-KtURp1ibyvI&?aNccF5gEP{9TW_!%x0uwcJxJ2E zndX_pysI8E)L9Gufq*5wx1FY)=sCFk-qXPKFj7J8RZ0r{ZN0VXowqNv5~u;R^d%+4 zAK3lIk>_JSyGnMGBRTy`1?p)DkTF{iios@qQD8+;O9qSux<-#(@Gla6>sX212^_=# z1{YMMMnDL}Lon!n(e<5CP5s-pX@md)0t5(12|e_L-qZjA1B70riJ@01f(SMO38DAi zq$6DrP{2m-@TV#$D$*21MZkiM7tb4K+DA7VaR!i46KVld! zbs`bpIF!gbMsobv*F+gB+)061g)6Az9eFvWWw&pj8f$K{LHAW0HS)oYul^B~|EN2S zox1JCZyh6SR^RY8jfS+-N~6;KJ>=Q^ovW`64fQi)x;#YXoAn}tS(r9YuRg5_1Qva| z^DX*Xn1XVxP)CG9V#~}E1w)7D#aC9tS&eFTP1$lK(yRp@cN_$rJ2=_(%C&c<6NVB5 z3uK8+7iK2(7oqY|Jy4Ta%D18jdUPTYiGoAOi>RVP&7wBD@>W2hqdto{v^2Rw3N^6) z>wOh$!u`Q;h2MaFTYujmEQjtoat2V?9}uRQ>Hj^nSgn~43MP$+fe>*-c3@R@`sXA| z3h*eNeOsGJ*BHiKs9@u5;xsvF3nAN@j#K`vM)I$flE08cbTfJ+ zW@byzInA-D;0E$#R|A{kEua=tv&;CfT39cz+3^T&*NhEES3)@M61_I@=Kh_ zWDzP!7rK(ABQmBWc17-Jvca%^a_inzZuh*>2<~WGj%7Y^h6H=I5qGf9w`AT0w$U5A zjU>(FpSso(N{G92v8Qud(lHqSpl+kSdaHQ(xa;Zq%rS5Hh=C`amrD%1cTiqMUslpb zud6XmrK^SYGIW^}bjL}0LW}gL47y*tF>9;OQi^msVuV&xH-eG&MAA7i(wD2D#G4~} zf^~QRkg`J?+sSe5MoqBMq+QeNw0e0(>%h&-Nt;=Q;_+~}vlYVPm|2Y*g&<**_(i=Ih_W`m1~pJeO15Zyf#r zNpCyF|9Z(^^}u{RXYNgS$TBlcd+lCc0`31^04Gl*ZoX@s4 z#*$xLo4S>hJxh&#@iM_x!ehhak>tXQf!WKiZB8+kTP&G8q5U4%=Q`nX=p|e@V1p^s z1-k}D_=Tc|V_#D-EyYH0MMYITl-ZR5(C0)ilZ*je8#o%Hr^qV$J`G&&4q!M+Z#vtM z8F$a_Iw$wVcj`8L@O0xxQK57^NOa8@H*Ec!m z*1a2%LgoiTyRo3|R^QP|;_#tsue0L~_kc+@VdKih&KEv)4iAGu2Y=NoxT-##9sR@u z`piMkQsZ@3XF1RnJai^O0N?511- zgr^L}+oZgKk<1J6@jfC5fznc;v$)y5Ig0v#M}=6K@dzg~Y8IiUFU1SWT{CEtWKF00 z*2F#c=<~1^%Z3<(cwy9!zjJ7;00jxL_&Uxef!BmvZr~gr5MM!USra$@!G)~WUYJCr zgULkTRhP1#{qwB7Vzay3rf2@V znpXV~bDWSrk}_V+`e=$XPb*~gPr9u@L;4igc^1-qcKQrt zPyh_dQJI>1@Y>Np4I)p8g>kC5t78tnhd1I zjs%2JYoN-|EEtqx>z@(aSlEBdF=MY_`z;?MCs*J?Zrm@ zT}!p21>1Ve1E$$!8wF+F+II%l7|lE0ub*X)$jQ~6JEVW(u6sa-9^IqJQl4M#-tFt| z^KqT&Q5%2|r?>FKVXjkBo6{BK(b?|4*rDZZ?2-a;q7O9!#Ef#ovGO<}nku#in&86< z^?9c{a-l$42eK^?7h)1OP@kz+?jsBIxiL)cHk4C_Gx3UoQwrA*YG}Vb5C`WUaaka- z*mVANj#(=afCfmy4GXh-#Xntw)OGBna}t6xU#0ahRRn8oswXyQj3ELFBjGydEgXH znl-g7hNFMF^=7$-KAidThPZzeW9thOYrJvE@a{WN|I4*)lhom`#KZffnM1WFea)lw>gFT^(on7|+-+#LzeXO;9QR;w4F?C~g$A!F z!71FJAzMf`wVDy-?&~3eI8yV@n*kXPZ}XYm?*K9Y;8>kQUfY)qjbMSZXcwPZ;lwc6 zeAhg)BrYP&Z;qW4`{}?tQNB~U^e9-&`IpHgluKdbM4V6fApbK(_^H{aZ&o%xij=YY z`)cZo`b{_)O&KL9A-r#bD!*NSHSyx|@3&QEC_(Nu z5_dov>-ncQI!v@?5B1|_j3rG(e6}M-th1g-KRL&n!#*pjYLczhnT~zniPHjO{j_mH zXe{wE2NQujm$)G?>c?ZOIGCitiBoNo zk0|}Bf=lXv;l$5{fR${z#y|!A4#Z>7S1Cx1F;?;LnnVu*Mdg58Eape0SzL0IiJ?5e z&Xfwc#>(%#pIT^c!1enLR${EofMMsK#Nh!5NB3coM9@3zu89=q$>j(+M7g+A7HEaN ztl3Ab`OQ_2L8(ZUgskSenIiGJF{`8V8GgN4`tA zLFJx5TNxDkORI1(>XWO?ALF|l((;?HJro4LK4+XQca%+z^M2hr)QCCR2QKoWM`rA_ z1&@%H3qMOok7_q?%gAUIik$`Y^MK(88dM3F1PKJS!*Xb?P0a&u?7i0Jvj+1*-+T(c z2L}vTCmL2(GZci=y(=i*npRMQ*nxVK4Y!<8!WKIg$%M^hRr{KC%3ei`C5$49db=Md zWiU`^7~RpF2xQ5P9imZ81Q%nzxO@%xPioiS825jp+^u>>l&djcoa9swrBMGuF4OKv z*^*JQn!IQC0Z#k$0VRO|5MMS7{)aOb8$UG5ebUq*)XEr}5_sqoEObt#@9OzahQi~$ zRVNeCY~%KCrZ+}{?ui-eKQ5f(TQ`*-z<$X=yl4!%3NEtyJ*XJ`q6yOLtfyyDL~HB& zy4SQSUbf}BNaeU7SdGdV!Phul~&}87HJ3bV(!ZmdQxIav?{ezij&%#y_gR#4udrf;PjR!ut>C$O{rxFSvTHG!BTq0w z7!<&xavkKQ7A3@$t#4R~0@4`j>wRR$dGB>0AOa0AxPnh>$5%a1Ot^_d61s6>+1Kg>0kvwzfv0(Vew^U$=*|GcA(h zwPnFsd0M5VtVyJ=ePiNk_ZnPs;G#R1Jd@Q)Gv!L3UHEuSF7F&V{xmhb8jToP-sQC| zwKj`bFa&p+sfER)f}#f>>V`EPn!JsAb+aMVG`<+Dal6sNrDa1#TXQ8~akb9p?xXVW zYZM8L#<-!|Yj{3X&wUU})>7fYe^y&Lh-_eZq(TZ4$?=l?c+%o#o3W8x)K7daAe@E8 zPd2KrkNx*<=(WL7hD@r-?*%C3zRxM8+ins-fTln;onXNShCtD>($+XYmEP;>xlG(z z*mlts!pkeO?6MSaf4ctY)GRuTiiMyQrXf6Zy;4>fuPJCPzBqLNOcHTPjaBv$s6uGJ zz^T%oxxDgbm|JA<64IBiSALxrNLwZ7S65)dk{2|YKkNlln-49Omi)H879nB=QL35* zhbs1YY>j!1{j`tvl67vl*n!3onP5`6cYf~C9o2hU|45#Z-3p;f%D%sxYAu~5Jg?7U zJ#M=G^^y3~_o{z>#B4=%xe#J|Bnq>ciU8YG%MO;=a61;DP5l5EHYGux6#xFYBj_JW zxD*e^ki4p`9Xua5)`?5?BrEj+uy&8G=4NSlpjHQi@j5(c^IM4;wWIjiUW0^8P}Ovc*WO z9VB}*h2T4vs0>bFi5733wki9`0?-K#@9CGputo;t_z>g|#6#F5Hca9;w7>+w3L_V; z&iczv0Ytl`zuhuuU)z3d1%*ud0iyy7cXzl>`b+qTdUobdwi9l zDMlLYhO?r#MI}y0n_sX8JXsvwJ=Rd?(@32VJRA+XZKgT$(EkVhoEcAMVTFvr=_H;X z``IpWR?!9aH3ct10-J|+vSOnObixEjFnr|+u#myezs>5jGEQ)Se9_U_%sy^ms27`1 z>mn(PCsR=|rOuoy2|_G|!p;eSX(!o%GO6600Ge3VVgffEM6>8ZN?1F>zayLk{G?^= zkS0hQN%mh*2=}Qt7uZ`{3ot4^j@ZWnoC+E$EFM!+`eji(O57Qwg{Kt)>Y4xxc!y9^ z>Xd7uf3Vpvp$3LC(%ss)GqOC7@@askCL)?7v{7WZTZYUrE_;>Sarh0U-R0=6H7rj-T40AAiy;DtXD`PN-Xc?fLO%%u+fU zunmkq!^SJU*b7a{qkF^YF>=z^Xm!_N8&v%s<1p@Z7SZXaobVRzMCyUC;ReS*j@sBl zZs`JOkcT4{C;)ObWJiz;{8aFyT$HcBY&N(CZ7W|r74=|%V2H3GszQ?NHt_bu5h}l2 ze_ToekWJD*`;04GOPmYA0rsu%sC`Uteev@@WpMsN&ZCf#Si{Ypyf= zxZo>zwg0qEM}>AoW9M+0qZ>BDnd?NZ-EHNn{Kee4uL;>n`Q>MvZA0GwX4`Ox1=DX- zujnzX5U1rHzaVVd|D$gjn$wbJgpbp=cV9)juD^SKags;X zu#V+qnbGbI%Z8`hGHDo;R`P}1@k%j(iGO+1b}77AInt*?EdG3Lb&%xbAP_tAQ;jr< zfCsQmU4_5}xZxh$v zz%c^1e2;Fd6?)Hj`C=g+X{gL^sRB&ShG)t$4kbh`@ToMC3%SBakgTs+G0T$eH<;g_ z&WvukCT!GQNC`F>jyj=>6<@qlvVR;S2~CG<)8It zis-o~Xcj+t6c%~->x0`&K3;GFs8B;;^UG#q5GHu-^bN}jklM*B7hVX%~BNv%_3 zV;2d#{(AG@6t=zJuBh%#LA1tlhxTUPzFP$>Nv#bX5<*|9j8n1A0h(p^aGA_1xqVtG z|ESSsu%s$%Ppr-k@d?Q`mzMfWL{*>o1ZsG-YWjznta3Uv^`fXYmn#yl8tXNh&!dZu zHQYcHO~EHDB%qm#BPD`Q@?yA;_3$(YfV`EY~8JXsl2cHASA zccQ-25ALGD@c_+8_%AIm#ER?=uDik^w0$zJLUm2n3^M7w!H>(lfp~2cJs z2Jd5IPP4h8Ca^l_aez>SL*sG8#3V^iEGkE9C=Sq@J3#{?mixu=YKwR!+>syjq{=KM zs#B7P*S<03zG=yJLPc^0rV21+^BI)E6S%q!;KMgTFt%7}rdWSN@w;Ptp2O6_;UsuP zpo5Q6%#ZSK2Iv1yz8HPrA8+yNv!rmX5>KBtu`~_n9Um(cMUss&PD^DMv&aO5BQTE7 zqS(Qz7y2nwipn=$$Xl%$X90h^oE*TcT}`-s5~N;eS=3~td;BI*_%LRZy(vW@(PC2S z0oy9Cr-uVuxo2=%LoN6wc$bdIa;nZS7B72VFFLhUNg%qMMMP;x6SL@uYDmR z088YT@pjWPT}A_thM{7TL!`SiF6son-Yl!zUw)gS=u`%`>rdS{=nbQs8C?@W{BPC6 z-zEv^jxU4YWkIq#Asd2DWl8q&e_PL$dt}Nk^(&4fTEEmR)eQjf#NIAGg#Ew^M8a{* zwNTcK(RTmH7DJN`jhiIiCd!k zw@uwhRWlRRn->B6Ut-?7JEbnTGFsJj?52;=le53{YNcd6eNL25;G_1L0$H9He>(TG zOp?oW>@W`Gxb7@^T;D%sW0LBM2LQ<9;m{}rSmJn7s2NJDFO^HKVhiRh1|Xr0SvqJu z0qhWe@dr-Uk+p&Z8DLu_Hqq!Lk!K zMFtE(XBIR^R&OB{ZuHkjGGzr#q4n-Ce_BMp9#QbUxs`FXcLddnjr7ywW4z7d@8aV= zRY8>KY!6SJVy@a+X%r{`?{1gYbLV$5yImgzMppx1LG+@U+A@cw;9HT2DZ@8qE?|7C zI6QB0+V&A)7L9^T@0Ke}5kNBz3@RN zvaX*hd;*NK0gOQ4+%AVrcvYlhIKNeU2sVl(s^KcDx8JiK{g+CjZ`pF!hc0utwK8G@PC1#wK$P)U2;^OIYRznf)iRSX}1#_3U>oaMIeT@IMSuPv$cx#OpB* zcA(~2LGe?LYDm9JKr<6lph%sA&a7f~OHv+u95n^(h~OOXXlnjfY?}7t}U^ zEl0Z9RWlJ?ySL(;d92B$S^p5WELA!3&)lfF{vknpy;7>vu$Q1J!CN_K{BgK-V5yAq z{wL28&~{fj?BV?vf`ctSeqRKer*%G7C1puMt#hQ4MHyQ6OhyZ!)CvlSX{{C12f#2H z`-;Sc0X)&HoB2tXb&&++Zu6$ZJE`82j}g)6D9P2)WiC+L zs+B9g?G%sm4+PwosBW0F4|e)^E&u1QjNBiP5td|>6)UWI@%cN22l88XpHD2<#8?y+ zOt1Dsl^45|e`@!Sv$wNoWtAWQsnVkT&rtVQ(6IC}0J3ReW_#Zx1f6Iihx3=)oV&oF zu}ZndSy$AXG(YG?FwAY#(E8kI;x>$xWjGPnC%f;KQxB9*t~4$%5u=sadJSHZIP9&K&2_I zVU_~8Cp}I4j1A@PpMCxAduJ^o#b#m@uk=GTG%rHxy~^dP5P}lc)1;PH?@`=I|K|mA zO^ALkbVEt~s;V-cbJu58=^=h`Kp)%x>1#Ju z!p?uGgBv*3J@H=;c`vV`0?^T^t9*RC*mED0IrZcum;uTNOP1z5{_J<*tF`a?O??hk{?=czQs?u*7d96E zoUj^e_C4F4J1IJX1;NJ~tfbk;GKEFas+`#tRw~&y&3FR{Ly7yhMpBGQn(S+dI-ePf zR0sg%cg*pY`Nb-7Th3{JqsG)gnF)5qI+=-8M0B|#Y9>W`mi{{sLj|H&(D0ts%~~*2n%3G z9(g$2)tnmI5`SmWFA#^@?09@kEpmdk-W;0$D&Xq0H@0(CaCC}2Cg}LNU93SYcwF;O zsE*Npa=QL2#Qm!+N0R-@;CJCoZFxw+chYtQ4ZYJCs;yGQ3t|tF&1x`dH3eA!*g&7E zh?X@=f(n_QnBB!iM#qWmrx@TRAzoJZ)eVM0RE|dNfm!)`7kXl0waxo-KzVJSmb#p)_2?gw}K1b=KeNg88+sS_Qc3)ecfxxu@AGV|)ogY13n zNUw>`b02IR0-n0s=IAoLynwb$<~%-bA2>(>0FY~8XpWKaH-K#>caHnRa~|$T_q;-~ z?@uC<2%BQCJSkk7s$++lp|s!Y$_L0}O+SzOr1W8AYp`f>>^Avo##JXfHLe0`_Rn(> z#@R(*MCET1bj2R6B8Jll9Kz~$+qtE!gw;RD~q=H)NA(OY<{nmLA3MI3y|*AKU4 z2pCqV@A#0)n?lh)5mkWK0H!g8wE{^C{m`u%FvHt%P&|=_&XgWwg-G%Or7>BFoeH(v zfgc~}c@)WBRLM{d%s#Ri?2P`-+pjOULBGD9JK`d=8mWu&Knx|vec;{-nrlM6=(-Yo z=QKW#X=q?G)oKqM=eyiibpKSM*c|PR2wVL*E1#D;Au7(NzrS%P#eybI9v|BZwjt8A zKs06SH)C7CW)V(bk}};FmvZ=B!jHiV$blfa6~?AjXiL9N{#tR{&Bk=Bpj6S?GN_MT87$x_D2218lqk-7e(H7I3A2lfuWQ5uAIm;w(#>uRwzoYDHIhHLY@Kj4KLXF( zaQ4Xh){xfh{q=3=bU-+}VyHE?(ezYRfJpgQ8130ek8!Iod~5jib@=mFoCNdHLC`Fk zrrEqY^?37ubJ}F{v7D48r`8XK14YFp9^7Ef+OP=W5-AL^RfQkMkWk%8Mj|n*T?1)m z!p-J`9|g}m*!JUq+4KwxF7}#|pNdT?rdh~`t@ry~)-^6H5fNWMyL2;}Y!~WzBL52U z_c_spj|yBoN?{60VYvwFam13?ikGkMxIwqE)OkMmd8^G|6~lW5j*iAB1Xr4uV-fX4 zEQsrNBHW32fKh*+P_e$l1R|3Zj)5K3SEL1uPO8)`aUz_a?M6$cV-_c*OcjerK^*ZT z{~TnQ-qyCg6t|qB!~$LZbmRGkW1vwwz2pAJsy4SDf1Cv#z0sTrf8%jLsxcYLK?LedcQ76tWN+Bga|I#q{#)t z=@R3Dac~&uMKJ<{l-hMrUz4m)^w38}Ey~^kYJflbI1FB6r7AqJq z_Q}k8PH!9ju+WqI3ZDYKb=Bj>^GX5q(auXS7VX}yD3I5-0M<0IsMetzz-Uw zE!1{vksqZOYMHzYC+?NeonL7WoVxm3A?*uHHg!eme^H0{*NFA18bg8qvAJCir#JTc zt?~W9@Z1~|MTX0{x+x*eJ8gQ8$dHFvL(dN8Vwqltx9sx@@HNs3@|xQuwmi6HigRU| zuDsV-ue7O1TJ@!lW`5no=fvyi`&}-bk>#2xZbgh7M*B1+*?vY3Dfu`XO`5@tBzg9j zM)>letjjWaw5M}>Z%;nhpDVi46}q_h<_Y!-H}?I3`oy=6s0%MxzqRwUudk1{v3Pjo zS6{p+(EIqJ54kC94v zXTJ+3s-ykIPBTNU|6O-I?taH-eMyv2s#<2QyDt87JjtYQjYT4P6N zE%EG;S-)PwvWr%%5P!RpeV2)hjSy-hg2{$wbOj3@h@h{X;~XzB7O4NwEz#x|2%2Dv9x zjH}uZ9!>gcIO=q|$Sc4DV^W(n;&2L85h^FG>x5VuCQD|%yLIq|YJNjptz@~czPehL zBqxn4sac~vEyBj0sv5$bj-kpLwLhy&?n#wW4yd38>n0+PxiwR#!z{~cQYPNe_y`L|#V zHe*D&Eb}D^<#QFW5=E5DB?N}?stDPo@`M_KQg+> z4%gZnY9@jL>Tjm4TrMbMfuBO1S?&^Kk(J800F-2@=6z^U)oI`m>NOSUk)CLW`$ej` z_O^+wfcM}D((VXYE&OlTkyS(|KiO2;=>yy5c7; znjM_wo~*lj|3Z^nnCe9A2M4|#_Vxy5~iSitFa+~4qN}*WlH**>S@e)!g`Q?Ds@}ud>jaLhRRnvRk5Q= zNmYVlS&)NxDwH`@+zGe0JBFibQL4NdgoGBER^MmOVtW3gmiP;~yL$i*uS$|_ld}21 zb(u!4K=EMiT2&IfZFxc--N4)25`_mKX%l*5cp^YWJdriPI}-}Q?SmKDImlcuvNHRv z&8(eIV7Me^tvM%U2_^C0FAMqpm`yT{c={$#sP(B$LfPf-n)7jw8lO&dmMeLveS*YI z;ebPKy;Al}hr>t1SH6DKu~BNzk1l?hMg8ZQj5{Ru+hNQZbgYz;A~h2d$YYLo#g$(vwEHB4XGza%%ej@gs5-*P6C5cz4Go=+0?~EkE zB@}_V@6376$~#R3epnU~Y^;A?g|vTihD=+k{padysgZMRF9uDFm6g(&G7`L0b7|E5 zD75JCy;Ed=q0!$4Sk6KPK;gAtscrR5CQ+gOXLe7DbWTU2s0VK!SyrEWXLW`N)0Pun zM;NO6z#=pC25qf>nkuGU^5cxg9oaY7B-e>V0en3(p^Pwx+&l=?8yCE&b?rKJDX zi)(kThu$M!g$(bfz{i=B7gYD-JDGUAD=#AyVimyYZI!FtoS%@|u(idCcKaQvjeO*zV_M8nmQ9Y7_wo}2fGv|Ni6zcPIs?Li zdYoj#1$w7=aLJbyv)AA;8Xw=TtJFR~@@K7f-6n`Bw)o)hb8qr!U$->vqjA3td@$f~ z+LAi6|5To~pW{-X09T@`H2FwBCE(?%erq*ep!Yyud~YV;U9S0Oi|2g*^=mpr#P8^G zP}HYeAvea4f6{wLN&YqSVv_7xDn5?Ty*?JooN#s$U(E_0)wegT>NQz&a(#|F+ZV)w zga_Iw9+mz4^$*F~C^4{?tYH6;PcWj>t}(O`Vyv)B-l+}f+`>ZAdC8qrNOa+=fj}i+ zXtHgi&W}dYxt*CSdgV7hf7oTq)d9v1a(>OMh#jKNdkdJ`5M#U}J_yx6SBI@ggtV4B zJwL9GdHiSF(Mo=w`(E~}qHLl|>Q%mMfHaKL)`m;CPp#rz@q7a~+u*94=~leMMLK^R z6~9X{S!TKDg&K@#wJ(@mceurp6{)XQp1PNsQzV&i;fAi~7dAQ7?<|^3j=!_Fvd%~& zp;qGsg6J$*Fy@=)ulbj65u@pObi!X9N)Fe%xR0Ubyd<%T2*d2yuREY>L#DN|F z$LXh0B^=ktqh7%-_mdeeh6~twNp+$+q_zdUT9d0Z1@eovNhywKUzf5RXDO{bhsRaP zJ@`D)4&hRmhvqUAzXh5#=iAs8wLZKLMwUsJJGPwiuDGLYl!<2TOj7}cja+^2&B8PJ z;pW`;bvA(*CH(ti-HiRE`aHcAy|F&Vp9U$Efa9eVvOj=M`Q7xBvw)=nD;K&1W2r89 z4}#q53f{^loTT5Ssk`+yvv}7k7XLu=jk7AZ9+JpWsi%2;9q&8D$h^3&u>0vncBjW{ z&vQ64X=~|>GL~Vx%#@n}=fA`nMp4c7#V=p#s55Qbc5tEd&PGecP>Q~UY@fet#g~+f zK-n9z>c0c>U}Fv9X%|V_s&d-lOw?9Yh!#fnO7mV{lQsT{^S);byC=nDGG$F^dZ}~A zWUBFG|DlyN853Fn^J3LwC z($xkY{Y$=q#;NAUwI@qHG(>a-Q*3Q)=P`U*{FlF8g`GZjynX!f>)WjQS7~)v0Ee*( zol8=Syp)&9AvqAAju4X_l49_M3bn{+A1#R1as_KjVW{7%_rk5D%ac{&k6stdPHN_# zHWNDqaUUgiUFyy@xl_MNcdS!+!+miI8%J;x(TvPKj1;--@vUQ|IG~_8$@1`ws5ZVB zEcvWFSivD%11KXR$`-ja*M8s<7+8FHGA1zQNY6*gqT*w;jG5SfB-DT5jdA-6xu!tI z9{N@DMKcBSifeCr_5zvnkz1Ok3a^#>U#82%mTiWr5Ex;OtJ^9JxJ`s+RalYO4K@ox z2e{6R!y%yTw~gn~-0$CU;iRtS4#z6J-Ow}WzW4z8O;v_lb!0@C+1rXk$Fbm>VvR71 zV@73F7SQDNbLNaTrS$s#qJcwFKyeQ?Datb%F6a1%8+!pFd+Nz5a^fns;Oarl`y+mp znCF`2I4EGdt^H=lj^Ae|*f?Dvoa*I8VonfT`@vO+M~ zb)>HoQo|!kgjlWAiYMWQ#(oVsvA!i|YOq3`lZ_7Mds$*pVP8YS|&0hDyJUreAnMa6)@xUI9fo_~7}4z~J7IoKg}C9=(~ zEt36`NSXDk<3-{BHL(2~ZU1`yg`D$c0CX{(;d0JN>PrOogawvxpWORwQIiHw zB^yjn3(VBFAXrSh+Of0cd3aB4k+#|Hx!0!?-B62Jd2iP9c3it2HLCu2fg)sPjc5$P zP`~dw%4ln3zsXD>PROP1s@C1)K^8bDl~Rnzl)vj~!vAKNc-? zBzj1WDoprXU`Eq@XY2f)d2CRDzN~^|;`VX{Rx7}w-yX}ARr$1xq#u8RKWbi8 zc!_T`*3}cwTd{VZAUrLi%9Ed$-i%TBhBiWEB85|H5T@M za&?7_AX6l7J4ZE??{<8er1uiJBwZbH_v{qr{&$CR}4KS^SkQE5-P`=rHY>;QR3ni7C|8-X1NE1rVpX`md{ zJd^wzxP8J-l-?03l9WctNkhB~KWo>A3cOC5uPnCS8wB39NGdLp1yVtL5i7|gjNZFN znncYSRBqdEy9yAVsIKl#MTW?q4y0B15F(|v6=3mokO40=et_!6<+S|US$F4upRxXh zTo;3?v>0Ia#0;)(lVI2odbvag*{;dZL)S4yarm%LeWVO!GP)!@_@1B(9JOnhuzOo`5Nz9;&+nlhRC^Gi=*)})>5Z}#0d^s zyr539my{@0RlZtFv?^D;;w=AFsdzfSrCx|(b(HX$Ce$m|B_g)TU~GbgbEH}p z;Pn&_7ctdW;1n)u!En!S>g6tvOE$a=sFA#F-?1Cj4n9fN$)g;2>VtG<2&4mbp1!>G|%Jl2t!?!m16y+!pA4xAdn$au2{L48wM)6l$F(B75qOf#$Qm*-fzew=^XLZt1WzR7_FOIWdH{znb|C)}(~u z;J(OGYUFeNw18cq1g{{`RFYR!5;=pD;H8pg64fjG6ri{oMD!Yog+pMBJo3u8BiG-= zC;g%y*t-=0h=mR?n`=$=6JMyT6>3$c(2E^S+m08`#uWZX==%#f-wFW7;i08%in6)J zb#Oywc(es_Si+RueJA!qdL3|js~%9s1@pj}S1~op(`FD$E2;v84T(Iw1Wa!nmG2Di zSZ>u&(?vR(S15r<)gM==E8=sJQMqn>jyq_uhP^45A=S{MT;Df$4wENKiz~d+NiWFl z$dPw^VK?>ariy_^>$(Rzhdg;Fk#ew`@6_NTiO)~G<@*mN8#ALBSCWvUkX?0J<5vUC z=yuhVv*5ARH7mtOneMN)p5yyjk*5#~;OsN{KFFk^Ws#tTqC7lQ#}bvzDmjdkr7dNW zWc#+vrYeHpt-yx)~c{^Gw}Y6OYheOERr)xpIWOKUALBVn5<|CyJX}95QY20c0Aux_| z6rX5-=t-D0{&9ghbVd-bTBJj0Av|7GWh!QtKsm)LYA;U2{*fe~C%d8Au#8bw2nHyfISiU&slt1DFpFOl_Jh%?VM}{-NPlyzGuNjoIDP z`oE>s0;k_mU;s#cqRko92BEJ{da6?H13$D{5hy?QTVerNl37_mBg0&0^_kyWD^t{@n&F-%x1*2g+F@sw8MdvGGJrRz zG7``D&^Ad`f;Jh5MbV5l9eB6hB130E2Y!9N@^)Hn>2KF;UY9mx4|?p$21E?bz8l1` zhBzzA2^9K-x=OW-JVoj~TupeiR?nQ0@XaR6MAP)#BhDRXJ*}#`wBG?XCJoQJmFyaR z)Y;3s3wlF;>va#;gh<$|FSG{exkXfE%!uAlg+KGX_;PpZ{Zis6RF$Fj?o8z$OyIjE z!6lf{>mJ_ld%&QfLs`*4tZsAXg!i`hx1w9XH7Q(nzcHuaiOyVa>F-}3z-!cT#J;)> ztHxwzp8yz2EAqKOF*;<}2jv{N?pagEL-GREb@$Z3ovU-nDP+vD_2=?XNw2AT7+t^%rta`x$mhfuw~E1*M8qCT;R%-+Z2vszlO5RS-LJ ztAAP}lknG12{7mhO=lvT%)Sv&5r?l$180he{3Pt5u2i?y$V!1~l$g#U%f)+8cwfF; z@5KA)uumniGUd0v;5;o{^GD2jg>K$Ht?BgZ>ax()QSo{jJrwGY39&a_tIsUSRa8(p z{Ce&Y;qaWGkmAtx{ExPJWu&Z|J7fkUsUpj#HL58#5x2yhMt*f{z0Jp737kuj;7TJT zm5!l27!!PgXIH5o>bpngGf%vuSNFWs=Nj;1lVX>X+1X(p28IfBT|=#cL`!#~Yo zYWnH;#@Bu8k;fTFWrV87Z>A7}*Z`q^&q3h*slzf&vBcq8&!R5&Pz4-dYG#ZAAod@G zqfm^4R}sye&lbC42WNN!M$Hg_uw^_Ovo^c9oBBTN8CZgg2h5-=VRCg+&6_I7(g<(O zR6(4CrPM}+|dzV;l>zu1;Ye*>jl8kxg zH@K&p#hY_yes*6cE)1(%U|7|zb-20{?zLZ-&Tdo_=U>F4egznJO$8q{1cupqQk< zzeC_EVpMKf-0XrTmr5o=oFzLkaX3MeD_oCzo{iAZ-76MDi> zeRKuQqM$G+2hBb*fYhik)3j~VGua_#;OUrma`w>`aKHQU@t=xcDqslxHA+_u#^njS z)4o7lK;en*K0{zLY$i77Z4WCPFVLnl6ZR}FnwsuEtB?tIzAkmxushS}pPW7ZUMCE> zma2$AUV$%Go!x!{t9wwmGI88wNA`WvN;> zJ+HLt>8ic!5aN7tmHaL5*NZ>8s`dw1`=gR;uZpxTzxYvBtD|jdsi%8{b%rXQD8wFm zVJj%<0c}Z@Ms;I>f~zF&gRIs9$O097Ci(yH^_@{owcWO9KnNiup@p762py8p5is-? zIw&A$LT@6?0=CdX3%weiG5b|eXi`N~s{6Sw?yf4|fHVyTY)D3DRjOoFG`qaN+{bY7OQ zx07B1kKHS3)VtOw`BqD_=izIcVZr_bpIxzR>6!#kEgIyZ0l^3VtYV<{Z4h z;~*eJo z;2A65!xBJSvlztl^{&my=MyQ4)y7j;DA^^2WKL`Vwh#gQX=v?rR5nUN1qpE($aGRS zHe|PR#riG(!ySca7c)2vUjziESSO1meAwx+3g};pbbM--VS!gHz#Qzy$K6(k!nAR* z+$c`!@?&5jwgbe`Js^?VUrx`4+Qhk|mSJh(h>d|mZ%&Lk? zVYZlGd|~RHE2$H8fC;i&+XQOB-fgiuV`Da?p`>zUJLEqR^PqV?UEpT$5h7i`kcRG zi&kRiA(4o^*@FlF?6tg$9;-IP3GU39OLN^`mEqcJ=ZrCL)@$?%rrNamE?cp_7R6(S zSfsvQ{|Vy&{=i{9omeN26dsX#%O^IyY<(&6H!t9WC81OR8jHC*!yx13N#w_>UqFCl z_>PrJMoRL*Au%jGdsi0~-2w?u`15D)fvtF@=ArdaKR_fT8fg~xA2{pZBByYRE6Y7} z^i&fH^f)uL^gcXq7VSs!jx?Sb{ax17cW2D27r+B6)ciX4k@I8{3 zY%1-ZDJAcac4NtDbYlCn9FNoi#SJvw&e_}bxZCGXbq%U(+Q!k}B*x}-Nmmcg5{gxt zPDjmjH3gaTk@ko zbsU5_C{>5B11fye-3GloEq@XvU+^LoN8LWHGiObl6(?0zxf_Zv-#XJ6Ihd6y>~J+$ z=|Rkkm2@MehQuSYh4u21?)?U%s(!Ys%NLTn85Yf(&zf#s!wi2nKJ&5U_sgz;IEzCh z07;~ON+wk;5H5i&)2Nvs*x{v6W9xDD@i>PME3W&iyiZ~whvk7>ZBp5g>@uy2E8GF+ z0fzh?nDWpd2GbdowN7n%V{pU4I((T|vsFA+yPyvs!Meji(r+S#1}>1QEUswL^Oj_W z`6)Kr0~d}U&WxUeFd)zXvb<} zg(BE+OeMg@EF>N%VL9n2kI~jc0dfgZA zFmilnJLQ}7`Mi^^C)ud7kkFD7!&7%poZ?aSt3zm=vGCP22@Ze8_h6{Or3QPU{o0gS z=0*Cjm)G6AOX&-vo4J!MP2=}JnqE*_4ffkov#x78+tztG=zB#+M+yQ+Lb>Zg0z=f* z{eyz_0pXh}$@HPoz0ihq=$3aK58lWlI+}(A$e)?WWnHcxw$4@!9ca;!$1cKW;$2CX z(8_8f(Dek#jOd0|9eRA~8J@}{FLK_)>S9%Y)3UeMtjAxzJ7rzW_35+dsSW?dwLGxu zMd!TWI_oGFci-5wbT~*}fum61-t#(1@vf1i<`@{g>xVnMzmz_^_#PXrWY zI(pr7vMY>DB_*_;eh>c2NfHk6S5ys~@l2sU#XO=RB1*)}7X1AD$7to=kIuX*m(x>J zMdqh)bJ$As)Ftxt_9ujYQh{B)*TD?(*;UCdafB%-1Wg;qj%76+F2}U(N?l*_3uTk! z4W7+?a^G*9Ce@*~`AMr6G{F8!KGX%;1lmzRn*{Mm>pTyV#{nCs!b4%c;2XTw`SslA?((~j zXF_^z|EAOwzIw4$a{HwjL+bFCvGbx^|3rQHvwP@+(f_0i{|31K9txiKn>^Zg9tKHm_6-ALxC={3fIM92D8$kvd{cE57INuYzY2#UWKiv+U8+ckqu{G(;_f#h`-yhEG?HcOKWTd!>#@bt6Y z?vV%R8Yo;@=dkaPPvA7}+m8|#O<`W<)yX&wGC1p<+oL4R zMcX0CH0>Q{PT23Gw=+DOn@TiHUM|^+|B%YD`m_C3<)x+0=tTc#f;ahfhUJ}x4UiYH z)6qY9w1IUK0r1GIMQ}c3gEBX&LCwk#Lc_Al)jKi1`cu6hOQ%70^DpnWZDy(Fs?{jB z)S<-I-oCixUgGrZsB8jvUCG*7%Nz;pd$fq*4RyWzms`4-))Gk#4kOi@V{>GSj`Mq>zOw6BUshsD|*Asef930>Q5gJ*`Oo^)y&B+pj(;AkO*rC9uYJ zP}kl$a%)Y^t=MnD=U2^0?J0zt|5T;& z_Z#(IgC`pwwr@4OI=Sb|$bK=`Qsvw7zgjD|%2AzsxmT>A_VX50J#1cBVg!9V5pAaB zL~VZzqAG^rN~LhU+>1@TSR0@=5)OrU#iU_qDa=9lz_w^yALc;$krX@+^EUr9MI@h& z`~n~r31$<_Ct`3Td&t{|x&~J!$cHp5uIY;Al6^lwyhGxnMINaHNz6Wa>qRln@sY82 z?Kt%2c$SwXnVgwcDt+R-fPDROwdIWpG0Mo9LlQqss=tL^iyUnDV}I`a6Vm)B0Lq2G zTdmtZ;M%dFd{ry!)^Nn+j7U3Bl=C4DOxtCHp8<=WF_gf8yRzoy47gZc)lS{{@BZE1i0&6drbCuDedhaaOfzdDrg|%qv6< z)g{Z%Q#c4_PifEp6!;``BbK2Y5;^* z&1U>3lW#QRDyrQYSe|zO0=&PFb7Am?x>F|ojE*PqG%7ltCwZ3*y7D~ z1^@uF8)gQH%I|x_-m9aLDeiN{nq1=>TYyRu0izs$_pC06R#)v7U}-oG)DUL8&%{Rp z-JC|}J^|O$W_%mt{Pe1d@**ouTD+!y=JN;?VU`x~hrsjwQo(@CdV;+nIP#v|=+G0p zHy$D%Y|6Eu)-bKu)Lr4hn_kD^?(j!HKW#QTnq2xtI3f9*;kYE(KZ)C#MjF)F#S)ZE zASgw9<5YWcKEZkXEI>5Ly}@yxPFQZTZ%fyFRd$Mv3R6u9YxU?6z=f@>7w4*A@MKr{$UgZ9czZ@ZwYq`&Du% zwYrHrg>EKgAB-11pRMxiZVy(gX`WIBR*$gC=IiG8lcWesA>OveuE&lwWeA ziU4RQK;x}eRiQdyqo_!OYIe|#4501dcNV99iQ$9;*xxd8lhd2pGspRx0CPrq(`tiv z?SE;ZJ*E6pAxbqe6Y+_qN`s&RBJrsTt5+)4J&kB3o>fV2q|4xlrQBKhseq^!(i6Wg zpG|I$l^7j#c@gs**=v@OFG?ep<%ofhwhpH6=ZjoMeM z!Ec=OJpSqUi2acd=?R~UTE0rWzQ{7}vgp9W5LOmxxp@Rqt1#-hx9@6;cxj!wlEHz~ z?gM)sCx%I#qi1!95y>m=dPA-)6!K)U%-wCxxoFKmb z!j2RES2g(WS?=TwZew+~cfSPJ9nQ)O_oOQ>pbEIjnC(x@De}rCja(C404PAk9*s<` zU~B=2;-OT}rMjVa5!DYGlAU!HwoR~*q^#Q+C$x$zb86g9na<@eioC0wOAxc&&&f~{ z;B%9x$nXlkCH~OC`ZX*?jJH7Y@?d$xWgCn7sP=Qd+NP!^j9;CtXXg1T%X}_udN6`XB?eR4=j+10PiOy&L`W* zeHdRAe~>_ut=VV|kA!d_JVY&^tN7P=m?89-T`oVYU{Le@iRhZn z&Y^icAVdeVu)1ZNUxEWNw8<^x&06U6DVhi)^ky-V;W>STgl`R=W7wF@K(KOY%RXYX z(ZZP*DKf|35uvAGSG6h%*_uDIG6TkGZKeG6gCoh$D6j|!|77&`wyz)ADMDs7oYm;` zR;YnwSgv>DlJuaf@?Ac7Xb5aR0F-FZ2>Z#`%h^@=m#W6?N&oizg`80uH`?Zy!=nJW zBQeuTW#yP)J=%mDZPWf3W}nxP^CI-C020al%3?Tmuaqa0iUaFb8)kpK+pL#FkXBcG za>teQIg;3q+dm|ne(~!a$d!#kdvgOJvOL5F@BhYJf?9CI!W7K!B7SwhL3A#2!uY+p z+u`wJ`9)clTV*#a|Jf?)+;g`#c&U}GBJe5n!*e* zYecHYs4e66vPi{q4u^-sP!8_pWt6idGdSjM6s z6#Q!U#%1OD?g!wG+8O*RY5Eel{V~*503l;UWK@mku`%kIXCkj?nU4S15%Md|JRx10 zLWt4va)|Y6N5`dyE7Nd9SCxrR!V@TAN0ku4 z&eXj45M9Wb1t(!`ApE90U)2;tQdK7BsIZX*ROF(zaoeKj8nj@dd{miSo`~d8WK-EE z+?5UGX%;=z^AWyuj|3)zc^b#@mG)Wl>VBa?n&HJtlv>J9*2#x3Ari08IR&nl>!mxQ zrq}p8U+KK=%*X1Jn~9QD1@`}oO#Fr1{WY!;@R%cVV08g6i|Q!w=J z73+32m-hi`kg{g^sXFdj-Yzr>aN0u6N~`dic=1M3*$D1~6!51y74pM?Q_V-qY&}xR zv<}s~Fj0I(u~On<-nE-9cTDy66^*?X?c&7U7)qs=fDP?7_3F-}l23t?qodwMc*LeNO*eX#+jw?wi=NS%=eq6OfeJr~*XD zx<8&O876yFp{5pOqv9fbTQo5l6`d%Y>= zgeua8@7{dGYi=+{hotL|=iV$bwDsS9;U6KMTyjCc?5UgjE1)jHv7?vSlJDG>l3wTKV8ivxn=({+>1dofr#rs;{FP!?$7z3q|KNy&9LJ$`4xm6bm~uSTOZ72 zrcqWh>#$)a(HkQQ$~0qGE9AY+&d!$%Ck)JBtO(h~%cUpm5grX?b0DKQ>^QC9c4_{&8I8`S|pc{d?*JWs+z94#y%qis~cEhn;wmNW$SMKs}#l zyNVx6G$-@l6Zx?Mo5bq%&2q;p?_Z@kUUPZtHYNP*1;pt%eq1RPHe75U58@L>1a7<{ zIE7^lSN#s%4z?u5W;J-CgTc-1V^{Q|of6`P_#rFWA`7aKhm((4nPb;+a9W!b#mQnJ6-z~6*+AM%yQvZzN$Z?#5nbaz$ZjpN9uA8t`1R?c`M?I>76i{dT=rB8D85< zBv;`VASJlt;>C3Svg=GTuNf({P`3z?ISy^;@16d-o*{2$OvG_=!QCN0gW}djPg2Qf z#KMJ|3)zSFxqb6`OFlL?e+;i)@6|IqC!9UMXg4S%pHxo}r%S$f|GY8YiNzdF8p^-G z+U^YFOXj@kdm=1#lipum@Pi4sz%Rk2B>dP8*E&KuZPaCPK26XIFf8s^DLpd+KShC$ zgoScf*W7Ki?S)CoPND$|j9I86H3~HZS-cK#eP|&~% zBg{{&8d|x&afHUyF4L|!b-GnJ)QqH==MV44cy8m9zV4e1k{8xi{eWIIE3_X;*){li ztvMalX06JpZ1WJ)aE=b*k8Xx0yjIi=4V+8QZEgsxl#%;0hotEnBr4RZb}b$&FuvxT z=hG7KLH=xjdWU$paW4I1$A%@gE{4r$i~vbx-U|*+n$I1UfX5P;v*=?ldBfWyQ?axn zPeW~yfzPo(9d>3+BQc|#s`G4W7H%88G)oP$eZ$YXERB&2QEiMS_^%M0j1XN!#@s;( z2!Ap!yjy3=8fAL}e(ty&cXo*f1OT-A&Z~m^l7X|B+Kf7%m?mAx3S`Nx zF35SjyuXD?_^0}v!~J4+2SbTS&YY%m%C_a@L#g-P_+butwh0|f`2!7*()Q_TrxR*C zu%3;(8tbj2loe@VlsVMXLM%0~f5(cno3%XW=g}=%p5bRJ9$adgrapqy5X*Yh;Ba$4 z`e!ZcXoc0u;M(iv4H?mcVMS}HEdRR(*%|5shUTobU@*pu#8;wz`|DYyn+=6 zyj+YY7pTU9oQmqqEDS3#rFxnOhtiZUb&)*QJEcKM!@8d0``_$Qm17>!#R5H3ga*&= zlenkpHfFZ|+3xsVzjx4@ga;GAa$yrR#0#_hT^QuCD5nP`J$AHZn_X z0y3GOu9|#p)XWJ78JVD-$?qRr_Mz^J$o#jH-CxM58vz79IXlc>;!45C*1VVF5)mTb zwA|n;Ieiu6$hug8(OZ4{Pwt zTRyOPzOX|vszs1Gn&x;bhEp#4oGYhR)7^--b5~CYm@ULfZ&sK9J8f-WOT);3Lk|in znVQi40vsPl@zrZ}dP-_xtp0k)wU zyat4DKx3*b%$r;|faTNfRXB_wQ@|9irtkEBo-IMV|quGcn?Tw4VqB{LCN z%k247hgwgcFbiQ-^8il?Y$}$*L>Lxg0SEvOq1Il<`+7mGL>!L-(L@?cq8!g)pQs;( zU-wmzcX=Z_FMPFzT1(O8xlz<{&`}pGU4E$&SIWpMBRedqZ6e2na{W2ZNb`U5=Mj^I=aH|I{s%%DsmBr_@4k zQ!TK!+}(BzSUbr(0;TcHU|Zn=8~noBtDCX?!$F69+&Vv9zE5mP=X~Iq`9rO|Tou0T zony}{mdUP5n9`TPaZXH3>MSl#Jj>rY=Qv?J4HWFo?~|sE%#RGSUNb}*4GJSdEFqi8 zgrr6@gid}swgXq3$u^iN6yvN#)Kko9HK5cTNoH{V9T%O;^j>Zphh>k5ySB2D*Qt!& z{wF+l-rxJ*TZVrj_iPZrv$w=eeQf~JnM7Lp|Zi4vN8X|DL@XIFFoxE-`e;$Ec5 zLG0Ro=dP^1tK;7m57!pfeHf|{$MqOZ^lz@8(Dc~Z042f@O=05_1wLJcTTOHB2W;$$ z1z9*szVgY_k!|+BM1NuliIC+nNv9>nM?;m_7dL0lmG$%=`Kri2Q2(PtXO?|;J$k8S znDszJ3Nx}8_Gy2*P5*1w#zy>%Ponwv%mYW9HLxK@Q zuFX6P@_za>K?>u!rGQihNIuOSOA#gG`a)L)+|HpSrKRLEP-cb2*u31&h4GgU4ysS2 zPX=E$*Ga1u`MF1sFMMT14mv`4VmGmHAN2#y#kBuhg~qiwKA#&5)mh+NDVz^%!po6Sfij2 zbrnD_+mqJaeC4QE-U4=NblCIE47tW@rWKBqKr>EB8Zfu(p)4y@8>|JVLagnB3DyE5 z(b~h5Q2H{jk7O{V&%emR%+&3pjfuYXY>L<6gkNX>!wK&Hk=DPEtIY-QKH_!o6wq>X zIR|bTh)WDcqcpr(?N5?n+{QX7IRdCoF^Jt0Qini2N<4t3569asGo#gi_T`LuwIIru z16J2Nv@MNp=$wi1>ojvUX|{X#ak)n6HQ{@|WRWmqFl?V_@TvzgZAz`+%}Q+sb0Wvd z#y4|YeP57WQDTY3w_9V4woR*N+dg?OE!sI9Z z{;oTB6s+w;gDvOipPLfM-XDb?hjzPen4pGrfZS^+CVxHc0Y9w*(;n4J%I)PfuPGmN zqnVAS<$@rtSE1JCHXPI7umZb03C?nlm3N&w2g_kjb4I*#CQ*Dz)z+DPW`GYsr2t_F z8Cl%Ui_%jQbO3wMAYl@zcwj9R!0^|*SK61&T5=(F2^xc@YxvP-^#}L=6B0m1gL!-q z+e%XnPiFT+Gr~f5j#$Bc;_GlN6{_C;j$Mkn>OW*A4QWaZJ?iL^yW&sPR-d_S`|ASi zS9*@lU2`-M>waDazx8(F)7*4?xm|;$yw`Gkx9J&ElJI)_W$mC1XVH>`n!3v4GpfHX zm3DSFw4DH;3n%$k#m`)MAfkU6J!0-yd9&@qS_S)kt5>)KHHhCB%bv0Qc&*o2tcrJJ zVrZMYjb+IQ!kg7wG*SdO#Gc@t0*+NiSZnPcUDDEZNnA_dR=HqLD>b(qlhS@+L@+mUx}Cc_ zLblKt`aL12KxJcJ#oOz_c?45HaK8zIRtywZ<1v4eB^b5L~S19bIF12 z7qg(ML#t<&R~Pr8b5z$4>MD)yo=rd9y{hG8bnt4`)C&&b!v=W{Mtfn{%B~}HPW(En zi=y-|zE;~WaSR7g0^>zoX@S78yyhO)BMZ$C~{Kl^$9U}@A`8v<^OHAPu2Q$Kj( zMoIW=ZRtU$ei#Xh=UO`&S5ACCP4dA^-mMJ+)|XxIrWbct)%N(SOsD1WV~jbQY!0Jc z)fd_vb)8wB>c2wIQap_3WkG8Y7P-Z11H61N;CZXS9BN z0C2m--~xchwFw`4jMq@0MnIFK2y{Y1|7clYTwjyx%eCc^eCQZn2Oj53hnP=p1XG`l zf||w~baAwY*a8`Y^$j;}Zgr`y+v_B`18EX#$j6Gq7R`{K{G|l+nR(k>x7CC~F}Ah$ zeod93SzRx??6!=$id<2^kj7k2y*-RB>gIi^88c@MlE7+54dV-^nZ ziXvYAqrc+PSNAbK#p#y2Vej6Eo9)M_Gcc&Bvl6fXZoK_LD@ zE@p~LAEF!%tikoL=@#5&{c=-OjE1*5aiL!q(ZDsQrYXa?00j-K+LDx|4gdh60LvnP zdH%Act6+PJL+GF0X4S4Z$DtubCvme^9Lk}u8y>~F*Lx<9_7qC(Hisqbo+LiCzn=NQ z9AefiAQkOE< z!?K)e_*DhqvN+PIpD$CmQG~;dgk!Sh6V`!A1^0NYS*jd$=>S*P6y?S|GJ9SG3Is!g zO=0ZCQ( zOSBO4Ud=`3s#SEF`MmHmWfO$h&>NqEOKQ#VyTsR5k%iZx1UmrvS_g3K#dlFw z8ei69J;5@bzOU=cv5>QUy$93{4n@D&%2c{jrLe)S&!TxN$@&N+i=73uB+b>3V1QLyq$Gmcn;MH!i3g{o1A8L4YZDA^4t6=; zr2mugfG2g12$}jQ{SZSLf!5hg=bTd~*RZE8EYf`*N(Lc_oJ3;i9I4WRSt~1%e-7_K z!uGt@220oGjDI|YnEL%xp% zgV0f&!~U_mM<0%aATz?)OXCjxhpuZEdx5m-9cvV#=qC8CMSW99o!WcCh(d?fq2hd7Y{!pb+%MMkM{4#s@Ek^<~L zL$)!mArdKLMk!?5b8_U$u8{1sZs#H)^=LccjUO@@Z8ftXyoK)hte>x;^aO0HsB{2UGhP-Tf(0WHaKiS5GP3S1@FpkMWGkqfKFQ~0^>TKfYU4Iow; zz1Sq)sp#n*)XKP@$GSzGPk*+(#I4)+7C8g4(Zws>%@6BhZwYiXCA~Tx{My2KCu86A zTNALo6x3ow>xLeQDrhJ52zS|$DgG4^%yS<0Db{+=aX!dBrP_^jkFof%U640ZA0+3p92dC5HT8Kb-;Rk@kt*z2!y^Dnk@TBAo+;j za+p*(2&=I|?ggjE0IuL$%QHoeRJ&3uCj@`E+gRRYC{#52u53sv-We43oRg2yDe)<2 zA0WM#Cw{aon(DJ(4m42Qjfe^<&_LLXy&|1gGw3&>wu&CL$0oJ3d;pXPf%^%*R-hU;ena zxJ354BZoTJ@6A#d9uXhVz7AsA9+d9Q1F1u9`2&n*T(Zst50Rp&vvUTON1<$UP{X`d z6;bg4airX>%`iBo2^1*OTN6KlS3qBO{OC?ZjXV_Sn=Z)6+5knK-IY3?>*SC_;X>%|^S7@? zb#ft>&GlX4*GDo3INTyUpIz?azy-y@2*uqI` zbOe)8BG`*Wn+hFYF@xc6MkZ96uPtlny`R#^tun2czCMIaZfN#h?yv1AyQ1^^`t{?7 zllP1IXiq$L;jM(Gem>7Zb@XA)8x=*ys-jQDi(8fpTMfWqg~)xQ_7;&a-z?|ps0~?< zOP_30@1L&Kv|J;uELxurXxRTlu^#uKIi#Z>@68@fXbModAk1HQGQ)7ma8%iQTF=F( zCiFpd-1SE4q6`t5KWaJm=z>sB98B0r{|S+}KH<_ODlJ&+!eawJh1OS}9@tDFibAsF zQ|Iu>gE))AJ1+;EpR@N;##t-Fc`VZxNge)9I zLHU00pL65!5-*y)ifdD)H$Q5<^so?`?<9UBWFP&Ejh@E4>Qg*8G$gdWEyW=mJz&{Z z?Hy=MQ*;$rXCCZ(orGE3XHxEjx=;UZv^FVmDYc>a!c=v%D)ddM_ zmdr{h6QNk%;T6n7x&~zOD9IQN2TUhi%CN2y#jw2ZvcTE7z>KFhlSi@eTPoCWIv;uG zTuh^-e2^e7)&H1EdKNLdmiIR?7|6p&LBj1WexGr^x%aOO_AlgyEdTo`7s1_p$gJbW z6jq!P=GX9idsnX?|F_CT_6$*6xbTEbPf{r)0*=BfU676pP_A%ceGTo+->5Mv$V>=Q zsEt-w{i%C=b@bx)0&&tyEvKbCqUGVaEJNiBht%aREZP1%p`ae4km27nw(?n4=YX_$ z^(#~PK+!3D&HAq=)SCx1Z;_49f?AUFwxt6GAwnnX?=0?|xHvl?bxML$>UaP6+gESH z_4o7Iwu^GOMx#!RicA8=+PbNnH_I#damA(uFSDtPH#co~SHW7Dk07FLj+*WV;^TD; z4UQUSi9{>M>Yh5o7+fjxloJ#?A)ql~Fk6;RO5{NO&t~?n2gbbJ$;~@G6!* zCE_q&)b`nSNc~v+Gyf>}r^u>=a-p1#U+5pVlfP$PixUH*$$>LEc<#Mh1F7+%f%f~& zhyk&}TunFa>7VajcL9nf6Og*mTQEg(;o^g}Ic5b*Gf3a*=i}6N6>35!&10s`aoAf` zw!k+CM^Bg8)BgP?xBG;W9C9xU4 z<}N|CgXSJSoSNDHb-((5tDOHYZj}ph@LY3tSk72$Ns7Czihi!)E@+}{ZkWr3Tof|Z zC5ij)sxSum9_Nze-#HFrn<`iax9QedK~-MW}^jgRs-D;F6yYDJ}$iY+w$y# z_`nK*y7~)98@NAec^^yJzGp;YQ3E3{vf~xZQFeZ)MqYJQA+48Tz2by!2BNe}r!oUF zuW=f)(cdiBM=w10s^5q`^2avs{_m-#$NHML4+{Nq`13;&i^!Ywr)%%BHcJ$8C2|Aj zbgE=Y5Hjh`7Rfk>6sWBeij`KT=17j_3ybv%qd;ALgBGgE?LC1<_iBT;oM;ZqLG95A zOKt2f?{crSX(!u^8QDR91xhVmIL3+O@=*%N2ZQFbL?RQ!QHZW7F~kRtzD^G*s>JUU z@=1y`SMKg0iR%tuLkca&6Fuc1tZj)JvxU!R%1VJk+oy}gEhY*Uf2L_xjQX=W24{t( z&j}g4t82*nyx{fPm2D3gt5ppDFNeykl$c5M}n$DDz;Pl9rLf=*!bmaSEAN z%JWbDz7$)NNduIST#k@%HahX2bS(LZYgNRLaN>J)@&sP@6ooV)q_+-$i4qJB28Xf; z>X{aNOQm(dI{D_U;)n_3kY*2B@X~F&MomrjB!&hA7L08ITsUXE=)`G5S$cH`gZUsb zCR3W3+fs#B596U6uG6JJkeFoon>u)5bC9;z01~V>9bl%Sz1D4Y?N-F0|G`%OFXW7% z+?B#wdyfGXIr%h&7DilRu}G4d)1>jEWXas1zNt5-2D#k9rnpFpp8;U=g*Ez*fl`2Z z1O`ksMmAzHHV2Z?=KVoJ<^~=f*5LG-0&3{~CP#aksFvvTJmAgbqP(?9#OcWBre8rG z#SVejlnK=hmfx(y_ajQ(B;i1F_oP#*)9SLKEEA_C();F-WP%Sn?54b;wLxi;XGeXg&b_H1u&T9FGc zB43?1El(vjJg9*jE2|&fDv`6D5XpbMQi_-g)FvU3{)uj?c@40raT4#q% zuvrVyjZStGV|Rjlvg5ZODOA9Y9}YimzF}S!onoCj`k?e>&h@89GF>b8#WzuuE?ln7 zw)tlJ=IAT|PLsw&2Y%voHEag;4co3XBCwROy$oJ*eJNQTO)lmmo-);afh4+ELXv3; zXXdetQIauISRy_-6FRIQ`bwTfz^4NFT2c|>k3R>aEniW{e<1anoaNRZ>t+X`_4K@EZ*2DV%yq_c; z+`GII*JCZbdyje7dgN$O1y^$V`M855Tv@Ic0Khyu#P;Z@FbEdr^aGU5ZFnG{S`v2t zDG5s$QPo&cG@F`Ecc^vKtv`Lf_T6Y^mOXLtNs0g>u)}Z4>BT4;m}fV`1R2p`&u_zrGsJHc!{+C}r1Z{0WBm)P-pr9Fvp z5kp0}d}7_{#ZG2*=e+c^lnso)72P8Kz=k?MJE$zOb;?CX#g}L#>wCuq!b34# zN%D$OF~I5ImvZD%bmWZ(+{}>giVkKAMeOzuZZ*cwNJ_h!&OVX(8F#7boY4vIymBW? zI))b7LO=*P0>G@wL-3S=9MuMLA>+XYSW18;ZD?3)OCkmp<1VH#guPh{0+qAY*V@hw z^`%0X`c%GKX@xcX0TLysl?(Yx*Q?oPG_OICPMZ4z=Ja8Oi&`4MBDNqD(?P$c3BfUv z>ILwmUPxzDG?rrKZvhvUBviJ@lx_bn#pEyKmN@{v`D=C_PqiG~lEEznaf#K!+ltPD z8?VO1|2Edhp0;9cK{U@`URe?J5c81r-Z~XBGWE-u|K3i9jjb5@#!IeQr8Vt+XRpR> zi%_A~Khn;6A_eSyeN5xgQl3*)j2FJo2iAuUEbb3&ajxE=%7(dy9>zH~y0KP@Ryzq7 zskaU^%iON}hAdOKMp4ZsBU!JrJhvN3#Um!&);ukZIUa8o* z6!+`A9)>~F{&r`W376vw&MEw8=+(PpH+QH3-V>^m5lVDA7DG=5HR=|yr^O)r?7hJF zy_NWTaw@wYpf5m7&($H+jP%uPzHnM=@t@cE5_Z$DU zK9~{JIP$)QIUCttC#XCNZ#_=EMguDfV+r+(oLq| z_KNw_P}`ST)*Jo zsYxQMwa@(u`X8YC3%P|3Zk5A0xT`rk5fke;)yFE(B1;Wy#nLUSsmlAy8dtsoFzM`FsPES1O6DSbX9t?e5cIk`|V%< z{5nGlalaR#{RxNO?z9RKL6;vu2Ewh>{L15X-1Dv z{9-?=hqX0f=EPeJ6QddBQ-oJiQ$cCe<&03Wk;=G&bwIbuu}e<6~L7tba#yI#*v=C8XkANQ%uud|4XP@AEZn z^@|Qv)2J_zw$|~BGfV!5?e26akb`f3o!Va>+6d#9p(h$CiUmnQe~0a_sd~e!3J0fc z!a*F05uLKAlW`Qj#G>%R;YkvWr%6)NyY%X?kx6KvaxsKSwKXR7O7{kGQ^T`u>3z*! zPQg$|NK*cEu>~*nt4G3{c>GLm&Wi0W4-9a)%y;0FLNIUCS-!^V4=JU)Ru^{zTK=Cp z_ZMY-$Z?z}o46tFWOR82pym~iG`lvO`sAq8Oovr) z^x1NQLYO^f&ot15=#rsef_dr@fb;@LhSay*hFL2*VQkHhy)&%sYcz@^z~to-W#p0~ zwL>}#3waQ+drp!_cFAwW)#l?cAcJ_6EIhP*r7&p{Z-y>~_%|l;3_C)?gCgm~3CcOG zLtKxw3;+dpGsT?E7@Gyj)9<8%;jJsY9&jv;*|S_wUk=A0bw0u`kQxE9^wFzKob!GV+06#gVGs zA^WIvw{5kD_FsdHYo?!hh=LzXO}CwsTeGopim%}B3JVt1i>P$WjZ=?>H{98O_NSH1 zFLsyE_hVBP$~sV@Wd>OXt8E)ef2s;VKO649WxA)HI;a+`@$EGqGY29NE3DR1E^Ek@#0G!S+#VR`B!p z$jjQ2s>1tZan7FgKu;}BX_7=noEk+U1#I;AG-CS6>i=Y|e<25V;zBOk-eXQ(vo>ph zE0P4)3zHNb9gUx4kr54PT*kVL4FmxAKq%J{lEvGVqUW+etHUNKL0R`-A1P?A8h1HS)&`Z!~+H&%K$+681=Nv`J5=z@Zq2*jp2m2l6~et${4zKkQ9 zs4fSr7W}>Uri{9098cF2M7B*>!J~Ut^RgF1`z>bYzkD$#L%6>M0_wE}X962;4r`%0 z$==JUHCqy$0dq4 z8r~1jSLbuBp3T1ZJn5>J=|W!%7cxVB*(v z)*HnsPXc_xoVCnPy@99LClygf(;n8O)FvgHf5pk`LDaRQ&mJb!yEp1EgJHMJJ)9s^ z_E$gvurJ-3w}T&pgz%`Q3lCkgV6L^xgLs#L-l?E;uq21}*|j7S$Pd?fE<&yBowJy@ z68Q=EAo+U&x7=bI)=ew(e5SR{d!KEroGm^{62U>SYtXG27e* zt9RU#a{ypv#nKH22!fspJyA{zR!542s`?m9Bsr=NIQq2`u+sjpbOC>BJ<9vOW!8D8H#{E%w`Rv^4>a_-CqgXZ)5zz2tAwobMUg- zjK~K56%!|ANRbg3H{VQ8kWyk%+cjnWq?N2OA&F;KV^`tF#_-NJ0+Fksdp^B#h7wYz z9G4KhGgedA#@=RWB@kp@7Xz8c=RM_=Jfm}`bU1v*XX$K{`jEW;pNJ4eR>Jf>!@e4}f?1 z%0E5W2u+i4+0<=z&0x6Y9M<8P8^l-xvAQZ9QE;cxs59M@er)~u7X@-=jrc#!X0`F0 zdErLvX;Y9j_fV?6be)=eu5IMraUh@emBEd|Z%&nEvA=8*zkOXlTF{}elC~zPP84;( z>L@a5-ouPIMIWEHb!4PoN>ILuz}Jjyg*e#@h39AZDJBHMA8~?}!2F@E9morAWd=6~ z!Y}o}$G9lk?DGat;%I2js5{A2ej%8S^zhjNqBELUDJUQy!l(L)mvVZ#CHL~g8*8|@ z=ly$d7XpTN6}w=j1nU*{v4^QC1WzAS6ZDz>18@IdlcX|-VZmQu<@D;LGCd7n6`gpx zvD97Ka=}n2O`oGB|7mp*k#UlNI(yuziPYphR~|0R+&wsgPtHKlFdt}Hq><*<&>mS8 zO=9tXkq?_HsN^oWqL%Y(Zt6^iv?LwTJC9BHY`Kc%

      L?c3@|2-1SbVe?etkV?O@l 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

      yhY<-))c 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

      yX9IF(2^6l9t_E{1VQXQ;Ck=nv}c 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ÙIG7g+?lwIXX@`Hfqa_TAejPYz0Xn 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

      ne#O!I|300tJP#!N_u0NQut%ZlFg-536@IYsf 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 F3{2MER`B+;ye9AS3H` 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 z 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%0AH-V8d1H7!b%n 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

      --p+cjTh;7bu$>q9WR3 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

      UgRYSgGI|;Et1LuQi4t)Ng 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

      ?I0`E@P9*8G=$Up>m4AMmItDZh`bzj1W*%@qjX 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 z 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%0Di`*Sb zn#hDR9Yo!9sWLh(yzmoS_%m4QNeRc^UooiO$>Uon`C$VHsY-D4p#^)D4~#qZ_qp3N z)v$Ra_@e~T96Zz@alU(tmMRVh{+naYK8>7_w46FML*B5m829rXK@T;EsA2V-4e^lU zq~u@@56jNg@tEu~Yx!Ai>%hbQvGWd>r`c;N4xOR3G!p1r&&7V`=kFcjL_7i|7sW$y zW)$_P*!j*AlMVg(QFXobvm1Wty+`Ro8$fDWC>Y%ulghqc5GNJPz=qUYo!w`*kgM*w z>9k+&Etq7k)>q-6)7K(;Gb2~~GR34>F4ptelkbwZfB&iM--#>;Y`6ACtPwenV={rb zjrZR?9Lg6|*A0{2GD}FeYPA`3w?z|O1ScOVr2-~rq(Ps-V@&&S)W-*`d5OW@!91R7 zx9uNgzJRzoF@Z~db7gt{M<4N*<+#vfk;ISOvEDMA$rKgSc1s*GGZHs4Ci^aF2<=1i zIIRIdLQNQ(f?gbw)(1LLJKfZU1OOZ>Fz{f?lv$G5+2A0`2`tn0b^LWC7=9{HT&5U% zY9N*+p&gx#+@9Xo73$~t#3+We9`*WsS5dZJ9ho9I6gP1IuJ_yS&8it3k(;=@3m;s( z=e_ju1H(=#i|c%l@%Kj;&zp;Hs}9X(epdD3`}QiY>dWiPUWl)uWCxsRRC5xPo2Ws_ zqUM-QECogML2c&Fj`r|Kd7k1qf zh7D7&62BsCTz3;T0(R5RW_zF2eP2kZ^a=3>RzE9#BhvJ9p?xcbNRKG2Uk9o$xV8nV z_9G^r5bNBsLs|Ep52^}Yeb!KXpU*ASBxHs(3h3hy25ROcaxoHOD59C9%#=ovjje)s{behNtOKB=xWixJjE--G`L*RcCY>`q)M)*vN4F-p zVwHzct2|<1j?fB+{Ao8%{XEizhS3`jspYdYqgK(NewQugLk+NZlRteH(dA6_8OgOI z{N)t5<>rGL&l71?ePxg5+w|Tv_U@lub_46CyL=lcUzs$LyfqVVNY%+uIV7HadaUv2 zOcEtVz3^`}-CxLAB$77IGN>G1`Nrm59HY;06&=!g$bA~ z7*GRnC=Kox21BWVZrF0c=+tN2PX6;0ErN^+6FbreC9G2%E{IG&z4ftu^R}N- zH*-W7u!zB&u$nyp7}SPi$w_v%OG+#F5qxEp_;sJdBha<&9|zgI3(2vump$VT@u!8F zh9R;xJ0GtK`R++0`xLa=fsR9NF3cWIGpm}WMzmPW`1~-p z(Cx7&7lNmUq{z(>l<^2`FPP?ZzaYOw@SZ?cqEaA-Ptjx`x7bmSWud?24>P6T*6Vr| zATwwd6iPj|T6QN$SF*^|SUj_J{|dE443k%(=b3o@xEX9b2>ZLo^iju@v?F*QLX zgKE1r)0&6IA!3&saJg@^-*J=T3S;O|6__^L@AkZE^Br<$=H$)3`U0wbCop z?rh9?ZN1I5PJujVG#h8!*zAsdGt%R&N;nVdSVrLgii> z6~#BpoE>XC1va~ih8TwIM%rq1?s=!4a^b8*|zJOOrx+WYH@lQ5l=rjY2Iy!N;hNTMyQog zV?VW1Bs&Tq?7~fkJto9F(8`<&39%kJGc}#l2I4kXBFZS~ZqkP$GVqQsv30FxF^p53 zG#;)5deM;Tljw>SHt+Um;8nA)w<+5z%X1#-?Gd2C0%90&!La%L+7aL3%Rh_t2pjoA zmXUkiQgQrDvPVj2rY`@Pg2+;PoQ{B_Qqeeqf;uY&h96yJhe7g11OnVYuX*fMLZ}vu zJ@RYEx#O}unvNp>sGKK0c0ag(@lBd(B9`O-)#$2u6BWP)B8!GTTK)Vj>0I26;&5vh#57UH-v7?vM*=3PtJpU2{R*HR`IO%2Ci-m~bUDLh!ngudMLwdOb%c(zWgutap!n^lIIz`tX|6z3iw z6~i<{BvnsIzUqCDR`#|*?XV6M>Tp8XFTkH1NZu6xru13dcp)^J0PvURBgDq04HAG^ zB93^cif9+YYzjrw49^2g$}(NyBh)7)Tmn3}7CKb^I543SB%xQ)bGZ9Q;F)X1VU|)G z*%nFPj-aZ@6EAXe>nR*foMXJ&Hy$^MWFcqXDxzkwaw09ZI94?Qj9Q39J9q%BPx)B* zSKV4+mn?OjN-rY^m-Qd!lRU4eMU(T12gWJ}Hs5l>if;OQ!p5z34k7P7jlDbKk370gHTl$pT?5{nACFp$UgYG?&` zGHEnmk)%3E1Cms!%c2mjF0kJ6?52L2W3CzjA(HxoOd_F9bZCh{PEaY$DjxzLZwQtclkPlYl$K;(t zF(D7&lxSEPSqdHkjtcWwt6iZ(uvl}Vs3@M*Hqx=$7shf8Xy`c=*HI`F#VyLm&1eYE zCE((<>>Jy^Wz4;+hxV=8tOh@e&ON?I%b4rc9}3F$m_oD&7|=&ss5T5%uDG@5q7zQM zdHMX5y5>F#7*7mb6HB%>ewHrFDT2$YWm*y@8K0d9r9_}&M1ESgc85g+0GP6R+5&Vy z3W-fQF&*~sJpyR7rAy6^PNyt2RKEddzXO)IJpva%3h6LeQHEExj3l-gcCxxtCOLm< zz3L|;Zeo&XpxY@jgfxE9%<12LMzPM3(tS|;ZF98&#;)BQPJK^H>p(xOfv1^Pq zQ_QsNJu`kI7UOodB1W2^Yilk|CsDpbh6Mdu+jT8{Uk#Dufq@W*RCC^gF@n!9HiyAV zNL9(Da@W<<*NB5YC{E@sR(}!(rL0gxLe_gRz$v~fZwjrfuzKB9X+03@9K(9p7($Sj z^-5`lebc~)8ZU5)M9gJm%_qxlw{+c{zHazPytx{LR!Ug5No!cZH^pLw-`F0|q5&vY_=JG#fQ9LFv1CJLt-S0;bmi!S?_#2Q zeasOnE+0#}o<;Lh3`+c>kjF7R&|1LLA)xX7)EH0QSacw0PF3y0>E-)>yf1d!mhNBL zy*Pt6$^Pdg(_hHNUI9=J_2K3RO$?ioMLqk2a1Km1lH_a~$pMB`_r$54qQ6Qoj3Dpm zh>`0M=Bwl{vXjBLFo7@`52_O%9A(qm%YbrZtw#UUiuRKQD;36EJynykF%W+by9s^v z5^y^SBlgN>PFsABuCnb@6lc>QrXXRaX%m16OLA<|QX3O((>1K$56R&dxsR1)#|{>^ z&;e7u+-doem7AT_eTzfuIB}+lmik+t!9HFIPxN?BQ~g@^Tc+W(VojhkjdI@x0@6fZ^2IBW!Z4iwFlj=L(KvvQZXU%3K!Xpb8(~RIfPFT9 zG}6mJ5r{;^P!GjX$PiNsWP|{7ZksaBKx6aL8o?nLQcw=bP2TAG@>ope#b+gs+RYdY z>AeDe5C!WbC*S=2eC2?Asp0S6T@%v5Odz;4``+%qhBep##uBN}?XK2>MA-ylOOj&{ zvvV=vkXsMP+SUs)cJfV^hK2i?%cG4HO^O2s{?wYJE6qkad3i^4j=E zkUoF2t7GD^nX->Qvp!o)kNE?e1b%r@~X+AnIhD6Q_{ zNzXaI=Q`&(zvuHuuKbxR*Zq0DU+?>MzwR3dtp;ajyn+dP#-_mZ95Q*+lQ>++3gUBO zBGTAt$nx2bnoY~#A#Qq!@ChFZFaDfKJ+>OK)Us&`ABAQCQ>O3Gom`-l$hH>xQ4uhP z9#hLe`dfap(02bDp5!m&?vg~oBM%JBGsNTu;>bzaHu=g>VQ~{u%6XJYx@+po~L8BdlKw58ZgV z6*`<;`0#N|WPiHN)gde1LKxd5_B z!>U^;@mVkxSg`!~Gxt#GDh31sNYr47?OWu)eb`Fwmi)r#@~ve}ZK2IzD%i}575Nhd z*05Zh#cKYF`)jt~>@Rs1lnmzO7YdYUDNmPY*(8_BC(Iq)!NtOs1_?Yc4ylkVTPKfT zy97R4XBqh`0NcTi=LaVF6@l@5NRbTD(oFGY@~ ziR2|LROf5v(#g7)cgJzMIRJ6FB_iA1F`i{^EV#$XLCWY^Z@8GIF=3!W(QQaPS9>p# zG7}=ALXmV69+1H`GYb}5z-8arChy7MCim?9r^6)m?<@G{P5YznIMSCNmzS0Q3v_=W zCm{)7+zr;V5M?Co6uNqD-LaM+QNhM^BwkL4|A?}pz?1?&KHvkhaW5xOQ7HLh2Z*9A zZbDrWw6@)8Y_Kfw_1`W~fvgfI9?uxwUt#50;FxPhWm`KV^WWY?^Yw7)I$InWT_-#V z#_5#giqU{a`3U@E+<-$9>xvT7w5V%(Or2AoCgvq{eF$l1ft1#v&sJ zG(1s|pIl}cbSd+0O1j|mRXeksgERXgJqHa<6b+1Ul+&5d3K(*0X2LP-u)iDo{XH83 z{Nqdm#(;%X%E!~n)7-UyY?~*;?lm(>`0^w`217hM&XSD25Ed28KSuPbXu!>jDYj6m z$DRT3do7@MISLF1-ySyae>#n*X!(Y&O})|*%k|=t!TR^oE5=x^ljG|`@W2;mzqBV5Rp;wvF5drTGAti-SivcQ`(>UvlcsLk|F)oS7<(Me@Fo&)zw@w$>>LBF(o(F z)yLo72r=bf4AK=CkE;UM5?^_nUMa@=cAhMN}Y69 z!JpNg;3U1J2V9e~rLm}l=FQi?A0|B>luw}rEespC(&QP;K}SK@*#J#&foWRj#OLRN zJ~M5+z~Q;DX*|E$<>gQJR;KJpnQ>6?SQWggEH8(vFo%QG3H^`fuR?R|@ASdLz&ue* zz9PX>Kh!a{-7J#i^@Z5@FOtL-5N{V?t|lOcQ1MC;RANj|qzuH^Zhw+~v1 zkfpz056e#LWK0`s3S2Slr{PgCu%re?(jx)`YE0d%fIXlH`O5VJP`zP)zSDBL%~P?+ zNhoq3LTW5K$(T9(L(IF}MuxoibO;dHm%6t8EUFgdM&=geeM#*1P zHVosA6Xn`=59?v%hi+G{W6{i$6Ln!nKSgYCtwlAR6efJ7=uBOK;{>{JIRczcy_GVV z#|%W4Me@U&x~JF__yoC(mCyDyXv>e=|GN2dd!xxc3d*HeT3(9tn#G|bt8ioma4&Lr zGlUmUmrVzwO98q$0&+A$_o;nZ9PoAhtw*7OAo(Z=<=mfP< zc^(+l9(%jmPMRi?yEy4IdRV2k#7^9h=hGJQP0Jc6k+(2g;DC73s~_#<>rTn$ELW5j z8=aH)l%)x{8)>*y|1%qHXui1~oMmbHfFq1MH6WX802Bz|HHSapH-W}CcMd-LIJMnkv4y(aK=-PPEa#ZOxrdi5Hl&qizzwR6##&%Dx~h}fEacb)Q{ z&0c0mr2ZK{Tbx3Vy;1qL{RljJviiDL$kTBle*LYVBH~GdA+)6lGqp0l{!x`NG-EtK z;m`6#aHPi$){A-Rfmdr({aOOI-v7%4`;2A)s4mcR?pujJ*Pb zM31-(wGsuQGOA@OjEmlsFq=;?6~Av>Abj1T`K}80i}<_nVzUusdtfL~!q}p}an?~- zn-L})gmkfR7@jQ`Mb2T|dX0^Fq}Q5QeXSoHg}xkD5U~z&x15>GRKa|C9`#G41RJLz zZaSQ^+2twtHi?28@fEkgy%b-i>c<_K)6DMit7)w!{-!(xU%mn_prW;ph+Q37+Tzz=2RJPc~38~Q+Ds}QOA=fP(Oyl&;0O-y17W;ICogl2${#JZf7I8yNsQgby6T4j4 z2UD*lQ@!5!v<{!zRz1j#NX>aeQDxc}ar~6#rC#mMu7E|K^Td$Qr$tD7NQ58Jxg`gm z^`=glC697Qu}49NRTw#V-^3Zeq`df}uu{kt8xt*d2w0JJ*Hq^R+BF7$vN3fPHI5?Z z*iqFk7Nq;k{_IV07_?QK>jmu8NgosSJ&DLcEki48wiQb@dGO6GOojOcpGbD2VzK#h z*{h1%v_F1~dmRZbQC<dQ=j`cwl8RK=9;m$)$e>}7DJyU;x1UO8Lj1U?j3;QO3v^*wx8 z6I&vuELm@B$T&4z%gjPU8B98Vel(~m3eA_zxMth=NveL9P!Rpc%Q)FaV-r<>ho{C3l8olY=;@t5qMhE+FBzMbTedov(N)Rvnzmq$`$G*5%b9+3*-H|5{L z&Yva`o+rv;Hx)Brlo5hkcSwo7+7Qe4t?yV+6PYyFGH`4pz>o-;?06Ul;T4xa6}4kB z33C08jys}hjradFGerNWGW~1+E$y&IZVx_= zaC;=smRpY$U3YOfBCe(q2~zc{l^~_4dIs!OzsNQtg0hp+-6n8j6=o$SbwMw4iVfHl zZGRX&c*;1JcuD6jE-~fnaYM}^B=_0sq1`6OdAyQZIm2tyBuA3_ zdZb-_lA$4ueypQlmzjVlmabnuN(XT?8rM<_DCgy9#tx-Q>y{`~JS?pMC_MRYVYaTq z(sE%nFZ*FS#GI$TMZGp|SzyrF7iTc%;tzFU88UdC_rN!;uSNoFG%@1B#y>wGo043N zJeZ;Vf=Pe1=y*WLw_6x=si~uwsslyOi@hzI7mv>}m3cDoo!LWNo~JLP+~A~cbNvOo z(R)OZe&B?WYKl*;B~p!o#0P_VsBAmp!XCKHQcqS2<^`Eo2$S)(jFtjl)K~h{T-GUu z$CepD!yV(v-80+5zpQUYZkhtH)eimF7T}j)b}En0f^DdP@`?QLX$2r6_ zf)G*Q4MK>d&taSlnT_NTxg!-e@epD4Z{d;mBitSQcle24Vkh^11WR^1rO{ne9Ht?k zSkS;rb4qiTFqf#HHbA&rJE;~6l54qxNI^R8-#Tcqyu<+ehC0BKxKn3SJG*a3C@1u( zre@?z8OUTBY6WD1k$J)c{T#A9aKUWep*wgVnZuZwYB5W|6YdiIu;vR_I$l}_ip zsRIig5c{&04#oP_>P~{ZUd%n-`SorteDdL+{!a`4U99;Ra`$Zk)Xv{DSBB~2)RQNb zL)~evo7IY9|I%_dDm=Av@|&a70RVROF^yTt?)EuInkUCjx#7iAZ{4b?>|Y%{NRr{a z>b9|==^W~oekpPw@S`=2h8Xz`+Gsr_apJUbIuoQ5{G7zx2+ohr?3`(2!3>+&bw!zs z2v>}j+3W7g#(jG=|FgTY)(N|8TC_k}p{U2M5k%X?V#qG0jj;*jtki=@rHPAokprI| zvwm~YE&lT49?TD74Knm((BTfyJMVK(&x|+bE^pwdR~}aiWV59j&R{A_!v%|Io%b2B z(~p{aUYu+Q@((e@)5Sy%9&x{wicII@D!sN0{^GBZ>P5zGSkDVa69~W z9{jmcKJ)my&AF^)<@~=LKm5J0>UROCFG!9g!(!s|NwxZ>t^&Kz2c#<3qL{9M@F44} zbIe2mfV6dfRkSrq&c%ad+5xUkyo#O|Ou`zU)%9ag*O~zEdNZ2rPVH^6?6IreFZIjs zFS>q6FlZ-Qrccxplqr&=b;CMuI1QBOdho!jN`I>GR45v_Be7nVp!bVS*6A;8pD=N< z=OE*_zpW@v?wWFTF6kPLT9pJ;Vq4@6HEHjnZ-`m=s_Mf>A&)o)ctOq!c{{u$xsu+% z!>wvo(tWDAJ5zKA1c+UteC1v)(2hY=y^_`T zbP9e-b8~90UViGT@`ts!TBr9vvs+>-E>?EU&36;!+<|19Hjj!=ugDv4u8?6LLE`nC zx5~{gfAUhK4AI}+^#w)$pv}$+{O8A2Fidp`_lt|GJ9fPpV3+_vaEO!#e&GpdVB#ug zK2o*Q*&i0aL94huVq3R)%aF?Ib=iyjSAtB|uBi8E&&2LWXcXMFsD5#CYJ!1X@i78ktjPn4nNNy!aERK%};n&<;+Y-Vk?v$ zKXVak$$kq^IM5+Eiwt4?j&r{EEl0FI`mKCf z@_FmO*SPj&&#rThsz*pz4Sp|<-(*ikG2TFuJ6O4+vHtely*w8 z>ZjHYk{ffQiV_TsV*)Gs3;o_0Z|xl25M|dZ?CUPGzW6f7?^a7IbLQjOYvdZ589K$Z z=GOXS6VrZKwE8T+yHYamiq*#PucCLVWmOIUKq&B+0{Sf}?hTufjgyl3L`fq>u1V=7 zf0n)(Gc~)cJ43E9T&13v$wanf#u9@e8>4j4<|QBX2HC)}7sEIi?lxVBIQz*%+IdCjfCW}24MY}tox?gKfU;ffn7A@g;e0e$YLKY6B zOWw<%ux<7L4!{I+$=Par;HX$d%t|(q!orx!tK{wD6)(HWE#u6L$3zyMWR`sAj0ZDZI8aVCPlt8DQbL7%lj2byTamTrv_zycT&Lrw*? z4j~|d!?eCdT_vNU7kl%ZM8VzVnlO~SbiaFfx$^(@r6!^1KOu+sLDHco7+5&d$(O{t zd~Xekpvs^ZH=(~KAH|h%K-2GpB?FMg>3|Ws;P2gl)mn#4buVtk8X!+O9&YMbozQNj^`nr45lBnPX)3M?pyQ5+IiA)i~t81!li!i-;ak3k~Mq!6M#dn zSLMlIxFbCj*>;RWlc9o@j#a_>UHq@be&?McYSU=v~k%*AB(2NafAs90UXguLyQM)M20xG0oCZ%ntAJz z3tTF)W&C_~ag;>M0v|aaowa-Z>k4!VX)(d(WJB(Ld0Xjzy0G4f0tui+-bY=*s)L=Px9mtDZs8^uoTIFkA z@i9YUG74esU`{vlL~(jYc~Wa4*R(Qfo7r|OSfX{c5PO{W#*#{d1HxoKL*jn{L$`yQ zgP@NOj~N*ZpJfpnug`z^H#gV6y!nmkD}1<2XXy}@D}Xq-=g4dV7oR%!01n9{OQ9tkC_cG-f-YWVcvIdp>K?dUb>qcx z3$eAM@Ks%1YdXzxu=-R{cUwzl>Ws5u|0_Z@IvX|U=BpI&M z6Hh%dBE+eFCH!jS1RxO0%X{EFRuh1cK&!}l(%t~wTayV+d2amHJbbtL;==6Jub(zq zI#*R7uT?&ny5Dy5Lm(#5SPqO$q0dBH?~#ciZEaGmyQvUf*SQ`Ln5aV$jjX-gkdCfU zv$;b0In|Q8?w1kDA>9JyGyhyxTn00SbUP&H^FqjoRr2w%w4OuB{2*CILJsS~wd+N( zSy4aLH4#R%yy|*ObklnS+a1D>D?Yf*zslET3Wr2R@jiXCcTKF-UQe=Le_4E3Ed066 zoR8lhrH9N-nDOu)NSXBwhE3IO-@~hg0TBp7BDDX@#!ErRM-6i-JYq5TdENx~S1^^M z8Oj_kpS%fipro**3(Tg}j7-RD9b9EgsHRO&97tS64h_ycy0`99j~uSaT-S$kX=tpe zieFRL#lN=BXyUYQT^CdREUWa>7pHh@G&m@8I1F$ zi5v5O*4LTm{O*8L7R6z*lQPTh{R!#*>no3PawV}zBUweNvg%!7(eJfw8^)R0s=%U_ znP;bl|GS<03%UIY5=kO%V99ABu1`4drIthNHN>wIwNj#8H7RX} z{&3#c9L4`k>+rl)g>ZUJMLu$8ze*biMAMKenJ2Pv1OY z`91sUxzt~)n@;hesh2Ol=C?5d-o=rx=egkAOVQ4Qlaw;;LR}(0bW|n7B=^d8MJe%Q zEDej7sOR!6;!hL@WR#TUmLyyvkLkmY+d-X#zdU zKi{4+(MY}2=8mi~3;M7CYa7upl+Ku=T(i8EGXm$RQK(cGegu%o;iU&p$|+_U(3WFG zoCyQfvQ)1#`ZY)2@*exp~(3Ws?T_z z+zKqo`oPL>DUT*c&|!LSXA1fL?ml@{`cIpV+2^(kS4i*b=C#GK?cbNbCc>7=|JL3X&{~e=F+h!Gs1e==P*RCglSi`ei3@jBnGP zB)I_eZQw=VUH13Xv5|x*U*Ll2N8)b~u}_$1sB(AkOh-adtob)|!aR$1{E1F=jD&?j z){03`tNQ1dEbqj4Y(z0MA;=@mOqhn37V?qhtkY*RwgX2IjELffOEV2^5!Dzlbn` zhGhc#jzJ8`B)>j=4;UF`{PfhrPDZXldCb+ES%Poxp_}8ueFtPmkBhgta$F3J+nc%B z9Ip;E#lzdq1vP%3VKvU~{l{0pGXp!JPqZkAQuQMi8Tm}9w3wO^)F11~;$2u-)XD4T zQa*p~TvQ}H6Md#2ks=M9V!&ZDLb0AhSV{>Ix~iJj4Dk57IV`AyAF}J4meC9^P`{~t80$k%E`8=)c z+>Ekyz7sXW?{p^J;d!Vc*fzvT7`s^L+Bl!h|CBSkGw}2&{c!tngb?KuZ&*TGc+HC! z8hhSXnqN8*_wF@=yh+U6c1)HxX(=PYcv4t^9ewF_S^WPX?Qa|RAJ5+^xB7+D%Q=($A;h$a z@wHx#j{ANYO2Q_8ZCfo7wIsQmBN>o%d$?K}tzODed6nbIj+@<%K3-p9*~6yt(2#Fc z-GNEnvAczVNF>s{N52>C(&iGL`pl%1Gx%coGe=PQ=RNQ4uVV@vk3?tMsPd_e8RxD_ zuyv%{jOLCsSGE3>Y^}VjOouwVzYv%d-TW<}^65(Sz1VozPNl}enKY|wXWTcIDjD<9 zXXfV$#hwGuRhcuSb5P9I2o_gU(u{FOuk^+0o^>0>fDq9ol?3a=W|xvx3Of-V$PN6g z?CRlj$Q4%eya=@{VN0b5XG__H6QTb-eH;EnT>0Cb%xc^s@C0A z^OH3T+!UV3F>QJ-GdA@IBA*kzRi#6z-(`sj)FIBsTIKst#momhf03ZoQ`86 zni}l!b?KcsSv-VD2GbOg`8*q^#2lQ6$H&as+GhZtk?YHv0z+2Yjd#=0neoa~hNzY& zy7D)dW{h;bl5d68WOy66o7?=_eUdw`3abC~iJ!DD-{t2rEd~61(NelN!~&YYeBn`# zgvv4tz|A0gn-xn!2{K&!Z>|Y^;;T)bHo2I;44bq4mxAdp8^mQ@||GIVqVmP!8X)f+AF_pVvtiW--vPqot zwjZta`G9!4AWdaPyxTJ;FS@f_8{UBy8f;XU1g<-%W)gAE1ERs!eN!EDCF*MMu*dUB zdX@9?!}rII$~>=onD-|&XhE#(KR^D>mh9Pk=j74O<=dK4Sr{)CM}D1 z9Ew-{9f_vNQ(aQ$QVwjsunsgRGrFZz!n;c>K-)8eVe(}wR!i{T%=Z66PUetwebCpnVAi|JmZ)dz=t{CA;bt{9LiK5w{#|_l zTLS=*#CjOv8wAE>ZCwkf-4bQ7fl{h>@x<3^QX)(`IYPUGOC@sYd_~)|E%mtB)l>U^(VZ0@Z*_rnT87(lt@Ntp_5&d zvLWnAG6@x`{3ly|bF|L9ktxpXmE4izw|8x9_LniSC>wS6FeX4G#ezJY{^BuELr^zU zV2VxsVH=%GKcy>K3{Z@&+-JtCGP6p{)q|KkM&>JOaK6g(WlT%W?n$hm3FvH&m}r*4 z_Lc2xT~KyqOYqPMTd|{0cn`(TJL1y4GuO1I3I$g3UwEQ*77x@ieP<>`T#?AgNWe$jRh+JYMQ{oH5NtISQTr#6%s=Yq!PpT5u@kXF6#7|^N2|U$N-lE z$vR8aL4zz?PuE6`D0%CygoUyQ;$a&%1UFqLp5%fuME!ntr%S00Y^#KU=G6I1>=bi} z+N8kJmdb~t4u%@txfY$dHI@2LeVGNp0f*dTMch|)q>LE*P1T2D=`KY_4i5u0|J^F< zU&tAqlXy8+(!nY$2}$zwa{dcBEmATj33BEF$kFP@u)kFf%pAZrUdYZezCJIRyBPC= zIUKT(C81}9J8I}uKP^io1%ECG?B5H`{qo^NXTx9tI54;6h~;$h3H)yLu9@&saF?hi zV0zQX~G4jd+czYzR@lcRFDR z$*RVS@9}(O+&22aMEq#FQsLKc&Z6fZ^4Bk)3T~Lyx;(mE6$xn4jrU^&0s`>t{Ca23 zWbD@+H2I)>072bm26H~*BO}E_SG{Z2cfI?z;UIS3e>hUv)5G`7>0q& zsxz}bRBIS3K4slJs&4od!IPNgF87CzuKBa?gm9%@^0gQJ?|W8=1XD_?ZWp0Mb8n-R z=I>J93JV8P!*dsOt%2g(180VpGRPlFaTLqSkKQw0#uMOVNOE;`-heom{e0X}ASw*X zYuCi|wzkafGb&UAgj=f7#N5?3$iXXCREFkajXqV4)XPR!K1W&(#O5ccfm<)xccFQxZZ1>GOLY zbu#6N8_tq=ISqb~nCkp8(!@zIdyGZbfr2r-OdB?zmI5H{Y9h{+OYRN!H3eN7lS}nUif+fK^Wo>%g!8dG*b+VFhiskr7=dc`j#|5(`q;eLYt--L2$0A;t1w!-ZL~Y7EE5 zKQBGYA2yYL)qytZj5vKEqD!`S-otOZ#_bg`7+GH6of9K~&6}bG1l1L+j&S zavVEdesl^0%Jr&*tS+IfC$GMJCRg6qvlQ`}Guh3*BoIBBrv#_oP@T~8wt`{;txB|CTzU$U!SDA zyd%4?jiIo3)#GWlU zZzc#sr$ZYDPAT%h0F-7D489C6Wm@gwr2qj&_7~+SKC;o_F4}jNd~bCGUZO1h8>Z!L zYd>A*k9Y+Cx88GXvog!0$ex#q)Ou<&Z-{Yxo+wsA!cr(U|IoPQ8}_HDPUtirtB zHH}OSSATGJzq{+WPc#>^lUMX`EU zOFUX`luVi8dSE7s<8F~5jqXY;#DcM|*Gisa2*%GIz?$|lvNMjtMZ5Y$cNnYk;wJSU z_PFBrke|Q1`V}3F@kTnuy7tC+{mHHjV5wNV+x#p7)8}h*@N@m@ADW-84Z{!TLoo$o zf{klAtT!KepV)NZ$}ZQt?3nB97yU$qZC>e9gQrUYn|% zAmmU&`Y=(Ck8K!mrm4Q{Ay^01{(%{wD|wD08DZX&&2?6s0E=wwhA9jUdhE2oG^B@k#Zbd)dU1Pa#J^c1kKbi^qu3^j6 z{KMBZwRu+{72Cxt_37nmO{yR!mUt)tSo@}K%!Tre2FsaxVF`>TMa4MS!)gQ5>j5fa z3mMf7qwlWaHjwDC2Ppaj7t$thn}^^oP_n=o;>>}_85gq^QN&N?a>d*-=#SkqdxCNA}l2eUL671a8>`S zoBMmNo?js$?zZkSGbuBUWDnu$8DGJaCQcf$azx2i9!+NRH3P`vo8t@>XQ<|O$M|(v z2Eei236X@4cs_ED#U^3{Uq@~3{TK$&RCjLO5;spoBf~WIjc^2U0mw}|ec zeU^uE_K9?K6KkHdK!sRoHp^4%?FT;SKrJw*#^iw%V`|xw3|>I4oT;YbtUTwgB3ztX zbK>y=)0h~T2~#POxD(y|2>va%9t7Zx2JG@R7(*?D1+D{uBIuhjvx?5K_Qz>V!sO`yu z-2VQcfuV-ztpt;;yhYf?B_zYW!5PRHkpgk8XiYKyF8!{oPScE=?DFHotAa_1ay;!H?)_>T72DpCH9c`jwHyO5hzaePvB$}5KQ9AwQZdjCeY^ncIQGYZmvm%6S+xul^6$qqfl zHNG9PE{+vzUX8M|fS6)iMHJ@?cH<}<72Yw}HmHW_cU!bfo?-0@AqDWly@0DX%z0lt7GXYiA+Tzb&DPaPt*k6h(Pw*> zDrqg2rKFg6$`>0>1u}E2t8Em>@5V#l7@M71Ox3!aK5`V;@r^LQ>(cQd%L?%|og`YS z6UFdq<}QhsL(oi->UaxLgijqUTNlP!4f@1tQQh9ME(H` zRA9MscIR995f&QaUAOLk6Jc?7pI+c;m5?i|(vnJKrh1&d3R|!*br5gTUsT{bE|Z_6 z58V;5JCw$}tU>X5(iz2AS0tD>r0l7ho~_oP%cbPK}fXwrT75TT)eT5sr_l_SRQ;&B*{2p$4Srj{ktJ9>&<}pNao1R&l&t6YJwJsBC=G&bRy|_3TAxOy5Xrm zz8I5)lDR%>_`SlEDI={|0Pexu?D4w2l?{?MV%%C8jInEx+>u5zYSx_NEk)}qP+q4u z**4A&^Z!MNNXY#M%>Mfasml2rkPHnk)C@?;nDX!hPcN*ez%I+SxISIK98kFEuZJcn zG7JEO&^Z8I3GGP^ld)Q7dfu=vWYR0$>;A-wUY67-1X}J!L`2QWS0|XBJl{XFBilU> zCb-z-^!ya)Ck|atVubt#8fi|Mr6-M2T45?1ozP+fL%uowPyOcSn($vuu?H{`}$eSqAsOY<)rN}b+gqRHL;XYi<8jt z<0+3lshg>y(Y(Z&sqnLL(fMmatbi0=uGV})z1rnR!3X@F%)xlN^yUX`sh6#T?aT6- zFUi$Dr84{=uwPz&jEt-VmeXE@K|_}LFMu@zn6}4pvB+m>^)s%)zy>3&4cJFCU!FHn zkHiyq+G1(&c$azh>+HL@a~R39Z*x}GGf38 zMq~FRE4UQx^{V!{N%AUHUn6vD_Ud#Le%kE4fGLze|4V(=eKtmNR^l^-KEjK776FvQ7DZYCp^BR zm`Wq7NI7Jt`?kK0)#trM>+d|??*bh~$6RcA2`AU%bjv=bn++A8y<@64~CNM6y>MGm#udW|da_utq5B;1$;pkSfEz?@KlZ91ml(^PbR zk7H_nvPs@hU2Rn59As@c+mHfYX4+4DERdKU2T067u2yu+FVb_?iPa#2&rP9X)~=yW z3{7l4jx{sy6!2^JqOUN`Co&U@E&H)Edkwz4yGbRlSKduyue95D7 z7^O=t4}UMW`z&l_P|B9GruXgXP?oViN5w-&L#MzATHj@dAw$zq->O7Rb@k(SseKLW zMSd4w?Py`s1svH^jgn%(l z{DS1K;|3TrJ?{?UphX-bh9@!GJ#?;0xwy0W z*FVL3?`-Z}u$c8wfA|9ztCcY!+XFFxsi~qhFE8f}!oI78-}z06n)(;g0&4zM>Hb1a z!Gi?3Z2cuLNrxT<%IEi{^)m|*)}Lu!r!}fLOwK7QA&Y~^XK{m$Ac2dJWYVfQxWY`j z;`WKPV^*#J3t)@Ux=12-<=|cAt@4KBYJ52bXR2}T z@@l)yES)mKSJJ=Tj9Hun|J*Y+*_JRQO+#>A=4&AB%$MmXcXf*7$+MV2G~%4N>**q^ zc}0Mgx`~Sd5H^cf#>f4{^|7 z8phGj%kV9hBxmN9B!C<+xSd~5L!Z6YAv1L6Vgb*$4{BZc1p=mJ44o=_t_6=!AK;5_QoXSs>nb`C`yW+)G-RJ(Ci+TfDPWI3ll!^zi+-MV^l8Y z!Q-LqPj#n^G~C|cnyDyURJ#&gh}^4ZBBkCar{@orrmdAGvQHMYp33W@DsdiX1*&P` zEG-1Z@{cEFa~ub{BZ@IrF9ce;sgfo8b_&ty^;$Mj?+ur3oiWX_~oB&6qt+4K;m`xV$dVP}7f za>^@Cvvhm6#B+G{;}_HNeFK(6p^H=4WyD}uk|P(w~e9Z60j%G-Wwl6+VD-k$*ggK z2B5W8B%;(sS9`hL4CK(I7g22NqWsc3--U*ls^=trq1H<2xKvip|a8cbR>RZ6?fRZ5;!G-+h=LcYYpft1oKC=IJ=oOqr?m z-q9x~q;>Y_A^7%~azOi{ zv2cND^3mHLR@M;-br=z5*`6R7<1ZDB@LkJfk#BQdcY-jR`)vwRNRff$dIFCdPJx) zZJbFOz{q!Al7d2bHLgkzdvzzf(m}V(d#lpei5TWr7O6rL|fpg39B-+ z6!q@UQqRees1HeiOw1~@RfUPr(3B)Q#J#cvO0WA0l<0%py1|HU?w}CFGv*AIq?9b| z8w}7X$!c9)%0ee+7iCN~q-vOQ6DsL9`W$T(phbfHzwNr`re7hmln-J%Rqy(UR;}5+ zdvCS!E$#J~Mqq{Q?H&3?b74LhvtaD`b1%ombQ3Qp%H0~BSZW;&f8?6RD7E^&Emo_C zeYbQ}o1Ayq0km+jm-KA%>?X{Gi-KTlq}Gt+FGYZmMfwv$i6a#>28Wi-&t?B9o6p?( zHU*mr7EBj>3yirQR7oG7eBm@WSLU=)?RQl$rVPU#(uvi6?i-c%KQtt>1(8eHA2g*SJJ4A;Gxg#Dlh@9y`pX8m^ft5dobA7683k!r4R0q zYi950@VNZz(?QVZ0;ZqOtNMuu45 zzW9-L^xAgqu{-Q>?7qPH&7|&m(^k7ykKl+Ndx@kzF;TI`dMPIeOG|5~wDU{RPimr1s5jDZ zTT0}Z7Z!X3x`fF%boK}>$e_+}$oopgx}CA%cB{dDf7ro&ZyWwU_DaET8PJJ$@0RvF zc=r8A^i?*Hlx3Iy04jG#Lt)fdR?|OewjJDoVkIx75@3RWsW4mO^b_o8ku(f5jRB*6 zG&pmGuL>eu$ZnSjGrK4IwUClmV zA&dJ>O=y`iv_a@tIsi;{)40;aMZhJ@AU zN+79($x@xsR$H|IU*4|6lH}J1?pQ7|MC@9dPS(`b&_89Jw@Sl+P?O9AuoFH6yQarf zw=_JBH1?0sys0sSx01pJJBV+*sQP{r={KW#S~yDo)yB!p_G;d2O3)Y8FGoGU5^4U$ z&*A<;u1%M;tM9L|$Z2ATO*srdyCZgsNnBKyo@BwV%IiU2#m_`STq!qhe8kaQ6$zM4 z55RlOAv4qs9oT)TG@(USB^J$6Qn0Z6-?s+lU0A545{AHJSk#L}E&%dj%m{B1{e%ev zB};JBqH2Fm<~=E^*s(0-WOTZ7cg?4``sdyz{CE1}8U$b765PjNC^*XeM$7Sn4W1Lp zQvZjp_ljx)3YUeG5Fk_&YN#d>Ja_X&TG6Q@ zFdK?hr_53MLZs1@V;}A1iF##N@8%W5eHrERj_7M^kM+&sz>q~SW3y$$yb$C2q#&2G zWg00I-^0(xEn#bfYqE+7H~fy@P&$>&?W~3HZrg=|@9+pMu*!%5o_5H3r@P5 z5f*V;$o4QR`-;Ke(2wp5=|8JL*-Q@<(nj}QIi8{(CjG<$rN;Uw&3S8lN0 z?}UT&;Q!k7@V`%0^4CAeb&Hb^);oly99x6n%*IG&FFGeCGUUXi{%T=s8+2O4!vU1T z71khM3a$yv3BW>7j)^9N027)HcfqH}OCji`n8SdZ`q>_6{*%NM@Vv7s&6&Wd#EboQ zJ-8gluaHxpw&PBfCFSJj&)DsC<9tU{*IHG7>i9}5uV38pcS$y*{xeyN+AGs@isCD5?A&wG`QRSz6ae4`TU?V46R$_GEziKimC5zEvmXc~h@`Gl#YUD}?Lh20!l*HFd$ zW9Nwc9vMAB#AfTR$|ve7>Y91#kP%*YDo7bGPZKEovq0fp^Z0%wOYQZqWw+!FNH?!v z)Q;@l8als{OUFR%VmEi+)aU3srsdsIWF`xGI-Zt8F#cdw+0;_l+M8i9kMmIiv3Qsd z)@b~T4r}24?Z%3fDHpT2IK9d|ZAAfnaw-w6ie8$ED{Woz{p2}hH^vXtzh%UYbpCKkJZP~qmVsu#0v8fThYXkgDxdFN?D>zM=<8F ztu*@HwlO<9U&_6YrI%HrYUhqawi6)w@d_Z*Hr+XnW+(gX-!id-j@uS_=FAh%3PqGK zxNRvY%MF!IgceB{R}>fR$*}%XAO!kpwuqB<*8Nv;)x*G^&nXNg(*5$~-9$^1DkETn z7<4*Xd+P~zcsPBmOz`(R!v_zFt9H;@8K%zHHk{J^>%O-Bx-vs;lpI7l&kWB^)T!utjzK#cWiMC~Q9 zkHHBWD|Ei>k#9t3FS#tycpkkF@wsG4H7j{zTTW(KXr%g=w8^NDHEtaqd$r?MN21Lh zCoGj!@}jPNw6gQwwhk`pbTBv!1;4np9DD$PYvo9|`sV8^)I~G`++A-hF%3ZUq77}2 zz+;tC$xisN1SZyXYf1_QDoHIne#B8xr!-NA$$U+J`(bq!IPGRhsx+14PVsV{^-%lu z*ZL(lVE7lYR2)h4N=zIm#n;tXjm8QT;ri1zJjHwM#px#JGCz{ycCkaB7%#E$qu}={ zN{PR(yC&>4Z&Od1xN5Po;KzVOtr(pmi8KtO8qZeI3vG}TPFtXOUp3TQpY24Y`T8Rn z4>zma8G2kA>W)BKF?}T%DaLX4z5aN)OB;(K#iOD}!ff?AUOniiyzh~P7&%0C!c6D- zYOnzKW>HR!{pORxWP$ZcrMw*eK&H;O1HKiVD$_=}2H*~>Uqn9B_nMR6aEMS9h zOZTF2$uTCK+=md|aANq(k^mS275$MO3>>ElhmOT|WpiWr4zK7|*6s#I%Tv{A>!@vG~cFKyfh#^(;eA#rd%9CiE@ic%3WqC`KF-O!75d0Qg~HQ&A977MYjIqx_^*^ zE0GUYJ;G9qpe7(WNkzs(V8#5Wur7nx-(;M?E=@uHI)35HY$G%sET-FNj`nSze+EIKqT;7r%5{dNkRGba9Z=GOAHsDicH2*L059LO$d3}M@(j*-^($_?E)I*P=y7&F!>!+a4X zT2LHy1V^+5MEmBRJ+X3bbDWh*;YW5|J;wvsHUGWC`0pL7O!BiKhUWeiVGX~r2~?)3 znyJ!#Vi@5Npt48&#N)%>yVpqT$Da)%jmaBJKIn-h>mMPobn~`03C}{VOq~Dv$T*N* zILG(xP80xSkS`NJ6Bo@c1@Im&LQ3SJCHx;N>^8F+#=5!SFjht8)$O+pu7*Uh`?J#X zNIf#@V5|kROqxr_54E#9ISn}x+hJaNLPFOftUftsh|jPpNE(`*yC;Z@ddz?5U5r!_muso}g^) z*HPO0J3Hu4Fz!}}!UZjpJE-7?0QEki@ZD9cS%M4of8w|Qb-4b6oR>M^5-LdFoWg(| zk(5MW^VsP!s}$Fz-*_;pTN1dsFgkffyZ)Is!nlg$13}k_u~Yo1e>Sco`Yb**g`tP~MWE?#~-6 zeAlSSy%M5sJ}%7i4T4eL)`4wttYlGVvI>mcxkviM_fi*IN$Y)2s`We)hk?4ET>VX} z6uf~gxDX;sD4;d~A4OUR=wU@;D)PF4HT437>8F%W_-ljrD&bu~jKPmo6uv>!*m_AM zPvlU0nHnSia=m+Bs&Cnh<)_lIWb#~&bc@rsEu;C(iqP!6)kl$=SxFrsllv6irof8* zbO2=&l-_mtF2RpK$>dFAJ;Q`JZO%E>Xr(gJXQ;COZTryW+ts)loeyeUzErFm+r`14 zT+opXF-y_Zm_tfQL5`(C>{+s6fhop)@=j(AMWr^OjI~lCaIWhL_-)NSIxDJe$%JSc z-kG~%H#=eT8)8v&JwGKmitoe$znBUQz2{80$pQKdukv>lg8hi5l2)5qPUSuFpziRb-E&IhwCY;F<452yW0lk2)tO_a93O^aMUyZ zmz;MA!{$i^x4~Acf6SrWTA6mPL5{peP#=fNZr7Do2~Jhl8dLgHgA3P89+9QEi@T<# zroE)XX}!ahIUzo~|0m(=f8p(avmApr`Cttu7mW}kq3J$$M?U-GOnIU>agPV1W&&P1 zkLCLSpph&=%S?xelDc4uWDe<#X-LdKr9dt~r-}(+b9i4vD^13fg&(qjkJo3esG?gq zmO*T!s9zh}Y|PTx^3yN=(`tA>cQMn-R~&m-VLz(ll0PK+D_s$BP4dssJFKKgW(v7= z>!I94$c$0~2rDPXPHKd|b)^PfLiGM*3j@(WhDfI922d@@!WBW5=Z2%!qqSt5-*}cO zkLkMNk#_31U|zKZGk))?3g_s`;$h^HBR(2L1%wibmgJO2ee?95*;EW-yzkBq7tH%3 z?bkJ(Jie7TF?O8P9{_xj+2YeJ9(G5BY7ZtpPJBN#HH*uM*l6k2B8Z zO?rlCJqyPq}YRR{r~v<&L$<)0Z; zm#LzJkykG|L-FD4Ll@58jz}x;==d!Eq~#oZ^&>XbT>u=%=xQxi80IJh=AU8oFE5*% z_wR5Xaf>xev^D3-sFNCrb>?Y{{^H1`HGz+*XDPBWC@uW5hh)*YBV2X=`g_lw){T|& z#xg-r)#u1#mFtgC1$}Di%eHp#5t>L}DR?#PZv*{?yu1mi5Fv*!KbATEt!)^3?{|dT z+>=0;v&F_vmKRV9GtB>n+=3bza!CfJF%f>jnZkC9K_Y>$N>QBAw$Z3atyfYD&jC`3 z7XXo#iEroUWEj^6mXNNV4)QW99Eam$A0c z{Vc&yjB$C9X~&YaCRfmUVCQ5dyxI!<%M^n2?k;t1oOT)eB*S=7vBJPc>$R+UY1_Y& znwO{sUawK&x(Le&CSnsHM;Ddv$NI>VN|Ig0xFAyyX)hbq95n)TOG;bT(2 zOJ9S<4Bc;R5O0zysiLE5c&@LXbgrj`g_CoR@nAgnr|evEM2|ay3eI^|9>8ɎKd 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%0A&Ee~9MUsI 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

      @bRLh@~n0?xKCwl6` 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%0A9{$zd zGS0iMekOj_eq#I8*iJ^ynkrgb*3F$&O7g}%yn~R771WZDS&Gow@G?0t_F!uDr^;(77zYjdT7+e{lO{R*`gGn}{KC&s zL-R~~DyDlRmus79^*FwxIe=(ZoY$h7J~EZz@Isjav)1?FicR?B^q&pBmg`~}V=U|$ z|3_2($9Vm#az#K&m2)w|J(JLjNgL%LQqq)i0>sr!D85U2Bnqov|F5xvf>0CN zkwLuLY6a-cy=$_$PF>=@-`(rV zJ_B;h@0n@enzXw%#GKkGb-$yE88ldF?ec2qx#gl;1*=OFDuXY1 z0!;4L(?w_HaBM<66+v`l?5a+meMSm@laXq5$jAd5!fRZ99$`5Dej z?Zc|f*cokJTI#IskL3dh@9>-|gD)W`wO;uU2Dem{Q?zS+*5p1qYe(i3H}EoVqwOZW zoalTlMnU>#hMfHBkBHs|mAPKp(dkS}r_o+Z1r+qWnDL%Iij-s8**lY5!-nZK*mCfP z!{Olj5DjiqjJfGKfUioEbFybu;U`gW;@Ia|wy@s7j*5DZ znz)cNluM>FSHwS2+v;Xvt7u%A$LD}IA!Bw9*mz~{{BmLpBh@uzu~6e2txm^8cIsq=IKh`_dggQF2K5Z` zK}2(|pbdbIULROHoz(D5e%0v4(L_@1; z-)^jbR~!vaxsq0oSiEfK+T(hd29f4A-A&W{nI#$%RA6gunc(xqz#x!UxAv87l(JX7 z)1z3X5oYXB%hi#IyHX9}_XVr!Z9^~n z?{N|qfiJMPr}!10iISAy0RMS&Y9jnL47x({5(hzgZmTK8P>r-Qc&6v7X`g1y=!%Hy zSsL#~JEo$gGNO^+AHTo-r;hi>;QIfZRDG zo!MDfV^XF&#Sr5~+g6wa08kM?9y0>6_W?1fPhF`Y1W*yx1FD#`xBzOR5aEZeoEH-} z>|wqxRvVZ_kgZ(czn}i{D@aKT&K+deV`^1Z@K8UskyA*0Di5~yw0Zvib!TMeOQx(D zmNd6dGwHcyF=JN>g_S*>@}BD%Z#4%+UkcJ{RYB`73_v=oOCQ<1J5 zA|4W`@TyL4ax@VMM__M)UR8suD_!Xb)rcOpQ6F_fF|^6hTp_imC#2;(klVcTq=0O z#8Jr`?Yr(~*T1Gdic{u|F8;+eOVcYS0=m=e;nC7cb>UadmN-j??iOvf0>wnT^}fhe zNr41hw9m_*){-U<&g8t`$laBn_D30#$@XW>#}fw7`5Kx%DF5TM80L-bHeyuXAgDLO z2;n3=7FwsBhlY`p2J7vC`I6v-BsHmA*3{n5mlbpb`*h#ZyZB})zR?v7{~}%0n?KCA zsFz!|p$FOeW$yl-nN?NfYQ3}Id{^*5$ezLaUHfy>H)U!=EjQ(|iU)$b*z==84E%z- zJ95bqxXjURRxsrUfyG8#+QD%TO6cnS)3J3%QIiQ+3=d;0-+)%%Ait)PU6z6mepetz zJf2WQr77W?Q>h{=Fl{1)b};Yj^Z|$C5QDG(&J`PoBd&>e-EAAT`cPaWqaati^4n@| zJ+$Q08-JzEw(<{yc%2347Yq!EGPNr5ApQ8LKILkzH@O~n9v9IzTkET7TBbCf9u)Q8 z#Y_Jn*DVO38}v2A<(lcXW*Hg=QTQ(ANl}eSOplg{Cbx+(2<49T3E==craW zkj(>OlrS`mmi3c8gmO`lX`$t5)z)6Ff2`ETJsh9%sIohiI!Ed$A7?~EvD&SO1nuMt z-(3qt3RV=~d>SEtzDaJQiGhkU^K&@tryj>b^d3wESiM5Rw!r``H%Kf|&m#*CVnj$Q z5bxJULiK!&-t%F!f+uLjzSE{r9b)W59^@CjOeNGBoa83ms;F0JNMh2HEq^3_tG8C* zd~$_XVX(W_1^boCv8hA)&*9@s1TFO3AVUvcWPu zW+WLvc-bgqgqOkg2}~~Kx@Ipw6~7!921|lKxI={Q*D17o!K9cJkV+pV=~)dG$n7wE zfHlm)M3P{U_cA1pZ*t5FYYsl=pi3xha#5ZX-R}Hcw_xaNmHtHHedYk$+LePx7Q^^@ zkTQR8EENQ@pH!8V=hI`v&?5H%xlYb_Nk*Pu5>uGz5G`MN{=ayKh5yx9g@h@MHNbGj zSd<-|JZ4zo%fFsuD0)SrXAz-Wxoy&;7y+OdL?CD_l&irN=1VQ4AIV11z+pM?Zz!KZ zZR)L0Ju@K0NAun>lw{Hm(TE}8`R)(}9Gw%?4#NO(O;)(oL_ewWDyFxlRq^8DI%~a4 zI9X=6CHc)aYmtE0N04|Rrnw6h$;+2TmpvjbJ^Q?6Hqib!=u9Dp4Y}~V5*=txChxrg zAurc;~_mmgI$BQ@zZff z6N#|3VqS8Y@&b!Q@s*ox-`^^6i~N}Bp%%}< zeFX#8gVQhZFTDz$i+(9yG(GUVEORl?E_>{?U($Wvkjb~-i{5CD{gtXp=zMZC|IkI? z<1s3_2`_Usy;J^x=Grisyj_zcz)n6*a?vLrr+h#*;KZqTlavG~>bxSF?5mubh9qE7 z5&)$!tUKWepV38nyraHxPoI)tM$ZUY@ppy#xXE;xQ(I)ef={e@3-Gp*#B;!YbJ%eVL@HXFVMNC59H&cBnR9>Em6e~mg`w+(8A1BBrEa@4(_>Dm8ZKL0<6`_EghV~TQ9=xBtK7nO!*j2{0Jk|2DA zuSmK|&e;fT4N;aPbN~Q6*4whSn=iaSx70VCTBqAmhAL8~USc+CuI6H%k!xL$Po9Bg z!3!O1EB|7JTvBQRf0MWa^3kcETecB8^{XyhDW`HkhX<+~>wJfFEmCgPo>cNYu4W+U zM)}LNvG`5H#+*6iJDo#I!4Ssmz+*lg@RHAL-{cU$-f^Zwak~A$+!aWJ$?HVo|(43bZkx zL#=6$Q|?YGSy-|c^LK)TgE`U!Z3xZuHUVroS4y9!85&cAaH0WqjoCdn2GU;XV1(Xv z@5(DTT$!?+C)}?)pK@ht{E~VxQu|N3fbvE1Eb}|)IA%d{1NbDp84JqE{*wKv;?k`+ zKjj9~VDXn^GI@SVu!9`a6}m$1_*M4SL+%F4go;AIPjP8EmU%uQIzR?HoRJF9|3xo| zU&m;lGO5>s6>&+#I5tX#T%s{0an1gYc!#|K51}zoxT_DCQkd7|8BnFQt%|-gt+QOq;e<6*3z#16$PY7*Z)8xVFvnFu3RxY zFgsx`G*tVeWiDbUkyzw1Ui7~k?7zm^n*;zIx*E>NQ?6}N>xv2gZVK&%uQa(z_L~T7 z^-cU|NrKwrWb+mk&4NPM6gpwFJu(Bdh!|c#Ol5ywRhE@p>@97z*ec@}Y8-ZTi`C)r zQE%y`&HLcClEHme3(w38b-&*L0~R@7;`i-NCzpVvVf(Ejk8cX-ysIbK6(cK`=yDYc zKR#bly_8_xc*R99#kXgoR7F-82$qMRw;oFJ#oKo07>0JwY7k50$9C#@;MoHOsH0vL zr0>Zd;sTKV zwtmHmh(DShGRhH8VR{Bq4Q9W=QsSV_tRKk9K|d+-q}vy*p|2nXMK9%0Q$?f*UMa79 zl}(@SxJkn#xD&1aE0j()r{~<&)Jg+tm0hLa>y`qOHPEK5iLsz%&;_062^I$|S%F*% zwzpaYw24F-BZnWA^!j$}LqLNQOhx(7H}l)c_SzQ$aGQ-X#e+ATW$2S9b-b4zUUg@3 z$0fM_zRzuuG%3Y+2;!Yy5>Rx$dV%d0$iozo4Ow=qkTapgiVaP6-kCEae|gV${^VuL zh1(|q3x8f6eH|cWS5k4O&jczuiwsq5KsmA3jbxJy2CGOc(7|3Rj#OB}1vYVlCiY|| z#9%f|4{lB9vr-FVp;h>4HAC_fY(U-zqt_`GbsyM89pTHaGmLXJU|`XhA~#QRLak+9?m4N{-+T&H+8F6)1-5y(HnXb1kd3^5?5#TSa;vvE%M^ zqr1-km&SUbGO}CVSrzAJg8NhiIany zj|K+`WF~FM<@C}ugkq?G;D>LMx+ZeKG)N=3irYE+S*MGI=YV!fY!#`seX(`gO)`An z#pLe@mF=~ML}z{H$M+xPPM!^)y=)6N0-`BJ*m^7Cw8OtcWZ9tjU|S zeQ>%TU8(@o3x-l{6%Zv&4CSR1kn?)~wYwcB4*KmlLTl-np44mVIoceR}E=6Q3bT2?=+4H8HBFFG*4$)OTmQsmY za6OJcnk?~)UMB7tXh$jUN38zACI5TZ3;Vaq)h*M#OE)cTQ={F(Gi7Com)X1!Vt;+; zihUS5NkXTB0VFYWqCofyO0fMVvU3T05RqfS07##jfpdg_+(dM6*S9HxFDY#lLUe}$R68S z+onYX$KcQLbB{U`^D3dSDO|~Gd*v|a*~_{!>;Le&8SHq_BU1kv&HcBkK_&4rG`S< z;ehqS2Ulq)=a855-$tD5(T;PwVJ*Afq|Og#Y~TmU$0IE10Q}I<1XlMo5lp}jF}nj8 zFm_Va#z;~W**QNpFfr;?JrwQn8-v`j^Mw(c@f_}qohrFw?@^5QKyaGp}Djurz`FVm>@GF%2f%{Wx@V!f;^aXrtk1dg#Ka@}ic zs2+OlvHh~llF#Gtgr=oD_dcnH{6$kpZfQXLEM-@W?Sy1fBS_nhR+Q5fzj7QKWWKNV zv1lwVliBDCCU!wpJ2Q>T4~1(-%V5LfahMMT1x|2QI^~_@gZi=OM8;0ax-Uv$3+5o! zpdy>?yNh_sXigX~5YMu=M1Q&rl*D_ALkm-|#I(~kabj{@ZBMUB8`mG`SMC$~+*=!F zvg7`IQ!f?$>WiVh3P?`>=~5B;D7dxo+DjJWyvj4ef1ZO=kwn_gK};k0@{@z+f4aYy zz0qocFq}3zm62P%r|IM8%%N80XLO#mEZ=ZKOLx%A#aGAC-`7{b&aMg= zZetNQ^vylR)BtcHc6zp%t7T1pY?ews0|?YRO|1&gUo|R!V&emGijtbmf1;swf^Ci% zi}Ib`ZBTYSv0&%iv31j`aUkLD{($+AEg#X=`@RiS=WoWOqz=#ZPW|-~Ty3^mzPA+n{WmhwCf}YWa|jW~`P1SGFQh)`4N8t5 zyI?qS)d0iq$Q9awww1ZO8g_D)U7^}lq+Q+k)PwVz_^3}MZ_b#coK^de)a?Ad@F$y;O`f9eP&fP3Xx}+~*!-a9(}>b^K33^G=^H7LJRK zNPD{tQtVHgbsg!$qk;X##HuO$$CvEZyn~)Kve^Yrd{wM$mQ%<+p{aL^s4mtQL2mq< zdnri+uXW^CtrcxOl zlXl$KxzhLEc?9^1Lm21$&c6ZoxqY3}jn46QkL)pDs4UP-x*>bxm~PRm|Hlw{z!G}U zQ2r3j0x8mc6EbIzMOqzwAdR={o$6ghFrHn7%G@Zdu;np+fvIL{WD?M)r^#zvrz)jY zkfA#6QXIVfSDXf2?u%j1V2$c^)fl^*9&2q4oDUGPXt4Ypylf7_GPfZg3mL}p5(kWf zA4~1ESGRKprvwDv73t4AuCJ_9Ke4!dl#?&AKY3NQ&gR+9t(!At{~lfc_EnP%dXY1t zN84B^Rc6U*=Ukyr56sHgFkL4@8!>v3EAIp#uuw2S#D_5#Q%Rx=UrYeyWdbCsq+O}5 zqVP9ru%Vr7g~1EI+?lV&6G(&v;%q_s`UTduu$RO;^>_Q~KR{M?)jHSY1S-Q9$>`uG zGEfHX!`zDy*8QvidqeFf?;fycyR)Li3hW-FzyE6CZtzqnrpWU;epNwSCf$!g-Dx$6 zMcPQ_3ji?U?T<CyiFha=6n|wAlI~NBNN&$adA|C18d`{U&en z1JAM%$3r`AGXcKQO$FhgEQ1xF7W~CUab`3>WjlVIVkKCMN44 z=#(7yWchO(1i{LU+2jTu3&RpFCe%FXH$oh@aIScNv1a+9w`r=bZM8_@PpR09&4a|C zo$qAinY+m=G4|e3tt-XNy&=?SNtnAoI`HqZ^KEweQkRU72p%|k<}oza=&W(c>q6+f z+WBoE#qXW)93s=+a$X!4gbI__!SCIJxh-O`M4tr)U_k=%%;9|>K|8mOF8;=f!X(DC z=_tw&6+c294D^S(3fTI=!MZpUA9Uwi6G|%(8`Aia(uZ`CmsGX2nTlX9sg2BfA2s-{ z66Z*FoTPM@8kGuKY9u&XTgjPbbX*Q_D6!kTc1>Pvf$}r~6>ZFWlcfabK7l_l4epg8 zpF25)01syt{4rTn-s^xKdVqBW{*5#xjsK!Z{>71aBIvZ7x7F0&%(&!{uD^CUPO36p z?>gwy5&suQ0sxW{AP==}F?1B;YvIdTNC%E zdwkpmk^u)I_8_D3I?_%_>YFFl_j_>j$h5y+LO$uy5JbY%$*ylXJ=Go9^>4jYyxRUTThH+ppV+l; zgezs2>NwtzfXyeta;%IN`gV0ERc~VNqqG6bfGXv7UKJQYoch(A0!&5iC8`p}I!97& z$-dVTPIPEVs7-Gl_oT9!ZRMpoa`~S7f6lPgb}mnP)g^= zKIh*EAaJ7{yBzb%&$?&@uL1+)6|JR{xo`Wtc^LS~uI~zOiYeGcNH=b-JKF#2SP8ed z-{PA4V9F0C9@%x*#BSezF8fUN5ls1I&W3<^)T<=;Srw)exrUr4E8oPS~J*VB`6_=(7MSt>PP2tDPoR|6~lpX_tCX(V@b7?Uiw_nPwwG2H1rh&jU zp*vrZZ2QMjh~SI-ekBz$$!yg2OYy+vNYxK=yvkw`2W>RC$>2+=eHBrfgkYTgLf5}% z1*>%Ie!T3q)gUXar=qSJ5)B=w?A)_e*P#r ziz82OoKN$IC~pfv6Z4=wW%f!`&AEA*-c10&8Nwj8>k1JGA5Jihzn;L1uPFZ+h(eP2 z{nJac9q?k-n325-gLr0s*_!MjOeHBacOOkO!pwF!Z|kdMQq>IR)Tuc4Y_$OWaVJ{t zkaiW#Oim{5)HSbQ-!ex+0V5kQ8#yz{pCnLGtNuC#=egoNHUVKN3wqckbRi<6D{>DR zDGkSk;}g>#_ddZq#J+f2Dugj&%+k$li&=Q2=%!Q|V#=cBqw+-Ta@t3_0CrbEVt?<| z%>@4+Pr}{PYBkyV7OT%x+I)X*1Uf9po$bgXwkUDL4fz4VDv%Y^gU%py=f3T+e5o=j zZY=|dAF>0we+^Zs-SntIb zHg;V#?8izyC&1Mt&A>86k|CoGW>NtNTwSF_;J+SB3!X@jD|?QYC#M`${ufK~7jkfV zSkfBK3Ky@eN6FrDqvwniacZj=PXyoXJ6(%Trt4jtCH{_4;+KdlEsL&=4vGM|Fj7bv z3cJrJTHr2VG>V_&dD>qZCPGS(xn^t$cG6npv8eNk0imiHeG!D6vGW&1tZLX|-ats+ zDc`=^X9`?;Iiv^*uT8&yX;<^=loT7zl6Y1HpI~X;zQH_H)yHiEe2&;be%0R%(} zz(@p72;r3AK7NU+tU{)S>zKCXTt=RGurDfY=UOs@kR`a~h2c zhHyBES;@XkOL=}AE*2sN{*OuZzw6vz$i-IBA$P^vj>}e$k~*4P5z2BAVW4dEmzJ|e zqb>e&BmgQt(Sm-~>P!SHnS&uws_Fwf%!AQMt9SaGb8Y|gcwhie#n`DfuQs1zoB|h^ za3}euLUfS;f|0fN*CV#G-LM?NB66Jpfss3bcATw$-YAdwuCMfvK>K34wfm@O_v-JB zAL8kVPV!+L?X&6L9srWApS)nMAf9yyijS|v{yGxllltbpOYQQm$M&jZkRsY|Z$U7< zTMXVZQ%RU%wx9~>aetMDF%gOscdVDa0MxnxcPDd$1Yc*9Z&)0X%~Tt27SbSs*6QvX@_p^?i;%)o4v zRRHbJR?Q_^A*I!=l7%6WB`Z{g%7T83^ubngifw9(C8q$1)-v_xSt0!5YeqImX^9eq zS&dV8kn(S9x+vMH1-MaEX)Y7>%Rgjm-b=0z&%{HPsTO&CrzQ?ubM(@ysX5>3fp14? z`;$9r>$5TEZ=R>gaaZtjr7^OljPfTlLd#23E>>|1YAbL0$5zVkP2;9L?|c_b8>Gn@ z`&se{{HKxR;4U3@?T4l5KL`e<{_Jv zfP`XgZLkmIHBFOObNxJeg!e%EoO0aGKte^$kJmZB&rf6>@Ziae3CPti_{ zs7OKbYR@;TKq4~kU~a4I>!I$OD$j8h?%9Gk%~M8UJQ&cbiXx_EnI6QWB`eg=1Y$EV zw7_I5QIPp34{|Z#{bieN%BhG;GFB2rRz>oO>Gg{d&Tyms0zC||8CYn^*hXKCQ@C3lE9eenYe@Lk3L6wR`NPM zw0d7YZT4WtCpR~xm5}1{K>V7=cY9Syrk>%^B2C@QRg!TmRdB3TI8(Et+SlcVILXOY z!?}u~k4sG<3#yyQ;Oo{cZG`^*@f1D)SnE=1A91E%Kk@UR58CDs>xf?+{+idH}>g zJ5B_fU=?pKdwTyv)D3k8Y7cQ8_q*?rvsM$ssVe2i>xt3dvG@Hg2~D~+n~@cwSN9%S#X0#tu-gfFymE=q zA_oWB`?@aMQl?W#E)VM8t@y^LYHoTS_KdOF&>!=+t?LZqlt`6u71qoT)_tHgw#~+C94)|{I0OgBh|AdZUVYDzVBK2L85bSX9aL>8$S)P|#msmx_$b)gsqhddz0AB@qCEjl4OjXVgvyy<=yRI9qxvS3w@hnQ?hI zky?2A2$C*{OkJ&NesM6LD9rr7-f@3>>)*!Oah)zcT(!cb+MdhG4AyS@yKUnnWeBT2 zwmc;z%~p4N0gzx+&M;=ecsn~7LJmh}?dF2PAQ=@g3Q`g*#OazJrO(u3K`EpT-ZsQ0 zV+Y>6#U+&mI$_u`PvGU<)PmlS{!gYm?e z_49aGH+YOS?INkqcwCPWswh`b>)tHIXf#H<1^mI)IV_SXf zv!%U?;Aqc}KSjt2f_rQOA7X6x+jrimm>V%W_Z23TJhR9HrX!yAVZdO1g>t0 zcxyBjq|6C6=+lpB?X>y>V`A3-&L-#DU6=v;K5~2!XXaiv{_*0<$D$SHizU1;Zi5Qg3T*;%7GXuybuE_vk}I+cT${Py|b615)U(v*Af~PVr6liTv3$q zuqte<%9);{^rr~`1GLXSY?i&Y$-O>=2OGVfglJ6d`D1hYzBFnxMoIXwo`nZR$|0^? z0e&lYDyeeQ|0=Xf#XaoM7(8^A)Zk$@YW!m4ezy93egT`=ugK}If5VC`V;T1#~GvDPwF`H9c2UR3*H4Tx-p!t$wb}E2bq>_ z%5>iS@LozGZ2kV7x0$1%>uKz#?~L55t;t1j#m!>^5Qd41VYGKPNF~gjH11O>&xpQ@ zBL*ty`sXHjjYv5oclEb|%+<{H>UK44(v%=9GW#AV)b#W+sARVMAMaMBUoZ^MQG$hY zjfy}vC#U)(JXP6OS$}Mqs2{P0O+2Tb5e$C^{niT$`w(98Ti)N)WYBX{kV{N4lZ6F5 zp3-}helbEehEJ}#$EltHn*1yS#l9v|kFCV*Wa`E{ku>`8IF^&H3N8JAyA7FGn%by-O zZ3R=pByCx|3`Wl&_7t&UEpH6HB{%4+4=s#zS)UKgpv&oz5FVvMWb8<&l8vzA_johr z)srTores}+8eq9%@1baBcjW!WlY$H+(}kphis`HF^Gjs0i(Mg2M@TMh3@QAyx+En2 zv09-Rq#76u2`xxo8T&NgdJXL|?6+`ry^XrEDSUmsXwB7^X)w7$gpvJy;}IG?y1gOz zu83*^aJ8Y*SrW;GZ7!32xK=b=I!m|F{eh!_)w(k*79d$UamM6L+11Y(b*S+C1*ou%UdLMoIR8HPAwhpqsQgX7>llhlnC*gq1X@}3_+#COJ)ohpDJFE)a1cEO{!z!Q6Pc}hhWp=il z`yFxNsYlD*ewt#NtakQI$SsGHORZ-v)Rh?Eum30M^+QmDS1=^&=J;g=1(VlkNa>^8_9Kd;D32JZn;X!(jByar%$dDqtc)$$<(OGF0=>&zPrj1r8_Q~`dnfuA~goU_lnD|=sfKP!qQiU-}w3K(M*`+`;7Xzczo+VTI(hJJZt;%hsJ_stn0vZ&(V2b z&03G*BprFJA2&DHhC?gfu1Hn(g>-whIGfmY z@u+2hR8x8?=#FJKh^O+&hR{|GXq?r>h@aQgn(bN6JITPr@z z?yXF9Kixc{R6KNNd!+OGe-^sGkfZ6*C)U$ec4~AgI9ry#Ka}+%XSt%GH63!6)qx50 zZ5uk|w6Z_)NsoN&4ZxZgc?~*~yRNbRe8G7frI~-dZ~0O4nR!6#MQ2BA(3kS;CdpPS zdxQR4b2Fz(SOwajR>`Ulr1U7JXv@W1t219}o_IZtSgbP_H&Z0t5s76f!RV~MD_AO% z-LY*=-;aY`c5-P=;T(7VkYu-`krJ^%8`jSrr0*qF0DA$zDCF#rXIJ-0XhM;=w*d;y zwOwGqanR_gcBzZ>>vm^|+x0pR?$_~8CpQ%mSxtieQ5HK;5^U=$Gj^#B9tnIRWoGt! zp^2lIccNK)U83#HReDHIp~sh`bVbuMN~T+gdH3!LwOha13WlCV%yYLbG_}4LokGjr zR zSrM`R^vF%~H55nm-a`7558h=+zN;-M{&FizZXne6p3os-uj(-<#Z=wsrw`Eqwi*hB3NGG?68)X)eBHemsmG(s28$!Gs^wlJwqZ} zYA{Dy!Bd3(G3VU8BPw5uZLW5zaFG3XHvrtVP#Ew7zuuNB2|WcMS0V7Y^l84TC`}GGO(vV za7$Rz5A!mFB{tkFxS`Sl&f48{>3CP#p4sj8{YBGAUkR9n)+ zQtLe?Xl3Ogdy%)?KQir8Gq$Hm6=XAsQp3i3RqJ_#?sLQV~+w>bLQoVdM|Ieu?bC#qCb zED(@3_wv)J>@O`TIXhobpFY8l43l3?^^a^{Ha(pHEN}Ub$On46{9ENb?$BlZbEeaR z$~?FX^Vj`BgDdt=e}Um)|UKtg+AGX00kcEzIEGjV7*1}C)}WSST{5&`ck<5Ng= ztj*Q2|Cv*!Y<12Xmc8ogGnfKPD`G5kG5k=I^ww80Khpw?l8A(U0Qh{kn^6a;x3?jFj19}FxESfwqRE?Id+YAsVM&76(#u_ z-m*R?+3~}Z%n^ z`w%vQdTiYXeI^otgLRd!fhfQy^aYC?8Dvq&Ub4HGmT^=IjGHkoo?KL|tS0EbW%$(T z6Q_xznA!6c%8=Ad%Y@NPU9*wj^P`!Y_nvJH@d4D`O>2WJ8Cym9g$x6UZh|cB5`%4u zlgC~xR28RCoCNK}{k@s)OzE7^`SJXLz;O|@P1v5FtBIBfR}Zbaw-TYz^P+hWVa)|# z0Ek%(-ww$U*dM}L5Fyd4ML+<7YG-<}s{ujrfyKjR*F>Hl<|;=}`}?ds!SLi5De*p; z+><&Ri-al7ZUBlS)R8n(&97`3`Du+DYaG9xUc=e8b8jH}u&kVmz zgffiiN&>9JX}cRs)azWv0(ThvI{4$#XzLRSL0^B1=&k=2iJ!t=kQovLgBlP_YD*XZ zQdTyY!SHRCchMLifsq+SX(u`J##?Yj%}s}3<<|UVpioI3=X@~-ZDK{WD!$G=qU2!( zc+)EMb9YKHa#10>+S{m?H(5>iDs#C-_a`=+nso8f`N~IMX*tnvD^9;T?fkyGDK|bq#ED%Td`eB-!=+(_{&!&tgn~EVAVNKXYax;fbfOIDKI( zI<{pxQKL;&CDPX1G;5Q_{-0Owzl+?(PC6~8W=g+jsE100zHSZvSdS3q(_>q29`mgV zH0f6CbXJQln{-v*w8pK9n1j5ry8UTKq%CJs+&hDegy`-b=w`{p}DQT&$hwQ!BQ2t>V2tsrU;k)v^h2ezHW6c5$Jx zB7lO?V6I~E8LZ37X~mQCbcAc$2}{9wll&APEzGkG-DxajUk<=2OZ|`}|1zuX%!Io` zAXSbxb)Hp+W6q5uu}jag{cUqcameA@3x|PTo^_&C7ry%YB+P9jm@qJq;t<9L7CzAT z=|P{iokqo@E;mCKW#0Ssi&Fx<@E5{2YT11NEB&>;-WYadn)_bXF9PQTv!u!)2mG)J z>(*s~SX08)-))sh4+2hNxHF8p7swBHK96PH{;n>eix~WFyYe{UQ)$cATxMg5GT)zf z+211}3AcVe^0a|qVL4%Q`ubYo0cjW;}IL$LYWqbD%c`dHj_|MvJB!QLr$;Ym8yy7oro&U*Gng8}~^S9~~ z&QIrGT>M9{pDIL;(%q{!)Oo{gv`Jzbw#(*-I|6}?beOBx<+uMhB9^|=Xw`w0`hS{_ zO0NAcw9x_gUwu{4j$Y(0m`ujodZAKeWBP*w<~ZNeITGE@K3Az)le$6yi(H}oca8uM zS|+5g;P}NUtMCX15hyD9N)^)DD!k>IpsN}A9N&Kc>wA|raNzao=})h5qh373 z_`nK5c4R5f3x{|AxXV^l83Lr_#Vp#u%fpaF7v;k?m8(kV^lG!R0T<;?o3!KIfsXaBHR z+!Zt4{uA4q*nCcI0@*_=>Urkx=I;!g`}zaHfbYG2c_=SB+8e@lBB~NMWz8Uhs#y)D z9CNCyEl7L=z>kL%S^mY zGmG}P8W0mb8dzq~E%#)rb)Ay!4|ubJiQ#BFmSi8UMRp~%)Y{y3zZ`ajc6`^7>?`!- zWsXDW@7rV#xvOp$X*7p7pKnW~=Jn&td|^ULT+BT`c<(zN&(QMp{sVJ=pK>BU>3Wxk zEYdLKDC6i#gYdQVAKRO3&)FM!Gr)Z z0SMKtr-P3|c5j*mF^`q+ENeQkUpDjUTdG-8BY*Y$K zq0y*w7K^l_T09D%a!n#aQ8Sm`V0m>xiwxOgwbhdZ12uIgBnO;@05z_6bANk*o&-Gj zGq>dcGkWR1vk=((l~lj4fDs5P;DKh~xx8F(U{^nI-|nZG)D^*McUuwPY1h>qW_!%6 z4$f*$O@wPbCtb_!r4@|0Cz*T8GjeX>butgn^F@1U4t~i8mp}OD{AT?uNFv4=vMN#DjE_}$YHXdkVxAvw_ z4}2cf_@upGq{Uk)WlIdKfJz?B8xK}Y9>hLjxN2D9+mj>zpEOOJT6)f$IA>u! zydHJ${jc30lPAyFzRToDKr1;tB5<3Vy5RW0lX#RBt>R;P+>WA;Kn(wgFuxHh;b17! zrlx(Ncfgc^w0ai}b(W;~G6bG#3&M+~3CIh8#*Jl*N0cZUzJ2#ie54#rP`*Bf<^(9f zI|o1i`&=ULl}rI|JINqp#&Xf5wf0sf0bt-=@m{TAgN34D-sVmAaJBW79n#>eg(~RsF|+VwHuM!%nf;V3fRHHea6l574PVdGl4Uf*t=Vy6LLn z!)p0;!9*)}b0Reb0!oDOG8Nn{yeMaZ`F0&ol4;wx7`(79wMRnk-ZWU@CJwAD2?23| z42eqJwGN^${rKi)qy!~BgcsQk2zxxf!52PTll4!0tSVY|>zxjp98a-Zog`T4AH7dl z{I<>w07l@uA4EotkThTP^*$eqci*L=;Mu|mZw@?+w8gRGP{=c~N! zrm`*{Tq_IoO;O~xUWhd{?B=`s;?n?cn(hzYIDgkuQh$V2OrM%I)27UWeYBYXLZ|LS)PP$M zh`PjRGBPq@L`v>LV)0BxDuI;PP=u33emD(1>z3J~#kIi9DW_B~rX%d|{B?-j5_fRs zLn)XI`kgmm3E``tbT(iV{JF_d3o$5%|06iM#DRG8EkF2|+uD!xMRT%L&$kd`|C}_k)+i*+Ep0Ma_*T9c-w)ZHXpTR#H{bO2p$xErl6`Ob_uP)H{Q|8HU{7pG=x%@(xZ2CIl2Vr5)!mMs z@{g57(ESE1Nqn@tlgty%3NEw%2e$vQtItSptYMb6@vf(Lvm4wh=?+bMdgw!#ihw1q zhVES|?}W2xW!VZnfbNdmJ{1qrE&>@Zfh8tx*)xT!ct;;uK7A9 z;W24MI0#du*Be!2m}4t_Sk0Jc%mV%?OD^4c>-JgYQ|@5#70RQ)3;JvK+AncEdp7%1 z{!+mW6Yh?Eb>+_oql1p;89nPJ(K-w-)F163Da&{A6f@Z4$o*^j>Eb@&06qTnq)T1d zfd+XmM4%bQ;L#dzx0;VNkXH#p1Z!RZyj@UWR9x^=apw9L;8$2_rJ4YF-J8 z-s=@geVGO?R+B~0N6c{U<~$w`r+2INs)bH?OK%=h#~8EjSv3=yr7GbJqIIc9$5OD+ z&O&wf&4WQjQF(dG!1FS3`6a^GM>NM@>!yqAOxDw~cno{IYE6b1CkE|=qdw3R)9FKy zE%1QaZ)c1AOL=*7-^bsU`p_+4z3Ijv83@a2$E>s}L`Mk`tgG)kmb|rf99+Of;9xbq z5jE_Uj{OhzIUZzKF*(j0aL8lVGuSRwlyv{G_N_`d-;u&*c^aMy4LvchsIC8c*px-z zkz8w3*hA8OA7w)qSISyKh+0*dd9YVI#yo7-TAvaRKO!`nYeZ zrH(J}s}h&{WtN?sWL0`C;ND$?p_@#YZZD9ToKgcXfKB4G(Q^m8DdeK-$B$SdtY4p# zS_F@N(5lSS+&z=_d2scIbj;pzFom7#@+l7H^i8bD?WK;y%_F!RN2Y=K?(i2sjy&B$ zn%u~{?_{TmZLM{ye^bKvzg6xKLWi8Cm7SonT6prP?1Qj`0ec@sJw@FPkZW}yV|!r= z0APui2_{6$^51S4YR%}y7zdb%tWbs~D6_B&v0Chqr$f!@Iy{mNYnxUB@bmubVop1{Bcz`lZ~ zSxbVC*m*Sw;1U@|0oEv|w8!B$buKPriyfYgIm~Hs^1~0B*z`*J^1HM4@4bDt)pn3_ zt|6xq?;GfTkVc`pllps=%1)=Fj(^l2AG-cPXqRU+W>F&j1`Mh^wS@=z*wH$oCmP%k zAtf5kbUoZnX*!Lc5e~4cdkB+@9xusFJkv$cBYLkpv(?W6WatJaQ2!WS$XF@sVdTtU zALWi6cA3f*t)LRxe04>*Izm-C_}e!YV~}J|VMo>kd#`T(1v&VDpEOH56>Bg(tW9v0 z-yAaE4k^DL98OG2e7P!L&SwW9vJzNc@S?zcVjbcA5OAwI*qwCk!Yo;5v2!rup8j2- zMNZBdj$*+EJTD^#HW&W>Bb^;#srHdtCDb~~Swg*mW4*5s5#I5Mc1~z&yg9&MZf78V zG_6=QAHoJTnDO~xRs#(;$GU?)TCRtWTlLO2qY<}>3v%E6RbJkHpCwS*%&E52^epiD z(XZfR9{lp7Z=Xrx3g}3LblcV2O}1UUx9s4{QL2fe+e*~E#l0In(q=KMLAcfb(DwgA z4%ADB9Nr4YMc>uWtnaG0%y^3)3vOt0Mtz2_YGbsn;57h*4Q7a1m=Ko*_$4xVLK2un zc_$h2jRYyRP*<%EJ2z zoT)Y-MCsMK(iQnaKVINRU#;&ZEce`qYCWmK&bQ2EBP2h*O(;C4sHUO%GU##O)rbL= zis3<E(_RPLgbBE@9we<*fYFYjh z_EFb7b<&S-=6rIBlYPU-qTjZyEB|@n_Vx!Vxiq_ILdNt;a&q2j$~0w6=E~w`o2g__i_yY=Zumg9JRXSJjeMZ-2E;J){~nv zPPb$`&o~+p$^wg-90*^cEwvIFHYFL_w_}50->Jo_al)TXDmt5;LoYTu#X6g|;$%Q? zCC#6+Dj2lJhe~Ux=G(p%{r!Th)_tG$`)OH)?$-F5r?Qv!-^?vuqy0heXMaYvb0u1< zf=uA0+Er7}RkME&7M_xY7x@w;#5XR;MF;uT21`waR`i;I9yP)y=ciFzEP!Oz37Q&b z@94d{g<3IjN&jH_M&>>}89O-9pdfP0!}3P`Sl*?c9A)o^Q7`*1!o$BOR$)atG1beY(sJ zLp!9Om`-`di>@KOq2|Wd_r(@mc3ZFf!xIvedLv_|as~E54aof9;qkN(XC|+!zX>|W zvoKbU?2eD%#*s&Ftx0dc3SuS>2oCOScC!YvV?X{puE>{&a-Vg(kh8E>8G$zn596*m zKG*u@UYfYp7T!k%bZxcUE|~hx8KsESaC{o|YwhQ(BJ^>H8LjKLT4inAw*4BpqqFB~ zcUbZkNQxVUFaKKD4 zy%HcX%x>UZ=lU!s5RJql?4E3)s%P%uh-A4r;)nm;O$!C^f6?}@&)+I%!cT{sgryxFa;h1!!SpJ3DJMWt&t^Ha&z!F6cMC@Y zAcMQixJcn7MH4ttENd>dFI@~QA){-;H4S8VX?2fXXx%{J`D~mk*UU;?dsmmqsx7J9 z$yFZZlYFU;r^=}Jb^mW|q`6*!*?`1#Cq652;@d8BA!o{##md@ia~FH5ben+0$AQnD zR$XkLc)FI(N!ENv@SD4QFfD%jky(08K>fQ|yb9is(F`_`)oa0*{bZqd4;eK|NJ_v@ z?4YQr;3Qbkvg-7lpdE;qzywoD03kT9ld~%P>YXI3;_|c!{j#L?(z2Oz^%uno(51Vd zRizUdsQ#uR(lu+3U%E>Cs<#;#xYbnRcbgGK7|ys*6dUxQp`RHC&Rn$@;pDn@qU%ro zprjQi-MQ?~bF}ZzgUe23Xtv%k7lZX14JJTxh776py#{a@eD-e7>zprk^O8ad5Obb+ zj!L^rD00G#|*Jgwf^VzHiUl7U2T)8|R!!DPz7q2})1zM()l}4Q081N#1Yt~w^ zSZ+VqUk-=oqPMuHxprT%pSVjfmU^1Cah5?G1lc1#W z%5$&qNha4R_ekJPSzDI%+SK?3o?Fmpue`nUooqO!j zizRor7CrCtBLWpy?@67>^4X80Z)(a=IO45#k4)ZL_Uob@RU;to7V*ziM0n$UF z1`h)c=c?&0YY)LAZ-NX!QIxnbObia?5!r}i?Rjqe6RxW*qQC1u`|nSsQnpi&S5M@; z;D{%W_?2z?bBXZL+fn#j;JQ%k3&C=p_?QNlc&==sFn?lyTsrQwwzl;oD-#bQ4{gLWYuwYP3oH zgV);2_o*4|MWj-ryuIOGj_3=S_NJ}SaZ}b+Y1MgvjcY_jH8Pa}|E5?p12+O!f1~hS z0HVnbfKyCD_}+yK=ia{A?JUi4`lH=zs>|>Mxew(sn)@sJDFeUzH6(YN4(D9~LI6J7 zdo6fp?;)P+Q?MEACb8=_WGqwnMXY;OOc~{j0>MHGr*k-5wxzmq_l1=w>(N4@c*9%I zl(lME9^U^S)cu2;>;WBecZ@B-=9+X-aA?Cdw#ytq8KSAiA0u-yG2mEp2ppxdmx$B> z*bl|SA1X#=1fwgVp`1;|3f{b1(U3t-NoJYniWeUT{Ph`^jsPor8GJxRiC-4|*nXig z4QWcAoP6rQa=G)=G(I4>pM}xttH&$j{f?j2Pb3sAa>p75f)_izCXsA`JCR|#j&9e{ zuqYTk`c%v%>kZcFI#s(;U63|uzkFdclv)}zeA~ux5p3_SeCASggkinKRj2g3THj2b z?^)=vc0W>5l3s%|kc}Cjql@kMZw}tVYZ81IH_*7gg|kX+Qt*s5)*6!QDVyKYLo(KW zs-o&=R_hRiuk`6$w&1SiWel`ba9%$}jeT||AuuN+*)^=J)KkOG-r;9M8YX_@<@GzF zS(dGD9O{GS9?4E?htBjLU(K%^gqn${*3NA}Gmz5NZdeBga`DVha#ad2W-=!)s_ok@ z-a{yLT(m;XS(q~7#J%NpD#LfC<9Xi2qdA`W-FpKW_uhvUp7j=qh~*U)D16LqxY{Ju zU!^BgnPWBm=%MrCpRO30lWQ~CrRHnNf0QPJey#z~CK8K$`XmttIS z`##T76R|NND1+pf50_$0CGRN(ulJ#oq@p&mG?GW&A2-4PiH%wIDhq1rAyl4{yf_P@ zD03#N#G^1H@9xZobBQ60*kdJ97&uhQn@2a;&OLdLJ32RPjl_nl%MCo(C;pHf2ye$x zo%8n_nI5uuZ6E*_bvysEQoI3;$LKD@))DMHIo9*U2pRUIEc^bQ&C1N+|NG4AALML| z=#aZ$V##8vS(dOxZ>&a_)5_%uY@|lexqrM|RS1OpeYc9TeUc>^YRS^az!$?{B7jAr z1OT$$5~w|VHbm&Z^O;-XmGNGW8yOfLqmd2yNd}5xiwTh5hr`_axM51xWHA0tQ9>vp7fq|$;Nd?V zwn+-;u4>n^(v6e_@(UWqckmCVW(siQ3V@;AMdv85<78b7bhThVK`T_DBCvLb@KR(R2o1?UyGf6(6e!C&yuAA+P(D zH(49^eO9Uc86bVKArA|0v4-hZ!c8COU2);6{CDJUzqdQXAnS1` zep<5m%=>mITKNoS&gU9W(`k7E5=|bF3e<_Xz_u6;Z?_PYd;HscX9EPe$QNb(_-H94 z9f#mDKK2})Gp}tP8+LU`#gM)~Dc-yy5@!ER=+StLex9x4BmJ5*a}n-*oSGuUkHHGz zEYa7S5ChDOH*(gc3NxEARf4fqX!jJj3-`r0vEeWz4}+XZ4!mjvK+b{dB+=CTtYPMn zddK*b95pCu`F$xQb}_5*r;n} zGWVA9VN7d6tj%j$fko$RX2zEK)dlI>A;bTN0{&mD-2ZB5?up?d3?@Ae|;m6^vBgI3(ov})tRB`%r4 zHnReT4;R_$HA5K7D)Li-Fq>hH`UDP_TFw2!Mths*T*dBtwd1I$a>*r#yyOTwO2`+$2Cxk z`MTDC^AupqnCWrsQ_-76U;BtS33v7Ja&=xKhK~We^edK#+Ux5Ip~wXpAKP4=&GCARe_a-$SMnagJLgMARM{j%6VHd zi2NWG-;My?&HpoY8Hm&5d*i1D+`*^u)AosIGV%2r8k^}x`ZwBAVAJ%|TLnfFMZJW( z9~G3n6J4xy#ng*jta%{sa@ZdhuZQ>(1B;7RnOg=Di&=I{EYH3W0#-rQneY#&=y*|} z6xU&C%u&%qgIPr*r!K?Epl7XOl+$yUKuoye4_K6$=My@F5vq9hJ7*hQe{^yyJFe3_bwe+~V3 znhcCz{xa!EJ$@2DQIvvP#aVyC7F}YrgzXwB4WCMx9iTZ144DXUE}Z1Rf~BgGUdEds7HuV%;Y(^A}-@+`+jx zhSlpNZQ=N|@fo(Q>sz}p76(W8RxmF|?4&l!$tf>p+~w$M+;bFj>_F0+4-Qfl!ZyN# zVOt-rI+$a*rmf-4hXU;Pi$po2^xmv7UHi>W&EDwzVSx?!w$@TJZYULY^1BDdAGYJZ zE!6qdj*wC<{XZNH|3U8RTY6}m>%W`AYrzTLhIRDNILn_>1U8LdBNzXx%7p+@psZH+ z4G|6o>TZJqWHern=!`=RrED;Exp0@@9ivzI%i?>;W7kr}_7R&zOOg0I5j@FSJb-YTty9 z!9|%pGol=Pc3u%zP)qc55oi|drA>F=84hU0=3zpW^!w>&c294eev~Q2(NJy$1$H|o z35ZEOqf7dDezd&&yHclvNqc`^05UGottevC2uy%TiKH|r>PqZWS*36 zVYl{we`w~{(kLDDL}cjUr(QCw1rO!2W}X(tK>H!0Sl>ZD_(&s;nI)la-|k5q$6QlB z0q#@h593wb0-IV_LDIaQiy;MgA~|_0Z`MC=2CGJ+H*edsl4f1)e`v+Pgna2X?lPO# zT>Km^{~07}jQzOkr+(ocMBBjYvZjSlz;m0s!3Kc269XQ;#COS~l`qu`_o}~KNW-3$ zzAnaqWDCLZr27Qo2tihYYK_aE`S;XnqO*$Z=ZBmCOY#P0kQR6HX)Mu0K8_t}i4r^8 zuQLhC#+L!Rv$d0BVMI!h3KdWicj=X>QrmYYJ$G?&xx75S=GEFaq3c|C`E+JxE-aYM*a|1(UO)%8#&D@oD+^e6cT zIplk~Q}8__%SIEuv}D8Bo_{*@VF|s*=hcmL#l)E(Wh3Yg5^cF27T$4g0mGD77zhWj z#d8NY1C}D+^J602cO7jnDm*MR7u4>{pI+5Ss}PsX)<}z_+CzTHp%&e~WPkUq;IaDB ze4jMefoB`=Q~jyY#m>+6HRAet#v$`xjb}TaLJVtCBFvxqaWZoX#k6bD7B z^H){v%|5=YoGwoLk;6+H%);6e=(#7194esmsyAa#kQk=N4uzJWgj4dalx}Ki9;k0} zlK}GB3}U&;j&@I556_DN$WJwWk%8IN*^ln$eYVwE6jgGxxMw%c5>Wgo)}xdXe|Ee_ zA7uXoHMBy5l&+V}IU%2pYVSIKH2rp*c1}M#Ihy~k6n=8Hk#@qyUipn?xzQO(TYh;d zto^c)YROi1Er^wXg!yk)aZ4jZA7w3~I3>l3qo8wO?ii-7T1HF8k!E1CZSdo8OP!u8 zK1-)561E++0Sfb^+VYhL9S`zmyrCvnVPR==0y+0XG3D^?XI|0{vrbAU`_E%N>`hFj zVlTe)>_!8RWuXe(w@kx!QpN23Xxp~>TuFZe=c()#QFOat4P6cE^TYPl-an|odngH} zYuaNbEYi0*bGk&kgDKFo5+*wpT@$>mMQz+jy^%qL3jNP}j^K8I$o4GiREyxqtd8=EZ+dq{UHcm2?u>{{K0CQqG|bHJz#d(-lQ|b* zE}(9*p@x4er}C)e2I@!}u5);3(zqTmsUni*P@~*0`AZJrxt(hrAQt=OXrNuh@F@#5Q)ELs@I29gdcpy{>0N1wi?s z>kt*FjUCFMK_~T$zUV9#F~Dq=@%iTD@SCW@U#qHih?bOa$E9BfPkI#=)TJ`lOiuse zf#w!g!3sS$0e>c^neJTY2ODB+3u!dA0nP7PeHAn2Ujd46IRP(Vwn!|OU_|#L zOwJ^LfDhV>=VxQhlUGX=+?0o74J%?qC-I94SoK%^@hb;cEUU&}OR6)chaeF*!)1RPiBs>~@j3Y0^s;P9Yf05xJKRc}cbgOyfHb}ng@d?h`=B(uIsbOswM@KMYUS?OA{=S7U)8*O z@@8acOa$cBfJrO_8%!!%Tvp^_K_KKQ&Jr^$+RT9GV!XToR(mEO;1ndnq|-rHNY_Vi zYc9zKcunEWpBUwdZe4Vq0i#&JLqhC)e3QoR`;Uz$wIMmxRq3~Ex{oW5Nvg^(pLX_9 zQ*Z%hm+yfYbn{y(PF234@oA4Kcl6F)F0}0SCPC@i_oF@%^#O!3M)cyo{lEi(F_J9= zptEi=Fv+xwlR#QB!x||>VYbr@!T_7zDZt->5b|9 zlMe8%q4iWI_|gtsVic*J=z&BI`@#2PPX2F^Y*St-8e`AdxP3-mv+j6}==4Sp>p_{O zReLG+Akge=!nL-{MK{s1gr)VJ2`>JtCDda+YxqjF*y=+u)Ki4SJ>8P6kthVEVo*Ws6?qq%L#h%IiJGIQE>!&><%iiiCMU z*eu|Kimo7K4zSf^Fdxc*t_H7XuaMD}jPJ>f=M)OIFquqwEH(L4?y|sHNzIOBFT^DG z`0T|Qzt7v7BN1pIz&@`n3e~J0D83e|ah6N?H>7?^~b%7NvSp2YAh@OMCouih?qA*LEIw6f|EkdmKasIphV8APltOp zvI*cgK$SxP_zFZK1djU*Kt)mNlK!mrPLOLlU=}FV9`;(1n|g0@??`%lxK$?lCLpKP zlU;LEu)4Qh>ZKG!dGHQRKqMKiQ3Qnq$gG#M9JG5x^o_FmygQIdciFSdeYz#r{cAkz z@QJ)=hGr*i;&btpPx(83G_fKH_ycM77GK?{QU$W*s)b~BRr|GbU6gfz3#V?RGG^0R z?gh+F!q6{Qpr^%icr@&7&Gi>fZq)%oJaZ4ZcM=yae0jh=ZZ)FW9mwp1oE8qz){Rh0 z72;9S>>)|TiELr_#l}_oqaZ7{nTPUB5!%y3J|k0-Z^UV|9WJR?H$QEsaK&~a;6=$C zo1{YC)Uo22rPm3=WRnoo`^g!0CrIDq2%J1FteAcp0xC*d_kV1~BsW$)QQZl2$lU#9LMOFXzUwU#*sA+o zgU&{ma$t|l739Nq2T;#)G0Rtq@7B#G(hi%diPTKmk>#9b=eeDCXHJ6bi2r?3{of0S ze~{bzMSsdE8Cxlu=qV(4J52l1uUOS&2>;TQ+%X=*9m=8fTm80ahNPs^;BaM17IxC* z3pbZNz(T>Q2q;~ycjcx{fp0)yr$ul^t)@$&?EyfD?#GU`C?e8sQilpUFRKn4iYUMu~?9cL7K3G}x5@N}5;f zKnR=on!89?9LtMXiQ9|fV<}VtP-OyoP05AZbkuDm@M~n1^`oVaBmwA8?f!)YxZkHs zpIs#MB0e`Ojz`I-Q%_RtI%R)$LEbNQwz& zRKCny$<@zIK|5SMxkqb%?^<~m-*KQjvm1J0h}x=|ey1yYUOLt* z@4hd9Ou8*RAKuAz)p^JH)stJs_qpcIT1*Y=jcM_ie3#OakQAiE>*k+lWy|Fr@*3$q zSzfMm3ZP0UBcao$jIM@xrj~e~s8V}UcUngfiw}INv9F_3k3Qr zOZ>L)Db_nTsF%Ej_@mE-vS@g*{yW-iQ3iN0xqKLdJ z7)TszntdOVH``cKUlL!+e%&N&*7__aT+)Gdn4is~?)&|$(f^PI|AXAxH~LATsnc8JaP z@YIK9=rQC5)Z`&dq?QFg-5a9R`q$%wV1N_T>&H~@CF_+JvCWX ziR#*_B@y~pOU;wfG4BBMp%(LN27j1OaIc4#byLU_Hkf)d{`q$>ZQ@n#Z*I@%;wDavX*o|RjS#%NDGE-?$ z(de=gt{7mTqkU%#uUgFx0?Ig~vH*=T&pGL0LQVhhrw zQ6jj0+S2PjlOE(Z69bWFMdTUd$j7{@Z~(4N^~jiS7*m04BuJ@7+1ec3O{tPNe3eV- z|C5|;*U2f?Xa7dxOCF83L9$>GI`=p3u7}of#lnM<=9_y~m1Xi&*IN|z2*ry8+>+}J zqJsN;cVZL+2oLVEsvLa$`)CA0@SM?0*gq|FvSZ|42WawlWl6cJAja_n+}xdWswT(iPu4 z`xHDC#rhT@R=;TeiYVZGWVg6#Rp?csaGzSS71Yj|?`_b>4t*(yZA#CMnLFLIKtQKwT^W5MJV8HcDv*HaPgKrXl%W{8#54e7D0oE2%5APL02_}nJxE=y2F2{D|kh_%mHG`#U1 zH)^}FA8JWAv^8|wy2gI(Gb-Kw+C=&%nYJ~fu3aj}f&tKd&*wIST@!hw{}F#0x}5T- zm)j}Vo6BZm9r5^wxNK0^@txfTF5gUxcbppH2)o0n2KmYQr-aM@<2A z0Z_Jg$7~ayKHBc#HRR6YNhvZue@%KR#~IIdN?|DUcNSqOhtm*dNB1kYIhvYqs5*7Q z&_K<}<*;2%w@B6Ac zc8}Oe`x7j;s{50@?$6^l6iTvJzL@BV?kz0#s?+HoBbeX#IYJgA7N{ z?nnF&YUKay_5W2lPc1qVY->FAFN`%cR$|5vdf7@shQ9Ce?a?gr=1PcH?1VcS6(lni&#Uiy`#U)h`;TDt5=s0T5 zG`b3ylYkP@LOB-^uz6#u+`Pw}`BhT3_5PAK+`PT*R;o-io60K7)_YuSb{Vy`J-mPKqJ}xv-=vFYp>#eD8LhT`*H6vRMDSdvgiG#L@N2tHP^~thNVV9H#wG-P}LOc`(yY zA1)dH^U&m`Z}n&Vq?|a8>5yCUrCb!Ho8UaA^I!wZs!Dmx-3qaoH*D{K#m+@Vvjg^s zbg&9hnn(7{y}tfLu{dkvB2in9Fa9qU7bVbwp&3Ggo@@+P8sbV=>`kr!%I$0>>U`v!AqY6`yFdtwKf? z_AX%SI6&3Vexko$#{%!H}>-$hq!hb9aCB z^Y7EQuw2Zs`7$S+&5B<&5;Nu^?>}G9?+@FVrgMgG|2t3e4{{Iw9Zuh%>(KpVafwx- zE54!woIv{cpz)J{E8j4Eluajsf#HyKNVSJW6y~Z+xHdrnh2jWsParBGK;79PF(gSI z2dCl>@!F>7dYR9O6g?CZoE!@=;s@bLEttP`YJp$l$_==Mtd%zNKCzT_xMmuh?tk&% zYv;tf;I-Ml2PRLGW2FzDA666enh5HhXJlzvnnIIL-T8L@q};WQ(xeW#P*{}(`*J3i z!f7!$0O%4(L6Kyt4E?StE-VD^L13{{UNgH@_5l27mkA2cGr$m85CjG?$wSHXZ!n{* zv~r@N76NNCl)}%1&PMny&BJmd6!nryYRwqP3m6JyQbW#)iL5FJI_{*%aei}q5PZKi zaB04E5`J(Z8)IJ7+Z<8S3qn~>z0$#&; zpstc0ohYlk5}#Vx%KiqRg_{J-aXsr&MaOmS{q1zk6W@MvZ}e|0~`I{D%Q> zz#D`$o%zgUnc2Z9Qje*?j@nw@wEuJ*r6}Bw7!Jf9%db9+RSn1&8%wdNj(&At^o!P- zH`fJEHg>DBwzm{YT0-!NB?X68I#f^#W8W;r;UwLDrzo)C^;j3Ebv| zh?=Rl`g;)Ou_2t`{D=IA&d~LIgZq zf#rG@DxUa=;-bx6>T+E=-jtK^Vi#(6Il`0$)aE_=rRJKQ0E=zlp17Y*_}bGuQ8_X) z847dAvg~5qwWQB@@g6m)A_$23T32`zw;-WD1tot0c^05dBLludxur$3Dj#KifctD8uQVtB9U>pJCM4gqZ z!&i1WHbuakH>A(OgJ*uUe*L2aZGrSn*&96Jj_uXevp1T;K4D!t4VV1U7#O&-5eOLJ zEg>_3zSFuVN-Q+@1*U{@`NLpbLuupX6GbmxdX!yAxOlKL`4#2AnX`1cNZ!exl=D%E zIBtH_5w=Ge&`trr>Z2b8H>)Yo$A{ODu^*LTEPpJtxUS#s9Q^ma6A zZ(tjl`)yhFv7*uRnuOBMN%z#MOw;9)(pmANhIGpbRkDMy9BpF%@iP|p{fB+*|6^SJ z-wI6?8Xa>BS-m_~ zM5ub)ptu1g1QJ3CCvhyr5rL0wIany~$QN8q0Kn`a=A|adqSIx&AB5y7W)~q@n!RoC zvMf=@;+kQFYEE_q-X<3@+JH}$EA>gSwOU5=&a3_HE8CV9+>W~7r0XOrCY@TzrcJnj z4$`Uor%(w7eq~2TBE$M1g3P!G5C#hfS^%;< zt@}HG8VZoqP%1UmLh16~<(8Dydd>S{Aa+9j+Rw~^0%?4N^%dHQ!_qj7B?axl7XBvj zX^doqB(GOGIN7<_Rf}IGpg1KhoCIZN){cXK!3l_*E+7Q;9V%uZPqO+fx%{j4Rz@W# zcO;dWq2-p%g0%B96M5EHa3q7Sum$_N+y~F9ueq* z*vD>Y&%2lWUV6D?DRY0zZ1kh8Cx&B}xF+ls%O{;L5jDs;r(*E6yV|X|M;tcH519e~ZX9Owk@m#aeVMc*K8Nf;xEpCQJ z9+>oJ`Ox&@1K|zsAXpl<<{%iqJ7`ky zD_i$rg~{6Y_Y1nTSoNj^jYr2i5$qijoy)>ozpZ#LpoJa{O#V0I{i|{tCv?bJ(8mXR zNB@*6!yaGJS<7*{LX+g1W=OYfZQ-+^H`c{29yRrz59|%k(j(wA`K*w}FTlI_}$S6u*+A2hT z8U+o@0J1W}=t)3httRhTio?<*lxCyraB8`?VDVs@&_eMMtHK)AYkqeMt^&EvPyiDdzN+UgK7b zB#E4_P(gM8PDc=9hgm_)JO&8wv7fHIZGAZBg5hfd_7Y@wmdibS36{EjStT~pvfcGC%xVI(UkaispJ>~KfJwT548SHXCFLE8J zeDddSN0SA2MjaDhoQ}zt*x1q_of~ARnOCM_biC<Ar z!vr3>K*#S;{{9VXd$atc?*H8A|Ld&(AQ$HJugd9LrkfKd)0ycLtCX2lq71>b?vSF1 z@nmkz@&YhYteJQaBydK^tTM-(nWg1oN>R$XKc3Lbsbv2r$a2!W8wdGlWoZS7e|?ot zUSLR7F$Pq{EwkoOB5;j?Ie<`Uk?UHn2;hDR0Q&Iw+1CXTjS($f3=CSq=Lz< z_gN>-j`PPU?`W-$J?TdW>#Lquj*M@odlXhGp*6I7TuT#Fm2<(Wd+UvQxkF*>}OsiHI}>)3*eL1gBQfFxtDQae7xhogwnZA z-oWGr&zm-H3a~aTws*#puD;K8zQtZ-2tUiVsIa9YWGa;D1BvGUyq2T{r+DLhgtfHNqjCjTzm&f1kkOm~j znmAxk-fawU5Qn|L>fJHw0A+L?%eY;a_7y@B1QA$pnwH^5282a&wtTG~lf$7}M97o1 zh#&}s#5p(>1yDa<%xmO4}v@DL7BL{E_KD$U(v>L7^o1 zm~?%j6pG+{P8H_OmNVs$TwWb8K~96GiZpwOSp;FzR&!m+jEKgG=~gNl`7pI64bHG2 za4+wWS4+01)ZXqTnE_%l{6~G|@MPk(@u0!Yw4@Vt{dy2l#=xXxe6?73SX*w$`sM;j zDdvh(@!!R|+E27hHb!b-@DkGRVg{^6MKSWbxZ=eQ zg`6oKab`+Qs3v69w9&OV3uaYl=z73(sXwP}#wpg~$VuJZ#Xb>cT$a&1nj?2UYPQ%~ zeME-gvG63tq&UQqSh9NGTUT-PJXrS}}e*c*L&7;s>XP>VJF=N()MWkk3dHeXh~chRp8^$BJUROm|APJlY;0#0Ql9_e1fr;JYdD<(APyw}Uy%~<(`$ADOswKU_fber z6&z_U>iL2t3Yrpr^927lfGf+$fvbh%E^dYVmaBU@%9oD#<#L!pNn#L+H{T zCTkY~6auW#fi;Y~rC0gdj6Xa}gLtxO`o^^KkVs$ecB&d~EG{mz4K*+6j~Gd6 zX8}?`{)ggx&u&p20DP6(f7y*a=BO7q2ERKRA8v_HOP7|Guj}F{PA9WTBcRXlI_HD{ z3jU=KFef97Md{ai(fE#A9qhrAbbp^NBn!kNVhIX;DhR@qOp?*3M2DF1iv*Vtt_Wtt z)&o7~y{6hr7aqM7ol9;_n9;nvV|>5GAWIJA^~t&xtH71_0X1fE<|M0k|7QoVY89{cUS%2jrF}K9daRblEhrOD9#{u#t(a$b4ipS zv&1%{D=g0ZUsN!tD6=Zl*}lMefPsbUG{S>qCs4PD*9%x7J6XNswZoV|UNU=4Ap{CK zSYuG_)g|A9Ec4|vrw_rzieSgBpxYB=7aG9!zgS8m?Iu3fydkpCGjbahbgx@K?kCm4 z!#}pxbA2VSog8ENE3qFi$wy%4VYxrYL%)?C-=qB&sn7a*=CDL~>=SLr8*nrP09bcx zCRX6zPO$ae9oFvUVx-R3<2nz$JtTG&MvLq@_>(V5R&&l&5tWjQx7lDsLL$qW48q7uI0G(K@T?~*3MO|w~H~3^;3)< z>m+;_mf)rKk%{dwn#0oh<$ffPm~$~AVh9lfbgtBRawbBX!kGHZc%GV*W47EadCRB0 z_{M~~q@S?;?$eomUecGTE6r^;?`KYZy;uzX$8g4?_L0<958el4nMk?Z&g3Qz+c7D*p-V8kD1248#!(%u~mN${7?GUO_{g(+!%IZez-Wkt&=N|0vQyWjcI+oq|dK|hGUTIzpn@ET1QXDu2eNBNaVUtB|HQP?h zUU$;-SH4|(w-0`tyHxhy*8BhDa$C}L$QjeCoFN}P0lP5mCw`fe{+5%ebEH^`Y%q_} zqcK6fNQ!1y%p|7h%1UlneT?bAg=Z`LC5jRdFzm%_(I+y*ko)sB zE#L8m5jN`O(vKZ^ShBu7>f^&kxj()!f3?A6qw`Gl&hx#^-Zf;(@P^iJ4*6Tm7au94 z@+co%TQc&!wti>fSoz&0-Pff9yI!ZG<==m}#4}kI?%@OP0y-0ocz!6nnb8+l*==MY zDs=^hb#X5B(kR`>ZR9YoyC3+bn|h2A2+j0 z0Dq_2Y?O`7`ZH0*Jua(htuf^TZ3HyDNi~l9Gzb-gHz1GpvO2ROF+6-=CPo%OGE+=n z)cXt~y8=gewi}%HL5$U^dY>KjIygL;?^jR7fURg8L#XnhR>|)-= zQ#rpuOCKD_;UsoXBC%F(*QPd3C6`DEv=~diP`ss)5%XnrEqQe{G(*vXVH>5YODruu z>9GLOtnmJ#*}EnP1g_2Xom$l>W2_i|SroH;&b$zbd{Ceh#mAECB;e5%P6kyFc#D-B zRx|+*!$-n10kfc7wTE16Hv{g)wT#C`lvQYoF>*K?J82+e5}IqV%347_F|SebN)$t3L$MKOt8hr_Gra; zKQit=&!_)AptE4p?sC^c5xeE}2u!UTn0p#|9W_n1QE9?cvd4P=%ESG>Da-=IA!UP{pFXZB%rV{T z94vs?buob)dk+%^M!^h?ItESvAlZCq65_7|yJvCUd7d1@3Is?+df?+XDVRv_&mO9C z$B~3f(9oBU32%rpMXma3-*&SMYZVTpht}TZWWyZI&wd_z@giE@Oi8D&65w^^cYfWd zy5KI?;(Nh+CfcjF5WueDXE8(hVgXqxr*L@^&Jp&5r^1Cx;M4jl9hkB!YwQXolpo0q zob2R|wQpEZh4ESDvO4kC57`kQj`f&LQQHQkN7n>f56ePgr()!P-8m@%ViRoVlss`SGjjpYk@ z);hfXoQzeg#nW{}8Ahh;1itj~TpmHCurw%L66V^s=Gn{cHRTBhsLYP1moFNb>$voYDy4hkf;G z@wffzQ;v^f!iET+m86Ez{>J<56}j{`Uhqrm9H_lzgXIKIqS_{3DC&YHxgmhXm@6j~ zOUu*-rh4=3E7nZ!Xx63Fp6)Jx07L*lZL~08yQ;1<#5x+z#TCw`fR`Vt90QaB<5}kd z{iJiU5k7RNs&dMsoo)PSe0T3g>pMI51`S)#FXCFG8*?$@vFmM<@ zSbw5EkB}t0-xIU?>g-lw2lHAHHd+Qu-f)HzF*DptWjcKD$*a>d+M8m=E$hkbQA9mn zPf?{GC*l@jqPE36!Bfmq5!u{ipTh=u*&&D zxPfC{@sF%;24;j%IWC5t)&ueqK9(!muxIM~r^m9Bpnr}6GHc&%V%-EmyiyNd!i8# zAf{lvK#Yi5R&ho5j6BASnd`u~7Dpm_PDPi-u;wU4 zE(l;;!b{RV-Lz5Txx}}YBSTbe5xZ=W(>HNsV?QHx)ednRcbv zJ^33^8sSqE%zU`Oe;;P zK>Mm3764`fFk5VyQn@+%B>gM7UoX4r0!(BXpsnoDW0PzwluxBBF|ko%I4NeK@BxmM zcj`F_+`Jp&$BTm>A;8EKBja=!7rR{o^nk&H2?LwE`3nnt{K#`&DTOV?i= zjo)H6arzy0W?v+!z~?fLIjC~;)0GuCfw`P^?m&9Lg;sU@ds^T%GjgiQbi5(4aC9Av6^+W=Ed&yBM&4ZlOxQ4IS5_3A!lrRQpEQkC)hz-0k4wd+Jv~;kd6M17y&s|I4{RdG+73Q&aTlTWN5HDx9t$IB@ zaWQC&m;{qzTKI0I{TRj-cUrLFD&-rlhNI~QdjyaV7LhklH)O_vaaUjkMkhs}?CXU6 zYVNpN@+`)iSDRH;dm*~y^``fiz8DA_iqKYHpgE3^R)ejdPE7gH^XB7*en*pr!yx}v zzmtYb!#8-e)?wolYJ#*0Gxh(3-M=b#-2`yzhrhvOeCRd*1ngFKkoa9rQ4u2Bn(wr3 z>4x@L)jl9P&P;o8)w;V&!qKZsPZN$sdI<^8awStQjt$kTf3yX+u+(_8B))f~f)Q4_AC|Lh!- zfjv#;da$kHve~vFXlh=JIuuTGI4^9|7jf%YcTU_&Udit;-o8UeNd^cM{XWJt?$n^1 z;{U27-Ml=Z$6QEAfb6DxrunGei5o|6lyQyh9&ZzMQR+eZhAl!k#J^GQ) z>5Zr{lB)45;fV!z$`dfr?8eJ(T(sSCv=Zi_pVb2wb=6}pnq%RKV@UeKE%mhHu%GNu zZFy?g97>?A(ww%bhV0yrte?7?bCE_+ib+U1U)CMVX3O2(o8TR6iHcf^K;(0lKQ5PA_15Cs*b_aYq|N*5FrQ2YZT zx$*4r-m~|)=gp^;G1kYq=JU*7nG?_rmO6(cv4I=lqjzqE8JfO_p?IEc&OA78#L-%i z)MZqeu>N1CU~Q~8d|YK8K*q+4z`Ti2TnZf$M{wg7x1fX?;vg^pgoT?c5UR)z)RKqe zdD^CUZ5^u^#tq^*yMWfUv7TA09Qp768a-I(h|)t~-&b zkTi(J4kKemO<$e$r~_S6N5PZSlY_v4P1X)_aEU))ve2mTu>7;fB4@}S1O=1jgoPOU zNZhMdPX8pWM`^t0cq{{SG5&HXgsw#P$8H&^4$<*^d_3c7&>xok9Y!1KA^G-Mem0%d zfD%gOHQwF_e|X@t!U-+m4NouG}XfmZ4!INz~ZnHbaK(z!Y%DKpE1F&}g2>AKlL+z{s!se%@d288Ga= zqI!?bCetZg;6=}`3d#D-vBzEU*bLciUZ&koa9ZU1BU{m-5O(b!O3JpSr|ITvb6=gW zTmSdf?eAIoAHTmW*ZAna4pxhMLG0a$hDXyu^tUrd1oZuz-x{k5f71KcxZJX{Ka9gV zO2NVnhf%C>u0=&Nwp;;#1=(=jDrhcIJSGM4!s87TqUn8(8Dalbqf$+yg%CO^taJ%Y zudDVFUiIXeQK2D8eNyBZ8|F(-x6;*9mS62Ldt8O_&W4tfM$|Xr+WZ0$-7)*=0^j?? zR#dyb8bsCoilC0S!=j9N3!j2u973gAQ)LNcAzlRT_3TWI>WZ7Z9q>lsv1A(^h-ZS$ zSqkAz&>t7eT(NPJ#Ne70@EOX2zOhB28E}%2En|tyXBcKp-8r?gXyXe1>)(?T+)L6| zEhQU;$!r78oc^w^X}(+$TWdiJ8$3Z-ODEOTeKHpN?gE-HMWrG!Y69F`r_uoDcM+#G z45PeWbtoqv18g?{|2=p{1Wk$50kbYic1r+!fc-Juc7Sd>J20;^vai2PGliE?f^SnSk#kMeD*IHRv>qmYIpLmLie`n-BU<;!dgYN4^v7vLz*8OJC%eW8#g}hNw3=bDr-2V}-`MQ$&YO708oZ;2j$KPvwup^i|*-LyY zMATE!_FCL#rZ?%fM4q=U6sH9d7Q*w(Dg_I=&{ERzQ&HUju(gxX>H;wfrO?UH*6LkU zjc+_xM|z(8&{y?iO<2htk7mxZJ?F2P*OorDX}CW6t+*sFFzfQWcC{dZeVTi6q(>SP zV|;3&2d3`6ehj_cN_NDYx4g7M*KrHFK4|KFd9H}jf2`R28|eN*P8dvsoT-6D^7*s) zq~Y!9ATx8+Qy%?*&c`4Z;TqZ?$y*>q2+=a-x(7#xxC_zYs~)LAVTx`u&FaA^!;<*2 z_1!=hS2Lp$8A`Ctyo6)W2(tWC+`+KecVNm3wc~|{(jRrxtvZI}Cz_&3H&&ClzU&lx zFTH0=5Y4&U8M_jbsHO0O;lVf4i_WtNNj}Gk>6GFNZ0U11AG@q2LYbs4uGRQTDF?pO z-fIEi`uGvQ*C9LBK~YR1J1fS-!FUX}F2dt&yo3bEHL8G3%m~juJwGlJA+SA z*TJ(_R=Erz$LyfQ#E-)Z6Paffjq+b-KM zxdc+bR>Vm{cy+{Z;^6-_82lGp9yHQ zewJYVN+RaR|`)tBuE7HNvhRt2jDM!>AP+= zJtNpl!&4#;$|y&U^&W%_;>&hFE3A6TamX`3A5ossJ8u~hLglb!>=u*B=3w$+ufFk| zqyU6jULW2aMYQS}otN&lPd#0@aoOR{g74z3SARyFZuFPl+_>~1`^;`BWt9o4v69&_ zn38r}Y~7_mPZ0R&i?LR?<1r(u5QFeM!)4(dLvYuNTvhXCK?=*cl%I33f?CsIU^soV z+lFf+89na?YnXI?G{F)8KTFcc@ot(U9gV-ZW%P4(^dUKjh=Lu#JNdB>@vQ~db`nQi zjfZqNpB);1uq(b-l0nP5gM4OaYE%39m|yMDdp(XxsU~;C)E`)JfSwnXfCd7xsZ-6b z%|B)`1$(j=+#=`3on1EiAqx1#0Fp(-vMMG`Y>_srb6>lYt&}(tRGtE@FEAG4EfuQD zU8;7@DbG8~L^A-|&aufv@s=~b=cNZor_5m;h7$S%baFM7X9OgOg?ZQXYvJtaRF6zE z?XRgR=a&{o!80)zbM<9)_!)T;MGb=~Rc2J_l91Kcn}(|BAOCaN;om5Z_V^ca-h_X# zT(prqGGW9Q|RwXmYWno=@~i9RqT2* za1s-dfQ~RFI!?WOI7w-c4{54b^k}S?lD6FK@msd2)ah%cI4jd>_(B%3JGG&O)1eqv zA6hc%7Sv~dtz5~8D_1SEz4R0sQz`V_A_tK1IO30A$DW>$ZH7#nbEU==xOY!1N0Rn| z6y+9GnBk@~z!9LV-fGsZW9U2)t2{cj?e6u7!HS z?o2a+!uX6l$S#!Z$%~1RD_rO5sI2D70u-nxkeqL9jdzd#RMpCKkKM#!3W)=hil2Gz zbvZIp|A@Gxf%0B(&Ad0UKbJ)8>zEhV@pq|w?rtiYJS~dqDWlVkJ@oNL!q?qp+KfYh)xzOFP*MB(0Oj!IYtjPadI~+a|{9K5Lg^|WefShft{}0 z1&`TY+j_<#{L}{PBKCGJcK+#0PxY*P^xWfUwSLcQN=s%aQjT3T_4I?DL)OLbqyrJp zF^sa-`@2#7%!TRuaOSB?5ryTA2Zr6tIG6Mq6es|?$$`0Iw7JUQO0IxGA#z%6{(gh1 zs%}I2T5_IP3c!tx9nr4{X8!rvo|}WXre3VSiv#@lICsEIm=Dj%P9l3cLg6h2JdCId z7S}8X?Zz0x9IkW)`n~N}(ztq>p=PiN{nj_wRFG-!FIlZ{7MAastn2kh@`Q5$z+7PK4iF3t|XI!(|Q4WIBneRi9{( z3+LrfLt7QOfH`^#n5y;B9d>bx(~jFXT+{kDAkeq?&!jlH8sawZTl zeE|lt@QBhQ5SXSRi6IdD?(FS_uUGHje!Z*;Rp*GX8{?NOyz&E2eE?qg(${&sU`nCy zlV?X~M^HPF-H$lin3zSwtxZML9=JhD1TGwsNRl4V_1=HkSPney(3q>Y4^Fan_{jsdn z<|P>ocD5Eawpzt(Pd~wai{n_m!e?F876W&qD+sGB#keen<9w18E=Z`cA@D=k&z;Ao zB|fuesY%VMD+UK#Iq+#I-unK9)q7Wn%2$q7=j82}yB{8AC`XNIrl%kQYdzp5j?eqL z5mN*=y6&C?;gl*|8Cfu~HK&MsN7Jcn3be@5B>;%#y-HqE!)su*;n0$0jG^3P za~s5HGu9UC1uc5@z#xK4$;@;;i6Z*|7g~5RtHG{I>PSBSbBnm}3%BOpCn*Vf%OAYi zyF0n#CMd5m;mcB58jWqmp3d`(hLvWyIHJvI<&~talcrdz0QKZ9W8nXfYW)kjtd}&% zoj0<~rY(47jrgq5e3wwU;xv}~*{dx2X`-?;0RV-t-m~+(eRyUHwVS$K!68LxmaJz5 zeNDMxNs47C;MFV|g}xE-SBRHY{K*6f)JMoLjG*;uD*JJNGQq}`a=z$mJEI?q{H+pn zY8l|=W<%@>;-POq)g5Y|{ft*ouv(t0&YtF+_(nspC4os(#3(LU-MWo5wKE>2%La?p z70dHYdzrzEWrQ^=mkqL)%l{p7YIVgGFT)AN%|O)} zw<-Cp>>Q@)JTc){qnVRAX<1dKo^Nn-!wExd;bvD<7rZYOL@1li4LJRp^EgO3Pc`*n zpwK34tty*`?4&s!nj5ZR&)&)*AsA$2x|vz-n%+O82S8!=iPj@=QP0t$Y(PGPg;f#M zmCD};CI0)abGNx6DX#jsNeDWxPIN|VUnllX$=9ov^`R>+!wa%oGaqi3kF6RCiLi=D zT*gXFV^$$N->k!g`1#oKHcUK>%UC$`bL9+lhLN{ME}rPqRT`aOZg0*Ub?JLY@!`aa zTh^ce27!a;ka&*PlmQ|DJ1XO8#bx0Kof^j`Bgi>YFuNbBvfX(0P;&p;9f6kR2X)1g zvFwMV9D|Kbi+^5urJE=O)ZAq5M)Cv@&P&I?H+-LD-?goF?4GA1@!(8YkpOZ1>xaN} zYO-nZM;(uxkJNOa+8RaK@#Aj>Mn+bom4)e8nz>0T{@-tNe<9aoM1!2A(G25xQ&M_j zIN0Y)HJVG3CLfNIEUIb}X`9nva#VU^wnI!89$c9)DfoyV@eXcK!NF?}uhSJ~bI3+x z)bHJh@yn8hhnZ!&bS41XRD`!&kln(`?`aDmK3WxtHSnYfpEj~2v-`{Xr3X!mQmR9> z;gzLz&7Tm4>jDNBOpXPkU}8V>&vu>u9E9D^`+j_LTgOJ5#WJFO@pnVlmxGv3RO)Ft zv>U*4$PWrw25})1MPhLc zE=Y21v=p84IQ|Mk`4vFnJedN7jCB+bB17Y!?o?%}Oku4h?IJ;ip_dzVN6cI@LHb+- zq_WgC|MQCQGrvb-eXpUuMl@X&rR)7;i6?2<*=7>4mV=S}c|$@?(x>;7dCmflNp;je zUzQaW5+M6<*Q_gCUonSIL`#6cYC>t8<1BG*BoP| zr475I3|wPU2!4Ov+fRm<`xFx#BO*hOa{d;6PQ;-g23QY?G%d>zyOus`miy+PL?zA! zi;|(jABK5)oY{r8h1+n$_)69a%Ml;DM!N9FpO%j6FXX>?&|vXHf8&1qO;$}fwg)Fg zO`6aOb`N$XecZ#FjJ0we1=V)={wLl2g`C%Q8swZzELn{%XQcZ0><4T-L1)V9Gr0ss znN`)qK9QzbXvVYMtI=W{XuwyHzNkL& z+RRW|#JB(=FRY`Db&=LgVK?F!J)xdnIayNV_`4{JgB$O&`&5xfPLmkHUR)Led74; zxqD3CgbW5!9lHnu@G<~5Gc?76)eQDI3XF9V9=b<^rdhYd#r>1-?lhG~pjEqKv}8a~ zehy`^6B9}*;N$3LDVHzFT?Yap)-fm7=c1vur32L_Z@T>>YZ{u36d3kg0a$&6goH*5 zGc$%^5QY{sZ+We=smOlDf$6@Fl>00r$LHmIZ3tK)K%y^Qf4ThDQF8B(&@a5V7Jcrd zCX`21jm14dLh`N!{JQ^08~pG_i=-QHO2^!_#p(6k3@k0+t3*-h-KmG$>*;Khod zshb-{qFw#e34ZYxk{75a1G?&$y4kHvdNi_ynJ=h_p~S(;Jh&(&e|3dmFsGH=QASdN z0jN6$3pM{`h^!jE?ShBN^&tHzXT`aE@3y;lV!-KQf55@6R{q>wZMugc#YyH^@p~2DuNLlJjn|Pf9?-e)NhOV|j7a>LT(8V4fU>?z zo&Gdj@chop%Ibfc3H~p|dZmVDyyR#u%bgQ|Flnp^{NGYDFx?Q8N2C3}qBvAbgCw^K!zU(ua7`CByqWxtv5 ztg6Yd?zlGdV$%23(8Xz~Wy)#}|0T#{K75*OIJvAmMggP-)p<#|YCs1yj1Y|^4axa2 zPDboOLbLLD&u+?6bB$_-m6=!~IH|IJW|RD?RBAlGGO-)Lj)gL*bFdJi*>ro+iX3rq zKqk;n^*9aKY%P}jR_x4LwFxdG^+=(rU`r$5W&&ZNLfDTn%LgRXeLps9?b(kHhuX+X z=;uTnQ1A`*3;`=6B`JDF+Dh__N2nYdCrPQ`hZ-w8Hy|>~6sPsRBO^Krd-W;zPRdnO zZS>@ouRX3V(_+*${IUyLNTtYB=ZgN+WQC^xcyMzE7-ro^zwOx%>~|xA3D7WCZZJgN z#>*D!O_8+A-9PA_yT7?Q(*0_*46}l?!Lfh2A@ufRm;)x+pN|~LJ#@x5{;h#oy;~9J zn6QmW`5rQP?_?+>e(&3Dje^8CyGPaX)Dt4UoNIpC@5JsSb@{=247UEu^ojSB^Oxi? zYFx3!xa%5Kcd3!X(UX+&RMRD88wf{IDmdH`U+-mNAkl7vH*m79uRO68$~PY(E!AaP zvCoF=CIs8{J$C1_(+G4*cODz2?7T?Oe$*IH+C1cY^SSxCPgSvTOq_e|=I9jeaQ!(B z;SqYLob0|MjqQfjJ9odQ2Z+7;_GFI#sZbc34F!6E&FSz4YIkoan10t&(j*FfR0Fd~;u@RVd+ zzM=t^88s()htneIij&KO4dK4XKyPznx=K#qMfRs)zCGu+Un0=6IK3JxPR*>J?=Bgh ze#wHxv46O+kh_3L!H=?4+~&7qD8-YuuKikBB@MOqVCu2Hep=&G`_zdC%n_@h zU`rw40w15avx$m@z&AP;ajC#WM2yHb4UmNNpf7`!bAgG}W%B+xap?OrvS3~rFw zdnv@#pt%EvK7@BL#2G0IRvGpBNT-3DucP~4I|9SZ280Ha&wsXY&1DdDJAA=b)_)!& zQDpUfHG{2QLb@-vcIhtoI(4eY5?5?0_$ttAaV0yl4}#KOfA46M6S69L^`!H5a~R{8 z3S3}}QWb$50!S~HO$k^mcqu2;&iE_`iXeuj*Z^vg(f63?aXQYsaLYs&*0D$CFvBl8 z!Py|bgGytS;sMm39#E`4v}kFyu~(1NtI^2dSzjR*B*w@vsT;~IP1^n zJ_dR}`fJ3SaYzKrl|>A<>pmfQ&?bIfF z|Hk8QUyB#y0hPg=$N=)Fy73!(^AW05UYr~-^?>RJM)$H_C^~3r~=3!jF)kFb5&FpNNg9P zm^8t<(H#c*DQ({UM0D7P0swZPx;0Wm+}>lH-F8jEXQbnG9$qr(0w3S3JHEr&`;X*J z2c_A-IQ~GiN9%#A?UA5^o};_c*U?}RIE+(@^PGME(1Ojmd&k@xC0T4W<7w+3OsJ=+ z+f?JqnyUNT_4;o;x~MZ<7Qe5zYsgbim!N|E|27T$FAeb*a&B`pk}IN3XwuHr)NNl7 zZ44c`4K@sLVH%aFlrXBvE1tnan$4>29k0Lv)<4QBf z?*xp(xiswQ^6iNW;Rn4KEw~^( zgqLI@exsTx_L~qKl#O7pi2n%x%_NZH$I?K!o2FjD5p>G>F0p;dJZ?|S&#`S{pez%HRd~Vp^qP{0c(dJFmeW7?bxRCU+R4SN!OJR# z8r5BMSZk8%SQ9NzPI1;AM4N~ z8kNSe{89JyYwVrHBY|$+Qabau7RebAr*1@H-gn>{)5}ODR!4890!rB@28oz?tQD4! z3Ctk55png99y(L~PKP7NQw|O%b}+J=rXymL>Y_Lq;~S{f@tsK z(CNyn^I z_~Gqk`f|)QL|TbGsI5yyMMoO@@MguQ()NK;`_zBTorZF|NnaSWed+a?KMxL!i^=Df zb*T~>YSON9A4cl+b=7XFhx(R8d13bQZwETpPTzxiG60I`z^oXsmJylNMKOwvF&4&c zac!ZE&ZiEgIBRK_y6m{KjuyR&Ac`(jg*7jI+D|;E>t&T+Rwkl+_VxVDYgK&jt_P3C zgl!8au>hh|li%?Zx)IF0Aw&acJe~^uEXR)yl1kFpYSmW=V1M{!{~c{w5d+G_SnJ<6 zqQgVj)z#L{K{P~I^)YJXY`~MhY#Fui#gzcdy8bk>)1}MHQQU!( zT+O`8K2_>&2}yoFJPXX!vW{toTZ+N%fn)6exq^GbrJ=6j*&j-l&Nw`%m(}=Tsn&*d z=Of$|li=ZEVql^Jp`0@=!FHee!oi^*&sEs6W*rIq49NVo9%EU3x5D~=LEc};RZh`N za6D+c`gVT7vBSq;AJG|B)L-AFpeWr6+Eq@n0}x}x^aK0U>Z8QK3zZf`A;Gd|p4;+P zLae&r6|8V{HGM`=g2{Q;1vU7an_-2WH)5DF>Pb!W!?p~K-0@$uQY-JeBI4gA7{r@M zr%USWx1VFY;eA^AYqv>FE{``=2h}qk?s!M2`Lo95YI)8(?!D84T0C<%emPgT`kXoW zsG@vd`~1no1H+|P2Lew!001wbn*rm^7%YdK%Fnq{bv+|6yc=hz*I48NA>wPM0B#F~ zz~}*yKos^h*PmDvt8LDZGjn-ef>E30PmZI98lm~ZFn%Zbku8r59>PujIOA0VSv?6g z$^{m=df^9r?;lxH&H0GBcf6RRz&u-g-aWq#=RzdTf7brPbJRjXg1||kRYi2O+H2-? z-Ih9rj>Ds#-Cyefbc)EFsVK0ZK})`{43T*-pENUHXvYIO`}(dCn!JBdC^a(Vs1+No zCBFUfuA4L}M(H3Lwkm_wD3B=n$LIOs_^0nb``M0IDKwL??H^)nZ_Z5N{eh7mydGic zBlk*Xre`!w6U-Q58JUlz&?CvOsGmCDoXK~OqEc@;i9&}@T8AaG!#RMEr!ep59d z&xFR*CS+Wf6g)mkXKvT_D$+CsFqAyDi7jX|RWof4P6%!sn8R44%Br{u?HJvOaeqlZ z!y+s7*^txqcf`K!QGwNX=bH+9%Vx`U<<>fPI%Z?(Z*Hxx2MT3&yzRB>5i=wQ)_8nd zMoNJ`w5K4kmP+vBWR1Wj*&8~oC4WAkE@%k~`4>y))w^@gmigHJMe*ceq(ENM!L>wM8yo5D_lUKRPF1ko||6?Rf2> z&!|_DJ>w`W=$-S|t8b2oMBO7xt-f{O2(ML=$X08bLD|{Ri>i?DQ+$5SR9c<7 zNe^IzT+sMnMgp_I*5j4E40n=sSOx*=Oy6ALbVfi$;VBUSF1SPSZJje4BZsVm635fK z`6GPXN(<2mEXKdCt!aH@1yq*!G@kQ)`y#jD!eX6ckFfdN(f~Y|g}HhE8r0p`o7(sM zw9K$haxE6S+s=J;RAQ=hN=7||kiQ@8qE_2#eUWNO7eB-p2j_Z6vVjJ;MU~Ly7e;&J zsI2J5!I-Otr{W=U%6&A7lih*5HZ>IG3~ZRbWH`T`QlJ$Kx;YwY54Q6~{j>V~%7uYb z*Ym$IrtDgjpRGnEW_<}4=%gG^F%g%a=;-lB?!m`ymTFfw@)@XKtGc1b*29$X;Vvi7 z7CTM?XC=_Ic_WHlfE$?1mjRsv`AuQj;qf%0N2z#H>JfJoCzj+fQ zp7y{x2N&ude=tB@J>`w6Yw{1SbvlWf@e88JGUGLw^bY zlL^A=F`r}j6qScfHDFiRun_Ms04225+1=wOZkdBgdWw0qD?v2>@wJ1I#P;!Z%Fjsn z>a#eO96>;=WQBkj;e@}8+mk%R+iR|T|CBZZk*Mt)r+lklOx) z-pRxX)z|w<+l8CpyEXb#7xpDUa@X-eso`W#z+Z|s)kmo`m#WDUh58@(HI3m3-{;*f#qb94ih;E0B-$(W=pW* zBUZ)eZ!lZ7$Et7|g&J47eYLKqW8NN0%74zXa~2s4*DFWM>hn}Q>nZU9JP#c|VwFoI zas3i!iV?C@%p4(uM1of(i^eV#>TqG<>mTB{ifY|ELp82Ng)>`-NNib9HDm7AnjM^z zq)_Yn2gW6Fiy?>!(|4I>VdMSQ%#cLp%{gOhMXkQfs(or98rOo<42AXF6(cuSJ8v~e zNT>oh4QmAre>&F(+hG&+m=Q+!ixre_)d!3lj+8f`UfhO4PW;0`zQgPwAPj~8|vL>6OvF7<~d>v;p zE4)ny6CCj*)D8rWl{c!XD{?9*jP_|;;NlLbh7AK_jqJGsx!=y3)L(GD-01@Wg?pI6 zuNxKh{ec?PRUh!0hrMEpX)gwPBE>xP``V`N;8ZTA&rE67dGDLJMB9IodA}>td^V%$ zkHLs4tHb$w5kE9%x*iUkJpb~Wy0Y60tfd=I+3TNyO}Oy(6QVL)Nh!`6rc%M)>t%4f zpyi*)1XDbFO`JKIm?vTFE3|@$2F1-KY;oP3vj`KZ05U;wPpUIA1-wGeXUgd9T$(XZ zn0&@R`UNrX5Xf!QYgJYEc-FU_@tay@K*UOy=ZkkEE!B+*1wynx5nU%Z`C|rjc}b9M zD(?@q&zaKVGqK<2W4tvIERDj`>@T{nIsyCDjnAN zJmo^gE8xdshI0bmrnm2KYal)I7K<`&RH%xiFN1y(tqdMSzc!mGb9^Xb zdQaHn?D^T9IZaF&n?@tr%Y&4w^gevzmfQBq*G9W0L0-I*AgET~^k%BmYY!?*B@MzYl-!a<{$%nB6^S<8tR^f>RB*7yfRs`oQr_ z8;!kZglHa`w6Yw4A(9>@bFU9tAekiQHBpe+Tb{V0k_p7G^wP`@`zIqI#OQ%&87T@N z{&hjN!a@W+00o5Dl#`x3Y0YiMNJEFu7*R$=yoq#-+Rg-Kqb_2m5N?U%s{$kY@k(LL zOO4O(sMM3x5HZ*1mW_+2T6=b!+*j^a`>zVN2%id(@A2y6_@vHIYi|$0)bRj%U_bJO zWK(=}zj;Cbe3EI0a?jLQon}BnPvlqLeeZYbgO#(dFDv)sdKJnq>>^h|1{q>MSplWe zZBtD3uoxrtiujwxR-P8XYSw>5Z4E9Rm&Gl4NtMvwu{(V25KY(}*5!^R+gH>IvmNlH zjji_dv=HCd?)HV2UpUSeB}S~J5>_PVqNideE7BCh*o#$atnQ?uRTV3+D>`sB;~!vp z106xw4b#pW4Un;B5jy=(n8^F4NQNHP+q@39L^Rlk7wl(A%JG-CJD+i!_!M_Y>^p;A zPL*7aoWA18q}*A7KbwC!Mn+Dk!=|{Zi|LW%WPfc1Ap+(_t!=njfP`C`78`$2)8<=? zd6wUhrCmPsS=1!L^tiYIh> zfI`_o(m=wK^yw5^{b8QYHqliiuNf*NMha0-yfMq~2#I+Tn)gAwaanM}qW# zubyyP^k7k5p<5V!a9i*w%=2p1waVDm$IAssUiit>4J2AKMjsr@)LR2GTaTzy)T=-H zNAF8|*P3F=|0KEpf?Pcx0I}|CGR^9Lj*=wtX3dX2(9&KOPm>QsT@lZTPJRghaS-a_ z?S&?~x%Z5CfZ}xJ+=kcBOC!5`ksMEQB0ZA}>=pO&GtWSyDeIvYZ4aG&bG+{;y~zL= zskr1S`n)=Dl+(Y=7&MbSYA*tvNjA<_dii=zHl#_X2V~NcvmkC&Ch_8^aQ@Tjqw3_4 z(Dm{_r(fAM1~%UXL=JSqLci=yuc;eurn6A9|Eb3nk^v&S5H01q<~Y#Ta-UXnpYvR? z8;{Yd^1KiU5cVob9{|=dMxKeqmoPug+h@kcez6r{m0ozm@5R9+d|#a_rjsP97vmaS zH)2BR@T71XeXOPgd@*-10qEU7bG!W~p|4i%Q?V}A-=9`?Ns2oOHjx@+CVl*D7Z_mN z{&}T6?ZI(oXlzD|_ZXhFMxvRw?3BBcSyKlQLl$bL19HC6rG1$5G5Fa+6wnFn{=}m& zs!%;q(vcls!8m$P70SrM(8y+4ey#r*uf=+C;KO4-6@A#yW$`xw4Zrsyb>M&n3M|zC zzW}JJZQGRtBdB5-<2+QUYp#UIAC;n1Aq9DAcJ%ZCn=+4mooCp^2=V%qKx1pGbn3>( zGN)~_1hR=+Eb>VjFl8WSlC5@t8C+`8Z^x&g0A`^B#TKL(W;<^Ot0O02{VqOi0Pnzw zXW|HwuIEe9#c4g$4Y&GkCPC|w9`10SW1$tft0zq#s>in<1UHxectUdk$h1cUA(k<| zzZ<0r;=3a!h4O2y9Z^vWk$KFoyen( ztlpVAHP7U|y0P#3Hi)`!e{68OX#)Vzp?G74tR7N&k`N*{GYezO-08k43^KLMs>4RX z3X>O~iGwqf5@g`|kK`trltfd0Hx=HDg!IfdVCZIi(gxMGKm20YQf8kS<`YW?o1IO& z7?L|AzApRpX$pl0IN4@=697G5tI$?&U~uM zQx0|kGHMdE7>&IS0J9J9h5+3Z)0;>IL@f)0!Znn8 zwGpH*Ztjg=Q}cEcFAB3G)>r&uk?asst+}dPWn=!S`nF>FZQl<;rbZJk9uJxCIsalM zs4Lfd^0sW@qzaq4y7j;m{K$5G1lNWDp|g#T3R} z{-8#1x%c+t*0-|pY;ue&Bn?Y;MOB0*8;gY8@fk*jx9Utj$r7KRq(z0qeR7~2syrIA zwU;WN&=FOA&F50bof8(C1lZN%LtKju%D7|IlNz-i3Y_crFS;u;J6 zoNvSdN8?i@2Jg?*AbtB&4xJSTS_Kd`-6o}#qKeE{5Q-C=&X+;JvZr#T?y!X0T{y~4 zjV;MPV!Q|IhDJ4rTB>zt4De^HPQNfj249TY3~V^Qr`jUmYqr#Wu`bXcm!ncj0g$qpzgg(JP4hDL#E~^`iYoSh!=hz5bIgDy(YCL-2imgtN$i zJk#FFTmsoq&<~I$<*1;=2hh(!A_AwH2VJLi@k{PEL#DC}k@gl5T%nxL6S?in3_!zr zQLS(yljv95Rqqr9L%~0fpwENCL#q#4ycfzY*{@zVYPy|JX^xO{;vPP6|HV&&kjsj3*q$@m8V1w?iO4=@oGk+iJ8X0}Mc z;0+R-SEUzNKI0x)so1P5j}ugBUC5#g!AQH#Qks0zj*0618D*SB8ZYa#vOUP)?$`FF zzP+B+0p7i}XS8$e6@B&Xxpgb)9xTQ4NS_INcp}tUtuXu`UE_V%GK~G?<0q3LgS|ud z+OISNfa^!a># zf=-miGvQ8%BvG0L|Ko5#jLSg${h4?XqfGuVolF&5OHe>RoeTv-6vq2-({?waCYleE zvzimcTc0fB4b?*Ms5j3P;o&}%oS}G2pQZytk<|HxOZeU!5T|ajGO+q!+sB(L@+JD@r6q1RASjCDlmub# zFw=|5I#zBHBM>N+Z_xQKcjD$p+9oMF!v>GFHb_KEn%Qb?9`Z8Xl*QubBik z7y&)q*VIPh?87PTm-I|6hEj*~uRRdnN(g;P^H(r;ynwQu-L%)cT-g0^5BA8~C^TS| z=f~b2o4(qdp!|bfBtHC4s9^i|tiq5RC zE7ppSC$6)$ZJXKwI@~K;Lx*W$ndEgxVWhs{*Hoz=WfPJ07InGrHCXif6P*}8M;U+I zzn?i;ko3+$uJ0RmUy?G&y4*Qg(2}vqPjtYQTfWa^bxV8ne(M5@p#N#h+0)3!x?Pz} z+N8JB1xBx4KAaOyJU=>kQ4CvMUYO5YoX<`EmwW)8qjew5Xa_5e<vX0}M` zHlB4L+KP%18l-RlAUU`~_4cY58%NS$>K8OWR#pP!-cGh?+Or`glICchx6#{);jDZY zH-C+H8_&G>#&GUjDm)LHP(^&bG(@%y&r% zb;UhE$!P5&lhTtlMF_Veq^!WQ*^{JxlK=%Qmoz2GV%S>1G`T~w~uP#u9(-Wi!2_t z%;YZ-rw{W|7#`E2&<5Vye&$^HXUlX(Fh4nBsPE&l!#WTt?2VMW{Vqm@G=?Tun<7J; zu@-p3>R2YEU3lPQ&DJU_J$*hn_RRQ(i@l!_+IJE2vo~5I`nXjW1{^P%SN*^d)-^vh zeJjgIZ^TKOAq5AXYKc||qF3S~?nnG)L+cwaOUQQ}8(ny4=_m(F)L##vJf*Uew_0z7 z(G4Bzjr(v(y;M21ZmEQwI6F_2Zb!zMq0u>;C~s*l9_wQ7?tSq{V3MmxdYm|n0a^Kq z5z0sGmI?t(H=xNr6}KGXxuK@Hb(MBJ$N7Sb;Ax=ZRbZ)9>Ppyq&lXsoQHF-nwo}}^ zW6${u5%21q9xy+CSQTG(=*u5NjR?#7w0asD<~|KVCnuCWERa&$fKO%k9+S7_KeGjp zTCY_E&Ba9jL>c{01^buf`sZnoyJ|f3$jp`&8b`~vVe-$kki^TnJhUYIWx2X=02zQx zE)$$Ie3X|Ui5tz8de>zV={gI5LNQ<0114cAv`_yKcoORE3pCmaw6SPTwOo-F^}BdsgMn+N!z7 z5K1Q#JpT5DKLql75mx5VsGK9iranm&G&*7(;;FEq{=OOFBIbEH$=6)J(liJqL>^== z_ZYyU`dCCbOcX7egT1lcY;@K;&gXJW6>5KRT`ieTOj>}H%mlCbqJa#p{(D%a@ zGu-%0l;#65y5);ZuE8U|;#v2-HxzrgrHBXl+STIjnUN1IZobR{_XZbTQrZ;Q^w-wV z+j|QInvKJ}M`q3JF=IHoNc~IWw+p%_6Yra9;S%Tc6<+!Ri9JzynwiW;b*W;CQgetK zh9GLbi;BQceIy-P{;eCwcq_`@WOS!;mc7J%Z*zb#+Fpq13F6Xn(S9#J>&Tjzn0Po8c40=prv!YQ6;zG1Zj6En` z391x1R8~kp)MhjjT6gn@UpA4fEv`Aok$KmVTtUj$&CXTJ)18m(Z?ap8C!p;fy<~>< zRXBuWb~1P6a(nT+M=ajL4+7Sgt)iqv>4dK;HTd!Id||Ev**&xPBFghaUr_KRU6&M| z4|h1_c$V`0a9e@*vQs`5hzWT*kyWI_MZ!j=AdrtnC}Vfid%MZC*Kfx{5;5JVZc5Lq zF%Um457q42OCb!zB8-U|LJA3hwgJ+8K~E@M@`LO#XRR}ok#q0Lof;W~G9xIe z!}@E7y8;HRowae9THR8$H*Z_24F##7*1E$lT7+~-@wHz_Tko>)TkyW36-X@i>-!uvue*+}HkA$mY(yk+H8JbB%X(Ew#)mnVs_PQ?%$5tc5l8 z_pBdoX>r9w_T4r(C50>S3k>&Hob#cK;O6eyCNFYFfB(xA(=p8~YqJ-W8(gkUuSEZ_8BMCM1-g^@e6$BI& zCG;X7O%%&VFJc1}6-094+Uq(0Ui<9-aFa_eGBV#W<{WcO?fRA~t?NHG4WmktClPT| zRdwoq!q~X^pyRRs2sZp%<<1H9wFnPI1y` zfsDo@QTdJ)R;aD14kAf>7)h)Y9~L@1q0B2xnU?m&oFwF z<=k@2LxW; zmCYMH>ST4^GJ1c^kJMmND3Xl%c6Anz&ok-jOL7VKVhNUD+rAczX0v2g@(ww16S%Dz zCtY~ciP!6shb@UlD=w5QS*N4lhD{tB5g)Fg-tjF%Q8~&GX^4cYQdOnkDu!ZkE~o-l z%x;4b zpJ#r1j+dw2q~bpCTB!YFC!QdfwBYjWEF|y5R!EACP1tK>p=?g11QS=Trg36r^rqw8 z)8iq&@5Dew?Fn&cZUA37(^fhqrTfCi1h}EkMZCawc{mz2kzn|!oY88XO~sCTPl8$} zEvlA+_wfEzmomL*u!BoQCY%LzD=&oL^N<-;oE0@vPxNkZJ+3qNHf@*M&qp>=TVqdi zvWQ4yz{-L00`eBf2$=@P4K|6r=78zKks1gsXnC_zuV$?{C5B+u`I+n};$PwTG?c+c`^`trIfSH?gbPp|YNy|; z1ZPQlu*sD5QKG|^8gL*;Q<9vOSt^XV@V^;?>EGVpB3Fn7u+J0BZTMqc327;dHDOjB zh%UY}7qCYbI5B_yiLULxh+`=P0{9tGKxL$uC|LF(6B3OH=L>f*iiu4lC8v}O82D&? z!2t=-2Bcz1u%k^xO5yJ(88YlGytrXVrH7)pB?@bY-D4CysWq;}@H=g8)md zJZCc449WMsoFwl=fUXU!8B#2~B;u3F=lWa#9@H0Ls1>)qfABkb7>f)=x^{qp7~fKe zdpMfZXgRsB@Fo>3OkZk%MIkC4%gjYYdj$L--G26U|GwCLm&g9^0lis#q^L;gEFqse zMkRS|&JP#PVoJCxHz8Xe=?6ON4!D+%7RCzh&<^LqIe-@4sFm}kh(K0gpN`LU0frHo z2y;%eXzWZDOHehJ6Vjleu{;uR-a?jFo7oq0?hQz!iCg~s-X*v@G`|gYN5Zcwf5*tJ zKKo{x7_?n+Xo=F@wxgmVnNxFJD!aN6j4vtV0l>)>oJ>&k^v`eMm4VpmmOo3)i~Sxh z-!ejn2it@ey=jLIf|n)4ilKI1(>1B*8#Os9x~nlvX+o}i$&8ZH&;%?VWQ^_BLbj+# zOXo}a?0#q*UpuFC|2aimM|4=J`UAsy@|lNXpV+eP9)pHC7~8&G_FUgI;`(lVAk$d1 z+5qQLzHFCpg+kyC$sDUVYU8AtjW)6P_lbU>(9mRAV>8O0>g7{;yfAvNm9dblEH~~uJg~HC? zQp$kjh0=Nxcac$P?+J1$2M_zjQ5ZT=*A4tiCFQo#?5jGpBj#nN?a4R438CsAUUAZy zMA!5`S-9ZYKe%r14c-(+iQxeiGwYKYbhtXNLhtOQK8aLmzuWys_e#0F6QD@pCwDxZ zMwsmm*ZEDVnFOpG(|Y%s7Ryo+^Ia(agb#=rx=6D!Gn6u<6P#E%(i@>Fz*e)z+^DWs z)6@`1F$9%Jl@t|Mz;)paM1VI7p6YlZV^*LaWD@!{-_-70;hPpcK2kXqdu{e&jX%+5CaIh8bb68`(T8;jol z1@)o(e-dyGJYeoEEgx9D7!vTYMy187&rs+(N}hVhl+fQO<1D@y1gPh*=elMQ9!`vi z=GJd?NF-BV8moP(nQ)N>7PL_dU|gGepGg)@zr9Fq92c#9>FVammw4;ITxE?mUy?T> z!j&z(1=|#q&T(=4?NWHqER%@M(B)bCxO8@*oEvz(UAwFyhUl>BtJ3e>B0;O{ASOQF zccI-gHM~i?1tktG{&}`#>_jfUB*sRRXz{d-mXt~i2JC?Ct}mVsF#M&1oGf=Fi828i zabTD%TmPi&tWAjb{S2Jv>Sxd;y!fnpSFO0=ty6`3@#o175`;UA@>%0nU2Bp1^qQ<$)ju_vsuwc(5ra?s$6-+xqPF0p}X+j-U~UNqeAg{=ZpD{#H3m zJzYJ}*9pr)6*2MK+SOr9SCJQ#&sg<5=r_k~0w?bLt#Y+2SX`7B8qT0y7oPCEa_agWsGks^pI)^3HKwK(lYOn!K!DbZpxWrdewQ3*(FLn_ z^3NmKV6zr#BN#19mK3F&p@ga$aJrf)^QVQ;`4I@**67^Kw@!y-MX@(UCGgvkOD0)1 z@t6^&h>@&g?Fn~l&v%f)i8CouzotKTr!{>F!3aqE=*%9EwTQ)3zb+j6X;hzU*+o)LGDWPPABPYvRdDMtbGXB0-#kk4w_oV_TL1d{3%LvkfN|Y|UggXct0`NDIbm|4c3#Rl z7go+1SYYT?P6Gp=(m|(0>?S@YM(5Zq7vmrXj0*0?cNrX+RA5>JzXWD9BM2&X`QzRC zKz){n6VK9)>{Jk?MspF5I+6@LO|;W?J%TI?G`hB$1ASW$ztko>I4K8Xt;OOki*)$C zXq=*mYoBku84#YQbg7fUU&>S#c;dcuo?v-@K_xO^*Gz8UJrg+yZpMAM>YBnN0goBd z0|Bk&rj;ycadkwIaFTnGzzZB;Ch4IQRKl>>Yt-)jgP2e*lmme~9w506izsBqap|lD zge)4SYgd!Zvr`!`7~``JgEBtZa$dnY+@3PyXj zZm$!3`NVQ|y^3b}&)0cv&l8)1-RLjsL@i}-9mGuYM}oe3Y98}hl|FktNwg|VLd9nQ z1Xa+kk}gaS#K@oV_X7^Wus@8fO*O3Cz*oL^-Fw^+XfiE{ddXf=8eWVR8BI3p&8fI& z7_BP(<89Z^2nRH%zLdp_S<9R;M@T?}+RX>l4!tf`smh|ydPt9T4Ar|F8SaUR8(EqX zisO0l^369Iws%T#qdhO13+AkH3OYTOWH^#JaWf4|R(PDa$moYC#%yY-VX+A_)H&${ z9Qd0E5$4ap#~@!FDQ|>TXe+k9ji6K!VVaS)h|`_;HtDI}Q>8pDDQ7;*BDXr~zl2;- zymU_K;0a^A3F$jMn<|y5dqB+kp^zxp;q+MtY^F~7y_E|SRXT3!entGYqPAfr+%)0m zM2@o&7*KmI~a`Yv6t`WR2e$Jp;CG-+pt$%Z0lcs2eCR>Nw4NRR%uI8N0V zZukZ{DgFAnBxsu|=>zqUbWqNTM+mFrh;dsWg;_xN^Kuyk0v*Pjy;Mzu%>QA*xG=wD z)PxWlJrf5_zJI=6`SZPP7w_l#q{Pitg0nBrd2&g|D6stO(7iYpm>#VE+I!38#F5|q zhEDG;J%2$P1rX#jQ_EvmYex=FYIzS>>fhuBpsWs=Nrpa9g4Px%n~~N*JlYuy5;$C} zD=#qsd{}HOB9SK~V*-nDspX_iE|E(m`Rxfn7P>3J9cZKfzVW>J?RJ#8LoaZfob9p` z!D1f>s;jU2eQxfDhbi0L``mY1>`3=S0M+L?-lh+esGi8~{QkhN+o!d%edc5I{uukj z<;C%G1|BjSE33sDhvcJ`8e>4Rc~ z;S$#8o^&2FrxD}=ewvgOH~NT9-!(dH!^Z#kIy^k!NlWgPf2a}_fQW4V-%8zI$XPbg z1uN0Qx-2GSI&G9MJPetF_$;GiwQ)nw2cx7nD#X#Wz9C=t{Aj-IH}9gf#L&mXA%FzP+1Bef6xYy5&*BpuE?xE zd3)-yqE>;5eujdf{dqfwl<5KZGt*>(!6*xgTh<(n;GsMQuWcH@JpLfCGNn;Teul4( zX&)sk{|I;a=H2x6_+t=*Q}$y(E9jPqVKUU6IbF%>?qYZY_+xZ9sFUv+qob3z==eWM`A^kGFKH z{h|JCL`lgyu!=_;&+?@$R~_lCFY*TU9$HDPpep4lsPD z=8X+enm@sHs6Yn`ucrU+r?`p$N|2(|>52^9SAGh{H%*It>;wcY=aP`8tvtd78ur8g zITFXY`Ektz7(KhTUz5LmAnsrqH?8-ZBe_@8Q#EMr^6?6Ny@UroV3q!){M8H&C}m&n zYbj~G8vqhT&GB*|aw??TlNm|y3>cW@q8i>m5m;$ZXP457ci6!MwJ^LfwA+=_${%R_ z(12yMWbY&VKt9dgSRmrXublU_Pyjw`DM`y^%Qa?tp-YeenxFL@T7E4E4_n4E^-6-3 zBWQf_epY+SRR^M&uu<2-E0I~p1^;`b;a|x8DyDO}NDJ${*pTJ)CYkUs*{euy87&1m ziZJ(!_-Zp#~@A96uPyHInWsMv&N;xmLmbCDBU3AWkRlXE#?A#+6|GOY>+;a=w&|&Uh#6`Y1o7V>dmM^OZs<<(u z?nXN0Ca3PLMTaOorznKXUTLsOD9J2C7(m~R38h>XSQit0z6uWeR$qJ|5gFx&-742S zMD$AKW*m||$MvRdzc$T?F(sd3892>_HQ;=_s~WF*RuCDe^&{%sDQxg+l8-Qp_$3gf zB*aYS`+zNQtd3-YvP)$u)fREg5axOB(>Y)+j+^V$iiv_AVnR#WFm8-O)0cOnVORo=Nsl*+ z;?`ULr;X&l9@g%5dN?(~!a6P1em*7T5s4n#irA3RVh=i-t6nG3*Fz7dPHmBtbqXDj zlx_85zLjJ{*!Ne_^`ZI~D;hlZ?vq~SRaFa*s9q)-e&WCmd3x(NLObvuG$$C029-j9 z*}V-Pqj`gKVgrihhMxxrIMyaAOH16-3iEJUgX=mm=x-FvN+2)*NIIG&9=X4oI_9lQKDhlW7|Yz zarog+By%fYs7xEBGzw8vif*nh6e$1}udOs^kj!yZQ#3dr;Wd7EfP`gC?ju)EKtqNUnHaZP=F z8)q;Oa77e-#6IM`WcKz@>M(Ad;qs`d^3Ma-k^j;B{XazR-(0RK4!|*QW-&$2L!V9# zI3$HBTt&vpX|Vg5Txw5dU$)`G9QBdX21VA&mf)V4#%WW0`j49; zq(#2?tRG%Y3Cispli+;eoN>HzuFTbfLoID4wXO;Qso6u)lM}qyNuB1=1gl>>wXuUHT|}C_@#4>A6?T6O6SZhlFwB@I=Vp@cX!M)3utzGT{@IqZc09KPws}CX&H>lTK0q?3a)P^ zd$6T=n4HIxg6C0CJ}Mpr)xpRn#H0(Jh3_x&8zl}xWS{0=PpsC!e1KH=q@pP@Dxv}p z$wycSqrJ?p)1Z95f(Mg9x%Ky}3Y8Fmz!_<;npjWWy5A)qQ34ufpNI|(c6K;4TL=HkWt9iJhG zEtenrcSyLh8P@e%acu~Kn$>HPh0as!(itwQdp+CMP{{8m3!|Qd26f31M z(N`1yx4@-;1Mly{+VPss<#a5jSm|6YL+a2giY*1%E~lYLhn$b-hVi6&EFc|%>VKJG z)?gPqWUNt)6wzKDeg$C0b zGk1}19zph;_If0ZA2c8{AKan%85h49Xf(VPpZUl#??Q6SevfJI_@B}(<$DB(IG5Rq%( zugr*&e&$68Oku&hD+3&0mqdN@(Me=;MUTCCh_n_s3Y_p(6NpP@tlcQN1dF!>u5{!h zjZ?sFd*Wcj&>&n{L-)tb%CWRmLe_>r>v`zgrG)P?;KA-9%2k^4n%GTZXV@h3l_R62 zHM1Y4DyFNgtODu7I3CvG>!MKk61(d@-=WMZAOxz|j2%SI+msT`u7T+aF_Pj_8YyCB z@r(wShj}v)=+-Vdha99Af+q(Y&Og7E;;tyGr|LYkk!<-=COAD}u_Tnu15#MuqW0V= zX7DCI@P$vbI;A=)Nsvor6`bN&wQxPAQj)*=^~ovEk4kxuuTH!@Vx-l&hfS4owOn*N z4dPb5ZIjf+g5r^nigIZn4b!P64j-U4nztRK7D&o@AQ_R2W`?q|6N4?=5p_g+0P&-K zBdXfaaA+X8^n6MtN-fA>%wn}E4+m?LdCShCV)X2zZ9?(%r~AlPi}A7+w;jA|^#*BDJqEz5Z{P30sc(U$=E^8dlBan?Ahq@2YI#e!bBE;(HHEY!7fg$7{)RG|8|C)QH8^%csRuBA9&0tlU`vz zPiG^!TYx+tbrhQt%vrcN6-_jj7y4IkysOU(npGF=agzIt9XR)A!RYrL@z%7TH1!8> zrmoPoCDMQ=YhKOzS#Zze<;s~b1KV=HWvpX4Nw3A98YD)P|ojY8%rV*ct1dM@&|kq&5~fHP*w{fqCbh< zBJlKH;wzy7+2FLR3genOmS+(~x8C07{PrGYZfMyu>a{}`w3NgZ2tnXV)0w(oq z&V;CaofP5u^j>cZc0X%0nJEFSYdl8_#eUj#aA}32EVSbb`D$fS(@?D1#iS(BVw6q$ zvNIkIb9NWsZx@h1C20f)LratNa361xt0ByuTJo+Cg{;KN3AD7)UX$_M)^H z4nqV`f$0|^+L_x)I0p9o^jZYgz-z^D7h4Ynvj6~tdFq9T4?p$$a(Eb*ApK=jD&^7P zjf8Wu00;TNaW2W$n3=HJm!qKmg^aT?fp53Z#D2hUZBB15I@=`M=3WRMBUn8wect#i zLiB@6Zq)|IyoXZN$C;Cq{qnPS@2w9A@5o>Q0EW#5=R2GZ_;EJvBlf5FchQ_wyD`$#^a%o)2L~KuGCc8>8-U1d6o{t6kCfNV>oQ!$?zmMMAI2 z&BSXtr4wp``&acLi3zt(3EO;3xHu3+a|aP^gtO0(wN|B?9syjI3WR9#p8G>IA%WD1 z&F6ai`C&rZG#YIIiL%sMGqdtaV#tyas>CM4H4+A4KqeDY>5xH7n=wwtOb7@M1#E%+ zCYN^u!4zk{2%K^F4XrKAXc+C(PwJ6pSkk^oT(1A zORbmD8v|Z3Uf+EsB}B^ZV;-?&cqoO#gTHW}*^s*0rcqa~#=FrtFxz;4*~vHjk`V1g zjts=`K9kL+cni#CHY(BjC1H!&fb#V zB(dAgGIxppn-qLUK}*r^EZM2SZ?dPEei@T$(2e73<{)yj5n#I#cpHqge0Ui=tbWfW$;f4W)|R74SH#}Sox zN8kT!xalUyqOT9j7!otbg`kpe@?xgnH8q(z*!^Km^O-f^o$!;4yDfY3)=eyHMA1ap z+P=f_415^?2F1D4D__}ZL2DEj_gQRvzo-~5NaYd$ z=Ta+KR5LxaCyRMvOw!~|P~ldqux*FtK5_}=_9N6~!q{<)4VNt*ZiLJ2Jm7xkcm&j+ zerHt4oE{%_+*WQOr6Fe&@oL+V`PEOphx?qpb|;s&aSHj(5ZCR2F~eiGNU%X3h{-CI z8@t#v=og<*NN(yZ2TEqhOJf0qNg@W|J8)|n8;xec0?MaqtL?1vwR8LcW^!YJ)cT;3 zT5_TQfS66r)p{lgXlnfYXkw)uf9K_H;p}OwiN(HVmWYFtDCS9izvHR#DT$Pyu`~{# z`9%{82omTsGh7eTQ&k+-qS+0-`XPL>J|Ctv8`px0+khk)A%pUarBKEUtWlo2AY4&l8)(xcb5W!T)43}L!yzr0jl4L(?K2|fWJk0? zr&5AMduPj~_l^(lzP(yJpoLQ`V+k4}EX20m-w8gm{M!CE?GQd;j+tNJ0p%QVB;n3$ z9Ho-`;+lbcRe7ATtucFALspg@m63qc#;+BweZbyj74FTe7! zX^r&4A@YIx_D$%kW&V%alp-?Kf*JWj{K2pJ?tfN+7#r92pjc!lfy0KGNqpgb#yM(F z>ZRX0nGKN{pO}l^Z7yiHou(o-O9TnQ|CD3jV)!i+WKv{Ay79iMdArIZfB^F!iFdu$fqKyftzJQNSKZ)d(TCKEM*0I&IdA$J05+S2MWVGL?-eH3`Wh*+ zsh1rbJ*36tk$22T)-8>FdRs~cMG@ongo)tvL5;D548@d;oQj@Q`7?U$UPHqB-kJQz z-L%#{!*2~2j^97)2s;q|Z*1PmZe;wG z4}PRvF9!yS6gLw*sdCy&)TJ)Ilv+}rTpaDfbNhioy?6o&kaR>L}fxGnSJM-6a) zCPr}-O2?3o8u&y6;ML!3hPCJ7trQTDW?x>p_gFAKF(`fIH*2})tIxkLyQ<#&VPI*_ z)%Pg!Vw&2L!nY^i>kx2Fv;C@)f)+15 zuH3!wD~p*m?_ngqT2=gvyk?f`fN^qB=1S3tXJKo8=(hvi54CZ&j~;ILuD*e|Wh>pR zUDFo-A4U?Z`}88`Yk8LQuX->Wi-@xDKujuVC~TZHaIW*C?{~!j>d4JG3CX2>RIcJT z=GHmC`b@G%4RC?g)u!K>8)DZqBBw((gietbb09G@TS&zuQQ%@hz>>k<2(q?~^qz$@vyEsQuK4RI+-gd`KZZ zd_3uJ@udFkhUrLIQSTo=5aO`?T8X$v`1D}ofNKu^{1t3F(c(+EcN5A+mlu|UR+IJ3 zQBEcjK(O+?MQ8<7cNXswrrt3+o3z_D)H*#IX9m-TS$Bmbs z62ARqsXE^oB*CWcw`_@uWFBi45S9k_ATfdK!`;5V8EXq>5Uhi}Bm`US!_2SAy5Zpl zs@BJoB=Q{63FGW`CTZRG9q%%mHHsz$-haPxYe>hLoYE=^62B3P^4Urh+r2BoMMdcG zrnKwr5zh5-OQo9cdTgJ`JBPhNkYO_ew={qH$ccrd~#V$ zUnzIV7@{&)s8|b_ur_Gr*uxUzwK=?<4(c8+kBv8;)?h*>NN50L#FGfVh zymfh52vC1gTXF+*Rg$mo%e#|0mETwW1N4l1OXR~bw4=;?_?7j!|B;IRm&%<}qGxCl zt*tp@?Wc1nW0CZ!K0@J?meoopSyRey>?ys-frfn4Ys3(&jD`FkR+?QQcP#JvC)DWM z7PP5l17Iyl4y>S5`p-T1Wt$>vOZE!ONFmV?cr;#X^4gL&*5!!@<9?e}LDt>C2%*I% zAJ9*4nag?Ejz|EO@4XgRljHQ>eZqM#oeu9`>8ascwELBbAuqcy*3j&G<+xw%;AlD8 z_kLb5S2bx6D67%0K6s`C$Q`uOOP)&vt4PInfz^TbYz(T%I>k11jVL)4O>cx9PIiU_ zWIDsd#f3{~2oh8y)P9paXVwq3YBLKKEd>x!`xiTNSXzv^y`Pt|6DDT}t}bUjQt#$> zS-)8=8{sEv!qdhD*s7m#{hsEfY8eJ4?p}wyI0Q6Ba3c18KB)IBz(^cdlf0cD($=EP z-qKbN2>s&|5Z#eQRIDl@d4&izxjj*x!p8E@P;k17ok-Zr*5CBOWQK%k!3jvwUR&|r zRwGE}i%ou6w!68aBKuC{ySf3V1ABcLtP0wUP4k$~Kk#dieA7*#$lHgok}SW~Xme%B zjqrUA_|T@yiMJ7nh6>l7cB5@%9EG@E|M2BfgNbRtQ@^UIYJhkW`tqfEN!h?)!e%YY zO@IIVP%#L$!v|)q3|F<|RAHc}2RA2iNz0CX5|VeR;PYmvNhgRqDyE>6wN}5k8OcRH zKi^pf2N-OgJN8v^Ed63A*RRbn{g5v*{O%9%`@8bcDp+lhH@W+nZqX)~BKJ|W*5zno zsrZcNAOFCU4$~9QD*RL0I-_JSZR+v=%}8=+Nr#-j^%QGt$b2^QV*KBC)lu%Rk;K4R z%Af7;R6kw)I?;D5XM$+-emX}aC)VUq+6n#ahZGTQTw#t3MW^l0+>qT{}@*-!~pm#7$ET)GGZwx z716m^m@Zk2jY)O3L-qnttK_}Nzc}W0OHcA~K zrqbKA>wc7ZQa2m6K1fR&iRZD8J63#mn|4f$raJZ6C7nmJv$EDFe!*Amu|tA4jv3`x zZHuL`V9eucI0LV(sxC$v<}d|DJ?C)Z>5+b2N(EG$>va8LWW+QL5eeMyFop>ex)x5ouT2mbV2Of4)eBH>(McR4q z%ic?ZRhvn|#d;prio$W_^7}Y|SzNIUa|yas)-0iQis9^?oU2{fo^Uag-I7?>t-zS`HKdvmoK_es*h}SAgy!thq_?&2CNpkTGM2 zp>Fxkq57av3!pmCl3Wp@1&KfN`Nn0vW3uq07nug}*!Ql>%RGyHXB12qRN2J38y{>7 z&PVr`?61k+no2zNCs0`P_}Nl1UtZa!N0gQ?iIxMSwc`K)UUFMrGq>tNTMJ)HVwtLK zxdxxIGCh(Z#SGgcB4C!%Z#;u#0WoqZgZIQ5$x2PzV38pYiI;LY#S_}qjcMc4d~duT zw{3A3h1qw39=dRylOjt+9EbP;leP`I2lLyBO^;M#`%!b2QH?k7!jUJgM+nUgnl0*_ z5D)DTCxNA)B_Js=JkR2HL!1d1`Bi(^s6z?%xzprK`EY{%%f@8~xC+542@V%v6onz- z5{!~qT~*MW1R-jio=D^Oh9VXNN`RQ0P-RRWl%n$eUK293WgBjnREWZ*U!ez|X)FDZ zd{3p;d_0d_-Tx@Ke&sNmy?r@u)8wp8DX&wlei~e&izz}<^Z2@i-5-vP)trUHC69*s zxD8{aDU1aPP_riLs}7AnYoX#@S5imUOtrjf16Xxvgzddd29S|SZS^oLi3P0DZHO{A zo^WB%LJemWz*v=+M@9>uqMomw+-APHx;!(=>}FL^_Za(jcV8}m`s&|I`D2>3=cmI~siO^@DZl5838 zXE04VkOoS33p-Dar?Jq$a9K28X|Nn$1Hl@@iRusm(?^6N@0>g`uAco+?2A0bxET8x zTlBbO=0A#-Ii)eoT-SAERKhYx#8~q;+2ek)jWwl<19XF$!f;?$k zwr8$L)k%pj6{7}7iPy`z0kb7{D=U%O41A9>(c^r#n2S?p9>7kA)+3d@07#H;;;6S+ z9p=|-#S|*Ro%k+8a+1%EX-ad{pmeNhSs9!fSu1fEM=^@q2>)&&!#0Yms|Ve)ZZDQc z4(%6RDi^HZeefk&@uQBDsYG9PuHU61pk1Aw^MdNb^?{|@z!4m`@Xb4;ArNFQS+tV0i7j@g&L+Aa33X?>~!_SFTCCOXRj z`CPcX)SUJQETtrddb)N*!nJrfZJSh>s$0yr3;FD0c@UkMsGPn+ z*3z7yq}W0^6Fw-8qOv27zgk4~8B8RfHxl4iB3t@LaJzlGt(5~9n6LQ$-YXb3W2yTo z3!!a@Z8_`x-NUCnDf{iIekAkzkGzIwx4^qB`H7ck(+XvX2=lz>zt(y3{pRq4zDwWr zTr`S)pZJ=T2p^?>KF9}3BuR>?MXSa->Yk}njaC!JqDX1?`I&7CbvUdNJg_O`2>^7W zdhNZN4W}Yhpwz@x<-N21ym{kSjO&*gi6iTuzSygmaJ#Balhw|1TJXe&j`yrjPxSBT zbWgR4x7SL$#IODQWd$~-smW`~@+L(`$;QaVy%1DAeLv$@PyFGng5&%a!P~ZP*H$q4 zD-{(<%%I#9ya|CJ2XBH_b>SLcju(UBb(KU#Aq%8tfGHazm$d(oD#*LfYn{nn-5!Hs zA^yl$8MdL+laq~YyS(srdyVD~R@;~mUeb5~1DK~CwA^jZr7Ix>gJYBBwVkrbHMQq8 zuNJa~gI+t9j>VZxXhUYS6plFtVo7`*!vp46+Ek`5O~R9QJn{RF|L22}Ho}w1*PVTj z)2HzxHTaUAVG(>g3@mR|>%DJsk^O#Oor$zO5P|iMYUUB^b4n=#Wx^oInxCX~>$qlY zjJyXXF9F7!1sMLQgJh&uPve&rngwDT=1iAfmBNfD4E?s^jJR*{)dhN8qHT|ph00c` z7Oo?)B(>wFT=9=WU?4<7EQ2u*ntw0ZL7p9*-vPbNi#up4A>4B9E7ke( zZXC4ikQe)5yf0)5LaqO&eVViHwEp`pUOtU61`wV$k7ri}dD_~gBy%6+bNn$Xi=(;B zG0rW-9pt&u86A@VTqAK484d_njW&QrxdUO&fmYB2cz?@-%aW;! z%KAQOJ&gvV#t#+99feLu!_DaUAG^=Jl9kI_PbQt3fku}r=FZ-3vk{(1%hA-Lp#im^ zefi1E<=a*ETdav&eq3xV$|f`o3D&R1KTaR6@&1{=b;KI><=O&em+*v8w@Z*Iuiz5} zt_!1PYe*C{U>6lS4mZkkn!)kmNbz9Q=t@QWZD=+|+D%^C&EKrL#?Ce{+A|8%2zY~I z5mJl!Fp~6(n59|2AzG}?;agpmJDlBFNR7iRM@lT^D0+?1j>Y=#?DL+Sahtzduz6jB zvxeMDdtZ6wAxBEL%t_)&-A$c@unYnJL6!KlKL*wShIoLSE@v)VmztRUUHaCgdS^9a zC7G!>V%lJIIW`4zzjmFk`opW%VhlS>4I9;jw*yQwAvkmeY{KQV9tNkR@CXpq9dC%T z$z&`0B@-u><;EnrbkG-;>^Kom*L?Z|xfzsO8JXfD9L!bML97Ti88mBzLhNAflKha` zhVVDzb3dBy$891{94Eut|343Fe-RyW+1A#qVLaG$3cW4Iausnv=W@Eg`VFNdCh5mm z85r4dtdiLTuRFem0ZElXev)P|Ux}oaWgnUPK}4RQFaRRH?Cdt2$wNL{59(uO5N+{` zXR^%yM~zuO^o^TZaue+Aofkub`h6O;vt?VIIiz33#Zx|=c6mcR-m>;zPGCk7jYl*E zAIA_h?R}DFfyXQQ{KqYTc3iP`>S8xkKiIRTH$Gr5MtC0U7kZ>cBLf%*kPJX=cp%?~ z2%Y3lOqxv(^-VV93+CsN7*hZ7C;D5!e5l5ZlATT9Q>(l?u4xcbhBV*q=W1{;WlDtq zd@#!gLCXL@t4_Gy#QO$~wSm&f)hyf{=Fia!VsZRJX_6DHaT9E31rBldXCvn&BzWpx z=!Rx(Tf{j{SM7`1rQiG^8&R1MA2-agDoM!IE;I;$0?PRfrN&8__k+jcLFEID7e}c- z&CnI1#6hqq8^a}_p%((kyl$yfD)<~?oZCeiO?~dO{m(Jg%A|k&BD+uOrZjv8r8UMg zSpDFR$oj^4uiKW0n8QSQg8N^=ry;{2ll%nm| zWo>lCsa^QPntQ}%2>=3Y;0CgRTuf^BZS2PuF{niZ-N2mYRnE{d%P_OL#(q~BOM>?m z!TFBHGDM6RMiUYwpW+9HA9TwO-ia?AScZUnpm3Uad<+}N@Scg}SH0{E6^ec8py0XI zH25hE6k<-xMDJHLdj#&n{BtGFe}WfdDnI3%IO$d9Al2l3}4nf_`5 zD(cbR21$V!!mz|Y7^tO28-WO*&Rvj3pC*FzmHj=X1yVLazF%0l2E9K+qBUDlvI;K4 zN1zPJH%o;)Clwhod~Rjwq+2q#8^1j{OJ9#3yzFWyyEO%z^xc}6MW@Xr%xONi$~klv zLw?(`V2FH6+u}f0U7h=*QuJhkGJ4{v4gfJ!J2;O)CXk`8ldXb`o=@R>h?5iJsY!Ru z0PN6w1QEqT?4X3x2eN?h{NTef)pdC60E>%y-CYHl|tHx)Z>y!$0h zDLvOPVafv@)8UZ3e>b*k*Rw>DcH$_o+xVv?$ojHU-lGN%1Eo=z@)8&PFkyrP~&byE?|;ihE#hmj0&>TVe5x5T`P5hiGwOM$Ec?< zCgWLxh_$eff*V`%JA$kB$5yF&!*aAEoy?PmYP1ty!hZtpzf8f;3h0~D`DT-8vBA3; z&5IFqhbH3DU&VTR7ANI5G@-r&ga9Y5J1^z|rWk?HD>pPTCIHU@KnCT%gqmt`D`nM*|`K1>1|fkf0{BOrO!??``xUiZHYg* zHnP^+eyhy)5ggi21zItx7W*VO@=RUWskR(Q);I->S0G~7=C>u;RqAt4E?J`NoMq-K zg_h}_{w&()mx?px5rRY++fG>q6GGD!=TQ{O&@$uyA?v%}*?#~1lSl}H*fC1XhN7`* z6is69-BMbKtv1!_B31;kl^9ifRa>h@m%T@=Dy`O@U5d7Nt9;Y5+OdX?f!$$tRNJx>Po`qgU0_?J1#B{TU%=)N3?3%9mkW@WMego492(Kuoib5aQmG zsSKJwITzw{Zw&`iGS*8Pw&`A^Qn^P%mNI>1g?(*6A$bdmh}KQ+N=j_r8xfvFm?VR%sCc4Qq?)2tCL3Iic>5adA?+oj`TL*1v4ao4T9ha zW|&~19(}N?6L*h118&AB_$>jAD6Lo$tD8c&t_M6eM;Xky*BEtMxWH{$J+?y{b>;q? ztrt)0niV$$TCR*+T7GuE0iJehnUVf{oGnCi_>H13W3A@!_li7Q6i7QRbpJn?`}g@k zCrNrzE#CZ1+oWyHh5R)IOP$d)e|53Ty3&L0(4;q##1ZAR+?GABUHsT#MoN`tE>Ok; zpg+hdKvv*80=~n$>q6<&Rn^7T4+f{KWqO*2IFEHJ-P_K*cW_R%d*Vn9Y2B{?1ar#= zw6A^cm%X^A_f?y%*TsQ2-1jEovfj%)8=sv89c_x`qw2NP}j7&nrl3$u4*qpGYV$yiK?{{6e^3|Gq~jQX?TKJov&W@ zH^NOhoaY+MRi2Zp+P=UkU*6Os7e`2)C0w2ynEfOhud{5+I?d{Uzw8&|%nZoO% zuN^Mi(EjM{>dB!)@g0qtu~1p4v~sFzIpG690QDn}HFpYd{dp2lmpRk4LC(s{?fYkO z1)L_6(ES)Gv;$H7WtOz_QBisw5J*L;2t@W=rihWm%j(Pr{9I|w@$K{TCWx^Jx_8=ipFR3{P?L+@$Wrhov6XvSzR1TqRo zyvXoA#U_5vP%nzXh!N-?UD1i%;zoC{IBs8DFFT;v@`V>S1%@+3As-2zVpiITvpUNl zS78STMVoxbx5R!uQDD+t=wm%xbWlF_l|Qkioeg{B6_{b%PTL>-TZV)A3%M(cbjbP9 zc{x8Fc-kP{p-C6K%Fk$8NInNS&>{D)`p_+4p;T0=pv>+8P|Ri0sIDdTQK{9*B8XB& z?g>1!!(;>@#X*#;xO{hj3yv1%5zcVylo~Z&mbumY1p~}-ZEeTHjbekW za+7t^fL-YhS@|4Jo?yaVb`8aVWh^w7jlqX?^pw5kr&vvkM;KBT(g55VnAbQdz1{0j zbA=zutYIX|ooHwRfGZ^3WyW;hh@(rk3qN%48DKnKFLr$2MxT@#9LF5OGHC~$Gu;d+ z6a0>k`&%iop*2)HDK%hNcRTRlxF-QhRW>e3H7%^ZOaoa)-lm_Yo+(Omz z>17+KJjm!^uC-?@zx_uV@-{*4OtH#-b1j2*ujs+*bh-X=ut{)Cz(hKrtZ zeLh}al{ciS@!|5K#EIyIO{B|!z@zJy^Exy(PGCYekuyKLz$tx*!s%X`ErR^?=Xi{oon0Css1YnM=fh525 z=(zg1TqCMv3PcrTbESw!&6&tmyZ&S0X~75RcOF_iGD@*=P>9WyzO%9u;Ec8TmR z4E)8_dEWMR*IkoHQCflWNzQhK_2E18iN*iiuJjjj5jOt?IqqEB@zkxqreHtLTj$RO zcz^CPtn_4l`D_OO?L;8J1hjElpKB;LX;khX#klzaWEu+7yW}QPcYk0Jj+0Xu^pC=o z8l=A`rujI)(B!hl>#-iuA0X^U>LX>a8kWam9f-K~a|^Nv$y`qn$KU6JD}rUsgaV-H z2N!^P^36OkA*DrRF&W4v>(oCvmRhFbxuF!1;V79WaY!M8$Hn18Gt?;uP8b~ zvWe8=&2ZXNYFMbs6fiv+VWU}l?UP;J9hnUueWW=`FS3ALZ87W=Ka#Q{QaDrn1%_+l z98@o@*+VHI_99@dV}K#T%-aZsPSF@Xh-EG_qX>HA;NJJf�+jG*XP0<%6Y48dj<4 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

      oFd>yC1~mFI6@(0A9O{MU%87dg4~{Rlghv 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 z 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

      from table fragments + if (!jQuery.support.tbody) { + + // String was a
      #B@rTuo22C-vyw%bsN4xOV_ zKA>cg0iY%cCgiv*JTJmh7yanI)T3au*V1!Y^@TpH-$7wDtV){cS8qmw5q;H7F`Ut! zaqZKe1t4UaotX;<=F{ytjqF_?$WmkOQQ*lQRul`EY2W z$zp>Dztsp0@SM!vBofDblP%&?4U}Ok2S=8s=v}k&D-l)=g$G}VRluXvrVY-^)3uxb ze9f!de@tIkWm@GLY%rNud>OEESi?W^2C+N8ZlIPqD>!4$^C78xazc9Q=lXaWi8-St zdUu@%~aN_xXH)iiW@lmJB_9djmVB4m*$YQL!d z0t*!+DX9vlQ0lP?CVX*JFf{Ih{lW4XyZ1!HB#{7isRCwX>Yh&wiQn*8AcWyK1e0$( zz`uoE_3A#;t2O4C&1AlsN0aF2$p%8q%yC8-;%=Ky`0b6kEoRu?ke?mLS(ZLNfx~Y| zf4DpI{x=Ph|1od>^Y{ljQv;-xbF~=DXIJP;sL9218t4WyN7Ja68AJ*;ma@0S`!l7h z-4^bJkz=!~r>R03B4VUdYA^){z6r8qzV&{g?N4{P;P59#;RfqgYP^zM!heGO2V+c! z>sS{_4Cjbz`Koz{EjTywbd$;II`B0)jgO`A!V-G#9krW@=P1^AZH#x`tzJW+@^mQl z8Sza@QwiNMWvy4|R>~r?86Lhzpx4`m+AjlNUg?A7*JIC%?#Vd9O9cH+D{m6=OGkrjI8NVDj7>uPtLJL+Z-kw|Gu9N2>u_QH` zwzIaKDJAmIw?WU#a$kuKlVX~n5wWtgqA@|aMvv_^svnC@luAo}$IE4FPe(Qg1*PT9 z-ymiNmK4nqe;9_JNj1a9+CJ32s=G6Wvr&y4G8Zkv{EaL=*ZfkYvXfzFd9I`%r<|?_ zkIwAN(!PPh0LY3YB5O%+(zkUz*d>hE7Nz|oG7@c2_}iCoY;hJkMaEcCbl+H%P8&@| zCiQgHBCw$xdR#7KmAH-VB8iDT?;ud2hIQ0SZ%eJTd$da-!uUAzqs2fy&eiSIv)*aJ z#W+Ti{z}AC-unzh)m4>Y?4|N-GCi&`8s1ejFDtq#sVL)WGDU9Q?_o*B|IA1K2e~dd z5^~mt<0tHbRq+#J4^CqpI!E?2b!8o@8k{z{E%AqPn@Br|L$^*97g!{ts~s6W-z6~| z?WLI<%t489x->}!YCgzIAg z1SgdgX{+uKp)G2py@-D8s1$lTp+Qa4WqIdh$1An7G{j<0@C$L%xv!5Ne-LAwVlH`i zIXkoP0H5%_Bs>Q0x%kL%E0iqRU__K!E0~QMKbsSh^FeB$EmCSL5wLyV_w3+=LG$)HI z89d6+*m>51Kr$V!?;7l^Yq^xTy^rdO>=kd!3wseqHtt?1JvY*7^fRzRK$+o>g7z8Z z%MQ_~WlsO7$yyF=#5Q2OSx8I%v`tsg*UX8tkWb@lFCsJ*73d*($-v+V!itLFZw@b! zg^y=Y#i6B8*1tA$L_<@P0Wf}I6!ng-=7ZMQmjIs+nW^$)fq}^IPvk;mQ3*nr~zu^RX@2RVHTHXTCN*&%PG(|}ue z?=L;Z`!S^rJ9oKR^*A~YdG>i`=KG~;!-}BAS~nlnu*DYdVTq$`1Y&_wkyi0>@@m>~ zLzO`YczjB7q}w%fKyavY^hZ!Us7D7l_+p_UkFsGHk7J~4a{uzpYid4no+1EX(R(PL zpD%s4H@rx2TLzrdgJLvQO%Rxi!K&+kK2P(V6$MRI*ligP5cX`2FiTQeE0M2bvX-f-^`T8x9niW3t?H^Ef8&p-`S&)nOI|)Q1CKnczX9$6 zF+qct>EtvQ-CIGi=_Z~Cis}>55U*eC4~VkN_lWB{CgiddNQ2FX(5YamR{$Mm48bp{ z!}PP!2vk}YV6zMgCfp(wo&t(wnVBtCatj)iy!50l{;<}VCrX@F%q-4%vq{ySHnrXO zuzM0X`>?4$^sv(g_n9G5mH{uBR=qG_BH7`m$5Ce4hztbUu@?Pk;opo#ytgr6wX$O$ zJiVwo7k&BRbCeA5_3AjAM~x?TI7sjw*&%|hk@N+a7Qd=+fng}8NI!1Q$rGpXb+dhP za*RQ4rDQ%t{u|=Xn3wu14#nN|%uV(uYku(5frs$-#EsB*U9ptcne3(lwS%9Zn_ovz z$ZQW124Q3MR`)tDquJhn`suecP%l5LFJ`=sEDn&0%K!BfYftzsq&qce?X=hV>ft|y zsmO);f5tz^9sfqs<-)9$Ubu11CQgpsJ0HdoT)m;MhqTBk*B4K>C&uqWBw68ol@S8`@_-;P$yg&a< zi$z)hH;+`=(B-FCd$=QLYY%T~Adgk>M}xY6R1y8)_@bHi>+Vb?2GP)j@${4_! zY4;Oe?78~qnuJ9p{^dpN%Ki%0cvbhOy$|j9E*dE`Ptk@>kI2T&>y1?+AnlqK`4r3-rA*l;jY67vVdppOc5&nZN zLbF~zz*_zNTm&1(a;?^$;jB0JQK%k6dM$rJkMZHQeGU<>$ftpUv=XS4@9#z%5eg?t z?ze&w3OZxuK3>CZ~r>ED({yvoHgYfX$I@JH~k*g2wvi)J=U^KmgKdMAaUhSKZ$;!!j zi8jBA)cI+WN8TV-aMRG#fqjg!N80X(G?{$j`9IiPl_k54A>Rga_mQ(uD@IS(81uq09Ny7w;AG=NNb$iV(vgyX%^QOMx!4+CUBetOi2VUY68ZeJ>}~47c71~ea-wpxv5U<*Va?+ zm+A)qkbW&wX$f?h2#UhvDYo^Kk4q%h8IH1iUYrI|AWDgC2albMN9(cSChLCp%F;6Z zCH2WV^7SF3r3B(fD@Bx3aqPEls!6Y9w>D!j&h;RTF`(QkbFqIA+ za;k7s=1rrmkIiR57h!vd$f4$ELh+7?jgrf0ABIQ&_NXHZ@KhJ(1cPO&oH7x*+n4Kd z{p!xTt@S0rBy^>?<%#?OtV z=&7)s%h1&9fhXvR2i2D00lLP4h7_EP6S{iM3+*NNsN+7 zGBi!;+At=BeVORTrpFByA#Tt_d`$Lw6Z1x!Lbj5taiEu4sH-95e;P>f= zzRTI;RnUYBc4k?69Dbcrc%z&OLnd(rKNpv`qC4qBAwk5KEqMfbZqIYfyRR%U{>;T( zkh_V%+(%BRGDRGAIZ~$^g{U{_*W^r2XshHu^wq2JL%-0Z9&$G3wf@0DJ08kyi*}SXGsVyvamF|T zFAChbtuWW1q<;?#h+mW_QJP#x$td`w=USRnujKiGL_lhy_LYK=;|t9c@ryC*1;I=u zi>-tUL0!xPDa0K@^==@3Z5OMA1QE4>TO)@SNj5EE&jMh8dfPUm1PVtGe6^qH(i825 zHV9I(tb$PGHQ}jt`QPcR7Jp&8FmwmjJ=L03-@X2k#y)#Np;@DIOgnTaO5J#eJGE~! zC==D(7_er+U-whcf9^bERog^`KgJ7{(-s*-;5fA@F(mr2aPI6Kv-ms|_&H5Wl7ndt zwt>4j2WglI@d<_Kf5YhjfC!bZ8W>R|=5O#oR!GrlrFaxHd6G01aFrMcp#S@0cnPCP zj*_x=kQbjb>@(Y0414R(`jrjyO68IJhqKfTguXoI$o}ngjimltO27z6OXairA0MWL z0?re+pRyQ_Lmf)yz3%b@EybN*GP;8ff@iMxq+{-|q~9BSo`gxh&U%!Q&Ne8xN%hzn z740o^x<;S2eC+*Cl#+i&Zr~niiQ++G5UQ}_%43Aenc)1F+WnWN8roba&YKnw(^Da2(YLveC}tTjW? zDRY)<2e-<-f8V_q;D2P_m^~7I{R_9G?Sh!k_akQ)(4Pq9pyO#J=H!`rNh~Wb@6mmg zZVj!CH@oxe)sjh!aA;G&{5L}pzE-B)M4MED)KglhaOx2d2;`3@{1J4mA3)3-{^2WP zOSZ~1YVZ{~sU63$d`C^U=jrmYB8gS)+S5v#pW{8%6aWmz z{;LR%?)0P@$4*)Wqtbd!^axtBiZ+L!2f2|}C4cLu^weYZytn!}nsHiKc<%lWYcjum z(jW)ML97uzcKhei#}(B5e-_uAfgHNa;(OAj=ZJS~(kE%}-ASjz$aTP~Q;8~;)*V8O zKQ-5uS2qFHU8L<0FOCpdwbb3B0Bx#m(U?MTX(NQFrq{mGpZ+a5U39J>&wb7$^@o9D%!H3x0U>p*q)_(0d zN0pFuLILs_89b3KkN<@EX~F#4Ir%YNY|>1|?^*H83OG6MPHxh0K&OsXQ)eVnk9YC^ zD;V()a$?B)E(LQdWj!o~&6JweE@zG$om_W{dfq=1LY$?}WexPm`z~OB4S=mxuA zZJw=)%}v!AxA19CAg1h!sLucPu6$g-!#OLR%X*uMo}D96>Tce7yYpqRJA6yuTV~N9 zU{K3`>W1@j{)-N2+KVtm$vP`talx6#@dXM0J|gBJK6TR8EP{6=#%1Wq<9?SQcUb<} z2K+O^(!6Yu@WM{YtuDAwuN7LRV+2KhX6Yv(r!Jsex}ZJ-OIeL;j$KMM?^sAZWCTrR z6qmx3Rl>G$AxT$`2zmJZJc%9-fb^-`8Rr0TG6_>!{k7GEC*DdumaTjb2GJ{Pb*v-k zz$gNWMvvFLE|ar~M-;qM(zaM@D(qo7xf%FU-YFO#$O_5ly#l|(Vpd$1+K*$oid*?)u4E5 z!oUgSEeDZ~YJ}`)N_8V4j(8a#duBw?_!mmLWHlW@1`9nU`6#wXr0jfZS{nR!xy_#G zOZh1_`-214u6ooVn{Gihk9%0DddaVN#6!>3)5-3ZEC<$so;H&Als4eKR4{2u0Qd#P64iE870J$%nWMTCxtUf&(sKMJg1ylvpAGM7>L8L>7iH^ADE! zDP}cjkWDekX}|TA6NYy?eb4;o4)g7z$}6F z{U_@tFHz|cn(x*Pf|%q7$Kr+Bdd1N)R&l89=NP7O2|9nz>)h_+JqD*=;rFjNis1!v zw?p(m2@I<73gUb!eSY}t4)1@h3P#Ggk9*>0vg?pn0kDGT7T9PgSgkaD>i~Fk;{b~A zO{a6ETj!u{t}zbxZmu+TE-DlVBWxu&cZn(|DbXp4!70MEWuz($k=PX`ZRL)z1RQ;O z;#Ys4W&eydIFz}e#LzGACnF^z_VV)`%z*bu{x9PhRQC^mD}_KvJy#)CxlN|RqLi5{ zYFESyi~n|^kNj}|_wvE@JCYOp%1YT)-K;3V4OHPCoddp#C7Gt~9+0kQfVRFR#2`ez zO5(omk6py80+RQpQ*1X7{`LtEu9AN{KDSl8uMVn{yq5!~eQ2!E&5_XLjq@++lNnB6 z_qOm!t(swFF>;|AdM7(hABKTGcy(uA!~6V_{E=h(qYD&K)Ybo{~_w8^%mUYm~Y{bL5my<0V_dq(ftKxdcn4?!6K#@c)|pE8$|^1bMxyUIB~rJFYy!1D(cjI+%R>LM1WtUhx{pBm63|qmq-ZL{QYC&;1$A*WRvB zu)U@xTVD*sVnSP0)LByN#RLZ=9LNyP@og$OrxB_^WN0+{Rac492qoNmaZ19-stbTX zw&enyw}N`whkf(ERk=mj>Kvw^H91Z7_}}xKPJGio6lp8Hg<_=-z399UoVhJ3t}(8v zGL^W`Kppq~1pu2U^Tgm&-GeU~BGN`I^IqQiA`&fVsonJGVjOIC$i}K>WJ; z2*R^Iq$9MP3&O)tz$djVYIJmGL|{`5Rzr;5;-iq>V`V~Nv@p$Wf|4vYJKBLSg0(3k z|1TQTKP#tb3;+xTT8-&((9R~RgDRY3;Y52O6dJoH13b@d;@WAgr2%LRyRJ5w`B&an z!hPd9hV~*V6#Sy%{Jymgt?9FSb|DZBP_IFfgrEVl5c5w~Z&WOoD-*Z|nY)hroD$bl zuLq9dM&>i3Og=Q((+7Vv8|Gtcj_C8?;(g`5?iasw?s~u?^dBb3o{p~d@lK!Bk!){`_*Wpww7p$1^~1bYFo#Q!&tZ3(I~l4jZry3{-WOd z)IZ_7Em?Fri-6=@BdX%(U1C-=QYP}uT(va5@qO`a)<^M5;eQ$BPPlWM3kH)pVp7tm zq^oY1{xnUrAp0EmF*za@8(wh!Devuav@p9!v$YfTG&?_zAAcv`HF5r9y=UQF)uET{ zpkwnsrPt7?62lEo_$+ca0&ykM=c|wvI1&_qEiZ*-S^%#X!wLDGNS1*v*9nECrXp67t81Ys%F zw)%)r{i!92h2n*FcDSCIGEWqXFOcfj^YN$ifkR=5lA#g|Jce#A!be@)pN-<0UVX|h-J{*9mal&!aWbP| z_0ke?-d_^Y9ZM&QK1;SGLKv3vm>K>0cYDU>3;)&Bu=AqtNjN0fVX?DX2S2~V2QZT) z6onl~Wz-Lc{B$>E7c}g* zJ$e_fqPvvGovCq%Ne7w~ zN2gs;H<65PsG%mKtd-5;(?y=Dgha>}McR`E$PN$M^Nz&#*3wl?IurRvP#=}*3eD=B zmlPcLM?}3e>6<{6cInRg|IziYy0qO1r zK}iKc=?+N+1!)vSB^40ZZ@$m*yvGyoZ~yME9s7LG?|q%ubzb*P(Znz%X@ME&Zel_U zjVT;oD#1$|H$n=}fH&5exBa}3qukBTv$W?4)dIB7{- z7kMnun|2zK1U*13%i&*f;SGcO~Zj1yS*Q8GAZ~e^qCI9?h zvL|D&$-}bDdL~b5mJtllk`Z>u{oC9>Cn4k6aePok8)ZvE&jqOTy~FCk|1)jVFN~{L zL!Gs80WYVg5ZRCJ+(jlg32gc;R6xELmHY8@h)=jD*)-F2&kWw}HIRduV-f&Xgz(Q1 zeshZmF!i?HHQVh;(9g}r|Cq%ydKdAKmZ|%;`8VfyBN?O{i^u^VkZDPnT4SrGrxWUrCK z!(S8kZ%ITO@Xo1O4!Bm2M2*Uk1V{bG!v)!bMK*B1DvcyMbBo~gIDYw(|jCaLibOZ=Y@?IsHkQT*H z%enL_Il1P3O;>5so{|&-#n-*zvSmmh`H{vfuYbxL(!)R)ReJ! z645bW7>K+~#0!a>oaG8)8|Jy+_LH-gvt)cuBjh|;)bUH1NW?dC=u|N?$XiU)vecw> zMD@<^9$pgWfUGz>Zr68gaW@cBOz-ZqizImOCH>3m92OIi>o1C>EG)(pueaZ!0A2l` z8rndX%*6Ye>SxBk`Ru9_907|6XTfm$(NjvW4yXJzyKuwctLmSMUFiZWP|3Waz5}?I zbo5wB6-iI|ToAHa+u7yKWkS)UH&Q&VvYE!zCvcR6g=Th^J$htI_&6jpPIUCC{ZN{D zTQM>cA#C_DdSulBtd`}=+h=QBeUf+_FgszaRmLjx+R?DK1EPLTZTuBKs*gto+i z>ldH3Bez9{mx?yucLu-yk)yuulYCt8DeJ)N1$!!2TB zrf1uIqB1<|xcUC)nZ(o;N%``$i7y#3PU32=)f!m{7@kM#2{Xh;sCY!{4!HoPSvop9 zXyMslgUEGrV5c`xQP?NPXO--(V_+Y0^Ltgb1Y20mJr-?`@A0xg*3f*a_&yc!ilFHs ze`~Ie1&=`cXB$2_HB>;UBXE;JCD9{PyUQ~_>7@Di~=X6G(6Z5|ad7(-Rg}>`^u1bMtOw4^PCY zTmUg)Xg#$KS}Z1QT!leG07lI6ZlatD7Av7Y#$>TizS!BVN~)0Jeu-fik9}&!9H-VE zLb{y@&W)VPkoCghWFrU{`Ea9Zt$KO0|M;D} zQVZJIc}!7-Xs~PKot%B*PVcoz)R@m!h9NdR>IN4(Kri#A2eHJ#={+)=jFd>&v=$idQEt>xua@GTEevjkqd&^*+t)1o1i95HHDsyvU zD$m+zYCPqcZl=JvA;^gp@%J`9vu?wsABB!psSkllZ>eG+p5Rc6nk9*z`K%w6UxS(O z*!@28ub;10%u7eOh|H}y!_&UIpy_vHTQ>_lZ>Qf7@IByWd7_LkR<$nL)zy>{GFmy~ zJjxdeH{oQWI%@Ph`p9-aLy0y@>RM@wUG)m1YOsxmAy3=T*WNs?T;`K^U-Ycg+B{N@ zXMWkC4#E9RK;7`Kg$W61dC`FC;Z>3Zy;$fAQ<* zv`u2cswOTdD44rQL|+yxt2FU3jg1OmF(?qODGzsLMsqV5Z?Y_?(=ZR?^8xk0xOuUI z*`wWe>;*_}n}Afn4WbrJwq2Ut>Bj75D)Eu;RG(tT42Xc{k4w?k!ETHMm@gq`vYTI- zkpE1T!ENZ3Kfi~5uh2HHcvKr0y*2F@G8Ma>v!< zi{z(c#Op2-;gK#&d3(LOx2Xq6(|h`FC!>-{Q||FlzZ7e6Bc+ zJU(0Kiy-x*O4Rpdbru3O62Cn5*gnZt&ovFQGA0S4Wa}JEf^&=2s^WYT$1?3?yANZf zo=g?<>e%?>fYGoS+Sex6gtdV;HSvS)mh~z@U9r*oK8tj{*&LoO!_$71;m5|mRNBtv z@_y#(m^dx`I@!RNC4NP;gQw|^M7pbRh?5^bnmbF=hQVap%KB(Ko2jHeFU2F^IgkgL z9vs?sGr%=GZ%XoPQ%%0Mcm}WMULJQ0JeEu%A}rh_*b~2--c~P0Z73NvtVK=mU=27+ zgWAixuDJ6*9GkKAx-*yZd%VEh4fz?h#*Y2t&xVcq^6FBCdd=x#L_P74Ew_FUMM(e@ ze*Er`#@X4!@X3+%YX<5pAYVb9*F{eXp+y^vKX{UR7?rF~38rD$j_0e6`zg6M8xmG3*B z()@f!On%f7)1%0_EiR??^ol5RvHqJv3O)J7=+MAs(u+rgG*hzdM!IT3jRRfCK|TVC zB^a!WD$61-Y~dAa2tI_@v8# zJojU9z6q4aQA6{>PuG6r&%ZB49|nkaWlr<5VK&1x%ERN`3q?2SpT9~4g|IRogljA` zhHedFB_o`Bv118}OSj+N`$r}GIR^#sJzAjmX)c$?%L*K67PHN3YCZ}ep&;Mlm;nd^ zsU^~)BsQyv3V=Y$e59C9G&)6J9hS@PG|c+Q=8?{Q+pnKMx|qg^TNl!LQRolTx@%<^ z8+UT2#P)|y;jjB!XX|j!xwFW2uDio6r9?eU6Y^ArqhD=qu`tpht31XJk>W$uQR5+Y zHaT~;+neeFULUPby{4~{mdlQMYMJgF@*SZGf?+3JoVajJ4?fdJEU?bxPSzZlqHQQq zT#}{vTp+7^QQ@In1F=9n0e?kIjcP6=mJ{fva(ms!Lvy!mfA$a3Z3wVDs-EfHoXv4> zOoAgToFz7l9!Ul(u?oJ)ZD|j$qQ1c5G{kujTiKRWHCK~(RBi4WSsc9 z?15THfvRDoH}~C7VexF`Q=(8!wU->NJ%TP2S;#rsFd}6VNAtYqVyqdtwiJI3ODL zUL^%;On$*-fNKfS_(n7I!NIkFiNm4}g65Rg&K_rfGUimOnz5Z`^>|py6#8!$j@jYGdi0~qHU~U z{C;h@0%A~@64Kc5f;{GXugKzktKZoZvMA=KCps?MHZ5T}zf9xjWmsiq7;Zyo&Fa@B zq>lfVjP!MgT`f!Mll5F*H~bpvJ+E+5BdTmfCxeKHN?U@7Oz8StPq2k z%v3JuITQsXQnUD@{ci14)jW^WGI}di009N!i9a{K@)0dR{T!lmM4w=6SzF#x5dcz#6Qn>Azf0;#z9t=@-7B%l1 zRt8Qz@OrFGD$B^t0F6dd6uPKnV3_>y5X8}Z=`=8Q-F=ZQk~pqMU1)F}KwVxnTSj%h zE-SEs-IWLb=rf4UIQD}`4>M8F+nR`7NZe(%1i$O`P({Rkgr4=#H|Fp@MH*#n_p$=y|BOfwX~Q=YSl)NBt{Ka3AgG@F`~j8w-Tc#xP>x(Xxl=kR4XUtVMBvOIYfN4 z-x5>x57`xyp@iq=vS``${`<8j`hD>~KSG|Ku~ zF!^n_=Xr0>txx)>ftFuge`Zeu8GtZ`vp}+=j9(7XRSLmN06cf7o#L9AO)s#`S~tLmVRAUgSJnqBMxYQa2L(ML?u|D=685|30 zrWR9*K~mW>JK0)*c#2dF-hxv&Z>5x7HRc+PZb|+n6w;Bi1a0#nuGSKN$jkT6EozOQ zwINdSm^C;`$2y7kQ|$%q5CdA}+4EP@)%4%ouOGb0%y%4#Kdh)sP5wX)g#p~BKmySc z>V}%80AgVYCo>XVqt`o>K-@l$98MD83&h9z@FW1|Leggmne-dC#`7kLJlapzbc}{& z3PGAie08fO3a-)PVP|T=4GWp+p#7|Xg|ejMGaE*wiwpJ}LQwqUv4vkd9|}y)ByMQ+ zX|i^LKVn=E3HZ9^0j0F**U9G8fnQT7ljBBGuqRso+YkPS+@&%AwBu@Mq##Jw`fS2F z)1UhTl;1$!pX&`8S?@mH{?r6lJg6qac$oqDfZBflJU#^vpHhfeEfrXvQaCIj`qLVV zo1)f;+b?kpnFhM=-BUK{zJr+5gs);XakwMo{AGjebPm2~x@MPu1G0ITZ}nX5N<+)j z{MLdJ0DwVvt>qQtsCV~>~@-aP-c4@%Wz7l^WN!4KiK7r@)p9hrkX*w z+3y4Z`7w|LEiL9v%wn>D=FEL=wYx`n1c{(zyc9qhF>PuEv_)z%^iY#jbSgjnW!^Tg zKAk_2;oB|biHEZok8jI;_(AU}MM&&NQB`-7#6JgTPn~!C@ZEM4Ad?{`DK6%{`xd`+ zeYI}KX*RLi=LM@VBx)aLTjHkI4gUl`Bk~UPsK!6YH2K6cR{8A5MGOkSjdaF`Q32n_ zktW!vMx++l?(#8Ga?(xaEdS}er@bURVp%9<1uAfB3s_MaQ;9xOexq%P^J!mQhwh_(~%4jD}fq+34H5=!+QvC~I;V#te+MvK#2zOin3$yx~eri=jLUyq-*nCgfoj z7X}Jw*7pNqbqC>zl4;2+&r%2wF#i`kKD4#$R&prxiw?~fJm&t*Wy)YzalXHDRyrZ6 z>;3xtvoA>}d?=DsU49Un5EG^1+s>Woo|WwF(?v+u+_)F~`BJgd`&aWv5!lvO;N3yU z4vWeOv$DrupNT4=&^ivnJ9+ey|6`Qo-?-e!0|0PH$MpSz5FO&Fk6ea7$B=2do~(YA z&434Q^*HXu3dg-g0Qc}<8dIdPvzQ(5ArocGepwdy!2@b8&K)C%M3H?3_uX6_S6_=W zE=c);!mZc!y-+m^qyvy_Jix__pcO>I9vu^Mw3h1 zJ#>G?Z1u;;uvq`c^Gf`t>(YlMUXZ`Rq5pfi^b981gpWGYu zyyp7$)S^6gp9PvhLVzkqEIvFIPE2#$(2dR{A*uZkqvGMGQ7paPKUOhW{9xsq07`d7 zk-JuJi?W6rvF>z5i5eLs$GdA~s!;;$5+J*MvGeC!{gM4D%GmQ8n~Jt4Z`S=$V^%Ff z17^%imPMcj9VJ8n%=ioaA%=-(N-K&|KG+2+Z<11NOg&IVy$y#4vN^kGjjIum{RPHR&7epHjb zm*OW}B*ZJ@;ighd!=~RdQYTaT5Db$~hRj|&3n9wsx8Pbut@i{!o81akroQ!Ntw}!X zO0dQLWpE7_Eife&Z?@U_PwqDUiJVV5fN%$6`d)%q8kKrrUFjX)YHFaT=-2!SZCJfK z{<*prBD|Vl{iT3+#I=tS)oKOIwLz4mmeC3uM9ya+h%}<5`V0%|Gu@nCTTV7wY2{66?ai@7XV<38q%Wt zP4Ec;OirH-$LF(2d_!ibNyBNy&f%r{mI?U72@Mx|d*&OQq)MrslPy!OtN2Zr_lC_? zl>cgjIXF@gDNL;CK|(RQtfS@8*OLYe_5Gt3dHZ(h)}<}Sw&j^#h#of2yM|?_y~!~z zTJPrU?AhDMM^z6VtZ`(XcD()5qujdB`_8vkxOo1qi(Z)~pGbL7901(>IGv6lLn=N2 z(UWu9fW1}hgcg6}0Y9-T8G+8=-*}NY6nA2cSV3Z4uH2_B#xk!1uep5`L4vaQY%~#G z5C!;76T3_{CQyvlmZL%K<)<9cG=%HyCXewJXsi`O6-3T)*hsg-uFj9IF|T9pt1OvT z#Xi|jb@AZxH|Fd$mH zM_l#P7?-q(WV6?cx`ThqUZrkoB+Lk=TEi1 zrcD3|)!l|vIka6(up$e)d$4{dg1-IRvjL#9vT&iO`qkZM zX}QB#bEiVW9@2lXs1^F)y3|1f7uO z$Gh~?s7CNZPreZk5m`Ds0HO~>od-ihnkcCjhdJ@-l71+~W>fw`8Y|Qc_4iqv5UchL zEa-fWWSI#Yjo^7MedP8|j>AD*sHl@sK_GCX6o@xvYZnJ{MBSrj)tIb~a9fEbn>gCK zuBq!Z@Z4yTVWU58b$j-ppmo%M-flvjle}=3%_hB3n7qAW(`m|Be+V>70#v|f$m2>c zimh+31p_sarW?Zvxvj=hc@U_;LzqxgdY@e!AjsqgZNH|PsA-1gUKYhCx{c0cy7V1B zp2*c5CPo&yD0R_QGZ{2~@^EcM=vkWkqd)uMqQox!L32(;>X7phwTj9M?9Px@rm}Ei z=`Dgc;7YFc`jqZR$%<**V&y^5t<{HS$kdgeI1}V}!6Nqe7^#X+4eEfLj2IsZhf<|~ z)x@+>q*OUau+YvrbO`%7Rr2X(56($%kueqs>Ab4UK#E`bRZGHkvJ=S^(?+22>5AXq zs)_H+{9&kL%Qd*LsD1oIOgYq?&pxsNTlwBcXqoput6(Dg(1t-j*vdt|19ulOtJi_~ zV}@5|bWP%4*6gDLi2Y3Vjb!z49*I(I4RMcf1nyR46b$4& zo(F>yaLifCgPfY0bfzoIH0OegcO({t&t=iH%3t(9;@q@NSwq~ zo~Z)$$m&>Ddjfq~#FHTsYkaQlVxd5*Y3HRQg^;#4cPgOGl$y@utnNLfT4w3p#RK;4 zR^`zsxo}~dX4WbFAwoW(0$sLLehn(H)o?!$)=}Mt^L_A6ia0O#QNqQX}JUaliTabCm$S z5GK1e<95pPzew?^MYYmaG* zw6$8Ob@XI7QPD6k#=q2}W+6U)U*Vu%Mvm}!?9J8Gtjfc90(#f6r7p9fOa>X@&E$H? zHlvNk)?UoS%Z;DUB_4AoP$D}0P|D2ushun{P z9C99JGnxE!%}K=dXupAZ(_s}^11>wXK@AUa4?_!pbWrD zHyEBGsg@|BAnvSp?o7H`j$bQ6Um;RBNmzPMjnBz%Jf!kzfb55mNUu+dr`KzzJ52($ zyLl?2aiRTHyu)s4pexOahQ#US0KFWmNQuis`SrSRV(!;ZYbu4lH-6TM3XS`6x;EKL z{85&@w9~PC7~P%}Z^s$Q1)zh7iT4@9NII5;{5BD95TkALZY13r)csRP5hc1`Zx6M+aG zG5^4q<9-6aOGow#3v}@emb)ZJ;+`}vRA1n|XX4b!Wx_lxqUCtkFm7@exs7qItfHsU z?a|3#lDv%QqA6ixKdvhQQivf5yaTwo2obSfcM{Sz*D?NnUn8HCO#e&>NXS9(>ezOX zMHs|K=jM-e{Orq3z!At*{n6WB%;|7w2lAu4m&Wv=?zO<&>c%N^$d{eDbX9iq_?raza{6YpKv z<=mjhlw=$iIySFgg_4aOpq#e@ayVD}UZ6|?Zw8aVI?3)=aD16GvCuyE?|1~|970`8 zg*s}M+4F7(u5vm|CYIj4_GbZa-!$D1&QPvq)@*;F-*#!_p2QTFX^6dPPCuqd{CfCZ zDszTUr?sBCXx{a)P*T*Zu=`qP53a9Ty0QDU?BZ+&{agR7&H4|yQ$_&!kdM)OCQ*&D zB>t5)?{9vl!%DJ#)r?8jd>+K@xwu&vv*>%tG@+8Z&QHwiX2KUFy;bT8zMTjLJ*fy> zNqXqR8dRQ}B9hkB&8wT&>zBAKMy?6UkHTYb(>A7B<1m!sV19a6OGs5+w|%VJ8D7<@ zy*7?{;imQXJD@Sm_jVV2Ztpt$wRK#RcX7_tPl@~&w{OzR7=l|jhY_;R!{JIVw|{QW zJ~~gSZ(SY^MuJ||Aq1lxldq_I)Jdie3B`!jgemc9SzT4&>?)&abQkItTKqPO7y)K- zXLDUVbwa?7hv-g7;!D0a^{Jtq7g~Zo9c0O!f|M8G1JQByX|^3M`SXIUNqlWxWe>G?d4yqyV_|R@S#Byr@~eJe z5{WB3b|cWGPb6(X?@FJ;Ft!K3C+~OjhmSi1>ITTrDJd^uNjxD-5E*LzDT~%%y7QnR zev%pj(*DdkFkBkr0n za&-ddwbII1%nKtd5i8_#YySpi5S{7f4%d^+Au0Hlg9?g-oy({UnMZ)$F zF+%>l+uR7+InfpJ`3bq&9226og;Jj*?mlx<3{}hj&3gSq&J!1y+F>y^(j%p-NcSN| z|2xakYRDV7`wsY3bI0|RcOg-@b{E|VAW4y;a~xgBgr(6-ppBklk08Des_qURp!7Xe zT-w#8$UuGbPb=8uZ%j_W^NGp31>R+f~dEJx`;uF2uXlvEX)!O{ECTvNfD zn=UFOm9zDK5CAjURvId3Vzf`)BzfMw_I=m7iD9(qC~~wJv$RIs1`?{}Z&G!xnG{NF z26P=hl(P8&NpBH7pi22W2CQ5vNz?7*9*^kWK=HfH4G+iE^rE9LeqqO-L|w&}r25zh zYJ6!teO!4uy?{-n5V7(<*i(3Uq1c)Xv-@h4>W&bQcIBE%n;fIA!&FTIA(!go1N!Rl zE)g^j90B8VSBu9R)7c~*r*r{&CS$gd6wRCBJ87&+Yy<#ucAo|lSNr?3Z%x0x1vR#G zWFr^p1WgowDN3YP7&!lpSN;+32e2i^pX7=x?QfR0i?|9E*WQFHDk{-&vg~ysp5w2D z=63vMqb8fyyN^9moXQlES~<_%|G&K9vW5SUL%+kRoWAkX&l~z!!YyqUdZD)Fnrd>< zrP%QN40H|2*DOQbNr%;aQ?hrz&8{?}@!YbAfeJPx7`ceh@jS_rMiwg@QE^2e zK|Q-eev?2+aU6|j!GvtSn}Prc!D79W;u*)-RT+@cBW!tdiFr*4EZJI9$kp(TM&~fO z%EiZZThXRH-hE4%NGD1T&@%CZ1<2wsQ3&axYJyaY$o@%w5d(vfe@x#_@ z8L-8~*G#B9a~78ML^Tj;p}uyNXR%$XVnRa0@R`f(WSfiV=L3{wA&RZ>aXna2q2015us%mAkZUrZzg>`S;maW|#&QD}(ro z9D+p2WeYEMQ|adpoQ5{#dRGWa(R~d)))`E)z3ww7{aCA<+rGyDr8`(*AjU=-+|2R9lQ5skWZc zPM7_LiH+lkjmT`l9#t<)AurZxuB7p(;+LvY zRxTFQvTyUnML$W9iHZQw-7#A(SD56ZQ9k)Ih4a%qF{QaBOG7H@zM6D3nAgL-&(q{f zJe7vXKmrNXwWL+Y@8$C0SWxj0NVRX{iLJ@RwnP4s#1EH4Oq2D(nbp`si-Cvky^ zCRkJdY|;m4b~mkMzRQ|~XGs#zIvey1pV%NDuN;#Ju24(TyK;#ZxR%%@AhFBS*`xwx zrzQzu+{QIj_&AgLL|x8x$57^^UfR;Sm_e1hzrB7~pRES0y4Do%hC|N9{x(m zNjLGcM=&$DqQ-CAB#*;qTjA@_n{1t~*ivx7k4g8m_P-Cmvb3GJdcL~KNygns-xcxs z;g)UFe;FqEhn&0@fMiG4_~?9B(t225lu&OWW>hhhYb<2j8V(7y=|AFC7R?)M z%mZM{oQ1}@1_v%@Un|@yEcmuKbXok@q&~$4HPgU9R@1;$maiy-!#etxSwTX&ZxgJu17L6)f0(=pnj_bzNs~Jq(ilme%Jaq> zFaaJ)fd~j|Amd2_t$S8dZmL{)UP5t({M1%$&nlYVx=^KMzyWY>o}rTamVn=FH5>gu zpYZI;)OIRP5$c0b(75O64--@pil07_EniEzS(+{Vagvi>)cC6z*=@nF&i(2E&Yt^w zXRWgI&th_3LpR8YAQeR2>NZwz(qF0aHUlvjqc+GGmqwD|7NDJ`*@$vk5h#q+mxE{Z z52^4SRmtWZ?Y<8-xo1s2tLi{|w3gS+hcS9h7o7YOzvy*y&*9({%XOC7?3acWTifZd z?e|+%8qv`EI$9-I-9G82v(sQ4Dj`DO0dE=Q;sJAuzifm#e&xH06R)3agKpJH9dvX&UCe0aYWjK5fg1p1H%u_H$?=6#+`* z^oRl4_`o)kLq)@xuAMnAWhJUJ#UwVJ<(XcS@}80QI{7bB z_Yb+OLtMpbr}G|PUpXyfd_OpV$bqU!5Qp5gs=_~$B)ijCLf?wfLJ7r{SeVBE814@* zD^pef@brz7YNI^9!-k3Yr%4;3rbac5=Vr75PBE%k04RIEJcgbh@}QsM~|@o|trRbs&mCM;Hqq^gRY z<93)G9)Rdd*TQ4(W~PW+7OB{f^y9bp!K^`w-{thDh3756r5(SwH%2R4YjXBxCV!4D zH`sTTSq^Ud8WSFvL(}hQYG%CdvmM6TaCDS&UQa66iwK?OntG&!} zN?Ko>ir+|E3^nW_@me61D?X4iQVy_#XIUaSE44OEpE*t}=g~kNIlokLw`~|_CX;RhvIGGTq4KdCHADUZ1>%edhM2rI$=f4RczJgGeyVCfwae~`?KFVUHIb{ zNABO18S0ox(~Pjx9MS2d2vX_h9rQh;jDT&6`JcxNgj=osI_MGqR+r|sR1M} zzcTW@arb`Zxa^D#`yyL8ut0a>iaa9AjaZ4cDUzYD?WT%nmwv6{TbfnoghI;d61sul zUn-*ehpw{Yguf}TLuu$(uOB;wKD;9v7TKUUdge|CKl{(7!#2*`{g2N-ZNo5TPj;WUrgf`I)K4dWW4fgaAoW_OY->5;dHG8}@*R0Y7B?z=L%5Nm;FQ zU#g@isAjx2KP_sJ(@P0w|CkVQ+0z6xVJi_$IQ|qz<71N6|9VzY++I73$Hc&2XHE2{ zzM$>n&G5m$nSFT81J3AexIf-zWs$bCKi48Y85msWCtyWFLxoab?8T2WP~qWbi1?)1 zr9Ds0MOn94rNc3#&yJAI2m|@&KDu~GY2u>g{$l5$^Ft-WrD{Un^t?4><>@g`Dc4zsq408PsW5@bm7Ok(BPpGHq6SY5! z#U=Ao-!jjMLnQf;yIhp-cr)Bd7!cxpl*R)C(JS@l{6|1Z9+|Xcn7I#EMR1u|IykPo z60VU=3Vgfx_ARjHJ`q!Q)>OImve+ad$d6z=$7#i?-Px^U-;VOq-9C2+&gc*+Ys#gD zsj|BI$Vc=+L-*vU_bOqCqDbnTTs&O4>={!27*+{lfN!8|ConM+M&=+uy=%p?yY=>o0S1_%$4|2SfWjUP%YDJ|OBUu*h3wD}Uis#C*){!c#`{tvk}dH}^vw5~zSL!YBm zOnyiR(LHE14moH40Wl8uxSrxSq@;w<0s#LgT`~-qPGpo=fmDn4Qgs?o8Q23@$!?03 z1@4@IxWxucung72-YIn;YChu?h1EhxhXrGXTPhHs`Ih3_|vNbH3DH){%PG^xox2T;o*& zNvUgMHPhZpIIcnf5V|zRGiZ5~p;OQUsh`swB6^KMAMsW;q|I;=x|wH^AAS%@nakT< zn^!!|VfKyMiso=IXzMehzDi@t%x2z%)sE4=8llez7izskeGSW~CUdZ;&uBsDU z?CvIKt}4+Ll^WAC*;Ea2wA=kQ&d$FQ*4N0wR1D}oM8;9`TgSz98!(BNo zQQ;mpRo@9f$B<2KC~OMHcqP{vKcG6}MtZap=fkG7RA20T#-{?s|1Hh=$d0%ux07rj zLWt0+&wd`D9q}$?aGyMYZ2h*qx%$4Zm-EJ23sFx|4HeSb{0%&JB^Y;2s`M0!>aEMp zOmL^X1esb>JMs7eP&x`b47EaP=Q<+BtIx0mqoYY@zFFf@CqW1Au`Lg=XH)%y_^IVn z!M8+OkcuZ_fjj1=UPzOM;r`JW1`s$7g#=(AZwVR5V*%EA;gA>-0RBkkb2~=Tc4lIX zOI=gdPeFoarODMK#L(J@9ylJm7SjJSXHx5;Tz9>o;@uIxxlgR+Dei#Q(fc-M(nYu1 z8)xBGsKR*}kX-c73QD-twI-C6v-mhmb30j*1Y3S59iOzI>vAa}e>tKcmS7mt_-&Oi zdQc@x69ONjW*$}Iq=|7Lq6r3%ty(c8*2`7c)0JWP7Z1$1qX^~I?vLKa-|cK);;s88z=?@wYF-C(5A;aqbNS z+Nn=agO;)pn81m^WGaFL-S(lb;P~M|i;V@OcmgpUgg8^5yEDV*Q>u3ALcw=b79?70 z^?ZU{70){JJdNYawzNp90o$G|{ zXvDSB-&Q&D{+Ht6KTMKf4IFZTIOME-j*_(VO#%e&Wzgb~Q?fzpl~nalOLYPYTN1zc zl916-YdZsE)U1T~0vFN*VdBb!ghF|B=DT9l%#w0qL>8u#mSs|CZy;)c3Sw(e$TzaxRll@4h1HxGH-0Q+61v#q z{|dICP~muIT9@R15@cNbD$|SV)~BLU^Az939xEt}2Wgf3Xz>j1Y{<+YclKyx>X1tS zxABJ1LDfg4f0DaY9Em`c={SK&7i0U>@m~Uq_3tCZP4Wtk6`lnpY6!<1l)4Ry6R|Ka z)$^3RUVYb4)3Gw>3H}|FIQG2vWYN)g!rt>4aLG<4&|3m~fr#Y=h*UM*8kcgC{yN}t z*SW(-V0t@f_7rPoI||X6ZK=Et{Y1fVmkJC7tO*i+g)}>%0orA;%mh4441Amjh;`WF0yMRc!`F znSG(9H@+9zd_Ugj7qt+pe=S8Dw+Qy*+1|Xt7JCTY*33pLJ5eVZT#WUOj&Y3iGN^51 z1?1h9R-P@#r#dv8HftIr(TLAOh6XuhD5eUi#9cb@@R0MjROlG){0GkcvGv5BVv|#K zKoWt5nBfaRBfgqsKMJi`%{x&*#A1(+uSWNx5~`v+s@5nM2d!JdAox-EPqIe1!6%Be z24>vj-M>zIHv0bDRoj1GL~oJ}Sj8SoN;hALur97fDmlMC2@0>CGG643XHi|foB``a2hX11J2?kB|_JDn-*U+6L*50}oMA$F`l!Eu=>P=5v|1-W88o>dZEiyK}R`^rJ1wEFDA z$))FZmQBfZz32yHrPHT;xpxr406-jSTwoe%^?NM!N!re#Vc*d-3FL8|J7SIiV&Da3 z&2<_wo&~2{Z6lvSWUW6M6Ss_-rEr_386SC-?YQ_1>`8&v4R&Ioa*GCZRXq!|*-vS{ zBo%cuE{$mKj=)SyS-E7d=usI=vU@OP)OB?px$FAJF?Rwnn#Gg6N36RBJakb8x8$u! zj!haP*c(jWcoOi9BK!($Va6ho3K-p@+ZuWBxBAQWryi_)UFLpU#p&GxZR4!3FB10f5U3dny&O38tr@7~I zshjwlk3sW)PcqspZRF+n#>@2Lx=+OnZjnTuiw5B3wCk;?S;r49%1ON@bi6VBu$@s5 zwNe8F`9L-wGcyV`jm{?BqmWEDB?HqU;Ey5Y^B7&?IZyqc#tVEjk~07q(=a`~BF^wo z`oU#(L4DuNByOKQf=x=;nMT*}r?GGor+2>VjCxlI3vpHIYW>8Cfz2$t1Q3(Ltaw7H zl(P00dnHcsk}m~eW)UJd^W6|0S&opo*o`^`yv1S@AN`kl^*>auDIIr~i`O(LeCQjP zK5iWnK;{6|VGt+V6CO~g#+~J)9^&ZS5K>i5a;qRD2e`NhrA@%~`#SmVnFE+9geqq6 zNGj%`lym)3gSIhQ-Nrx3`3OM}pfbX$^}U@C&%|jAa%`YZ7n}(4?s>Cdn-}~r#e~@Y z$*U!*97iElH^b45PjWu3?bk}KM@H1Fi4>M5vn%AR(rgBl+HvK-PrRI>#yOsSXXa*` zD7_q{n9|;5#jWjm0C1KYP%A(q*dPB)0=T%2*Jv}lajEogNh1SI^w1S}iWJb<7U{ir z00N49XSW7J6-MZiWK0qmZrA*(>LWqg)O1oBh|RZJF1^e16~`6ah)?21&Ti~X5kbJu z{E$dCS_I0srRdH#RHLJ~zu8-*S@(p0v4Bf1RKGW|EaG}&km(8UZB@T{6!yC)I=mVs zSuLSy#r;4G)kYy9$Yl6vQRr{lxhMe!_QfF`0TZz&6BGz9qVKIkw za>LGxmT8EUai$zF2X`xmrZU1|4+zL9{ov6%L#^?0=FWLel)T2;0Htd~qypE1Bek^C ztanRoT0x9lQ%Qc3^HXX@SWwE45vX0WSuwd(xZz=@q7z^0v}wMR9~{Dn$4#F&V@3Ph zf+HUU)2;g&0SyqVTuoJ%1NXXajB|8shew0vB|6;a_QoU-TC?t37h zm|v#L8w*oO91=~@dM56tY>o%{8_oPOA_N<6s`je8H$wX(mgba$8apM5b=UchU6ORX zB_@&_|BX*fIo0eyN~iy@Kn5JDAMR`+ht|+kh2%rRIfclCVsFLM67jwS>gkfcU?OE8 z($Z9iyW3ce&#tkW)l|Q7hfITL#-)hEU7Ah+w(bF5vGH_D5m6HvV(*5{@n*-K29}f5 zcMZS}RWhkfZuLoZg#5;{$e84f>+U^tZ;agOzD{YJN3~3 zDU<7H=8>xP58+}wfT3Wy558q>iJSq6!`@a6=RZ!2r>cQ9) zAA4~xeOvtBQ!ekXw5s&x{RJ)5Ca}Ld29n4gHlP#!m=7TjY@ydfvU9>QimY{*S|OzV zRVi=aEXK0FBeJn)Z!4gkpEQ&Y0&?4s;v{OZjlJSdY$83{d$%~w45F^KHB`@;7!3PR zx^j1XnS<|{8mAv*JSJ`JW%Yb; z-UkHU6>_>x-gUA~^wKl~N^mwOCcB@qP?gP0_6Nk#)tkL)1D7DmA)^u`{b9iHs7zi^%%!GpdMmgL zwH_TZ=q|Zx+_Ml@wcX~y`9#$&S%M=fmC7iZtm+Y?^Xmhv@YQFQhF-CGak8m`Z}z_l zsBR)llV3gXJrDb!PfeQ}o4$WUKExN4N-b8A&wX!rTF9je3WTWsSh=3phu{go)&D48 zSuW_yHG*xKKw$LZm0|32FpT9;C$GE#jWGb_{XhVT&??QlnwD4=vSne$RZbwm=iZlH ze?y<~!f!kEFQ;)n48k&Tqrmmu*G`(Wg-r(01$jmsbcYcHG+Dv1(Z3HAP8YasG^41< z${h8_U+7~E>(q-#oe#bzrRV3pa{n*LLB#(9IWs!*%cOKzW4`}xQ$7ooDuc(-kVFGsgM!y&q0N&GAcn=j=)GD~P=+;xr%sf|qTzoj;l#wU~{sjrj z3M;OtTPSWwyvj2qhPQK+z8l4LTMaF3KrQERIq4$D(>)p7fW&PF0k*BG??%Nx&+Xq? zp>0QGjU_I{%e)B5yfHM17IU2b z9q_B1ykSDGO_2(!E=UvDp65?bnKy$XoKLg{lA*Y9Y_h7szC<w}jba$Hed4t<~zSX*_!NUZp zw(4a(`P0h?=Y;t7;?Of%Rx4I*^el5SJzSE9)SjANmfw?1oE@K;TO1h5p5x-L67{0{ zWuk}Fww z`F~Xo|H_AdQSR|W${>lRp?QI&|vVX8p>#WXRN&q*2w@`d0Nr6P$_>=urd^V5O)*i|b@?||EGMIJOyT+#OmHm*2x zwisu%V!d_}M%q6_hSk^4)} zV6_qF<{dp=ajQr3@%H4*}ukqYDG-_ zVIl9a6zyGOKA+W$=*zwuL;tFctBSZGtc8C)k|;9@b?FY#8z>S3^V1bcLjnDIa5n{2 zYvdDcg^pilzm>&_X!w)y8tofbn_+EGCh6YIJepf?@xy`%1rR*n`$P?KAVTqdmdg(F z$N1rJiB*NCp19b0+xUgKR1?`IA!E4Qby`x@(6IB_`ng+~>3#C9L_!E=1fU?PL?6g2 z*O)lJ>7`nbm8vAS;!fl?;egVW9^W+>Vj_j>p3&Ab&u1m6UG~yuw)4K#4YV$EOPN4( zBDI)U@;T)Tkw9TRVjN}W*MrDjWlZ!7&>kpiTzRFJ(#i#)%ll;_io=TfEWnmW=58!q zvG`J8;T4g`!a2^V1b_CEY3AX}Zm?@c>G^#Ad%wc+2!5K8 zaU0SYlLIV*OCs@$s^mx^39{>b*B`QTsikYcC%OaPAVC*zBY>9 zjLjz9q1)4%+lbFTOJr6gRPGQ0g*`jvhy7VdoNkq}3l_%mBmdO(ICqzqqMt59#9R$p$kmww_<`zn9F)qcuoDozi#I51+6?Jct|>8PhK zH7G80<2wp=#a&RCNsfl6kE-~bnSpi~(x+yUcD;A*s^t{ywvkI4xBRcJyx!o_%Ohh2 zHxDc&#yb`|v>`*CeIg_Lmp8gz;AM|nkL}D8?its(b-udvCm*eLm>@;~4Ggac4>O?9 zgPqbS^qUPIB$HgYAS;&u6afU88W3_oCUBM1J8%I9jvV$QoUr#a0BG^HzBoU$`68#f zsDPDf$EfR9&Ftzk+^25CaBK8K-nlL3Ur+e)yg$Z;i$ATu`+Gt?;q>_VxQF7%%6WRn$Xb@%ps?B$g4n$F1BJnHFL>cmAIdO$pOvYXux4wfs)#xO^{}b*AT5Dv{RH3 zjb95EfoA!kNQNv!F5=3FrWd%6B< z_(gcb^8?Yk~_RF<4qBi;0$lKlLrb5iLw}t}`L=@2nlSL>Y|K zq(W%lOXc{wSJMv$D!Pf}M1Gm5jz)RixIhYd=1|7gzrQYWn=jJom9iGKqmM$}uRM#= z+vFeW32@3kKXAw?mwrcsJp(0p_7Z{ht{>w>W4!TW@?rceC@O=fG^`+dn-4&6Nu99| zL}O_pJp{Jc_M;W0XrEF)hniMrXpm1ZwU4DjnBi$0&3#W7yu0Pc;>BX`T@fFPXLKM3 zH5X@W2x^{buR_F{4Ej7vV0ZL0Y5{) ztM`X|g*H?ArFQ|KQ3bhVP}0y^_C?F9zTCvWM7hOa)9W;4Rg;BMU8j0Qbzp(raI}qa zYIzM8J7~I0F19RA@jV_~o#kH6e9*h1HE2XoXGuA_(?sJIpqwR^6uz%yZXM<2>>2amSY2RQ^}*?gH`N} z#4;LGw!vd+>l9jN-DI1AHYxGz=_7)w^7vhT0HIYYsu0Cpi1M9YDD7>rxnL17FKkEp z;w$5q?yZwKW1NEN=7?4j_?tCIf6s;NP>%Ojy)(M{USz#7>CN^EhptAunHgI4(ztr` zQpw~4&(CU>s1MlIL(xs&H1lhB5IM=|>YT2s>K5uV15`tAeP{avNmqGc@TY!wKcGAS zw*qH^Td=Si*}>*NkIo`sayt;Q&1yG!&Av&9BD16gyofN@HSHptG3DssJxBkz>@?4% z>0~3U99 zIGQmqe+Qm;?IsQnd^%~Y5u#|kkw^ZHPioDr3c=O?wtjIZrb5-sxos{Hz)AyVP^g&4 z*w7C)X8E~GZH2AZOBk_9$Sus-tTg}#5ipwJ*+l!5Mp?baeL#LWfo% z4_-240FoB%YJ0!<<`?roein5V<~6JCsFd)w35ctRVJpP*$HU^(4q_X*P46*eo5i+! zNEp*=ntI=I+%{1rAAdfN`@L^V?btJ(_FU5Kw2>16PV_@3@+T#$D=sw9Q7K;2VR)cD z!|p|spCUrCz_M{7K_YieU;tr}vE;Twa?~8HXC6pf)Ck|M9LkuHVfN?)itXKA%~$cF z`poUNZ@kJ$gjc>IZ(MIod_Qx&S7@OQm+E_@IZE^Oj~@;bO7?=}K9^`LA_(6hB>d$r z-FdqTQ1dW%=`Pdfi04 zsdsPj$zM_=v80IG>RqO5?c;~HZ2U%`HDQIkxt!8bQWjmWeNaJpu{G@bcEzU?H_Qa* zOeRK5q<+W-o(*07ze~aYklSOVM7anGa)!L5EJN`E%IuPrt*E-R#!^0}Mug!Z8^!uS zn`o1Wvgr0?Hth2;ydB^>!j3{)sAf&j0OcuHN$v6zbrG4c?Z%)LvZP4tl#vxQ`Zi= z>f0L2;`E|reIBLNwe|j7I+b+yNY&eg=Tbo}-0m=yD_f$ARhj8UqxIx%Ue}D@Z3HFT zkUc-$-d}^IAtEIR52TLY5KF*%>|I-v4i*D@ojDfMuhawvtKOhUHeAqj**94{uW}9n z8RC#dtI<mNG_c$`0l$`^#6_5$%+3Xjqkic|L@x-Vo8zH%2;gO91X+Ruq9k zO+y%CF>b%9L4IEdbP@T~r4%mM3VzXrMoMd% ztk#3CckdJ%&J5QJE%f&5b;`BKWew}n=uB^0rWMS7$_i!XPDQIZOTSS_s<-|h(%e7f zn%O8(F4pjcwS&=KCagC+lsY7DS@fU5OZ$?*=4Ai<7!-!`c#?r^fQ_v&etRBm902b~ zR~j9fa$wQVtMZ>Q~^Vw08Nw%Q$OcK3R z1Ij%-&K>)V7Dpvvt&8xUv0OLCLIpcWb%DF2VIKYL`|`@m#Al&h?O}^`*%+CRHj#=2 zibKT$x1<{q6TNR{s9#j0T})@vzq1;A7Qml92=4>Ql1v2Se*WH!U_`^TUs(E0mzxft zf4(zKR(vsCaP(?ir<5Lm9-Xpw;8Z>Gu1YGuWUrWF8&!kOvhcQo13*eVkgK>{K448Z z<#PCe&0IX-OXKX-tZrr(8+E;c)GM_-kN)nbasKIlgCCecWGB-=m0uYrh{*@kmP&B3 zTf62)r-^@lReByJtN>aP2I92emgHRH$Bfyor~Iqcds$AL-6iQY7nt-?=1TkbU!!vg;>@%Sc z)>>C-832r68l;@ox~`FuVu8;DFt#)g%^5d2IYSShC1eq~$E74n59T7uiRkBZN8K4t zVhR9<>Y;KI77s(!2YIBfl%F8_x*)?Yb}H@qIXdjXVm(#VYn`qsHxYzv1POJ6o0?FY zid)$^*AVC9#N(-HSeg1j5Wy>hy_IGffvRT0jPH8yl<6;cXbsinoU10P1Aroo%I?xS zgQ5_$(4yx(UlB$YkUbz@=#!i$GlY#5a&;H-R#gixLd*2Civ>pqtg#HrKgA81Bl(@} z-x`};p}&8(rr9m*r4M5bD(9=UsDRV1sr3W@gANv}r!D@MFL6B$cvTtnp*7}X_O3z3 zTxsX&^0dX-td~Mw;g?NIz1fdQzV`{kWX_A(C``;9KoC1Hu0x$cfiE7pZFMkboSJc?>u2iRzxUY3Ou;nRJ!-xH=18H zaIuqmSL(!Gb2hXvDst?;8|i;-r~Zc=J3D0#-NwlLwz=X!u3uwBB&DlgC$900y+27! zpf07KXAc0d8Avv;P^(<>pywD9A@VO_eK08?X!)?!1dw*#9Ds-xn;6>e6ow_G zXy;8x1gKw=d($=qiWE$z*U)1E@acgyf`$k7oAA0pL6Zz+UA%0n6Sk(>bD7=(966+S z)rt9pLR=8awu-67Y-x67VU)k{qG;0Iz2E+^Is?k-^BSD`?CV;0@5>VpgsEv7J=OyB z{ve*m>mvK!3`(u)qn-5p*;VAu*6n;x=@Kp{7J~5F+l)%)^yhu+Y zbqFjw#^4XqPllIWS>+oC+21 z9{`c!$EsiAe#kdpL6oOTtIuF)rTH?y2N>xzJ+_evgbD+T=(jTtWxSMcP1VHnl>#d} z8{)51?nPRQUPt+3DTiu7IAFK{TtphdeQ8b%eX}g%?05F@;ih2Anr8YlGs^>=+>QU{ zUHv~X?mwek#9K;~i#D7sh|vkl^lMC_Bv!<8adng0D@jJxb)z$teE^z~s{$U-B9hpU zQC1dZ;BUr3YCM@11kcC9Xc%d;(HqZjVs;WP5ZlL6G^(TSo&a{SiMzWlFxLQkMj1p+ zr;zj2=fZnfk!74Vmyb}FapkhmC-DZ#=*Id8Nj2-CHR$yg7+j91)rmq8>mS*d+bo$* zR%#IPV-*7v)SBu`ymz}~H(u{*wg7evzfdlc6F1P>^gen~zKN({m3XK%%e)_7 zpzqvIyC57D{83u?;R~M}&*SvP>p|)ZvgDBw!*;)L;M!mC z#`XR27wff8=y(V)#5r}`l+Z!NH+E2%pL~>aG%dY(JYq^k z;6?aL?xS8We9IKxYco_#HWv4k?iRVXCReWC8;}0%^2*G9K~6kV%bfeqAG`XU9k+@8 z$b3bE;>KFh;tTyn=ci$xjBH2sZHX;@tv8>ME8}Fzeni@1Pb%oBg`J6_QY+9G0D?Ye zY$(eCtk6v64&uD#o5n;?TsVNQAOfGbI%t8u#;Ya7_FfOw_cd(hX;1Z_B#&75{@D8)u)&swL*l?Yawh#jjto>!J(B$0kT>pF7jDt+O#koP`Y+1$0V&9NQxdBo z8$83$zb2HJUNd}ac65zOk?ZPU&eXa1GmPUs zpLlTN80#Dy0JR*$&d|35^jKvAt@UbSe695!$at=-Ce^eV^LwO4sn^S(vWg0Y@A3AA z(tT_msxJ|8CZx-BwCLL>KQ+|&(j(g(^Wuu$D&5@#0Cb?rP?1=M$q`ZFf79OfRpdd( zUAkhIqSs?dA59|XuYb|{C@Xh=LUwzk2ziGrNiM+VNNtcM6uT10wXhd^zhnJbLsp_eY>F=mfRObq3h*kQ1%*S3T zGy87w>ww%fLxE7<-Ixdyi?=;~%WW?uuj0CNH?Ak#<#b!1-w!>VQX%gKZ#+7p)T?(j zf5rZ#Gly0&Jac|=&wu29n;!l%)cr$_-ygs@!eU^~CC*x%ZE*4rIjd}8p_Idm{W`NW98zs&(=2oGdddB|dvu-wORW{Pk8J^j ze1wqO*#1u$Odf+1M}6Moma4Ps-@31IcC90Wt4ck2W0Gn?LW8FQj&!U?KWltt^kI%5 z&GXyH^~Y`wNqnyyYi=wu5o4Imj-`aH?rSh4UH%N3XXkpo<>D= z-`_eiAm)cZdF#V{DJmT%v>oKb8Y7 zNX_nQD9Tb7TZPGYUSFsk{CJtiWj4<|^IjSI0|W9x2Vkwvt%>_ElFT91^75p}IKeD3 z|Nl%Zg*W`4)Jj1vsH_aY=$)nayuiU}FDspb{_|>1yDRFtd;8{cQrJ;iV_M zr{Ar>tO5Z^1#?&v2lO4Amu1ly=86WYhD4?M1uv=< zId(kF#}fGT(*aiZu+^TUyxwPz9irQ%T)#Hn&euxfM{^2fL*VbZRphWKTr-7A3c{#E zq{~)%wPB5e{^jV^Ylzx!e1CbAx|@IfVf_o%FD4({+!WlW{0IOXS}7(s#<-+)f@Y1a zy#e12HTDejIovUcB0>JeGG4S<^zuopXEFruBs7Lv7mv?)ajyz5=2(ST`Tk0^OF)Z+ zLg_#^!D1{!_w3fbHcmr5cHq5RE57p6D96i8C&teu+~}GF_paPBO+yN^(6e1<=JtF4 z==phId;)6AXMe~yn zq>>BeISa(GM^g~iqbsHyXm3H4FO}-Y14y2U&VUPLju7?v zGkO+-BS~e*5L?E1OvkmS>LWdMS*YH$pPy2(GFMS0rJCF*h(of*P4KDU zz<1eeQmPPO02M2dPRG%pYE+;PcTplhBWaVAh58!h7o>sOt#@V#6%mt^aI(>Hbq?yS zyWHB>C}T5EP@(?&+`rRQsX!yt!?NvIn4kJ3*h^CE%|$~4q}jUET}|qZKTc!TuZ`*v z%|g42n&&K+AMK6BzB^VEy>zGX_utM2ic%;7f&&vasK*LR(Gy_aHh(%I4xjD6E`(qv zFyXXn2{y0>pS8W>3IdIV!3rR8^sRw!ju4|3gM^6PlDo5P^{*5KHvJZ5{fi3bIuh+v zBgn~@mFg_g*DN)Tk4Xs-XK5e)lBIzUzU~Qb=^x8C0w2ehR#5T##sAQ9P2Sv|H*a|S z-58bUaL1!O%WrLvxn1=_&oB(mp&BwwNU}->^DCwyU?bK@i$NB#k4&45e#srX4Q;;i zSUEvQ{;9;vhwF80Cs2nz`HWGAh`=Ke`Xa=m8@Cb--&k_$6-d1gpj@Xkx-lwA1jRF(<6Tt%p)}S|z^2;{i zEO!jVb&3)Aj#ndl!;HMO)3e&&>`HoDtLN)VFO{dh@!sRQ~^CoaA3#&A#(bBhjB_Hq=C> zeeMkllnh}qq>=yE)pzEn?54gS3jhHpd(sy_-QZ03w)1k{-reAvnY7 zr36GdWdv!%h8e4F8Nmf^Vu`Pvn!HmckK`Q}0~lfhIvOfGN`|Lxd)nDKcs&+>#Z(pV z-?g+aX#I8L)#m+@?W@Ja67TC#%*M_adSW3@l9`RPHD-FKEb0*$;?YrOUQ zU$e&symHl&wn@JPdYGkV;{Gsbc5#X}+I31yR5-$yb~X5qXMX>kJ36JUYhnXE!fS%X z<4Li3$vu;G;F;2*$A{0!Cl@9j{k5heA1gnTf58gY9pjGkOdebD4Kvqgj}Dbc%@U(w zk&DEPMny|70mZb@ig0getmjB+0Gre_W<+{PZ2*Z3o=>K^TZw1J^q4M6$UF3|@!Opa z>L-J!1|ykMT<+C`U&(rvE<4uqdmIEHfVA<{LVyoCbuW!r6i2`FY(#=1uAUF4x(T~Y zjlYl1;7AyL_IZZCdx&naX-}`!dF7t>f46u2hb&i|Pf>!6uoUEE;W-3D&wsL<3!U;z zTfer-KUt2_)u#pnq>zeZIHjb-tr>|C6NM^>Qx?ffc~DhX=K`awb^hd7c8#KLH9X_y zYXw(*Vg%%Jpk%!@;L+#<1)<>!AmBwXs%7%?SniVS2 z5D95R{xIrke%C_Lnh(gxqMoh zpp>&3XM)H2Q%z%cfVs*N@#yfBfiYiRUP0YRxptk=Pa!I@H4}j6VJ&NdN>mMG(Egzh z*LYs-)FDORWg(_Ff%Y^gPa3g=L-Jr!?wsY}S3ev$ivc@&-o9fBN3ju=My7h)X!Z3qnM|G|ztbCMuyi%|TW-B)`2Te5 z;lJK;|Ds&bZ%UN&#hB7L=!8-HU3f~riwP&H80_Auty5i>O;Liu@ZG?yvd(b`E+rsh z9!OOtHy#Cu;9uVvN&@-}%mJuq#KZyPjc_Op+?6D5a!8jr`cS5*mGe|u@`{)^n%TXN zG=SxzQ@ugg;?f@8pS8)yx~}ABtO5->*RsiP1Z%|G06uW6VHp6Bn> zWmSFiz}I*2O~jwcyPZGV{H3ZH_NV~>Yy$|KG?L0Q{SOB!-t^wjWYN>jHjx@ZvyZ2z z;RUMhT9Cxj9%M|Gvw%@D>i&ugn}yxLMtTx#sDkDVfXhSoSDGQ6{_^PAWBwv*BV}gV z_{E*MG#15ZHUk5BfpibFgS?ZMjjKk?iPgQ{q`Vv(-Rpm8CNhn(;d%+=vNHz_x;JaW zb=<*4RAJl(Z!wBVGl}6T_&Ad<%=oTF0OEpTCcaCsvD|2M!dOxc$H@w9fYU?mT3^kn z8m1XVcIe9V7+7Q)jEubJWD3{usMIS(RJNfKrRTkbjnZUoB;MepYdrO@Wqojqd1)8F z`Ar8VLH>JTUgt`8?zNV>;!W6YJ`KG$g5Qca+mCU-rjIpw`y)~`Cv?{D?0FWFDojTv z=mqo$L{?0h+(Ge-p>Va823-iB%j|ob_Aq zEiD<)2CXTjB87}Fb=rS?XCF(sX5|Hn&`CHg*o8C&^P9OY6OzAVG6y~w=^GTUS(T)r<+xG$@@3T*B+j$cJM9!j~Mr#vfRrj6y$U$8i|N3 zJY8%jDUdpdsa;gjl+x8#7Njh}`KJUkSE=JWOjb3rsyFs;%q%fF5mO)H;(HYmL4^?-_`HjLiobYh zORwH(vEG>@v@ZX+HDM(FEG5-&Q(gEO>6Y^svqm;kFDL!KlsrLu#PeOr;_@eg*9LQt z$N-f)a26e_n2U}i#JtK;>>gk+3Dt?)U?Lzr<`lh+o7ll;=J>198tPl_3=HXyu-w83 zdZOilgHobDQ=&!DCX%*l_KNaMDqbl6#b@+p-~2Rsr0yd%co1{2TEr@tpT`?fjmno` zXU&AMZtzS#nqtsPEfG*^6llQnk#~o~U#4jC>l7x(&7u8Hh}ED4AU${gMl*YcmmB9* z5$t4XfE|$pn3Nash4mEeh3^d;=}NNzLom3^04Z;FsxrZjQ4tAT-BjQji8+ykKyNBR z@sI*+)PdQWyExOf#3qtpjI`p_`CXhH-9P(M%6Il#QMfaoV8TPa+x&{6>sh6mJG4t8 zVy7&YHg?*BZmol{5xL)f`nx8mMCq=Tu+s}Gex))gH+ext-%gmjd0+H|PntxW$W7?bujSOmJ>iive@A*mT%-5~X&o{JIL zjA{9zckB?Sk8mHTDat`tMc}Lb?a?&>caXa+o%$M%UTrdmv#kB$-O{+&iZYJXSdwT` z-;DbeA+MA}xqXXV@ZbgwQjBC{XX3m@vKrPHWi$o47smz}AJA5qqBnzDjMU%4T2k)tQrpb z(K@%fw;G-o3!(#j=a!BAI^ zzNJYOAJ7{qv?qx2lvH;p9m?2TcBQXG*Ges`2WpslyQjMfHB9{pKu4N|S*F~7#4ZUF zNV=#ZIe&8NBDI4I?oe9&VklVz)>^WhQqR|IPquqj?qq(wS^pLJ{^3p8f{J&$nx@x4 z)bc=lg_FW{FFQMkeBEG@OGO4v3xb`$u~CtRlPWFC{o4*TysVVaK2M+)OYER4lLLao z>3qx9p`7I`RNg6V>NIq&PAff*>stN|GJ!R!f#xUaf?RD}ZF`4vAbrm7L@rnFGuWR_zxebnza>@7qd;Rb)vGRsc z-f~xr&8=mn+Xx2B5usEeOpU^d(i+DZR-{c+N@7j?mxrwq8w4J(d(eH4{D_1BR$w)Y zk%k_~-3o}6I8z2j{!s&Wut{FGg%p}J#=jzdJ8P{{944MssKBTZl&)qsm$W8XZ*_`| z(NQxyq_T+!4mR0{7ae1MGHK|}V_>a&bGF-V`Yrj_zGW-vS~kOmx+Z4|&s>vot^?_{ zYt5^zn1#id+(A=XcYwRRu%Iu4;-1a}E&(JOXo*_c5~QN$pjJ3Rcmm-D95>|K@Ey9P zKBn|UDxAQKrNI2iJVH?OaV2_$qnRBu`I9 zetda2m`kv4$>Xa}*|xw}4c8jGByCOP-w>q4dqtDM>bvBIWIinxR&t@i^uUmyBG43( z$6Isr%JM^%@3|T}YGO}TT75MTakv!2)=VxGZCkAt)&pOrDx3`U6VU6{^BvSH5FsQY zdT8JfppQ6m$+nk^UKL0Z8hEW?YI0e>_A|BiNu$Iq4!Dci&n~q}&~9cL6&IWRl$oBo z|L=HmL%-Sa9`=F`%$PJ#)|b~>8Nl|rJ%Y!?`m8nl_rB5+;M@Z_&cOsn`J(GDDbgBU zv~6pg&y*@_dqWF{VS#GAt+Eal1%4I^?poTc$hh~&YNm65EeFFEq+iNtLty|?9DN7M z50Fc2$oN^TlRYV=Pi1+;O%#umHE0kfJ#tV()Ua_W6#jf<$0HlK7#^gtn*!AZg~PX3 z)FFJ6WbX9L<6&OaXJpb>|0@2W1p6D$&U63gL8X7lz5Gmxa?ZwPT&fqtvKquaLaF2O zsigl!xg<7HU3$yEaXBC^sRCEN#_gZdO?Bi|aic$icnDsm%iuPYcL&moG9G;LC73!` zL@z|)K$2##;V>dyc`o zH?sibzM;uq`gaos0)vyjw28i7d=0Ao(kR(lP@6WRR8>xA-@)N1=?OUIfexBj?XHE7 zK;oyI;fc)RCaf!sOq*18r(q+`0HG#KuhGwwD3*9;(=N(Qgs(=$#t(D#X>#<0Vh(q2 z7E*gzMq;69Wo!7$9(qNQZw+ib_{cL_g?v{MOO^6PfD=GdCWP5)+Vwu`<+%nI$$(V6Q;qoZ9smXbRLU^@Bg4gvX{* ziSN=}eqYV1BI(G%7NbsXyQdi-^t-2DERlSV49BOQ-ysXho!?>>$>($PnGVEq4Fw3g z4f!qDpGv5{JZ>caIS)NIld5Eb=CnUP3(DXzO5<3eU7es0(5kpQenI@P#+AABfgw|N z3-=yLxgnoS8fc98a!ThWN*!EQFfiY_L_=nrAOOU0+B0pwx8YkswNG#S<~c2KEF|UF}u_;|GzDR z_^+bj|Nr+Na$w4);3HcjO212nn6pDeS@lJ6+fcmv8r`%KwZent@NT^ei?(<6M{#{xmiYoT2Ar=J_s^iw0>~VX+`FTGx{%pXdYL}? zqEEoXGNU`vXND8h9#DNmsQs?yA{5;Kh+#k0+AZX1iN(X34U!9|2WGG%gRcjxp@kug zdGa2StaQN^e)y}pLIO0iKJg~ArkGV{q$g5vb5z1BH$N1ttJ)&GytY6m!MJNxyY+599`h7LKcOY!Gi${134Jjjv+!J3BLE|0zEf-JE1O!cSU-M z=t4wz9*YH>MHIa0Ax_xPU8Co1`g(L%qWTV9sxH`ZW$Gj5ZP6DI|Cv$5AJJp4CZ_oq zhOflx<+tI#3si(D=UH-3@142Uj|w;W4V=WPJwLhn|3=|LP-8Q;FV-nyZIj#D*=u^jF?C?h^Sd|pZq0)2|Fp(@_sYZK$43%lCNuVjBxjq z(>~)vEe*^vo2>2$!;PBp5ueR4)DNc*Dw4*a*k^XXxxv3(uG6%Ii-J z`UiBR(R>VernR~q%)pEXa@Bas?c>pkwf)GwGi$jb4UCc^vuYx{_lm)l=Z5*%xpd<~51fdYyb#g`8zvWrGZwb6ZCe={ ztuj)mtDdkoxwIU#`P-kCC@%mM2&PdiFfCQh9o@}+9}NntL$=dwN9GEqac0dLR^I$j zVtblKlnO@;g}V=oUDi(c3E6pEw01~w{ zF`eI7Wu`SGn69&kgSI^CSMKHRXB5kBYjd~Np>KEAflX`GU)(!B@pif*cu2MaGcqnZ zqcIk)Ee&ESJ7jKmGa&&H0bE6XLMDM*2Pnvq)5Iaj@jiibc=eEmbw=G}Alt+*v6X%> z@wFDhBRxaKi=|U;y(e6Y1t{ z^u$VOi`Y@Tu<2!1(6ITS-o@nQPub=pDTO~)W3*bw9)(6o@JkNeH!Z@zbyDKxk+u3T}_V1Z08^Ty_hQ*9`1Hz5Yz$U0r`{ss8iGN(Oz?O z)cUqjaR>Or<7Xe&)@8hovR_0vhv+`y`Ti^6SG$pBv!V(9=_dpL!07HSUau;nu@d#t z-F-cT4}@UfnIu5jEHseg0MI4E@jJPlnxOb(VR>aJP+HKZ+TMPG-aTmaqTb@GPws&n zUa%O}nuX2gG+2|Oi0b#X3`La%`F)MbG*cYJ%&K(nl7gUH!%Y;O32Emi&0ehP;hg8~ z*0P_W=ey7FnuL@4=Cwa`V zxb!aZ&0C%i;hQUQhnvcYE&1h_zteu4_OEQ7Typ;13(nl0 z)|~pWATRLWb&`L``DRj(%l?;GFOzZ_{~hpJwEQcsYKlHhx>VUyA?@M$M)uW}zd{*Vb{|58{&!U^{SL^)lqSP))y`h>qlVxy$Qf2|v=3V-!&> z_Ug~aq={YRHLbQG2FW!C!mx+?k29EGw~8wKop6nP*lh8;~I}u;SNf!6R5nN}Nly_kW~kbJsP#C zj1)tAZlVNaPH0M`_*Wc10GLdbg=V6SD&!crXONDw^DUy`;eauq5|5^@FK~DH65iU^ zZa6Ljh&ICmW!uEU9n2ST#_bM7KC?kjr{YU%mTkLYPbZrytJmRgJfGi!T*-u;qLmgv z`Z|XKr6O=}tP0N3HA+Sfg+_YXGb;Kv`+R+)gp`l8CzSqb%^#?4FI-m-amee3-X!#@RV%`{fKkC2fCI65M zp`ui*jz%veO)eK^H#&CwORSZYwXGiJ3s)$}^_TU)0df}XIDQL{VZFe)6c2ehc9CO3 zUi_fIbd(M94Up%%n=T(mp=-YKLNl3 zv*t%LCp|uYckUHj$F+5gcR(78?kjk_3TB$1IjYGEwPhI^7qdwfih-cwN5eZXUcdwU1Bn3xMvoK}aC8kBDIn4vN-7}A2BW(h=@OI$=1!;s~~B&m|gIqYTjo0IfpQHvK|F#*AKw{_%{G%< z?oI0Y3Z5>7J4Hf=*Ys%HGDH!M-8x?Df8OT@h+WqaI!~SKVN~sNXKg!nmiHu z5nh`kC&6q0JHSYmg=HL} z7U(n3M-N|zW`C3Y9H+r=qFjoQeRIlc=WBRCT$MY~+1PN$7SGC%#K@-lw!NYd>Em-o{l z3a*HoyGtEC*CRzG?-zVaancMjDI%YAz0I91Mwgbbkq;)Pl`mgyQhP;eV-t}+5xG^B z8+w}D)VurSDXB<-;P{`TlK+65G#PT?2D6W?d~h+Mp5>lG3mN1)bOzOD21Wv8e~9+3 zQh=GfWEnxsQ7aW-MIj4D*ipkh94%Imh?h^lw;fZ!e)E$O&l51_*LWynQqj zKlTtm7zR2HLp?HDa^^ERjc|^rkTGnRsn^ z3$3fAM2|9P#+N*(PBRqg38QNUH0kZ%bsF(Bhpc_Feu)O`MNc{DrPe|~t((bg{H^Zm z&XlQ^(fcv{e1SD_XAdWyOGA&pcf0eJUFW`o;Knx0r6WIl)XW+>S+SBzWzx$O6!tu3 zVs;q0Gljc$qQ=SqmpN*EXe+1f1UnSQ%gZ{q-H?xzQ83C09mD z$r7ka5n8a)WOEO2o)3iM1y}y(`Y;eREx|q}$gy1B00|bBr{Kl<;Y#_Lt1$fthgdBU zvH2^bZ;z=;Xqqt_v+e^l#*#&o%!z`D*1%WUojBw%~*HApiaCH?y5PZjVgN zg#WvG`XA(WfdIN~qW-L=mDgV4ZoVJc1&7&0M2&&$f} zL5(^-P0`h}$);i!HI3iam#FmfXdm(ARQ2@jUC|RtC{dTmBS*(peGAeD)Me4dAB#oZ~VtKMGU>Bvv70_Ar#o=o!5V)vT!CqO_YH0X)!t$zKlTlL~D;RsatV zS_cO}KcZ=eyIL;gY{$u0uaj0{|FWg{!-204JGSR9gxG5htx{IlB9pYEqm0fUerUe> zSEpX}tik%ivp4QXb2McNJ};E)pp{ptr%pp4fb^$I>Dvdj^^USr7eXJ?sB7J6cjp(x zjG(i|eH!IoH5a`+RiRNE3tAF`a z%tI?eeoOGK9eTgDIz|p?22aISpv8gULaSBO*sO&5s)l!u8GDdl3J9+R4RkV1JL)Zb z7M56!5!|ysdZX@P;y~oPk@U@ax$Rb4)-)AIkh za4ii)DH!Oh9alrKFHaIV)z*q2wQ3q)Fiw*`Khq5+F*;u(`JepHv*3S_%UlM4jso>( zCyiB`l6Sia{|pV&h1BSKeob%)?5LCHatJVaOadLV=>r6Orlw#;lA{Odv2CC%nEVdi zdN+44kPRhaoulxjuD(?CTazTG#6q_wN+gu<5*E-@ z0*LXtUlSF1YtJGPT5DYSFC>eH&y2*b;yq z)08!tWiP;(wBE8PlN)m$!aNUjbt-l27w#K!euN^N_@{l8il)*o>&z0O*yqgEA2ah} zUnwXKnaHTb6QXUXJ!mPxcM1F;)Jp+2By{dgn)-@pIP(OhUQCNqq+hSW+WrmJE3v*# z^y%D+D7EhkI8x}0nue;g4ybvd zWN}^>9Y?DB-=A*(HIVyXU;obK&;{i7!Pj7pPFe?<2pMnr*RgJhVvJPT2ebr*)u$vw zfP@M}vd+kRMu0|Z4?6$?2&xVls+J3KvmD8&d8J$swY!4LDR_LUUcgmX6?8;t2(DBR zy*K~B(17vnNLgCF>pd+M?Z?t)*l7_K)Hl(TMQzu9-p^JUQPqlyAgO6z+^X|mqa%jK zW=BnLm8~x34_gD~Btkvon;VA|#NE8Pz44Df*#-*|dF0{gkRO({N1%~-KHE98Z0GWZQzAA{7OR@ob zS90Aqtci(fE!V)ahUH^p;R@bhr|D$k=x`kWOYu^E?wrc-e@HP<%bfMb+j7WZX!BB+{B|zDcH)8U!GDmFpzq8WVJ!kY~ zp|TRQg*Wx|2aaIH`ouM|uk8jiiaDxxdQ2cVXcBYVp9_4>2j#I{T2+K^0EJ9o#NZ`0 zLZguk8Y&DTVR}3RO{?9t4%;HjO`s`w;WP8oW5O224YLQ0m3bMWP%4RFHJ{RFO*nUIb+#i;<}@I&I8DLjE2#m~3)( zJLUqy-heT!qf&}Asmfhe(VpWVm^ZHZef(y5Po_cjHrGeD#^{Ndb$u5)xMMtWOF~@F z)u0ZZWo)7&&qhy!ck8P-!Rvkcn2&H8j+xI^;VWmXrHaJZt)4 zCH1@FcM%so5GRZC^z;`BXx1B3Fj>JXce;oI*BX)yc+H{c4rWi$E^Km^IL>6eq1bOX zKqui>ucXnweZ~O1ndpc~{L-9j>-!Ew>Dl!ylfzOMJtz>&V=3ZG(5u{=p1N5XaI&Uc z(dUk&hHWNNOK`q_$`nZwQ)rO({DpQruPT3yJ2^|VYP`@Z$n7nJUizFt5A5r23bczg zs^pV-9n>FlD9j4bIizKrvZ992@)NV71qG{@Mm)l0U1FYV9bjw#79y-KjFi`eY@`9Q zdWpZPy_$dIpsqqPUijSAtF>zzu;_`X`N*hp?id2o;w(KkW~xM;#+H9DM=tACQ3(_4 z|7viqmPJ~% zFD~AC&{t%MIa^$b!S(5YX_YYLR9zSV7!6W5MN^0nH>`moGGk3B`mStP<@{8LCHtqG zw(b~|pVJ*0RB6Bx9Gn3?H34l(uH;+9z0pfE`K-7U3f+uvwxj^Oq{uJXw$I50By;T~ zRF>autXK~hk`J7iKd-7U3*E>B4nB=1eqepo_fRHcL-{| zNKnFGEdbr`1hNJapxM{gj^z)Tq1Vw(s)E0z(iz7y?2QMiJoh}$EMI??T}|(7xYtq`dhO@C5CxDxv`e99 z-$(?s5o2E9X-HbI9ocNXC^24{J!}(>Fh$jbZw*Xq93fOlW##thj?0cW1VPE>Fb`J> z?1roA*3{n_s^#7V{OSM`D<-UZ*no0{mF~+?TzecUT|m)Q&2>y0-X=LR~gluVSfJZ_MMF z7U%2~VCmK;1M|oo+3rDWdDV*+D;p9CcX9JLoeEBxff+;SLXiQNd=R($U)R!M9Qjiw zMlf(VF3xSwBm>Y_=1`}-P5}n@_;>6N3z*B8xb`Qd&aeWwFiu3tM78)S<>wt1wNXNE zO=CY!zyJw`j^Aw`bB|IME7yik@0`$u3{lXbtNY3wr0E}_HL{96Y;T^W z1<14v%0ARMkV|+emXq{$$vEYqF(P6q@%M}WY*)LM{;^!~0U2`U1~ZAqYKTl4>&$WUF+Adt`O{SRegPrceFz84pBbo29$4j+xj$ZKy767&?f+(7_|Ic5!| z&b)$neWi!Y2QVhmIIq)kZsI$M-FIQ}4_GeRP5#nkUId*SR>{iT0qhkVP-)K>3%gHK z8q;zr3<1WIN(0r*TXb+NUR}I$D)?R)6)z6vuKgC0T()P01dM+)K{<)dW_l#v(jY)suRZM@HR`&6yd#tP{X5Htt~e25~LDe_QOV`^6?N$w`uSb9acSe z%Bw3LwKrNPC2FEx(ZeFI)tQ4Tdg9*nd#YP*eOIJ9ONsmzSuuybDlpqiA`$NRz`zka zU}ap;gvzDA#u1qb_D9A$9RF?k^$&8y3o_&^4U7~2iETbxX9UvPG4qS7kkgbvhE;Bq zWJ5zBSyX^a=WN}E^wVC}r;m@~7MesG7@;&ia;P_q7e)Ty+zGRpN+7%cA%rRDvbkvq z&=KP(2k9i2L6}3gVO7lJPjaN|2&8m;tt}~PkLB~H`xlL&cP<`IF_Th0kV-Qdo|0_r&k>Q%T>xErteXnn<=yByJAQch zFn}FkAcL@uOrX+X$TM%TbH#?5epDoK_YvTFtOcirEaK{$y4wTjIK~dQ+=PUtj!UT0 z_w2upYeO&YuFDhbzEnn=j6@hh?{3|Ui<)2nAf#z3^9Tg z1l5mX!>3q5K!NM7>^!u#7Uxf0Xs0@uXOd8CMfI=hWOz>Un_nUvr2rdQk;RF29cv+V zh|gqse@w-X_Z3Y!W%q1qr*Kh!_*)|f->$19Q)#a~-im-zX9$N8O{_>+tje>GnNSFIH#asic92k;__Cyv?O+FT9C2HnnS&tm7@T1 zLn8*_1XxlwSI6X>56C;19`vxi-VeMbZv^3ybU$jb7D$z#kV>bBF?}8Ve)@f-y7yum z07p+xOExv;7A?M8DLHONp%LTBoYz18=Rj7UZQ zXDjg!aM08Z4Ud2jTrwhep z()6)7Qb*Z5?a?r2LcB1m%WQmZZ@cn@SC{s4aYjPrX7Hy^MKn8|;;H!)4C-H)E?YLu zVb{t8A?!;F759XW#JAF$s;H?-Vey}0GVX9Tc6bJw#4zi~app_7I3VUD^{N@bAYpn0 zpoWy&)?F1RW~KxOM1NgN5+)EdYHtBp=@HIG(`B-vv{AwZY|Rfll!xEsIXYK|f@u~( zdHziO*HI;$guNgZBz3JyR*8r*>*~VoERKjxc5Dma9_S&%=MtK37)cP_WA&~3^Ak2K8#x&T$V^G`1 z%KW~_19uT05R?*cMb&*@Q-7gtkFTnqo>BB<$3*?A@xu9g!61XC=XzzkaK>joT*msmOUDAk8q=&4ygi$^7lE#%<4a?>A3`dcKUUOH^WqBTIP$=4Tm z>$T@@i1WKhKu@8)oH1&xuO_6W?_NKZj`0=1zXMNoid!A5va2)ortLf(C(Y~OE;Ymz zF)3qC!XF7`&pEl0erA&vJ5xV=xtjTiRD7D~ba#ck3p`)&Z2X@`>Hi?7`wwzKhO>!= z9Eij^{g!`+B+a5~460W&465A5r^x!Q#3aeuXqqX2dm5q#N!)ULmI!5?7*w_LmUmX|4p-kjfbsN!rwoHM1D<;5UbuTw_f ze@Iv(^{F_;(_QD_Xll!s)2`r)?qB@9m3_Li{eUXT%#w>s6=8pR+tl1rsLCXlTP0*D zmwpLhs?s&jDJFX*lFE=Go+5>b;$^cIP+yys9|hTx5BuUb{toORi_h})7Z!87mL`jT z9H5ZXtYW(y=`k~Dn@9^$-w}6yU+)r^-Su((QGv*#Tk;quan)YrmFGb^!e9Dp&Xdq7 zlzeCUd4#~;wM~zCD$=obY0%81h~X*B{qKPN*K0=8hJSO9kdK62&e!v1G=ahxj}*C;noB z^;Pba=Y%I3T=%NL=(74sqhN}vPm2tjhhN;xukEqhi?2z0rQT36!?i2hX}hZYg#HiD zw^NLh)4am17D}WqbQT{fec}htM=0*~zDN_2UHmWerGJnc;Un9&24Zpl(v(s@E4Ktf z>`WdAsWC|OBp3?0B~KNT&8cJcYVz_3`O~05RU8lZJOv#=i9!RkEZv8vbJA}EiVOv|8J*7q z?>#Y7K8*l0pJ%mHcji2-ofCZB`Nh!TFuQS~dCTkcD%Ggjm67r3m4x=afZnGwufE?{ zsQRkx09b_@tAsQxYPEXAB;6LHP@&X{VW-N&(F(%h7y(DWy1W5n52~BjJiKNpij;-S z%_sXknPjvJ4&)VvF=OxYDTp-^Qfo`)tnb^q-#6v;B(8h-Huam_3m1g;X(8}gy^0Kw1?}p$5*j z^0273{Ehwq{(gL!E9DzwmqjGVW&r70$c6d%d@5MoI_SuPhl5h%(}2n6!fZm|+&Mzb zsMS*GHOJczx8oB~w=RsNt7r?o8y|GUxL52Kgk;)Pc0OgDLR8KJf@^P{kLwrk4SEdM z=B>PLhK2MJHKfREBIGN>Bur?EyGj9z@U>H! zv0pNM2cxzP`Fi{3!|-}mssC%oicco9oYud>s)LC0{Ks;3%;V(3>gYXSkKFn9mIDCs z-n&n{x!}8Ly2KqDgb%=iU?ktqEm7w5u}9pW5jBT88&oj%M4!ntwyd+zmZX4Pny#qp z7;X?11qG;T!hcF2ZTOJUMBAquNLnks(4G*(+Gh5QZwBs%567iLPBcgBq)Cd@+=v@n z^tOa%`;C55%6XiD7z7tLn$ty@ z%-6V~$$$jp!0RNRY=h%$lsLGuez%EzT->nTVXRg1pGKWz;)#B&bd<=gDBClg&%U;=S=iIk4(6so#n8+u6 ze)JhWkb7tvJM~6WF8+Lgibb3*$)+8h<}silEA%;WY@lyJih2ubKyGI#Q!;`j* zawXc_pvDs)Wf>*MJvq&MY&-nwzwN>ibDmc9Pmj&FT$^RfAp8WuE5aHty$NC6kxPWbsUKBJF=i z-9MHCQ3L3=UG>S3QyoZ(Cqque&g3({8n);6n`^?t@jX1x02+AMRupG>d{Ahbmz9!r z;1oV`nA)RsxC_IgYPh^xnHcu8G|NNtw`*KgeYf<$VyxvVMz?evgSVP|ZrT?u8LtG^ z{!J<--0F=|dVrsasYpMN)o7_wI)(naQ#6DpiN$$!SofaAyDII?kh}|;o!qI9`7T2! z&zFQZ&4u^-%b(FEEPW`|`ttB*9AE{Ao>sz74$mL~{nr`LY4qzVF^(Wqn0#qz)kk}W z#-svV7r&Kblvr($mtEvw6cKK>7lR*eeYG)o1Nv14P@q``5!PDVx&S zZ><8P^w17yvA)>UH*zXZz8a;mmrn4Dx;SY$|GhinftZH~s1~rkR23}3&u9i;^a#t< zK{PXcw%{0{QR*P zV1V8WHCdxWr6u50He$)@wly=UjTUq)+uN?%%N&$dsVs36-Radx<1L4A1RrQoAJd3B z95>=UvU*VLVoz7zUE;`(oL6qX>5+WBLd7okRibMAb<)HJY>bMVR5s&~!!%@>CCHZZ z5jd*Oy*dBu?_2#FDPfQ@k!-kT#kV_CS1OFzc^6{;=c?;J)(`(67s?1=8Zy!$TkuOM zX4K`k2L20Ul~G|(Im-|btRZXl$z}{g*RSvi1o3z(Ev zt%g_N0HWJK&QF$Kf5uJAAUD3`#t~q=Rxmi{TlOqH+m5eMFC7b*ls`CDU%SNtmE!4p zr*^^f@yV-e39=_f_uoB5nNW-Gb3MO+Wi9QPwf@{JepnwiO0{RYMSWh&OD%rbQQmj$ zm_>(a6#%dWP|(bQc4SyM(E!H`slD#WRU=OE*l7j!fD>aHV{ zk{@q&u!BuPc2KDbYlq+L))S3qg^7dHLInQdKe4X{qHWsdH(RA`mzwC9bXUU@ybS4L zNTigEgWN}n<7`J;5yzW%U(jy2SCAfuT0AVLYComAcS}$*;`fzD!r6O2*Wbhfh#@o~ z-u*?n8#Ob}&}D)GfZ=#WS5tUMK7o?D$F=b~YoNsAT~-?QsCS<>BzQjFaOw9${qo|f zp~D$U?3(j<_U#(#N4m=#---QnzuWYOMkb>aM!zTV-qJmInWqTjOMBPs5v5jC&|3-; zBb~Wy`;UuD=kIJjp+@5d&T&O2GvH|BiJUFr+CWnvFvrTlQA2)&(lO*#SoGeX$^fcJ0wXq-h&vTx>d zxPA*zjLoDt3J|t}E z(*RWsZ$U8_Q+B>&%(AOoW{RzKuxP7`8LBgQO!Ahn3J3GUi|6}AoDwxbTa42j-$ff`vC1TOnz@tFAFmJlBv=SB9xq-h-p3w<8^Ec1=x9n$Fc>zzU6p&%V)vO?Q zQ7UYUlKFtBP7if%%8a9pCro3dX_?m?`qm_)j;#s%dm7oH zvu{uu4_3AK<;$r#De(B34TT3wl9tUiM*WfM$4Gy+-s2&7#`S#lZ{m!>s|ZOT*0>YJUyLMH(<)Rf6-^uzSjA@h>h z#5HyzW9GV&y8Z!`W5A8wF~h&2CRzqiDVrIVa&9ZPiJG@G`wMH4P$jeB#_#XZ+5SbBi z?7VQ5Rfkga>8t$ckZ%q`d>YUshb)T})IpB$`tG;oY|-Wfv0G-N?{s?7o{FVnXlJ}x zkc%NbTz~vL;;kv4O+-IXX8F*)3tPX9d#ify;p4)(Aj@z5zcWteaK&`n0#xxQl6x|H z$wZQ&aK?*vn|l-4fg>NsgN2$+jYcQ4`8dygyhQeC_+OC&0ZRLz6m&FTmqiv@>|HL| zP;f|BksFwzX^aXS;kB{MC&j&81+~0SQw%VJ} zPK8;?kR$EVh4ln3HH;W>nSm!d>NU_`aam&DVq9zKjPG`QLp}yMHt7GnL+W&u_@PfB z9=msD7^??j1?|@r>Y|L85{rn_UZi5x=FM2TdSf@Y#=c+k9zW_yIX5V@j_qH#(2-^I zYTDOH2R5_B-u*U7On=H5_ZN><&PT+&bzo;9h529%y#>Rl+`*olz86F#vdp>)pY$b8 zD@Q|g%m)F`C@W;J`|fY4&{j`xBO>n2LwH@VVx=q*A(G)4(h>_aEc=zo@hEV)0m422 z^^kzm=Adt$u`)nH-EafrjMR6^db2I|R5_x@ZzIDy|JHRnOWe6|sI8z)e)|3qckusS zU;jbQWs}^onqrNkM5Uq0yRTcxnnKvIpc(@?^}$5YO?yi8nJkz>!r_ZoS_C7KKW<=| zO~qC2WmCC#2vji0qK*$NCHxnz9wPEF43$gB&^Znzj zU*oz*Q0^S@A4{xhWzPLYpV>Zq@MqLR?)ybXbyM$yx|a_=JG=C^zWuJ<{8wI*i~E>Y z6Hq?7Z$QhfdM<%6-VTP}h_D3q0YF`x)hhdPZUzcl1K*3wRwpLd*zg=(dE5QqK}x)V z1QwJ2lYQ*DXxtlM48Pc^l@92O(sdr$eAIpedz!)GrP1iq82*?a)t;rLQl^&e5Zl4( ziFYeoQn8i4r>>iFvVgSr}ok;@X{RyT&Iov})*6D9tUYgj}7O>?H_XW-d8 zNr;Ba^la*!O=T5&Yurs0rOB%P5CVjsZZT|aFb9)a51>NRr1=-fJ3oYYOp2zy5KmXn zP*cp7XwIU8dnbr2l*?Y?JeHlvjev13@on0~wBC=#_z%1fqmIOoX8cnWnp4Uap3 zb%i8kk`9dwik_JXJzg3r;oM{$6RiWJgFE1c2|2vDF`I?XigmNT+I%hMsx}VhoQlQk zI?-CRPUj}fb&Id>h(@xv1_`OgRVecZz1e1f*)h1Tntgv)XdJ$b?CwvvpUo7gG_Uf| z@4869T@&(+y%5VYDD&q2=E>t}bT7YZv3`R5;|u2qm3&yif7?6!$5ZY<*7}zQ$Q>&i z*5s17RB4Jnc@#_z8aWnJAZjtR# z$jrg)J)YdGAgDncm6he+mg>avmrLKn2yyOpv|lPk2B#O4DzqkQurF_B+86&FyiL!z z;OP?G9nGw%l^k_8b&{JO`>Z!&?AKLusqLyu2bJ*=laHw{9c0`80RSE?Y1b{XT%xzb z?bgx@%9hYi__XIw>X+f>iS%1SORNId;AkmZKRn9M(vKS`%9Fu4PEH%w5AXpji>`I` z{QcgS_Zzq1Wc_7Kg3Ckc4yLx37Ys)7%NDSZb%c3$UjQ>4N_#KZ2Urhl!gxzFk9dQUpphl0(gD5=W{uRp7&!+_$F zm$0q?1E-Q`u4KsrT&5WpPLoI(lbge*OKk7{I`pee=JvePKKPT-W&`0TrN>R zwEW*FSXuCj#D@2RR@DwU8Iv5RL=+}Oj!1K*IO$t-4)FtySB}~IU?#!*{vBOoe8mi&C4xZ z-M$zaD9Kp)*E!;K#!vy(pI3AbC#3jN8FW@^c^Qx&kn$;^>7LaG;c*$*PU%#pM7Bp; zGqz~}dN_6dL^=GB|Ahp+QZ%^(em?}mpTq!)AtHtcWY8K=jNdu|JZRa`<%;T#iM;!} z6Pv1uo0Poq;IGoWf%&oucTT5r=W;q_&Y9qAZ`V6Lpr04HV#{|6Sw^D6uj1{(%02#ND1pbFKG1ZYXTO`7pXcm4H+y^BI`-5g3i$H7*O5T6(yXKUAlVy;%kiIforHn(E$F-X|; zUcQ>mW6&GK33Yqb|MO7xLHP5Hm=5oVznn_DQWR8M3ZYlJx4$*b91={UUWt|ikCoVv!!S4F}GgIMoAcqEVHln zm+0g*Sg}ndP}`@Ec|?oJfG_cjF{DGKqd8|GQS*1Zg_-DMMpYlL!I$cn=9h*&BhJFz zyC1e4L`0p6aHZu4X`Jkpg!YoeMF*&Fuh4QIv9H_!9(+-r`!G5{R{gAthK13Ns5spA zbc6dif=8H3I4EJ!k$Tu|){%khU{q~}-xuB)o?nyY-95wPVy{ndXMwy>6$>c@bGlO_?sHXS zU)z4teT`Hfdi?DX=FO2L)l*@%^A8mtNEhVu4Pyt!OPnP*&+Gzuw{N&NEL5nG652#G zfgb1#qNJdAu#mhS{XWq%Y1$O+p#C8XtC3;b8Lb;tYUj|OjjrLxEPTqe&B_p9IEejTVc5F-Nn^gDYm7Q##=GhTyZ<(Og>L z#zk!!t+$tT3I&hav+GzRtPA}6)MJ=FAyv2vt)Rwm17^?F-|6$ zSx|i+{2tv;1I(u@qb3OXXdfcWe%Gs)Py%9T?Z83pnDp^FOE>*NDpgO+6Tao7{9o3I z)VUq=I#d^l0{7`KQaA<5c@Ng;t?e=;4Y*$v^oV^fNd+uyYA>eZBds>1xib+EAe>vI z_3QT2I(Jh3S!(8g?H>L?t{E%#oBWou*C+d-TOv{*p{>3`OR#q$Dh#eh16TN~)u)QP z$N=476cEzkw=O{kr(bI8!wXmPqj9A=HaEfL(%VXrD9((^XLlJ8UK#Dj<ODEtX}F5k*z{I2l@;>w4ZxJwkK z7f|`sA}2K=n%ICles?@~if3hsTget8H#mFGQW;2M=sW`eAQKQL&ynEzX<$_Nwp4&* z3?xiG$N zg)Mv3TV!?C3zIAqLYCSP>T1GwHdK)UN7j2;Q@CO0#92=h<<4mS!CN3_)UvpL6Tw3|^Lv+=9XU0HbS`6oJmZzld<9nt^Q)iVJy z$yw{p7FwAFBt*E6#FdFk$6UF8dfh`1 ze(}j6TPIcQt@w-FKkf8yKQ0!UooY6*=&6pqE`rBaSyYju#W6ze9LoHPOgNYreW5==95!@|%V zNUb(b*D$~4(1ji6zxg=O5(W@@X|qX?3tQn9$GPqVWHog7YH$Sq5NeQpwFc+;v|iv7 zj^kT%8$FfCxM5S1EYPkGE_Zp$T=($8EB#)1_{vN6qmGBYFW4ha$Mq>%@J}cqAP^jl z--tzs?#a6r3;E*;)M!5gd8Ec1nelY5cW!+yeah^?ZBpMXk_45a3(gd}nd9$cB$kHb z2xI>BLKD;IFtq@1cvJ8;!slcw@G?vBh|}EwQtC*}uKh1p_k&GP?gYpwGvO$q#IH|0 z-t0p|&uwm@j}OcCjvD5VITGSL$y$~gy56rQ`d`!3^IGT^;DcWDwV1UGBkWwC)>v}V z65>@_0$JXTk36Eu_Xk>I0@}$|X|ftCDD#Y8S{!d=##aQLF_9Y6aRWE!Pv!-0YE#(K z*xq_=2yqf0?u;#w|8c*t;gI6dgoq`#_w6NvN?1+LU5Br`U0I!JbR~j87|4}Fvm%~M zjmagih^e!yq?;CLofl<`%-ejV2s+{auCe*gvicu&HJyn}a&das3&}BsiF&8azMt}7 zH2f+IGF_23D#=f|MkVs^rDCj64sHZaCHL3yGR{?p!R4) znQ+IzGQJUq0q;z$Q%a?CEZy9rtm>U+z^KC#(lX34$)^$|Ls7^6|+8b^36kpAsAmtsb0o!$7D|78o3DV0D~4xIsI- zf$I$aDB+-iVx3x74|%K7RL@Xp4=T$n&&cYnYt014e-ym~ao(>2@DCk>$=cXRLHvsQP~BhA=4LEFaNeK=f3~*MC1IX^jXG(;*F9W zUU|~7K$|Md=l>zpCnM<}%fV*JEaymOIjmZFYMnB95^TrJCaC7S!7#vC`H7~Q15UR3 zS_dh4Hc3NIxA1GMsL>MiX6CsDco>Jm(t^i%MldJ{z2t&!a25cZ=DHW^@)^386~^2( zU#ZlD66Z~yH4wF0w0=2@4T)pcgbk`G>KFsG^C#G~UrBe5z>;H0cF*?icBDPb6_Q_Y z)Df4v^Zc{?C$y~F(;P7|2D5vr&KlFR4Z(~g6`#9a0PuQJns4}o0b_X3YXAd~I}Yi= zNv+PmWl*{vP@LNpN4`qU8pmWWt+P%b9!UEGou5h719RRyXs*rT&bX!Ji}|$`5ThDc`t|&e%39C82U5|cLlCm=bmGn= zT+hz@9Z82cdwA|KaE&Bm&^sYPsZmeOpLa@=#>~CyfkQ~ZU8)fLW?(ovhd-_R5CYU{ ze`!yhehlT*%b)TVD17M#?5%&_4F`p^$j(&JS`Mr*YQinBoFCfGdJS_^FHC##ljhh z)R!iPNFl6mIIJ4CcI-|_$<-JIYTw17xK+6PC}`v-?bcf(Kjzkkl$S~d)G2HeqFaDC z+N*j$T4eim-g#=KvJjjUc!NsVkzb?n%}25h-!2~~Fv}W=S@08!sPDX(6#QgdcrNAQ zU7kOZCb}XnUF`S~zL@wbhEI0_tr1!Ko|PheDVy&|9Fjds%>O^ThX16we~_zwL|(Dx zlcQ}y4E9n*IR`xBM&{p%YWVc5Mw%hr`g^L#g_ULlo5YP?h$WbdK#CMhosc>JJ7*9T zh*bd18$=f_;n^0?tCW_P*+rn6@>R5VDM2A2EBa~dR~7H6-kE8xes%^?_kt%S(NLVd zbFrS>lE?_a{DEqPrw-xD5pvoG>4D01j5M)ii*wPq>3|?7nojAHF_W)iJdzptoG$Mn z5kF2YeoWq@jU`?5oAVK$K>z^tMBzZaVyDr3s~d>=Jy8dUzqzBM;gQWo46_((UNat0 zLS;^?)GL5bS5RU}m&xW5YNFPlzd?7bOBLBO>#G31rOvAVR7C*BGHy*R;byKtLrIVk zfQ3p%_4gYaEZg>H6$~9VjfBd%p~{NwT=(s5zI^bZRjSqJ^wnXWIlNH3v;TIjOrP|E z(`O(U0LbtV19_JRmXbqqyQleUeYTlY=kre*6|Mwy4j~5%$P( z_;PBEGlP#O{+U4PTP+G}kT~5W)T~DAYFK1i%=qTh8>107nr_wIi4vA z)=`@4VE-HdU?hg+GglNHHcw@GEd2^Z(=3#dJc4N2qk}OlQ(RWUd+WWNN<$KvP4_xE zI#e~zQ)$08wzJ?+T>6wMvN18+&e*?#mXlx$PB>yV60C(Ekr~_cCI;9R%|jbofUlAVLz6XI6-l2 z4wCn7eGoga)%`)BEuaaXM=%0lB2)R7WJxF$=mJ$cYqxYasA8%D$8(#{r>JNTKU;+gDFvquN+4s$rh zlYib%ncD7q;TgwAT|>s>U59T$b(#O;N%xQCIQGbIxoZX{bXc{tOnuQ-Z#p|um?-Ao z@`1myhFn+;0r8+#lSWq%osM@DL!uGR0aV+TibAu2UkJ!NscT?OH#l}=8*(KlR8}j= znFg(O^4_F>ZoI7uL^^ADd{Y}@Jnl8WaoM-)3QRZJ>Zk4-`=El#2pi#S&0NJ-R?CGV z>;r+V*A8O_X$A0p%Qtz$y0->xeH?on%AANFE^ZmwFrI3zdY$8B0RWLcEB!Sub~pdJ zVsOkjO;wr$7)TFqa!V&fBHZ&EvG5nBF@6OmtaWNPX5iN6Y(S(k zbKl?3{rX{lz#iA*oac4Uxvq<1_v`MR=UrpmjJGfHseLcZ`}HAp#S{AbEv_B{@2DLN zVz;r)A<5&}t0~HXU}id9GF=8(8DYbRFWn7N;I5I+pP31UTOLHH81Gl;DApRujoux{ zawiYvv{+jk6lapXk&e4OHEGeL+`?hJ--4oB8_YP0e zNwP7`9<73!q4_Os+l$xwa=6qQ_gDwklLE-%2HI)v>^Ql3kqa|+De7lB@gqZ60HIG2 zZ5^>>j`)tBno8m$39Hsc=%(^wblpfKa~~-1L2d1zAvaJdGFnA)J%Ya5^|N&#LZPhv zi)wX?(d;jFBvrZdYFdGIn)C{>I367?AE6$G)4R1%8fhb87`Z2@}?+_;NlS zjE5JyP3bH+rPMsjGnhzhxS&3Ea!GF{*}ZI-2bh2o(FLag$&zI-SrP);Hz3@~#{i&X zvY?l-DWjZ0oj%E0HvP0>!9Hyq%3C}jN-wra?7i+)aV`F^>$V zbrzuxHPp^2K9Sj;Oq#S zMc2WSR(<~V;>inPYBSdq;yKt~P0>z(H!QBjOWs-8kk|d$OC^uf^ZMITziB0($+{)< z-tZgsG;-eJX60+a|9LC-UyXIuh(;gOP4O(W6>Gw{$-oubQSdI!9)f00jjO1P{+p&0 zB@RInlzqvVTP-E84hI3Ni*H>1VSUc?73Rp|%PsNHHE~t!l`UstoB)&`=G@XiC#J-p zWke|4Re;L2@4i2>b!h1Mp(bv6^QxXRuY}w`0j7IZOUmE%l^EEUjwa%=`wULnsISkS zV@jfo%d0-sI7&p86P^)NnYPW>_C;8VQ~x=!-1`HdBS!GNBj*T?R$*snFsd`75XMXu zNpp?4^}M=pxv06ct!D}Kqo_22glIl}G0E)C$z+ZB>BU3e$6ZDGQ~o0ZQm2U22-Kym z7Qs*F3~l1Eb*qK_dZRIxtZK_7DBB+{?72h@_9)iLP4@5UW`gHwS?j9?k-vLS?@Kc5SRMZsNpbb@E*eA7gPpCG29=n~8Jg4_c%8B-KnVkogO~YZVhQ+Ha&1I`xKoFa$R-aeHYv5u{ z2m!F(82nRNAba9OhQceBl@mdj+qWcczk;?1dUEH1v=n#xqBK}1EG+U>*&EY8B*8di z5M%>7#{Hv~QEEOM6r@0n)GquKJZ*7u*`<9gz;j8AO#LKz?c>Xn@PETq|Fh2hZLIkq z8sz*;ts<=yQL*v2=6yd^a(2pK6==4t_L7w*Jz0mmDECjvV5F$A@LHN?@d!&AD;liF z9Icnh&H};xSoV_t1Y_ARX0l<6Av;_NP-7*l*Mzb_MBDDk<$G64I9K7~ zvVgm9CmIy_#&ytE(9So6BdBU0JHh>f%TZ5r|6oVq#0X<|K2yYga{~we$^nalvyC+? z7c&BH7+5D^-FfbG%ec7d!V|Xy!RBL8QkT%9=)5Lb!=(am-Yh;+yGV5L5qyvtoZ-8( zU4X@0kPwzJH~D(wVF7FeKKfsJ%lVA7>RfG$@t?a`oht8n>wD%5*zHYv z=4-be?pZxGSZ}{sd-?Lw(*@xZTdH$1oaNifJ^tgBepDaH{2uHD8S7J-x#+$oWhv;^ zhsC-JvO~}0s_{aiOUa}mI-G2)9UFH%iMh5_4-OI}TGC5?a^8Nf+^AT7!_*K5uq(z4l!$P@USL;hTC#$jU4{AG8ao6_k)D z(Yl<%rXS8YfcT=O^PBm@GnD@7MMev($iJnnec zV3SZ?dKfq@rjWK`EzUp#XaTkfXQN?+F;m8TKD8Nvhy-vPTihjP2e515w@M);&V5@KxzfJ1t+jG0Q1wlkmK>eZ^s!Ja47W3CJz+p)?B6h2ozn6l$CKX zWsA!c5oDAXHRh=Fyy>K~#yp%_jfTsO^t63O$E<7uCI}VG`F`BMX*q)!ITHwGXj-Q5 z#-}(rt2p$;wZx!m3@>)ESImCsu*K*4iqz=go%)>rR9QQ(?gvTH!>U02NHaqY^YbZB61U8`5}l*hP~wA8 z{E9wdFVFQ?e9{ZqMC&$6oM=6YR9sa)*%*+oZe0w2xBT zs(tn%(f3_tncff4vBMGAn-|RtiGUe6ryv~cok>g{HB!vyrTfR2`LlV=j!rTYDJf}N^jQi>Q!Elg4HLnfB|o3aWzXPkS_OmsHvSRedUsj)xG zss2)?`0qV~|3Z$}m1gzjXEr0}OLLd=d7J)st1p1o{>xZ3#l2{w;4l&ZAGa_x27puw z&q3qZc|9v7SY=@y<{lUvl<_L`&ivd_x8GQ<{1JzeAznWX${h3h@psL-hfQlhh!0)A zM<^xrJW8RL! zGmK*Pr=_3Le4W-zb9Y6w8phM_lwDU4Rjr`uF#4z2)YSUyQot^<9#@HQzY;I#n!BtV ztBihHE(`Dh&}5^>0nowYugpj&T_Y)g=*U@gGamj2Ve~dvdv*JRp?Y5;jcB*QUsumb z+3lD;>`>1eWP7r^Rr~hyhukO=_{8-Wtf~pr6(|cFAqpH}__$ywP;8N$Gf@;jnf|*e zKeZ$vV))eVo0SAXEpa7qS)WM-DuAfa_I0W4FTUC_C5xT5gW$W*u3V~=eFPF zb&-sZHxjOP<1n}&nclfFqBd#w{^xD|7Wd~~ z5^MVtB9eKQZ~Ftsj*}luWc;zy(=2m;89_}hG`e{5z4@`-PBxc!y2#j0SxqmcDB25S z+1~}IiBY^E(Cil#Yb4LL1P$&sh{J~&VP;7M98gbkJ%tNrYsCtdMR-m!7E7oR>=<@z z-TEZod7I!#zhJrJ(@pX8N-7hr`Jm6$uS1%69l}6o$KCyEpBT8ri7u(ef`{D1b@q-^ zzYv$-S8!4p6ZS0X|Ji9@P*ga{daJ^L=F1B78o0P7H;_jR#368s9K9z5tegaf@#e!(CAwnf1Dj!z%J2*sm1NV)o< zlsYiPFq+T^aG=*a|A;d3;AoTB*{()h69^{t69$Rb2OV{-o|7H01>g3@S|1s+H5j=J zrAl}u)-Tvu=)I+*o%4w#E1z|U9IxAAW3`Pnc^zCl_W8-sBWNrBmxmqt;fJ02uCqxS z`jHLPfeNzci2RCp!%Wx@m7#%;)`u>O;5}Gyg85p+miK}Vi)+aWm6`$|$pHGq=Xfxq z0~bd~x+#iqQ#HsiXMzWUi_B7@&h;h%^}O16p}$dPP}bqo_&-<8vq;@C>HQBX39btq zQc#%f^6OSDUwNx_R((TJn+J+jHuY-HCz~=iI_Lc-v9;Fb5ufEHxtLd;O|aCvwi?== z?p(60lcAn$_x?0%Q`;{q5n=IORq?&NC(}#aTJWg7K@W(q5NYhwOG?~&LD9cp2mxX@ zHCcJBl>1Wq(tTB+Si%+ows$$PjE$w*70b-h=)XDzY$Ayv`qqn`CF`p!Jp-T&+7DN^ z6n&V^=AT$$L(S7l+N2`6edHgfWUASb-gu;q6r_5*)vZo8u;T!PrAxt9$%8}5{FH>` ztes4SQP^(Om(r!u!iMkipQ}IbQYn-F^E&hIYwmBA%VD8GF5Yy;*4!vH5klMQe`?`0 zk;W=$c1)Zt-+W$&_|Mb_-UtA<8g7eDnbkO72%$y0dapg~2zWw*icw)Fk*{=F=oVP{DW z5zEV2i$A_w*PSN>N%v-=^eJ!?NlEI!8V~!K!*`j7B_*~Z1}7 zBmkrj%kC-erBR3ymP2^}r0}KgLLVuePsvwxqv#Qjt33^e(k9nKOJO zJuB%cj;8Rh0KZzwiy*+n#d?xuEE&>&$e{W7u^rY$%-@M6p`UJlE}e;r*CF7aUSo+f zr5ki95tUNNl8}4(Q##?d@}l4iM5g}23tRW(3$mE?-h)aQJ)BUI#q5q}NMtgGp@6iD zCPsEW&05Tqu3(hYYkw{NOTN)HJQq#sNb3d&#v?hm^!}C#w~3b{>%S_TxG`HXSGALm zW41d48rUOBdoHdHP+qMhiWALCO=|Mn&t6}B)-pKDrfqoTQo3{hg2Y+2i!#)bG5{I* zexo{-k%6du4?cLE@7i$*vF{aYD&E)qjQKwhm4>8_kh5_+5kO91lzgGd)*~BflN~(_ zJ;G)^aQHz|^pVnX`Wd5jVICHop;Ju4}{} z=SV1dUW)=-#$?6o+vv>)-+SC#QAmvCa~-olk25KIf!fle*O7c@Ylie5pEZ#;%$Qk#O; z&I}Fo3qbD6DuadwN*M}1(aj1lieIK;JOBUO!&P{u8NwVGWDodo&R%#G2x$AnRpbSaH&RaR|H`m5{uA9nobMr-C0^dEC zl`bemo!maWGA=%1cv~B@o=EZI71=h4yn7FithLE`&e63M-m!M6dd}y}gxjj{LH|u9*I%yUInwX^_*` zx5}U?rxS5bCH``ATnHNEh(UVV2(RI)%6tHD=$Uf$G?vaqb1a5Vi$z=&XF5`P1dP=a z2r(uo2gMhQf3yDp#XQyMtts^$Rt~#p)Vq~8H zypwi3jj|z6OO}+B8mwf}QJNkXUcWdv3rrm=Z8$+sb$$}MOzl1=XWDzpt*Y%qQ9YeF zd!EDWCYb;a>=4MEe>08Q8;y<3GsoedM}QgZ?1m`@#6BQ!&f`FV-bD4HZxpC90*`!l zMVNr@5SN|xFYsh`slQu@^Fz9$l-wNpxXPF8=WdK6bUO;ZVMbQog)vi(!aJ6w99g3c zzeH-B{DT8xtnI1F=SQx&3;cQd!-S$;vh#_$qC6t1bF?KK!frxsq&%GG!xMDt$-x=0 zmuv8d$i$VPA=*qCBGfqIrm+YX&N7mhL-~yNC^uo}!=j=iQ*`a}Y`;unroHIR(zbV5!SLTlZviKE`fWm$?h0`A+37Z?COutz<* zJl-8s?V0?CO1)w{dzj(Ud+5rM;X*zACh3#izPu6(ZsN@QG=u27;W3+c(aT9Uj?XJH zH#m}kmY?_iQ8tfDFk}KllAC| z_ENXSEWpv!pB4?=iHjUXod0X-@E2|W@%=rQ>l2|hR+NbqE%l*1*~h8bm%PAbFQ8G6 z7IwC$`9oBSUlmA?{nGlUTn|oQzPU=+a(B!$SlT?o#0#R zKGb~Qq(Dk9l4#PL5PIO#aQ~>tT!MA6YKa^r_y8pW-9K~6$x2f;4k?pZ=WKh-x$FdC zx0d%&G10n64o+^gXG~fdxh;mr37nhH0giIIk>I$@N1p+-+x~K(ygo*JY*u@s51qV# z%PO68qGj0c-MLr9AtbnS7g=#2R@)xO0gNz7-OIJqYRR!s^?ez7_*Ruo2aQlpN}QeNq8}4upl}I3(0iGtW~AvGsRRTP zWIWz~To^G_VVB@hjg^bC^ql>NGf-zn?ylt=EhFQVP1XL&RmFt}%)9h)E1#gR)fS4t z0ri!R%-nsh!Jqd3d9K-0jR z6WpHAZta;Dt7bLBr5p!-UMi9d}sXvpr zGLs}Z_YZX~z)VDCAC|fdie9(7b{u;mvS%Fw0J$${MZKv)MY7@|m&axz`Cv|Kd?v22 z;`La1eZIwqe0p^XD|qDqRMfe^w~hEW%R?+g3j5%E)?v7t{I+3k2o4O7ZZS!d%u5^% zvbu1vw*8geXmnMsWW4if9ZO36`Lf8xZh4ooy}1Di7kNA0e$yHs!c{`*3}ZKY)S(DZ(xR2T9lR%i}UI1DNMZGI6Pm;$j8mXF}>(Vr*odi7V-oyJ5- z3fJ>k5%K(Oiwa_m`jgEu?Xr#z17;!Xz!sr|L^q0k73Ja&Nw>#sKXgJ(<#vet2Z)jc zIzjks@!4N}mP`o`qn0;}aKL7GB8M-0kac+lV6;A?XDTN#HSxz`89M|;LZNXI9%(C#+)}U5JVy>hEvC|$w9Abt|4jcD> zdY6|Ly%bx@znYd;#1n4x@;sw0cXh*w#Koft4jbP#f~~gyfz1DZxAYfBf1h&BuV{VM zoaUivqMe!u9?!VObkC-q7W#m8PB)?@V@?$v0+{=J@jfcTJTEHHWK*_6-Tol2u(?ce zbr17C6&pxV8zu#76Bff}Kc~v+DjyMC@(Prq#V#z|&X5F6Cke?LE(wUeEr(9z`qyU9 zZU(zJisbi%zj1%}oV}uk5i)KSCa-NjF_@Z=b6nE*=s;p*n0a;I7`eT) zsh>7l9zR>&Z*Co(tS}V2VQ$!se!0Bh{e=>be|NX=dRxD9@LYnH)jYuhX5hQ-z3}zk zle@*&j%Hna+Q)OIo#dCAZFZ+T)i2SL_h)EvZ6pM6l}bH9g}!4dNMTOsA;9~3RR?Ds z1yOTPRVq?g$Rwn^%yq=Ut zUaF5(k%BgIG~!XP>KW+|awgVy0Hnv6wK>W+Y!-NmftT-VCi9#X)XgF*n>WO4T{)A(9wylPS9qC*>KMo5JPtUQBMCf*>astA}g)M#Uif8;|2JL_!Zi4OnS^IcH<}Ty|WpRbVv#TZ0A11=oH=s)9XGuH13&Yl~3xRbR zBmV8;;lHaK-irn~Z6nJBwez7ValSz`Ng-#GfQAKO*2cJGGrmW%5y-j$w2X7nVFzIJ zk#CHb%kCEsSVvf(**P_$aN<~0B2rp`($B&J{u$s&8sKNMk^-&V$9u5G`u_^IcR|`< zm71*UJp4QpwVJfq*HL>dzeEp}Z$Hg8c1kp)K7A4OZrzfb4KI5_Nf1J+Ni+?3z%_}T zhI$G~><2OF2g<$pvS;;vEq*Rwly&(mIpaQ^MV}o5vt`!><=-gugwJ=AgeW(ZdNe(- z-&O#S4uK^O*#epe=mENP5;r5T^p=;PoN?U*Kq6cf)Jm#7RLW$5ho zUNnbmZ^Y2C_6bXvZfW$#+`Bd;WVnf4$q{3Kf09VYiO#x{2N~l4;#{(627$x6vL!xx z$j;}w%$jZbIG6;zi@Ly#ITI~jYYUdX=O1(D!q8xl#sWc7(vLgxr+jbMg-y>7k4~vt zZ?;Q{i3>+R`jupsmLm+L;y<43xiuX9rmCHBr%7Mh5Dz#rv_tN4-1^TLCUkGsw*-aqa#A_VA>|BD}Odv2=XRFvOsCe*sbc4>9 z-&eE-v6sFyZQ6%%MocX*GVoM>A0vbagKmr~b|5P1;_b6B zkAu!x#RPvCd-w4e(Ma}KAFrn}48QL^x>>0c?Y(_HjqBezQ~y_E)efLRF3!NRz*n&} zdFQ3|Q3{|3ER(Wj;G%%%^!pV z=m8IQFToAmKHpW0#lj|n6)RRa{SMkHGwLn+TpzQd16+=DxHk8j`X7HehgL|8PnB?~ zUirz;kG`HQLEZ}az?uF$6H zg!%a!@jxVR;B1Jjm2yO4iHboW52ka|KoF3Xv}Pg^$Nojh_v&~z?HDn-p6w;V+9@_3smh;MwsLCbw~Cy9*#JpJQO{c2D- zC~FcA7R$pcCal)q<_K z)5Ro>4h5L#_Y(=bogk496z^_SDsE znKTQNod*UT)vH?YTZ;*M&$5QbKOU+0Q%@TvsMJCkd|FgGfN2C2`#_^|Ff%ucGy^VW zw3Czo=hCw=@Q2%$gumcZo=Al9bO!jj)t2cQ#AiS)+mwo4EkUoUE8}FlVmk3cQI)g4 zoW2M!Hx$??KUSwBlVvgOCqe%l(Q_)Cu~=|UiN?F% z(_E|$`R8-#Arb?8RUD`HQg}cHMC@tIEwGhTwkcx;qbk;zWKhM;(Y)tSJ#)(m*>$W5 zPt2Ij8NA%25a;gJd#d=c*V#J>4tW+;nn_S5vIUCGO4`1z=@sReusdA1V{WLT-Pw3c z5_dI%)x_obC-!j3kw{`_2Cq71A|Xcg+U2#l7v`702Im|fgD#Zb{?0rz{eR6z{=2a{ z2-6^U!DKq)Z_bF1Z|PqXoD%7?3hUqIaEQvJo~K9vQ$HuMuegE4TLabc8U3bFFB0Sl zjGQVVlRjaDF7vS0*!Y{Levt)Y9GbP{uH4Jk4P2pfmd(hKcQAkplSbgNGD*v~L0=Rd zI2faSW!Reb>;z@f_7rVpvfMY;jd&{^y5{}UQZ6-r=6=)m@z{@(4YG2u@`$t)Em{+=4Q4Hy4 zpMXj@_mFAKc6VOcrxVdhh!0B5OeN$hza3?btXHS1zXB@R&iZZ#%-dPmSS0*rGuys| z6c*L6@xhYI7nq~2U!P3EaVwd>4-QhcuvN~fzW?p4)}+qYim3Z15|=Kw9UA|bzWeHD z6kJTDI<>>PK38y%xh)?Z$gCz0C#;QxQ#?T8Bb!JQZB}|#M)xvF6Y`*dKF9#gC>b^i z8+Mf4=JpXoDtZWt$30I5*$}hqDvlq3t*%(QeK&vFk4;NuFCJ&yZuN}&ZH_ry8hYR) zcBA%Meu`Qq|LOs2H>w+P|1dWIWhTNCx4XPHqk52dYvWnPsRH$dxBgLr@iKUxtv(d% z;ieEV$@Hd>H67*QE^meUF?hdpKtDW2*di`E!Y2t35zP$~7C&#=`~|tn!R|jRl>aV<2TS%pM1)|2Vd_K9KluyF+Hald;>=U?}#2&QFb2dvAr;zuG3B-fnQ7 z)K>WO!m(GC`U}=|P3H;qxj=y%H5>VX`|PP%jagme@E5f0zlvD@gRyEV1K5XLX!L;= zQyA<0`^h!70IpdX4gZxZ13D5?Y(1@wG!ycEXfmJ#hX71!Hzh7c3_ zE7}#;BN~T%GoNQ!GcQ0Jam)bEm6g%lN;i6GoGY6wAA-3M3K1xUjqNAJ3kZm*Q!uE$kZ4ka zp>QYPfnAaaGcWz!ClZ31stjTWt)Q=6Q%#FrGGD(p%kaLvdR=7YADQ()ccm|9WZE4< zLfTXYdeQmYxKLC^5AsYDq|l53`bF@G5a)}kfgELY&n z{-i5~g?EP&!k%liBI`Dvx4P+pn`(r*hExq*enaHoX zBG2W2n!Qlk)8?WseWu28>JCg4QhWbtr&1Rg-LD;7!P0mhtR_q-ciqS8n9u|bsgrsJ z@@AAe685iROecF2j6s$LkBRU^fUHXgeDxS?iANzA7k!tdbkX#&Rh{{;OT1IAy0#D8 z;I0e~Fn6gvpVWwrN@*-Rm6ld0T6nZ$WXVN*ey}#=+3Gc7mvp=S0@;&Uw0#Jku-zEc+9O1{*SigI3 z4QshBAljU{LV3nK4$iJ6TugJD%FA!6UMW6&Vh&*DTuz=?!6?%_GPEDWuBu+f0jk9HEiCm& zHZ0^-$?&t;pL+S`s=uO6AEh)*QGZ*I?||3^JG}YTcd($ZoZuI-GO}2h(+m{eh_ba# z_W{Bojw}N}y>S~NIh!AeC0t6-8+7+<HTmM%{>m8!fG)9m~rfFGPKAEWmERWItWqD}>N--Y)@;WK0R zRQ;2C!G@3VHY@y;r6!r;4SCC|yA^uG=ny~&x>sK)IVtD~^*es{gJZ&yWa&K(- zsY&OLV~6F7$Ee<+dx~CVvtR&y5zvNP%!rPOPJ941mD?EY*iXj_1j7MS^od~vE*mGq z1*mXhAC`A+#>kM^lnMs$X!eo@<11^@e@yZc?!#Y; ztnNw&cZMcg#*#ph)$_8<1si|b%_%k3;V~=#K_WpLadf)wHGQ(+IWWMQn881s zApQjDG>+@f+Y3C;aK&OgS@D76Rcnbq1lDu@yyfWC!{y&IJ~#S?`%?3dg2FPR;+^n) z_n2_wye};5Ie9dvn5tUxy77DZwRG=Wt*G3OlBk3K>VEV0AxHaYkh|JGMuS{9Zo0tA z9-rtL?|#iN0D2;>p&)T&BO&2sQ74)U0LYT`Bqm@OnoTNQ3N*P{m}!8nfi5Y{mRpB|L-ROV;+5dxryegP&2_z zIE=yFYeX%afFgdkKfK}+`dl@eG&ntm6RLq zxoXo<95Kwv1m*+~P@evbStKLWxtRw7QZS8(0_pw?mFFZqcKQ{irFsLTH|iYj#+no| z1;{Z>=!-9`r(AL}g||i}dOBPzq+@oQ(QFJ&OP!f0GcUPEidv7OTg`?{8cH%q-RCK! z=(+@$@ycv8siedPy`Fh?`@WuY@58FhKw6Syl|s|gugt4n{P~?yB{InQaKNm*Xd-(U z2qaY<2M_#?%=8h{AQj}{b+L4Pc)XtQXta#qrDC7Ph+UIk%ELkt(VX_)wQ+BwaBA^+ zxpCwYcU>0io=d4V6=pTLMSMFi`co%~^(Kb=rBlb>70V(c0kJQ1lpn`D@Sr}RKKw+b zetN0ViTU3Q^*?a-FF${)oTN4la{9RG3>n4L#BE5KujDEhr=*5I?LyNMAvxSr-%NYT zS?Q4qp9$I}!3>vQNDZzYJ~A1~%MHtCk}bpK(E;g@%V-d1X3!bLwwqKQ@ByiLrn(MB zAfVtwp6--($H8CooW}${<=7kG!5n4C#hV8LMQ&W|MuuYK)kxBHh;g18I5%| z(4CmJfs7K#&En^bd00PRcqUA>Ecvubk(b_I1~99Mr{yYpek&5IQm=XCaoWUZsfE&&S%2OM?Fyrx%E)Od(wVUz0CD9U*}eDuAg z>SV=9;clG42b^#8`lKgM)0<4AAIFvn5Z#VUBLkkTfos2&jtrh8oBadP*a&>2IgLdw zSk61i;faL! z6uv0%n=GRBr-bw$IlA7+qbsevL?~F^?mxHGgq0ekcSJK9?oo)<>0irch zlYNOoOtn*&{!BMC02pUFitN09=qqKVJeRP!d>r26V(|}^%4qwDscm`wf4JZL7wrB* zj&IYNPh-8pJTnIt+@yl>w0jvL#Pg<4m~? zgP{!W3$gM25!aNeq8w|adAYt!7@kAEdNFcl@sir%+d#^?{x|LrW1Nhdnl4xl1_~UA$D9MVB>MrP(E+1C!9zxRT|KVo+5uK(=+)Br z%C+C;GWQ}R=&IQub(>b%S6eMu1y%ccvc-?b9~yjCa(_q!=uJ3AwDaJtX00WWO%7UfZ90 zcO4A@!t;W5_7r{F!{cZQFwF!%F}i)a{gIInJI z(gBXL)yx;+4>~B375ZxX_vrQL^qjkMmD5v{+J6%k>B&O@LV3?7J}E6yFgnzZ36bAg zlMUrrZ?b!GkksE((1)3tE>iBJ)Z#(v{+i3|hf0d(om=z&gRuSwW3^MHLGC^+!OKx@ zFM2CJ?Ftjc#*k*gPoodSvcHkjVSxB(h$c%ECU}%dL?!W94fseSl8l}z*Fyoox$@R3 zEN?zH=GnaQ;hzHNUeB+bf=}l}4}f^-`Z1y!{u+~MZc?>}wR!PkZHtSIO>=wNy9dYj z7D|e{zO5a8c_RO=WkD+4kjiE%|E4t4uzq**-P>rIZ&-h>BR$W4m{oD0$-6Rq(BUHc zKfXoJZt%|!vD4F;2xg9a@ZAguJ}2^f1Uzrf#KV}45@$s~WyCQUUIAZZt(mO54H_k z8=T@ZU!n&Z-Ey*Y@9N@{dnY3H0ozp~v-?7kmluPI{Cq_-uO ztfooA&x_+#uF@L=T5dn!3uF;UMC5YD1g0APV$>vl5e|_7L8a)V;+p4PlAuxy#c8Yn zU}*EfF9!PUE;>oSi)V*D-|A1j5JZ)C zpQzl%!5Sj-l3c$Jmp6wS_MT2{P>*;|M_|z5UZ3!hVMI=M|6)ah z=SrgTnuuI>C~iCz*~;UyVu!q`AF5xSGvSv~Pd|d`WJEMEkarppl4$HCx+>i@b7x2O zR#HcBw&_6Hdx7X^&qKeUo3~Cp_UyUSsd}}l@6H4O!Z0a=*@b_a-#pAV9pnuVsl9t7 z-^#n>e}9r)qiH+Wx+6wUB<+{0XXxuij4JlHgQz@ZWQ}_}etdc^SQ+0^?jJCiFLe;>mcuNq24g)X-n;69)VQ-)c6J$hwX^in|uq)BNkP9f#5R{{9 zALlvM*~Rb_foHd0>s7^X1ryT55^KKuzWUI7iq3xD7jA30y%`$v-K6rzdso5-VS!uk z@AO{KeqEz1spoD~aad@n@+khT$%*|$!I(^J^`Em9?1-%wLT6oQTqcrb>JwTW`h0f2 zRrn2`N(e4GFFGc%CLiZMn=Jb?9mh(L@evxjas>&o(&rKAfGLmPc@6^e0UnLLJO0{I ze%&#;&uWV9#FAYc7+9$s1)% zVRMsCI=YwT-i}&$jL-AK>y5lLEe0SxwgB2O@sb@M+Fr@0=>_n_&eOtD;DD84-BjI@ z)MCy;hT?bh&bR=^f@u)UE;@~C?&8w}Z@l6jbb9K__G0>gp3-e>RgCdMo#O4GSvOyD zX|3DRWy(2A_At*mnd?VqM(w)2Q{~sc&E9Kgy!dHlY!(nGG*YFFdB> z25*i2V8Ktho0P6ZfR*YRc0fAvLe{i$06LXbm=|@J8t3I4xE_WC0|kIl{a7`ECaVhC zM?Q$mldcNf73Rb&~KTzl1Q+I%|~t4Vp%D*jL)ryO5ss$My#|NanZ%Q zW>|*~+vGF(T*&G35$3l$mDNVgw&n4)@oTz?pF~gbV)EK*$JdPSz2@aUz7gGv{v+r4 zlq#rg{jV$jzeP@SkcK#lsTE7u`5&p{0;SiOT{&;jRIJP2<_sjI;-_jlXo(Iou3A!r z6{$q_zzriXk8E3NO*OH`%UKx;%_zfqkiBH-y*(7zuy!w(q=haQY2w=ug?Np)Z$S`} z_o69p$D^DTf`V#QV@CfSQL!gL(6{|B`5z3IAIwX0stBfCTlSbBqcw6Y6c9{q|k1gx&iSP|kG$bw%Q4uMC0QAQX0OO*~0}bdiYo&Pdna^J-?pysL z9q6`_7o$lzKs7f%-S7`rebE_SVb=Nd?>xV-9--Z8WFXLnGu_buw97CBXTNn>jeqIvK&6m>zKffG3g(lPiddkV z-Me;bpbU^;RmgVM-2g80Lm~*#sW&{4+Wv|AZix4}Ey9mg-T+&9?=o%se+Arsp3CWc zpe-Nn&>-jJ_aj-xX)uH#fGbE&!@^^C&Z^w&`Ck<)`R6oeBnMawUBqP(RrjW}3`S`8 zqOVy2#~3XaGjYM4i#tLd5B3l%4GA~oqu#c%%=F--b&%jz5X~6by0uQ0lx|Y{8A^&= zethvw0=aeDUS(LsZHDE@E(j15d4~WAZu(ShHQ*yb3$=?KnlT-Gtzo2sEIuux0}dbH z{~uj%{nrE-?~AV(0|tyyBON_@q<{#cM#Bh^QWzyAf})}#j20W1IU#<^i!3)r)fANhl0U zg_NthQ!|tZ+A(l(P(j`XSDe79Gn7<)1Xry^XO<0F!Q=1&H~6C5#YX)>q2G5ON?&V3 z`A@Fhwr^2%)%398i@5a81X?Dy9eJzVOQA?a94T-C73-gverRUOb-4*&Nfk6Tb?eLQ?0(l`md%Cz(mTN zU2JwY$iLx}zk1&gF8sU= zzAM0C=m`TxHHbg%8K^S?i1q17J#*%4eW?H$oC&+K>exfft(Cduy+bQo)tQO%p^f%T z1~t=8F>ECChkUm|J#YDwC=lv<6kg%CWTtse;?GRvi&+CU06+p~+YTuxK+FJeg(!r7 z>lOmU0EHk%zR|nf}pH<&$9bLwxs%N zn)4Yl>4Hu%vVe2??d#%N{V|>UxXc4-v|f_Zn8n*1HA{T@UtT#GkWm1Sxt!mAqx-P% zB9pynZov~R*S)Q_!O@PBQ%obn+@FN80_QJfr=<7|{5;S%xo8|Q3qRG&Q z=gmeHfS|66NnKuwEv}ZA&#fkGqFLI@bL)h7av&E-iXCioEsuG3p9ejURnaX!`^VjGFUQg*!Up<}uiq%pnJtDUNzyX%U?5^3Wa_n}4wiYOw z(#$DH!rrz zvApd=%r4hA!c&^6xACp;MvmjIgEAW~y1&)N9%ZC`BhxgB<%5p|3Lfq5o=BRg1u>HW zD*(jK3RMqXQAbE!X<{BWLu@tv#LhI-SG>h$z&x_gLrN<4Qh6gy#y7+VS7e1!U)?*;zz#z zP-kCP4t7#G8(+kRVr4bnc=jwasMRj5dL=!+sE8(K|; zWlozR?a?T zD`URP_k9`8`Ecc%+lN#zARj|Z(r(o)^>Iwury^2y4|Arw zf&owhb0TL$F|!K(CNST`#4~1zl;l6^-s-L~lPsZlP(bg3~sbd}VJ zmxE|#;bs9MgKxLPoHMlVcSk?TUB1M(+-m6^+j zwaa5Pms%f;G|}w;j=CYf5h_!w_*p~Yr+}NA>nx!x3N8hL=(W7+GTziKMaE9jCOUJ-%N zi@iLl5%x^!d)S|Orc&CLve%GnyufDZ15qL{AD!f*()wtikF+4pXTr}Uf#PcP;XoS* z4jMroL4UkKYCjB-09m;r72-AK`rmWfx5@aXtSdT>8fxQIY>3(f!&EcZNq2iqChp{s z0F}pg5SHSA?T6}RHy^&7f^;FLJtJnzHD)A5Q=&u~sP+0{r8;gxdQG3?uKW-ZcywCe z;OMTKNt^ip2wVDZ%Lk_rI?LJ8Gc>K`TT(|&2k4MP8cAte($nQ!C2FVsm9YX~EAFUM z-5=e}iuu!-(+7Lh2^N2pk?tZJ@6U}n^?6i-SSlNmSGLJuC=egLqR{c-o$!KB+6{C{ z%HU`!?lZMP*rM*7{{1DOrKwJy9Lwo@eW6#ZsK}lZZ6I8}9U;(N_ zK45S(`?+{igTz=r7>RBtm1eq-llvfjn9(fT$Pm&K?NZ_Qrt1ED36O~VAd@-f=JdnQ ze)Ew(UW!UCH$icd?Sc*1W7J_{A0T_DeUho~=e;isRcGvby*h#GdeLZ~WUL=NzfG97 zpe?su;VO@oDE@gW4-9B}?wpnXRFhq#4IwvNuc054lgzD_G`WJ_gn-6pfJXUylId4> z969<800Nc2g`uLMAZWQs%S&ONu=ueRs7X~i7mP`G@lrZ6{i}QyHwWd%*otY4y(2G7 z{-(Ix2{G2`8{5yt7Yq}pHV-clHmvW@T7f*z*Q?TwjDFs>s)tKJ2_dSq@ADZ0i*6T|und#dL_Z@ZZ-ejVcKbPVBzlJ3L zSkC63C|J&n!099#n$F}maE+cwQbAv_dIyXfiP9^l|0VGEfm^}rJsL>C(8MR80v|F$ zm9)jl7V5~{S+MCFBxr)IKw{bnS)!>_|NBHJSN;Mp*MDm!ux}_86YA(>gh)%F$4o(!*E=;783sa!wd(^^u$Y_DT(m|z1*ZL%+)|HhQneY3Iq@pt-w-e zs#qN2Yqq&H!>eL)c>JX?GP?=(PiOoZ{{}sofKQ^G5}cXczNH8~v0<|KS~qvz=GYti zLEYp0H$3M1^lc=6Cet$s@Z3A2xFqR^!&?$3AD`ZZ#`R(~LZ{-LYq=Ryb*y&{4!{ge zWs@UYn)PIOl2F9HN2b1I%09pOhph*no&@1#mivUM zK$xnRjz+gH;N?bL4LhQ^zv#Sm3^lhDzI=`tWM|}!;C__pW{OTXIPK%-+whl-7d9Yl zA1HD$dbZVOUh3e|LEOdXGcggH=}z_E?xBawcfQ^Iuiw@GeX)K3{JU69o+pRd?j-v0 ztzVJ0LiUMiv2J|rR}rfn`d4ie1-gWC4Xi@|!JlkSsTDvB=O1SqfGOou$FCQchqA{eKnzLvQ!D=POCbgG{WYJMF8>*G8<;|q zd2ZQTWA);W;#ODz=$Y`4hd?=N@nZL_PPwNYXV9luWUMQm!u{-zzgZDgA}5sGJ~^@5 z%m7%2861IowW1_XaNH66DhDto3hqdO%U#Pwf!On-q<-YM@MM-P28LLt&IZ%(W9vFU1t+&umj-@Hh~%%gW+!_QDa%op!HKhDg5JM&XE{;Jo# zo}8gOyxQvyx%xz_*h#aD_Z`^ZLjlX#qH9OF<>jiySGYO!Jh##nc*1?-@xlm7cvUF`U6IhLfj9eOXoe3{Bn( zgQ#lrQX5k=_dF`5S!-fUR5cxEJT=jMAe9(PdJIbPkRpn_x)(i^e;v`rf5wDXQ1@8iMO9$Yi8}$Uk-SndtPe4 zZ7wJJ&d_J9Prvzs2TSY&vPdm~>X`p%=BbX30+$YY@8$1%d;eL@N)dOFSv&|# zEx)fJT%%ve+E={&lb+{#@zM%7soGaMu2KM{CA`4E>W>Icudn(UAr{0H%bPpaPnY9{J z_^{%v0q2r-LFSxiMnntD*$`*h7|x|L3;hlQ6WD;5Rd`xx_TdO)u~wu^Nctn2%qxYg9}*&V!Z; zV9~O-9eCVhO|vbaTo@a9{%_t;`^(&mMa>g-qwWEJR&dQJM<#rr2zngj3XjI~^F?-a zWvM5r!-e?=%h#nggr0#^84}Lw(}&I&8#Cfmtq94uGuCvdgTHF29%rBWdOr_mlay?BunPnVdQhxoldK30)Qu6R8_g}~epPAA1ZiXX< zAomcZ=oa!yODJ*RsyxbcsT|>`P0TGo138?S0DC)4Hoh`VqAe3I;+zGdiCQJf;@HT(RGug*3z}%PV`;W*Q8%sU8>I(8S&6tJZ}o3%KK0vQGaA%&SGI%Vmrq z*DlBS`-wpa^rFz#2U`kmJ9;v1d#!igo~7ljVhh=$OlTwecNP!m5>}*^24-;tq@n?x zw zk^h6X_GK8A1SFL=kJsE;PMKH7=kA}esOWrl^8C(sV+2W5a6W6CF=o9B7mQ$5+1U!W zzkU(Kh;nM3k57zDJ5j4f2;N&TPlA2YU@&A){{IsN-!}xXdAXR*WLfZ(r#5Kz(cf~j zyY%hD*|0+6noE40ya;+{+~Mh#DdlyIutiO!n8{IhB~lFgBI=D1KLnI%B&6sWjgYha zYM_qmU2NBYu@NNd>R#_1T+z*#%u`-M} z)8%1P(2nzRHu_vsCK3vC%jKiVm><~AC#ycf1W_zM4d>=^x4k4COV2zdqSgar&B^tv zmGPKA2!H;3eX7>svqJ};2@!St_HaHvJot;*<*=&wTep#FE zyk~}Wl#wrHlq>!x+5Ka=`>AxuT{91u;+B0zmfA8k->nut8*G^uFROd^;`M*DA9N^ z0ble7(u$9L%cVX>Kr)p4W<-s97R3mQ5k@sNbumFlO39XL)pCNGP${_dy^hqE-mSSS zFV=Q{r*G5Sni#;V1v@gA$iv{C^pt$w<053h{&Q)qprF7*>$r>uE?w#dv;ew&^yT$P zn(9qW_RLp~Q?GU#w0J6SLn{&845>;}z&PvlkUu^Reu$VGU!&s;C=}(mC~{)GR6QV! z0*nP-6Uaz9GoBU|r4)NzS>xPi{$pts{=zzoVbxFS0L*BQYV&C^&&3}0A@WOkKlArI zT=(uJWwB4Y9Q6xza3m!4ANPLW+Z4AgJ%o60mvx#~!VDE{U!XT}VG-6_=aXZZ{AGk9 z>t9m58V>Ma2;T|=XYQTTo^9L~T1o@F98e~NKEHbdDK$5cOW)(tCkRnb&m9n4cnw5( zZKka$v4GtJq7iFq7OMPO{8RX=+8M=q4i<@e$08DlZVcW}{#^5MY3*ES(_FD_ar*>d zM}rn#TQo};5|1RmD1Pp&K|z%2jSHVmnBVS`pAkaXXYtJjwgdJ=P&jSs9stNJFD`YR#M>~R!s7#>pj8C3A$aW-%%4(c{|eI z(#{%0CYR|0)fMCnos1W|NdT@eh*8Ok?{&Sb^on4CR6#~4FfF!d5+%(Gi-VKW9qCzf z!9zCUmD{RO9|{_Y(X5UhN|4qBhe@6%H6ahb>89TuZG7Iot34?i^?9Uw?%YjxQ;QtI zn}THtAI13oI^PMe277$}DcqHkh4ng=tGanGLh~~h`L-x|^Wg8Z4Nq;_K8&`PiGM)* z(Z>C{1t5s3ya5(``9XDbNu>ui%+4oFA1yI?c>nk2K} zG^A9i!el~h6}d3#83T#$6Uh?fwlL$uhW+(J847x}fp|cXk{qrw=|AD+kH2QO5J9}3 zVzOmG+$_x`!ylF+0Au4*DGkot9bIPbP$p}f!tul|vi{)o_waC#snN^yMVMd7NPlQ5 zJ>rq^6IW4@o?I!~J9=QF)bl8E+!Fs3`qS>>(O9xvQ*X?pll9TaPcBoObk*EHviJwN z_nUOL4Ut|`=#;rfAur8dP8dXnh-rU4+okV;mi%AcHh>kIf)xaVhBN1A`EOoq+bC-h zdUY7yy;8xQkYn9-O)Sv(k!ZN%137>wRe> zog!LRioqd%TuJqe*31}~K3uN_s9fJiYO(d7iRmk+D@V0Ou`P%$yERWDVB;#9>W+1H zj|EcNAfx3m$!jJG_u`I(!I!xpJ(RN<8Ya&XepdvPzyO@w!9^3awG?>cqM9RQgh70h z$-?5fdEpW7wqt+HO{*&!JwxvqhQ=TT=i8g?t%lXZcTq0`Z46NPt3e45b<2K;Taa;Z zM!~4JB`~P82pMxzKlKd<*}$P6gb+k&l@mE}a&Qv}mdi+(>zx-I${K${*zXfEN>H=5nrLMWO20R{5RPuhO&ef>83( zMzvCr6>>fHEV~`;&yk?@L)JMZK8fAMrR2L_1xc?>d$&q*cxSGu=6ev2PZb^%)Ug#B z=uKktv1GKP#@6^i0`HjKFer{G${fTCq?QfUj2FtZDkttFcrrsASc+kC*v;cNoNTLk z77FB8FK724ky4hM_+N$76D@CgzHbPAF?e85`9--~KrPh(-bxfuZDc1s+F|GinlU%B z3$M0gP5I`0_G^!(%l@Wzo@~zgyo^Xgn)h|m>a-tPD@oP==OSYCALP`R0qpb!uNeXB zbIO#_r8U3kVUBwe^p^9V`nW17U{3{oE(cf{Vq>};U`0wi^{|2`&Zl4wvXqk%cmJ9= z3hy*)%pHx-ajdWyg>&zO+fp%*jzB|yFxFXLU21DZ49mjo8>7atvcf8AmS!hTaSM}N zqzrio_wS#1yYz@?xq?UNyT2Opk+`9tA;Agp`gZ5VAtf2{lygs<8**dzS%0}gW_ws! zTK;Z^5@?FV0*HxP0}%`PfLoB3 z8YvNWS4D75%&UsoqIm{>sYmy3cmta5U}7!Re)F}KB^&zY+oCkiK&ps`3HGdJMj(jomGCy1KORso%*e<%V&%?E==?m zMs9jO-H-jgrQvI5_befslS!ctwXDW2VA_)j=jnnwL$t6NoahT`bD}tVNU9i0LnMVU z;S_3y;Aq99EG`SXSBXw{C90O(BrI`r5E#d9ig+)XTyMWG(thUt&0VWSb8*9AXybP3 z-n!haOD-Sv&Rz6}UVxkK66ZshjJ@_8U0V~GS>h&j?7bl$(z%fuVOYQOr^mmDI+e8o z_aZ-P**VcBcyHc)@qo7WKc8`Q9Q`krD`=(wKU%AR|rrL4fq@!CATu#e|eQPq7_{EMyfG*&(1o1Yg3UDd9XfhkMD z%e3AAo9*c{6mo#8|MREG8f_nbzA)X8K~l$bJ@-9 zRE@XFCH2lvW^nJgHmQMX5d!hT3Cx%_G1xTpVrU$7x4S2h{Ej&r-!F8Mk?A)uz>DJN z`gV&po%H@CZ7%WqU%hk0!!6xk9|M)=zvvR88>7EY-P%ad`p8C_L1f_#xrsVR`$t|0 z@ZD7(wz+c8@8U)Yd0*d204&1#c?>0DEgg#kmt{uJm>99#B7*((OzawmMf1Dwb2^(C z_Di3T^7$9sgB*YLf4th-mEe*<`(dsn3K@S9o9V)$Rug)3d?EfX!wBpk4&eR{cv9=Z zB1@+HyC3s7yX&1d4ur~NBTwEhnPXxhU{|a)RpL0t-tEXBaa4xHsgIi0Eq48r?K0dWy30(^70jcDh(VUy&riR2JOY6&HSS~gDno(sYh^df9^CbOXOFt6=&Y_!pm-#L-74) z$u+${`IGudoLwwt03wXgk&nSa;P+$nXB`EzRTX+!{0WBc)F{uHXkK7MEWFn2&jl!) z>&fdKG73q*a3Rb*q8C$-T3H(_qS1lU%ui{3+~h$sx1>c8iSDh^dv zSYO{{xSnqT)`^s(vDqwV+CC zhMV93`r3Fk&k|OQzm7uJ^{QlKsL+iiRtMi*RpsQNnjqD5Bx}20>cese$Lo5+H#A$h z(s|oeA4p4QyQ85CzcfA&#dH52ojqkK8T965o7J<*>xz=MPrZMHr{rkFB^zZG$Nuzg zsO!;XJ{Y&bdeWl|2NkdlNw3ah0hn?|^KZUw})b!Tt!8BH&J6Y6j+FKIk z@Px)-^;(omdqmZEJQ?4?lNg)z(9unQoT-(cT)vX_4pbzwbr1(dKEf8;omLig}}wKV0n-79aEj zv|1}=ajRBpGGn_2P%yHF2(bVlXYp)jWmcJEk{bHy4I5j65-HK@A*DgTMKnt2x|bY` z@M;edby0M^Axj}*dtSO|n7ZYK7m6l%t`yv~oP>KFe&bcBSVOctm3>|t`r|e6?llb8 zW;(8JvypmDdm!8JzJ9U1iFBoIdAK{r?)jN-+&>u7{!=BVp!UCM?jPi?@6sVBYf7M- zZLU%pH0S+9Um}&{b>ymhY@KQ(<9Zq%gJLgD<|}2YPa+MnwPE>FaZs4w0F~Njfr`Cx zC2(Nng`{r_=j3%5LNny1hwhYv>gh2q<^f(V_{r?Ku)SQZiN3-5 zG7gtVHCKGje!duS?8u+@w!D@@$<>hqaSPp_rcqC^<|nSLT;K^J3k4SP+3Ho-Wu@5o zl(_?#38<%%i6IYga4nw)Tt9q#ninw*-0A*T5rFF9cvN~QhKCy^wPMk z9ndW;dAhWK!Gp=nE8YUv03_f>^GZhL5U*afJMl*+C6S4p1o89D(%A|#(JzxH^cgTy zMv>YE_(leGKie^FoiU+WNVkVsM)=6rW9-S)ji7?PEt}x{QvVZYPMHhQHufB2orOti z-m1mLBWrBnRIb@)%-EQpTOm$Xg2zwmh}Gy_)HSjkVV%$qqxfyTo1P>$57Nu<$djy- z@GUB2vL|q4+>D*d#n;ZzZLU1U;LITTIUVA*wiqu63fBmYMFKk5JjLn^+R(P`$YjAm zcc|ltN1losK^4fL6Tr4q`Y01~JTMh?m_2Qz@bDcHXea~)Zn1zxLxB}d~c^ucjaL_)!#HeuTxc)q!3;>fJ07JA2~R<#;PvSaGZHNLnh?dv`;ZSi(Mo*&!T#P{Xg_rQ=x zX)#zqdnt(i5V2`dQ@$5SU?OuipR4_6k))t0Ak5C85{%-K*hBYSXIjD%qVcBpd`{o zHRJrc0t?W{wi;RO0tJ%qDQ(nNnrTmMdhBQO>AVrW=XX2!OUEU=n8!JwCP5&;S^S;X zX?e%gfp(4JLOhR&;tnBXyHqWWRs7XS*{Mo4W15zsaPLRe{N=}0G@9S@-L}X62XD^E zCjF0;um5wg`uhXmga2kEcwS_x-#?aH;IIMfT*f*_8~uYEecuHDt{!U+vNk-F_rd=0 zFkp6_L1;G&#iKSnXQJ@b`2hwVG7PR2rUwLY0+?NMvlM0=(S{H8S_?ByvtqJs4DCfx zIbZ|z#>To@$6AilmDo3DGmT|W7c3I@?W~G^V@lc{)qGj05dU~GpVZ!EYspZmJu0ft zM;JfuZ@+0Z{k=iB&L+^huV}`Ffu2}ABcc%uVH<>s@nMOLC_elqo@9SC$8Ni3)M=dUs9h zF3(1Kn|N|=towaHXD(K}sPg-sd9MReG5g^}sd!tUS6(_eUOb5KY2|jbw6gjIfH8k% z5+qEr3L6Z-<-?IxVVJ2*`E8Q&>1>$Bv;Yebx1brF7i9x9%@P9?5UHy%{Rr(YZ-Q?c zOo7wDcm}o-!&P$O>Pv`-f67k2!oHTm{^c*z#%!J5Y=L{-u|ExNHG0f3uW2qaf@m$3 zpK6#Hk2Y1x_4W^~H@1`RMdhOgr`{`$C`4134hD5#uh;tTQ_ph%=m`d>VsBDRX0@Hq z4b1J)+TaxrF%bfoQ^<1ebN=E%dTq;$!Z{cbP$U0mVpVqGkvbN$IQh-WB-?S`y-nccXI^n=?P0r|z$K&k4O}1hyTDi?O)r%c$IQe~#CK;V z#0#9EBo;ikWy*67S+DFk1sj!f!pak=39rfGRZNDqk3Tid1k1$*)iueu?HKYbTj^$5 zj>Ra|{t{!H858NOU~28+)GhDQ`16z*E~8^c>|3jHo$HQu*>wmUh!_9KvyRVrzzq_5 zhV`^Yp#c)nf+TMv{D#9M$skjE>J!8u@S{*hxE`5%ai5fUiJJB23zp^0?gXpfb%?!9 z1J8_}G*S-Q^9Ens@#eEds(ndUPqIuq%Z2sExfSNHTLr_vzDYJs=>q&Yb`!w|a@FE^ zR7g=6X?2N$h8l+_1?^;)mC+K|BYPB2v?nIztnzlW&2_ilj!^d%^wMSOXL!#@>EmGD zr+7W;#>tb}^U9cD4^9fM%2pMdc%!(2-)H(cT`tdeV`+5M6Pmt)Wy)CS-TZA3x`hr| zXjnYLR`)a6a-O@8&wkzQRe>G1U*3~UDJzJV{Ov(b)=8}7ow2TnS0_TOa^FWFtS(KR zt+_KA3b%8dXteB}zpl);AH9q;lDBLwA8W!AC((k4BL4h_L>&PooA`v{dJccJz20HQDqY<6!L@HTGEKR(zi95TLiIk7=v^WmP-Y zrSOgUyEpgkb+S36SuTd}X79OmcQY)po3UH4u=PC_%k@p}^tk<_LiW3>)X97#%ruAJLPSCUEiO2FFRxS8!?b?jf}-k$Wt@L2 z@8a#o5-i^S2^SL_m5hhefoH~g6b8g>5$ELME>XpMv#Hj=-#GMPZStPTpO5gPM zcaXMyG*&27)h=8+3=j)dvl1=O=W#48*OSbn%2`jCZ;duLay82l@CG)*z~WPsnSbeA+o8>ZLaR4a##u+kUmawr+U*nAozS7 zV+R`$Q2n7#PRR_`g7MhQHaX)#39HzWB;*VDsgXT3 z7Hv+-@NHDi1oLXMb;wO#+Rs|2R?goM)|dwd5JzIkifHPU^Jt-cY;P;T+fnNFX*p>Ejqgw?MRlasq=pC60&R7n1c3HTn~ zL3GR~YXH}-Nq*FK27G{8stv?dm*&3dkkG%_)~lp&<%#{kKon!5vY5)5Pa`Tz`OmS{ zQ>B8!H`4g~F8`)17=E=`0l+BeQP~3<5eyiK*xG*&{XQ1({%zQS z2j_xg&*oOqLTg394Gq#uC?VQQW*JBv%P_Q>x7lK|0aEc8l&s|ErD>2L0+{1;yc!!^R99&u4Q*~}NB0Wl(3 zDW&BwjB9x&r0ADELM^6hHN4=q>%FCrOD;X15@JC&J`^~Y8f8C^GZ^<|ws**TmryfF zu~3Co2XTtG9!JRwys*2PiOEXnAwK(D`(rP^PFVeE*K7Uj{-7z=1&#g3?ds298A1sEJAVU@wmDjS<1OumKaJ5CUii;KV2*^?CkvG-n9c+GOg z2cSyPQ1(>u0-xp?LMbSl;DYv=9aw7K3p4i>iOL$3e*&&NqMf-2$8Zo#P z6z~9Zu@!5T3EGwdJN3T|$j_Jce0uBJEA5kqe^^m5?1$okfY@9H7$i#1#|L?J1;mjB zkzhb@fdJ6+MD*c z%v8#xf{9bX&o95qY~JT;;*PHgNq8c#G~o0?6!3Ckpxk_qw%U`Z`0%klm}6#~_B!DB z(fk`N?d4;p`#wC)BDAk%=_$K5W$9E#aIBA`c5uJ@Y7GBr_4F*XFplUmz&(WtepJ31 z+|}sFU}+~}!h)cRyymgYkd(=1d#5n#9uQyH9x5(#1CYex{iLCvHI1X9F-gL%!?=6- za+Qt4=vM!t7v#iZNI^+Ur)TEN8>>ZMM_be>T$y)$#E_*0o3}$`_TuBe)xF1UXM}%V zx^#b7`snVXuCL+e;V#por$7AHImtiBmA|FS<$O$Mvn&*pqv~IS{WdAc0(qRg*Vle; zai6gsp&bBEU$)GbfjDb}d{sCWXTb&QjvK{(Hj0azDa@X19gu+0SU9}L>eHo-Eea;1 zVr1JX-d_t@!roP&Bp5GzW&O~`+Gau|X2Ug42|^9ja+N5h+AP%%j9bYUYJL|MJjv`{c^c`SPNA`{_*IPg*K3$ zWlUyrR(5{T%(n7^XAxaFPJBtKvIw@JNL|f)65U;@ZqnGeogr!8C_}kY()EK^B&Zul z;B4Qys&=l~;6@t5WORnyPK(+PG%rj)>Qq-dCiwCseElA0_xhJK5zNLdo8zJ_$DX^r z^^f$o|N9c+ALM{=0Lw;{xs9x&Jt1R^Z~ltZMUH!XhOB4Rqt8mznKtuvfdFVn=?FN{ zOZSYsB}s&z8oc&BcV+;{XlyS+M2vrp;{!n_AF2+&QNjy#zC?MJ+w_Jqmt;}mUq>}y z-FcpL{d_#Wog*CzA!T^?q(v({C(6f5d1k3Dyf`(MKk;4gO7(RP{f!)ehZWx^c|oBA z6g6AFTOi1a;NjYPo(Jj`*W-?tO)hijwm-}@I5nRI004F%NEX(ZD7`+(a1BOLz&%vg ztte1|9)U@&6X}U=U7hlpU|^U*OWUyRvC5pfu!c5w#7IYwBn@u zZ$1=vx_F)vQ5|yTna;l3-%na+ajNavv(e1Ac)-&nGzuZ9z?aR85*&!0dU>e z1PEMRQP+w}Nfgotj%0Oj*1e%!?&miA!$T2>BHgLVV%SC{!CD|@`!87<+e^k*FKcFf zdMS1{B}40FX^QXjx?GfD>0a5=O3}(lEjRS_<;}ZObc|m)S&VLeLi^F=)q6Deo|E=R z=Aia)BR(1r=<|u%eFeSb7UjmTH4G@oV1}3bGpa@*Y5)PGTp(POPhzs$B&tR#6UnuZ zXna28JFckn?GlKaY*;|b?6H1QeAK19`D^>km7bE5NJVAd*Mg1Rw3B0Yy|_uGzO!sX z&1?8e-=VCbZ*&hX_q;!3^h#rM+c-zQ6!k9cp#Z!l!iYbPb`(ZFQTZkR-}2`ELGH@G zxg62lRzMMtPLuZQ3t+j3>{isbBnHfx*3{9FTbU;Us|@WypTMzEBa2)y{P&AKB?(i-{rFlvNdCOJ$lD}UO!^w#=!8cN%fw!>-! z@6D~)VDDWrX7nC8a+4(CS%Fm=g?J$0=Ki9|YXvx2o@~1GNIwsx4Wg%2JT}Lt)EKc- z;6NqD{CqCP-?AP zM$WgUTY1RDS5E7EKtzQ`{Jb!xB9KbmIEm}n$W=Tlz2`7rti8TUJ4(Ah9Qj-6;`jH- zfI%HL6XH~{$Vf@XeM5JnRKN`jlT29>b#z)8DR<_BEs9J0XVA@J@$E=QWKPu?Wsli> z8U4iPh$lAnEV#r5+jfN;-=;a`uT~wZ^lU(fshK>;T$wZ^%6reI|RV+7ha`A$>Fb|IB9s7^~%FaCQ zs6aTFCmjuf4RM4Yc6hLqaxF-IQQNMqevdQH`Dm|AYgMdz`tG|vj{1U&9TbhLJ|PJ6 z$9PQ2=tyEj^VY{TEZoBrDvMMq8fERC1!UOH)~1qQe9{^CKV(P!2RX5N`ihleM#u^~ z6P%XlH%o_H#!q>}uh_$AO^J_*HF>rGV7w2A51ZksrlJx(kY|ov2VnG^Y~RCq;fS=T zcpL983KP$umE+D5L-xKCV43<+O10#@+gT5KT63gY{1{mw4;%#7O^r#Jay1v#oMesd z>JH-x-+I%&%H3FZYhwWlID(CLvg=KDjX&?HPQ*Ad5ruU#fOdEThJV0>{fT zRSq;gT3W8^mE()$sG$-@eHHJ%3V3o%w7v66U#uZON;!Uk&w?_InW>Kt#QLly8T1Q+ zy72CC^vqewmqso|oh@Ss4beR%AW62C^=`OC+qZiYCl3t_7sViryHf^ME%1?U8;+P3 z9ADRBL;GBkW2w)1m)2Rt&A0nbc-=jFM8ZVmfzbWP!=~(qy{lojn=D^3zVP;c^>vQK zpbtXCIwf{lc-H1SMA=a3&h7vcHbk;NIfQ%oK5< zqT-&Jd(YI;vIO_Q+}q5(%~_gR?yY66%$6%Po7yrndFl5&&-?tw`|<~W@dtmL&$-`w z@44r+Nk^qi;0-6dMU=kdEWzJQM}lN+<`UM{eY>+?Wwx6=QZr~ zm$~f3JR-U~_=Qq}eXDsU&i52peoU3?OcG}4^)srkJzP<-}`sYo= z`m2b?sYZ^;y1(5nJdtwRj?y1XFRL}@m$`IUM#pu@8iwj=_~G$G@^`9S!#mjiv?r5p z%YR)#{DU0qp9_vEtz%V?M`cbKEd($JBk~onrlS2g>lzx%i9Pr?Wwh3LxA^gy^`928 zE-0Ej>o&N`&y|ZTpPa5@fmduR;cY^52pR2NJNl4xUb_bMXt;(Ki2xu zWGMCPDl5q4z3uQ)_RZN$YnSV1FB72L??Zma0Fx%cr3phw+rog(vQKyEbrB6!v6fcn%(RKjJlh{QHvh zX>E<`x^osYGAq{%I?JJL3KdagS9Y}LL*nx6O>@DDIEz$X1V8{JnwBM!)N`@$bq^k_?6zy=-N&F!q+zVS^IRIc zms2IvaSt%tF@*V}8-hOYNx>h`)i-v}91qEN3`*7C4i0EvYq@`+F<8m(=Ys0fv~ll+ z;*Z^?>{?1TyMcGFo?b+E&cz;2W)FCs@Hf14xgDPT`R|3(mA8Lxy!bDh{eO^)zDk2! zpvf~1BL#Q{lf$N8(lC3Y0*+Ag4{|<`7O{r_`r&sB%z!*ZiKWU19!5SU7+QXoZ>_x% z6KX58LIhm0*m#C`uVUjL>B>ch-JE(`e8KvU*LzD1@<#4?O5*LwUB5vcH`Wg(u`jG| zMn5!Yk?0aiAlRpx&zmm}A*dSQ`*)p|!bx289vP?_7Gmz6G zDlwYE21kt!fAu05TmhPBMh{Z)R#LuHF5^{59Gx7TDUYeHVV=z7{d!B3kCnM(`V#{q zTT{sspR|@4_GgODzlwtm?FE$jR(ul>dp8QYTjPf0fVhO5(9H^Z_4fd600`ZB%XKM- z@}`0Qq0SbgsRJlKR4)OJ`|)NGdgtuVr4Q%d6gs|%mFb+ZyLZ*j{f_(AL!V$f{p|LR zeP}A8+U_oD0SA!5k8OFwyc}QL+?39aqcgyO3XR3G^Q$U! z6BTx{h!4Z;CAY;fnU}ZQ@*X_lFV&)C=I@Jh@s^~Ds+HOzFKNZ@* zb|h(nc_Nnd>}Fzo5e&`O2+m6sPG+;h*?UPPGlD_aon&jzgPo_|JVbGCI~{Ifc(@vb z!{x6R&n6kSAoz3mbHvx6kzQ7`N$_9T=Bjw`v}aC`P0 z)Y-*3m#dsXH*-0cCz{K@9e!T!jIDfX-wLN4CzqsoJ72!+>`!}w(?0(o$JtGToRtY} zNFra6-RQ6xB)o)>qMbg_3hSksT}Z!JG$?LEFPW|&hf(pvtz!-tYDAQQ9h#8Sxjb)- zR>{X(8*wP@T6K&`#+FB=8PH*iEaXcD3bFE4(Wn%~oUd+_PnC1(u%-(mvriBm4$xfj z8!}aC@$i?-&?Iu!5&zl5)Fg-GuIq%mK6Us{i}k9AEX{k%uevQJ#@YhKnov(&hI4Os-5EKd{&4?Cb)^4*TnAy*oc5NxOjBqEYE`5( zI&Aq4Z?aE`XtmOuf{9{2Of`kH1h2sglRXfJqGdIgsXD0w=X=2D-YEqFkcL4hAUvQC z27s_jx}WLZq{VF)I89=qP%ciCIKTfvDNEv}vsV$(=UFBaYJ9G-gq7Vq+Fv(ckxfm(?^vyh>^hE)7)P@2b&=!mtPMmsBAjc}pXblMxVJWO z)t@r}BFM7Pyd0>H&hYcnP5Ao7vMWpGBISn8Bab|HsY?oLI_7|Q&ZhZLlEsKi@46tf zAZ8dlLxEQV{KhbDgXHWvCO1|rngc7qsRyI2g$o)S0ptzHtHxB3w5AB`NJg}X8wfBw z%>L|hi=9sC;0N$$UH1LZcBjl4)WtuI$oAI<DTsmZ6_L(C58QXJ2+ z2GsqIna|5Y1MfiIJRPQoF$Q2a*`5X3xw~~jg5}`P3f?$A+@3>M=`sOYG6UnFMSj zbv0`6-%k-_o#bBQZ)M-Isy^{QXzu{m48j2y7vTr*_=_-rcHgg}%ndCGI3uQ>qlQov zsh!od#BM;!Ct+|BDb3T2z_-_H^gYPdF}rBU`uD1x$K=v6JjneDz{ZYP-bp0DmIY=4sC9KR0XJQm zQZ&eS$ooYel$4@F2O}WpK}<>%dKT#8+Py0!d+PwJLE$9$s$fe&^Fkd|$jflQQgLdW zA@p{T%($S8bDKxm{f((IeP^qveu-@D%p%z80W{457?Oa5sYQ1hPA=~}GxQt$%#ffIsm5(z zv9;V6H_Bsjo7d=u`|>X%|r-V0@=Px{5xvHDL2PS2(xx z^gCw;)zqIOH)WC&rpY-WcNRN`q`U8|VUO`e8g*H_CZ@Bga0ZWB(jHERv6bkp8)_fx z`&ijUyYzpV@m_D}7^Un%>MquJmB~U0 zE+j^u;HBr0daPIKkyqrtYdU&To_Ocv?;Phs-1Qf47rz?)ja|vKIYVt(Q&Wxq-v8ix z-Tw%;`Bzu(-JzWn>YEU0`!0CuRP>Hl;;7|2IZaxC*RWk}-B^D5B+Ue;@;MAww}Wc% z+TsBy@+QK)*pU`H80q2yt^}h?Ex?FucH;vq9JJyZEd3C`VSD+@`2~KtX4SC#$NNr7 zdKw~SS{siqOMIuO=QF5)Mg7aj&m z#K0=q2VT}h&L!`W%|>y30byaqds&ziPCOniX=_?!%SfsH!ayf+`E88J-O5>F!+aGf zh8g5iut^9)zf4JtjKr?rO7JHBlwCTwS)klk5{!5e^QOlP5>p9t27D#rJXyt6=8LDR zqxWhLT4Udd-+3Suw7n+I+%i==4a+rb9Q-nl1N6K4uYBUl$lblE>9qBiP8dI4H3YLw z8BM&C&q?reVan>qF07$+jZVLm_-l1`U8Iv$t09d>B6+o~8%bF>uJmE zlh$R$8z5RO5tnKZAod=+(^s2k<(KkTSrl56bq>B*2-6LUb`yHpGSoECwP1I!=3~i! zH-Qa)J9~(VnbZ7PBycG;XPJ7oieZ0#aXy1OouR_tPKyB+zp*bE$Aru4QeaLqQ|D zV5z7gfVbyRaw-GXJmgffZ3q41ME*aA#=-@LqCYp6-N8EXU^Fm4})fSqd2d@Ivj3<4dy4Owe93w9xOL?0xRS==4$1LEW%w5R9n=YS} zEP^fZmkF<_v0-*!Y>r4hwYLc}yyE=wJo{?!g7UyY-*q{j&-V{}E=&HL!Y8=vcH_}y zuAUTkXvylS-hyy4Rr*V5Nh!6Ovu>YW7oDU%JVsC2Fr7F}VZSsvlS)2_y9@z_vAT}Y z!DS$hswrc1+zGg%CNx75Nut8UVtt-H+q<$wIJs3X=W=m$_^1a6w7{?lQi_U*tJDf`DR;*-T4u`-+DW!o&Uj;-Q~;cGZ%3m7N_fcKAE-> zc-J54?yvaTS5zk$O*k#poShFBSGlAU7XCj;?mxPRl@I`Eo0b`uuAn8JmYO>6M=Pve za=Nk?kZJfj3H|Q$96+ip7`vSGR=Y~cn$WIH|3Z9n?Acu@053$mov_4;vA39q-$)Wm zv&5i!Q7yBat0!Ig9Ew>oeDhxUXXZ@CR&x1K{8(`VVx zg%;f_QlEf@N>oabnP&l&?yh@a(h>smIng8~p)Cg>{hN?=;jC?MM-=W&?CoEj)8zqD z<#$Yjt2MkLGU~18;zkbliv~Dn)}sB@MBLxYGBSD(Yt#+z@)K{zU7F^&mU1InFZC;r zOqX_#f8Zg9VRb{ffX!Hgs+%r9?(81hGQ7)QW-|c`0tf&|Ek1cEc$gI08m~&aONUUh zc0i-}W_&R%6sTBLog5eIK5mIIcQ1;2Es{+-?1`oHoX<4zKnEcS{ zTKJK9p);=*kAj~MD-V12#iX4CzPB*Dk<`A-|1)a;(cBqp^B8|CelN3Tk%&7VUo6c^ z3#OVIxI(266KdZJZzJ;TvV^0B+2%iWQ7azE4E$nf&pdMyz2o-f{x4^=(lpOlcs$lwztDw6WZ%BF3E% zMW+t8SIj4RI%P}oF^Zz(kytK(p;!lp-mI%Ix~ceq@$&SK%gD=V861k$+m;OFF161J z&T4s8%+m+`HQc?{kj{X`h#C%^HN(I(-K6weeeNO z(uv;v>uGnNP7=iYvnZ)Xf7+@k+LpKRlSMysa@AC$)d8|lHoh!jRCq#eoN_&seUo-y zTqBPf0n2+~P*#i-ap9-#L0y$%9kXM{v$BSl+V)BPP&H`4$fheesWr2JWZ%&=Hfs+NBYaWyIRnt=Sfz}N- ztvd$o&oA8+h?a2$3jjtg7`$r8qs!FWg(^=gG0`bB{}8>FbM;WJF&Wd6%gJ@XyM#4` zkR>XzgxP;Tp+f}{N_r*xqoj+r>NJefuu7tXEVhe8@>A8(TKFmvFP&ke$HdGIk%PwN z*|V&FxjzOm-&!kn{OHa^2WdAbdB!`M-}yMxf8@2h`6JNKJqNHm;$`PweOE`G9ODb{ ziD{aD1u-(6Q07{4IlwZZe&5!Tkp4FbU#Nff+xB#7n$-j&qlGb_Ig0)73Pjhs+6n2gA*tb3*h$0>)U$W6-LQh|Fsinqji4*(vPzw{{FG z%1*^@TaN2(S54D$kyv#puLyf8FApXn8*9uSmrE>{8z-ZXKT0Z2JC6<#*uEV7%)%M* z2@{6)JDH%T#~F)|(5k=E%9c?jnTpiYCzKDd#Z?4CwwxDFtcC?<+9O7Gt^TaZtvehk zMZ?9IWJ=XMX7Dq8s7@x_Az_gLqAc-z-r6dd8>9|G$jb5NacOgN4on+m$Rz3IL00*| z?VrIG%pPf>1r&=N;U-7nR8nXTgfVRbd%&*FcWwLC?H4*PCFRVZuQe$GpGFi zV-oD9jAiwfi?gYfFzT<3rqSVsB^U}75?$4pY9zs~(98RynL^|h^FUbCr~?Me$^;sU zyKjMc=a?(*I<1lkygUt|H&#{Jk9=FVU!2mp_7i%EWe6KjVzB&Zq1lpM_h@!`GeYXj zawv}qaJ?^1;WZPh@K7o?N5enSzbWFbx2HfF^;-?noBC6DTdF$tIOsIJd-M-kZGr?? zuiC;S^w;&Jf&p9rl&fDDH;PdQ9=Yc^4unRy0g0((5Lz?7*%zrgs(@>(R7V+KYgR-_ zaw!XSe>aP20X#)63OEpD`d)aXtjgzu*?VtY^NryUDj)tdU-n&fp8Kai_-dX~2HP|@ zS!k5!PvGmm8^Ob(2s+u`Uw+edT35IC92DTIj?KnKGW3zN#>~Wgn4XQQTry>dAODWBx#DVAq+X zeS9ms*5hUfRh<8?IVSSV(i>M_HON8=5Xw#xL|la!q`0`v& z9N5J&m1jVm%PFPwbuiJWcQVq9P6=kF{@&a9ZTrhN)~4^ozdJC9N@kw(Yweiyb^t4= zH&?P(Rokw(oB<2@3cDUGa*5(O@?wjr$}Z_G>Cf9jbDk`nK2oQ8mloFf2wbJeXq&1z zn*6MM@R(Pu^BwiCQSSc`qyJ+$Od@R(98Z|%Fjau(7&&Z(NV>4UP{jsm{v0-_sn2MU zTL%Efg}uSZFb~qL_a5qmA(H&FHF-@}hYBV}Oz|vKQ?HV7P-RY>Po=g7l^-zx`Q!$9 z3WfkFMGA-QclGXHT@*7D@czK;^)$z>0sPMHAkS!X-UdIqX5ApXQeKhkll&^+Te&tr zf;{DOW88sWJ3li_6-4r&Rt=q9+TDXASPyKEs}j4Z)uZuMH3J(s+P#f6a|)YC(bR!n z*3{Hoc2O##pSik-$tWI3p(lA`>h0@Bbe}_}IFTurTTwaO^pmN}+n2n464VpMjz2tl z&q-BII^|pz&Kk8THQ{Y(ji1xX8qHVMt_?6w7mK2LDJ2uDb7XoU?oK+Q@oW*;Gm`K3tuojbY#$~ zDsbJEUfrP)RZ^KUi`8%VlqnF&!R6{Q=JE$rEK*UjieL%l-3M|zIeFERXxq42WbGtN zUtFTpOn``O&fKPeoUr1y?w#FNMXf)_^_k`_wfNggo==0P5v38@e_1)Tc+>~Vo+wZ8 zK5h7IF`F1uJtyGdd1)&wI-v!u$Le^%*A-krgG3cZ68PXPSN7z1YIj}J$^dlX8J9qa(M^%~NgOi@tzPcHD zD3Y8jD)-F`QC@9f&FO*XM*PHlQR}U%%Qq+W`EeUdRyV(M951yMzN)gci1vJZ@@b}M z|KR5{Nx=VQx_^+9djX&y^&vb{HrL0dO*M&ly-!0#t71Qi_Qe^B*N@#xPlE$M_7qaw zW-7(LLktzO0m$no`x^q|$Y5lgxVn8-$9jVa#&u&YkIyXukE79TuSaYvKT0(i^Qcc9NJvHI$$k0CmHE*9MD1d1rp&J!4FVU2Li6AD z3?%4g_)PJXo{+tiUs+$>xeRCh&|ms@V4AmQV!H?cX^iK9ri!!Tr*Dz>FoOhASX~;^ zd~QRQQjmKGZ#E`{!1}qwHOs6lXvP&RRh*HdkdSGcH9BS_?#lkF~Bg`t#4u+r! z*4kF86f(SF3r<;1u|rHvU3(GAzKXY+{HCHGYzFaioxDfqoZrsl_u>X$^;_^mH&QOvHDY3aoURcds z1z;VaU))f^xwD2n1vdUp`86lggc-CPsfSO+LUACO2o2kN+Sv2A_FkAcWAJ| zECBMFpz7$b-1Mbmx}gO3Jo)X>{U2;v_s{GE{(2N7m#B8~3@j;OY;*ppQ@uF(?+mw(F6`!;bLX$ENtudl}o} zsS{Zjz8>CwoL~A&vGL}6@8+A^C65IF}K5UNK1mA9%}U<{Hm&$SBZ0av!De_Qm*A`XJIRD6`qiyX=Uu>twYl3e|i zBi91bOK`A*NvHL|y|S18*7KqpkWe*x_lXPE@p~E#wWU! zy?7$n9dMA8E^IIYV1Wv;D)Fh0>nbv0Ju$-`F%&-3CKv^{rT;5bM<h-Q%ZE38+Rt zFV{xG2s!&rdu5yJ=A5Hij2u~ z^L`?m2z@bH&`4{Jhgdz+>?27Cd3*>p>dS6V+0f>|K5ivJW8gt^fn5M(w?*!6!8w-Kjw>eohh(eqq@=f1F>^gO+T>1(Y zRgpSPf1o}`v431^I)9%2WzY<)DX_aFg->?7efS34=O6>6qpuQ69)(kH_W_-;2}A1K zj-JFbf9vZN$=8s9>nw_TWSnU@fH7NgC;>WDdnCZgcdm;2qB=iw=>^6;CHurI3|~(B z14~Fz#UKAC>BKMh3KE&4?A%ZD>=XMwMXp>%e_(lLe)cuBgPEEvp@dBsbh+}#gixv0 zd^@$*rtCuo)tlMDzD4@z?aV&<+6EgJ!+Jx^4<+gAeA!4qQG1x0UsVxcbuOW1-of^L zE)P4f$O2bZd|W}?wx5)s_bsqL-TYjOg%I|$fo^7TM@%{IdNT%t?;jb;nr9+|NZIX;M?-F;aBohM z$egt`;6()v1yy{ve2&>~spb7+k0cR@)C3O6S+o}<8>Mwdgumf9xw{|e>)w>8N>$UV`Zb*#zwr~l+~8L81jw9D!2-y%A4 z>z{_rYiT-kS_(Ro4t$Dy3+XRa$a`y)o}TyFi|lM(_f>VkbRvtmo1XzQN|xJCgK6*v zP;o&%HQd5f3!b&n)W<0`y^M|ISb63+{p(7heL~Vaj8*>)!vKAEqX)*sr`FnYD))R4 z@OjynQ)=Kb`$u&|E_ZLsx2NJ!FQ>V<%j3sVd8VKBcVvE1r3j-n@4RjZ!+rU#Fb$Un zG6H9_D6^KclbkP@*rGKJ0$m%&McrL1k`lZLSVA4VKo5q^m4f<0;P<3g;k(bab!^h? zeZg^y3fr>+3(Fmwj`Pe1a@Fbvo|{=cd0B51(|&j!oezqO%)1So6W9--)E)o+OP^ZK17 z)iYV^uQ+VauKGPsdhNS)+;rDz8Q8yQ**F{Y^afrU@*Tyd*BPu5KhCb3dQ`KB*Y{P4 z#9U77k7+)>s>`C*YO6nUKIZqqP;d5h0>ybgd3el|c}Jr~Ey1G+z&?TyQd&_yi&RF( z=PinDX#&Py&aVJW3Zo&p6nk95pl8j!wDf5_&@%HV`(Xnc;4I)c^!Qg`y zYh%{ye=qnvnFO-C_UoyfIdSCuE&FQeZ{zUFS}T3`|32mZV=kw0j>dA)G{~9Dqtd0K7ikAx?2XD=a+>xFc4FT8 z{elNH+g3wEk|nyBVSsmwQ=nb2cQId4hp-CRsD{MRrZG)t#VwR$+ zGk(rRnA$H~?zA(X)tJ#N4gI*ReIvyR;A6Q>IuD?`#WCrgUVokVy z|8a$(fK_aXF3ZqS9%Cw{qJIuxhMJ!*ofSkq%cGq1kNcUXNWOhK2->Sr^49atY5A^E z`-GMPfoU52r1upOC&e!JmD%0EB5$*BC<`5GTdjGmWGKdN8lwN&w)|Utzzs%n>3H3V zROzMU9j{&un}-x{u038^-&>Q1qhtE}3c~75-}zFVqeAgp)m8RG>H`g^W6j5T-8;?-pI=eJ@VgSm4l7ydvp{*>q8z;ZR%e8{J@>T?v0pYHQwh2EZ4;BhFGM@MRdgD$n&!WkNv#e*t9#kf=1B@br8R-RvWHQJA#!w|7A6P+> z`Hm})1>B0sm(1_ityu1DU_HB(E|Dm)v}~oo^_uiT<5YHS^s_8@p^f25uP4T7jbzN_rmdX$rSD1 z1z5>$Jv-uu+Bgh3)ZNl-RCfr&NFp(wb7=SUax5DetaQ`c5oo8JOA>b8Cc*&D25={R z)Jgqyq@n)6Nb!)e%S{=9D_R0>^*5wl^-4b%F z&GSsD)Oyu$QCyO?vDIcAxu{=ZXs?LVHVCey6I}ScvfveY=>|gjW7y@u?r&@>#Fs~m zKQUz3kLqtMIS>s#b3MrS>fg@r>L- zZJM^v|2Q`)%2p(Ab!9*33mo5Cf2J_+i)N@jG(_fkASN|R2@$&7hI z(syu5C(TF%_`X3(Lbjoy@%vdh2zGE*n3n9J&di1!YAk^(LYM^TxaIYB%93YmHI{9R z6Uev<(^X%cyz%nxVXxHp{NC_rYjx;;+1Qxu;^8Tw6FGfiZs*5Wcx9O@`jhV0K32K=UGr`&xLr9;FwNVH0P^eZe_igI1``|D? z@&SsEz*@(Uel`!C?EwX`a3<;!tQ+(sr8QjLrbJZ2dDW+-uZa|;$$x)TmyLDxuFU~{ zF|S&zSJ6;rqA>!IN0Fysj-jS5eKOfU}3Hk zMuMMM`_U6GE&<@&k=)<1woZv}g>Uixa9yvGudeR+83XxGHT55iXoa& z;FprG%cf=91kj=}RVB1q-vtb7)OwG#2p-Z3>wS!!QXUxR?Q%_%&EhHm8&Eq0uka!A ziq#UGKLGZWYqCO0AAWL$hMldn5^FhX;2V5N(UI54rAmU8`77m9CQhJ%HJl2Y;2d$H$6`MHVP-B0-LEp!&j#4^C_HGpp zxRvm)qS%xWKl^+xl?V0$JC7>@#_kTz<=<%>txVDv?cfh~R{N~=k^Iu1U4C|i-7enh z$Cg@@5Iq8X5Ow*xdWxW=yazJQMgg0adA1|RIFXeHA%PUu5t%r!)^ZpT9t;y_>Si2G zt(+7Y95*%&(h*lide8x?54V_DQC}?w>E%6OAOPsz0H3dN=O3an=sOy#j0j}36Lx5K6h z9)@)0w;-~&)f2MV;~dONI6<~7G&_-N=@mhUK~)cb9YeKSE@ZJ+4V)LriJYqrX^j%i z4522dR~-4|?y{<2jsR4W7mS5i_~K*hW}JJl*oD=z?m4dO0ZMVBq9}A41OD<|c!AtW z%oUsdcfyG+Dtt9QsmVTq9QT!Pe26?R{a;nV|48oQ6s@j$856tg9lvH8Np%L$EHrOO z;7l?7IAgJT))u)a5&)YuQ+JM=qsc?hp7XYw-t~M&A|_5=JW!7hPYUb{s~;=SmTO>4T6hCEgzU_` zM|<6`JVkM^GR~SV57!x0^!t^RE11fgW>`zL{SDu#|MGK9ZuK$wby?Rbzc%y!JOCku zdPg4$K%nk>P*m3P!Npv@oGuqyHLPAiz!QwjZ?Nt&TzEAXv^~<>i!Ozfyw4^eC2M2N zxv-_g?R}{C(u={ZN&LQ0M9=Mb0ltq{q&K>z8k&zaa0YrBB%E`%MQ|1Nrq|i(`&qfC zPUmkHz7UKIq5jepxpUh0__o!JKQaR?Gu9r>f1i6CdyM>YrWcva78?$!W{#MkUac{o~pp%bu8s28HscY^n(NuhX8R*5-2<#BI@+<2~RqAQ?{@{OO zsU|ribg9t-2?TGw*C`+IGO0261}$;+ll3BmT)gs>g}OTnLs7q_g&ti@qglpB^U}(! z)R(6xXN|i~ul>*6!+&%S3O{L()5JexQBdPfmMq@%lU&GImcaf~XxdeYkM)av1yCJaR0%q3^d4sSM_2b2g;=9tD7%>sGx+HRiNC8`Ds z`75i%zBzW(pIx(5>MQ$vwAXIiU>Eggtn45bXb<34!BSpZ$zjIoHKFM}Y+T$$&*Nvk z2FdQA#n#)A%@7eu2iST$0Ka*lE~|(xZ#baPv^wgPC~2geZ|LJq7M2K1$>#{O^1+)LDG39p|Zx2_0I#bzwJO^ zJZHoCiLVdCUUOv`@aOnR8IhA9rF2ZQU;v{eA&X#{q$fOXz=$-yIO4c~)_&2H4S=O7yXGn#+--W6@ zRI5%y-^{uEs06lB*SS>ap-aCdX2PdJ%LL#(hkIpKNC=(LM&0zamGYF?UTRoz>))+49Iz` z4l^L|Z7Xqs66Eyzl>I^MK!X-br&7eL(XI$~B!xh>;-7|nLgfcnAr z+x`2`PgV|YV|9^rqbIRCoUEzaXLj}am8y>^$*H^w)E_zCwJ0dP%`1OT3C?lVejnnF zn+koiHOftw6-EyzqTPxlA&aj0k?E{m!HjK&r0H56H(`MAAj+9H+nD`9Efc6oMc_(y zE9xSTVDW2t591!L9{KcfH}j7V#rU37FC6+vcb#2b6wK3o^+nqhMo52?!BM|2!t)wX znAJ7BdzvZitWO=Kk4+_mzX?ej{?4IG{ZGT+|A5;6`TAE_``u_;eLq^Xjf@>CL+Tt2 zaxUz@rEsiXt;1N+dRiE39{@0{hb4jHbt@qAKwVK-6M#vcnW)a7`c?^kZI(SL3#D`D zX3!q&^yIlCipcqqz7Q+RzB=DU3j>!Q5yR)J@uG*|Bw!A}?7r>fVU){qvQK=chJ`w} z#uoLRrF7ZRukSkjL;Akx*fKeraj)mUYwpl|(H$eFt#`RDgivPSm6u@#08_)~NtWBnG9 zELp^;%gC){x^K4{HhlYi@y>tMKb$@KigP-NVmE&_Gf>&&+eikao6WIqaNuQkd3;=- zd$UUpiwI3lbFg%9Ni)mCBKR=6s@cf*8`48VMOcM8JrFp7R~mRLDovosSkIJ?9iD&j z{mr*nn=du27K)8xX5oG!CUrqF;j$N;7mxSPdcD3nP^qHj?rO^I5mNWQFlpqk5#J2y zPSx>z;6_a4$*lZ`kS)&NU)~SwDJ2}8HM$CimxbSRs~cnxWkRZdq&H49^HxMB>Q}*; z$`baw$JRM8NuukHE^;#}XKOM>?|Cc{( z=X8)z8f*D(AP-?4dnM=0e{UWBqkHHg_?@K{)|*E2bPoPs6OH&lAq+7Vza?-%n!iB$ z=-sjU@-2N~9#`@8?!kq+tRbCh$x%en<#`8kfs(g$;E9T)4Tk`Sz{+>u0}_@TS8T

      Wjb7e2%~4gw0$2bQ3~BoT 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

      aC0H9eM*+<0!HmivM>S=kw*j3EYK7p1 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

        6RFGCXqm7?68cN4GBz2f|9=GqdzuMhg!c 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
          )PLoGw9H=7S+1 z2g{p567!m9W z-Paghu*}983KX&RiNp5nuS;uJAw^WGdfwPIvKji>v4&X~;EkX{Qtc^cS^r~AImS4ck^8TVW0g8&H0X^rg9=2 z=*FD(ay%_4135eE1R8)CfJ1C+bkRzA66!{xJeFGEG_c%0rFT1+9CObThmnT=#&Q3Y za%CG_$Yt71HIR>1T~PF-b0O!ne%Nlf>0zSjo+voN3 z8FykUE3YDoD5bYMp2epfZbD@7H}>ci_RTySAf4xknY8@z3gPFIW*v?iU^jc{awZo0 zG#c6$Ta#t~hN1jSwAECEF!jl%<}PFY>LXXeCF2Umr%`imNrERgsvb6^rQA|e4m#qd zHP)7J+~2~6bN)W`ZR6eExu0=zh91|1PzwoCdR82yLeZ{fk&!Uxnue5xwbafXfuF@t z1KUHGth{l2mlk>?!pXQjDsQC@uo4#p&+)~ZCl$N-0aByME`^6$W6^MqdEe#a4rV$` zs@x7jl>GUOR>@J~jCJ`ssY%R!Fo&a|GT}gQEF@2k#w~UzVV@<35Cq910JR(P9^#v+ z?GuAn(rU^-Iw%)JlqqS`JYR|i z^Qp8>w8YzklgRXQt-sz2+0@x*su>a=d?P7vl%K;Q(#AVJ@w8L70Jn%a_%i6r#fbH& zCSG>HdrA?3SFog{EJci;#g;1uDs<8rT28}6)Jr0-sWBq}L=RC}F)xRjKZuEj7@I&G z;nbR5xK91tQI9i$r{Fe)ATj4BwJCeoAjm_Rb~YKry)5}(-yX~D1Ogx{Eb^3?{V^Pi z$(?tpwut)U?KL08bm~i~_B_170YEzIk-C;V8cL$)?-Sp5_;y#A=FafL6?lNSoT!2@ z7+4LaW_pWF8+Gx5iGa@>(8}|e{(o$}cU%(w_dO1Xh>8P612y-+8Msoj1Vvn6I8!sj zz4u6M0V?ioiZgd=R<26R3b*FSRoQlDW~F7rmOoyf_vib2eBPhW+duSwIG+2w_nvdE zNnH)sktm(V+j~~vk#6>~+*#_G zXPLRoq2IMD2keI)=!bp3m-s>EaRb;n;sH1FDf(VP{*nFZTNkega)a|Nv;BlrQPW`o zzUif7i~9J+4CT{@^J6CDxwHdXTa+N!xU@gi~ z4Uz?;jp1;ECutoi^hIjWGpwA;0IhtRYU-D2>N91OP(UwY$;sg|BiyL{1zMWVsbh8t z8MX$N?QgmI+4m+K(k|}X^_VmRKr&Dsd6s51Qucjm5Mh?oHO(ih@lYI?T2IdU*ktI|@8`EFvgHdqxmUo`ZXg^5dG-jD-??z2Jm{i4!2o zn-ar$j~rM6<4M+xb#aUWrN?1NC!4GJr~pOnh8&Tc@+zaD#OO_eV|==_y{jpc`ZC}> z?@)Bkww;{CQ@PF=VT)qbWKTALv-?DB6dkZq8XFem6&jclW>yglXGi&AxX2lPX~a{A zor$X{wfLFE0k97-HDLuGz}<`!*?ceY>z?Vy0rBmOqj1$DpUNXM&2GKF`pbY!s1y78 zsUZzhog#3xI>r2H?4I1j7fxjO{DlV%_P8g1{RBN=Hy~UlH5#<^_E-!nKjf5+-pIaJ#?Z&_*?wqazF8$4e!maWWf}smOHUd1j zR<)>~Gx3f~H?uhnp9l|SSXJhNSLVHs;ch`WI47jYaM$3MM?m>^o>7v!TE(ZV<7%#; z>liw*b{HWAg6rE++xEAsQRB@~D&XT^(%)Z}|62z;KGMcc0f-`{p0XI+K(2L)PZ6i@%PApADO8Y-9!4*dvn_>T=EaxI#l)TmS+DkMO0V}#Lq5iE=4r~z@b!%@-0Xs3?*mpeO+D-bZ$@4?IINxG1ih@_YXFd zXQnJ?KxMf2J_e=DC^lw3Q}jFmEb|lcAOm)>Dfh23Oc9f;B!wM-+fOAaDJGl*TC~c` zq%+)$<3cm_uT^WkaXKk*KruLCSkkZqIbv6(mHNXdGf5Q5=S9UA1vS_`Z?)&Q_7zW2 zu_V}BrvLDnpVgL@fs17h{vE$+R(d8*L8}0lO&abm6W9q?q20LA@Zp)MYnm~o=j*}Y zs~Ha_H1~+-&8Cy~fi8~Kd{8mrB^{#*MA~wLH~|{u&vSnm4XgkGbaf5hWRhjkSX%qK z`)$|Hh0@UNPHiRIyTb=~;WjtDa;y-BH|38S^elXqW7`+3Dm_2ZhV;G0j&r@HYw(F| z6luxJzVKRcbDSVHo>%T-?daU$G=Artw`=m(zvY*$*9E%eBQMm_dJn)44rlG#g{Q-o z!!Q4zx7&Z$)Bpd^Kac}T13;@6$PRNFCL+m93E^OkG?5`48;!Q#rX=JQa_@DjFox5z z+5+dzV8R^_=z{9WU{=U25o~dppf=*+L9o0^0t*JM5m2RY3reS>D>w9w#-E#N-@)F# zg0gma5OhkWw!pcxs4xGFm-hakznAmL+V_Qnm*WS*yWhAL-JKk|&- zbB?aWK){GiE*;y>bl!I?dGIW?yZbD%WDMNDEc)a~j+=XVONzPu8%wuiZj?`MV@~2v zu4O~o4{W_Z!hG<-B^2=Bu$` z(HYifXjG!f{oK`d!qZ&Ovqtropcw4^wL@_bi?a>m56@qDFbOh!XYgnOu=c_)5_v2% zYf!7husFeJF&3PsboJgPmkWf8vEv6G4`d!zzba3gu29i5ZqIN#6w*kEorI2F3d8m2 z9l8U%$ojq9&ww1CU~g*zLTnqINn%LsDqaj<%vaex2w|IUf{ z2Xe9293hDl!7=!d#$rBqdS|qshe(Q^C5iRdULvP~bBq;@K(jd@Ro!lF2+s67fJw?C#81w>Gas*2BwD9lIwMN119hAoovITUc?RBZrFB$1&ft8KuB zr=?|p)B2d%{cI3CKVL^&Ufjq`?D=>qbItB*%!|w96h^(0^y9y_(di;}H=o~?Dzag; zT5tw*@djzB*2AX0Rp4{JvN6fw;%$VGt599;Z;r{Plq?q2QMBmS2Se*Vg)4j@S&}6^ zv?4}yaN%7VILFb6m)Bb4(T~sl(wn;04iFpp^A%$6f$gz|84tSKeuXq&wTTK}Df$pg zGd+cD{YA*OTf(3C!(eO_y^jFGFm33EfPottq%I{ck0c#S01uDta~)_7 zD(eE(Q8m4jx<$_{NCJJfgEyRSL`$=FJwo&GNs1DE?LgNI2AdiV4DjW*(pIPzopwxv zLS?0~22}mX&MMXdg`*N?!SSj4^Ka{VRR2@z(!UDp8%qx4&XMgqHMH6|UVXFZlhqfBZ(h&^vE}Y2pU5Z3E zg&f1sPCJt635K4$w~StC*qfZRSwFb@WTLZ#ku$*MFJMz?mC=d0id_4vI9;4^? zAyjH#4J1z)Nd23)+n`|4+qF7>J$vKI#^hNh=$0T(IL#x;aps{fI4d{ zve-NS)q!CQdORzZo3fl3jXBB z8G)Nump7Jv6yGhMJ67v|YJceY!2q&FTm&29Ew>R~fDYLP1uc;xqniTXIs11*0f#0E z=u>Oj6FF7dcJsT+IF2v5Fx}V~r{k8lncj&7P0Ay+=`YzT3IMKbuYPV2Eb)@@$@y`* z84qZpQimjHb=39yAml zIGOn3SL}aWv2H%*bgWm%_H(LQ)yZbfI?;DAB325PA#HaUNRC&3auWc+a7a!YBIwua ziG)xGeQ3q*WY6$aPI?UlZlBlDWZB@aC|4oZY4IUeT+l{uNuxxsVMUT#>O;@i>FA)4 zvdlz--@3>+=CRrGr{~YBWPyH+E9FscvSj5fWqXVOq0pvxj-Tw5DU=)LKiFctLlPT> zgu5Y|YMzZ6wu)NlpOuhJX<>w%P8a&H;V39Kd?h>Q{jD|6l!GvW{(}|RqIItpC zVgJpc^If27Irqx|C#upYTgT$;q*$42jA)Ugl2aghSActlPuPd`)P-LFp7x+$?4m41 zKYa{T2aCPf%$mRoI>L5W-0*5wpy&Daz9`BGE?| z`gyTiA!Is#9kKiIj&u{+!~*?+hH$Lc>590x`JVz~wk05TX%u`kyU$I%s_SILbef(jUKg=-hDwONxN=5ApP9 z#drw=i?<_U`VF-#7=P$*jqCfLN`rs$Ynh}x8a?%{GP=(^_b&z+?M!%Q&tt5<#P}#eU6tLt=jE0v2m8V^@s2go>n?^Y^K`|si zO_BO zS{!U3X1%7s3f|sc}yazb)X~H|dAs zNP=s|bX~fu3%Lh**b?0NHnf83C`GM7->BL9(kIip=2jwf$!lKQtKtGm-OKK(ye$ZJ zt(Se#yI~@6%u}}f4Zgglphc4Kj&F2?n>&rSh}cvUw_sOpsWl8;_#*H6VA4La&}oUs zTrvK<+W3A8+UfY8TeiVpzukJ<$@K6Jee~BHfuZJ9tG&*9yGy14N4Qv3aWXl;4$=j8 z!+|s>n16@ijQct+rHr)crQ}*6_7;GJm`(=Z4QbI>035qbmqgI%)B;N?OT_mA6A==E zUXPEGk`CSldYbX57)+Z1K!-g=MR_pr#U?|%>R6f}s>{a>0sxl67GX|~uY|I6NdrXF zmBvcw6>sx4*>gHy_xI22{_~N(mg}P-%6X8_%h72FJvrZDRZn&)q*AGD@j5Ws%$~W- zwb9A=h7146yTF(Uc$YY2?}~a#koCy2y9f3Zu8mtymbLm^kNU9s%=C}i9ksNeqCxYT z4cEiRa#C)^)Sk*klO5yZQ`Gpsxb>i4EVc{3h~suQ4?LyF+s-G&HOkVmGe+Tm8zK($ z{F0?!{u*nbO1!M`Ep*F&OS%5%i2vli!~Uf?F$=QG4Fe=#rhSgcAl(5O>;;V2=*X3j z3UqYP+kHXaY7(&35^c2~YmiP6Kxzxq-W|XT@jb}hU#)I_CM!w-un^x<Jy$9$cxLj%L1^@fH>tB#N zhvgL3PZWo%8v1R~b?MdqiGog?AxY~}cE3Q5@8sl08yFxOrQOFP{&Z4RU?;l^2)-nM zayrOrQYy~VPV3kT{0g+r<5eDETAYe>Cgn7La*}@11%A;S4RQ;=DotNx5r`+qhJt;i zhUuHDW~wJ%r`FM=Xb1UH9ewXxyNmEcS{*;?VqG($E}YYV$(O2D%1b<{oH9t@;vBt| zbvhftI(=1(v-9i|w7+i}XnWs7>H6{IzgHkzE=8{$jwd`1c0|3q70VJfymum>hgIR( z{6U=S(d|(k%6R|eFs5j9#v;4IGTvosfP`#aWM`v|hv}2}>gj5Af7Lx%9XM<&9aO8w zmnFKi#Gb}^vb_Pm0~pwm8oRX-EFmk;JmNaQ>QX|Q1nDOWBNTHWKD67u>S;j$4YIIU@Qv?!^{nL5Yd*c#M8t>PdmJ8K zUzVV%S$#Vz*CwYBCE?4uUxoN|>Dbhh(3QIiE+^u2B*W}d>SGi%?d@y9s_q9{ES*PP zY*Y=+l@&F(-iMlYX}DasrchmpHzl&04Ve!EoZcTAWUkvxoWPIEIN4HvfBAYB{pXa! zo#$5%Joip9rbfVoSC3wU_Old%CCSTTM(u+Id27>C{pf9{EWNI|(tc&KC17Gw03!RO zf5Hd+>7=c1#P?662*RH~K0L2NSlanfzw72V?+XPqDY^FP`CKhq)p1-WZ{ocq5p+j+A? zBz8hwX=0SO<@`bwWj1U-%cQ}#yaKq4fb~Ear=h+o ztg_oKMX4(rfMfN8WpuxON({QW89MsD8GK?+R6DCp6;q##w$;HqezGalFa_heB(5Lk zEljb&>Ln#dVmn0C>(^w2aoE`}>QKAx zpnf-1CLSlK1xUPw{>d{trJEF-69T$uVL3XcUG zgt(=ZjhsH;-JL5S6swU%;y+yP`hRb^f>{99?j>6%GnjrgC(tl2yqt>oYG@0)r)SOo&!LeI zG#UZ`u-kzbvQGF`N?M%*ww(ZgZqNc|46@a`l^?CGP0gb8GT%RLQ7cq;*;f3enx)^) z8&r9^I_bZ6T>M_(Om$_Fk5E_0 zv=jODw#IVAP-A<%kNJqzq7PK|71v>;p?DuR@NYq*rDR?e4nJ(~bH*Gr+!(9v)yl+Z z1-2?GGBe!$hE~Vck1K{z{U|U$6;lkI&+6s_c?PZ5cr;n%) zIu`Y;$J06^*6o8FBIxFQ60A;1Lb{vpdP<{L-#k|~=8*)ON;v=?U2Y>R0JAs4?%NR~ zX6;lJoENKyfH>=AsNBnJ%IhZw5V|?OVfXbW!vF(0N-Egmu6j%At0i0EZT9rcE`a!f|1a>@+UotU*;|;G5T&g{_?gFAZWFlJK7gI@T z#*-P7Ft(a*sD-kIwc4;hp)W>MfEU0|E6;BF(ITh;3BV7HaBS`Ls(8~o|99Q>FP5vV z!Y0DrB~ZHUMfdOqFIvFlVm8QOOnFjpCNUD z-mREx_TOAx$#49qQ;+rYm7)yD^YkLCoPyPW!&g|jI__+7v7mId8&2%NLs>1H>=Y#r zyDP76RBYvnz8@WNx~ManWf*ngCpTQpAi}FY!{LvSN;2QniP_(KwNYb=JwHC$xjZyN z-~09G)6wG(hTHz`y1E-kz{s z6K4ATBTDz!b5d^})nF_XwA?5qVcel`7&Bc65Q3vI!F}$)46^Q`hiGD?@mA1QLrS)^ zUx5>A05>M$j?+F5AWMG;DYd-46@UQgDLG73k8!*TW_>+%?B2ir6&k=(_;zd#4mbmdcS0>=g7p zV%JvN%OvXGdT7>CX&r@+EJz2wjY9_aOQ^7sp{0bzB?y6syF0}e8UuvB&3h_=zdIe+M*>c55v z%5dM@QAiF)uSSy{YXRm*Ud^$PFkl7f`}x)|%-8*mS&9q(i>Q3GvY4ot@cMOyR97+RP=ApxqlRzugCzN-I3#tIvkc` zm<3X!6N~J!k5XDO3k2&D)TMPte}UsLUB^563W@^Ev6n254-^afecVi6W{#S%#x0p%ba zBjec%Fm95B1o)f;7PAOQUc}(>fvHbqF3I_A7=`wg1}?S}U0_0tqqx)npMwg$z+K)v z%V&i}0f6t~pVbeIo}&ysOO%j!PyQB`c_@0h`-Qnzf<38It6$PB5f$P*=XAv z_NUGl6N0raK2got=kk8LcYd0`AGuwx@dxA$Z7_>wQoK9Pj4%508ii(p!rhU6=Pmur z=Bcp7;O_eY71f?w1wNeXg8+kzYGZYF>sPNyU|Y{REfp&gd!$P(pTuIZsl#teULw;L z5iY2k?q2Y{@hb~ONCj6J{bLP1fk zvOe?{for0}g4gw^K%%dfprm`$>jrU3cF%WoPk`wD+QGh5{6!&UA!!4g_F3AfNZu#8 z8AOVYH@(?5{;IB2Z+}N2A9+%ct+O{jqZxfL36#vWQ=eS`!o*KZaXUnnk$Z!++n`gu zN0(s^g@0COT)@|O)liNnexz}7J0FxO5CjCzOrcz9X|!6l3qxmFmsl*@U9GWK#N-BN zDgK_s!;;Y>!s)cLJy({;C?ZVQ=N#086q&-fQXJ`#c0^L++RnVo!yTh#SS5>|A|5g6 z+g+?AaPSjfay!ddd7T9nf~d(ajEGrVi3J%2&G9 zkT-ckE+CORC0dMV`FJvLua+$L@%LTh0dTbe@FpxLsX9R+T83nc4;bakD;$j?dFdR~ z@M>KaD~>b$EE+z32iiHyYCSe=RQ0!bQanRj%?54jictnYfW1#MykJ{N}yH42i3EI z0^3ykLcR*KY4(+)np4*x)Zl$OP6EXc!>O9`5L;C18i71qyaI%C67rTJ5!THEhi>4x z{QkYV{sX!F9f06hUGi)v={VqQQZt9-j1XgoEkixC`=)aI=##7QvK*3=!ZH}6WZd@K zVRJjbtPSlZ3~#ml3fc!LFk*o#mK(3Y*ws>~fb`u;CB%yvK-~3~_tP%C6p&b(>dDoX zYw$fmgU>j`$Ifu>2jqkw$6W>kABGN_nuKMhT`#?sp(0(paw^Y;=j&UD>Ri2vHS1VH zG&-A0-lgK2hLLS@RX~QNs||yjzyHF=Z$doK$oSNy1}>mhlOCMIsL2wTeTTI57?%|*LPY3Rd&+iiZ->+_nhr? z!DrM)V}jKU&>8c5!F$c+=K<^)-YY0mQ`CA5)POb`jT=mZmlzZ32l9@`{Xj=7@6dE^ zg`5TCgi)Mu-_0g?$yHw?#XQE2{kp6D{c$;Q{Qlqj**|Ne5a$c8m&9rRxktWt=HqFV zOPVY{y@Txs(u_kjzp0f9n>FTz#2?v($*HHuXX(w{ZC26=m?$^R8oGO^ZX?uSSYzbv zE8p}u=Snro>djMTA2O7Kv1WPN8J_PGmJP=PPtthij&+iXpXgkxcqBz;(S~OQOm(es zqhk}g)W85leWYlu0+%mU2Y_92FcJR``bp{wV8N*F*dbqkoJE#lmG`Oa2_>bCWX z3pP5A`cMJNCT;m5$`O`7934HsOnT$G;F62&dBV%0^%sA2zCCLDRaBCD^3RZo6=nk{&an5&n5r_dr%J90`g@PaauCsvu;7(pY@D;n?q^xn(tJ5rD3qm6s5q{r&2@5N_N{S_sN4 zU-(?|Ji#>O)FIy91PdbC%67ZQbWY`@KW*IhPg%VkZ>Zo2LqG%=Z+gS#FYMBoNnuUvEv; z1!LtO!mJ%rJ=W~%#*=%~yyB=fR%lFZTa5!E>^c`~ZxD^DI30@Jk3apx_s-GF@SIs4 z!*h%+Q{V&6YBf<{FayTBDnePz-T(PI`QILK9K8KEY83P@^e(^{Pc#De#{ea2%j(jpCcQUKIO&7N@NJWj??W84Hm9fgks733Fx7D81K}(-BK}J%(HTEv#ytW~G{M ziSI1j<5lxU|BY+|wR0B&k&1c|0h4bftlsR#eQn3ZOHJ8t`#;jbsV0_~-H$4Gv~Dhr z5(cO#`*i|A!xRl+T)-&1T0shPh>E7%ys{9q?aJIR^$hK&lD-Op34BV~ASXwm3ehyq zI7~^;&_OTNJ@zqaRTMmxY2hvW1blN7uN4s$*?R^>s!YQ;0p8~@}`pk=> zxes(SBi{xGKdV^#aL?dGjUkCU~|Qcf!Mov9dNTof)8!qOs2 z%{HICJW*pkd%j5Bn(;u`_)E5G`my|*8yk-9jxrW=3}#hXw$ovTm?e+$j8muLZS3iz zB17p8*zx9f--Rlkejw~vfU9sO=HF%vAFmeg-9N4K`TL$OR2hg;IOaG7)t&`_i&dFw z!e}H(Esxc-2(mLD_cI5-bF>-+0BtPVZVtVh?eVpXANWb78BZRa^o^Kz>T~>(cP`;7 zp$mrN_>YY3G3v#*WJw-bI<2Wp$7f*KZcUv?>b+^Ir_e+$mbB#DsA3tx zCixE<6Ws^I<<#mOl^_DD4$@*54t%h`=WTU~Zo80=*#Wp@3J8L(P4p#Ue~>V)>*yzi zDSD2EKk4RaM0t!xU>xS{=VPg77wl5-y z*iF`QarU{%ELDGb1FWJ07naFQ44r*(a$)R^v_>Kg0MI&6(?8Z5nJ%oQC!+kLU`>z6 z7GB2UREw|e+0@dNsIp@GH;wKS(@rS$uqchIfBV9|kP?;;eK9S%CgB%u<7__iI(9BW zrPStF*C*5EuL`^QsiAx48n7^57}(q&XLWy^>#17IZ#-{G3@V^kyys_?rit5c5AEN&3teT!g7!g>_p^GuPh~K93ke5>91D!ua)z;ML)YENb>NaNcS!a(Xb>mC%1*IQn51s9@I(_E``rmuh|6;fQ_lr|lNx@ni zg=Q>yw){AOk_*ic36x)jbH2q;#h?8~N@(8tOirF5q87=c#UqThV~_E3!}Eq@c=*t0 zJ`5kiG$!6YwWO9O&WR#BuEezN(!zw7HOt4z5^CI}-f_?P;EVHZNe`oYvMC2ze4e-C z#iSRiO`p|a*1WJ6OD$JFkID(#+)Op64;`%DS&sZe%8!&;*hG_bd#>Cn;P%}JyquG7 z^YwT8n`W>0A0|l`#2-jR0Cf3`4)f7YS(+YPrQ?QUe(-IeOKB2pUY-Y|wkO&7H=_Lm z`^FpJ44#)(W|+=iP1X)-*@H?cvG<)rG{3a;Ej~8hB&?qnj}5%%EA)Qwmv*Uo+H<=L zwO=p0HWS5ma1yNSZ*x$hThUVsg_`d%Z^T|5{Mjfw^ssdT?h`ltB8>jYUM$Q*IF~ZW zamH`pY*Tk7&h=-)qN4H0UHS`{BMx32lq3u8=SNCQZRDv{*(g2tKs<5GufIYahkzkp zTjPk&;HOw!DxuZ5&6h6=qzONt+BjYg&O%*yC|go1kn1l&&oP!bJg}Tz$7Ob!DyG#X z&?zDZl8IhZ;q`I5_1+|$ys2q@sYs8Y{;*DBVs-=dQ~tnes?5|+soyag{P(rZNSpoX z%Cbmeodlq7;dGKbe%OYKncgU0cEGUS99F&Klcuo=04M8LoqaO*v*((4nN;_i*>3nP zWS{)hFY>88iSRqyFIQ9~=}QY7>$~L&x7sfd zk03};gNn+^FkKbBcXie&#di;zPqY;Uke3QD3afGKUTqo)4scqu1G-b;it=xE0Cgb80RAWm z&UI*i^3f9et&4qlDW{ih=9C-#$CQpZ+NiwNFKP#e#MMRmk$&IZeqV6Y!@>*3C|LF4f&x&D(FV91Wzz`7~(wKSYR!;AB^;)_cm+* z0Ki3l@bkOc$kB^3HjDE-MFxB{wP$oG11W%uhH;m9jh6Setc0dmI2^d=MtF9nv`5t@ zJ}>DM7ERQiQX6}^+SAhC^E#1RvG&QL@jCLox^JF09gLeauco$aE1K%2V2j-=ioL^I z4{Oht_IB{C@|YlMiz$*$T{fwoWN*0tnJm1%PEEMiQqN~HcdYW|U8M*6ufN5e1y)!^ zOonkvEx;XgoJU1>V8UBIeYhw;#p^&uD?OX<5t7b?Q>g$P5I#O_fG8wz(nAL7qa~uD zf<|J)bLkmUrou($8OFh-pb$K7M97N^i^EI&wkn3OHXc`+8Aaw|Y{+=+^kmqhhv(#N z5AtxQ-mmt+;EWqLl)h$N+*g=eWzhVUojo4{QtGsha4A;U3oCE9D1!Xl>tK3P$3-Mj z5TJottr2onf&t(SYoqL3L$ZZwl=b=Mmoln-nqa_Pv74XH^1s{}@eyc7< zeCV6TiBBUk2ga`-HT+Up_I?jB@vgF=IeO9fA;SWArjZHuzvaJ?M+S#+4Pxqmv=_0s^s!C3-D^tf#vZLpaU?P?^7RltQBcQVj|4dlsuLIAGP}Cf6+GVZ}HSz%`Y|=fW1r%+^4Fqqnq(Xz&Fj%_IyJpsSAw^JE5a-fQ zu)8Oh*+!e7m#nGPtbf=ah=JyuN!ck z9tsb8gr@>l{!H+i>A#!i>&C8EyjG6Bp(dCYqNk-;oi(KgnVT4l7-nZl84UIxkIkbD z4pSy}34g}SL`_8mtE!I`3cq}Hn(wxVuoMZg@Y?;LB0xHzG=*3j*iJzaV2fI~J~{0r zGfgCxYW5ZiSj?YooWV0|1%tdmdPk7{{+C|`@9*EbF}J_D|Hb2fz3cvgTxl~0a?dQL zC6AL$Q|er`qZ1=@3zmY?Y3%x7 z7`L%czj_i>&r`zFB?^!-8!LDBI4#Rf`9`B)%Gy&y0tF=`mcIOhqmW}^L`G9^yIiI2 zE@V;8m-Qs*I&}1hlKIZD9A`xv5i41Dp=9rGE`lLydJ{9QRfWp(`RD1uhd=E;-mf|v zvwAfCwMy9jOx7;q;%2S)Uvi7d{*-0`KpK_a+*oy^W@1SPit zF=4g^3}^W#*+&%;2{$47R17X6YMe()twLVc4e;I?^ZR4vox#lbU}hI< zTIw#n+d$%|(_&sX8*6{G>$?)x`tV5vEhkvwmD+sq#b=h#6?_pOh=Yj$v;{b39RrfsaF zjpWyvHr7FjU|9B8s50iWtajSsto0YLI6v=-N&`#;gS8ZXyVR)w!r}Vm?8-708+P*g z*J;O)y-bRsc0~1y5`e;~Q5s(m5+H|Jk_y13A|9@Qk=J^E)| zugw`|cUr4J^Ok2U)=NIFJ;%J?1~izrrlydF*WP~P;P*4L%}bSD7-U0h=DI$x?c zG{rl@FG>E8PzFvZyDU_DuVNeWvW-kL`7pbYiXueC?>TT!i3@9Ir4Zb?Nwl8{LM)j{V=@^Su7SGF+V5Rwa`b1L903zU&S_cgP zmk1Y#_-1~^n`rXZHh}(+11Vx;A=|j-eNC zO%82k$(~$zvi3eu_n?b>ROp@SDBbJHrquSiNJpHurDa;FBl-H*>Euy6eaG9K>VzpB z;kV)WKc))@%@7U)mw*+0X{;<>JcVr#LaIw{1&J#Md&PL(GHgUPJ@MYI^-b&WP1o|N z+45rj@Z6U6v|IGwf_RTAdP2*5EUUd1y}T39Ubw%WoBG~tqOc2J{;-pBOdS>NP{OU7 zpCk%Icj*@I1UMXx!g{ZmXz0B5=EmzPwqf86wSv%mBdM_nC~i1+a!c`L1*yS!h9&nddA#1PBJn$1|{|GsX1H)E0LZ+`pML~BWUE=&<^V(xnNi07ez?z8&w2N@eo&#eY^%4e4(+5hp1YO0^Ds(iJ?; z32|Rm!G+^ym`4KJT$1}zyxs~JFtU;!15*HflY9j}#3Es_1ldk6D9-Yu^5Luf4Zo@a z#KY%P_y5T3e>`8Q45kGSF!f=E$^j4};h2jE7S0X8P~*AQ9>L0w$k5}6%Jz8VxeJafmG9T^6@e^lgrt;VY>`lAJd%eokKf!48d$f8`p-iixM z8tDCb%*W}3=w?H0-D43awKFROe)E~vh1Zzu#ibeCRpZXY8+L?KA!Cnzn(aNDy7;Zu zOI~&TD7Ub0m~`WD(>vO3e#eKAo)z#$xh6}Wh;zRE_k(w`0&2Q_)at1-pSdfs z9d#~e`ELSoNf{(q#3a|mpuzg2?WwM%uM?(uu-5^;yn6Q^H`M-Td*MGUx8ubrtign7 z(c`-FnRN*YXA+G>CJ!GARs78m7xWeQ=Pd^Tc@R18dN;3e2{~nGWC;M*dS|u1V5=$4 zeoYQD&Q0P`m2#GE?wa=}4vJh!Kr1CTr&YB#bA!-@X&XdB=}Fj<*6ih)pXYPML`u~v znTsCzT2L?a>q_U*&`RsuucU_mSage8UvawsC_?4ILwt^xqYFMW7enu0ElJ3T54=2F^wXL!v^wDfqc_X~+dF!wNf?S=i zrRLKd*Ig7^A&w9!DMwn2aXEur9w%_&P_Pbt)AML>pp5;Wx8Lh8Ohhw$02>t`SqqCh*(G-E(5o+_Y zMJx7&Iz;oz8kcu5h}??NBXj$8SFO9QG_7}OcKsJWmwzMr)EQt|4Jp7XIUXbh*>3K>rGaXD^v_) z0xgpHF?eE*gd^Jr`uU`SBI{`}UzR>MS=OEok#h4$!Dr_l$LD$F5O5O#sEPd#`=|H6 zs(&K}C1u#B~z`;yssWiNyr(OGJ-X#}yb>gR*;hd4s zlCw%zWavyI@y25>FZe=hY^E4150tM#A5_+@3+<;Io<4@g!~^&M5Pkl}>y4($6G0({ zR`%NF^7@Y@^x;O@jwiJrld*dun2IorW?{T0)>R)$l^=d?>fhvVA)MIKm=+QFa9z+3 z;*9yNbKf91|1#pdog~~ZxoI$>QHQ2M3;e$8^&ulm2v##OI_hQ&Ve+v`iMH<+0Kq;i zaX%FBwyNCQKUEk1<`tX+m}gpIGX!a7c><`}kb!i0kTKX&{ZP|`)8B>%Bz|i;U`H2| zB|LTa@Q5xvV`If9%y^pd|IzhcQB6kCwr~QWhaMpGgc^E6uaeLVy(3*hM?q;SC`v*J z9YXIKdR3_^P3gTC3!+jLuz_GhA%8q){P*5-?z#Kvd&o=nm}9NI=2~;Emm%7MEssvk z9LlAE^L0XeHd<{Dac;uryqjwMy`5EZQ}P0rjFsn%`;ROora&a1cUQ%>|eZ(Y7hY5KzFoBNP*+VHCP6s{?#F2=>5eVv~!T)^>?pxL2-2@>?) zL_J>m0)klNC=}LlI|%qDizq)@f(A3vLbnGVJt__AdfQ)~yYXIL;I~Y7W9nQn64!z$ zHs2Vm6)R8n0}>4I;9P!pvo!6qLRd{mb7%6U9&Ah4v0MT=E|kF zP~PNRCt*3AR8XV{zzWzfGu;RjXUev=Vx*W|`KvV!1?Ee6;Tz_B2#bpVj@j+dBJfMRDF zQJe|2c!=Y9&qf1?M;JuNw81i%RV4_H*Gj0mq36ywc+}o?#^W74x^)%&My!v&<}{|s zOs+Wz_$ox}RJ^>Sy2j6I;~pmzSMkeGI}A~cc2BS}l0cvbEs#LwBB%L0yOsELd^NYx z5Y0@7i?XTlo5`Dmo!lOW72XA_Ct;SIOO#jFE{N;{F$uJy>KdaQ%1qP0%bzm>ZH6Yt z+$@rd)_BwZg6M{sJygTRtHTX)rT7_)nq0aPi#1UkxU%9Dfqv#iSjb)aMQ|u1S(O&W zu>ndz7=aHTU&1n(fuL}K=B^65mmniN+$ZOIVhdqd zfmERjJ1Ca{?vn0aBk@OqQFqfLATNcbPeQS#JrQF`i}`yxI@x;{LRYL`q{Rt}k6#UN zR%Ox=LkgYTkGm5rdz&jgPtqZSUz=3W`1&&DPA5&Mw;(RlpB`KS#0ylBviUNkk6B_)kURPY2vWtJoWQ)9G=kAPMcxB{mRMtwKGg#$GzZ$Y1sv)bF$6ClY8UUV8Q@Fte)^ z{#sg5cYpvq++Z?~&w|3iCOtg<5wVhVAWIs_agYfc-IuU!)|G5=c_VB0LxEIL1iyY? za_{-ChqfNC9y!a=HQus{R8}EfyPdE2)B=_uj}xf#DhZ7%bx8(XU+(>;o2@#p*nh4Y z9na|KGQNQLo|wWeBK!NdVx^9wX5$;VPqlaYI&85ptLuaHZ(#$n+{T$R4nbcWl_$vLOpZw80&+sC#Vc~C5{ZNi5#sszG7u3;fO^{yDJG`j z`rDiE=qClNBA5Jed7XWZPYxCkVyZ3xta&!w7ake!&7t)b0 zXwa4Zm>G3acC#~x%oMVop1$VSzg{+6@=@~tKMC-P<$fFeO@>#gh^wNXRFB%OcG>Jp0o_$KOL5AfF%0E0}BKJNjC>!bsy;w6B z9m;=x^GovxpH;@%;4=Pg?R772G|@^ZAZpZP+GkzrXZrOK>lR;oNum97v_J+G^<<2} zKw9S4jnD7_j49h-yXbrsf!Z=mEVwT{9S4WA>JHyiJ`eW#@!p@PhzxAqte7$5$N+QD zAV@Zt9@sqkPwc;_MmZy~d0|bCo!(Kui-0$E2L{uLKgh0!{?QXO`EHlj&jy=kna+o7gyt-JHb=fcnkD!VycTYk@F*0 z9y@XXy%644U-Vx7)Icy%jK5QRIKVjA(th&v&xj+`_VI~@H3J>@9m9;jGp5XP11-r$ zU&J#?4oqT$Y+WVdG0OM-5ds49?tziTannSI0>3Xn_egID`pQHlggyPT2R)4u#-0_J zo{Z#V%DjX^qBNI4-U(quV5w)1sos(U8Htbm1Ru%rrRX(k(Az z;toyUbueu40)zZ-A~@i7aVQx-3XU>}ys5Y>N-W6wcQ;$R3YF^-X^pYe@3D2gxNQ&L z{~^Ktd&>F$rg~FHS**Nf_Y)%;y2M9B6S=kYsD_59L0vZAf!WXG3NZj9zF&slt02Kv zlw}-<__lz77Xar9*Un>aZ#!*%(??0|&xfb?-WL+Smh=AmtIbaBF5Zg^&qAGPXA76R z@!v%DcZnI5hB1Q|9Hu$hWsicad9=4`_fA~e>(7@I>A7w%y1s2Jj(??_dHGVazE{DLDP3sjN=q>niQZMwK!j041-*3zTl`j!&w(GKeOy1Qwp%p$8)h$ z@>OJ)q{Erji;wXee%=yhonNJ#u{ylH)-~_Nq%L!(UR;unrF@_7G*YAR3o>JB<-Fa$7!{0Zjs|_ zd=DL(;~jY2=cT_dNgb+HgoYIR>lT3ngn};>A)KLXm?9CXgO6T`W^%DA6Vy(e2qGG> zm>B5>_zX#8l0jv|@v}C%{qy~zu;vI0QDxdHb&Rsz5uE>)#>w6PR=56x+>f7B+g9pO z@RYT?U9xxs@BsByw{^=OgN%}ZA>%J0j5F|VkrwOCYiXh5-t1&BhkclvwLXcz!s z9$uJk3+^21L&ht+t1cLcb5t0wGXJPnaf@)J^;1qILPFtmMj1KFGxiA_El<|=KbP1S z?iEYNqr$>EZ%WNwKKJ>Yo?-^V$NiB3?ajZQ4XUS;{=^-<0)`ei;LYr2!MYDZ4hbwIsBBzZElq4rCb0aezFyJ}*w=K0&1S#;YcL<}nlP+SjGG zWfp9z>~(AVY5!^QsC(p15^7FGRXIyz8tW||51-`wH1rg;JJ`cfvFYZCZkQ7K5DP(I zFID|jYLU&i;zD{~$SW_N8~@yP(zrLM@gIvs%M;E}37%8$-_<#Y(HktHN)t(pKrU0p|oXto=x!E8fi!>IdTKvL#9Ja3=om z!YtPOOye!39Co=-K9nIKoN4_0y4z%n!AB=4JTzH!BO53~4%^UzzbyetF&dq7U**ub&Twj2?AgyP5T2iFZE~ zKo8|KEv$$$r>gBor@<2rv!?Ofth!HLOeu1cZ-7zfxc`#f4H#@D7Fws zJP$EZrD2G1X@gIZ?+*?z(9h?@Fw9RdnObW}$M9(%Ls1TH&r`e0y}e?!O_q;g?f2l) z944BA6dRSZgk9@~;n9=2`VWA?sLyI?$W)z7+)L%SD(%UWuW!bR(#6b4 z?UyGtJfS+0&j6q_0-l3p24qw%P<*W zu^HfCjueRVZ$hwYbJNmssNk-DiNv52+oXK}02KK$Es)KkzF!C>=55w2WaDt*O)&!C z?9DOoDvO2(6uA;?Q@3E>Gy?qWctLRkBY#ZNJk}kz&t3^SO?gHT<7FK60}VPC(EZwb zpOrBNC@nu0;x6QRh7sBfPfWYUIW`qb`P-mGImrnP6z6hA0Nwx~0$^D0PsJ-e zjfCV20@dE9Zh&!v7#TeFxXA$XPHX*Z5g6_O0jJq;dy0YUMU%?Wukz@uIwY)rb4YKX zJRSpE1HjMm&VpS6w>--}+@BC0^ z4cFoDpBx--$~RT1&*U7gl#0x?p)-9uc=U2Tga5-;@8w1hr8D?dvlfFwvyy!>5Dz3E zXsS)nar%Q;yP9fB-866O)u)Zx1TL}Uyq)?D{WQ#$+!b(j2fwlRmqPWE7RSD`xwKWPgSwDY7W}eHV_I#Nz|Qu)HQ|X zO7TCWI7iKXdu^gvMvLl;5$~_aD=`N{Ne&2Mq&uB92QHop0YN7_c!UpH(fa)_92AfBpWJr3e50ts*Z+xx-B> zb9K+@Pv<)Aeh6AZ`d`zxs2wa)pi73k9-pg@6b_H=Rpdu6oXhANp8^4Zyi;boCdw-e zkRe{H44IReDW?aO$I0)&>;|OjfCw(-=fQW!+&a1@n=BcdrlxgQHy3Z#XGlnv8})S+ z`|c8d7F@pY)n;X$QIK1j-Q=Br@?B4b!XZcef?E)4rKd1ct zmLx|xm3&Ba`~cB`nkBXwUd|JAD3xJn8(D3P?|p#5<#8<#@H3<8hoQjv_r=Nfhk?$8rT9 zkoHhaJbqykVa}Gjku<#C{O7&%x&3yU>j@7WUJG&=RhtkZC1{pXc|B@+;-bdY|!Hs zFm=(F6_RuLZgq@=y`e-V3g*Goxkf%W)SJ527!H#TSghsXYYFb z--y4MwEmp{O2nMaSnOUviN8|p-lKxr+FY4b>az*DW*bD}lo+rb7#Cr7QqPI!6f__; zC@-ZD;&KO@1C8M0`dtOM5;94~0m4=n*~Zn@;AmoLC~;}Tj^L`7C*|FkmLE~i`qAQy z_AbA59lP-b^%UR9CYCG3Ca*m@1W)8X{-C3mhJ5~`tr=EGne^S==%RdxDrq57KAt=H z^Yg4U$Wo0nqkaz>^fZ(ZYRbwurU#Nz8^p8&B!R?>6OQz|Udd1V%O)Iu?UV8J zRrZCTerdjac&D<>}pjpb~Yb z(Ks)cR+}+W<{{6bKTSj5_cy8+ z`2JGPw`C?Je-B#|ojzd8S#!|!L+u_PD!?W;pErq@ zFUnoX0MPhOSg*(_sUF1E@B8~D&2tavJA(T(XcVe;nR*|Q@Blz^BFYfMylzXFksAmx z@7Eh2y{s1p*FqIWa0CoY_RP;aYsS4;H0DDSS=tttTyU8C@*FC~tjm((u)tObm$(I; z%sHR7CyCGPwY-KhlS6gpeYt;omoD9%XcV_`{nXZLIXl9mBdUS-H;fu-Dof3Hq;6^T zF}y&7H5#U{X!UoPq7ArRUA;wFV$h-=iM1*1bdCL+PX+)OaTVS(@N_Z9^acKg;uHdl zpu2(1CCdUSzvQIRjfQGlOOEwX>rpgg5C?YjrU=||d5qwH(d<5xA3JYh>xVGx@N?Nh zRq0os4WxID{79-Lgx`|paK!qL=QDbGmXW%4v~KlUP>hziTdWX+!LSbHto8(-bf5Bp z{v5cQ0S087fpH;B1_79a_yhyfAhbJyR!+~eX~l~q*Hiy3A-Yhjr|n7;NFBt=zTr_V z#4NZR9*KtssR`77vfRdGh*_vZj8_!e2sEBB#j;XsHJy|b#jT~k^v0@mi+4uGS6|!~ z!R#7aLeC;{oRhm3(q`cDgdNySZg_fKS!H9pNP}-|o%h3c4O{_~94$$vhsVSIT3{~u zxzgGgu!N%WR=XVc#aeBL%kdJlnBh?pGC0tL7Zw7y0QIvN&;a|TCYk+wd}mm&T*{Xt zE6r=MymJ-n4seB(b6C4dO0Y}PIS&vQpXlu3*&s9Y5Ypqcv9Q3Q}JH% z#|wM>ngjE4ndb80epBr{@ybpw;nGH8C&B`Sz_@T~-#c!?w9 zeN5Z|{a{iNSiD=s^SMNIqk-O4$_%CC-HFgU%5Tix9oSI&JFe_Ts+TP|HAJ9tgbAkk z9>&2`1Rzlh`CzNM-wXqBj@5nuOeJ@{KbA$RyW10aW0U*K?vQi{lHF_1A@@2Hlt{YK z6z@BQQ|G_iZ_3epCP>G7F6ncT{(Tm=H}`#i1P>%h z*r?g6M8pNpYg2vx5&HAw{Hz_@h8vSdC$03gDGw>Svhj%rufqwLuMu6!6hsPwu0R~a2RwiOH{JV-q5~!Pqey{750p0KhL@0AJu<(-C zJ(0ik8Z92Q=1K#ZNd8xs^XW^Tpg)cQ76^cXe)4w82oP35I_FIf@0Zs44@W=W)3ZM$5IWVVgXwX;j5=Tv3#DR3hG#P{Rh7vd`fXp7j6B9l$k z8kQae+O}S&Loqw1w@>=CmK+`^qnBI;B_|}A?mgj6p1Jd+{kbH`UGVkLsgOSB?ClMw zO@(Abw$E@^hYSc`cFC1#^Ft1Q{n?D;^QzBdPo%=>>z=I&olah?Dj{>gxInBNBMf2| zMR--`z?l>jKy_|lOGV5g%27p#yc7q(4@r8f#?xX2w7FFH`Sl449Ae(ZEX6bG5D731 zNtJFk(|LYOjJCnK0ukMsT=?Ej3?ONR`UYqL0C=V(0Sd{;&S#u>C?X{{Av3PQ`=w{; zhx=3|;eVVgd?Ak-Gvu1qIt>t3$&pB}g1!xanVN#>LBhDq257!{CZlABBegF1DuuQy z&9`d$Enb9-(Rt-PIQ#dSu}CRfp20GG?Zcq!wCE=zj8w@l)NpHjd^hG%Dq!(d-Ul%s z!-D%k(tEVXJ01pP;tyQEfI*vx8RtISrr|8JK%GzTYHfQhXT<0q36_ag8 zD0ry#1wt1xvz6!G;GO8_)2SlkFb@?Ojxn#@mT2dV6Z0WeGG#tGBV!V1tbmT__ z5@`=KR;%pCqd4MBi=7E+eS(}XTZ=&T!dE0!EA}LS%=C$NAJ>jz|MPa=v9*{Bt`7Gq znk9l%-tqbxnvOF)3ctv7g$UalmG(n|>NoS7IpqsS{n~Ce<_o|0*qq`AS1Q^I5v>L zKD4i}Dl_wn8;sICmx3)uontPQ*FJvg?JK>6zM{z><`ru2Ayq)gi%w4ikZbR$ts22@ zrLxsp72W_;f+epj>*W=-V$!qkHfZ6A0#9^7xQS#K0W+sj7x%NBV zT3R;pePI(HsfLELdkc7KM+fb55RicJIv4=xd69EfOT$4!Kiq2B_;#s)ZP;fa5?AiepDjx5 z$2E7#-M1b*Q&Hj>u=@JJxa`lhMDK!j$aZO|lqGzULVQ|N(WL+U(?`B%n@g$BwuEo2 zi0Jo!QbFcJRqy*~e79AXK&TS$s(Y{@Lp}A2BasC(D(FNYLm(e>J(|h325gdToZ$I6%p^K-dzZQ%(K}3MMtmYg zz`RT~l&{sHn)_HMVx#&Q3%AoB?w#-_XV#TVweNOQJDc8E4L9F*pCu}fp5MIg8U-;_ zZ?EpKw0!<|#>39GDVDf2?wjOCVY!Rzyi-}#GpQ9o+YPiyz}-V-fnkOGX`%tacZz(= zLPks%JkBF8mGC?bZQ+0-{Lce(GyEkj%YR++@o6os`9`QNj?XiVtK=;8>hc{V!(eWz zWO1Zs8}gVYKT`)4ZCs+#hOO)Eil=FrB43jsa{%%}cHr|<5QvzUDZn3Sz(mU?=hgc^ z8Ik-)fcsxj&Iw9=%RRHOA5zj=yj|rI7SSDuj4P~s7OaR`+Royc_%Efa<6)~v3l=CoZcFENfQsu2ejoX3K@)wOC`_hIxCAOOw{>^CeOqO z0tNuhqe;^oP^b~DtX8%-9YGTkzRkNnl$M@8pZYY2d0MwDVR_;Mv+TWEZ|`+n9MVR@ zVI(UZiNM~!47EYq0BK-fa>Vd$R2so9)xhFbagR-Kcf%%tY zsi6B;K5T_hmD7_}i}BWai+7A)ZC$mo;yBc@YVQ5+s$5xbTvrH{6;_^NX}N5l%8Y!^ zUmr+M&*2O0O4mg&CQ*)!q00^7EaJaCm6s`#7%vN<#T!)XWBB-t$N|=UrYw5T&nBK#prkEh zC>NEsPyfnqGq&*GUH32y+!SY*w&9TH-hBaX0TI%ga$(0P4t#HMFp*>+wi2rOXSTM< zPfWi^;7i>_;6mO-4dZKKM=$C$8 zm)s3iOjs&BLNBxpH>g~6PC}TN4qDMLFr52c z4^Cck~)-(wU=KeKzexigOmvd#R?caC|rjk=l3x8|TzE!fg<{ec|moT3>2I}AQ! za~$vdkepm~Ap@h)B+Ur`jkf8!kai<6{IrjFgo^OZQuVbuTTYML-zO&v=*ERs{1wJJ z_k|9MO(#}CX%#S)4}-PYd*Qy-1$Lm@a#PJ)*O{l~JCG)R$i3CP&*_U-fUb}K%$%zd z5DrZ5>3P#sRCUGm#b2c*o!a>9h*{~BNm8V?cZVM?oDpmi&XDGniEv8PyOyh zO;{DcC{idK+f>a_%g;w2b~CRV@vfqAX!ho>FM+-i=4M{k8`@V_tMu={P`nOZgAdt! zw>+r|BafCHpO+^R4nWM|$hQP{(QNAEIXbDyx^96z=v2rox_aRokrS#0JkLwFlqsN^ zG7#?y-D~-|U2J}{M~tXB!AKKtkqc}Pj=&eX7N|M%%MSLyy&^x(Yb^=;!fl5*MVpL; zFSuJyNb03<$2|9J@X;>Y?mM}*9&H^Wb44^`=y&!2n4V8w^a;{^*xa@D=Yf~&^RKG% zUYT#6v0HR}8GAQ17IT(?{=t}~cUEco{P97F-0!M~%m4c|M;({5KoY2Go9h--7aS*Y z=ENi_B!utlgu9GYqY28+_r-5B2Tp5;<(~1nb+WcH1t8j#}#?F&e$+Jq_ z)e6H$-+3by$TTcPAO?QTmw2H5=s-WF#;dxL-VBC2?`s@7gasw4&2L`2?&}jychK=% zyJY^MdNYJeDI90|9z{ZCqLawQg7*8hfca3>bc3!GZQ`g+g_*R_gV*~X6_l{A6}$hq zeLnBhrKxbD6^ay4#~o~GuGvPdyLX_oKbta%|N2%uT9x&?%Kj;_aPB*osOaGl2TaII z$bk{oUx;L37K5(W0)tkV`E)JlOt4sSaVaUYndF4=T}*O`y+!cMCq_SOaUANFgW~Zy zirI9u22aUyHr6ql>5)TN{fMG#>F4)$560KV#|s^5&tSy^@?u6sr0juDS5H>>867mM zHZEMq;`C!lv0e_1j8r?xe0*firqR`W)Mpehcc@Z}D)f>Z=7}nB>1Sjn;f51u`TI=( zFY|xU*P(%pZ*^f%#CT4aKTAuz1&>9;O7eJ$V&(9_uHwhAtdS}A*9xu+kN0U{G^gS{ zmZWo`M!3!G3eR+1JAUDAY}n>E@d@AGBQ=W*anj{qBh1-vN;j#9-MZ$Y{Tjg~P`}cs zDsMOy=$!N|aZGUj!_8>STdhs8|2yXW3v%z30PNdgR(83j`VeA6s)1kXA}5aOE?47j zXC$$kQdc`q-L8-czw4Ej_=+4|;>m0yCSYO2n{2>=lKXOhg4o4rDY_uSUd#q6$^Ot; z(K8C2bmL@uShM;?y*1lQj_tn6Qr=ZE!oib0+S_7K!BC646v_UK=& z)xd-Tqx-iwI#ok=B#bd4 zMr}A(O5*RA4AGw}F+$@(yuW8*tWB-P1YF#H=ZKJFz$WWu+k*9r^d4+)E@hp&2Cv*u zNjhD62nlEi;r2u7w95Z9-QM0bOGDP4H|&`T)v-RWwe{0F9yHG6@9>Ia!r&@YR6*8Z z1w45(PuBMLDNp_Q3*HHqn?f%0h4a^T4Vz8&4ja11X$<8I-0)bwgMR!=C_(jhJi5Jv zpt`wbQ2eFnl~bp_^v zGx>>omN&R{Jb(F!XN)Vh7-%3>^taAQamd7)G8!TLx@sQEleIr=fO=OF^#?H`C=I`A zo1zE4+J|+swQ;^P&HIgE+Yvuz-2s3Y)hkx0E;hr(f_$?Fym$67{skPYza6hJrazhK zVf9|l$)c#S(kCNv7gk(5F+`<;MCG9^7Hf#J`7JlbY0nJthkS4;aqS)2)xxpy`+<>2=} zP$T~xPwGkLfvbvgu9bAj#)c<%5YO>ZX}xU0@2;9)g4V`$$I1 zlb-9$X6yD_pGPuV;lF-v@aL-==RM|BM=KgU8CUjis}2tU&!_5NXX1eP65S~BGZ#lE ztkeU9aP4=9IYB1Ic?@EUvBJFm5s27?081Pa=RzM7y58=NA2YvDPeSTJFp?=b zO|D}AJb{Bw1W51DI;uJ^JhGZ)iw!ee1s@w1=vohrRo>B-TnxNIz$t>;rm z_VyH!2VlhXqzgVKEwfKH=-909=QMH3J^EbbTB!3J{`hTJg`IxOLp^0}6MJCm6v_5h zqSt9F$81^e@~fLO@nT=+9^UvAF%clCpHNs+`{PdJ=Vhx~vX^WrOR>+)GFKm5%58Z~ z7UE=5xsdLa>)CQYWg$4da*(r{$6{#)Y&M^rS1(yNTm%)6OU_CQc~s|N_F9RS!R%4I zNX?aEvp`HmUHQ0hUk!FtA8LH9m?x>h+u`uB@C5kPIcXlN6zjrSv%eLp>==xqDe+3g zBxaPCx+Ln%@>cIMldH|e(@b;7pRKc0o%B;hP>Lnx??(z{b~v&-=U%`1|IvE*&lc;| zA5YX>agi%X2Wu(e9(P_kh^c@N3PAtED6rqnP~5@+iv&b+Ov`|2 zM9@Mr@wDf74W5>5KMbgX3(7^@I%cDp!G-!J-j5?Tb9ubI=XBb2l*SH5Kcv!j!BxH? zE=^-MV%u(or5v8-ZhwdPXMB16zz`?V@G#{!RGaj8Ush5c_dNc*N{mj%v#%eJ_k15F zT%;_W3Ddi_4l(S2?!SCbU4Y6$h${LWR~(rhJ`I? zazpWn6Q`6#)0?YnoBT9O!GS@EMLFXljg+?Q46#qoP6%DI>0cJ~DZ9Ir4pF+`MPr5! zz?Uy!k(`hYV(3RYRoQeTY=4j&G&B7@+#iADut9nu8KLHpC~>|m9;Ac__RfJS@D>`* z9Yy9&O0OJ-&)7b)7zx^9b2GPkb<6eAeA9xPaNDW2UDQ?uN=+WWCtayr&wAZEduYy< z3&b|l#Uf1FTCFw}l0st#fS;->z?4Fdhf7Tq8r^l8sIR96(IYHD?>5r`tQmNdE~1R` zluYCR&S^gnBz-g(60d2h-|RFDaKxnJN=5a_-Z;FAmyxq$pfzZAFd^W}__)n23$tZLqm{qQH!KD8 zPcBpTfHG{(6}Ks?&A;e_@X+CtYa+mMt~z$=b1K2#05_7oPH<@}FsU}(1Qw0Jk#HX5 zda3&HFI0M~N-tQg6)#gk`dLONGtLWb1+Z8wY-cDyPC2Ksus6nFMxoJ^=@=439xlx* zs#9?Qh#J6T@Dx?R697e|;?f)dPeSoPmA@=oxiJ|;CkfE<1~`dHi77}4^Owl;nyEr< zti7cM){VCPl}D#x8&D(?xw(bmCa`83VO@c%%J~CVBchfoMz8$o9EQl!T0R$`%sqH{ zlf~;n>W+2ec@v|m!rDsN;+0$W(ftJe7-EfyT6DVlw{K5axg7gj){~!FzjfME8>mie zw4N${+45U^QnzKtm_JKSSj`xAF(PT410uxq$dSc?yu)u&4!W@!cH@LsIYo83e+g(c z&8wo*uj9vM_{!bdgJ6S_Vd-&N;Zv4F%|1Ud4u zo|N0ya$B>bo%lhfpDVK8_r8)99Ld@ALA#r#^35-1LY9Eb11{w@HMuJv=r06aPUF4V zA#z3M8mY4IMN~?XN2YcHx1#*MLo|ov4=ujci#~w{$%p6S3AEseh;y8q4KbIF{QV4R zgk_4X1fU6?&{B*!8(=G>p|7IVNN>ol(>iA z>V4O^zl;^NW=8%ztf=w-wZuO&c!?PO@VS4HE`J|=U`f}H$Mn{q(zxFbpO+Rfy{$<_ zrq*Y8fVJ<&6n8H}nFs~a+_#0C;1Y)^OaiUh9S`%vmu>dwSQz7P0X9_l*;sf17}_K> zvEunU0|Q`=X^4FqjTVMhGXmoVNBfP8=(37(lqjw=jDjiCg7ZehwK_BZFM-#;DCciZ zgMNG=hOSf@^rR*3 zsy+wCE3J=-@sreI@;w^Ff`g&Cuw=ipMOFRd3h8$8Y55~(r9woccQK)J?Yh*8fO1sg zf$Z>FB*T&n6X)fjuwDL~$R-(v#i(KJ?T&V=yGTl_e0B)GB_x*eV`cR5S*}>)1<~?C zH6@!HXOJuz=c^ybepWlQ7tI5ZNPON{U4$5z)fs`r9WR;q0Mjg>JSZGubaQExXIg-V zE>L%1`Y=Ksy|JVVXYefYhP?)o`Ue=<=tb4U-HLN^#IasO_~AO4n86X&sKe@1d2cIV zytMa)G*RX_>R+|-kckncWfoQi;iztd#qZ;+DZ^kVSH|1)&WHi^Ta+{DaUfkKs!*fr`bF6^Vxv z>85AO9~!Pwnrn0h(%chgYE_>RQ;}i4hndZb4-5?mYqDpl9nsBgP2t7|=Y)aM**b^k zO{B)uiEUGPADZ9h#ebMrqk&a4~>K$ZR$F8QK5d>kG@y3DfH&+g`* z)jd%Ig1nA2!1!$j0&npO$nLc@zzT}1j>%SHPb!^Wu}Yq|NEl#V-QBQg+u$`!NWL6I z__B7-7FVp{Yj2+~mGEl{K2w?{_W_J63SVUv>n+|6a{C#BerHSETq+EHSRZff`KNG* zEs;dL{h~Pb&y%9y=Rc?OQ;z)pHyih#c>7Pt1s85p)i%DCjy_5jb}0c9Ls#u?awY29 zhv=>tSc>`+rW;8P004DPXKRfM^RPaRh)$<_r|3%SVRt0=Gr`wx%iwjgm-(!0kJ~WQtpIEIh;g! zBH+ZtmAn3Ufa}s}de^W1T;7P2d;#?`=$~ABzJ~LZQ?+}S^^b#3-&Gi%;DQPL02(|9 zpZU^vaBfHVW9jx}G11@VzEr?ms=j z2}7w>2jfbHY9+}s6Qzo7OU^)?QDIyn0}r4=%3llsPKKrm2bk|7kuApiZLH2Yet^Yi zeXY+ZmE5oazrkA{m=1(1&Hgp3Pa63)k^2Acgah)s9A6wa=nzGsaZ4uXY*uwXrXP>XMiZ-f9^(^FTf}53BVT@dYA(8f1D}=@%32` zD-(Pl77K8e8j&qNgn7jw*AM0=+rc$p-m46<(^tf}`1pBB{8hAaMof6XMdMd!VqS+1 z$9xXvg7Ggg&j->d6V|f|4XbD}O%@SF|$r;QFSz%)q&!KT-XSCq~1sUEQ`@v=y7lyb^`zs?$1(o{rtG98TKZx_X zNG-r5jk(Mz-*|KgUx*#?9Unf=%`}q#%b0V1(+a(vXB#0kp*VOP50hFS06pFi`QkS# zlD&33;&=;EXEuHm)zE$-KSEja4@~1ip0Npou+*}dUP7{DZ80EWK}PlEu6&JDzl5@|wBZhhj)kI7>0<3*_t7flIdBUXwqni#y_Dw*a@XX{D2g12#{$^e z!rs68*1Ti%jPl*Ao)LuL;0Rmd(qv2+Nl@&HLtHixU`;?fxrx#W2gTvvc~fe?&9dpT zDQ~3%(x1Uc@=)YBgCvev66Rt6bkOLoy!UUfWnYEysPXf%8-;2SOi%pU`yr1iKH5&% zK39d0eE3t{ojuCdwO{AGba+EPPAr^jR0?a3xR)(q6%HNvm@A93MeidXRmtQfhSuS73{H(JEKr2M`1`G|Z79gqp;uy$;kt))57(NP>nA$}EZHG#0 zZ3V!EV{{Ds=7M_%+N4o&uyPdD)ds)4%bT9gSQI+LK0U$+y(3tJBL@tsd+#J6yC%)- z0R#ESCU);!e$X;NlM&q4f>Y(9ORcMq%C%*6w4p~!0RKO}zO$jpaN9DC5Fnw25~_jF zYYHVGXlS7Yqzi(Y&_O`DU=0u;K)_H9MS2&Nrht_$RcRt9Doq3{*gF%?nL9J*o^$8Z z`v=y$pS{=KYprj1MQ6``L>reF=9~JLqq)D3bIAaJ*Iyo(8_?B@jP~E!K5lmescy)< z(8Tp?BI_q7CljK$h_hOqDBlM4U`P4IsLa|l4_zlz_SSpM)#fEq5-XjDBOV}n>V=Cn@*yE?FWGZHXTiz>>-U34{M2+ zJb9xYU1Y#zex1b~ZU9n&M(LE`jag-q9Ndt#D|cvZvh zvp0v&J;rqCy44SBVM7|oo3b=tvc?a;wR_Qu5;2B;U~Q%bZxRDyBA7!x0M5-hX#k)& zC-Ve~(zSch#TP`OExwQF3k)uEK}L7ubzVIytTcmSofrV7bQRWo_N{@`)`{K&gO*w4 z*GfoiNK5|i#O|&rpj8cE#sZ+d%v*WP2@qaAo4vz&iDw5Y2->Wn+$m8R-U~po1Ye!5 z`+byMjQZ3SOb&1st|yzX!^Cdtjx;J~tn?>Zoc>Kv6uWZBw!t3cQ*ig3Mjc;tf&{Fn z%h1?f{HI1#p#vhkr}HZ}P(=Gk*Zo!bDSx1 z2X*I6Ca>XFmDj|+;lx(}KBd4f)5-bdhZfRdGr_dB{PQXbY9QJA34xLzBD9rLfa|l6 z_g$8v%uXO)c&_FqHK#S7j@+UHrdn}XMW7VcL6Zm5@H&4Z7Gpupm}YG@v>}W}SmE-7 zlbyO(8d!WF^&Yd_A_Nl#53^L5u4Q95%mkwU2yi9g{|iYvYDiQ9|fpNc5^I&#PiW z>}fvu^d(C%-Ew48>sp-JqwSLn`}4wU;WC5zqSo`5H8mY17tv1<;z0b@>c#cASVr;VctxT=A}dqFY1H1x<< zNR6E$fC>eGP`4ikRc$+Igj9bYu@1BmFKGk?QANsAhs&Z$Z1RLH31ec5K`}^r8h~sK zF77TtfH>cb{nD^fky5l`vCuITKxMKOZM#p@%=Sv$IN}oDFtFTkNy7Gw(*|u)NnKRR?ObD z1G|l99xLzn%1^O`1}c_jTk@%KC?8_|cDO&YqZnsNFT{PP`ou<<0!p^rKl(eHf5XLH zO3X!zhUM29P_obiWozu!3(Ia)I&0jWZf~n zFR9POLA`X{?Kn-O zQM7(QAhQ)-l1Chk;)RoA@ZZHoms1RsD8g#kQ{jDh(!zui5|d1sSH*6R3@Y|ED`oYS zI0dA`_6R>VO65J;L@?Jwg|&8OBz%|>iCl$Ht9n}tT?_(Pm9`;?{D@*vC@k*XubAE4 zxd@@&1TmQ#|IWw#zmQw|%B6y7j@+0+3Mt9Twl~Isi3A$Cw6qx~V+&QxCLI-AoVYKm zE+`>z`3MAQvp%g@0+syCBMwRjL5oM;%6eb^RW?6A*!yXO?j&5>eXTf-nP+dH^NjM^ zVsPc0w2{!D1WIS&aY+W>30I9KBV$7`(Nc!RFk1jkDJEJayUW>$wmXVN7sOdnbNE{{ zFD}WHepu?f?Vuj6dh<@n-LF>@->LWQS52tC8K-Z{B#}*(rFwn^xj1LB)0&k_01`?f zdMle#s;)WnV}c~AdI@SM$+^io%@~3b38bN^Ft*=|sw+@xz0;UBhXM3TZ%It`0Eq#f zNx2P(LDKbjB)4*<>(iK-(mGldp=_r~g zk_^>Tc3ZO2aYl+KcZsr7Tj->YV?#A(i~XNy-b0ZFEvG6@r0lQ0{sK0+RAp0fnzO!~ z*VE&#at$w~*&D0^Y~QGt6i1B`{c5$ zDpJ&0S8-}-lS?z|8j?(P_KJMpak!X;ruw5u{Ni3Q|@*9mODy!=Nmj z-*;^T!mkZb=HmytrAK1vcvC?NNQ7(eM5dJ)l~W-63X;fPW(;&W#y>?j5PAgE8&#m( zW^M*i>f8OgyZfyQ{2UMf^S1*WBHNO2CZGI3ro5qzV^+ zQUq)IExRaqdbb@PNcpy?8~MHD;D^FdOV&P1cLUkW545Y|X|WVjZS823gvP;KxpVd+ zyaE@grs~;IT0P9IKQDStd_R_ggBG+FV1t_!N|vB0zML|Y|Bg|S!$zbs>S=**l2ns; z{dXt_oqOF&T7kymn92e5(l@+0D~(Qe!_k*e(X#>5esf&u~1GhT&)*<8U%;< zJTQk-4h#B^@UdysUXdDJ6xMA0zKVdBNO7=mlVUn-5FYF~z(9S~>o~f*o8rXV4esVC z2yXtLi`+kYxxy_jpomRG;;*umtDtpqZ{_X5HAB6XJEQm$4tNemDFn@0oZctLMwt;je3eY|>H_!FPl zhz8|Lrr!Fu1#Z3eiE>Oe&#at|ZReGI{SB9Rx2M^udUdkDZ~A(b^yen(=_N51Jhsmx zyV7LbY2sF==C@ExuM^m8R=;xXK&XDqY?i5BCd--NjRk4f3isjs9hP0uoX-$meO%?F z@N95rMqh@9J~}d4Kset+jED2Hp;8SH3z|<)V~7N?ZXZKvP*i43E3fYETILA6;hW-b zGR{k)E0XHxn)4wFTl@+P6m*ZCcC(4KotYn5l6<){tN=5U&HH`* z2t#XbztyyPOj|Wd9QawHJ~6hcPa9pK3iQh^}oTFeV;MA{uW^z!1nc z6MdvAMcXu(sBeF=Evb2cj}N;_a7@Pa)|(g~5)8q{pkZc#f3i&4DUm zb6f9`FrlAW-w62G4t@cBQtNt+rn-_YFE475cD=q#VW%F1a@xs+aGLp;!gN>4gcd9s z58@^xm?yYHq@dESo-x+wkU$6uTBF6UERQ?p;|{aok!K1qZ>f;(oHnmI_1SWb2$wc&&Z6R>E;2pNo(WgiMd} z`Mat(gGJl6#v)>izYs3*R8y{5Ep#<3rE~HHHMO%FO zFt+p`7~ubE<+zY*3zOL3LhcB6e9$sLXMmf0Pn62$ixV6#)6)CVIdxpy)<`bri7ib# zPR5Sv9mYA}u(vdPlj_c1~*<0r7I+9-DF)0lu+{Uu0;8|`ci?}^E0Uq z8Pr_By#WU{X&mkl7kqoz>AK}A#9Ukh-`ein5ztMTQ&exqB&{y%FSMW9FNoz)D4tHt z%Dq+evH$3~-5#JuRaFs{rS7R5azXlOlDR#<_VUS#!okQA$NEe+$&l>k*!oG@t20Pr zfOCBbN&KKjj@n>AuCe~CtkqQD_aE+568k{pugWxM9YJNPSJirsH@av+tr==ntve!0 zGI?WXH6mmR zTBARGzqbbp;4AZK55z~cL1e*IcNlFCvOVRtDuc=tfTz87mGlQCM|y z`6)HkbnOynWZMZX8ydh}53WS6$!KGd9~F794{N*uQCrw9`+sv>`X}iA7P*_h0Yaas z_74Sw^y1U}xFP2^V#P$b_7GgHz9RRKV2hCfzdK2s>u1(0#;K7 z&uY1r&A9o#RNw49?-yv`bLe`1>c!P(>1O*ErDdO2+xkx~mb&>!t}t2)&yM7!8Yj%p zUjNy1xC*66ewMLQjV(lm)CAg@xvWFP4a7<)w&~_aUcs_1&x~r2X*J4mo_I<52?0y^ zer5PHm4b&mWWeBp*6539?8=Rt=DN$hRpgrRgZtD8C)fKI^@6gtg~i3-BfiVa3Z~wQeX%ujq2XD5GwDXh zZf(2qzcDmA9qKE5F`w=XU{{=>Y;W-J9>TU8tTS{3kcUHDjIyqmd`v!O;_)-t=!=VR z`xZVAkpzF){%51}Ddj;(%1v0+&d&xM7-6$2I@gtX>$R@giRh+K30>S1EFg+t0wths z;EQ_+?$(A&A$Us*eac<}yp6D_j4wKiw-MB{fj_Ft_s$dy0^`wY2lr`N;Cn{q?1XK$ zdn;Yxya8z#axqpm8iPxL`Z*|?16#6-=__u`zHC+`QEe_o0kDpS;z5z)y-wSeGe#xS zQiVCGb}5xClgPnQxD&$hv?7XtKUUYf~ST+>#= z6-wM`Tg|e4VHR*`9y3|1fucp`DGJ?F8Eg$upVI|j9J=n#)R#{^wobffIGwSTxmO7M zMWj59^TWBKxKS1|EBdP}hrC^T!}qD`6pw9b)&aMC_p8nY8S}!<_rJHZ%+rsIg?wc1 z75OL-j_vP%8Y**oEo!6tW?DK}GRf7+%CF=ChG(k7Ea{`rbJx@Z9me7ohtg(!&P~0U z8;V}PPos{4mqw~0$E$t~8rCl3VJMRlUXaw3UU3*KAPGlLg?@O+`4e&CyeHO)HWS5? zfHp}LPu2UOyIF(&14a#N^`!#5auXmCoTtsYS(S14<k}SC7P0Dv`5d{AMIoInwWvk>>SCMPWFAX?Veu@J5r zgGUu)pDKWuYH2~N7nsF;YKNN$y>>OtP3%NJU6fDiQQvV#lgo~>SF+S%?~gDLxP1|K z)yk}T{|G6!KF8b9_G*Ns>UhmiFJ^}JXkTJ8Gu@9!oTn`vD^wMkKjM-9`ntKCUmzxG zMNb7i5)#~+jqgWRna>5()wO%4RypG+!i}FzOoeAJi4kwT`E}CHB{s3M;JF_8;RnS* z{ndl}7#|}>$G$Dx8uMJbcWP}=4Q4oj9h>m$giplI?e9R%lfgLtiBAv%U+UA?wKx`Q z6R9Vv^wcIL5IyOCN<@ircMr~KYB9q?QpiGV&0;_t%X%M;TNGZH(m#&foErB753t{3 z@EY(BYrMe^Ul27|(o><}IQaN|fi9IE0 zWmQs_8rxsNqRhuLoQJf#m!}~zi8vBFVC3bVy3~r5uA6oiKYdSc>caVvefNWlAbJ`I zHI;hH*%F4Usjmz5*sVA7Dl$BlVr6-8iqbOv zdi}>Ii!dpwk3tu@^?6F72n7 zxfj&Lxem=#j0`AksgYm4mqnhTZ_rPr>d>6|Eg~vL8Rs#!FQ@4W5!J`# zEdt*B!MHADIU1i4+Rt_NF`iJFHFEP+eHaFW9==?{w{uBfug-ors=D|{Q>ME?<5JPH zr#CvfWi@MFNnZyKGX_rSxfATYv(V)V!YY?wJ{o4Z@m37&Uze+oECS5VIu2?Yw6CIn ze{#NlF17Au&hAXbjQ_=?KuIL$$$Id;orgLbHYR(ld_r!hFI$jlxMGBKl*niWP{Ay* zv4WRJAAGWNsEI3xKoVU}b{)6h0!d;64h3m?i;l|AUKIzP62ZIprKL~IXg47h%z(*X}Ss; zoY$$2tJ^H}MJ9oC#6hhi?u!h3Jj^b_HA5rMzEC~fAeDXssl1kWMkrE+0lRSBrXo^+ zlP#$`sF1Oiir9bze`ECzhTgdIO#7yFb-qoQ!TPvaoJ-GuuEv7Cs%Y4>utWQ5EY%o- zRl(>?H;7XnBDL``50wx$)jN9W+t0j$YWzA}%OjeY1B@Xm-X; zi!Yg~lxAdBEsqkt^?I^55vN);BiVy;RFYMYKfhzHi8n(03hrAahaO@;HNU zkWVk^u>!i^E+E72LG|l4NeSfrwcy$^wg@URr$1M3`)U3I<_*d3G?^O%TUa&|H{D>+ zbJxIw0;pU))YD2X?oY}cd%p1oT{0CKIc-){2z7Wv zZ701K>ahVsFcN?v6(Xi8|Wz^O4-!>lWtSphU5v(3dqTXillnr z5$TVqdHH7}r%__^!91LowY}OeUG(x&x=U$L%UA}0XD?zs>q85f1XvNP?FmVf;OE@1 z=dTzSq`WapyUx13tIOXpT73W#So|^#V_$R>Jixs+{Gh5m@<@kp|5H|nmt)KC=3~lE zHK)IpefM|0miVkM)WfoB`<+NX4xNB*6t@$}=@R!mtu$kBpvHHCh!qTdDO<}YfOg<~ zys1!B-q^MBw#zb=@9O=^kyq=ZED0TkY7^T!x2P-RQk>Kcvo_XQ-snteT6_R{dRT`n zj4D=>_Zy7r^?+WLD87h|IGFfDO+{8(>ilL1V44IQJ_ZEbn%s$ruQLVDT8R+N{hm({ z1Evm=)R+&s2`nRt#DP5S3^EOdu@OA%Atkuat$X~FbB)UaP)XLZTEfVn6B+EjyYJT1 z|7bDyx5_28a#yUr_J6IuJ}?KGxZ{J4s5Zfa>${Y!m=nN-TsMsl04SJ^ld7Q32J*4X zjs+_GFt?EDeQlC>Un6y;)L}VB*>!a(IFdMKy6}Jz1H7?b?{_57_^8-qvAN`YVa)yE z#)J)~zq|M`@AVsj$m_=Mj|f%{bK_tn9-TTKtbG<4?W9yzy1~`?l27`-x=2$d_>wo3 zE<>Yhf(@J6bRPJ{%&r-nt2g|1Ens4g0?WrHTgsGG+{8M%PteiIL6n4_ksW`55vBFT(Oy^H_mfSnSdqEgv9A`SC{}MG$@*uc2l?77(4mf(Hg& z<@6AhU}OCg1?$4gXMsU=8bA~zy@VLmgcNR0aa;8C=bK`dpc>WYhRi68R^z9zwjZ6p zJeE}$LI|=TgFQ3_l6xx+0oms)TNmhcOvkPtVDeNnox-0hEtNgBi212^y{5QJ+Gdq? z)9rxUl0u%(N&6&V*KcbSD;3Q7z+cu=HD23iE2k9@a60W!!sd(VU%?w;D$MB`{`$4l zeyK-H!gqeYG-7mhiN*StpD!RftozSwmxP{E!|Ooo`}rf7>4G)||v zZFLL)>jm17azP##C{ zO*x@sz)S%QD5{K%7dmK-UGNzb{Qr@1|EzM?m|RDaP70SK;kwHW6w_n8D}~=`dcm=e z_$fIrvY&+$0hv`Ufg`NV4P0auA3kfJhHJZXPyN+vzJmQAeQR4rKENVYJ4_)xQCTOg z5AUy<&A|Ra(hg6=sm~JneNIWXH!BfsPVYQaUkAw^k&UJ`&QZo1p>(g$4#=dzdv=P^ zcDd>zesJMD7RTc=hW|Xq&CM)E^*W0jd|(*##v|A^o5)isBS zs%Ue|2g_ht45g-1PkVVjVolxWK?EPcTPsWkd`ZRxBUGQAFr}8FF6uC(h;3y6-1Pj2E5-ZWmypDfEU897fFEYC-VNY8 zYP}jtP2TXO;!S{u@B!FC5;CDz*bOz7c_{r)Q?E1t$lqUKN%9@L0w3oA;KB>am}$bI zd>Hu`o1Vt}h67Sk6!`#!+@C;|8Z&8}Taa)_W72R$WO12g@YmoZ3ed2`{S7U7yMsMo zUL($z1fNm0&9)wf@`!-phw4nYhyFhrkCmHWtZ+SP;n`fRGpV`1b+%UEg=> z{-c`pZMQ<;$M{Dp`<}Utc;NLNjnGy%h5X- zYZ{Mn{EivZ!-{WIDW}BmK|l#hnDZAF-y=RgdhHby$Q4F?mJS@g=RCjMqjXR!nyX2W zULmj3zqh-bZb!X+1IyjG$RC8c@&(Um|NJnaYh(1zq6|M1lA<-7Z!v5k`2t&cC~P#$ zZ#pt4p~Nrpq(76v-$zlEgnt`ctC{pC&IiM{3i?JIj4?@u06K(OiV zls7{N(^?e6?~>vWVj)JXn;UQ07_kkC)xi4EbBA5D;x@vzidRGaz*;Gxc(_W${LN3C zpyQbfAuUJpv6XgaudAFOb0kqzCOa~x8PqRZv{%FA7e04+uJX1xxRQSpy`8J0KK!Bo zu`T1?N6-f-mzBHVA{>B;O6ceYwX&)$%Ip55$!YPkqQfTVZ$f>;C$|!rY`G=M*3= zDMo5hJ}TXRhgqMS)~?Vqu#;4&#$!NuTS1_l#(Rq6?NEf}7~){;3?hFo0pSsW&kdUr zaz%jv%qcVfpenh`z|Hb zsc6BeW`WX2s8m?d8HffvIrCA7P=mwv0=@gKMHnM{5-0Hm>xIC8w){sV7A17U=wikd)r9 zTGR*bFOEcaTp5qrEOC7f@4rS|@NvNaqmX6eX#w7LZA)(qOe*6i)64+dlo#FX??UV= zjGJrn89)5VpLQI^8p99kQ)bNe^ITJHSipP7)DCzRN;VFBUf2NTm0HXK0UH<@iRm?l)oe}J0I6!w1g&Gr|{oH zgeNM0VQDt~j6NxNtcstjR8>}`?^udtmgkj)o^$ezMQkSS;`^`&I%Ol=03z*v~T4T&Mu`H1b3AO&l z`}d2*1oF^E8vQqp)SZ!gJe$gq_@n!z`14P<=U)~A1=wU>>;{b4fRTfS@ecFItBf=R zZqQXcOH>jR8jLN;$E2Xj3T3ap9H(!6(yE`?D}ksL{lB052R-3`jSu;7?!@Y9@2;t9ADKSD9Un?##hi612<%d_IO0Xpvyc@SK$zvH zhCzT&o1^*$)I$cRW}viXKaneK&SJ;G>?^?2ulFKmiv=VO@-~u0EQe*xFUNPm4@)nV z89U7CDrbkjoPCj@R9G{5Us=h)?(K)~xUDFgJ1f?mM;)_(UUq0-$JJE6IbjSVO)<}T zaIyokqw?ag#PAw;V%X%~jr)7f*PeU(=G<$GdChv&)D3&M3O>Jn1e#V~xsj@9u2JyF zXo?t%ccvIkAJn5C!qqC`wodDPA`mA|;kwCq&jW zk&yWJx>DW``OiHn(St)&0PE`a4i_vJ`Ex#o|5AQ;6Pf#ihdo@)1`qH+) zE$C3$(2a|J`+Z?w`iH5j{KjF@o{6%?KbgoBq|ln;9)i4W4T6!I-1;%DWxNwGI8D6& z5cNo*`(^K^-ZrP9Wd@`Yly`n(TMyP+EJ5>aje#$|Q)H@N;Zv+m5z9hAz7vUaLl!9l zsT1AekgUnhT-?svs%l`0B|7Ry0?LM)2uZBAKqx(^)@7Alr%gXEMd|&^1^PeB+~0?_ z6$}uZMdMd%J;+Gc^-8bod-jAH1YTmhNR1-jC z`TIuaXfddBPvQ=_@G;avG6#r@>Kckpme;Ds!w9SbYA$>1{Qg=389zSDoM_2lTsY-Z zaPFImbo8kp{4G}_?~rr4ExR@q@B4f}CCkF7Ig!?l4dMVElX)S#4Yl8D@M%hii@QSw ziU9K*Tg%6JIYivs|K!cs8$U})_#I_zBVfDORTW8zP2@+jBrsTg%6Mvenbcn);y;v-c)F_L?!j(_!L2(F zB(Xby)PnWl2_stXJ@H<@fD+&2N{;c^W1V7~D-w7?q5yUVy7H~u^^!G6TzjY7-X~lm0*n|C_2#DUm+xmh(g?X= zoj9(zlKzcuN%FII3I-|#tMRQ_6j8r9hHT6Fdlf|C!)Vez0aL3199b%dbZqGpmEP=Y z<4GOWdMU*)1Dwa`-@^dR^D3dVNb|r1G7W%+^TX{S0PtuAsS+(Qx)Ky-z$!IHKhQfAoJE2zru-rlrIzUJ18A~Es+8)87LO2bK?zBDv| zYVcl(I{H5R$XJiw<*#ew-~YHuW_jwl`4)z6lzV@Wxizeb>TR_onI6SJlw?CoARj zpCz}xU4J!cjydt#B1;pO-{3r<7B}vNJJz)D<#G#u!Rc3vW8+PYsPC&)@6MX)-zX|9 zltD2KP-5xQSANT|{A5lZDYL7RmWY>$u8>+alyZ9@BcEAPO^{NQFZK8$RcTmyN`zAs zhRQ^us(DcSa88ItUU4rPkOT`#UbX00jBE~1G5aVTyl6m%Kahsy;EEAnGGTZ@eu zV&eNYfK$;k=w%?SH3uU|k}|}mr3eWQwV`qmy8GXApo6Y`Pzxyzco;sdLE;v&SA8C=~v?psebAL<{q`MPY_SD$r_|@5_c`+N9RII z#{C6EZ}xTlXg?9udg5e8?&aUt{sirQp-^wt^C%3|^ksV3)&dqQ`x9@DIHw=yYf@1! zcic%Li#%O%>eHh(iw3xU@F)5P)JzEqu^uYGT>%t1M79`{#Vb6RgJBN10UZO|2-DPu zFPztdX(N4lq=DXeXP_C$h>5%d6+~%?CA;pmG@dR1^NK!fQUqt zf>amm7>UowEhrec7V4B5hJuV8@^@e*NuV!G3y)#YqDl;89!4yeQq@<40y?+%pA~71 z5IuOy<{=y}AG|X&GJXMv_qVMnc;H5^qvnm^#)_y_#PKJ&h@dB66P|JFK7IqeX2(p+ zx{r`+o`q8HXzFnf%I!jK1fH;V$432j`gP|9*9-Z0UYzD`*LN*!Q{!Y-$H~Lz!E%Hu z*;4#o9#NDu-7^$wJ6Ay#=iyA~1#k4FWeq>><6xtMqt)nW8a;8slj^T2C5)F^Y3g^+ zKZQzcQ^5MRG3EtTqyUkgM7kcyoZA4wq6A4Q@RQPlk`SP9+J26!nX2XSeqpcIUoo9S zEk@&TwE?)zzym@ZBGgq}cpPUi;^=uzu_W#G4+E4n^A5CCD~}JqS<%_)09Zzw+hb)@ z6FN!Vsf)%92VR?A-5Yw*&Z@vCqg62!`5q>xkEROE!|pc^AbIKbKtW{h_5vjC3+7yoZa^+y#5vxry6-FJR$vu%Zu!D z6Q_cZSHC~{#&}Q&PB(y?ndHHYP1uu{KklhJe_mEEYID^Q{N9;j9*gaETCN|^U_a31 z7ue&VWnzH#?4_rC;OW=iJfx_K0x0^cC}deePwpvzCEZ(7U9S8){M|kzi|iQMIhaP71Gy9HWCR`S>S|zsO=?}+rW)N;1ChBwX6F0+l3!ADK>R1{ z1jG}B(@=_DPO%rTelt(+)UC(^wIG#xH{R@%){&NIA7-slvZ2^_p58oQ!=k%B^tPn<;_2{i!&{U+f1G}`oJ`&tQ8sq7 zu&F!0BY-)!eDtFlxy>v=loyBr1euK~?XG!epG~R)gtwNta;{0cJ*$Sq9#>KFx=U24Ryb zMHUM-IGBxC*Fgu9WTt0gg&HcZ2Y9dyFt+c)K<~r%6k+JWfM#ZaY0<~IWltk`^XYM@ zTO&d;!5b;TBKzbzmzDVU={l(^`6yvwkfTLrK$c$oY~_1WDg`_5E=|ihT@YqBKiyf# zoFjt_`2sxHf;nklGvQV)Ey%Put5sH4i$nemLBuPy_S)4N4++?KeAB38_dcpbTnH*iL5;zKjA$#ciL# zY~|FdfJH0*d@d|*y>iDH_vuv^Flm~Bg(f)j*mybp#UWY7mw2Ai+=SEqTxjp-h|nv^8+LGOJZ zB>(+zjy%q4ydYys6ETrsO2O{{|wPub5`}0E%{gFZQ|#i z-f1RBFDF5pngY)e{&bCaIE?G7mE17coqx`I>F&J6F8SQ=C>Pcv56HuxZ{BqDVtq%(mudVaD32mAm0eHq9wGvt`T{>IA zQ~C>X;)Bx~orEW97jGv@D-nvFWTi4?PzDdm>|oNW{4pG}?5vFhIjG1)`vGhSw{gjL zmjp}E;@E81%R93&VibS29d>xI*X^DnI)J32_My$8B<$ye%|%OyiXfD@5sn!SjP(Nx z_wt~I0fV$OkOo3b;5=#*g49@WVhrSL=pKvw$-NE!!@Z&Y;ribs)Bi->-y&yzoI5?F zI=aYE_OVk_dbkIgZh1gMvV+N&ev=&kq-Wt=c^8nbwf!K6@K(gkif0x8k)hXXoh&R1 zV$p7@@JFHOuVY8k510TO_Kb#IJJ|W@y9e}w<=Df|rokoI)yGn;pm%Bp!^X-}A6@X9 zFBxCcJ=N$5RjlK~Xmu|B4A6&KPk1cWPhV7huf{j!zf#C{EeUhgYSB-8@z8yhIw>$E zzp1H}O$@2}p2J8qe5DvC(JIW1v>A}k##lPnpvC-n13HcZFlu5Qgya|?GvC?*SvPK; zRCb@1;waB`?%an_8#VKbD&YDhz~Il_YJ6C9po;%Va}V(`T;-HmBXbbW@+?7g$cclp zvJ6qJquuAhW)ouZD4b~SvYrtiZwb~mD?6!L=9UqU;CaqZ5b1R;4b88UmC~BrZ^fIX ziVri#032los?3Anw5~=5a|GpbORr9r{URj(Q;K)X{GDe?QhY_zqK8#Bgn^I4>!12R z@x-7Xhr239Mt3)nLAk$$Kl#UhQV16_%ox9^QT*WB>+t5KZ~Dgq3JVJXAGe*{bF;l3 zXjvP(-$T$GEqmOwY#|#jUS!-BxDm(>yW%|EQ+w;&I0v2}H5?H z-`uk-P&_Cjd&9Pz`bApFn4{*+x$#rVb6obQ3&#;t`~fRvLh`Nb*!VR&+ulP^iZaOLSz9Xn&9 z%<(Zk|4`p^2SUk`hVo&n&ohw!5pe%(<=|c1B3JG(jXYr5nliXZjj^tENisBdXgSpH zj;u#aUO{u!-h90$rb5y5#>!K9!bXI3mKiX1<8o_J26{`(P~T!a&&$_8jJib3xhC!I zLj#!hQjdRh6v#WZe8|0V+A{S#sH=c_D%)>i8%(x#nzp(f9i2VjrMZ{7L0-ky?cl4m z0_!fBhgnJC-%~5ahc{p!bd*J#yj;^yD68kGny0(3(O#CR>Q0~+&uff$TVdA9Eh`0m zS8bD}EfLRjAG4+-Vn{3&XtLX%5*?@*0-Kk58 zf5URSMHa>a#EbQ7JL@JvySoDEp^h|k@8|?G>I5Caq7%2k6Qt9)?pV4l%$Bam1KEJN zU4qZ?0TlrOE*=B+0@d~}n;aP`eLy;CsCHLV@yY3DkjYvJ!N4owV4NkNm6G6<0`;Aj ziaBcsBhgh$!jeK8orvD*(EY?#ku?bgy<)V=LTB2E+Ssj+-*e9u1Yfba?Psc7rT0GS zcNcy?{MY*NFB^LXzE$!-6gyPW6I~Vt#$qpEYgp}xgmPf+MBuh?g%Dl~Xl7>XhZdd4 zOT$6*hWnkJqf%fD;M$RC0H(4{gsqE^1m-}@)99YGm3m=mYNUlv2GmnjUP_=I#c`sm z+o2udVh>YrGIYT=b`?_ zuA(_2(nHt}&MSD4=#{l76mKo*G$+ctN8OeIJ9gW0^YPv1zRyhO4gug`@DvRK6p*!O z&;?X{u9X^01gSu6Ek!GVLqOO1)7zCI$w@G;jHG#z8wyCO;R`bc;P{P{M>d^aXaGLz ze*Wa7uGli=0^^UO1Y<_+6z)G1bNBbSwZH!S_ULtD#BaZlBl$_oYw<*JOFU?UBlAn=TkgEc|46Oe?>a~0oo2v9X!goyTSAV#wNl;or zuu^z2c6bXT@~$z@tK93&JDu%HqwX_eCHsmDnv{0bz9;{Rj+6d)D`el`=Sxv0-(?c%U~yO`f;s>)(n$&$va?i5p1kBQE1F{u4<4~{ z8cEbIs${1L*S+)9`!02>2M8D~hZH21Fpd;bQiRF_Bj?u4!%EtKJ?GaCKV=(w4%Tpn zE>rf){qTCWP~{d|*XB6EHHEt?{&lQHrI`nU%r-#&auuHD_;Rs1(%jte=8 zdo{PpDRQeEg)Ekxk@zwE<#nVSW}n0IP9CYQ!S>e0ZUArpJ4p&askcYP_pHVK5mj%0 zN;dJr5=vGFhUGuhygk5g`(5!mebB>ZebZrMIfKt-&W48pPDBR>R0x10!Z*GJ53!xnHj_#}y8g9}3?Qt4`5m5nNIRp5OE zuuR^o{-Sp?0VwG0@(Tr##rfSkMmG^XhpK0CB@S>zLZT^;uV!mXw_PT7I`!PU>WE%k zes?|S(UHIpts!#zh~FgQl+{dwpZ<{k_WI$&(SXuP(GpGVC|aFESk38Y24}2M!6+gS zd0t9p&8%g!q+KMXg5fE32uPq!131Ep!KlXW|3%k#wl(2zTc!a40)}crGXw}lN$5R{Pth99I3;M1vxLHslq7N5JsK+%muD!zH>Zy%dK;LHqyQ^55>O$ z0Ai?kGSi-hMbpMJtnhF=zYa+O8o)+nC(NKFX-6qQg*pzMvk|^p{`@vaky#=P)%hMv zrOQmia9hgwqbOOC<+o4j6$orDMrS3c8%dg+kPTJFXID1Em_rYsj1(mz`TUBb{@p$9 z3pe@dh1*^`aXou`{Ok*nh`Ox@WslcxnUs!2HP}9OY*j)5zDXIXu7#WFU>UK_;it7Y zgyQ%(sDNS2XSp*u7(fyX>eic%2*5T-lD%47#we&_Icle~oq|Qm8@gD*k)Nk8I6iT` zd?q8BQXl#AWccEi*`$GD`S;ir=gJS3Du+pL`!h%NK$3&RM9}hpe5`b;jYG|VjW!S4 zcgXCM^$)~TQr|1CCyirrud7`!x~r5Y&-ZPZ8e=@v6YC>yLNKQQ*t0xuv6Cc1)?)Fy zTJ1NxhN!VpWP{Z##YwtW`wzndw3qi;N$InW@lQoBWm|P{0*sxwQe}-tEAGA!OR15?2D59i1EGU-_0GPc!9*U`U(Yj* zt>vmFIak29?%`xjfe*k2M>`vH9mRDsU_-;!#4_HC7Ak~J>mQd) z(|HSOX!>cnq~3fQU3OFP8{$x34hhu?Z_ z|Gv=rm*v#tSdgO-pB9o-07>%5z95b({FYLBmYeVT%&UBpAN++J4CNh(;Af>PJTem;MI@*2xodkaKWGQWJ@=4rr8H`T-vKaiH zT+Yy~76J5m;u#~(6wI+B2{F&>q#TgO#df{>5Aj1O3Qaj@3z@i00a|mK^67%J124Fb z#DQwqUA@)-#sWsxuP)J%lp3#tUfnLa%qJa#uv8(>|nw4ic7=)4f-&Pjh) zPz|*e)isckifqZPa9Mvc=RE7Le^y*ZZs)3}r^Km^=VPbjennr-4GRgQ5Alp=216+x zRvZuz4;(8=?O7emHq*rdmV3wyPJ`kj6?X*q7yam1HF#IOrB{l_?W5m8T*6eFP|3iu zyfQ+7xd7-Yv1PZnvFT!(Pvz4YecDy!jN3k|rYFRP;u z@vw7%y3IyO|KA*`ULIBV$!8K0A6bu`tZW)Pm9xc-`S&oxzdZLBa;A*{-hoh}wP=)G zNWw0%E#URtEaXuw%Pq?>n=)Us2X!pS*#kF)*d!%!s9AAqJwdPrw}zw|Q~;_Dt_Ef$ zQ`zyZyDQ{1;8t8^0A-Ci6TmdQ*=|s9qn|Xy<~$OFh+!Qc2Itxy(Og*K=l|*QXylgB z^~(773-Nm2v{lqJ8%*LA5|fJ6MVy(O=8U??FU7T*(&~8PmPCBojg=B(L&L?9jIk(X zZ{L?i?uJ`bpk%t{g(sr@y?z+`B^nVbe3eHbR9W(+ia>8NPR#!g9=3v?g zK7KWV+g@fEWlvvAJQd6)Xot(nj=qB>BTP_)5kXX}?}H$BL*PVt4V)oGd{8!R2)UG- z=+?&GVd>&HgY9UuP&`S$*>!PxF12Q&{)F$Sy+7xL`APOZUB0(vv@?n_NnZO5D&bLL z+0aQ{gA${&$ZYEXpUru1iF-O#ZLhAYFo9e!1KRT$P`___bYSODi9V;AYUO9Pa0ozE zEj|mks&-UH!d+sVoyxj8es0KWK;VUx`CO!NmI&^~-847Pa!)FlNxi-K;+Pd`zP*0; zdiQy}LZJIC!|U3brT3~Q;|kvNShjB+SG^zigaa$5gZpu#3LahmC)8Xb8mltGiddn} z&1fHMu)0w@)8xCJ?}so+#TX2E;n| z=u5?qe3cxnbTgx!9+1&*c3S&1*EY0RE?o`D#+GDt$eHzCGRyZqazT`)MHTpRqFyDU z;h$SaWNPc%y7=D;&enYRbY$za3hkd6i4y5&2Wj?xrw{)LU+GdlV8zSz&A2WlHWuVU zfnpysfYj~x_AF-uzhM-<3?=wbTp4^)6pk0vgZNSfgAArRQ_cdxgURE$a1VnRx-GAZit<4~1GI58gYj3UuV6ag{w0g!CE+r{5%rS8I7BTG(|NT$g)&F`BdT8(Cn>%<0U8F zY}fzrum)#c0RXi><0&=>MHcu^hMBMlHO;x9q$cANd$ z-2#3@=HoQuD{{|p!Gn0s8f4zdsEKA8E^zJz90Bq#PoWgvNzGYxf5BxC@ z@pR|3g(zpe3^S_z`^f~FD?O$*SOh7y=ptPC{l4}FC>o#e)HTnP5dTBFD0()_{IH;# z^Y@dtMo*>%m(#T|ny`|sm_*qwcfD|CWcMVxV@C`s0;1&Xtr?;UVgpXeU z!(K*6l2u@yIv&3&s(x|8eE-}h30^}oYJM)@b9xF6vTQo%<)O&-U@)7HYE^A_j4n;4 z=;$kZAxOnuvh5V{ctTPR7R3pV6Ty{ga9t{D5@3AkX%s5~B~ZU8^2YX|qJxzVP1HCB zzwQ5N>j7|)p{{LHs14Qjg+0|Iq5$g#ggRO~%g~E$h{HxE1RJQ`ic_qUu9~A$)xYH< z1{XJ@!wR|bHodsujt=gcNA9T$p^id+X>U86Xl%L#LsCqxyJ_%j+sWR%e|*?lvEs{< zEV$>pI{w4A`(q1PL2@DgEUa3uWIrDp7+L585h;@bl>^g{?1#Rozq_|7nYN{oZVDIl zV8CK(YJpY59%Xg;9T>?Z^loO22OadiVCZ{kYW{%1G;PrA4!;O-q-lgOwjn0t8sA+Cqpn=PYduYATLj zpUmAmqSaU=6hDa3Ua=);1@Z2TY2MShN9*tEDZW+YtEES#&Sl8t1CA%troX94|p zIPBD_)HqK9h{B9#xdx|+uDn-2`bu|F(v%NBBc=>U|so%wj!=I1Oez^TzK;5NHvE zwbL6QYARZIpYJcrH#}>P$yY5a59s?T?fJ`3+{1n!AZZ$rVSIrQOGxs#S_`GOMihoz_c7Df} zioayNk4m*AldzJEaKoddr8a#;6OC%}*;?vPo?;VyHRz)jtev#Tz8E3mM+`jN?VRu% z#WE9Z&r#Q^DcdG|#oo1khHJoNPT+$Aa03V<&W{j*Y!a}|By~15gj~eI_cur;;+~s9O z@cWPlSaW?O!_Pj(1jf)fH!(^D2-phNqX2>v5*S#G0((9>XBhx+o(47u6QA)_unUC3 z>Z`nOjgO>AJ$UDlSnjB*C5@_`o7lUzFJbZ{w9Y&!8`D2{t~c5KlSguHzh|3JAB|?A zf?B4!=nPb-d(}=GN>5C1okR$TGtyD{l4_9fD_~>peva*}!PP#{MYu*S402` zI4ARrkeGXH84m~nsHWOKgL?5{tj?g-CiGrxuLHW;<1klbkmAkPrn$v*<|jF0%ivyd z_8~LR^b|N!MPJlFKYH}DBbsBf5T3s{LO#NKrTZBOf6;c?JJsF8)1>=^fh0jibwJSs zifV^r|Hdob8iP!=y7BwNAw|RBI&cuMJn3PVGBT>Ifnno?HLJQXTJPM>ilf|uLUD!y zP3Tw%8{iHRbf5bQI*?%ra%(B@?vxrKcZzy_{H8)PphY${n>}|fxizWUiVDaH_$Mjw z45ho3qMQviUD()NHG`3B6mRO(z(GOua zH191znGQ9|VtZ_IR;RUKYTOQhFkeG9J4lmYWZ*3B&bbIBI4V@cT$|!HYwFJqd7o5EXk~Pd>57oFddH*%=B9ygKBhVuvA~lXEKvavI zkc26e-K{V-9nnvOX}5pITGHjph4{zZZg;0iZR+YI6W>b_#B!Sl`Yem?f3 ze3VjtWS5BK$`1MvGz~oGCc#H39or^7Sa=?6q(o=Pcz8}>>@~HK1~FTEA2w!Mo}(Q zw5XZ(_%O45F|#!@Mrl^5OpAf`u+vg=S_|uki=!c>lb%2RTS501a?_zK@6vUWy~PoW z)f*cwA(x{f?S*jWO(%5>jnk`Q-hcF`vKWzFa1~5#r<&>b9Qs zbWI6O!sjCR6a=nXq)2onLO{NP^YAa18imp3s|oz3Ca}CHKZhSqAJ~F626uUDG0*v-X&wr|#G#~&Vh_-Ts z>(L^tG4qQ$(p{qf+bIWFvc!+qsrtRcj5S6@1D|@d5>-(M(1p9`^7TP>I4=dTuHk`J zcWsH*LzpXL6y+>%Dyj2_4*P0 zeP_*%z9_h;{w_ZxMK(7+xl}_hW@sS1!t+*#gYCIdv6i++D9!=~Td;Y$fPXBE_Q^U+ zx7MjJkFBtnp)cFA%x~9}BU5DSU%Oz=;9YO}b^QBw?Tkj&4qXHqIZRI9j|+0xWU~hfpr7`CC+>qu;P^>9DS`2l*b^|l{$4vy z8cfSZozr>o%N>lMi9_!=RgScrFTl(m5B8N5hb7S+KjTI_hm>Z)nPAQuuw6kUfQvhZ zkf&g)nZ0vkhFIzqGFY1Oi%iwAzLe>&xDH;GHn(l@xH0S zn6in3D&Fius}swU#;)|m^fV0|Ov!zMFaAgsiR36b?hGe|@zBXqPw#fqWwq0t)GhP= z(L~g~gd5??NveiwO98aP0xRR;6Glb7o8$oel5uZPE3|0HKme3t%v;X)S+)%8&hpkJ z_9bC?jU@5f_K}pforCycIX<-RO~rG|LJy{u*Q%_F6G%9UW}3?C$ku{`04t_>dC{$d zXc;zeI*qfqOyr9@e1VTm4Y^Ua@GSMYTs$fmTco7?_F<{!o$l-F&>iWP5W5*BTmvN{ zx$+HROJVmkY#o>lG->s&27bR5mo&SwGx_onPe|uyoP2*Z`s6%Yy}u2V4xvbCPnI&nH_|rrWyy7>W}S6`}q}HFa6zXLpF)7 zic!z_Hod#=n@x(aS4U7sxNKs3xGn_%%A{3&WP5&m#A@A-SFy7J()qd6ked;t;q6|$ zz4`0;TmQZR@t5U>SV!YFLoH_;6g9}v{VbL%P_#Y3nUZ#sV|{q5IN!hRHU$WrfN%1k zpz>58ca15#e61(@$9_eKs0K_juJ%q9ssC*kia6fpGOjZwCTvuQC&O#6%J9W{G1z2t zxu1@gC?Cr@X6AfNxtoYpQ_iC2!F?^(w`3L2{X*ZSm39_>COiwZecl{}P6)d0{Q1|! zZiu_KUiOY*ke5pb>FTq4o0p~cemp)LO{)@6X*ggTxnuhp%%2M-}L~`ZCGcj2)djnIo7jcjV}26Rp5ui!@auyG4c9qmwUFu znm$Ze%m|P)RU?O%TEY$81)4MnN_w-&e?}`5TTe}8?GKmph?JVmLE2OkMDO~V{au45XRZpxq9#AG?9T6Z{0mZSxplgV zP0nVo+w493+aLy^R^ugkCtMDu;x%@m8Iqh|45&bMD|$XbJurSZbz?|MkC~t1ZKIu+ zL1Y7p(pZO+uKCjujat)s+ype;@7;k zA$VuT$DY*+Y~5MK$ehN9RpqY+_7fW=moIp73!k}Vubpq)~^e(2db}wj%moAss6ht#^y(nhvsRD^Id~*^h}3%7OZVG9iIgT;32ZXBf0hPzq{fALq8l#&(+x z?u=42dg@r4qeyzZB;%&V{IQe6UY;6c0PS*a- zx`BbZ0b~OomYW^^_RaqP*p~jQVSOM3U?+@{Y#OXdeesw*KoF<9!0!`=JlN$}ZrK2z zJmEzY06Q9o8|lr$W`TO>NC6OxW_l(BAlV2||5U~yVC6}x1!LU1YWmhH-bE#zGJWJe z@FiaqAjc6bt?qu)_FbZeC*wi46MAV#4fJrd_NGgFuhA3EP**4YYv8a>XVsL{%$5X@ zEfaz=^;}ZWzyHqfY|!1P2j?8^KWDo(%@vpjojK~8Q*30tU{-@k{wLSrjQaAye&|Si zo0J-PKwVpmcPysd_fpvu+0zRz2Nx64xHg&{DoMI!{5if>3zCxHoS7+|R&jZT2f{b7 zOptxyGL_X>y%6-_f!P)z$tMk`=>t4{^Mq+z(3H7MzK(Q?>c~_^Ml6T1JKKnOpbr<~ z4DH5_P4<%u6KK+_vC@)`)DxSZeE?T4v?Of}#(NmdQFA6E0K)rnrly_9$QU>v`P~)r zxv!8CEQAN?xXLLgT|vgNMe8HRbr<6jPsrGIT&ZCXjTRmJsLGuX;Lr3NP z<4kKhvGj6E_l1#U3zM9)1rw>>4;s{rKD%K!)f^e^+ks4y-g&*JX#X$IIah zz-2cr=Pl98Dkkr~896RSGAqAqpBf)hs(I~^_Wq2Z@B48EQdyA@9R1)`3g-2&@htd9 z-Ol;+*0$?ogK4=)qN8r5x^_0(yEgO{4(LYlmbM`Fg%R+g~bCUhg-#CZ?V+RK!J`oUK;$8@LM&hUM$;dpY>Ns5tS$D8NUPg8vhDd?D$@ zeYwXQZ%~xYqz9 zZ7Jiwn=EVoX=?R zX8cUNG?=N`W%xonY}8%XBT=sPXBXS=oKuU(@{}$kL~9AE{?hK;i({!Xr3M6}TV2jp z(P{5sS&O<*4(3rqRL!K03N2Yc9^IbEg#wv_#8B+6a~M=DO~FLc;FUKoCE(L7yKXJGK<3(Se zCWLh)!3q745b=StE)K4A|qvZLq?`Y#ELe) z_l`=A3{mrci%J(tV%J*sT%K)nX!|4A@malfqtv3ZUaEF6D$3!@19=%0yPS6r`xt5> zqNHI?kf?dv?TvZxUH?~6&WY`}TO_WTvIb3nn9;t(ap|~A3^v7HZj2+`y90x|Q!&pT zpSSWbKw|qy5is(50N=;?6f+7csMgBFvt)RQ-gM5V|ElXgcW|V?9lLFHFs5O=*CF3y z^R&BByYUL1Fs6C^cmmC9Ybiarsem-Gz<=85M)jbevC##@a>MbXKo{vUY@$c0i697r zABOdMndy;>MLO@!m{Hkq?oDuPIFTxW=sRDm_MOy zRRFMAA6RCOuVRi&k^2>-n9WxHuk2m2O)dbF7 zlKI7qizY>l@*kWg@9=-6I^btA=o7T{oOGb+hybjFf_L^|GpgGD5#|d*1IlU zLrfVlD-eC)GlBn=wW^qlI7arlV3QZ^eV&=+eu1 z4xm_&^Glga41T@k!<9;JGkz=CZ_>uE<`!7hTvIb2C%;(GnKTpi@u?CRR529B3Tu?L z)DzQtfbl`~*utMqeDPHPo0^^rXJhLkb(1?d@j6Oq^R^sE4S^drYr09P_zXLQjl7$K zLf>YIx60axwL|?J@=H&*jlPF$nhB?@TU~ni^yp8duIkLBwXr{1COC~NR1)ycz}HCH zU?DAG5<~hNk8y5q;60&<&vczCQ)0`T+3DI&JG@eIUfTH7Yrn@qc$h5;=Px%5-8c>< zJ!MmM5qm@VcpSkWhk%L#e}qGvp^mDoG+N5j+ROvKn8Bf=stg|H*wV0kfj=!&YxUF3 z`r>Q;(`MBWsjyS|AZTc4Vr<*oD?Stg8pXt2ie(pccFUF*fP-xC?P&l!Hx2F~ShKG5 z?!mhCe1mf8Y*R9(v39mR6>D?N8m6e*&CGOishACM2hRGD_?D z>&&u5I+vdHsrP<8OkUcoi+^{}k@dND1^8u4d3hqsIPlNn#9`pECA(18-Vb2tgu3Eb zLC!oP<+S*9i(@*=NY4&rpew>N6lqu^g1c7m=LFOJ2y;mqf#NGdTtUX-3*6Q6UvT+; zsw?*&h>_B!nsOv&lM7>i_&aTn zuTMgMS`u97N+C{5yFbs%EzHmV$+x)i=H*XWf7U8BG^%`Usk$=1lFi@&sjkD{Ah&O~ zgaE8sUrLv<8L!DKsc2=SVNQ6(=CUKHOl^Lzsq#WTK+nhVXt*<944rfZ7eJbM+S8X= zbYzHM0O73cV~;D42K{kvnJ?BEt-@;S95&Xv$98nbetC88&9X>TopEgClY**dhFuW$D z^)uz=iRoqx?tNowZA+^CT=k#Hz}7;gbmKEG%U(QE`XpBAG?w5g6?DHUfwy|fGmkOD z4NjJQ_31}Po@&1NAG-jF$ht|!;~y&Hp7l4DOAprzdBk#n4JIN*sipiPMHeiKvBik7 z&joYIOa-(2mSX0TC$dL|N7xt1sPRZAuGA3KI59<_p_3VF)EF8(G!e2W7xHu>ttevo zD+#6bes*FY8j_A2x|D%m>mj?0Dl@C{i#bFX0RmlgIi#{=G9#rV*Kp$2gPzs2V3eu! zkRd_Rz!Pk!bVYu@RcaOM%*(DL*_eUfMz7Q5ZD!AZ+ZQ0Ap~}h0?(VT)xcCVnNsJIf zw$LK|BY;qJOj#g(gMixI?_AR{b-5se6G}Cg!KF0I)a|6w62Rxu@|kJUzxIUqhJ|E> zd^xW**){3Xik;*!0qbSK16y1L>Qfnsq28mYAtl4(VUMB3Zwn%eCZ(;0TE$Ig1c6`q z&lNptKiu^_=yd?_Qm()#EhT}e5#bTtVUpgW&B&5h`B^9O-L8oc)Qj!EGd~K)7~*{0 zCTwbF45bIcOsCe`pIT8t%^ptR3H-5PTF*F=OKt(0fv{z5Lf zkTrZLC)$FoEwNXnSV_TG?D+%a%~dv!d~*A$?8+k!z8JhtO(2L`NSG#B$K^sKWygD4JhkdA7QcDz z+piTM*f=BmHNI2IUm3}xF_MW?xc{(Xn@v6g%638j0l#Lk z6tk&%|LZBMOwA|GTPNCQe_gWq+Alh0%7lg>Q3J?<*kWZpMB;#idMq=dEc6JU;t>H%n{=ntCzM4?&}He;aT9T z@=)wODc;3j8T09GO8l!13xz1MZ1VmF`f@!=R8VsFPfOLOyu@$0SGbLCZqfuInEd8p zs#O&=_DvklpC3=2T?*)W(|=;3_QpJG3;pzs!=L&iv*3?G*hr~6(yXB64Me|+#sW?X zT4^89pOoo!gPE=J)9&NQod+Yc?t@YUbFauyqu_~sc&{3QJDmTCnuUQKLM?`hc#7Yd zm|^q)5lUe9*M(-Z+H61b_G?B172!B7Bc*7yy zTA#YaJ$_`muf-4-$R|b;=-r#*a`|5Mi~kri_ZM<^$5;-{2GUHnHK`}Q-vxU)D&DRM zM_{!NeHuJImM^_os}C`8L@DjKGWP2zM7S|x+IOG_8(9nZEZ^LnYAVR9P9;b~M8rdY zWwxu2OjlZ<7^CT=U$%dAEcQB7?^>pQ&-!E^LORG1xc?NgAt* zdGVV4^mIRI?Q5oy7v!8ybcb-Y%Q=|*tLG=9-7&Vj- z_%^n)ZkDKgt7hG38+He9b$ni-<%g#Iuo-2@5kDQLI5Q)5Y`j2$QzTtLgd&%})0Qvo zixl+A?+XGNdhw)s@p@+CV)rSQI5{IpMGd8XCk}2IMCa)8ePl3S7Qcu~d18u)4l@kL zR4h6W`mAO!m7m5rCO;IAX(}J$?cq0>%|q_J8DmH;gdjACyYi!VBUZsV1)qk-^M{4S zD29}(7Nbxvk#Fv3b4Fu`MJUut&<|Go7&aGI-=}jTGxClmdguby-@In>v~a1M7`jPO zWJdh8^69wjOGukO%EP#g&7Htwwq(8d#H%aJ5y21Yt{MPd`~K) z_&l$cjgwqQO7BYlr|)(9nWTbwwV2b8vOfozC?{cAXEB$Fk^L|G;1dyl0d(%gVmZF8p!srrKhAT2*H9Q zv1Xn9+##J0208Y@fN|&JSSI9`eLv%_?>nMluPuyPx^Wyp_Npsfq7p8RKbX{ww=R{+ z;Z=n%wngaDA~Q*%^^E@Ui^?Ug1#@0tT#Fu4O*f zk+<@11V5`i1SunP#)V18qWh2_Zf;Q#&jg~FWHwONx;iO}v-oyPh{N^8SdJD4>e;mJ z(x}`y)dkU(j|4Q#Ex?XcSa|d$UsmqK=;Ft{X>5__?%tbGGXl@Tn+uNI%2S_)9gHVA z=3PUR?g#kV=81i~oUnFuTmOtn(8KUaz27+9OWOOAf9&kO<?zz0tfhod^1_)alydg92Ic}li?*K57R$$bb_ie2C5e%+sgZue?{DkR zSEP$YUtyyb_aLSs_$T<1xijdgR~&@sl0711@*KWm6P5w^~{7kA{Xb^SHDet zexAxY>)>eDk-YoC_q~y!kHxK9CKCGL;K5fePsEiq6M>s4m4zD6~ zatciB*8u^z=yhxiUC%mK&z%*&EG5~;vo|-n8d{;L3#3QQ6xugf(k9O2xZ znl7bz3`_&NYWOltTt4yO3IWN*@5*XCx{MP?$HZj1FM*K_9GFXb2}u~XyL5%hcYq@`KExSnvmVwLdt`t#Yu|jjl8?9 zs$|w!yYlPMH-OhbwiISv7rXG}O_L7OpF=n$r@CxN^qEJBfv%C+FTS-AA^;J3zHNevs5*ZfmE+ynt3_S`WpTC_=OVmv&HzDxfYCTVV6gN4MP9adZeiXw=g^*pwSkI^M@r?(7Wp$c zfvOix?pIn(g51PzK_X7i*k%#$J+`r$Zyz{4?AH)^VAQel^b5NA%%?Lv%~rHE1@*%3 z^gi==M5_E!H9Ad@&KL`TdriT7PDm-cPMaCev@XoMmkmfSIG81SU$L+&W98Q9%}9@L ziZI_jq76Aa|EyJ9FQ%*zA||47ox4 zv)P+HFZvC6M+Vn(P}PGhKlf;Py@E`SpJ`vIiEjOm@9MwWhdFk@k-0&VZJafU90g|G zwz(1^bPmT7Ni=|;cx%`uw#m|Rrl0KcgbP{P1r}oVQ0`&!oq~MHg2H4f^yXmpz&*)0 z&ygxd)i+bu6u!n16QpP4OxWa+m{<*@LWE4ZQHSey#-^&q-Ho!%KnE$O0E~NIqSiyZ zVTB$~PgQ%a>_l^@X}sxR{KjcB1|k%vRmGf89#p8fXJe&M=|3a=d^rH~`ce$n$j#BA z1!<#)kym|}vu%hq(OQe~VZPl44O_2Qx{KAV{K~ZlR};}<1rmZmOLg^p}%y13~Z3@aYVF5eT1^%-Jr z#mEf-Kq+ueZhr4Fpk#`OSqZxi=k?AvZXjE^)0YiOt8CgL^hkxl#Vu2^)MOjMs+G$y z)m`!R&OEtA#Nwz_uJz?uQUxW{)>wF>;*wOTeiyas_2TA zUWKYkRm;}BFq7JDh&fkrkx<2M4jpN1Dw95=o~LgfQ(*e}$6}Lu=3OZ-TX;y>Xt_}& zd4OVs#F2`m*)4h}y-*5te1ul4UR0Jx%UW*V(6D-OPNcdHJC!7;fHe({@>LAy0@E=p z2b0{uvxqxtGvP>GFbSzY8Xud;gMimXjgKgfS^)b37O2^rG3=S_U}lJ}sKf|n<_`y% z^!@zPgWX^c_h(xR4>mXqca53nj4~+Xbm<*cMCZ+(WCeo2>aaEfrTs1_m zJ;iK0y8H8sTHV;w+e|tq6m(NGU}>NbQA=yZ;*s%C=JT0!d4}^BEkV^YB=Ib7^mAs5 z4rp3(&E6o!Ork8vpxns9tV_>SF1~#`YWG;^l-#*xZviRAa~1P@{I;m%j-E|bhSh>Y zV@-_L_4|>Aqh3SFylO8T7q>5@xgaGO^D-hf5=kbbdFh6M>DT=K3_iQ--0|*qw~GZQ z;1A@AeNYxL>yEY0kNb-EOe^M+9j%g(YGHfYiIQO3Br$o>P4lo6$-7I%cfaplDea5e zDlOQyd8*8OyCW#~0|lmL_zhs`n`vqIY%5cAU6mA3TI01EjYBh%f%a)&LS>d7gQiWE>wdv?GRWb;7<}>nR&bqj|EFR7 z7t4(}vqX|AmUoH8ayPu{Vpv8JL6_ry)8)qac&lSx>`nnv%J2>`qxb}#Pj=F)joP_f z@B*0XEPHyB_ZNO;xJ_h$XK7s~TT#cGY;w zm)vsZEmk4Y)@K^>NkwkwF3pkC5}wK(L#u`;k1)Oj966&p88NffEAx|!&HGH0ylpm) z(*MchM|8!X_pPT&8MhA4-uW@@Gz~tyyEWSj=*dF#&*Dca9t=+9^vUD?~q1oJqkb>Z>9?y4Xs4atYC61+Wjr*?8<`Q}p19 ztLotHfVf&x`z#8khm2uIpvFxxcdvqhEPHIMG9{9ckz1N^iu%l2eWFfL)eY+2BtU`dpUF&K~xx;Ybcz zhpn;gqrsf(5;#stg`W~4wbgr|Wiebj)85%~m}Q2J(9 z1%Li`+Qr^%G3K{cx~h2h=zB0y%i~ckVlJQ(%#53E^_F{}@Ntk!{86y0kV%>ru9k;} z4~z-2&AtY=fnEiZp=-%ds3Bq3*wRc?HGA;KzpHZpTbFzKmc?=rEQh8FiJTgj@5N#{ zzB4#0OKfBxDSb2M{o58Q3!z6b>6G-g$*o!V4C!9{lLiJqzU~RNdyFe^2+EzyH(jHU ztYvz+n50r_<>Ugp+TOg{;@y4HrGU8jJaTGd}sxYn;-gIx(dp5nB7{mE6A-P>=^ z-aJYQT86|9DGnS~3hq41)Cw(Jdv%g?TclYIM@kG{b()mgr%dJ3n*i zVX<1vRSQHrAPsh<462atAK?MQUivkJHG)EbZUid@4pNP(Dx8!Ff%Bi1j6v$7zz`D@@!6Go?E&KNycc?6I>05m$}uIN9_023Q%@-tj%# z(m)13RTu=|ZJ|__RnJij4gMPtHLcKdZ2~z zx^#QHIG(r^Wue@49UKQ|=T?Jz?Wyr%;>62fs=8v?cA-yCd>zC2TvKmiQ-68sl!`po zv|N2$NDV20a}L&(Y{XGqv?Cs$XmLtRS`|v*&bAKOJ{oAZ?YDbct07;`I0qjD){M^vaScRx`QqAxb?8-K6SXteiO>ve0zP`bGSJD>8cF@{*dcQhF<0|o55kMfUS&TqwLnb>o?Ete4V`THuv-6gd5LO3HG6?@3GipA9bc<)%lO9Zr0<(7S&*l zI08un)~lWm%4TB}V#mN}_zm1ywzzY%xO%eOE{%@pn{Kt_loyr!G%&=U&wNlP`KdXb z%AnIsCoEx1LXOrLVO-7tJCsbPVJAW3isb$ygVhPioQ6FBB5P_-qIJGHW^Orac!SOYU{=71-QbWSK)iMd{Yg zXCm@4xL{PB(a4Px%1CQj(Yn+5H#zvl>d8%2@B_+Inc?gkezaKM3x*<@-1n@wxNI(k zn29)2zUPLP30iY#L(zofoV z@AC)y|9Ct(-p9LMFAB%=$!m=7OE1zn`pJt%Q)1X*9?OAuy9kpuv&1!LBgG(48;dBS zz;}9_(TN^3pS-DZS@!kWe;)?^_rThnzznSA6kB$RIx)tmDJ(MDg}3Qnb-95LSG<^k z)f!O1cq9TX21=>WIp#KCa#e%pBy5DL#m#@og$hg6CbJ&*J74td{iS>b(gi`djJHOc zSAk8>trPEa)S$0}MWXm4)GAW!3)lt(KP8GCJ`pL9Zc+r;Heby#9Fas-b34hTqMIIm zdU{a1oH1E=YypocdrwQa&i>`GMnli0eBhZ+ZrlowyI8#6ntyD3>h;5?xqq$=(2spL zgdZN_EuJ$tSgeMvif_(rLT0#I#tmUZd!dU1OQWru!z4yEQnUX#!eD*ZKL`xWg}z5~ zlDGjWd>H(v!7*Ol;!uDfta7aQeRWe5dg|#(_6a%5;`#{5LHco?VNG6G!dWDS&38qx zBBPXA>NC|K{F~Vl&tDAJtD=8_$R=~}116PYmI9Ge#)@tj^UGZr*accNfeukiOBrYofmx?&xOIg75-LQz%+x&Wy)oxMyQ})w||GaZFzm1U#YvgUx z?>Oy$hpij!Z0bRCyZ`9E&54#e4}!gm@=B~KZd7fUM>*MAb!=Lx-(E@nsmkUCVGgU> zl7faz)gDalPN$t4ljVTlebqRhA(#UastYMfRY*a2y)Uw$#GjR_u>K8 zz^Xa)*<~o&7;CsziK35t|3pAdzAx_8NKH3N3U)eW47%~%sJue2z3orHSkcPgXYV+j z!7hAY4VQf9*r~~{9-sfR45wrcuS(rM$(iQK`})QNPAuW`C4n-6w-sh~xr#H{u$g3y zhKH>E%H=7xzTZ>tsHvkb+dxjy!&J!G%pLd_M__|u8XQl^H*BNYz#MYT8?$oU2riP6 zF#dJTzINhF?yzdi-c({9xihYw z!KmF`jaS{8cE%dePwZnZLCk8ejntq}RWpQ~^Dj>q6{Hn?7BV|0bv!l4O&45#VAGN^ zw=o!cRUxHh=~CWzmYsP|FLy6}iOg@R*vSwJg^KI5;o<0$hZ#Y41cndi+Lst772Gg3 zj`fZz&5x^!-?vQgblGWL%J-$t-*2qFVJPtyDV)eIo?{OKLm@Yay#^@h)(eIZ#crog zM4qrN`W{ByniW7*ow1*KlrVgnNBtl|Cw4-uQ(CED22itoJ}c#3TA%~2@oA`>!Q+(s zX`X&iQZ9kb`l)aADBUuIWn&q~81(yWA`J7eOyNcH;{;Qb{Vc@Au;NbBpA$_;WA^wY zPd^r8P?dl%-M_u0(kF24j7-S7i4%~n&Gok8&VQ9Ne~&ZGyqMwgU)jUi2_|vJ{?hn#;aO5u&DnM-n7X-tc*#a( zlBv0O3w7*{t=T;JbGTYq8v(14D?q}G!_=#d_?qm09e!cw&0pf1vdU|Z`N#2Q2js>? zqW+Eh(Q<>I-_*nl%H%DRY>n3*w;6rASfpAY@b>9?nbx3(ieT$M(1_3qi=kT>j=*C2Edf8 zM2qB3U^fD><20W(LfQgoWryL;)ptQrRkjZ~buv{l^!T_FNCEupjQxmjQC>y>9{yJI zno&_0`n?EOLA$?W1pgH|jhKh;PsG!e*Bkv{x1M}YRw?SD-jR7Iv{)hwqA>!{N;8nK zglYwk^I077NqX!&S&)UjeC%~}US2^`j!x&8suAZ&`u7Kdh|8jeYsClhZt9BYJg(GJ zq5X~6PMzngoo;g4ZL~9T-qKR_HIk14%!2c-#bU<*^vE1|S$S*CRfX58Xx zsfglA>+A@yoa-P4sL#oZ1<%C2`Y+%f{O{#f`roHq?N{bXA)JYvmV4-VBj>~jXK&PR zC1&&Cu_0azH!uy4b{kbUCIjCJsuyb&_G?J!RF9QIwpF#TXzNhInxm6*lcWPeFk_(h zmvhq{C&5SY{2YxV7#>GPFUR=Jt>X=`#b6CxaTqN2?uBz2$}HpoKq#C~oQ-E5>87*# z9sG(zL{UrsYF3%JPPJFVH!ps1Em6l>VN8})i zto@d(rdW^W2NqOQdsaXgPH0|6b~p0OL3*K@G# z7n=I><9vpA+T^bJ$2yqZqwRcm(3cYyD3OzjH+x92T#twJoC`G|Mb)Rj*>L+}UwLar z+qog?TkCaPMua>6lk0_23QavN;# z8c7G3q>t(1nCPW4=e0zLlyPM-if)?X8igJ++z1gC9+tHq0yyw!v{aVX6Z$D^JP6e& ztb6hgJawL(Jt-0at0j7+ATymXus>Lrd*w4ZIm8#z9_1gB#F(3x<*&Wwu&gx!N55?z z994qU7XQ;c`d{P>9|5?$B+YHXPVS$hd}FWyEN;A6@?;L3$G|65yCp>#zLMgEcfybv z4yDm)!y!@9{DfK3n9@DCk!1Avz_4*{5|A3GswDvn+hUkTUacssPaN)YXPDNQ3T@2- z)p}jordNGLUZfe#?Q7pt?yIlO@dgRQw@@#&jByf5MnY&#%PUk`jLH`rB$BCNTX^n} ze4YPTkD)>v$WYhPRLwH>T&Rs+)3Y7hWF5px79kO!|qiGUlv>o2iUVzlRg&L${n1~xY}S^c$0ZVdIUDn9P| zrmO3eZkxP6#5u5Y_g!~!xmR|>UB?ZjTs4!@`h&O7mggcA&EfSWDYjP+CAf8qC%0i282+leDhIv~E9|t^_^TJq7*luBYZF}+Q+n^8 zF01xC3M%6Mm}QDN4s{pl7rqL+&Eh!7@rTZO%H&U!+#-DT^X`A}#r#)brI^h#vj>X# zVxFS;YKCb{n3vQhN|))T#7tPdq;})$1+oFablUA+nQ9i1+ z+U0ElPXei7g#B)R3c)%IcB>3lvQ9xit{aO~^R$S4mU`9i$@`k{gIu+^Hxh>|>iaeR zb)5Ba(EBfo=i>DT*SUoG2%^~+21)Fe_3lY!-5m5@xEOie^YMm<^Xy8Y2TMupnX05` z7sA)25VX1+5o!Q9StWbGBp=`^<|HMkh>^G<`GbrX665brDD>I&5P#XBaU;zo z^!HBax!W(21{GSAoE}@{_T8F=MO=_n(7moypb(lJE^`IOPEKLF#Tm#87mYC!VS15B zxJ@?>agK;l&I^9Ias7dnnf9T=LErd5^s_r1JlTxfeH^2^wdZQl~jUx28q4Lg^d6dvH+P_3u)$iSYNo zGCOgc%c6dEZzjSwE}Tcc&3ped?cU*2KLyy-{nF&o(gTV8D50nMYsm?#*S<`iBFEhS zc3gaSb@Ps%{hJ@;?&YGEtg}GV3wA?dVj?NubL4@E@BU|L?(Z$9I|cwtzBFGPva-a| zcm0dK+{d`rqW@QZvJ#m{a|QX=w(@dh)G}SY*1S zEuU8T>e}S@L1ci{yP)45T^0NMaC~A$_I{=eIAM4T;pl;AFeRX7~6#TZ!6~0q3mf^L< zHZLVZx;rw~89DyQ+$OksqW9`F`}KF17TK=DKdwDyPLv*@`jB#B;1?VR`Gjj?@hG z2Fs9!nA)zsVIXa>_zcS{PvKl{?73p#>JT!$#%avgt$({-tKB_%UO&=r#8~>9>ps5xMXW~t&B>DKW>uKn?J z*2K*!W2kSl@OzC6mJX)@2Jx+${SOk=V5_pvW-C?+SZ!mHE>vefcDKMC$rEU17`q)z z{YllQyS@la$F_vt$1GniF6fy;$rvW~I43*h-I>IP!)NBJalIC2yOht2Bt` zdHq)eC&sLcqOz(?MD8>F9;aLmL@-#ts=CD`gketOll#lfJ6B4?>mE4e;_#d*oRnca zza2Hf6}R4Bq&E9@opf?*(VuqN0~d?Dq^YM-Fm&(J>wCw%0<(r~5{!zg@fGctCxJo| zxUCDXpFibd?|Yy0sTA~i<<*MxM8#|**@fLpee{moBT+{cl*j}IOS^N_7@%W|5m8ez zv%{FFQi*Fukw9hD8mx%Y=Wt}=sbd7dhMYB#WnTru$D+-1^N?xAA+s|NuYrB%bI*be zIEgRuB(;t|&kuc8y6R%oaxNMV?#d(I#I^v={%Nyg%t{s`y^B8JJ(pFF^v6r z9|~fV6jp1&s=bJTi18qda#QGRkH_&3_v%Hw%Iw=~qDpH8$Le$fC1SK1#ZhYd;Q8^4?+8H@+l8NCumP5@pkeo zGkwb{^uWnf4$r8Ctf`mwix>-yo`u0g@Qe}3nUa$(K23s*wwup+jL^d8Hs%7YlaQY8 znKp)NRmTetM+BL^V8?Lzs?m+1*rD?C?|$|Hsx79ZI&5}Ns})85D_uD4ByfLPpdo8 zk^oSvec*tsB#uzo!$MaP#yD`K6^h4D2u6%#j>Oc?RE>J2Mr01wkV{QzRC{I4YE*)o zW3M!`T`MaqJ1qe9Lg-3^+DhdO!&j1jmK|^Nw(>z(c%s?01IJ&R8DJG+-*LLlJIW@0 zl$X$-SWR;9_5P?d)j2m97k#}BLuhQaw)s;ueLCjd#e6raf$uw5e@%@^CnD8A)fX_h zYDaBH3=SyI*Zv-naN?mrcnJyl1JV-0KuWl~%0SP^0AyA5UXvO^T}KIKKS`?*hZ2W3 ztTPezR!YQJ**VR`WFQg*7Lcz>htRAVoUk%oS3u7T{A~RvfhOhF$=7kRNN(RNQe^h% zVs43}qtk8bP;Gv0RAV-gTZ6O+rN_!x+tiyar+|y2fw?c~zV(3a(tUpGCM}J69_JM7 zwuCB-73IH4fAsS)=S)leb0s#r)CEx` zv0I&rEIQo`-P13eSyxGClt(V^r95c*yvUjQx|x=QvyuhRmUH?@E{=CKNwH&ymX;bF zrLU&VhveQ|3|!d*GY#EU^-er3UVFu?4NMih)wJ$!e5;b@x#+*heGH*%K+yO;khHJK z$B-2wtUVtFgPBr2mIeUqFk00J$x2FFW8DyLi%$YXB5d+1%g3LywqhKeKkfNBD$Fgy z9L21+U&t(}WwukwT{$!WZg^ZHl{KwwIzltRDOrQ>K zncGh)n(xKd__hDFwkbI7fVihPD9+SfdKpCRXYvW=CQZt*WYn|mAz=|CRZ=8hyJudK zwZt3EeHzN)(&LA6MvPCorpL+WY$n1=Hzc(ULURO$R!NJhvEHI5qM`^aWt8Ln$_Jld zhNjOp{Fb>D!=KyL{xl+ad@A}pn4QvVyc_Yhox}y(9Pi_hN%qT-Y)^7l_BgIUf2@7B zEPdzW&VI{y;L9Pr`l}yD+4A=*eZc?(AXq75b6j>`Hf_q(Qs2OS+!R@k2eNsgxW7?S zGNsT&JwN29WH@kO5nhY9uLgll;WP+d8U&K8I*nX^O`M|!3kF(%0UZ50^WSG%^Ug&B zy{oJza#5AosYn)5#FfNS!Q3jFVKOH@R}5-ze}C0FRuPbP@wYfqx+Rieke2O@#(m1r zY)_yGXbcnYa{_2mee#%$VoClXl8`rgUTRXzxywf1fh*Ce;04T1bjTRmtBpKeF!omN zr06Fnp>_q$Xj;Y*WPEa>Ig?Yp7jyc%O|7W8-l(;gNaa$y7VLInU|Hw6fn}=i!Yr5Y z?(zkXW53hCjUf2+!}L<0>wA2;{>z?lw;juur4YbSgH3^uvralw@3p zPb`Bb%uqh3VnZ1w<)NgedRkRiAcG!5tO$SADt0JApa(fRH0Bh)3lqvxqtn_B*&;)m3xjTk$Oje4%0J_UV_E zr2l&|?!QCn|NQxT%k_8xSPx!Pn1R)+HBq93>2j`tYLmA^w8c!Q)z%NZsEC>p^EK=M z5tnk{q7p8kS^&;<;~LV;P?r<$Qd64(uJds9-31FII4qj*vW*lB_gORMeF`G=KQ2zF zqK2pU)V_YoKV>3ObF4$AjmOtUL2j(h(el8nDA*9Lc~YQ^TaO32k^a58r&LRCcD2oG zwpK`PO|QN^Pt1JW;*s9XZ^5{#he4Q7H88ikvREjLe&EGpTCd*0ui&WpHA-3j+n zLInB~eAD=8mwY|n-1jE-T}UepVyVjhaB{CSZ4tm5Uy?!G{M2?b#qDg#ISP%gp`mbr zZcs6ha<|9J^R)@gCoGX-vMCFVgS}9ubbJ#AB?#ed&OA|Vedq`;r?dj(T>WLBQ7OX6 zRBZnSLgfSs+Xsh9NZTfYoNHcvU?o7b5P|K}jZ-!TvsF{yRUv*?zDv#rITfq%UIX%= zPzDKo0VSR~6w@DsiN0ayt@DZb-FrMetL@+X(+{Js1-o9Zl=98I_X;vI^PFzWlhhHH z6siCDXSF60qc33-9NMgE|MvTV&M9G})K$g0@^tyB=1H!brN_?~FAr>K+_$uAI&q6W z)0@?p69VqN-?e?;_SKY(Es`?4c5Z0&+^`CE{0s7B>)z;K`Jht&xHX;Excq`L3klTN z+g5@W1a3*A!v%AZc{~}Yim6XoSJ8{{si|ef1S!{t@tmZ+xe<^ErK$06|I%x9n?R(p zq!2YcX^D(6wtKY&;_qD_NA8$=aw;wW46HQ^Nf|0>8a{}#W(z=Qu!c>Rl9 zM3!4%_< zDEHSHEM-GKgZ9VA`1j*qTQ!T^1r~wXDw5gL$PPsrt8R$OD&zB@#{~$-^Jhw40Hr6M z@5BZnq}Q*4-J7=Yq^eOsaKKX>nnX*3Y9KJY9z*MuqrU(UPME34EpZD-gBXFgnnO!P zoX1My%v$Iol%z^jCsPwZ*ct$rT$8U>ic@dgFhW(V2&MnC%oJ=Fi&%&@BN7 zNeSjW!KLF1FA(q4NdY2KRr2MRgy z*zhnT&h)Ax$uX0hMK4FEpDwzDxK^mK7xj$qv_6AdzggD&a-62ql#o1^KKoS?Bf zelA1)h0W&Czl|{cMegZO=36d`;$Y4Utc+d3HYRc? zHAUMjo%ulkpS0=JV6GVRYGiJ@O&~ZmYtiJu-^(m=XC=!thjHU?kckNC(;8=)t9ciX z&nnC5XSX?>?$#rj$-b9?y)w`UBDT0!+7vcLNUKE_S@Xq0QP~M-PlqP44b@@g8 zN!x;SVF%KLZC3J%`W>r#0X+hyX|*nQm)zt#BsYG^eU7Wh;5Q>A<3l`-o_Qa;agjV> zaEa+TxqUXIINCq(gy|I(+>%Z)DfYtGoRl#fCRXTyo|m<0W(j7>;Hm(oJ3W`Xv?^Pu zg2>p=8DqfHO;{2u@;B!*I544u05Wkvhamn?X|5GdX9NOd3AMKj=_w#WkQf^S4a4IR z+%Q8i7SxGG>N+s>s=_@9N9HUrYa&cw{J+lgF!#4*ARd4ONP+B$KA^M#m?Ks#9@Gd1 zL-|zZpowykUs&g`i_p{@NGZAS!ZC@d28HxFRPi-nt7e8=4XtLJ{m}~XQgDQ6DV z@wsGil8gMAa~@XHuKSNPV)Y`*x;y_#x-@Jfz5ldaK00eBKRLKI@Y-oJ*U!hTc`L`b zZ&dtNP>Wuvm$mf$b@unSv!7sbbzD>cR+Lu|V(6|8%uC-EMO1v}L@E-nzQZRaRK#cb zQ7UA_2xx=9)WD>}|5_%6(?w7cB8y-aFZ-NwGr*Y!kuk(<29 z46G66OE(lL)HGw$>`1%Xe_2lJY786}NCT(MvXM+brE2Sb%kj439^A#;uu9`St$a@4 ztXv}2=Ib`vMSO|;dhES2MNH5=)G3Nhf@=D>j*o*`~J=Mg^Kymp<7{s*Lqxkl-(7%skNu+{VVbCfu(ZBhnyqO)#DG0 z@ACz**?c{H=z`li9Q*lWkqF)yu}6xC(Iq5A`G%_E_n}ZDV}zYRJcx(!@?=!8A>o%5 zi!M%pqy7#I2VqYE!i)#yN(w(V#m94Ck?yEt3`;GB6=JG`4GM5tO9xjSX%wax21AP1 zOnCQd3XX#^32+K3nM28)1DOc%gD{`3?f9xn7*Wq?+Kzd}El_fywJaBS7y8kKV&3jp z11gkas98p!O0D{XB1c-V-#>ME;h?ezd)cG>T$U_}XyhYdg4j}Ty^UqZCa?7yRd*+~ z(zW|m2@`lVg{sS4*f00A8P?SE2jgnm?9rQBGPYUoYYAU11T=mpvz4YXl}*WuPs{lF zVy2S%Y4Ns!f3kuD0-8vx?;c@EE@JzRIqCzLv3&hKs}-!iXVA}+*Ce-JUOc>9*3wlB zxA&eOxWQ6?X1lmA%~Mh{H5=;YM9(wn)IA2P^`sjl8PuOv6qFkd3h#|KNtmQbz&*3l zWtGU9w;2rXB~T2(T4OB15A+$(0Ibg;K1@@l^)nbzi=-dw1Xp1l*XAh%K~hGHoDQ-V zgCK?PDycp|@E9E(z17u&#!7GgNBI6C=Sl)_9VC&N>T;IV86(cwkruTm2SrN`osL1a zD_#RH-Y`{NAb0?=k_8((IKy_0Kpa>#9mc2jCHh*}jH(w_n{*s!&q=E4^C_wq%uNG12>%#rQXMVINkO;;zei;8%Y8u zXop$u?}+lr=nrv*(g1kR-B2$W8;v_ZT;qrPT&qVFKk|g2#>tX%m(gfsd_@fh{Xj(B zOPfGAZCV2~6q{2u;VkxtqTOsW;imnvR_x^>C@*LU50p!6Bnk*kg2Ll(YfvrjfNgo7 zi#WC+*Q?xdw~Fn*>v)V`TY7bLWLKJwmzI#4s7^sak0UjC%)FEDs8BTUkb5Uf{dpe8 zU*Nd}fG4OHIDKf$P?!9iWWXi1>NKSxITf6dLa5M(MtNwb5vOrq=8{!V9d*y(A5PRX z!Sl49bv9(*QKb>$4Hp;(PjjD6W_~%-)LrLTbNrhS?{%pQF~-kX)gI`5EBdh28U5?l zS<1)O66hRG7RMtM(`0>FRb{Bf^XccHHmrZfOyGc}9|#dQF7Bz+=jAu%Yv|^OQ8@p$ z#cOVu+A2pKf9e6Z_q3hh!%}u36n5|^2wZ@WfS4w#NUF+^tkoMmdPP;^Jh<6iQ%uO` zq1yz*7boi=KBExt;O_pM&jMxl8G5zbtX6WjL>$@H{zumSJB#>> z9KxNsQF8? zZw#QNYgzTfP{<6&KRmotyIt`Im32m~8*h_L@6Skk3&utz<+GZ)hhA2Gm>6KaLb^sa z&u=8_yUUcgrhwOvgd}`)d9x&fv#%$@9a?OXx&j`P-4Sq4&~s#k(l1Qzm`>uydsUrN zO79|W=Hp&1cziw2`{H}1eq2`Em7`~afItTImoLetYs%Y!Qn4xSQ8ivUvs&v{O5TVh z+FDO}O0c65awk+v@v=rR6daXjy(J;RmI!0rKF5Ye0;o^|FUo7}N4ASMw`zr1wlHI4 z1ReUgrI3s^w6;ecZl%R~V>*GSD(6vx0>4z)&i;%pHUWA)`x{SxA-VA?2-l%8jF!62 zd<9Neq#Q(ilc?7WoqWh(V?z)(S)2_n8ZRr}l!)n`Th^H`dA|Sjtw2F?llo@m2JqI4 z$1A6?0`z+MFIscrNDJ^t~+j+Kio}(T2EB8nj?f-V`x?A3Q$RFX$xPs4A?qrxV<2Ag* z*Pwk8SQ>hmojRWypOd{NQ!EZIsvSr(9Z$m264&OFN0rj)Z3Tm-bl~_^B9eOd9}7># zDM5*;Xt|MiGdSnvqzMj7waW2f<~Bt3T_RM6vk!1`b(N6fAtRV_8f)(BK}Bx_gHdPzOzPQUPTTGE{1<>XSN)unTH}RA08! zO9Jy-NIvKD>kyzaCw_mdsB}Fv=f%RfXuiscI)@C%YcH?A?B#IuN2;@cl!E3?@zN1tcR3MmY zMBP3YsgA8>kr10%LGOhTq70M=O7O_}r3?{9ELCF;M)enaZX#n3zw0 zW@ALZEa)4HLy9%f>A`IDJ1O_7e>+49`kOEt#p#i(>Hs5IN!%cbr8yCZ!P7t2!FhE& z@ooLDq>Jz6UF9A1n1vI!OnB5$K5ClZ4C?xBlfMY{-8TDfym^JH8(Cob!|R*Ae8a4s zn1TnN-RRexmqwq><)2h|N{NKgGR9J2H&>JP=iuYV<|PkZ#sy?HC%&XLaNI8ViIdeo z#%$FIW;zf2Sh)2-yzsEJ>*usDh=_0|Dw~guKQSsWK!o1WkB?d~2a^@1aN&dm#KNou zBxS1IL3xlg)^8-toly;NVCoNmxYH}!w}m*_VAi3{2!e7eFPE|qVhFSWj3Fo%NoEanqKEU}@+yK5oxX}m!vNb`loOZfd=(>1QW$>tQu|zFPVc-l8c!dI2Z|}b4k$h5i<9ep7Cx^t-hTSf^!k{}&pUC852ih;euTiFehJAq zT%X@bZ|9ych_{?vaFSR2{#~e^Vdc8&M^Wa|QF=l%MkvGNockUWos#1^Uw#WE!}P8(&-1m3 z$S}cA$bgg5wqHulO0Ok&Re>dPPeC?;ngB4)B^4lM4u%rGvQ%>r@KBW|_k=Xt$HPFf z^H<8gQc9(z`e@AGS}KdC30ciR(FZ}?abV&jdZ_w z{>`f!G=!GosMlvls}p#PomS+c2;?(_X9JQOnOh;w(_I*S!?fW(t7ul4QZQ@Wp~dB! zVcuLPZlc19$q(f+%DDkPylvB4qw~jdJ1o@nluRklGZMol490ExxtlCjrN^(K0E6>I zMyu|E^g$oisS=GV?w``HCZ$lIC2q}W_4oCP2>{8)4HDF;IEsXk&j%3hYTP%uV$5CCqTXW~2Vm(b?lbEtmgO8u>TkIs!A8Q~JZx z=JS~$@{W-#yBiS}X?$TPh#XsQ2PKQ@240wC1JYO_<^~Rxi4yffYE==lnqhXeK}8#(=OsXx?yhc^kJ{zui0A;7H%12L=Ef|@1$!#;UA1%Ub%PVnGRBadhfu^|+B zcTs$Ovly>K8%X0dp>ls$#R{i@Q9Q8uQ3=-cWD*z%1+r$Th|d(8-0GsIunE%h@fcog z+9X&s3)D@hsyk7BV<`~C3SjY9uA6bYA+is(V*dNSd2NV31gvGH7gw2<)(PDm$Pp+B zWj<(%iw*iZgk94OG@gv!s}CJE6!()!=YJBf#U_5npaInn0DrJyGh3Z`S|MJPewyrT z_~OCM>2fJX*EISffky#6_l7v)*R7T*I~U2K9kkd1!J$|B z5_J)&k4Y7?DsYcDn`hTF-Zm)i)rFk44|x%ARN(y}!0^GfsNA^J6EE)1$Nh1B@YxC+ z*I8`1S7IA1=u1xu_2JEu=FA>y7Hn)9Pchc4sxG-|tdvQIXNtGQzxk8`7E5_e9Fz6+ zHSq-)LO>QaiG>Qn=trYmF3l9O!oUM*L8sR zYoL(&pM8GFUGz*NE$dlTuO-TfRAvg;tzFHi5F8+s zL$P3@#wrI}%nem#d$A~PI8KBd?8GMRMTnrqy0DYo+dIEfmm;om6BGzSLSA^{R8VmA z&C^Y=9JNF966wK+4^z$_KBG?#IMmAqmeP(bn8c0dV7)g@{^Y7Oo_^VO)dF|v=-JUr zueLc4iZ?Rg zG3)J7A{4ZT8eDF|vm15Z_%LG}Yfxg18eohro*1*Bs5t@jdo$U2b=HKoE?E3swRICjeTMClyy>qlU7RXi&L) zpE2p3O$s*MIKID!J2#0HSc|7CSkfjKZHZkY8l-lxV5L1HSpub5DG%74c#672lSLD= zLo;dy{rDdl`SyZtpLW>wp5GvGS6*@CHq&_sA$_u?Dg|O+lIodSyP=N1t<)}Hn zZDJ<*DB%Q>OLDJglwv6=dCz3UF!5LAZAr7bMv1Ftg_s|ON3s&f7_^2b(+jn$2g8eo z8jB$84R58-PbP-Jg^a90H}4cF*HYULKB_h!EudZ=#i|*;pR3{%PdZ;^qf4}A-#9&t2NH_`}rlN34In@6|MxvgHxV9K_uT#t^0b(qI_{) z=J8wqWJDve$zI@Yqp~nx@-stOZ@1;pJ_q>Efj^PgK)8)>_b-jUcNBepQ^x4@a)8Op z)pXUyRGABomTI|+RqoD(RPw>jx``!O|D}UbFXWy_S4GT5Unk5GL7n}su;y5*7JNqC z{m!39cU1x4P+&?e)J`5v(D18UEArZ2MWWx)Zdnz-SxXhc?D=XE8r40@MzMt#%~G(X zzQpQysS5RA8~65p=QK9DG2=LW!~}##kYV?{k%htKl{n-&6^M`|bleL}tV(3N!%-=C z5+OC8pxC>YQg^CXi8DMwn2BCh@BP?Y_@fZbgJQIpibm|D0azm&0g7YKKtMzYq0~Vd z57T%=K~a7I1pt0pJ-h-B%QOrs^8LCN&jJQwI*3;K!0U2f%b(oHG zoEK$pI6Lmq>mq(#cF8I=rF0>EcwAnF?7!~bb*u_a*2pkXNwh(pyQ)^qeK`^>s01?n z;Z=Qia{5Ms=PkQvn-IyH6?+lO(_6tI^A{wz=>vkqG@A3Z>Jp>1#~`$SNfQS!H-05O zhAmKmh-ty#{TjuFa8yp~D^m=Xd97@5*QKw@goM&G+aiiZJ$IT}`sj00s%$>%>4|J} zbtwfovT&pN$!GAAD_p%aJhie&spH{j{4#q|d1&gJ6XyZY`w!u-Otwr9&SmH9FNQE$MZ{j`@LzRC(vKmuDNH zth237o(ZceNwIDiBs}~ONhpE0EjvzWk3G&4*1%^6psmLjgQLQEj`2bSIyvNkYBr$T zynOkXM#Z*ViXkaSsg+!{Bd};K;$U0jk)c{I3wUX{Am18#`njWs88qkYcC~#>REh1= zi5HR^*si9`Py;}x?W#-Ga5m+gL{$5tegA{GVhx?Mqhn9HJQ?m$B@S`=6VuS(v*bOv zazKHgintv|HsQov%_9Ff80Bp$cn1+vPBbEVnnb4!7;H2yYJ_o6vf&8jg~>Vmg7gBy z%5aKh@1BsibuLfjL#?z#if;uz3{E~4X5ek=i8Kqdbd?y zi($QC=k0hWJW}e!!v0>|a5;~(c+Lya(L-y8LmswaB}uAmNncmFcJC}Kd7O?LCfApm zUE=OeA9Fl1PlGyqvT~tG9!ns6li-W{uqv-887uxWpQNdPh&3+ro`c&d@yi zkx1nF&4io@$~Re?9u61J6`Nj}R8xF`?iJOoN$ZwZ%NDZl!hdakd_HjSV8df1(24kh z1@bHQZkSRdoNbv*!(AxK3`TnSX8jbxhz8&J?NEEXo|?`cBxughY(EsJp=e3MMG zAhK_dxp&tQ%>$&_HEzOqE?~X(?kuc%HAw}qVj?R-sn8@tC9~B?xxgSDb>&kR^w+bFZF|3 z9SO|`9BAd_>cH%CrhuK}k|sKQcx58Dw240^`#o;w2GJWQpGUryc3#Y8Rc2|HgmFAq zG^u0S)>&4|2>~0Qd3!N*>st0Q_YH41yPn_-O-nJ~ol6iRRLRpZ(H4s{+q@9yaWQ=`( zI&4}C0t}>%=@pQ!G+Dbk+`?7UB|cSaakIE_I=^&$ylYUBoioANQCV-BsZ=7NBaY*s z1tj0DVKfU@$32(fd{XY^VH!SDk-RwJEoqx;nczVT$*iRRkU2NuRYjSfjkKD@HaoA1 z#+>^x`1se+gSS7*epM$KR=ZjJkG%CSawHWda@xk$WmabhS*Cvb0qm|Q5gr}+tuR|V zDIbf@>uF3gR)F;!+Ao0`9E6!R`Z0A;0v9+crwu^h#cC|@q!MK6z$DOduB%*V$$CLW zDn>0C-hig|b)mza$UnsTrLKqqCg9!3l=tz_ilzTI52I_LZ==H-f;;>=*4Y22$SDgaoHel9)Hn~sXOg}JpF zvTC?_KA}E!i8UNn{Q)_5M^;N5KW~kgVdG8mtYHyu@hRmHOV>KiorA&`n_;Y-;7V?A z-JW!(`rGZFI;YALAh7-t7}2q$O|qx|uy4pFUm7NQ{EoiP#m_-ryq?ux%tB7u{+Yu$ zUR=C-J2K=J$1Fa?`0UZ2iNnaA^DC_Upj)Gb!5-Y+-<0LIy~Wp(sh%pUN*dyXeg|*m zFlG%3>VqF^xE8HW55Y6`*f4wy{7NeeZNVRw8D zPBwoE;a5PTsQcoU_PL7Rm z4f%cYe^=wO{$>vU`u-xP@|1~OsDV|U)fsihj^KJw@+gYNr4!WZl5s-pwM9c25 l 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

          m(Z2~JNnN3Euhz|q5%iWjid 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

          Z68!vt&j?C)s#{fwSXHZ*jXiV|`@FdCg=U!6Zy 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%0AV>=y(=J8 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�HOLGNu}UvLJ0J(c|P3oll0ifp|P%V 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≫R(4=!n%AIXBGcaT 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 ^?NP=;r}d!j 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

          eDPU|-D%4Z{ z;`h;JzwNVY7o#3;e_=aieUelR-8MRrnR~1qaj~zRDEiSub~2}kXlU?B^YaWr@0Zr& z?cTk$hYrnr%=wblog;!m^>Gv}rGz3~OM+-jIG9vQ8sCL)`2E9i>5|AIy7XgUs{I_Okgf9Van>zYBw3}-< zhVRyXeQdbPNph(aiauRSp1$-eZFzKnNi^Kz16Imh@qs8mjlY+Xv2U>`D6e!$_ypeZ z-U!t@w~DQ^XtVAfpLH$tPYO{HSDpCf#@BN*S+8pZ+#~)B{&?|h>_7J8{@YtlgXeNi z&vbDAXZpYtGz$t^X($-h;vG((Pm--&;Wh}n0RX_N=$fa%QUIH74kBvcCw z_yeIxD2hwzm(9!a9y*H@YN}@zsE}8V@dZdIhr+iKPtArW>j+9(Cuj#$LPF4knU*Kw zmm+8B)8VOm3MK_T^TeJC{dl1PX->6u`SJD4b6ZgcaPpjVkfcpPeZuf7ot^gmGl<<) z@jrmGrzu7sKQ#O;J0mDJKm&kH@{(2wwKj4|6XjO)1BXBO7lFc+8cdNjTH9oiwml3#m%})^kSzN8(t-U4w&x*5W9rwnKJiZZK(-ZTt;BA;yWbTtEh5ZlazCUZ5 z-Hs8;(Da({LdsKtTVAS`-`*JrIqUxKiu9ibJTg~;md&!SLVH?w@`g{YRGojg6Ci>i|xp$_%2AP=c z-lh(WUov~=`gz?&B)sgsliRJuaHK`UZU5@!;X4tBA`aRPj( zqZW=cB~y#{4XH--R*hH^`T0EPymHKdwwdYr0g-h$&t@tFm;YPFE#AcFY364{%AqIn zI*09JI{X(7XNevtFBZ3Jv`?aIHjnmKu&w?blQcEf{;k(B9F&r*Espcukg_`sLX2+; zV+20B%O3=WOXA=Bih?sotNZ%^eq}QD0QQK&jAcD#>25~&@17_8mc??087O}N@;tkV zdOX?%*ZtY^03!t=7)!L=!lE;~qCK@sSK^Hu9XI_g3Vj5u;c)yfty15Q38rv-%l>Jj zV10=FKw@hi3(wEjGuj93l?atpSnX(X{4gb6V{a>JyO07g?2HE!y?Ttxg`0X@WwV-7 z6>*m4q)F2Lzz18mt07u_mt9nhNoVMyJEO z-baRhQ#7}12ra?1Xt86G)p)qWfJql#zn)h)4?zfX<+A>j6%Omlx$~#P87G-jBKM(02(UBaLU->1vzTa;7ZH`KjZSx0hG22#B(mqyay8*WVSP#pa#&=oewd4-IM5M%IhQyv#v7&b5p+T+at3t{>=F z%HE^u!OG(f9#u#o^NC~?<_ivqEK0hmFU`SJbqwYI9T(~5LO;+<08Q>B|JP?I6Ept55 z)Ws*>71Xd|!KcnjykMiXbC3^Eczc*}pbuqdkkz$ikvm1F_$c|&DqN<7+U}*BRxZJg z>AbonW#@?7S`LmEA5<%>{zX0Q+UY`Tb&wW?gag}#gLJOj+CuF%u8NJjBt9Bb3_RO8 zPTW=?M=Bn9t6v#)6@1j~-SPL~H-2TkJ+R`L4nSw5C9`spxtEiglp`@$b#dJ-W~gSv zlD~%d6S&(Le&>do2azuz)Q!;fM$0W}<-GzD;W{`z38@bJ9&Tf-yRhOTqXki+4NnB& z%M!#;`Rgg($r5{yOnMk<$XZ3WYKZFd6=2SOrKAHpCRq}bM#r#abJ8x%d!8@)us7j< z4kP|a4sXe`oK|$4PWEW2sri){7ON6ZQ^D60AGEM8KeK?odCY-)X^4p2dhd*SOuqKHF5hUvo>D{wB;Mt zE?E~&W?RXh(x@<2Kg`kAuOD;e#;%KtISFN8bvh}fvE)AmT)7e;f}%1sV{q|FHs)Y zkQ}*p&Klf4Y4A=?#zD+_5HqK3jv!R&8d|{oORR4Avi9BY+Zj=ZYYO70lrBqYBY9g+ ze^65f&d{jFj;5uXE0E(1o4evj3RJ%|R$N*`RA9z}&UJ#fm&)KN(4PGv zi)MC4Yh;9Ijn@^A^*^3zeK!8bJ9HUFPYUQ>=0%H9eG{6dDlTHK{u1Bl-RISOgC11& zl@CqW?gf?)IIhA333@B=>-f>toX$^=xr{gFh{@uWel&P^j2$(kD9 zdI7rbrsp9x>urd{atl7vNpJJFHpc{d-@kU1@%~w}lDzqO=MqdE)lgGZLOOO)_5aDufyPZF$e=B8wM6L{A)PdUVx5F!`o`=~-yliV+g zbWrGoHB$<~HfUX-&@?6`T<~+RkhiawwqM~w*ou;9$5VR`6CO#>rw4UK?cOVOZ7GTh ziDm53SFL#Os&n&fL~Y5W8f9#)*ESpvmN#R?ZOb1Nw{V|E+fr;^lpFTz9lDnqGW|B< z9A9YYG`Q&o2$ZiDK~@KQzgM}haumtx7t`w40T85D&N_*knv7QrlfZ{ZORvC5T<;ys zVD6#Ml$-4bjo>#(8+Ye$O~whwE%G#{`45}U#sKph1r{5pn&hR%3eJnBsF1U$VX)Vh z^xR(w1y4DbsMB`+W|KeOT?LcOJ`!ze1w&2yE1U&}?>~M~;Heodz>mE2zRU~v@Rz;D zrnG$rXuRTt@P|+>ae=Cm$XA9`liOpGHuYPasNXGjp47Z|kNE-7{poJ@)J7GN2D(;z z>>D4%dP1jlqbcw@aNiM4&*1V?I?jJ>vfUT!DrQyqD%FN;r9+-e*ngW1k!{ITlZd^B zW>d9tPWYf3UwSI--u;eTRQh`GN~rRRl_s+Dzs>Uh@7jU)^{-;B!tySsvDQ>;U1L;k zm~TwjGRIvRPSNw%8S$@QwY{gd!UO=o5vVH85NwcbuZs>CNC!lspEcxurTnT_9hFA{ zbr(Mto0S>Q8?`=p$~3w8#JhRMLT}HH;$PmJkst>Ya z0IylPqm;UnU$ecW%jB>?;~lAz&u(Q!GnWoZ7jZ+8Bi4Q$N7|-C)IPjQApGj%GbS?u zJx5DC2PA=MIJ!uM1UFg@=-Fa2nPfF7(R4$wOVBvTmcZr9`@ZW0I4r&#`^U^RuoFORhA|KCTWoD!9CJn(#DO- zrS}{=_}M}9WyrBNL)hKs!C$+-z5hoc@h`E)uJR;z-EN9UB*8En!`*nK;QT`dF4>sp zR_4{Ag7^2_apX$9yK3BP+Na5WZu4DtPn#SmX^4qeXwno9l)rj~(55qc-4r$P^z8>L z8mDK}Gz?Y$sF~?d^q7ztymme6TB*WLLJVud?B19lM40nJMuq~;`_N5iNK58r7nOn> zBLethCjB~xhkY{rzV&rz>A9H>-6v>qT?SGWpS$Z3XF zuAJHbw8Yzls`}v2ms(CFLsm;#_jS`WT}Sq?Y(cB$nR5MM4+cxg;Arl*-?kiFQ`z=I zm4LFc@_M5V4Svrxn}*z`^>|&Ux|Z8&@AcB(#wt>LGYLLtm~A~nY18VF8CvrEsH9($ zC+riSZ3oI+iw@U1a=rb?g`F@OfodZ}qNxO?FGt2OuBw0y3$y{)k`iFb7#}l>NpEh@ zJ^_=C6E6Wa9LEyo$%fz-8q2EYCm3os|D{>(hIhCpGC4BE1l1(@AeujI^sxK4ef^tO z);}g^#ebs}m_wfU7oVOz)Xe6@e3<=Z`vWdWUgS<9?~)5qZ`xd!n=AwXTMk~lieVz7 zxA)jD^#2y-{z-r<2xhgp6y5Oh;Zv^;SImd&XeB>7J$Gl|vlJUAES^a^mw)__d~KG;k!iUe`4M z#c#A?O_2k$)9^WnlCtQ@{8Bc--v^P91cBuuYptab*+~?RW?xUXhph>a^}+9B-yKXH zD*0ehaYhROm6CExe6C5%=?m0hLIJ1DJ=x^HAfF+4vxXTW$ftTIbI#`)(Q8+~&J=uZ z*ISzn6nqpGqY!Vp)%uELmLU!iJXeGju$=N3zKvmcEC6-#0-oVlQs_xXThx0+?z|tM zso6}(ez#da>U7N2u$-^s3E-x3df7$Fh~AM!-7~7!rl-c_;u<=!$Co=t47*^jRZ;p2 z_kB})9qZYJjQYD3MHWvVzKqZ#9f>;I^HBT2{*soiCSBxuA!}H?Q@CvBdZBzSV4$Si zA6eCfTq>(bL6*+OmO&oK_noLT)-AKrldb>D2r0eF-)Jx*ySowv4eP%#fKWxK!#?1# zU6?2Lrbhu3jH8$W>{`E}8-DYBm6%^o0D?y6%ELe_r(Aou6sN+WLQb3s)ENN7o$fsl zfi37j(hV`HSZRY8LC!1Mw15q&`uX(s-^B!N8D@rPWbW=7esK2>koq6G`zN_ap8=qm z5sLe${eILL>*na#Q_LcJHQwbkmb;P7+d~g+2K4btR?xB&AMNdY;9Do?ghq3trH~iB zuOy{mOh|(d3>G*xrb!Z2?(i>0wpAVl0Xf|mw8G?@!P%nzBeEdyrG`uJJ5feA-MVH= zZ;4&vK7vdB{qyXlF!|QIpONI6yo|{JMm&4YBqzD2E_yAuI)^ct9JfEByInOX%-u^b zvLS?d}GtB+4a?oo)Zpx0A!!EE3KC-TSqE}N>hXqv0ImW&;iMwG7AFyPAy`5}R*AP?yLXgUrtxQg0H zVMBj)ODlr`Euq=j5W^3i3Dw%7V<5|b3?8hnq;%Qug)=@ANF5$b^>)I$;MMUXoGI-mu5^gyys3kLY^ z{>Hbuhi*Z8kA^Gk5kgMuFhg92vCrR{S|7tBN*%m6t=oz|A4A3fPgNXPt$oUrf9cUS z^5No#j)z_?E)N~P_tm-IG3os?e4D+Wfp=b5fXRPg+lR;++*c{l=y0)p{A{fK*0~?g z|2AH#n~U$WqD|vr!~PqSDpgbY74zLG-FBOKdqlqY!gb_i^+9itAG8&!@O%n=DS_{@ zDbg@(7GauJ0A|8$==A8KXTy$)ED;jwB5 zu6%H1l3bgp_3abBFFo-FPXSxD2{rr*b*zQIs9yUKlgUo^3+}b|q7t-^m#L`>Y{r+p z|Nd~`Z|`1!KsSKaiwMwh4{Rz4B8P@8F{AvvB2EHdTwIRllcS!XnY4{MEq@A-{Sq2B zrYk{=n4dPYS=1rP8sqal%uDx%O@^xC#Byct-R8)GtopJML(8c) z{Ys3ZVPNPcdC0`=Wo|tjUOIAS=IUj*WYPK4okzC8 zw1RxjEv2+;49>MW~?vlC$o+@b;kFGF=7+q-KDe~ov?CAuG#fYk2avd z3<)p>VwLNkk_7C<(j6z1fd$22m6BFjHhMT#M(PgI<;NIY7WqwH7ls=fRqtmtM zj#j$^>{@G@Qos|f98v)^1VtDHlv)@{4HY1Zu#&Xzu95d=_WVryOiuoIlwR=G)9$i* zxlz5sHbn`v-+pPJ+6Ij*-B*{Bim+vKYf>u20sir_v6^PPSTM` zIk_!{h5r@RhQwgG&k$9-tdC#Vtn&SINY1tb5bgg~v-aCSZGl+6h)@xB4&OIPoKF3W z-BN`MVXKqTNTGZrIqa1LfDC%Ol8C5+KIZef!?f+yJSLuJmRFt0Qu?6ACq}=OvSf zOyNr^-l1zhRgUT9+-as<&HF8;_R#G4d!RwMhMDFQjmEZO@=|_C>T%?)DYg<)HrM`v?0*!Gch3PqkFY)vC6ID9kO0x#roDXTg>A6j?GSP zxCvmt0-yf4Q>CLJuFWXU%p~Q4X&M-}z4C5&Q$qgHSdy6@VPSAlOwoyQisuE_lfLOkt2ius3S_;{sMJNXi)#JVay&9T&Ju>oyIgR=K9FSAp)%P(wQq|0R^Sr-+JEF zFxtX7Xo@k0N(Rvbz4KrlG}q>I{$7GA5bBhK@W;F}G2#EcySlr({bu4nBiz5b_20T& zH_uM#+hw~+-sN;_TCb1Cztaan8Jj2zBP;$KHR7w)Iqz88I=T4IV5kcHE3&)37bb24 z9$`w0ygd)VXaSSqf^GQ_^n^(k&3PV!{~cqMT{kn7L_6rfYOE!B;|5PIt z!DD9?uZ9TXb>F4%FJu%>DGspgu}TeufdP2$7lmKWO}^>rn?F>5me1s{rgy`!uW@U5 zq=%PvTfqEzGyC1&k>^4mt_376?Em|IHv+)N1Ymw(G1YsqR$cfBig8KlK6e4!HyFXv z@ILsdK!;wZNN5ml0Zpw4ENW}K5OVR5EUN1)Vc~UyB!VWbp(q5C+1pi9C2Lsyv;-L~ z%VtCQ`efDD{${QBQRk)`V1lmStfgCxHlB$*ojiXXz6XY2gJDbfrU3f-^1WP^Rt-(# z%*{{$14xRILVCPY<$6C_&ZV_Ak|Z@Xn~+uCIzJ)$KsT%n%~*Olxzg=(@?spx3JMeK zcblmeH7k8d0x&Am(sPP}?BnmkD?A~}iy@E#`w({pqNA-JchF>0{W3-Pzu&B_U!xqn z0#~f3J~;IQM_JpiFb@00Dcyi%f{2MRp;@*<5E;MH=97#Rwa4-4@XXc; zWK5B^gtg*@sneZeQ)(z?2M8XS7N;;bWu))>)v?XK@llS-Ps>M%NvVkw1p->N4={+k zZ!Wk)3L3MT!!1mX*pFTn@-c|F+y_nf_GD-69)%AG?D$X5G6vQgA7dsSHoDrJ$>h`Q z5I@+FKNWT0Z**ItE=D);K=0PX{IOj&HVdR&-%wo$AhJkq&1tJWJ;W+x@EWy@c{w;A z#l?^MgQpbTWQhoW#^m}yunV+wYi$n&Y;Kbo3WS8h=&S+faQ~&jZe1z_hw_s4tx9Wr zHO1)GBFrlX+*AQr;Wupc`IW8{s{&O)%F+(Kh7M2<1J7t-z9e8nl;&lWcmYXwbDtQ$ zupzdO;GC)icJQ0GTRsD1LPKV&hZIbQ>H3-}W>~^Ds$)Z-(u%hB@N``r`?wxK4gC!oF5Eno%rs@4O|&n-g()Hd==Ny z--GV`IzKyPK8olXeQVg8lP#o!=dIFmLh9^W>IdvJMATv0!Wb@0UKA79aRQ3}%IAmJ zqhb85@Gg(Rmo3VG$8V@O%@a+FN?FNH93wTDNpAdY!kFep6^5HjVe2XNgOiwp;>J%} zemvam*xhYAvijc!UH>8+@AFS``3}6xheZcB32(=*yu8Y*9`fCP>DWY>-va51)Dd4t z%>h9Dniw5o{v$y?6Y{5Atjai>8?NF$cDMepGT8r;?C}~gjUZq$ib;>9gRns3wp?$L z&-7?jQ`WYi{L8B*W|Uw35kCsY54>delPJ$tn-utenV#)+Pd#+=)dEiM!3D$9mbLt) zIgf0@-hCy9UG$y_%|1Fbs=ghJ4vE5vHjhTpZ=UPj&H3A>|HmoE$7?3w(yrR|UuS+K zUpQ3*Og;wbb}3=zN8JRLG>3?1ASd1)2sP0zz*5b*3+_`u$K<4eC!B2M3u(@1D9qSl4Nw+23 zzq_$l%+7T0`dID-bw7MK_O^)TtKfYR`lUD91YSTJTuLS{o2%%!O7;$`eqlU%oMI** zP%7X3l3>0it*slXjf&fJ4S7Qd?%km`N`^Kh(T0*DH{DMq6o(BnB5zhjG*tyIAOkbi z!-;-D!#l^xXpB)g;RBsO%pQk)CCSAL3AmJa=SP_NoH7ULk8^HzHAjSglg)tZHnE2O1u3!fv!RElP_U7ct|a8^lI#y>yh;#@BeQe0OOYsC6_s0#L`RB!CSTNxFbz zS-#@>bg{CVfL;=volD5kVwq@@t+e2FAW@JQL_qP*bB9vFghCB8RCRMD|L8tfk4l;2 zFZ3+LCq_U=o~)UXeR;r2MONFBazUuRCE?VtU{8EKwOZiwQt}8oHwAs$=zBdiZirUfM=PSMe6p&dFb4S<(wC=<}e=!XJ#L` zhsAn>FXIX)##CxmpyLz8;4CLfG{)P=6jsxTuQP$AITFjUoxTrRUZ#SsL~gJpSjH+|vom3u_)_zQW!CZL7pWiF4aCpIMn_!TsfQAh94W}2(zp#vKf;+R;O2)bK@`owU z1BeeluJ~UZ)N=FE-RygQgg(-2IiY>{AT958zUhacTh%3D`n^9MEitBFeD>IWpm=u7 z`QFTNHPB@JKp*j?)wkyIYqB+6DOL=3>vxa!jDFpCVD?=)4b@ol?$7$0%H1QbfNmbx z@XXljMGHyFY`C@9`)vAM3>E#HYZ#-Haz6QPFA@QJ>uB_h{mkCbr5bXi0b*YQZKY#q zcu;^`==|0Yz@{3fxz!!9_&|hXBah96g7+F-oJL?3jdNv97LuE@JxmvTT;&1h&`XGi zz+A&weqa$1S(qlujVM-A`n&e}9IrjMyF2rry89R9eD3n1+((Cra&O0txLTiRUiIKH zt4E5mFmtfYMgu=>%=1*nw5kB4SoJ-(FwS^{3IxHxGegRX&%-Vx?;3K|BQ*7GpcB0} z@ck{?hlMJ2GcvCo=(_Ueo8|F(6zcNhK-l*d?V*Wmr*HWhS|ar-zmDc!Xlr>d<*GIQ z(vkZ1oW}fCj7qCp@zU(=7ot1-b4!rVC%wk^(#Mi*|(I1vIp3Nh$0%=#Xxeh zoNxdwuCzH)(o7C3$#YWAXU+@2*!xt5z7tDCq`d1{H9joL`7w;9lo%Fm%i@O#w1=cY zwb)=^rp(lQIm5ZV?9Pgjj2KfaDO}CXeOUPD6YJFG0qv1{2Rlaf&iU?udR~jszK(=k z*6~#s3HwNJTi3kSPwv28B4wsxqMyY!X|EaSEWLi>ow`>4MzDKKpLum<}!~`2Zw5V8iKo|)AsjD(x6() zOcdu>COSO-6#e<5gytW?tDTWQ3qyz%0gF>d3nBv%iKm3XQLPMfD~*@SC|h#$wt}ec%NKISEhj%{+k|{c5y&bfSYX*|(4opVf}D#f zGJNpH3H6nh!TK@L@MHO3&z^glTz(X(zLa5H{Jre3@(WJoeQBtp2Inx8!8%3WC z%H}{xD*g)qEotyRDrTGv76A2tT|*R6zD1hK$|qFm(h|kP9nv8lTyVbVXg7+ zBZUOxBq`-}H-&fx+~Bl5^ik-z?}lp_46c{G|L8m2L$_bD-q?DiH!3vlXf&e=3lG0E z7EGTA0u6q=*`L$Hvs=dD*Hj;UYu?m-$6u?RFZ}d|upRpWCfayuT2{c)l&tCa>~hMj z!;c@YcGe}8IQ>!Xa9fiNQ0~V7w6fO#vh_G4Uu;UYarG;FQWeh4+(_^s7KOrdvhbr1 z_RWZ3B2^4koUm^ESlYJfjW8^@-9nt)@84mN!+Fwgm|gdnRUlf;;kp_7GoG8O1VJU= z+Js`#S%L0JlHV{4z#W7)?Fq3|xeQv)MlyVoO%%E_IG5#EKwAtA=*gI|vjP@>KIyx; zyZ--q%>9$x#}?jwSGv=*FlA3Sj}**=L?WxBbRn1A2FWE}@oRnNk zwM*AD3YwJi`(Ia#dAs<$f4AR^HEf0PtNLc8d*Y(m;#A6{7P@8G<&BlT`Gd&5Rw{zc z#1FsjAPz&{S2W z5s;toW4G!c{QnnS@BNqb9`}s{BBG+=3=kD(?f`L{p`xOqxiYmOIB>MwsV#8eLd7kv zoH#2-mbQ+#XSvI!E7R67txk11r!U>t_xj%Vb=}wZ^Mii?kEgHqYdnW16yP4%AMOiX z=&*IFtq4$4y3zqmLE;xwO>~p9vee}$yUY_l%1S9lou3m##Db%J|CQ#D0%KTo;kY_y zMAk1E?aCpsI!!HTegsm5GSf9DSCtg4CZhuVE+$=3%u9*)x7f?b(bk}c%KJSTz9x*Y z^X}1J%+kE;&NFxra#J=)Ra1>TV3hve=aq+0T95%P_s{UOki=B2{AQMPX*Tjs%xZ=X zGcQmzr&%?%&ZhLiYOC$a4EU+GEH)2j_{o|!Hjx_RqmsQwuluGs6k!WD{|JC0(Z}fn zobb~lYx7zPl*+^SFNJQQP*NyQEi!h6&mSddJg59~dfKbMwMhyPX`_W!mNsPa9N-9S z2$W8;+I&;p_+OWCzXyl^_M!+V5CbBsL)$hP;kPJaG-mzNKR#6rnUPh0 z$kN^v8p;y0LF(Jg6rQVda>1XGnW)=EKOEsR3HIdFvaP3u(GJH5T0c^?u1Y$pW9T7u zql)6A4gsjLnXrFxKbS0Y#j+XCu=?@h7mnTzWyYuod#7TD5hE=3m-P`(ZUaC!3a|Eg zd|W8OkbO}_4$a+AqmeQ*#8Vxf%%%f)L#Bw~O@r+eHCh4M8!X|v%aJLBU=|w9!eAR} z3rYZb%d=0_2~H~j&4fHBwQeHpW)qEj1A;byI6*N2|FYyEiTgt}xa?K2zE^G@w#(k1=duNwlu z7vCHXu+h<}>M(J{=0cbn>|$X3?nP&4Hu~^z-J`P4GLl!8AN=^xl0qrRx>+mGo3gsHxF(4q0ugUDlGQ zXx~5U@}Ussu?T#lMS;%IkDk5!=?z>@p(KKS>^&z0Vd0VXa=vrxA7c?e*7H7@gj2M# zH}j?k9@qV&T{UVH#C3%tG3@Np&HJ(}-697|RvqefDVa+Wiu#!=xAOgQuvc z2=z2wx_o`V zro@P6dE!MVZS@05MPbzn#}wk+(;RI*;Z!l9D#YgPKSR5{9j4uzpI?#C4mVJ(bfAd%-A;D&M)SC z5?$tmo~wk_B8ZaP0Q~rVOH|Ox!J(WOVCO)CP=ZwShn%Ta@O`j+#clRZ6jUO_ElS{? z-1%0+i^!C<71g@%LE=HS%?IxY83nkY9lGpSX3f(^Y96+~ZY5E5ve9YVZNVot=ayG# zSylx7!L{!e#8HF0-@ZEF58pK~SN+%HtLMhgQWm%L(V3|3XTN%{{xQ{)amb_ASxoSM zvN9Y^87bBuBXSm&BA+mcTN>U24L4^A3zI;YydIa)B;jQ{*pdrf&D>sXv_*d&vD zb>b8wN#>#qwpVy$kt;g6mck+XUWX47EE{Hjq4YxK0R2nyWGup#V9F zgOb9)6>81U>sg#|Hc<>6>XeQ-&5u9y`?vh{W3(S2trH}zp=!RW40EH)A#iVm-Obe# zXvp#%JwWjXSeTP<>KGO*o2)%Gvz2Rbrmq&;Q=-)OW~f*ODe36x2Hc56hpqSY=5!62 zYN-B+x$n~2w^69&2Con}(Dn8lb7|UFO9zK8#;s6B$zP ztRljmaB@C|#T5PJFM)r)&B!5{y+3QG@4A@k1c-S)%%H?#FENY|V?M5TIFB?%Rhh%| zw_D*Mr|ZUReyra-~?+z&i_VetMVwnzP4F7W{Scd7WM3 z&+RtjiFtWzipK-XS?`w(vi>h9d!ELM-==seh=3gHhuGE{RO=K>lkzZ&Vr)a%FTr+E zhuso~O?ff;w+ND0L=hJD1e@W9`w7K9m%^(*^xr#awoHQL8HePg6*e=3R}kLv;4u$e ztyyq`bi4~gmA1Ya>6b1U*!Cx6ozDtIU1*2P!5J=BM)ctO@6uKWPJ$x(gh*`Pm zX}3G4e&8y6BAk0!ciybveGu}G=N~?zA818c-8p>ZSAfnPqmOSJAwQl5d+JB@5l^** zh2z%3CTC86UkTPWq^@K{@7<hUashqJHmF%Fc9``QBPxZSC!FiR z0iQmTN3#!lFM0y%*7zzTnd;lz^G z;8$GM&?lG&;xb2)K?Oh)Y*=N0vbc(NCH-VOpf1nW3!y6~Epb-|ku@MUDTI%^1ZfcH z`uA?tUT4>K+=(8U4JPi*He{e(r@+C$@}MVA;KEJgkBfzAGbU7P6I+V7Ab-zyk7>({ zKREH;ZOe+B<6(EY&Y_>9HLfenxm6IJJ#e^UhBtm+y&F&0eO^QSc~aZAu)O6I=!Wuh z&8%i>9YUhBrNAA4{b+)x4w;F};UPihGu1eS?~qFjk2C6ihr zKX8YItkJC5cJBa)ejb!(VNzO6czmzTd6DmZ2vb$ zlJ3)e1ptwSOqT_9edB>t^_IYxq?)1@b7u*GBZ;1517ENt>1PPaqLuZ#1I#JfDI4$P zY_W1U+0Fs#v;qT##^DAYi!SYA2ew0tLwVexlhz7c*QqXQ@#rQ zSY+6afd4^5oV(Fcc76Upbp6;;<#Y>HuZ1M7=ytaqoW5i zer`8+n`gPnIO3vvU%02Zl*7!njyN8YeB6|Lxo^Bj3 z)*)!=1&IewcR62hxZ@Fl2d8q*bR7>tKF-L|%J-CW$VZ>>RysMSg|zZ_d9C1oE<9W> zKRnFl!HDOT8|vc4-8QT0nW-_}M`h!HvX_ZL=;uLQi?Y^YgJ$`9v?c%wtpsHsTup`E2@74j(0APklX69XF`o?yyhV&{gu|{$>>s0vl5c7UEu8g`o ztj=22Mpa5ir6#sd(K*K|jr7Uq1?R{|jCl|oVza5ZpZl2;7}~;eX7#zM^jihnmT4^6 zisAg(U5&tQBPe?%6eLcB&kLX9?$f$&Q;d<>kQhoM6Zf>JQ>ysX@&23N_tAg7O`7QB zJ4{6b=>TucmOEn+4Nh;`ZOWX@wP6ZfP(Z2ci<{adi`Tq$tZ$187<(p+e`CMh$U;_p zoZ!EYkwK{!4PR4UBpTW6yKd#fnK`{7Z8h1r0mdu1-^lth)Y#UM8sD>5^g++Jr}6Bv z&YIluXW4tl15WK>@B5Q-Er+v=!Y@9%^kw2i=(DKz&))U^YSfhQY*s-U2ydtR)*?gE zz)X%27sc*N`6N|#AwxP3V2UV_Vdetb5Ert6OpZ?3WsD6w-vr4yt#tY`({V4;zFQlx zhjibQcA1wfQ{BMu7b0hZI5SZz>p^n-+ORP=b+{JRPyIP6#26{iAN~}KQGof338DJw z6NsPuk*0j=#HUk`AnESoaKMy@X?SilHR{WWM=z{@gYAEJbiX0jVIx=tSG#!W>6_GC zN%5nePmK3mG;o!`J{H6No>;?vU;tRQOmC*2;&T+Ry)_Y`)uU<*SP(I6pe&{cpWIb2 zBYB-|b)E4japSq`Eg5*DawKs?(x5dgeE5=qt+AA`+DO^fL$7Ej+iCUVhH5cZj%)Y=I%Z z`VB1`o;(;IBgj6vNQ^~#L?gQGxf37C4oaZh?GVWb#Ex2pR-mF>GAfHu{vZedl(pNK zWfBJ00Z*c!1B~98f2VvYlX{t!QzZ!g6f8?)aB#|aXi}I$N?6Qy_4~XqI`ESRUt2+z$j2<|dB8M`EPs8gxM?|Nl6?q(1ZO9C*KX`(o$1N0&_gotRnn<7KPmNvo_9%DeqB z3>hdSTjKR1?)~#Mv7lh>9A2=pC=!PEF~{>4-b(CgaM^NtIM>J#4Dt0cCq)YjPz1`96Ax^(577O*TC3JTmWei(m#D3{Z0JlgL(dRDdt13L9c0_x_tg0Px2 zj&5`fW;ppCe0{x-A7dB&eImJC2DIqv?kpRwIMX-ba!)1KzLuQBIo z72T3XcaIEYEQcSSx{SR3%Wjwa^q<<+_k;1T3D@`vxhX?ob{p-6lYmd=N(J1or}ZC9 z@}*@J!6ca@y04!u)^C0$R|iFeDLCX07Z9Jp%e!c>^fMG(CU#XNMWSHJF3EKJ=98Q~ z$nBhjAiNo2Vs$XKdumPGh}!U|OBODbgFHTw2}>jlh*2oo{cPA*j#xuTc=9+;ixC2B zI{EQf^gN*1M%AHM0f4lZR_!0I7ZSm9gw#Ml=dzA)8{K@jb)BH&_#R4muCXMXT^sr6 z%9;P7WBm;|SGK^=FwD(U{G4k?%sRI|#*ZRrV@!dCXYx04LijJXb^t69wmD*Ql1X&{ zBb4Cs3RDQ*pNau`b=!i4M054K#>gGAHC9FAUaKPZww@cUAVw*9fQatl^e!Mh3B#uo z1wWy00jvoo%`j)~V#c@uZm+-9@&ix%X}Yg=?JT*^*8a|55yUnKfq;7XlqGj}SW1hC_$vS0C|8+e=^wrW=dF?}@YQz)o zu9tiLKKL`#=so$xZ`Fn8iNNWz4aVk}5x$qD=G5E)%MVkQMplfkiKZ>K+Nc$t$M{F* zHl@K70$sG665%XQnRO~aC z%-T-I0p;;t8okbN>UZU!Pl2I*7lWZoLDCPRGIZ%r&6|m=Fcs8i3|(X#ug_0SK}k-T zKykJDSwEp#D6j^EkR=Xer6B5HVlW(>G^{Z%f_`Z0f@63iK-dm_-JNf>F+u~j>LGg( z?yIGp_qe&o;h=bIE}%&w4&Dx%iAu5c@B?aUB?ETZ6?rCZ#jd-eXJq^R2VL^7lp(Xr zn|(0g;}_-o!`dVuDNa2JRcRZ#FgW0Re)xjFs(UoJMnZLnHJ^(+%RV9yfvD&n&~I2?I$f|jGa=C{Y$;_(t@7t5z;_f6p#EY<4OT5>$UlhmNQ=;Na;2+QaeP#=Jn^r zZ%gKB;|HN5W029QF2)l8W%u5kBOeM$h-}>ip#sP4uJw6bP;;0TC%>7mjp4{vC&%PO|3g3s0e|5RW^zU=V)071}im@lNKAd_!Db_R7^mj7mz~S76@sID5m;$YhhL|x_AKDB> zk#vAP`rnB8bzrb`1PDhgkI_Ow+P6fm|7p;PNGxijj+?Qu?|!~35gku2U=nUpoTVUi zOs?(oKjK)!V=4#DtyPZp-grDNoVH)%TkfH&AwOMVdz~&4p5x&>lewb9Q*~}r<5sZ1 z&`YKNOi|hmH}A;nKihM2eAINSar<;5!4A$CB-^fALhG&ag&gZ+E+5`AD<8C3^0E>h zG!_oh6|cvRM?r_^ncgANblNssNEXIGv9XnYBtDthKk|$hq_&w-5)|gp7I{XL-mV;~ zDX>SB(53z@SR=)S*R!tt&9w%sv?*N|n#3^pviO#1p;$9L0pXP&dav&)>aUo#+YC9n zW>l7>yhfx{3Rs3AB;q&}OIm0bYo?2qTs4?N>kZc~Zd|;I9MY1}p zimkW?SxKB*4Xi_jD^bqSJ{a{tmbPQe!n;}x?ukj7q0y0a`=!>^zTKc(_0i>3(mq{G z35m&%T@ES`K0d{~WEwr>$|{&%j_h=_4L(+tn<72DDR)!)-l0+|l1U6iSgN&TVS>0! z;qN7)s|}|4jZysE!2G5uokC&hG<%!M)%=pQ%=DY%Y@&H#wrZ83PV4GQ?EAnB6KdpC z@VD|HlvuEzR%pg?uq^q!gtYIx>m$V0$l=`5hIKbLos4brbXdZ~IYy-;gH3p#Y9TF& zOe*J+I-?U#epv~0C!Za)t(`|&^Rf&ZhGYr6*!8hYY7m+c$mennj{ zJydARB$~QP2(XS!71D5s!0}iH7~DE?bhK zYRFp>{T%=UPXVdY2zrMi1M$B3^@&BI2bMBj^DH5jawc-#sjUc)cE02}PKt{TS ztA3ipImnroXG&h$`;_*QRqYFqB0O17E;8k=>xkk3vL~%^p6gv$tm>YE5Dcp1WwKk7 zF-WtAs}z&RK9EecL zmMtiay2`;l(Wv~RE%ITy_(n;XY;nnD-S#ZqeL~X(e0?32faaSjXwSFy%lQ6R+rQFW zUYJo}^REqV+J?WnYji6K%z@FA9{Mz1@>}&Th=1{MBq((9b##36@NH_F!q~zW(Z2$3 zYgrs0lnT&us%}-Pygc%=!SA-2rj1nECs;#(&j%rQoD+-Jfh2 zsM(4%IbD=^I38O#<9>Q9jXf5*q%_85`#J$32nrHSRqgkVj9jilVG_3dibRvkXDTHD zF+1SFfaPCXE&rv1`!7|_sZ`*=KS`PE7KE{05`;d)_!Y_Uab%d_#EKQHMZ%(2#;vAIhJu!@h}-*UJO~*p5fK z%(ji%B$O7&t4crdrzHh6ir!n|a*Tc|p6ib<}XN zII~o$G+Y9@{$REvW-jMf%hM!7dWAwylDUj&=FfZf0d-7BX)BH-@I4} z?u{<^)Y?E-ib6zr28F0TpP=h^avRJ7lU0YSH)XxbBjeAdkI({R+?0Y$W71-DUi2$#> zBW{C71Sj0PB^Djj!&8+3FTC#Tvu*k8lo z;xh5;_wi^+_eqD)!?yx`0xC#4i9rXEx)Sya^nFRZ*PhRlACyZ5YQ|i%b5|m$i&LgNb?384QOQJ726fh^ z;h_d}ehG_&kKr?$*RGfJ)_gtN(fIj<+Ta?g|G23!?k(RV?vi|MsijqO)%UHEHikfJgM&>Q)j1Pb!?>Ph0wuvpQxyAG&w3{Zv7c;u2Ti{%)5<;|?YMK4e{-<0@Gm0u?nKwJ_xOs>i#qGVxoi-~ z91y#%TNo@mRVPMBct6xX&(UHzZrUQa$Hiy^(%G(b^Zn&3{QwK}id)cTr1l(@!_5@4 zb;GG9WMom{+htKY4lyJ4BcecbDbj=975iWAU2$H59my*JT~6P4E+NG)GA4=aRc!7C z>sSWKf|$ahg=I8syM*5rrWYf}*p;@bFQX}o2Xi3g96+z`btMAq`762L;i}r% zI56nPp%2`zmlmJt75@>GxfLl19&lYo3*VGgY2NbFu0bjn=Q)M0mk&=D4DeM_*N(lJ zCf2-8F%x?Osk|6<$q&AfP}&^*ec-S`|8e(xnTR{rzUAfH7=PyLd_OYvRay>!JQZ8` z=lxt#qqb$qVK+pOs(H(IdJ(5edo7T!v$VLWnp#a{1=Rxk!F1R{EM{{}BlMLZT93+8 zM-b!+Ur_L$v3=tOx4BwQ-cw^_BAGXc#rC~N^FuJQ^Gqqxn6g^o+?NVKjR!=h?;QC)(O_k*KVDk#Ks=N;r9VxBgb?gS1G(dGEzkR3!%9Cn4if=W>0F_0AdL5|PP{sb;je0S$c^7Cf#xw9Ks-AE-mxvaG8aNbb(W-f7GgZ@uDnamic zUy+ta^xb$D^ehr_Y8z)YZ6`9wLoL@e5;z5qBkXXFn#OW2A=38y#kf2A%qp{4OQ@uq z5hHEmlb`4`rQuFqGl_T6A%8iLcV5O$yA3Q`bneB2HvoVcpvZD%wp|u);Jngn;eScWOMm`#rZjaY;@Tjpf)WnqXA0X zf+n51GMOhJl+56zd9^pUr@6hg3$zBfp_i(c20=K(rO9rkH)O<(*Q=^Tttgm|^#uB# zXkefGx)GInD)cXOlgIoe?SR{wtyUkV%T*slAM2vQJt<(@1SOl(H)9R8R8>-2$3RJS z6O9N3Ns?Yvh;YIlAIx;7jzfb|;h~Y}xB_1)!!X9+u3+Rae2WT<< zv;j{++(AhSH15G^mwrJ&%|?xgdc;+jdm#nAB0eEk+)!)mL{){TV9 zJQbtCix)F7Vwp?Ba_Hf@ow2?5Piz?be9LQ$S#XveT0~e%iyffY-$7kZtRAP01_gbD zS+H=m(5WUNNJDOs3NE94NZ89rYO3D|=bJF6ZUkVkK{5QXZT&NputFsKpKC76LYsvH0`ry^Z?Cm_z z%R3$ikH7EjtJ3Vm1~ngP;s4u>s#yMo>|y`w})CzHa`Q|M7U!TuN5cmzmF=RP93*~FT%?K(B^G5p6x#~gX3pQLs1gO{xH(Z#U=OxCM)f!k=b6Y1d z)UnCydc#zsz`#!WMESWft&9daIN_+e@_jQTg~ky`9_WHgW1>{ z4{c>B8&fqn)j@egfx!Os=CK#!`@H_ku}e_wenSr2D|lERQhui?4P3V4GR`NFcZ-V^=W5&c z0ieN;3^2>%z@360pTw1(cqiRuHFwRz)lvzon~jR6N#%3cnfJErUN%RR>U zP@5_GlsRk|yYtY2@o=f;jhgR(2I1>$>`Vi8bTD!@a%h6{bKcjrz2n(qDK)|_g*dkf zsx$jWw}Z681DhPcKEXgnbD?b=zRAd;>~R%d+_e<&EL|Ab744kyh>feCmj2|$EC4J> zwaxC-2y0mYugNfLgHq;gIYgnUa*R!;>8~enUo0eFXt2v_JP$320U45p%gzs{19DQq zU}bFxRoJ=~s9?$a(1uJZunDet-Z7ANGS^no`(&$B^i$XLyT1P-G{DQll~W+;Yo$9Q*GF=~2C7E5 ze!8Ev48^t1B(|*n9qZ=c>g76r_j#AZWxen#0qa&UEXm8%M+@8Y!%Dda`((j#@g_m@ zt4V(*RwoDd^OUr%jR$)e#~IiO>*rsbsk?~|K%mh`o%{w)Mv<#V*--RUf5yZ$w~!a2 zf(*z&8jIB)L~%gPT*6XdV~#-YCcHmzBGd+myegsYT@iDV{S1DP#nu~w8BdY4rk?D< z?BD>U2h1B_Wkrdj4~))cY8=CY5g<($#MTOn?o*JYY{%h@H9(a7bWKTFZVwgA<%C-t`VeX-2>wG8y12!x}qHYeXZ6G62i7|7)qkA z=|D8aSsRigh13htJoDh#H=%kFXQOM3g*1bWhrD!UEa&FOk%SE@f3Q#=$5}CwCTyoE zR%IcOseG2J^uqRWScdyFWNN6r9|~lRNZ9b*sS3j9MD0KsY6K`j$kz``Ty3@)DA2ek zTZ94FjnpS{H|Tm5-n@ADjczzpe= zXGstqc7I91=s*xQjgiB*Cs9Nn%%uUU0WaD6z~mOY*^Qr-tyADStIk{1(z6Z)^X1Sh z_WEUc7u}N7(=Ow_pjQaBxAGZfY*f_d|!|R2tYUyKF{(U3+-^$!?$c5e(nBc^@ zEa)9@HDL(-UIkkpt-_HcUcVb(%MqMdx4r=ZvX?`{B)4X%3+MrK(2~FY@_AW975adh z^ry`$KG00Meu_kAv@_T(`RlER7kK&8VO1!$#d4ILPgAs}OzlxKw0hq_!bC6KNosUo zyVGCQvmQms<54=edPjHkaXEbI`^>*j7oxlGWc$jzScMheD(MRsy_lQ$-K$go)zAHe zra05dM{(XwCw^?%1?aFsR$H?9>B6++J$~k?e=#U`7wOvQ#4@^(&sDp^z=HTeB{hNAQL$#kxHVu5Pe zHh1?eH($8j2%J^PcIqZHOYGd;+`)qYHLmr*V0LAQUt zZd#5smS$%JL-#-QQRh`9lgn5V5A-{SJPnZH^7e?Sh*>akzJg}6Zz$@7IQaf6Ih@-N z_=RV<)>fWH>l!9_JL6tWqf8=4Na51e1z}d!K{s2M?%oE0fi|3f=yH`-Hyb2&1g9bS z7e3l*;hMvbxY!(402+;!pMIaU6dV-J+Ii%c7w3F;zfsAXs6E4%cl@(1FD?AlmVK>b zFnRpKW~k|GHUCxN!!KX!0)#**Q+oem=g6;L##~ULyvG>Jd5mem=-`%*gQ&2T^*JYf5H;}pZy%;H{^_T1*G7gl;2l9ZXnh{iOXZrU^&KWCCrr3WEd=6i=--M?XTk2!2~xGFQ!(VQ$b2pPIQ z;eXUCKt{JOuKm-GgK|}-Vo&mY%7B}p&WU$dSpg`d&C5WC@8uPnBem$~l1UfoEi!>> zo0RI{FdlWxY9Xd_bcYlbj!7fhj0Ghyzz%cNJTPd~+XSu~EV8K;VS$NV(?0HN8HhO= zBix@5cma6<(V1N?QL`8fR&Upq<5I;H)RH<=xa=f~Qd?1$v z{QsF&1+Cow>gCK91ruwJo0p=%(C|{dAi*oiNA|w4qXaf-0$I%CPa_iq%7+>bT+=31 zp9&Bzs-&yQkGYAll}!PNIqK?b&vRpl@=q?illG#v=IZ=RMr(3zCfr2s4W)L-;DbKL z@ty5G!DZ`VNGv{C2)TLHeZJ&Wbgi@~1qQ_>yV48u#nWFROl}@i}enLxs3JwxPOXne1}Ky-MO1yLT=f1SInQEe=<;%F_7;!kf!MO ztMn7Igvu&2yBB&>I;D=TrortvON9ed<F$6fSC?z0=7aj(>%&|)ZjE}55STJJt)n#UWN_(R|tkZR&z(D z8PhR5k@5EWn#&*GBsw*09x79T^VsC<{!9O4==~Z~&B_20{&N|(E?`>x=l8qH6*dXR zhggbdp}uifI?rk5oKA*koT`H>b$Wn=4rSiQB>;rRF1F}20~ImG$>EyMz4N_2tRQ~Z zvu=wmyd)O@MS*tZ9E`#X2({_UcFw~)Qx6FrrF6eKmfJ}{VUv6_TW2+0lYI`6CzJyA z19q3n)zSkG_UwV{lfOK^;qB&jZ(Ox2Y*ZwAJk!o?PL`~GzoE8lB%gkx>X=HXM`YKD z?Zt5XaVGm#fR5|c9|JQ+_?Fee``p@3xp#Z2tC)p~#Zd+PzTw%ShGFdyA}o_J zkUkBBKaxu$PHAYQX2eFWr&RGEC9xAr#B@xR2qm*DNhH${6UXCZ)s0yf2-T~aTLT$c zlI^L3x@vz*2w(7iR|gXoYrSYOXPb|#Wr>0cb^LbnU;XPFt$a<$%lg9~rvcz(>CG~2 zMFbq`B)fF4e_lVcIyJ2SW`|nzd!t=7q2ZYO4?3OhDxH7oglig0%ekjVeCTx`CxVAs4 zq=4V|r&Acc3qmjsK$r0qeO5$nt5aHwzC*rb?*-4qt}&DS`U8VZ^ocOi6K{~VWhR+$ z>kJBIDP{1}S`3sQ*gv1YQh~vw6zuO2&Q~pXgDCP{kjf1NloX$?&8!1oUO6ZeB!V7h zc4aaZuyy<24TY^* zS3c^%?VT5&lWBMiSVdx7eRpx?)3@DYae;-ekN&vnukP4M^ok2=SXfwmA)!8R`@kf- zGuiyH)(y6WqwimytUJ*&b|eox<#^7op-ZoN|9Je5NG4f#x}z8vv{{@1_4BNgk;>@S zzi68gAgo^ghKWP=;jpbs{UDUp|2-q2**g4VwZ$3!wTE`?OLeoeFxRMEU2I3odQ- zOXwJKLdrd}Go;_j1-k;7IS)s@4*eUdT`D2$Uc|G)6=?%tJQ$1 zLKrPsT2BnP)C@zMGtM588iE==l+?$ zaji4NU0(|)YSsF{=uOh?pie#Tm*!ehKL%8eaJ%nUTr8A>H_4eLX=%1dYsbU!5w@n_ ze1}6fre4cOF8ohL?teY3S5^R08#Bbi*@=NWDbNV%khGzK6T(D^5Q71)>L#cAs=YvQ zwZJIqfZXNca@8I7&IHMoz*$VAP}`L%B#bpN~e2)4do*BnCR_|j#@?47cTW{10W9()PyWC1M9)$^IRy&LqQCnQ?D2D;UE#e&46S@7^|U#nSqCKUkR1A*-RQxYXHBJ0u2# z5)XeuXpzuQyjF>5AyY z7bPRF;yeB^>f=)0ZTvf!?_63WgIv~v(NJ>sp1ytDaiN33?WAzlW{PzUd;G*}*gq*( z?;K7#`RlF2{1puZ6wHoeOhVa3>`4cha1j6$t<9rYpc`~YXk>9KhW0@6Kn`qzqu>2> zL>a5Wp56T@u87+pbztE!A==`}9cd9K+_Fv;p~R$Y?K{Y~ou4LKeVn?EK6Op_S4GO| zQ!&?rOIM%MGSABJNUuePBo0Wk&74iLY^>z=v&0Q2VK0og&{=={dW(zsj!aMauHIE6 zgUI~PWyxPil!O1=3klJhCaTl ze>QWW?`b?%&U;1%6kG@oq(pATXw=IX5;7X>>;E?6d~3(GFlTSIn>#UDYM#E=2{Pp;m(Dl#oI3;0mVw&3yZgj}Yh!Ev*8cNX zks|o;zbSJ^4CPwwbLbGxcz4pZF_9dL0Xs2$J5c4Fx1<(fadxjXyrTn?*AJ-Ihk%or z#W@Fd6Lhj_k3ivl#@Tl%3{qZTdrn?U`R$hA$rLjtWx2m9zh^(~$rWndThTFJ-?W;r zd###zf=%(xJ&P{a&o~3&!d->Z>u+CNng2svp4Acx0(!%AKuifugmtsd_T^O^?m;2a z%9IvWxPIT++|X;Rz(T!y%o>lTP8KGK7~fiPrxo^<-?6z}S`o?R!w`v2>_uBtkzHd4 zyN`FwNUHrmY`tex)8Do=oCYKiF!WFj5PAy`5U_<1dVtW2fT0tL(iBkC&_nz}SzYqDGvBw;Ht+nS|b52(p>tvc8ze*I0VMWyUr_>t6JebRR7Enq9K55 z*?@jc{0@WpG-9JJ-noAx@6ic`Gab*So2GJG^FLK`3O-$=@?0311w1u#U>~E2wZS2($r{Kk>sHKrGTuDzw zVc*Y|GWXEl2vo*e3sBK6O|=CRknwSSDw8vXZtnUK1KB+8bE!P4 zbhs-s#0hK$A-;pyd;1Fiko_om&q8R@lvu6WZ)B5sVKuleU7*xt&H9OBhR09qnkOp) z*}E>z#=H8bZ958bH;mXUVXO-lGwkKquR%oy#bT_IYQj19-&7O}oU-%0s&e}_o?#x? zgm028!J*cc=x}t`1b!w!bIK@Xx=KL`CXXdmB6$^kvCvu;j&jLS07q~|UI0NzN4&wS zAa+776KaNW9k-?C$cDMN&S$9i<(y%)e^}D~^@h-h?KQ_x+imUT+ouYaeyv9mqXTUu zIn0%Xqn!{;)t|m^d%9<3zmv?B2@BRT`B3-l%4V%W-IeFV3rzOag#{GjU(?gmKVFvB z|L>i`zpb369HW)P>&YPuA3#zeRC4qj-*?!|mOY$fbggFdQ}2vXnT@Ta zty`e>orZ~oPk{8saSlC^!ol8P^tlZqS?R8l0BwB#D^e5>^n~)xi;<6%y31a;B5JWp0+R6SM-YQ?c2#Fjrb#?)ts`K)#2o{#WZ z_het&tc`qVb0A1E`0iDLDxb81hui`FfE$uilT{xR)u;UV=9DBmUQBb^LH^5W!#^Vz z!+?{}rTVVydGio96J_NPHqd|HSXy z?bK$~0V9F>i0ne)uFT5xg3m1}!h+?p@zI4{U78ughTx>Z{fZI5X3YT^I7*V|Lc^?L z_Xk!jz8E^1bQB6Ag#apf;?v|D5fUa z(Ul0OsT7e>Ssp-3$O`h1)ILd|;kX@w+mJpNS`}}|${1y`qS%RRYO0yPdYKmS!5)*# z#Y#Z2+D9^y28cNFY)1Rc>teE>ByV@|6X+ zT|RGa{OslZ_kufqhW14S%M{-so73Z9QR5j0z&92wWm`j%H3X~SM8cT}W zkf26LhtA$>SenVm@jv1F%CaeuM zoT-^j3qC(EnK~+DjSMIYqlBnG=VWLho*R$NX)rxDqq()%tGkr?!e$IX7nn7l7bO>ghaUSI1Q^}97ubvQkB?br6SmKtUJ8-r;n;gtlt z3kVs+hx29D;&{&S^0+ezRxp8P45?NUNEFmxGaH16;XBI10cOTgHSA~Xv)p=8zT};n zZoi*C4FjWly;R@a({XLw=X^>y?!U7zcg?2 z;DJ2nSLddnPZ!!ghaCLi``w-oAT(p~7D0%`%wh=<7Fszwl#RzC$k?Fxj2LcmQU`V_ zkKXZ0&^7MQb5fdgR?oNN?_n(sJ#Q{~wz0nW^DD#U-en%0(EmZ*-#3yZ7{k!8*OVk= zPQ)d88d-#x`19zgX`6b|CO&6W(Pp+k0RYzPp16L5FUe;lK`WJLJYO?JC$6hOm@sp_ z;it)$hy+1`we}yKSMD4YT+(P7jw3$G$0R>0P~WSJeLwNx=Khyk86LW_cczcb3)U%gH1F!w+?eRBRbz(W+zR6vR#_7P<^XwNMTWwEdKTU26uBtog0EKb!E>+qJG_0*&B&3e&RKq@xj{%;#`m&E0ecFk+TFj7;#9UBp;EX=QwpIqa!X5 z{Z#W(9-RcjR2;b14{*&}Ze(KB6_1H{Cu0W~+;C6t6^yLveDxVoXG)7U{f3TvmnW3m zFi=F;{gU!0_bSnt_Vx8fKpN(%=mQqM=sU>Y7+3sf)z;^&v%Mc@xBXV~O1dwt0&f_U zj_`8;qK0F1HB(-4s^p?y8R&}8iTA!}xDz+0(sW|iT+FtozxBhp+V@!dVKoo2?(i`e zq~A`BQ<7KIj?Ov15kSRIxHZ^BP+pLj%3RnIz8rsXa85v%buK_j4&(!!QuJXgm}kCO z!H!Al*&;IosR`T{`u-ZXJfEv`Dp~$_o#tQ25nzlh)|*5Uo4JWsDkVZK#Q2)kj559n zv&zaQRZW{we+`JUDcl7tRy~;!sHAS3OP%;E&VE|oLP{{FQY})%#7k_al5_aus1;%` z&Y#`gm1e2H!Wz~5j+Y{gOCEqSa2E1-vn3%MqxDZ@nns4R=Mfw4f z05F&IOuz4`x7Gv7VEbZoVn1g6&6~H}I=5%EJFpvbV{cTODLFA-a$Eu>I5LJaGhg3R zAQR*zpR{v6a9U?wUE;RzNQ}w@_DYoac9lvje1%g!J{Fe5hc7^CCW&QpxepcQl+#mE z!EsRv4iRb);hG1t$9qJAqR8drzxMKfzu!8MpsfxN5ZtP=(FFcofFRhUx>mZep8?K2 zi{3&YA{ZQ`Edij-l&OL}=`rhm?Ot)iND(n?;rZ!A-S-;Ak5{!%Z2!CuG8yKKRD+t%xP=FKAwhzFJUF9r)uXnyEjkaxB`xzutYsfQ9W{AIGb@vQtl#yMe_{ zJI<6RLZ?qf2}d#rn!yi)OfsrB(7NKTA`$26qaR17wK7JkufF*L8E#$&Kmng%fAxq0 zZsz+ALiWTUPJ!68cpH@#FfL)jPahwc|LbV}>ozP_j)ZAD{&DmI5-$&h& zEWRfO^W;m|{6X)}V}5#qV2RpIg!pUv-}ubyF%yC0a9=3Fx@Rzavc9A%*QQ8o68Vmrm8*=uCmFx@a zf@YHvpEsns%1l0mE0Blvi67cWLAc=^O&@>KcS5ilx6xI0vdfKf52IT(u3W#o)$={+Ro#615<*zJ@!;Ua_WtinynuLa zN5Sts6zPxE`UygK!O(LapB?Ixc6?VzN%4!pn# z5c=~t-Yc^J1baqc!2540f4ltbG@F&sWhno4l}*a(C@ zrw(Y_B5W!7e~#&RNeIWhj-~~_vHX8bt$!i6^@AZKX)&|bRd)Rl9aHEYa!sFyre@r@ zK^yqaNK<<8iZa0PpA+^G|M+w^h$9AS#br-xH3M4k=(C{2I8p4S5{5CY?ed036)vnJ zIfri)60B7^GcFjP@M24-1n0V3xsrU)_*SbQJwd*G9@@@*8>?kjAgec#-;!ZRuUH!1 zihs$KJW*yj=@;?(zK#9~QDei=G{N4G4_($SAtL!=O5fH?Tu%si`?j(a-+K~jZU4(m zZTiC7lZ=6zq&?0xRq9uAd4B&+sC1a8utl_bC~uCC43GEDj$N>VrN8HBc~;nEefw6H z8Lgw>xR7&JAeO`@BKz@vWG*pW_WsIyHcitM!s1QTjHt?INUG4AS_~Pl>H)4C>PWy~ z@zH~(GKBl8W78J8s6!>}W(n5o)8oj_f1NLh3M5r(c3jrZ;8ECuaDC|3$LJcf>J2j* zdDUNKw5yKI``OH`GQZMzdKdKk2z&xOD-UW)m4*`E=(#3x?$G_z{2`R{3w<~^eyE)b zNN*likj%~KkMiiWI?G)1$pvUp)^9*GMx=5{C?{E+EJSr((qb51r|VLzrJ;|{j8sX) z+zZgse3f;;9)6S&-(nJyh3W5KsR}abU`dwi%J3 z!#R`c&74BvNwEXZNODcr17_5PpT0KLS{q(9wQe6toatzsn}xSKEt(pzOs_C#75xk% zk4%5Ij!})50>XMKb~2C0l{mT zSu05Rt2F-!EtyUefo;saaW=cUk@zWa693AQ5E=MMD0V38UPrP(NN%W|*S@$W;rphG zW0G)Y7HC!HKUo4#Y5F!~Zh7^^P;6`iu5EH9vCRnw#dgkW(($i@%C-L`^<7K4KY`>Tlw z#hNG~;ZgpS(9q>#P*l8^obaJn^_XUg2f1c67HZFhS0%4+kouz#<)mK#ds4VJ3v7*9 zOBfzg?eqzsZf2ZO?Mjs~tTB=1_8dK%WW3Hb61`0Gw8~Zw@Up%e{Kv>rVzEh`PvoTF zvmBV^ppi+1R#m+>>4ZnbQGp?Q?3pt93CV^P7f>>+$jcj_k*iEbIt5vmrcx z?s(KU{Lr5kw9LLfMs-8K8QQfTZp&FohAjV(2tGBv9Id{+=J3Jid1h|;dVjxsr(4_V z-GQMsiBs`r)LKlxs>Bx0sA@utmX1nA+YkXuth^3GKx4Aur3y0GfUzAah+DQ8Do@hU7Oj)D(A$?r6DK=ge2g#kGHL<^GF&cpA%y zoc1-fh%xtU_T8d2hd5aC4k$CUOQ{1(e6<6;so{t_s!gUwQDM?rz>EratWaBx3 zO)yF=$F%+kv?As0R@-~5kVC|4yTixy(y=dxGh-)uTRcn(E{I<9`sY%U_;>HYsy10| z;);S+XyQuM#%F=( zdr))=MIN%LW4F7z8n=n&+Ttx7AF%}g=`brMan15>6L)Zi$Q49)N?D_H+@ zHkKvd0e08XNw$q312clkTIcX~sSfuAkYhP$N?S%({Yz$8jOG|oNt;e@y_5`e#7|oe zUw2~?9BdRXt#x~7s-akA#WV=)?Xsq)jPDv`H8rtQyl?4WNysigc^_XNO1W!zj_aav zrvyd)Kc^IN$GHUV*a#18)>P z3ju@j#FLO+rmK`mZ{F^;aF6DrJ-eDU4KS~FN_WXh-1yclRG@48s3?y(R-Qd3+a5XC z`3WpLRBud-&Ku_2JqjBvIhFU1{>WrOV~!l!d^RSCnbe~*b~+J3927k5VQQ|Lv`dLN zGWI=t(g$FmFA2~-NUD)hu@C$_ZIPo7XaHIfrAlUVE&MtH zTdm{=J?)UGWJBD>=0E$9*BX8uIo+{)xluvwv7=BD#%sfk>LKKhNgRy_ZFvN6XJ-`y z2`STNk_sNHh(_%Og5C&W5hl)8+^R!Y0w%({H3RvAIO*%R z%%vRV>M5*gh=%S6;p&Vi!U~30h95(qz_5h<@TzEyw6HrdsL0%xxmLm6h@*e#f|(hW z@6+C$qUS*~TupiVX8t`-i2*s{5JO0^ZLd2Y!&qab)n8Mg#CI(esu2{ct}XaV$pCvL z!$ojzu=YU1SxQG#TQ+Q{zA$-5Wn0-r<`xsZxN-<>|yW%;VVme9R(XxoET zzCLT}`!n||sq!}EjNQU75!J9(*AJbscDL?fv*#1?Yh2pu00|Ie$&O|qR-l#DjT-G8 zU7iZE%?7cuE3G3w`Bj+wKmv=$<^a>Yx#bo;A9-WFEE5lV#5Wpp_k4t^<+?*GKBP&@ zS$AqoG~Q<=)xG`MKD6u9swF>|m7(zSj^CxJ_s?d!ezSdR^G@x_{EC^%58kVzOeUzE ze`9iUczad>YyK$i{cnXUvwY>TXnjsB;_QhyOSqxo2+p*;d=Lx<4d_tkqDW*TyjBAE zg1C?eJhIcUXs4UlaYZN9Rk?6+VeQ%H_f<}I1$}efYTp10eVv{ex=%`OTr)YPcuoor zghc9xL1zHZ*qQ}Ov{>mjQC|fwX{?mjMJ`lHE9dbk-j%B=)2zLWGF<#*Hq@LESmo`% z`sNI-LGRvXWZ!zfrG!6|21ZP0OHCbP3AE={0m4N%W9p?g3*tr2c{R%!oQ25^x@?#0 zCkQyqMNP_^sCrC)S#*8;%L^HWwmhPY6#FXs>Es!ETCVzqdSFYR0iWZYIP{@etO=Pi zpeV_N1pNdk3uw%wM$pD1Kr0LVYF;k(lS=+|H-=8Gb(~gXX&;9+R`I{TYh~gw^$$$m zLig4A^N)7h*Z=?W`WJF+A`DhP-pGQ@-tB5EOi+vx-v-T?` zt)o6)6&Z;{27UqR3$bjoGqa@FyhY8e*HCm$lR!nl;>=b(CUJv;`O55UQP8;8F?a0~ zWnirH_@!j$P4tzD$9WD@J1(2geXJ6cR zd>EEi(;M*iZp~#u{apk00;yJXIAEn15_J3=1**MsQ5HC z_Q<3RRX5gk(vI%rSJgK(9x)q!ZS82vN;Y_E!qfati{;K_1waZOPfQ05um^oy(`)^R zzUeeH>cu+C&S9dL$JEQVDa8O8kuL`ondamp=lhhKI8%AmN?ade1Dy>9Mi(*-kXsD(Gsq zmUXu24pmhB;0N|q!;-x5$^3^S2})B2;fJ@i61VQu?CJJLz*;0_{#c$@mcY5>Tk-n| z{t#{cD!HJVp;&Fl!evO2Vu>C@o6m#Zs$5^?d*7>d^4!m5ZGqHkyyuzA$}pBEftR)a zb7=hwIZ@fa9IMGZw-N7LO1&JIB0g?;L*Sg^M#3ObqE@H2rT_pOY-r;o&rCS`%dC_` zc(FU6K`;nO-lCUeM#)iq+%AEE<&t(%lVuM6bljHwe$m6U&F{W}SVv0jLX<>m3?u;r zTm!NUJHldwa{#P^;AZ0Mz~l%W1A3BuQ5I_VwM$%`*1ym2?;L{FjO z1_V0u%d(bw=N7i`1i3a*icf`4mrjSEYT74SsE%7K`91Tin8xxm-6WYfu3`7#I@cN) zGMHDeV+CnxvOqzLx#{z3m`M7_W%?b+bQx?EQ8dow!(BGYhEcEM{0b$dBsOg*%jsnsD5 zTqV|H+3sW~9(@$-K6z4qd%a2BV9Ct<`M1sEr*90N)Eyn~<~->5|1>0BOaD#l)0h~A zHA9cY9bp`pIIgupi67?dmd6D&hp{?|OAY*m9B2ptRe#ndVS=gbZ~h*G2IFQziNaVM z{M>qs*y~gn_v&Cur^kDvitQ@-%~uYr(e!uMUXt=;4to(lpJyv3ID~4>l-|^Hb$9Jb zGb$(YE7=!J5@G|YQb<@1RZl&zINlf@Olf_Fwdkm#=w)lC4|yd{zRP=FcxCo#>OWjY z-FF=#tw(hud2=s*ee9Rb!3SjPXKwe7x-G4bDs0n4kVL2mr(V2-n~ty=!pG-9s6prv zD>yV$o!T6q_`YWG>r0g`PHl;giI4}4c>8^=anqZ7d&~A+a;MCh1Ol2X#V`O z_7&_Ly*YV_EH*s`#*pTI2Zo*3#5Rp^0&K3?}u)!34e5Z_O^rT5zQo^h?imlU~ks^?+~ zZZ?#Vw*M?WFhkH+1elVZ67k zD1@~PHp`>1nT$B`i!ZOAOD@A9qg>A$C-;hp-+_is@|C*FCHz@vr(dC1Up7U+jT)02 z64Bm>n&A0i{T|8ugR5Tg75y3o&jqhv4!usm4=*4{6a(f9Jf+-4XhfFS04b1#oNgao zegMM`#G7;`oPJI$NP`;_j*nmb9`aS|-o9V;z3PA1uK$LdZ#mpQBrySA6E#G7bj~ zTajZ~Sq2OvnQiH}sV!gFH3d>8!ct|t4}NG5c|rrwSMn5r`s$Sz5#s*&f*&u>&snFq z-e{*wN!0J^w$O4e9`1?l&m7PG+3^l-4(e{0w*|jnmgkk~YihZwyvF%n}<)>=+0S-*aekEvr3IIffaav_3lAVJN zJ+kKBp-VEI4~aR;%4Zx*l<ZE)Hqlgs@8>kzYk1~(3HA5HBa=jO?6trNK7IENCzFh@RFRg8TQ;+XUZ zj~pB$@m+efe*fz2)PV>W!ImyY7ODItQb>$+?yt-dvBGl~9i3dX+q+ql`QZ@`pJ&mn zyua`K;xh~yR6YAcn}+A*$Tb*0%Kp@007%Nnvlj>)2$7k4#)+w% zTqshHhte*MFekwf2|5sLrPvUcDUDa(@^muCM@8A1ip123IR5W@(GJG1Y_0+xQfi&= z+sevO=8vWvu2zvo92WsXrm5o<7_Gc~E}0B&jVgV;1T)S&kAPt|kDmZ?aV*=wk zpj&823Z{Mo9;O5-&&K%}ED>bSjV}!is@F+si!Ne>I5RrO?>yiC$N%whsNx!76Sj7df5ujA}d^4qygD#ju~;IceHp zZXqj7W}6&dpV|^GFg}O_R2W4In-%s)WxD1xdiYJWO*&~1U2Rk#V+aU+tU{DH^*!1YsB^sh~nGXnf+|a=yTMPy1TpyP{UcG<>{~F_D2sz#8CCO z(XzsiHyUT#?%mp(=k+`PrSNB6)OC%sb5OSnQa2PoA@zdYt=fF=+b*O8Br?fyT*#4%Js& zED12MRO3f^sDV-@6Kn3<5@&Y*%eeqB^mP`yQ5 z!%`*xg|I`UQ`|(XaW1!6bxmPoVP)3~y;HQ`E`dYJi4xY+T-#6V(|e9n7frUzDxWA# zN=dU(K6nVS!8;5m<}o%P<18bDhOx)HYyG>~6s=R|zMkwj_B&4fbNl>{1V6~&bUNCK zKpy?)RI}-ssKP=1go~Dr@)lESG={ z@qMwjp6{yXC8i$a5tGP#|F;xV*1Ejd-~ zrnMDh$9@+0z09Y9=a9y`?etIC#qY(-9+oq|;D^V*r#8>s`_&UI_0iJke{1C!7v10K z;q~Lcbyas(D8l$d@>qA4AIv2yh#ecSp*Uzj_7bFo;8l) z7$$a_(aHy0mQGFv2NW}Oc8LdsxZO;{e~BVy%%!r6>OI?^(L@jRm*(gM1mK*XM!CMQ z>vWne8xMKbXLAhDN7eNQnhD{!i}b);LeiwViJbx9SnD0n$8Mn^mk7{#n`5)|cNZuD zvV6yl-Ss+pyHcz)6EpJFK;9&HkkHeCPxY~S zT=gc`$R@5nCh)~n5Oq$x&Wg7OeW4DE=6Cb?i7oRyj((C6?9kT~%!w)aMTax=# zy#p(E92&0RM1Asun#|Z$b8b~s`P^A+%06xij1jfD@c#Sji@z8Q9P-xIB~&s{4H-Pp zCc;v6dl8mYTb!kpe4kl?Z|VEmcH@LtKZ2k_7U#5bOcn%-7D*xKsKN#y&FX&PuzuK# ziQt5ny%jZ1P^X?JhJ3-gA`W|9ko*w6@e4iX@au|13ip7SaCO&jNz>CPrg_$D!+~6| z`GyX3%G-mhr}_df+NXC|ZSS-kyB>c>K4}~NjGLvu{(fKlKPJ|{kSoY!+;S1Rrp4hA zbIG-^7zX4lDH7NKbWf5R+RL=_BqspC0vH`gMI9|Yhi?L)85|LqiqEn@zKDG-SP?K|l{V0&b^m+RiCb1)E62Z0kG~&p zT|8QSX%}Kn1+Y-vvI@H@&@7Okp#px^07z0DcH3%Cg;VZGQv}QoXjH&KzMW{1wqvg}8SSwZn3EHNr_aBUQj0 zg4d0}ccK8F!^-$CdTGclN?Y@v`?tQ*cgw0W|6Cpm6+Q+_B$WL=`KLr6idN*RD6HV^ z2P>2cpGsag=QjLcTo?tnC2H?M>w*9}^Xu_Bvffj@?BXp3x_2s?W9W|0E~8)MNb{#? zg6lqOHhipB?}A-c+h>u~2wQLvyr}zXgfhw+SzN49SB^<0CmxD_?IskT)lLt+NtCq@<#wJ2Zx+WGYH+ZL5q2ZAo(8m5$$Cj_R<@=9htfG?wWpr&Wd=w8)qhKc@48 zm}7ef9Tl{vBd(G6R4g0tU^)Qy)4C0KCKjhy^qVNxIy8aK1H+Y1j3A%ByAQrejJawM42Zs@bi(BiZc&(^rjeYkSpM6%IcR zgj#!NEk~|A4b1TR)fiwY@Vw+^#Ff3nt@0asc3c@``aYGN##<~9@z^SZD{5+bl@JR5 znVm}Pd(Gi!qza6_qqsq0+x!OzAr2mQ#ts8p=e`=2HtnvmV32Y1 zd>3M83>87WrccFhkMWL-OnhF^8akM6vXB<5Ah*^hI`N5o7whQmI&zp6JpbixN7?b0 ze~yQ4cmCgO*S}bO=Sqe>gq4Z88WB538xcT-XnOFzmB+GgBuBmG+KzhRiUKm8!i@K3 z&Orp(nSD}XZga@$Xd)4shA7?PKXq;$it_Ivi$A88f1RVJr`Tgf7}~*!3ZRXjxWLD9 z-U!`cu4Wr<;2AyoUVneR2aynwWLDzbY?{J0^xDT*E{^+deun{s)hMt;#6iHs5p44=?&ok)`)A{)o>LU0T6i}-p zh8E#bb1R=7*b<6@b7^BT)y+;BoR-pzN66@@te-xVz`AZeg*z!Rv0QZeULH36ZJFZMv9Vzz zmJLkQzs??G4yX2yNg@P+KvO;X?Y&Z&M3rE2^lbCMj zaxx!IrU5$OymU5NWXV5aO`2WzMTu3K!V5<#kRvuu%zlTb0eav8gvde6Gln^vNzwoy zrYNV5m1Q%|4SFhq{#J8`4-hkr&M>1XMBhmsoJ4R*DkuhV{bc8vs@U4JPRj*tHwy^k84IY6(XF3Bx>k}VA)H2)7E|0O;$mV_=;EQ%nfAlM9{oC+ zla*QpV5y?(5Xo7J1e^e`L-zK?zi~}~QWgq5-0@LB93EjU76VaJZi{qIV*0~k`r9h^;m50n%ctv6oT+HX+ zZGnvGJ=x+v|(gxMr z+pYG^hq{CHv>@ZXHKH4$V6<1t@+sdKWPa5;@mbcQfnhht&Rgwww74Cu%lxs(j4?3Nx-|5MAlX#Qx zaBKu08@J?2LcU!?^+JI7V4O$;*CV;l8Qm{F&URf23F6azmCJU1Yc5`z!#2{{fiu(P ziyiL?^33gqm$C~=fmR2!tiXS4B3=pcW=qbeSL!uNrx$IgmZUq{9925MurvQq7Fo82 zgAW1?A9Dhx;=Y<5TkAJdS+#mT&goPOZ?54Vp7m*~ttLn3Zwm_JY`cWJc2~P50L-d@| z#aEgJf?cq=F7s`PqzY#$61?Pnj7s&EzLToc@!*~dk{uC z3=txVfF}g_oHP(G=$-3qE*H-ncolu{JS#lb6boGua z5#I~yAKl65x)nm4pd)#2S1 zMcN!WFIaAXs3X5Nsz@j_+JFHUV+6&)8*sp|Lo@ejt|}pzH8gf#4?7cfyt=%#W7fY&O&)(VheWAw%RAIsu-md$OUf) zY|!F{S&dDZO0fPtb$1&+LfJ2M!*VBZjezoDitNHqc zgf%Y%k|eLV=yU~|R~%2QyGC*ySxPpk_I0>E65R$buRZH3I}m= z)iH+eVseZm>fw|Uh^S$pEA&3I@e1Fii(lWK(0i>!12Ju6v|wrMhSq=B5N^68-sYkZ znBl4Y4N<^wQQL(Z|2%WNy8hv`68waq=jG@06CL)KVA+D%*%-+#E5W>C)|9&jL9i8; z>cPM~@&?T!JBumLVjH+uYSSuahh`=#FMF+~cH(g3X(`!l!|idz5)d7vffD`% zF%**ME85?C*5Vs1H=p{Xw@Ya?lv%w^WlM4KZVpMk6S5bC;=^IY1Zaz3x)u%v>v$pH zdt#Vp?Zt$L=!o0L#K{RmT`toJNFYv_m~l%wciJo=2lb&utE}wWm-vL?m=_X>-ptZG z=a$_DRWr~8y4@X4l_=2m4MEM5p~>w5>WyUFZM}!lD=B`Gd40!qt|CRu=a!uf!ZtLN zCN=U4F|ktY%@Rt(Lrg$(;Y91eg;7%&_!PcaRq&1*SU@(|LEC0VEuk(^myzg3qf9xt zEyXHyto<2&*=YyDwHQH$&<})ANeG1sF)cR@DAFe}XT2)`%V)y$n2%Q#n?n7h0YOh+ zi6JP6;!R+_43f&r;D^><)HmQdWH=`soz)YmP#T zHc^((8VzuADK;l3MFr(P5I^yNDs(yw9TQPRxRp=laOm)yTp@U~+z2L0&%_4L)adm(~n6Z;rSlPp+Rc~ zhtPUmrI7U}Hw&7-u*S95ZQ(<_m0M4V#~npXXk$Y8cmOqVdJ_QL%9d$4IcG-?6f0(% zl6xl3Lk=71-@!q=%~}{a=ad2+ZhxS57VO4vI$l6t7<=H{Xc1$bq>{Npzd3FPR>jXO zeDCWDZBa8Gb^B!!SaS;B}poF^zdvyFmML(ruAK}vG zQmM+VzM!1OJO*M0iJy5CB`K%366KR5Hb=mbMP(FfCw^PmW0sZjwbLyV%a2QPt&<)1fW?Z)Nb`!m3inNI`JG|4X|> zGgkMMsH%mfB>BAm(lH@T9X^}Yr9eSQC8INl}_=DUu z*dUWWS(-JUKXW*^Ss9RpP7r>cy3QHfyzT#X+ivA$a*?~3e2D-GjywgR3gJc&bK{*d znmi&PGOC7=FVH+FmLZUakWtBXn&7tC6BR&~9>(6}$vzdp!-otjF!6sr;Uak*+~FCx zoO72cX0u?%5+h!(R$!}j#7fUjOYT1n zMqNLnomnJ}Ez8B!pXOx`dKV^@BuVj2$pm+J)OU!!c~kj5INq(~0tyP?-RdUSQ<h`4fku=gU_^A&#W1+jg^&q zp*5Ehc??eW7#oY+6y@1H*R-JA^#3ZX?JJDJYHMQ2O;jf&P56paXf<4PNdhDFVN$oM zE~*hz4**0XKxdfM0qFf?4LGX|JZU|)0+~-A_Np82&b3K3SBp1QNN{_9VL&ji^Uh3n z8@2H!5`bR=yipu(JRMY-Q*DK>ztphQB`ISa85k=qhAA|&L4RvL`_BocIZC-@z#r@g!z{zn`=9UFjdt=MIHtr+^AF@Y*Nx_UXR$LPnTDc=N`#-l{^HUcC7pJr}u`xL?riE*Gltu+Gr9LtCQHKxfi4 za*6L{!0|$EfJdd`jeBWtUw3jDb)#kg-{4RqaBT41zH;VpYQLuZh&)D(F`-R*8lk3KGICAtfWb~hR9A7wiCS%bCtVi zV>kO4@q#QmE)Q?*6GbR50b0dFMRi@EgYBIdLMk@L0HGV zm;cE<{Ogg#h#kOU-C<%mq+r@itpZ6CJ$^djOu$EP#{KAX)fVFk^`c7 z;GTRsB*K0LK_=^tX*x*9iUpR@NNDo*sd?%!{D0Vb?|3%+?(aWK1VQYC(8S(i7FCT+ z#2!VpO=2r*RnZ~#-YaJ9qS~4*s%`91d$e?-C@uY1ZFRcS>vvz@$8~*wcm7EHkw21$ zXU=(_^M0MzInC#>|M4u-=6y5nh=t@A!OvsyzHzd~mM2VN_vkyZHp{~!Q3Sex9!?%wQsw`yOFbLls2P3_cjj5F^z51R_to%8U*S%!c z(&P%k$L2HUjvUOcvVg(aAfjQyT;2l9cIm@Kl^13XLf*n5lP7oXSh#1o5rdoz)rDgG zI`&%vpZ3oB8#XrX1V!He1M06O)8OwwRh8m=M^886XKeIt3jC6!OB0=T8?EVm>VV)n zR}yK!h)Wn3En=?$R@3rUyO<+?+u&=@r?xdgdD9h)*-z)|3vh_{ zzV+@BF4ealPrUGfJ5FElK$tnz-Vmo|Sj}E_!;X@3D zPAvetM-0pSyq2g|*8PF+U9n?>t^!{Z5%g0Wg12t(M{CywoL79Wb|TMRd1_6+=B2wG zpX|A0ecMRXP<^L_}GYlsu2{cR55np6*@m0; zGSXMuP&`GJhI_1M(rQu_a-?Iat6J+=)7$s6z3UVj?qzyh^12?Rfzr-v-I*GV&tLa= zC40ia+h3|-+5eQiPC><$%WwHU((zrI-VVdqMdwn>rZ8kO(;@u?-3+?7U0-Jh&8 zX+uSS4e;)w78n!6Xrm)u-* z2t-lw#*EB=5cn6lt1*np>6pL!f7MAD20mg}OEkFeDiADii!tiy?|a_{a6tfwUZ{)v za*2CoLoq(E%2c7|1UDRgO-%tC?u?n1Um+CA1YfSIl{*zRYjI~x<&rc>0y)N269@(! z#6%z)xE!82ccDJsYagFle zD3i{H2F2h*U9fIv$KuUic$DKp@Z0m>5|=IG{3<1-a*b{HLg3Q$S$gn zO&)i;S0bWpwlXHAL@l}1sI*t}MP=Rtrd%Q|YnC}9`Ebf&7BO={|C#4?5umFIrJu<{ zw17)2p0KWJ{muH?`>(&Fj(GYCrh)8F1voq1q|9y91H2x}5$ADI2c##{KT z!33iG>&!uwSWo=0H0_k}9`OrSZIO1fZLzs|UM-6-)93m6N-3|lT=Nw$@+$gfL15Bt zux3F|p{{HElL7*5&xPfH-tOG=!=^GidVZ*q{;jM1+0wK7X62Tn>F!*^Nh_)ED~G(2 z2RE>E!uOUBtWqdiTDi*iBHR?bRgUrlWKzp2v*2diQflZ5&<`#l}fDj0| zf{<`lhz5DfqEjTF5QI#O7V+_V4;q>;4v?$6X?kjwGCcG)!{3CNRq;~gSl6$%%UV4D zQ9t}et{e)0uGO2)#wuB;T<`a>4spt}V^^?%w`j+R@zjn^q==cmH>l{0o-STUFqB9t zoVMu(a(Uc`a#(Y>YMk75R_`H7Z<-DC6#rmFddjRBTL7mkUtC%rOmJ}NRLy)J1eaeG z7|gegcA}nf!Wua=@#fOc>UekrCaY>T%o7!L)FdSRj?zraF%TXe@h%AGRvhUxH$rm9 z2&pS-oQJzR=ht@1#*^%!fl!fn_Rjw0maf&^j%8!z_OhDzNwb%fXHYvaHb@uH#s?Hdu zEJUI_dmr}Jb5x9AlbFqwXH5J(m~5FhlJ@^_04i%I$Xi3rpHpQ4sUD-3#u8B00xQ>W zj#~iFi`r)=j)RnDp9H?S`qo*LWXmEpX)exOy}-UG>`*8oQ~3y7dC(s%am_I2HG!Bg zmXwGNa|mdzbEtm7kr_l*psYh)KrQY{d<_1=lcD!5*kkkSAAOV4TW9_hkH2ifL-jdO zUkKhZK`m$NN&v+XPX0n>cZcg1f@s;V{XJ{#(?t~<%6iREo0A!P4FBwSy_OiRE@$7tihntDrC&{ph{jgvku0W zZpgj)qE+z6K<-J%Bv_&K44=7zxomvw8^2CDXJ?C*U=yiwg_3;o1+wP_HJDLJ*oHS@ zVqxdfgDdXd)~+7;WtHa=MTdH@}cd#%ihpI`wuo=8XAD%-?uNs6)L5z!f3$>V7?%<6FdFSr@L({LLB zjhWD~$^+>K;~ed{?=`*A1@c&&ufi?kSRw$MMzPly0if{fF=|tzMbd5EAo#VrMasqu z3l>_78;3&#kB$RGU3q;dNzhbsK2?RBBW^JkQ_p97{3lC1u{KLo#WZ0KPvRDLMO$J3 z=pwF3P$V)zeh6pEttl^G(a&P^W~0|g(a13Orm)0}g0&}TTOGEh%!}ei_C+62cIG#6 zoL}0D3gqkBf*V{GWQxOylb2r+pbsIr;C+;bOQrSV)wcCnb0))${sT?{VDcM560ck= z%s4A;_B?Z_{`(W74;a#zK8{$flipFc2H}SXhm)g>t;-%%Y47Bj1lTod35q#_T<(a> z>W?<1V=5)6bcA&k@2S{S(XBj!YYt^fw1K~Qah=IXRM332aBkBuUXkbCxHXZ(oHino z{~czn&X6At5?-ksKJf@R-4a`A{Lj-DykB>v$$+3+y--Z_3KamkFddE70Z&cTkVT@B zsGp+_|9hnC-?06EuYVPqExrJdyMej=9ZvP;=mwWgazY=E2bRbvA5tjdThRqV*?jKjIynyL!&^-kZG7%w~s2p_hyk4aepuApw_5G9Hx*XpOc< zaA+8zUCK=7rEq?UWxK2QI0jvrMx(p^T{;zYZ8UQdI z0@qJykuJQFZO$25seK2qrCd{sg9!gJ+IGDiB!xwXXSnBNB)Uy^gMiB-2ebStmi z8$15BGiJXg4zC9z@@A+f{VeSDM?{ljF|@6$#aXU?kA6efDo9?#8(94u%9X=I>})76 zdxfmTz4LseOKdl`0%z;cKFS&+BV{c|36Bf zdzS4TNLZ-?Qo7O)QUlTnEG@2%&q1C}g1ISkziM!?NgBzPx1Fo9TYe(bSZhmp7`kym zEmKY*Dt{)b;3xg=KWmOYK9cB0bX3VvO@RE0wkqeRg8(Qc`%z?iz{Ke#C5|DJ&kCxX zn@)aD_8Nyx=AJ*-zk8}fUiiUi`a!CRLQ}^2puo-IpVtk#(Y-prn5nB` zY)v?qXQ1*u1P?1OCPk?~>i}j?#iWTV_t&ar*8Au_OR0Q$O5Qo`rR__fG(~OL{^F&t zzNYp&Ii(7`3C~<5Zq*pq+L`DlwU{-0njU&^zqFT0M2=Q}p@SyB=S{!o{;{#LC-nM* zuR#?tjhu8%FF8lM7ot`5?3@xVg(r0u-@g6Hm|yqEp>tv5H1pjiZsRYuBakBkv}RRf zS*Um3>wdT-f(AoN$NqtEoLuz3jVmxCG~+@FeaR*24VqgaA>bB_5PO2y2vv%209U%c zLZ1nzx;b=-ujXn7mR={CcJ0+4YUc61c^~pa_z_RX;P7G8_{EbPHXlOM=H^f^?#mLV zZrxTGxyvaS^kFvjU}ng!DTB%|W|z4?U7etd`3cWP{My#U85gur0clnD%Ga-p3j5Uf zo{NbwOQgaGpA5r5&lbVv*SUq);`EgE4Qo!Fj}hH54^e27Ao8jV{!! zE2T~-5!aE(n?yDH;uBIj@?g^Lq2w7CXG_a7bEczAH4>kH9PB^y4s$xCXME9>;vND{ zh(_{e>&>>u9`yF<$CFJZkX~5H3jU&Etp<-Up@0}2;wSA}Q}(^**IKA|%Kleh?k{qN zR~UKK(R}WXyap!S$Cu)fFvP7a#aKE0e9Tm$fu&Axl?vdg%NmCtQQ_#j@2T^<05GT_I~ZrS)~6*%rU4pOGl4@~DxyGpVD()x#kMo4&Qn~a zNPy*K&po?38@XUo-OU}Nnu**(F*YX3&!71``|3Fy0tGgOqShD_?;ncE zNXkAh)W3YI-ROR_9NcdC&Thom;$*Jw1P;}VVsoqd;LQE4^|nuUA(xZe12f0-Z+)t2 z7Vc78-?QOMoTM>1a}@e0kPXWRzWSo&ZTv_gGt&*Ej5NRJg%RxQ zfWXkMe6cU12O)u*uVt|H61f2Sv2QJFT*sa!Hq%Rd-C%~6^(EUUJdbGmM0}Jme$Su9 z9XG7g*Z&;S@(xEhwB45UP)%VTrNN+>+M$tyP=-l_bEIfj+R*#f*TCauh zD1Tswi7wM-hWPL~yIpEuQSj`oNfmWPm$3)^(%`UHt=B8^!|1kkSD01u7x=@bBcfwtsWaVoUgtz&SlEk8ycu`J1Z zPL;-Myi#M54)0g}PtJUD1&FDOwTRgo6gHi8U;QJI_A;&7CZKBWuHW99_J;~jk1s~t z@!vu4^a_BO zl-=-p&_r0msWroV>9|}Y$GYY{#UgY0OKE0dT1kRWJcX)v5Fz~t9PwTFPZLT^^aMYp z($5!Pdvf%=eSFc;~Uo-oS?s!ba5C;tsQ`2E2ksUizC=I-0QFuNS;2 z^+bBC@ChOJixL^IXQiZGD>8gz!`ill0J6^@?^l?n2!ax?WCHLdUSt0DvM~Ul{|7 zrD+V7ctSO$M+{H1#d%CPX}W+(-1tiH+Ai(N9|S}+&v3as6Z0tL=Jd3f+f1p%Av#ZvY3RakKo63J9qzD7NNGF{)dGRCg=L^(wLrbp&E#R!M%oZ#n`o`G-Q z6KVk7);SuB@xc(@Awhe^)oq68E|Gw*Y=ZTm1DoY9+kEL_o6X|;weEWAh zjR3Yxt}3*5&$ubz%#Hui%uyN0`OT~|kSj8ubF(s^PL%34y#yz4jmlUt?z>V9YBwk9 z#JKQc3`SX3SU|f-cbFI(hw2^RDDYE}wG9j}DynBdF&?5Sj_7j_lCqLlO`GJ*_Y|RB ze-IwA^QMc=ZutB+kuFvINIvsKbWob#4 z;5qMRVZ;_1Y@8+g+TU>M>qyyMv1=9$sd|r(Pkd>x$Chv0;2fSElcqWj0g#L$nyt9m zGbk`3HbC0gsZDgL06~{JL*+;4175^(71=hatcbHU11Y~;w?V>n)<4GcTk-((yvj@c zIGh|e3!cbIg_Q@C9?5X0^jBJ&$<{+-yHVZ7)h;2l{DG9M%{f|={_sTkZS^qq!8w(= z!k8?{uTdvEXdB1Bv%e9aSp{t?|E#d?uSg{M&ibf%iwndpky5KRY44%7ogy}#ul1K= zGu>Ix{jar%=Z^yg^^*-Q!(a8!tA(EUT8Vpfw!nY#Rly2gKWD~4SS?upaloA0_m5s3 z@w!8zuUu%pWE3x9Jb4k(&-Ou*bM?XB*4KD_oM^OrJJLSyiUWH zPSuqu1RX@M3qBe1bih2YOvN?G&lo3W51CDx?gwRuaR2T*fA-sW&)JvWder;!l;r9pcq^m@UV9QktzTpSV zPAan7ir+`bv0Qon+UPq*ZF?e3&%sGkIL}2O z-}-HXvzT}<`q!v;mgo2HPJ4v~h$?-pN-~Q(X=SQ~_3(>_Jx(QQ=TQ&E{i3$xC~3uw zOMgwSEA9hlS=nOW$XP}0rz@?oNx|=Sb=$C}JCfwhcPAM-J^ov5?vSKesAfEeVf0bEMZV82vSSRMVG04u*51eCW|mdQ=jd4QBM!Jei$VW0xf#D5xES)Yq`{(kBFWrdA}KsC z$tC=QkBqUngYws!5T&iWU)6jcV<1(!Y;|gR?*_$<$G8FYsmTLg&i=WEwTa?fh*D8e z9_Gc^xKm(TiR>43H4eIFVvP>P0p59<=`PNK|D-teweLGFb+tbU9aqmZWBvYn;D8%z z?_dvXRx*8fTcbjAW-iP#vB(n|E>odhm&g^^@@RuAA#k%j(3K>=aMt%%jmD~0vMMmz zB+e3N8W-K@e$U2avumxYdpq)djTmpUs@>ooHLvBZ-Gu|+@$Q8Raiq;&hf5{iar>HJ zn&T;gbeI-IwcflB&3(RY{r;8fIC{Ooa{}gDzp0iPV2^&ZRme)r%U!-|A7oA-{WkQuPDF@v9vmMtK0=HYL`2%liA7hH3;x1Zz=d=V$geH~pT zOV;NArQc3sF|f2E1r=iKV`!?kZH!)2hrf2{kDQF|Z)^S8Gd{`#ualJAq>0;qROPGW zw1u~#)3r^51=-i+mv4y4())d*J~*I=ewKOq=^4ToG)~^JkQ8$6N;bY0mbBoPu3MTBM!xPIAug*~`kd?~^iF8$l8&J4MoMV5W-A&1m20gtsr0OS4h8Gg z{pw*Z=rF;v468LH2+9qG-;&&hK*LW!C8i~XN<{}{(h(bTnZ@E8q!F9a#e}m8G{#=z zm1Y0ziv8N&?Xg>~&PiFqPF%G`DT<{XsB%P!^9Uqdc9UI7S1%VXAZ?!1?j8(sXsuU`_QP|R3;5H)Vt zP;%ogXn2sdKOj|%Bj*5^R}H4lA0WVGz~An-l<)?Q`|JHu)tv&{-3n{9&Dn*DsAV#A~*YVQ1$L#QpPd zsCYn#N;tU0GACx{24m*I4u}b-stR(5oqR^;deBBwxO4i$@qY2na^smRX8(_b`tNA> z7rEbA0Ot7#a|byk;#yc=k=xah7(T3mB|CX129&dI^wvz13IO`_x`NGh^SHzXh)mfT zh;%HlhE*T#WmcRmfU0SJIKRR5OW#Fp&`m6cv-P)DbFK}-dDb_k%gLkgcGid}lf4LA z%MYi!G6Qk43!6qz+LW{BIBLG>U}?X_R+u)4u52u!Jm?8?m|8h~W^uZ1I0{#kos@4V zZR`UQ&#J@{Y)yppNPog-Z$Do3W{j}Z%l)~1>uZ1o2}}h*6$OW6+7fE{>b#s1R=c2D zno<{XDtuonb_z;{3z}9S-v%KacNv~@RJ@&1F_~KH7YiPz~XM z|6*2eZ~y+GO2d}pxMQPI?peUgDl&z6oL`~Q_dU=#j6Pq2x#pt8&_An zv@T*nAwNh!YbCM@$WwUOg&{T?qRw4DCifl+8eYy(w4k&}&kDg}o~+9&t!IkW zOx;Vc3`csnn2@71IXAjjX#=B$Y?i;QJeqa;gON%JHObu&RWf0$#*za~+YaXgqok<_ zG&3SGfy)`H{r16dKR+l7FsZS0{HH_G8a;ioSw8+YQP09iRZ&YzQT^Y<{mVl$nFYYP zz-(?0wz9;9*Npaim4JB3a+d5KpZWkfbL?jhxL!x_x#-t{6a3IBaKUy~dcxnW`?g1~+=bHKP2U%V z_G#MqY!<-JN0Qr!UGItiJX&T|QoY zIlQZ*3e6%qLvbafH;8OR&u_W+Io@d+)@paBg93a8oePJ>a3*V*xm3jf`QG~p9O!^O z&;&C^pR$U{&K3(nC}_mC^?GxNXym&YvEZoHG0dvAU@Kt`RyYAV28D>5>t`el(an|- zc}BP_2U+DhEJ@kp@QLTY73-1?5LlwrIShEO@Jc)%}<;GR^ph5PdT8L`ma$0&6;EpRf(jqp}+ zMa;jyV2Oc=glaD9eVPB9eN+b77^e{KJDNG%;wHH8&jTt(>fn3jbbfF5FC~ zd{4%rNiD@X8QCQ@TIn=eB({_n!AFgTO9##-j`y&jh?;cKCV0@8o{$&Kcxu0oCE1HQD%y6I~OzFq0syD5imt(-ZOKe^*`*YXPC-qi=);-#~h z_1AMF9=~_}rL+B^)+M`tgp6x+-Jo*IX5e&SbNWVKWUr=Q(&swhVIw~Ot)k~`IH?;s z@>bCrRX=WcK#*tWG(C0vK8#7Zu|LCA1+0f!YK|BDu@`%uX1Q{UiRMO*m8Y_rw6VkO znN`?Ia9RDFaw^Jw1|cM0+(95NIiDpFiLxdSsFe6*k=(syeH~b#2q<1_%1>F`R(bh zQ7j(<*sEWzVWjS7xf|)OI-QiLZ%VXZ>@}kMM1J=e_FS?$UePH+R^JJR?qJJiVNF=KFc={1LUR^u>8o?fN8TfYVrSTime*BP(8GW>!K{?wIwL3& zQXaI1iZ_J+rS0}3iSo5|e)@z2Ta#ZTkOYTs#`;)&5yK2&$iJ+vC}8r zoHv9xV-N2sHK>k+4XQRSDt=t)Bi{F15BnZsRA$BNtm~%dMG%SRejlgD7TKQj+>|)? z`-!u6`QF9a)SYXrZk_# z)N!+3S$IDPNusw*(4I!)8WlH3FrL`H}t$qTZ(=#{_ ziK*sg0?UFAAT#@CkaKE~i8=HNMZRATGe{C2>0DgZbE{BE(?p%(T71V`%`F877^*1K zijh9dKx+!6a&N{Sstc!OiHyTF6i#BCCRRXc2A3bBYl39LxMix2u@V1i=TS%i`Q zEh_m}`9Nk2>mQoirT$H<1`On!68M-D2<+rNeGrF7?_0lRKpyzo3#3IfNPV*W}*|wc!1{z9Z8aB9!6s zj@tCLI1VFvu}qZpvMeX}NXk&Leq$JR_m|;m#k`NsznxEfdRq4$kemjaVN*>H@CVnV z_sOd85bN_)Uu{kg9~2gklZ0^VPSR>H2jq^R$1*mizfSNZE%3UwFpdB}hO(u}GJfX7 z%8=GPV@(h281#~d&<&FPkOL{sS~Ck0u@@5@{V+XGp0p~dxU^2Wr=!W+yw+$#=P}Uv z?42c(YkYBq$3UODs3N<}6kxtj8anSB4r-50tp<$pC<3}iCf(lZtnZ>?d22xRxTMpv z4{h_m3p@f|pSoK0Vx{e@t&4@Gk} z^XXM&wO?+=U8=TzZJr-<&KmdJQ%({*%@uGHZFlrWx1-~0N8yj~h z>_1BW8S=*E@?O~ePbUKRDM=5!f#se@0Loso7iNuu%nCvcP!QGGZv&LFoESNlwhq z_y&UD5c@d0xXZ$8i&-ABOdArd+5#{O7DWYqN8}jNqJKE9e8>OyCB$FkrX(1X)3N6E zY)V9WTy=x>)nZ*9JsBeW@pXb6hljU8HE}dJ;HA0ILl&o7P*+YOL1sZ1iwvjTaYQ4?lsb}R0##VFF$5KD7 zS){@HA?d}f+>PJ%YBFC2$SR+BR^@$MP5c)4gWKfW zH?QrxKL~&R`33)A`oduYRJ5UJ0Ywx*pPcZTfO%ohn+S{4CD$^SkI^m#`VEfI-G|Wc z&!;BePte8+uCxYLX(Gac4`uGYt$X1lG_9B!i?MZg{yf{8iL*W$X9BZxj&oRYv8B1> zs^*42NFYN|(4h-Sh)=sE3Euc(W#Icj4AT0&iRx==6ceEAn#E&D6us1AH5UT$cuju5 zAGp)Y2LB%Y0OFzp(^^qRGp0kBB-h<`w4PZHE8KBWXkalvy%Z-cKVm=1uuh7gSW@rb zP!FQ@z4#gHsl+tAYpSMW*7K|!u!LMf3_i3s`6MfMc}Q1{Nk%dWrD9psVn z6Lvj4J5nxlpvdjSe{NWv*xI_h^N*M1-3ylu&3+GF{>_d(E_Hw&Wr!GJ zxYH!DJsVEa_jqPF*9&%H#o7*a3&&eSq8E z@3D6L?0uDXmAJUL8Vxq!0|M8r+4#FF4<=b70vvdYiAd@INYDru8jo#C){Dv2 z z>Sx&I@nIC>!29FB8^a8_oFDKEBeAv<>~fVXnj@-{vqB<#?bBsUEy#O%hZ&y0i47zG zWQ>O*p25$>ircY>l{iwM-ZoiRK7A4E#VR@CeN(7Xh7(n`>tNI96F}f6u8GTn%*!{t))A+^v|RsVob|yQMXy4RZO3ZY zj#pTpwoH4YV(?88PZaabBjP7jMnlKf+W7m^4ky9Fa!OS2*6l-RQr5|*(G?tg3grp{|@%F^N7L+y5 zbCn(;?~hA_fLYb}@xDL-xJq`KVx%=v528M<-!~(>yIR|Am_5DW2MC_mJ#A*ICkOWo zaXDg`?UaSE<-arJo*n9g(}M#%N7J?E8(^=!f)?)(Z)FWP#*V+4<8ugDQX+i5asT=f z$ji?%C44C8ALg-@rb^>)gBh(7#aU}tF9!u^p8W0@q4q<^PPb&`%go*%hwg6dp8Gl| zZ1mtpl=hRStAbCD3o`d#E;N&^O=pAjDr;$87S-rwr>GY*>4}m}aGHXlH$J(@WQd@E ziilHzDSM+=z`6F^b2`hwYD9Fp?S^XG{-;)DOzZ})Dt9!dE%pkI%gqn2+`Y`zP@#du zX9ZF}Cclb`y|a!Wp@@@aX_`8xavY+GCH4^PiIWJ%T4rkt?f+e-{;P2K*VEr1r(p)* z9Qem<7Hp-6j}R-$xf-csS1D!6u6#jXH-i!6ypQgkYZK8-t{ed17C+fIOR`T>cTprg zF@PZ~tYY8Bw=#Nq_gBJY^ED7BM|BsV4Io3VIVHEad<_1^jY*^l=wa+tYW({g_{aC;My zsHn2q=+s3*vN&i24NRCfHh#qNC6qt%Q`kY$q(g!tvDfbl?y+M5?3N`x0e~39^OmW;~aWTbv$Kf)>V5#_A~%E zOsCJ<50OKMH{_>a(o;^nZ{3?#Lw}8BjSSWtTy~yptycvmMQ<~6A}cVyoj#v@6AU$! z-CA|~<2{YTixwG{hlr7yKIOmx=i-4n9%exlzlZfodM{MZC0&x37c0uzHlK#`W*iy@A5Z%7h~I3vEh2w0xW)+vV1s6hXVc^p_^fW-Xbw{<8c}?D znxeOoXi48rPN|7b$1clcCfxQG5JWmkYlf*MSBZKnR}R%=ZR8;}G!XWE6NU)t=0vvc zKHg|(27B%SZlr%2W~SghK$wRqdh-S5VGS#~NYwFhrt3cNuP<`B2jB)&31Bq08=ypw zxv}26!kV;I=Zvj2MUbx0WDfFv$7bYm8zeso{9KHPOFCPS?CB&3@XU*NLKbgyPnm!5 zuI7(-+BKGko4g;$!K#z*Pia61-x~A$gLk4mHDnx~PGX@mVTWA~WpAQ_vhFuML<79I z@Xw^L+Cd}$TKV;A>DN1ZYNO=1fb5smun`Y=qSlSSZR@&5%@4=dNk&C)4P$ z^!$3&ZlLY2t7DOdd__HOR7tTLQkm}VDsPL`*X&7%5dIm!CF zTp*Kb`rQGN?a=+XV3CZsAOFo+Q2l>LxqE*A90Lzb7=zPic*Des0z<;9c+^iA`;&uW zPBX4p-+Z(N0D7qd1L+6=zZk@Qt6g)9A23z`nU@ez%jO%(UO2~6zK2cZ_m>w-0Se!*2n=IKK~dS{CKbz602kCs5Me1XXH@;dgT?`xWS zCQW_DfDxNfW=RKtNU<%&uIQgws2M*Bu6y6kJ}OC`o%YH(@K?WNM;7>Cd;2OY9u_Ut}TRyw^0L$o}cC?isdc_=od3-^mL@@_T5;Pu-&$ z-7d7SU9j!?XGSjq2RNp}p=$7pEa@kl)99x&-$+gT49NhK$61)*UnJno3FCGI;v#Uo zQqSZzfWBQ3tc_N;m}7}ot&cfC0Kvv~VBKiU@_8Jb!CfY*|Gy#q z|4ZH9C?_D#ILZ|>kh5}BOBCy}4tb==)pCO1*W9D;kg*p1E|d-c3_QX0=JvqUo^eaw z^h0Tq20<(}O1=Hl=vZ5g4QRRAg`|>x1%4GMEZ0ty>pebOx2jAoK?5aAzB{XHMkF(} z9Cr`d>GE2<;-0d7$+15Zc=Q?1@-j%t;BjXAo_Qt%ekHiz7Gc2Rh(1LMtRI2rJ*IY zrI6GTOErh#{9mcsAWkt6aS#s`pf(_}s#3XjNQMe(NHd(4_BR6qQVdLnViE|a?70R&n%MNs{Q=5n9jRN^h7ub+xcUPCm{Ry2CV z2CwGO&jF$FZ(Jm-R$a84W9l}-hanQpF5T*_3uIe3mlred__Yc*n}D3UTwkakmdoVE zCbN6{tg3#}(RCToo$NU3h4V|DKkeVXAu5>M_Kmcgeey(Y(!f;6^wASidSSr3S-Jah zI*QG&5M1s2R)s{XmHz*nqK#J|imi;gLj6zfI+cJIcU z%ej8MoDpqw_2+r>{Krom3h%0=d?~QEIrTPshOnC5TiKrtXe-Eg<`GOb=EJ!zrhQ!f zA%*mz?o*ue3L*o8GA9f4@&nR?)@Ilfrkg*%a4YJHSo$G*;qWZ+=C7CS-5QgAZE#V5 zHJN9F6yW2(7mKR1yoO|TVSJ%<0TX2dv`Me5^Oj_5;{waCEcw=>Vwh#dR`^%r|p-9FaV?r?2hs4c8` z1sRCZl<39L+krwJ*R1zq*`7ql)|bTC;fqy!6IRCD9xvuTf3HMkyYc`+6Em3q0gOvU~2&AY*F zk_VpH$uFk89{Y*zbz=COxY&QJ~dT?*kxRH;AcT@8F^gd8tTBt7&%P!Somg;0F zCwXm@UAwI#!d^P};d#j5^twM9HJEi`$h91H?n4#Q;b@g52vR_lhr>or#o4KIs>bx2 z2jOyS`~DAI?;Vz8;I<93L{w13g&P$SHz3Z;P|1mkBU7^i_o|$wws51O;RZ+H$eiV9 z*mmd6m6!auWzV~>Z=lFg6aUcABALo5u>%7jZ)Tq~wK1CDDz4yJkg3nDU z$d!bM^Y{^5Kk8%ciFVn3Z&si4r=STmarN=C^Lxd5bT1kr3T&UO{E*ktVm)`qW$964 zMZ6Ok1VY57ovmz9UDaSock~r)^~+jzt^kL@vj@i>fiNz+<203`Kjgr+cNdBqhF9e- zP8|Rz1ss?-@663zrW!TR9WONSzBm}~t0pbNeGs-U{aj$3LBn3WJ3~AxBg@K3Tvi_? zd#a4ylY;rKK_m@-){Gn%%iDEML11=mOoBAlYJQHX=vAtvmj<7Ye=Ob|WqSCLK5UyW zgBKDlgAFF^i%c#|Qpyhf#tly_j83TwtzxEep*NvG!LYiv`leH8qZpeV?x~P{3YmrS>cC*~kSb9iJ{RUl6A=M#7?`17Was4AREKw+LpEuZ7}gft<5uOLyNG6! z2|`8C{G`e!6$5bzlc8?10dXBXYlHVl(?$k@)Bi&<_mAb4RfYF|FSzasHg;Xk7-)`7 zNX?Y(G^QCcPo=$(#MwT6(aAz0g`C*uBX9%&IV@2nplqe!IroJX#X>t$7UpvK4Zg|X zR&TUVJ;aiplyO6IiU-RIkd;it51Q1K;jA8=k~=r)bXFBE_jrDz!Hm2*G#_j^Hq*A3 z<3L4e%c9JBo2BQUIekhVuHqEVLeI$kaw|Gq8*z_mj@m9R;;9+v`~p`{rtI9bK8xNs zu&Lx>thQ94VvT_Ei>njE`pz5V)a+vKfj&!Dd?N_98?B3nE=4FVrUs=ruV#m7C@R^W z2qmwS7c>%+c}w!)vwhiO4%zb5eLw^uAXq7yu-m!5iw91JJA4lj^@gVQw)g5?X$~Hbtmq1j{_8c@4Jb&ziO^jZ7yk+ z=yarV?beTNqjBj6b{xvrKdM@KH(skIS?{95yR|;Qrry(I=w~WBK(iq@C&cOA8pt~+D1bQzrH;#js?*Hn(3Eq z*)N`sX*1vW^9uU^=M)T{7s}-Voaajn%Ej0Se6o3*Et#3BOZ(#XJdYO-Ez4R}`TL9YU*C{$UEn0&T;rg-XU6(XHP~vx3e62D%km z6gh37oq*2%e3_~zU@gJ3?F)lXPm7kEL@)B>d z&+6>fJD)l4bh06;QY=-ir(-& z4S*gkDp6L5n03g{gpr6$Fiw)d3=UR0cIBJ@t^YYt{jc=xe?0!N+^=lmRR4yvcfOx% z?1=$BSD4F5f7kXj=(sQLE*T1ZyA=zlt%tGoel@`)k#|_+cQnR_he%1HzLzzZqNH+3 zv%r?1+gKl1nmBE@%qoF&n9it`4OPZJ56%Dbno!q*d+Vy(bZ>+7$6;0K_m_a1>z{N} z^jZyr$~Nx~?Y$C@(!hy)BKsVh0rls+ipkv>gc}*RiR5T7+O#EKa(m1E*sf!|F!dlkGfUud_r;h^gQRv>ZZe`>k#ryT* z8D&aF1jq06$=EyzKaE-qHcb(O3Q3X$kYCtS77Ivq@Q7>s{_N_7!P6bTqspoTZh)wp+^qAtxc=xL&#=i{Pq|Krbq^-u2OXpM$B0vju-U zsa?+$GHoFZ7CF4^>eE-7IoKIK=Ub3ej!w$^c2lZ+dVN-_$5#xu|Vr zgD$GLHXQowK~6tT6<#SG%UEFsBKs+qVhEapi^C??=`%vNaUi#|s&9iPm8}A|7Ki4* zeX>cqWCH^tzF4#~J6`sGcm)3+Yy==RbY+-B3QEM`RYX9Buy`j$i{}k<*@#eg`xQAon=7&1)Oth{ zs!UmvwGMUc($HB{Z+lZjF?t6<#|2$azpuh5JvZg$ld2~h{>skTWqvTeNayAQAN$yk zOuK-4Z}rxP)auZA=RP>b@JDBB+?P(6tG2Znwvi_`m4$A3^mFN7!aGAAW;Nt1qXzFk z98r4rFzC?mrInMeUAHR_k6o3MHR&NsO`L>7pzEvH&E&0H}Bt{MPsjfS(?1awnijsa!R*l&gl!Qqr~&qfS-6 zh}-C*zz7ksm8eaFD__*kMz_HQdQ7AHMK#-op2cjz?LfyzPPIOL1e6-snP#I|S7N)I z*QCTbV<;$@Itv?Ff$@C1c4~V1y<8v8DH3WEcAVC2DOjzpga?b zMd3^X&t6LWzvTB1a-}r@$Y?*fTW&qm_#P8 z=~D7Vi;R}Jy_a(K-E?hz^5MP0M)GQKN{L3ToPuR@)f?LB7j?xSKXUrs-?6%7cIczj zgsO>Y*j`m56RmpatsMvJw~xsT0<}Dfy5Sk#7vGaYz&3wKvY)8hW87no~Vm13r*^W9Lq$c|D8*DO!B#v6Wnmx{~m`=#L# z2XZQ$)h5s>`3i{y%Wf)sdf1Vg$vJjo*^$$6Y%(>cb*P3m4}-%adMPpk-cTQAe1Zh( z#KVtx{N6ASj#>K>@|R}vn^3h>%4(2 zCGuHRy@>vI%dnn8c2x5VC!Zvh%j;(k2i!KhF)?+GN#GY|HExeo64^*R!|Yo;XKA6* z(97tub+)*RT=j;!!L3btB9s7{IVv~fLC^Dm)f$_dmhViQklu|djOxM6krPPSFf8S* zi6qDZ^bxCVE(orX&}=sPX+pRR)mvf;}T2bbn&~*j2M5_+3>4f2rM| z|MRg{)SRp41^aue_c#xDby?BxcYK6@Rz9=uy%{PcZS`dlu&+?eVj36MKOZ(vNYJ3j zRz{idyWcj(1gcPcgL>%{gOR>&_3pd zK(XqLb2wOAbY47OMaM-97T>ok_hCj<|)n z?w1HGEvt0vjqL+C1NJ9vMG!Ow;k8(QT8C{01~o;N*0zs_7dSp{*Cv z;6w@BrU&?S@N&~G!g6t4>Rkf;YCr^~ZJ8k@J6SO^lhW#&P#5`Cj@<;3oT?)-Sl{=c zp1)UlQH+o&yLr@bA*4J0WHn6}-}zaj{<;ZQv7G0|>GKG+mw zZ*N18=8~?~mxEiLF<9m$+c#(bL$&%ZwElx!@H=5EIGsBCFPA$W>@V!gS^LzgQx7c9 zjEPBxragYS43xRZ4scPPht4y{eU4t~ltzub%re@P^HsvY79LG8bgC?{c5$~wJg>dM zWH$%6HGkN04C%+4WMMvxR5r8P-;8llz^6kGvYyv2w2VC*(NNug+VyOa=#(enFS+OU zE|^47mfnJ#sv<@yopYUNX6S2~^z|j$Req~lT}E+-e@nEkzWv6om(qv6l-!(r^&F11 zr~R~>II73#)1BH)Eqs|&P}eZwY3x2@Lkwgs?EhGymK}*fT2_y5_@=A9s*LHSu#VZB z+Kn4_o{TO+u(0l5;oqd{* zOB@#fKppJoV;L`LFo3j^1sj}hOZ4s1NH}QBY)m8_yaMvfKHQbN+&@#FAZ7#ap?x-x zKM)Sl91g0?(j9?fL-eGl3IJ#6D}aB}5%rxElO>;K7W$CUT7e*|@Zq_(#)cNi#mxIZ zRMa5X6I$DYt{vR=QtNn0f2G|UH^&NSg8#MyN=nzI`*mEiat)4D-}JplJ^W+mG_U%#R-W>lu?g-5(T{7czo3vZ)e8C~hqk4rQz0q5Il# z20UEDwlF-$!MY~wp!6_EawEIiv5ebDWQU2vP5_3LC@J42hw86(33m!h{bi^JR^rm$Nv;bOnjHYZokT+EfG8lC zsr?Ao7~Q zNODBza?l_qKoORS$a&p;pKC`v*L`C~R6-)n-;$AEUUH@%a+-pbN$W7?^Cm@XC;ErH ze{pH?`m1|o5P-`+p|}cxX{*f1^HaYLJDPnX{0>;Xx`{JtdoA%+8%BI&DhG(GpAY5*QkSs3|ks)okFM){#M-HgzwVXe6GHb(8JWPIqW z%qf|PYO0;&b^9&S@_>XAnAmBnG3*sG zidUipl0L_m^%k;yk`dB!Gt$+S1prc#LO!Z!zu_z5&ZJQ5Fje?>G=bG zvO`Z2aLs$K6jwUxobPzM{_}$ax<`+G1h};KpfyR|#ce*4eB{YaW!rq~O&#@>vB{&k zpG7PKjW3j^<}2<0v1EvWn8T|;oI+iWrg>qU>EsW6+5-sb1?264+RWO#0AMU8+a=5- znP829RFBXiDG?mpAqHI*YrPG>&D=yJy+8_u(+uxOjSF#O-8VLhEb2Lo-8LhaT(%6Z18@2OUoO&%B$VG5Vj@m0S{a zZl&I<6Hw-Hft6RjWA}_C?e(k_W8yt)zq`zU1j`wtd1+nx*rQSd?>!4J(OqI~ZZ$~O zWX%<1{yTp!_0R05b=H=5_db8;;{R9s?}yuiC4*o|%BrIv0XzpSL^$?}{Q#kXzmq)k8#@H!6vev6_=fB8IFKw(O1_Zo&7(p#QoHYE zeA#R0#(VYV`2sp`^GnJNu9Eep>}#J2iyZ0`uz4Z-%j&3Pt40CLEVMuF z8qK72@IREQ|EFLT2G-7){QJVd`q0HwCYeT09pEz(t}Ds%bt#DTINSGdg3pPd1t%RSEeW~dhzIcpe>KXzuKDrPBnRNe&T;Q-rTtUV z9dn#?sOuch^C0AeO)%f|M3wr-EyTNThi|{w^>?Bw^@m^5=~B1re^>v$s(bnqlQmlY zF8iWBU#vIsT4QvnB*Tgm*2E3HKFs`<9lqJcAUZKMPD`LOSeS@EQWAFr1Bw8Wf~|c$ zX?a`c41?jBo2Jj(vVf?m5uD~c0Z=*q-&}4h$X0lLr4Hz_DuaxGy=CU%P^b^=-ut}i z2O0PRasAn^R==Ol!XZ3=I{VwY7pHf5#^KasmXqHYqOTACr83lKP7`SS%8mqxZQ2AO zdS6!aEc?n}9Ec3iK`A*3x@Jf;85Kka{PN#fMp%7Sn5|$>@yx101??T=C)U2 zk-WwoB35~(=Rfqp^6tQP6SNDRbM8buihu;~YNHv_S4CGpBtC(8DV~HRMD2;QzWbuV zd7sbT@43K$D}}AgrR^vGZr=W86O{RK+!ZIfR~6zFenex-)WIcNaUBUJD5I?-<7Ni> zpjW(AAF~;ZBA?mBSH$MIRlpqb;tb~g4gu^N%0v^69!ZP@zwD+qV}k(As0oU$iLAxY za*1ok%DK0!w`dcw@Y6_4{o%F{>2_HQk#lg2<~2U_nV7BqqN>b)Y6SmRDmTv(BJP9B zjIxmA(!tHbseYKuReiey>#h9~l4sMV-m?GzV682j7KjcD8=z>_3KBRDl5UDd#H|^m z_aNO$OVq(L4ai&ud~j9Dt;%Ku)pkUOj>{4jr=BMbQi3MA3fk8S+*NwgdU-cX-+J+` z6F!2=`tD}X`wr*~M(Xc<_0iQ-d+n=fXu>6_q$VpWP_L7E5?Az1y(|5<^h%aP<PiZ<2s_VK0QMA(W!)@gt5D z6>$+sxkin$GTwvOONx(Li^akA6V-wJ>6y6*;c=jSp+jcF=I3rDrdXN1)NroWLh5Q{ z6K~o7DMPH!gh-PuJ}IU+(L~gq4*G%49xMnwYugo`7V9rj{^XwT^sdHjAO{ktrWFj? ze%iCv;;=a6Q{adz!mXTpjI5p?ryWd6oz@K#g}MaX=?u5bsV_1X%8f_rSqo6y6D}c_jaw&OkwUk}s)wC>L zpT?O?R2q6y$rX)$iQj`@_IVEgBw-feFqm)lSa68$TM*I@CbuLaZKUVNeC~hBJL+?9 zTl1Smwwl>iturZ)E8U3sx<6#)sd_uzBfIV4Ye>y5^UhAW*wMKc?Y2>4it68-`X0{f z5$~cD)YOf~CDy$x$JF*ueKH;jrs!#jTENxLntp)Y57G+D2BHUivN;StLNb2&a>gDI zO$PEV063I=x-#VC9Z44jQ;W~Fp3{&BvRtxAuUp!ur=Fl_Ah6N>6N8xsX03FS%%zCO zRjGNzV`*DuwK?gaYKPjpfF{t|tif=(y5@7m!8OOTrA6Pn&=#>8?1^l6Lx`Tc7;?LO z5g@I!3av!oV&-6!t7DQFl|iVL-I7yN_kCxRL9E0U8QuXI;>*WFu%Xw&f$)5ovwYi!9#xU2U?#%o!-ppy(pA3Rh%xy!zx2>Q?M#{8yS3rJac4gGX)rtD z$&V`r(#CtUyz9#0Ob-ix*aMjofF*n+P;Enzek=a{18zoRpppvzTBv6S%qhWc1vxl# zsw7LqH`{<|V7EUUS67rzfyG8KghiU3t6tugEm3A?ApF&${#AMN$by1~I3{|JiM43lI>Vb2TCD@{4@TeaRL2EX8g=}&um;tEPoa5S4V zuOve(8rUJ1FxGodpD%m$|Jg0FY5SW2P16GiJh$xmLiJML4j@Ne@XEo+T> zwE?SB%I&r7yUV%sIOX$SDMEDsBlkVEPHCUEl+LdVLyV{!j1oTlS@I;VVf=^4-QP&; z(C^ka?fECKe9}1d^TFnY4+0&e=7u~wECm*pt-c|f9@Zu0aA>5_qEK|VJ|9@fkpG@G z9wxP>dP7MbsJM14)Ydi?g7L=d!Zk(3?F%ACuj}Skart!q1!HMhJ~yr&2}*N|;w{WN z&J}Hk1m%a-VO0C?t!a{CWd!79xSf-1zJsh@OueLEZ{G3w{-x3Xe}9O7kUM516a}xk z3j=Em<>UZg7+CSLla>^>l@Do4h3lh}>n*~(Z@EbvqY0>zUj&FpfHxk)4SEpzgx(CP z?KJLnC%W{IM}`B!u%4;`2(Qa~_MlS+Ou20byg*j;F>XTWyUET!ev9^F8NO*6N4kza z|A1(kk^ejxR%(Cn+dh?JlF6BJ-`+^PM}QSIx0TL(ii2CK6Rq9NtMZbh>~%h7&VQD& zdy+=|6PB9bb)qE9VZXzfl#_ztur=04r=DS@;L5hO=wF=+%fs$YS>cV_1EFThjsB=c zp6oEKU_(89!||#kFc$}5;S9x~WVyy{@m!xUcG@V^`B^v^v{P!d$d`AW-$vyT(#kNk zY>kNTs7ZO1?grZ!&YcpEb;#w;JCFR3!w6P=+CW-tFDn>eCF*@uz(~)~oxn$D6l(DJ zXmk($qEp*~6XJ@g%><(OYLBBFaxUQT`xsND|0GZgv)>6Mu z*Q1WtK7u#D!d9@aH9mb)XkLNHI&!D@;np^9k=wcIv47sad-}QN5>m;#byplr}nZ@N$PcT1~X5=agE0FbD zcSjUmMAL#0bpS?lb6RcP4=F-|oW5mO8m!Z^bO@5|jTlBcTs|No>2*k4tkN2wo1vF0 z2wqzoax+s(<@^*M&B<4!`2GA@^9P4%tm9XxR97eole7Q#_YZR59sqp)qPtKOEHuFx zXpTQpMV2w$=H!NbWM^K8O?!Kw2;eg0LkQ^`rG0z$MR_^9bwCw&k!+1Lw78?lL*6i0 z)b)O>#!zuu(cGHQAdM%7gTqD{$y=S;FTOpzQAG(xO|4skt?2WIkFT6NHL<|P+PPby z^D5jgU%b^`a&7r!(gY#m=C^Mv6_4j`o^5ssIN)&SRi_K~*O;m7T#3QZrMVIRXn#DL zT={0&z$)fhzHR=miCee#0tf)8Qm-^zoPo}hG=p%WlB6=v08DbpqKuBk)k_^DxYO% z8r%~bGt@aV9}iT^)|Lk>J<9Bz>m3VSB_bVhf1Y`^Q2-1s7em9q z#j1p;zMX09lX&wPUolTfPZHEvSw-^uwJAkdg$nUCK>&ZyQfAjRh944R0O_=h3lQs0 zrNl7B+l9pSIF;GC!*6>%er~QW{@(7k?~_eA0>eBPGZ$0v-`nm&VUprm zlb_uQpzd!{Aa&jw=OM&}*efsVyVNzM({K{Hm0F$c_p1TXnOi)T^WqvB7MID<0Euz> z)@1Pv!7?5#FLl9Bi~l!D-WHsBW1Ujz}oJKoJ4>I3c4Ln&|bBWTEtE4ZOPo)T?{ zoX+jjD7=2t_(px7=$lPbWXUb>u9si?im8g9`FrxJ4!Vj8ZnVbszW-42Tlrm?q@`4~ zz!_XZ*F>FN%ZNQHxg8=|lHVa5BvK_OanW$(kubkZ)1J$TN&$_7?M$okjt}v!>{D2nEkzEI-be$mD#! z3pO9l;q)vo??gB~TCj5gz`v1`OIwr}Mo_y6MtJBrOp@rU#ocA_DAi_vH(-Z&MUlZe zp>hTM2IgQ?zvJgEAV?9Whv2bcmea$c@X*Y7EC3V)UIEz;1J+G1lF!J7Mb4io#0&N? z`Sy{kN{RWOu*t3Bx9W2@Prd!MEr@sJ?X5Z~(A{(y;jWUtZo2Gb>VwF8$w^mLowF1~ z-B{Vf5CJC44Y#=V25`-TcI8t1=d5BT=6gu(I6L(49dnNS`D@=ooSyD!UFbjJdy1H# zyT{r(pjZLRo!wi|_y)9Cm1?o;_vOw-fXblhU|&Pv9fgiw(TG6|;K>p6luP1}G__OL z#JXq0T_zwCuD)rBn(hz5^l(6d@_Tr+o=6gr%VLaDgbm7iXRag8?Kux=7W%=7$-dJY zr_ohp+UYY~8@!VXM;b~>@jsqp>ej>l2vVxyaz+ZYINMtu!po`|H~=P6-Z*-xHT=cr z|53UAW4ZA}A>{VC%n#_A3Ed={2}i12)-AY2Yt0DW`AXrmruXiUwG-E zR()3fGzXMc&8u@PAx)p7HK{-HTus*%TJ$!EVNr5oNbBk1{rV5mC#KV{F8Sz3ia(aVw1BpAeDs#;nLwy*aBy# z(fjt%gB3-viGi#>-4vC;9y`s`;_^RZnv1Jxd4GZd1prmnoQD_XOkHl%3!dm|F|VbnM3KJzIIXg->v4?v?napk<9J z?j38hY}iDL^R_zVsD_EWEGa;1w=MZo#t~J$5`LO=#on6aIGJxA6eL@avenmjhvoiAf_=!CY?7PbMQay(i@^Xykp75qcCLj$$?owBXm!2f^ozc> zW!nwdvD6mI{HB!z{l2JKB zf6#Z=pHe;~F~z){^KItR%NQOLQpyS(?(j6Zg2mdDTNZCT9^DgjdAKPtLASQ)x6|X6 z_xle9@3*Qw(&0Pf2T%b30Z$?#3Zph(2ZO?bUq&T$F^>J2x%@B;f2k@R67&`GHFIj$ zz@#_aX&Xo$VXkfdJ##2Z3rM9+KPDUZ&MpJQ68o36bPOacAxuX-nuypq6{#J{mw~f+s5FOore0aoZmTIAHUOZ(F4|nHhiSiXjaBFqm?)#Yoi-`d zE_q2}C!a)4128fT3?Id~S_%{!dG|#0oNd!02@>LD0oWUVf$o=V5UGg8&=Dfd)CX01 z21x%{#Lm~_h9c>6rg|S%6SvnQ?;9GK5WD(Y^OnwVRlg?BoG&s@74GYM-L+vjJmvQ-Q9BA=6dqrO=j|L z?0p(6KmyIFG9|rKnR}6N5p%b{$BaKX>LX*07z8C?k+k|fmI4*o1wvHm%OOE?$2i?X z13R8wIDG6eXb{tA1dW?=REm!o#5Um1L!C$=@Q5KP(=fOui{+fE(6+D7(@y%;$RrLR zW8CyXx+rbJVG2y^dNA>|r4OKTFieF(j4TnSsXVbGj!-Mm7<`KhHR6RFVN0y>MG1xx zgF%ZFUGX^>?5+vXxJV6q_2xr`$N;sSHrI<+`QUR^HsI^7wNQFm9DeyltZHHGnv?@^ zudO}2ZQqQ@g$CD(vZoeNBGyqy5kZy*$Dch)7ez%yl*dGN92scun9?=*^m|q*QssQ~ zH^&JNXDSr6&8E_^W=!a5ir@fk;Y)#V(xBI}4TO+7>mZr<}@; zcoP(+F`;6w$UdN4pv)t=WcY6Ah%08!hSgZM4{ku@E0gCB2QsftZ!9SA4eB64r5I|I zo71XT=65E^cW5V=!Jl8gnJzd52MhN^<^V04$>GkVRhO6GGM?rxhJ>X&nSZ`Z2QUC2n=xENgiHcD z6z3Q*V^dyXfgKhgs|+qsfR~8l-%86w@4j84=4x6H6;oC(J3S!rP#LB#t zHs7}E%z=?<3ChsAR#+dMI|*NjD$U8S^s4#O67nTmP5XLsr#GASq{!@ts?7cqX3IyT z{rpaF@BEFq<(2R#;JL|DhMc5a>RYz9711PM@ zRuG)<2UP^V9mK6bBB$e${C~#Ca>Ch$|W)AmfV@fGQJ)7(L{B zIjH^Yp&Pe_uT<#F5SJfYZqQ1ECZ>%>FT-!?15D6t4xh!&rnJHPk zVr+I|9OmF2xOUPk#r{oIOQBWe%5NFwsVDFlUGUmK+owrPe9>iFaA2!pv7Y3WXtJF}JFDH_?(G>B}<8MQzGvgO^&n|8_E>!n% zLS|#@;5AEO!xl=A#7M==ef>6_90*PqR1VkKKMcAvRS1}@y3;?AiKSQ^s<%fz_d|DWb5Kr(On81p@^IXL2&|_J08;Z;-Mu9Y z+{u}%kwOp65Y%r=cleFPbaNr(-oEYuWIGY)gwF(l<%sFFZ9jJ74uh~m%mS3a$`BPM zDju7;3GgTo(*e+%D_ z4&9#Y5b1FEyS07m#lGWM;}(Dv0D!0Rf9z6PJcy>;sDxfuoPMhOB?(wLr>wE6hww&= z$S98`Xhab@T0-a;v@W@p_B?!5LTU=vAWvl73-i-BB{3{=4$!JhlCGBHY5K9_q6ywM z+CXR(^J+HKFaa4vxJcP_*<$!mwaK|7Q`tK?K5H}1cCrrHG=}^hR><}jdTf_Cc5MS; z2kTUUa5KpD*}KA7@{bdGzM6N-nj#kD{WQMX1t*r87LPYaIgc-yyn@K@eI1qHdqGx4 zw^f_@(FDKV^jyZYVE!RczwBXTM4g)>;l31;*zDWZ9vkSPC7y5~_MFC;?yx6`F!)G7 zKB+jfpXcOk$k7o&MTG@eQ% zvPiJP>C*_gUuJQ?k8rp1lMxafsD{=QVTl(+L_G9$%M6@4)Q^D=`mBZ1VC(87R6DN& zXVYDS9)xQS`k25)Nm{Fts*3QuzrQ;F8|?nE+}=8&p<$leyuC4*ku~5iWH}p|-=;J~ zXl}n~L1^FPMjugFK41W<8uiSYqhMgf@s5s+{w#R#pflbIvLLN&YpY`o50!yh=JN6{ z+FcAhT@QP%752jSb+M#xqD|P4`(r{^E!S^`9k{!xU@UEi|Cc|}8g83kUJaf6YT~W8 zn#?HbFJ$|Z`V}>@*(xc9qGpU2L_-h1hldmFM0Jnv!D$q~EE;zPiJwuKy<#eNcFKeD z&#n~_rU2ZqIyV5*ZHo9_6InE&+gC_=@FHti2g*)>?o{LHzl}ZYiJF$h5)@wy4@`G# zebEe7$H57idI+c7UY24BK5Ri$DTcwEh6$YLC?}Xn<#aEr7f(q5&}`MSC&0^RUWaGPj>IBc68h1Tg{ELzD#ubIXbq`~sYrxd z8!|Yxz@5ac(mW8Pu3n*HDaoRte?aEKd_xQP+rmQw{`KQ>AbIsr=B5>Y- zT8FxHA;kP-q2-XW&HZlk?=GIW93 zdPYIL41hs+b8ay#42t5#1X?4ATP414px`XFLwSxZm5L*^NLj!Ztl87RCXj3b~Sbign`j=j@g+x>}Gwg;AQ9c=m8Ypsr=@-BDozyolJKgDU6Y70i zBb!liD{C+uhFnHsR^iH?M5#3Q;RMmvx6O zqPDLic_A%R47W#zk4X>x0IY=I%vn50SMUmxGX#C3#xoR(NoP)b;owmIqlSJ?e3{5-wgBpTAuy^PH#W`J? zL)+J@G(+48bPSt$-&<(sBOl8LW}|cL?f5y!Vva^y>d2kJGXqAd!u^z?F~>4%5i@#7 zis|Pd+e>X0h}!e#vd*_~>3SEkYzZIz$}b(YI=N z=B6l6Mz_O^O`GlD`BRXt)$=Cev(0fWU2|a_$7_PkNi9Cw*F72^eVQ#X9C8NMQ z=I27kUgF3(dPwMGBFSQs74q%i$K3Ak~H}teu zY*8F6agb^s>CP#(w8$74UZWr(cSpcx*#pWOwkFbmOnWZy^-%h1iCi|dksyU;K*(Z* zdiNB@@7}bb!SJ(Q8U?)~EEY(-Thg^a!@c>;gzv8Z1h;><`^R!gHNtJ1KDW75;RUaw z^?X6XF>Cpqrc}hb@u<+`wr}!fE#TjA1;8LLup%7uf2HdY}+DhcA10^Ei(&;QADoz)_(@-R1%%mx+l~K*2FPbt9bN;huF?& zX{Q%iS$>iQaf-(`a_;Z)>v0SG6N{JbXA6pesG2coR&-f~(%j{-@Ea`)Wpgf3#N1Ca z(FNy6_w0$UUUj*|u!_hM8Ft&RWT~d*cBVb?Fn9EN-#Nd%)m|^l5nzjnk%;k&lWo)N zwWcQ_BMiI=+RJ3ZTf&X3F`%a7x~jXA_`DmTWD4#Sd^$n`nqG@VQYhFdV4T34O_3u5 zlOcP=(=~-z11|;^B)mr2V+1})i;x@MVD+d34GgJ zF0fRdFL07hWH_I%mF_?^^q(gcMGfB+XnB6NnAqJ5miFqTGjpzs_xM4`46&Bi;sUg+ z|2_JHosjcd>IXfYp0zB$z_g_Gy;joeSIu*{Bpd0~bN@+ZxYYYU71T;HaHlRyJl!5b zlC7XqDb3H=pXo6VF7C{OKG2DDVWOz%7I_CoeCmncb?fY0WunD%X==Y+alh8@D835n zk`DqCFDnZ_H{h!1SSVWeSk$=KTpDiqn4-ZSX5@p)$zhY7Jm2_M+FHcpbA4frMvTN0 z&@gOlyGB~yaKEPgNxF4+2^53Z#EK9ZTC#52R=VcUADC=p4vZ(3qfeZ3(tt%vRYI1v zH|Ry;c9gcBel{Fng{J3Ui}m_%vbledbGs%qUaE8V%BPuO6N3GP6{~~yO>-v%HZa}! zpYc-679bk{^h8Hsh&Z&xOoGEmL~ag*pB>Yq%k){2+MZ5iy?T|RKaqU)%WyHjIs$-G zNq@m_`5JNdOt4{@#@RP?Jn(P+^+V&>4q7A@Kb6g_j*%KHn~*!@3YVYlv`@V5iVKZ@ z@hsqS4Q;)S5c!dtF!Hfn+hGBlp{{4ds7JTEt^B&!xK4P(Gd^+T%E`YG-E!Yhqn;ut zd%%Rd;ERpJqeqP&W7gehI;8o)F>t-kebZ~*xfh5T^`=rFPo;a!T_AR^RJzI#-vi2i zu1{dt8o?iQsAw5ATzfmxN5>%BP2^*z%82lC`b0*34<;a^k}v?t--?DpcUN5K2KhrB zZ5#I->$PApbmzt_&&m$l*548Sj`2?a^cFdW{Y$qCwX%1s4<*-;n^<}@oKs8E6xVX58Tl|LyOZTd3C*-6iG zyK~^oDxGLOA7zh_Va>?UL?`JU=9pvCzF=I|RA8cWItGap7spxQ?J*7j*&dK>ZQpYd zdI(m84@9N0fld^PH`$<0LyACU)`INj6j8#gZT0rk&%&DO@Abdu{x1Bd9?5^P+%-ob z%bjuaF)?hX>2{Zh8HZyl^4^=l!z#hq|a% zv>&p_Bg_MmJ;ei%1JpMXiyg?`Q& zupRu5KFMP0F4|azZ4P-tF#;I_14Z@|Vr77A^ra+S5_Z>;g?yO(p^B&gOd2b~lwoXl ztfm$>fk8)cRY9jWEiyowm}Pf}@RCJ@cf(|a>sp*qY5J{x`KZ#~tLiK-_oh7$+DybB z_{-WIl5<7CQqTK)uruyIz*Drl-i{p^7K*nm9HUX-gfU0njVO~5$WW93%i*)rbt zGM0BT5P99okYGfE7HZl)GVHighAmXq1HI)Nn{HWN>~Kg%DMl&S%QCNGc;2*Bp8`q% zvpMoPraiPK6;etkR~#^L5vL|Pa9(zgO6dRYkq9Bz8ADwLh|WKB5%%S1!>RVV2}dgR zWLC^+Z7YU-5B`-8L39cLz+odZg5{io`g8r&Wu0Jzyqo?n@|G)+?XSsui6N&R{yE*0 z=+y)qMT*#qT;=FFq96!)Th3y3ZMO7sYA3qEG_a9;=8T@1#z>8G{R-*you2`hMo&d0 zxqFg4Yu6yWyh~y;>shge;j+mpqq^z4-a5gMmF5r~=QFXF-5p@KMB3M`D8nkpf|!8q zkX5e}f92vtuDIkr>J=U?1R_4V?=(S+uUggyS29ZO^n0_P&t{6y=BC5Sw(|8P7Sf9{?$7k&^RG9tat#H7Cxq|41Q zeUa89b~kgcxD$D0q_`5tDh_v2^5Y4@VI8)VJ#=hFwO)lB5xM|gNVQV%5$d#u_v&DD zWfjS{fL0ygU5gbjE8~3zVN``7(YdTYrCp6T7OHh6wr8Urr5-ZKt+2V9)U>9mcqXB3 zs6Hw1>sx(YpLehK$)S!#nOBuK?gZAO;0hAY>`I1QWtMAl>lg)Mwi$O1^apv@;}tgY zPN(n1MT&*#EftM6M^^6@mu!%=%SM?5xtVWv9Jd*S&~B~(w02uz%kLtt2z+?Ui~< zlfwFP56+z)K4ij~TgSSdLwpmq`R!tm>*nzOe<1Adlk8v5-+Og4TTtYBsqO;A^|J*` zut0_`tD#2`$3ID3{c8`gR!jsKwaZ2Y*&_-_GKoE>7St)DS8+=EhfNfPoGAeA(3P!@nnY(+WFJIvo>jytc-VH?q3q!I;GI^b#phL!r!H&O zcxO)97a3i=>*U=2cUtz$0Ths{`(q{lwP(;hss= zDzE}72ZR3PRH|c$=Gb3xFU6x1(@I%6tPXrHx4slx-QS3Y=JYXB(5UGZyGbz;z%JPJ zBw#S3JRf8{ElvZ-3c`G4A?2y0V9U`8VN<&5kLIbpCk8zf-$I0!67N8fq5YKub^9~A zm?#G2J5ZQC&+L zDfPmuXY?)H0}g0~f0Z;$dG9IwdA-#YDLQdecu@!ZY4Ev|s)tug4DQLFf|DLqGxXt_ zrhzKVy&C?!8HPNM8o?HK5)?inQ4YA`FCoQ;A;o|-1;Alc2DDf@GUIEx3bxk%{vGsA z!@=6loTh|iU#~tlRecVFBrJ3QL*!)U=0^5l?RZ9ybF;sHi51Qd-f~Ge&g!XBg}=(p zScow{k>Ss-KJ&Br-$G z`f51Ou9wBVm@KSL`x;lWdy^piC(z5;2-(#bTV;{QHvW}QK}e7gFJU_9nmsBNdtSrh zX))%Ngz!B1iTh|X-;z`4`->x1~F^NCbuHAc~CRNBaeZoZ4v>iM`neJn<15)xB#SBeYhH0mb^e+4Z zqb4i_BnA=HI>Oi;Sn?r5M`pg)E}X5yJUQW*uRu{1P1eC92eo#qXPM!b0%JO^IQtH> zGg}jH3yfNPH7s%v3XGmqtV|EgI+>!Zz6!LEh68I8>vU0pEM#0p)3N?Nbc8cQqMRri-#+jVNSALwgkKD7K99@}XA3?C7=7M<~2D8`D~3;mUg z{n)I#bqJ`~OOi+pti7Lp;?i{~pM~FN%L@IA0CmwMxruMz2uAG@Z=K$L>Ik5m>#?uEygzcclNNarlp7 z_ZM;rVE~CW9Mv_!%aL_F;V(uajMYq|xQ8yRb_hf! zZ9s-y^M?#5t{sx8F+-cx1sM8gU2*%CFYV!;f%zZ;3AV#sf@Z&LddVF;+&`dqm6DgV zU*5QFG$gg9U~;r-^vQveXF*%pTVbA;9T)P)mdHW%dJ0+e)cD4tU8w~!i8w>-^9pX^%w6-3_21h)) z(AltITytr!QQiZl21?HavsGb=P0BM64x6P9P?odWZgI>S35&pT{KVT%&J+{B;{tNy+% zfu(`0xO1m^S$>;={@-Im{fGR!PWi{i1Ux((@SAs>eM%kyKSM76^)+##sr|XZL~-|) zD`$rBI3~oX&c+*H#ALj5KNc#i&Pk}tk&zY4WQpW7c>!6YsQ})xm%4of{E0k6Qy5ch z9D`FgBw|z&8PkA7ZRO`5hXrlJ-}CUt`I)Hy7jAzs_ZM=-&jqyHTgO>}c8PF8NYJpx zh9bWUDq5B$+Ji z0Q91fAjWv>H45h*uE$dLnxAVd!|+D7_U@yR-}LH$o}VJbKI(M1<#i(JVztUHN)E)r zz_!CqV(&^-PyOT2|0P5$iLc-dt0-KtVfqHjbq_~e1chX#6v`dQn>@A3)YS4WFhfKi zuP~`IJSz3xsFMHk5dy$5Po4=(w^zgvSu2Q;`DOb7w}+F;=S>iD!ieK9-%rDSrT=LRFnfsse}6g z71^3AZs$)UD`S;|ly@0ihc<+oUpt5y?)bIv=8dD$e1WeOjj0IRUw*Uip}XXAaaxD> z;lMX{#(p=pw%xdYzvQMw^hEQ|TQxVgOKyBUszQIgc{z13vs%wp1L=kMs z`WFawWEhmEXHM>>ViA4ALjoZLHO8_FBDcWs zQ(<|4JQ1D$26KNQxBeL*u^Qv-AtRvW5^GC{Cr_P_zGv=6y=@S$mlZJiEVu^%OwNG& zqwV=iVVu|Lbw|{^VvZ1@pRSP1@z)ab0=B|Mho%bCTt>YKI+7X}b~8^rR6FLRpS&Dq z-O@IGyw+tn@x_y=Y7oEA(%$eVG_YvMB|Ys>^~d4y@sH!5mM)w-*NDZA533IC(<_Bv)$7r7HyP+M_06bUucJ^*i4!PneaV-hQK~xV%1#)@ zv!GH#*h=(oC!sWTRc=o_Y!>?|cnms#VvtC-HVP^+Qb*wik^bZCTO_n7Vz)qmMo0{A z4YAFsIdR@~x6%nJ`+;dkQTW@euw!c14GyPvI#&mJl%)=73_RVXea|Kcg(9t(b(rkX zw?NCDIMn4OQ-A!Yp>0>*`jU2GwrP1J$oSqpTe}jU{-K7tPOaJ1*S%wRiY}yyV?ANu zG5EEF?7n!mb)62U0r)a0r@7RTQ{en?=xWM!?ULX{->%flihkkpf-i5tMPF1npL{3YRcqAP3oo zN-3AQ{K8`4-$!|NJ_uMxGCt%ex9kED2djMl>iYI`L6Q6C%YW0z{Y(Gw7jg}if_c}Z zlSi$feTYl&5*Qjrd3^tmc~{?7Rs-AJBov0}rfc!qOl zE?PZ4!U+RK;lu60@61^_alU*q2>hg8EBwPfpq`y}rlzcKvsh|_x{j@0R8x!RBZXrB zeJvIqY@067oEx$N8?4&Zm|~Klrb%bT{AiI$xej-5{f)_~l&ncJDldZ>q}w-Vc{y6t zd2PEnxIXRgjKJqVuADql5TJ9Fm6|R*H2$z$2^Jab`cI9fu%W_lZ171zf}*CRyaF=b zmsOH!y?%F3y6}YYUh~a2gFIHEOpK4pUSqe~gJ1bOP+5)2OdfjQ^Q}9zx>I8{HP1}9V2qMW{BrxO_NPxzs}mbT9>qj5D4vIzm>T;h zh#$c#l11X5Yw)Nuv-~ZnY8J@dScy2uOVG&%h_=VH3lh$-X!sklA$DFLWU*n%TXh%V zP+KsN%kU}|o+th&Pk4!*>~H>c3~RkfAw6Qs;JmVec4R-XK?&SMu%`x)IK|&N^JYG~4)jEadZ%LpO4I`X7zaZ{!a7NBGAQeb5!c z4*3?|R&h+bKOKaq#~VgfbRH^Itzs?(aY3n^`LScPV$|R$GAUP0v?{w%Yup;rS%33J z!%g2Y+pl>pR9%hCY9n~yQSlwcQ4Kj4coSq38G&UoUn1F1b$u!9QBR*~F?)9lR zL3a71IFq;#_{)A$=jivv=g5?0&TmQaaQ9)^-M~KxvHFzDeQyS))ekArZ(|$HI=Eqn z$let;$BPtN{@6{n7Y6JzVyc$PJTu(+$?>c;;13{u)sLzi64dD1nSTaf0GETgw$ z7k=QXsgc?i5^w0L29gs~!GKhfIYqj7{O};0Mn@9hB6_4hzO{o`pp6!RY=73Win3@j z62JukOWgLEsN4yLqJlk(k0&E~rPr4ILDvKtcNw-5CBDq)_zbmy3qc2>0`?? z*dyb4xkGcw4fu{j8|qm%h|IW5>(vE5^$cC1;E_U@h&^a!e+^m<>s#H|j&>h!s0Ad#za?n;z`NB##u}nTPzXqIGhC?i z_!B*g=;Dte;@@*YDSpZpFgRJgy{}9V-jTRA{ODB7e_P!DTjlEW0V1EJoaS~KII9N> zH7_3XGL`4-vJ+o>Z@nqeU_H6hc2-%#eZs%Pqa2S z+Xoe`i9oJlz}O_A>Y1d(0qU;b6)Kt@beP4QM#P&Q7JcHElu%K!m?J5&Q~I-|1xv)ame)<|A#K&xAu=YSvY!EKG=Gb0arNFQ8~LKHu9&qqKE6H6;zWHCz$}4 z*)3&axP8|k7hqG0Lx7d$ADNBm@~KzZFUE4g7JkYM=>Py(C9$LcB`Vb8p`yyHt7mz{ zj2e_lpIxr$lA96so>K?wR0<`_%bs57zx@mvFY3ml2#MI?&aoIk*8!v&{yuXy9~F)e zf=FFRv(f}$Liq6$xOJ?hYqd@W4&$qx5)1zodi*t`MOvrWuX|og&u*r(x%--wNaGW0 z%JsVk4IB?TqKgN>@qM7k?YMOXix{d&-}-fP)jCm+u)CpX@aY+yg~?&~)DJ$l}Q z`Ga2@E`q>z56+it)&#~h=W4yEj4Y+c`rCZJAg|ESTi1XVHNW($yqAHd58Ul@T&3I0 z*je?Ez6FP@6IugRtl9gNKQiJ28=@rOcsvoO%>iMwJ492(My&BN9}FGZ zEaymef^D03Z#DqHzUjm{2l*1CdUWQ8B?<$l2I;GnZ59Hkr&X=xvxAy0FH7xpjM*1g zqT?&k98apE{q%@gFBCDd!4V< zUizrKwZ2r$_x7jq9AZW(ss8c3mQYNLv(f$gHS?;eNf(`1FxP= z=$;_jWO>AOg@z>x+awCZz%6rvK@(T}HyiNh zCD4}&h#UxHX0db4Yrzrl{+HjDOyPs6l`Dk+3@=eULpNz*2vY%%PN5AIpUps!>-eLR zRM~$23E=9)T>F$O{C<1PRG9Gx&zL?0%EQ={%QT$OGW6NM%eW1{IA@g8jpsq}P;FzJ zj3Jz`I|%_meKd+OKxvbo7QiQByv`UhhQu;r$V23e;NS%S%?H`Su=O1Y{DMmk4fd7N zgsGEtD}(cs(T9Kk7X2?$nD-ZQBjo_d>Vn;zjerV{UGWmQ%jru`8aTBHM8P{G0z{vF zl*R%8V7gRwKVro$IZ;B+h&J3+l4oa0i7Hql5_yG%;?jXb*ku*azGfaY%+i014~Mlm z-hp{I>-O9@CKPq9WU~8nZUo_#_G#Uc2-?K_4w252$DJ-L`MeRkkSc3npx>$iJ-Pd^ z*Ipy~C*_WVVHZf_W@qJknichjeM@l#&|(|^+}p3u-|-e!6jkBFQ?VKQ3_7;!SGDfS z;NdP<$qd!~RE~}l#Qg4V09EteuHx_)<1GG6?HWKct{SHGd_Rg0X2j>lr><5Lfj+`o z1mLeljv632uL*>MWW&30cpU)P{VmRlIWEBjmjfXT*Nc^;32^LvX`m5UNlqtv8l`4O z_no8~fpuq-PbLz>=Xd}>lTm!;?R+Ry7AxB{n2K+;9~Cal2g`+f6PLMGm5z1BjBZbN zlDqGLeuS&1fg|6~&&`xFkS|L_&xsuMeiGB^wEdI0Z``0;h_divZDhRQ+(V6>xI7%? zpc?4%&hcem^Nd}I=XQEy3@qQA8&BEnTx+8jJeJiDDX)Kreh_qZg|Ra8r*8L?Yu~NT zZ*Nonkn$$lfn?*UT8}4M*g-AY5BczxZpFS`<#|Quc`bBnO|h<8ad0f^97TDk5{-kG zfI2a9J5Ys&DWZ@EB0N99oW~nPLy?_v&FQmR^qvF3etxh(Gk>YzqaN$8@DfYPY{LsH z=!7iBX*33EZT}7>3gh-ycXqe8cjw6YGbwo`QoyRr^S|H!Px1NRX5jxje<5eyC9rM9 zIL_p|*!CYE5Xj|Xlik*g9NX}x;w7>K7W{&pLSTFo*xwV_u`a680Y2RdS}74rjfWHU zjJYZdgqb1NOw=2e)z;vlrb^I?7rz9}0YM$8^zoJo>Y;9B`dB5!3Uz?}J>>QzARx#3 zZq>mJZ!a@#w;h9bYJ44+J8M!yzFjoQYPqw&!7Fc!t}h?|Lf9(nP~)L54fO2not?M) zy~m=wM&+;KJsGZOXIXD|a=%iX@8?u-DosXid;2|qC4v|-KWshV(R}x zgZPPC=5bZi8nyT;_Lz`Gfs^K0JP$FE`hnA%Kg46Y-gRq0izy(HN_D*S!(p<4ZqNL3 zTMl25rO9HVUkvH125=VR`+O0Lo1KQ~+}m*~Rpvk&>VxBM^VAXt4b!NgM000-C z0O{((G2};zCP@=se)_n9biH=EHlo-%AN&Gn6F(>i@|Jkj4dl5s1muc{=>q9=cVn0N zXG*Y!F=1b^gTDBM6G>Ba0ndLwT7M6rne^25MoyZf)c6qB)|XPAsrbwlbJ*>Nl(2Tei9odaR48f!t&{=lpO#`b9 zARqT?U6T@GRdU%MTqd8D^2d?NH?NM)4>9$(3@6!tHN@WrJRq;Wx; zVlNPc82ZfHE_Qj2SwE8&Pxp}Xt$tZIN}52>68o4o9xTYOsY`-6Bm^Lpb;8#MRLHf) z&(X`(dT+*_vgd~~AC>>Fv(~?mdqWUdlE@1nN2mHm36)d}QqBu()yPNjKAgvYV+voQ z0KlX#0E{RrFc-YukV=H(_%o4~H*ad1LjY6nU0szkch%v%^CNVZUD@Y-+PXTbUjGO z-hckZkMn;DN3c+KpzB`Ladwa}XO%eQVON21z4uS~1J}%ziZ^jL;Kh&7*V!dz3to)- zl!>ck|6gmOR9gEMo6WbqNsboxAVehuDbhO-EIPvdX3eGk#Vnrg%Vb7OgMyfO2OP^X z#u4Fmx2}VcfHGIS5Aw*i19Z8(1vOiVCpn~Mgveaf#S~8s84mC;q{aR|xOvqgFfC(g zT8;rVI)&2@FYOg=Jg%2<2)hIxxOqGVmM(pw{!Is&xoRl)jk=>qO@d!v<#!In>GTXv zh;dE}PU|uecFl0`zp@%7RKB0pDn>{GhOB&0a#XloeOJpj%Oq#&PpNT1=b9BRwCix> zC8})ZHKkre#n=$`gFajLNwHM3^eCQ&T-exBFQ3@sNEin2cq^x5CSiewI^coGE#3Ux zJYVP>)X}tq9b(?uRvxEvu{a@aA_Mcsfym>!CRCu(6V>7Nv(lPpab4{lyyh-_e0O+8 z2u{OmJI&W-r;UPPO;!dC{~;(DJl2hpw`RR*y_b@^^_BX+bgKVa<(_5>b_(ZgUBz5X z@lk$%7rgwDOc|p1(g%=`ME$71f?o*9$|WKq8`$Y3-2UH~Fk)Xc|Gm^@3f&XATqbVyms@)<1jSBT+*Ckoc|OMEo!XGs9N$g_U2 z)W)RP#u;M$#3;b7F%Nkl_bZn@!)BQ%wn}-d%Z7jd)YeKnQ0r^-9ylej>j*lDz_yt^ zgS|nmhEz^$%$~pM&`{s`k5=9~oPhGV3%0?~e9lxq%#iV$Ga_A}EW$2QcpJ?g_RSeg-!Pmr+QEE7+K<_>=U^YA6h*kdYQ%mwd{f`5_sg$#5J}g)mcwZUAKE_C18s)cwPU#N^Fu#8ssmbO2U^bFiwy z&+Y?2hA=YO+Wzg2&|TeWQQhN51I{QG8wevw@K|kdbq256J)Eb)`039c<{XwqM}+Xc zm>nKuU!?0t$I7+tb90>%Z`$c}i(EJA)srh%htoeAb9zU`%)@oRb@PJ9KXWweXXWuI zUIC`h_({(cenpft@k+3nLNT-q>MUt31{g%@;kvp%RXQ z7j(1GzNqoZF6r~a?kQYP_VQTJCaxAPhRGDsj# z&&4@@Jn83^7k$tTS-pdFbm>^%#Y`=yTcJ?i-(R#6|G~ix3%YzsgwI5^HGjM{7_m{xWBF5>+6kT`Ij^45Sex-R z`tezOgh-ET6<@7So;@Uwq2h6Y25zwmB#ukuqffZFtP?u%$69YG1ekK z>QvXz)kN||z!Sz?!=vmmwoq{FmnjViB6vwbs+eJSj?YllQh(yB{t6bLmOS1KQ8vnH zVEB;(u@Gh>L|6w;5S0SJ+wr0cxg31Ksx*QwVR)#%LKfh^M3z(dm?AO=+;rR~?gOH< zljYD-x%`5%Q6?W)o>P(n#h`L>+R;too&MP%ax^Isf)a2`dL>`p9`b|-hQ6{qm-a^Q zbR;@BClExfvXwfn_*oWj9%_7PbmQQcp?hAxVX0T;W63>dKifDIKIpuEqW(<#Puvae z^X+D&J6&I+z`LTx_8)>>xK-YM-8$(*{C8lcQ$+5L;#-9mcUqj7H!-B0>+CkTm-bs> zJ8E0LjR8mlfRIKaQ4kRUiT?%kz?*^dpKu(6}UgTl)bjStRt|20Y!Lx?oD9k<8&_$boF*c@sKzB{#q_8m~8IB_AxP7DtO=F3voq0#_K7p*h3}{dFR8ix_JN{W^`6-aHw{V}Q)VUd_ivuoJifl( z?`JEEEz(giwm&VZW0{zeoi4X)(emPJ1=yWOyAS9rK0c5vx{Zr0`h6av|1Abh2P_H# zfRh4`0*ZSU7>2ITGn09Siq38!*wKV+O-Tc;vh_WP{v+?fa6(5d!WahOh-G4APby5L z=5ZaUa1@$H24gH6`q(!7MeBSeXE8vX_r9C8stq74m7`VTMC-rm3y(>K1MXU%V}SZ} zTg(pqv;D$$BcII@1C0vYsG8L86Hl7-1C|E!H9!-TMQhs5H~oDdq=W54uTPNO@hC>$ zlE4tnIuVM%S8*}v|H$JNDAg*Z3#{fp%^5G}rgczxsqxk!VRi{WxnB;}>ywM6&R3Ud z#f)Ey*$uLzG---&6FIRtdL@&dGO>#uDrswqcnD`hX8mlYeNg zN0t%hYhaq01R3?W^x=ju@hd<^C&% ziK&{{tVtBz>#A5yNg7y@5>mtkI>Q%?W1&x#5@1EmNuYdJQ9HoCYKDiZFSb3T)u}Ke zZGT?ub+ycDj?tWWcwb^Mn$YQfJr{(1ExNvbGW5XqpDs30xGm(rh>@YH|3KUSh1}^B z0EGY5ZhGf2ed5VA(c0*vhuw1pMNZ(_`U9zHJE=3q24H#aW`s>O6@qzQ?Vc-pHf0DJ z`1yPpGG4QN_ydRS2{YH~o0TYKwCt*Arg@;u5ZsP3Q+Fv%gAXyU)!knDuMWMj-%-?= zr^iW$%7~nKy4!sJ2O)fU%FEDR%}X}e8!CH!O~duPACShr9J!y~RAt@saR1P`*I)Gl z(0YMm9Yp@tpM{pj`?9HDk3184ab)U@)nocL>bvNU{>cnw0Ei7RqzFr)Jfs;(FQ1PN zQ2f%~Q~k9}De63JHPMUqwd)E`!bf2K{wgVHm@w<4cNQ{>*uFwDV4lLX55v|wkfeJ- zib`CXR}wb9z9Ix8U^UI*dTNTcs=GP3wRln|lIuvHJ(-Q(xQ5r<^xxk8B}2NoX{^sm**_P-)69z{f!?_y|P+2GyU3BRwRDp zbHWEyTkkBs`fyl*+{)G81;!6PRv&(qWSx)O$Z@m#8B zG#I_u&oL3SSiHUcod!*6{NI9D|6=ZMl?$l@NDSf}X^O|Js-iVSyN+qqAuDzfon9Ut z-OLx5;3#_wK3vjE0S-H6!rAlOyV86~OE{Jw=O?D7qH5fZRpCgp+pCi$N?&r~IgOE> z8CmHaB3`~5o&@{p@vx#Zsm(1ro2DiS0K{%@pN|$F9^A!WR+7(ay;=1weRH`%zIFUW&# zO=N#<`6gLrX6vw8HvUPb&9>*VsN?zOr>jZW@lO&^AYMqcp32^9#42A|oV#_A1lwnq zChj(AFJ;sL7|kTEh?ZAs%FAR5Q9~mL8|9Q`uuPdNA}_F9N(yx`ACxj7@Y}4@8$D3w zs%w1+x`mP%%DEAFDUL%8!gZj!L87SWnVd|K1HO@0gH*wvONT;4bbG}3N4Edexj6jG z%;7&O+a_v5L|xF8irj zGY5cb_!_@NVUx{IC-FdQs1%UISCQOl>VKK|W}piSYh^)iP(=EAxgRy$uy#tLr;p1F z8pT{VLQU*X+n?QW^|^EkGxgx@0;ZB;@XD6>x%0cyK!DSD*izrXf)eklKKuP zt&ml&AFUFBdud(}U5dwpWVFd5ip3=9*kZ$yB1mHs0*5!d%LZbHa@2E&&Veub@>r4w zbZ#N(H~J`L>>O$2?X3@=q(oWetplixboZI0Ma=e1t{CwYi z?cIB15}uX74fP8?DhIRnM#&PK)*lSN6f-^%P%zka<$bf7+^eAscV1Vy*}2yJSq^_f z+x-5)PgW-1_rkIEX1CoO7F%rL%4rh@x5C)Q;Cyc_OVKWB*&bkmhw@%|A%i$m$4wPi zZtVFMlLYpNFl`ME1e#UC>bY%T6%=iwOY~uX!YrKIl!zK21K66C|1S z#}Z1~1)&efL32Serrzimi9qXT;l+T0`MFCwbqTEd7mcSR-{njDuiF^eQl%DOu$QqB z2*4spy@m=<5f{A%LB!C!!Ruf+hTu1|$ug0&w;eZYOCSAX@2cTsl23#tXW@V9#l9Mo zKQktMfak@GO)UdpqL2vg6ww8|^BHv(_`WL1>Cb*!--Jb2_|XU>%D#Jh@B zPv&)Pg;V(0@mI&2Y{NCe<6GJua69al!Y^Y}U#iKaraW4-?#q^JP})<1nU9_=sofWp zrXVa!FxfJ8#djKkOz~QCY%yVQ8aoM)amJF3t%>a)orwHK-|WRQY85(miH#Rr)Xsw< zbl@Yw1T{cE!mx@u`aI3Ak{SiNP4^#S|TWubkZ5bSotJ)o5>BD^c zNww9MWmo^}RF(anrY&Ojz~);@7d}|(6)Nfb^_gk7be$q&KTK9%&6K_j6f72kl59g& zq_6=RkCSu>bk`JqaHFVsjDyo=dazR11qGXLk{`l2s5Oq9@y{B#HO2 z!_!BMgl`(gW*SAxnQf$5d@^3ex`UMA@iG1q_8dRWZz9FP`i%bdCUrk%JTdt=K+VQH zVUA#@s%z76;X&!85DqsNE@(f@hQLlrR1k)#p~s-Zhe;DziNST_Lew*sBVe}B63w;F z?Fm2#9_;D}=mRqC>bGxr{Ev3xFXZal1XF!U7Z1U9efJ49L4emOE4N$|x7PND3cCaj z{8KF2h+u^ZAPdB*+FOHLl{f0gUXZ*1Re>T$;2I|g#(9+CMU@8^!hIs%gvdy%2;R4J z&w?Lk_v>~noh)>JzN3J&^i#st`09gybUjZL5&FD((`)-KMPzHt9xcXM(&a>H)&IFZn|Lc>y|G=|5S*O>-*zoum zj&j(M{x^%B%u~L)4I!H>ao>Ad1^s908g3MX^{b3FLgvr7Xu2tfH3!A0`hkX^0>{;w z{vn?N!?ci)p=&xsXaG@DQ`&F1Au2iK1y0fs$m?lRCoV!j0$WLV>|h3T#b@>D1%fKo zU)`(>NaPLsn{5dDz$BuOf}^t zKTwa>^j%XqEa7U8K;ITe2(_S2KaSv6xrOoaiKgea8?96 zd#Pp9^h@NLQ0KWFb=7A15?)SIVy2ruKQe`ETz45BmQj=SJ&T`$MWdNl@BnPr!C~rH z0x{%L0aob4<$=IS!xFeAp~`F*E@v#}L`d$;x~W|$`5TjCC=>fzBLR#`5w+Ka8}3lj zWD4abJKLFBC-DMhX{fU~jH=rGBsWf>YEK(E6BU` zZ+McwkQ3yHNPJpy@eneg@?vZMRyi|duDP@BZ6nbiSq*}DSJOFuK!P85(GhF4=z?YP zZRM!wU~?5@O<5Uepn#v$;-uc7KwD4tYG$g+iGwA-vo7SV3kqEo51N zJ!HAW@nATXrV*zZAK3;i1?^^-Vhfa6Nr4hB3Op`Lx^~Bw5r5<+!D>E zCC9=mVWyp+X*ML!u1coZ@(}B(pd3!)3>QivN);Fb{H!3TUImBXG))R(X+$?bfocUV zcyP+Me&166ae@qzdG}LYN8+*S7sXGs8Xs+LF!xfts}_=8r#!1=8{%!WX0ElPr) z_^;r(P$q=vV;qExmN(L#4BzrCpP4mIb*av^8G2gX3Jx&K^f4g=)H(au6Yx;ta-!`J zg-~r{osgZ1#YI~g_vhh(i20;b-6v0K-}tvfl-_WT+SvMG!9!-mU=k2PRVee@sSF6jkwlNKiALKyA(sHZ!-}3++ zO#am4G#Kl2d$mvPmc^l4(re|;HluCG_%L%x%3GT@TrDO#F1ot~N6ksj1deAVi6>eG=(CmkFzt#HeWhM5 zhhm7*LZtG88$$`(1CbEl%QA;>S92i;By~~P&fZgoUQ>}gLQ~|Hf6!a3`aAlM* zkUY#KdIYESegzZspRZ$tQ9SltqSmXnez%_X@mA3@v~`8gs)R~mJD-aHbjOAL7^g0vq+W} z8O+)d=)nuR(g1cKpF6gpa-4WzBx;FU*d{~TrE4YQk(BDnXSNQ{Slc9{82csf+$(wY zZ#EwOTl;_$%)9sxoCW#6zKd}ye@CpA(%OP5*S;`|M+OQ%mGcJXY?3U;K*BOmv#`y%UBU;MM;`=V}8Rx1QqsC`mfeyR}zcCY^ zW2b+3BKDbFE|+L_da58gf{i^J(Q)3MVihgHd+C)YMv);wc)joiS5XS~li7Sci5n&;6BdQg#bP^PhM)QIF-j zz*n)d%J9Qr1gib}v(Y@l(TgqelLsg5d4}vaJ55abTu=fln@nE^R2L&{@FL#Zl#&s2 zOXqwODFKywc}u6ECMGTXO<*a?pQ^8YZZu3}kHWzS7A$}QHb=Twyi9H9LB*=;Z??`n z;gppf4}9~?OUkkE=?CKlRjZSqT9Rlg5{C>J^5&P(Pn} z$t@0P+jI7O`E++l7~gPDI(K&*j$C?Ce&v|>9-yp_Rlj_Y0m|TAUm}19QwWEZ)sOxPh@O$i)7_H>38M(P7<$%JSf@whfQ2$#nys_ZD0SdGyVT0Nkkk4yxbEPcQLAIU37rx$74>; z1p#^vllVtt!~#u0`@jOEh@jM{tHk-yL^GiHpbQi~o(#7FrG@Ovl9f9#EIUG)2^X!i zNQTgDABr*b%i|SO2}3jA4fys?3mM(skKHmUB^gg1n;t)yP}Ix^9}YhXepBjeh^V9+ z)4O-y+1B$pSk_lt>PzZMgi78uwEpnu(dn_yshc|mS4zKBge+F*m@_U zf{Q=O#yh+zYc}?^s7+M>C0dq_uNGQ!hYwixM6- z@ySNn7orm1_uH~1S|&A8G|XAP%}9Axe|Sy@#Xso2OSjFt?z3lQ%*GHj-$b!+ZiiOq z+XPn$<{e!?H zd~rZTVDVBLu|aZYNtGMww4u5BOZ5Z@kg98C24?XYa}aHSwbKF-7VKITT%%i1A|e>* zDFCXk_a|kgCT2iUeKyo2pFAAq+-O4P1Wgz{jqe+hjk6Bn!hpGhiK_Qb-)0JyZ3L$U zbs|(Tp=4fCFT~j6U)Ykr7wa@caIwxf&X!T-+Sx+Qwb7>n1+zJdc!1vMrhp`Q7W`6B z6c-br?C+w{x|kUId|p6hs-`TCov#(oQb2fh<;6E-ut=W(8AS%TkN)P@T8~;hu0FHz z^2vOrR89cwIU*=4D$M<6-nE8DrjW?ZgH;b7wO~JDw<>Vb*pL7f8=-X@n-qI8XsvR= z+fjPh(O&X${po9ApQB%T>U&&n|FGKcqu(=C+FjA;VgO_h{#6+hx2~>u(kQ`2s(-$oPUmGxB|robBmih0 zuclT`Pk$e^UP()(_s!mv{R)%9cZ<#_@a76lbhCh6S17zf>>>+az%3}VsVRA=;lb_Nd$sg|dHS@Mh-<}zPP^;|K9yvHk;Wn4W!oCq+{ z>bp$#b(ene`}Z@GC-g+K%L%W=lwcDfu4Y-(1hWzy_URhZ!x%{6h-N@ti@o5HT%8cWI3!xR4MyZc*)uLc&ArV5An3O7wWULr( zAbVNH8Ca9nD1||Ehrqzh(KI=ub?O?Q6>DtJ_TvPN&P?Y8(c^y7-4BQ}pO6;N_EE`Pf-@A&fGj9%ol^RBL~>%IAR z&%7^Ry_L!#Ej6sfB?Q^`ntV?i0j5#-jSw)q9)XUbP(y%o2VeDps4f?(iC)C=z_Wx1PgAJFFt3S@|^d4*Pq-!GDgP8 znD@F?nQKmFs0IW8p@{;-7@$R4;ONX66j}HkudjJxxvFc6)_kKC1Y-H7Sx_wk2tACE z#*yAUOPuKl`7*?kcV#>TLsvtS`08B}6~JMcJz`TpqM|8>Fs ziE^P%yoxo|)K2iIRdWpE4-Y*->^YCSwEDNCG$YYJmvN6ekJBo?oN;?gGz^QVfRzyxy znRnXz19!Yb4&M)wXZ4vys&8S#kA#|@S-E!@wZ6%s^cX#IY97~=vI2E1Hc+>1oRNY1MS7t; z-jWr`8ZVK*na82q%ipu&(W){KI9ckst}c8Sk^Q1;;~1fF5Vy7QC_djD0y6EQ&m^gV zL_w*2kjp>2vs|rt8;_1u^zI#^r8U47P0IpI{ z{D4a7Z9`5)#RZ+`&-rbl56oLk>59Pmlxroul+SERx};bd9EIGz{5;QcMZ8A;f~F0h z3QJ!rv_x$uu=n^J<%>_Y-^9dM-0Dl`%e7Y@oY#NY+wX#XT^>smYM>yK~*Hz@-{_b4zD_`p&ZvGp{u$!?}2+h&mEa33)s(A_AB z637|INpf(&-=CgE8Qs2dCHHVO0Fk{Wgd1Krm!#3~1(p64GsUEJ;kK1@)rF>*-@I{` zZJCB5J+n$@eZkrZannVk2{9ov{LuC5g?58}0mSyoFqHo}8hlkucJFh@rOaVJ8UWY@ zXrjq(pU@P7S(1Qm%WX5(MdNnYbq=yH+FC79Q_Bo!6+fQ02$^IV$&#GGE>0G!t`m;4(zcOTrG+v>aQPlwfQVkVx~DJy7)Q zqPNJpYBg(#jlqdyrDHq2!kP;IB5w9|b>~W;ti~}^JuzmY;#G(U<|%M%F z{y?rHgcs$`7}*vFYtqt}3+>OwB#FF|G14I3&(X@LHhdk}#ba9oOmvXiPWIwZ=eHzi59!cIw8*=L@?M0X7066+4z==5-b;IZH*uzkHru?dkn?`Q(-B zq3<;&rm%BeIZ_etTcl4?_R_$I>hFjr=Uk@UmSt$P=|I zSO&A@G1nGaq`g#~!|(|%qHtz!$wVYRnLZ@7PQ(x)n7#}t?u+Zaus5&($s~PZYSxe* zwHIx5q`BX*M?MafJ)|k;VO@u`*oo>w0gqS7RRVl&ewRaC@2!!>rvoMH@+=?k?cL&` zZtwBl_ZESgVPEJ1_->&$-%0ap=REofZ}S@jnDa#=_hAV4X#A5VLV$HH;tCy#(-zQ5 z5s}kq&Pi@EQaT|`=~o_1HGU;tfLB;@uL#eRnND-KPJTB`C}>Np;B$iY&I6oA2a?Jf zwu1d3`g|2g%lK{mvYcPj6>UEx98>N*_h+3oB&bRcsHBNUc$6JAyd?5{Sx|uC(C6j0 z>~+v4-h75pd}`)AMU;@^Mas@qrO)7-8Mv(YN{7g|X}Lm%UijCdoLR3tXe-vd_loPb za3VwUYL%R@x3<|b6&R_3kiVGNE6B04ZRU;;@y`rmjEU78Vw(hUe!m+qqJt|A4qh*5 z?(>ePrj4nd0^ef#B0M3`ftz4!@92;*4afh>ar$5Ca<~sXeF&xzZ{Vd_ow{5II9t?= z9v7iot$gY+Lwb+D4zvM_!@sf!=nd{NW~Y$G-#!>3OCFp&GGd}d(fuY)OB zD3eWPk;S}?1eedOkV^rD;D<2gac{q4s!Ch1fohz zBl7aiR)VRhHZZ=wvNzXZhOq>u7Ps!3_KI?ROw8BE;+E;ky?5|z^QuZh6wyXP zR|fv6AC#Y2|Bc&Z8-CVSyuCCw3ZRncX?PWaBH?wsHFOA3I*l&Wfa4TxkggAzXkemplgQMulSbiIgm2pkU8+@ zjr?;u{+D9#pCIRQiPx6vpdY;)W59}AE~NjFL(k?n&{){c5y)QUjPJ_=LeU(<+6iyZ z9%#W4hbpl&um<*AM-pm09l$gh zazVH;<8douPW?$7fKnO!6dfs=hH$(=p7!o#O=?ibfg-o~37D@mq8Y1qh}_uC$d&H9 zN|6IhT%-Z{X$qS?4a(6k0r+xwuU9WP2@Ut&Xqx6ROO1Xg7Ad5>1RMuyWrZA6WLF*@ z3Xr^o&`tk*?Hw)Mf9PtO{}=@@BJyNj`dI+eV1qH57C;Bq(qNQugMCm?I<{*F)7A(H z^jfJ{12EMSRhTo#Fmk(i{p}#*8l_KF9c?7HTxfd>^KVVN7f1SQvc^*LpOT!Erx3R` z9R7-Hes^5HN2A!>`1;;4iMQal$3wdJlCA~mmV{0Y{{x}l^Stt9Zcq8-XI)NDNz^pq zA#k%J<&yF%K~GT-l!;d)b{TC{%p_JFZGrIyq|YlwJqcs$-rBYX<9K<{L+i;(vq-6i z%x7l0g$e?IL%Xp(9`V>3D>7CItr{lpJ-WhCZD&E$8N4^G_u05Yd|jMmxxa+oFwUxo z5yzD>Qih8N9Gf#tHBPziuk=G=cBnkSrs2|Z6an&+sJ!w&S|k6J%>98}mIp7$h3P#3 zM>|Y%S37bdExG8)e+;ZP-p8p)`F20l*yN>n3~4%XNz@c}a4y&ABFSc14Iv>(R0mrD z)HO@=0*GU@MRRdheaB^dOPb@Y~NxF^I`{e8oC$T=yq_w7)eR%C7d(x|Ks6Jk#n5VE_SQ0pr#t zkq{`Sc6vWQmvXY8ETR!bK0Nq;X(zVB#boHv;AC=)4pvw}_92 zi_}{@wc$F_P$s8<6K(4PVsSG4m){dI3_ zrckj|_>GEquql__H6UE=($$)K|3m{V$)h`7KpFB%(I%31MQ;HtCN?}66wh#+rK?sY zAwoE8bZUI%IBv5$qCP^_*p#im&?&wXVTRs}_g|^GYG!t+{jbg0f!)&fClY^eMAR5K z=QaCq68~yasXV8DoB#I1ijzoF7A zp@uW2M@aFN@x8cJgRZ<{5mH&#<`p|d8F3Yy@?=lWg_mARQ3Fk67`l5=*}8`rcORH- z-t>tWd6PbNqm;6G(A$J77{#&6{#b3HFk6%E{5|IUn^ow$o$nFIuI!yJ8w5b~vhQpp zgg)f7dhPZj56ZR1yZ%KPPG9~n#QlpdXMKbRxoJb|+;fbbcsLFmlGrEuT*V-y`A3{o zNnOfAjc5RkOPw;#tI-W4qtTTD#ga!i0@tMF=w!-w@Qbh~23 zZ?XNL)e4AaaK$M`fCjkzz>P|qNPcMXhnWv!HEMHZWl~*2rVjW$Evx-d5#7m0e$=0Q zC;rlWE_^C3D;^=trB3O(uLaH?o0$uQ{Ph2k9G3@0GGEpY^`x`X#u><`v2(KniQ|BB zs=7}wVgV|kHQ64^3L7*^V>@)kS*wWEgS=N*OM`GTJmx3L0Rc_0zneP2s&4W?kc$<; zWYqhakP!e{DS4Pvac|-A6ZPzcNJ0|g*J~lJ!;P8SLBXf1BtL0l=FKhkn%b`SefUsL z9UH54`<$Et?KBCVdQlQfevx35DvnOku~&HWHeUfk_0wGg8|Z9gXtk!QF@1s<$2A%W(Bx$x41_^?yK2vFSB11%gC>bHr>HApX<;xdJ$-yUxs&_*}rmc{*$%q<4Zl)1E=nP z+w}Ndzr1un|G%fLf1=!-3IJdwglSXkOy5i&bm=~2>7Mg9$@m6|O4pO}<#gUu2JlwD z?D%-!{c3^zms< zIseig{AwT_5RG@L;xNRxuiX*xgQ~}O4Q}pzJg8)^9*uH5Kx#%AK5xv!usgCoV2l8$ zJQEvF`~XTxLCbSZ=olL2WiK6Bp4AOG8oM-xr7gx4!JDCX;UJAvI}5_DfE2sd51b0H6R$?tCbXtz=jp79|Rl9=ylEd)x*b#k928BOmxD zul^w6K`WqokA?QP**A%~(&F$rE5wCzCOh89<;2OL`lR8L7Y}~*gbJ%@#S4OCPoMYJ zu9U&%QWDmGAgNBlUZ{*4f+zMhRl3X0mEN;^-zJ~tSG_jLP|heEn%{0r^xi*yHCo`y z#zVI~!@aFTT~V!#u|08PeR-4iruMX%x(d3VLG4#Oz=~X9FO4L9W+-MLblo`gnL=?S zn`l^drUH;qP(Q_n8>-y*{4KymgZ`4CzJNB?62eA*Ke8z}+0|6desWvE3O=cPE}WQ` zXnFU&JQKcblJ3=j>lu6gMveAa)}ff@axSW=*nDtE)5_|!P}$7jr5&fWva>tak=g&V zZ2bed#0mgnC(?4N_<$8L0jd%oxt}X~gG94Bq}AggR^9#D`#S)X%WeR2C)X>Sq4tL^ zN&||UNu#At0ddYP8YgPcU_6Mo!e8Y47T11R=G6A$R8qo)6CJrjD0N6cDxa^ondmKb0DszRQ; z522t+?6B!x0`60s-%LAK_9EaPo;K$`R*`O;PK`c z4bZF~HhNX78{UK^D(&tTnAonvnSJ~RM6v;TVO@MiQJr#fwSj0QM?W;s$Vbao412tX z>10Hfgi7mO=JH5e72^2*v4%4V#j3PJ75wBB)Py^<>B?2L{RPA0B`o3*8%m$1B5OrJ zVV9tar&{zhz60ir&*+^N&r6soZny|+qvtgZ0}dH=dt z$&r4r|6#vIfiHd%8fT{j4Ys3~=BlJ3W9sup~&-Gtb0neW!D_zjCwQ%Z#OR5VDpLOpPhT3Sopvsww zWgpU5-b2|p1$J(wt;-H~e8c7AU%OVwi`hc@(hhTJf6)vP1_|0?{6!kU#<~XVmlX9& zQN*7TUo*1lf0tCAIr90-hPLV$r04$CY7|VA#cRxAp!cv{jdGSkgj<%*5fpc9SoHJE) zLlT@{Rh>M8f4l4Rn~C;zUlx?^O{eM}%-gT}+wo1P&P815-ytJ&ZFqoYmzT83_VMJI z(~iAt;ccJZ-b{DG!J!vD{(qf{_o_pPP+?Gn3SApwG~z8EX_^7MuRBFdtp1fFRGF~) zY^*72b}g;hp|_WI!ekL8&!RZln;UC8f(rt4IrfoSB(F$G5M`w5paxQ&+{&&XC2-+P z_P9wj!ea>7rvxVopuHL-w%wop6}xls*521kys~xuzvJAWD0g<1*9m@OIn#T9X?MP= zA&loUB3|)F>Py@34U)I3zg~~$8F-yxQqw$FmQLW>iW|#OC{i%mIEb9JCLoLkUMyI> z!Uka;HnoilgB|Gn(_~hF@>n>9?VITppmW2vewJr|ks^`1d&g;LDI;nZ?@zfdka+&c z@e^wc7*RQBKfbh7REEytIw-sP3-Gr$p-oetp9uTiZ!}{maFDfBKYYz0q&nACz}jI% zKX5JcPF$YUU~ug?ebRosBtJvCt_lXQH)f9q z5z5I0Ysonuw6y_Fct=iR&1$I?Z3fQ}%3e(WCkpwCd*%ahU@dcJm|sVpsb+f~kN0^e zkf~H12i7qV^KfLEJ)@(LTs;Me^uM9ACgGT;ny2k;#c}J!sr05Wus`~3D%%AiVsjBy z=^rbbF7E>|_tTIT^RE$rZg5vFVQ!>RfWBa(6u) z@iXZkhS~<@%I}L>!g}h^>0scB?qp`0x<$pTcn&1r;LH>2zw#y;8(*kBO=ex!#B_^^ zy;|GGidbv5YHx&XndPe0=s|N&hUpDOB7^k=a+j|Rk#l;9G<^{_+i>!A5R>DcE6;n)% zJj_kc#`!zX1L4wHWl@y9Eps%(+VVelS^q$8W|ueB?_$neR@W&%=hcvPs>neU`Y-?A z)P2aBZr-jw;3}!U9xJz0!YbyJg2_2XbXiJjviSp2R=82Y0ZbM!Q3PoepO6zMoyFCE zITyb<<${a3gI#?+AywxV^ildoHN!Sq_0nu*%KOp@>MtFqgPJ^<;W2$~o|T5Mz!EFR z-`stF@>!D;uJgLfvLu_+zegh;plT2Tm1Cj?E@?Swv%i69tC!x{8u2OZ`IkZ;jke|P zJ>7gqQ4|g6*D7dD{z-+lo_lo|1g-%c{Icwh)Q)cT6EM(k8(!^2!I`d?No<9n5oQV4 zI79d#X-nbBRr2Tr7|(@urt}57wNk|v3n}86T3G>J5_zYGfSb#P&;G7=u}#{?dQ$Wh zrb3l)NjvP*4b9V7i1|ddA04;>co4Cqf7 zpl2A(%RSwiu`waUOExJJKTCh|N!VA0FH$bMaJK7Z zJl=xvrlhV(*}~_?!8VVH=w-poW&VjOk)GU0rAQ=yZi>Y=TQ4nkP`5Fb-Q-0cF7U1u z^}sKS>z3NK($eOoAg25Pw2xxck%N7ydh_{a173 zKOg=;?x7(s%6T(+F6aB2QyC35X9KwC3X(12Aw^(ch7ad;C_t3=^>cmvFn~|o+fqTC zUn`OHkr>IEIgUMR-)~~Ge!CazC*N~K@Q&scG4t=N?EJo}^uk}~y`7GE{{kerbCW-*tHAMt5z*NC#dxxldNQyc;}7YbWLFJjz#FS z%!uDpMr0FtfW6^qH8d-d8$_#W_aCErZ81XwC%l`cBd#b1i@35zHT^b}JY8Kw zx0wDvBra5V2FzO%KuI?l(rLY@9&n~3m@ym~JvxJd`?qSPoxXZ!`?X3(>mBc!>*{t#&ZRdx&KvL=zRX{+ zydLt)k!M<8q2EWvol&}lFCD)FPY>IUX{Yotj zy1mBoHg2trM7vuJW#!V7a4DVGKy9yV?*^F+NXs3E*U8FAsT%y_0Ih}TxDS#R!Z(Nb z?GJcVyyFZFTFJ`%w4Hdtf19BDYlr_H$xT1B>RFlUYt0ifcgwVlukmE~pQ)Rh?>&4x z^X1_@9s?p_&C&})U9l#z1rBUs&VH3tU#?PZEge%Z)__ndBl-JJ_=_s1rCGF5P)u9> z@S>Dlm`RK#FZn}#Bfi7G?2m*=jG0If@n&6~cxB>H#`c8U7>aC`wz&DGgZpvyMPHf9Ft?VPgrUdWtSiH{XNp@T67$|x zxx8+)3yiz#J2nacA`~Qih9ovoD)ldj zG!m$AoS!l}LI5e9+x(7gD99%pif$&ut1?=&y&~ILZYMD10;}^nlr;{_2%dqfbZqJM8sZF_gU_!c|npxnp7^uGH(;?VZ}SjkAg&G001fgbi$uwbkp_|;BZ zj|a1_58wZpJxDj}-TXdVU138OW-c-NK@((Gv z_CkCBPtZ`^ewV~VJS4?o{;13Ga=9x7aM}zJN};Szq%59NiV85^xcvkr1h!;57jcD@ zQzdSo+4au7AzHUzc=c6;^_Hh>?9?%*eq`$0>Yd?hxZb(mGH>N9(-S9aVHVi>v9rrx zSawl%x-9;zcLwX#<_{%{TFBFsf`jrUnR%>F*BCMXNK-6NPEQ(RVP5>$o4LaQMIJ(X z;Gi)DRb83oZ>>T>Dh}#?U_qn_Mt#6CNeQKD@))`Q;m#E#w65NN7#tTSSXhs6e87v zCXh#$Af7ee+P zSv(Qc4b&J+w;Nqq{9JM?IA~vj`rR83kBAQ+^Pe+e-0{-??8u)KWwK*a$V$zxH%Ryg z>H}^dzW^)!B~?}j{G~Uqt`Sn7gAKIJeI6jCa{HBu^9vO#J$KEfG_+#6ln(Q}AJhFD zQ*Mg6ej523Mo#dT-vpj0YI5~W+8xF*L}uh=tQ_PH1vHJOMjjFr?g}Ng5NE8Gah?Eg zoGbsY2e^159a~xis2R_QeuG1l8lasVjK!*9-i5Y=Ho+ox1FP>J5ri5Q73Bx<#mjlo zYx1a{Y4sg<`vD2{dwWvD|IY>c2Xfc6c)8pSro%EqyC>EwfE{@}&S96rykYQ^4*a7O z{EnwC^XK%8D*Bro?T|=0ijBs5GI7o%%`VjGw}$0G>*X#Y=as??OXfAaTJ<6|&WGHr zZU55xw#VdmBDC4;3&aqRSPKig>IC+fPEO1PDk46(WqlD56Yg@if>tINpT{WG+T31o zl72?*dve95!(RDMRX%~dCR=-J%~-+(0JnwhlTg_W(3qO>p;_06$u zeby7pOzO~wzLCfc`|-9Qoy`)+s_p^`1*Z^=#$n5}vJu`{U69X641iYp_DXb^eS&uY0J9FE^+ePoWJJmr6GmznvT;cV zs_lX*42|QGFj_wke`!EX5mKkVEAgY25=ym-dJ$V4zLq=T)fT)(Y)A3^Ka7qE#;mRF zY92SO2sll;f5rBQ#WP@1{h7-r4~Y&1^TCuD=E^r?Am4h|gDK_ySqjgP%q5eO>xPsY zq7&+?(sB|PFLjD=ZDUhakT+agMo2-#^8C;NVEc1FMjB>l`pk?={`s|QA_Wi!-`>Rs zmU5ttj>-XHbxgTQP21vW1ayTh}05PE8y;?4q;bS{(2M!K%;SFmUyv6 z-A6sHQ!t>wX)ytzAWu;DU)T_lhXuD3<5`1O669W!;SLdPShV5jn;%S#Y4`u5jQ9gN zvEw}1)>*SzHD}9+3toQ~yz)e$6y8puP8<{YFQX9~fLsz%f{$pu(?G?$vDit`RSV^- z_b7y?86gBlT6$aqqFH(2Kt|G#L%_2d5mhJLjVJQmO6}hsTllAo<+u3WJl`Nz9k=j9 zVpYieYH@GzD#GN2)X$A}b-fSQ-E5)`r{|csKOYo=Cp|lyYaifAkca1O3>~_kv$CD| z5*M=1W&F5w`#ZO1;nb5^w3 z*Ev!_Hxt#a&;momY?Q^o>c0D2Jm9Dx#XuB4pN4@m13!@WSEZfhb@_}v{TziWCz`%= zpLt%0)D>%hdWvH2ltv|89=N~qhI_02yK!1P_K_TL`f%o~j=>S0sZ*udwrjhgFTA9& zg&${nxPkgk<|(KN)wm{rES()X>ULcCoN7<1LZ|BQ7bX$stpij%L+QO2jy~hrDgmiJ zfrovj&|cj?z05VkJaf+WaN=JLSOiK*p9^D7kP_Aj(j_SnkqwDP4pW1_=+>4YAk zHMSnk!`o3wlJ;b^m+e31=0nP1#`t)yJl`UWIYic?vqR-kJzHvm%aj6@B?^tLaW2<3z@XOKmrAtVgJSIufz}D=z!- z)9URnS69k%LV`UOpBRc%8a}mzLu*HWc91+i97aDsmtHJSpW*{Xny&%iYl8SdgPwyA zlosVedpln)f84pLdqi*TEkQaiK@ftt=>fdM}0 zptu1WO#u!SBx83cxhN3`uIyAbOcU?9u!evkU_@^ch%d{Kn;a2?#t|NN z6l1b1strIsB0-Vcmv6?)ni z2(h%=nxg?pQBMVhq5MoIh0&AUQ-(HG;X1qfm{ugLQG;6o-rPFRZt;eXuv)&HO3qO$ zuk5Tf#tXDg-1Rcm?rQfJf7z>|r#ZQm5z5BE?o|*^dAOP`fH0RenD&WHFFd{6J}vpV z9zEi&uySheWrW#B*Ry-S6|dDC`P<~&cMRr{3ht*IR&Ekk-i)he6!x3pUSJCyj$^W- z(1bO?j(rAE2$4& z9|$cAuJ`>C5kciktn>i0@eE4}X*NDni`2%cY>5XS5+@&P4K~HSR|1(i2$?DAjQ|9f zLd(1V`b0ST2W?Mx{(ZXtC(4cekt9Jf?HSRQn=!pSNfP}Wv?Ilqw^JBrl;Pd|F?cJB zcdg2Z@c5WnakRC~MQ++l2r-K2pCv|@a|EL$yd3zy*9^@<1c2hSHJ8|#B~_r9SOV(3 zWr`v0a#yZbEeH4D6GBU2P4l2pUG-UvwcyiS=3LB*@B!D;W;GPiiw!H0T6x#y1@F{6 z>3uJ;vQzO3U2f*2*|I#Hc0{Z(NINO0@tN~TU!ixB`NiT0ob8pV#;3A9*9geE45yfy zBQYA@JXLi;YO8N*khGX@&{9jQSyCLTL`=b}o0N_mPz)>>IpaAKkYKbX3+4xpDOZx_ zn_u@a1d7vy`6)Dop+uVD?6lvez<#mHzPyXgby&X%7(xjMxGB_{_5Hpay$_N`T~?%F zV*478t?y_VbyLjb?TECTkB@Kn0B|z7LRp*0neHdj^#y}X%7U|5nmuZ4h7&B~y>Uvm z8E4tiZ2;KI;Tj!vTIi9xErFU?d>-@!azs5~t~f#^B8O4Ez&>gn6)RB6@0Ej|(RzBW z#>uc!R83MNde<`H^yOEr>*!oxPHtKL8Kd%qj!}UJ<`+b+A8$HndJo}D<`YS&cl9S< zmC8I6yPx8}d1ixp zhs-zK!{3E}zMVJe9bGlwm}-3cx|C?Gu_GP{G$pBjKO)*MUr!Rf%AcbsBb!sDDR&&S zqvexWS#5ka4`t!c+(Amu|7i4-M5btICvpZ%W=bKFcTR{a#9DEUPv0qgEKF3VAWxE# z(cTtd6JdQJ%^2f4ecx%H%BAQj;C+SrxRHdFsTGaJf_KX82;wUax5y$c@@rW{% zKQi3jZRPoje;-mojr@~4c-Bh|I}v<}iiS7aYhzgp{PyCN$cM`FxHO6O*L}!@v?l^- zUEkpVqr8w{rDxFrW3UH!4KeSE0e6t^leK+zUPB4SwbD9FUtf>mB%g7mwYKDOWLc_V zETfW(#Q_EmV;gXQI1kYzoW^-)3jcgdwtk_igX*CU9YfEGO$y<+llOw0vrWo;=U;+3 z!&kTgn`16VB&l3QKDJEtRkL}E;z#NQ_d+zw;GSWlBM;@LOmi?vCtPu3t)WpO2TLVS z)~Q}7oIG}>PP*giYR;gH#)JJo(v71i`uFV<6CFD}PqOwlOo&6TWn7BSsy`-p$`zv{ zPe<%6bza_RF&X?i;DPe@`Ul}r8tB3K;9HS!rlrU)AjiWdC$_$Jo^~!{E&OxLcVDR7 zC_)pn3Kv>sD#Xrng^WM^(}U<%ADfPQ%Th%3R)KJoW1^NaoBx;-V~`dL7WF zr^fR-!NvMw8V9U}JTCX3|8#`n-o&e`0uYv9EbUp#pK+edB(vhi_P;nEM`H$Q zj()D{qiNXUgs`oJ*% z&3V&iMiH;{T(;Z25-66m9yvCjXM?yE?10lc5H-6~HTJA+IN;#gO$T30o5ITToj1lF z1sASTZ)2i!h55nfp0$=FEuYH=o4R@FWi!a%d+F(u!^6oZO}8EwZcKQhu!)07DG5b2 z-eylgs#dp&S}65t0m`8oguf}#+*FE_Ox!I{McHAPNQu>gVP@X4QM&Q9#+bMj&PY_Td%xdPnWD+~HW)@-|7)CEPE ztBrO}j+!RSw5E4`rs34Je{6O7KW?ud<3v2Rd3cw3{bR^giov_zzQNzfy=%b40Smi2 z@wVElm20K8uxIL~&YRL4P$;Y6VVrN=AbjAh`Vnkwmd`AqKzP8GhJCztdLrqO!`UE{ z$)EnYvU?Nj6V*3b_L=a5>f*+v(Mi`I&7lfqOWLP zuK#dLX-!p1=)!d)d1a)>jr^GRwr3|!9=LO2*L!n^x~#vM|LWjV9auc==Y8l=xc18X z(XXbfUgW6R`=Q_O1Z1bMCMzq>j~oLE=jAla4=ULKkLJ!nm`6Xq z-+6M(@|&1~w*xT+M=qbzz7HfONs#dSh?`qlVGf4|wsGQGGos?sRH;Z=2KjBpmzi^N zTBWV+9Dh@Dx_ycQ9QTXNLxVZH8gl=&<0N&$K>%99pTIJ`*$1-xh zH?kba0tiD26(wUf+(1zpYu@De@{EEY^%`&O3F1&fJDlH9?g>r}sYy(2Q^_SCzzclc z%DDOTCpDg&lnqIBP(m98&cfW|o7H|8! z$`6QYa^#=1*mX*?!W<@<;mTu;TgES)>(N_0eZK!~WeDR(+eWBe`OLG+d9bwWq*dnI zhoLSt0bks++y1gYryg!we_j*dR*&&SW2=CeCEcR3FNJFE`z)(5={p6p?PX=KkZ&7f zmj|TeushBHxmoyT{|Ml&@WAKblJxph5#fs=1Ng{HI6DzsUu$(c9nhREMj~^&MvZze zD_A`Y-ag8a$NK>8WL3Lx^Rd*1hWo`H&tE0s!a3ybECKLsta&Y}AfhEh0<*DO(p>FE zGCy#+WN+_)#s8Ly_*akQFt2)8v$D@Uz+^=aV3$wr4@Mu-w)@aI)k80+?SFZfCurF7 zGOo@yX{W{sev=v|au|;B&Z9zYC5v!I4x)Lm&XFGGtR`!JvxS2n$txm?Npteked@dJ zi;~zjw+YXUSctqfCT^A+o!GT_$hdp8TwyZzihE;5*KFnSv--J;T5v1oSZaI5siaX+ z7rP}}Y@D{(^r6H43b7Af3}nlA3M|>5ud{lxU+?XyJN)}QpT0-u6o=F``|>%j+Oq(F zau7&Vz=e1se8qkwfr?tDxNAE`(pg%pNN*NBrXw!}5XUypJS+}*;rA7s@Qyi0vdRuq zoVgZ$wIfX(-XZNRFfBz|0V`RYeCjY@kKc?oO?9aD|6d zy0S=0ElxlQoaJjIo}?=97Qpp#6v^;;eq|v$-qS42oVcD$3f3hyDH79!NnuPf0!JLX zM|SojnMsg>9f|GwM7RLa3`8>WAvws&C9p-}kItnTjtFY?`y{d0;zDy~a0&sS9@$sV zhTyum@q&O%+EGi3E@rr+yWS~(p339i@8ZmEcfcGzu^hFy@qg{G{)aroxrYGZz7#75 zQJ(G+djLBfY2lvNtzjl)@FET_xt206AkTAC>g7kv;0FyrE*2*1mIAOX+HnuuGTj5f z`|W9hrIP4`+zSPAOMVFYgV~gK^}RYYH*3(U5+df- ze4@EN)A+nxc&A$lV$d>6g1TghusU6Md2+{dC z0N$Bv?0d7fw|CtJmi!K|ped2|g5bbUlao-y40h-=K3VD! zEwAXdgNd=6ht|WokV6pu1PIU>3V#?cP;G&&0UX4sAKLngNn1n3-BG){U&hF+N|sB6 z4q^0ePE0AO&A_VF?vM-AaL(^@bACrssx3Fv!fp5W;AWhI6G4WFhtpK8hlmAv_U11# zqdu3tT^97w`tuAJXtflC_nKw!Wo2t0Z>?J zGY^m59EK9{eDT-((C?%S*dnqk?)fdDE+8R36JiFIgQwjUM?nw*LBy8!K>$S@&$NbU z?3UICzAw4TDjXmYieVBuerc)>)S`I)U{6lM)o8(&9t@r`lCkRHOfvyh5sa_0oCUGH zTr^C3`0ODj@6X!XA+zHe|CXxGKdLz%r4wRb3UdMeiVjW?&QzI}xAP%{c~5w5_xE>(>g2Parl~&Q$OQol*jB1X`rIBA4{;C0g-cuc&YsOY37Pmc}fDen6Tz&TKV1mZC)>~^8wF|9#0&N%j?R|Z#u90~g z>u*w!4n#701e)$XzjQoN9uYRVVmbu1I+)cfCM2yz;4-CgmFlqwlph>Nk8c}0R^^}o zsqPb}$XFc25q#0R9P6N?aptPS7Y>=ul8yUjufaedoFXn?p#yS*h-YyO&ek)^ap`uoPBA@#d=N;@t|R=z({ zwcW2_X1DX{-T7aVu5YI6Fz`%V3%Ka>HQYsLLH(^F0W)0N390#iaQDv_{Csw;N3Yng zSnBhuqJKabt|W$Bhjneop7~YCI$Tt4DUHs;l!Qt(M1^iNT)9Wv*d6YZUIwPlq7FTV z;lt3=!7&4y85dv)aFe?)LQMhaRX$+luVLD8;A!A zSqFW=)m1E-Rf~y&bf5@5AJoT3&U8@}tDK#U2FSB*+)+(F02K4F*xzR);1ya_#?MK? zzP49uaZ8=)(JneiJirBGGc9fd4sE)-x!_&PS16QhOzO1Bhe&-Qc#Iy~2 zi~FH@BL0hOj=fFU7O?p;;x;3gSd~dvJcnOMLCsZ3Kb-r1Z(Zl5&Y8-gP;X|Stgf8c zcv!2wtu^z8`WfWdX>IcScsv+-hY6>Xm9rMEFYE6^a7D=?eIxPlctF=th6sFY{t48Y z*-eVypFpT@f=K(9Cz@qS@r>oQi|NWj#2)Ur5J%S+M?2SiUm>NSKDEi8oqy~3_aPOA zn7nx|8nNLyXvzWrwZtQJFS^8De}Qj+Fafh$16;~z2Q*geMCwu>e;DQ#jz?&X@jCzEVYa<2bBpeG>oZ!Nim2PCTOa9$)Qr^+C1!?~VzLhRk;d z^geF>N9N=iXH!zy2Qj19)MV=Awd0<9!kE*@kei&$Vrf%6v}CSb2=H^fmRXLWP#2Pt z@ne?_g#JIe-aDM_|Nk0~2!bGX?1&%;f|ykeVh2H}RkgR)E~;%r5PR=YdsWqJX|=U$ zwsz^XOQ+S{zWwt4-q(F!_xJO?fB7T%_jO%4*Lgl)=RD5ipnb?PRjG3&o<*h9-PW*y zwh-ycF5h!MbJ5r5%TJ6mt959|gf3!GR7Le>b^?CXII{%H$i$S)rRFyiXK0EUCG%h* zKoo5Gp$ZPxp9Y3GTp1AkpEUO`q?vw-;SIWqiq|EF>01=44~~UYvOn(bPSI0RTmXQig~LWIqR~OkPq3Jzi?; zqwR%t95-u2M}YsdU!K}Vg^P_H{t^M*?3K$Y<525+V<~6$qLcc#`-61C`w3&fDvz-= zZw@-PiMj9vC+a&Gvi}%Vz*mWN#Jr$Qu}bOoH>V~^F$f%;I_%W zr~@CrjB0*_0ze>0RbMS!1B&G#mpbhyt&}-)x3og6g33i=8kt*BLOl#=W9hJ;)&7ml zVEBRn%%c%$>dFv>Pb{haVlRR8!lmHZ7idgJes%h)3$_!;TSW|l2nVa zMDLqsXo&Krg@u~+YRlNR;ypHBMV5jZ7Jj0{tsG3RKZO7I1x5IJ4;YDaSUgpns8XsE z5ais;ceYYHBw?$nqDj z=D_-IuRsnB_;EU~POX%qmRgM$w}{4Rj&$yw8kkV(?J_>|@@9s@j6?t-(s2Wj;kx?t zRi;=5I4+nVBhThDwWYsX4|QRTObqR2@aW}ge%dwoszkd9r=uo$sF3_Def65$|8Q9U zi{;j{0W2pr7WN9P>VpYh0ijpQMS0hht>~50!|<#IhBv|MAOK^sSboq{d{%maH3t+v ziZq&Q=4%%+tmR#{HypzsEycW0`@o6abzYM5=o?jhmt`}u{|%$ytzpq7RKYkpVT7jw zAPgX9U@lu~nIsS4er>)1{xJ=sKuBIP`wZ2fDwXe3jRJ1}iFTTRs~c7KF9evuDmR*p zz8hsB&DV3EDb!{?Lb!t9ny|iA!!T)U3Cj994czIVwgxK|CnDX*KSPN@px zl8SczVvC_0)?1ZwMNeROeR8k;*fUp^!0=P|7p4Zf?S0To#oaoNEULM&?qT0`r1}BAA_9L zZIARarL2ae&%vAjnh!vJ;;f?r6yAw9x@k}I6{Tldk>O7a09pO3ln0n1K=V^6Ph*BO zM*+;hru0gsy<5YJbmLe41IHtp5(!&e2>d9#SuFbgXIGhr{vjXTBcF8-uGHl$`AXb; z>J5?v*`(KTDqz;Y52(Y1YZ^~G5_sNc2wqm3&>Cdex%J*HZ_e*q?nEB^gM29|9_|qo zXux_eSdPaC%cWFWm6=QkF00H6?>8HEH+h`l(O^6s$rJ7;G>#F7GGV^79lR{VQ{dU| zDaina8qx~8JwD5QQP5jJxyt@x5roo0|QgI2{o^qg19 zv7KgKT-;L~Y^rB-?PtTdo}VX_$`8pK+fEm#6e@@?XUjcO8oqn38mXfXEv|A!m`Wsm zMJK|Sj9e`dqP#Yh#i_v9jcF5GWJ+e2rH-?=wW5IXx9_c?ne27u4Yry&1(!>9aP*=KRC~89kcJne=$yZc=N)|yIs$jz&v6yVu{9{D@wlZ_!*BXZRRR6o9C2RBVPZ0 zWJG7NaI$WQa6^Y5OJ{}UZa4}S86HzGlmumwQ!lT8c|?U3u`m*u)u#f^@9w+uJE}Dl z+{2tmg}PwBNtGZ}JPlc6ROUu1DR{fHx|rM@4wVxx6Ae{3P%?b6JYO!eL6`?#-Jej! zUuD+&(_!*Iviko8IVT!`bLo?X9ix`#0i~`b|4NxWPm8P-VPG*$KC2;>&T__KHmfLw z&LDy>-m@yFE>&&tAUWA%To=$KybTaK2s1QMn%D=^D);_0`OEj;^j#6R$L;oWS;Tr& zsJ{PP?(3|mWXTp*x#WN4qB$xMeWV+3kSYt`|4PaZoYbEtyRDggg@3QZlUB$tf!?CEcHQ@uYVm8FtI=xcGH1-{=hm($9TB z&n#eO($n?HGWA&^;FEm;!uPU4YN^|J2YX4Br#IE3B(pIC&IpwOT2$bw-A9HR?W<+E zOUY#K*i=rPibaPr7%O;0?coaBq#C`}oN)o94X;%z(Av>aubY~Ys}}xYi0Nl+j4yG& z;6Lb&soVU6hR7E@O}+ZjgXzIa0>yUtozk2*t{q*U0f5rm`C#&7%qPPx)s`$rR4S2f{_FKLt^MDVSoxC^R)oX;Cz?Ji%-ZKk} z!d>GJ+`b=X_JoM9R%3D;RSJVujFmKB$EZ;stGq|U=ja_>GfGox3&Lbt$O56(UlK}bADXcBNMjurOYmwR*ljAI0ipng6r-WEq|&^A*d@08j+Xw3{+8VQ-6gtE*ytuM-0vHA z#9GKXj&>{=5b*xKU)*TS9#whItb$o&a%1QpA@;DG&eDhaBaf*Lm2zvhCd!{m_OzAI z`&sxVEM{Co5#Z$+0(v7)^R;H0>fpUyw9gA z$Q_k2R;|f498rIF*IiD3l3`ROONhyG`h}31Gnc;lEaOT{UA@J_G<9Vmp~ny%{FoR6 zMU(vnb%K<`q*84*wK-@b&2N;7OQCPL;hLrJY`{JwFWkUB@C}rC?***$_vSXbq~s$6 zwvI|1su`OFU(+R)U>e^0}(g_cR$IQzjQ5bY#YZJuvJR##&wvS0na7 zlEp5UtR@q;)l~39Y+ja*UphDqct%A5s{82#_aPxDBhRxu_!a7UHF+!2Sn}TdeKxQG z0$L;oh&RAo^trxU0i{}!KD}qy7HN7aF@LI@|NnktUC;$EM}`|NTAx_ zxOwp$^wx)+$`*!X;Wa89a*V(%Zg-S_V7+9;J3ueH5_Ek5jOJi{qipM3w^rcnnkn9f zA50RwcHU*QLFt&wz4_?rTB1Q;r)zQ=5I`$MMy(`+YPJP4QsaTiTxV2q6 zpg#=*etWEuf(siQN2p$3+Fii7kNSF_T&Uv>Rw0tXLZrS?1Bg9f*kr~#L6bVEEyR2& zy%F4~U?6Y-3PnAIqUlOVrn%&|=CqJyAStl1WM{@0CN>)FikOo+xfE{MHue$6RB-f_ zzd^5}$`yZXaCj7-a-y_2`f@VZ2v?_cqeO>*JcaKuL?tsER$(H(iRJAcKuNI$I{q*~ z6U|2Gdm{&eqqK(#(<@oRxYpvwwMz+a`PEs=JODI$f%%xZ#i z$$AY3$C4T5g*HEZZ>#L2J^ECX`X|szoiPPsys=cymB&R6jbDe%6dOYLpz<%Ur7{8G z2=7bHX>4QTp;e}4@}Of+Vgv+@f^p#;=`*n6oqTpRbecDA;T97l6_i@ZzS zf;rLT7@Ma~@Xw{eLk2%iJJh0V8h$Q}!e}QD3aRok+W8vHX-_bq`uOpWCw4!c#mf-# z|1;M`|I_~0ht6^Y4PUz9<&R(Bbu|B$H4!J}lRU~j^WB)kCw&T6y{BI!LIeN?n^jxq zJVGVy*x;kAScPW{7;*x$QC^J`0yty5pj=FGHW9Vi!+i9vo>QH%ekb;i@!f)D{pYlS zJ#GZyEM$b&O6pPPe%Xn$_L>j6_QCTU4Qgmb&3!4Kh>QA?Jiab?Rob!gs->5L?)iKp zHrxP$yxb(@De%wNH$QhnVtua_dtHmO)ScHA=Vf! zQ}0br3nes=ZwYf>&EUbNhou1x-0Ftl2N{ST-3|EpO3?4z$N7Klz?@Uxim>04fvl{X z3>)qTXu~94(2<#=xI8R3NT^GCo5iZ!A+%k-_~KtCZ9I>2?zax;V|P=AqDNfX24|cg zk(TDY%D;uLhdAWEU9vMR;VGCq!(OKbA{ZW5iSCSO7>%0=4UJQ^PLX-HP zLLugx`+k|z`aJl3u7Z_!++Pvj*ld&noP)Lj$W@gJ~Wr^%FJP3GP7KWT1}C6HO zaX@$L3(_icb)w9e=uj;kB8P0rUWb;J7Hwoff3U{$j?o|7 zQaLyu=BES@AZ)6>_Hn-~L%s!zl+gKtM#RW;_uaL>FF`E&*yCCx{_H0BR{8IuBF7lL zZOnn*o1Vt`CvLh#XT2=*?K0VvV}AK*`__Lty%jD6mYzO4^}X>rWbyH&$}4Anb{=np z69p8QoWx$XJWgO8C2{EKP8gzSL&Ng?Pz~P$o)~d|fWKT(?X4YJo0wEo`@yruGRCcr zmbi#p@1lBQ*DOLfb+@;tr_Cp&a@T0iW4#BQyVz>{&d zyfN<2;$kNF;F-8jw{u2ZTKyiz54=5@`XYbx;@jskQ7xq6JSwc&SwE?Uf{sbR?jmn`bwg>4H{~6GsHP@(~xJ#jyCGO57%1y z2I1R`GH^vBVo}>B+~JI~Bh1#yjMzdPzJ5F8wga#)ht;)BjqkBkNjxi)Vc8_FQ$t^Y zw%XQ?>#eW!)-L7K(;oxjCI2xY_rD45zkdIPT;>6QWsJ{cP9#_v9-Y)bco`AL?Zj=w zaaP5^Ak#bPO#qyJkX1)EvsL+wG%A9g30+_Qw zGTh)M7>MJm?Q;+aKta9_7pN01EE;+l+^%YfsKHnqt-SQT^x#F;$e2s{mCS#-TnP)H z>wVijMRh_!AHyCMznPDD&qbB`xvySA(j#sJwE6!Og1z+25UtW`l@PuTs z733P!aId4Z7`+dhfJp*I<-lG>gbyJ577=F91ms{h=&>_{draP9X)r92cU%vPq3V56 zk=C{-zEaq7JzeF-R|W=uI8@9AKE_^J~kGmBLenD(<24*>sjPpdCO_M$M zbc@V+sSM-ZfSDT#%K<%lOZ*5OVhgLVPjIYIXuG5(p4(RWy=Kn!=IPQYnfML=7vEk! zIw^m9`oXX9>hB{I35nUDs&QLmYyDIe?_di&H7)nl-Ga5+ZmWEDSBt-o?Lo~c^Im1- zXz#>Sh)!pWh&9iYX`Ti0Nh19AoTzLvL?Iyt9#12N%xB|ELcM|h<3e858pc&-ADjU| zpC{R8b-|Wexxzg9eg&m4LqF3>Im55X!psWL&32Xgr%;Bvm2sYCou=P`qqQ=BvQNMG z{Qt@%|MveTYXN|xL=&5QYXUA~TS)3koHzGtdgU}`W%wMowB_tR5g@_<8v&OH#~XrR zj!(p0lKFMPiM&zXD05b6#8RL`1BecVMCWx z*2~lj-7wTrwF9E6jh?6i$N9F^+nmncvr4lEZEtpG2bXqW8H1rK{Q9P3{wHoKD+u?6 zn}{aR~;xE_us))3D))5G5;MpWnYBH%xJJ{54+? z;5w4+KcL@7%L+#;W(o~? zO73Q`MHlr>9s`sB&Qu zu{!ydEV_ytnZq`syZQr-C;&4M=*hGmJX)!LD-pqvlK>b(#re=+821`?oM!^NCb3N} z$PQ5Q>jcgS;DEYLOP6%GT$&c?hW(W_9#H+2YA*TY(^KyC_6ta!`Ygo!3q*6olG)yC zC(oOAmJZ8>P_O{+C3W=%(3>$UmbzKHZ#Cs!-y-F(rUE?*v91o`ix##w{vo!;XFdOC zXMq8tSI(wGxVx$D`iIyTz9E^I<<}!o<;qYYAxs`hRw@eKXB#cdfVxxT=iZO{%MkF6 zswx|NmMEA;EzSd{2$Ta3RhQV#NiyFW3SWaACim5wl;R87RUnS;9kuKua1>OlQI$!x z+D4!dh<7S~mZJ9TtVZz#zu<&le47*lKgmB5f8YK*Vr0@E-lY`<9441}`gCyt3ZBf2>jY4uz}zhG}*VIf}CM#^(n*xZMyH?t z?xUC#`S_BBh5r}4eH(TqZ=|fEjMsE=izD0uL^x-I#D3zmaGv1EOj-#m(0FyV2CcEt zx$ttCb;~TgwSD2Q`Ehr*@rU#Km_IWgc&naO=Ak{*cS|1m3d?*3TV{DS4c_s>D`Jg1 zqP3rq%Z5H2`O1wXz*~>?Mdf9>;MPWkA#vr`f)_}hv?$;<;fELvF zMfxUG{#iaC4ulPPVra+zbU}#S<^rd}_=j^p$7PjYhrGAAxp(P$Q2kuC&4;qVctDDtUG-u|#yt}op(UrmL+3(AK-S>N!imwl&9}wdFbnNpP zP%HqDrUM%(nCmo*DZnx`fw4VD{H&$)Qf{i%5(KtOp5I0-iaOn16Slzn02;=qCziDy z4l6v0{AX+@jFwRK!;_pE9Nmgs=lP6#nrd#4zmgXXHw0wUc!5$A6LCfhk7mM@Icok^ z`l=Yr?iM%j)YcBl|6)l`b@_AT%+Hl{`Om$#>u*n85&=+7*0Uw?PN}yj6&bjF2KUA~ z2ooPO6x@x&;HqPg5E6r&P02+mEu@TayDB}P1QE~`I2)kIY{#s0UVS{Y@Pe`tJsfLk)$(`^XQ|`tj(J5_TsG@j1I$x{>n}2Vl zXTYw~Ot-D9DTq$Fu(pb}r#E;$fdGhcxPQ1;a)L^NaVkVay^#n7m=zb`Pe2n+^mIR` z`4E`F!-w1v=v#mS_2a7IiYIcO`5A0Db_D z2Gf0}b7m!TaXdVAeBQJ=f)C=LA33;x#&vA(HdO-o3*<9AJC-@)j<`|UZ{&0Z4O}=~M^v|NH2l}+x9{@lBcy>c^lU@)$o`JU$*lK1I z2$_kU6XgpiVKDYa6qEwcAyLxai|d{vSq#b?+)y8-fNUz~biw;P37;=IUY1tI^m#=F z*@4_Im05RW4Z@?3pZHHWZPcVCce4FU`%j9XVJr$S_kd4M@7pc%{=gf zy={G&)6-1ID9c|1>4a36H>-F@wWU8g?vsckvL;(;ZfM2yanGLDU z2ME~GGLo8eubz|(vn6jpUgJ^hHAPsGR|%VGK)B%WuE=daL`NWW(hkkKbiW0kmXT?% z#{4_OgvC77OW)CTKT1Z*TCC&s62*oT$C~Bl?k#Y)mA@mvD{&`*WOH@De&z-54M@#=V#{)plt7}$ldtV2hQl_;Xjm%y zlO9P)R%&kIlCHAT=HXgrse5(WW$i;-`A+kdAl>+2eqp(0`rht+QPRz{%Kva5{)Jrc zGJtD4?A+6QC-Z|0@MJd~a@;;Fx*SN?Jd%hE$G}5>05c=o0AIzH=2=h%CBL0EH=`$0 z0*LQ+HqF7DY>bJTvgqy!d8ObP_+}uw--1~s3$@TK5;iIlE=x#h7rWUK6?z&(J0NbQ ztlPvf{GR$w^Tf^f=FCaLY&V$=-8bgX=5q8uaL*w{sh}t$yS}Z~_#L!Wzo~fScKgzd z3zPKOztS5pq}TGwjnls_y>wNYEEw(MS_U2WPuPotL;WvF9PD<$4|629wB%IDER^a@ zA^KnyIME=rpHis0M3QGwN}Q-qPON6~aHvhrDs=dn1frQqERzGQey0sfT@LOaKflzz zbP^Z!THbp?&x;>#B}p?Q`8cA6*kUxki3LmiJhWxpcm94_2O4`)K|;lw(eEl7H;Esh zVnBZ2k=DcvrCXIeS*jxe0N}}@(&NoUBx^ErJKosv4vgsQieLun=d&vt{7_6kXynk= za>@i$GrP~OOSH#TeE04m$v-yTlvD=t43{jywnF1;X9MvA&p2?e zf-Av)EQ7BIxRy?v^l~YG99+0#R`HMb?617jmlwZ64(|`vQKmjkAp+W&nT#AQZ~u?<3{g8p?0PfSG3)WGYHAOi7|;;*_lhb@bEOa~|*A z(#C?C54Me_%$~3n1Fj658SI}4C zreRnp#*L$pgs(9B) z+XCf8DBNW^!fH<4DHR4b88wZehOxPHfF5Z;Tr%FYm^{4*-97+EpWGY#F21A3Y~HNr{8`-0yGl@7qG{Avsam zUBlH~9jqiy2p`04`h%mfm{)DtCxW1uN`}89e?!mMZKnHQBF{p)1jg@RPe*JE`x#8D zwCavT^Un{k$&rWt5zvYnOO(0HNcfQHz!z9GtI^%A_Rq__0VVdgFK@(u`UP9x->3fc z-lOKr`NH)f$-4k~=zmTx(OE87YK0!0zF}cqZfez$;$J!vkhH-2SJB{O!>?h!lHJq+ z{$Bt9=emLaQxVlY&X|s{?obk_V8CF=ajKM(1x)6`C_2)F6BGvlg<&9-dS3i$MAd}k z3@o&o#`GuX(x`svh=x?U6|l;0F7gwSvbAQRX6>cTOO<73?_y5_S}ff(DA4~nzPugX z0>aNCE+xE{avqSqC!zcNyg^Yv;1YPEkw|p!X!|uG7*6}<(XA?_L4O_ql{-@-$i6gA z#(U4`XmCVl9Vsta&MQ;m;hhO(G%!*gy$PNcau4^E93=~?T{i`zKm|mt5hicx2{S%c z%}8pFre@|hcW^}X{rknW>o>`6EbsHAOsp2bsKngAHp@2%_+G~YucwXH1dW!$%pAli{1ThwA1k?tmRelGdnXsBDNe=KztpQ z6jW!f=yRc0L&TUaQBfH1QK6$EalT8bv^=C%T1IYvUi6}#>985oeAgE1UF=Z2LBadn z?`KXhH5jSZz3~coWe>fY8F%GRbhDuzCiL7g}gM#>AzLUB}uJKZ*rEO z;GVys7UN6YH{{kL6!tyHISFSAX&WHE5)u0B5{Y)I8TT|&JL3;|yQIs%addh*+F1}SYrSTL*U&g;|RmS(#X;v zfDChmM};IxH%$@*XRn-K%hBf52rZSnw(ui|C%0%2(gH_a_#S48*421(+qdfb(0d<| ztaFeBA^E;Yf}E5%#H3ngC~Ty=2HIu6ds87Nm8<&E){B3*n3DNK*L3mzUCdmsFY?St zK(o%e!0zXD8b=goN?(y6RfT?yVBfv1!t@Nfyn1lu7R!|^E8aY4I{?6*Kr!~*7FssZ z{Q);?^A6J$UK|_^>Ub%ss&Ben9_i~opK(cwhuG)cWl=N$CXafM6H;*NO4XGZMu zd+pbrdjGWFApi1XVN=8(hfXZX>B+gegSHSEpg)`Gn8Ps~8(7Pz7?bqA6`aBb!*LsC zgW0h4jwIOSx!0RkPxjjo4~>f!77_Ty!{>j0MHW6P{gibd!qwTw{V@MtV!swmiIZgo zK+dTaDK>Zjh1(C#{g@kY*Hi3*Rq>qWvm;e<&zqG|qAywnOH~$RI-J>WUE6d_@%nKX zm!-K6l5K4cc68uG}_+kHD#u?V_jX5M7nl|n|1P_vQ zU1|@NCWqo8;s-ze1q|+fcz*kg1^3$T{Y6foG0$Iwfz;>r3-Pu0TNi4ayi(Zt!V+%0 za(n-$zV)Km#W&e6qxzn2K9S=oAv~M^bFHni_No*h1<1~+!t&JA{yH=@QAnRW44f@v z^(FcEclcff$|5pRn^zh|qeC#SqM4`G%5O-sjl%!hPV<_~WA%}knEga>5t_W8UBsoH zt(NE--lcCcxRBfKFdz9VQd%!KDF59e?K8knvaa#wBe=Fr%|-^mg4riwJ)uEom4~n? zp-jXftuer0MBa_+Rzf?zBN{5YAQh-wp*MOnN<*Bpf3^Eya!Jf{roke4^ybdDR4Mty zKJC>)W`lw!%>$em1qCN!0Z){?3p{T*3ihf|e$70&yLuV5Qs`^;4~+0xb|Jy}YtO<( zG-~foCc{i+OrDnQr1YV$(kr zSw9LcFNz4>t;g>Gbg(RsPuDsOui=IQzceEOA$21y|M$D=zmR)F0C0KlTG%CWd56ZK zUX*$uCV0aX>3f%Qfyxan%SD2YHaPT9n}De|fuxNmx;IgS0YWPU^7q89-VYppV#{yO z=NcjyKI~e0LF`iSQN9f$7MfmeeArh-6avxnr8C|-_7uX(n{iFZ*OzvIVUc0y9OMOV zmNq}1n@cT7)#7p`$t@{r{rPkGvVurh12g(wRDA0(KQ8oB05QRT0D zu=iKm>oAKC8*#{ojt)lX_H7OKv``$q>?vpnZk%2R1CjAPW%fJc7Go37Z<=dOKbH>e zsEZO!9)1GP+K{gTzF#8F~%GC5@seM zpO>@kB$&)C|3u`>U-{!Vd4E|?-sc%--aS2imB8^8Q^h+vF43mfMR`(R`q<3HozJqC z#wMU|l(!$*qExfDD$9hQ3$>eY z|9n;BezRU#O%0RO;W}EIJ8O2HB8aAqt~{+(9x*S0DRp&IYE;#Yj()~EOEhR|sf9lR z)7ZA`^Vr31I)Vx-scJQm3XyWmN;L-Zm2` ztqNS(T)M?qB_@_FW71xG?p%thPW0Rk< zBS(SS=kGIehvBbdwG`6;ZEchZyBjII|NUsCLyqA66TlgHoenv)`e52*U`#-A8Bde~ z0o|#VW+vUDUnI+u4s&LJK~U3xNy3Y2N!vLgVEyzzrGba5q2>8AUmkqwk<7)y%9mxF zXI~)yHk5DnAzmkQCqD6e=S_Ze!aGRYjt*5?P8_x!I1E_)oj*4Xw9hQ8;hh&k>Y`OY z7ro?7W2#4N+D2+UD}H63hxm9K;Vyll!0M|ckcnn(Z!BP_x|)ylDuc%Q`M6qy^Q^DQ5U3tbcwcHJ!?{%Kr^{l#mj=ZCX7^elvw3}VdJfvJ=C&L6J-g>kqiHp(d@G#mJgI3ig z3Hb>u#NH2RO=L*faFHvEZEhJ8h!kna!AGilTBa5}USq&AM%w9g{{`fk(`Y-Hr&Bn41@r zw%>d}35O}X_na%J$P@~aUt7#-?fvkQdJn*j$5$lKd(ObPlQ%#?L5Ju3`iq6HFIXL$ zSNTLteLcBk{lZLdfwjzpyEp6X*R4xSAGI$O87d#E6-(qiW1`qmYa*!FTHu;TqHL{b z7T0i7+DIqG<=yFIoF_z#vND2@P_k)ibMa%c@~Wm#+bPIn< zLkFN_C^xpiBMso#^Hxb{d(8utf2r=|ee07-`}LD)RPodYk3-a}huZ-kbuMsInvi_i zAp7HPMn#3^;&EYh@DIkBoT5kLd?UVQE|n)lsZG112v zq$%`FtsC;;dnCON6%G4}ZWmE!HmqB#ICt&6{Y`BfY-5nzepiRm}~_?U5i;Ga^C4e@0yE)>yHhOPs-)aLjsG_5^0vPY1n%|*g@ z_Uwy(`~Dxbg#0hd-M|9awsq*4LN2v~47os@&wen^zMLt#Q>)Bex_PV!u?M7=X?!Wt z^$(4ek||Ae_PY8biE0|Tu=bGF^cz_k<0bcu=OhEc`b$*dLo)x`aMy%FmjVfWuu3?w z6V5z|?&^m`Sod^^wgwqR6%K7gx2nlHTz{})R{Qjq!Z)W`on#iA+eW=XCLUpFWx588 z;*p8x37@@xJt%f0)pyF9D_is8yVI8Mo2x=-iZql>6*^iAGOcA#E@s*al0!_q#xxKS zV95cl!`7ZkaeN3}b0c+%aY6GRI%j+8WHbReYc4t4A)zO{d7^ixS&vlA76AT~clvc( zLIMlq_*QQF+zdXXAW}9!w)V~KdXhOl?h`7<6(Xh6>c*Bj3Bm7@^2X~O?Xz3L%Ts<6??_xq;MYQSLEJB~gGdYdhcEFNpQ%nFUp*uB_Nj`*A)iP4BC7+bZ^MGj8 z^NOLk%jwO{p7dNI4a1E8F#dMT4<;_2SbNl&tc5yDrmRh)CDN?SuHfy@7-&b{?Qy3# zc)v~@Q+fIuHW0o_U>;qxQF?@e!fXKeQ+SZ7EUh! z?KJFn1`o;K8#R~{g&OTW;jh(~A#$=Ib5Zflmtt+T;_o-TOSy-ipIhX$5f?APbPVqA z?a1Rpc)9v5i-MXDee$GnL@r9*y!Js}t7o1~W2l0SFWC6MO$5_lApV71 zX*YczdYI_~eIL3ittC+3C%Gc8Qq~yKsX=j-Zcb>FnFFN1I3v_E2{+bnoJS@A@&y0| zREDt?(A^}U0#Avog4E@j=eHjOTsOv8e1m^F^Ev;=cYFRtP z(e;Db!%6t&*;J(JBrVG@js1>}ts5?kpZhn=MNZ7~%I>&)rToC;?D_Ug#AL%7l**A1 zN=Q4&yZZR_!w$Fg)wfNPALaBRWCJ+Jf+mJEeOTiM!UDV4@4^AJD#hLGTg~*C_9C~>*)WaI1M8zqMr+~L zq)Qwyn9-&dS{#tm(Wj)v?B4GWgC=z4X(yP;Z~Pw0uPdulfyc*6ZTZ=Zt+V8brSaGk z_e?8hi~{v4Bx}s_Jd-M!m=w)Yl_yj0&$A$$$CrdCcud! zU5x{*fGd-vpbbEng$OPVGa0_($r+@I==mv+Nm!)DiYw~%y$z@|#D37tuH6cF)Uh6? zuUs=aQ6&eaGOQb^A+y)h4u7iHJBmi({;}bz=mU}1L`Vn0yo5L+gLABoqXh|+Rjkh! zDK3Ne7-4(wf0*-P1XF%)0r*BJLWjOzQ10F(o$^P2tsAof|F4eBe<3#urR#FO=8Nod z;&;xX0pi_p3ysaYqNQ zDPmF!F|ZQ=GpxjYJu3f$=qOB1n7(^;ka&Q?;$tTgdrC?-lock=2v<}oEM3m9YnzO_ z$jQi!xGrVYdvFmK3e7hsOA~7ODAPUOt-EHECIG6E5(5i9GZm33)Bt|zh%xqg%CsU) zt!bZC$T-WNZ8R|tg^CXpILhXG<^OzGDEJo$a!ljxRqt87U@!9Vd}`t`nGw#5r%GF3 zgo&Agx8o1EibvH4v-wPykeYSE`ys47 z7Ekl=5sw+8AD`JRtaB~Ue&T08uj<_UN);6=LHtrw>a1movaw~{W$k!?MC2v25kMV_ z&3J46dNdQzSUZzmWN54;{qP_qRqIqWO_eRWj5&OSHP$}EfVku@#O23~+(}CMaB#T2 zm%0&_YENLLJ$aI3^r=+;{2b}FuvxOn{_`QWwC69}u1ER~|GwW3coh8`8z$`g@rKB4 zZKnWl8-sUF-DmXP{wD4!g~z-*4fr0-_1|aF>5vOPR06OdC(P^&mA$sFPU@6VH^w%|lwgkOcP&_caRNi_gpP8Ne0UhZ7y zv{7~tILn-iKP}*S!3<$)9J!dEyVPOkYHVZ|lWmoT-}zK&mwHE%&&kd(UDdr(TkV-m zr(F?TYey@5EgyWdt0z?Nw|Rk_eKlbYh5 zX1681=QdDKe?uNp&N8NWTZ^-I$s8%bC}}x#QpZ`d$vc|on(#e>Qf_wvSyQPM?sKh1 z;cUC*!!z+;e%3y*&FTye`45Ygez0~D9A^QX*dRK~q1Ex}roZg{AmTP-3g(c9io-bR z0Lhew13+3+$w*?I4p4;*rQ|YijQzcU#I>b(KluE+qa$!5_feabX#5K#MG@{WF6aTe?dRXCI<&FTJN)**g$ei znd7MtUXVu`t~*tu+a>z%H(zT=|Ja4eiD_Z<0DB*=xFiXWqHTBM8+O)zzt5``P}*#h zQK@3#XyI~6HFMo?nI2u5l``>oy?45>`WG?yOYQsh&uH_^!bWCG3w4bG$Me3Ol>;vy zG7CN`jA|p?7qN&g?hVSgMd8?e_?tQE41?-N6*c`JA!JK#UT zMklWSb(PcX{;%M)Z8ut-n8WHU>66^X9im_g>39ybllD(267HbqyI?3NteQTqvDCH? z$&G-k*w~R{3f~f(QPE(Z?6NQE=38I+)qZ@}=2h8~bf~jjBrq zBAdz44(B>Ww{j9$V6qQ(K8CCN2PLzxsK6akc-Q#+dedu$%TBBw1X{|=U3@VaZX!Ip zom}>nS}M7pfpPBw#QX5t5IrKFc-7XRN?b_{58j{Q#H?N;%3XE8G&Q`$pT*{$VHAXw zNx+V|2{tAQLIWT}ZCpJ%`yTSr?m)1Bz2SW0eQ68&~SjB7R?a#F3$c?d{G3A z9n21JhWqTt^Oz|c6FSy_Dh+#+MKbR6F?2H35ThpLF$7>Po*R=UBvh+WKVEA1;UM?| zlRTaI%J;*k`eCVHVUGWgt+Nhm`hWNTiZNio7#-s1(W6Jn7(F@#1f&~jM6A&@kal!; zNQt1Rbc2)#ib@NJegr{9MSk;K*SXF)-{0r`&;HpTyI$|d?$@2q`vT-P!dP$NK51OI zB3j~sTUI;n%e!T}Tei(z1~L+ajS~-V&iMP8yeRZ5{xcBPvxsYpTNi3;$xoG4c_?-0 z`zB}hW8~m_PP!{X=&SA;*Ng51R(yD0Ims$7inScn1osVyPvz(rUKWThB=Qm4Nt$zV zLr!mb-0ilMa-e(P(%mJ3^pU~%@CO(7wK+55=S-sSc5bHR5NJy)7bDfkJ2^p_nA(*UlIkjlK>EgO-&~Hj z6fqv{T0RK_tECrrAK;uxU|4_K^y4(7c~EA?a8i+$7IAS>J9qVs%u>+AsxZS5E_oV~ zj2g8z81-S4^;1sYoOa=R(L!HuFQEy8p(KZU~eD>MW zkG11>G1dy5DjpXl)?vRg2y7*J!$a^~2+S;L{EM2nLC94vDeYGrEQ)J(C`lMX@2Jc+ zCQ9JmhS^r{vqHM_%aoHBkajoym!@^*YW++$Sj8T&hyz}_5bU<{RQoRp1-c# z&lF0)8lpc($ppK`84yrD@!iaA(z<^&G);xP`nxWgnOoG3BKt<*_Vl80VZ2`H5Kiw4 zF46NRGfqHjmO?EdVB~mkZ4yPIx*B8fiq#}t&mD7+qd|wB8{45y>?r52z=j0fnrj=} zVe@t}a{WlCG*3(Q+RvCVdwa5DfO&Bi)wX zT(nCMNfOo?%vP6|Y4h%~)efgK@y?Rla0l`kw+UP`wuWof^952TNd&>D%Kk7z(Y)!C zQ67XE(Ub4{*%4B*(Ow4y5B1&pl4i=!eU zO*scEjw1%*OHmyqzH=X$9(tDthkj8PpyClEA~0pGkA5utk$9h`yT#7RCB8n76P8|i zr4Lu($XK9;_vzCEi2{}QD;3;i-9u!WEDH}NjmNuLQt4t275Zs%2w86-Q~u(qA#F&} z=|isEr-2Ig-@M!d<(03gyma|!_LtWl*v<3!Kujv2p;27-OuK5gZ4yrvW+Q%ai;U21!Gxk65g-K)=>Zh*=lp zjy0>i*&?S!)v-9}nxW{NfiBOHWBX@GYNpW&V_{-f@V51(5QCt)wLnWU@9;S9b4I

          5rS$+te*v;)h>cAII}&aCs1r>gTyaKR({E;(f%c&Zsgm}u>uj!;_(R!SzAUOjW}7pFI{i7yi54gl3+GzSu9WZDGbusC`-DRf4Vs5OJK zrukDT8wZmih6k@*j@J9iu;9%ye=6#%dX;DN?B$$X9fF`MAKW&t_4!^w4kyptyI&ht zJ|@hs?7q{uPP2OSW6iWFE$mX$g3JN1el4IBzmz1pW|<)^5CMqYo49v z6F7D^(x}Y^;q%(U^gckQGA3q;CN3un*<1L-YK~d?S%fx0YJyZ9B36dJ>1yFYrIlo| zrlg5j>dh6_%_|VMHWvCCT6q53E|-Drx`E8kkcV9dhxqe&ZPb^37wI7=wD)_#x~*7k4yun!aP6Th0(-Jxf5S8b*pOjOCJ*?@hT3n$ z`E#Z2mXDnvtIT!|wc2VMA5WK0(FLtvg<E#wAe2;XDJ zKPz9vnBFBZ1ySV_oxqN&;BxR4An%b5Q1$il0F3uEwUB3gt|mYpks){Rk&3@aCtkt% zOxCtP#nhzTJ)s(3Ri?}$ydgSKli%4OJs#q8NF$^-IK-5fSS0imH=s&p^4+P~^54^8 zf*UXzCVI%l^Laa1sGLi%C*dL+LN4{wxMk9~-#2~9kuF@zZ}Fxgc0zwc#$@2OuX2DR z>$5Q8W&UD(IB@PIO?9r=>qd*8_ur3=PeK@t_`Mg-ip1Kg?C_k3-C(sf05P z*KCXTh~DzGTyAW?zCYg<925V;2b_6E)Hr+VEhG0m@A>#wxo`L&%W*NopDtzhS&isX z0%C~8Ogd&c7KcyH0Vp=c}R zHZefF^r$}0HHeByWisA6;f(wyYu;Byj?^Vh8H}=Y@su%rIm@<0a-PIJQbhaPyQaR^ z1Alt#X#1(erdfg|=_ov3#AkDo`Kf$_e52jsr+GT}sE?l)%Lksz3G()FGstnBLh+wW z%e7Rb=)`bYQR;ES0S<{So94Ci2@#eGv|;PU=BI^KGw5k&6(cvw=Jn(u-A5;^|9-tvkTYr-0WgM<^ygzG3(%& z6eJ(AByW&N6BpfhBg+}3;Aa}vY~s$IhBA1ySkEfWDs_<05s*$i=u zhA|LE(_(3YO!K)3hKzV)a1z_Ob;<`g*j{7OwY> zQuYWzl1JEU56ew2{!b@XrIoWK9tCZo&? zRuRJ>Yg5B@i#Z^oX_26*wn?ww@7^8!dDqqOX_DVPwW{tbjKyn>uckk(SU zMkh%uYj++N@W4q8PNb)cC4WUfDEO@R(MQJDP+)hPO2;x-cQ*e5M`=qn@S~vJmIm|Vx#D$IKsmsHQ4_N03*W(9( z_TND2YPVNcp*Irm%VDSZyq8?9gpFw<m+%pJ8~2BZJqpe zy}QNYHb>3pRJOPH^Bv8qaH1EB#WXY|6n$0O$Bp6`FHSId^51xEab$h#)?BoSw1d?% z@!QXewW7GEyo9NsWUR2c-5A~@m7@)}4fRK$45B$8Fg)ue7({}9;&JSL-?%=ow~cM% zwQK^zmi+0JaJ`4wJi`q=VWgK`rTz$qC`Pl#Y>)(oc%?J@fGwTe#5#8Et;DRmf6m%v zstmH4=Dkz07OUIrgda!_`NM|43f?%Q`QKIi|3>YWc!pjpky13$Dj;Oth5|41Krxjl=qaWv2*C-!*b)7R6-slDy_ay|ZqWtAf3tQ19e~ zav!Q;in6?*sDw5{5xMB_)?IF4O*_|i&J|@{0ogW<;r&g%Az$~7v^gs)6o4l4VpVdE2HrE5jo6w8;{8&jZigD&wh#@l4)_iYtG`aQ{@f$1nwVAi^h{4$WZyva*TNsIqyju|xsw@uUDjkKRG|D^$1=7qPq<@U;0}wUFBpdWXW$GW zsI@`(s`f~~@u9=C&XCtgNEx(-E|#1!*BFO{@H|<`e!|7Ho*G|i1b|axoR3*CYt{i} z!l1i-<+v|a_s-8p_>%vFzrV<-3R9%M-V!XhrQMEhR~pD&k0P*`3+PI$Z?F6!xzkY8 z!G?5(AnKq<^Za~)1ePB!Cy{7?Zgie1F5{CR=t- z*{E%gjKpB%(8Oe1);KO$_%SgVm1(%&HOG}_#HOUi{?avQ-dvo{=l7PyOVYdaGk&H9 z4fV1jTlR&FCTz*@>_ycBmQsRf6uP|ar&UPX-cy@W)15cvC8hb^6Y`iG`U@qCsFChS z;5rcsOG=1K*JDVlNuAY=Oh|ZmA0)FivQ;;l3z={Af6HiU@MRotoG~>wM>+(|ykw~N zUf4BiT|=aJ0|d08YCO*TM3+q!0|o9-Fs-a&w#qXEmEnsiG6SLf$HwZ+D%cUGWldXzTN5Aw8Rycst2TEQ;PI!Ev!UWM-V zi|Sjg-uoMA~f>Ig1;lOhOOCs_ps)uAQ}O~e7PW?DWit5XU^uB17jMPkNTX+9EiOH z0Mo@UQ+FoTn{~Xd&=icZxqS3V;PiZMm_HL0rjwimgo?5ir@MO0+T{pb4DL?@u`RFl z(}yneggL(#u@ww-Swn?vl*=zd;>@A*2poflK6EM4eO}L2)*C3i8b-?;>t}f$^`8R# z|CI{%PkRku7|X`|498*t^vj{XF3p^{ zJ`v}+&1x`RZhT7uB)fTqkBDOAnW$h;G@JNoJppKN@tIOJ_{6dxAF+LOWp4RrOq}E! zUs97j76|g*Q4(A(5R472j@z)@oJ}%RQMWgZS2mW}I9xqdiAf!b#XL=SKa=S0aebqu z1@SWcJ#yt?QM1UE-3KlG*Z;h0FL+xwQxx{-%CQ;aN6#xRp*2K0iUoda&$D}@@E@ZK zPrP}B201}G`6btjOa!@Cuf$`%Cgm`UgB1|1pQr@3GjY+eF3l##?=aoR!vY;ALC~ze zTwq`PfG#z0fp-3OkId}A3uX&eqd2@xw}KHoflqeDYyzZ7Jj_q<6q71;SabhUPkfOe zb^)|gc(-)&%^s4M^UjbP?pl9YhVvj}0?Yy8oUm8C6Z~UD_C0(fjSUFEn^AQik;k8;cya8P1`e$q$dYWzjqIr2YMX^Tx2#x}C+!s0F5Myra>Gj^C)71N?~y<*F7QcuP&q@F5N6c{*O( zua;04>sidO6U37sDS+eqF%}m$gz8>U{5|gyd3u)tBlr_QZ^P1;b?58uh z4SX2HUDXm~qBYy^hE`sX>`&ZRKY!}`IpFeLPEH#Dj2ppmu_nJ@@pU2X1I@J(_b z6o!jsb68;1as3(}$1TS9QV-854~=X0pEs>1+-8qJFB>sgqFA0v^o=!9Nwz#$L+f;0 z3O&DicJch|ZqL6Ky8gE>*Y*@ZJ@lQj+eX@LHdxC5e0|l7#ZiPJPEAh1vQ>_Mei+#Y z0I5^SQ?t0Yx|XoPZ_2Ef95P8CUUvv1z|G-I;X?|U_?!UVb^T{jR3v((*~!-M3(zsm zg^`;_jIz8ER9nA`b*IWr);jenLsVzF9Sj`qTvFk4qsls?^S#H%<%fSd3N$bf?Mt^2 z$_oxnG?ub($1!Hw*`Yf3bqr@yc7_#37&FuDWwn34luZ<}yQ*u>MUfN`d4Z4WQhpyo zV*$X=X(pwMzKve52%>rN)%@e5xeYbt#@gU5*Ni&6Gcd__8S67i>tezud?`uLrGc?_ zCyq12J%AYfF0n@S3J*yaCBfz0>6VgT7t=7BC>O)0HhE4tzWnREGR00i{0O$QPnEqs zch8&kzf=CfwcnElneK_9Ijf_3QQjiTOT+B3@Rp?k(>2yW#g}=YCLk};(nTk zV@$d__k^-;OLqntK00+JrPNjLPXiYq%vws>u>#jw8n!(LL+q{0o~wqxyUg5C8{ z-45e*_(*sq)wZEqUlhK?2 z0coaE#^Ezr>l^3x+HV0r&T* zXL;b&dHVA=EKb5rP_e`Lq1VGqkaMEu|D~bHTSwEIj{Um;7)-}(enboU zsclKi@k4ir9Gi4hf2DQrm49*(I#$F)agT8@2#oQb`2yQx`K$(K6NNlK@w)oKr#}{H zcb<1+U;tKPe{V^?y4}Ftq@5GeH_i9kCL4X(0uf(RDXT6j@_>!wRT8^7`9_{Pb4)%m zIlaxamWfp^%ORusSRJG&XI0o-KV7vi+3=c${-%`vHCqPCjY=%#_B1QtrRK`uBa?MG z#Y8!`%!)3_<&(Mc@uo#ALC~@3u<0AOW?78!dOlyBjB3-doQL}M>jQ?g?7@!Pzxf85ZMHO0; zL_!1HiYb=_eCY32|Da@9fe3V4l}khDPqQ|KGP=|(`AA}}YtVhH^>NkJ z@x>a`BFFc>(%J^R0uScg_3Mi6O|JdOLh>x7uoqyw`*mabbG79>y6r34@mrvdR@QP= zek&K}w(`?TA8lhQ7VYH~eK5_-Xq59}_I0Edf-`R(FHUcfTo)!Bm$-j*$#F9Qx63Oe$h5Gx=tC4shQnTBsPmY1P#)XzcaFER=m*WDE1GOiatek|A)E;1C zL(4mQry@$i;BG-?3Qf;hddj+^`>$|slr?YO`Hec2hp{n67B3znlDB4K;uHmeo2ZPN z7~ynhvXV{EM}k$}QkS*lGhf%QRT*Uf_eH~)1*+XK(wY^Q2rwu<*x7Ye2gJ1M6LPT} z@57eK;e6Tf;doKzTb9*!b{s!*cE6(4Wgg$(IE>hwiG?Nd*1=PJ?N5vCuMRiWgEW7B#90klk-c=IQYy zRXi-qQV3yr9@`>hIVxfgTezpkKM0 zMnTRNY?6r}ZjUD4=2Rxj+=k%6(PkmPIH#G|jH({u^9NJ0DW9U_Iy^seqI4W4y)M4m z2T)`gE1wvZH+LJzPaf_W>32suS`kSHczUW=7gG7;J>-DmbB z!CK{Ap6e%jq^z_?KZ%)|F0uwsx7*lRs{OO^de-FZ?tJm_^rtdZpSZz&>==!!*P^Ew z+*;ZJ;&s;yJN{aJ*aon!b`N>v(Gck|0xIQoa(*I8dkQ4l~z19lScCEM{Z*AXw#0WI0EAIfKN`D4|sX};S!VLhsjN=Y)> zhYczx)_1=Y7+y4ZAQY^~5aRj?*B_7d)02%;sXn@c<(pKSv zIs0^I{o>gVb<`@$7N^+#`K6O*!93S{w(_gJcduRDii_7EmGCrm^4&La=zKpq+?Jkr zKX`N!-2KDxdP>8TvC$ayW@r~#KTX@^(>*7xKCz8`=@|1l|cr5os z1PhwAXOdTi$1G}J##He)QYpG}3eaY~H-A%W*+h^^)-!D?_bIATN%>{<;3)8Ts{PNe z|EzXV9J;^A<)2eJNpQN9P7*~_lJ{$rPeKFIKtNv-^E$>-0Bu}b5ls2w#w|_$7m5pV zB-uH!iPk-P{QjQpTHjRRpfMLOG%ACfZ*sI7Q2Z#`*bFl!byXt4L-q%~+i+`+SnHQC z4g&<`S>oKk>%Uit|B9nr?&2%SR07L1 z`P9;fr0?AO*S{OD2!Co$w2Zj_@jh)KhBj??n290^lzthx=senx)JA15m=1;}n;j!- zQkJG&-hX#7bP_69Bhsj2zJ6xqDWKX2x+QJYQ?`ZfYm44?<*v+75Y$%Bv*DAJ$f6xL zwC`*T5t@R};)C;ARP4*)U)PdLB_HZ8XxTrXnz-aME4YJh2}{d853lZd8r~!xo>VrT>D!(a!E2ZQp+=iPHfR5NoA_fV3P;LiL=f{FF4Qm;`;HzkDW8ujs_tYY>uuNGRJqzM5WqQJ*ICzX7yk~ofrh|a>uh~eaY$EU8*q| zNJvM&Nl!prsZ5)Y5M;CF?f2w`v>j);^ZK^>-E=zhPnBM|%5$ps>6O+uTX1x&XFNh1 z5w(~G!+1lYpC)tQ3`+3%Nwc&mi?eguNGe`3nyBT+9Pv^%tO$4zj5bJNb1Eh;urEQ3 zKmeI!Y1E#_uCPiETLWi{=n3CJuF4#GD0(DbDvxJ5-BhL8lgn;?=*1kDO=~_wko#SN z2rJ_gk5?vcgp94jP=in{EioQD)1BWggR*z1MwMPRvzkWyn~nR6T$|Bb%F5}ja081c zaK$px?oU3SgrQ7UK10fCOo9Sx*SIRxE{MV$iuSs-=9Y3^O zA0#fZ#94}D5*&YUfg^m@pk>F8Qk2#H_#%ykVrEF`Lu<9eGHKLF6OC+~l^U!qJ_4WT zoU3V&J)*r6<7IZv2EP=&a{H-yZ)UXW(Adw3tGv5vcz*vpOkJn&w$5CgxE+EBmE_2Z z;grpV=geamf-pMIfK>8)^AT6k+0n$`A`R|RLE2du5fAdj;K7F z*DillDsDypkj1BDu&ri3Sk(VH6HgJ`vP4K_3x zVbz+l*3EW(!Ugb{`>iBVA&nHR=moibEOOkS2Mdd+^l)H#fjo zCXk9hGL~gJMa$%TMQiu&y|;(iOZ~p$syx{Q<4ZSIe;Z`|N$*3r2j|JVGIR5{hXQt` zz4`nZ3(=J?=XqwDzS=#73Nm5#q{W6z%{LO z=Y&W}TmDLGB!XXsyHgv<)TA!1?CD57Q!TdciRP0&m z$k#l1?Qu7QydnFR*Bpj_>T^H4lL0rm)||JXFwJp{e3{i7Nh%R|kehK~(g>Vu3V1=w zDxDQZ3v$HN#k?%X4y97j$_4VI&k>5PtGY!b`o(j~I+lvkC%z@AGW058&YR^m-DfuX z0q|JO-5aWA#){Ft`en932}X*d)plQ%XuRj+6R|PwUC8UTX`4FS!g@F5=%g=tO8K`w z`NZ^FC1GjUmQ*SBh&!tL8;S%ejfE47iq6M^#+Uy4cD?|)>dmjS} zT`i;G_p~A1?=e_so2KPT8-RRw7*y6joRvI)meiTqmmcFYaV5+{!^Cc8Q=)ikjpnb$ ziQEkYcHdxI-*384;mh%6MVh>mRX~Z~TD;^Nw9azMngi=h3j!x^mei0;4MO?y9nR`c zuIdH0*u5)l!4-CZLH4+vh&A_X(iRvT|uScet@OF)oRs!$Sk ziL$be1+3rcY4MWP8$VE-BhpXelrfz0g1)eAU&VW9q>Z_*FbO}A@}wQ8FQ!#s+&obW zq}}f+9+1n?A$%SuQz~tUYzTKTNlbTFt43@XF~`lQ1$#zPpM3X%|9#ifh3A7B`|?-+ zOnTqly2+oQs6pQe0^my9*9kr!R`vL;w%k$&)n>P&dqrmue)^lw8l~8hzi{2x zCiWg}@cr1oCB^sh@+B3rL4m?_PGMsJ$LX7Uywc49iVvHATO!6Z3Fq4o^Sc`xT+v5n zeHlYbG*cLO+O5&PA){efI!^nBeV+n7$QTv(9BFN-VreYfAI#L(mDo(oPdRH`lVK4Mvs^vZpdK$) z=>kvqsZaM%Gq6#ne;wBu2I?I?e5_-CbNl)m&p#|Y-rp~S4+o<%b}pCC^(M;YnJ$X> z{9lXr7dg&K3UXKU=eR`!5$PZD7yKBFm~w@*{o5YL;CQ_Zn$%S&HnD=pQr~6J@@9=8 zY%o&=%nktA4Q!KvP*$mH{{U~i`UrGV7y}cwQDRIo21n25L@5o=Y0Zj|qj+f%TLw&= zZSS4S_@zItca{5LzIY`TuP+P3#*AKtCkBwKGb@Zu>5vx?l&ySHYj{ZlRs`L5T4t^gi=k`GM zfM9AP>QlbpJ|S}oRjLt^6JHThA}8^kqpUbBz3oD%J!Ne|c$m-+BMNV<5NRKq>HsMywqC@cFN$SJKbZ z&Zi$#C6O47aYa~PDLCw<+Gp&5?Tp$RdMTqex($CeeFR+vs?zs&wkt^ z&Ufq%C$9E;*Lj80J@zPcZGQ}Hc^_UGVQ-mG`g`>T@l?TL;rvgAh+s8q4Z`&)&ZadOov-B~U+1Ut!nqpNg zw_98*B`&5XkJ=X%l89K3srMFX3`!ZG6qe6bf?d{vBEgl?Q$L+uz_2Kgb|m5^YXjhWj?y)tj`u z@YKluN&rVVRWdPA-`YF*hN~Fwn&vfCRbl8=VJ2kvm7KhEM{N;cNV#a`niNETHw#4f zjyHEKeHE;*9s0Lue$k}C>R7V6q*M}j`j6F*pZ2#CThzI8xXz8%lac}0(5vS^ty;I# zWEZENmIM2N$d}~rE(?yB9(mgC8Z{40El z`0>1xE&mu9Te!;j{oV#t5bHtGq>zF7{mGbz7NrhX{S&RAuHSkF`O;`O2CI$GXxFQg zHq_|iiR;!`3jybqQZJvJCW9@{&ujjm>J4bYzc=*mlqtb>X>o|AVr*y`QqDoJ$5TIu zDE6MNnn_H0_bUeH9Nhk<8+H_DWNzKx_g;rhQZB;8o6}VxyqQ4Iy>t#IxqPgSWxtTx z@q}LJY1-g*x4CPY7PYbs2TlRk*j-K%uPPNdQBs#H*CvAX`0vFKLoGj5`$Rgz{r|HX5=?pu5u1!?>SWWY!Quo&qf9LJ5J#*HP@aN^?o zWxS_sW4XMQ2OF%pw0&GPn)xnqEiZ;Gv9QE-KwK8Czvp0e8*Iv@tMP+_otGv(jW{jm zb)5{v6?>p9-nWl~9-1_eJ|}2uIBvRpIv!hNtw+3Ay7~e$v0%P6z8efYv&KH%V#EhI zgGv|)^mCWYw}E|DP*^aw_1cy5&nT(?xm777QLLQ*d?dw}i_)7@mAHmU6WMDIlqF{? zT(|`9{V~9Bk+P7=7>lBOvrIx+NH=RF85aW(jy6ReB!N7wZK(zrF9<0Iy-}Cy6jhgQ z#n%bGH-0u<=~R$usbLy2X6HKiMCOMJx%Go+FlM};0l%o z?KxpX*&9(6>Xk`*TG_CI35~92qB4siKVctudL2UFIWMMog3(!*+QO6terlY{!`j08 z0DV%CaDD~;N?uXb{z@fLa0q#CrAvr|FF&8e4X}%V2Xm@0Thr%%CAR>z4~_?t>HVw0 z+Ei<(K4hj0jRgEqZ52v@z8%LslKB%QxcJ`YrNZQ8SB!+*O*0k^)^PpAq;eNCk;hew zwm)7+Z6rm73qdN(bH1W%{xbQx=cX zHz*lqjF>%$Y?90Xv~MNGBuHVBegt)HTL`penPnE2Y5l`(XRO`D>0RgMUhRV`AB@LW z7hiCzL~y$QPUz1GLz`&r*cw2RlyhnO1I17hkF8m%i9K4AASPPAxRZdOYGDPB`TXbY zVr7nM36k!gf^s+7D}dOsN8=3I(KeSQEvmqL`YMS0y*&UZ99Z;JTm zx+*0^OuSkK^n3_>E_fjVm#L4-e};E% zC~xZx6fY~GJy*?GXFj$QYBm%CLV(6lAvh8|FD1ln((Nvo-5Leb_o39f&d-;WfE}(6 zWo<)-+m@^TMH2llauVqj=r|8Nmo7n+{-r$<&#L0nyxKH9zAwgA zE5f+0W`nyH`JpaxGeUK`!*A$uMk^b&Q^7x;rxp1bj+hIn{VR0mhkHZ-5XZ--FNYo1 z0E0Wa7-m>E%`~iAgHSxyAuOJ6ot;emK-M z#pyWA0pr*$felWx*ariul%ry5nL$^p3Z<3)ID>F;Lma*0<{eu&=#9pi#2L&B%88zz zd5R{lImFHxc?|8c1H?6#Z{d>pEYh9mf_y`qt0FkiZjv%D`F|USc=vDCN5&;&Vfih( z_`uaY#+#ZP^QvsR?6ju2Sv$3IZlKQ$^-!K&`u@n31HQe>j5L7#8^hP1V(R(w(N$Om zCS}Q5mFj*;-Z=qnwk+7{v*mJmYvB~@r#+D;feq!E(e)d@Gt5rlZyj?>{7xL+-JiG~ z-gG-yB~uCNv!k=^&qw%zjk_1eJ;AZ1hng0zV(-Ok8}srkFO+yk@(>*sXk{Wj zt2HM$ADqiDXdC#_ZDFpOxkUE}(C1@5)prq zb5a2?F4k$hh&8S5OZ?E|78+t=CHPB){v-bYvcx0pDL#ow5unB!Wu)DoAnQM+g{+$; zjtTHP2g2CKAdYOa!>iOl8;`A~35&-54@KKNZi@?sD$4LG+FxjZ+Q3D}T-RneFu*C9 zH*;B?KaC+~fB=b>ZliOc=2#FRXc=uA&fPm`kE=B4D)vQhlio%f(8WR&MLCLGrUrf- z1-zO@E_TEmz$7^kJ@`;MQ$SpylpH2Xvb?tQc%1!A%Z=avN)&(C@S&DNm?Xl+Xj>YI&BbN?`(=XK zvL7>HXy#`v@7e&Acq+%k&O&oUF0RI_@%BEib*dbzh}}ybV0N&wxNy~0^^y}JasP^B z_RloTF7Uo}U`baRLwnurXE_s(^#9Q*tqb2<4Ka<9d|gC&&kG}vgYsTX?#lVu@&W0Q zg_I}uvF-ddK#)7li21UQL5*LSS0J=y!iRb1C&=v}VE|=hANUR0#}ob$D&dJz*AZ~w z1=6LmlW&^GG34Wzh@6w=WYm}G@*F@JuECkK5i0$bdT!A)#ap>^UOsq;D zF8)KZWoW1gQ_2WNeB7!aCYN1HQH4_iFkVPM#psB2mY{4-XHP~m| z0d>$*7k1rTZCkX|kcMK4u)e#fx#wMOe>!`!OxF@U>$=fetGKn7AFj~udLZU+jlFH~ zurc6ZsJs$Gm+yGu^I#Buv)GeKzqNs?5!!Y{R3LH{lphZZ7{p+-RI}uac?#2snu69yFmXo zu;wGv22XvOtxIA9=mj}~zB6e%Isr~qMJp;}4n*d4w>2H#;LD~;F`I1<_-Sd`7_~AK z4F+s&`$KBkZm(qG=(ekxou=9oKro#U$57!Fm5Z(Wp)RKyi~$F*ihtsL?zn%+N5l)i zNoN&6>ay_1r%QY~tA8-+(CD-wuzVb7Coj;~DBpf=Ply`e|t8)75fRm^2$L5HpEQfxSpRg4uKn8@rHZtFTxJRlMhca?|ZlF;5G^GG?Oj$PJfG!O#2f6V4d?DTJ1NTXS zqvq4+Z{DB(X&0A{u4XNyoXwwqxmo`rR}~GQ8sfcVZVA6umgJR;4>hjJ$`rykyKE2G zmbj-)7e~Ty03rYkqJHqDY3cw68}AoKB7Hl`zr-Nka@aRK7=K0If1CZy5zyQ+63$d4u->E? z&P>OdM^{YcOqpWs47s9ot*s1^Z%BU!M6+v8)LH8ryb zMvCRBMuh1=`H*Mk5Q7+EAxL+7y%>WNbjO*srEr7}7iNZD7E!4?OLoaBo36FX@I`9YLtd^nC%z zsEDD3#kS=53TpHDDP2Qv@~2=9OS2DtQ`@cEZl*SReO01)6Q0Ota`K5P*C6_=fliIw zvA&NOinfvk_s&cngwrxU@w-3{6)N`?Zp)MV!A=nMWB$RFIj~TF7AfdRd7s9Uw=GI- zh~I~o0lv^-ea`Bvkwjze-+8_&H_G{;!pvOGuYH1oWnhzh%%weW^VLB!<9f)HPC8}J zCy4}qx^zjzjh;(ZKeYJ{ic0SBp?D>+jjI>PnV(2gGXD@E7F=9jgv)Q>C)brzO0_Xu zyXFroIlV14WXwVY5Z=qPPqb1e=&VSJU(t5wU++?y9?s8q+RXK#wdWP-&q~kL>;Jul z=`V73p#aeFu%U%2{7!2EIA1O_$`)BHX=wB`E&5fu2XK1p2ZG`=Vd1bsoDV7zlWgnF zMJv#AlQ5Dl2E%#S&m2faBHviVytY5-Fd4J+bIXF$R9>m}T6w-QYhfW+l_nGRm%4*KxLc`Bn_TguqwC#plz|RX zSsNGf7_gMj4n9(2y#M-mDX{RGYBuDBP;QpskB8{Krdhx(D3sGJKP$&GQn?5Ly(*i* zp0?$L1?He;JeX)|rbfm}QX{X#JB$+11R+rXIBgk6WB!eJia7NGOV^NqJ`IpdQ)a^zaUi7i<)M`J4{0j{3;b}{ z#{rf!2$7BR%QgMMIa;HKVq)dm^=~WknYX_*IkbW0Tpur1FXQ>g$76KwU+i*y81&OO zG<28MIt<}D)_h2hH=^3N`%_6VDZX^@UEG8h2(G7F|rAOq~mU6>;-b$fjVPbE!)Yb_KDgj_+*|NwL z1JPG#AudTo-IQy~ADx!u>;G>GjuLhL|Ic6Ks2~8^;~m0$YM_y4WTjnb=#5LP>XL+J zmk-g$Y1NwV{Cxl!Tb??)XyG8&GQqN9M;C{KX9qY@1HpZ9 zH245nPFz&F)0DGs0V{S9=Co4h(cs|R$nemD_uZ}XgZN=Vj{;igD;tuP%0M?!@c)TJw&fG@C?jhdE>PQHcCw@Yud~QkDQiM5bk4)R)VM4q@Qz`|sXcu0D=+ zo$`9r>UoQUt+teV6$si|hzm)vn`ZV*LdPa1sLB`cOK7Bt9l2@oR;ktqXQksSa{#&Q((^^$cRGc$EL zIqIoisCD1~2_eQpesOYrujS%Vr|g=kcp=Y7FMc7R3-(`7)%J2)j*cN;P%)q-{BGh3v5clMlOws%jIJzSKh{pKtVa_W#bcyhwc4*8O^hA_7@_;d`vpCt z=)@=a4E~eCzsSi~Q#NDH8(PsZ8h(k~%nu5U!m`jy8_}!Z>px@gh<@jf1|&lR?bOZT z%uI{5edscGD13&+OuOndkRO3)o3RCWy1QM<60fo+<^>>%^j3Hc9pwb=XY;aQ&&02w z%;NNv=|EhTrG|Ahh8VQ4r@IQ-x;py@Ay4iQPJGE&l&fed-q-+@@aioBjY#bobQ~^`^+F2 zAOf5$S$YkaTuqZ}isAo+I*@{(aHZt&@_cgMp7#@x3s@6jd|BO@AcK#p%%5npe4A$u zWg&J!9xK=xNbQMR8(`3<)NYs-_U)rt}qO_+rFVFV!rOo%ssXX5RhBot~Yxer#a8l2Xe*C=L%Tvs!>@Zqi|ZkESD zPEkF;M9BnmRP#Uy6EUm8qUJW>=c?MJ84=YidMiQ3?gS9-tGr(?LuEluJ#;=EOlD@w zmBS*SDiDg=l=*8$koeC@^>57ki=2oMfOT%h+G#-57JH4UDe}^lpxioTJ9dV<9Ij~H z_FYpeiLn7#5H&g~A!*IE%Wh>S0Hq0v7FQ%=VC2Zf;Ys#nKBP-b&|KyHC&=@}JujO( z2-^(w zd)p5MTEg8Xu(z8MgdSW&=cSC(9Zt6K zw~{M^FaMe|d(Hv-q4oWh%Ip{Xho7u6BDCU2n!FP~53Y;X5Jh&NZKesdN~e8}wrDJ* zSylgJq~=*Yg9KHDm<$I<#p6rjGf4F{Yu+{)&biBx&rWOP%WSj{zr5)8vn+ci%kmNG zWntlp=qW8*FCNRs!X)4XvuXxU85J48zFS2Q#&YO#bCiQK!TcGnz+vE5-*FR!;{Xpf z9-qv_4qA$OlUgXgBAAdx%CsZQzs8bkH%vp#tOHw7%O;PG4E(cE&_TiUDu$t7Z%KM( zHl!4Xi_ao6+;nY@!dH?eMkNSrsgT!WI8#_snHUFJ1HdDL@P1xe%alo{Z{4MD8yo%` zdw-D={sv$f%(rn?RJGY7GyllFU>k;5mSo(v$x73&Y3O?_-HHWh(16aRIq@UaN?a^S@1i?dh4e=<(<5(md*df-M;*R4X+aYicd8Btdmdc*6*G zwa+}6O7!t#p6PW=rRyhO@+@S z?3jP1^a>vIIV3RSQzojI;HaLZUbaOfmSI1V^)bet% z(mwk$cH?M~y_~eUJ9O*3XtB3(=8lh)aweX&NU{e?oe8hJi*29QyiPzB2b^`4I_YCA z1a~a7hc*29($+lW+5A1Qy?Qug$GPkEAdv#yeG=V7(aRud5>Eq>UA3U9V<8krM1UWO~ z9}kuzkrjJOk$B_1wWzqA2frUcoY57?M>hoN_4M!d|EacPAV-+T0ayZbENAmnweXqp zLhd0lgWPqBgimUk{kpYVg7vc80Kj06rWB8y4rzp$S(@73OL~nks#O}5fo@h}6ffRliI1j#D@ZW;wfOH8^yI=(1=SrVNZsg0}!@`q&Bt6kNW zUp+{wKJIZw)OUK22$L|AO!+0ra?6r+3n$?j)%e)ruwe7v=u??Q3V|rjqUj#F7N2tl; z6-#K_GNp2q<4kmzb6VZ)Kq2047laQ71e2vF_y4~~3!>wLulfojj_le0=YP?AcJn?J*%ImB@S30zdA-NDob%R@S z-ky;#tCQOj^$#}BQ$Fu{`q#J90!Cizx8c7-wOPbVy#9&VT|C;%tpb9#Gyq10u0~Fdp@zH zrqE=ZK^eQ1**!$sw=XEN#VKR4q| zgIF$l#zZO|UGF!w-7=51!7Wcbz5h?;*?+2aH)BB5Hm#n~RzXcbp-gF2{S|-;vq))@ zA;G|J%rrtBoJp z^J|gEJMuI6Z;R*~_htx9bX}6awHn{tM1oZUY{oX^s~BOd?#xawQdc+ul~T=wD~!Bu z5IW2c$)dLS4=9~;vC7c76Cd0kuPv=IIrwh**1Sp{sHmAl*)63;`OdN6X%+nyV!3x z2R-6W;*AVQcoWM6q#W@Z1YA2ooE;w7$GdsOZk4(y-PZW!UoyV_-L2}^+q0Jg@?uus ze|9u^%CD`cey%4o>?n5l)QrNIxC(>+eq>54tU|+okb+ddwJtZ3Ra6VNMNMQ&YLqjZ zP!fCDnS5>&gj~*>Nc-_l#^(5eupIm0XdCEqrfiC~`H#&j%(W>tkL*P_YZH7;ZG*U% zb#-;z19Q_V%H`%#m1}$rP<(y}EsN7LA!R3X!sS=GUD6s;GK3x}x4bz1*!AgWZiRNw zO5E#hr`Z>NxkOG7hGfM}i++V6-?n11Kv4=ocro2g%$iPzrSn&X9Lq|%V$!SH! z7s=^SkoX*dQ&)`z77|$5dtu|VudBUl;5y~u1INF5F*~U|$&KrzAsA$V@UxHW;sb*z zsZ_z2BYjBTE>BgRo05?DpV*7enLj!0^}#tMHGxBf)3Svp5@NQQ*XT{n-qn<&PX)XwCMAy zg=c*5)5tlm*IFoZ*NgS-X-MufnfWlaGc^#3IwnRK`T}ti%o^G&ksjJR(H*2OW5peP zSQbU`n@G-DBw5sS!_UiKec-lh37vw8VrEC~CV|1;SCn^*5WV<6{k z*jkKzK9Bx8j%?TvA|joLub2kNbXRT(8T ztdmc>O!QHQ2`}8wbO+PXCGs*ZM% zA$VK&2X~TQ=h5+_y~UQcN9`X66vOoavV2)ot7vup7S>bFDK12Vh+fD23&>5fjv>eZ(1MI>Fm?4+I zD4g{GfJPdr)9yDd&4GvSk|1rJ(MJ}s_G1V8hn$b`a%g&G&0-d9bBKlqO*4!kwgPO zrM_#|+|5CVJ3e@nDg0T9fEP;ke}1gSKa4}1+`S`x19aNWy199L$N4OmnD=y4fUblY zLf!ERnD#suSnL<*eFNi@;5d=G@!rQ{u9`@;C~pNlBC<0PQA#8X8If7eD!v-Ojfs z^OM*ry4H4syV(&rJ0*zSFEU zYrkItL>vC!S6Kf$u_}l$qMS2B6l`uRleM|^^<3gGu^eg|*7}ozN6X^s#fiYX$Uz^T zdP3E;2?c=EJyi5)f(8zN&dyJ*isT$GY|q!L(QnMx@>ux%Ig$J{z}z2EWZm!7GBPX+ zkoKwzd=z$i5ioNqJ!5)@I)H&~CY4U;!ya*lE7kG&!RssBO}R`_8AKhgYyHhRs-@PK zFFk$XeMu_db`g6R9e^Tw>mFW7Slj*}tQozB0surnLu*_$Oem>piRx!f(@A`pEbI_q z0-tj$hcA$wDxy9E7-c%&K4(lxzpa%V!NWn)TJu)neq?UFCPywIwqc`jSaIp zrbprc!{5*+X};FRLpRlELc)8@y%f%Br(S?nSV9697es`2#~W<^F&%)G&uF5UJU|f- zidU`&2Sh3%9$H!R&yGI#Y4KXN<8OVPQE`xbwz#>g=~>%gg*v_|?Y0mJbdG1;~v?0!rw6UYCl=j(g^Ny?J`8 zI6NWL$q}&3u2F?25s*Y~6dOhn`%F&ODXIf2F*S|7G<8esN2paJiNwq7hubJ@bU{p? zwUvGnWcMbCr4@?*F|9p0d6@P3f~N&p`tt+C#qqiskB1S$-+3;L@YNJh2Z7zbiu}t5 z(1SJTw&X2=Jl*N(bu*wE)Obf#4hcHw?WJF{Y4H|O-RSnXlDa{DQ!(4U@XXs1qFCGKipM?`wUvy zHg~VPs*g>5Y_`D9^z=&`UYmLLK>d{1#dJGT9ibbFr};;nY_U6+JJ=*I`A_9X6k~J6 zpW?K+OQOF7T-rO%e-n*_VsoRW^(MH@zuyyXwh$Q_QF9*Lo%!*PnCJ&1^g{}!tmn9q z`kn}8!D`-TNhvX(=y)Tbz@o`a878!09M-LPrgY`_yF~({1YZKtEd&{9{P#OHRA(dgijV z1c$Gsh7ZE0CPiv*=gUak61<5qE+t+KI%QL3!mRj*LQ2R>W!HLWGFtl4UnbM?t1v2p zn_}&PRDw@)uz^@indHu{sI$Of3!yB0&ZkO|*hn-bG!NG~B=*%DL$61jFmDKUOW5dge)X$bXLs=zrQ>YKV_ubKiQlP`;~MenTAb^c%9*+kw;s7Fg>RXV z7A~{DcJzoYf?<2GeOiVa%z67bjEU`k>z4j<_ZPWyOAO>Z%%{?=jJZ;Rt(HTiR}f@j zEIZ~HuURDvY!*EN!V=;A7yM$sw(&;^5Qva1(F+s7#K=|G+96i8I-71&<`VRk4#{ej zhbcsl?J=WL<|mG$d9y&AG9TWw*fZ{Az{R-n<#NlMzH7J6V(y#QS;g6MI7LC-*xurQ zK4?EtkZ)LA>q=YoNcj%oSgjCYqO}e_d}0js(}OV~s}o z%T}IWe;9V~`rJE}GL~kw;G3illunt*&+gFA9)>uD(yDx%OC78*>ak=X*Vjx_K2LJ2 z6G~ipHsEH(Xnx77NZX$Vkb4{21?M8b7)E?{SDNfMGl z(p^59tj0rw0lT~1)7W4jM9=w@iUP_QI*8#@c=PBFKcp^P*xsq(U4VXAt{+=)+C}(? z$i|h*j9U0RT795SedLvpq$j7ldQjq}>)fA1?lVaC-F{U><_`Ktk@ip<8D@WbB<0>zl{j=3LGK#C(7 zN?<)!2#^R9Xmm(C(r~qWys$%su}BLN)>TsEKf7X(cN}&aq-wP;Xki9*@`sL{psNx6i=Ut=PC*I?&ZgfAr_8A$W zks-DWSdN=>h9A+Y4ViuPNrKHK)Rnj~Ekuqbe%IEYe?>@Nd zKj(u30WGWjZ_xeX*tLi>s{)q1NIi7@@tin3^jt^?dp!G^@i(T#8f@9+o~h8I{kS3K zXWZE4{u=5-6Jj(_2`SQ>=>r>eQC9*Z03#hT>H-yQq>p^ipC3LF+Ie~wk(&>*4kQPJiD?NMF1W1{y!R($y zLio6-t+{&;hm5|2L*gYhT|ls}5(l8CzfTyY&D9UsmXq(#)=QL904DiX$rtOxF5NZB zSyGd32>0m#-1!b$Gj!T#Nyu-DfqhcnljE?{=83eXMgK@O;5unKe?8=`u4kq9d3)Z^ zxjUU20DFRWM${SkxEqfrTtl_}*BG)r8mSlpFq`I>|466reDnPCo%2 zKXfhgsd%MuuB3*ssSxEALNOqp>egU z8L(lU4*DOzd=#prgcvfz#3KB@-(;fe(lT_z76l-u#~O6GSCf<2+?ol^n3|%WvyMD1X>}8J$Nb>;@pBxMCqW07b)e?KIC!OqUm_AETeS zRyUEDY*vx3Snh1iapF~p=RKhAm#ctEpFwgtl)5M|yH`K!5FwyMV0Pi_yx-Rkk|_@q znW!~T*YhYc+YxKbj2uKzo!maM;8d=1RX?C_tLl)K9~VQ-A?HK?6<8a{A@Ww#NI-sRwv!<9`AUfvL@ov8 z%>;|Leq$`m1^OPcJFf~BlW=|F^}H2SffMTc3nbNm=xK&?VN;O_pCoS^d*p>@wa@C* z+1jIf?53|hK95B5Le<&>zn5_{S*eSSp88L%xxdI!6&c9c8!<$|=Xz6;-}IhUK98vV zWxyV|gAZjOHyO|fI<4jd&u!DbSHFhiEqzr<1AH;9O^E5QnXY9!C-+{k;MBcI+YhSy2UFYnQX9YW(pIhn3(1&wcL zUjLJ?IQ^=9t;#lTzdgYAt(41p-bTi2lY*@ebR-eE5+M`n)`^cfbmDTtbTuAJg_S7qs(WS`&418N(O*b;nB2eUQn%H=X01eP;@Rva`$R}*)x z8Q@A8Gli7G1l6V$a#=cv>C@GiIzScmVjne0bCQ{fschB>ea%PI&fM8=>M4x^HV`D{ za4`q(=ux^Jq+a3jEM27r?8oFTfJx5(-3W=u}FhVxcu^zlU|7v#>TS6|paA&2h02{7K@E=@@^(vOKD4!O$U+SvyT;zIO z^+J`Ne?>(%sPfk9Jm;uuHlLl0t}&Y@dG83wk8kv3`vOL4xIih%W!n6cO&353FPb%W zsSInLNFkGY;y4>x=gcVqNC`5*I-toGU4}KV$}46V_qR&+j#WGxah(cj=5vmJG5GKl zCJ5HUdw43-+KET`cpP}jbUgn1D1f^E6&cJl>86JE*(dgC-nkr2s)TALE)b39?-qZTj3P>@;9aswK`$&3>O z*`$4aG)aa_%_mA1jd?IPc2S+5jX#Y;fQ{oU@3vSzW_5nE{SeH5z;r?K>^H2NV%A7v zMMtc&K|;jj#~Bxij=tT`gH<@)+z_Q|c^R~1Nx8_x(YJ6yf5NIFcl`yS@b3bfkip%F z<>}RXsvbKW%l)7J+~3hAn1V4Ug4Bl9Mf{wCRH)h2%&iokE;Y}Nx+uZMSsyVn20k;) z7H2m-n&y$tq_ZuzMFC=i@84|vEp#@GI>v5qD~qSz8FGc#1`M>29$2l$t);uNXa9)0 zV`B5Wu7_jp-m>cJD^gsKx1_444K^Q&eT0H50!COlt>k?=956aY*gK|93twx&f5hHE zKG1Py-~Yc3$$!^!z0m;HwP>TMoBEgcsFpwe73I+4rY(kUc%9mhwhg!D880qf(17!Z zUT7iJ%2Xxc{H1C%>g~V}`AZVP835@TRa<5!2mJ0W?ecWHF8Q;(?jctU^58=uZ^keL zGt$PqGpE#II8t$fsZb(ti!MS3Ty_uXbTZ_cs6MDnJn^w4RKel?o2S7Km@l`-F*!bX z`USaSv#^mX$u1%MoVXIVbT&@E{;Ay@Sln|Z+3$h`uh3}o<*g|n(PB`1GnE|ChWQv& zTb#nRzp8T%o!~cfJC@2#1|C+=rF6E3GE4cHKc8viay^8P56Wj3QxQY9gNvzhYpjjX z^xijDmnzu{zo$VjDwwFn#;|8tE#0o1v*Lv^StnmX_!9OHYMu_86fZZF2sKlDY!VJb zJ{=dwK~oj!KOAJPb;V*^xiEfJZ4UBN(go!V!4^Zxis#k6k;5Kz@U8Gy&)4|6!j+iz zhPo8y6bTD?{$*N~Z{y~9EmL1?Wi1^Gq&Jz3VV)xd+#rY`Ex>GMPYO6xt@f6H~r)J55Mmw`329?HxiGu zsijz^UeZw?ZDmjpy9+#Rk`ynDM5)M=PptRpBfSK;Kif5xXH)BJpLdZymMgbuc=iQTZ1VZDx zM$31F6|O}SJ<)ZxLDa{6Q%^C7TKC;Uk!u1I^q&-rH>j&OYK`N6h7Jsd{_FW0@H($F(^^?*y>>j~-DPFw$5yE2Y*OYObqfPUn0};M z(Y!MZ1C#W%P7X8!7G10ybPtB+s0aCXAER|>%AKZq0%J~>WL=c`1-=jsLqxc>Wfd-sR*GnUl$vDUn(=nRC~z?ipfjF74jT^ z6m8@bpnsLXxC@->Br&?ub`j_cR5_ce?OEQ4nH;ucHNZF=ti@)*oq$rxBAtaBbS;xs zhPl&gSn5`9z~O&-GOlaC(h*MWTC->LIk))z4p4oWmwLU^?ppkrKP#f>NJ?pT;vL%j z*tz&pFhPyq{)t>=|0U*Q!0)w7o098u+fP0onm9sxW|EZlchg=LdoF;!T3bDA;^JOP9bEIY)!iPlHJW}ZqbQlp9!hV)ko%-`KVAda?ldYy$4_r}2WtFFECiT3nyO4Gn!<^<)F zk?qBcHKVgt(W8wnPQe=TSZ<~AEf^K)*oLK+gMupdeP~wjyfBgSvV`3WB6z#d+auiP zRDwe|EsKHj27Z#xY6TIicab~Enm%{*yxq->$O@HF3O7&ppYt`I9a#wK83^tQ{}Y<_ z{Fs)%kp)?xrynJ}picz=NNbaVQHdwj766!ZKx$up$q*vRT{FD~Fw`E>Ubg1mmDq)1 z?k-YGQm7FmGVJpYLauxVgug zXSo)-fw@BAdkLX$0_qTOGq!v+kNVO2{`)gG4u4s%Z~F~=5rW}c-BAYDHu2J#Q8$3K zmGn_EZ3;DZTXV%am#ma=(%*dIWvOax6IUZsKA2}rF~hxGawFD#-xBU_O)7(=N@Wwa zY;({t$OEO^lses}NpmJ{^vOkwL|PNGqgaA;(xV;SQktFKo25E|#g-A4&jbBWs@}J2 z^BwoldHO&eRU(1Vshi)*eOKcC7~0e4f%EJur!2Ma3W{i^f1o=-kI*2lc8PyarvGB? zzkmKBCoaP1%b8g?u&EkhsEu0#A)opkl^M01VOPIHO?}^k`}07q((_=jyQ#YrOTUk! zA4!A~Aqv*oSQD{1gVR@X+j8C_mEPbfHG1K>X22~73%dKv&xdp7C-L%+TNX_#VlMOl zWDu@Mh%EJq$<-IcazDFwR_PT%A_S(LU!mOj0Ha)U3=fCO%sn!zvZx%o8=79Q5Mv1T zGwD<0NSMf!RbIe}oTVSiXbN=!K+GWU#%5|h@){EjFh){D@tLLtf=LIH!P$ZLkkMtod38*t~mGr2QL1OxBf#$8D?LH!6+$Z8E{Q zoO<5GG{A~AnOm!>H$IgKam`$9nL^Is=7JLY>Sfh#n=3&JHRsk;bxXwz1n<GUe zOteVIV{-|5IeNxY)AWiU!~ZelH-tp9EhsOrB=V$4#rrBand>pjjmpaAzlkwdTHHB! z|NfL*GiL1m2ivb5gpc_@Yr`IX`SeV7Vpl=?C{Cm~I;4Iroi341|I@TTsMnneK)}(D zw^wnt!xCWMeI|QzqLD8)h-m2}En}wyRMLu^>cvv_hIR!=(P@u-fb`2D7N5N zE@zLiN<1qs93pr1JzQ?yZ~v9pDmx4lHy#rhtqG^U!m|;LEB_t8zsU98W$d=`FrOB- zcjL-|%D)b`KJ5@Fj%7DE>OWB@3w+$!%HVU^cp@}P5}k&lv8|z(l!-dCDCMt)s`FUC zu)xn`gq`q>1jYK&{>s4JHs>LWc#_E!GaOx8^Y+xx5A3Qe!HA$neLUSj@mjFCEWc~J zCBap;_wrAiaF3kY_d}fng=>D3xt*`SJ-R6F>hXB?_^q=|o*MTDR;x*AaZ3)3V+*0U zpPVDr${Ci7aW8;_uN52?*xw*R4fH*5;ta;LUfR@=Lus0VgUpz1vr1iE5e9t<-g&tp zwC0ex{i}H?p8#Uuy?T<5u5IMf`L|_5uefU(r!H);gI^Uk&FWfozx4L_3H4bj8TNV0 z4QK11$pdp*DN1ZB(=E?^w`50-CN9gJvh2>1L`N#A(1#W+MCm`X6Cp5uRs3!AOET0^ ztD4YQt=McD5%Bil~u^>w$M?GF5H_p=c--V?r(melyx-n%?37vJp@ zZ)cd%S=Qv_o7Crn#P!G5ftjRxJpNNW`Djo?*1>bkqv-R8w@i?tPxQ^IUemYXCtGbB zPGx+U828(}Lxc&xB%eUM2uL^XbNFg}Y$KFmMk!4NF>w+nwiYL%!B!CuhgtabI5J7q zYJUFA99q&#&m{Aue3Nu&XVz{{#X18p&U)2b4Kq6Ww|=bPe*%_;!}E1*IuqDb?PE;e zoqThBdeZx4a)9mhM?Ra*A~>GLxjgudhZXHhCWTWYxql`Pcvl1;GH!q8%rI@MjBRW@ z!`T1G3;00a5v7O(Y17Ua{f9E{UvciQyWGzL0BZna`Y>y6gh@)-dVQ8X#o^t*qTDz^ zN+$J*RyXPIyG#jOMag(;w(}w8CCq(IKrq|+98dx``eFQ-euN3KvxJKIt$G5s(>;+e zRHd9wh;bn^cFdv@g~BD~a$KT)ShVL5F|&Iw1)N`TpFh(Yk})8$vX^o+~`$Bm+XBOoQVE9CWT+eMWtpaA6M1_!2k-E9Fl1=v@S> zOVJ|901(k^iUo{maOOhvS|esdmO%>%n(VQkIU(k?s|upRWMMIt;5{g!I+?#*;7UPQ zo7p&To@dbs*EBsBin-y8L#M@3OvW?frcZXsqxF4hv1IEk4vbg$__=R^$4mQ)ipO&s z5oMR?viZhz;t?peu+@hqu_mjlwkna(7cVts9N}|S6$Ah!dk?1DrUYSYhCaPq4%%(g zJ&i{-bt3`t370Q0bCZRD9MY>Ni!Da1rA3&L{Pwn?uYlt=_6_`1Q+HHSnWP>Yn5?cx zwB7kSqRZW;^vD+!FaDYin~7fV2s*H*FR+ay^k+3X>y#KGQmfMRI9Im_L-e1sD!G>3 zG?aoE&_=^8{zS6coGvdU_aQsa&v<-n8fv3!G=zAXV0D*veDEzq~cd^$LIe*A~~tA8Q-uX$JL zJBED-Fz_aWE8T$kFmk7+C-dF2apHk z@XX->O9IlOjvy^M(?biE+1{4AgZAAhfXyaXjve(6jHZ-~Wx(SLmBBm~6&VIa*dTlf&dtrs( zP@)?TMoa^6?K ze|vp#ls3+1)y1LAxU{O4?6@o@(s}}Fb3>HX`;V!7L6+-zk~78OEY2qUsN2hpz6ya^ z?kdxQn!$v`Mt{B%e<&p)1sS~DhNGCVBnz|gD^S$MS#wE+8nR-LQ;FL`S}h7)dS=Zh z%Ai$YnmfCGF&|9{m$K2TC5*k7OqP*HwMVCqXP1;uJhd>IN<{( z5Teg#A?3HZzR=6yV6x!C%{t(z# z1PWCFGb*yo3nxhcAOYfI8P16SNfeK$ z;|Ofa#?Xak}CqD_p#uzyy2LG`#DJlQe!BJZcN#f#Zmki@(W`%%w$f;~`` z`x`RzrMj8N0Wri@+2|*$=n5$FHs z@eMzI-zJ6^_^Q}yIURf$^+c5}L;n+T9a*>9$DEm(BEqW|oP_c%f(1TE&_A6%+N|zU zd=R9!8T1V#1v!HkD%p7=rnSkkG$Y3zGzT<{p0GJ|0kwDb&nFvatfa+X(J~_d& zzVD(rUqkyC?X>(}Fe@!(e%@MMawci0BcO|db>4SrZ^&T>R;8G`vj535eI|GBB$~*Z zlZC>aQod~92!13;k=|9&`sVF!GcxkSIE|%XAU|K*(CguES=p!Ct6->B^4lSwsN7qU2Fi?5PKzOzE4ohuifO20 z0+-W`1}AlZ+w~ppTtu)(rovsg`YcoSnJ0oQ9OUtS`OM#0~|?lY^SD z0;Gbeb-mE1yL;!cYR2Y8t7FN^f;nva-1J@(?n_?%ii@TG*Sqfa(cn7^D>B5wgSb7rB)c)wHs6_i9#yr- z?oTS2+|iobyxgl-PdTi-lsCYyd^Tc6!+C=f!`niSxwh? z#Mm1@K%@hFCRW`n4Od)nXIS-=qpX^u1XPyCQ|%FES5;X3H2uNMsA2_~ii%K{o|Jrd zH+6BT(E`idL8no3Y7R3m=|PlgI_AyPNJEto=H)u|npNTbC--rS2}W@-%tPh(tDF7M~$^%QdN6nHJ7{6W!94b(&0-p9WiL;Y!`9htXTeQ7|b2rJ!A6F8gQ^WSG8=J z%?VF6jrcms)^p08puS~@zW)w(X7pA~&b86pyo>5G;0w(U^L{c-Klypb+4y0K;wrE1 zAo*fAF-fLpM=S@TJ2A-x0JJN$`UG|t)I*WjRWR*kew|7RlAH+lT@=}_wJEaJ9WFok zlFMT)HI7xcRfJPho!Vz5GEb(D3o`j#LKn{#FtY&9wfj2#}DXinteJEr?l;_fj1 z;ysw|HBJR?Qc` zd+W_ob|)#~;4wll(rDGB=yx1@2iR9CGnpc^>S=5s6!+{y;cUELA`SZ76px}VgRA>` zsTo~|Yc{Q#g;PS=JKS=|6CSr7+}E1-OO~BEfU~SizTsL0bDYc981RS~MDLiqiW6M_ zJ^#nx*M>rsG^wrejvm#~r%BgNqxrZNVS#?69Iki0>-ffAtK7R@BF5s2ODyrS>w7<` z`3a^2^kq@FU%2Z>cB>Q;L@C?hQPDsAara3-X#anpV;~o{KEb$BxM@v%rgVch&PuR~ zabV4llrPgXs`@bA10aFPJdbmP<ylE?sJ$kYhw&>Htm#xg} zPn>)GC*XX~@7-OVYy1OrM>9YgQ${NxKl+vBVB$E}bBV*DlvMzD01UT?8t2&2=(Df_ z;0wz))W=OInwrt4Lyw30)JE9@BUY+ODe)7eG_Vi|dP$zPcBmPWUM3*)ICMDhDg?9~ zsWVJ+GF|co+j9?>t)OFHId6SE33g%n?f(5KmqNF}C59`nz=zpWpB`u5rxpAH{$f(#CWh zJM<5yjfB}#>o{S2f@vBNw0V8F|n!%Q8 zTvqRxi(4=e!bT9*Mh=A6=GsK%1Ejf7pkMGNt@*9_7ujbKv3GF__ZME*j z(f{1*S>d{&OlLg%7-N_JC)oW(ZbgcLT%q;MBh>)R^({fl1!5@QJ4G{gLyhSJ-VLis z`71O=9;3=_YMF+MYjy{qNs{ouTE&nc>1q(b@{NNjwfZ8rj{D)B)x7;i%@H`}`(v|x=nRKW2Zv6f%>y%|E#NxhO%~Q6g#!R~;gKu> zcMT`$mYiZ(3iRD7tQQ5A_;C2T$jya;9n@OEBbg?A3ERzN=iIHA7OEYZx0y$E+6Rh z(dmGKIL3c?JQ}YF0Q4H3KxSm#D?{Z#9D<{&>S|=5=7Rkjn(kFgvB|peg-4yu1&bma zH=CLJ%-64_!@osHnH)F3r^anqxe;=G)`oJH7evR*C66Zrz&IU8*|gk^1lf$d)EETs z$zmg#4pNC7e((P6Eq0~1pJCT^Mwn06B-P{5TDPRbsLhmbUSmOpMY&C{3wG+B{ou>W z-xq-A6s!&Ahp`1sH}_VtFf2p^Pse~0)kCFsPmwT7Y6sv=%NizU_?ihTz?LeGk(e5h z);PgSt#-yh2s1LyK5E}GB71=crUTC>LT1g&X76GoQb?4WcbydGhp2ipP@rJS5~7Ma z*E~o*T@QDU#3PpG8joiNn5#lAPgoLBQNJWLAL}rs_s|y@enBKd2+J2bl}`WkZ+*GH z$k9vyEOVXKv-db{mSXFy;x9Ob@^CBKWf*4Q(R_g!laq}k0Dx-|`^{3O52dK4f<@t% zrMVm1&9*ssC1m7yN%B?ca=$N^#f~FXL|`EAvogIn2e2<9n#~X`IL;F=|wa5 zQ!46ak)5wT-SMsCElC)5(;0?`=AB!AV-4CDHR@s_0iZXonK>k%WCdCX28;Qck?ZR= zPP+-Zr${1@1QB2EH)&2AiKz*kRN4UFlxXt;7tT=}FSCNTWCz|69D~fqxY0=4>4+$> z1V5^SH6cqEz`$1pWN)&z;F>oW1d!%s70A`Y!^JFQO zu?LGASo@+W?%Clx-e_|r{0-A)Vq$84ugv&&$~+-`Us^B>TIO+G$=}1y-)Wrsk_b!Q_+{62D8>V{_@;V zQ(NX;NV?4{^XMyEsNV{=ew{y=t)%Y}YXq68e(l<`L+7~lPxLg^2Z+m2WW92u;+u%S zGdY8rq-|Apjp#QpmeHT^YW94=#K~0dfr+PKnq!vFlHtl--=+!JgdygM^+C@;(&$(* zMH_ytV+WCm!m1q)QQ$yKzZ1MQyEn^;8vJ;!7g#rp$oEN-FlC0s4}nO-2uA=nC=V6^ zlmdADAG+Q%AnE^Y`v*h?Ma7MZ2Ch(1ai(U4xKPm?XliD-x4AOwYXypX?^)p&5o*)X$Ra?|hn|L^N}U*q#YpYRA@p6}0jzK`QL6(9Pu_JmGp@Zn*G{AFAJ z4Kvm$`G23k$f2(Q_~zOy?ATzIJ=cxRV!|V=a=$2>z`C;taGuKEmpf%F1y(Bu(%v9S zI!3&S@KJDX03YatnaV!VcSI(A#{T|th!Em(fXS>PyLa#hhkYyU$S-VR3M)d44*&i3 zMYAJmi3u@?o1S%kFs^KYYY&J$Y;l8R^IkWE*bdSA6%`dl;@DdlWp=;o(j6uDJ0mX^R2}Ai9@Bh0Jc6*HCOq z5b^*Bg5BS9uc?f-smBvD43otz`B+-QC-`9VnGu>j4A@+tAwpDB3dq$U(N~lKC^Xlt z7rvoulTuR1z)(U

          gRGj&8g|Lh12FY(qjE4!BC=ICC~r0|+tBQ-vtq%u~$qzWNUz zlesYslx}eG2yQIwN2xcdH>!RbU>HIpm5ZwP(pnbRexPYLZSL~W>y^7aDMty2qieO^ z8BHeMz1$rHyhnpnY~s+dk+{~ZAo~^>9=RcT^A?@bjg2paY3OqNs~L}XxmA)N51WR6 zoLM&3F}|@HI3GLBc4k`Akzi+ZsyWPCj}xbAenrJ!b6!zI4C$bvEM1tu2+^pW_4F%0 zhpeHz`>8MpJ~GSddg|=k!X@!`sq-3Y2Qs1V;cmvUlG^=#ChP1lHmh_Q{vi#tLBIdm z6~()LZa7aHXa8CbmnF}I>N>0sSUBNP25<6!X;Qv<=QT0}Or}M*a(>eCLTd~Bu6tf;3vX& zU~PPDD2>3@8+kzD^P|0M@x7lpf!e^Yd5f{|6iT^i=4443%Q$Sb{?lK)-JD) zhOnZ(grG7eJSVcub@{4jlRLhQe|?%#DQN!N2ZOQH>sikiO^qP87o z3a-SLWyHHFZFd09f~e`rzKgbWY;KqU9vTB zdQPE#B#CGv&{zh9?_LD7*N5lS$T=9uLzlFq8)}}t$kvYBd4EF0R`@ezzW1@Cm1#)z z($XLO!$P=zf6Qmmc+%jh6Jpyh+1H)^ncz)O>o}O^cnYT@rK6%ywmCTsxG8Ht1l)1m z#&Qn>;|hJ?&1)rGrrc4L#%2zif(+%s9C0SP?1hL#x`EaNCig?(fV&BYcLWj4kL18F z$fC%ahRv9iH5A%|QCOyZ15vPkBWn3q`-Rx}47C;0B1A;&PzuN_HVX~IUWi9bp{A1q za|Ww{2$C8ra$-CT~N32#f%Ja|Dre|~Jy`M08)ITfNXJJm6xXT%pq0*~M*E4>x`r*QYf&43y#+oqv~ zz9c)RR57h=KCh^Q%M#%gkFZdX65+*dl{Bp<%(hA)C(}eYun3ulrGuMIPxAg`z3xG= zd9$G_PCYrjp|Z>UUmMncxozm|EbD`Zv2Ba0rF3d-y;=b5q>Y;bk<{qCq$^!ZYiRs? z-(_7ggp%vmG$+Jb!r2Fgx#G`FL+GJu0*oDS)%!iiu$P)sgD<^S9+e(@pIuhonFp8db+@KR3)KkosyFX0}e;VQ1j8&tAlv zl#c&?_d+qUW-)Jb>CnElU9ut1?S3fF^H}S=qZ$XFzspWj)hI30KszccYPqD@ngX<8dv+mTjiMxl&C{R*m0N#(0S&H)<;8>rmYr8GhcU zBw~iLo%_B7EFZv^Y&^I#ZXs~Pt>U!&S?{9GMgCVWE$_|?lD93Ndx!>V{&TUmWY<|o zLP>vD#VN?)qqNJ$Wmv`VtzP+55U03W#t9DPL~w|jv^0k;zC|cT6Bt3GqM&86$1@8; zl$;>^ClS3NPP6Z$9$pClJ}`HmG>h?8eW(&2lnyMX<$66UXdV9b+JCxm{Y3rYS++_X zjR%r>?Pp(~uTzj5W5;=PZ5Y{o#FG0&z56-S8}DAXC^?6<#--&)rl)B?U${c0HS<<5 zWm3|)Vl+^e6(P7LAir7lvaITYgs`KPoQ;uyGzP5=lP5I@QNS>|rK9heq;J=RQS$E^c{LP*-p<%bM5b=gOU<@8jl;@=SDU*GfI>H#S}h%JO5w z$oX%=ZGYu%w<}e#ZbB#ir13aC%-)=WTUdYSH4DJ5i&(2izA(%jQTc8upCL=n#@!6q zx_MZEDsVWW>XDp~|K!tA>otbDXX*W-mEvHU2{!`@pG8O2j3mO_%_ea54?T8lSt_%D zO$fB7JoS$Lpuu{YXbaoJ<^dS^Pn}`_0~b6?Ol6MtInB_!cMwx z?aw9esM7o6SmZx#zOU3<;YEK`X%1J+rT6npt|~u#QP~uRORUj-`s|9pXZ^yJds%K% zoUp}(bd6A62&!Io+f@;e0Cd@}f`PXIFiYwymt4c{CCIKC z46UWg@oP4u$p}-UTjWIiYAh~|z8R+|waHyk2QhuXt!(dGzVsenbXtLLz-i81W-jSq zS+LS(6q^;l1?_miJ7=a}D||OumDm=RoVgh9?UIxCQs?dUqU-hDFMbQ&1cv0V_Y;O- zm=-$V95%a!y|ME08-AG8kWE>s^ceha zR29h>YH-nqYaH@4iMN90HD=<|Z`S8toi%erKZ@~gBs;S3$w+I?tvlp4qPAb%qmL5K zUV6gUcnlvVMlX+h%0kPp-Y96u>>A!6nEo%={Y5S~lU3#X3~f>zFI%UNm;(a%^aRjQ z);gu1F%IaXw1%!IAXgay%Jzz_G+r8f=X#H+Ha?LN#a1OsunV^m=5mY7pW?pV_*m34 zF`aL1k0KQk_crR&seJmrm$ZTj=~YwQ73){cLPJ!&;h7V^PY_&Ao^D8=a5GfeJj&Tl z$-4+VIQsDtk*k37-dQQ50E$=A!SnloRIK5hiz;5Xuaq9DHd;MU+*cCzp7+Eb0%)qv#)0dGo$64;K_gw~d~Sb4e2$EA z;ICkK56fI?+dH&jnUYt4&Mx#tqrPOy;yfOtP_ml7 z;z?kmj>ViI&BvMM=N6&a3(6YqFeYY4Va7C*1Kne??xc2GSEYc;mqYlZWbm$`Qd@YP z$Kn&w-G-_8@>60|WX&s!XZ@dDHRaOFzm^pRISWse2Hr9Bs%A=-35?wNR=;?j^c4L| z0_e)E)#7x&w|bZG^w3O{HR`ft9+DTXKb;fe^5R6ebDlG>KPHPuX~=jPHin$s+Ut!? zOfe{<(~hQ)EHQf?cWd=lNaR3Of20_P^~G92X`it1%h|_e0|BaNkW$IaK$fPy@n~Sys-R1 zQK|p<`06nx-`>)|q)XKG!-aL9(f>@+{EJ+`I~H;d7Pb!uTPP z{oT0R5$!p1j9VcvoZZ>ThQk3*@DQl{EGz$+SYW0o&;9k-TN&B=A0)JwYuCQC%|ZA} zKI}i@xnasmS6TjXDdScmMe~7N&NQWcliR&*;{$Ww;7Zu3FTm@E(!cG?6JHjFQmd#Y z)ykRf{o=48kOaUl7cnzx?qY)g_3>vK3~&YPUiTw9Y#7AS@WRZ4kWD?%Nxl= zuxEFT!|<>n zGy_fr5F;p4TKZu(68rBS_X@tJsa+}nvd#VuF;rFsdRHtv9HZAaiDfMw1l&sH-8SeF z9k^B`!WYr{(XWR`$tw*08 zc7ZM!hD9BuW^&D%HB%m1YEwnHV1S!<%HrW@2Jx8S#qVkE+2@|j5|T7LpON7$2fxvi zV}zcF6}o!iu}SCc#ON=D0~eXCm7lglG8C|kE0)K8XbP_HULPN5`e#$=)E9}2a7{zK zK%_KjW8mX)%ZbsP5$q5rNCqwMOXphW zF9fYL29D*7@3y}^x2sZaY$ux)y?!S(1tlvDMtlOD^k9<94PP)t)@%MNcYl#PuLI!P z@He!6s1p#9Ml@RwfL{|}=OplW@%8Cc9kpyQ!GT!seJ%@s4mlBo`;=lx$N0$ ztm4CZ=b5FLaJEZms$0CmLgJ$$)>hZkyrlkyEE!uGbPbQaxeg<}Fw*fyepLR`%6z_xzc+g|TtJHr} zf5MK_or6ouy?4;SfP*SC8hVS20q5&XNDo=-v8&O>tD^oUnNNssS?T(FP$)-Zc$b4Nvd;N z^V=KX|G{abtpAf>Am=^W(ALSiNY^1GgFsygScF)a1gH5k6awG|X4uJ^zw@yM@Z0eA z3dsLDPuyRAq+-|8#V9oD6we?QuPqBtq~>c9L#tZJ+M;DY3lxHlMb$q5@i}y@te2?1 z-h=6TN&9onn-gbEWBxD?B}^|feH{HCmC8N%_JKW-jZ76f~lU-iG0jV!U0RU z;xz`1??d%8KK-ymzj&SQ1O5sV`@fXI>jZ-x2)ECCyb&fyWGRM^8Sl3jzUq z6jvBrRNO#>xX6Ye8K2h?_u+?6@+Z}B;xMs}JL|FyI8ejEhAaO&N0yaV+tSrP!fyv% zrQWQn|gCQl`bbCfE@7WH+gfy$hH?l1Ct)I zNh{tTT*JLsM`93%V*Nm|i)RC*lcL|;Bpx`O1Yuc!6A~z$Otu>qd6(?xGP92KBRLymLVA0KEJ|C9 z0a7aL6>he}RUI`A#VL{k)0m^FWykczUXmXl6-o#Rzj@DQ1`iO@f6ZK1^Z6nuATD`? zIhJPkKb@%mf!yCBcP)Wswz+69&E{yam$hTIenHul{|zSr)*TgNTIFNbrHzRta3rmO zYCt?}QUWRjlnK~*FLPzh$oQF4(6~$C`zVo!{$M*}vb?{Ee9|Rn0>zkI)_jjx+#g2{ zj|vpj^_TmHnd6?)@*TJlc|_tZrT^AKZQ_2O&a&i7Y`eVs@4-97*PAxSL?g@Wx|s*h zpFg#gl0&B~oj=vYx}!@QqU$Uc%{B&*79gF0@}JN0(|QbUo0X**mz9(jbZn>iYCS@;|xAE zyyA5Ka%EJ*IrtoY6Ms+esMlu9Ae*dJ`ehq~HUW?CrP&of)Q){h6a^j=Xw4-GS{_zq z#4*lg!hdpn4Ojbc)vkg!;4rY6$^0?62QD-oz1M@GoP~yP>x|(bxX&C0Y=hf(Cw=z%$|dPvvY3(qGqH`Et7Per+=|=# z{XVx|pD#DlWCme$q}&oV*&uYPnNw;i7eG(~k@+1=CkE0ru>i{2ZAR;aEKp}~()pL&wCENKwK-R-D$m7XC)lPFHPEpagp=XJRA$y$6 zjQ-OR)#slM_a^JisDpbWm_-5}JHcfAQwxa->}!M7KeDdqJk2W>x$B^F{`a8pb!MsO zzYT={BA4XMDsqPA(+^coqB5XP(?MGUS#OjG%5F9>XDT=2?zHVtS$x8IVHoJ+EYAt> zU>XM($zSY|avD(OatxSTGB1&S%7N7bbS3>>8WsbEG;>BO&Ya8pFgkB}YP|i#m5+Wn z8STO+4ENkoxwGopGI}mw`3bMq-*3N>@5;6S+5n%wbP4tL?^;9+?SI?YlCdeMx4XV{=ze(kZ%%9PR)!Xaj@13)$5f3* zXpdHXJZM%vI~Lcqx@KmDX;ZEhREt`EbR`QO^GPtOYu56{Mjzf%g2|Ne;H^}%<9po% zjFkvnKCXqav_`>me)d|V#i+}AFVh1jvV?JNm=Yrdo{EvnU{5CD%w$t3?7Df|+t^mr z3FPcuxT5@xbr?0^t+HXAZ3~pmkeX);He0+nSfB1YjddklalLpBXA4)49tjoj$TN(x zGAZZtPz%I9^^;?YC#Wwi-%vc7H5dI&#FsfLu(Q+m`uEPrzlV|htIYjHu6%=q9NB!D zkkzuuYnevGbl-rubZTGmG_e??Y_H*EuV52ZtQzCvyJ!LtW7jvGb$) zCbc}ia*VI?@It4ym;%xN!RgGDmWJ^+X+>*U_5;e_l)vA4dG_oU?ELh*u}!aY%)_{k zKUhMetXs^i5NBE68R|>htAy;qd{qpgXq7CB9 zKhu7n8t!u&R8cY+h9-i-;{Lok|4BWy_&W0ql8vs9yDDPk#0El+n1~d184G|C3vnAY zSwDo}*<3`RqPtNsrfhW3HjbLe!7sF8Htm`JhOT+Pwc3g-6->FEtANj)QC!?v=Mxvv z3t481ZKF_B-}dWZ19XC~*r}%XWIH2VlYC4mhqZFavTNX;>$KPA`6LEP%KQ&(nk=vaIa8zC)Obebi!6hX*efHXJ<$teg z@~&Gv=A>M$WVHkw0H^=C7T2RltBX2^qeOzo9}q~jY%`Zgkm?s%t&Fqx6u9qN`!+wAphA% zc9QH<#d3H1M?qJ)j#&}=&nE0k)cM@MP=K8>7sueQM0}X2$dm56)y^D3$YCELHhTbo zkR0}MMJ{h-08Dv%doUMg!l?&egGsxgpZq$>t#g4RC$MnS4#< z;WIO~xIH6&UHK*lv88#V(aAd-V~Lwd*6?q#ygL$!Yzx6HtwtsKag z&CU~_JLxQ-y^^EtU3*H4n#{O--wjq~M%EbKa5@M+Y>j=Mc#k>pqnIN}@@VFMV2#YA zl#O+i}7?w;mM1}5eii-&lh zQ+jKpa`C5SWMHehUb6mHr0mi0T*VtBRMzu`+@-b^b zNNj5NrA6ACUcTY9Hg0<$lE0F?z87*R5&Cx ztMB=76Wn+&PAqJJJG<8s++*DA!=qVPPE;QO##YOm2?!*aZ8|(MjrEsbi(u`t?BpF8 z;o-qx8||U{-kw5gXDv3H-u2uI`NwigR6u-JSH0x7gk5G@c%p%fC3CW_`hEskp2>9k z{Aa`&z{Z2X1HPI-YW2niU1g0X9OKwY-`#u_vVGKA^OWd;1MyO%sz8#B6T`p$O=t2bnMYSFnrhb(44V&+t7sGle_;ve*N&`_z1~^k~{O^Jf8# zy*DxSLL0L;6(lZR^vXOim@d*q+z`yos3#TaBJ<%?vFTeq&k$9ci&nlUTK^&! zhG!`>_bjYqNvfHbJfAbd39bT8%4R%jIs_z-7thO89Wjibdm%fQwYP1dAwH85Y$01_ z=GC86wGYY3DuTp_&ASn}IN zj(&E~(QyC$V6L)Re#p}|T#rL`cNJ3%LZM?E*Ztj{1g|#byQ$Q?oJ4>IeeA^467q6R z)aSo^-9f*5wcS?xvr*v_DWk~)FgVnAYZWXkAM56QD1_wU!len(Foh`sR-Tf$9@JB` z;87ZNScau^DeD)Z5fV~$Glv`aA<8lW?n%F`XEJQpg{A6GKpw^P~ssU9WdsO>8r5|N(Y zWdoMgJr^guA@vlUU@uCayAvfO#>ce>M-I-Bw~ay~e9%YlO+HFW3p ziKWR|zVeNN7vM3+dg36~bqR{@Hi)V99(o#NMBaAm0T*B>E{mP z=Y%zkbPqxFd6a>ivwnX>kvoaG% zap)8_{Zm(2-);K!*YK>DC~U`0d9r(- z9>>w#as8V4O~Ra>Z*SN>h=OEh^Xd$b&d{*2jZbuWBV^#|IjqR4-`-kc%K-xWX6pKZ zCGV6I1>4|NM?;fy0}agMF_*Fagx0E_EWq1@jkT;IRAqnv))1|(elq3iU`2WP#@mdk z8?(%~?Sb#f31J^)LzA6P;Ffgl_imvl-#j8yPXT&3G&dFo#u(PKRL7Ule#sFl<5Ox1 zL|UL*FR>ReNu3p8o4j@k=O{Z4$~1>P*{KM3;4s|GQAEHwDBztu3zM5th*E#|ts)bT z0sF==X^uKAh1515+=~mb0IZ)e;i;X=>SL!h;+q24G z38*i={`ud=C4Z5dOJONAKeH5?tOZ^X6=vn(S5D^CDVxL8j)4Suyr3_4mh9GTkK)~W z)`zcYCZZsba^*!cMm-|R>UhSfnnkmh z+o~Hl)*&1bJmT5}NS=}Lu5@T6$NL+kcsoJ|XzX%xrzY&C^jp(BJ^Hx!L+&;_9>9}W zVpDl}tFZ?;-HW7JQW61 z?xMyX97P)5ZUV+RX97YqIgsnr&^k=}ei^M0fmaaI02v)uR|ShIkpm!E;=Jx@YT-KA zHaVc5lCQwtdNGpne2^_r^9047WP$Q&mpK;Tp5V6r4qM#8eZr}fR{oIhKv>ipx2L}1 z)0jZBB0n#b7ZjTOT?-8jlED+eA{Ybxv5hMe0jvDl6w? z{hX4?@nW?*eH6tI%4NS>Vcs%pdPl%sa^;BVdM6tmy@~szbS+NBB%W~L-U%2T`X3cL1U|< zT)J!}q^nGXb?3)Gc)biJleRtaEN7%Z9l*pz3EP9DYhE#g(KAmbQ$f*V!w zSyA4DEK#m(EhWdD1n%n&Mw(xqm1ne!ywp^~q#cKWYP=eEfALwq^SQ7pSLGRNs`-5t z_DL`23DLc}>yGc&aKrh?2&IJX_Ka+OB$Z!etXhD0Fd(i1wdk(^4l$fAap{gd^xpCs zFqGGv4e6<%t^pAjeKfGH>Y9;i5y?2~WVKvXHE@A8?xLo5ixW)kOvRTNbq_luCpCMI z3tGo5XWKkMPm1s>o@!}1i0``bO5(MNILNrgB(7&b-UK=ST5??d~xqAu;Bs{G2$+>JC*#tL8NTf7JPj^)~nhJNcCfzN=; z0Nku!b(%E_=ibx5PHlvY?B>X)rP)Ubn2P;&xUvO}4-+0a>HpaqJO|GYw$LS2Uiq6Ys>*(09m%7>pRoQ46S%zt68(V)7&$OAeOk(8FKmUX7G<&u@ z`E9Jta@mutXQx;GCg*~fp#MT`%2YvWq}K5vnF+8r6je^1=K#1hfC3e+ zleUWt4Dy<}CUtSM%2G|o@YbHiOGL)W5TWk*+=Ztqm<`v=F5UkhOX|8;Ft+)EX=GKippH`;@e|d?(;$^(&=jjJDZ@LVEf_Goc zO5&22i9{@WUUT=G@+r}M-r-yH(;BtXE1BjJae1$eBmWV=h?A{I#(<70!lP^A3!Cby z;l&g&gjiQ@3TKfm`e6Z$D%pdX&H!<9@CX4CfM%B9AvRBk&u<>H4%R={Sw9y3U(5dA zDyN|fV4F*|uR^?I}V>ESN<8~nJJNRT+>|9beQ2p?A^l9z&!h+J6G=nGO2ta- zu2qWbjVjpvqT+99O3U}zl)>h6>{-uJ4+dl?EtYS?*%PgH%d}(Iw?64@+~NgLc#{4= zH=B41m9P2RePT3mgn5e%F8EG&wDHB0V~dCb9{ts4^DmHmPBoYk-E8FB9DD(smuK8f zs?R!jHVoNr=r^#mh!9`zRDh2l`pYpiRef;iWM6(rnu-XSfV>zS0 z$ek>C(>s|L#Q*>hI{M99ME$6-SdK&y{oJ~I56&bo2cU>w#?vJ7 zY*SUfcVcAT193Ca6<<&$-!2v1)=>IX&< z5%`lGsl{(=vDmDZKUZRp=&9V2uK0CX9npBz2=0|kYn?JYhI$@7>e1}`;=|_`-%5N} zAJ?w{R{$`4$|*0%R*N92mAA-xKFDe>a8f5#TWC1f&}AZVWpMC`9XTxG>6wYRccY^) zqeUmrv7a#f9H{gYS!Bp9SM2+i7M%J+IOIZjZ6J@cj>k#F)+U1$g#tFAH&HcZK&f}d zuEY^|AHnFpIR(!JNR)4SU+=#7^JprL_a=<{t1z6@PhR)uAK?M@2%*gcl?PZky!|GX zVaS=J9A&Mj(aQIVoFS9A^BgLzg{9ghRd2m(w}~lh_C&D|;k2W@SVN1xn@VcA=*fC- z?8{naVwLIyaZz>HAXqNB=E=1GcV6E&ti|Q}gxl=*(`?)&?@1|2>7R`oiQGbaCvZqV z(JV^L`{5~Ni<=LHWP08&NMr7WCc%4l72ex(*lCuyJ@I~%R8djw7a}(0D4W1;V9^&a zkl<@_QFiDP%0tlGLD9QxbATftWX(&~Kt2LT>EV!%^uWt&TcZS|U6ExlBoMB_1{DX2 zAl&)uQ(#;OqV*^a*Kk?wfgzz5n!pP(9;6uq0lhNPcFT8FbnziNUw^2pvGbyINatKw z|Ciqjul`pZ$-j`xl4BjLbTeB!1#Jes2HJe#=#^|5x6!-Cr5JIf53NCN4**B8PS$t_ zH^7Bl!K`X&2W~D$ELojC%bLSC!dnQY8vS6O!Gha`R|^$$>hnWEp3gpuTM^vnRy!LU z^bYZANzYxx>^@8*KQu>FJT}QHT#xUDJLJ`6_5$3T#;BP*$^DwPGxZrz z#Cec_4CygvwDzXU3tXyK#|trX^WTw`#czoIJbwiG3DqOT#K>|DG)3*r=|^1ZzA_dHyWo${Cxt-!mBf`AzpT)a7EH!+&?X6@pF!~zh*fAhrGwQ0EgJ@?-Q%%geByZZMkZW##_9=t?0b*X~am<)o;_iJhLQs+!Nc#yc9 z=<33*O*1op#f6ryKELMtXr{m`Me|E?WANLk`_qFzY`LO8xBonmF;L#n!Y!fTAy=H$ zmY&V_e#hM)P92(68Hccl0@1BL_{(Y#m>zg|haFOMz^t3C-{BnDdH?QvG?837_)0 zLFbkvQC<)D))YjORd;5-J(box`-2wg&B)FRC>hlZjhMn5r|j1zMBqq`?ytG+qm7GB z|JmQVi>CuPDKbDKYOOe;RwtWgOO@6n)CMa+NFl_wsB_1}Y6fQ|zngu%*|oGtcUXIo zJ|O(mY_+jeurdAU^9);vYxQ}%{JuLbIj3bZYA}3OttD(RF)}Bd$`sPK8^Y=&oa^+7 z7yL4_Ic-tT<&%aj;Q;ZZ-PR`IbwLF)wjN&SWO}N1V za_)#6dp=3_hJkbnRWLxQH@8L);z^^`5A7TmiAiSXD6GB%6chb5S8LsDwdkQ2I|RKI zB;_SvWvB3TSlHPMK2>h1J{<}r91x-S8>5)sscf#RaOH8RTh*fHfT_0;7^1P($KB#-Y;Pt!6B1$)G~r$0 z`NhyGYA3L4=bQW&^`yEPbe#Cz)8yQp4$`(kZq>XPl(&CS&DKCbdt~#jXVUxJ^b_*= zhQCIB)_8c`e{}V=Vppo)?WfGI?Ta^kXBq$Az5Yc`+Z({=X=OGeaoQN4RHrB4wN;-L zbkqdaH4n0tt$A6YG|D1wwY|nHX#742dIKcKEutc*D&pBIC`*qquI;ZkQs)ZjWhERF z%I??~A@&vSFJ}rVkLG^IE9RbgQVNg~4TWTm`QsrsMUd8Gxd z{ws->;>pCe$Z4=*Ttm)|t=%I5{OTheU{EBAG#HOq`5U64H%$4=O3&ku|JbZ^OS zX8#TO68|P@-DC-Vlr>7b`dzygah}_C>K4 zs?@1>y5eFpoBXYe0DjGvUJFEn_OM374Ip|fr%-pn`&eGhDo)^%B92#VcDI0|wl0rb zX~BUw*^p@T#C}4{y@hj@1IT5EeW5A}yYGAy-l}^pvET{R*6~J+8D|Ah)XL*_^!>vx ziw}O?e0+Gj9C@s~kje>;?dL`sZNbf<7WHJhXAF=i2nP!BQ&k+DJVLk=@q|K!l6QM; z!uFJu`Q#=wnL6)DQ&S#rf`{?yxqEg4f1Y*|Ykx2LU7G!(UZiz4=w3i4?6m$Wzf+NN zQ62e+(rmZMugO!jkEWU)W3DPa3M>HP9Lw5I2jGoI^QglEHE}~mb*Njfqo1?0BB>^+ zQNv-z|7{%ix4`}D`74*Z!x{x|5Y1+e^BG$wjOu~>5(ct^^nX=3 ztyuWvI7gwi^_V}yJsK;}RAlr7dV~y-i>K_gKNI`uuk(a_+q_a%{ry9UU^)^5b_y_T;y& z)2hW5+PNn!h9jzYhUF#)4WeAsIBK>9f)CX916?rg^kkAA&|5b<@j;eukBs07YY|$E=e|M&C+D0 zjo*TOwpAp`y~28b+@kTy-yKkNr5aXhYq(s_FD3^I%Mx$T7q!ndE;5*9;iETh|6rwA zm4y?+=B0Ga<6@u{YTVPvJZOrdKkYca8aMz8Q3JGSlATIa&hYlS0hOwrdm?qY z4Gas2D<+u2oi9d>>9_ep$18}wuo$$cXVj$!UJte< zMQ5fd;)y0f*UDa;7FH9ioDBH=QRM4&U~=3>auy+YOH5kz$W`9;Ar~TZ4a19MWqAU0 zi2Z4@bLkr5CZyC@t}?Bm5tCe?yvttYcP?}`&eIWtE@9VeQmjK!%lpPv8o+G4S<+KY ztC`?IDOrDuVc{U2a>qo$K2{)RODCw-(I$Pp@i_KY;dD-N>+reTN3QR#o(z`_+L*q~ zWh@mWwysuqSHr+J_ZETwLN4k^Cf|z@NRrOL(<~9@Zm@wZ$Ln8Z#Uv zeoo39JB`fGI<0vmJzF>zb3Q}pgRbmACvSRo;LwF5%FOS0V7Y-JZ?QUxoK=~6qSdKU zC&Zp;f{0epY;`xZw>H~smu$-^I31QaZBMF@7lf= zXAWhC2mE+_FW2o|{`$3iu^^cR?0n9ca{t`-HKD=Mi;84;Ys ze2+27xmv{~5{dFNP0B0$8AF5aaqPx63Pw&58A^ z5PpQPNHC7=hp_Xr_xAKR?Ajt9Mr8!y0Z~s%4=??BTh+UAt3a;|h=SGKeSSFM)*ri` zSF+JV=r*mHj1~%e1{&o3l*~L7B1BmsJ3w{+1-!q=g)Fls!KOr82?f#YlsbjA3+lns zlafX}l#gS!vRlAzvrZP9tFt1%ud}^Buwgf0pTGma!iui-aUEg=C~kN1_IK#vnJIy# zf-Zl(Ek+3D(naY4aA>KVW(;o1EphAxJEYe>>3!m(d!CO!c-7WhJeltM_Nns|_v@dv zf0oir^~k6q=UkUxB`8xhlFimx=AN}UPu8HxpNCA_y!V<+CSB59g2@X(yut#2$uPgN zildy;?z}OE9?lqbn-)${Bv^@4O2O5{vC@c)(TxVwH@C9af$yF+`j~(B{=1MlKb6O` z4be{b`C#}Djuhc7p>ub&@^AP6ki!s@VurY z_FUG!{zq~SI981!W0db*5l*U_`*z#0b=PLsyXOsGh&uJ2!FA5ah?|#qKV4MKKT5oO zS-1_@eU%i4UxU&Dkw<6r4-MH^p{;}FCdW}t=>3vm@G!wh^up2|r{qX!DJ;*z1XOsH zBCpBJ!NAHx?iL^{yxMYW&2Yja`s6gaS{gq9J4PE_kRXsCD2j=DYk#nQkUm zL|&mcH&>1j^whgt^;e6nwwXlI?uu9-U9^w)pCyDPgI)Lj7uf!r>i$74XOG-H`0LKj zi_79Ns8t62&2Pg8xU_FMn-J9nx2Ip2H3LxOr@?qozhMCY&p}!IH>dV55?0~v-bAy{ zt8J^Cch+_L{abXw*T@?z0yV&|=i>adh10+;pD%?gFCj7`m)#W*&+i2R(#7X9*dE%1!O|gJ}w?}$#c<#de|&4SsJ!*_sZb+ z$awQ&*!!E>v<)7d4-P5fsSV6qlw`B5OkSP@ikJ3eyQyCb4|(2nJ}&Ff;VA22^O7Mg zB51GgH=p**OHenoe)^maAi<3C{|CA2%m9WVk887B5?67_dn#@ImX1tD z!Wg5qr*qa-qV&DWrR0~qsvSgG1dhYxyVtWU76vg{#S=M1v?I|U=}QgWeu8qK6q3_S zj_)+MotS>avZI&eWqeFhVHcRm7YAgsycGuR&1j004T8bS3nd-Er8*-xXIfOS}adX&OP`Gui*AL1=|ZA?rl<$ zrwA47EV!)i@6Th4FIrnVb8LQxJXrWd`m4{w4d&LHN2js#v&zr+Xz*K5LdC8zSfene zUGS(xH3C4B!3`#2$jTsQdvu4+8P_amUwfIFp&`XpX`#>$p^=f+HPJE^l|xa}9i^c= zn$IP4aM4rLeN%Q&m@mC-Ke1U{N{J&$@%nV~m!^+s-5*8>XZNmX+!v{-fCXgf<=nhHD@P8Dg<(J$Z@-EK{FL~MmcH&@VYe( zkaHKul^c}pU5DqND2-ck;B9(r&%#LWI-mO9o^R`p%t)Uw3He0IFYL+H`sF8oJI4Ps zt8)9ahV0YgpGnr{(r7b{z1+JPS!3x)SJn)RdY%c=OCZuj^N{hT4dW+{FO@2 zm}h#lEd0br45Kzq@03XMCm8=cU3K@mZqe2~%XTL3r$PtRdxyr7uA|8WA- zE)8Tt-Pj!9p#5{ngWF?>6V2V%&Y&z&J>C{tMw^-_z4J0oyU92IRfp6i9l&zzZxgYR zJKZp8U;p6dzl33@z3Gr$-BKam=)2snsA3c--WM+9&U~q)ytrbIzvAr%T7bvOCryQx z34@0rG5K{kO9~w@ayIe{65vlCYXFuGWD98CDrI3GM@(o)hP@B`(yTNKfAc_rH%G(! zMbw{z$*2L*Pj$h=_`A=;d;R@dG;%!xCm22qej#4iz_wCW_<8f}-aL7|SPbk}IA~~` z>UTY0nU7vS#>wBCNH*e;u20bDJ4<6ax0WiE^;B$yP=jkQiqu7bt}?|p{K`HIs1am= zAG>9InU=?ap05Z6xEt?n4iCvX)s2XLrm&}*Hg37 z&Y~PItRm{&MtiuQ31L0Z+wkGmhR%Dt_Wse@XVFk|y-|0@R~UT!Yt}cfqo*DW1&(sQ z!Ef0ImNeJ)UBqUb`XodzNJ03~Zcb{1M)Oz0>Dg{n;wBie0GMzuHogUyWiFb@KnGW} zhM4A~^2{Pca}CN_u(=@`)F1D?;)pkxGgk^yp2{CfqoI7Rf@vqajlOSa&C&(p(2PZj z3o2u5?ebFVjD5o077UD>&_Bz8Vb4n|1T&9)FaP}Zr{tV_Bt@X*CutifaPth#)O$Bs z6WPlD|6P0dS6cr;&a|3bSnuhZS=dS*CD(Bry9*!9YVd2`BA?|{gleWM*!rOu@}sms zT(!4G7C=#|D-9n1(LJUH+nmYbRxOua$(tq!U|WtIpZ#q$xx_UVr2 zgG9|&_&2;$Je+tf;gKHhh>Nu!jHwr8+ayynVmYW503?_PR!YJXDr_%JFo)iL3q8$u z7h_KX3oFtafyO1Dg(%hz7!Mk`K)tNs4RmVpho+X_@!=Bl-hp*dX!{sU{^WDX$mMqF zAC?Ri@r#+aw%w1U>FW*JZ%lUVbt_30yx>ljASfZ2Uk9^EX2Pkfv={S#sZcLVStKlq zNON+L5}%V6?D`fg18Q-sI7aqFJAv5g(MbNiWQWK@P$?mCZ3-c~(%k61W~(mCw*TgtCKSa~(t-n%31xZ98QIFIh_w1oq7KR-C90ld)x3SdRcb}Wa9KKcPaWvPT8OKA*gY2@dA$}NHUNReNRicO_M?&_)HrS(F4eNzAWP(%vXnnoQ2vWJL5I_i5`V{J7VgDh) zYXz<55fsjSn7m+=*&Bu!3M*6fm$VWi^(%?~wM!tC4GrrIoBeNP=0CXo`;Z~$hgkzq zo`UpExI!-!%H$Aa8DtCFZyj5S3d*k*DGEN&yLD}CS14V_E3R-?`Mhw=Nn1>) zBobGutwob@S@U?quRMH1gS#SPrY`lH9MR0|8~fTDeC&t}!pmicGsM;qU4G1Hfsg<) zQ%P`U5e*FXohHf@#}gsANX;P}A)Y(~ly}*i((js#SMJNauj@3HPQgH_sPVY`SWO`9 z7?Xfka?-|n%lHY5plpX$9mXii`0IM~ITX?=5pQ4O1ZF!(yX7jwa>P#;+Bgad(~V2o zD2$exA|-u1Zdzi2Ff|ImmT74x9HcG2qNj?XJ%X9Sn7#sFPIN0T^@)ii0aL#Y^*v_O zG+}uT?;y>pegjo?RPrhN`0Q5`*15lKpNN^eh&YVeg{s_sST+-{#O;TD->zgn`QgXT zt}fGqwpeCW`n1#S4V*qQB_LfrR?mxhrIYHLGdXnL?FC6(?o_JQcQ;YM`+7wh~aA9%A@3N=qM8p?-y!5h7g3v8Qa2J zZfPJso-xQbCEW~r0;#$c&-(N&ioN}1zh;@!wwf1(N(clu@OAx>BHN?$xXHKeZz|M_ z4E}I2n^?4ttv0WRMO*~D(LVm4O8Q?w`=76Wked`B&$~tqOrOgt^@j;9Is5BWB5q0R zKT*#iiZHm1Pv6G>%acK0hP-C%_bz4w++~ib*tDQXYacAjN%9tOAB6kATPMB^nX~T+ z=}ZAQIQ!GDub*syl0Eu(e^`K@S)AWV`=RhG7x#BXzbM7@VFL{lFD2+WB(3E~Sc6s>W99%~_OOAQ_w zx|5wAdTrgEv1xUSACeeCNd6-@fxg!);AkKKR+^fpR(UO{+d_MD4UPizmqMaT|A<9W z7{$D)ydYstgQCN zAE6cbXldTZH)lZW+o@9TY6eti2xL3D!(R|8zlkq6ao`Z5kncssi@rC!GU>);nIF8M zL$S&6L_;7Pf3-0#{Rnlc#sPaDWUl=mtVw zH$^i%_QS`?F>%~-PI(Z?e!JZ?YbT9+g{pIcvI?%Et7el>(B zU4GWAfXIP8R6qYk0VJx1W_JWW10ZTeD_curo?gzwjL37euQ0jB#YaAhGI=(Y)2ytE z9vQ*W?g2%ZU>rxBT6dJ6In8Xis?ix{(9$ucGZ`|)D8ON3PJ!IgFWvIczC`uspyO2720K&Dqkx^7LrX zp5kFp&|;|wf>WcvzILHit2D{1m@aM`l^z3XG1nfhfUz3HwkIXdioA(@=eZYOA|b<# z3`vQMF4KzEYfc*QlX5rHtTQgD`5k(R@dUR&$yI>t$@z{vM!o&imI=J@XU+wuGeplm zJld@kr52sY;Lc8@{2T*`+OUXm8<>9Nz&ypH?oj$m4>S5|!cTGG3V-_xnlE0vpZBjn z9H8TBVtVD=CjO{Pwc@#KBN8E6T_nM%r>*AP zl{Z_bI1#8r9VrBpBbH`;1YXHxqP3V{2mxL<`PNLEX8E$V1}jv6g(`qYgR>IC0P~yI z=Gh+_fSQ(amVRPWiZ*43+6gl$f(|R!WZ42XhUb@{U-Z@rtf_c>=aks{kX_n=D z<{Ftk({iwgWz=L=+bxCL9;hz65H->RtFtR(@6gLMC<*NjG~BUZNa9>qtSz0vy7G!A z#fPYVi!kY-2{<-A;H+XD2WB(iuvj;pjm_3`XRu#A?-%B?RsBrE;o?#oh+_ z64f)_$pR0l8NKNc&SUYTAPq@qnwHX#$PzkA6Y2IlTaLBnH4O#{W^Nz)E~Z~>iYx;= z_dgXdn>@Qgu1Jayzg9}?&E4Sg24k5)LTq`!P0M-nZeM8fGrhC9gquH5ugad?1TXoz zKIz}2qG&!3;f{_Ob)M_@ny;{518iAriP?uqmJWl)X@+)3C^)gSOpF|?8zz46YlN~( z#`2?#i2`Et%Tb!+^?Jc=>=u5HsT{UYS;bkFg_JUUIU+um0AS0&7x9W-5mHT2{J#4v z%$g|gtF)`VFea#jG!!e7Ll4CqxvW#;D7CN^xn*?s4T02#V+jf<CyAn- z=$e#S7@nVFOfCYQPXYf&KJx!BtoG()$lcLjFrZWFPw*H|za!d;sN>M1cTOc7bBO_a zWo&_^002nPeFh!yO;qznts*&H>ApHbO&%QY$=ZX&uzOo|#&j!`QEJn2vL1eG$ZDJZ)8$TNvtceMG&k ze~YtQ(`omWW%bWuDt7(Lw{=ffz6bOH!7xGF{j3t&UKwnCXy4UV=2aX^w730ilHfL< zIL9u`g+)J^AK9papAvb<$eyI@7PFT=<>8FYv(8Od^?vGY|pn>@|yfjn|61H&#GR7*0pP0?3kl{eW{eZvbxIwV@v0tgY&_117Dl*u(_nfvNQj7ih~dnOagZ5$NU{n5%%V#^6>P17N)zazoT$Z zgFBvJ1SA3^(DW5TZrE2W2dgvNKS?Jhp()o;lF47YAIkfa9*`_OAB^HzNq9E$-~7MA zxqmEYy9fYjM_?@`rIcopcYToFk_*hYq_Kvr=z+Zw@9b(xc7P!na!>%n!J_mdU8c>(3AKeO|W!OD*c0gCzI`(5!M+>=iM~EwIP(7HafR9 z?&n(}`bI#`*d`7otqQwwN$>tE!OJlobDOQiYA$u@fE07nK1nv>$12T3$4on0t*a)- z(d+d;PnFw6>1(C->hwK`Hx2KeH2l8C%EsWE6X#7^1%fDN(KS1ztd=!)W!VDJ@v!+V zA4ohbijMud2*g!ed={q+=h%d?J^~EBle#e(^eKVq2Oz8Fx|Gdy>~$*L4f=-qSD&5< zi+eDf^N2K!R(}idOS9G`Z$+fF`!R`9rZEa?FA04&HOmnV`vQ?}dSsK#mWDjQJd8MR z-dTnYT16FjOFg9H1^~&+o$TMdz!?BrL8s`dbM7(LG7Rlvp4WQO=B)<0W=ku{<~@6N zseF&&<*d&ZcR#reiiw|lnDoX}4lMA zYkN~Pl+90B4onQ;G^xmDC`{Wa)H|NREnB>N{8l=YMm$q2sL4j=vhah)l-TALw?^M2 z`hE*q`AZXsb05dz+ad6`z9!ki3H>XMeq6;Pn!@6@g;V+RPgfL_KU|L7Uq9I*t6D2; zJDo?0{!~5@rY~%xhMNyQsCDT(>qD)}?`n*MxBp+P{l7#6KVJ5f=`t`pC=xbxtNvQH;P{Y^mPlh( zvC)--zjCJQW?ODpw#^rgjt_5!P)7WGY&hLje)o4n9y9*7c>8Cs{iga!ERBvpdb*S` z;PLfdEEu{BjCXIwV_d2ys&TbqxeX8+G$;|J?LL+Yrf3m{CJGaO;_{2cA4vZ?nfNpD ze)+l>?oS`p7^LMu7j4YT7hPqYYA-8^mgT46uGPz08Z;HPle878O(H;MDv#4|h$6ll z1sQlM-hD!Pg_L59GB!t@xy+Ygh20f&zuc0UFwfQD`+AA2u?}&9^jmT|zsaA#tc^f` znRJF~G1SG%`(kBr7y*d;Or?ZjhZC;#U03Oykn1uBFSgC&2GW|NDG zPPCr%SujR+8YuVte)Kf~tS99VMNsabXN+DFVnV^#0&N_O z9JB+%wl~j|ZaYaVwrdDTd$S*#JXg7uJ{_dP_k&r|d;A7Kr(%X~#d*p9<8sLQg7{~f zXS?C0CsmD=Zz8nbCV$d2^}LgLmd8=p8E=KXzc%-`b>|@XyG!c)g>&)T>g(Kl!M-d` zq4n1Y6k;@HL1OGG@S7wv+ey(Rx}G-$?Vm=(8CGDA=Z?;*6hxH>H0(8;H>4&Vr;WQC@y;hh>&`myUN?%= z7fNE>#D|3U>?XsxTc3psghxJ3(M&_0C<3;U+y}P6G3I*Kx3apYSOg?I&f-+RD{SW6 zvesPLgv8rGaDix9Ch#(_y26BabbUrYbzp}_^-cjk+l~=lJyv7ufYO$2eB##Mj+WVM zxt2UWDsa|c=HuXgSQjjrYGcBS_&yo!eJ-l@$*Nv|4{5Z$RMOk=_x4XxtXKYx-k&a? zj<+-Wq*yCQO1}n-myUdYIG>(H1tZW!U-6x?7pUc*N5)Jux<@cV`B9COtM*H7^xO>k zwpkk2(hnrwwB>Cg-J%=yx%Ux!=Ov0P=8YJx@nLNDmBmIIwoB~PmI5;?rQNklbMV~k zHc3{?gC6X##WfG-h^?av<0mfn*kI~{VwE5bnKb-T@&>E*aA5dpmhAVunY^z&-z@(l z)BS^-Xe59^NM7F@EN)$zLQoa)mL6eB7u7XVJJr;v++`uNoKs{zr#x3Ot&3Grg2urN zO~q<+EI88OV+QT8ufc(I8OLEz+uOFRI+G_OB43^x9)1Wb7#ivzS+Vy%%6>Lu7|yL3 z@1w3y>muh#oZ!bIZH>h;0VQEw?Lw-dG=x3ZL<_j3e!zX~m)?Q!Y$d^kyUh#&J-M06 z<~k!_7i-rIc%i#P*6XcO8~_1hMmbHfpK!t`(l&soVZcZdOh@Qu1;B71(!Ve&`UznJ z(zlu^6)ehQeaI7*=u^~b(VG7w_;Fm>AOY(ZNSU@_IEqa`XT4@gq=>?&rzs3>$_aH{ z5_%hUi1{%q)j%zpY1Rs~I1BsuqTI$|q;hfuV8KRL)W38pl$EXEHFIfu?5%}*KIv`1 z3LTu2_LH3Tl!S!<9g$CdE84}PU*-|*>`~V$=&LwXH@u44(Q&oR)9MtpnghYe4Z`AN z)gB3gywVzIa`+!v5b_3q2lnsA^~H3CRNgcR<^`fI>G;Gp$R5b2n=ZbeU05D^H*5N> z;|b&PXB6|3M@`4qs(I^_KTtkk;AwVPb>QJZW%(?pON1l21kKS(voBqDZzKTnz0(LD zbTNq|QYs8O%{rD>!5Eib`>nh@5tPY;UH^=ffTiSPGk`jgTa z;+Rdhw_ty}qsKk%sLl41$nuXOj=N0u4A)^#KwQGewK?aBxepA1-+qx;e;=Gy?w=L^ z21{^WDZg`5awXFg;TwjZS5P5`9uYO#k;Oa<*H;c}OI!cL?c6`P9NQTHvT36?_na&W zCP2@a+!IFTtOUvC)QUuXAusx@PBR=?FQ*8`a^9U4qeZ2ykAYsgQ~`k$%>0t`f4!8N z*A~IW`Crh{64M{4;;6wnS}8H?@g4;S9krd!V&9u2VNAf~Hl{i;SY%$D97l{H^M^-) zQpR+zrfxG0TAYq~)G)A@sc5V@GACGG+LxgpXX91t;`yblc2&`iQj~OwdL2G)zm@$b z0u*gi3;;$YLLDj4ZZErun|Zf6m=~#Nz7g27#f)`8ziV4*8aiAklpcA}(iz%p)@$=%&LLermEW_+TsbB z2~O3ED;e{YtT>VAXvPPA)e}vsoF8;49WO*tX-|C%l3PZs05Z9^3dIzbfXW=taEFV} zx$Lm9ihI#9Ua`x14=c3>=5d1Bu7gIDxXE&N;rGba?#ViQ?lMP}@6=iWVRXj!R;tBz z1<9;WOt_9D+WA>ow)*ah-{b!MbH06$2 z3v}FpKwaAD^2z+4Ez;?>pEtxo)N;P@ zh3^;X%hm5$JTzZv@hE)-ecQPrSrEv`4Cjo3-}Q4MViMC_41n5NZh-8_s9NEHd7p*% z6k3>=RVTbY&yu9N2+e}o8FlQ|mtqqZRUWY`9C}PRvHqMcxIm8XV|VYlpEGRo)|T!u zUdA_D0wkt>+NkcG{myaJi#Y!KvV9|%y|A2MnnR~eoZ5_pPZM4b_Q~vm6KbIwc>06^=mrL zPzf*BW;b&hYJm1>G`C?leonArkRJQaEU}bdne8Krx%jyOdZ50wH4NR%$bY76I!Fx_ zbzkUhRN;x+Q!}j@Upw065)`wNN-Fg>-DfBO0P(6usHpr*P%f}wBVH1oA`g%PA#s%)gL$h} zc402q3re{(0$S`Z2)nRqcTYacQmMYj!D^~gKKujvvyAo1r~R~PwUpvwPV46ibFl6X zYW=utdIRN3D(mK2x0>^6Ym3v`lNwn`<3Z}(VP}Efz=sY@RLjL-7kC>E`l4LY>WXx% z=#-!-s$WL=G}-Lfr7Q}dZ5Zi12yh$W_EHnz$O{D5q@9aNiSf88b!bvMazmnNvK6z( zdcnEEMFCmea@csRw-|+4e=?i=ktqcEVM`8)8sn!?;hqd7`Dn(aJAOda1^5em_HO>T ze8cJrds-Ul^d|MUc%9B$5}z3!-1vO)*Wvxp4vZtg3MxK5e2b9gOgc9gh>MKrqIja< zDksLZOJ^&SN$ym)Lj^!dKZYGCp?diqX?NyVZG{-1JmComApR%=aMH7 z&Zc(@uq!X|iX~_&BIJ;nO6l9j2Yd+ITv9$W!sK}tw^flr@Ce(Nq z(CRXrecz>S(4STl${}M@SXq^{iSmLvxW9LO=A?noP~mUQ3<$qd>zd}7;&s$x$~EeH zJy4Hl+SG=57#|a=5b|rp{^Rn^=$Az5GJ+ zIeI|q#zA~}H07qOeqP{2+F&ZJf$63C?4PBvqSEdXUg`Cz{d7EbW_q>xZ~-;T0aF;I zcK<_kJ>S8U?!$>xWm=$XUQ22sT&Zr;Z|MnfwG7upQgz(iY0mRGJ*ftcQT(Q&5ZIp3>DWw1 ztH}Gl94Ks?$?dt1ksBa4Yq9zksYqEQHR5zSq2jP?2Bm@8TD+u@Y%i2IB`;Fk?q&hyHH^@egw5a5CiX=+AQ5SsbN~lf9|w{os*g$T^!# zpoMmfY8qhV*StEAtN03_m9&ImV%9e0g1#5GC<7?A>swL*A5aMemol9{QND{Xa}&{A z2qNODBZpPk=Tuc6mapQN)iYiwBreoToHxAGby^Pj%DFlBF$JrYY4d{c@wZ!n3F&t$ zx>AeQccXjmRTK{>uw`G|31(d)h~FBG^hBy45$4<+m84=%syY z0Vz5q3;EVV&~)kfk;hNPCwn4Wuu6wt2FKVctF>lky7XB0x#&RU+J?mrfcOXX%^Onr zT${67blOFH&)iZHWr-qk?X^tt2Y~|E+z*A#7__#IiK#aC+;TE8?O3f&gE0A)i!1HAH0-LwJ^QS;yUs>z z+VTOz8`HN+74od_w*M{m{`Ro%C+bbr$zwanbj6dD?p=;3ub)YU3x1qX=gxJ&6#^Ah zqw_*0!0rm^R}RKh&2I?S1!cXHoklP3rOj`iCt(QPTaZr}xRK^G1W;DgPAhe>kSGVT ztd#(S?9yb2Kll^;^9tOCd@wRx`U!QSMB3y^3D?HvxCH$BdAfHp#BU*{grw+X>+3gv z{NPCJ{T%w1zno=%SrnHCeT*THOj-Qv3Q|8^kfSxEf7RZkq<$S<>32KrCo}3+M5)rPo3k>lDZyxH!#T-$D*1?e1b_97uG&4o6XyNBvYHLzb`AhiSTzP z*M8%U&;z!n)ee?SNAw66$C+VAl%0G(m?`lvxaH|~k!BuDNeYh$rh2F0X2W5sL3KM} z4Oqt;J6|s;9KywM51JaTnUa(rDsug9^B>|R_7K&NFP{LNih{a3d{U-f-aqeSFgu^z ze)HjpNw)rVo(0k=R3o&L8H~Tlid+a&Wv5KS76h(XU*90!EqQgGeg_(F5X201jd_-G$aXx3!L&&r^J#dK^%GVG&Ky=FCxfZ&Lig%vZ>pCgo`` ziKOZ;W!9Jf!n^sB7NNoa!Yxu^OLkl^=o?C9!#6*5ME^g^(EsZ!$52CFDa7c`6xv=s zBCkHo`${{So$_Gl*ZhgPlw&TQp;Y zdX-FWv&}@N3yNP(Zn0Z><~2lxSojMlz%k0xzUytADHO=PV~!wJ%`jw9?^)hS9ndQ6 zd6jkZnbemq`a*Aa_V_)n;tf8jpu4$naZMNHxbT;GF9XUkcC2ZRoSTF-+smM}-|6 z9sMx-pcy(coEqZRvh6pWb}LC!;wg1()|V&y-sNYq@!}^m-J*k8+|JXgF3RNrnuNtR z_eA86jbYN6xY*0|olVCp1XIBZ=?2p8ldHw&YetB{&!$&VH&6q#ScXXcgIY}*pBAL6 z5>NyHq3avO34%+@tDtG3bPuU?Pg$Jh-z|b?dgtw&9|sLN(>~*sy*^r~=H@=$8#C>~ zbfU)<)ydt!B6~k0Ua8!@ciwdKb^`vU=)l&Qm-kX!_1CtwEt8#(5&c$@58(!tq)9mM zZP{Et^j{9`zVDykaG2D2^Nkl_*ga8}VjxW^$!Y@S}95E(Dky+#JPT z$>W$_ji3msNR$p6@(>|%PdW*4Gt>_5Sl8cG4|a}ocX`=pPpC3Up+QKej0j0JX$!y$ z9lPdu^7vcOo<_n2)B!uiTZ3to}l@+VpfZBIA; z)1d=aOWED##gL5yzC>=GNtbVF9SpH64;?02b%A3NJLUE zA;b%emEz|$Zq*Mj!01{YA+dI>A;OT|zqp-V;=x*_qM%4n-0z}_V?5&;+}&8NPxPEdIB|^JJ_z6fIFe(jsu=m%p>+j7 z4rn=Y5V;Kt7*k@OcuJj_cqAo%^~oyDdV7xqaRyoW4FmsWr}@A;<@v+RFGSbc`GWps zE@^&_i!8YWqon+{w42dnO!>{9(s~^G0cs_7JeE~e0wAe@ zBLv6w%june6-E0tx=pWGEjZ|lMWk5wZJK3%V$_a{DnfUil7#R|H;FR8luXY)l|_6N zE{h-yraqy?1t5~#av)aVECq^b=QMh-E`>s}ywh|nH#K3==MHb_2)C;I)v5yPOozqL z86hSOftK6FZN4h%!tvj6io6DIOmQLwv^)Vh>>sV*A*=d(zTca|t&7tVZ)1)G7Mgrt z3p?F?-TN#~eM!fL4ISy^4Ei*!cV$meWUKFO(!}kLo3p9|X34GMPbebnhN^v0z zx<&q%z2U#Ys;~)Qa0|TlI?=>hAh~vL-g|$@Y)u$*tG5#*TDkMMrUV8^NYfUgPgjul zf~mpO=B_ENQc&bnF3Hj+a>G~<>@N;6Yy7v|jb@L~g+o~lAP37;?IT>PC zYPCwTA9)m(laPUV6U`4*a~dmtIkE(EVO;_n3bgPi1EQg5#VUgtD`%$<3DLZO$6qs~ zZByXoKU8eEA7tbtwxfMC@8ABKUb{luGeu3%;PrjHcTc&(=$sOf z5ksT){o}Baq5w5CRQHm=ojArThshCcF5x1_e=qExx^Uk+^`PN?=o&hcCwn2H4zz?_ zqj)FR|9%!W1GLEC=S!*uMD@>m3w0zpxDILO&)-h=ht)#r<*}AJTC>tZLi};q@{(L* zxGo-gA9JGeDz8?~36&81S9=p7jmwBw9TfVMGOiwX<0xzv zrdz&O_Z@Yu1>m0Ze$e*@qG~mAclEbYJBQ?r443brFT|s`g>Wc**_(9JRPC2sv)9af z#IGNP-ROSylRy3^TEd3Axi8+l_3!Pkl(bPl8xqLMFWq-^fw+G@_ z%x_jtBMQX|_&5v!D?Pe)jDNO<6G4%?O$cNSY8-9s;z=Kf!FfeM!b$#1Nnsn zPyj>QR@eqzaw%@3o>TD{+fA*(kZMxBAVFi>JXJIR5CHQToK4*)Q={|tK5jQNCHng; zZez$rK9X_>tRWU8nwr*Bc4wNI8Luc2D7ECiPVvm&{`p~Pa=P8hp>|K>9p##oc3!2| z``>5AtiaTy3vek;M9TIaNi<$-a8S%?j`@FrNB*&#upGIt-ZU^TG;~D9*ZBx|C)UFc z$@zjWhG8Ge)_N zOh9J!m)tR5o-+-8WnHM2$bokSGE>v;Zde}}JW`TDUzMJHK+C2&y|&}k`W{rX;Cu1s z6Y)=HkH{A*Naoe;X=&gh&Lz9?wWlaEX4o!{yL472=v)lQ-Ws)T|tc~SBZeB8KmHa$Driq-xNRVr3xxn=O0JJSghA%-FD` zscjlKE$5xshw2iHu<)s2t-S3Zozm{>GB5?~HHcr)6Pf{`!3jX^$>GH?Kg6PKSsWxQ zmD7cmHo7J2xz$uKwdSy}RG=~a(E?Kzb7TYT1*)vF>^hB`imDMe`(vf6HhCg(_f%O# zAZCu$o=)ZgQF6T!eD78G(%8<9+dr}DzBhVOAB#Ywh2P!asASG}^q4%kqd8`OU`O)- z|BSQk-H)H!cduSUru6)8w)+RULb8LobQ>Gqu-yIzIjU2)4b~eHwaO0Juw#BfqHC z!;ICVpmFy(4dLrBYP$Sb%u>f>1Bd>(?Ra4gKVM{h=1dO`>ernu|dFVhB$ zC@IXQNSqoTUHz8!i-=$CTKTpG9QfJ0=x|-`sz`amuFn)(bHEdy7|NZ5hcB6X^cDtQ z3me@Jz^r-%HvTUcDz_3*A&9s{8i-?#57{<*8=Ft`$l$z|Jdvu(`;!ShAOdtabwqfiag6tFj-$jId6sc(@I^6Xtm zGXi>o4)*qCadj7`^9r7%1IEys)O|9i&C0e(?{5Fz{Tz<+*sFWX%qS@Q+M5#Pn#9JIakEuT}#OsSg)nTdo(Otdz6BBs|% z$xhX;x$rBLQ)_`vk{-mL^mIqsevVg8Ji_vosVcz<76cgJ@4}mNQ)`N4bLwpD|0zbo zt@Eheq&r)CNOljdyjH8Ne0cxI^X8o6xjE05)y)PQp8SIeQ^_LL0vmsGTz& z-@c9IIZ2XRH>QRsl&HkJu*UHo2)UbTvcE~Ln1$<&gg#Ai{*%4zew~_t)(~fhLu=gD z1_JbE&*tNetOZLg_bTK|GfYq$(q2<}(SyblpZWMRQm~ChpAdw=XN?042=!BI31WIj zE%t5G&4etoMzqbnfdQH{X21}N(aUc#)9@iuX5p4l4Zk zo1vvh7HF;x1t_n@gnb5AtF->y++8&Xu*9Q__ij$EAsf>OdM{3AHDe9I{E9IQnaA!o z7`}fi#}=f#b2~*5EsGKxMR#<{^eO}Io1*zkd}{r?)`krcFhyGhVOB*>8aOKgRWP!S zM1{@jZc-S%%0T3bL*z7Wiu~ReYq!j4eq2S!s4UvP-w$w7Me4TDbOIGd8Fl2KHM}Tgo`51 zZR{k|(Xt<{By70H#2&9ru*9pB+Ye+&@lwc3?{X99R*CNuYYibcs?47~h=%#2YiKMU zp56`=n5v3O^US#GopAEPU08gh;{^e+TpIfqQLdHsirQ6|z@!CS`U`|=WnK68)NbI| zsLV=?%Gr0H%uwal4r*<(U%?1%wNvh7-74m+u_$>Zo1bnVC+O(z#!@g%aqzIecxp~- zA!Wr`!HWs&GwRx++tdW`6%ZEYMVXtzj-Z=k@l)Clvq}d+Q9QUAxjl)2b@>0o)_Vms z)pc9LNeF>JKnT4P2)$PU5kd$MAhggCl-@+83#gdTOF(+>y-ODnmEJ*mvjNf-A4Dvu zz#rf9{onVVbKZTC+^mb8y+`I;bB?jbj2mMWk(SL%H2)vjp;g1=c$Wy<0YA7F1wh^L)y3ZBnI(e# z?fV0tjPb7ji+=bEIs4n>zTBDto`NGxK4>ICiA;E9PKlxEG?a)3d|n*YEuKOtm^XX5 z^-dT9%!U1`n=S26aX$jJ9VSr*+v_w}b9_XdG$WUsE{0lTi`o$F)z7BEI1`~xa#RWS ziG)?LTMA(CSN!+82V2K{lwFHnRvaz(!z1W;X~mzpr-mKv-6A z)<5DF-G9TFL5+$T^9+P{b%Pi|?*!~_BElRPK~*%A=y@h!-wl$3xkl|gtSi{<=C`z2 zg_>tyS&4kLfjT+OG0*hEF4IrmDGl&AgL4pA1McM7{IZ~i$s#r7q*=)$D6dEBYNL#= zhBSR4h7MeY!~y+iG_M?DVYw8&=$Kx|z;bcIR1`89$vi@BlgcjuY8fq{2lE7@Gk08R z3!WHOARuuyIT3vocalrbsZ<1&Rf~Li2D^hyyQ296^P@h!x8lWt#9j4Nm#jV8La*DT ze;OBB9rq|4U-X{m4oV-viJ6}z(_ok4#&?-+e(kfD>UKib4h4Wh;pIGKwxzfO8t-D6 zRhIAKVfFtIKFaEVaunWJBI_8Pjwr2Ccfr2075UBfu{HuL@eK(hYb%ej%r zw7#qcJ{@*zh9okMa7*fDoRZR&Y zctxPh+M!HYR(YTsh#oE6oLxC>1^8aXUf6AlC10JHHPA!7F3j+=8g)iMfD29cczGg9` zTx@o@-t$e0-?7O-K|gh{qSpyutq_MW_$Y6&aJjq7&S7odTC zc$=sz_!00cnAcQ-7uT;%ST7Tzq19ehJp9QWpSJJjynvW_lM}vb_C9H@`^Q9(?MQrH z*>UUMqYS;}{v52Hrh7Je%(&}=l`=Dhe?FN5*i}F^%-j^TKU#jO>_(?{gr<5Hg(EkJ zNJfkq0*X)?b{j{u&5XXhTiEYN3=L@Xm|GIXRF`>+bX!$$p8vjwOe7IT#h-*h6=7x+ zT%=QugG-{_7{oa&by2_hK8xJWNj$w5`lM0sw?Ioi_Kj|Yy)CD6nT?t4op2vn@hilC zly4Mzv%?IQoK}+EiH*I!--~peFEq^=qq`LT6XW$4a^7s@#42ZqPZzsgl3abjc=M8U zTAz%r(bbL!T|rS`mGU}ShfeL#x|RNd;k1~sERVrJC(0_&%SO-=?c|U(^V~0LQwQ=6 zpHDydJiN){>_@CleiqI|yh;&oy?^4%wfdm$Rb+jpNdlwf-RpBgo(Z+jP3B^n$<@mpX)B-Q{25k@T1FmMj6My@)RJ*7C@hKEi*T^6|2u1 z(~2r9JSgwa0f@4z7>LM!++&~sh{N3z59pK2gO> zB@+&hk9@nUML;~h*rofo_Q-z~5Pub#(qs?K6BFIJd`T;GOx%H>oA@Zalus8{`N9BO zNrv2Ie)8H)=@|Ftb&6)h_QYS0;&z-S?{rezpj9lMI8|ZaQqG;W@A?<22_+Y(&(-yf zjvjRC-zR>1D5EA_-t~C@j^Q_Wnxxo)I^UN*2=Gsf|9Xhf>H@~KqH^nlAbiuxcuBn_ zYrf)I-0jtN=-s`f<@X<#Xmt|>+OACAOPk<~p(y?ncN(n|W-symZ->wv$k$r{)FFZN zY)qqJ-k5=IfFmn|O&38`*ZHK1>6)(PAw&coAuoU(B64*=pICiIM43n0CTmiT{?YMt3hy)hTKBH1%SKfD{7_p0HYl?DUVlGFyhuX%Vl6$G z$M#U|nn;U|Rd8bJGw}!o@yGbAz)TQBo1gsVz(IDSE&SHuZDg~?WU=sL&djr_X7wu< z3lZi5_Fc|-C0i_!96;X4OB^FEmXoWkqjBKpG}1Rv)JRUl5Adtfb4G?M{88HGj>%jC z!Fd7{ELXbANT<%4#(C*!%{JFYr*j3%HDUa5eLvYnn)n2Gz;0;{lC5D(X^VsVqRo~V z#J#-;W~C(!uK>L-+?*dox&mCnYRHypMTKrDOFgX~l6SYCduA+xd#x}2jAkRjx4sqs z?|s~VRS!6}AOMxClinPcq?J5r^cS0()Ph;96t+>QyI;GqCMmY{Ux;&+ajHgC-s|_M zVbf}(qh~`3Fo&?3GJxJ#RdMFbxyjqfue6DoBZD6fV{cBU!Q}V+6-)5BYu?kGr}q%@ z*=}0=9dQ2{R$)#VZZ@=4V8+J&mwj(!P<+U_J2!PbZNhF5_J(?Bd`tK$XV5=q*#!qC zwN9;ByDe32w(Rm!ny*tk1U&B}FH?facMSsyab~r)DRs;N9Q$2$1+L0%Pd}l|l#S|c z9yQ@q^^@NA&HYF-y%hHICQ?iHohbDFbpJIbOZ)SkXFiQpFCQUepeY@{nm_43G?^Zr z>dYZ(t(bdd$7L#J%c9u{4}M%NMq?yYZ9key9ga7Q9HK@w9x1X+jm2lThHmoji z;@3uq?~$R)(z=e^Uy98c%(IM24YF=Iej?2zRgov0r|U{cC9@y#59~|$6^*fi7RO~Q zJH`#~qO-EKv1MD8bWiTM7yWY)aXUCfe#Jr&+Yy#;n^p6fcSo-}EzNxopaMQYR)trt z21mp(zM18v< z(s`40j0{~@1!I!g$}sd)GmI5Obl;~}Wd9M%Z?ZwOo7`lZsd;4Qd!|xgrl8|l9Q|7O zmkcfbDNYxny-5jHi#20h6UMW zcy`8FrCUSesJ95@rr=`;N&2luq54$kiYDx{uZ`5r`zG6QZ#`PvXKqoHmGx=Akocp{ zE_<2Lpaj~P&_6V^AEhA7;7-wCs{mycaQMEH;LF||m7z0)o9H8!4(~GGVILnLMTf6| zrP{r`&mF>YAB<-Ys`vae!h?)9WB0xyk%4acNtvXB#&fLoJBEZ+hK771g}ATkqh3%B z)0k#7jNg&9{8DD~y-Sp!_VtywnJ#XH*zV~@ zr}GkKMr=>bVr|TLIeAv9%fylG67=Ssz0zZ7BIvBiZt7aL zbVuXY8*VeSmD*@Y9r~=hOPrAO|3^6d|8V>J{TFh2?c_NlPYf)yRU9{?kYbSmp&EE6 zDLiZ=x?eP9d+hCgzSbZBVAkGm&?k4zv<{OpmRLjyVnAG7lDXC#hwF||oM&M#WvWhDYwM5FH22rvcW=xn3+$cEI+Kwa_eLm7u7i|y#SJh$Ja=H&PVPRIeq z>1O?^Ym@W?sMmvstP-sHQi!XcrP8^t7*mpr8@6jRW`DJx+`hD@m&p4$HWblX zzfh@LQ2%NizzhJ!`Ma-jG=$6HF3FG z&pp9ib`*D6fHhSHn{LR;@5;_mw!OO@dtR7*)*Ege{57Kt#Kq$kN91@TW44t6-2bx-%7k6|6303^;wQyJn(dN`6V#bm7}Y{v&?51O2ln9LTU zi`Jl{?{p2yxjDX zvXI;E$%TR+N+ZbZF@tDoI~V{J<08aHg@C(O)4}$OU5-Np$iiv0I(^$U_0wxF>u&bc zi?tp6r{dvXkZTbGPz@mr&Ff8E9d8TTmIQ>+FilAr!=7hEVCdb9-ubK$06+k00|I`U z(pxhbX-s3sTMd zA_h+ELUmTb?v^mIjJ-_Go(Gle4D;BxnvACKn&EFU5k1Lx5q%osE#LkEG`qg#t)QCC zv02H?E#eKT0)kvNx2bd**HOBGSVz+ zpPrEgP;`ZNQWd-;e~XU#tGZ+gM>U#~xttguA-bd>oNOM6Q4!D7O~btW0K#ol*yvoA zZl9Rp2L^_=<+lH0rhOGvPIP=bC`8F~hjk-#-t2;Y$r6?bPm`q+{CsE>N9R1%@M{%z zjTv@_R|}=1SGH>^i7^vh;Ydvsi7TQ&z&<^YfZl0%5FvK|3WI*#y1j{M?KS5&rZ)H+ zLh>g!iJ|7(1O~ zuzJ=74;%pxdm$J#sxAXz1_nKnJTNR|N@#L^HfO(7baE^WEtd2;#+N=9yWl51)0?uQ z9iWh(EG#Y8$Anc-E@*Rx%62lDIa2uMNoeKAax~{|4o7CwDG{b7CQqqz3f^T?PLUh{ zz42P;A+$M1A*Y}0hc8Z%S8V0iWj$BSn0rxESlr+e5jWoz@TBnk_l5Ohy}`ecUVoz; zt_T1cOfs+xFu~ztgl+xqI$y^pks)_grr#-dTj!mANC^l4A}fQzs;-a1Wf}PKRrCT_ z=LANsz%0TMpgCTZn%XU!24LNpXQ#j4k(npf&855M5bSHZ8GaaTJOJHyd7a>3q=0NL z`6~HQ4Ib%mTerSX6``sXFDT$z)kiIlG^SzFNs8KPO?+_G$pzDIk4==nso=9&Pg+S+bLF{C>05bfjhd#jB(T7m+zyvtu7}Y`H!mheK!u1$DJIA;!a4#n%xOFzx&ru=q!j8am7%P zVaCFMpVNP`0aI%NkQ*7!Cl#o`)_W4GM1Sxet<(H=x{C)@NG~RC$J4n}2d1Wq#R{X> zgX;~)b#IoMq#5i%uq!CmPQ4B@KeapJ)~4PuPOlmLWu(4bNAlMLvR*SvY8#aDBUs=v zjHV84&pAn5x^ABs3lR3$Z&l@QyW@hawLClOmX{Xoj1DHBKW%WJr-q13#QK)(%9OfHh=tJX1cz;&YU_S0V1cx10_2AS8ei+$%6}BPR+Oh@_s-6#_^MFp$;R{ES67 z9G~QD%$OrTFcRcwmZ~+x5TAypf580k?}M^^FtV;lEDZcVE#Z{EkXtM#yUVc}%p2M` z`-kd=HV2p+Gt&uS>8>h4zvWgDr<9uc$tjqE3YZF(b571U9zOgSB23?5aH^%(3imT7%Jd~x|JAX z-;ARWmEgCLG8E~Ysu_`$VnW$ce3~A;V6E;H8^Mu^!~YAFJnb~akP;?E*ZV!+>EI}CRY6!ZB+V-a zFRZRG%nbX;K$07xKh@IeCrmOh2=d2)G4!;;fb_@;DY7D#eC0Yr7=DN+f!Gv+NIzpR zt_&QPV^BHNM@X+K8b=HfL@!`%-d?gbDNiZuv5=H&SXXrzA`O$peHDG+4Cr}wL(_DT z5kS4~bjt}I^6}F>)mTQ;1n!9DV|)sH^QjD-9t@mqnI7nGBmoVqO%B&GkT>;mpwQ|w zjjxN?l#Rpof=YwY+%$PHaiAQPGY=#Z*E07)^`s;p|S?oxZ=Go7= z@0G^t2-8A1dP1D!QCQ@w%{C4&sYXC<71@XCuV?Rd^NT^4x)VnkM45p@4dgjfvXzm; zo;QDiP_D-XAV&{j_O8~UcThEtOKcn}1WMH4I4~DM5t$^Lg<^xN8}rlgx>8ik_{nYD z@py3K@54E=yr4-@TTB(rg$l=JXt+)X<5bnqn@87~z|VqPk3+4JOt&(wx>YH<6C= zvQV_ek-e?Au~IZ=oa9K-nb(~{@RmdLeCI!_rp7(68}(odxOHS#%~A24$;bL>7+aOWjV&W{XbA`ku*m`xn`zcKN^0!4!i6nqqO*@} zCg{2*8o=7jEX=JFxpRi#*JiE1gcG!y+@Eqm2-joW-`vo@w^=P6kzH2-Wc0nrv3_%= z*%YdF`}60AKT2O6ATISCZ@A=(o#RSM)A*ADM>(Z)>ud{VawEpF9B+QbP*Si5RaV%P zG?WI3A|fch&!+@aTF}-|s$pAm81W8~;Jxr<#6hIdD3xDAKv6}lMTtxtMpuG?xz*@* zT45qxjd$D{zK~`Cmo2vvKXVZh7ydK|%}5<0ttDsl!PCakVyZ?^e`V}A%qhcAMxfo{ ztJ5X3BRQcsH~iB;>$=Cj{;w=6ir#RekPiR=xtkCY00O)OLCRKg%JOpw3nK*}9dl<9 zb;xJoSnaEq%J$rRzEkng_iV`Y|BB^Gq<&C30zy`O@^f0IzjIcT5uB7|P`R|Lxv@(a zOPA9G_zKXn%Hm^}gnJkUwvILR7m^bD?Dbs^-=0T)NC~3wv1hePmbc!el4~jY&xez>ull}V>dDv(H-roR(~z6t zyhkTxx*nb^lBE<%@RnoHb%-bHjPqoJG^U7;d&YJ?Je(XpzgQ^Z`D(`M{U(K-I%5+# z0$5bRo(Pwsouqr^fJ>za`VmU%^+qEpTE4|H1f$)OEw#@qHLoK}-IRZ3p8WUVr}e#W zhz=osYKZPbAL32~7B%)Xhae&(kvxosoBgcuh_z+>I9bs6qO#y#5LC12Np0Rm>a`Ak zsW_oYe%)`nj_!@*5=&5uMImKLO|$cUPTH3Z1+?FPh;jd=(DX4QlMjlz=Cm+nLh`=2 zpj*r^yipK~+eqw}tPq{buCfJ!O5_)?h;j-=ZKm*fF=*w23DlfIX;!zihAy_x)dc(HdPwJ&q(eg)(}d}H?j|^G^P9=0 zQ-Ci|G6TI}m0*hOT>OXjX8l#wM{x)9@b+iNTl4Yn#vzx!ZLQopInDKZ=@2*$CjbC6 zRN$-mRB9krvB>NUdc>HiGj2l_2%2#9fUH>_dj(*B(HB zKM*2#&MhK}QOXs@i6?RN%co!X6{8>oLvLG{3T#INW=s;%jsq zGam2I<1k4HIhW>A#jAJ zaCs8qDUu|>gBO5Nawu?_3O5)qLSc*+v6_;iTcKQHF$>f9365LA!>(g>dqhDS_ zSH;IqM_x&S7hzVoQ}6J|5t9_ro7t;b&Bz^#-WfZeCd_ydSOOAtD17Dn0@n+1|F;hD zV~S8%ci?YgCTH`uM8x)KF{U6`_oqLz4s{1*W~!bO0(Kwsn%d*~uXA&-OwgT!+|CCb zIp1DBZ+!H=Gtug)-ot>yD{{WU0D;jg0RsO_2Y&03)E78mtC(!&30x0!+?v{^p`!w{ z!xHI^w#d5lO@4JL;uj#sm{w8BupN=r!B`Q9>1iGUTc5z zHrGhO?4H~4>sfDXyOnRqN{!L5CssR2-i8gA>|qB9bS)~{SJagk^iW)@5se>hj;AOp ziqXN@<$%@2 z4(-azi^zu+%#!ox3BaRr)M7*ugc!rbV&fUg&IoXEBuut|kWFAl5W7H{70T2b)nk0< z_D&M_Y~m`A#`9PE$}OdZacbKpF1OHktAb%KJaRK5A{aNVAE9OyX_NkBJJBW%%nsK& zGs0Z`oeQ0ax4y)ea(-m%b__lh@@Bc&B-3ylz;(Q5{_bktTxTawc7qyi_Q@47eJ4w=Q@?< zcB3r2lv5|MfRm~PV-88Dre$^j_dU4o@e}Kh=DE9Vc%9#yMADW2p3!-vHuI6LUZ1Xo z>O)i85A4*@?4Y9qayifxlu9UT_-l@zG*5su zr`Dgjgh7#RaL%5FhW-)BzlSv{ke>!C+f37|pW{L^1VY>sw25zGq5Kg$aei&ioH_!V zc6?>#<_$L~Ipq&>eMEkwXVE2&OcYlUGpq677p$v2jMAAs?ntVIOiWu8{Z#=OSIV0W1cd;L%7R3^|1Ga6b zqM_&hGs>l~1*#)bz-ZuRS`dg9f7Fs3J#TXKfVEc`w^CtCr35Ga44^~=1N1Ne=-UQJ zU&j#Ez)bAkqSJ#su~YYY=zBC~MQ^?QhoWh#OFSu^F+wK=BDE`JQbW`1Sfju6-1=5k(`Sb zlEg}@qt&piwGF2M1LP?K;NPGO;#|7y>A$&B@FHqW#O-g0YUT3F35t8KVcF;pzC)6X zoT-yEn0f$0JSy>VqKI#TXZ+kf_ktS@xGfA$=pR-6H#R4W|Aez$pWhF;V^n3OsJ#v8 z6MO`v2tHd)<~nXN1yDmT5tCUeHSPe-qg#;XM1iAH@1$tIR z93W7Iy=|SHU7*)g+rWy$`Nti^68$nqxlxLm9D2LEF*Nq2MMiSluO6$Yt#DNe-S@05 zUrw33rHXxJX^rIL@N|m|B_8Ml&x?$1zo|!q=_~q|MLVl5=q`TgrpiWbS<6WjzP%UBJiZ^m%zG&yTSY0jY$8&`TxariLPAkX7U;O= za0n_vlSc_W(c-a4v$#a7RSE!@Jfe1M7lzYEExKVoTISHdlCGAP^?4e9I+&R?@I$4= zFMnutqn zI5p#sRR|LtPkRZ#cU=-0QWopq?rk}OTOEkBMR_?ZB z2g0x_GX9_IDkZI5iH3nT_r6h-DhH9;xIc}~uzu=DROYJJuFt1Bl)NmFIBjAx&5@<` zDP^=(o=I0bf4nyp`mJ8PPFN_e3Mb{(MGqI9yS3okBF~?Xa0a?v*k=yvK~<<7(yftS zco{|Et?m>#DZ(gJDL+jKkWuiH&j_%4-h3fv+_W6cE{76D^)*8+e4Qxx8HaL{Ra4;Z zhB*l@F%q|CtD3eS+CGJOTEkEFkW^Lxx1vgLiGcwhPj0omhR^Y*^81HkxehEgRyG3> zuBGRH$|n@_4Xd^>@yzF?)>MKjqnD&EPK3RfdbyFaYhE!b%uc*|RWUb{TcI=*EV3C2 z>~KPw(I32v-eZB9+rM8tBM>FJ?%>*O*@_AxN#+YU3?NBpX#Kb8u!A%y)6-tlOr_R= zH-?#df>x(%Agm(NQed*~={vq8&zKz@yT*I?%ZCp%=3NoP*Ba__*42$&w~N0&5pv?U z5EZJrxR@QlIeSpVXB0R-x#02!3(*a=C1-3<2qB%MIa(vMaYX(S?QrgyYs_lU$eJHn zf%Ks&R@Dw|`tzq2T`$Ibp!d}7@C(p4YNDGBBSig@cQ@U|jh<9vKQQ%uFEpbLNuh16 znP7-SeY7rF1bsm_$%>;r=9&jBQm7I}COQK2ytQd7qR$fC8!xhDmQ!`|UtWaNh%*+G z+m?;1&*?)vp4}7D%=+(K>tD#>u9Jl%6JvATX!MjFoi8%-x~7oo`KL9Cwk zWmh)Jfn(^|Eq+d|4^a@!);U?IwBn6L)JmQ5+dA!ri+=FChLu3-_RrkCn)tb_V_A-O z5-JSu7ty)3s1t?o%4|v-e7q*P)2=-%enC9?6iH{($~thJRP`scqK0Y#iZ+V^BLi29 zjGIeyt-0P|=^7f2tsbtex9GBL3BYnLE}+X!4>C6Qq!Fhq$lG5z=G-n1C3D`0s!oM@ zLVEI3p#TDIbCu!-e!dGK__leEudHsby<Lc z^`KGrn;$MNnqE(m28;kR??pu$JQ*NyD@26*-7%7nCD?vXSy3pQKOIjpD9l{6W{L*jTF{SE5 zL`kYKeA!N#l?o@$$y{7zF@~}b%t=FFkxbbE`1+$vRX7HHdu!&Ysku45(&9)ZB`K{t zun*J_d~l|W>n(cVx-Pbo@s~2?D&|Q{i;>&)@Ft{=xj@%JNU8Ztzbi4TwYmcuw1xT; zVa-F{mYP=04|YqrV|<0J>M zO+*Ake8qB|?b=usp94W~RVZnUjwGwBh^C9VV&p)GgGFNMgbm&)AHsaQZ6soe?ad9y z0sAh$0G$*1pO(%Trea|*M9!(AWAY#n_!5}XoI znm|kuqX>Z&0UnmWRuq(n3?Akn{s zhG8Ah&8@-)p+5yC{VlsiwO6VSB%>HPGH?88w|W{PF}w?5h~ex*kg9S@IONCT%qWLR z%o&b6A}~w{9Ou}p%gT@_R8Ii*<5;wrGCH>SQ7&+Ph((U4zTV0$oy6nOSierP|pstRHm5>;~+c)}zY1{!mO{dNXUE{-cN4g}yTV2VXaI$?GEfoOw|5 zmV376^5eUE4ZcMeoA+Hm()Jq2{~N#cFPQ!N$6vWzEtZ^E-85!sO^RfrM^`+^(>~Vqx7G-)+HJ(=mFaM{ ztL}E4C+PVF1fc4sB1TQjKX zL4iR+XE}cqW=T}cFT#F?ZB%vbsY6mtYjEdT6or*M!ifk*-H0;uHN`yUm~*MLy}2s> z6%VLl%dGc~&@v^ho0~_Ka%kgEPmin8NyG1wD?Z=sfHjeDtzbP7; zaQeAsKl-JuhCIBnY%}VuLDP4j{mW$+5`yzDFL6;og)6oWw#j}`Ku{>AnDvA3ZG4IX zlrRW7TVQftkDJb${ufoN&pr_N_06}**Wb!iYugFp77kYEemXbOkrGynFZ z=HR@gT%J=GwNR%m$NV6+#0${NL(|!mt@XGojM->Y4A!eaaaIfb~4yyOHs{DV86u)kCPjYC{L7kis0BR zFEI+0CkmYbqL^K~Ak?o}x*v_&V-~#_7)F9QQ<~Qp(TD{hw(bh2EgQE+&TvlJrOEeI zQ0X{jHr*_14$7dFkb)4L?E~A3f~cO}g?ky$Z6Q*?my=nY0d%Oe=ehm^<*&pp`{i@o zRX(a_8sSVyez56IF9E45jq=fp0hzuW0xoz`=Q%j_I{(Ow0LIK&FsqDFN5p9jFb_~i zMRK7^#U8*ayrk$Hm%X888&?XW9c|d83K*EzDr~jn7SRzhv}r4qlS7x@{`R%altP@R zDK|v#+;#4Bc-uV}@_OZ`ZgJOO-tJfbH@BCvR-BIOneNtEP2aAVlB?Y``VJScy*QRl zt?@^9eM6{h>!{HKoF=ck_ygcSzsAT9&%C731SD9Ej(fn_@MJGn;>#m5G7Zcl+w42T99sjdI z@?Uusm&WjS{x2DFxH}Aws8)M#O5KJdf1~K+)zMdq-TNB)x@>kNft~b5%&>NOl=gxZ z4*#h@0UZbEgUK%6w*_mUDKqQ23}hWS#Js;R^g|li%6M(-><02a$qsHA5(^z%h87>L zXy=E@zTX#=3M2j(r&--&xMG>F>1lYXGB zYGHm95XD)%)&26HmzqYI41q;I>a7M-DPK)bIU4OEoeJ#yZy9IDY#+ z1da3AUU&9iGBd~-JKB-bd7T`Rd^>1>%H7u0{e^1Foh7WKmKjTrgC-RKlXzEMmeb`Z2BrO4mGo-}<6BY-Gh<;!9y} z%+B77r@62FNQ0^lL)R0eML#$fQHScS)M0dI*pz#uCNBW{xWj)ZuDyZs=P04;R%Xb4 zR=0^HEe)piOH)mI21X071Zln@vc^Gt4W@ForjEMeA05Du)sbtUF!X+seCzodj(U*mcw9eChO9Fk z`#im=g=|R|<#lljW?p4=%uq2d15L>nl9m)kBHo>A0+Of1WALQatltTeNy?xQ`dNmSpPws7oq*nH`W5&~$detU7fY zTg5XXMttzm=qlANc!7~Qa*=GM)g3(Y@4C6akQ+25x8peA1*sYy7S=Q3fM>NNBVmOvXKd>={obfh*GlF9fGmA9 zv@4fPiB)-3v+bU;wnH@y0J8>KPAi?shIrOT4FnWruV}`vj9DXvk$Wm#8I-H`cR5?m zMZnLmBfefLY}hdlXHZ#?mPi*7n;n?o59p?N@O}FU&51|Zucqr!go8Jwzu*Ig&!-&3 zd-N3y%$?hIIit7*RbM=w!EMyO)Ij!`vf*v=6ai>EDMf~YVG4js6&RqB00k0&EsP)* zz@Qk*@+U~5E_MGX6`vf%2#5Awr%fV*1&P(G-IK|{v398~=i@l%l%nkMGlRkHm(7#6 zmAHa(>j=6xN2;G>7L9*0(=~7tTeE;ak`Ah?(`dXJbceIzp|?5P(~|VvA2BK~Yp*@l zykkG$_9rZ1*xiJ@PaxL4Zy4?F^5jPF`)EfMT%k%|AD)(z;x+|3&s2;0vKmiJ>=1PS zsMv95IYp}>L23*jbjAeZvth@@b2VLl*6DaxXVYaXYeqX2p4_14`d|ZiUAfu~?Wbq% zm2C>=*JEo1tSx&z0b?;6=e-cl&ePgSWz~1H{RpXKLm{mw2F8ktL z%HunKSho#tuV0<}AKSQp6%l_SHxvkfAgv7-%r7~wC)bAA-h|n}ZDnw<7FCd@(0*=~ za7r(EEl@mmMMZl{RdxVL6+yvOhl>t3FpOhh)wg@Wf2l(>Cq&PnkUJ>DAS=k(?*<*r z;z^l4dHQKEY51wUz-9)n?i$17Tei#0JLsq9p){X{U(jX#E*i+V|H{~M%5Lw+LFWtS zm)vD~#=9#{dG8r-+2=mZ>3?#|f6RAaTlHhQ9WF|v!I9ZJ?iF;N^vGpsD!Pm|8gHWkNexw; zb-5+*UQ>0;<%3_@aEjGpjOXU9djj3dIqG#&x1^T0&tkf-{wlVzc>L=y@sZAN&@YwN zwN{|+n-`c71>Sb0aN}3@zves&T=H_*xBlVeHjrQBvIUsanC4WXh=3=ueP&2*>JpO1 z07!E4LAIALzomjX=F0Qwdh)DE?O71Ip##020V`dZ9hY1tq7K%?_$KuF09dU{@gwn% z)q6VcKaPjB#n|{bP3%naYHkP7Nht>*~eHSGtDba7r@dM$v|Fi3Vpr1fD1%8=!9ImF%K-M*eWelUQ!nI}%P zw>17hFp7pot+I?O2_ber<<{5-T9m(uay*yXpf(p5qX`d^FWXx&&z+mUoB5j>k>2-q zc=1)HR14gE;}gE9S@zd(Z>I;AES&=V?y1Sc6t|7guCZKsmJ?eR?X#Wns_9cFV$v~h zl`=$zSp+#npPIEDJJs^seIsLYr?$Dm-Rg)|xYC3G81Y&R ziVFCQW?x`Y;AKdbV#{Oq=k`j{)Up`H+7?U5&7&+DYG&s{1nU*r3^@Sph9APkPkOyn zL_hGfthfH^YOeh&bjp(!f$Wqeu+spW5HCd~;jrwQ2EksF@I(q~EuqnoY1BOrnrqI` zyG1<~h3O=_JJeZ%GLaTu_`KdzVy>OLWBI;?9#sxQ`~`I$e5ID7o~uBWBO@OGf{6wK z+Cqzck-f4VhuRA>IE5yT6c2 zGXYSZJT){Qka0y3<2e~T2j-Y&r3~nt_WR{4YWlK7utWd|z#}{Co<@0X-W0TZJ`bJx=C122CM)}}IlQKucTj^8*Zu3QOwdoc zAIfX8K7>}PRAX?tkjgGZQe zUCE|7!yd>?R|>sAGZcmGUn(p%p^npDy|R3Npc(yO^5xOzv%9meOg8wgBSm+jKi_+K zeq?)_ekMQ^)wxpxeaHa#oThh1`a7+b_bg7vO(OK(!Z65LV1Q;dCyK(@jR0a(wjW8Ho2?#QI@$5XMLvz zkwsYg1eedG^g1SFXPe`X2eSO?hT`I%BgMve%J>K#*9jM>HscltG8U4Xr?L6`=&Q`n zHmY~;i2l}&OY|qu$Kv1|Bo&u-lso;3G-LR+_DW8^1zCAQfaMhvyISfBd-wiq&+~H> zUAt+3Yx^JGI5o) zk-q5RJS}zOl#9;^>co|FWRQp{M-BhT#q3x#`$5o!eo{s5#d(^M>i^X-{Y|VslmOZj zl)ic7B}L~1FEx~t@F1R1$e>Yu-oUD&hL~L?#zMS0m1kDe-gv<{L+3b0)-Nt9j)wlZ#Z7GoKbBs|g8Nz0v+HdUtKf2yJtm(h)8{ftlHDDu0 z4;V0dbci}ejdY`=L`J8Agn+1{yK97Wm$ZPOw16Nf0>+mv3qfq_+Ybfr99o zN%37hTpX{~AnH?V*}KqUqOmfMl;(|(+rWnT>#`@#RW+|~=NM1A36NW6@Ma_Xl!*jk zyvq7Sm9w}+EAM^WhXj~5$E!G#lMa=^LrGl*-^KHb~NvLw}YI-f?kab)501Bqqc1+vp}CeeZuVx`Ryt+l~y_WiR!KnjEM zAspoMq9VDA8K%=b1hQ;Q9_Do_aO#C_TE-y6>;Ydjp7qsdy=%2LXB5epSfiZ^7BPLR z>i41MN^5f?tSw>pcN!D{X45BVnyPT5nUbDWc)8r7Cc8+o`BxfJq8>;!G4m*Tj5c+f zg4VuDC0}~R%nKO2o`&{ssAi@}#EQWo$>In==jMjBCrZZyRB2wrkHgyP&}P9O;JNEO(rzg*%xN9Ge147cRLwem~79mt%y7* zqS_bAWD5w0Toj3v2eDOiIHDn|w$#;8exwOD2`&BBq&AIpV)-X-6kk|nahxChfnGi0 zf0VKAXHnaSTSn%MREB1~&n8065u}GAs%zE{OERCf+dLz_wc|T>DEswdAj&`6)ZG+6dTqPJs%rPG z$JaX_jo3Kn$Y~{`Iy7^%o=VH~dOziv_?_dh1cIe1x>(NwkV=zo!tvUxKCSHv+TE6g zxR&_jYSk4z>%KxyQ(s!pQ#Y2W%~k{Yv<2mBaWQf1tom`55S(Of#*6+Rf@!WJ64T4y zzxx)4AGmqFlyZ*UVd9TN@M;W`)Neeb6UpP86F0hVZtxsf-Lcw#?%0rc`|P`=ejc)J zOV#%kL^)~ZbD%keQ&C1MG}KlR<_W-XsuA_y3d+@GboT3TEBx^J(9zlX{9SqCgJr(& zV{O7V2CDA#QNnR_EV!X>$iP{)Q7)!3plLfF3aKyHF*97}4uCmDNUG8X_KvmnHn9nJFn*O$h@H?#mMp8PS;wE#!w+W#X`I)K2!JAhP_@*q`B!sy|-ef6j$!V+MT4E z?$aONJ~%qkeL6zDfkK#$-U+aQ*6E3=3$J>%O<6-6PrzTmNz8j$X+@PthdY4Q=Rre-K!hIB23D zp}n*BQOit{V_B9F%UP+|_%_`kd-3avUFl1z*77(%MRBm#Tq}hmk3X{hq-$#1J-f}sHFL6W3# zIC(i`k@#C9=zTSx!tH9q`+^A?Ous7z%Z5w6#k|uM4fBP~wLbzF**%Mo2#N$>PwIPIkW8%kP@uY_JA*r}W;huarvU^-+DTJdd~+JYGEsP&F5i1M=1f_H@Qq(y*-5B{x%}#CzfHb>xsaB6= z&!#*Er}fKk$%!K!9c#m!1#_j8t1b9yfGK!q@kxde=E1Y6j0JOylmx+KwB?dt*LELqaiB2P$csk)N57!R06R#)ooe0^F50A{yoy@8x8FpFir zq<0T!Xwy_5d3GZAr_sW~?u}-nq>25--gr7R*!wY$@z!0$7tYI2X=&S4D+b-m-+55~ zVYmOcec(t3Kz53Z7ijoy5j;d2*nQMR*cGHrsgRpuLhjFWa1%;2rvI@xH=5#`7+*b$ zHJo?4BP^~?``S%kM4g)f!Z1(4ir(Mfe9G$(>csV`HAY!oqo}`ZypBQh97!Y@)+(EFYsQZt|KUva?*j(6soCF{bV& zLmj1g)Q(upp!nm?gVsk^y)5{jElT~YH8I;I-uhA{) zmxT?EOj0|tKZ78)FOu<&S6Zl!FEQL0Y75Z2GZ90@EGBw<$8ydxYPQg@-O2j^Kul&V9vwTL#{@7 z8H_DIe`RL|niZ-1b0AW5O~3ze$fikGx`f-yinS~=dbskVq5i#xqeuOp=R*uD5lwH+ zU)#jxzoiEdnhdzyoh$XFz)7Mseg}yuNVGaVKaQEknG`@KG+4z(LHiv>0HaQItk!7v zkzsmp0Q+}?rC`0atw~00JtZ?s(v@_}SMOjW>$br(?{hgA|6GaRQ}v8rkD&{d3W#J% zS+fr9hEi-P@28)cvkcSfp?Cwrlh@d}&;G=6|D)`9`(GWy618Og>-G0wt?>jfy4o3A zbTFu5QVhMV+{Am>!sLx)`d_eVh#mmrB4QLfd>j9?x$S24GL(_cz8Qq+tdRKm_t;k!h_t+z=yzL>Sea+ql%TpRaj^mR4sZfQ_Q{QzRG79nDhw?me_< zbzyM#YX7PQMz(SF^Km9cl4|qCd8Gg;0{$loq7WqJr5}ddGz$#I<1^$^^SLvs=91iX zU8)KEk-4ID?aw6-$!R&*j3eD%e3H+Nbft|(*E=`(9~+}n!?gN?FMY6u!{l7X@5-2d zDhy!Ovx4m^7u@C#AaUr$_xe=Zfc?s-wxDsA&xK5CH*?;PTltrJ_OF!t6oAE^qaOt* zs7vs=v@oCgD14~Jwg~ZrCsSG&gGWH500Bbv(T0Xb17R<-LrJsK?F0KyTbWm_$8VEJ zxrq}GT1qYONHTL`&=z0c`-*lvjQqf4sR6H_&K?m zTJ$5>o7htI;*;$~XeN#lCt&63V4&*)m&1i1M|4USd)-c|L&mU4n#(CixZq{EyD(8Qwa$y|QgVhngs3W6_iSrD%a*ONX6qD6&c2k(2 z6OydXX_?cZZXe)`@{`kEON1=xRq&V&fEdFOSp)MulJaqtV{@hf(aXA{v~C;lEgvWT z%Ew+}Um&pkDVKj6(ZAH^9uB!v-JX=ewic)KvM=)=$w!@&BT*IuT9dYdr)fs_S9zaP zH+C`4{q9z4^~rh6zv;Qww5jBEWvI-o$sJRZBb?DMpZ{>?-S;y&6)Ox3z#tXD!5X7W zUnaj&j*8)FN#s~59|0IxWypZSkqjaWkyP6|=7K-h*k$@i#$||^7jsTlXVSnagZSq? zc-n3~%#~Qj;sGcye9uUTR}9^Jw(* z3iUs`?3D?w2Yv|i{mi>VLTB<&V=NF}`57_64(U??ruvty10-v#B2z&~UiV3jB>E^( z`aARrwYs>-@=3BZ=%z$prMydDReMM_#`kNN59U)%?F1|=Kj{ki=wV8`9OZUwywI;` z3fjrE_r_c)d-+qLN}(yKZrRJg6_K2BxPb^9%r1eamp)D^yR6vupceEJ%_UqFTSjO>$zGNt8LhH&rZzZ|7jWi zRpO{0{vNE#3se`JI^(|`t8z5$8pww^B1c0WFMD2L7{Vz&G~o0d1OP(gP>|~OEm{AE zm9vOEdK+;Dv($2n0d^jI{9L>|TGHYfhNyAo3H<80?_4giQWgxFz|>Kn|iu_C(0t$`CL z(g|0O&9Ro6Q>$|ugmVs!W*`+rN6AIs%*~Y5%545&@7? z5UCLB%U5$@mhcxKUwA2p2eY9i&~iT$29J4<83ChXv!XJqoiuRCNs;s@FiUhA6zu%z zS_N#x-#3v`P`V)}^rXHEz#ZFpTcTWacITV7o}C|5=&fOJeEQ3>H8yQqlKcbDr3x-hJqahf3kQkB7>{-9xi428eIlJZcstM2K};i7b(u{)8BzF8t`+u zJTx-XYKZBYDwLk8B_<{_q;-RKVId_e+(i8QB1bX^u%5a0R9`@&wMZ3h~=0}xsRncUjwr!N|>lC0ksyy zfW~x5Of_o4gLq^#eU*%&c|Tqk&OpZsrW4n#WVl8#hF(cBeP8-(_Ux^Hg-w73dIYg9 zRdEhaQUXFWUFQVU-QvUthfOqcvCcqSW0uNcs0hboWoHyZ z7BcrIXhOY0C<;#IxP;VpILsnz5LdiWtGq|Z!V`YZf)ElD49c!AqPf{2=Gdi8uS{r^ zlgKzea*>7i3DAeXh1~@51`hwfvTgnrIW98*-S(idrH+gl>~^JBbf9f02dAtNbRc6G znd+AM#{C7K?Gz~h|-st)}CvR`=V9ctTN&B z@stA77ZtkNJT7X$6JE&v)N3tmIfX6y6TUinV@Tav(e0Db{v=(D%L%CO7@h}Di66z) zytkx<)-hpR-K#wf?QBxEj2ad^EpR5Tb=5kgl(EX*tGwB}Q>Nv5LM?@+t{pbFFBdjG zu?DbEGdsC09tfxYvC_Joa-ge&;4z_psnnn@po@V6o;c|+);}?*nc|>~8fnET-u4`B zjFwyB`o=<;EuzYmNfe?7j+*=z7z>R)4>cI!4TDnL>7tSe=2UD3-P_Ky*i*#pvf^0m0so$?v|BVUwljB5R63D_IyB{(_&NkGGRw0J`VOR6BHeQ{1&^+w$wS?m4Cs_@)6B!{2bRp_%auQSCT zNrL(nlT`WDW3matOXf#U)oo$sViwjFWq#U&?4Uy?uF6Xzf`r(LzCTHU7@j9uM$_(~izNyh1n@a)Mxru;hUSm$OxY5{!t`>-@-y`i z(0uhh_Y=LvndX2zsG&Zk)trPvf7ClS|hR&%&mxEr#%OYR#A_V;6v^zZv-yS z$6RowNrz+bky26XI6+!C!aMGj)2OMk$s(W@!N{CstAydCkyUpdZyi?@*A~})4t8P3 zFbedT;p7=ev_~|*I3ff-36cz1*qM^v@B#;7_t;{AnkoTxnO6IgK&gs;ezDQVdrHg+epdqXTPYj(Z_m7t{8e=$&b~6`{ zGdUdNJGY~$VqPYcT-ySDhH>!W(NT<2G7p9y>*K}!fD59MjKCqA<*e*#9#vh-rjlSd z*XYZ_nX}~|Z^xo``DA&ow0cjs6+d4$7rq`?5~I~mL-AHp%jPm<5mM+-nyOam+6oX> zUebx==e-8KpjK&t;S|tQOTZ`$rDPQ8>lZlD?`KAL_PrYm9XA7Q?s7Z3pOV*LuCk*ua$BP`>EMLqjttUOwam)TpW!i*^yr1?&mWAdl1oh7 z0N=$DM#Hi`yxXzI$-;(Hr*F6y=0ZA4FvNHJVqVuSd)2ezt&_%{cG(+od~bo(9govE zM~>4#SWw1zq62$X&AVRlJ5ui@7oK}CeEf53)z70kRQlJ`lXTsfO|0p_=s`L3=-m-q z`L13wgQiSk8H=+ZkG?((?r8p!Y)r{`8+#rK?Ji}GVy3Z87Uci~%ou+V)4K9m_AQ$WWY7tSkH z$B*Y~Ga{H`d9U+9>==+c!G!`$RVIlpN)?2s#qXto{!kiI7$U=Nd)tA2^MlNIR`=y? zZ?hM3BKS$nie__deq4JKn>%r9=?@Vu$z=p^;mFagM(K597eis%MIL<%KT;?~IO zg5sp*kEWtdJChWv_QV1oW&xO%gVO^Y|1Ejte%vhq@uY8bdbT}=qteg?g5vsn-V+;8jG!p9;72{ zLONJ!8S1oPWI@vr!Kzqx>uBC^2wry8d{{Z=ol`J;@(V%J^VhqMj6@S1)s4n*x9fd( zPLF^%c=lE2VqA(phzHK&PjSM2dFup~L1ivQiTe$^@$*d3!;~YRM#uVWYd_o^R18FlsWTR5xs25E z`x(E~Cp<&VbOh_W2_+%Nz`_+uU-)=x8@9B)GS89566d42gwnnv9vQjsZrda3e7@a^ zD$U!0e-S$G^-F4mVT||mOUOm?u_`GtD=qMF_QpT+C2Co0r|J_#Q?awSFGapN=ISee zLPN97-K1R)mMD8uBl(T%5hooOPY4T=oOABjmfK&@_EpZ#O z5V7>5n~5w%H)*U1&8gcl17?CR^b7-eVBZKFWT;O~W^^6%Ack@!TFc))AuDw%^E!_H2;a}gG!EZ-R|N2yQH;excts7A&k9E@6 zw4tIvl4nop?jS=FuNF&b0#g)a$XHe$(a^Z3_|I#4GIDM&ADft^SCSuOfWs=`CZE@}9NevmM%O4EI*yLy&4joyMeQuM zdjG*1C*F>!%|G(^Ej(W~ub(Z|lxlFIol?3|^E#_hp0#5|l1|UA*e}uY_$=nUGE^|U zkMoLoB=uW?XsZlqyD-|?22YYH^P+ft8ZnXLy1s&zFEWqve`z+i#43H*m~t0MZ!l}m zbJ*#4V0Zie4sNv6V?Or&I4iinHfE!t@%7fi6w2^LlT7QRQKl7%G&}{v8(qJ_?RlRt zAlAYAu5v8rh19g)&}S3eM0Gc`Uetr#=@dAv9WjvEC7BC85&fi7M-eyN3Iw}f2< z0IEgd8f=t93A>~<1`d@!%E~vlXtkz+C8<8Z(S-v%wpLvgVcT8k)&iyT8e?fBUBkIJ zG0C~#brtwpmY9Q;sPGz}q*K3aBfXJ3aJ+L0Y|4Y)xL?(3;#Zi!eb^g!qe$gpaRR+5-`ds@)GJZfvg~=bgKLx%sz5uEulqlf4VN zZ>{hC^K}m}{x)aw-!F3iYewScPIV+%H(ug1xjh%_`Gd`e$#KC@)+*(EMii`aS9?Z< zn*U2v-b0&50dEK=Ftr4mY2CJNU1)oDSTC+v6_s1vEYW|ZLFJp|^@+-B=GRmX92Pp~ zj9+U?I_UI#^Ik$N4rc}vRkmnZa1aLirsAfytbxPcz@+m`){GGE6w_Hzn?BKn2;vnN zKItv3TMcoyLTfmZY*) z()(*6YhSvVQ;Xlfyub7K(~Y$+%WJP+bv-`&8QZjs0RvG0{~X*MF2q8-e(Wd^l$wen z-YiwiRemj@H6SAB%FrJBi>otL{#>_rX&CL)_eR!_&;tR{#Lnl zs=(`1-q<4AhIHgRV!LqNRyj}jZ^xPo{E${nZ6A(&0osw{qg6Ep6S~Zy&NJ|;_Q+>) zTP)%gI?A*bx(|LOqQzV?JxSUxVld94N9EHqa3Np6ZkrhzpywoXGAnHI+iuxwVNV2j zHhqr_KF8^6C#apcfeMl<%$-EVOt>B=C`be;^ix`mRPCS;9rMv8CCA#NRMzMzl;|Jq zq@u7DMLDCAk9lzE#Kl0yYNpr5b$nT_z5j=+~HJSpV=xtMz^~iNg zJjy+MQ(SyHV4E&=V_4sew%(m9GBB>F}uyCIq#8GVCd+#%Ti4buhKEY@)u^sWl!BfQISreY?;jGKuyu8 zxuIunYzY-*517;?te-|i5>;MnnxM#1lA78(wS%EOF6s{|F&DK zNh3PZId{~9Iv=;QLD_V6a&TCkjEFD~Z=5o{p=kb`L)x%zdJH$R%!JYXt`T%ou3QG4 zHntZF(tG3ksw|Qx(z@mXiMI?ERL;{mtG}m@kjUZXz~p3$hH5;dF~%#BDo;O9b4QXj z6)LeIlI5wI0Vg+g-8V$y_aQWp%uPXuBYh&=Vt@ zTytS-c_{h`#!F2FrTjo!ubKh5$jQX4@r=izw9eOi4*r;{hC#O2=9sagfMV|c1#jc) zTF#RwR&!S=C5=hD0Att~M*#*@m7>s?i~ur>!z+$soXLhh34>+ln(npT|gd9%D&b*d{5C;uUi|h+V*-J@%*277CKmiyEG{grERm0j8Wj9 zpfQsVT~8ygBR9u&BTwiUW$TW(I6Jk941ao=v34MROJovt%~dqJCz_BIIc83r4^0H; z9=9UCrnhCk1MIOt(eQ*Pm*HG>uFg( z3>tS5pb!~ZVgYITKm@NLzsG#rEX*TPIy*+#@-uRX`LQC7A3GBl=a9#Us_VTOqu^Od_uV$m3)=YTyea@DdxXN$si9(^UbITrjy63PG}OGR>B% zN9_I4nf*T{Hq-<4|9}03T)YMVvb1cp7=6j*D17G->vd3LJ}GVX{=5pKa*3p2PSLQi zh!2K=8_Cb2=v5$VfpO9oE9NPejEi~xD0g!Vg0nSZ_ZQ5bec`s!1IVE-_wt1X(x$ZW zni(87yMB;Ah`CYCg4?joE4Y5yvV`^qo0k>&OznkHPK-Ltyb0}&7-yjE;}gA=oZ=Ik zF>?Qc(3Adpg*HESvwPB!A^N?Pc}m~#_@{~e6N?6^Fbg~NJMHXO4mu{2uMezRmj_uA zBXOdh*#sPYDW01Dt5%FiOe%;o2RP)vXWBI^kcMSuJL9A0xi>u#c-xcJj z-mS1YcHcW&lfS(FQP28^jAY?xefC3fc&7eDmEKi7#?#-QjXab&giIw&vY0-R336d~ zx<+&U`gN_ew_l}*Ry8WB3I!y-&M9;lOZ z-;oXFxYCdXlzW5IM)eL`C{GUDd;X%zDsE_ZC)`j>CHLj!v>7$-6rO)xT6_D}#ELy~ z^oX0KdAVr`O0<>&=0{AC-#E?R<2A3-@eV7*RuOZ|nPTHHth`mOYGTE*MmkU~%4rs} zuvg+c$Iiv5GPU`qsmg9~wY~TqqXfMaJ%NMTYtF`(oa2OCS)K2-;;U$iAL)L3*_dK$ zxjLz!`_zH~z~#?{lZSznkrOvY!|`&lH%Qq5AEu0c=hTl<+Wko)zz{i`g;Dhw!qc<0SA{jQ;pQ5y{#z8 zjcn6*uO6SL=Z}UiWh=tp@q&o_j2r^AESs2p#a5pts|0$VFW+)wy_(=alXgsS#uBj# zh8RomN(sIZ^xHo)#a6pOl#;I@dgY?coiA)_w^K5OJ)<9aEWNywPv9AC#g{V;IZ2Ez zy?KfJ<#ER?q1GqAebOFA$hEr0c_>wqri3c)h*R85oU`iHj=STv(zhkh-MV5G*)B&V z2Iy2GQpo5~SVG1Lgnuf=0{jth0HihLR6$#&F|J(I5=)1&0=lT(7g61tj-hsbtoSqO z`ke}~id4<1Q>KbkqW+$j$1c`0X427YUg4C0se>_B*CoMuT#PF&&)_*x?TcRQ=~Y5m z-~b{W$^F(6F1FivUibH($bxg`&YHQ8A3r_cDti9-@%Df8H2e#>rfsTiD;&SXE+dGE zuMekotaa>TqWaJQN|ZxYU1|;QIsh1x2e5SOwhuBD;8D;W4ZHaNZ{I|mK3=2W@I zb@!Pb`ICQmCS2qtNv$?r$$xI}vaRnVmUj<4Wn4X%s~ZhAHm#5w2`^A^mYnaVQds~j z9GML%&O@2)f)_;4Xb8Yex!J7&{j(r)Yi5=4(-o^X`i3ImpQ-}ZYiL+;OTNXPH;fpj z++1r6v<^si7N1576N${iL7_Gej+OE(26Rr?3`!+#mmheP2Myl+4$)SzUUR>vXV~W} zv``x>xU2oen+U(jU~z5f*Y$<^=3BHSPw#?)-T1CE(qA1^0I#R7-5B02YNkcUW5p=G zjIgpzj839;%r`LRotQ?bNHtM69d==>Z=!GDRcIFDS_sirgdx(yvuWxbx^JC?d}+p( z;^p*MpI98G~C;9Vxoh`s*E+v``I8?|=C(4$P9fM=q*I3Q46tNx(Mn+K zTpO>6Tv^U!3#P512D$3p^!~_TO2(6sgP=j#@OF1-EDLNW9=>^jrag{ZM)kuxi-bXpBE-OXZLmY+N z1RO{}(<(-+_bTDKjM}2nep5RgYUGW`zt_6IkjvDe-sQ~ji$yZ3BFP853SM!eS$b64 z)&cb>T$N{Pe$6U%8nNC=PuBs=0E#pqVxmD@cxHP;3so*=uvM<)H72uyd-4mb{jDZ> zK+n1lM;LmIh877@j$X+*rU9KiKeuG@hss7*h@&m)Ke=oMft2j;-{ zFWxq)Z49g-jd`H%)fTsyFD3WimPWiu{iiA@if!}#@zdSzo98?8!@$vbNRX5Y_%+uZ zv1vB+v@nE@hMR|xn^#@<7!K1`pR10Ku%1d+RY10N*$po{&8Z(~?|J1b5;mt_&?ixz zEdC}d(`o;zEl4S`73Ee|bTIS35x}JE)N3!>%*L6&?_X@>>-akFf_v4zW3i}Fa)h1a zM^{K`q7nPR&oAc~H2ZT6^Qv>-bmS{k)vv%IHW;I@A-=0B31%4#&OJOKEIC(ki;As4 z=O+x~okZp)OiYU$(_JVF{p%HE_CC^>MYb^C4&$GLg^A=?beu)KUf0K@EPVh|^aAy>9D)$j}o{g#QHs~p-U4C+3F!EUz zYu1#~qGY|k@W9h;F#kGmEfm!LbchtIX|FF_ZP>W z{R3!<$vTr9|(-MbRLeikMjJt!m3>OpJ2h#DX7s$p1z10q|QU^nh<0s`_Gy&HsD%GTdi*DE{KNm|3+ewXyz>2qE#4S^o(Has5= zxr&`dC=Yz`+n(i?YuP^b=KZb}yK9D*M_5{X5j)-*`DWLp^i|g7v)mYX@HMMQTSes^ zy)aG{`Q&cbZvOm{%fBM~5=O8b$|EyatFma*vegM2ktsyv{ZlzT%M+a!?mQv@&sIYQ zM+UC2hvQXZ>%uU_AyVx^y;8x5nqCNgQs~%xXsx?}U0`P6qBPxJKo+^|0uOKl`W`2e z=qwBjK;L;be{jo*jim{1>XQkP zC1LbGUjoQDawy!|d5o$BfYr?~&_WdIGbJ;`Gg8802%ZMqdPmojrTT3fhMcBtBXGL5 zn9*h`T^UE(8O@ftWqV(H?rE2gjG^n(z>5OI&ME%c+gTe!W@9`jd@8e}noJ_SU77mN z(xaZ~z+MR~Hy}b2j6KnowxZ|G-tOu9nTt-anlapeTz|IY_vhtV(P~i#mA{&PaUtN} zOC0q-{0q6&msH4s@zm`D7lulc6!qG#V-FD3l~sr^H!9m_s4ZNhR=EnC2AV-s0VPAj z!p$*iC6bUpa8(t6%ftH6qgM`m&<62S47b*4U9I$_Z($tap0ryY*F;tCz%uU1MSo?! zoD}Ae?OLq^BBEQ_g@%LbD=F+XO`h-B635zP0_>#_ck^cyeiC)ZxXs!TbN*sHoW^g+ z&Uk6?8r|+zULZ`IYX)TnuT^55$ z^@MfQs2BsipHT%v`@sHhkF*k&GH+&-w{Nmr_6=K8#E9Oo+hu*L$_hjCZ;!G)Q?*Q$ zuG53M1q6&~9X#Wt?1n%IYu|n%`1KPB+51NIkIgQ1K*CivBFqZIedpD6 zpJM&sRSk@oa{z`xGB=H%0U@KODq#aY0^Nbwa<2bFoX zS3(L_u0G?tSs1<6^Sa=lWMlcU0DmW&BLAX{bCqO1TK#|G^mj?x8$j}ruwTG>jCs(} z(0;IVGGin6V#RGk?E4ugZ#1*zg{Pmli<6>GN-AEa@aqg){d)La)uDns!dUf+LAfQ0 z2<$9Sc3=7q$04!gof;^}Wtt~r?9pW(LZ28>J8}oJ1gp2$f1ChhqBEk~U`=8`St|eR zS&j`-&`tub$4kAySE*de8tuGXhqq$gOeFGjNr;s3Ge$4{bd8#em)L4!2W|NZ&)M5> zz$!=n6f#{tYyV9S9;#aAGWz=YuKBr(kAKg}PDj|Y+Wc$F<^A6k?(h3w$X(T-LXKB= zA(=r9oJ4;J^oreN(-6}49Z&%oRqV~w2qgfyGwg;om@C1?E;1J1ca1t@+!;pQMKgBl zqB5NE{~&I^YphEKdqtxO-0%C8>fUQ%Ho9ldo962@-7mUz>A4m+y7arz4{yZ-U7GWK zM!fV+t!mcB7hMIgv&*(DW(Emu2%_%8mnFN)+6ft1d){U<&K(zzPVpJjza17*Cgd;v zwur-OGcTfh!WbT#E2{T_M@Nf0a{y#=S)ym6qPFvE3A?UXGVREkON-r5nO67EsEJM0 zd;k2bGs7N;ddL164b0E+^6eK%Pd29bw_!hLO^z*72IWT^8CKpC>GQmhNn@A4H-r`n zL3+!}(ZA+nCWSP9-urBP$35@}aqrOS+WE3T#_VtNp?mMn4G%_$Agq-P2azay#Hg~u z$y%Q@5(QS zqBOg=(Myq%qKmNDDdeDyIyV6jfh78C9+(e0-&6^-d>?+j<0K^ZP-Zi4UW$Wt=5^kS z#2GJ%yT4y%%1K?l>tStJ79#rY?C{JWHop|G?j%|eup3bq;*W9RB`B=We?wv!ER=DE ziM*~lT)%qiZ@A%f#-^Nohh&Y9`^M;^WAglRxvFoAD-C{7zof<0aOrcZEj#N2F}SAlkTc0$Ud%hLWk(Lj8_Ir__jv*pIk&e`d%>njJ=GnV{UX&tX-6l!S*X8zm!y4vzVg^+p$+-&c}yhk4Y2cM7Md_AD$AfaM7M0 z`lXiziezkn?pmsX@rUBST|yc@UHS5MLe>z)H@0v4)mfo$+XWQoE=i__mUHQce&+Dv zDDz>kFMOY&upt)zYxm9Fv$w&F8*>Y{ZRuJ1pBs(?)vXt7q08(m6P(upNlb!q+L1$8 zb8}sH@rEY0uctF8m8(qwLu_fG*swbwH;5@a?Zl*_G4cF0;UUie5(8Y7n9kmWz{)7! zdW1`1+dPeC-2HA(7M!(=;m{psYq^fkzmPSfCcbc3CvGMyYK9Sy>+T>Frad`3`_vQ} zNT2rNpKTK;J%<77*>5h9eeHN5RQeiCNcea^Sa_4Vcd>;ncHsQfKyC|JvR+!sFI4 zFdGsB1;PylEArE|UI9?GN(rO9!5EQiZ0r_1=6#=c`J}5mbrb-Xu5{%TXjCL%YX|+1 z(RC(I*CKYUC2_(*uA08`XvlJIt=CY-TGJK4^mMgphjh@bW_5#WF5#2n{n}FWIGOTa z^`XMJa&hFFf`vS;f6h)m8({110l%Lr-5#Bk{%7a~8o&=NcqiE6%3pgo%YQ#^A05yj zD!!|#P8t@!fO5|kH*31~01|USk$xKqm65|Mx(-6v&{EXYB4wz5?tJ=M2_ECr^uR%wb6a#*0uSOI{Wxn6hjMmXJg6oHBQw6H^?OV;=%4>%R=GyO|ML10!Hga9E+7pR>F0ye*^$-%z{pic4GBgs3%a@EOuyt3&58MY`f_0>|6K?;IRp5 zr3Zj=l2ui)CUd6?l1Koa6Jc`*1w|F2CzwIp;pYKUo}a6>@Rp|23UB z#twKr7 zidQaV#%|t|(x(qEO@R&6V3R4CAb*c2JLaBzQ|=#&5u=KLx~j`nLCY&-dK$76w*uq4 z(I=vOYQt3{t~`v99q{aw91(soM2f0&qIMc91gS&Gfua2|1PJ7=qK~|con%jRR4QjExHX{F zarci2*>xUoPJi+2?AtsPu*LN2LoPHap4c{J4b(*7Z78kLS)H#t;{QLk-ou~m`0M*m zgjhjh?*>8a*rQ6!20`rI2C?^OOJ`#5Jz`YtqO^9=WpA|=UH0mvbgKN)>wet#@4oKu zmA~Ng$mjJr=Y7umoaZY`F8KvgelaU>T5WR4sJe)dhm`5cXKZi;G_KC+60>3^tlDvm z0@YK+3;yVKTCsp!@?>ZIK8^a-;{7LSjFj6#L$RJs{%zsgz9LDJ+d?;Yl~cwxb7zeU zyC#d(rK>CN-wF(OV}AkrSi9}-coCq?v!UKoM6GVb-&54|m2r9?+t}Ta9FYsj9=?7cNwYlA)IDWC@ zxYEP!=#2LiDh}{=t?Sz@@G#8tw7~Y44{P(^r zvbW6~f<_MT@G6N4LpbfB*}e#dFs0=OJMe*`@cp1x$zS5J( zgKo%JV!fA(`EgUC!mhBD^OZ8qCi|83*c5pi8M-`7y0&vSf>rzG?UivAOU}}t-*ikI z+&6C7J8&0V#&{7=nR1*sB!7*_jFr!58=&u(Jm<9)5FxrSjUzO!j8#i3=B!DI+?y~> zPI`R-a)E9cb%Ft>2`N3I?a?++0KoHy=fEJvP7#rd@pudCP1T$VQ~B4;jHc(*d|m#& zWn~?xZ_LvB_6>kC2X7m6LfKpi1xW$UV&x?@w^gJ#dLy66VVAPX?uRjHeo%mG4d9q6 zBg)#(A|>=bb6tPt^&KTcBBw0??x-zKBe@H_fvg2|+?SxR0ZAGCXPD>tj+(Cms#!Y2G3yLcGX-3Z zDla2#y&x+JsZSo)6&1TUV5hIva?Ae+dOuXyUAr zQqcc6NAh0JjQo+PmGnFj4@E`DX2Y<*lJ z7N#tR2$bf;;@xZY*7RR#C|;Z#21ZoW!4-X>Wl9cdG0$z>1liY2T3?=@BX$Q52;a75xB+FI^K&kREsevdrKA-u4Ly6H>q-M z7^!4d9gjBa=W+((G#-P1%ydi%x7*`9m?nc#4sq0-Pcc+Pc}iySH>3LwkCp*<^PHpe zt}FxEF zrT0G9mS~Hd%8l{qWxusKofp~YCfJJm6oqoSX!&Rqi20xTBmcWc0%fFD58k>|YnwaJ z?E5R5RMQ98UpW(Oi))O5cwKtli+@BCfVQ}30Zq(E?Wu}D%d+bA1T56vhf04y{p?k5l?qSEc|Z3RqfUyW7qWX=h-#4aTAEK zluV2jdqUaOaKjiw;8%i@c=RoQQ)qVU?+H^YOXm5zlw6#Q)WP~)^hwOt;vLGM-Wxf^ zD#~=?#8WDe1R!lA$lHIQDmpn~V3GH|Pjk6B*S(y~L^q)^Z_bbtJ+0F1JG(!)G$H%0 zCN#8i=z6!?dYy>zVHod7a$`yim&sRR?v+5>fViXx)8x&%4Ad*Lg1q%Jd8XhIo(@@6 z?(c;~He1hHiX%phYVyxJynFa3eCP)FuNx&@o@*+|>G(e7WVhrM6o1i=@@*FcfC9?1 zhQJ^)BIQ0W!1q{7Jlq9NbQ1j|T`khs7FCu#3K!UG>}WIfB3>!w?m}ZwY9*>{>T}xV z4Aoa;`JXo~-u7;Z6yP5XQZ7mzSWPw~1Pv(`zmT`EBS^+{va;H%~WJ=xl;zJ~mM7SCK;{Dkrw00)Im9^NtniJ70NP{f$CT~FT zP*ZsGSdNv4NKsM9K%)0AsV6EfU)f*YS$*K!+$<()@tAvlpKWZv=41LVcfZ0{2Q#$T ztWux*V)8EduggyY}l`_}U7B>MIhN9XXs`Lnp_5j6Kz4vwA;M1)|B+s`;_| z6J};&Io;)uq?NQzO@ZX!k|ITufR{_jhMP}9A-h`%_iCJ$GMg}KwTzPk_}^B^<1HOwii|7PPo7&HxQh!K{RnZfisAQ5*}r=-1qtF z_FH9KJ>RQL&Z!0LD6d*ms6CzEWLWEuhy&1%lqhJx@v@|IdsIuv^TtUvZa$IC@%87l z-_Z$xepLoAk7MYBHLnP%@S!$~-k3b1^ob}sirdpQIQeO-z)GaDVe8$v8~N%+<@ed9 z9&>dRj1jOqI?u{~8D7s2lYe1C^NdYbths9_ZEf7~itc-jc(n_IpYXp&Im|D=Y)2OJ zo&Vz$Khx1f`EcGOEoQFBy6tV_A9`gK)|klisnoAob=rJp3y=r0y6XX!&6#|iwO)Ss z+&vS>NR+-9ukOO(|VLW7Wr37-EBQVVP#R6v7WkaMr>V~NOoa< zEbt>Y7sovD&_b^{LuS2YiFPTd(5l=)ZZfax{EcUqf}W*W|nZ8Rjo zIio9hxgakL;zWx=c-Oyi1(i3_$hTWB9K;3EF)X76$dC+NBrfK92ak{4h`c4?X zBI6BJYiuQ%$zRkH#pBDCC1LW%+k4k08J%P*$uB%Je;e82>~f}D{^>>WPHAZU0NcgN zjHR2i>$C5VKmT{7{huz$Kgorx0>F!KGaDI8LVL92xR{^#412U34)QEjADK;E@Y=@{ z0URa@D-5~S)tn1`Mcy7pH2pM*SVpAWxmRZVbt>*&>WC!y)Vx|FT5`-^%N*;K(2hDr z8rm-=LVgjo5YJ-G2#k8MUu*zo7G5On_Z&r-=@Pw5AAlX@e{oLNYQvp64r09Kd&aPa z)e`MDNSzt;xtQ1zz(9zN>5I(seFph?cs;z8_qZTU_EMv*g?;@ka&nKV(e{;zpix4X zOXXKJXM`Mp=4vl{T!*phEI#E%e4=*zo)3rt` z5uW!$3|v$JnDp>KKHMhchbtS+42T)%L14U|+CtLNCNr_~0(td+20@=$EXmhw2A)PzqIR@#dt1DE#=KbtHb@xwl zt-AoW!3FBLoB{!Nb-=GO!s%+ByCfF!EU#ZUqb7Z7AH|#zo2GGpAU;dV*tZujPsYQ` z8`98LequFi3eXvos~Mxev%DAryXaR1%^-FpRbEp=fvqc8nydA2gY^yJ8BeL?ey3|f z5*BRi8xmjBnGB+1H||@{j(TlZX%b~5MX`A|>W^~IwB9O(iSr2G7|NwF^6e05?J~}N z`OyyMuJ1LPhZrg5(xkZ}7k#i}Z$N8oeHXO13C2 zSsG9+CPKDgPgdp)9lGcVuET0`D{s(F(OK6SlK1wkIH3;8?1BsQvcF=H^wvHvvt3*g z1?ulXm`n)+NdUeEyo7iSeI*U&(((|4qjHi#8Va|sRRHuz7fUU>Z1PTWJDYai3Rq5= z5yq^inA~s;-_6fSJWv6!x}uPKMj)x{#kDzryhhPzB$A;t|J>r&HPVvHvd6;(LUg~K zNZLob=I&COotO1#b!ezfl6d(R?m^b9TUx3`UFif(6E1I~vb7(EU05C+HD=-Tbe_NyaA zP$)p@3jBR%EUQySbFdl%esgzIMJ?@=S$U;&irpsnqiWm$Cx;GvGu{jMLSR9&UX|B6 ztel0v@~|P6HzaxS9+B2uvzo!evmY$n%W0t$J5XiEs;pRf=(WkLqU_Ojy=!?@F*0M? zzyQIdGM<3&#&am<3(+K_j0W>b88YL))^*=Mq0Ifqk?x=5OdJ7hi(Do)AWO5OE1P~< z5!a<{o=H(9m#r_vT4VlibD9af4rNf$OUJdsfuV752>OU)&5wW2DBJ+4m7x zTu1J#c54~lp)^Nq`Q`W6TpkZQF=@Xr=ug{}5ztFPqt{#mLU7wCM3h?xKlx`8F^v7`9Osug~T{#xbCuE~^{+ob@ zlC(kOYSa`NuCcHKnPN~Gq&Jsjtp)}LX^TISo@*rwt~Nieuc3n;n!JS!MvlP*!NCdjS2B7 zCNogG8Oi%&{iB{TmV$MRY3gQ)dkF<)QZUE!lA=Lci?!xSlGpq8zF(iYEm@&pprB$` z$y8w2k+sOaHPw{#eUzt&L%2KT*m}VAt~9^kl9S=k<^4Q7aMIzzRB_fMB_>@U6}!&x zGF*D{d4_gBrnj-mgOP3dw;DfkyxCLh$Q-SysHGy5KIl<$v(D3B2@|TCu(|od;PGaFHOVP->LpuAr{5Zm0LHvTXNFc~yXO zP>yM+O+n~*nj#~Xtf=Sjp~2fK66yhHdP4jFPj{GLNA@y%q%mD9x4po~7i}+Kw035n zD&VAw*ICIf=WP}neU*}{D&Wg~k?ENP#C3V!G0oD>Xl(3Q(Qobummzxb+VO7{29uY~ zmq=CLI5|F4>fDk!c-X<{{^4fs%TK-;9QWpshY(Ay$-E(^O$ zG+L3k!`_u8dI%Z+>;VhoDkoX2*VW)Y#@Vxv?P;Ywvw@EUFt5IghV#>E zpkoq>_2M2*1;HqUYW)TRL3~hnK;6dGR1haeQPg2?YAkIkPJ~_v2!!hMYQ(f`jxb>h zxpIaQV)T%-KF;!t&?28`1GAoHY)zJR$I%yS1#aBnhk=K$pM?A3I}v?e2PVdjl|47U zoHsd`l0gSM8Zz?a@`$k+<~S9Njd}EAQa+w4Ma%+whRaWMIy1>Rn-M_E} zJPp-!kFc=q^yqNZa3Bf2q+g^T8O&Ln6ScQ2Dk_fbjKuHpy_f)hRuGi+j`Gthd(}%* zU&jr0K2HvG_O+h97dy{9FycR9bJ|$yDrOWAKGYC`f0`Yv4TU*Pri%15mcQcLvMlgm> z&#W$XH2ms0+cCL%y>xj7h=jSFJz&z$>YkX zpLR;;;2mL_vxyI<5~g};Qm348&y$1425ZgndV)hn@9JTqK@t+F`aIS3N~+9_8yT^m z;^>+jPfZQ1?aluF%$RL4Q&pgRqX>EswY~YQ@mg0y9m#lK8gKlTH_h%tj1bhrUSbOz zAO==i_5A}!fmrF`G8$ij?r}CsP%$_Ms=VqlSlE?c0=3qr4OXhig$kmuhd_n~e~7k7 zvgluM)|DMKXX?Mz%gB^-lEoWr=%4qNsSz*^?vS1S`m7g7q*YAzh^_VzFjoT9Wa0|y z=tOBzoI==^?ZVjAXq<)BvI+De4Drk_0-7qr=p88?QuP0Z--OG>8;ql}c;Iyk!_MkMM?gpE5hE+1g&x;$ANJFX~AmFK2 zr!VGFuB_tH-~~4}t$>;|8{xdW&0m}-KHoimu8q_ut$uTz@fut&e6#SViZ?&qP*_EO zVc@fkr6imGk=j7@Xn9)(2bPImqYC{%GnFjd#+MY!+qwMLD!oR~lkp)O%Vg&G82s|+0(S|H{DangG>1uFr&p8{I#pS^VJpd|~LV z`mP`6_KsIXObnotVZsgsw#=|zQgr&t-3k%{3Z}Vj3F$(b>4o-y`CUG zHPn$ZFSiQQ8Vr_2ptI$jiAt{1@PW|eKC05dEj{JdPYSAF!1Y8RkmZ_L!mMf6W@@46 z-R5{$9Jr-sEn9{>lC^rjyf8m%Cj|b@27sN-!Pju|j5RqMM?q*CsrcMxFEe>i z#8UIgIZR6F3T*6|J~^S9hgD-D?G!U3&!4#{UZ{9^3z&=iX7Zs&Q z(eg>DaJLD1GpwQTcz|L72cO?Q36j!qE~AbYy)QE<2ogMpN#f)aHB}VELh2-OP2+G?Z8Bn@NN0_*iH@9hjC~Ni=IQk0*LD!1pZ0)c2Qn z{{CfM(>G2fqo1U5XsokshD$p?w^Ssw0kpnGG@N1+cy8VEvG)Hnb2#FK`jBOJ$w*?q z)F(OKKz(4rLvQ6JQb^?HB2W?ivo_3D^fya#4Oo7~_xs0tlV(;}WSMSae|1g&o#M%Iv02{Cz_u{)O1$igi0#yg)_!n3Z$RBdyvj|j_Z<( zU*NlE%$HuI7HA!3K6>HL)GhXu0*w-2C&cb3)CGX>VjMVDB_P3%?p$$|NG@$MHx0dA zKVzY`E#um2m7%;+j732;4Ymm`1ub1{{+y0)^HXCbfJtJzA=d~Hl>;StnGp#guwgFtLA-R?@z(H?E%}YmGk`ewf3*y8F7kwYNuqd(myx$kOeA_cft7 zxw?nWwmZu1rC9*|e$hkgl6~W=_tuU({tH(fF!RZ=li_J#VKOjpit+*Zgv_Oh!m zi28bdnsmiMM5bfwI`6csgg}9zB`KyZ85`f<_cVLHIJvOI2#Lh5T0Nr653WuJU9?{Q z_26JP>{NKYeKHoyqJRRHyW@Jq$N*o>F+I5B5!`9Cd1Oz!(->#Nw@+`jZMXE7^Z-yWHcg}~052lBk0+M1gYROeXP@3En}I?Dm~s#KXVqiJ%dg0X@PH7ud&( zt%t3L1h?$<(gj(UH!A9deP)?K4k>J1{+qX`I^+`YRza7IqoyIqM{xd^P0 z(!sR2|L?+2!ec8T%C8=o|IYt&H8d)M^6lYmILDFoe=h0&@7(%Na<8%htj9NWsFu@a zp^1B@0Kdcqc6SB+Anl+17^=5Tdh^(v>gw1O!sXThe+S zjFBs4JA)$xtO|Ho<_1)Z=iNonw%&AGSf{U~Y=VbT!YDd!CRdhQVp{0v-eXzEsmWv| zh3?aH69%%=N5k}c1So?wVOVdB2qlt4nQ;>WG-QPaLB|KmqWp#kA~LMT6pkx+S>k9} ztMfzJu5xK*{F_7Jz4|4!*VxD7IwS5%^d!yQwd)-M%H`Xm)uuLJ!tMn>VYPFJWAQIa z==glFB&WlNSHMy5Kp<5jDG%!8|7{w zeXY;!p-)-SO*j{u4N5=1>xXe>HQaT*;{!I$8uPRw*ujn3BRYLt@XF~?{7$k^*p+Y1 zo!VbNsPvphmd9C`C#GpM6bgB54z25@WQ~|pD0PcOL5p-Tf`*4;;ZvVjUUaoY7HeJ& zFR+rPhEq#SMxa4#^-4R`Y>o@Yk?teg!KoN8QA$cg_C&NIl6@N>UsO8j>8f=++XuW%gQV**{IXb=8}TbykDhp3aiP)8w>?<4?K>YA`Z2s@>K-Lt zJN?Vb3A0ns6X(ZvufG3P4?V+&Dw@WB5tuQK9(&y2&zEG*M@Mq^Himr@_KlBWAv*Ua0ES4Z?rVNV zI7t#RfmrA@!K+x3IUbP&G3q#5nex-aA*_P9#>f+w4BJiAPkJj~`n}+Nw>Pp0)->=YhaPq(b2rwToLTmpetlZB4j*(C6zo6nj=*?_V z4cP$M!$*MbaGR}R>%FlwIt@PtbYVaT(j!$H3Gh-9U{f>I=HcWYQ>uT2R-9$XQc{Wa zwn}=3JzREw>2jJ2knJ@!e}iC3Z{-amYr!6`&R5(OQucJ8>+%Oi$gg@^kAHhpp6U>_ zC|Xfko=CBN!q4pCs6qlhhg%8(dCvIg6_W@LB)XKsq;|msUe`lm)Q8L)ea35kNPd65 z3^7$IMvI^5b=N+^&J7Py+S)b|^{FT#NeF|+13(wRBp+C0L@ix1)PU-!t=j1Bl#Qk# z1D5i_cpMNK)1m-eZ%%ztN%#ExkD~Rd-S>Y@2~NAW|33XTE$2AEh~OCQotJl}B3wi5&wdm7MXg*YG67mU@3>oq#s)gQIKcnlR{6n^yu4B9jBi@)1ned`W`DnAkLnK z$YfF;n8p$Nby`?&CSN?Co0SF84eQuYq0wiS#5vvwy#}icQY?^)uBbKbjAI~)4B;S* z*|^(PmWS6=YHHyfLG9Ma46 zufosVBJDN4)UQzDNOxF8&LZv|$Zu%EBY{b5;IAye^dPq+6HOZbes!rdSFBCHfS6ZgU z+ZDUCQ^{m7pt2o}Z7c?z;q_pK7f1Uk#D{;Q+}tjcwmqlLcJA?_pb4!94E^c1Y}G-s zm=n{2b>HkCnp=3S3nqLd*%%sDSjlXVZ{2OaIVm~1rno$A=CgL4r?0pDxX&=qQA<{K z%&1Xnl%JTfy}U=wHle0g8SZ|?paI$dt$;zYazO>$*7zL5qY+%ZJT5erza@i=_ow;H z4E>Z8qhPv7lkf{Y)&$H*SgSPf^&WzL+ECs`T&(@=`t@db=_h0N$wq52m3-q0^L9c$ z?`o!xGgivB>uZ^sFzGj+=5yT}9H*~X%)Say{@MJ4GJ&CVi&#y7KA*@q1#Us%$K}aWv0RnWDM?yXBx8Bpw|WlF7GNuI1AG}z5Ir`9D}6M z4;?KA_WHGeWkli!a{^Xx2R%YXmG8}l=FJpD?vpq?Cr_0`02^7!APSkI}uL@08c zwY@KkynQ9)m-eLRNGI6bQpOJ-=Im}(2x%0SOvE@a8R(@5}rCZF7ZXrT4X1Qkm#w$JD zQ7%q|9QCEasW+OO%)mj9cC}3$p|ogBO|W_h3RN?UyiM5SKFtFAoZUZ*{Mp4KE3~G~ zQ5tawr5c7;$D~Z+--Y7f2)vj^B9$|mcvp|q3?R~0(IT)-Hnd)bsiCJ$@$Dmg01@vw zQQst@lx;OAcW z{Q0KL!egGur56;+I7vA_tPc(ip>7~Z$)EX&QZjfL0L31vHs{YPi-wPr1)!WseIpRL zy!pg56reR=A(Xb6K^jg=4<*GGI6QT-`e^x-j9+gq&)E9Kn#V*8* z4$@JJF&FXfd#d^s07xRnXPFL}03<+qtmOmvH+cYZ3@9{TP#iemHZaxp&7^^6mY#gX zm=K@vPOsW*d10-~>oD+xAVfrQ@~o{p4V*VVDyT72S#STQO?nTp*)*JfP}@c5Gy<>8 zHa$!5{O<6z;}0RtbS<;)U1`0|cE7+8GiwNyH^WOTcjFmN?4Le;yp#Gn=^I=mS(wxi zpEGG&{_^5vXmSJ@lU$8Wfy6PA0blD@eHcg#={b(0jK(ozvBZ8~<~WI-?{3M``QyLB z#8%+iJhG+k$)oaq3o7f7zSKBXog_~$H%SAoysWmTDJ5fIinL!G4Aw# zX^vtRvH+o%r~#KQ{r(LOLp*ZW6j+Cpp^aewh{23v_?quKTvmCbRG#(gBZh(BaGEDh zmUEzyk<=eo<6@O4@`DSlZ(h4>$@k`+MNoa6l^(Zb>ErBytwH}7i1dQq#9-*DE)OF~ z>dBoGa_ah&g34r?5arwZejJ>dIyw#?Ir6Orw2cqmrl$wpt{U=G*rp8vt3$_t=dJG7bUioo%r5;>7aqzErCgjmyAcf)%B);7Y=r zEBQjwpqGYH>CMElVDg4&L`JBt=t+T>!zU{M5q04yc-P!I=)28mpb57C46g7gV9;l1W_ z3|bXVX(CsN4Jj|%^ju>+f5S@+Tl|WjaJqkZ(Zcr%T0!ux}}S z7Ork*X@&}m#DLFlxv#1FJMkPL825J1P4kSwCJ}~Tl?9sAC4|o^%Y$=<26Af&cTURw zUSx*-1uHGEZmUG+isP8H$uYo;M1a{O5<4=T{uGd<5{1BMn)W9o-E{Yc-xu+}L3~Mz zX{Vbkd2qV7f4b21KV7k6 zODNRDYG{hfwG3QK8g*(8puf!_BBd?o0qZvw@g8gJ_z93AHf$o16ZtIM9+}i8u(s?B zla+bi5MXSwfsG;CFe-XArdhT28PwaaGq-$I5o2N+S$weV9;UmxI@WuYP+-8f;}oKI zD!BXG1X-m%Rnm!_d+T)B!0Ya92t?~C=KAYjbquOX;;Z>owi6&&n%~R+aECHV(qONu zZt|oe+!}v;+i9Tu`lg`03d2Exz$IW%ua(3T$ClQ9l=6%c-rY_#mkvOXvUMVGn^(p> zB5;{d`PsBN$Oh7MmxrG-<|Nyw2^2H4yfx=udEV@%3qdrz1EgDr4gFFrdi_IK!hrtA zURYAwgJ8GO;Fvqw-@c5kt$s`b_g96%#uJ%9dJdE+_rw0bbnXdfwl06coF4rp;Hjv6 zoIoTmwl7aDXarIOG!BgDX-_b0?Vn447}#)%2Q=mr<0*X`ULk)qNkc zM-uuV*sOma5@eKTUUbQ~xfC|;o9g8KNzO~=3MJu>qIB#@&cV2iKE?dLK#y%>OvNdnRy(6K!gJ9bt@%_hS@V_Wm`HCtz8GS1Og}Akpy8YPz z_Ur6LGCDyQdSdWm-c$c12PlUt^Z=MwJqVRx{y>%9kNQks{bd?BNA22&SZ>jn@bi7U zob{F$)rmk$4R&j?T@l@9GvT=I)R>V6i*U3{c-f;XpKZv3K=Oo z@C(%?j*UJAS!ujeso_#GR6y_cba2oL*eGdpbt1>+vu|qgB~YW0l$zA1q@4 zFc2Tw#j6eg%hA@PzPn(qNpNV*xo#MB7BBnPd|qKo)pX`#i0oHWjWyJqWMeSi>d5tt8oEnPP2mGG;*lXU-w?9 zw~%HbZX7hmPnNGzP=^>9J~Rp@LFU(84 z?zrtS0X<*+;>#R{JL!beGw%_sb^dJ1r=5Jg+kKM(8n1@H2`*SeKrKE-cm5J)cS;^{ zte;$7(EIB}2zgn(?DhX@?w{oRUIW;+uIS?gEbUQgR4+5Xi(g?=LTDEEN8^TKyXH@& zeo-^<8i4S6L2<(*3sjsG1EK?IgN%~s#8C{hQCNnAem<7Q86vT9i?a)FM@p3tws(8{ z&|VDumYnm&TaK-+fdNDGr7P~rIPTg4HrW`jjD$DE+2-1xTyHwa+7kbCkm`5oO$9y> zS2a1}NTha0A-_`TJZ^794LrF=S-AZUsAu|6I)gHCI~Fk9e1p1FOGksuIQ*j(?42l~ zIul=2bRj{pF9zeq#+wZqEI?{tRH4nv8d6s|4VdYD6vp#jq`CH(MT@>Mw7RsPPlKN7 zi|ZLZI~ix5>>}_ScNZJpmQwodlm?^4ckX`~!}|^imtXv`6Gm={htz+41~&fm7Q)S7 ze8v^?QirlhI)B0pdUV2jhJO4xbU7Z((DFps9T1NZfL9sQ#R=I+?3o&|n7P#vmAIa9 zDRAq(8scEi=L6qd-b%ZJ@5OOAaFif^1uN5P3NCc0!LTYcd zn%);;9dyXQ&n_jlk=`))2x|p(D(PR&HI~o)ocDW>nU(LcjB#!8o88dbr0&N0oflFs z%z$G`<-@{1?@4*y>dR+izv_Rk10#qN4=K+R3>R(EJxxwMK`~Rt)9+++pUx&Fi1+>v z7|nl@TQj9f&hO$3hozly#+c@&*QZi;K5;b5g|1b->fNdPoz!>S&!C@)rSYUgDr%th zti7F`;*qv$m8n*^Ny#jvNaQ>Q2^1J~Uq8;0Fr{>gV|gzqtPPhjNsWEY(||jI^=|9A zFsE=IKc=?|jIi!_hO2ck6g}i!VAyIya8Iwy@7=Vsam-S*86miG^l9sla~~3j-Hh6~ z8IRGRnXG-F~Q48Dx`9wf`Xk4>R?Rg3P*lK`}?ATYCaJ35IQaaFgE|{RH zJc8F2p#h_jWhNFArsZ#Jb^)Bd*rlVhR4fip6$Up_=k*tq;?nTISda< zf--{04(5!nyR%r)){Si=kq&MB+~WWIT)IlJ3?r^;#9&SWZcac5^wk ze)rVxf{z$F;>AE<4ENj5XCY_S1#fuBu@`(#k(m8Qmwz3kCQN2Z8yskF1Ug}R{X&R6 z>_iEMnKThtxjwWWEo-2J*9Q{4pA11pV`x!TtiZp<2+@0v(2bmqcxez3&k?6mR@lGH z7~67c4Tw62Sm+jNZD%tH$4GUiVn4+@t~1Ffckmdk}{=ujMDbIZg)EFiEfx!Z$HVe%%(4zd{|1DYnNiND4z#187GQ;5* zaGaK`x$Ae(32Tu=2X0vEqiZDf8ilBdb&y9X*4!HIXOLva&>WlA_iVuO1L|;EeAw5MYQhhjIh{XE8py2wBk2YKFhM_Tzc~4j?Rb)r&*ki zZNP~HL1WrJ3_*>#z+N{g60I|>h(S35H>McAy`I0 zs~|fcFRNS~&j*2RD4BCh!Pt7gR;zbRR@mp(!W@Vv_auyNCOX>moy-bmEgBEy(4Ift zcd$BUoHL@}y3-zs%l)2ctBu?5e=K!JqoN@M{k$t`IE|(W6vn9Kz67#PN+=dFg!4NC zW|n#RCWKiVFi>{=C@w1*2ZJ49#)#xvzIcR|71TH`RyOZIpV;bUDI2_fLR;-OWw0{; zP5Y+}dLbPc{_;7;jB7%0+eY#Dov<4@%Mayub&58&iobtqw}PvEn5OsnacY;cEFwQw z9=axWdQ>gJP1&=Jw3o|FNs;~^Arb#17i&R{a&{&&B?|WN#JXSK+&?u~Tbc}gZ!XwRdJ;1zwF=d{ zUq3LTS8uU!Prd05M#pqdyHSJ2iu3jCLH`{=hd~0)KmhIF9B_+Kf%W|<>&VE_7fwbt+lwoyc65TGHZ3euW$V=WT@HbQr3gJ{BO{8gjh zR4dzWM}4*+{g%!RNCiB?E=9GX&T4U()uj2w%{-~A#zIlzbLaPzDLVz~N9d@&->dgE zy#3pD?z7#I*EA-)|7)~aaeM}vQ#ot4OS6Oj)a-`~R!>fbDfEM2DxRZE*A-=XjhFg+ z##or?q=__f^voFcuPkunCWmFp-0ot6Jbw-szgZ}**A&6}INt1_%kOhD&I`a^pgckDTpe0~LJ%^EtsNml8{w(X&A z%65UA&-}ADuT;%|tT}pGtWCao`+SzAhNNNG3gukN?!~NclKf|_(6ea2$Cf8>-@Zt( zR@%9P-2cW2{$EWJz-OwRk{1Ry&mVJ?Q7<*`wcB8Aq^JY=Y}RjEy=&em_Y=@d6&;8K zB%TL(;b}7lB#DkbpEL$V@=*p-X-&UfABzy1%yU7eZC9in8%Rbuw8pL};_)_d!IfTp ztF_mQDj3#l(&kTsf46=6MUPH0Oj@qnnVq#ya$3mF69E8v1{yl@W#zKB0VB$z!%GS_K9NbI)OkLizo8cc}q|61KAu(^`w zUH`hYye_rbKczU}>_vLWIH%~P_Uj=m1~ozgr-crmKHNF$-_|`+I@ic@ZtbIy5yIA( z!mFC+n_hIxFBnhU;24fEZI?%zi0Ds-z1rKTT@qvB%JVM6ca{@N;4mu`jc1VtnFvGL zBBGqkXRu8vk+nP8m$b8fIR&8_|Cl^UQ*%3_${rA36IJien<{`{TY5m_&D7F{dwxg?T`PSTg3zXcDUwmv$mo@B{r zaWK0p(*Y2sww{|ueSbn7wvh9ogAE88q_`ySq%z#?Tt%cwEozhFg)^_{YKg5TR#2yaWJ&@ zuX&5{cd6-mC}vRO#cq1)X>V7l?GqiDts&LD=9y&*WmfA7WA(iR%0a1GE9Q7MIQY!{bun zG0zu`<|D+CjCs-ZFURThj6J%)6Gd|{Q!mI_)K8!cjJwYfsU;pKYW7nDx|pdP-yfUA zR23c>uU;)H!amy<#l3CglJqDl^tta%Z^p*5Nybto3wAyG)g*lcG}J-pB9PZ=&3tKP z{?qt;WEmv>4yBf>#pUh#;Zp0P_vdLF8Ll6Rnv!v!YlW&($LY>{>Y_^5pX3N$TX!w3 ztCM?qi!!rzjTnXIqxCe7Nx7KdeW~)21t-^9az0oQ2nG;>Wi?QAHEh_9&wR}4RvqPA z3N*jDQBEuDcbZPumT)sl`E}v0Y=*cgPy}Zv`Gft&-H}R|7#1)h@SZ%$@Udl(M-))f zIW{;XOn@vhCets^Ksu_^$o zF>}{220(UR4@wK*XoSqzhQH<<)zKu{u!wPS2_5!Udy2P`@ISd3a4NsYv<;lr7HIn< z>OVS;t|9bMy=C;83LzYAa)T$tN`+Wj&#I-$+vM|RH#oG_!iZ@WHyH;aBc^Xp(}{Ab zhwvz*#BP85)eqbT2mQtM2@)jkQygsK(DzW@#{bceqrS5L`u&p}tp%04luwnMmjBn} zdd5w^gF$OK1$}dODlfTu_ika?vN)Ct&gBV!Z;-Rx!Or;m9C2xL_=yGYI+4mJ4yhNI z2p<;RQvb*vcGtYJ9Am^dec?K7Lck`NDc)dX^6>+Rbac5o z`(AxZkQtH2MkaQd|BmFKPIkDQ#{LPrC2;F;aS5AR(Tqw%nXP!#u0C_>@{{?!u_0OC zzb)1KLtcOI$+>Ay5I<&Sz+ zi{sP{7IpU?v<6$TaSrFa6YAZozQ@ByB^S@H-TCa;4Uh*5%dyjrF6x0U!qkGEdoiIj znEFLHn%7lK?chv&3P%e4;(6>fO8!@qO6X#uUW)qGzUxj-pG+oS911g*6l;1qZ;-5K zb1S0PUEcbtAB1Vp5Fr3gq< zLhrpdrFWDrO{I5`rW8?WBA_S=D4>#?_dj>;%$=Eg^En^R^ZeGc_SyTaz1GcJQW{vR zN^S3waobts<4z$1`L~la?7l;B)UFaydm4eqvR<0^w1KX~#JP?BE-NM9|H+Sp^xgh} z92b_vawfX-Q=(ku$++`l=fhF@5m8NXWj0+j@28ZSJo+V75)twWuxd<1MVb1$Fdmtm z@C&veUNvLL_D;0zzYdw@_3)E5Tlh@PkJrb81AOoton!>2>74D1-fxIM?uj1HH#sJs zOS;SLwNYe#&r^~?U+wuzp7>)9t5||Fqo|WzcftvwvZa01-dNuZ4p%+f5g$~Dimq2k za+1_(ZBhlt5b>Psac6P_0N{*?wSiiRZAHxgwv?O1_rNM%lkU2?`z|>j&sC|gUyyD9 zJK=4lvbx|I{_Mx3@SJYSyHO?8w%el;@A#&^+7w#xS68?ildr#aB^mHr29yTDcFo$R|5 zgT5d)>&dTiCu#bhViP%(-NJ;ILh_f1Y2UvaIT-%=A^-g8cUmFJm})43TgCMQ2ml!< z)ExYfrDRt-{>GL9=GsS2aTN_;dj_O zaTI+xojAh$5J*zZ%VER#!=Db`w2l9tx!k`X7lt;I*EzzG73^TA7X+gVaUHxL@2@Uwn|4vWiZ56Z{)-S;vuxFG|t3x0T)M zP%fFV5Yv_6lopaC<)GW1tEYy=ax&nPDGDglBA(vrwDXZI65}FeK1G9JUW{e7=Fdv(`>JehBwsk))pXjO{6AKN(|*1btl8L zkITLfzk=_)$*}p5s0(=_q$-k=RmGA$m-P^QBUyAVd&~#-wnc8Y4}~urepa zad8^)UYL}o7@cfD%H#O=M(vV618#a*zI8mniuv5*h9<`uQq6fy*xN;d0+ zT5b?|6fCz)SqFSg;`5gu4R@C5wag>5RzvH|d+OLMq8K7Fvg2`?+B90cZ|bStmK!GJ z(s)J{^?EW2nXg}BRrN5l!F_S(2XUe<=9BFY$B)jw8<6o&Y#!?W-T=(i8nO^i0c26> zv|}ntN;Ua!iNr2zPp;$*yM3`_s2U8H7fJz;%EIT8IgpKKUe0NK3eY;kT+<0&ubRs_j4rE69r2pEdoS=vfS=*e+1W&pb zr<%sR?Wp--r4^bsZp3>({rwvFX~n_etM>;-)yF4NAE9l+ItX0ts#aC7d1NWiL=+;*Eg5=64z*S&+gkBaZ3J+iE=4 zbNDcheYkkVm7;Uq;+=v{?(0UZLhh7y&X2>H7fn^4t%<%fWfwAE!m{p|WRERe9$RlGTzE(y=aL zVtbaYOlg*pqS~6F^p-M!s`3Sv{B+4BSh4$40XGqmW*jhrQ@ecevios1UwLTV@$@Y1 zb`YvP3JqE% zgGaCbnc0Rf5cON#5B|OiiUpx#!Q&37j0l5AE;lO67d6i4dvnbAYn8Q;!zt$ho|?ss zMfajL&9`~2zI_z6v0cx$YCv)^+54E5=>k6%2uN`cd zG>W^T>)^5Yw3q2yU`g6k>z3l5@RX{L(;fFu)99Xw9qL|X<#&mF);4oo!;dT!;aViJ z)&Kf_^YwfkC8S>-jAA}TX&W*EptS<8ZEg-4fvd%XQc=|7(3l2)in7lmy^~qupYIQ= zi?;Kl<9kOO$s3DBy;izxTBS48 z7z1(=#g<;_i{~BBymm3DG`^Mq{oNn@&GbT7*JR_ zYR$Vv1}3c99TUyQSGwQ`WaM-cq>z+W&>F3Uk`vgcBHNQvHkU*>rC(KQa2 zP9tAwt@;JDfhaSI3;%=Wo)^CNb`Ia{wZjm&J+<{U&5C@9x^)@W&$y1nmtm#6_NTM4ubyPI52bSd~*= zP9ynTJwK14GT7jw;@oNZZ)O;?lZg|&r3&HOLzs&(Q*LY($*7rCi%U+-lNZJ9dBVn)E&95F$7fy98Sk-n4$?~4& zhobzU7rgR=HkG2E=nsUJR*P*+F%>5CBkF1EsJ9pa)+d${u!WStcNu8XXOa8w zz7pn&JNd%0EtxPzEjR9FeY5A+o|)0{=jC~xo zQ;C9)Ld970Np+T=LrdD;vuO{s@( zlW(3XkkW=afPGI zNFomsS!K{(5JDv~FDm8&v=e2`i97eRRmyS@QsHJw+|ysxJIq;=Hww~-KKp}xFkk8j z`JJbs9o&$P^5Xj@WmEg7tK$|T;N;i_|6|BI;Eha&$Fxz3)aIX(tI%HplS-4%K{{rK z^Y@wFMub1?P$_#g6mO^7^?VmeRxq>U-dQ@-KMf*du}e1Al?ROXQ*0Nrz!>GO2E)dk zqWHLBDpzFEAuus?BJ3iV7Gq!7D~MSUP3X`iGxL}$@<+vLZCDLr;J5;AD9V2udNi8G zHB9YXlX@ zJ%~!4yYdVq0zm_(V`G{O9mA8kAQO`smeQaG>VlOA2 zaLPqVu4}C>{wV)C_o@{TAi?wqW9K6%BF}Zov-r*C0qBG;fE3NmoZ7_RD7CgA^eZ`7 z-(bT}zOs4N!v`EaB10y|4~rg zvB%7mZ3p9iR>9a@7-HVBno*SHd#3aH!QE{=gk$L_uOKSz?WjmEJhQ=7y*KAh=>;a&Ia&8uz(bF{CJI6lotP}#KkJ}6Uz(vO~yKD1fw#DbH*!KU?9=?o1^5y$k& zub#=Z(&}fW`_G<(7dQo|a87w#LK6GU6n3<1=2~6fThXEX$Wj+p?o5hEGG&`-5F1`= z_Uo31pJo0a-KKyM1;1C4^^c?T&Z~HBovY9xt z@|hYN$neEiaPBA_54na(FSXtFmBwu=yUD7V>PNsc3ohxiRMOMwV+*HrhLp)Pl6QTE z2B*y!xjCjL49>vZz7=v_V_Z$Zm#|)dFd0>&Nb*phoYu5jmbL#>t(Sn55xWoIEK{?d zRqlA4c=}(oawMMn2XZewNHK+cdJCiguMO`CE0R3~lu1nzM=}Z?1k+Rj-@65K3X%JG zf~ymvnH@f`@q5il(3?T9D8#;lZi8_Tl`3S6?EbvNE4dyl&j=Pij#`H`?bKl%F-`P zxwjm6#f#GnhE%j27#qI)zA% zz9LJk$!95DPjhKr>ma)L5ei(Zu0VIac-agye!~>8GYFt%i}Ib{a0zo5@s2JM%>|Dy z^2bNHshdYDNLxbGvZV@b&`8qC% zEawTh81$EC5BeqA#=Ne2kNmq$tD*NsgJZX-*_|)K@3U}2`?*W`{T&t9M(6dJhAwo5 z?gG=?6%++rF;>^?-uU_5nX=b;G8g*!KJJeL&5>K53m(-Vt>paJ%6iNw{%{nwn1tJ( zZ|4FMS*v3xw9gA>`5fU?X%PZJ5(J7^Hd;1IK4>da3F_gn`3STt4rUFBl`Y%$a?LG% zKzXpa3dRaecmwMx4Y-&+6ASiuawA-m6Buld9?RDa%@B?!A=vwAWy1eI25=1`tYgyaH^2e@BN}5-pJIu!nnQbb`GJ!})3aAhLIL(HBzbgBeM>^A;(!xcwq`J8&jt$|0FL&+y zS&+D8sH1QVFg~=;M&k?8ru0aIRNqG+(O6_HI7i zfD=OXOrF=rWj?loJtDYevOw2OgQ|WPxmq`b%3ob;72GU^7heXavgU8w1r>l)o#rD7 z)&72%^}=HC9{TsSc;z&ul^ALzA%6V?-4D#Pa?S>c+vN0M@>phC))tc=mjsI5N~+3g zPdYLg@*B~MR~a$)7A=tJ82j>hiAiVfm3r{qsnEh_R%inQhm43{%IIKS@il9CJ@Yl zKKZ>{vc0%L*z|-z3disaZ1xf0D0yH^%Vymry4pY5XILoL%RAqHFe=ps)hjz^f1~)a zM%}&yV^<8}r00+x#k#=IQpMSTX96qTF|u47x860a!joYs}8MyWw#|0&XnTL{>w{LiR=b49iv*5^Mh4SLnTbY1B$DI9zFSU z>#TjS`t!(Cmny$pJ+~E-utp{?Xs#rnkv%p?n=UbV6_ey)A{OyxiOpkbzPlZ?lVvz* zA74GQ0VD_p1BHR=ZgIlrTyAV=?Ek02k+^j-%|JAi7=b@bmayrF~4E! zx~bkYr9Ef!&b}UJR#0vh_J_G;eyI4Au5?D_@ryF8reNZo5!AEA!Nu7E9v9-dtLsjc z7J(|sCqM%%&L>R{(TClH;5l@Mz+o+Oq_WxoX5>`xWuVGFF6__oA9IdTUnS?1g)rZIc8gRMttI`&1;@>@}smAX!#OH`%xtg>gKe9uTv3}rIp+C~E z)SAVdR@vN3O`!Zy+=Ir1czaW&t5)U^KKak`CiOb^ZpaBLD2ABMKmT!;jE1eWW^4Kr zU^g-uXP!$P?K%<6ykUU%`B5-Zt{wFAZ%4hP*if}0(J!g;KL#fMKu+Zw=~e%RigA>% zZEFfdk+e7+W>P?-K_k^OsK~viS@|*(ig7~NOJ{DW6#)RPavC^QLevl_v1xO#yt!29 z2rBJ z0HakjA{M~f;-JBu4M=Z{&wxtlXsXa9HM_IwR3_v&E_u)<^8V1&*eV*oSbkvoXTAA7 zGbEU0*UTa?fxMy?Qg)1t?r)$3OM?bX39sTQ;8_#}YU(1K@DgcDIdw6u^irWbsl?my z1H0AC>Zp&b4oJO(hJl!N1+AE_24h!*LNKaFI##&(iFnPi#{-Vt5+mgshc}Z2B%Qh6 zMoMvGSb6f-_bU@w#JU^ec$9Qohu`$lB)4t6?P#SrDz0_X5hK2JowYMZrc*Q;aUti7 ztL(6<_Mobf%6x!kyIv;BV~~%NcF=IS%LtMkh^wdDv!gW8ZON?%s*RSo%Xst^=qV%& z7Zehzsc*&FP;N4=X;fdOmGs|szC)m{;YyEN{$74Ag<$t!739@MMDFp_1@FbTXc);` z`wTo-9^8-om?tfr=I-RedJ{i;GrR_o8x2X<;E43eAErz#QIqzP!`0l zt-TH5nQ6-~FB{vs(-tE`RS;B>^LRuvc#rkK45FL%1G z#`R?~K7tX5s6_F2U7xqBM#tIFMwVejY#4Q4dv@>$cP(r4=r!-yh)&$>s@J66dYE&A zlf}+Hb*1pemr+gCa=97wjq+cTiig{wAMcIrFtM^B^CkxIy2PBP6Gl;x8-ls>d1+&t zFfzXUM?oS5;mHWTS^=Bpfh2wI&SoZrQ=&k(nXnU2quQgVt~91?@`K~{qO=DF6s*8u zyXR<12fLD3dJ`dRyHju>ofV z;9Lp56470K8E^^?3UHxwJyBHnsflU@<@gIGvs4Yzmiyb$xABF}ab*>V6~K^^c~yPt zcs#b-50UY>yw<#97a;r&*DoZ{sa~5;HGo&8DXo{_g@jO56g-5w3XMgGAk|YO$;XpL zxLYZLMR2v#?Y|xRUiNAa3Vu3pdTZL1CD@eG=%LwuGwxQWyV*mH*7JF;msA>2WN)5H zE_;Ae!->R{@JsUbJ1Wf!|E^>DS7B`!AwkZIWDj8#)SpyC@k>EM>Krw}o7^Er!XP0OcL2*XGgM%(sDo2!11obEa zcH&juQVj~hs#>VBJ9*+RlKbH&@|y~2o3i-kd=FkZsVUQ+6dww;7kRGXa^D10D$qth z30b)(@{ReLNK3-N?+fSLCmF)oiEN0ghY1rQEqSEl6Fw6EIAt06*ej2jm7Z+S9}A$l z&(LnzAzC~LiPL2(i?_6nFOQUMtlk3iK~cK&y;rgH5R0fUA*jc)Rw0jY*$b9aT#%@b zcuVJ{|p0U1%_H zCpzF)Wpv7bg~E)qTMnH1&grv3K5KvwwFGkWF#vk10u;^%MY}j@fh_`X+fsY(AD(x+l6kPvV9v7_jD!1r!V$+^ZrH8Y0Zg_a=Y zw0G3k(H`UH7m3I!E05Vu3dvmD<8rXv3UP%#X_0*+<%P42$3&;NTDe>~_;V{I?N904 znMqwvu|1Z20;w8T4$O04mat$PWtSO(<-@nQjU7O-=;mg4oW7=UF4bb!cm)6q4xW-f zRvxU#E}pV6Tq^L2*HIt!E0x?2+fF{qAUvV*Hz^V8<#c!2h{!KrQA_qh7po7TANM5x zDbU?{|K^(nb+klfvF3iRC6%Dc%IS>0!O~%Wd>kCdYwT}S-l0eQOtl&4@n5Bx|4niW4r{Rp?X5N)+B9&)(3kPvqeY)kqn#nv&|6wL;Y>yW9?sZBzll;U6F7~o z78SKlkk&G!oW^ z%IH~memwuUXh}}_qM$K^GHDc%A(>77sO*40iy}Pl^XT6m$&<;G1oeY!OjPmYQsX`t zHpav_Z0UyeodNaf1e_qHChLOG%5{mk-83)q_1lYNW9r3_d%km9PW>M<4~fU6tV8}l zU_aGpUA{tOu;)Nc?%6E5Ql=3-q#eUd&cDjjNdQ8GcfrN4m&&>MaGf`W91QcJo|A!Mq-(5X-N)+Fo zpoX&r0%63J;U?{ssj5LY#8;=EGRL*7^YNqN9b|*8N^0Bc)K%BW;33P~k*gPB3j1Oy z4|VBYedaLt1?+Vc~rq+oABu|8ZoDVxQ z=0&xWoBFWg{CjnAoj$^Ek?+amU3Lt2=u+ zViI6XxBXmcX?Ds+xp-xCSm_j{O=YNz*rVg<6`)gFex6>nmxGt}P43IGp0%l0>cnH% z3@LhAqyJabFA6^@K%A)%$YF-jjB%FH4f{q=+NTlpQID``o4HyRaw+a)@BS)}vz;*C zvF*~tdGE=>JQbwOqyVtX;c6n5PV&B};=b4k5!9DSm^{#Wb5mwAynNaEFjHtro9~Hb z=Pk%Th8X57r6~>8EhZAx+gby;SG?PSaa?PILSGc~Rt%W%_Tv z?pVibS%*eIQ>U(2c|i{=tBNeP{MX}kH_rpAcE&rYUrC(4*;s-$dfXDUIMKD7JeerX zzwQr-#b_67g9ej`8HN@KzS?=j^BfrzntV=_ca^{j^g$kbs?ACO#rsWgf$x;egeO8B z$OZ&C&@j@)qbo?Z%_kFsS2tQzleb|W%NX_VEYrw&6nA2L->7-eu-%|cU0qXXcX*Z4 zrqTIM^ta#r$DQ&w82*@-JTZR?^^RAllKo4C2CCu8U2HHcP|cz6-`~wrthOA;tH;AH zCU|27DF6Fv*S|>aUo59^3V=Eps?9e@s%WGNdoVkTFVX*%)DU}q1FKcF2h3|gfdJr@ z#nI~O3gO9E9zZ5aBxD&X1YmOKb$rEI%m*uo`_7l?tg0QIi`yK&CjX?q3s+?k+Og}FJ;r-F`tba}Fvt?P$((QY{!uA^*c zj_whgG^mC;JycxdXfB@X2AL8+4@;Vw$LOWo_DS$suidjQ&>Nv0NgR@ zIAPSw0^mXK2nN#PPzK*XcfzUi{ zR=q%J0GlvsaKL4NQ+6TY0i20lws+qy;+V=Fxs^1or5=8n4%w2)qJesfU%gJ04Z{=( z9q{F!Iv9N*zAco@tgTP@j&f2Gsi_=%Wj)6DLI?@`rqETrW@R_3GlC%L{U8mb%Bq{7^I*YhL8U2&IQ z2W@|hsM0w9>cfv>ts_=eiDEPowcP?_M+zG2XwVnS4~TC>^r&^;M-s{s%XcEb-1Uxi5}nF;eoYarrP~4cXf4g4%w;O{49j zxJNT!`E{Csm*jp^)Y4Ng|2##e?rL-Eu@w==g`B>I&qcfN(kc)yfysg?=P7piDB2Dotv;_FX3IwLWD~!k}N#;cfCKKWB8%! zoB7`)i4o21qdl3p;WPf2T;-#DYF3e!ULwdy*#2xvQ~#8N+SUe0a@j>md#>+Q823$8 zbPb3$O+3p)5~nEWUdtfkt#vLdqF#9y)CD6mRvnY@bo+3YX`ZsS(VX;(*e>UJ{R?Jd zt2^kCVLy>ZEAhr=>-m>FM~i|__hyJcS7I*Wtwzf~5i81u_0nXekdE@}Q;*2psFRtr zFwI!uUL*<#%(Fx??5UT&w^qac#WQupv z5IYgkgAO7mFl~?l~NEF;zwtdwp0hF zxXUKf9kRC5Cr;3ZXLsZ6p&D5j!~oE4(>x)82b55ChGC#Lr=bE~O$^*lqQ3jE(4g(> z8`J%!0Y;rpn;*|$PhNP%^mPYEyvPm>xxEJxShi!F4Yd{>0qSk$FXoZqwwL1E3o-|f zpg&$jow7_YAaE~mjoTJds!Q14&QG`#uYa$M`#S1PTrQU1LNGdVQ4OQXw2$>ECeW^5=fVbJlWJ}~^FUAn6~FG^=Vn4;ss=A5`h z-z}^y_8gh0jjD-h?7M&f;CmU!{Vh!v-)`}AwKqM;xUlBEJ4|^|Xh~2D^^&w$or;x- zb^k;S51DM;!cdzTN#2?H=cqI?j;8hD6Y7#dX0@F%7q>E(bcHz=`K)$>2A`(CO7i0M zmd5QB9F^a%5s$dEz584&1eRM^-wiB2HZohS8ZlSfAL3TPy(q_P^T-s&2UmwLt#RS` z`bq2zDP$+a^ZKCGN<*?Z%=)qW!#7XPts5&}94t&^56qGGRe<0SLQVTLR}7ggoy#tg zePwx@wk1Au)1cc?C2%W?C8y(eFIQ2lh&;XJ3OgOEqQ{7|g1@e>_h>@))FSyIaPK{TgFo%Q4SZ!rL9Qai|&!4bK*!f0boz7m88mIruG~F+OJ0o zyA{8A-LZ-r;jFl^TP8U8vB!RItHm_4MBQ8?I(GiFD$e@%Piy+x>GP<#;KT3z9<-gp z>YQ!D2zJJwSn>f2^u}29S3biOe2A>X!T2Z9-JB-k$f&T1W#G0{#P`M#N5Jv;`cArM zQrxFib7E?9n09#VnkHpl zTyO8)Pdji4h{+jF9ImfItc~N%4PKuAkiX9?SEY$$`{uk@91eSa)9jYjO?Kz3(AG?xEg%uc3r$TD;YnC)GpxzgIL4`+h+sP_FxV z)pIb?-;w&UP$^BS1mwaFih`U8o0k)sXZ|7}tNtn&qF!ta@O`x?F4>nKFFsDLkVvqm zZ88r=0><+aBndiI@6H+8gnwQA&b(0+`Tn+#4GdIr!9!K_^j95|As526_8#lj_aWl@ zV9!87n!_E4`02<)hU}PIvfb9=)@9P&;l!Up&?{F@y?r&We7OROwj`Ygn36~%%|Crl z)ntPZGYKcdFvk}2Sb18G3mc)>9y2kMiMd4C)AHKhqAP}!d^zb~YW>2b`$c9Ohfsy{ zo!_$BmQwn1ElI5@;P8R#E%H~44>y7ydPrKBt$l8NZ>n$c4Ay&kSF+*3hw$%$MnSrp zOKxe+W?N!^()y|o zimK5OV*E5b?fR+USCORK%KZRP1b}Qf*1?m@qsy6+1ITf=pVR&c6p>gOnWj}JO+KaQ z{iDzwoFYx>do6}asL@!vzDneUX$;p@4lXnz9@y#e=W0Cn#qE+>_Oi~-#|{r|==rRj zuW@2;@_Y+#N3*5pBQk#Qp1!Qi3Uf;z$fGMks5$iRfuFzO`$Qa?YLonQ!K2MYyu5c= zI{2UY?cYH6k3!RAnIsAp!_5y#D)}esc#ydZ?jSTJH4c^K292verBqfJ5lGr4WZ35c zg{X2^m2P$w^BWp)

          +YjSrKg^A50xw(tq+2eRA1;cdi%t?D)B*6dGu%@NgCbmu(Y zS}yP%ZF3)6b7w;BMAGc%Y_jA2{Bk2++P&~EF}UVx#$MkWz7s0o@?iP3B&Rj?8B@T9 zMghY2T-`V1A9xyz{L$L&LcJ;HJ%8%hTND~-+tNpK^zjq?FtFkQT;evoC7 z5DHN{O{UF>(HmN}#Z1w!2=PbGn2I#u32|9M^FGFkPl@j&wr6NuwYGI{_?_K%@aniO z=rLI<%=7k=SgqxQ71FE(se@S$hSlrZh`qM_XL00vt093e61ZKOAr{?(jC9Ul-u}$n4f@%ZV|SxGb-Q=f2+N_ zCIyt9PHXekHhSFOZZZMU7VGzrjv^9Ia)WR0Cx5VgMif8>^9s`#Jf!XfmQgG&O-DeU zP}?HUI(7gsdnpmsZ31EZt6jYMx4K9H|2!a7%dpn{63mu`Ni3ePBUP@fQ(%_8AQk^j zmn?Gd_w)hDp~5^w@}~l8k~sf58YT}w32GRbJ8j*$B=~-WO~Wei7WnS358NeIho9_^ zc#kUVD2UK&#!KzwvdDM898F3k3lUH5dVFd7eJ42eB6552zbq5}JL1~#O{D+|z6Uz< zS%#W}DO4eB_PfROIpSK=efLQXYb`LZa037w!vh%2pv?ILTVq-PF*E+sBOiJIV=eyE z=1WVGw68DZ{Ka0yhG)_D9*Z8e+FYn@S#L5>R8XDM?a%kFRXzreJ zt>$*mXa`pd@PIZ=5nx9;y%8UeM{T$C2;PQ2H>Pwmj%rHFd?A@S@;A5Gp0&F`-DVwG z-#Qj5TB&00_KefBt~@4U4eb7H<2U!%Z-#64CWop0E_aKsPgGJIbH5cJPF=faqVVBM za&}td?8%h;TGL|+jwbvOimMQ&0 zzw`C$M2FNL_ouom*Yl=+f8M^${f5EQ_mU<9KdgL^F&6=*WshV{D=32xD$J>9!~ocO z-}F%N?EQ$Q`?t0~Afel@|Z=CwG*whgc&Rf^yc) zJ&{QkUmoAubH%{oxH!F{ON z*E`QtlBf&|Y?YK8krQy|#D1|l#CZSXTR={_Y8J2pD>1dvWLDo&!sT1bpozra6dl5!UGSmC< z#_ zP7&-HXQ}o`y4jSjqEkag8JZyZ@KNWVY(M8Md^<{`fI!^})$%KCwDK}6)E%0k)@0sM z+J$~1SE!+hILF97Qg+S+(Qu_6j_XzYWgCA>-ZHPk5_ef>oeU9cs(t1W>k@1!t-@i* zX6?#{IatV<9{Y{bHQx%=rT$n3uMOl+p?FkW;92jyi(n8~7F+pZkRZ(ipvLc`zWF3a z{238}9Se=p>qGg3XyIn<(LDW?WGH4rhLRAY|85P3JO@r%B>HYY1X-HJT)V=|$Yif< zN+_mJXG1Z22&G^s=;Q(YRd^rGg+j5WL{c)axC2a)!kq69mqZJplrzftn#$As#Md!h zVGLQU@a2*o#{2-vr3ZRuWH9~osOWCOJ?(hJ9Z6$Y^D2me);Z?A7w(2# zQvo!dfJI9S$6H%5W?7-Ojma}dKadNBlRcx6|KdAt$?|$TPuJz0Hn~>#ax$dZ(UHGi zX<(F*jsiNPALH!HC?jY`tA(otl21pHCACKzUf?Jhlk9(}uFBgS%{yon^CHT9jknXj z%JuJ!&*>YOv)Z)*9eOQ9abbj3IK#~MT4e|5sWafLU@~Tk zS*MDZe|5Q1;VIOFaWe)czEKM1OjJ^2h0N+Prqs->{%w3Vo?mMbmSsFBR)xMW#EdWO zM zX_JH-k4#5OQjEuwfUb3uXPYe#%wUiB9mYks6hgJouRYbgTz6iFjJt7I z4X4cIe?=B0Uf~!QEXa=HDy?)M*^jmRl;&B4Zy9OgvhMEmW4GLy% zrxE}%dnH>sJrMrd5CGH!6Tm~%)1>GWt9zm$QZ0@mg3``y5x+3~Lsx?3=S<1DrOF81 z3i+Lq9_l<~=p9q2s2;YTKAS$CD%r=#t?-+(?1zj0xtRW2N&P>C)k|;zK(X{*Z?QoV zzY#oSm2odbBHKy|FRrwV<;igY&U6HUNoA~AjbaEOI!Q=0LisLGr>8eBeA2E$;LGe_ z6`H!Y(vBwJ?b+5%Ql_<$;$77Y1hp&m>4MeQ_)~BG^VJzVco!0kgnry8RmS##GNndOXlfWHYBL+NyB0~KSUA+t-Nr2Nbb7ian=y}d^!$1 zeOGoqu%(>7V9E!=F+!;$ol*js0)QQN83m9W*6ISRvODv})x%Da>Y87~{GCR$r|lcT zU=)%|g#&D0(e%ND^eSFD$Po+-wEoZK^&gfy-XV?UUgAwf#pKYzv8)^3@OXw2UL34% zEm1AsC85tCp8x=c8E!>g7vM>Q)Ax1IJY%7Co(P&0Y@B|6__kIR*V-4l~l^IrQ0iQq*;GOygb+Ab`4jm z%rx#&tq%sPzSizr(Nn{^C}rE#?r0@Jw9xQyHGd6`LYQ-5V%eMeVd{f@6?eBM{ z1Oiyt^oXZyVsi>=PE15KFtf{!G;03Jv)7MOo8!44)}`Eex@v^M?7YD5+9S8 z9Q{WE6xNq+pXx>Yo#z0%dcqSK5vI31OhKD#o~ z6}-Y%w-$#0sgbSF*gMy?CU+mkFd{!;-sRV_YPO&g!0)~hPuZ_9qCrj~YBx@)?7lF& z-8_2`t9JBXn$~|HC;Cs$2wu;W8pc%_>mt11EgqKRE3QG)w>HR*tkLg#f&#?a;O!VR zEM(!M8k1sW-Ud}hn&q=28n*Loy$gG;Z)O6L}DlJ@+`58fQNI2Lf`%pQ62BSdrSx$NcjDLm}B=?Z^k z7eq7x1tL%c@w4@ciKNKU-tE`dBYqgNP4WQ{08$(Pg_jYmLUn{qIzGs>ftuY?VTz3% zV?LaRW6+VPp(tG&OP($fwRHLuyK95Ei`J_J3j^ z8F(8bo(twW(X23(Dk}{w7d}SH<5!+&(eD~xC;B>>&!I05uA;pwufxZ-Sj?R(?b)Qs zoottW72}NKi<8*M$U(!Uszy=v5v4x)-v{EOC5-KmUjEJxkR$;<=r=7b7p+60$>+Yr zm33_ZD-f#M96Cit2drT<;Th)@5gPfbGDTY?@{!c3YKF2}`nQvK)24m{R=m2}AJqS#FdGOiu>HSPP!89>%i=oD7V?HrwyY5Cz-19)WD9F!WTsUkw*Xtz~f z9j$_&a}eC{1o#%jvbUN2lAac!u>KyAEDMc93TDv4&r=m6k*H^6yt};0NMYrHpTvI(+l(N?H1zmw?Mk0aSH) zK^{kO9vguKIeeNMNfdln&x9H;QJOg6fp(5rLd?@?(V*9{IG#PVYF;=XvU>W!-bc%< zmN1SzQj^|&wzWV#X@SaLz^jj9N_`f2jL9-z`#1gkY9ZzWLqD3A`@3aQ#(OAYQqQz5 zr2dYNP!Z_a+Tk2%U*E0jU2<)krrAbgl78hUR^*$+ZTc-Sd5hKMR0D}Ogx0QuDd{-Y zotjvy4Bj8ByW9hF56H@ih={l(`KxKGOs+b>stOsSfvlbW}rXC*QoP;7Fb>AW*T7Sy*-7o?=lCv>4CwMc%`5&~DF0%!enb z4viG+Y(L^tTO}s@4sD?Z?A;ns7|)z2i}-#?Ai7+N0>h)sqF}*VDFB8<%lq62>NDCp zHXt|0zZQi-@X(yhb4Peb8Fp z^?Ny97yw9^i+iou?bNqOIZEgeeNuU+IQt5Joy{8Kk82mM;BTma@f5#kU6(ul_Z3!e zKgCheG~}sKB|7Ogdh~+`S#v@Fw*dlpmW&*bl0pHbMFT+b8oc1l2(V(rNSj(Sj$hnt zQYdZOR)86e0bP^`iii)@Z{lA^(65=!pgdnik~t(O)k_EhWvV1LHK~FM4W(D6EkqQA zly1vs{b+D@@ResKe7`Rr#|&X%bA4<@jQ?z&EWAND&`i8WG(EU`Gx@81oM_&EZX^DI zoCqlybH`VEfn5@_l~~)u>m0R&5a-o`^({lMa_{Nn6_Oq)02@Yd4$xrHbU|9defSeB zwvP1FR%gq<}ilh&7E)lzM`**JtWF+u?1>ZiSh(#?&Sr1)$F7N=r zNi`)yWa^l~#B}xvBS?C+STDE^O%1U$6GFx%Fz^ma%k45*S>|`!PM;|w+3IXT1%|y8 z7S)EYxa|kH;#}nY<{S2zX{%8$a|p&sp)M*!|=O_9aPAG8FD>N26Ou zZ+DCqu%C6VyoiS*gf(0C9CfbVCMr7t?NVXkRTPhII8J^5HHcYvj8w5DA&&~$b9F75 z1DTRmZ29KprlOBHU$R{-Ql=fci@KUq(Aj9OImQy(l}uV?&^68I@5}_S1_oQ8m%vAv zm8+s0o2Ha|I~qa?aXKBJpYH{RKvE0CYwpMBi{1GpA;hzr+w@t>!!q%8vs;n<-#_g> z>OunYiccTB5qbC!u0X68`1tJ%x{yppZXSn*z`+G=L&b^ST+z&SK)pu|#?N7=>C#~GY zdW7E0d8AhkPmeM2DxTeCUe-N+@{p4{hC{HHqU%S&`n31v?2Cx>`y6VGOs=VpvJOPQ zyp5dcF|&23&VN6`{qGLqpThb;5I_-v(3y`mHp1M|Mk_n@+VZrY>AZ6c@!ZQ1_o=mJ_Ck~m%$3lqBM_;wnl})>(6}uLiEHs@L=5+ zCXW8;nop7ZfH{VKB)4{88A3e7Do=(9JAiiH%ASAAKO`=OOK-p*e+>%zbMH*hNZ@bH=3>1-b)xZsG(JSA* zHuiV)!>nVX3RB>zmBUZc4SVES`r;t1N1()@vb8*kFnUe@)7HjsclYy9ZjT;lNuYEG&G5I z)V#yE*DaiMHM`pny=Felf0u@wP0wU-qIkj0Cw9@u31O)i&q?J{UW+*OKfWd52pk_g z4zknb=hAuiXJYf?evJ4O^*6SPbKCbTX>sZZSgv8G{0p2@(RmovqO?SSB7cSK7`Ps_ z^6al_Y5h|&!XM7vfwQR)B~ldCptr8z-*nfBjS)c=Vdp+vnUlpPhFyADT?v(f_`p*@ z&ygAXNZv>`OIB0STZ@qiONWu75n@A$seK>P3NMrL#PNYFWu-MUAck>3AQPvz2d$*5 zpJY^g+2QXqm7*a6mc}Zuxo~xH_2Qe&L)j;r?_HC+S2xFF9<`orl@s7 z@oOT5C3HR}80z0VQb}4xs>mw2AC*c_79M#9bxyPt)%=tiETfe+-^4VPlVftdO(;nO zH$nroFD~=%r~w;*!8BQjy7shWxBwf2O}se07GhsS9i=22gDtD8L%z8epn@V9$x)=p z>OBh|R(#AkmJ+ZSXRpWtOIeLZE7nP1>0u^q>6jr@I@Ym*ZwKO)qjE$RlLE{a$NhM? zn)ty1Wwx_IEjP}y(K*)ygtnNK!K2C_=v9INo8}5`hqktFo_$02uc>v(KP>#anR(Qs z{r1*?w>fQVm<8d&4Z?Ougs=9PB>jM8q2M(-84R#?YMnwzuK9u1R7)fq)MRu>RJEaX zJ}EbwJ?jE^;xu6bDqpD8e2Pc;Rh71rMaNo_4fFN-BGMhlDb$pnjC;PxuZaDF>~o=q zXp}q0=jgCyRH;*96Bdg3`E{FW_Y1|3WMjyWv57d@ZUFy6wF6)T#&8Tq>%b@?kge}58DP{=JFaR=^zCqi z*y3is76}R@>;b!`T2?7P$Vgk=;(=pLdZOMtZ4v)vNHD~0Iaj&Kt-AN`av;Jh7XRUT zz{Id*|B@Z?#U1;`Kas_t7=fUrOs;!TD)GE_-{ZDR;{}$2DRSB#-sVu=oDfYKyJ~dq ztk+9da>nJK3=k&$HrUl;T+2rba)YK4VU18u*Md8*MVgwmJ2NanlNl?>GMHr2bWSkf z7PyKufTpfjKPpo3wZt}MD556 z>eD1njTExRXfzK}ucuFDP+3Tj|9Z~nBKi25wT11qCDk(q2}M=nktZl}K0Pr=g-kwn zfo9O;z1VnYoYRnFbu=@KnFbUU>p(_n$U*Xm<3KU^0QZMgQ#BZ6*SX{dnXBIv9cbbL z&<;DH=|hoqBxjGog8E=*Z=m8cw2|dWub4O4-ADn*B&Etp@|4mXnnhC^UHAG#$NTa>ZN)o2>&0AE7OGH6y?ugQ>5yWn{ zn9I++04;Ms*)$ZbVQ*&|1nYXi4}mKGp`_rE20(mU+wKgoyUlOz((0@xEt2NJ`_lPm zxumT%?-&UB*dAtibLzzIU0;Uqbvmx{3Rno4aZSGh@hI(}sD5QSAt7F6J7!C}Zt>HS z!}deBQFo!64>{B=e?C`jtq zfFJW0G3p!jX6p$eKN4Y<9-7VFLKK*;*=^N#L)naoaN=*`?{5q)=FNH%W9#2nHrJb_ zB@A`z9F9l0`%gvQ%;7XI6*V;33E-kj`*vUMbDSSz8)-hsBP;`*T$TkJxL`=Dl(Mdg zQ<9buTQo7a#l-^h)7adGh6dFeMw6a*Q3^`?Gpuoep=>VT z=h8(nTlR4)KC;ea8E6d(4h3#zRR)`Z-`{X?)}osk%FRBG+Pee*hBeyZ5_d!YrLgB^ zfCd{ZM`4S|{rB-peZ;gS>dblWZjssy)>4wvvWDWf?=#N78K;G0&^R zx^dbXM}3{$w6?`=0@tN;XOVTLA1EF{WfuoKA|{%E*|H?Q?;`18q~-?1=Ss+aX@uFiObBa;ajxQ2aO6R z%QgHz@2uHDVsvj``uDlZ^T8N=tO5uOqEiEn))5v$ewvrOfd2o#f$%@=gF`=nY|CEP zv`9oUJ#BA)-D`K0(Uec4Y5(?=R^_f*AG(ZGSJ&sk;6Q3U)Y*o0!6d#_7xW?i+GuH4 zA97ht&xz*Rn?`aS=d*o{shio9DHHhIGmGNKYZOS&WaQEBq! zkgCk%4IM!)32uJ|JkTz`y{4qR;u=JU#{>xhGw8wyH-(3twDFbk49pa+IDw(S3A6q- z=b}DAID;c3H*%A@j!&7N<#z-MDUniv^KAk>$c*(g5eV86*c()?bg7{Wx__vmTa#p{ zj(P8OX&tK;CIHU4-@x?8tXaW_56qIYPsXe!)%v?qZ5jVc7eTA9C z`icqqQaI}|drq|(hT)zenSm{9jra(F5mtgP^P_r-$hxcPsD;kA!cbJFyFvC$$B~$~ z5RPzhxMKmGk0Y3OpNrG%YUb>BZxndVb1)(+h(zK=S5EmAvWmWgt4u3-9)qLGD=!^(OlW18EyaE{@Wg#-%+}J>5Fx{0x?#P;)&0i@Q%Rk zfpZ9)4R<7znWp*qE{^eIbjI};n*$e`R{Z}i4gLpmkZn?7y-R|ev{rhOE;X6g?l_|j z56)2MZKe$0?uWcq1PO9$*-?9717}9&x|d=>mG?EN)OaGylug{n*>%2qdvj>WQG3vC zVFuheK=oQ()zc46Kiph#P>Y;V3c^^ND#ro(xLfqOShVDFMovpJpc8 zA0gf5UxD{_qWT`X-itK34*`=@FBF;Ojnq9?2N)lr;oQ{MGzZoyiAY|DKL-`s_F-+L zsJmgd1XJG7(6+G}44a7}jWq_7sScAZn}m^3g;fK9otoD!hjppd=*<~i6Kx;GS=*aY zQ}8s#4xeB15~az}DaM$&+jyK_P>Ff35CpI0eP^W8evrtoc=zjDI`fbcHXa!Up<@Rk z^irkmw3I=Cc=Clg|3z5!1-ba%y_6`e90~o)IIXQwXJ#N7UkZeb#b3IOUk9-sYp+AyeuN;Nwj~U=4(}!bRF|M zRX(qt`aYDmwy|B4?-*u7i;lgi$rMME+nKlW5s6=14jy&3Mt_nt)!lfi@~wh$O7nU7 zOQOl=U=5Kg&i^T0`j_<~D3#YC{9dig zlA~=6+!1y6jl^V&xI-Ah)-kjyL}Br?gujhp!%I9$0)}R0FJpfc@VdT>sfsjBf5PyH zB3e2U#}!YB0Yvt%D)X=kTtmJ!0cFI%tpvGBq1|xWg_tmd6SNfn`3M!PWUajOj$ry4 z!a|si=>nxR)zjY7D~gyVV1(p|k1I3L1E)`~7I5L{yFL0p{ch2nTue?r+}0%iGPrWm zvq^a%At7pV+4}u%nd&Ch9cF(_dh&?I476@Vb8uu>4d_4Y2G~p=(rk0aW1W|P(UjEn zp4k0NDwd4S0-XQ6j3W!jAOsrLGFg0}-z~*0-Mdg;=jkxs(c=+^1?Jo4&DCC^C^vWx zOsr=W)2P?LR+PVUAaPzm;TSI_*$+m2>XM~YG7{y#V8TmJTuZ+OrvG+5X%v0!ZRRgk z+BcfF%Y9O)-rjC53=+J`)~*7`=0hoK3~_=X6p>_9peUI_<1iFMv_|!QAfg_63o`ar z@6hN(Krq2^zWA%I&f><7-N9M{`SUOO<_In_`wXXg8?4iiw9T$snQD>+dW3=HH(y_k z?4$A(5hfhkl^mj2(ShAgP4*JJX7#G@U50D+X#MAaqu@l=n;o0P5}}~#opZ6@o5uQaAaxe|o@?02zeW3WX8L#*d_)kt;hnZ=jaqF_J|;ctu!k?!HDK zm8zo>C8bG@CjBu|^yGFHIydCPZj0g;X3c`%$f|&4;G}!Ls@TL3TC906v6T z{n@dCAeab>G>!vFFViH;ZjU1gGphBEJf9Kp|F}GCs)S@pw%} z!a$h>W|c*XGUc3!0^3I+_4~j}OQVb$Jq60X5}2AkKe~tEui~)4V&^0U;lovs*F5rW z;OLwj%BBrCpDk{AAM>@hQ&@@}7H|Urh|=iD>|%@mz>l)h$e6GLUO{Cw!*A^p@5vsh zX1E8I?x%>}|6NGtwY`#U1bS44g?pXv5+Cct)Dq3J+Fh=a|IG6zWfdz1n7%Wn7pN*a zEgrv^hP@&FEkXd)hUjzD=m1R#=^A2=7{NQ9HcK>=n0A1pV(L(~D+_NAc@A4(^f(j} zF!pUNIg{GF0M!Cj-aJB)XigYNbSmHyz^V-7aXYh5=pjmh+q54&gfN$8zu9GXv z$0#6JsCD7l@R3mE+6aqL%(9Z6^`j!fSIB)%QElSwODP57qAtl33OoHTzMJ@`VWqAo zX@Xm|=GCpQoZv-7-rSI# zeqCV);k(l);vu=RM)UrQb|byB&|r(^^07hRGJ*-(y>E6iad5>OJ>asheD^Dd-cKY&Azg-*6wlJO}iP5dfZnRMnsVID9>?Ltd@#(5e@LeQRZ{;$x zJ^-2eJY1h{m0#U0Ue)REBYoYcq2F}nXB&7#g5ve0y|7g`|K?7;whyO0P{>17U~Nuu zTG0U`@-84yIRPnEK2wI0!*4t4g5-CD{Rf#JIg{0crdW=}GD3R}2Ztu4frgm*iPqt1 zNkSyxGk^J=TpS@%D@H|6&d;XFR6Pl2vUO`%h@o3V1r_7_Z7QPss1Sq=Rw*KKQm$!C zR%|F561PZ>+V4uL*RSIO70iDb{y!Vm8{+`FQ7JvMBKn)K_z69b+inlztN>~M@2_FI zav@+-HEFet#RiBkixCFzicyy?))|cImfmaIE4$$>O%ymCNa8QdR{N$)&iXtJGYl-J zoppGATvgeAXJZ;D8c7rPceQCgTD^4X{L-m1P9s}FD{z-o=y zCHMDs<`yJtFi;YCNBkTQMh07rOvi3{m+)I;hd)zmT00KBPwI{PRZc(#f7k)?M zR70>KHup8Zb0{?y3=wfFL1II{az_JwbYiGbX9G)4iJXK~D z^)Twh$#_EyP*EKz=Usll+IU}jX+6i>P6Wd>ROe_>6MCWMM^?a5RaRIUJ3E0-2u<$~ zDrz@X#?7U#d#NMdJ=8!Ly!>gr*1>aA*<7{f<$C`T$EuPC(o@H$$9Q|VYNfWEEdcZW z$lLb(sSv9&%>q-?~}wevC+5aI5YvI#7N8^N*k#yDIU5OP@^n z`g+xW*t`C9l(SkODKu~Bn-)n*ppvOb{T`<)>ogn^aKs&C@v5_`>FOk z4WNffnif!(m^%$ixAC|UTx-0;%SxAyGssf1=Pyg&dC74-m-Pm++AFx2hFCP^&1$&1k0~)qtPI zIijOqp6P$2B%~@r0c(!DAA+HQINooCM!y&OuXmR zRb)dj>H7Z2xw7RGy5R3+SudPuq}M*6LL|<-ki0e|ZSiK13w3S7_w~DE!OX%Q^T1+O z+-E&9SkxIRr=`R%umM;*}anL?>rql_W|0}zZD&@aE|1_-f6QsiGqPHkR zC67zd)e~~suP_sk)D`QO9llz{~9M$j3bgiW#fuMH;q9SwU0h!{==#0dQt^3nL@6Fdrrf za8iKESeq8@s9NKr{Ujm4tff4&y?M9&*h;Oy_`LSwqkF{fVnZ#kRdAtyiN>GYGDy|@thPpM8wO&ZlsxtdvqSZ6jew)DVeswL4 zqEuTh4xQhOYL3o!9LWddVQX1t)VPFsegn2$!F_g(NF$%$Ot@d38u2I`RNuJOz0M4u zDs3cl>n3*cDy!qCAGa)ueiU6_8qi_1z|Ziw_tqNV_}^wcF_n&MJ@;*B0#iac6WlzL-<^;%gqfXwCwB)l$FkHcOl@y5QJ+pS$r;JrE`X zL5-%`kw=chr}!IP>vI}TKWOmgebkvBbSpeN&MQM}qodhAfATosHd+1YCx4-;Jrdc` z%1ag)cK%W*QXQnur%x!iXnvA3U)qJiJz%;UFxeuz#h~oVf-pppq8m~lWkvaZ2`Rlt z7}5Sx_*uKA?WId~%^RMrv$oHv|4DNHu$<4I5K=gGkiMz9wadIO!8_EAw}x3_LXt#DoJ5N=5 z8V)LYDnh9};&l1Vf$F)+j1ColgqUD?u|~6{%X}d&4H73JU0UD_Tc_s8PZ32Jj$xP) zBLWEvz6cM7ISxJbc_hwQ*Rg>!6?+sI(p9C+iU|n4yg~hPW-+vEOaDO(;nj~S8*jx| z(PJ)pJG>7O9Ua5W-EoyA-*)eocWm4m|7WD5Pt6tBQ)`-e#TLmh?%1Bda2vC6(vjzk zCFv_J2Gd0ckJX{wa?8*4HH}y)u3N81yKXq6gb6?%Cx-WiPsEpfwL+|xeDt>6sW@$+ zRlL5==sB2x=o z$tSMCv1gL*j{4Qg&mWv5H}XS z?*kP22%1P&I;#A5ck+r2#7ePH(u?QJ@wF&(B-g~YyYcka+WX?(D~j3EKIf}H*`mqF z_o*P-Z7*i4RV{2D(oL}N-_LAn%U(bAP@>2D6=$A*9o(E+{b@D01K%18Q1Ua(qLs1a z)5}uXxU9tyG60{aw6pa+Vx1g*m~hy>9HWm-xsD$u#A#_hKf*joI(fhNy$t>9>QYpx zrepGe!PBnCWLMfg2ECE!wLLBlp=M%H=B!Ef`dlEXUeMKce`iv9>zT@GA*#@S1KvN7JKYD+Z!_teMN1mCg_Achc~IVDvJ^Lfl30$3WmmJGEmRFc zEj^Q&YnD+_rq~9H>ZsR|tM(8Oa1yP%WhgdvVOC{Ya}zXi^+egU?eS2L1>=rO25cXU zCJP7K6kh)tSplxiHUndMYJ%MT-Hh~>72dZD=ALpJgoF%2`tt0RgBcOK zS>`NKCs7B*!2iBr4lJH#AI;y1PLO-;?j9C%BF+O?tfz(OQAKG+C)lm5ngYsu0AkTi zj!qa0h>rJudxH}&aTw1cHp3RpVJ@7w6`XD`YGG>s_@s8aBw_B#V0sT9bv5}yQ(fn; z<$5J+4sFBn>jwuyNXgxBuk>=d5-K$AG7ILmulhIj4Q-V)@qH41d=~Q zxNr-O9Ik@|@&3Q+3|L)tI8`R86Vz~8jtj~uCD!drQy8BT%iNC7_r|avYr9ZILJ%{P zQ;D>4O_kSwZLcdQ6hDhdpIb#CtXCNgL{!F%j6{}S)~757ZzU(A#=wGB5Z5h1S&?jc z3G1m?LAa-N6fR#)t4&tV8R2mvaA6WdDJj zaR=!vm#S~xD8@M-n}CMhro7J_BBCWOsA98KR-cl~Rfhrq9iyo>{g|LI0Ayt*YA3O< zaMUOtoBL}@L^(R%r|bj)T2fbb>&j(1o$wtp*FKI3lo7T#jcpJ^J)y^v8)$r8=3^^_ zzsWFu$z^gS4OLdwan3)O;Vsz?oBQ&}iZAnBQtpioy}V89J5TmD+LZgJ~qs{iN9AoB^wHY zB>OJFGMaR=IUE*cTJeTXJ zw5R(*u{5h7BK?gWRM2E_L=s7-Tx`PQJ;_AHhDDXDgAHR@b(I-(aKaMIaxsqNNo@X8 zK6@0fFpKaSZba_o*t&D z9_ul~r1@LyC`-w;j~O!9_B7S0Z^gg5ntCeEAfbWpbP~uX%YWGP2wF`cyJ|uvW6Ujxye$JDA*OdNM_(yM(`vl zG?T`epywLCPRAe>0b$)-`85Vg^e5hHXeHSDOAXR^sNcJ)e_`sCe~@|^7WsNsw57!7~F;&yx;J+btG+T;7|v4F+~gTM6m z?al7(L*`7b8jdtr)-6rpv>z{M#YpP}!9oF4@{5#jM1=CojJVbU)29b)jRL;bxppim z{<&fEqC{^@OyoDTOyPzB9r5~aOZ@a^E#aLEg?XBe!uL1w z2BZi*oeDsuTjs3PN8}O#*x^A7C_!EJ#T3Cc&^tp|t862HnKJ+!n7q9>R3bRGd%Yy+ zu*KeB$#2%ECtf6{F7lUn4T6v|YZGzsJbQpEPW1kjUlMh${^ZpY zDFFbZ1}dIV`~;}wLY8HHe=v@sSwLHz-I}1>lDgRwhPkr3ew-J)9q+}+kFrEQ@vY{1gw{T4cy&c2v&P*ovDYy^E=0fX>$;kg z5!%VLmm|s8(IqtWeJ?9c{JqC3;`!aHyT8ooL7Hh11T{Q$4X8W>zX)Un`k3g9j_@|x zl#`s(^E&yuvY$=)vpa@TcuKoOB&R&`T)iImXf2mmiUqhkw=!L2V<6)x5UydtGmeaO zQX?r{&fD$l;XEhWjnlvGSjk|-vR+io|2X*_{4gWPjekO%` zY&oEO1;(An-#RT`Zg{d?zi=RCGyV55FbQ=3v=6gXB!wm^(C{C~#fj)ilX90bC(g07 zZimB`+@7>eeW55>o;6p4$fjt`XgH83|J%kJT^s?%kO!jG)_Fqp`-NN?69xw1ac*qO zJQ+;+-KDCsGqY;A@K*_>ZRr&SczxtJl6%N(U~BF2QQF;9EF8R&%U7ZEcRwjJttiG3fZ!Qz z2HN1s5zOeZhkn36r!=6@RE{D`)3JHCbQ~IdH%&hq*{}^=V|>YddqSo z?}c6Tm8?-Oo?Oob&g)ugVu|{WVUOn%v91OpS{679Q9Z6ITCG%+uTSwjW8%7^#FWY_ z_5*c0bJ>~Rgb|ja2%B*U?vZSGDUn!rE<7@hI1mJNT{U)_CsS}!{#h~k+~HIvcth=V9MAYfcUs)WiYhD`VqE6+AkeblTFCig(yp!KpzD5Uob&k2AZlQ(RKz)GNU}OH;pZDzs284x^1ECdh;+>qW8VONRR4N^K;Vy^x|+!cOKuzR0dS3? zWv?gW&JT_po5X_W#lVs8Om|*hvd%FRPyZa}UWoy?62EO-$Hw1MWtvdk=7IkYiRM2n z_lP74KGW1%NYcFxOQT#pxkc~IsL82yEY*iIsjQ8x5j6oKCT5)>T5Wixa9j*XY8T6g z;t`>OrXFRuQ`%^zZ_F;h3tiOsslkwr;la(s8~lm6<*|LVr_tI@(_Ob2$(BCyuFa{Q zydy<_i&)V{442r5K9d5yX?nwU<%_d1H-8NsSz(>-K@&nkk4arU>T!{pIX*H{+HDnsv8)K0Rw^yDKz3gCDZf}l;D%jka&Cwjrl8J@I%mWN zqEp(Gf8`5r_MQUEb@7>nj*rdaEulVPypQ%LJ{i$<^&9qwFtI$)xfet{N8RFX?6zG_ z9RkpCnKO=B)uEmWZ~0@!prJ5WK)IR|-aIMPy5JsAE60EXmH-k2)r)QC_F3T`-HO68 zyUMn_h<;Hfgn} z!VPz1@G)Q9F^Z!>Yi6eT=yp}QltNCv@I$%3gFg?k(gQ?AXX`6*N`3~xWkW-6c~;fB zp&dLG`C*iuWpSEt@z!9(~Vh*Zi}oB zRh-T9T&=Px%CC5J!3P}fO^>YzlnMQA7klUqDkW}|_4)k|HTpl0tB)bEoW8bck-;@g z+}>{{uj7Y|-JDox|6`C9U#(%);{*~Nu7^S@@NxO5SXv~yMh)fY?tE*JhDJBr1B-`D z8;Lb0qC=V+z!zND6$fVkpW3UqXCpY`==8>>LrFJY=>+yreBnP&$@D$a<&A|%3-6^t!$jSf!AX*f}#)J3A&$-PD=lP|Xq}4ga zqUm%fL@EmE@42Z{Wox$>Q1CvKeoCOfKGoO|IeXbK7VECkVy4*dk-FR|r<$2iERm_1 z15bNxlkq4^!1_!m%7SBk^wR<7g!uH@GLe{s%1C)TZm%p2EXJ%RWjsSifM<%DBFcA@ zsZ2&EmT6);yG+aXw!Qn)|4KV}$Acc1cT~S+sMBfbrYq*fq;M$d^_j!w(GEigFSZ7_-#HXILc|ga-Nu*gX<`YBJCNh(bTtH z7!;nf#WkoOy{1c0J9(P7KukPkZ^iOt2uqWJz(+~K{8)w!CLNm}{vYiynajs@kWG_b z&@6=%(cml`BY4%}+$8k@)xRr(|LZLGDumQNSm>KF8Cb~@bXLE)rHnE*i)t7O*k>9D zc%)?i1G#YyS9>It5Oi?RN$rrr7JwRB{6Y|B;3;!-tKEOIV z0}8B}XJH1n7yc<8*;Y8~o8MD`JeATRsC2oiNU*a-PE1rqPIURI&307X6oOEEHd%Yz z+&O(+Y$ZdE>FaFrHAm0F@QQCYIErD${NK6LjLxOOs>G?sdn%3q02d@o+7%N`q2d@N z7aF#yd{00WRqyp367%ERUpd($yh{GS(d_ z9X~HVtoy4<^XATt;%DyA)6>5+9A!d`{C*#rYDo{rRs?;qH^YjDLsj zM4IT}OJA2xXafj-t$(el^xN)pppd{s7GWF*6gylAVyB4DO&E%%t3G%w#b+Yc9|_Qi z>B>pa;|YC?G8J-Lk!-)U)-yFXq-|FH^tnWlm-p=QIwNN8E~X(h>EL3x*our!F4on~ z-~PtVqvG(Qdsj;1z{`p{D|Pz6XO=WjryU}~tTMlOXGG&vV{IpqOZxT1Cyn%fRcO+M zAes@x(RSZ+HODe>ydoIK*v3~T>pTb=BLC;%08jS3z5_P#1b6aos*E*)w^${e?k&`3N;6>}P&xuz&Bh8gf)uhEv@Y)xKux!rPnvmAKP7LtI?WBRAs}x(@zrt<#83T@Jr> ziy+hZRQA;G`e6Z%k`ywRJ5q%??DrCOBZt)iSklu_MuC8H;)MkY8ehqL4c5(KG8l7g zrV(mr_{}K$j!DnDnq7ZKd27>+^2_PP>9@x<-n;Be1}@O3OzPLwl{LlpC}1&iszfz! z3wa;!a96-FX@r%a={BNGkkaJ`~}b3>g!EI zxXvdXtltD?6ArT;*IW{w62KE<`_0_A&VU2?D&kMMYt9zqt!Wz;>30}&|GS@%^ydC` z`|who1i1%#3!Nm$B~W=S-14}|L=eY`I~|jPmuhb`$*0GVQnoCGd#PKTbEO&ZAPulp z<`zHOS~f}t!p;17yWy!+kRb&yv6ohEd+u6qMS%5No%e6AX}!(nSuVP{p*>YEw1!Mu zuHGqY3^>s-!EZ@ghWo0YN*p}Ah6I9+7q^_%C@#~lU>3w%ur81n=D0=dQ6lv5mU4I6Xh8Ih@eK{=0qR@dleeq4=hHbXS`dG4 zU_ZDf1j*DS>Tsqr@<%%S`csOF$VT5VVjidmX$&IpP0xNMV(4Q(5s5D-G*J!2nT<%t z(n?6oWVWmcff5;j1yR5!hQ5nRSHu!{y~=~dpo$cTe2clHzm{mJ&K<`}Is=q^%S?Z7 z20NQmj6~4oTK5aiQ=?tA#AlO7MPIEm$!U=N*0D{pBK9mZEWK*?hu>Ofx14QM%I8=R zwAfOq&gf`43C2_tge{p8jLMgS4rhs^?#8CXNd9h+@#r7n);zp!F^vCN@ z=CYqHzN&$_VybD{Q=b{hL{&82V0$%_2(M`qXT$T(xtl?bSELrHB6C#AiU3f?!CVA2g()x{;J8;qMa>C-+kQiseZTGGGO|P+ z>xEH}yU)79@%COilxNI_Ge7R#9pRWZ|C*b>)~_TVOGKmqYO;Rt=UTQ@5HFTfG~CK7 zn%|uqC-fiFN}mV}Og(8ckfTglHQI1wlp@aKo$<&EIwcJ=6dfpDJ1SqgMyQ=MN%Bf^ zccg=oq2wtB6I}V`6%))oK+xg&0-NAgZ_4MK!9=FM=jz?wR8=!4hlU53mG=ROw1%R^VmFyggEY0X*2 zMoWj$%njJrp{&q}A_4#@Og!TW=F0Y_9@!=TzmS{(8L9C)yP<88Bx!|-^Q=F;Md`Qb z%Z~L``9(6@c&OE|CIY!Lc2jI#S-bHH&sn?%D~|t?&h-Y0yFUAfb*t z25B)aOx3&N9FL*}xB<-=bZ9s+JViX&coryil&DbQrw0bbCe@Ffs%3(gC6og8?Ym16 zUSe@aaUbr|I>72vZNhKBw;mwD-Uf4|CEpvzSBPqp8h(Hjy9)sJs$iv*!tyQ+3&*B9 zRsL5+`){w>rxNEB9besk%uGEt@Hb#Q#rHkHA5I6I)3kUkA_tgBQiGV*Mn*35(cVXb zB}|lt7^0RE0oU`A{<=D=+6Z73mEuk4US`OR|M++$EG3yy-XX%TG z&B1}EJT<-kKbQv}MuinFpN{?hXiZqK|6m!&=|Jq{J)ULFwZ3vBsc>>J)V!zSBlaRA z1g%m2H{pxv69z_d;(4MSV~3-rR?eTdw|#k^7Ge2<85}_zq3Pcog|kptTa2i4dkp2R ziopV&N+>@=dK%{~*D*6i@`6K`ktpk1VYJo0oR5Sw!bn5CHqIZ$Jigqc4fsmQzRkDO z$nYOireD;bTwLq>9PjUc@2S++E4NF2g>$tfay_TRhzGh(7-`v4(QFv_i`E$~f0=k- z!~{Jqo#P~r0d{!(N9*ukb(NKrF6XAN{j%sv_(lkMIKoBbCc}3&jbkVADHMyKVP8)= z>5J=!WT6H&N0F)4w(5gfgrP_SzFFHMKqO#zV+IOT%9!Pn(dh(ehB$AIibDp~v?Eib zpg8c8c);~FeBIFxki2Y+y|Zsyz?Z$SqXEt1W3+h-iiF-!|dj z<;D->1Q%YgCz(gPYQp+%yy*Nx}QI@5O3Wl>28-23A*$bWn+MxJ?d6S&g`jJDdD90_Evht0)s?gK9g+4C;2D z$y;3(5{V-(guRsbzcMW%#e!REx7)6NTT}yJZmmTR0bZ!3kg?sQV#y)Xv?I7$=~~Q7 zyQt~sY8VixaJcc??}2sA^Wedoij&ga1z5L62Cq>kW+sMG1f(W7$j`iV<%76($XLw- zvyYo;sGPv7mcupauNNQ?gLQUq@Vmru1Djvh+$^s3)0G}5E{@CyEf|}-$QjhA8U`XF zzF&{9W1Cj}`YL?Ld6$mFdVJQ7E1lVP5DFQgB|nfHY)P1wPR!30IF2m#Y~F=}AfgCT z`ZM{s0d#OS%BEA59NL|Q4pY8^hw0`=DnWhdb*ns|3653ORys2#UFv+@D-)@g{kgn?5?t%~}x-gM%&%2IKhRhhFsgvMF6*KSXv*mvqi;S-8nTTK(KF|X%y zHbwBxRT|hfq$ST$iLj-4`F;KOJHTQ6Xr?+V!`V4ag{}h&nG8e^(~WW*Y-$`qfZ};G z9!0A?`J}=THSo7Pf{Kkb_~!GAaIrO%ag@VFYzaGYbAQDzLO0@Z%m0h6_l{@tfA_~Dg2aryi5y;>s(V#h2>>{+XdE?ew9YwumF zR#ojy%_^leYjsg=b>N%#`JC_Xdp_r!-~IRfM;>`R@9TA4uj@G!gwl+OqB$J&@p%4SW5Di=%AtI_U8c9>8W@glDm$UQb4m13--SW{j z-}wI+R{s-n7_W7LzAHdy{)v&8aq`5kpB{WWCS}YTm~F8sEq*uMYIZc?&C+Of2lURV znOep6R8oX`nl=bvi*JkR>?8bx&VhOx4IebfV3!E>+`)!I1tn@ht#h9n#FS3^3bKil z0@P(J{Avm2{j%?#W=`KAbu`X40R|9%vKQ?l-E=}%SBja*dlxr!`SvP>W=-3JL|&-1 z%c)1uNRcB37Y2gZre7NS`RY};e`w8+{gQ-qAp9IsiWw9M?_7CRvkZJeD4DnYHdB8` z5>KYgVF(h|L{^W5QSt$o=;3I(x`cfFv0qO`+38K= zpVXVFR}Ruo%fI(9Rs6oiiXpH&W7d8apMzM5m#(ZH zVmQP#fscFY*WVu>kwWb*{xtS=cpwg6H@tvd#gnmG z=O{3M??mNmkyf+V0zXR;()(tSc3_y4Tp|WTmEEXPIV&pmQQa#eM$foh9sv)q>d6-| z5Obl`G@prZ2T{XczyBaF-f=YWt>LVID!x6ZbfijCJ4A{zjjsNmYei+rpRxT4);jP+U!z(his*ln+57{zf2~+i=K$(x zKZ3qXSiCJwn2p%u2yap)hVoX;7}6G~Ey|Mq=V0AAip_5YI8LDD8==ZBdL#+g@Xa%^FL6p2uN&oFq3h30XT?<=)WM}6<#6ops`%M!a|I>)dWwUP4 zFimX-{e&$)k19q4km%VoRU{eh9Z?w|$f$r#wekEj;Oh5%k>z9T{C4%1cR|g)ZhcZz z4c07?(RcET48x`N2s#XkGU~0g4-W1sJuiSh*l3U)gf2RYg%kC<8?-c2g-`e>{S64k z7Z$b_Rv#^zk&rA-PKfE?gh{(_aN?j-ArgIA{975V>etH`PdMmW(^GIHHO}6u7LyDb zA#uV%D7@X<%H{roMvkNhUtU#q=|MV+-wA^cn%g2md81c@Sm1*IC`{`7`R!XCZ4dA2 zh1WWR+J(S*OA{G_DfL1FB2c;wCijypsr25upUjkw51E06je1bM7!~x0qehW#5j-oO z#SX$kgaevWF7bcy(#(Bt6M&>7YS4^k)qePFd_yD#{^9eVB1|7z2l~)(r|CmhkH^^D zqgzpDoPY0izGX7tec~FHeJY{6?yO48vmvkh$I#cc=1tABfN>}Q78gF{sAu$JG)>7& zZkLkPLw4SHce1LzPe#(o=TFO$B!8)9jWB|b83!covx5iWqxWrZ8+e z{Kf|NbyH=;o)ZCp4iFjSL8(kxR~Ky+i>Pkey8BEjpVY{}O0tK^>R9y_TsT?eQ+O@vNb+$u_WCFEA7T46T!%i!m5~u3q;!QYQnf5 zu8MAb)UJJEH6uB=YjRlBtK3Fe;`%BoCQ{RvaR+gdP6oWm#yN?OBZjQkW7j{|uCK4x|83*-59Gk-0O0v!y`^a*{eh^cI*ofz;F&MP3};m( zhWJw|BQ}q=C<(p{OiXV~@eNWH05u1oAPk&D*pxFFx3q1vPg;W1w?@s zh|j;VsSV91O&*1BR-&e#FH!LsXeua>m;ToKCcm1L`bdf!v7!5oF_YT8U%{#6U9u5G zW}hiB1qUH*{Y|YQr>G`1x#3!1MJ~>IT$WV-+T^#K-j z8?&j)qIfTKv?-3Aed5a^e8TXa_TZW18C?kZlxnNE-1G5?7(UF<)(4Yx8_Bn4)ut{n z{LYb`Z{e7uVtO0$vQE;{(B$;gN$_}hbg2kfuD)KTDpcXAifm(u44( zvQn~=unXN0>azN7r7k%TjXLJW%2bnGQkBRt;5^W>H zP7ikfmznh+$oVc4E=hjqFHsPjf`f+h!vjOb8Kn61s2ukvukr}_zsW6tv^?*?xs{b zVOTVN;(t*qG;sh~le43xAkIfN>x!~9J}N-Kh1`{SzAV>InWQ9p)|spZZ-gS6P~{OW z9FKbKS`3SiS#sDk6*6#>#Lc3GXFD0#15&OYac74$NX&xduqXYq_eE`jk^s1@Pvw{) zeQiZ@UWnpx<1}V2_QE7@ndz1J@+BrIW^1Q}5@UR-W%y8XCzs0BVPJ%E(?0`XKD%)U zav)-rZvj9jTj`<|U}f(wU=@DtrkhSrxB?9+0r!OyMiF7y?PBPX3MX87^+Ym@CllyL66SRunEbZYRVWaXn8G_H{Urf$0Pat(a~|| z(~97WmZsvL70whftfz|EP;P)!UNNige0_Ry7K`v##XU}213x6eO4VTtIq*4t6bj$c z-PYVz*B)mz*%c#>b|jkB61D7ecV7GvgF@{EyG*R#UQ{z>jTDg5@T#127AL-ygQMb2 zwcZCnHW$bXHI`795c22OmmyGskb6r_Dg|6A^~_LF?|+f$|9`z4jF>P!Q0QanY4jbE zJUq4BAUEh-sPrgbWK5Y0z$0?2%K)Tf912y{!|@u>2qhE8jnRlbyHw9;$kXN<6m0d+RlG5jfiuJD>7 zO1xF7C1P=p-$;+Vy9?4N;+ks*I$|0}X=o z2R+kK$r8C_(sK^!W#1ZgPB)Ofl_QodJiB@ACTDHVIg?85q^(1NtWzfjRNjH2Fk4Ri zU{((aig}S62+5Z1fP#=iH1gutw##OWb$HKED>1)~W|zy{&x? zoL1!CN?1x)b-%s;jPJ>-lU}-`m}trT1Hm~p5L6G2CZZ%&Fg_)RY0vPfQHy=x0)yJi zQl&d>lRc;AR-HZl*QpI?&6|b=TBah)ysz`KdaFd5Vm(R{NSu}-Y)D)E3^~h_YQFr* zDwW`c$&lT<7EI3tGNJEY`Zfk)*cehcyt95t@YW+PI<5HMM;h3^UEs?5@MoGgOHf-X=5;sDiWNN*NFY7x6J-$Rqy-* zR?Q?AtB=f^RSay;DU6;Zv#m%{i0@1l?|Odzq#Q0HjGJlvA(Q({qY9h_fB`@P&MUQ_ z6E6Hf1Dqf$v4zmYzIqDb+7TB$@~IP*`nQI*$QDGtx~(cCJm3_hVapjV$we2dIl*Ym zanWJVPfWi(-)0y6`RYN)jm(FyaRT&~-26=z@*~1gJ|Auea;v(%;K^bt&UAmuU1l$r z82R4$7sB|*%7-@BvbSJ&%GI8GFS!2>eR!~IIGt?=;GxmWeiEUP`397Z5KJVB&5IfX zpv5{Gsw~ERz7@y7fOlD=c%8kESAB`NEb}Z;!6QeOdVfHV6a$>t^HP4->+$m(ek9WzzYcG<1o7AMy4>o|_2}psU!Ke!>V_Gz$3$;kAytOVLPMF8K^I%-ZI}%tog)jg)S8r}1Xu$<*$p6!HAbRD+!X?A(YM zm05YOoL9Fqu}ddg;J&UNc)@E$;C9;^F4||?LLzqsDhnRm%qwsGv+=Fn!s|qfxUTBI z&kg@kV?MoXJaj^$3zh1^g=4P#`ikwbe(npzHv_}t zH(KKB-n$Fa7t@>rZ_Q>U=n_Nx&}k5MePYZs9~}r$%FZzSM3R`z3g!Wb@nd3vk;hkr z7hrvXxrsnjOKrdfa#eOn+nSF|cW1x|vaO=2JuxmL=&r??5Ir@pqgrwt+jh1-iE+mK z&@c1&kRU>(+d=zfZ~;rn&Et?i@kdNi=ZH8yo#}lgwb1e_9Y)P;evga>i4SBiB|kqZ zw>WaUzW&sOsNZ3f!I`lW1FC4O(Z;6f{O;%3#GA`@mP zNmxyrCo*O|(cRq6qb)8{DOdFFZ!62mAgx+*4jTlB4L%~WY%Qhg1A``V;06pdjZRW(iIO~e0O(`@;VO2e^oB!NKByA;$brlLTfwTq`nQILOk8% zmfZblvtMrI`H5VEB@0)uuxYO#>a|N}(T6Ixwm*MwB!2^bL8`G{L^J;ToiL%7!|<2> z!$a3JrPnoIPHSl54J! z2v0kCCbrm`u0n3n!}EGY&B?#BlMw%kGL)>Ix+hi`!o9ydcZ@N7k@d`#R9$#}A(uwh zi$MpAxYl-w?@C-^AFp8nw{z|H+B*Wql z1bUKFHx|QIi^8*EJNX<+(XYuMPW%DSHJ6pT{3l}z6{$sXnewSw0@5qh{8eeTBBP-~ z>AQKsPvVimMzlNcl;g{f!gGtzrs_)d$lfeh2&p)@DG`EgwK4;_!PZM zY9n0?g|?WZ=%NR=TTG*>A3?0Y)pz`Hu=2MD5AA@+?v!2YJcu-t18oe8?zTX2VZXF1 z>sTJCvx+L1RFTGIH+2Q9{`tg~SuWZ^MTwaj0F%au615;{GAV}#%jP42rDw+x3t%q# z6q*9>{?^yx+m<$^glDyIRV!kaFG)FOfGNyBH7io6n9+{3I=>40^oM zcOwth&+c}yWS&q1^tAPVX#xdd4>f*pjQ!6>NJ>O5QeB9 z$N~2v3k=nL-`k6VqEHZ(u@nvBBcQw~^n<=dVX?$nzw2jUo(vf;C;dz<7>PK5jR?xp2LI=yH0C&oOobNt2$cE@BgOJz@mN?GEu( z)$Zr;Zb1p)lw=}KN~ImXQ9A=G1BADlUi3H&l!0tQ4ozU9Z~$b&k6D9g)k#ECE5a*T z>z|n8EhMX#fIC(}XLvcB16&%f77zb6g)dhVtmR2(;Tr!vI%Kk2*z`%eTBZTkn+3Mn zd+!rD>auDzjBVSzJG1ujg8}8QVp``fov!m@2X0s89}_Mw{oJPo!m0kFDd^_GeuDk% zkZTDV7UvsCgA<&389u7->UG&kFb&1X*S8W27mRpZ2D}4%W+wIv?%cjtA?y6iLD;$6 znmdd-CL@vO`x=xE0tOQRr-hr$xOGb zdIDE>Znp%xep+$yT5JTao-7PB>5AyI2WU{4#l#K4nx)&rv3b&A>V5a5F_#?pnX4Q2 zKdhR|Il{OUZS!-Fo{r7Q$GsWNpRp*&YpwOqpVJjzEC2_PmWVyvFY!RV{~N|XLH}Qo z_Me^HfAn(Rh-UyA{$Nd0VryJLc)X{J3%)x$R7{&nHD?IKceIkjPHP3A-^EL%=cNhC zq**CRzC@`F2og2(kdl(Iyc#p&26r5GV(ML!$m<*SUL-HD7fp7BmMDJ-fZ3Z{#@HP2 z8eN8IvoX*oR3laCeSaxBy1z4ERgB(O3i3{{KlnJL^W1XKyd(L(rzNWN=luM_Ob}k= z?;)qn+m)W-Jj3ZW3q4e3jF+zLRtSyt?%z6<+d9+xm?~2NE_}$#BE7Xd zI~Z-_jrQ8(6HMijjNvc+p8^^jT8(5TgsWsKiW{j+!DW78WAQ3Crq4g~DzrRTNYOH# z)Ht5YTfT2A+0)(C&LwZ^AcMM@tBLHMh3C9=9(&EO;zNgOo*!6z8J${!_ztn~_~vT4`s%f1a%Ro-m)z?^ihpn9{&lc= zqqGTPeIC6fVk_L&d$mdtF0n%l>0*YIFEWX?89X43stSxipq1NQj?P$&BXkG{eniax zWN{({^Er-Fi`-%%RmxD{$Tv);Qq4oW=3V8gS9Z_X7Y;%`vvK0r!X`$)yz?#T%V2!u zlyK-9&DKJ({MUSOgxH9CN-AI-ps8R%$a1VMVyu+V@= zZiQvcDui?wlRIQlmPWhl8$V)MyC*PtpUI61r*Lu;9DO2v?=xxIa9aZZ0_LYi#mHZ+ zqj%*^76bbh>O}Ia zSTZq2v|kE1E(BC2Q&9NT77M7@x>%72vBnoL}?G<>6M# zey%yqb^GLY#92^hY(CAvptWnc3ALH;#THO~FHs&b{UDq#PminF_!6|3M~QdM8H*fx zz%DJuP@b6UKElv%bQ;;!dN(0Ix{iWVA_pPhE~yj7M-Rbe+ddX7W6>#)8um12x{1tK zTWx+h>w8|l!!oI`QOEXtZ0OJWFX!ohsdBB}+s6bZNvr#TeyEdXxkcVi1zzKq=16XKF1?j{|h@I7#krHx^=|R zOz-1}56)C*gI~^k!m~OVsrXVy0rFT|ja5Kq6VLI1RuO(woroOo={yn^>E5Nrta2rI zXkcp^-AA5w$(7Dzpyt8>G~u|B`~`AcY$hbn;Oi~PaOfbTv?1VdU~k|p6;Y{&G)v!j z38$V0hz)kdq9Z-k(N3C<5@r_w5C^5mE=!KXG{R#>I;>upsUA(<&8LMk7n-0b|%~P0fUvgEVyLvS(G3LE5;7o1rx|o zF$bP28CSeZ^ZF2rmt)2+gG+S6@fFZ5ShJ*X*z(1*pt;g*z~UpRS#dGvueVFtKV zvm_*-kV#j8vkma<&zgv^{BF{vjzQ-fDZQF+rjU0evS80?C(-v;@D0xt9m|q~&R>3# zCym!{DLQ-QE?)*-Uv?2koBof>xqp@qWpV(ry&_$#sDv{z793{k5j{4=R%f-44)06{;O(MV zUz@#TY_>hEGdX4|wHWKNSSpNRlXZ*t)XaODNjH0s`^n9ZJ=(P^-wsqiZ0eIdw*rtd z+OzQI(6hI!Sb0*3I8u=8F@if!bYbaltg;K!%P&y5*Z^XE;aj3iL{S>ISM&S23FaTi z9P@T}MuhX&zX{`OZqliph#|6R=wX`Wj-8dE&$KKjeKK#UD3Fg-J(WTfA4u`R`*xkj zE=vwjp`+B-)e{jemX8lbZ(hG;c=gS!sf7GZ z3y8sd%-5czR}Ag=t>yP#zY<*hSxLWNok+(H|N9KF+XOHgbCkzzp(mOhO%(md0q`3} z&(*^U%{oyIdqx6c3K+&_dIsCe(U@Ur6({rTtOA+G9KAyoRkDtOX6&Iq;+;n+C`YE5 zdvqL%Z-3Dw{UeUq^KO^<^xFE&T&GaCyw+hk-yEC_{6NH4H^MHW_41Eeqpqy)MOdo8tNgF4p#fl zN7NrXmmncpDVS&5z$Kw-tZ_4+QRGlmJoV|g*gbwICx%?zsphTi3K;r_bmp-_$$VaE z)MKpX??3k0nUAydnMstF|5>#D>s-Zf(*l5%7(J{eLXI~nUdh}gzQc5ZQxEY%ZpyL> zKG-M_3P1x$@64FetPg%*JE%F<$RICwnPiiM)6Z9X;(pgz#XE}S@jT`+-nk6eKPx~# zy!`lW(y(x`?Q5lSl|7CvjNk*aRO{ZXAtQG2caKaz#gGQ8U9@pCP^9!Zxf}TjMhIG( zM=Fxn(X#M_Ul89&AYoR{4wH-RcJ`=GTWg7aIQa7TYTaUF$leb|Bpsy$YGGle9f=}= zyY&}WT2t_@6}Iy;=|$CNfddt~BZE)*c5Ayt>lLRmEuGsTP1)gY;Eh4L3mS*7R*&xZlMs`{kZoNh!{om^N zC!*WR*(s@}arcSlniVMCs?^}p9|_35dD&S`smc$IpX90wkg}i^Tu{#`AhyAm)mGp8 z?(;13K@GQE6=(bV$6=G1w|PsW&@%q<2~Zq)z7i~5yfv7(I4OdSw7Rw9-5uet;`KbUvLZfdz@_h zbxIPqWjZvBbi{#{2-~-iPgAW8jWY8&AomitcOqIuGaJXh9$IqIz@D$(s(nUx&#v(gUU1yPi>c2!YWJ5kV*yZH`8~0E6ou} z4AKws1!(9FzR9sOEDhlt>yl}%bZxOwXmzWAX`0UpM6t$c~6|U!BzPtERy<#Bz#qrv=v(DNt96&@2BT1CimGq%4<;17s zEJi8vY+QR6b<|LuupVu+g8SnoyH6!n%y&n81%AhE3bpn;8ylE*6yAH`GvaBAeacFD z;5_)lI3gmhLZqOqU42p`WWF{wEW1om*X}%?M>xL_rvc`oq$Sc;=uhQG@$fnkoD0aS zMA1_26(uTj{1>rG=68cnuNc{?&se?w=o0HG%fnyNmcJ{pbo3eUB1R7G zz{$TdWGISIEj}3qag&BASd1R2GJ#P;hUGR-7ItbmS|fUeECg$ox~^VaKE!XT;(VIo zZ+^P6yoA9j1Pys&$blTxrjAC`QM|Sp4m{sK*+WU%C1!%oTtLr2ayyLTr=Rq;uZt<`r~k%})mJw1nRtF_psm=TdPa~t(GT(Lx!pZ%i1$U%T{dB%D| zz}B4c`F|oN-L66_D!A4Y9IH<>~_uvUDp?>3+_^D_7os{7n;U zQp<115i$6}fsCH;tG8k@vBN@|v2A?GugfYwQltdr9JO?{sCizx*Vk49Q-tqFf3Mkb znP$GMT`!JZw^e$|o*p#)!0t!qyyNrq?uWCTDCW}VKQ>+rx8a?j?cHeIHap_9hL2}l+f;f7|X5qarom)W~pyTX$q=coYzSSG%U{A!Qq(C zzGK)(DuQUkgsLeVMb}GCF2$!wCbj=NdlunP%i1mDrSC{NWZ%0LlGu!9oQbP86@IFs zp|Mf6Abhrd^I1i!U=1$dHbYghqu*QYTy3UuMVq8gdeGlS@@0p>AshYfFp%E(pAO@< z?;Aj_=W`tvVb5_gye;Q*pTkd}o$K#6e-=HxoRyWofM@z%U3gV<;2dl6e+q)iyfA5@ z{$>32Tj~^rYE&H4i%6;z>b5gCkGSq`m`V)>oL$8#@a*>;le z^XypESZe%k!5CSoC)sjQCk)TalB68J!wRald_sq>{a&d60jm#Jms_*Vi=r*vbMmwN z7!0UCf1=#+=AWHA5eZiaetdMtspib^-qT<40DjAbe{bjhft=?f0O;IN*Nhz@JCuko zfO$deO(Xd94faKcRQPHMkb{B%MBAT^BGu(v z_m3mT#1X=^%(>#DjGB!#b|fOtUZ{$E`GY+=k@eRV(eM9N!u)4iY4vul%g5{Q6YX!E zVvgEH$|itrgUN6yq8TU_Ba!b1P-kz`N47jGjT~S=Z4L1QQ(B(x0hMIK4b4m8+CrT{ zKgB6oBRpWBi=0sbv)RzGs4eBb$Jc(}4(vdfO-B6B-x{^pg7Vk8@ z^g9BRX;0V!{JdA<<=1AEa8qBp2eG1`4z7;3+b*pecCRyeXWsmCT{)n^gm~m~6i5CU z=s-bPv2)2wE6!#MqLMaa0Ab=*tVa2fC`%jNokhDzje4Ze4-yx{KkB&>i|X;iv*Y*s zmvgw?n{d9sG%dEBiFJOZp$jdion`3=;*Pr$ z&aP%en^3-GtZV9Pg~%V^ct-9D&ETe|CLazj1MIcvD6qEziHe|U0HymEN{J}m*CQrV zm6nRvhkw_uy}#W4fUxg+EVsyRjr*Ed+e_yWx0r4sgr=(e9jR4u zNJVfY`KPv+fZ2rcBEjb*Bt)bcFeZCOgcSk_?%PG-Upad%*Ry8O9jUP`=wfrzFwAQ@ zZ;}9?8(nQdvON(F&c5_)4l8XzoNjgQb3*j9R4VPsiq|g5h>pnN5e?c33OW%>*YQDh z@gu?_FG8X44FBdQOZ35%1xp) zIO1!v*|M#uon^@q&!^|^ElgikV2i9tB&7zSnkFq)`4NgKS-q%{2+cq_s(T|&%{$48 z$I1GdC72Eo*tQ^_v<)4(%i+5&VP{8!io>%Ue6qAO^6O}Yq3UST^Vb#R1iQf!iylp0 z5(=uQ0so$SUMmZ@J0(~%f(P0d!6cssgR-Wr!FLK$pEBfMXTL&NWBkjisKu{?O(q{- zUts$Ne**mYlzgYMNEseErQ_qH$;`))ilsmYtwaj71P}35JWBE%E!ebfDgt^bL<|&T zo~@)N4y>yB=0UDdFf~hVhKxvP9An=cUE5bK|Mg5rJ5X--q4P8_VECE8doGn196UUK zK~ka+&XscF`NEMRaxK3jb@&e<)$)3T7q^>O=I@&ML?D5seiimm zNFKlpYkIoCj|9b#42)}s6Ab|}Ng=T%&q6w()iwjKJ^a`!zDjbC24Hi5X^4@mSnj7( zsL8B=0V`#~r{L)Ulrs^;XgMZK=ef%W#EId5oJY1AZz`9bb`bVm$p}6CQ0EDakdS$Z={y)bmxMRL~_%# zES`}LSy6KdMgr{<6HG}mYEI+cFf>t#0~0X(1^+h)*KQgkc=TA8(J`>1w!gSl{hkTE5tyIO zKT_H>&``{ps^#HCzl;pY&zCbV&}UKV&JmAW)@H=z1h22>;m&7ZQWzdb+xUhl!3yX) z#SbZ^cC{&xf(!DJ?g1eXps31IZB0@^=Z2W7UhvjONd*QdlT9xsMEjnLK~`hPx4v|E zUZ*Wta*y`=?xFKLHdsTtT{+866@0L=`(1ieri?`CUo}?NrC0`LW-<*#F6!?#zv^u` zw^B%$avADO6!E6lpKe&^QmEibs>Jnq)M;mY{r@a-{{gw_8wAMN=q?h}HUor-mEPl^ zleUZ-P1W~fN{;VfvZj9hAIK#W0mG9E?-PvjOpgB<9T`4R0$xB@R4pfYguEv~QiH68 z%`xUBwe0&t5!Keh(ZH_CV+BUo>Mn8V8l3J`9z#& z=aJA`G&;y6TOYzSm0XmgBQjmbYf#;{0{_AP{5Y>mt!#z+c$7skF0bTzcN|NwrUrBy zmZ`x`+{o3kPg$@k6dY2xXnY02dRaq&OJ>hf2^cZL>a~*zs>tcR!T;NanAqMxHmuhr zggKjL-am^(Q$V{u#D&B8u;z}n3!HtqA=p?AS^224L8)Ql(-eE9=XO4PqoeU|P90n1 zsph<|O8FpbinaP$`6o~yo6>cog%UsH=Jki9I3o^)EFc!AQKJ&>RqHW=A*eoxKqREJ zcKVaRbS<_adLlI28B1Wpx(9Uq(rQv)jNdJtK1S3$q!=r$fwT`c4XK>@G4*=g1 zRS(sq?$)nb^p$+AEp2FTc4UGRNJ2! zfy_Q75CT&5d7a45BKaa~h6%}G;3V&uKKfqM5lCg$8opuHlo+3b&`{tZangMv;?Mls|UGMbK*%8*$P{`wNwicY%*HNOR z|J}uqfS~{T{8QyF_6S>jYeM9-kyu-bhvKfsaV;GuH`=G~C%Ga2!E9H3E#d8LYW3Kp z-fdLe$Qwz5k&uX#27RU}fXYVO zAuxOZT+Q0(&=Y44^|~}*OF>Bb-@K0I&JG6vjCo*I2&Z{gbuwP|;z%9{u^PnCWK?uR zZ6|@$@d%&D&hm*WFz;JZ5ct6;AkszH)Nxo%H>nk9Dk~rtZYG&elK+brm8!>NuoMec zG2<04k)6f%+>s(|D`O*Lr{W}XTj=*!^qx41rFdc`9)HtrlLk+wA=pw@IN#Duskm$W zeOh?>{`$gzGY|WfnsOrE-N9Cj(#be{cl5IZUp-!1Nd%|{otb_V2@vM%WQLLgl<%_F z{|vF#S9Cb?oZd8+oML-cg`@*95!;O&ky7WzOj_WeZJRh;t{K`etMM?P>4#(4WFS7u zZFAh(NW27_78fmU<}a%)`0&Hc{@d@^v8k*oYY$3KnX;30^#7byQYzH(-n^vb79@aNce~GuMml{ejn}HBHlNztt?_f7)>ag8z7pNyB&W z=ky`nvc6BBbXR`8dBUq?S@!n`9ebim)*h9@AI~K3_54X^*K3?#a~ro)vIY~}1eO*! ze%hV+_>u@)KEMYD5QDYoLWR(Z08*uLJJx9swRJ3S5jjdtzZWuln{4rB8h?w#$Oc`F z;%md16_zC!KI4ZSWIO04MR!U`<42P3vsBJpIoXn(3e9t|qt=*~OZ)!Y7Gdrlz(j-=)?*r+zQc?E%YV_y&?axq;l*CZS4p10P^$l~hL9S^Y~soq z9d8&!@rb)vT>DSQ^ymBSFTz_UdSc%+hzE+&&)8{Hg~!6nnu&H|`4Ko=G(WiXy=3l>Y!2 zVKL5F{o_6#a_R$eA6bb1@TOTlbMsG9k~k$fgJg#ZyjOsyB;^6F|6{uf_~-ej%GFO0qz}$|X7onhLCKSPd>)@_ zX$OV$3|OvA6|3OtIr1<7VB{{FyC;ZkvNTeEzkvAxLj3`lNNBhKEKI|y=B}^HKZBEn z;RvaZZY?R{5}y2r>D!jl57F|ZFj4HZh|}qre=Ad+M#H|nNyREcIb+KC%+7$Q$vn5d z) z-NYfjaDDTAoWb=~q;V2O)F7j{30=3}F7xO)|BQzQ(Gp+CUFd!J0PD~sMa3Bs)?4SV z7>NjxuLzO@VGO{KCp65f%hDrSG}cF9@%_Cs-YKsJ4giQ+Uo*-z{4}2f0@kLOxliP% z&~IbUNfQDI?}Ema*A`Zd+rKETewyzQP<{L@$5K+_OHSd+SsZ7zt#5DfI>F91heHEP z+#^e4f=4U;FOA%PLT*lkkpCO-PcLU7ne3q_?U6h|Yc7DHRQaxls)BD<%Ucm%+;VV2 zz^GwNK3lBncyC84Dqz4;G6|bP>9Y}*GOtSItNj+{-<tx4Zze*!wra7`n zLwCOnO(dm4H24p!N57_Mr0dOci&I5+yey_sIU2dUJ<}6>8PoKs+gs`txlFrWwUhp5 z3nrF#sp5;jdkd_m(t0%Z_wG!IzWP#h{mWQ5{0K1|KL7wIgroRIqf_RoRpv*vNX6Zp z2HAcG)V`@#gcMTtkw(t8>j`OjS5h+aKN?V9V%_oh`oQEo@XYT$A>pYA+lRZOZ%w+R zt1zfsv1RH>o^G%Br$v*Ly6Y=m3|a&mV4rI{!zcr(kKUatB>F)D{j0zF@X7c7xdLo~j zUuUd8+_!}BOj{4w;NFFDYHITNQ{6Bd#Y<&U0`^(Ap`Qkqet_uSSmy2 zQKfOtRi?hpq(@$N>2LM8zPh>jy#0}Me%>d6>HJzp_UozmT`=TGLY!La^W^_qIS>%^ zf1iJ<9FPt`b{?c__Qc3QBd$)*)J5!d`X?a_fk2Xg;jbggZT&-dd)t{PwL!5u%Q%R^ zdw|>aIJ>wJ6`m&r0YX%vDkl0{3`=e_w=CoPv6UnyJtgw=-IF#Dvsg0&{!hjmvGkE) z@hr`>dF^lL-I9>XKfrn4DX&%UoTpVH5@!a|0F*`6fb@tcVLjQ}gpaoM_QR}{h$u1>qWQDj z&eVoggSz{cVWj~}!x>}vVt-19pK?V*u>$@VN~}{Xqh%x9C$ztUoa=dQePT)w>upWf-mdfxVY{4)3hMIGR^E}|%G+MQgVo8C<611C zZAT3QEdpfX8V{+z=EBdY?~6(NeuzYaDb&*WW~@UQ!Po7&D#@J@Z`ebac1)hV&bn&p z*=JnZyXvN9bY{&f!B>LczM&9~*}0RC1WD2?V06}_i>q@w;=Je<;k2Ej{)OB;~(KGHqb)+g9S&=2^cBXTV(NV zxdp3J9NUQN8odIr)P$no4d>9u$Lid>=pHU@B4LulXT_d1cWhEJ#+u-><9sqLMS7jG zl?letVbaZSixeEEMJ2L5M<3C@64@y9h`t!++06LqnI7g6mH&U}dhb9s|95>nB6g6( zirFBDSg}WGBVxoJp{TuA)h@ck-nBQ4z4uma?M=-VT_}obt2*A*<(q!a?|aVYoZtDr z{(k;@uIG9^_kCa2b?;Ydx=fCB&6=jw+WEiRnDB~i+a8I03mb^8&yM}5)-vC3be5YP z{Bs`0Nn4)Ksz*2WzY9q^4Qnn?6q;BAVkfKoNftw-r~9!3^plkNoQBkhYIXfuLUmgr z000rXXbNeQf2*C&zInP|h`m~ccMHneXxyEsX)rMWq+GVV?9Rb2(F9#C) z8wDQ=bsBS@y)n{#&%-~#+B`UZBSl#N?cS^2>~d4>%rW^yG{si^UEmGJw9gYqFQ6lz zQ)JKd;#QKbONI;|C3J&%hc-4eK16}Nh1QV_Oh&N)#F#uG5kG4i`wl3@_=;&YD*~Mf z=>jgD#5fs79jjY0`KZp%y>fL?CeB!Hdszw|iL9t=ol4v(fhTTcwRlEXcYO<-Ss-u# z?x`O9 zHTNgUX_{+GL%w&w7m4$_O|J>_`n}~lyKg6%=yQcp;0(Ia=t@M?p~bMQg~9{QigGh^ z`LxZuxn^G5+`U5fQ}=k|cXqnXXmKNE)@pqLM?L6USh2G8U2=vOtL7AxC}+1YeG&JdSImLlg;7jp)e2 zXxM`)h*Wf>ku=d=IO5U~==pk*S|i6^z-H+;y`d$A@PxwGXUGdIZ909>!X(!m8Z+1K zDi>R0@n#iq8eQbllh=GtWuf8g4UU&Jz4dGnmw9t>%~`;5qp}osoVS(3K?6po6N;S< zwKFc7Af()il?{^X@ok0|3iKwOUMJX;MR7@n7tjp7reBBm63%IL*u5Ph>lC9b~d41)myJz#)aL36J!`<-|9y@ z@f^}tT}*5=E)VErzwXbWo9kZ+K3*Bs)^+>BNy&arWJ$E28 zc5Sd(8|wo`QN`AY2W(9YGA@lr(I|Xda%LZt6SqpJ2jD@E&G%o96SR-?_FP0_t9V?7 zn(7_#OJ(~77E)?@Y$DLSou-R6Yc0OlpL{{~LyE|YoPJKEo= zney{O;6f?1&-`-zdL^w231;AsC2p#Ebc<(=Tah6maw^p0^7$!aT9Z)hlM=s%mMK8u z$WW;wDNs2^k`v?wlQ@xL$Pkh*FW5s4RiM?Wbi%Gs6`D85<93u9By+Zxvh^SCb9`n` z6`m!paz4C~nuA}6W_!Pa0xr)p7>^w_Ru-HW_T3hLS-O<7fDtjgc7`F7{B^H(Gn?Q_1MLx8R+9?X!aZCYkJazT11ob{e zeVe@+?kvd@nX3ZrFI#+U(!}x%Wy4gkYpOH3~ICSQ1ytbTDNYn>s*ZsM7O3e<@1nU@l|EdbHqZ0k~=}F1%YW-n8o@|im zl=x`J41(>)l4MW9py0c|A3i?+L+odlh6pYr06CK&*$inX-UMbAK6|JsHcHftesM_r zYXzqylEGEJ=NG+VoCbm$EGt4~of{Vj(s=S_^@aT$F5$EdNoJfF_;oMkIZrcBj<5Tz z2>F6!wk2exGU2e!Rb64u-4)IEJMj+(i#KQNth@g1RCac{sqClsqoWFq3!H9Jasl2< z{yKN8ahFUnninHari}tut`F9($_r?TeW+Ek$x;3MwRHiB-HOVZ=5zicq(d5a^2int zmxFr1)e$4J4b!8klK(ij3rF~DX~m~3tAq`l>w>b*C3sE^t0U)lRxvMg()zwnY4Zf? zrw$y{{AsCM4HEkCndipht$;@t&Qz?iBK*(0@~+N3oVE3k({7xkI&Ml1zH_}aMbubg zefLfN?@Erd%CN#oQBUig*F%ac|KGY1>|c^QXrmzRsR3~mOhH`2(L?w6WVT!>3-H5C z9J&Hc6)y&%q_zT$Mqdu&m?&qvQ|lIdH+z)Z`H=YG#7&m zNU^f;j5mSBBM!tndkhnSgSjuRtzi?XCS5B5+M0$zf(=o3HSOT}lM^ZL>}5FWoS|Fo zwpM|H3V7p0Jj26sA4q0D5mCY`x)Y1+ISsAVtrw(T3cb%>IPv@fbIznyOYMYN*RAGT z@5KoSqbSVZkAZ5Wp>!{~!WIaCY?W$Nl;FC)kvp@T&+hW3yn1iqC2eq`!oCUt>80{q zAhG3Q%Wq*>w{;>B5-^ikd7#Z)rkId7hqI)Z9QvLwwD(uE=3|UYkTg94_59|#?oWx= zTPE)v%X)9gls`cx{CaXOI0|3BRCEHMr(230&Z_6o9)~WgNCe;&Sq#E{g~pi^y+U|s z%$pd6sf)#2UJ8N`aWDCrk@VYwPGZ+DT$T|&u$bL`dI_AJd})PE*x>9-Bk@A3RY7JG z?nRcnPh28w@sWj8F6%RRX{l1$^70rdFj#$PIc|l{?AZMQ%R8b}BUix0iNKJpwM)?J zp5=Ylgex~6gkP=LyU!&hj*Lj)*3KN9SP0Nx@+vuc%(YY{!G6)u3}dm_Z@8srIAg6~ zt-;RCS4MS{k4`i1at3f{g1^9n%KcvPs6eF~^JgxXR_|~%x+|RT#b@sGF0xeZWJ(@n z*{Vi2Jb8Y4h_L-k$d)7u3u4gJ@eK3FG{a3bKc~qJut-D%?!c-_AybXJR!}rznMv=f z=LfUiGgbWmWV^rBL-QhlE`&s|l#mp_#S_p4&ilz`8X}h9w)GjsD)Hfj8g6<3@NQ8w zH&vOkkYF%Qh9C7Pj#@C8?Be4P-3Dw#&K~bXNnYT_uPcVdF?dJ?eYx|zecJxu+CknU zC>7igt;{ViF02~zNHGh_MWB{Wz_A7|2WalCiAG{ z@MZn!yTQ(5tLDIOe`r=!6NAX(#f>yI@knNp)O2o+#Y8lgvXYhRY2ic-ogO1H*!adZ z{k0l?((LM(L#Y4l@Ua5G$0Q9LtI6EN{W7Uk1?d>mZT%@*N_`fB*}9<(uxVhsWIpMzVg*?de^4EG${^=4&l6@DTH;!FLV^%clruwyi@oOg%Yxx@0t5Z0%y{ANqotfR{LODRGoekA7WZ~p@u zAON&1PIB)*O%4 z2toGxuXg03pBbNX5R-2~LSh-}?$n5QajFZ$$CkE7`Map+dOBpkeX&bpbE%j?STanE zl*YNON{$tM=E%@Db*lfg(X}yK_tA*T_Fd1|!v3YZY9>Yx4pZr|fT+5*I`Wd}*3{Cf ztAHHeo~@M))Kbl8jm8Z;T-_@gLfHkhI{90%fk;$!`0PBHZ1Z#8^*>FV0AX# zY*T#c-`ok^KYMpL|G2dmt2Tc8^Q}8VE>74*!BX)Fi{1pEWHO1l0WHV2?k$TB5Y*BK zd>n0D(gMU(-i*(d4J%v9gO+Q-n9SDL?|NLxiOwtR0)nT@-*c|Zi{wmKPJyxdgTWV4 zyJ$d~XULM949eKDhfEsPam*T28vXD%i)`;yf}&>qX`VK^p{sVM>A%`bXoDYmI?!jG{x&oR%>?Zd)IbtgcVW zFDd|(gAi2XQ3|81)G^69R#_!Tp7Mzi4n{Yn{G{D1;UK}eN z0cvWS#Esr5n6>7i`L1L`8=BdVB&6<08MLS&KZ9}qiDKT$$7YL~4V-~XuVuEZ5@H@yWgU7ftIfEUTsnJ}joB8f&RKyS|hcms9#Dg-y! zh(_J)XhdS`NHQ+#_az(P43cBZy2lN3O=oNLjmbbTlkwNt?Kc>7Si4~OE!kUYlAHVV zv7WJ1aIfH}?>v1kd^>z}hHT5&Z;`EUrU|UHBedFo%E2!+XH#l!=yFT$E=+m~#$o7JA*k4ek4#ZQd;EEf`A=G}gWpuLZ#5e{!!`vT+r@WH^_h zoR%PaWq!!dsC+N+DE16%mpeQV_5He|mUD&K_UeM5|=M-eWZ7eZ-mjgIibMSWnHKU+9_>9GJho zmNM3{D&KJH<107HeR6YS7*;WOnO~_=VLU~rQeYw3Auo$ zS!l;!mQIL<%CFw=8m)`AQ%N^?BYxUW%OnFqnldtY{NY;Dq;rmgp0TN2!Zd2kBP)7@>dk5*U(CkL3!NeGZ(*H=F z(<~-u>+qIoYnRk|#yP4mADZQ*@Emo){Yq@h;VY2Bw2x?_{et1otFSSC? zDp+YNFLeexH{c=<66A?v0IZBujDWCde0(rR6ySE%Y<(v+{wREeoZFz3x>UYCo1!wB z-}PM3M9Xj0v@pSrdHZydelLFhx=8UWObcH|&D!VmIim z7PaW#?Pk>F>R;R&OUPGzvI}-{^san!C!aPy{&|b5clKmlnuf$l$D}2q2q-e5WDtYe z0=Dr+2J0A_LJ&1p)}I^Ori<(%Mdeh#*Bb$(wMR44bqj5n^|vNx4jUD@H+-En{opW! zWTGP1-33;hnp#4(++4lP<7lAALxBO>$bWEXj8MU{!~4=bN8~lX6o+;r``X5eehqFlcdbMcJC5aQf%~3laqKf zDLV8eioeSU89rhmBF<1FYz8Qd1{%VL6Gu*%P8fAmLU8QERFZ|6jHCH3vCXtEFR`VX zj>?o*Uftf>7-?J~tA4c-wJf=e>@|P>`r|~Zj={oLjm~DvzQ>EtD-Q5J-;v{mC?%@I zI6XRBcUi&V3JgBe%B3{3hZoZ{uD4hbBFcdaboi6Wbn){-di%}8HM6|8nX@JHQztO zf!J!m$OObCFvp*XC2)HSIsz{-Y6Q_sdImWin1Xws)#f$>8OO|(G+lxt-$mVCuQi0(?$m>c$LV zQA0z(*p_H2qk>`WU(yWL%HyAIj3U-oyZufNJ9DS(M*@NscRQFJ$A6oZ%4jF*Tv zRc(zE)j)8~wJdjFFbgywZ|@3lM@tN=Cm2xzI??RjS>vjB#^U_!hHdKRLHs&VUT(yH z-XZl;Mqd+iphY#W|75jt;@GHKS6hQGYYU;o(?bNWu<4rSg(r+XQv3L z&;6KHWlEJrVnVfnR9C`9qd_0S1#e^bNvWnaqxmoud9r`_lq7%}Qsml2P5%pnhr5GT zXhvuO`Glb6W|i(HaxMoRxQ6qBfx{E(nXH$OcVR(0og|Z%2Z|O|z4%+KBrqxCoD(rngJr$!rC$!{`LLf{L-1p)c(Sd^5-h zaLd^fMHy-N;-@-Aj0bhdwOoxo{cOXG&vaA_6ZmxmePU*blAz`_lm#3dy3doRmWYhy z!NFX;2=Pv&^5I~gS52%x7M)VJyRziZB8N$xTw$+JB2~kRR|d1P-u1i`{`P*_>FTT% zOE;=241b_GN7R?)L%4C-ItjL$+5_3YUB^e%&r?Gb3M$Y${7G@I6|*{io?Uf#@av=f zkDI@4avzHSQKYdGh#9e9C4Sja@&M=pP~%i^GtHsYVE`8QMa*lclU5SKFP*1iXA^GY z>Sh?47#ihcqr}eWVXhD;C>#+=Zx_|4xKyuD-Q(2Jk6H|o+1>UfeC^>}M)vV0w9}c# zxMVSahy-8-xXbF=PTNtewroK0?P2dIdZbsMIT9oINnF6*+hQf5BeY8APr8)sPS~B- zhW=VN)ZC^1jqE6p^P4OLuyoVtuP~VyI)yOkhk6T5g5c=r*xG_D7foQrN*`L0DKX=bca61Va`WEYge(_M4}trdk%6(xCY*`>#08oR`atICPH*>vVpZ73Z5BDcUo?YEI!5Q z3m|FCAhxof3PmqSYD}pvza7`k=y_OB4MCCE%E3A@P=?u^{hnvgS+?j`VPBe8f~fQ$ z00ydrOwR8%)bULq01ia1A|bVy6Sca=ubI~nw5Y6a&cVZ*)H+^V`6hkUI%e#}mE45p zs)fGAG4E={iPhJZm>tpfHrqKAtiww(t18f0rX>7>VmlyIyZzO(cYc^{YGiXZG^r;c_a^vLO z4~rE~GA%RLxJiG1LoN53(=;NSmMWoy%N~byw-DXLiZaT`IzHHW^5*C#==tpNsvmk=-mu(k!H#*;H7y?tx7z5%p}mY8<;tBHOn zt-5{A9hPtJ6A68eVYd*So}-Ba*|B-D$~Rxb9U|* z%+8yJy3KyVZ(v08XVO{s)R?|tEE|7(oZmJ-cfNPtfA{{6R-=l#&FpE1!ob}sc@|{>3RN+QS%dNa{64JfB1Rni zHvaH6t@yBS%h=bEQDX-jakK$_vKR2}?)munABwi>TK@TI;(uMQe=pYVIsoezAHoU~ zfm0{0-qy@rbSz6&oD$obG@^$*7_O}m2P9F`PnFbEIHs{_d4#Y7;HEr!P4H6y8dcGo zze+CZ0s-S4LTLKmXG+wu&3M;g;7rPYKnWLW|H$h7o+z{q>=iPD$HbG^=%%QkmiUq# zU;vzpqXi$LBd+&=Ze8!E^S(*f-c#lzEnRZQ7^WtYYerIsZ60~t{7v~En>;;F&(a*_ zja5~@1zP6-fLJ2Ur=!B^0<#r?fQk?itRpEi$^sP_WSMK}oU5(PoXMGCSdSCic-KPC zw0;o}Dv7%kcyZt|p6( z5F@S1qr$TnsK+9OS|e&=p$5I?ie(a3nYE*(kI#$V&YvxZJ7=^k%vJu;D@aTf&zEzW zhP6@i%OR3RJo?j9LXwpah^96uj@L)OC zQYIyq0g!Tpa*xxu{hlaiqf%ku70k3X5Efg9&tcDIbE-&)mxshbQGjo=|uQNg^;kfCzEedqFdQI>~=s^?C|`Q3dsaD0IznM_HS6U@TI&B($S zk38pu6r?xxVlprZa#oJsTaRX9W{ zCmz`&wgE=o_0-Dr(W? zKdcvD`Cj1(O^P*ePPu<|@lWr(iY8#6L5cFyEI9m>^=Vut5AIO_sq;F$rc zi8JLODqvp>%mL6nb6LW30T~uotQ8>>4M8%9rD9a_Fb1A(B4YH^*P^c?5BV^j}`4!JFAtK)k?&bRP%&&zGo_EW7 zg zMsOwn_a@z6mir(>fgF-xk!>g-myv|l^cG!(ZHVjry;x1E>W1@p1p!pC9%_dy;bADr zMG$6~n?*GC#3|?xFj}!X_#e-;{9W@y2v*pm8)|dc>Te}RHNJJM zMM*<%6K!;~N3~$^^ZW2VbQHs~;#8^@6|h=SZPHM-8w@OzOP-YmslOPG!ht(>!PFYM zw34)lZccsD#Z=3j>e;Tht^L#L*Y-V`la7rO(&@E1!{_B!vZ*?`rKFhi-g7HG098EX zp%&Xj!l}l#2x(sRtCC8yMs0B}DX2j551!@i1HWkyMXs z*kke99R_rzvPJ50P?IaDD!RX#Mg2tvHi?QXr#^=Uhj9Bb0S%15aeWO*jBee?o!PKi z5!M$0`?lrr%pqsc>((%j?%E#+jAG|d(3A(mUF65jsXJWAh&%=)-?Ho<#N!f>uH{9}1=x0~W?E|JloO1I3T@6ek)Z&&>%zRh`0?!?xEFpzS;#ru5D$W?f| z(xc_f(DF2F>Q-V9U0zfhgFS5xXdZ^=gUrN+Eo%~2UkooruNP;Xou1Mp*3hw(X12@* zl>2TH1E)-%2};W}2JXGeqg(es_Rc`~i`x7+O%Diq7sM;5(<<};$7A^A$=s;I6EhCv z7cCLe_B;{sCZ3EL1`0<{;Bi`I>9pMR44||pF#mR%sOwzoAjwBV=~7Hbo}iO0G?Pz5 zY~7GWQ$8xb$X>`fXMEh$t4Xm}lK0;9o2Lb7Moh`^Q&S5uOzA-JGD(r*cHT{vO7^5# zglwnX}C|;XeIaamJ_NFMT^|rgc(z=7M+%9bLgNZu9)Ns8$cIX@TR4%iO zp0a2%J7{39o@jW6%GX1J-ph34^h+?}*a?Z)q~h-hU;y=9F_a8&)J-&R?<9(ZpUQkzal}^j%JU zz8=BwsYoip{LOgafLm$3sEtSo+_7inMOES>&HI3dLeaGG*DQGqa@{!;GjFXce?#om zl=h#{(gQ#$)FE>*R1i4CnDjtG0Wx(l zG9tpVFJ(o;_`DD0kUYFqF{V_CwpwO_&3?{P(tK&ibKXa4oZrI{xBwP4L9+O!TtOgp z3GI$>ptF^lX?{|sxT1m-6V4fBNQfWDjBY-6wa^BUO80hG1it0{7%NL;+thXo>Zq?o zga_Xd{Jt%@Ba5e<7j<~pwFI}MHGIlhp>ly?)wJEa0XO^r=CSz80@3~US-<{i6pTg> z<}Iq1B>2EBM^CyS0tnhII~Jl5sXwZFG<0AyQN3EFLlPS)RNcB{2k)cJe5~YkN<}}6_z}o_MCrbB`oV9$A&!n-PH<>=q2r?n?)GhFOZLkSe zNj=uC(h!1iG$=HFaTe#ZoBS$ryX$#>-oWv{+x7oKE=n7~>K0&Nks_{ypbWfB-H(l7 zmQse`b`^6Yk$Ud@8f!qx9NMNk3X(AZOf5>_(i04NEp&ub_>@)XJ2v-xRmpN^bhJM5 zCu*_8JzkOey`sms(+7%G)nl@&N8;!)*C`{utN6gBVc4T+N z8D?@=6~*_3YpEeTV8{a?vcuKtoCULqj}rGRunpPGYDNu8@Eh9%F)KV;N^q3xzW2`( zyTZ)+#Bmy#eveFT?ia<50b&8NAhwfW1%9Uo%98|PKF|8QMBywioIjdhV>jM#0cdhj z$jFe;Hp-iaV@xq$CBJ*quHJt9=;+j2Q9dqPg8$CfV{2Jwo4piWrX+)OwkBr+>hQ+9 zfpE(>!t?RX>IREANp(keqc_naiw`7@7gXlScRYW$=Gz}9i0kTUiDHTtZ}`k0xwD+8 ztLfR*b@=*;LrG*?k0y5ZwoFU$)H!pm%uB*)ME77NygIQHJ zvS|<*$4%!4Gi|4@3HulJI&Zw8*@}XLAs2_rovKoH{DAXgE)YG0w36NK zWq!BEt+JszMpBOipj6ZTnUejPT+1D@^6G*W3s$?IE^B0TsqFIjqv#1qZPxkn^)HS# zNKpZLNjpR+j>?1v$|<5?4=71}7VJXsp_rehm}K)yA;tzz%C1NYIoz@j>w6*b(e=7G z%bc*DPXsgXgYcgEHMOg@34C2OnPj;eem`fMp62IVtNL}Lw)XY;>q*Rypvz^)g%2({ z2u}z}Bcna9vx}tek;YHjkLiT_ZCPQ6SVy zZE@#?gk4clw4Y!x^=M38T1EL)0iC%4Xb0-K7+@vGx>^Q2;Q zp1+g=nt|_(1@M*^u}PbQ`GpEhI4fg2-BdUW-Bre>O90{9+68Xx&O&DI-KQ!v7Ik^b z7tnhTjd$#A*klIy$~2#& zqn5XOhL6qf8(Wl#G3i$p9$p)`b+=`g-ZWd-rP;eh9b#U|-WC=Ej!x1Z`Gj&&9BS+l zowGgq0EdB8z-v{u;L#5C19jtSahdcs&B@WsjPGwRvzzs~;bQfzOe|)I_t0!2wEwuU z&pn9Oex#GDFF)GhRSdmuo%r%L`nVO@6MprY*QZA|vu(Fqb%O5l-dC^Ym08eL^0pfO z@a7_y!;J@l0}1~LHJ&I+5lT4}lJkrIMKMlS8JMRS3gF}F88P0d5!jxT9);wh*~qno z!TL5p=9gKJ@+4q#5gpx`gm?3_=29jKPvU6)Hj~OyOuWX}ZC8QH(D%us$ zzBirRMs9WRJ@9%uheE%6tfAn(ClV8!DB#nvoP4}R%PL0Sh>zhs?YGkLlf?w$cShzk z<)h*APz7NubLx69+HE;iu1Z7*JBBZpJ`3BJ_Hz}S;7!iU>zB79zO2&uXS!u%)6ZPM ziC!?c=B?{aw2fQVPiLp2gRSroC|ZczXrvhev<$R;Ci;;CQs4?_iM`I_yW2Kl*%*`L zkfcPry0ZJ!w99e)F50 z>ZyQP4=)>0yR@0rt`eHJe0GmoK4L#vLp4Oo#%u=6l~1K&EOf>?COLJ71NvHB1DozT zJ*Y8Co?Ic;WxO64zO|(;C8eqpD@k1$^Jy*}a zXi(cywvicqiLmW)0e5v>- z*BDnM9WC;^|FjMh-_`x^d^_^(-6i?exah!4 z{8t*hNfky$Uud8uJBwo$(00c^=<<(lU;x^}=QWw0@uIR{Ldit z|AO2EkP>J(MlhE!R9p`AI6S>B=8$74f@hXh(?=puR87_45C8<*=~18u0M=L2d*a#D z=tW&CxHBe@3{FYcX7d=~BypHeg9l25M(CyG=C}Im?A^`JGkV}}!aV$Mp{XE)3Z@vf#^quFjBRNN>Vmw%ypF%sm2wz9S%)jW>wRUd%_9OXyj-5G#^d3f_R;g&WiH5)jMhu0pUQP&Lc{pt;%aY7p)jahnW}5utu+I_ z_1E&D=9AC08y@i2GIx%nq%UUhL8e^q9T(VH4kOLIgb@sGy)2Wi!(>)&vVgLiGrZXc zh>t~#RHU;e1sHRa{8)!Sqd-Xmn_)7@dM3*3PgI$hgtb3?F)$L_!!%>mor;pm1@>#*)`?w(lQ% z(3O`e`eGL6*I%C>$({47-M;dt#`CxG`S$Lx25{r---?F+z}tVYoM9vnrALCnQ&>(( zDEV*HS5g5RvlLzmvp!-_K}jUx<)wXy};q-G4Rd6{MT0 z%h|yY;{YwXe)@p4KJ$r#uKb)9p9eo5YJFawwrG@&w<&(0quR4&W!%0U<8D4H5^OQ2 z<@T-zmB;M*^L@R~tYc{|zJ#J4m?LmO=1&vw9<9pt*=f4I4tsmQq zDRP$bn|!{-=7mi>RmGCrKvE@#n~6~dRv=4(!YLT21BEg5 zfKUU;A)G(}CWMZ(CqaOes=v1^DDqiGoA+%TMKh=fAwr=l5{Y z!8pbpdMXQ-H@4$UrY7~*GHD-A_u-Y%0Tn#I&wcx!S+XJ6Z~sFMoI%DZ;sa%%I?J#4K3hKSWMW&~Qb%?PTS zi%?ciW$*|op@Lu#xVHByl!l$bjlC3JCZ+f6=F?;TS@+g&i?4KlFED&(I=-VOQF{k- zI0OKM2c%=kjPi^H6I^aWBY?M22C2zfoUxMZ;a(Y*OxR%t45Es*6N^=>r|t@J5-+E2 z<}7&{hpn|ZI)CLHxW?mS;vPS=)gMuYB+;*{iNm7CxvB}P1PkZr1~T}4mRz};zl=nO z|DF-P%NAGm(;0TzN0)w(`Y>wNoEay{&k>nDWUc`pZvzD?|Yx&k9GlGj3XXkTD?dSK{W#bD4tAS!R@c6C+y!0i3R;N z#5GsC3-c~%x)oz@%1r+BUauO1CEt1U_|M}SqXM|5c)z|Ej9;k+kujAGPL<}z7-C)Z zBLE_Ea5xR5$-P)%%(P&B!kC=Y<2v0^CxCH&C-q|-JGlwGOTI#*qZ=nGwMP>uWOVys zO`cW;-dG0Mt=kqRoId$(QTMlGvI!_8?b4cKAhW@TkW89a<5n_;k3dIaclg3j@71M- zy=)>belfMrzj^mO^7b4m$86bB`MmMZ%)bHe@4p;cg2U zeo1QYo#qu4!wK`VT7)n$bv2Vkt;Y z+#4tUbjr+up_e?wU>-Tamj(0~MaEgT&MBIeWo5 z@q#qzfi}o&Qyf~P8y+?IBiMdwPpqjm>wx(U7oL8uuyt}CpL7~4*p<8H|F%M`_$1E^qnnb!AUiPj&XH}~@Aanj3dvB7hu*fvD)+mO|2STsRk~&J^~_huUg6{*dT5`KOpB+MDattO;Vw!~8k~m1 z>yue|wy0tl;59%&9?EW(9LN?3SJiP%hzTGp$^#;SGIFx(q&xK?#&kp{nqMg2rV=+6Q*$JHVQSC3u5axf>tMo8yfM@|>zk`^9ZA2N9 z^iR=yNG8dEwf2O^t#UQd_q$bXKE*eD&^oT(Oeoth`OM+0(rM&qqs*y*e$8j|XAJQ@ z?!_kS`GY@id`eBu&ri4h-T&~HbkUe zUQ^1I7WD`l!m0uCPcBiK22YAR)21R_5yTMhbibXH5<>fWLN4nU2YM1xrQ zAU|%(%l*i=K?8wQGJINfGkA-8ERJ1R{5}g&GLJ-LU(?GHz2Xe~7&9ZHAk2hf% zCv+|yD&q(cOp{FHb6nlq+Cy>P6g_uQ0yEn1Qx{SKkhvx^gUo zy5d-Jyd4(m)q*)Ela`xN(<1_J)hvk<&DulCl~iFV3^{hOIwV7Oq%(ZDJ40zXc0VW( zRY5hz9K<2i)3y9gjqxZ@p{DouN<}7dL5JErH|yIX00ak$7rf*jtWUEo{C_+i$R zEc+Z}L249HT%P8_tU9Si0X@ZzCf=2eYO8xtkp9km><%~g`TsqC6kVt_$A~U*(P8`m zYFhX#Bh{JgZ^l{1VP!xpBne0rNB7!T^q8HYdxxqvATX}Nn(EaNC5|bKrJ2%j{K~Cx zDQC<7;o*)B4OL{60@!U!$G~@dog-&Tt9Vke!q{I;odp)YD)C9qkdOKFPO}bQf)C{D zZDV~)T?J&4Q&_)cHY}cTrrLr*^sC`-yWi=IncjutNsh%LL?|y8r+%qF)V7vH_3rr5 zA464K`szjjJm?>-&GzgWexp(o$a#d67 zo*eXS0h-u)exOsj>wQj9cK!MJ`~28F66oBdBbL4OZBX)tlh1$7S^u)!sSt(b+zIAv zhDw~t43Wa_lz%x6aUCN{`5;?Wr+o}DjC0CpLWRuR-o;z#OO~puGE0! zI90d!Y)5U(sxKW;fTOr+-r!xgy()nJ~tyJ#;?*#W~$@>aS16$8G{;8X~(T{Kt zu!%AEVSha-O05R~fSGoshx%%!w0ESwbDVC$;4{-8YS=PGf10~GI-U|Mku~c2UDhLk7v&LnbJ9OKRoKtigFAJf$(Zm?%oF%5-A35q>u#+ljcDq&fLYa{^J&gKL8{A@1@Ua|U?5wy6Lk?S6Lxh{AFiKV8375~5P6vx%1D>e@I^w?tC97Z!QKT=?cdaYXAh&A#S9D5Fe{wkg56f5!u|*jTBIKfn2e@S* ze5AE#VJAjWtj%ET@we+J{o#8OEX)g~lCL&4Wx9V!U@5H!hFjDMufVK*iT@xW8yyWP z`Rjfeqxs_T6_8K5df8W-GIr~o3XjZLSKq1twk_ppk)Q}}JH^lsT*V_JVYexDW?MS*-!y{QErW3R?+v@P^>cVO>h^FpXeYtW>pE+^H z4fya)r(G`V>OKC8W3y$*|F`?$FXUd6DdmHb&N7psQPsU9@g48DRZ1eszaU4f@=WV3 z+oIxeE`#d~{ZfIZDGq^M`h7AO0d$HW*i~HAA&Om*DsHHNi4j+j6<@I?f$?p4|C}8$ zC@gJZP;%n$orI^lsYPf2Y0(-?GPPEoN$v+h;+E=DixSY)S{Inp&e|37TKcT|$` z-#*R~K~Ygr!IikTptwh%ZSK^xTscb3Syoo=ZSFKPbEmdUZLc3a z=lPD$@A=+;!8zRLaNxRM@7K6q*QJduJQK|5&`>IDZpQxhAD;h>`D1$j_VDG$MyGGY zj@t#+T>APXngRf81ejpNuxMocur$zA)!RQlm2J0OL&TIw-#5KC5e(rxqi9zof@{Ji z>PecPLNK$tMVSKXAa0Q&nXWgHfoHVBy81QzvfE(CXY#sjqo!Cg<}pGPFWj`GN^+7z zBKCcl)sfxj))$EavLREXo4SgX6J;Mls5!q7np?%anW4t%sE+WRKMMQF6?C57#C-@| z!;It75y9sbCoalz-?qhfi_5%n@1e7w{ewl&QywtURV_&Xlwet){YYZm1CNyM*~o7` z8b0gmu#Q$k&6n=iu+A2-gPbznRGF$`HbVKsMUV?zFjM90Rf$%_WFFVsTJ;;6Vfx)Q z=UWo339g5W(+gi1>gS%XyQ47AG%3Xa1Xp(`sY`bqmj1Sg&#VwOd zjYJGw5dd=MmGDu*uejNwElzK#byTNoK0s~tt~6!8~DM# z+xNJz5(fWx=+-s<@R~cO4FBKjr&5q5%N<&T$CbSk^^hQoe#dj6!%QH!0{=TboW57GHdMk}eDKUuAR(*NVwjyfFkVDiBp?jX z4|tG^0ol9hxfm_WOKMCd-*B#?q~MPR?FUSvXo4MHNn^_$r!8MB2Ok72|HaML-|gjd zP}ubxTiki-V`qI{uH{YqF$LVlWO6Z%<5^nQi_Zrg(W7TR=X0c;44UbUwRntOIZUa! z-<37We#zz zvqB_TivnoOi7b?nT7X&;`4n-f)iLW2g&FK@b>uM*%aHHJAMrdZ$%aN{MTVpB$-@`$ z4uOrAF~R@I9r@pR+`kw9AV)u9RIF4J8*sGCVah1xYe32XXPAuf`*r_56-JcnxRxUX z6Jb-{uwxF#CA4!vc_z@BMkq-(;W*$-v_Q`(?mZy&Sn4e+IoDekHil-RvIlYuuFX&Q zm6+>8p32LDuD9+f*1qnVS1z?l8#DDf{*5iDAY`x4Q)bpWFv{_O<&?ISo=czks$}|I zrTs}SNBvKkb)Wcou3Eux_4a&~N7IjMx3k_}*$=wH`*w@Y_}0;|WWL51SB+pxn$jM( z1$)F3y(S)jzSK|?12uROoN&An;2ew;PnDNMCAc!N72goik#0kFq-YAtyb$8;2|2|K zh&$AOOBGga1w?-2PlBzC9|id=JdpoKK?ljiUQ(BJozmKmF4{%Gyp*9^f*k0|%rG;^BIg7Rd5}8r+eAuu z|4}Tc&~^zc!jsg#BCd~D@q~NBuR#{u08u5JM7Nd-4g~Xkn3$-H*D_sl-h{N&5;>oj zQka(fHOFLY^+!Nbjq!rieG#Rwp9xR00tN2E+pirIL^}WN`rURH->h)GX#2`IQA4f; zmzEDmO|+x;6ZIRs%*+(?0j-cYYl|K#Km?iCA%c=dK1L+5->?<5J>9uh1M!`ShB|i1 zDzvQCl|KT4uS-T&0-8P#Dm0lp0W&r^q*fodS=vmS{Jd9q>cN!#bZZ)Wi?4z8Gkmz$Bz z^$^{vOw;e10V(sgg%|_2?Y%xzu{z89*D#D*)^c=k#{-GkkvV;&6f<&EY{+0T@|DxqsZ+4%H8Cwc3Gyvnfg zY{J!?3o3mv^%VdBKe9)}ERP@B==0*LtMW+J1LaBsSaMRD{|i_JADV)8HeE)p;YQ11 z-VdiRu}WGPtpu=)DGi@u^SLGtTx#)D)lG;vg?hevoiJe()~)jChps&O;1AShWdB!X zMoztxTC1iMpHPXJvy;JAb-YaNEZMzZrjTPw`kl3;d0247p^^RhU2ErWTkMfj*C$$h zf)Dyq0X=@Mf6iKn_9QT^6@vOxjR7cc`nT#9e`5`^YHR6uKsQ zX(K~yg#)av8uUO$g1f~Sv)oXwO~!+ow0r_hMHz^~=XaSWsxEOygS5Bw46e zO;T!QrGC{qOhaJ>(%fi}xHeruudl3zq;Q@bk}dt&yP0HQ8nliflazxBtQF1p1!=#u z>7K>VqbM%;qv(2w<+@-`2A_ko1HYGHspv$*w!ZOz^EFPU8&CEhKMDV>+xX&!Z=Y^8 zOH^@*k?dFI!vuRX1d?|IbCUnHupGzb)Ahfc1Y?m}I_3#9Iu z{bFZ*7Yfc^N(C9K5poRNTMmH2M+1ah%kp&tuRmLlnJ!$ebNZ6~<7~n@+OqFw*!MR> z@1K!8F3Oy6tu&e?{p7fR?7;5KOeKy5o@@*m)mi`g4t9C)>5RYCk5{jUip2(YVqYx9 z2DIL+zQIk8#~qkfW}`5$-ZXGhLR_nHDiOg4I#I#}(C5Ecj8{&&+gAZ*J6D7r$}X28 zQR^#~S?s-V>K~Ud>TjrRjY2)lH_lha9b$c6S|rFwj)W5YPL+o@&euRslGU9(1GMGf z&S}>aJZkd0@>b%Moo%+t{Z=cdWKR0rUgtZLo^+gaHtMqt&#{KjH_iI2&d+iWj-9YajI@Y6_ZBl{gjGuZ;)*%I zz92-rzGDX6b=@AeE^~z)R+$t8YBW8FN#q5g%k)5+i2PC+fXLvqm|s%H2qn6*{>$AS zBW$KKC_|3?3AwfOqK9f*bOKRy!&TULXI7UTP<;svxU4c3bG4XxO@Q-@v+Y^^)2*0#>&68 zbS+x=602A8^`P?4^7rsR`QOEg#YH_2@aGW5sz?w32!=aNAhjTTX!CRL&=p|Pq(SH# zVpWsQY)Z22l2P;%8+-zmuOO06Twko!;v=vH)&iJO9neqriFLrFc~Ihfj-dDS+B2dz z~q*w#L0HMV}Z!}FbTC3bS7`Mmh+&Cg?< zt2~{*HwPYkjL$Nxx?q+FY zJ8%vY&<`M5fg1);Z_#@z^@(s_eXP%wz+^OUi|AHOuHl(dF5eIBIVf{1Ug@Q{dwa{v zE7QJKEbtT0shJclY$awv6KHrb8vv+<{)=KYHKE31CKBjbGD+MREmf8;y#$&}e zq*Trxg)u9OY{UZ!_-Zs@q+)^&U6d0QtORb$T&G17Ke!r~%5jVQJ}iy76VZ07NHW~l6zan7)7u}vX#|yf$IrzFKNB~e zQQxsvVK512n=z2$oIc60kMbhDvwrY`toNZKNqz+b40SU~(9DH4@ak&&dakj`>SuR_klTZWwT zUg$QruSZhr6Z(L74Brt+M zH2*U}c6Z4F`az)Rfim492{pKsO3S)4ZO`fF8U&hN?JA*sj`qPjwR@h9=rUB(R1w>$ z35{KGKZ%VCC`)Biw!VIrybz<8uop!pzNrABBHzNA3S~9i9At z3Ag@(oU1s1JyO+zk`SUNnlZ9B7$TRNJEK5U)QueTtFDckRE_40XBt9~rHLROR%WhJ z81OBam8r%#tT4@yB?oKHf&{dY@^Uip&-(jt*ove#o_eL+kFAor<5>&yBN=wgDz{&G zQpUE4l%6Xe3<7j*!;aAB&)kMwdC2#2Jm}K+T&L*QCDG3Uj|U3`9>V*1fGD#20FoH}?2R9E4-B@_9bQC+sctmiq5# zxb!8lAJrw&>~{@53tC%O5D%Z)>$+iX96h0a*Ew~Ge2aUvo<;3vVBcRyn5lRp=tq7QAhJE_=fQ7 z5vkMqQ;MHS?7iT3uHLE;YuoPvN(n1@N;YTzCVhtMd49in>%H#UP0uhJgNhko4#SN@ z5T`&<^pihuI!oK=!Lbue*V#l#GouPRajHAD1lgg!offX$<}XLMy; znt1(B?y$}=*YKxnu%)r*i6z22z%A~@`FaT_ucWoXzBQlJ39jsF8$M?ER}Fn#aiQc^ z6`d*)$;a?QpU%ZR4xGqyg>X`*_fLC0U9pnWziv2x`gXj2{D1i8|Eq@h$Iu)%XONdJ zkSTJ-I@Gk(z1|?^Os)mI4!f>npM=;Oc=tU~7yzVF4Aan2#c2=(5lCh-Fajst$qvh- zu1WZlSS(#-V#X5V59@aOBzB5F)%<$g-Z}6nZ3_mGOnU^nsv@8m%$omA*K8LrgmtIP zN_spL6S|nS`uf+<2mQ!c)8xO0ra?P`A69OZt=wnFL$5*}cElvEnQikkL)|%^UDC5@ zePoUh`!w7uxqP?q8TKkY6$>T`B}bbi&4@p!>@wL#j@4v`eHOZ$DOVF=$JGd~6)J8z zx?*#$06@^wG$-X>5k6iC@dekhN4x>?Nbh@U9%{Omv_eOn-e=D6MpQPi%9(~=K`9Un^k|-o&#>%RwKTncH zQp@a8qa>LdmrT;@ynzv-apo}~y1I@bEQ+W1mY!j@nq`jB2fAZt|HI4Fm0N>)FQ)rD zP<+FES_yf|iDf;J^N`3v&v{_T1}CQvNeqh1vPX7XJ4PDAtUJg-gV? zCE()il4U0}d4$+kP%FZFf5>zqI2FaLi~^g@NAgH%AdSX;m0k$Edmuk%$fTv2cuCp9 z@vkafGwT5q%v~k1*DQQ;nNn|=>_G1D z6m9_2I{BQ%b@I+nU+DWdmK7CH`sdP{)4L~M+Q?kvCRNCKQRxJ62#}uIUyxuH&$`UZ zR1Bf^@#|+84Gch%1x1VH;aCs)g*r$yNjc#hU0FAo{86S!F!bK@4ly72OVCPH^Y`=1 zcO)MVsfaZ3-Y=X_`FIy2ykkG!(z6G{Qow2AUYCLXA_6~BH=WT+d`C=0xmu|_^@EQg zD{dhp2M6lsWip0kH5=sD+v7k;TXFjkoY58uELK9$c<$5!&=B8*aI2o?0@i93#5qi4 z+6q}Dgu4VynZ8frJ#E`A@g33+pxmwxC-SHoBEC$y*s$3w8b)i|)(PY*>GBwl^S=jc zw{~T0hZnlaS7;QkiY1XwfxdP79eD6hm|r#VHT#r5efgGI#@EchxRqarM*?WQm`oX2 z@|od=|14DhPmp71Q*Qv6#kCobE7cCo3P@WDVom4VR?=bHwobQ`cmwQK41fW+&LCL& zD)T{rc{E4_7gI6Nv+?&HHMs!*^eKjX5CqbV!DWDK+rBE+win#u6>6{by`NXKR5{w& zvih8-+3In>!-7Kswr@VO-8@>mqmCYr{c3ykQ{CiIGl!V(4bi1fXA&Dl$Ds9HHQm$C z{1P?rr-1+<2siiuEXir1m~O})*YkJq2}>zHW6t+# zJW-Kr8>!8|`%`XiCrQH} z^2VW(v+umbWmfvfWc7CiU+rmSGkysM{`Dc zP;M|`>aEe{MFd=v`=(6~F`?+yEG}}eLFw{na&UcDOQ(Xy9>7<#7h>fNBxp&cD+E*e zu*0nFFY*ndUn9QR7$yqe1=KsGu@ymi@_%LiJtcFTQHsi%{G_(pqyoI4#S%Oa9B3JA z8&&<<>bLHn(?x$IqST+(DgE8k?*FU3e|;K&I9-!|Kz%oy-mlFzk?OBZ!QX%>)kD$1;l>2x;d_avR)Vl$Yt}`lO_d6i=Pjidoh{PN6*LscX3_qFQUZ#J{ zrMVK&;pmakj?@$cAF7vTNwmkw)5L`+g0Oe!2Nii@uAC?cbK{P&XVBIlUbF%v+A`!< z@wR+Lo|CUsC^flqDK@d+^Rgm8NwyuHlQvdq^+sDW7oOP|s~;ks%(Qsed)=etQA7}V zkQJQ5g*TqCNo%ebjme&=k1H*{P-=gQ&EdhsjmYy);x$`_72`=zPOAy4$G^|J{4Q7j zE|~{Ph6wlxLWWeXiIF(t=%a~wqe)e!(z!S!hcFW}9V`MlryyQ~M!aKUnnleQy?fQJ1nT^aW5m53wIeSvx%}IMUO8Cez3FqH;bQ;+Mr( z5=k&q>M33S}Lx3TO41JMK#gJd`NFCZo_ zG*sDCw(akwxG_GrO3aPui$bmz9vF+Qu6(cGXPxe?^NNL|JG{I<<9*qVxIiON)~lRf zfp&a1x!6y9Kc~KI?i85kU(>fIDmKd7HZAyt%rEXdGVMGVx9cuGhgy;S@2djy$( zk<;W$*Qbn)F_u&hIsg((jRtwrzxlh^d+(#XT)HU2rJagp58YtoWF2Ajf(sl4GL=MJ zDPB@0rQlh1=a{MmGs;zjwk{G2ka|P<*y@48Ig#%fLQ0G+>wolG$>?k=_zL z8~3Sf>_S%zXAkEmOK$qZF&eYz@5|uKJK;b2=}-U8Gcn{gVyoXVpw|nq6rZca2UsC; z*62ROifaGyijm1^$+NwgbNHqfiK?iFpW597%_^rk*?J4*SU=pTQtoeil>Wt;#p!;4 z_n8}PH)^UY+&RPpbJH~1l9VNQZK1 zDqK_P;xC9Now8gK5^g;c@8`I@qVfKcrp$%3#mzSt2IdQ=NbBS3T0d8Ht^F{qZ{mo! zdc1PfS2cu?wzv|3c0mnMqw=s(D={3eX+IWUr4%ha5J14xWUo!Hp^08;z&p=t(E=rr zk^%CRPo~C95+{mRc;k|pM9R9y*!7Fa#y*EM??6zB5pcFw!~UkygVO&aFIdWLRTG4Jfl*X%X0sc_B8rnu+Np|5(wk1h0E@k(&@$fWWNE>krBSm6MDc@Y zSpDqKgwFOEnDLZ+{diUuMf%%p&m3Fo2srZ>qT-ur=rUW}2#po5ZTsd3)i@BZ5j7%}11hh^c>+wvizj;aY4R9mT@%ZY7!+lq^$w70+oWf) zE;L>zJF?jE29zVW#B(q}Ah=J%w8r%TPk>YH?M2_R#t-(JOcWPVpF^g_zDjLOG5xWi99A2Do^4b@qy#lF7lX z%k&qHB<668-y`p6EG^vHJ)h>y-h&Kme{|Hie!r&%TID=|-Q8iiXAU<}!S}lurxr!( zrGA#ot_p9vFmP?6{^AdN)#jCS>hih-ExR06{{Wk86VbqTa%$CS;V))6wrw$g^^K9* zdxzFV5z?Y%@Xy7S%Pg4uG!8&003ge%@@QnZ|47^p(eV@)Ek6=L;c0n}nfz5hR2T;s zg89)D0hEE$xFo7@fT-$z;Co&}Par}wfjFJk69(o*u%X6E*u@P{snHOvN_kF|_6ce( zu`;8lhqF>_;?u1&R(Ef&PpM3pHCp@RCS?1?kt z2aQlxHu#R=w>){5koeeb0VCg9e!(?H|Z9FpxM50ulA-L#Mo;d7z4t}A+=C-Ee`&5=toNi3+aq5us^pluI6R)vAVdiBY8=CGMb9djFc=0$*t1ymb-T5)(>o}cV)qJ zppSo0c5LljaEkW3>vFaCeC8JT&j?O?aP9dz|JZmkM3Z5)qRxomX`Gd8KWi!1I;P2? z8xrQ%HGKU{N3dv((a*s*oADIOE&(HFUL_INNq)B*NP)NO*D`PFwgd|JQhRlk^d=)&)KRcmZa({^&zuobfox) zvtiVh_LIkqhW&b061EUmnUMyss>bwKr4{eOT~%}SO5 zBCc6Yx{I?BQ4`MA7XY(NS)swG=yM>bvWDPsXubD@UpyeFGPx_~++6e8bS1$bvA(G| zzfh+7L0=_b|9sMbz??CRg$-y!XSsS-VWz=gIQFy7|0ZV!{)64WD95`GfF7q>&EJt% zrDlOk?9P|!@CIm`vprVT@67TCPOg0t0dNnYcB9)-DgcV~Kvh;u99KnyS{Is?c@lkd zOG-&SN~1)D>C)^6@c#WrRx3Iejd|`UY$nVa>{a3mtHN?K)9@uiMg7I2ik_Uxa|HrI zl{)rkv?&kZjnaWOUzOAPwZG?ENIWd_$ksGGSA14_Il0aiEY9wk{Gvdp&Fz)Xjrv-f z#xavUvdwYZY{Uh?V*on<(4Ql{G)Q~)z3juGTmN?bSWnB=zQ*hJ;IW}2$;=5t0M2}E zb^#0Lpiy&-%X;sAc{XUvO)@#o!fA`B0YjP3UbW(uKJ#l$ZAw`s0o|hb+ z#kD*;7S-wY9G6pozks=PySnOy=N(gntn1s89c^n~jD#45-=W)QAQdT;xuuJ1qtR`b zPD#7{)o%2&!PHfE^dFnr5wQ{Cq^yAqrqc+YD}+GgU_Kb%h%kUnk6J~(n;;@6fPQlX zs%F51%u~jmDhTzC2RTX#OA?HonE9i5i~woHGH53ft)4a!nR2T-b=&kuz9*OP#iyD* z${)XN_10MvvN5?Z#2W`+`J595|5>;GgWO~XLj-5kisAa8I)Aacgns^_7HVDFj!pNf zflRjVTed}!+%~OUp7vR^Y-HGH-**~dPGL?@ z(^U3|9B#?hyE`T|Z(htAOC-P1sP>vE56aD7++^v^daDs> z9`Jp~2ci}Bg@#6iGB$1}2FK_4iIYRI@=!A1SY?#75O)MinjpOe36nQ$@mqjlZwhv4 zY&7fnajGe8dOV-eSQ-a{!1~6?PDo!#V~+_>KR+}-gsMU0TEm#3rN50DWJdc8LC7K^ zeefb@>7xfz+kAhI|B;&L{~hJZ)gA1+esbs^VTMx-^RNi!!&Y& z{$ffh{W%`(9Ll_T_5P~DiDdfm`;l>w^t-F$2Iiq>_hc>%W-v=JZFM|5uwAq2a=nvnIg zK$$@lSrCr79Zbt?yG>B_w z*EVUkXef2w_TMfVDY>QM@2XFyp&`rQa1Ff^Bm=dX4d@6(S`wI@KCLDqn?O{YMksaOqsg>MKxL?)5i=V?6P`*5Gc+zi%y}ICE z>qivaQ=#=A12o18{LYU=0hWVQ&1v+$5Zfz0q32@Y^9tOhXp`ayB}|t^1~$_dfE$4f zR~>Q7T1uW{3Pfm0YOU0mwV=20Bk0lUd^6017gYH{Ccg>}-aRUZO$SQSjfu}vI+K#G zcS^+rtF3~KOSpP%cAj(H#RbsaCp%Rz@?+cyz&jh~aL@i#SpTk-|2$LwovZ(Ku(D79 zpn(Ld1q*~~PfGP3g>kTQ%V<&>ALDI>uGVI~+FeT|F+KuUj4jq+23#kzz(Sv6wC!zB zBBy#Q812?8MH^9%_5=q4LI}&~_XOw9ox?);YRVAQpg0D1PDW6J znNoj)8&6s=Ma{COpPwxrHiN-^m_cV{I3Qpolc#czX*;+CojB0@{i|1ztW)7j7(kZS ztRaIxAP4PNX3kjz6Q|pYgg6u#cxK*|Kg-V^BsFi$A1XB{eM=FV6JD56qLqtk0K5bSbnx2Y@t*65t8$ zya_%}OB=b&2`5s{muMO?o&RwBEB-?LUjR zvE@pxB|D9ypkN^bPkJ^hGrJ4GbYlJ)6Dv1{3nuHImPz5iIBwQal(6!hoJ#NUa(76144>VLuQzadAKO<+iUA*~!#{#fG@Q zD>0OUm&UAa?dcZ@VCW3T-PzGXye%iy{m2~}9+28W6lc>(8ZSpW&J*@(k4(?j-+njX zJbwFS+c`Ft<{!+Pqr3KIk&aH0S7Ka3Bj-e`9_^vDUS{aD(fD0f*-Nw{??ojTgu&Ch zU96`Uiz1gxSH94^tY2>aVhC2YR9%eZ;V_+u4r$wVKihl!VT$ko3IK5O5c&`xK-bPG zxPEe`AfrQJl3Z5&mWQe8Zgt`xv1-wcix%thpPH@A18$lHwf)o}G{5|0jgEcY;5vtM z?>mj7I7hNc0Z&V4g~*r6R}Ey>U+vc@bx_2d18odH+>e3~ zW`^Frkp?Z)I;r@A-~{-OMSgeMUP#v0&#-uD;(S1DIMTQtiR{8oKLm(OhH?2xin*%^IQb~UEJQIf z@BDlxl-x>soYYI!L%2NO#XCZCg9ncAO>G8=yp1Xj$qrtds#>Yr~>p zFNm|pQ){y;*nDCQg$Wu&59S){A;D0JC<#=bJdsPia?{gy-vw#GTY9B-I{{=n_tX|4 zwtI2A8>d$6qm7$A45&JI$4NUdlnd|;v$P1l(Q?|YIc@Z-TdrQ=yP7AonpPp<>Mvd& zWeQ^UJbk&XZi}Gj09ihx0{O`GhZgF+ZcCrKGQAgZADaEIN+CcZrqMRfjQKfjxv24+ zaEaes@~HzomM#61G&asICl{s=Wb(B;LvUWpCW_gK+YaeVY_}SUmZjb`ON$X_jM`5q zE(Xb>i3ST7g}Gv;;&1Ka^i%;`?&>hh552r94%)swBjdRnBAI63Dweh5FeM!#Uo}v zMnMMF?rRbGOO!0vExp3a#WkvNXk^5=64wWc6fXzdC2U9#{Ir9`#ZaRRh9Xv$G4UGrnThXDj6ML9dmT-^}s(= zXr3^R_L^ zA|#Hstt-&33TYA~z&urYG<>_@{(#mzi=R5vrha6pi3Kp>sjMgq>$Y8CAcwm-!;FY9 zGFF#nP4a5&>0WEQ&+3mWx4#n`Q+RjKWhO;1t#4J&m^9KDJKx?R=e6nGk!_ja(od-O1Cpp*>xrjX%4I)X9rs)P zl)2np-g{4>J;tqFKX|d0X1eO_D>N-1ZJ4V|G6#bw$~d7fUM0B=&Cb)5UdF1;1g1bE zz(&Ja5w_v^q5gV(uzTQgk&gVHBBMC=btPB5!@ch!GV;ke40 zkQTEo2hlyeF4a;;S&uyU_5Eir6WQWJ$a0qZ;;gT%qhCvVK-SNWUGijw(W4#igQ&Zl zS?}Fbb4s5-)(gcZPE+qik6 zjjpyzEWPcqMzGWc2Nu2ZEeCX#n)9x!>mzHTTn5j7xp*RfkOeE9coth2Nu!ZX$EO9T zZK=7nG7hqa6|*{KouyL5BqI+?ahaf7G$s2R60Hw?>u!&87ld4vVf6?*mlA(fQZdfZFS1u6_1ORZ=RS6;s z;5rB(6=XSY3K8T5T5*Z5)w9N&HV`={0V}@B-N;_)M7!!EPc&=Du0ClxYUPHEcTVyQ zm6$a9JjbG2k~K;1y3KCbWV*4*tKf03(}P`1RdRfk^h`c?T?!fWuGkr`Lfh*8pye}K zTh{9K-hZm)!^#%S#iB_gf2-nauJws0YNGxenGCfGh&G&M9hlSThx0XHN8qb54hCH0 zf#mZOp{;MW53h?#*DrNBvn~?4kqh5qR%I_3M)=%@?AvxL7v+>pUk%84J9A>FC%>o5 z{vlF%S;K9ktt!{7t&vRb((~pq?y`TPLeNNaa4fneX&Bf{YNt*AT^+oX)SNb^E>j!l z@#xf#mp@eNG|j87jn|ZjN!(*(C~XhriwSjb+Ps-3S2YR(fRiRft6}1aHYqx_RV32{ ztd?(!oNwyZnTfL-{kX06 z*6gOQSM;Gk>3Ab$=pBx z-xEa)hUP;{n+$96{FVCKB8*Ip&kV1}_E=+doWGu@o97}RzBlt#KL))y2lgf~!|X8t zPjGrdRx1)Kxs$TngAB+oD!Eu89=Wj|KDWpJ+7NY$xm1Q!HmR*}fhwhTiT*E2*Fp96o^4d$~n=QhQ=h+_Y7PoWdipWpi7+vzrq!e1d zP7BJg-21F@)U+b`@VDCe;rAh*3Da-xM_m7FQFJTE3WA6zII&PmipvZYPkhPC70HOd zBykA2pOe;j;RkW3r|5my`Hfn$)x_qz}oN_k=J-$HkzaLV@XJcSeG{6?Gg z8_brj+&7~D_M3}ofwa%ezx8{kJ;ykQXe+q(*v(0!72j~4$^yKf$j6<1$ESZ6cOD7E z&Qr}3=M0qXx+h>y2!}^WZcNe=p`iz5&cT@ol5rb5*2@^g;z11UjVAj-dI5Itx)rk6 zcLS+w`;D{3Xg6TL7p!@8Z~)8F@9UNZ#|?qHOd7-UXF}3Lkm8a9H=@upT()?uK~g0I zHmdDt<~bi$3rn);t8o{C7e>}zxNIZ%hTqqd^b)un*OWEz%U&^-wu_NqHWG(U6_~b^ z8bGI!aYPl1$bOlQSt$$Y&1bdMN)DN){w}1PY0;RCr++Ctki?|;l*Fgsq;qJ&TK&}~q}~&MU&lWG-=*unwp=F=039f^ zu+=tG6OH#9Z3&SG=HnF8Vq4FR8({Mto%9tEVE~kXCtLtIRBLwk33sy{72UJ zQA$iz(15=-ziq15FldrlK3hlFbGt!NLeQ({t-I6foKRr=sMuR>Wzr)oRmqS2DH04x z2Fkw(lCy`0I=oMLFl*nzV*953J#r;&S-><3h!#(r zC)#*_sM(PrG?`oz`s`QPP+)8ME-`e3IAK!Q(%#~XMS@YvQ>Wj;TEy+jq_1kFirz~L zB;fJ!t@Td0PjPe36!|JKR@=1HydxpDzw>dYKkfYoZ|)!Do@X&&TWxN`9ZcAW6m#~9 zaH18S;m}does6GsT|90zI1B*n#h5a64aa4TK~NR)im($3(e^qJfX+aq+od;nz6Ki^6}^lZG>wAn=rFV&4T8HOB#+DXHTDVSBP!mSO9S|wUx_{BR#!GGV149%q6nl4{7GR`^s z)cvpH@lz!rKm&mA!I+qa;IRky{A!a+MxJ>OuNRmPIZKtK=7bthA$i^+C0TY1vGZI% zTot*e-w;3|&bd1!A5&^U=XOx^*%p9^K8QHcGnNUu1{?8YF78V@!5-Yf ziGaui$|*!Av%Z*me9RK?PaLd#;z{Hbi#2=j3;oGXjee_PW~KrJPHFF~E7reo7shnPs1o)#)LcM;+bMif(?_>er)xd2RSd?io3_}8a1 zofb|ZYLG}hFF8L7yQfUO2Pi_N3JeCaLfIH*IGWi2?tVJ?cmSGGZrpc7?U^QI)pk{T1WH9HbjG-m&d7qPjWbdSIJ%A1X zuma+1)$UQTDYO;>3L*}=hI#NUQGv}6NtTDTh#Xu?v=_4Pp*LiT0RcSnI=q#6k?*|H zEgz{2wId!L?~l6wa<{56?^{ft8y~LLKw1p%W^Bx?4b=Du8#}wDIE=hjH>6Fp=X!bP zYuE_d@cgcG_w*Ce%QAcT3(I}$J$JcU#2ABiX;+?>5pm;bz)78tf4@yVdo~6DFahdM zu-u<$>CiSz?WqRi@d(&6mDYKrH*UIdbf+H@H^HI|%9GBv8P{>laWMFZSx2^ske)KP z8avTNz$in107?ca8(zLS_5ZQ;)^Sa^ZQJ;YF=}k&=+TX%8^-7!-8i}>RX~vqMu#*5 zMd=WOk}z;|DU0{H~^5$11Uni$7$}X-f|XK*IpZAV$HwPd~nuB3d2w9J$mCv*X=PTvL{Oy2y_ zYH3j<`nr+-K&<)6bK83s3-`6-B*=R5fk|y-!q{9oMNIAG3$CM}sL$mXFQG4~^LF>*3glAfCl;#~<$g?r7jCYk4ZRoRCTut1ACsLW@nI^KuhQCitv)Z)(~ z;$_#efbNd26ch8i#V_tq{)nPIx&5EeIRqJe{mrTx`Jwyv$NsCgc#}nA>h2fFe6>-j z#W6W?{?nFF4r+b(bYrkPZaMK0Ms4`n>F57^(EaTmDooEf5*0%m9t&kmE*;lu&>1bq z#Hkb3@;b>(q=BiE`OG-YR$0_1MNmyPjg7#2R7%?1QZw)n>T~MTD?#*ljaJ{i+hLmh zJZa#=g8w%plyqy8$92mdKp*66PnIK_iPZ;w?H9p7(fwUI_4X^t08+Y@!^O&F3RH5q8@yPV6mGy_A%z}I)*nht_zK2-xQ@dk5q#nR~cbVS@ee2zYcA%QX)^XBzM98}Z` z?^U!+AWBbr*EWsps(T7IJrz%%j8Et{GXV(liZ!-OO2BBB9HoA+vb21c4;R0Q(zrZz zX5BeZ0_|cDWsQm85i>-1*#@+Pm7s+O%d~&2|qyY!;jZ?ZKuI{W<$>Q|4PzmS*~P_>k5et zJ!#eWTT7^Y=5+q(rKlgkNLHu^W)y*mrK9uaM#OqaeOH>n%<;QI*m$?nhnO`-Suf<| z%)=RQF^>InCUxIu?_n)^b_#SRj`rQVM}#kYvAERaZMT2D5x;1l<~!O*4wUGisb#z_ z(vg~;N@rwmI_^^vn(>tU#nCU^<%^%%=J}JvAsK<=pi^5*50|+m>ykhKGow_yyxQVZ zUCSwDn}+(F7D;q_{bw)kc_F-KpoUADsVmo>5Pw0NNgmwDuk#g4UCElben2pn*{1#R z1GP)X`@MRWjNDom*@n)xky!;&wAB#w2v&)8R7Th4JBzT=sk*#3hW?QkMe3|>B=NrM z`SS3C_Kz>`TcdP-oQ?-&yNNfwxHIgG!Pv8&B^w^D$?+**(DuN5i?T;R3OS9D3#Fc& zDL=c@0uC}P5w%HgvoR`_%u?92%FL@VDJc@wr7PwmH;p(eboT9Z9nFV0F1>Af8QeU3 zuUYm>(FYEp?2g?H&~H&*8~RcC*R`=YQ41L{Ij@WLV?8h`q){?)`g#P!z7Xp>4inm(;K6c@m1T(#tB z93`uv@PebHvkcRlBv-c8jT9|Llk`_oVkaHxQybegHW{%U){%uvyp7rq;U&zY2J zG1g=EE8`_PPpg{>QfTw!LLYt2z4Iqa`=ZqQGF|`BgJ{D2yGJ)uMpjG2{4dF*X@*qX zlkWL%Rc816f48gu=18uaoY8VNhIpQEWz2QjPwhdUI*_eM4cXd91-9r-y(gmG000w! zEHg;Mq;>pptPcX^XW;@Mo-m4lfPgF_wi)KW|0}&J!k#8^S(r{{cE`)qeW>)2)wE(g z1npnud9l`R%5ZF)>!C2DBy&|cCZXGsu57obtU|e4>V~{=gpNtJNQ5j+phd~2Jf%UY zNcDfN+dupX_$XWwl5mzU&`5kP9;cD1_Eei${Pa=D~brN{@9&D z0|n|NO$cCQg%(;SEp$a&YW5!WOny`&YsgMX7IT_sosc&*DC<`1RZtY!lr4ic9WNP6 z72L(`NLf0=1&so@N40cHC5PEKxLXb(g^Kk>SL~?rxr3_ z0B~690^RFcBZVp-eijru`pJC5l zNx@Gq#AnBUeO_kaVlc@^ZSjXG_z~#vVWOMdAPq_C}Cy^UKdM)mCqQ{qB}Cl%b({6ftrB z7Im6i%pjjN#dm4Lb8aG=4YL?m>`}cHSY9RiPR%?_?)iyuZ`z-o_eF`Hv!J^gy%vgw9@*0SL#nwYJ*-lJBxw0K3_4G+D0`T? z_~jW;|3RO@WDy@{ri7tg>)}q2#G|h_nf*#>#au$0=?}j4Iym=C)H#u7cq}+oay#1! z-WG_!nusE|c{;D1N3AxLKFK%B!!0x%!9e z;`PoU_3)ca(+t!h&Ky09nT|>RmZ2A9b136<*pLxIN2Fi48&epwThkY5Qe)A6H&rEH z&}7=G^iyc#qAM5W?%kiky&1PHoV6dD@pE*H-B^@)pdKxj6UY@c5J}@)Kx+`4@7k7$ z+JCbvl4CS({Ys1JPIpOHNk!NFOERQG7AvJ$?i-$5#rwaWWA@&8`1?mazavtcHF$nq zAJE$J+@_7StSWUF&P}~ z^9Y=86Y4hWwt|GL+Uk$O7e-}_mJ)nbcP~YRqD$!f=>gPLXDdDmZM9~qct}Od@*N1_ zirI)|A;qfaN;HkPcAZ;~`Iijc1`j{Z=jY0gpC7+?aX+e^_QVo(_@wPWuGYVhQ)4@; za-MqDJkDnq>!@UPP|7gNCq=ce+QV^&%6i}v(H#K5VHp(h)?NNL<2zOg@%dw^6h&~q z6f=?^_Y|?pEp*J;Lf!K&$SL3~OKPswWC}`}N|NV{zUA$unay4@#?{}|(~8?|J~yh5esGGV*i>|1CMi5xEc^BX#m1MR)4b#fPhEwz=a&+)iUNpwEpXN+8jvAqd-%MVnPT(v$LS>%# z^;0QWU~DAFFCum_Z3fg>n|nw0x*^-}o`X(!H;9dIKJCO{2h1 zgYSI8wG{Rh55`QUT$cJ(;@nsx_@Gg{_f&4}U@xzHBpntQ`(vsGf@)%` zlNE7u*8&GWad;(O`4#u+H|ysR_0!*{r+MME=Mr4cM$+}wWu?3~OaCq#`3t#DhqI0~ z$kJNVR1TZFxe6}+VRK&QZBxltk$Yv*`7M!14LKrUT zRiM*iL!4!`#s~x9Sj_ec)f5JWKw&HQYnSvEe3SAoSz(_2EDN)vi>FQkxcN7O*Zb@C1Cs=&8XIS%HZ(TlVHYF{Y|1cQhH@|LPYz%j~Cgxr# zkzEO7LW^h#Bk0Mm%FSGgD=80HjQ-$sciCMa0;-22ODb24B}1%#eK>vo;UIM4_PrmN z%=Fex@()MRr>fF1sw5@oFqm5{V9P&ETNJkr&D<9U(+A)MJbm zpm>R{h`0IW@7_vFn~%kFL*loo5D{Uv6aynH9>xWvyUC>!h~ShIBjd=DCg&cEhj6)R$Yw8qZWmTduJv-6lF0^$GT~XIH`u z3@jNfZUqkwUl1Ymp=Vc*@7!TV*_PoOF$f4p-Bz}je$&?V)k*+D1SXu>XZo@X=a90L z^Z461#hih3pra>A3X_)>gz1lk$W%dE60#P4?mUu<48Ec1tA;*F5}4h+>-Pr#$-IL0 zV>mDVSLB^v2Y%xsMg&&k#lED~p!grV?qB5OsSDL3+Tf z@1abxDS^gAVcaM*pnvYUCoiAR^yvJ|PH=K1S~quqgz7Mj)kG|mOsvgD$|4IN^tQad zBxqE_g{MpiJl*cvE>PurtZRR5NVH!4VS*F)eH4goucl*8i+bbEEqYA4lGi>L3X$tX ziva-q0Zv9deIrr<+^Ch0mQ}^B5c{tF^xTMI`NEVWB5VFP6YA>tj*`V&!%8-&78(cS zSnSVv_?o8EA(QaFjjUit(W`PCiq5Z%kk`_Jm?y0fy-iiPO9r)z7hA7b!Cd zuzvYj3{#rUs=RvsvL7EVhl8(U^~ag6^80PPrQxT&rllIis_^qZAia19GkwP5-!c@P~k7u%sUvEA#uv zZU>K|(NSgjv6rlKfbohq>@~I*!pKUE0$z(@EjU9%{S^vJiPU$H#~8{eXR>KICe1!r zsF~0*{|l@kMFJvH-?xjpLvku{E6d%sr?vY0ex~E~1!)zJTWNZkKu`Pf*=K_H6pos= z{OT>|N|4QuwaDIqjXPdH#uF~OSMbjD`tcOKZdyx~b#A`tm1&Wmrdh`GGyP`!2Cb5Z z)gP$W5}k^a%71br|Hj+d-@lM!r<}dz!px@`EM%$KL1S}g^DY*kGM1^-RHJsfGRozI29=7_C8^cp&E!j}e!lGx@~i0toBeR0onzf^JGoSF`ex zj~P+dQhl*m5X&o2Xtm@|HP{H9SKW|pD-~clk#Jy#m6xba(6&|EbrX6b#NdT&z-+gA zqprHlzTU>Nyk!|Y_<1EG!+5M*!`v| z3NL+i4%-m+<xOML}vSNX5qir2yr89M7+%_bv)Z5ii1IJ^(Os7hFBf0U~3>we*XyStWe z%Fm<8<;(m8m}ZmLGQu6>h&QKWTI*Lf`Z&P+d}QS7>W)yMn4j3rj$`bb@wQUEs)jwI zBqMQ8!@2)7vi^l!b{7CXm~T0q6>iy*F{Zu}l+}U!ql#nFR_W&!+oG$xfdC{`)e+G> z*vb}kApac%nt-k(K%i-&qJo!SyA4CxUF@PHsDOkFO(n?-X&{2co94knet}ChKX7eb zncn7ajBkvvWy}k-xSTM7S#$~KMz5;Wxn^eH0%|MYI9Qy4+r<<-eD#xh`vY^5<_weX zKTq}qxXc$=))lLruV1Ts$E+Q7X%JzLu)Vl;<&V60qQyz?*}M%~1j=MW5Y6?a-VQ-& z1kC#nD)z$r*X&-AIPjsEg3pd~ns3{`NwzoRopC9TZ`N9QZOlrVHA`NF&?~M;FiV_v z^!hhtzdm1er{LU}r;zF;$g=Kv8@J%{`H@oOD=&u@#m#1Zf)8^T^QCV--Y%t2e-|6mP~)Y`w(3{C z%Wa0f;3WK6?s4>^lX5}To_wK1F1`TOVzGexLV^cOSvzrgwZ96Y$By5nC@QtP5ng@q zi;d|`Jbxg6_Ik9CSBnsap?V3L1oSW>9s^4&7fs*ogaW#}>CM?^$#*dq@ng0l6*noM zESvG>g3JH#OuoEyf1y-!u`W*hR7v|6%@36+20B$y;cyG09;moaoqo6WMB~-l-P>`E zW|~t1NAh~wH6{<3U0OPutyu@bw`@SyKdhYB-u|#-#&gK>Eb9MqOaD)a`>!gu13#;B z{%4T0w!|c7j3a}*AF)cRVwqMVlfvu8Nl$tafOK#c091_!j-3r-=|ND>ZAq$=Jyelp zs-u5x%w}9GC)538#Ldsf=x19~MPQa0lb;p)u&dHU#zeQ`QsDj(|6t5QaLbX!vwkxc*8Hs~RB2_os_i+JB9w$^*~?#*Xw z)yI@ph5dY;Hw8@Aq}O5VtCE?InB#tDw(L&vH_%mSBuTs_xyD>T&MZ?M({01|7mIPZk$yJR`L z)yVQi_3*v360zcsahf^o)yVYt?E{*&N4!UuoS#11&Qi2WoNasYWBJ zEAheg`9B+K*LoekJBdxaxYF!%;X}L8K^*OoP~t{S(dj=23+MZ94E#+fsr)a<#V-KB z`&TXT%`UFH*XiPZhJEQk?kMB#Z8DoFiw2OMD)*d4<6TTHWY)$6F`DOvP`j5~S$^em zYGW84Renm!`gpy~pehlyI9;ew{3vLPNwQlxQ)8IPXVAQ>-rYh;_2>H*V<(>|r1?D$`AM7(v1zw*!da>*LD$zgFt;6x5d&Eh> zpfpDzs4I@-{KvDJX;ZG3<$(}=)Mpb zWonz2f48^3mJtrW{yqncU&HV+knFPqy`gUb7%@0lM*epk^Gk{Nf`-KTYillIQm4Jg zPb4l=GxWwxnoy5T_MmY|h zlF0oy8VA*xOUwCXJsQLq!n}56a;e93kF530Pa)i0n z0nAQ|vGM}>eXzz;S^Jp+G7sfInPRwo`sH39K&~f%l$RiErbwj+%3N+3PhSe(rPo94 zZP9j%9kzT`-(jPRK4HXfJ-B?4D&*%Y0Q2CUgvDf}YRX-lO|#%-L;PMJmGiL|OV{l2BJIGfLn_@1)WzU{c<#|eRO1RgOi6T}0SoS0@ zNw!BblG2`k&N~B!M8+qHDFF0J%G1*0t2`i1o!#+ry=(i{wsYZ7V$7p$%Xzu**WqkhZjHi8dzjoibJz3;ei!o6u=en5!Wd9NiN)O_gUARIZ(cLeN38(L9jq zY_zHfb2^b>nnhL())EWF0^I8Gl9^U)$HVrFEO?L3dZ}V~+hic zMn5^ubRv51K4cd>`y=$@>1pOi&+>a0DM@|~Fr<)%&s(p{Vu&8O2^}wRdsKA5?Xp^YliH9s^A1+369S@Vw*zW&;T25uX?o!_q!v z&&{05R!MAPND4sY=JSc!W-hq)B>6`2#Ni9Pas-s&hJ7!%q@XmAtqTNncqP_3Q4wn@q8VGr34xODT#snoe z=veOW$-&I_!eH6FWMkVX4Q!SalbEC-H2D<`^iL?!;nyuR=vWN3WEgPNO=+3SjhrhT zUPm=1Aaet?G^S!4tuIW3CK%g9#Hn~EQdrezO#x_#m@`_;#YWHz;eNH&(`$J*g$8U? zf38wqx@>ORCyH$Q6NyoC|Gl_clhb#}&rJC9-FzR+7beH(pS>z5Vs-Fuzy(Te}!uk4wW_jE$!i)edC?48tEkkkf@%Hi3#l zZ%>%1W>bH_`lvaY-#%D4>v=@=^CSoyHA0@2Dl0`^J+%>dFqo{C#l(s}H`M3X8awp= z74DfVbbe6W>u}jrZxPDRo%ywt{Ob)EYQ%nkds~(ONRA* zdLc3sK!fF3Mj$_@)Q?~7F{=zT>x$zHNKP@s9jj+V%#rqpk_JI?VfU65l(Hsx?~12M z9~gu4)!)0bfu~-O2J2r>Kx+>os9fzZ=_f41{_4{k|>d=`7 z3O;8Sc%H?=(N^`908F4iq}6>nZ^YM9V_Oo*1KaobC-;0Fx+?C@hDR$ht3=VfMV>+N4>wW9vb~ah zu!39fvN>LjM)CgH#sj6s0){1aG1|xXEf^mZk+eTC+6tgn+iDJp=}-Oo9+xuYjD+mI zP?Y#0Eq8GHv*zsV zA5)13+sAmdA4P!Hc$U1JuPJkS#QAYj>58+Ue1Px;rdQeqpbKJrmCLDimp)s*j(5W) z8LWrON43+?%G1^yb1~XLQo6^uk(Cv6EXASD(+=ExnpPq-D!*(Ghf7_XSY&0O=NQ@4 z2qNqOPIzkN+_P#tneP~rkwa_#doN^$`X}&`#)2ye<>Z4YuFh-!-YvLzWSwX6Cd}l^ z_dKVKS&m(SNJOTxad)hNU5e$)`? zh%Jzm5}O_M+VzsBl|nlJR^JRX#^UvllTfZrG)6rl#Sv5HQL29`I+GvM?lh%eVj?Yn z=1E=PyZRK{cK((q#*bf8Kah}i9-tLi?JICiDa7uqRof})aKV*!|NMOx#qsMz{2w^s zOrcN4&Cr8^se`0RMEVM75(e~o8S5_b-fWiZ#l<467nZf(g)90tFL%D=rDjKICtLQS z>4bmKbsW&{y>Tz2nA<+_04g@drVF;8GQn?m`<2Mh2Szj85SC`ue0TDPfpA63C}HWq zzk@z@Cj1Fk6$_kX!;pzy+d(;x1P>^O?(k})UvH#7dG+Fxz|7^tNCE&TN?$*b*Ug5< z8C>=f!l0?FbTrr+J`e$iCU@sioC{O`sO}S`>IRHC3X*8&_~v{sPYjAk9(tdp0c6c) zHbZ!sVYkzSnM|vmG@837h9?NLnN|6bEa`S=ed7oJd_VQ5el7F@dHd2+mwTWh|Cj&h zD+%cf({|S(uMc{88D}P`c+aRs>}y>u0PUUEr4yJ5FZ@r;ok1=%ISK$8Qnj2J2)Amv z+%&cpE|tzMscXvgw4m=uT#PiukH!)K&(C8B_~X6!98cQ08=WpcsJ;j3n1OxHqMDv;6-XMVLhJ9&QkCpVk3eK17>{+OIrQebC3fk*rA z4gX%EnBg*#0~JGw<7xM8)9!+tDtgLn}AGzPbPfyoYCILWz5Vt%D zOsAuuAWW|*%p=W%Q5XPVP;k}tj#fdirPEbcuJ*Pdo+yS!iK$EPXDxG+tLAn*1RGY$ zAAqhgxIS!RV@WO!GU>JLHfxQ}khr;MA&(zVAUX4E?9;8jG%EQ;d9|ugk!b64xgG=utw) zXwhE>12q(`7j6PRW%J*tFEUdu*Qe$6-Z$9 zD`%NO!XEG9Ui{lSeOf^l7C8HQh~xT;yMH&Vp?|&sK=VCT^J^BC)x@>3q$_1|9PGL# zOkO#CU*Pq0?*qHZfKfUCh~R+MBt$^q2yskR36W@q#0U?&$Hp$pS6VXUdh7ThkWRx-~ z6N|!k)+ZPg8bvFM*tg$#t$9I7K$1SZvWUCMoWE$|P3x5AkJ9)E9~F@LHodD2G^1I4T&+24jl4A}uJptJzLWKDy!bAE&b;{Hb~R=R(|MyuucDp-7Xp7giFp+IS3!3W`y*t=f}Q zuC3UtYuc=e!oL^!BODVq%Iw?q^&qsR>NC}1g+@y9;^kj_fs^rKuRdIEEJrXtEm)`C zC_LP!j+ez)nXVyuY)cQ`*(__2-6Z7{blnXhgWEf7buq(rEY2n8?Xg#{$)fr5(N8R~f6I~Ay9JegH2~X_hBKlS1sYVIExq;h*^aE4 z>Nh6Bw5XN#v?v>18ct3TMlWQtg*=RQ(G094!TZF;W(d;>tykI$ju=DmUQjA)YHZCr zcgYzgDoVsvmwm7G3Hom>I`war8{0dZcg9uImt$QygES48o~oKsbLvU& zwweHW-%G*ZMd@4dAQTXasZ>%Z<)ezym=QPME)&vYVp%UVkqk<{{+>TnF4JTw)|AV@ zn9wsmniLUV6{G*v+A|h6>OLQF-t0M9qKK*HVTo|JFOZf))Q;v`w1C{pZ00u$Y?KQJ z-8Zw+ntb9x(BFsg2#*eMca2$Ri2~)$2Z-t`KZS?0ZNEQHE7DnUown_#)Pg$ljc@%a z9u$pC9o$w+QwY5#U&4nWK38CKQ~(6ZqrBuRgH&NI7%f_5g*k((P+mS#Tn-b1Z3=nH zgl)2Qa5Iu8C`QA zj+cI=hR?#NWZ1C>N>m+GiS~Y#5O%J=QDIVpy#7E}zZh4g1oky33UuL7HN5$b6+qx* zSzdCtsuNzh`oLQk2FPi!4s0$=>G)$-OZU}&(DS9D>ux{yXp*&-c_YWnry;!=DeaX} zH7EL_0R^^`H(nP@C7`N8EBB`>H$b_F9QR2kb z0>_4KQlgB025rI~P%THRX+i{&C+K~RQ}7&vuI|*zlq5koG-lex?5;sxcgRf_`!gG% zox)mS!P=Rb@ZX=mkjv2pFds-+*`7sxwL}awwM56uaB8a?z`gSOM)D+pPuF1#EI@IF zhw|CEsx`N6I;*8G-V(tYe7SXQNsF1=!p<8*c3!Sm` zyGDIj@cmkh3(|PA{?<>*K9*0y^7lKO9PWqLS#yf`->RCw|#}y-1SDF zY%;->t0O5yU_Y2fPJTRDD`F|YWc>>!Vjxv;C=diMD;{yClT1c23E8>FUupRv)X|tz z?bh%sMB!u5w|hLrR&P)!RAZ8sGp2`kn9wJW@kS5PMEM}FZx;q?r{ugaHzAA)ExwJk zj2vjwyAo=OI{PLa`Xq?^(^^xFSD+`#_z~u`e;svQ4!PK&Sa|g z2`?*{Dnx44kyZ1tY4L7cb|hqi0d!{l;9M4xpoMpOc91?uFtB)SfsWVn<35#*O}det zMq(7sW0)mk77I2O;M(o@)=CDp_82UfF~40lwaYhs>TzlHu%#+icR?VXPh9SgZW7$+ ze*!emq?&)*2PZcG!@h^*9BYUGIxFarUXVm5(ofamo>ptWyVw?~lM{cojI|zv!%CQ6 z!psOM?6S5N2;%<%Pz_)CHac@PmQi9b2F~|(+3r=`G=x#{auc`SJf}{)>^%RV{~C_F z-8D}l2*G#GXQqo`H{CVE=+jyxGzVSris1O6?7LReVW?S?+l25F!mvbAK!J9{2mI%h zVrAp0;xG5D<7)+dMHm(m^)A$#AF6!pyU&P+&_O^Hkdjv>>_=Hae-(WO2%J6wFdLf= z#L^(9BwbB6R~n%>DF7%slhM}H{06r1uHBIx4b34b!{b;({_;C$8h zF7v~MwdI&KtE6A-N)S(4fPFo4j2Dp-4Fw2^qS{A&M8e--4(-$7(##!fIuR`7*N3*8 z%5B_@9;G9_9*J$_NXas9{mF!u;SZ*%$i9{UIMj=PqQI?dp1se2!WyDHl0NTxzX zCr8*`0Mw|kNi3QdK}V~SNArXUfq;o%x`O!_=I4uEPxP?@!>pw8$oa4RBVIbjmmt_Y z-WJOTy;2D3zg))i6fj_E>sK;y#nrz5i%nYv=!k?0DqT>O`w?_?%+-+xe8g%=XL0A8uqNV?@%2|Ax1Hfyo zOlFfUUGsm8%MJ;GD2o5L5u1P0ODu{V+su@N-q~adw2q@dDDqxoBpv=eADqIpASGt{NHqb1!64N%NRhLxqeo+|L>#X>= zug<@?%3Y-2mShmY#*@Qej?N0c)Yh8{7rXc6<(n)JL!Z%dP2a4d{2kTR8NvB3>~uHj zK5e`03Wcb_U$!EoRdVDi*v@F=w$o)9l%Bb$2@L-bnb#ppIQKi-459?6&)jr3BvlPz zufRK8OV8=AI^{B@n~6%?i16|;en!yF9+VvD_Y>95UYkJgD~vsKxG=4rQ9pj;S7za* z>yo|CZ%pl1!LJpx-a1tdS6a zp1;;zuM~gWeJ}9J6L2NjxL$=#Ln=s*W;q($zYZWMa$*8)isEGlib3M8=gEwB!FuO^ zj3PfVWV_8XZ*)SqYtO|nEt?WUOst-qf&{Kd4ud0UxbQxU7zMABnIWIAmxSK zG~k6Yov#H55$h3GNwwH~Hf4FA4(2pgy$6UiZ18vP^kQQh7QV1b-NF=KUnL5tP2r+k zGUE4`w6nkH<)Wa1xMto(qy113J~=pre(xxKDSf~`(t`&tYJEPurqb~ta4J97zb8h* zXA5|<3AD&+d_aFOz(6QzSl?)^;C{maN)zYTW4sK&xhVvq2SoblDydT75}HYG2m;6m zQkO?>FMw1=Cs8|O^13CCIC*67(4;^FOKox8#TBBzN!rD;ZFDL4O2HbIb{w_>FMTiB z9nKB~8o6bf)*_}afB&jh@_mS7r={-UM#qDD<@3%TB@%bunqSnAin0Ipj;-Xq5>1w) zw)Nk3^&r~r|ADx_7i;L1LjY|3rHF(-L8 zJ*pI%w6Bl9mRuA#Jq@V#yN7+K;VVJs_Z4{DfdeUpGj_FJjw@B)9gqEjIjr^GLW`YG z8D^~bDY{Gd$kUl}s~qM?IVW?kqH;?=Y8wmo!JAt-=GqO$`o32&9W}`dG`@`1QWW@# zOVjFOf0mIR)@G-DK$da*dHN|&^ThqTB@q=k=ts7xrW#4{m2s_e|KMfj%JcS)@XGAl zJm<>Hr)OLbaYS%?c?%Md0rQ*T*^w=338Q-Tcf1+X-*SS_EIM;gMMuaWJ(&>OW#`_f4vsfbU=|>U(En7SdZ$%&iQ!9tFJvxs4(Hqw%?q0Gn2sbM8Y}DuecB0BAsY>|r{9uHNR}5a zCK=Urp^sO#u{ugS;~Un=FGhdeq*nXEHNYOyd@0ZMUdSPN)`hq z2_R^LryQs`Q-3Sz!D$ia)Edv&1P-`2PXo`-x=_iGe%)~zH9O*szrW$r)g9q-dPcY* zLS!;2oR;y7&C)`<_vwkxV~7Moeka72>YIuYC84k9j2u#70d%;~I5by(+Xkx$Ef0N$ z9jAfBYm?dRZ~Yxe>R@j_KQ0&7Av#4$yBWB$Ly|;Z-3J=oqcwD{Ab{Ov#6$_ z;tFRj2D7?41({E8!5zo9WH@GolMmQ2er?}@LL?{Akg|+G)>^lKlRHkgH^vN~F@APF zmC8wcuc&m&SCY8I^juzu z*djHQX_cKuRY!IsGGm@6fM)VJn%zx7m{memL8%bDssurL4G1v6`7uD@XEvA?5m|*u zViGvsk{3h^m^V~}L|@u0Ld8NNKJ(_PWt%v_Ot_q1zj4rqM7TQem8?Sr>K|t-&?|?u z9ZtA1fOXxg(n^zg<9xnKH*%HAed$(o*iSpxquiwh*ws=rZP$%KP?@a5a^Q% zJyUg|FrYbo3S7`>7^kt!Yf5yN$9^d4kl!TVO`mS5#1G73=+#EAH?-co53`XNEqD>C z^CBI>&=EZuNKgNxGU>J-D7n2VK&YxSNZ;_bZ_AS=p`6!&vU?9)J)g0}jr2K-|DJ{E z-JNqx5^P{$%bf^?>95y75an--A-Vr(UB6oXqE?qP(dqDR_@A-TtKAj5u|LKdi%?oW z{ZsSnjO&@{C^D27Z=gN5PgNNiXoR4pY{i0Dz__62P_Fa|!3a$WcA#WXuH)7NWgH{A z66rVLdA!W7zEYoY7s*5->LE>s>#r4q*MgPk*u7R3|5@g>yYfL)PczL-w&v5hvx7N3 zK+OCM!_Ra4|3l^et9kgBC^*#30l;h+WM!3H9ypZxp}r(u1!)-YrVc#y{PTzick8 z-|>Tl$kJ_?XGE62CV5Y1a3)|Z5eh9_lX}@c%q$72@K>KNAt6N|JMe)Wq*#Jf7|g3uO%_$!r54 zL8nFORWgqQ&QNzEPrCbte=vMA8+A>oNozo4fImOS>YK(V%wXLb18X)n5|EY4(r1*1 zXT#zAQ@dCgphWBy(Gs1TgV&!v|Zb z<{)A*nd6D>gA3_mA$dH`l_=h&w-FLA_2Rz7#|+`deF|HmmMI%6`#1*oEhdt&bGPK} zn~)aV%{VdMy#sa@(VKGhZ%fcS(4CvHdq9rdj@w@A$HhC_hY&QB7l=CHMpa9=mtA!C zQ^<(55U~&g&o|{=aY5 zvnpqCg#iEtT03-P(Q|{sK6kU&=;<=uJ;u2-2INeQ9wGpwOj3@eDIy9X)eg;T zQBpUnLLgNxvb-zJ=foxZ`UU9FYn+g1?5<&6s|h0f7gTRli-_60I?^3WR;^qj^H!&^ z_?FS?zP*B9mhV-;ItoeqN{Eqof;Tu$3Hl8~OV|HgtHQmNT;#Xn$R5_K_CZ{@TKQ!! zYfDB|`~vypc=wk5ZJWKVfXr+xm`=tEILwa@z@gLkqC90_XU{c>My|RVHek2KuI~cT z@har!99LFb!*9-tTBPdzw%( zD3H0qM$qjK@$)UVOErn-$1`sH5#Ai$k7Wqr2k=}o?trc(30_QBY* zb;h$baWJ5(;;1lKN**~7sHnE8Ps=O??@aO7^f<)-ie0<02Y{( zSwsvWcK6d804yA!eNfXI6e>2JEq!x9P^P2;?dhiCWh-Yh$FkAC=`wq%RnaN#ar1+h z@AR5^1A3z}lBBN7J>nUD^0qJN(mXGlSTJq(AWr)O4lO2BX*1t1*1?I(-4fN!sT026 zWW*g>URaTChLV=!WXHokd=rr~~l0IGBlZ zATe=K3{x+#5weVU=DuGCnUYQ&zlSmlQ$rkg!Usl%Gacx5iD5ac5oUbmi6jEc@jaKH z^-qOlFE-y8{{f0P#vqPkg>`On4#uecg~&fp$i9bVcwUZ;M~SeR4T&aYGH2wfjB9D% zRv3-Ki1_Z`qh&q@BUp=)BnpE^h#{q;f{6O$Dli=>kyZC(`gI(+SDV;7v0y3-@ zVuTWExUm-{y#Q~O%*4;r?VjA`%v03iOenHU#O8iadv-DWeVXLeb6Z}4Cu9GUEcYL3 zoAd{#=G52m7SfUa_^kSK zuh4<33h}gS>ep$n3X zxw|YQ#wQ0;_V;QrM;4_)3R)HTgB<``_zan&hE)ax+-O*@i^Y}GF#xgD8OV*7bb3ry zD_Ht;VydPGNhFBxWbRzO=Q~AQ^4a=+qdZE%kiS`*=rz+ruOBSQaPx;ZMF53Hn`CC* z9|>&db2=e9o|@Jy%??vBqPI~TV$~I`(`LW;JjPHmH`C`1cNG^basr0ky;-9t?u{ml z4Nhfk&lg~n50n82bY+;1F@`WLh2F*NQ|O&p{e5giIsL=GtdPVSo-7va)M%h(jCKWI z%6VGLQuwkrA_xwzZx(zhQfM+kp?==~&b)jzO(e(aevYNITIdcQb&i%6rFov#b45e& z;hj2{+kg3P_0Uv47XR>`7ZrCmWVuT^kxvqWsn&O4uk4FGF8snHGRSx&XTNE(*OLhY zrc!w2cUhy{JgtrnddneK-ri2q~kaS@3l`2j%^Lel}mVm=F$!Mruaf~ zq}T9Fr~bZ=P)7F5$;c~*UF9v07pfK)!}~XRn-Yo-K$SEnp{xH+4gM$pH^&UX3|7Lw zNQt^Kox~J18sNFcc~wVqGSs*4GRiA{QW*tGg;Hh>Q_;{#X44zp=lq#@h0YRip>t$6 zFX<=)%aZ++*ELEmWdpY1pO1hoj!H6WPw>w%&#-Nw{T^R0sBRp?E?$Wocum;1Lh);nCptAKv%#)b(y+9eQR2YqXA`@w-LqA=&G0Fr>MVC&g z#exACzd_+hE7nl^l@X@WJ8?358b4S28FQFO*+)8IXxI&ImMiT?r%;)?R}0BihZ_4k z+M2HfKOflAg|L5+?PwD1UB|HKqdo|iw{csB_=sE*0nao_GB%BsoWcB6;oM?)GGJN~ zHuFtRX*V|tt#H9h;)(2x)~N20-jnPP@&~-zW>_ROB+q26FHDRl)t9JZiKd9V11+zZ z0wfg59y`FRuY@G>As`4)CtRkE8LGweB%!(z5pcaRXpv92Ir8E-*mj^e``k#TA%9%) z-=MO+*HeF(cj9lqHOa4~WkuVze16-FoVuZrzA)HJzBr{p4m5BCJctZsc1pnDYz0Ls z)4&E(>=ED?05MY8$Z zeWtG4=(z5nc-2(1zf7fHJIGP8t5E%|O<6ZTyH0m(nEH4rQcG)L*(RD+M%yZIFT&a^p(i(lCImB9-97%m_DRyD!>&zTK+WCn>^pGc|E5%$VHP;IJ21 zz^%NuU}o?%?{!(~qMAJY*wZo5amc;Shgq(#wgn9hYkq|mSsd&@bw39EHUykNlAML< z2WR3|HA46%WSQ=z4R+gHS*Hpti{IiH4{;Pi-KzL{#Jm6JTv~~)cDs8L9?UFJsF@#( zup%%qP_a66sgns_m)8(P6g~S;wLs&KU5HM9+fJmd+#QljnE2hxJYaWP zW5XeqL;+PVn>ZPYB%}SvOdwG}fwcb$H$(D@lg}<-vGvjsc#xu7Ixcs|AIZ&1ye@5I zs0#opa+Mg;8{RJink$FLfCSC3CM=1Hsys|54&aT{%Pgh1Wy}^So{mF=$LOQeoRAQRu?&| zRZa~JuYxpD-t`mBk*CfxEM2+CLXu=seo<`ON0tIC{&UX50NKl|(sED&|Wxh3kR# z6z>PX%<1=~VVLBoFpS^_N3cQOos5cE_yXcZiRy1oiDzAnS4+437OuZ9wK{*C zbU?)d7|(Wal2Z}%5W{o}unz`d1g&xah{8Sg-^!l}4n~&qcXDpl)|1~thEZQF;~98j zy#nJ(f7%s)6-0kbV^XS6ig}KkarEG(TUIjSvS}Bom|K@q$*p3zks^{Yv^>%~TW9sT zDWxK`qW8L$*cUh3EA{N*Pd8Zqc4lpxsf*^^F1$DImlJqYPS8pBLIrwMrDNg-`PP_F z0B1x8FcjOU0hcxM;6>(?cZd%Y->bOUbojMQTF%(|r0aVbat+_}zqZfat}ap^v|!;j|;l?!G^No{$V@UUhqNT zH;gP@Cd*u$t1Rws^{CK@l`jbyw)>C1zyHzl=Y|q6rtEZDkhU3OVur`dgj*TKQWIF| z<;zKYiR77FwKO2GU`erPZy2?)iTYM}%5OoCjgL;G(jQ&XWY2DFr2kr#UElf3XY1_K z8^@EJwKt)mj&HQPZiw?_T>EWRa|Hf%lAio-KcMcn*o1;K68W$Z@ApCdP;cU7hj!He zzSzFsf%Ze|!k75`OEH{>(c%A1vi}d{w!;AoaaZv(8WytC8O(ggA(R0aQAf|Ljd#on zwR5$*I?@;b;Ifgy4;kL&0egBf+;>>(9j}WCD|S3Kh~Vz20sN?Eb4qC5?^IUVDs7t{ zke|rh#r~d;*8B14$J-e|edje4LvE(9QrqL(sq6fE7WcQU8b9v|EBwI{tHZ9T27Prn zxN+_9{WW*KREwRKh{u-#izOynt`4<@FzdOTW6!gpmw1GJ0wqw7*gt4w5>826SO5+$ zjex@Mr)q*Q4ktTh6=ZeBr(&O2(GNXtTN4lf)k|kak7DSJxzD`e`gWOE=7An5?VR&^ z^fx??z2{b~T!qeS`)b6b87lXpWx)QKrZ0;2Ee;#6i$7Y1{+i1W0F62|wEf(~d%Sz6 z`>NV$a!}?SzNfd^C+h}+r1s})kKxGxZp0zOp3xp6jK~I;NwI*k$I5Wjn$tY^AcnMf zx-pX2HodaE%`0!!Scdg1|Kj>s>HZF@ChLc?%;W8D_Vd3nW1=Hk_iejS)55m6UXao;lLycP; z{lfG#p;X;>m03Cg`^OO}*R(AnTK+Wn#_zZ6vJU*wgBpXS&quw!dIo+7aV2^$Un(md zRC<_~kQdAB20n}8nV(ByaDHPZm{Y7&dELH?v8*{}tClV9*OWo8VsA|-5hAWEr?Z#HLOc0AJcb=Y+EHSZ9N}`UwgChyR zOMOgC%qpzg%}gp(tj{Yz$T-;etPGFeM#_MGXo`!>7TmQuD$@!cKZtas zFC2XUfd^=Fz%ufng+J|Jp8?L0Za?iQR?Ah{E!m@e)l(*|0lJ~97{ZFvb2z44KOZZ? zNsW3p)c1#q^RjM!IJ3bFe0Z~*QrX^r76UavqeI%-_%qSeZwJgR-b=~ zTPvl+a5mRawzwJq5KGo~yp({XbFdFt59MasY1z>q#bsWMapAoqH=yM<{v66YFR2wt zqfzauvz}%rO?sDx!o(!Qzqvf|5>;Ni`+#$W^mFz;3th_<)OFtW#%pa+ygpIiM>1wh zIeiJ%vv(dVXZ}MfA^j)hLX-fY?{oOM4hN!DOx+V`5M7`Ry@6>OF|l_!W1HOKfz<{8 z;8|M`!dTf0Vl2lrPaRZ**|8|l$7!E`Ac;rwhZ-*xc;zGz4C$MJ!DQ4K7|AQgk%2fl zWVtXW@Q&Aj{9dJm_pG#yv(EYS1+SBKihd%~9sVWx9^MHUD!@^5xy^6!{&4WK4CMJh zx;e0U(%XhD=PgQ1_&pp4#d3J3_FfY?u>ef1gZxLG6WlbB|m+nPZP9T26 z)jt3frqtd#ktb;RlBymV+AyYs^Pisl8!^bWY6TWZ#k>9UVkFUh{?EHPO` zIP-j4?vo+z8{H$;=i=`~%my0yjYp#q0027=P~1*|;qjQZMj~FxE>) zDW{=3KK004em>{pgicpJrnv@+%{dqBS@2jFx`?JsHdOL)PmOpeEr6@oL=RA}0x*Lx zv^PTxG%`m_rD|R%Qf8hd`3wLA9D=I4{iqF%7c0Z12$iZEaaxK6d7-M#pb-VcLBshp zD_kENvLRoKMiV2ab~Np3*BZo>b!?hvjn%0eYQ$8y7_=<#(~i0Rb>K?Fp5pA^KBq5M z|HHadKXeUC8y(5B)8zhLLPW6?SAc=(Wb0ClNk+BVJ70(3(|-g3=oy?mYuvvDCc70L zBlxhSA%k-d6f*0rGx457#tk90&)y_druXG!Pd&7odl-^f%zRE&?E|b%m4ew~Lt&w! zqU9ZL^DMCM;=jnoN+v_f#-%%y1a0S@&;7CwFEn9N;&I}&b81+y{ZSz6@)2S}%0WB} zTX)!@4T3P|co>K=!YVo4pHLiIfIp6TszJR;r&e zAN%5cbGY%dOpIqaMLh<93G`Nc!D9S6@imR8eDAvg&kvL`S5;TQ?CcQWL|F*ZlsnTu zz!F5q3K5iH7F7OLaAY_*1enM7$Ta|59&Wv_fK z+ZoGE9V*Hdo#*ViZ2!}UFSSjavt@K_bV^xO*&B%oITkE=o^=J>sTbev3PDXo(SLPsRux@5^j?ZQ|QmD?|#x}rFX6v^aHa}~ubvNE4# zKg%cC>G%yfGT_EV7i%_V!7I=ISl+F&Jk^YDL_{e)J*ND=*YsYMc`!Iml|^64kgn*? zqFcQV52K5c2;0j(^78NYz<+0I{!``d4g$af)%e*)f2D^}u|>fVQBItLIwoeD5`7kI z)okzl7qI}&9tJ8LQl6B;np4sW#ZyKZfj}ugsODe+1rnc7s3r!795b1$gZZ;sJkOi| zM9{FDN%3oQYiVi@_EKvIZND|^cEkN{l!y{qSmxz6yG4p;%oTRY!>^8Z&G9=P^C|q7 z!fMpy&yS-w`9IiIWzY7{cgZwm-^aA+US9iB)HqDJkuu~Tcy!2LagQVV59LFNgJOX~ zpsT#8n}XpW21k!!QpGUID?{|q6ESF04WK^Q&@yqV7}=YcFLVq{;{%SHYE}^p*RA@P zO{AEtrDEZWquI<9v(&gQu5?a%s}zPJRmZ#FBCf}LmOOFBg)7PcJ$Gu+WXV*li4vX8 z3W!Ff;Ebwfmk3gqBj_fi&D9Ow~s#3T18|I#|zndGlZS~zxoq}h7t*^gWz zf_#efC;+;QhnPKCr3jcNNKYQaseH_$NtTiK$W;Bntjt2PL;2Ia?iw1ByHc2C?$KZW zl1<#<3OwA+%~M|ydo9n4_k*`v0#?pXwno!m90K%_=i*`qE7)K^~{d;cZ*ZVStt%fuScCGV@g@w)X+bza{RXG?&L3@R#^eil@94{qo@=(DtLeg z%Eo;fs!#@)WO79Yucq3!msCCBIB$Ers=;xmc#h?6csVs4pJ$pNU(GD{RAqPL_S?3L zt`mjP;|hWwIy;pfE1P!=H+zcYA^Nf|e6Ov7a)~v?GFS>XylA_hZt(nLm2XeP&%V#2 zLARDZ{kgt*@aZcp@#J|=kn-={YaZxs@9>r&DQ;hkkhf2EaAu1STheHSILfXtd?M;0 ztXvyt*;Sm0oDeZ6A@?5`W+tYCfL--&4E!Y&VYCExGg|z>D;&8RwIzhCY-XP#ReUjEF-Lxk7o)Gvyz;H*^5AFZ()(=atS<~k z8!^g7ci#-Q?|hhjDw?sR{o%Dj?Vqq;<-3eIzjInGW7>uIq$NVi)UOuWgDm5^Zt`ma zk?CW5Me+1Txih%xbjMtLTR}omB~y9b00zud8{?T#s}t?JJ8aiYsP%^8?fiTIiH_`UfFbb`zXpBL>94<*9hBq0L!v)Yql!4w)6j2p#2x({x3sQ;ue5$P|^ZV7wPsb%snYIEJ|u_ zRSnyWUW#FYi6u=E8(5J1TIGrC{E&xhh`4bEo$ z5aPMBb{PqA57tnNz8wEy)j}-nCNkS5^v#p+UQ@qKNx7U#d^cq}>u>n(pB?)g3J^Ad zm0VPXD(3rWa_=}?5Gl=O2IpUrP`#~lrm_99RZ+e@Qts-7Nz8zn)@^Z;fu)JB&Rmo_@4l}VyV*59@pUQd^bVZ=dPs*1-@V~kZZuh@AHz~de()9E)t1J8 zkFGvdFw3bhrY$K$=tD?cEFAOXti4ffkZNC9iR~Q}nEzv;8(g>y#Wtgq!p^3uuPR=R zAg0n-)1@E;Qdycj3%b0Q5a$D}XyYDuXaN;0paM#eFu2 zh$8ZX^3+6B`)4LmJt#&rPaGXfUGW!FT`*DA7M{`-99-2z0456Kc;9p>JLyI}XedW- zn0KmASH$1e(Hk9plvj>#&H9;N*6{p8EF(Ur znYV*sHeHb3BdtlC)UY?Mi^V7Ly0v}PlU+QPy8FoYme&2>{KhLFs=Nm4_^UZ~H!Qui zM;XVL0;OWq^r$sAb7H2xVQf*HIT6!a9>3D(BVeeP(@I)x=kW+8mbmMKceCNlCowg; zMlGCvGZ+Q5uEru90e8qdQ1wy6gJIV%TP?C>*{TrYLY%U33cFJhD#Vz0gOd+4e5l z#GBH}f2$O>hAEg5B{`X!(ATSmGQYEzrd2jn&BTSjyX}@U+++zk(BW5FB@yr^Sz!R9H~ zHlttgig}?TFj=_0v1fGQDcrrgE34SzY{Xf3%1sR~r_c4d8_Swh`K~@ghnokr43n}= zH#{y`?RA);vobs%X}%uEB)#{-{=h6*y|28w``3M_q<$$ws9(G$Ng+%*t(jdNJ9yWc#eo zQYun^==wGc%#P}B8NX&co$Ipw)u8#Qzq@p1j*3E~+EL`(ua@C;`#)^21O6EOud~B{ zLaysH8FL^+Z<;I8cqPG)pUyY70rmrT@pKj3r-za-dMG@7D)4%yY%9X5rchyR&MVoC zu~Pho#_UaV$+4Rk!KjUg`gw-1SA%_uvcY2>{_KuWH?*RB$-MPchnxr3myZ)~g(9#1 z$apUg=L8`fc7-<-SSR%3cCE`ADF&=k`ih4g++|gHR<|V{ z&aZSlS{6Cz-;&LXdVTkI2zSiM^aTwO*IBNrh+YZdx8~ z3VXh(e_uH<_6z>yk(~PT*-us%O5WeO;c{0XEo@2b|upW2Pl#$MyaY1*erW zBSJGrgUwJV0(`+EH8QSFo1nc}#>~u0$p({+B)FX^xW!DXL?$v0_G~iLiHkkGuehp9 z_pNCK^WK??q2PppFwF1a_^Ptjp~?^0^}iUs0SA6>FIVZm_EZZ^myLHjE-AUrxIxhk z=d%@y-%0A+AI7&f3gL9{0n$}mqZ^WF+~=N-x1Z<3+y!V`LBEGc0BY6i&Z(jbrmR%H zfsoEq@(5Wt<$D}p#?s`_h94B)&Ls;mtd@;+Y+b2za1Cc)QXb*YiEs$t^SJ+MUAE?$ zfEcI>G~3IRWoQ$OQbRJ)b0Ss$V9V8_s%jG{(k#_&R()T%l4D1$&{nA&XS@Ybb{90G zDLa0RR(Vx#Z}a%sO>R?Z%TMRJw%*f@?)*LV+>orR@f?;A`)~8=e=szU`A@k^myD+s z{Ll8KNfh-4Y}Hwlbu`VeNYOYuNJoC<0qv{tjejEk2hyK)*?EZ1+f~ zoVs!?N_I~7H+?Q80M+!(lZmT4gbI|`3pB2P`#!(7VD{nN;%ju*WNmHk z|M77Z36I#BLBO)|1Yo#^kz`;|_)JL>DXEVwwUdo8T}jtR7c6fmlTBv8A6&V~%^C@R z{z`x^C{H7KF5d+cs0UXzXqD0>BZ@SpMX7`$F=@;Nop~?mV*cl~dTOW?rD|?3_alZc z7p^AP3f@qB*1_=bE%ciaHi^BOKmKA>&di>y*41>ilXbf=W9Ac_=F)@L7YMuGZXbpbYAOpiwp?+EBn?N4@CoIyVScm()sib2&fxPL|tF5+EjB;jdKa^x!WW6ikU60%-K~l zEXvMP_5BZ-SWgieZM1Zr6|NcXl{f-j^U1+^I#}YVWvU*4$G%0;giN$zNMU=?-LvPIvv|}qibfXQdvoVOY;0_g zix8yXF}f-EV-WlN#16KX0wn7PoAR(g7IkJwBtlFx9q48@JBgbbC&Fi$E%2>Z*fb(y zfw`1M+gH!|_qFgpkYidreX;tRpT>J!z$e5;p(CQ5xFs*>23*LG(JA&cn|yG3)@Lc> z)Lm9o6i#7agF&ZbO?Bc5pb*xn%-hHf9SeM~&(DgHcYit=z;=K_f#L?=sXnm-w%(A; z2bJW{s$Xu&;GN@iWJ`qd-b=7>OtQ_9wa9rKGC#&`pHD7Nyb%(uzSIme9v4)~GEmDq zdfT>fuIR?&fh_~3_^P&7gKqnAil*k+up|n%rxG|_+?}0UM{BK8Zc@a6E!I0;2gWX9 zlBmF?XDwhEi#5y1Gr$J3U!ki#@(6SAGWi4r>9o0v9m@yLw2JG1(J6kCAD{Ec> zP&d7VKpRs3d1WS;3XBe>YDqQb%cOuWi1Dg=^vSFCg7}!L}u0B>K<{h<-U&hMAC?-|ApinT(9xn{_TUFX>MEr)Z1eEw`qzuwTgE=a2k9->AJj>*jNNKQkg(2*j;%;_zbJ z#9j^PM*sIxdhnmo{6tkM-RTBjD>Wt_eKqc@h|cfMw73ZQIK`>a;22n4js!>reuLdR z!&}eFZ$Khd+(Wl-G0|ZJsEL{8Vgjoh(3xQ55gm5tFuzaPP?)k<26||^z@9n@zBdX1 zbnK==ns%TddA^6bSVcBDFtQLSzsm@Ns~&#y2o|*a(le{1<;WcZon7jo(caZwTPO>J z#Q*2T>!1AJ<6Z!GDzk+cilQLB_6}k{9%wT8}`g=W2SNDLuvl$bbX=lV{|3 zQv^04rL~)~AV+H8$!bGz&KIiJ_|zYaB418@=Cd>ratDz-(V9_M>?eP-tS4Z-?A|Qi z)^~PkE~ZLp$h(h!=&l~7U}G;Y>S?+r+F-gC-T92#))T0Peop43{Tm~Tb+-<}EsCX- z{4ogD4*6e1oZqD4eAe^z!UaQ&aJ9EVByUUqJw1ZdBnwfZJ-HDO0Q6jZ8;hH9eUK40bsA9ObitgpJmPb*p3liyxDYvSY!vLHj3bN(oM&%p5g398)skbMr zPhQYy(A8ho&r<e2>pFuccRQsb0q~BfJX!>#jfPq=z-=2_%LQ| z@&J+V{bt>k>aPqlu*1}UPoI~b)_u6^XD4Vt1iN)FpG0z-=U1Rf{Ib4V55`As{m4&~ zd!A6m*EZ+UD3=%d&`5CNjQ2+OkI*ky_N{H7F&AY^zc`;f$Wiy8{YK=a&{*$*g0Tb# z?dKj$4BF}L;#<;-ehp&uSW%*@g1M0Ld@$5-2lz-b1x#TF0ply_fm`f;BNk0$RP`Qa zh?GZSoHhf|nU>(=Kl;josp+7&==U?Y8bXYk%06o_MFhv$ynb z(z&tAe+))zzc_K|ot(claB4sX0G>|nrc-h9!;|vbIO0Ma5bpsi(TJ*qcH5w5i-_Q| z@#r^{7_?h!lPtu(*(>2$s*l9++9qmgT`k)RCJn(6pD`q@mBpQrNUExE*L-J2`g^MS zO&qUl9qshkLhJA=&42%izDLs&ra4`$snUv8`9aRUa-0&?_b!5#po=iXe6Mr>3h5~L z&UHcMF?5DpV!G-u0Iw8hfl+2@8h>VqEOOvfI7dXRSrIUFcs|RIxM`rnj9;+%m zLu!6%$_hKr72;=xU6e^?Af4?y>@!Fs0asCIlh5OzvAw@#yp-)jeUXKuun_0_*$>q| z5mbcjC2%OmhZz}MY&CD58Jl1I&9@1h(mPu7+6!@3ctq1Pon=fr+?ToGdG#hX10=B) z6Ais#qm1LH0}v`)6x5*1p64-DZ{-WlX;vB(g%tsZ;+ZLk4}Y#E&^u5ot@;(8LD{FP zl)k13q}IF+la5HNPG#@$jp!Odpa&*LcU1MSPp- zc3B2RXPK10ii=Da9`W8g_K4>N#NhGEYMq_bV}X=_OIbf|KugQQsIsy>Ms&F{mRMD8^#6JhFEVU*!nUJxfn&p=&KD@d#~>_ln%;5joB zMBuC>QWcPB63oq-3e?5v8_&Vm8j(7Cl7aLj|Kv*o*F5#!rWyjip==rVysonQ&^`7m z8s;L5-H6q#u~1UHDI(-JYW&02D=v)g+1f(B#-ohOE#i-Y9iNMg2ki&{=I&$Qyd$y(Qgx-qQU13@v^?18o~OlWZC%I$}E!WBM+c7n7d|VoIfU_ZdkF0Mle2YJb+k z5pW`lj~(dsbqfa);N>^7b%Mj&(pPZc8^ZmO9EsiOI`cvO!B!9JX1C#euJbv+>m~WTSIpdRz_}yGh__XEfgCJXiKdm*IiVL`6AhwO9PC zTc^+cvjeZp8y1uQO#t!FTCQFd!0zE^VUgo|2AZ~8-xm-+%bBHz4X8SfF%kEA`|#YU zOH)5R7b81}K4x`m6(U+lpdtVO_oxOkg^?>>h*W+b0a&}f-R120FU_nTc>lOz8|B##>%K<>Nnb`{Ac4h=g7bD&QL_u74R+nV=f!3#EEs zgFo~qbHnR)n63(XlKVDre#H%Kbd(JW1O%>|x&2lz(}o^$CNZF!`KVdxkqblq^&%}0 zb?SS-N~WsfUcu4jYfK4zlk10@obgLf@-7e48YZS#kC1-~>Udew@#ne*T@e}v^}1%M zT5yhf)u_EqC~C%j@#5lr`0vBjmz+DW)c6t8(|Iy@VIeg)H(a$BIE2TA^c%^6w19M+ zti9Si4xL;4;&1BwFM1%@K-$yL0LM$NwUNQ{clO(T^)8Pz)nD#b#0e`A@6RqX4x;*V|`uz2coRv*4? zkCEO!d(0gFc;{uC>Iex11ogY=Wnnt!^rRTl3*n&fOeha5RgnIg1SW<#|FB0|2@TC2 zHwBwL5*PC~3NBnneg@_``&8i!<;Uxtd29-ty$tV`wM!&rJuo>x5h(oWZAQ5y%?n`j zI^WpGZ|v(+i^h)^Pv!&s`firadYMFMz1a9NF@4T}J!0zovdfSnKVNzh#LVEbVCdV+ zpO%2VqyKMV^3U{;?Fj&Rgj?e0j4rmOB}={vNF1=bsh~bt)g42h>xJva>}da!;AIg5 z&=wa*VX-TAy?exP-QHAazpw*8eKm8OOa1hS3y#kw_xjvSZs*pQ-*qpg%jrz3x>eLL z=ZF>_LbM*gzYzjoPoB8F^?uG*_<;U}Xd>U@(WeIUx0%@{^Q+Gdvk&!aMBlJA>^#~k zw;$(@*v+}vCVBm(O5NM`iZ_yfE@@{JjX~~HdUH?ek*C9UJhitgksF0ern>|Dre4yQ z%r}|{Egi|EUYEGyr6^pO0O6cv(I!?vhKhHT-2iweTZse0b%)&QIh_c-n!Puclxt@` zx%5-|Cns!_m~f$)c`rrUfuaT8{1<{Xj5wv80=9A=-FM26x#50C$V*Py|I+-`nZGRU6OuM`r0-AY$J`voKOP-QAJxPic+0Vr-uOjZ7B~KO{6%p0(USVX}0;I=|)v= z3}=+63@P^XpNQ-;IR*M61Ktd=pJW>3)wnz1;)Xm3&F-FF(f-r5%su+fjC2?h<5W1kV zSY*F&Q38+V=qGPsPLrk~fx60GyVF3*_vdj^y?)`Y-0BY!ZZ+&qKXG)Lax$ZLDh#mS z{A#E{XHO9Efn0!?%)hR`adY{2eXgZ6A@;cxo96yhZ@u5Yi);RKHS%9y|3L1u_NhGt zgXt7klu7Va(bIdEBPwqcqs+D$)CbBG?S1Fbddfq`W5QAoMTZS6a&<|DgLGv21n08A zSaBaPp>pLkQJf7o1Nl5ZiTxl>#}7MEcCn{y(bM;`2H@MbZ0xj4E9R@KBxKHJTen5N zm>PV)bpPayc=>%kOFO|&9fL6039_Lu!0~M4$#IHX)s|3($wjw(br=4f z37MVy^EP?A=*~OSIHuE*Q;O{mot$*01yYE6>H-O4&D2!2OEkt`&y#BeorNO{L zLBHiNsPv%fQ}qR3ff&h<>WnbwA>^7o>QX`VqZKGPv66!#1#HqNjg{m>7!qpuR=&ZJ-?!_&lA>#Avp?Y z^ypleh%#>fbV1n>5dumhGxdsWDJ~Mnnfnqz2%LSH2PNZ_uuF%_u*<2{Ii1VAA;F631R^OAdt6cb# zF#V`6>f!Yl&AV{asj2$8B(%O<>sE=jei2aLldouG$X{MZ5^SY`>5%6 zD#=_5_M)BKFZ*CNH^8m0w8X+MMrumE{(4jZT~e%`~$hp9ROh7*?8{Cc@sQk zy-PbH`dW6Ll5PM-HAXu_bn?rmvhY*)YJjmd{$ue3|Hl|fjTG!_d>K`DFhN^wp@f(1 z)&mA)S7SFsn6j-s6ufKGV2=uIt|RkFZ5&6&R=;yW#7Uv+yBub#5!0#HMBKnJ(u%*B z=XA&7H`)VP?W-sCwguCkbU%I~w8W|LfcxIguu=Tysth}B`78Tz0t<8RkC>ImeB#wh+>S9Dmqx>G+P4prRF*v0~YATT&T|q)fZ*%uaHc1!zG5amC!F{aT2}( zh*IhvzIATByUB3nfPGT4un!j>PPuILJh`G3i!0Wo*Gm^IOIm5L65aRN=%a3-lX9AT zUlwDHPq)B$f(NdOj5ART_W4#psp|7qc*D;N8iERi(f(ioK)eFh7~6^kD%h)butxU5 zl>mJE2Ku-`Xz@N4k%NnYrB5Lc8=&de_o|}&7UO?9$ELb!HW>c}x&@?i^3~|Ow|Vh# zQm3DMHq+S;ttN*a#C0lk7i@H&>#iHDA5YHj>-D<)*fiN= zZM4p}6I@+ZZw==PT#Dv!aY$!VvX+3?_P$SD$yBp zI=%|nA&%Ee8|M~!fs|05g;}axYcYOmsJyHZh4idc7jsm`OG?U$LinSfK3+b!{sQo5 zbNiDCKXphP@ANszMDQbxg*K-3J!PD28uk9^Z}V`)$&+sY5Q$Y!)HG0PqEBrwq4IMZ z7bj(~g$OxxGhgwHGIy&0rpD`=7@b`bC*TeFM!dKh0^lIo3Xbnab(Ec`)04Q{Ie0-g@JESm*iW(IXbyh2rMW%BS2Ixij%7V%=O}80+ zOLke)YW*d#_o(-vFqZRDoH6HjhAX;pg}sx6O8EtAUP8?`vDIoCnN+tE}aSU?>Z{_S$)5uTEP{T6Ue;W|KBF#Y9P zAZY7!1dZEIb~FyF#f5k=aq=;FMD4<8vLSajh{} zG+{NKF@n=?ZHSd$6rb+>-P9)uSb(*T6?Iqcob%LXW-T-W?o`4@9I^FzC?T^&s0{Zv zrb~*))>w9BwCF2VSIppaJZz;5yGtRNi@JXx zhj0Ke%txBx-DQ-asg?CQ5z!vpE|SUt-7j%7+12rrJnhg-EC4|7c8mWEYn59=kT~-) zrH#nSnU2Tbbr!Rdr^|T_!NKsD!CKmCZ4PgSpmv9NSpd1H=}SWVz>oyQ8C>PZ$?x24Ta9Pp;ahZ(XL zed}nnKZ-pqEgx?VXkK%^*me38eFmt|R(dO{hW88m0H3C;P2XTLM`06G0wh-jv-eqE z#sXu?ibk6=P{n0akTGR>$n@rtPT$;A-ds!n**?|_R?Yxr#mRo>xKS<)7F5sv5$mAi z09BQ2EFol(Kyf_uSpY72gkgs$*iT25SSg$oSO5ApRiYQT*)F}X`xSprYxnh^@!uaG zz5V_wn3)XmO-%*n83IyMH3gw=1Q9@jjh`O@ho7BKQYytZ-Wp!&P0TFg6JP+cKHv_9 zWHOxvV%MvrlHSNh#l-0$%fA(h)f_lLfON2I2dI+N1#Y>G)VxOg%%_p?=?a530mIPV z!^9T(AG}k+j|0^vmP@QXmFG6RBD;bkC%eVgywO{KAzuexN81fL2CQuKd_D@je0BX- zRRw$Yh5tj>d&jdGuwkPSLF|YXvq9|9*rRB~Ce+?V>{Yuh+7cx8-qBLKW^HP<_NI1G zZPjSeg=&i$N5AuZ=e+NCzVrN@Kk|Ei*K^(Ly05#s`NhzNV-!9n0-kp~>O|6UME*&M zG%7(0&C8|;;$%Qp#zD!cIwm2Wq@1Jn#Nt?BM-#C4lMX{x5!NtOt{>6va1%}dwk&!C+a zutyiVtzZ8RaSv7Osebq759QJ_dwe(&i#5=RO|W30S|QbNRPk=DU9 z&bi6{adX6>vEdCeG%KYTQ-TCyqgCS_zXU2wV{mb2UuFS2nXKXce95Xf^?}$0dhNcw z`t{2FDS)<+@P?UM8YsZ1OAYla723Nwqj;oCo{116GD}q7`y8gFN+U!E<^t=dnQkvQ zVQ=F;q~VN8krY&9grV0m%C8f90Vtzra5Nne*<1Er7MN1GG1mYGW=O#K;xnj3?h=Vx z^#SlmK<^$y9+Lztl*2zDYlt_oWM&W!q^Yz~o5~e-@04I%>z9yWbAJBQGK>u2cD*&E z)`+c&dsX(E0U7I@)a1!&Vbv1PY_@mR14YGpLj%E+C;6LsW#N+<=h8f{B4%l1ulfm- z1Cwb-duo%*Nqq#2g3;g*&2q2{(u~ZT=+F1vjwh1Qi<*qcXPwSYN#5W^=iVd=B%h0g z#ugX|^Q3u*q_!n09m&fc|B(OA64<^c^HVdczAoJG+i0cmml44&gM1b7F#Ef?GhR+F zm&=p6&CNBnM(r|_&3(?j9s0;G?3-k-vE6^IxuGNT>;EKO`XAb*qw_1sMXDN76K(dB z;;Kr$DSe=dv`Tljz58{GE0Vj*8%ThgS3~MVypprRF0!8&iTv7+E#-vJaMA#9GzhSS zajos33mpio&N%&QNQMeW$0a^HI>jj>Dxka5V21l>X){g%offiXh(drS-%7s&NUd6} z5j8*a(U%E#p$Tv3QK8~obgHVUigZ35%1?ZCLg`vpge9=lEyju!xdS;rJ+1BjtlfM) zcUkv&FM^*I01&`U$711-XGDxfDHdnC5#!Lj=ZZhq`M1B(f8@DM`>A!zuS)%aJc<>A3N@Lr6WE`vqF#oJkvEO zMys2MBD^#%FEP=xAzQ_|Ir}KGn7T!r*tb8J`w*BML33d=eZ_XIonP0loMfHtoT1cIxeTVsT(%EO}LCdeakMv5OU zPkv4FJewMNKX9*!`Nh=y3+4AOY!^gN6wkO?4d6x7nuE2#?LKPf-eDdZrwYwMG6q<0 zdb|RqP|iaTFPRccs;hvA>vJVz->NM;M+Sl#dl(%nQj7yP$;ic@sq!vSq8LVrzfftw zM49z()`gD5OV{N3^(_`!?Tb8IMILv(u0|`0jM40oEZ}h`J_hcd37f!<7af-n z;Mv0#TzBS20cPtV5}*d3mPv)smsfQu%ISW;byHRf46aPl2$4WUWE3Arqmq1(Om}2K z1D|1=1V6un%Eg~JC#+5U@iPqEu|8KHB+wXyTKSY2+FjJeIKj#8TagD+dXYC?JUMo;*pO;qrLd<3YMO+rwk7 zyA&{Dm4-7ieGpX(`U3NFc-L~5DumyVuk(v?5dCTJK>DZCGn3~1{(uBv9l$uqrGk>% zIubABSE4Q=6Vs%xed?!jo>P;}MW{SJH+oyTDgJw+0YK$Pmg0yaG)Z=pa)=6`E#}CP zjvfkkqz8eO<71gdV}QhdI@()KyrX$AhENj1=h@rQGF10H4c=53Q8!EoiBy!{h~<hB^<}@m5K>Z79tK8Gg4$u z6otY4lnc+N&M&uFEt0igQ-AlpKP~{`&a-oIIoCft zjFJ+IK1qgt-9q3#K)LcB;X9udTkVq04H02STZU<{?@&B7Q3jt&l~Air!<*eni6N!9 ztuH19L9z#O^}S#jNoS)=KMbdI5t|P*O+MLp3Kj^?C)npYJ^XubGHs)$&il@pgTr+P zzdx;nuus=p)$1;(dH=hH_y@UQ)YXVpThCZpjLRg+#oF|KmgCXS_blDRt=?@nC%UTr|8+ledOHJ17 z|G0N?y~ch6A8V3jW|2eM$v}N)tQTBSH?&KIgRPAt5>Nmjk_3G0{2~vl0C#(P;f978 zg%Z>@5mKAfO9NnnNhD(247QmH(5^uEdRPg_paLX6@#DV!B+q&~0mzZx1E7-Sq=R)f zro@G0UWkCHg{?|K{{49n!LW^wrpbtq$V4zXIc!DWJXsi{Lt<0}2SkZLp1e*>rs`*! zE9p)(nCPkk7da z;?S@l=qIc8nW^xG5Kb%A$4pQey3B<;3eCP>S|7aDV-dGr_Vr54tp93ZsrNxMobUQO zgzvo^8uy$`L1HXTo&f3rA-VFtng%4I>Ut)}SzI@V{U?`wDs;>^e-iBSt3r>~@FBXd z=LsDQfYIoW7EhlJWtCH+;XFo?C@lUW4NGE|LK>HPyGfUp@=HmPLhceHi=Tw7WLC57 zSk0W&NU)+NqX!f5IY~!|v5Aa0F)eJRJ2#LMLQt{HQT9FjcJl!Y}}@ zcmjL}e1F{_RK!)oltFYH(u3+CI)s&MpwUkHjQX{5MNuSE8c650l}_wp(FlRgYGxo| z67=0WN^-+*OQ>8l+|T!ihjo2R$a$WU2> zk;5>Uo1mb}no}=)J(?{;lJt-l2`-Kl0NB)G#ug**saJ_pW;!uP0ok}}n~RNN$i>NS zd@r~~9o7NsfXRO{UAoW>f7D59T~(7N`A}Y!6SAdCn_Th z5>4o_yd0=Lt(~izP*?2ZLSdN~s^(M~6P=<@tG&l>id~-mF28vB?oR3~;*6tg;Ry&1 zl`#gABpa5l?I;3)YKj=q1|}XV(%}7>c#$MB7^@f{?~F%{&5Lt7QeT2GGaqS&PZXJJ zjJ5+O>e!*jWhPl{uZO>H%tRbd>#;rj%VI<^Rrq0C1$*|mJo0_l@itxOCaQp-hc&L& zIv!y>jLP^x96FxAd|qO7zc^Xz@~o!i|0A5cf*huz9zec@H@G#Ak;sVGjh}NR%+1x^ zP`$HF-H#R&q%BLe#{DZbf+AtfR6Zb?ep`wa-8NNgX}LZ0WJ+}z3|kfDK3o;&n$9yO z#R4P&vT#$0ou$NHFa72k8aKpuJLYT3-r#ws51PX{9n6xksCA9{aj7HgcF=VHB*r;0 z&V5!@W{x}#Q&#f&yScvIZ}S=BuA+gD&pfJlv#N&jG?cDu`CZvf+;1bsGNBY34ve<1 z1f#|XPhH+R0im+8HubMF(Lzs)8A{|RG$CNpaJbAI)Np+cn~?(WC=E0!R!f;QBL|7u zTa3~O#FsZq{k=}%26mTx;=a-yCQDvYF2}^0lD79oLQ3#GyhT%Az|f;n zd%zy}j$1#fk9&2VCD~_xQAuuUh#>O`0y&LUT2F($oG2Aq^ z?4G-642I$khXIAJe*HN=V%6Zu^YF*=M-_Q%&e~L1#icW{)3Wxj8u0!0m^N-;Pe(8z z7x@`t!RBPK?jBVhAK0KtL<4FIprGKRG#zm&q0?*)T4?sj%toP@oJkYUioIuzKtISw z{$qj&gN+mejaCBXZy_eb_&_5{%{itCMX!;J(*pUb+o$)xO~V4}+?{tjKD*ZASkHrh z9#2dhF*G8;j+J;A`oALUKbDgeyec1Z4R0}8>FuXc?&5+peHn%nRSgi!HXMSVX*24r z0Tg{v31>``ns$qg$l}C7Y>mLqjkt8UNm+&E9P~ipW7Dnvvl}iJY7I%xwK&mbzmrs= z_~@s4lAx3dP`a;o;g@rBo*u#mKP6kNhDL_|Tz5QAM3-s}}fX8esxyuK3(qig0q6sk7RRXE@tVA}@q*3@J*uv{Q0Hh(#fcs--kNNYRP41sDyLQQQm;bY zOu<6PNDYGehsz7@>>cs(BZ-o3ZCvu+hc_ozdxN85RCt@}elOOT44X(}eiJky8)t;H z>dHy2pn)M1DSGFuDn{VR`zS7NT7p%|kPeQ3l*R$nBIapm zYvRtBhreQ!HN*&lZvikB?p0*<^5iKU!f4G)ec7Fg3gh2qr3zlp*3IR1A6!?tvL)|H zFFec)7@e}VR_rUzHu_*4OZL+jhB!2_hKsR;^cUOS2T{MEPKxMm{yXh-8FT;L>7o65 zF`e~?xUR>l)NIE^Cf}k_QRHi&%bv8NF8>|USK z(5G+K{N7buY!4bM+oF!3ebrT8@J6WF>oLQanzhnTyJT0Vq4bMn zn&ip6blLfD?NG1^0)heLk&~3QP)WnB_8ZiJh<;|UxG0M@P#sn5D?(j)DrWDxXF&C zxOIRWYW+%vqq8JZEPhfU#e+o3?XDHX2!!x@g$!_QLc<1K0 z1U{ykrq{xi)oRf>D|6E%r_)Zo6M@1U#hh1uC8ZbZgcpelg|YpL($OEQZvW zHaBQeKKGmc8K4?bFSe+InbtFlIm@so{i9XyV`LVXczAvg^U)TKlH5Tm`pP$N}Fs`^Al1pqM3sg7mD+$4h5Vt9L?+r7>x_@OV`g+@dcsG5 z200}$8$&4CO%Pt(?dwV*7@Mk^^<#$za;yx7GE>Hn!rh`>DN&`m(PiwLfQ1~q!_-IM z*9P72u+s7#Yb(hWl+!RdJH9er$Esn=&r%E7KU=4Gac{KlTu<-uf=FJZCJHPwOvYsQ zaDc5C1#!D(y^R5ryQu-A2tz5UkjI|oFA!!jIWq7o10?I#$|WMqj*|+bSgxKZ{(LFM zV&bv&^WN{GbALJ{f4!g22XQmU>rD3*r9mOIKwzRq-chiHzgW^5g;j-vl7CZ69?k;g z*|(izC35}Y=2$G~&EbyZZ8})>>e8d}+61ttqq~i+X2;V@S2G5e%nqG7VRMEZ&*pbB z%qReitTY4vNN}gcYBv@BO13P|Uk6fLWXj_+v%9dm1m;OKd13Z-kdeHseWDksY;z-9 zqlIUAaC8u71r@?CmmS}*ddXeBW%zrFTvv)APVLrxRNm#Y_zG1s%AAN%erew_OX zxjfrSi4o~$(C%Yl9-08dLN4c#xS`91d!#M@n^^AuUMb{yd!=0px;0OVk?oDEX2-e; zv_XZ{G2#txfW|^q*0JUL(fDG7QSUD&n3N9#c_|cFi|!qYdolDRG_f-qqc&=EkNrC; zQ%tRXAYIRTlxM~JX!mHjpvW=FpL}z*_^eJ>qL-BY2A6jF;3D{u-7QaHp$!Lxc;~hB z`IzOv^tN_Ju?|V|`OPKAda~LR&_Lrxx15n)>^_ss7-I|9}gce;x#V%#M% zH-V&m^+n96#^xRKfU(EnwNz!vB+=TsqcR%CBqeQ9HL#T$xlWie);;x{!089|_eMta z`)bPF*G%_Wm?)%)s_mBdYhtmux1%cfQ-8UA^(gntlRb!?SpP7M3)b#@PEybHLi7xW%xel}iM42C&K#R#}GS_d|oCpSI0*Z6YWeRk=UnZw|0 ziDf``sJ~|Cs0-Udk@z+8@GcrfK(YIYFrGpF1U*4v%<0bdEkB^2f1>Ay?{tG zvPrBx8h@bAS!JRXE0s|ij((_bN5NqV#C@=oY)h|7Fb5iAo(5S*tGenAnZkLj2^TAQ zN&x@D_h=;q1p`sni((40EBy5A$dzU$7E}Gf{%G?k zljP9D0eBEx%?a1QV+6t|fM&c&umapvKP!~9#U&j9I@Atol7ZGDKPW)5I$QEmC}8(+ zG=D*CY4TQR`dcE#$&;O*{tpu_GN(6Dp z-qx%8pj48BQffvlP3cL95UYN58JX~+#9XzL`&KobFD;yfZJ@bT@1r=$D1k=BC5(_9JJ2n(EmlommyLrlEB=&;W|dSX-GNnV0sGx6m+3ifj$AmUdU?^j z!y3MKwy^Bv_4T!nfr-Sh;#xoBN9l+6S@P_(jm62Hi^Q{`KwuB+!Xh=S{z4jQ${bY` zi^-^|OY?o+zNn9($j>L`6^W#kXLtHrTGDMMPry4ZirM6RAGe3e^Wi*%MmBLfg#NFconZ-k;OXpM$u#DxQoKZ1bL? ze;#suE`=u$6?Q3wsH&(yqe+PyW8`v^xYZtDk8E_$Q3td%$#(Z(~KmMAtGAHG9ggdEdF&`eQ65DFa z8m&w^|Ni_%f%5?}Z0}cFkKR{-Zl(CJhfR9n{adqfZodyCT4zKQ31C@ek;_eW-Tzl1 z_dk=k|CP!$V{ZMp3ao;L3(`K!M)A5{R<49vMuQtV;*B90R(wKgIUH7?E32=}7%M8} zB`lsMO9U797$WDAG`TBl zCpU_<=Ei+mC#oy)%9gi0^Pvaho72m0(}=PeWOQkRjQ#1YA;CS^4NWgS?N*7yNzXTw z>OUIwpW*txNDxA|9g+>G8yi;Nnzva+Y|FLZ+ociTE-GzwJ^;`8znT$VvAM1q1>WHs z1sm-^ML^tA(8h{rMjn~?c^(D|C=tNUAOU`qIFNpSy-BP}BO;Hw1X$`Ss3Ohiz$uMTIlH3G6OIM&BjjN^MccYNf$xSfc4R&(=<&@DbX#^-b?x zr>0J2TjfIq35SX(04~3BJVkDM!o^vKTc_8jS&G20J`+(woW? z4z>e7{vn&NPsGnRmCL#NQTK#KtJeN86~zq~70#xg+@T(yOcgl*hXe<^poE5x#2Yr) zJB!&EtD9E6@1=75Z8lB4JHQHAnlTJub~KsyU@EY^JhLB9whVfYMA;SM|09vRLfyX} zNonp?TTb`NT~18AH-(a&$8|Tsq(fTIpeGIcP`QgX6x+FlwKE*mZ{LeQZ?KQ+H zzb9q$6da`2E(UA6cB-t7feM{!&jsGrWRj(1_q41&c={(tx>Acl{7F*#+xV-|M2)-9 zVRq#Z3-&Q20HIJtn0iEk>nFoFs`HT2xVJz&Zbzy;PM6-(w4&BnV)vrN9(;bRNhf)e zh11r&^1;YDN}CSx0E?^Ok%YRbsRTCmW<+I02un|hdc|!teY2=4-WWaaG2f|u;zRVk za-nIEc?3->ExwIjr6M13D$KEEQ=NN|_j-XE>2j@q+I=qLz73+KF#KJoNN4-!g7E5? zmxj?mT$y37k-8kKWP0OAfOsU4nyhz7jRfVxtTrhYsngnT#OxOI<|IBo6@a9|igHH5 zfI|!*p1?9={MTy#^k@ExT!S`7qUOVgF%uOP!=FHs*-{JmCh6{YdP`@xJB!0e1!qv} zK=~TNY{xpLByz3X@7no7ORk;5ksRygg5^n^&?|+Z^Ehu-VP8S<=ce-(?k+*)Ns=C@S%*QMXW=+NIw2md^Cid9T1^Eix7{EKr z!-&YDG~ZrcttfsO4VeLnP-%7jg3(%_NU}`Ff-yNh%e2qxtL$$puNg?RiR)fRU4y1Y zm@D&p7C{b=hBiv*dff7BK2ivBjqFM#}RftZh=FWWsQTPLC+DykTbW+ zZZ^YCSFX!%&lD;WE!eb9EbnaIIqEdBbsQc2;YbDN zkoXMXx)E{)Km#_{6u)ld*jQ97`}t8P35!(Ry{1q_1%Da?f{L zCvt$p3zf7%Y(?1Hm8vnj$x66>P5gc>gU%7Ml*fa8uek8nTd(F^oldDOukL`SUp5koVxzrzWI?R55$np2hg;5s>M3*DYKe;NMA!daFYhD!|Mor?DQIPbt_lk~gdF z+*N8!hKqb%yk;*s^V#)bB+TD8OJ$HlWBtI#kkKNgEl!9RCm8nuIPw#zG#9G#^j&R+ zWlQDLhwmj+c5e<-mHbyP?mt57KbE^_y^2^)x(oV#7*v9;p1EgKC$vr$Bi%X4dVX^>D!+QaLT zsg3jOB7e&v+KdmZ?A=XLK7ESKiPti)uS-iTqM(YKhD$N~@ZVv_=&bE#3R=?CgW+qh zR3>0rt8ZFz?_8fpm8+Dwd@Ml~ZSNY}->v&mCNZ(>S3If<9Z6$70Xv`Ks zSa=;v;^pNUguq_FZI@XwW+Q7Z_o@tH!Y>^S?R2 zwDo*(Zt!8OWcY;CO;WSw?Nl+l6S+=Vo7aoAii`w^?tAJM-*~#CgVWK1@zL5<2g=xp zS@bd@JY4e>;RCU!?2$|zo9btVRA?euSAt$Mg9AiQ)oY# zk8l6|Cd$*+iL@cfolEK@)p2Wt7@e?(m`Y%O842b0+?^FYZFZ}`R4EBa_gtr67|Z%F zSHmRn<4d#kwEN-xi_T6Is6UDoci+Xp)>`v#W)I7A7s$i;!8*R>gG)@ zZ{zK|B!7gLONZ!e9yE24pHe^aA zddDj&wd=8m-@lb>L%opmdd`sCHR8K%=-lNq0I6i`{fL{`qV3xAWL3dSn0`LCPv9RXJ@ z&uC~CEia|M9RB=cZw^Sx7^>IcBPUNISK_2vq(MV@NHVEcdK)+tM89fAiEd3k_|SWo z!L!>!ZfnEXQ_Y2FS~O9f^5i z_)y6~{Ww^bPNf|W;j1xH0oC9*KpK@}B-?DyMAbEr^el{WO3EqHZ%eJZv!+{tx=+Z* zBtGUPZgncEQ0#o5{G=ngx-}gJ6ve5U)r_&jN@4$x5rZ?mU$Kk(R)h&jkN!V=l(%X!U_OH zSnFT0oQ7i>r4rILevYB)`jwXI z$&M)e#BDc#1abCm^0Qsd#I0$1xg*nbvRjHF3Fo={@6{%_>auFYD_bkp`VGL-X1ioB zXk8mkIcR;REgy%thGFbV-u5SC*Ix{SH?M>bfV_t9oPAuXnrJWP%G#&r_>|(=-1?*y z!oUGrO*`>&xPDs-t|)K<*h;y-V*N7xBhbH0GQl$=$$!X7*}|f&WV^}T(Qm2Q_83Tc zxA$GUKpn4Vx(nXAqunA=lSFnTLq(`?#Cyxb`tHb*ZD!eeV3q6f1EK0Hp5Mvk63hw} zcC-n|-^{w;HN6e|dXbEqcPOi^L6Dv5qnscZd;Mvh#9RYVzV2_esdwFZ)Aws1E}MU$ zbZ{<8#RyI}R&q)I^?t^imP+eEB(zX!eyU)i5pEXx{vH?LmYNHoTFd+m^NVS*&_^9R zTr)n7y;_gC<45@#sLm4BYO*3Pw5b^-Sxubm$knxY`E=O5%QDAC$=R9Km6(_%yS$3o ztFEWVRn|u6+V{)zo1))*SSy-U+a&#=_-$r|CJ-Ylck5FAL<|5Vp-dxlbh%oCeMpN3 zo+sv`sXX{#aEbbZdPpv4<8@g@#d4~IZu=Mm?F(iZ=rS`_sK4Qt?;1VWi+$R{~2>vkn^!ny;|_v)tyt%3*C>@v5~(+7=)G! z>P@KxL_y%6r>3|~;g&I52HDL{sj( zHvfXqlt+okJvWVCeKRgBXxmu%H4w}qz1(L;>{POIkeFW&B?eS6S7xLKhI#x&o9v0# zYgdOhSZzp3tWLF3XWb27X4FATG@6Ip3F{H*Y$cwtS3fXy@yJWOFpU_DWr%scx^~mG z_Rnzl%1N?(^yTG=lg8Ee10x6Og9PG?FnUBK^fJ;#7YqRjgKssb}yT6?p|KqAgcO0*dzp?d1zWWN(ACf=Aklc zk3h-D@-!J7mB+K*nT2DoNit7#mIrQhCU7r;^6lI)iHkrMdi(%MzS)~&Y5Y)nrkd;aHwv0RPn>-vY+XRu&GO$W2 z(m-gW8fZW?qV$n5qyn_Ea6~tdl9k}Z`I4lUOcR#?AS}6RrIqx3Qlc_V9OsM=Xp~hQ zW_Zu0-SXU>vR+LYAW?5wYFOC+)#F7rQ!EKYgF17=$%&Cddy=AzA`}%k^pZvV^7r3} z%YB<4Ma2Ja>F|&0{;`~3{8f|0TX(MOx@J?%n3AC zj%aoIIpWHaBdgqf3T7unzX2ex%OG-t+NU8DkQ)g z^n=Y@@5LK$Svv1?D7SUwfO}^=1hwQDA09cF*D37k^V9PNyjC&Z-T4bJk@Nss{Y<7A zkM8Rmp^v1Bvsc-27Ai_^*DCRTEXhgvc z&BE=JWi^IFFFOG9SL$BuFi4-qs^vbFs{DOABY1T-no5TfG(WK*=HIpfKkUEIM1KMk zSkpU;AGa@9NOT_A_=>3tfpHv6VZf793BVt8LI_1EteJi%O+TrN--*3^K&+LvrG*_` zuvao$;b6{7F~DEqORHmJ5+ZRsSt;w0!KcZbd#fm;{@AakH;0m$m|vM{U=xo^bC4(t zx-Wi%6?}Afl0X3_hHbEnGSFy72A1XnC|?JcK~nVx{lNzz#c(LxhdH0t^frwWHurgD zRTOgJsURe$?a4awnzu7SW{^`Waj38VxSa!EzU#G7^`bt`^Rz3#yXrm~{_*ICwba(` zUe$|b^=q%!hxol-lT9?%Siwz03AVTI1OlWoK65MAzxC(*bqU8aj{MNpFp;4ze04U& z{~yEFe~@$Yzslv@bxmsgWSo-6lq5a*mP}Uo^ypka>nZVhl02&@1p|1&gd}w!gO#Hr z6_fkj3L}<=xc(s{NGXYvQ)GT>C$gP1_Humoz zpr|A51pc}8XY+~PQjKNN7Qt(-A{vt|T6&`Ndc9#?d+vg#LGQpxg5~u^ume{Ax~WSA zmCNGqOHAAoj=Y}Bcigl}}9&v|5e z#MrpBWOWV89bQ+lHoI2#=wavK(aNl`XZ7r^l>UyGb+>d(s@bepxVgPajX@5x6O0gv z?$Qte>5;}xJpRk;gcr&c1Z*WsCopqp#&_cm$>4W_eOO+fi4jwGy9XwI?4i{!ga=Fg zZS9%6p1uH!imZ~-up`Y_#N@?jQ4Bw?N1^vhP}w>c*%cAIGl)D~044bB7pF^Squ>G0 zo6*natTM=PiSg)T*fU$j$wxkhR~{fN^8wI$4-mAec39uo!eJ%&{RJB}qt$|qi6DF0 zuyFOKmTWT-x3%<=TiYMPeYMy^2zjO1f<6~9xWnS9Kud{pt?eOXE zidPu{lSc`FiGe1wVE}(1=o3I9sahmzbbTWql0Z0Npy#bkU-_is+)F!K4~ zm~C~*RI^>XTQJ={pIv-A;Vtr(CJ)kVF_$$VXFGJRUVS-@!@T8MrT|B-c5L|P z5S=%W-FNIt+w5lX8G#OSQ96Q8XYonQDzEC-FHcflUB0iU8~$bafmG+e_8|U2j(qv5 zFK4a0AnJ!PN)=Xea*eKKxGQK_*RULATDGf}BM9RGNVBt}C1+%JI3c+)GW~|+RB&#} znB|FO0KX9VqqkxP&y<`1FTzcPH5@cU^egiSx(g+S+zl4i*8U0b{c8<8;??K^Q(J_s z&e($oJW%6s{=6N2Y5y$HorA-Ce0IS9w-{qoML^7mUWJGpUAubw-sFl3qK8=LaCX7qQ z-_%&M0Atl1O||1ME6x+thAd)l*|{ZcM6?_pJ!C3TfZJ93oi7DMK;TISZPq%&I#xmS zMgW33nkf=xl)k>n1(i<3{R|#9&ZHyb2Kx<>QN)(;pX*iKb;Wxb;H@ZI0`li{0xklH z!=hsZ^Ki>6J0RU zen`XSl~18VRSpF^F%2x`SJ;+AO!AzTf<`@!qayKJJ&?*WTDny_nN<_eY}}MarsYLu zs?_qbQeHNx!bE_WDk$Vyf_hT98aINkrp4bS-?p0Nru&o!X@%Z()99>EsPU=(M7m|R z{Wx0fm>6q%L8uC7o;MqydUtVo#=w*le)Q`<=G~<=9 zo-xB2<-!FlUCYcSH4c71Zw7P@=GtRMv45#aOZ z_dTZV3LjH~u~Ej$pj^>ZN7L20t5LO12|9t-Ijbzi-gb6ULAx^HyT^Bp)*T7nb%-4@ zScV3P2XfQ%!SIoi;IcM$a{EsnPI?Rg-H&~u2hqJHT3b_7`I`Akxp9LpUnkS71&X3D{^0<*aRZzzK+-aehw3G7pdmk5vwwP)*%EUPikEiKvx(@y931)jD zD?#jyBTPEZ4r-MtuiwAbaLa5B&~uJNQ&tY9dOFW$w=O&P^V(Z|NwOzy>B>cx z;~aK}FFdCs{wjUM1O`#3VG0XX4^89L4n$O(bz(pUon(%fN0P&*&axR_5@t|iFTY;7 zzfaxwyIc@8tNayq{lQY|&(zVSV+M(cR8QX3seF|Gys8>Ia39=6$14)ejiAx1qF_xU zK}F)UGU63Z*-6sNjji@@j=e2mU*6P?)&9Y z&vjAnnmih_C)NSkrR zvYny!!W&m7saK^37)dFyr0`)nc2^fC&$wFaOlla?iL3(axrLev%}oWg93zJ?1#Y8F zw{5g$QP`8Vbimw94O4aV7j4Ad)rs6&Y&oWARz~HB8hw`_ts>)4B+wdRMe_`)!twh~ zx-J3RK~Ya$jeRV!4arwp2`WpWT)69FwBg{ApBgM*?DSSI@6QuSJ{*7?{F?Q63^@QA zy^Gc5B89LjBBBtIoLY{a0Aps9MkR+P_5m7gMu+yOlv~(|&pz&3s(N737H5`Jqr1nt ze+!;XKl6$4%)7_5vAb@{e_u+s@9?O)atLKMQ&Bc}J4iCBk&#<#OT>%p%ik!c=)cYj z0TIidcik^{@2ajn;J6&Mzi9q8_9>)|$SVnqvcBF$7_J~}CRibsjdQcNgWs!yj}$E%7-pYQi6DFwE-J@8-VwP| zr0HTxlUE_DrI1M%`?kKr(LOk^I}88(TZu#ZBKeq80==+lfl{{1h{_{NyN~5_O#&^y ze@fT4?)gQ-yy!*p-xej|!Pm&3FnACJ61k3wj~i$z14JfY!2(w{p4H5ZM*?K>Ob?q8 zx4f|e!t?Plj@SIa@D!%1t&ISBMJcCV6|?yGk-bMs%MN*SNdoZ|Re@g!(yF)a3app= z{H z)&HSr{RcUpAOO{tiS9h3kCp&oS47H_Fl;g_s58~jonTP5LsoIk7(jv(Qj=`Vi)Ygb zaRlb)X;T(ur9!H)VDHnhNn=N*i@hqeNbk&Yy6l7MZz{H3qbyQ7fP#(vEz*j?ALU&$083HZJh*47+$AZU9acQ+W2PI1BuxjI9N~Vm{3}yxtq9Ed*M~Vha zRNccfxXn1)_e&}W$1SqbFqI2!)k=l9xj~xODrwj91BEQb2Ie^w)z$b@>6kj^Gp07L zQR{8mato+P8NEz?yUx`4E5O`%XyVDA@d-QP#LLFx^aLfmFsJF2sa&en$Q?et_r0>i zMPN>968F4H>|;ur*gT$qA{Khr1S%K|W{1#FwO^+(nmOd6M!n2?FzHTW$fp@MWToFE zLU*nv`}9-+-XHlx$rx5sqCg%M^2CXc$$M^;b}`O2-1T*rQNrY{l_)1;AIU!pXWjAaBktxdFY<`{8Dlr*Z5A4?;??I=uFD<6Ziyx9v&pr!ypF)kp>!%uJ zRx3<%YiCv%ElSW$vambHm&Fl8w%F}FNC_I!%PjnQq6O)w37X!O#GS!OA^g1UbA1KR z4K??5MaJbJ3u8$Z%(=J@kYCji)xXBiuQgE&nzFi@!s7V0>WwVy__>%i$0Jd5^CFJd zW>xdPH41g}i4zBu?T~ByoHvEUWiV?Pv9ko35xAU#oc1_<(Enip;-5lu{phMmaz}G+ z!cP;GFy;llvz-FvqSg>sxeL@q?C`YbR6zhp042ytY)uH@SoWn>2u_*6E8zB#pj%`F z=*MswaiZSX?58o&4J18ujJsOJ|00~!Pp+2#xct+WC6d2DMP!OuIO=Yt1?^{+d$JFH zO}#VU*&i@HH|i9U>pme2C7a))_?o5o`ub%gb^xST64`$_iG1ko-q9K|%apPj8t`F5 zsP!`G>T5KnznP%}prb1#RZH5kD#nZqq_?>BCG+bzg)~(94|0<|VkfZ^9^@p|TT5cV zvXCdvE(G&OE(;P;*q>aO^Ne`iu{+V?jp{bOrlX!|tOf8=W^qOH-eYSU{Knh1=bLF! z0mJTo)fXk2m_`tO$H0h%-0xI|U%7ucD2g_PH9XC;{EkrWNTIm4Y52128s`Q?UrHmI z6lNB~WrX_qw3a&yq=5|CCxN4!1nvplUrHN??uI2qO7-YpUa9@@@h3pqyDRTDq>=RN zt^BypY-voTNf3jCrbo;x`Ql0XWqWtU&KhUMNYjUZxSM z6kbv##_1mi^!|94X$a=o%_sYQU$Xkwt1*v=U9lEi<2N!C4T@nPk_nln4kVY-{0V|d zu}6tTra4~q%ASaSdjZv@ z)TF}(B%sPZ54BfsT;+TpO;Uwuym%zj9*W&S`fK#w4Wfwd#TE4fgxm^CP#DAl#U1saV=Tltufdu%MY?X`~Y&U1QNe=+oB0O3krUUU?<3RfkxeL@x!H z)#Q*Ax$C5x!v_PAJo-DwnO!zwM}7Yyp5|u6l}m@z{m|;f%M%&t%NhQs7a7mD25ufW zdH~3w;C!9Y$~15{3Qo=@8O*Q`5i(+eb@monZ~}os4@@>1m?j%ljR6{DN!3 zk9*NzzjtZ4IKpUxl_ubnKkeuKzv-f7qFW%nDAKmn|*Uq2nYsb!=)hPBuC?VhtvTenrsTW z9Z&%$w`&_PKl`ivSRrj4W8S?b!=HdGn<<<@3t@c~n6s+zCAzqkn!CWyvty3`K zi0}Gj(9qM@ z@zQ!9P#S=zC@I0G!-}TH)g&20&~(z`k|VK6{C$sDj5I`pBaGPnzC#iYP1%EapRkQt z@#K0wds{A7VAV8d@tefgN{RbDQ$U59h1g#v`UXYCy*+KhS-W|}pAoNQv%hz*IFAUc}v?9MVS;MPa%$?+G7@*#dm zll^x0)3z_*Nbk`OWUd{=J1y#0v3OJkWgKYeAQD%V$RixvTO9KdOGs}d799wMVOU^5if9z{ zGt48HG*UP)taJZL$N7TxSt&SX{?Q|m29~rfUuI4Hs>a@AElx0YjUY`%N*yy$p857y zBr@{Zr|m|Q-o5h6B&lNs@%w4oe|3sarVc?gV6v|D`>n0xz@H!bacMG_l`<@C9U6HN z=c(@dC33G0u~t`xMfA9iC;$fG*sDJ&)axJ8D?veqEBYiw&PR;|FsHckVl#Lmw+q?X zvfzDPjMQvO^{XY7pYzuDZduriviGM_Lu|+L=WbhU&&+YuwD$~@q8dXa%HLiG?_a-Y z%)h;ht$*{jhOIR3A)vC{B?w>`oO-BF!|C1OnrQi#j*MeZFn-SAT(_M_=D%CH!ua_# zhN&~)KfJ&Gv7EQCh1;tE~~UD7xrWd$pyi-)fbU{+@H5 z>v?|9Ip=*{{&QV&z1?}eU*mq=ceg1<`Q>B1pM0R{c~sAsA-gk*jev_9v!ta_wMb!z z=2Tp#B>j{58Bv8!e__o`O4DpAEc&HZYZY1~!p+?`J49EI_|W}6t->hi&3$lXSD0WD zx1y_asOfCDAQ$$-ohf@U-=@>5nz5pFnrizGt_sZ-9r_+WhD+KX^`%t@InlphPR%$k znrgDl>&@ye+-}=2Fj!kmDNnTXE1!E^DQe{xODiVcj}zEOsGmlcq~RY~k-unQ>C`rJ z?}ucl@%2&~j~A3b14bK~6tgM81=v~gaVhn@xmlf>$!Fn#SJxbU1I_$KEEGj>q=?QGN;9E06f8lLOU{`{HTmf1YEy?rliE)8eC#mEF`5>#5s&|A<6hbaE@t zGgFojEFgzab$C-aro@=owIod>%C!UmLGvME*=9Nd_Cz!NAQ|^~#rkQd+X+8?2kwY8 zmQ|*Fv$1rW*y$2VYP_@UVfA~*#|1m80pH9aF~o!}4tg~L&Y>mA6n@>SOV4w;_CVh& z_r2v&!2nU4<>aS7jgwM0CS??2NW+Q(i=?I{-rrlStB|iVBf`j3snn@b1ZsQxW>P^) zSMzFdNn0oKA`<|0lJT@T&PWdgi(@9`L{&);UJO5~o7z3`@|t8ecZl%|*Ho8mG0-P7 zs7P3I{xI0=6U0DGDtEDA%s2Y z9uN$uo1l~iHgs5UXPX;VXTdW`RD*nR7dER;Q~wI}reYZ60O ze?nWxm4eW`ZyjIsvXL23Ds{gRePk>7XYjTlX6_%eL9Hnv9nFJPaT+^impI`T=q_&( zy_sgJg)fO>`!)%HDZcl0#)~?!nbZIYrPOsTW9syMl5bC!i*Iu4PQ>ix|`r=Nz;>oP6q3J34=wEN2E|mhd4;3Ve12v1=9fyz)K1^Hc&qcO z@NS1gN~bZ{aGKr%4(0uh@k3k3c2!v(gcLX^aj`m_O%=nu@wu<{ed5bkZksz@{VVw zRO-Aj9fnUOMGF4vN#xrK|6$V;XUzCy4}U#W*5|cqeE14;gb5tDzz|p3`*l_6DVPVr zYHfA9{6Bkg|GO=B5C`xp`kOy1F9;(K>kZs3 zcfDKm`8MgDd$c`S|NDW!+OR)q|3pyvw;ml2Ty_O&5W}{%6mt+ZXGNJKpmVdzsH@I+ zIbk|VNB#yHo{moui5Wpe9>;nPnge3x`5T`MM@F%xd7Bw=R3+T+*0Jlwlx$%PAe zQU-RUK0V!LL+q8MJR42IX{t(x@Qs&>ozPP5DaexSIV-v)6o+das7#*;VeDyZAKaVY zbBEpE_1&1{@M&>6g+gjKd!SR;BWmSwZI2*xjI7^etoQu+Ck>Bv_`0W|T8vK8(p^MsFy+03P>V?HYJ#^#(n<1e&b0693X{d_yNcsNzQ7*BmZl%qF6 zoMG?^=ZH%es=ffDszAA1T#3V!be%Nf8PU6Fm?dU5tgUj384vOfQ9D1*+joUulY9v$ zeUxKsYBE$F&@a%^bVC*+7Jqv`n>?*X7mNQ@p#3uiI4HsnHtZ(_0Uy-3qZ28|9L_S# zB_zk+-V~UN!kdL)=TJ9K9?Ud)V<%TVW;=2;)A|=PV^s35>V5&oOz4^vo%3J& z*ZKRfHn9QzxoeisEZU3kX~C+cks6i4M*JpseH+006&K8gtup^cIT>Uel;LaAi-2kh zqd1Le)uRQ6;4GM!04&6hLs6^@l!T*a!T`liyen@o7O&C^HAG|0UY&(MvKz2k4XkBK zHO}*Yxm((yJDz=}Gtum0{c$4qX$O66h0f0GTasgc`lM7NI=Qa)+qot=p&vH{3I*Oy z(aX4Y(pIqS_z=m)n?c=khDLmKU)+q>+YJIiY^+SRr4(KL@T#dj!Mgr$!w}){PN0F< zMdxuC2Lomgi$9A=-0&_}iXFEbYcos6ez3sYX|s=!Vl3VDly%|FYiw7-7% z8;6n$eJJa7w@)NPW9kD8Yo_ot=?bqC`oliI_NL;~;RU$?TjUDSw^`QZ+o+TJTNw!l zW9I9|6pt-Re>o7(D~-zah_h1QOybfI208&IpD}tc3=c|0S&%mk1i!(DkHQR_i$1Uyd}G*1Sqisl~XJ-@$T8^ z_@7(~k&x%YYJx&eUAZ1M5=EEzk=MVKCgHBw%k=Gr&u&S=BYp7u4z@L}ih(6xWCjz* zBj7YHtP1OCei)K9olD*kv|z=XL%}F_8GitK4JE3bC}gZ6?S(*~8EcnnRlqQ912>h9 z(fcoqKu4t-c*gt8XAe%@`S3L)JM%4%OUy`By;jbGBAnkGS7+(_xqYlZ$!LL@UCO7p zAYh`;{V}_o{`hw?we=4z;?(#b+UjP)*U^1jV($OXD91Ai2vwMwKZ9_hT=KGN*E#h+>&i2eqG3wy%66s$!=qM|agguKMD&-6Q1UZ-pOU9sEv511bo5 z!7*N7ITa~tAQc2^q!gpN0&Q}JL*t)3jh8)R*^S_K<8_>Jb|~U{6Za(V+YRd`_aCwW zoqgqr$~w=~D;|v}x^?WocF=+j0-ZYjTZRcJOVw2J)SKHEGaX5rzyc&I*Vv=ye zcr=NQMDrE&JvhM#TGx1DKlc%c7pSNKnPh!GWBdAe{;*ni0KvC&yo$M^V5c7w>TT&p zr;~a1@2$X@y8d%AYo|9QxhP)mn+ne>Xo#u zou8H)UK}Q??kV#wt|$s#F?yFtS6nDk_6?>lLU6})Ep)&krW=_U;Tv)M+^qFvM=2_~ zI!&*x*%K%*~(H};ziRk>wbV_(c zYb#nEPTO8Gm(Z>?Np;%lEn3pp?%I9CDoYXzE6Y2_Tym{>hqtvBa*|4PVctypL_JenO$X&la z6rf}2T?Yc<6WEr>kf$IKuBCnH-t>NMOZCk%FrP+f&(Akn+g%YzxgJZ8iCd0F6JfsQ`rTCyoO$Ly@PqZMAI%6xIGYUFx|IuPfcH zA?|JF`0eAjuo8Z=17fcS$GqRV%LsI8lj|Z&&p>RixCmpijvA^bJv1C@&E<8-6Uf-6 zrk!#dF-(&Jw;q=noHqqk1|BU~V9ezkT_yXyx?U2iQ<{*R1R*9^uu8JoHO2y1WrM>B zHUGrdApIHUb|Y+()$&8SqeV4ZWgqS2upNdGCkApA-yTj7lKdmT!!DKRbb_wF2saKl zlxg!00sTylP#PE86mL{=Tu0oUqC^PDYs=(r#-lDLc@}>|`Q4-3*(&?si91+ndH=sX zuYV!;?Ipnf-OJoQ?qR`td{uSnDf>_)gJ1vNX`2bRGLF>O$OR}g@e-n&)37!J46X3G zcwPP-1J78^YQ%V|C^Oa(?Y9HUumjt|xc8@kiNlA^U`Gu3>k>J3cW}akz;?bGbEueM zA|AW%6@nt}3)_-~hj1SjpE~X=MK4WOK3l+*1`5ed{~?qn{={tuO7iepkq4icN8)S@ za3Zt*uFHJ83-ao?JyzD|`RpoKoYj?R+Kd&264aYu<{~<5s11Q~sbB7WzbPM%7ez19g-=+7#sjKxVo!@|$tCU5uRc3t zhJo+#Q<+>P8l;Jvo#zFkqQb-D3Rmc zfDoFc8y*IKbG(WNj`fJ6v+*F%22}z-rUFf(QpE^_4d~h$S@Bv~Nl%b-f>|uU_v`8h z6hCW?Cc~HHyS4zO>g>yW8}+u%Xbz(z%yn!>mg z`z~&BWJ_4#s5kwq=qY0iZ{HlXIX&I&mh_;r-Td2~@jw1%*|ktrf-ulaauHAIiu0F= zhKI|`z!Csjw;A0jmZzwVsg4ONO$mPOZcV1)cwOn*UT&_y=(RU%A(jFMXF&eB4z@hw zrEfD5lHlL#-d+B>XYE9{Zb*Le2!|Gdj)lI=>Xb%Dyqj7uqmxE-D4jkGe{_oz3j%Mu zm~Z(>^PLB~%x0TZh%t#VIrcrq*|aR`tNW%f@BdsZ{0q6+FPv7epSgp}Lr%qNW78C= z!4%$-G#*{%N$s@zR01z4gv_LSXUt5U#3=!Vt*xWt+bJ#Oz;S;*Q`{_wP7?&fH z;}{64;3i6hP>F-x7qAwS34pza=6i8~-4A0NZ`f@TF(F;5;paEJO0*PteOzWt2V7%I zs^L{pfjzP&l_}8V4Tu?QneBZ`#S+3 zoY*7`Pi9!DN}{SX9}a7s(J3+PoNk~Rs*nfFx^y^ZTfVvPj+X+w{?@uGd77t#9Tcx{ zAs?M``%tEUlf&N5eRtLJf-GZ|_$|cbr}6qr*W7~R0W`*p)49`23o^Y>Js5t+)xAJb z?oFzIAK7iNgB^Z7YC=i*&AUs|PY-}?{y1!*whJ0g9lI`m#ZxzehZ{m?@UYx0@kJbk zEGv#!SbRM7;WS($-?Ni&!EQX4Eu!09;&q|~Q~1CFeIdt=3>9$X`G5*OF*$MB{I~de zataJ{B@@x3-0DWf9%(t@Gt4G|x;&rme9@rtsTEVC>2|Ub1-z=kmnt8mfaA_dg7=E# zXv(vWv6m*p)t|DPE>vHf|MByI;?v~@ts#(5X)Hj4#_a=9)Jzbtw2N{^#DUgItRR(2 z95X{(c*40N_u=5jWIQfR31onX_iFj$Dv#4A*23>05J`nBKeHZMaybY|KVNkGj-wUb z6K-_;c?1fke9aN<_S4~p&^wK_;rzq?XDS}0mf`$O3LYf7-k*zVDSoOd;NN>sTmNKJ z%qxcrFXexD#1x3!{cpS_fOGyr?u0e~hGyD2Jm)|zRn=(ZZ!Q;MV0LKvM7Krd;`^3; zWPr$loEl>+x7U%{86M!r5`=M?KUesolLQ$H|2BnpDFlo?&qF2jx(V$4HEjhKiA7}I)X@`D5WpO?_g7Y)RwBkPE zqn%Vrr#d0B3ci72ft=bZRJvva^R9?QC%h|3OCJ%2OQ2qTxGiWqE%N=rfkp42ddW_j zPa|(wH^`@&CX9O;SE3M#MLkJ+L~J~Gp$kxMzjGH4jN0Bj3@W*O{B&7LF2&MTKI>b< z;Aqp01IziBe!LI(=+hrFQRFs>+Cna)o}cyLoO#);0c+{EZK@Hfz7^KYoZ*JZ7*x@WT1x z3b|oqd8!C zzd9z@<}Lfb3?Vp>3%#?jjquFKJHAF z*hABJ@C_KhMg+{ofS}Q2$wlx5ne{?E4R{@;L8s##GmQm?RoL6iR+RAb2j$wP{%Gdo z`X3FwzZ1%)G5QN{Wk2imT4*%fsJ*BD>Bm^c>{&5ho4Pkm3iGZ`g`OrH@yQM)siA}l zB0G}?Sx?(C$n~3fZ*@8N5gx{Hy^(kD)lu7yy$_95mT{cm801WZz~Kl4KU<8mV3>*l zhyY#`tQ}v$^^8D7b(+ON>CX2l@C;HY1j&WL#ra$z`(*6!BBEVp%bdio|GspBX!uJN z>l(H=NqKa2r4H*anH#25ctvUVIgd9xyz#A)@q(#^iPC*pKfbk1wUVMA2P?iFMtRIs z3b&T|_Fxtiq2R8O4o5N(dVvYgF2ZJ-GTtX5ri2 z^SiaJva59oxq4bpcWYZNpLc(K);?Fa1n;T{e~4sT$Jx&8^V90-ApMUZ_czLgawl@Q zNm=$sSGDXsvN$}@iw{g(1q^KK4iLR-ASUl*NL1i$&SG4|YQ*syS5)a|g8 z)?1z_{dz|a8r6yaGfGA&Y@a>KYpHCLPr>x6?71I@=;KD@w#_h_uol-*g)oa{dmZZ< z%Rz10w=n%uFL(2T6`?j!_vUi_+cC z`a(j{m6;YGDsFH&t-nDRrOK5If%HM3aZacr-Bi>UC@M;x1x2zhsj|p0R*gkrATFD} zazqTo4+1F(6__cR3@fn0za34S!F&>l9Z{^rRUc~yzll-mDq1@tlfg4g_dP-@WkmB= zoh@N>eR3w1*}INc2z(Zi&}?6HdvyzGdCAIxDRR}#SFP|4%s)irQ?%zzbyD|dXMXc+ zr(~1xti%DuOyDZOt(0nQpSy5QI`A|?*^XXW2Mr8=oA@$45Rg$IIWaI(=`(G_HUIi0 z8tM!}kOlTZISW=sWy<+W8G=RNg--no!+=p%s`2SAY#Y&6dh@W83nQZ#2T22L6;-p% zikL??-vgJ{TxamESU=Y`jFbN0Rur%8Ze@pKvgjHH$p$DT)*Ky}ckBuIz2jR0;R31ggSODy#s49=|Ru z(ku3s+r50G8*i8>_>Dw5_OT^@Htw3GOQ&r0jFjP3w}h@fzFd#7#xEC5oLT-`UC2Wf zMu&0z7T?D6tV~~y2KCZhqgjtI_A5oI4$S^+_rqNFL0Sf6jZ?L+UffMLQN?s$sW_tV zp>x2aVCuNbT`8|7iw&yYQ0rL*8JTA9bFw-*4Nva8yriyU1f{ERxWfjj>sH*_#)X-J zG-N?~W}iDtD%3HMX=NN3WZrw2Km?Ra)AOVZ3$kuVP8nup!JLY?Ke9^rrCd8C`6sF?=2?hzq* zwlG+!Lo&)70J&nR)HYNVwX-?~1Th=PWU9nx;^#UUV1UZX$#9h6KrH1_2UwS|WWR*s$SC?U zVD^(pC>@5U0eIhR)hK2qpJt-tdkx|>m1ll0hOCQW#455>_sSu=9NyS?Okx6p<>#JP zwHEzQ(;E3y4LxHaC!t$CR`!7LTq@QSCDh_}3iaA30%Nq$V$uC97_1vwoG2Q^bp5Fq zQ)SSF8%5_vvH~H4}($hWzqNT{!zkHC9({1Yfg0a>1fDlm;dTB z&B?p}&-qK2W1Qg#FL{tB;)3P0lag)C0urm7x3$Qc2MAI+l|fyVQg38n@Bq0pNC-F< z1fz5i_u=u?8WSbKxve#2r5foqFu*G*$Vz4^o1lMBW3oCXx6n~XT=~J#ZXZjQqO=)h zeCBg-JAQ!+)72=_Q+M}_S~t2Zs8>l`j$Cb;++_1Qv=DLlh)DD^UE86F)e~+JH^g0e zGwCT^{=AhU=&|&2bkEHIaq*#I!-HoN>1cEGhOG#Z(FM^5tRhmsd8QPB@eziZkdrc;n-N+Xy*2ZN+pZwXpeONU>CosHpDLdp$mJiO; z-1CTvCT*E-=uX_-wia<3FHUni{^EF3;bCFQIr#Ax9z`AdQB61B+{MK0RI4`qVr@A% zjI3ljT3{hOag;y5DOOeI2_S`?XWO!w8-jU$5&r~3@Bo&(k zTLr8vmJOYQ-jjad752{U1;XxnpJZ*J>TY+6&EexLc6;u8^Y$x$oB5uvyT^8avggPR zA8g$%%;CK`iEtKTjT<)@;_TR4U~VoG7k@_~@pE;fOq$)9ZF86V(F!!U)AEHkYx0Vr z)n`@Db&q9c9;lqSKx3U2gw6Q5mR}MPaC~;apB8+w7Y2ok;wP~ zs@Vj2=IH@)RxGUU_FUQf`EmpA4js$)wBxj6n~&tKebh!5B>&G2$$u2AzyEN0Bqu4( zcarrpQ+7|0pLyN;CL3+qttP| zly>dC-`#}pdDRD9D3xj{`_eJU&X7`aFEZkK^GS(IC1M)+kH^;dH4@cG?^XZYw?;ah z%uZ}JmHZU(V|v6XpkgA^OV@S`zi_=T!>Km;u;ryV6Uf02`Cm*O%vH^x=fZ}>Uv3W^ zIbsvDJ@F*$_ukGH8q6G0&~}aM`n0N*eO8l--snMAPH<7}-Sm-$C#OYRE~?ezR}g!m`$TNBgsG+ApH%i-O!t)K}Gn%seNOqqlO|J{n!ig9#Vld)oHy|U5&rYbB)_zs5fo(=PHH+ z?B~NO));RtyFYT14b5@nLGMJnI@iQ5t6GfqwZ%FgusB$$bUbq<13vWoq=%3Vtb+fH zKC%LwEKCkw-mHx7_#k{w;Nzj&MjiW2?p@gv$$i5%SiG$!PUQz}n3)0lsD6IseVWau z{Rd0HM>4}oD`e~iq;q;p^y^G;ddas>$aup+xfr#5ys^I5V$97ji_Ts`PCa3VLQu&i zb#&D229@s}WSy7n?5>SV&+oap6XuSTx4uL;*S?9rE=S@mOiUH>yIP9+Vl6r1p6nDR za(}Og7;QmGy>`*R_e5gk;}*Z^=>H1^{coWA+ap=*0^qdM_Ri9wdi9yr5B7yAw+MIX zS=m=a#~xH(>}?T30dz1ulh$MLVp_D3I;}|LE}GDK0hZw~hxsb`C&?x&3vVkGoD&B! zWNl7ITT1O{2!0lH{oJc)pQnW%kQL?uiB6ZKE!mLIfs>T@ujNmL3HjL`rVNt^YI`U3 zTb{M=CP{rWJH7TWEDYZK#rxB6>E}BNRhuFw=Vz~(b`Z~9G*gthJ8?5>d-&LX_3IEM z=W~nlDTgksx${$4K zB6tR8`}2pL@X?l)FPqzv%5y7fneIr$CHVc&6$NL7oRg;>T@!R!eyMka@Pb$fZg30` zH;+(uPV0BA52!0isH3xaU%#6@xiB@eCyrs{=n(MTOK5gynxfl4`OwkWE^Z_k1|e+B zJtj9M=HfNSi5pj-ph{iaN8S?64^B8EV%r+Iv|-j)lPQ||}* z;}ua4{ap`R(KFPM5!50Z$*c89qZio9o6&xbi%9{68br5ucH@V&M=CY9BPw&AU&(k_ z`}ToD=$Dm+qk9jYs!u+i$gWN-KKV~p*&|_mHuim^W?I6G6fd3AjkEP!CGxo98EKtA z=8lU)fAhzQDY}Av6Dwg%W`mS#v6N{|=$2&eLfQHK_HqT}=ARXZ6l{5p?>l02KnSuT zXm0-6U3Ozmfm9am|Mk(u3TIY>+GO&Oh7E4w$&;otPQB|C&mE29O@}A%8J&Zo%*Ss& zV#3T8z_OJuY=fv6)w?qcHcA&@5W6H%hC5(fpn=V>?~E_wQ;3ptKnrQqBZ^4N77{p{pw)y=TPW@kMSQ-K4z-F6j=_RZJaIEEV2_0$fPhE=e(c1Z(FsF zomDez{9fik#nQs7E15mt^FKy@5EH@rpE`C!^4NAx(ud{7 zyqL=!yOYj`XO@&w`($7!;X)h=^*)=>Kdky({{~MY8MWcZ9&MI4p~QnRbCKiI`P z>Ip{`@2nphb0k5$rembmq&2UH3cYnLn1g^UvL}(Z0HiN887{EynHHZLYol0*>CA#i+jBT?tZXpy$6?^?`mvUIIH{-; zCzmx!bU$3`XtjT^%iAE!DcrHFADV;Wb-Q%seQ2Y$FRia)j-s6?Ihu>FsCf9m>cQ;V zbMLRGie5S8zP(h1ddkW~AnBtI^*&HU@n>fF*N${;B51LaJ=n>kDM%(s)jUChjj_X# z*+}(hS{5YSFP`Y1WetwswY@v)zisZm&nX_@h#rfhd82%?OU+m_y0`~|$+-gMF%ux2Od&%rsyE{Ph&=zfJ!8$;4Gr+qm4RzE=1wJ?% z2`YqVg9(yLY_&{%$H@T|a~zsqg=sSqtI+`EMo=3PX717}t?4H7ZI))3drk>zwO_Nl ztKNajh}bYWpoY^NHJ=g=`q#@Xr3kH;cu4Yd<=EZC?xj zWH00db0Yg zaRk?wK}MU{4o9HNg0j!<=48~If;+{US-OuYE7m()CES!Z%P!Jln$3F7ls}g!jlO$k zp|zv;;Qa$SM7j^S$li zk=EYg^9tIUz8Q=c8Mj78s7pA-LQ%u&<^1G=JG>1t5M2twvp=O9VoyRNrF3D(;rKUb zR)o^TVo81d$ihtdx7)vPzMz~?rwUyI_uXT{{k#=-TIJvtM}vcUzT$?ua-omM3qn>y zlG|{pFt=rQEB*%^o`Hwd{e{KtYg{XT^NmkM-)6a`Z`En*%_!{8i5xPt?LqnaOz=~b z%5VLQbky1VJ@J~EHGQ2Pb&kaT^xUOaz)nD?YfclR<4acMl+z|qwzxm*3_?K}l7b4r z__8_n*9u%oZKUZ7ZBlr|X-kInKw@sGhoZByerV#G0 z^_R!-r>B$% &`!2rT>*f*1pU#TIJ=wA);bg)57*kt2i$^y9A7Xv3iVQN@Eb;IKy zs{EYu#v(O+2bG5$^W;;Q+)A(L*RQfo-i^sU^PQpV+88G-zYl0kbAKSLs|@WdNet0t zivxd9qTHpp>2Qfsw<`+iL!@|pks1lX`R!N3HTGuTlNNHSRH0>~=ZuV#r6v_jTECal zMt3FxeO9QPRG6F3zQ8lozw1*u#j0k%>@q;r1>H{Rt7H^9`Y{UbD;MDp7hEq4CbI(j zhM7#Y1>Uv*E)i}uym;=EqQ}l5HyDI(%Bk|e6ArN%2_OKxHa!4T_QqZdS_fSu z#j7NMp~Ml5vIlC|y0Q}UF8E{YeSgh&Y#s3{@=03&UiumLe$AI|@2)5u(C>ZM7JbeS zqjod*AmTD=1>GG)O*U<_);Z#Js7T#=*&b5!>vlV@9{#=iT&J&h;3n6v>oTj^8(e4Q zf*Kx328Brro(ThW;sG|M_U%5IXQkB6+_d4Nuz7ZFzZvya5AUedZ@IJE&f$l4mVxFZI`Iw1;@8$yLF2%|9fdC7U9Y!Q%M%~GyeU2+ z-Pq83^x|9Y`fWWu9p2-~wr|}_oLi0x>GgHjWwfz)gfe24tTY09aRoGachEoLr|}&` zKP4Y=J>&(flNUU!o|K$)D&>*ulOMNtO_#AYi!uKcfBbXjk18ruSvm;9N~24Dk(PY7 zCeLlfay(x+urFKO%IH?$u;>Y1-_x_M-Gl?rCF1aBb)*F^3ZUsV2#XwCmS|a z`)}{*-(vM&=P%?~YXF#?Z|~R?s)>(LC?K9MbVZ60NF()=-HwH~?BC0w!2sY0lhY>t zKpTn&EcO3TdgV!|1^eW+pp#}i#S)L z;=`fhcUZJp(v^H<#tfClQ{!15?g%L}60sfGB*T$oqcFeTOJm<`51eaC`YpEeXE=B0 zSk%as_bplMwgNkesPE$FFQ#a`PeJ{b1%hPpCps~1$*@zmtv>-hoaH&7@M6RTwYwo2 z@JQPYgipJsZPFoc2!99}6ZCiOs)+3qy@z^XER%?z*6kr}M%LYIDRoMZYV$I^E9!fcWzP;1d__)>rY`Um7!8T=o>^FwluGR8CvVcMO%nT4sb!Q31RuqRXF<8S z0^J0yko35+0U}p+VJo-?S}%!(W&#n?O}mobGI=Mf zTzBy$a20=Og3HwKNt>9}Q-7Xp7nc2Gf&z+nZ#@3ExAOl{mrM8pfM1-XIN3Rv;?u0F z{UgJooy`d5b@iUHmRP01kroetvv0#~7)*k4Yj;^iT+izY>PvIBE|03mHmC*GV2KRt z0$jk2RtsowwQT^u3Y(W!*P*%;_*CHX>Y)mx5?s2Y50cCEDE3nf=<0H+p$FP%1$h*30RF3>h#@8-92J#Q=_$q zZ>#s|mjQlqz5$+VD=t!mQN>d_0xt$q$_;%-Y&~?GLWdwZ8`bb%-h?1pKVL+7!!NQK zaZ-)Xe@+r*835s${Xe<3&TLpi56G_L* zLT(&>edvFFUWmw!2L@R`R0#}O7*BgnTqBeo zo0rUSIYNGZU#t8HMdQtJIP{5C3YxxlcRy`?9NZQNhVxw({CvGAo91LwhFmOCDIjyC zwcF#l7UWT~U^FfYKONM|qkyJcZYBzWI1E#6j>^Z2;Gfgk!a4h~_|mI^Kq(O66wOQO zGNFDtUqaJm^Q9Gaa9;-XE0hpjQh6>D*4_nH#-KX!A-1?^9%;sRq{?U8yY+)aA-PQmQXDSI6r8weUt@5F) z&>0$-ndXRSkvf2Sm+7AmQz6Q5<580&3@AU3Whm;sL3NA;v+#4jZs}jPssiG)u|VRK z+nE0N{$T<`E(d9J$EgQQ*jItgX9uy-@mXqWty0zIm=eQq@#%WpxxbhA8`l<0;7aCk zPPW=J^_-vi>_8aA5~TNbIr=96=%)Xr$$q-F|Iw--vn--oLOmd@uLHC0QPr%xttK6e zNR-9%HTp&7XF}a(#Pb_fv#WVe&7}+#^DaW7k*N%1b@5OAUDM43V*S@!nNN2!G4kx``rDgxVOJP8G8zx;%oSv;QC>Di z==ijFn7(|rbLRT5Bbyb|TnK>IYVKvuLFn)UA3}NVq{1iE&u672CF}iu&x`JI$A9V) z0pf>M{Eg7eCJlm?cxmlv5lLbbAN&M~Ivu`1LNW*7#)#LQb0hD%fZ;2yPX}j?Rq^iE zSy$qrqdz(6?C18`8N$-Kt6$&cb?dqr^Y@-!G+_r>9NE4~yCUHyTiJ?to1H7NZHy=F z(qs1KN&mHe_zSu8eSi@3mEE(r3!$Ac)$RR}w%%fv2F8NH5#17%3+eCgM@d1rxj^x7 z6{>6Q9HUctAxb>a4^7__2C&D`z!??xM83JB?QsDqr!Y!~;8bc|NfhiKHMOFd5vK{I z5FUqj2`vT3ng+=68AK0#g-3N{Ky*8{}H^Mlo9ifBgD1jOWZS4NtN=tyde z97MlLCR+1LWohi2&>p)lW>|gy!#C9GRZ8%>eS2#6Tm%nkZ9x8Yr%N>xC0rs6OgG50 zovN0--PqEY?|bHK5Ckk}Ni2!wO-f9HL$j4Vf|!cb2vEy&EM7+CjN3hmTmym*OF$sG z3f_yOG_vfZep-(mnQl||Kch~wee_RhudE@T@BX*U%(Z7n+OlfRBcC|&coct`No?@> zy`Z9_SX{6S6QBJ!qp9P)TbUH+zSDeDpv5@5@Akpn*rUatTa;weLiY(?Isy8#4dy-S z3Htd&SFMidfFS7&B+9MM>xUOGTJs8v|4;!LfFD9g>}qFHv(mbam|Q9*AUyepI5t(A zW3%3`Pk}%nFg7~2D@p3EiPf&1Ej>~3Cxzf(M&?ZdLBV8+%_;#0DVK}mfRQNbW*7)r zXlw!Yf}D7w!_g@P;YoLJaT1}1_54d(ll=0`?a-0)ctl#nP7A*%<-Hvy>T ztZ`{Sl#YSBAGP_4reqwH^(Q+(2)e;2qJNvMxPA;QHuH-I*)<++MrPf{+O$n1MuCGY;~K8A@&``7{^#LNP| zm0r%=B_v(otN*3+tUha1cIIP7q{7Rb6t$tzLcP@fX1j%UJ&|ujL5`7^WugQCMZuln zcpZ*uF20jMwYh{+)c0>@AY@4lg=JXa)mXFvm{Cwz>#^Ey1mQ;TNT53T%eh!4DH0o( zl_e9()7^Si-(t|)ObBI!oa+XL-P3sqgMmi(;AXd;{JqHCSmp8wg(qWvA9u^UKaPds z4p@H8qrJknQKPuUFif#N2L!8LhK8{9NZ?9BOSN-Npaj#n1jtQ?2J|0<6|9MGZmI^g zbPYEzrnIYLzV^xyrn~b>Tj~oiP^^sRkqAfeZ}YzopE!7x#xNrFjRH6R)IP!SXZ?tE{aU*&Z;hU%ud~y?evRJAj+4(lIzm=iqvfS(HFUtH+Wkv@euW;j|;wLe8hIdyYbYx(+#px^pzQ;tQXq&=9Ba8=zN|< zHh)i|WK{KyH3K}E8Pc!f<+yc2iE+XjQI30jJ)`H{YjsKg>xRmT*OYmb8WQZk5idsk zv}!LftazzNncF<%t@=2SmS13`p`g3~17b_5jqg;Dl8rhA;>$8O!&reL^voPdVvj_3 zTvb<&LYD%Vn~^Y$XHIiU&Y(`}(cH(2s;Q~G6%%@@+G@~#A|5>@n(H<=X14E}XA2%c zLwP|Ka>4LgmCLa3fg)4{!XgPKADLC+sL9iC>-Jyd{m1!*VQ84ct+FgmhYTj}n3@yc@ zgWu`<eoLug*{rIs^tFrXv3+Cq&nAuzh%!ON1>yYdnwihZw6nbFB&UwB^;gC+UI^j#$xGFFJtSJ>!;nhaP{r) z$z=s$eySanPm=iRLM6VVkFThlpD{Tye=yvs@7vTx)RXQHagIc80A&ont|(aG3YWag z!-`+IVfw%5`tEo({BQ3p5fKDIC>pV1$83xedxgemYgJ>9+NGsmt=L=bt&KfOYnSS< zH#J*2?V^jSmR5Pv-+k`u-ut`HlRxseS6*-De9k%VfdN2g`TMhg-R10zt8F}u7+HG$ z2T})30p#Om(J#2s?-=r>K~PXNpnSz3Nm+qC-6>0pSY@1In4%%grKlQEdO!j(BEYO0 zC@x5nb@pl+rN?3n;6gMG@4)fN6I0votZoC5Pfm9HPxk-SJO2K%3GFo4vJg2hzyLNT zFE|wf2I?{4Ty;1M+SDR2s?j;%Sfjc^E#2p}S?BQ+L3No5d{^Yx9=JX`{SVnK^Z8X( z34G11b;F(rhkM4Yo=M@?X1bq`JE5;k6*qn~0g;-AW57Ke)EYL~W%SsW!Hl7Am6ukR z^6z@F(A=*XwqfHG%SyUr&gBdUW!{n)!7r-`&}dW$9<&63!WpZs$wBRk+|f$V<@pT< zCMa)FoOxs%V`dyI9vV;Crl_$Ea-uh2)Im$G!EM}zICRjTbr1^N5@b_BN9E!YDCu5@ zaUR4p=X5j|D;U%VpO+`=r9<#*GJx1PaVcmzSmF|>@&MT{U!$m_6C^=I5%Be4+CzW7 zKcWN>NWkT)TRi~>%@KcprvH)q@E3A>wgBjygPG+jJsLAMx&V2-u#w|X+?eHT=BN>C zh1omrgnxycBUUw`mU=KiWPom}{D`w?F*7Tc0Aa#6iOMs_8WeNaun4;)Y*|1s{bm}S zikfpQUn!;Or(e}4T(d$u?EAmwDx zxZY2<&CxZ7DY^p`5HTKeG?GB*2gVGgAArL0X|TJQ@dc8y1$;0@4zDjE#?97{^-Tyq z+)#;ci!LxhL{?USq6cl+mb?)V6q?9`;)(fYZ2~-7}R%k{$E&8E}E>@C9^Y9+S1PmGg_|eY{?X8-*$ea!09hZ?H(HBm^OU zUeJUmP~G)jIpf+0ilL{i{#9e#Hj5<;-U~M%p`4i?h|INZ#M$#>MEzPzqV#8@CjFr9 z@Ayfn*@0?_O1lkdpO)cxW6z}o$HC&j+|*{&~)_Nef4}GspEsff#*=t`Db+_El$AV=a-kYKTOkrW(<86)0^r@fP+eZ6|G@=bn|Ic^AV6mN3h)|F z{YX$*Y(NaH1EiuZE^%hTmmC7GKwO#N2ZohU*1MT1ev4H&f0DTWL_SvOGJJm~Z@wzG z&rC;<#D!tbSI`v8=k^O?=gfi-%dkO;AbCLnQby}caHA*LHKR4wL|j6pAe))f{)(8= zxM`=A=Yr45*r24jx7dY>=FRA;j*fFm9@v>1Ntq(J#5@xNty5#h9FbKF5wSEKnDtH2l7EM zP-M2KGmEhhvS~`xQj9HhSyb*OM4N%QL5H4|pasEMh>9u`1}&EdplfpkuRsK$VuZy=5orvS zy{LX91K-CO0eC>wCk|;F_5t&6dUuaz`AR0j<0TE5s*a>7UB36OCP}6@ag%?@5l}Xe zmPIrNam29q;$z{iA1gls@P(0#j00)NY%(Um{2Sn?qU*QQuGTOlY3&VjI|agrXS9__ zfO5g?GL|qI_oV>rEauT@hyl4y?3-T-Ca8dE2g&>z`x{xtPbS-9NHhFz%yAisPn z`xmU8-5?}8BmW}K6pBB6Lw;H&i)Vx*k(4;#+AZ&Dl*n3dz?MF`rVxGcQ!bkc>9s_M zZSvd$7NOQ@dW>BZZjX|*He-f=b46iL|ilEc-Y$Q)hTgm9w|poZcNMj{$p^+=L5 z8#GhVjVFj1lnY%Zh1Dhs`)gyb`>Cy#Ce(fhG<@Ij`D9&hCV90Qy_vD}Nx{9uhv`&t z=#qO%^%73vPonz4w7!73;nL>2^)Ras9eBH|X3wLa%ApIdIYIte(s}FpGuI5d;$>D` zCIOkjDX=rYK7XU&Q3u{^Wpr5VzZsLzAxAPZp%Y2$h*n@@6>R#*sJ4fJABVoYiFCy) zJ5@0WrYgQ=0ai)_I>;T()JpbBu3ijGLF+M44Me&{klGAlys&go&Lh?Zf44M+{;KRh&DFUD-_V#|^SDS4GjHLIrd(IQm$N*Y4 zY+@x%&6+YcFjz=iazj_#p4q)0;-PSc_ex7yn?#tNR&>fwrC-r4v1wHC@a4t>q}2q`oCsi`Vm{F; zgixOhc@XQ!A}|oiWH^J>3rfuXY*Pyx+s9UK)?wP4q^=(|m=&7q3+vzXs{I}JcD{09M(&>n zKf_?rN~|hg|6b?*R=H|v0ITaq<7qHSg?0^Ac-~F8pG#R;N9L@`$o`#8?TTci!K_Ft zO8S6H(-pi7BJp0RLwo572GqfuNd%7lQ|CXSxe64gNPgpORULVwo(VFkEaWe3DY#{K zq(V&-lR~DKLPubWY~rJda#;hOKi4g%hj7Yr36?Ua;g#tj3S#8x`?VU&aIWfYKHZEz zfQo{=v0UdXN=1*_EHG>U?am-~uidmLBNTUs*q)w+1f(LPFsbFW!)ff58v$-vy#SDb zRqQn2!?a9OAx56+xhYxz`|O?))xUxrG2*r7zWyfm4~U4G?COH*`j)8P8N4Xr3Rfxk zqWLU9Tp7d8Mc~7mpPuunO}N73U;P>DWooT2e(>W5B+kbae1Wm~`JHE<43gMyC&e-! zcoYepjtbu;V52~ydhYg!d~liy1DnHiQW-|fH36MqK|>;!gk={nyy;3B8jI1PBs6DC z24!Ij_TrX~#k!Hw1ve-1>Hv%=W5~B*R4`n%>5|<*qkyd4)$cH${VD7jM+1YgWM+OX094> zK|DQzK_Zg8uiYA%k6zFti_q!rkI#cH08c{8CzC;5h*!U-nf!JM3mBRL1lFBC>)KEr zWIOWkWc}8rq~rLQl^DE9adeQjr)pvsG1}J{;O4@NA3}2}C)~09$ysUq?|}P{tNtO3 z9{Mn9IxR&~!QT`=oboqxsMG_^Vj$@o z{fM5Xb({@ctWFHUH-ZqU679gs4tQB{O(Uakh$em8adJkr-Gs;FejM)ZHfZ13GJskXL#q*zmPDc~2k*=!+qa;iE@)1tbG_1e}qYr8bW zSd_=(?DYN;*L3Y~d6389vGSI$lmBe8@v_LdMpgpgy4Mxe;=xyS)R(P5hVlU|%shA< zMNSBgtT2oiP7m7qf_~Fm%xkF-LE+XwX?Cnr{B7B5Q~tjq+xELS+n zaUg|A0PkUAYay6DM}(S?Ld@?2gGKu>0OVkRg$Em!hChGsBX^Ei%jX{1YY@wb({>&7 zey||K5hD?;@90(cMI}wAJi7+<6kqkD7yQsjEvLThYRH|AC6OD1+}phu6NR%r<98wN zqBBHdgm?miWSBl_ci#G^!|26I-U z8*UtQsU~Y>;Rhfqn?Ka`daVZE_uMJGx^vf@8YH3Snq26lr-RTnFhbu1NxfO+W&j!% zSURD94mIed#8jZ4|lL=G6lj91P!l;!m-zPy>m zgj7VyFzynGK4^S)W-&^_R*9*sRp8Ik%qGe>$1 zHWk4b06<_DBL(QO4;Zg1mST(r4iEDrP>}Rs8fG;%0JsidX}2!ZqIrQmbKhWBg`r~d z*V@C$N68{!skD1OusoOBOgtG`d)(HLyu2bGBDQUN>r!wT#% zx-nAYwC}0#s4H;}_R>&gfG}P;?RF|5%XFLHGA9$I$inEoU}eL{g?DCyspc!p?DIoFSSuKI+x2 z7LRRBrYrS0so6G>7PTa=b#Q(W5kmx*j#8NiDT$b~!P2hh8T6f_h@Kse)xTI%DJEip zhjxCi@(Yjk65fNJ7wvX-~ET6~`0Tegfu%c%E3{9mi zwLjp4K|1r`@Tf7~4admJ2ViZjs?lbxzbXq{caxN?cFXYe@46cGLZIpyN$5K69)pc( zu-vJ|3+k+zpXEpLrp=n~eQ$r)G3+jrr+3%B`gSA`?biJGu0@r%L0Mg0b1N;fMyAlN zmv=}$qsmI5Lxoq=ur{aX>5u&*)2LT4e%Yg5xBj!(52pU4^VaQK z=AQW2)m&=}&G)bRZd8@`Lm0p;yzHG5AaozOWjgh4Y)=-gk71lL)dRM~4I1eYq3M!? z7hOx7^YO2&+CJ=GV@*@^7PlB;2RC_e?PYXKw7h5Ul(Is5AIqU`1r;*nYH@2iUs)|t zpjozTfy&nezD0?cw(o=ev3j#pZR$7D^5qb3r_Pu7g%s;Gxg=3UodAfn3Zp4bl1gSQ(@2jmb}rLGm=3ucQP_O9iSd%1Zcw*Vxm<7t z`@WKsxD41R9Mlg{>ZfvnVsD2o#e$gx$5Su_38fS}#y?1I38XMcDS@OkSD24%-nukW zF~3+A^EA`Q+dEUS?o%Dx1xKJ3TB+#C6Agc4RKF=;GU1yzetbpQbO}H zv#LEpIP7P5(4RAf2Z#J`)Kl?|y?yO@UU}K^A5IRpI~8vQzyb1#oJ=YUs zm_=7ScGH&S2l;VXs~BSph1OS^d6CKoS*mTZH4O$b=*qR4&Lj_zMFDL| zdsh@h=1amwrRr?uL5d?j-ZQ-q4`EZMWL3>j7wnyXqvtCQ#y)QhN}FtzS+9#P$4Uj~ zos`c%JK2&i_GPpI@U!Rh0yC0wiY<7PSosK}mkX$iQIVMpjF1?Ps(i}KXL$-k@Y9m2 zJ5JP(v6|_J3@OO-j~=uY889KQQ`#;hKEo0}yI*TSupW$7T<6yC>S7bmZxL zYpYD64b^|l?rh+&1g8hhB_pMv`{B15b`ItVQdR`Iw%?Tk>;TIFSsqsRhcE$~f zj2C)(-8P-26W}1IqZopi05AQHvD#(#ne*ZwEkqn0!=u! z5~1c6-t?;)g+&S14rnQZZoO)|4$`Mpl05@yDQNECu z_BBvq6-g~wp$CRy=$j1j!#UYzo0Rt^j$c068JL664-d!JrsyUv2vF710=tl~ySF?l zGjC4PEEQOdt^2iezTc%gP#C~FbQS##N}^Mff+Ql{7Fn{ zWxiE@3sxfWU__-zbqSIU_-mcRj2kh>)ooGUVB?(D-*=`|mNkQlXcUJ?YfU^o3geXoSj_Y~` ztg1-~wc?mqpj=*;qa2#*I}%VUz>XZd?8o9{Qq8!8UyqAZ$XXpk|EE21W|< zZ4u|LR+^4)t~kDFe9PcHks{8T7B+9CTno5fgh0if(ez#asJ+bU zmOA0IKqm#$-Q_^qt6B_Lyh5~6Peo6Li&S(qKd9-h{zWIyXn3oJCD`%aVp8m0` zVXdN#vlQ9>`qpQ#f4y9EfTNHnDF{;iB_ln8d~)F7wa??G%-VH*WHw6xjQ{pt?xgHy zCmV-H1+J0K>FQ-#+nkTiu{N{)N3j+C{#SYOWrUi~*){ZM1YU_BHpgIR$gnZNjQ+k7 zfVWtJ6##gL9QnW_8D;r_`AzbPLVQ!TuW|~}^f&c$R0`qoKt_r@X~7u6ykUoTSr-!# z-F6t=6sJiP$2{qO%~@o;%UT>}Z^~td%Av9K zGdG2kg9(#j+vrCVMX48!eDptzWv4Bm8t0por9(FCx{|(z#;V6O+1r$F^%S15#GVTI zt=6>tpygwG=QXuO#|X8Z^LKcSy0i+F)>bc{G_)P1U7prwJUXNQp6V2kcrC?1Oi?vq z&Tdr;IBrS614H{N@K%_~<#M`mZ?#-J2^%UOtt_^ma2 z^6TGiBK|^7R2;y#c5HTz`J7o}AeesdvhhS!N@+A`EP{A5-A0}`BY{AnRG@GjtYE~x zbeXnnfCx~reF^m%$yWgC#O5i10B?&ZAgYl^POniP;H`f8F3gYr-=}Y0S3F`sRu#9ypBn=piXWlGWQWmishbqt0d>zOPb&y%*7N zxq3+>hZ)nme@YeqAmJz-rK1zR;alfFJ@mNoSsz?=U2_5#to18?zw3mgqpNgkYRKJ6 z2sk19R)Op=yfiBmO`_gaJglF`Qju@XQUfX!OO4P*qj_geh^#i+n+_BXUOq^9#ul|8 zMC1}tdsgC?l(rt0Tf``2;b`X`Ct6Rqop~c)LXh^M5)CVOK;w7yFy}K!X3Uc1BpwG? zz!VLU^8ZN9bE&3ig4IMAAiLpZW3{#h!9B3<6 zR%cGCe?K5VfpBvXk#0a5YI7$M(YwSUc_jrZ5*6fL)gj7Su)v<6eyTAnQZ#>fyZtU~ z5oz0yPz6ICNJu{H>XrGBK*$o~7lL^7WT+=Kd}II6pz0R~jdvb|xaheKqm5^M!$LGA zoz?m&6>)lTEvF@~eEa9&;pna7-}n7`6XT@U-`B4_%j!Eh`S9$mfu>2JA6Y81H@w7@#b=ePon!-GXIims|q)_5Er z$YC${PicDyL-6~aaz*d8baai)c|^stbaAf@KC6%FS)UTJcdxngTkM!0^^rRy6Kg#C&T3%Ls5)Z@Ske zj^iOZN`0~T*i4&}1XB?Xv~Dj5R)|EpB8L@C&bA>O7m^(;a`Lg+G&})qYAd_7V=YL~ zBKq(Lyko$%kK_x9sZUROD^{{xot~VUWl)F16nDg?w!vYSVm`l1ZDu9#iac<^$(TJ>4fP)aPvwKAs7XhtiM z!v;H#WJOKj|f=H*lt&8k7>0z8u%J#_ocJG=gjI}T(+jAVV z)m*7$dCf`$$ZoR#kQFvO%Q-n@tByaP8K=pOc5QX=hh4gCR2o9_yMJzzoDkl-B2Ntg zhNgm_U9ccUq}>ER6_@<~iEaJ`xo9>z(?Y$G-d$P4Z5jWP8O6NY$n7tEtIZ%fV(lKDvE_Wu5qLx>|`D(N2X^o##A)R ziRa`eY(|=39}tQ*?&DuddJvjKdMfIzZ+)Rm)#$LXoP5v0yYS*H7!r4j=hQoE zA)ft+$zFmCOP5ahFHdpd0sbxh_=;ct7QepbMSPFVHgNZs`5j?!Km`Cb1ZkeQMgZP= zvZ}|BzBm+AL%0wlfmif>(RHgzPCMTU9(%nR&U1cd>E{wYIfs?m;iJywSPbMgDtwmV zF?y~dX`eb@aL>f-VdD0j(zKfZ<}`B{&i{Rd7diaIVBsJPog(1B3PgfeRdkyAl+hrS47Vvja; z!8#5F;Es-pw1HNbvox{;0pF`{A{TYRcZCx~qM>nL`Y*H%cIlfq%ul{`2o;#|+Nbdt ziaTHP?WQ^h9d?TCfRnpKe()vrr-#GZnCq!`*^|p|uFQY_HF<^YAAH15anqO4iQ7uP zEEgwrsZSxUL<{Qr4ib}`&qAf{K~U^me3Z@`L&V&I*zyP0EGuiO3i@cckc+y#)TNEy zWVg;PGdF|93?x6B7G2xIpi+v-ao~(Ku!|GU<-S@bxw2e#@!hn@_~i>JmJOXD6|ZHz zOtd~4?@=>X?+&{P-#l(^dHnW%`!Br3VWsf1l0`Rxvvx0-OiKPgBAdT&vwwa5?&SzT z05sUu?0K>mcSUl-)_`y9+>HJijn8Wny~@Jwkrl~gU{r-zj1B{{X&*dRsT)8vzWtXM zwyn!>{>j-C>qu?Ta=q~qKlBO+DUydQEG;f=_lxP5nl>+l|3jQ5kMX%aAM)2rj}nYr zlb1leVH}!&Gs)<+HkocykeLziHFJ$K)3xq;CX1;^VNvdwP0g%N_~2o;0PC7M_pfnf zRw)qlSUKp4uE$`39W*YGFzzs;jO-1&U+w}(qzt{!#7Kze`IX~j3Qr_0k|_$ zYB-c1>y(gE9D?rI;Iz~!G5y~j_E$JcD+z?P3u`^%Wtpy zWXH|UUVKuZ9Lt(+aLDA2c&Bot4T`2~ZlnU$0QX!ytxp9qftH;tft;poj1}W$x{4#p zfzq{lT~XzYuUavc6pF7kFT?Ga=v(ih{|_1o9dv&o*CIx*a<`42pR!d9O0K5+p-VV& zFvx58Hr~+DqPZuIH-*w0>k=SaIpaPzWsX;Csb5SZ)LJ$D*UcUlwsRc&MT%mcNI=M> zYZ`;lZzva!YQKK6Y`Qg)TE+>cH!Mf747jVO6x+Zn`?j~gX~d&)H0->!Co@!O_*01& z^?naaudU1Xx^$G&y`D0pkSyxAP@71#_myp3Wo*QoAKJI zAR>)Mi-%{p??gjW))md>4OSX`(mRDlPEdlzM`o%S@TNDQ*s`#+9 zDgg}}iDyWvfkuK;X7Q4e6oc9svK|v7UY^@#E=9>Y7}cBkDr>ZK3T{ShThY-T&K}{N zKSjS{eu`}p8M`MJY%zZ@&k2ldeyc%1a-|wF_m1tLx1)~Q284%;sueHX2ldL2;SNq^ zb4PXOzhcz9d(rCdbN(Q&g@_|n_T_`2?{-AV^UO>Lk`kQWVEGw%b3Acy1$nV}v=4|v z1Xu&@W3$OX?FoKIiGVh*1C@ec*lm9H$Y{%83S&LWlF~hK^DV`~eU<-Kp}X9ge%FLq zU$T3WmByD>6o*-T7pXRzC95F)<-XugEjRA=UzQqtr1l`}SaW^6Go_=QIJIY5V86zSY4k}N)DQ?>bugk#3Kl%`pQU6e+txLJK= z2LQlKb!Lwefu>PL?|6ufXWFx(1zFKs&J2c0MG7e?!<+!%PrE+sR4%#EC^DL)B=Mm3 z!x7b?S?p3->Gv+m7`#8ZTJFY@LG|fC_cs8aP`z-+^kyfP%$yf8UZ#@|X3OmopjOUZ z0*68O<#{!-2OB)OveLa#6p%YiYzfK3%pC`{XGsxv5aM)tpb+Ew~Sgv!!)Z-FPb zw>-NVMgDN4^({3HNaIN#E>+YXr|lj0$9SXjo8qF7+DiFCe6FaXj7{-}kH7uALth`&le}^Iu77I( z*Il2^&?Gr01E8)qNYk@E`ems`#y_qw-^gTst>m`a*r&cG^$=q}~OI{2E5NHZ; zhhRg8pa8h7l81bi3w?J|Clsw`Wa8reg0?i}Vfj&l@|jmqG!c~!6?FmrbNwwj;UZj|jU@Su1U!^)hST*nsZ()9A; zxiG9$Z|}uQgfn9f*0u87VIcJ6PSGXk5OzjRlDIB@xcANfL8g@#ZUKn zSN3$=1XL3bb>p$}jk20#j2} z$NoOZjhj)mw6Z}PnJthhk2*GewY|H~WB0vN+{g56!ljVh&$ae}CI|JG9){lkDaMYz zo1be?jwe0+VKEYZb*pmX#ksr#&l;grlxN#nBk9I~a-1|W<2&PXLxC5O8<(vOkA&|~ zGlA4#8nxTzfW4{VS`JyAn^i%^vjZ2ZZqpBEg}`BIjgrcoFOzFD0)^I5!ZqJXYq^p!X(LS#}+_s9R)K2yT#kbUJBqi2H92c{>za^!=5lAh=fY$B!l zA5%)TbkLlZZ~#EGo8ZNd2gEw{mAhrcV5y!O!=j3rJcvOCJQ7Kec5{`;8!kf%yEC6r zT|$IbGE~)^O!a3~?kAgv6nN zW9|3GS!!MwFd7qewJC~STndeC>H+{fNLK*KPF1HZ2Ra!q9Fq0;P!+Au^Yrif+z&|$ zzi~#$M)c+#TGb`hvo!5~R>l+YlanJo)&JT6(-HKq&tJ${@zaak1p~6F99MVJpla+@ z!*EVzWwi;qR$qg!YU1&e4t5LxU@VlLP(V|S;sr~yQ>B+!k*8{ZKx^JD?L`UQghTJ( z+%0jQxb9|-fp(nwr&JP2TCJ{Y%Jcxeca*al(22_+rEH&9P;xM`YITl@YiTSov0+lt z4ru$4{5q$mZRruIT`%y$(D8Qin85cR8DAeia6GB-v}R@r#XxNbKP+k3ES@ef+%B%9 zn+71|d6gbf(nn&u4P{mNU?4RGtE&y1DHH((9N9?P#cDZ^4R+ryz!^25-}h$M5jKAc z#C23${HQ6EtJ|sBB@UR6>#55G0#L&(27H-r zy)+SsCSXF=Fs2S5Eha;PpDko(h*#n+z|J^G6PpDYh-1t##Xc_#&?;$`V%u?Z4@_VD zv{3xgEPDTFNKkBdAeW@13Q;(cx#d_vVdodEzqwQA+CGdEt(|IW&CLF#aFshdS6unq zBhB&HXHG-=_kMIVh?5v@s9X02?>O1-n1Pp~Oo;;4<{-dTHEWe?*F}(cC#S)P3h8h! zZPS$QK{Il=5eJLXGlQu!lCy#gHLPbtltmI;k^wCS#_Z|#51(qv6dl|fWagVMS4Mp} z@0IIK0Gq@K<;OTZX+qbNtb@Me7o9W5X7lPSysY9Hww^sCG#qs+Lsx95`Q}}~hehvE zFTjtoE0uS4r@~Jo$AD{`av zQfZahV==n9xHVOl&bOrCRNw2Whjb4V0#AM7t~}(D7`~wNT#_3;eVm?;oB39({6VQG_ zP}@Y`V)C4!#c1AM`_b{~`1$)8J;!IZa-N1og`v!JisY41F2}iAi2#5p4GrKrEe*RZ zSQJ!%fu%60rDWE0CW`_hEw!l(0nI$}_*4JnG;(ZbU0FKx6Qir2qdm}-%kM${Z~oRf43V^ds9?X!f)w!Nyi zjP(=V=jS`d-kGh<$h981oI6Rmd4et-1ugYwORr+AKk6&GFvjsZMa#t}vG~ie3-zJG zItQ&(`h!_zY`FAK=(ejd+?XlE**7cmZT9I1 zu2X#{#7wOAPJ{i4QSb5}Za7U=iLycESfUZotpEfoT3%@N_K-FWcgl!8Iti2uplbpb z>ER<}#hHU-i$b#AFg0y>{IJ2mguO~H?@PjYreD#Yson_-Wnc8Txcm^EauqGIg)coU zdEMrVq*`PnMLKNmW?g>bZm5r%e=x<#A*O9SSx}6|JvtpR&8{k+>@0A5t$&X%?9M-@ zj!&Po9OHe>*KfQ2k8SW@$VIHsAs1K^T_~)C%}ZVV4*0lePDuPy40;x zTx#N2#pg%|c`4Rrct!u1g750VC@sm8ukb>#LhYdfNZaBlqq?T~f`X&>7tvMbF?@MY z_WOG+cOJeN-|aWc>UnVY`q!<#Uyq8^{mHq%lxlxW+CMvfd#wM0$`ExGWS9bJg*e>A z8hF}aknKH0SG^hqWaVOE-@|288@Unh-@($Az z^F1_Kbz$su6h$R?%%Mi|B3L8Sb`h0-wr6bs+`kvo^GQ1`jx8m@&)O<|zNY1}@ginj z>GiXd~a|n?KJRB_4TPdn6Q6fZ_!H@Jaln5p123Q5*-q?k!$0mu5Nf@YlJM!PndRmJ46k z|9PTuvhUdbM)^U|+t-ID$K@x#b}lj745W~368c3aC`hkZv6SFVc)h5j9+DLSh-Meh zZF{NUOVp9R)B!Z@O?5N3VM$mx%ZLe`yjsiF<(Z21nX(Njcy-~yhdT=2#&V6KF(YsfB!3r9S`U7wdta;3qSe)_K`;!L}iP%39Uw^#!;*Ll%AGxE^*vs6E#nOHtzJ@dHOcjvYK_Y zmC(p}qu+_nmEtFBdoV7AUt*aBH5)J}1Y%Q|&0pAVNQfyOai87`P8idwFnwAU{_LA= z)bG!qOm50%U3mFN?vmK!wXYu|PAbn0tPl1eiS(N+P+t6dBTb4nX_rcbJ)y1&E85~Y zXpw+Oe9!_Q9}={D%JWhCZC=bW(JpzCq1Q^F@~r4dvg37b7LU%)@9d5?Y8RPhsRm9s z9Uq!1e4J#`uVr%4-nrbRZ{6~>TUqCe+uXjvjL%fV=eIkKAB^|h2qsY4*3m0~Yfdak z!Z%3kXzaBor!P)<{wj!r0X7YrfYAV@=j?>d@r8hnz0iueBu3td9wG;|pSPoMhQail zHf-odjGmt&jpe+RW*!}?_p7Sz1x?%xo~_tB3EBQ9`NZnYm-@;GouWr39~z#Y zJ#ILu8OS^`+oBJzw0|{L{3UvoyJkA29%{Fg;??=XOY{W?ubd{UYeTO})rXPldq_Iu z05%FyHAYH^{^(Qz2Mk7<)vZko$w8{HOSf{ejw13PeNC0@W=ebbjCMERh0scO7WkYc zOu;M4(s=spi!2`)bho_Oq;Yb{<||VkSF~CyD-yD&BS6rbTBx6D{AJLqTHtniAbNfG zH=B(3)RQ3rL;tL{s)jFJYbS4hMGOsEyt&N&=g90$RfrDV41&Q~;ywi?`u%!8J1Bt4 zlftXCu5B?bz091vz!Vf+agH;4D$~Pw&Q?h5wZp*kbFo{}E(0Ku2cv3F!iM0b_tv}Q zL!qfPJ>MJql3{P01+`UMd1wSD9Q&Oog0U**Z^2QCzi%ItEV+W#T8}4Xxw&jZ;>Ot^ z1+K?Zu&wne21y6XnV@0*I(haykKbSQOFsKPDGlX9u!ER&w0m~qnHuYg`NPT94BEHj`Ph-YE{;T>>k1#d z^;Y%YiHCjAawKB+%vLQIj$~?5u8=;Dfh63wLKMt#jdXcMt zndJRUJoui?bWaY#5VXlB5h-OX_{1(#lzLZdJzeRA!)VoYG!wViWl1EWggY-9%W;B| z5DsH|dF#SPZtUwKCP+1|i#?8^%&2Eoek+7GXVAGg+|PEGFq#*hWgZ_wdrKjp`vZI0l*jv;@ zl}vAN^HWPZ4$SjoEcIj?$kUlSUF{GfF^G2xE72_!C5s@%kEHMqd5HYkoSAd12DQCZD(B`Dy)^TpbMr}}lJ-SPsu1s}%;Qpg<-Mew zrgiS)a!>nj88GDC&A~6x3}Q~OXetQMlkGjoEr#ZY#H`VCnHGpNVyK4QN@Q;bh~eU> zI2JvlhO!kuAe0@R!P2Zlqc#2jh~5Ro!5k2imoMxbYl8?BeCv$M_7Gd-Hej@2c`ZI3x_FP-p``dwXP;E5f9;DVkQc^*-h`S|jANtGV@~?AI zZmj+$C*TkskzlbY8%Hs@EN|Fbh04^TxucEG-#LP1|FfAoc>f37{(k?39Qi%Hv8I_m z@1jHQwsBa`6~+{H86GWJ%I99q%8l5n(?(P}U(Q;~b97?7jQpCYNBQd2y;w|9jZJ{* zpq-LpQleyE7{=W2ydjgtR}{alsPOcIR7YPK&S^krW?O@|XUo@cOwTIW!ArZ{I??d#&O>~} zDNXh5b*3-Z?%h_gemEBZu^?L@6|$5l%3JY*&nEq51qlQBL?gU&4Jf**DbtdGAV|cs z`eiC11Gog7yp57Tnx*D4A&;6g`^4Dq=M;V~s_GD_PfU>el)Xs^*&buaFikc5(3X2X zR5lmdrQYtu_G2w`^21`opC|tQM8ubh^X|U_WYEE3?`Gwg)d&M2r0&zTPsR z>Hl9J{%nj<1IDP)14h?I35dk#bTkMkqq|YSg3&OLZj~G_C6yAfNd*-p3{aH+ zzUMyYKEMC(ocrFRJ=nu*ulIGm;<|*MPYUy1u-IS3N~s;=`lb-C`P%mG&A96DKl;i6 zPCk_Oc>3v7b!bf+;g#d`;n(xsZ)sdsvPwGLa4um^=7VOeAcsnsef`cdf>eid{GfhR z^??U<$yz~rJ>`H5&ji?&{2&CF5)Bk4{NgRyeJG2k-`$l4j>MqWD5dF=n&qQhDmnH< zI~tSXRkKtzHtBiaFZY|+5qg28jZzgmIx$iiurWcdP0b5mUZVS1X9Eq;m%^)oSq66ip9t2N;ouE|)^D0>c>mQ&3T7pg&+q3^rG&iuk|KdRe!LC&F|?TlF6*b=kV ztZ}Y8=VZi%s9g}uobmKp~m@{*fOx9Toiezy>!Gtv4!c+kV2 zfGFH?C{x%uj5+eYZTsZm3IC(k^=D_|DF8%`>93m!kFa>=Bt=ykg<(to=A|dI+>iEE z%dE9#WApYv@wCZA1ZI1U@izWc(MKmET2|qimRpH(`p;f^(kzJ3AG2^gLKtj4(U6oW zz3GJKHodsJRz8lcF4bGIY7F?_+?sVmdGJL%F}*;jcZh8Eh6>uK$N=?z6cm ztaWA_paBvl!x4_`*q`l6qt;j)jo$$#Ubmv^6;jeseJ+f?^K$8}R81iNL>Fq7&n-E4 zo*~$_(pfNn5?Vej67+^)b_$YC56v`t^WD8RuRm~kw4ZMHj2X=0_PjufaT1yrTD51P zvEgBJ-2QsyMUjz=jPgZ#5xc35nO{xzhXKES4Yu?pmX(GD=N7yRzA_riCZ1hG<6Zzt zol_fanN_wpxNLFG?IjpTlb<~_p{6X%W=P^sBh|=UQp!;R%|d$NoGuzG&(v22TFTq-_HIPez!a5_2ze!TE}gNhC6}3Lrz{^d>LLJ_Al+Zf2thfpUde) zQ_C_x`HEYUPWM9?0ucgInn7za=}NVA7G#kZ0Dz<5RootvfV1c&aHWCuA=pBh8V7IX zHDm6AfB^IvnTk^Qy$of{TI4Pb7Yze6*&kJ6JniaeJYi})TDH^?>TZb&z3|#|kwsLD zG}r7z>q`h8$ql$%rpc0KK9roiK~v``ZE;NRDrn$zvq1lu{Pb_S`-jr<3J%vhuRS)m z)zG@xcF@mL&CRFNK^KDot{HA{GIJ@2Q}-|9hI8;XQt?(_2WFVq~ckFEu(ZmY+CoP&yty-ju&}s zRyXe(FuP?VQu?w-t!_7qKFCu@>iUJp;2Aj}6e$H9ds-nZEz#2e->S+~1ode&se71u z$agY%z|bKX`RBvW`Kf*W?|Z~M4pTnMwPk+{KVH2UcFXj`gX7Lr$W0^SHsf6yBN|Qq z3gk>F%2u+{I-WcLZ>QY<)`R(gpOX#ch%&bumX-1lV#~72PKgraR7tVoDYfky_hL3! zrh6>TXDEF1etW@8Nuo$`in}E=-*YWZA*1uIcD&zv2TLIwPLrd#La|@j~`m{Me zkp&JDbu06=1XJZga{R349+b+RO7n>DDjLK1xo?2)`b-JncIY-lU$M(163yh_GE6B* zij}{bH|K&GtgI8|Qa1zXkIdakj#75Z&Dys8{YWG4Y2`VQl1drv%R4L%xI@vQktPP= z%Th#d>icz=?F(n(MF2 zOal^Jk?@KYcLY~rCJU)DxFBx(nm;;mea$4UTi<$nm};j{?|F`sjZhrw>)ue?ASy9k z)4d+wq1b_Rd$wA+R%0-ll1eA@Jad}0eRpM$!C>zmeV6Tf@9Dz4&n|_wx9AvNjq!F9 z_*XRxK0Z`?kCsG8UR)$X?2+2YJ?|HP{z^B4lfaeg1Y}#=-scEyI2cAJ%c5g)R$cSS zsuIWTOz@)mOVaWi#q=zco-hitzeEgNEPLVoY(jp%Q$Cy<0t49O8}7n6HN8`bdgViH zdx^QN3~;k`Nm8W!Tk-r*b#;r%$6#zchR`Ivo6Xv+y76{Rfu|#6AXq%^Q}>HmvTHZ2i83h!}77 zm@}5l=M-?f)smoYCaZ2+9k7XIBK6}@v$eo&-!G89}2m0O0^Ya+PC`g z77YN@=?j=Za)H7%%h37m5l*=*b^P{%`IfjSY^tx*jC~jKT$y6M7a@$yiS(0N$lyJS z$weVw8#B1ry5&=&&^bcs!C*Za_F~4$JMniOgC{t9f9$O*>(A?%tzbl<5s`=P`Id@9 z0Hn(MuzD(!nOR)^X4AdYh6W;pRj%vTyVJRc_g~pnOn&7$zwquf(^DTpo1F>Q4Q2FD zLCLxqONA%rvhkR$R>iG0fA)lj8~Ay1lP~bXjGBahAnS-j+M-^G6Wkwg^(V?)bNA`L z8@hMoC921>oUQI0vWZ*jjj6;|-oKzF#s?p5Gtp5_C9O=di>DE1uw(t5L$;9Gb_DWv zU#DQshx@5b&%{mr^PId5RFtSEcKe&=J7aYpIJm`2#jgAqQ8f`TNh_wz=R#?1NIIEp zqz>QVg*XaS9PxZ2#Wouq>V#(Gou08}PA10B&~N>grWsww19*NHsEddF!^tI~}pSi4W_ zmyVwkTPb{0>)_WQBK-lNoc78j zJD@_YwK#x7j3on8Ik!Cmh48>Bw3x(kBeZ{t{>)WOSkh}0klq9o5W=S~q;+3P&(G!^ zkr@8w*>*xJVr;%eagZyrjsc)p%2?D^J6vy{Y>Xf8X-Hsl-Fm zm7uPu`p`eE_VTkF#&+@vRY|PO!A99w6~@qDw*zTM_g}?pU@}nIW|3LVT@p<*j(b73710P&ucg`8md_GLHH$};U($)^)%xL0(Oc&K zn_&G9#hPnC<#IUF#XNJl;aeuLIIrYhs{$Ewi*s0O{aRmLvJf5sroGLrbl6b7Z}Ixk zVP|bG(9y`HSGo^bC0e}dlf=Cnm@`R`f7fZW)!5C+?eM9TV~o)FWSC|(MfQrIUh>G= zGW)p2*_ExINI|LZ_%7@FP1owqo{k@_h1=mVGI!GIA8jU zA0Ji-&Z*oVB@`o|axZV2+`ZiA7o}wO!=Sl95M~RXGg4YNL5-g96c$w`Pob4MC;`RweG2;NOqs-1gj0knas8X|lIa2W_3zw)kcS&2tpZ zbNIvJ#^L7A7Gzz-+#hWBp=R)`PYR7`!6bgyi}G2IZlf&hq0bKc#1L)%ynj6euU7w;}_2Q@arS%#Q$r`_1`^`|A5?xEWlWE!DLZM z*03VOw;%4eon`GOVaz<>1eU4UzD?$~0s(;9=gc-P)NU7zI?%l3!jy5IQs< zymzQke*W&@H-lkQ>F?mT5B(!CG|K4@6qfEv5*|=6n`hwxGU`vS3w-z`jJba?El76r z+sM|FPCVT5k&Mhp)#N!}Y^=>~l#Q71jEo2M#&zK2@dJ78D1<>cX6V_??SY)=47me| z!CXSc&FOS#Dg$FKc4E|z7&n}02FvoNRIst>7lp?U=`@KcRG(CT>N*FDt!b1tnnE_? zGvK$Sr-nTEpr~(f;%55*TP?WQiJt84;w!_;l))#%lTP*{a~IqCVMFJAM;qZhYuSNn~h;F>-ux%MvylF41|>#6*2G2+{zlWbS5o2vBGyXkciF(qr9 z9(ow_%VR>^!Y!T{rxLF)LCpe)TbPX_(~zHow?y@VqMjGk5T(#lvtcOiw-?_4I7O~9 zS9b%4$*ZDPzC&%<5$qozpQIg(o!pH_tUJZ&ws|q%%M3n3)1H?7;FRGT2(qlS{VLeV z87_LMY43sGf%aDkLgzabJEfD;t@@Uh%dxujYoaLb&brV`|kkic!ODCxL;1_%qw zsj@}oF>>M@!ncjq=FWpR4B@z{M7cNB(wBvSq9NbM&hKZr30czf9_m|rHXT!0OCw*o zomWDlM@8J10*>ipl^8GXs)wN#{pLw+=jHf$HxAU_xZ8^ur>o!jxuvgrL4M;K0~1T! zy;gZHCIPi{mT}3Fi~Tg^QvV`S{{?XWaJhDKhtB{@jh4w`M&P;8RQgg?YL&B5moj9* zyvF(0`Wn=ci$O{HPynRkt&gx3M#Hds5m_Le3d$T1VQWo8{(O<1SnRSsiUoR%nl z9;y6H*$}UK6Z4;e*0b2o{fMmYD#aVM{b`B%{wxJTA22&$sY-Y`2mr4SmA@B0@&e?Z zAb>$g`6awt1MB zLCc9{Af@2!!bl*a@~JlRx6_F6li-j&-gP!?*zcEWQ|GnHs^VFeO84z(as{ScE8j}# z1)rwB`*i~I_AsD%7l6j=-vtEju}Z{O2yf&7oFT|Kgv^JSsgf=*+*?<1pg<*seKwNDtfQ7|7nY9tFpc{>YA42E*71i0%bF-zUP#{( zX<2M|#(n;WFbvctLy|#J_BTALT$CW_TIyKDdNf1?ZA$jaFrR3VcClPu)B2Wk_WQ!p zi%UPP#DBgD64SQ)W^DQ9AD;+nfA^mv7bvU@fHyr&mprJMaT$Il>sJhd*-B(=GS4Xx zEycu>-rQ~jiW#WC-S~Kih#eNQvzCN1x+hW0^`*4v;%E}6j#YTsfyRJmrApCOaZnR+ zA%ne>!A1uo@^!gu8%bZt#mSGp8?^c`w-Ve=EY#z>)>8_8sI={xk!pPuO{^s5FfJe&*krh8Sz=Qo? z?klAh-kV!8I%Fumd1};Cb~-h=C3UlG9B8IG7SnS{Wk?d;lit%$y;Ce0Lg}TE!@)Cz z=Q>tvx&%s7*E@M19XK&^STd__e?+%#Hz_CD@{QwGurS*#Bl<-tRmy7LuDxq-yUyso z__cs%pQ64PkEPnmda3YgSnhXrS4W3_tal1Qu+}UruSxOP@e(-T&KN#Q2I#XAjvB4`ce1ZAD+F^zTL4Q$KeFjFBTq>E{8cC8;qBeG!_IK zfhE(L`xdXpF_fA;2^>q-6i-R!0vIh#+4%(3iz&Lgi1{2^?D$F|>V>xs$Q#Dtw7*u% z;tf?Uzm;C04_}zpB!DI$meRaTcJ;I($``~Cv{mHGPv4!+xNy?pu!ESJh`^F{4>mX#_64)#a3az%KPgRpNo4H8wy?s15CcCEIiHV@;2>y{m<_b>Nqi%d3v z_`G~Qy@NoVmE5L;DjKr*Zf!#8HP3n zI+aSSiEca2oFt(lQ|!;o-NM&ODgO}T*Q=Z^~p4Qf7*!_{9F$V=I|i|{%f?0QA%|JXXu z79#w}eMw@a`!sfEN+!@`>6RFA`sB-Fj~NrAU=!^lIX#-5*0llC>M;cwBY}O&aQkdq zqE$LVjpJDw0uHixd1p&_WuYo5xig2*)*3rVMZUHvMJlJV*y!+<6SFt+;WB z6p2Op;c>`2!76!a(b9<*>UTUw*h%Q&_QSOz`BnZ``ER9OyULVx;$<(Wd|Hw^S+A4VzR_yjRR?%!<-@S-(qe43vy;(sZ=i5 zWKkx@^njG6;p>;$Yqce1ZZYs3XCx-YP)DAlQn?Ahk)LX70AL87;fm#vZy+?XlDR{U z5zT>F==4u+=B3r&R67D-+F#6YKEhXoQ*wT%gvKQqI)8k5aL^$vhfW{uS2E+ZXM9y~ zp|IbIk4?jG=C-0)Fsdep#>z+6%JL?&xS(M7GCVEys$!y388+$TpVr;fkZ+_Zg=c>& zVcmafPEKcCPQyeN907pBP)K4@+AtxNQcOk6%q0OGfpL0ieqlX21L+6;7$E&+!1!!$ zIEu9Uhgcot3*(8>YP;d=GmKHRe4_}2LYLrllFsPt^pHUb3jWm9JS}JQ2fBPX~7dffyN?XaOv-UN((V!Z`%>UeL4lCpAkb-zb~?I)Tkp%Swr zzh?{%x?S}{A~8vgIK28xoRRh#iO~pLUq;?&uxWesu{ZtJ{r$*7mLFpa%!AtOciTk> z8!KcB1&f*C5yc$q^|1J+!%^DfMLO5Ligi2j*2;hwd`0T&>V&9%`9hLBszU@Wu95n! z=7o+`Ja{O#f>&^Z@si%Fj7G}r`m;~U6RZ4r=sEfT3vcLG5kpzg2U1}dlW)`RKS~r% zheoQQ<-99vdur;*{RITp5G5z?To=TH(e6ye@qFktCn$E^6WOcFrgFwQ z*-%h)l0nWF{>5Rp*wQlnt5n|T)Vw}i?%&ok|Fg;!bx;MXl8H@Tpxk)6iK(t%(h{OT z!q`%?eZjY;Ubm+e4uF!~%@cJbJ#{EzMaZX#mdd)a2(j<7uPk|33=D2DiO^lyeP}!u zbaeLy;aSE0i3-d66^<4rN{1j?tcamDp?bc4*Q(jrGM9E=;P%|-&zEf@e6uG5GM0mG zYe`)2d8a|z`5Oxn>mkNmbEz8klw`}CL7b7ClZ>`Fq!V&1MtwzyM$dg-#oFqY0rZ0W z9BqkeVaY(KF_^AyQgKUsvjjJ#xGLU@%yUg9r9XE1X}Y$GM{9YEJ=lBtRl3RUykWE7 z+vpcv(MzVY_R-|7+McTXBiKT%dhPJzH`5QuoF=}n`U+C&{zBRAxzw63RgBtj^HkV* zRT;m2o^iq;coiL1%pD5RyIKGd?u@xvK!=~Z5oU$ z?0!;~iVF+88r^49t~pb8Lr6nP-G`BhxUY*pxu-r=p&g&Uv3KlsqxP2Ml#8~$=}93T zgqRB{8(tyman;v-+$00CLRwV}_Y*UUU#|&t46CS-x+Jz?!b|t1>Q%5v zMPsZ$#mzdb-h`?!;8c;o&NcmN@$n?&ocGZ~4D7y_Lu}|z?)t#oMb0;syq^YnD+<*@ zScg9=2F0t@n62&69-H zSZ$w6tw+3!GOaw?czE=l?uCU6!gq(i%W$-U~uWviX#^jx4OXR@YJEs&0infjagngG>fze0dJ$%m*4OG zWw&?u9mO(UIKb_g|G}?pS_F~h{d5-4&Ewf2+r5DKd;0%!oU~%izJu{&B~U6SQqpF&;T zTxzdXAemBqX8U;MrQa1FiPIy)PE(X_K45uOC|OBTb9{B0U?t$nC$xxh{@Ww=^rPdK zfrrR0P3 z=#itb8Vmrtb-dr>auPp6IdYt5=DYw57c-GLun{T;}o|9(#e{`g5hc+CR&nM)3 z=Sb5QGMvM+buN~eUn{h$r6E&9h}G{os2j*o^#iy&jMlylZ=#Eiro2j@tRypPGIlul zdYpw@lkeoErEapb){TnwYq#hla12g4hHhf7*!@DUr@j$f;e$PS=wp3dtQOlG=#bhQ zGNYtWb0^h>lwVn^EPqw4JgyO*>u@}(|1vp5KD$(v6hv^_En{GaBzs}y8XkTJfJ+QnH+@!#CoZA=A zQzVvio7tH~L+5X4^W7dX{vRVoCHM10g?#@0cB>Utf9-_m=mvE^-K?E_eW?9~<@GO|4)?*RGS0nAiqtl5(3X7qSE|tdx?-ac%-Nn{CSL$B9cRORdbB_#N-+D z$!fe|_T!Y<*w?eh(|e5ZGPD8=*I+6Jg6L#=G{5PzmCG>G>R5>ipgLa(1OPXLH+$SZ z^>%DazVG0|9d~puhh-~F8aayOWa8ZCA_*nTv=72k-CZwoWwK>@J=VP{gk%|XF!pMj znaGaRzPnl`*!fajTc+?&>^-%fVR6CxyWjPX1kY$i4gPXEc7E~V%goc*%Qv~#bO9L1 ziJHEHN@q+hW#sJS2^}(c3Wt6`aIgRZ8Fwg@wtObckCB`nSP8V{`y(s=Yqp2`1Bs?p za3*1W+Q^^7x432!%|wpb5IIIBd`HI|I^sstU;G3%1YI{=I?H5k>-f>b2?G9m zUTOY&3G4AzY$`oGwSF;s=X2s117M&?lP*z1OpZ$}0hFLtP6%bOR5pl!mwc=(N`T`w z8Q0bbni$mq@tk3x^v5&HYMKm*=%*E$L$ZH6Uu4nKt^8HO>KTjj_0T;En7Kqp99bUq zJI0BIF^9q$MXUvqLduAZS&)JZ{Rc*3j%h*uW(sP3q0dsEAG8MZ8pkXe6LzWzFy_g^WE+?BDQ9iRui=8>V|^g6p6io%O4?1iHC(48BR9E>$ZEHYL-0y+jA9@3W)&9CqD z>AC6Jah{z9#4`Dnw>VkS2i$rN#V#x^# zgdF`@fNpcdbg_wQPMwI}SqqUN=P*m*Ndxm!XW8GI%=o8L0FGXcI6>P!5t<=;vTT)R z5{NSn!BulRfkD#Iw!AIOZNvP_1I-&wdHt`QawiH0!%F?47_Z?Uw7wzTh8nN9ht>jn z1GMF%n$pGs@$38i_1qbBSOV<(!F-93Saoh==VNiKoRa=IAz}Gvk~F17<>}D$lp6U3 zrUlStym4ZZW2aEL<%F&=#?w_QvuHMJGJH8bmCR7V1`0*#SVZnQKW0zuBALZ&nM>*q zo5J9jr%6*Ru!=pUYdvDSV1N;z9koy@AJX-JDObQDH#pHk!d!HPDsFqz^{IxB#^R>I zVO|Y4*-gyg5`h+xX zh{?rVTDkMG1M@`7yY(hL87O`L&LR!vLdik4kTd6r zI+Bft6x2)#q%6=$N@)CPu2o-O;%k*4PV5&aN#B(^c%hDQU$}93#V952bfnAtzN1FzV0EQsXXQ-f(WUdunc-mMXw;vyQ-Y~SX5tB3 zLx53sohg=1Kc=$k5SLf*mqR2UTjV1yJ7f0t_kslE?DJTw+G=+lS8wKmn6vv z@deuV@c`A+{+I3@gvU$PQybyq@W^o89q7yLSEmP?r>DDv)Z3VUC`US&u{09tSpu>Xg*_|yd9F?nW4nE`#+kG9{zKcvExs=$-07dYCyLs~KBq_Xmo{$K5oBK| z)SCBg#fIFwd5_EY$`ab)_x~7s{ln$to>DzD-HaF6&#T-|p6J*0OYXK2pk}yl$>p9$ z*JsvL=TH^vBe!|vf_G2@sBN^0C%ysVkx>tpEHRsS0^%xsK0T_*GaRn-lp#q^VTJ}v zj~x-U-;js+Px|whW}bIh0$r}#cHf$akhpEP(W`(r$)6^F|FQJ#S)uV;E3t;=RDpIu*))o4gAw%B1OSK-{% zR4^`Yck1oiftu6zL6>_+TF%_1#|bYo@q+Y_W~kJPIAGe?GF0F$GM>lL*o}T-)h>IA zl7G&b4&o}-sq7x`iVa+vMVzM@zk@)RGx82?cwcQvnH_an+CXJoC^~DcZhCe4r+j&1 zA4M25zouLaUhJ5W9C{DVq!j@tjP#Z;jb|46F|e#HRh5hkx7Tp>=&awfEfbD#-ManD z`s8~~&meh8Vtf6J+~8l+Yye;e5i@6#Je9{Nb2Mo*SpIf*8mRACD7}Bd{MgLWis&c}G9!2pmgx74vqUKxWjW9y}dd`0OH*FPw(bDOnAz&#e13$C?Y0DN*heWAm z(=PyS^Kf`#4Exy>Tn9Q4o@y%o|d_M++P9m2}J2O&=L&gfg&`gxM8S%O52(Gs3_IaY-Z4_;`T$ zj_N}F3`9cu`e-cIz-4lOj=n7FsQ0SsN`679@|)WgJwpS$u(YA;<^_vr7EEO@*6pi1 zl0d`Q(+Am;?$6JjF^y%o{q>owbW5Rxd?`I5*bKYe*kQ?L;Q#8rln2@Q)_c@zc*OYJ zVA$;qHADRrmLha8fwed&1+Eq*@~()vMe_I-xPI{-h**JV03%IgZU|h??-%N13rjN= zZbB;#B)05a#B6vFaBwKo)FEu^V!JNyyVP_?eNloadpR8wo*go13v?0!|Hkc z0&}rD7(d3>rt^O+#hJ*5Vt3>>4W;c8H^{|s2DHrR?7mZ45te(Ub?aZ%>OXJmKUFTM zfvQ+t4XxQjR8ff&jVQnO-RzufI2JF3VU3!4+HR(708G)LCetahV`wqpP<+W9!#j>_ zmf ztb|V&cDRt^3^^M@6E>0)_7AT76mWd%XrH*-*?L`>cUwxV)Iq1LvsilrbN7}uCbf^*l38EkQOh}43$!QcqL6&_UXaT8hqkATmi{XNmbSP^1^tg zx$9>s2c=eRpNM&K=20-j$y2IJwfUPjvqp(x_N}wWrl+rX-)(Z-xOr@J|2-`;DAn*R z15czNEeeTu_xKPOojMv1;8DXBZN}nYlt{CETeVlYd1B?6-@H*u^9IdDZ;0&5`DZW9 zJi8$`qQ)TFU);7Nd@;x6De4SYQCQcG#f1B4n(F*xO|8*8^fx++{2$Uz6mIN#r#rq8 z^t&;5q*+L2Y)gko7zn$5C?J{`j zk5z!p29|_zFLZMX4P!(-ASx5^IdHhLfEN7yEbMi&BWsg>QPzj^%ve#HmoJkP zG|czoPd4ZxOOj)fPDZlTnu?ECt{U;ZTo;->QT)GT!@qDj^O6{V>06A6Ro*Q_RC0qf zz28=K4f&rv3s39Sp2b?w)-? z6jNR4i%5K*Y^~5l_OOX5HU4mi95slF)^!XEmzJmxc>2bo6aCD*iT|9%QQ>iuYRX?C zZP3=uV<-S1L29_^2}rT85xjQ}j#~uq1D?%XZjS0VhNe~xYY1Zrxw1cG{dn?dqU>K* z_OO(8;NP>3JI6wDpO`)!xw7YV_Oa)uHruhEb`hOIrLNjO#PUmaQ_DNH&vK&s zz1=4WVY+UIATUmk=tgE)<{TT4S#SrBu-(d(vi@|YYeq+r^lWi3RVJ$Zi#E?RWZ>d4 zeC=CNdCPCpjnD?J=9c1w6hs~85fcl z-D%}PaJpOUlq}a`nmF)SXiq;RaSEu*;pf zyZ?2^A9wW4)1VlpOGi7W|F~qYk6aSp-2d&5QkCxQcJuw{Mywt-19ZpWlu>P~&Rql? zU2tyhNJbKg8MsvB%@jmBR#Dn22tN+J|NA$aouvPZKsImMuM&SRuyCBzdt8z+cD7+z z+_z`CQQ<4klh2z3+6)gM-oK=V;i0@#3K37EWle&roi&F=6{UwLN)=}soH-y2zJ5F~ z)B5$K=6~Ii`!B@(N0sB_16XV5sgMhiYs-+5IttoaV%rs?R=I#-yP6LsJw?0#Xb8Dd zZ{wrd(;4;=C<*ozq_?7)t93zJhvW%fBwp5?L%fNcCf+U5T z*EdM5N*%G*7~iYzNskvA8)Sw3vjxnS9!CSyltsv1tg08z>nld$=bVV3R`}}oBzXQU zCMEq`6G-uO3vmuLyGESbn36YHmGXt4GMzn%4Y;u&sQ#u%ozL^qkJv|G@QvMmxiev^ z@#?ERBJn((rJbh>rN5sCTno_*ND$gA8ToTM#ZA}Vbc(Cuv#PjKe;<;3&G_b=-e;rz z!N;_KHy0QQiSukTNue0BvlPE&;hBU9fD*kyAS8$EF4JAjq-I)`jKXTRTw%YpTmplh zH(h^&p81=dQd!h@d&O;~&o!iPCelG)cwa@>x;}_i7@ra@%4?pvLacORj@Xn`^>4Tn z$Ch(P=Oi=v8vjag54kf?J7!yLF-?9)Y|)>q;Pj9q#?Dr&!bFx;tFD&dz)`t^rw>lk>g{*JO zvXg^`=h>)zT)Q_dP6OhyKD=|;9?`|8215J7-UpW+)206Zf$ks0y3qzOe)BfLGlghj zGSk!#BdoR92ohTNG=C8dE4}02%0&YyfH^_=NvaMIA76v>7Wn8*J;vH!adGs$XiXS3 z)IizMxIsl&!GjdZK8xhs7DPLR1?v!F7=Wp{inWsV4c_92F)|_sp0;h_#7Z^3F(iCe zE!)^_A4@FJ8$1fkDeeB^`OKo2<&^40>-udn33__9Wvpn)QWB}WoKEC!luFdnQohNa zb#ib?(ggr$hyVkeV`yYigfUOwQ<@O7Q=cTR#*oO!t?Y%PC#K)TqSk7HLF~37x-)g5 z!(pH}>2|E${@mrIuR7`1zgR_FGv)fmq}+IsH%_Up3GHHtQl`(iFY9teLBvwTN>xBF zJ9kz97i&Dp(c+?Wd__(7QHP~P`-t+>!_<4m@;T5UbId|Nr|ny4U~xkIYkQetU$1tN$L7g9>g7(abR5HVD;%e5CqJSXeN*PI zHf0_WJ#|Vpn(u;-pC3twN49aG0(Ju1^Wq^8YFfCTvO?2W$P4sRdfntn^u+tL#)F3E z-+w7Q33_Ze@^zSWu|)5NIHyGA`L+l9VncB{YQ5N#JD6*kn81rzPeYDmy=44q??^5R zV}z}si%2PlCeh@unX4jD@SOR&iQDAU zGxDj~3Gup;9-*#*xzva5m4P$XiImk<7)1MBUg9ci@x93=Ud?=k$%c1FmVbVaj(@tb zc|SMd+^p!A2+pBj99*zgO88}8tLY^?Y7T0M= zqtzzQDt}tzv$pP_MW?)C7Ib_xZmFO>S*C_j9rF8jqhcG94fDkInWpQ#PFdbR!Jf6V zDDGZ8z7VDPF1z^86!gn*&*=eQ**<7ofdNQ3af>>^-}^#)ly(ye0#`y|fm!38C`J$_ z9Cbdvl>@mlF_(Vg!z4Rm`}o!+#K(Nbx(gSPo7ST(q=F$>b<&%>58<4U~*Q@ zt-IJ>HPaO?fnEvA$&Fd#a<%uRIr`!eJ|$(CM3T0-De7g%J{!zh&|@=pQa<>__RWgR z>7NEM?W$V}42)+;EQ40Kto`+O^r?eGaTHoGLR94X$$~k8&fPulWl+g<^VnkKqMxItXxL$f%UeF9<+_Tlm=XK$tTa;}%-*S` zOzs}mDmdTyg|2|#qNJl32$;SEIvV0k^Pad{qB4Ks#RL#S-Y}(OSlT-Ge@z(c8}bmt%+j z_f7rh%RlPjj4E}JB+%sigVM8mDLYaNK_5qRuS;mRxb5R~(I2E{RI>pc0N{{nFPI>6 za2D&+!(=%#NStiEW0j8ea43L(}#WQYh?F?ypYg7<3puVYRB$GwK)y1i32xGCzM;4&nJ2-CC zR8E-mT1R9R`H3x0rR#psFx^aDlb_{#u?>yZz8ikq_(GxQWq)##TQzU0iP=sU1^jKn zaJ~>a9j?izT-)XV*B;|tR0#9euAzj2Z4dt7KtrfM5CRbJgtJFC_f%SJ@Ye19H7QD5 z0nKm+tE7eCSuAF0(yOfvK5W~;mu3zK7{*CThH_o31{XT#iSW{8P+N}lN{mCiysxob zf%-b45`6RIPR&`-EgR&=PeC85DfLlhGE;>=^3A({-Y3^pMFO&RxnjZzN z8i(99E$*tFfpt|+J5Q#a=)~oqj?=EZH(1``(_Si?#D4zkc`@?e99#bja+2NDBIj=W zRH@8=FKv=%GK9GkG0&|g|HUF#zv_L`tYs<{a!5{8JWQ_|p_5jSX2`<8^GQeWNeGj^ zyDqPF8XKQzG0cSm5(rz1t4E=fmru=CXs_sX*9mgqeV1RAH9jekL`#w9^s;|8WE1*d zJ}Kf$4Ws2U{eGyhULW_;zLp7yD2rmUlJpRDn!`=ft&HwlYICFKJ6}Dy<#SM*e~sdC zo%Y(|Vbat3pR*LIbvI1{I~>d4A7_!0ZCyp$zuEFU_)7RE}wJx893eo8*PaV zRK!r^up~TYKpxYStAq~41Palxqfrb?NVIaG!J2_5MC2TAn!$ zbJ-Hv!#^)5SE!bBvb70lVIQ+%Br5SdId!Gs1(BaJ?tO`9eC9tVL{=Gp*hVYU=U^)!a$^8h_a!9#)xc&r1>$^;V4x_L{IIrke=I~?o^>Zg)` zJ46#*c#2ODiE5MHephjVUl1EnW31@bS#2J`2Ytu^VW}1`W$hvW%h*24#r?cmy@Q z;}Om*bhW@73I&8%V|BuO<}Z|ZClgSj4w63p*>Ny;OvQnuy?Yx|4dDz|g+JlZ!Z}Pf zpymBTic9Y-)8A_^ay6vFAhUhEsBo_AK``vRO|Fsj?@3Li&cUp2eSO z?Qqbysf$(BAX*PCa5V#wQsGVzMi5e^y|nm4bsXI!xd;FY;EN@;t=S~#oY4^lLE*`A z4&Q8%<2Q)RRVsbZy7qP0Eq20%rHX;~S5Va$-g{dhw?xYDtKF+r>_7l{5i$1!*8XUR zkNau2=k{@$adM9=_ifL4uI9s-$o{MIRz0VGOB{CCiKw}$YBYZWvK(40E`s#5KHfz5h4poM9tr<8Rwf@XxD2C|9?0k%f`50L;O_ zUx-kYkvYBt$VJ^+kCu!6tIZe1Ql+loxE*2~-(!3Gu-4{R1@{>e9fx@_1{RN;fg@mW z$Sgbkc@i*lhA|~=uD60P*QS9e*4ixI7RySab^AYTy>~p@f8Y20O$0#@5yXzY2}12g zY(itTR%>rnd$d|X>^&Q*HnnTDMYR>1qGpR~tF~@h-K{&n!Nhv|flKoRU;0DPIFWW4COX4pxTX~pmW?yD-#=mC^jtVG(M1wQ5RwN34hS+|HF)i-aIgj9xVU4p9?V5Y!79DvKZ&3d zjek>e)(+*Hrhd`-!?wnbr_n2_ex2jVhXjso8$G839N)H5p@@HmNkLtLNRvmZgc-YH zf$u#XnGR~%}Fsz2~9+sqcjuT)0nBHC3LH# zeH}Uy4bUegkG=`p4uK4FA zkB_+p6~S&uqx2RlL(r5bMp0%w9SK+n96)f?y#MoaFC3I{9lTAS=v!nG2j) z)hOy($d?>0cR{rUya>>HGJ|b_F+6%&mbnxIqjb>&2^^#c!P#Ii8aeD031AKZpQCPq zb~g9>*2wd{P+F$oT6%EWvKz`@c{~Y*6qopt)mYFP^oq)m#s`Mrv!>-z8c1p9aceIt zQ5~U@45Qa2aBW>rqTBr=Y*MaPA=jdcb7R%%N7h;fk1upxyhg}UT|f95-0ksbCltk; zkfv`yQ6yU@;-VT*}gT|NC;Kt0cRtILpM6l3vJ`LMH*pTB*3 z?q6T&53h?SOC;!^wfr#fCFZs=pn*wK!Du*R@LMW*w#M@)T-r{tJjmxl?XCc57XU%I z7qb!s3(qWdPD8W0Xf12N#q-j8OuaW<}#h3>nu4WBAA~s}DHh!Bo3* zUtl?hpU$7gSfY=1Y1sr34GhwG($law5Ca8Vt!{#?4C`k)DyLTMU`#tf50u#rhY?V4 zOi1fSEasHkC>TBBk?$)BLJLg2gDWaMuIr+L=s@IYr!W}S=o{S02O`B3$fB6v${RmS zn*Tv2%e5=Jj8sB4AP|Q1itK9z@@Bb6!n$7^=Wl2j*gTBC!kZ~rJ zXuF!?<5Q;;-9Jsf5)hxENe-X`7%+ewhLl4GZjfUVNk|Lvqo)w&na}1sI5Dt~C(aYI z#_NN|iR7o^R6}B&oxews*dKwT0snos5KwJn+(5_pg;i_AMXr8j=;$~9nP5*A_(K8tWcT`n*paSDj)J)n~>yP7Wy7Q(HN|z|v5z4<->))Fm5KPAETmgIb#9)1??lr1%01#QX+-e&fVZ$;&7PXl{xWM+zr)iIE>jnlwAc z`Aa+C-@^Mn5cHp&l7A%kEDQjSb*<(WgW@rMVvZh{?n`n2&YZx`V&a463VX3Rn4DvCex~BBw(>S^dT><2A|IWGhXOlFkh~$8SD#eGcuYMmR@1DfzrFF% zKPCA=>6VY7NIN^{DJ}l<9a19V%~lb1v}LWQ+>p^HcLz*trMlE!c66ymD2igz3nn_I z7n6wS1DVr{o+)<1}{5k&bTh@OhM}7)0 z93w5QGlSHIqPIqsKzwmqe`8hr8G66)`po;|0Bu) zOvFD`Hr2LQ%F{C1ZT>*9bN|ScdG_19SjmwYs%eF4-*K|17pD4#K@ktA9tpRQ;c!Mg z#CO+6huKkOu25WDIbLKF{}MMv0~R+XR*8(-b}VKylcwYNWXsJNY&7Pemaim?%{+9? zencQ!Ow{>6m$+z6L_BaI{~&t%`-*j=C0p36f06lmJ)4He!9vZvIO#pF%8Fuph3H-!&zGW@)xy!|6oeEQ&37^P@7@BH_t7r5TQ^MsV0 zdOBWS-*`D{@I4H%hOAO9e1lNx$)}c zXwpAJ=fz1%`(-DR=p*w-Uu{PJ`_AT{7RkTQSP4Ae(?*L1x!wihnLJeA zp6Q&FkboBP3yu)E?vZuOdd0#Jyz$}9A&N1dEGH>h!nim4+CDm0_;@>z$-~S-Z}`ys z@$ZrE%{R@5^9NtJ7u1FqW+jPS^_RZE$>xaQUhs4Vy*k-Z=Yl3?yBS5h5fk5eRlaNp zJYyQkkRd?(TzOpFbT@hHjg=2t6y2qPI&?9PK3NKF$B_sey{y2~3<#B5ZKCAzMNYHR zrOilXxIYkywr6KEeH=SIa?_X41Ye4+K=fV82;{sdWkBD^$!?jErpt`)tXhv6s^A|x ze~=a`WCaB?a>t#-#Njpz!VV!MmkI6!4~|FJhyq?WpVMZ4`9ON!X(;2#UKD!hsj@z< zJ`Y|wS|i_=n^n~$(EO>WQX)}D!JbaW+)scCR`UA{Syx;YU2G6Z$yV}BOH~zQUF= zwZJWklk!ik6_*JRE)kV&s-F@#s8xxz(cnooT{iT2#dRK32TJ2%lRi~#P@KrbdqJ|w zfx2&+MmJEATD| zA(&?Ti8Q4-v3h*Xl5U@v^MBq~T9hLcLTOEscuQNBAY;+Y$!208Oo!uG)0`EvlBn1q zV^o(Z1{5xhEE^j7ZF`fvZETsV#li9{N^T^qKoZA9n%f|7)_}|NJrTmTt2I+h5RuQ% ztalM99{%z%B#++I!tC-nlM9Y3LN2`&xFvhD+DKaBuvEj;hXAisFg{i@`Jiy*ZA_E4 zjAj=TtF@g|t`_kOz10_uqCm`{z4%;T87VOF4` zEog=8^ePl7=FYF8qXv4!N}f;|N=~aLxb6I~E0C`oCS4}_2*Wvpmdp|FCf9QL#$~krkO)+%q_JNhx&3Lk_YpA7^=1Y`D zPs@HYb6V~cv6C4_Kz}WzNm+OsX!alr~54kjGL)!5Lt6nYnC(s?6Yu z;MgSbH-oHN>a*gXfK8yTVSzPNZeJ(~&j ze^mBApsoLoauV?X+m|pan@lCFVYW;e`l9HPji#nKq2n1?v)&IheKQtFhN~RW-{tqe zHeqKhc6{_P%|s>J&9fFo%|(`ELDPFoLY{KnWWj_!fKFC`oXQiSwWFa#ffB2mV;+I6*4M?9)Y0b=R0c>Q%#fzti*(!}g z6tk_8zPL9^axc~!GH<;loW%WITa;N?3SBUV!C;eISwI|2z+ZB3msCGTaj3#hW~7Xk zQpgH<;`~9LI9s?G>G~;2mn!Lzj1Nq>pAW;z7V>;76Y`8U&b^R3zf&LZYie`c#ZjOE z^h-T*9%_k|vuk3>#9p6GBMXDlN9!z`nJnnA>D*~q?$56AzD#7xxre}2Ne}P)m}S-2 znJodFCqLDZDQ>-Z+;Bp-ph2OcnD_?LXuf2_=M5^9pToCK3d!b|_%@Xd%m0B~M@r3L zF6_6Yf_T;fdk%(G34)WYn)C#26K{2!FnotsK5ze_bS(3AmDBAG4tiG{FZPfZ%2~#T z_x<_AwJ>kaH6fyZJj;3A#lIQ8tJSC1HI&Y=w=gH#5*Og`;rX4@-*E2_u00&HkkuC zO+^g)8p6k1R@l>quc7jHuIM#=>8sj_SrGpI&cEUGjQ{oapJi2bERfl-vWY-;gtj^y zYDl64wBge7Z7s2Le2xnG-3!rW6aF>%#M#tKfybhuz9$E>ihf1^HGlXgmm{bE3}2Eh zZ43x%_}ujLs&J_^4(cgWOU%CJFSXVI>pYLXC!-VgK`6moAv}SV3 zPvEhf$rA{A1a>@Me3Z*M1ize#VSHB=@aeg|aN1biV$aUg7hX8+MC6P}28#@}Rl;L3 z%j|{@UVwc4%w^j=7IQa^ke~GS_?jgIfnaVEMS--tafWxx3EjB7&@2(-j9l; z%|1R_|F}G5ws^QxGM@&M+#!{HS@Q_jyiaJjhu}3PTy6wq<@hkM@uJ}FRUS^Lh$1$@ z{wgZQKw7{8#Z%frpwjm;n&S0|5JfFUZ1RQ8>1-bm2OW%>S;Ab`DtQsq4Tsm0?C-|k&C!fjXrmr=boy^D%-8wnpa1vvo zf2m17L8Oqp=NK6Hu4x!Tb!*DLnB&iiF_2VI;w1Ct(`IoVQ_^zk{u z^N9}YgkI-TiBs1Q7gDXq1y`R>XV8;qRU9b3UZcQf8PIw>=_ynFIato{g8J--uprJ3 z`-g_}0knO%ty$igNfG`xK5*HlFT1f__k_#CyRJ`GZI?y&@>3kXds}l9ne4I%P;{`w zTD8B}m*g%nksLshQx!!-!!&};MA9OtOz6qcG9!bUohpHz(%Sp=rC_vjBm1Z zOCguLSN6=S);86-$dV=5E%7wfgj`hjQN z$(-`5+e^61kD~1^<%xi*fjM`8327=m96*pRA2Q`2jgtrfJrmX4%qGIv03=~C($(>s z)jQ0{iDp6nWICoYR4uVnzDQk?2hLqN*qN@UVL$Kad9mx-8o4EZEJKahQ9W=KcE>XK z+t(Z=*x#Wmv40XSVn1C9U0HpkttC~oId118qtESNYtbSRC< zBIVM|R&nt$5Xg{FTm*BuAzyt84^@o zQAJQx+%gu$wW>+g%)Yo6#ie51EaSL#N5+x4JgFhtkge9D}q!@Se z>X`$R`3DKB;{O@u{*fH+Aq`G#t38()goc58Ba=h0t2c+6e zA6jCvgHR4S%nY8uxE_`*G?n@+P_D>MhN4AphvHkZshbZy_ql{P(d?nrP#D&E5)D*3_x2?VOA0p}hO{Y$&eJN99%5 zTeZ;87q9ng>c4VbeU^UfTvO;o9Rlvtu{pK?@(jb#!0ag2GWS#pG1PQy3Y`XgC99Vw z4EyX*RFd+E#;^x_&qXfR(?_$063;^N}^n#!4(1xLZ=_9^p30Zq%jb%_|ee&JV7DtAtPnwf<*UhCDd z%KY|*NJ=!Yg(a#YIZ4V`G^d`K@~J8?3n~z(0()*gqo6uMNQmZO*TG=IM;2bk%?!3| z*+UZa6w151?Y@OOF6plHu-e7m?;{c#kJ{dgu?VsX`UbQXn-kVEo zst7U!6?RzNPcfgo&cP&^1S3pu@6mC-w;PmTLXbP$ryB5hdF};v#nKFVU71UW&==n} z?l(ofxM;-Hk9NLibjRQYwr1rzv|cQrk6O1kWDmU@tSo~P(KgThTo6$Gn3drvtc>#p zk%Lj~v$(Yn6R#+S)WmBY=CPlVpC@Y4TP)J>9zpN55N3X@=*iw!mG#f(;@na$yp7T- z_@4uae;!r^EKPF5rgOG2?w_KzS9b%I^tdD>v@Y%_4S@^m(_d_B(H>UXk{YSYx~CK+ zl3rYu1ECz2=2VsEL2KD)*d`p6%5V)#-(-|mA9m04;`a|zWf?c_CDr(aOlP;N+}d%d zyfuNV-p_)34DV$vPMd(|toXRvXsyicXhQOMicRjxcK%7qK}kt@aP!4}6HHE;nAbJF zI(&CO&fRxz^2L>H|~@s_3Ry*Z{x&KGebqMEFzvG6uxo$#9N$% zq(`&1N+Y@m8gN5*51;VM{(~EyhqN_Ph$crhs=qHWfg;Tto+$>d;oT;Zq*&bz^F7k* zAm-=J7pTxm(M@G8aVDPVYKs2_Y}z%AjkBBcX;a(qtV_Fs!^xz zO5s~M9@T@BrJKE=^ufNHA!a0I6p6aPS87l?{aUczttgKfL%((rBAKBV$X9I`F3!T} zO7UN*QqC+aqpWg@8Zf9}NjAt~?K*HCbF2_x%PQN>PV*xbpW+if}t>gh(E(ZWrgSM=TBa>-X#Y-DwkXD%H`YvGv?+q18 z@qkA-t9zl952e9THliS!v#UW0ynertDHJKRvGEub#azu4cOX-m#qP1)CKyMZo_YtRZaWUm&hK1V% zLY7;HpDc5B8n3#sra3zMwJfJD2gHfcx6l%~N%cJuym#y5)`sc^fI=>DYz#JN%dq_r z^TYj$S$07aL9f~6aE&#l>58Z;o6|O-4ls-LmCZ-q7*!sOttHnPHi1lWX>rzMOn@nq z$4!O|sZ6rRyGb7L*Q5)V4*l3=z8y=v`nXxN?A?Q@#qRA;M=pHOe{|wJn3yEi8>Y&+ zcy&e1XBe5O!n1h&tg@P?DxYeem>8EbuG^wlRX<6Tjs-@SmB9c*L*_XamTe{c=912z zn-Dl(cjhvx;3lR%IP`3wn4j5D#prZc?Ey%e=azx9GE+GD`=bR@Ax6J5+m?%29j51b zjJpaQ9POg$xV0Rlt}D`r9yiF}m*4N#c=Y}zwcU9qEb=Rbf3)Fx*x9okuVm;wR7x=| znECgZdt;^g_F~{^kB;De!(JMId!ds)jGDo9?OP@>5x8iT|xnL8$SFY&c0vTUmJ2g z7uFsBI30GhI*I+J^Bc!^@^kTjfiC@9a-D=#fOF&<@ut!!RZ1pcTwoDoFN+z{#oLwaG{?o2oFHF0T@ z$kNLrkeVqd=LQ^_4_keec*6W)}Lv>h5$(OkHq$jZemWa$QKj;zjmVCa=S= z0-J@{^xCS86lrJ6Rn|LEx0_{S!KT8^4Hu{pIsAE_a~iYXYrk5Ge*fs?-M}CKFp>gf z@&-|{oi}ANiW7|qNQkl{fl3nPcwOaAoab)@3H)hA!2KV*ipKf6e!CW8kBl2rel-VG9J1^fLT_Ml3x9iQLH*%E`P}Oc%P0G+Vxqk ztVIct&})N7*P$EXGZN1J$lF)1XY}}g7Tr{(oTJK{SRpt9V;yyuqy|(it0tQ)+Y1~Y zwrBVk>}b5SzW;XXTgt0nAG8G2+*}!C{72yz8HG8<)R~HiskQ|gldOVnmy$TJA`If& zd`!$)9arx)!+hv(x7GKCY$H1G9&hyFxUq$HjZL{FRUyDmiy+Tbn34!=5v?7{O*vSJ zCFS)}y!^y>J$vd|0<&cXrW9p?@TKHSca7Q1vonV)IM&m3mxTieOOc!}Ee$7L7Ti~Q zea)kCGko~}e^B`E4NXrFO>uz)B4-fSTxMh6mVe??#Ede|3e!7e+^}bPmj()EpxT5> zawvBhh#~|YsO^%PL-P2!LF`^t_D?ah)1Te7~1Ou^9~a zv?ZAVwKYBzkSGCG-kd6IK8JgrWZZN`B<~$X^kN}>&`&lDdB1yP>VbD><*jTPjrgV#=Q6Z|&uW*|xFm8Tp=FYX%7kldA8_zGD zKfU(ibmO&@*zQPvzM9e7EO2qp1vnhPFdcJ7YwnY*iYy%rf-+A6!$A11B?`f-I1!{B z_gLH>M&?!2R*A-wY*|vsiJpUjm-OxU$}i5ux)jRol|D_GtC;W8XGMU%+X*5}qA$7O z-psv-UA2+y zV$7fZek<&V5LFQ*nbd47ElFJW9B&XW@HAyG*U1=8kceyon+s^DBc)W(9vf|AnqVk% z#xOr~KzE|Gu|TFRrzE$^s{2^ZY<`!N3Hx1Z;<>Mu7bG`ZeZNK}x34BdD>=YknTr=e z_NyI!_CI5RmX9~aBA2^kK4K)j+b2xQDa>?q+ZcP8)^={Q8V}L%*F60a!GUal9&TMpcsScHlT;fH(BGQ4F6S?r` zJA3IHF@XI6noj3;Yo^4&ig{|RT^A%~ys;v*ceA|4Ih8j}-5P1Y?%A~oDDH+22$DO8 zW6z#1T)7wRp=uP(TO6Z{i*j-7b*W&^VHMJm=4Nr)*eX_ZL7ErzwA>3^&MlxavBZEkNS>n^V?zuY~Kg1UMd}3Xc+fe}E$Y+65o{Uk=Vck_+Sq zpmh%B^YpoqBz2@=*1%kBUqWjJ5t4otMNnKYOXZPGZNNyPH8K2zq|$ z`SCgQS&98GQYrTK-?rEvvnJ^1Ew%-tqx-XZ&!n%BpuuWi1%}>>nGiVOf(guKBgu^6 z3B#U`w+x(5Y7dodc_IHi@n8VW2}xJoDlK*v;pr*Fd`4gH~Z3ys}gB=DX@ z2`@{J+h8?vrbRlA=)d>kZp@9IxEJ1iSH6KV8KSh0k;{FyR^D`sEZRb^emMF~$sfI{ zNshf?$hu4Bs4mEn$KAUFH9m4Ykzi3OyB=TT`}gOM_zyP@3|q?I0if5y({>Jg7idFN z9UyRgv!rg!|D8LqQSCO^@KVnWU?dvmkwm_BWsNI7ydHX<>N9x%Tqu8whcfB>!D!6@ zkk2hF>ypt@wEOH*WB51GzultqMyKqr=1L}qt53}PH{N=y(BI?qMj+^9nIoz6@e!sl z+4g5DKTF{atYHMA64$yO^lF1zk)o^1XzF^1lCk`s0q&nn?q8=54kk3yhqIRRswxfI~0Gq{uX`POh1lxH>#rLfrAX<4H`}bxDO8{Cd}f9h(XO;DgCNm zpaeHDg0idS0~Qr5&iIUW>vV^B6|a9EmXyC5vBz0NO4cJ@nY&-h{vhb3#LCl2aQ3s} zEOK@4r*s#7Ez;oDslA@cqgkIhKh~9*HTLIb zL9;*T004U;Uc`{0nxhROrh_3rF=5v`L2V4pbM7(%iB2XB{5%Th?%Ccc(7!eS_^m9N z(_f|0hB&P|3uZ8G+`+EvP&@bHPg79afYU!5r2E+H3nG=rSfa^p2(%f+ctTPRn0~l9x5t0SI^@~GSjk-biIc z0<6C2>VoasHRq+srf0w5Kd|pVUlM%~`)J?2_q{(h|1aIWK@a>BDK3#}(6jCWNVLjb zXoJo{u4;vRayO^s?P0FJ=hVMUKdL+yf3nH{>3*O!-JLXPtZ@+arV0T>&$`;fqqPAZ z;h28*AejrFE6j0PMW$ZRz%j^ld1qm)LgVgWdzD+q=AGZ~D3dTA+1AD^dii@xcW-ln zps6A*Grb!8?}noDnMOZNsmRyn#&U?tT=zZ)d9c(WyRaZ94}qh{njfFJiKEup#p;$Y z`oEh9RroAt1>ZaQzI>F`vzY$#;{2)q)Z9N&u8E&!ZFAXjez8X-rYA8R>@&Q&KU~_WIsk!t5({imz_E(=H0tFA>Ab@dS%BLkoqqD z)X7#-S0#-4QB2lF`KV4El2qn!)H!AgfeQuYg_hdG4r`6DY~xSotCS%uqTo?CAAw+< zT%+@8X`EvjQdekA=${jMYgTH!dT-&$Tna}m9x#FX@h-}TSD%*ozIfSfntUVhvc=Ai ziUAXDJr=l$Kkmvb@a>7HoGRaUmwUR8MkIdL9#vq^v!a22Zjq7(J7mgpP>l|qs9e-e z?w}MMem@K2;^BJ;*D?7z1@NYy}&MCoJTTk;A>v zfljjzl=j$OI4xG`#1M@43C}jpvW4)R%23+%j`m5Ig?YPR;IEf3Gdo&x=+QM^G zl9ep-aY~pOIbnByuo9?=rL+SMr74vv+{IV#-S5hW_Ux{rj8d zw-4<~`&rHu2cQ4`C;*)5c7qVRWFv z4-5csH;{EcwVGjQjuHighiRrzhfJ=I^x@uO^5l)7c5;IpFK*cUcH1;O%i2>sogY|V zeP_bW@NY@M#kKR>rdx3X%XT`&aWHe$meM+L(tHs4+t&W;-w=FAyuxq<2Ll(SKK%(UlN_|@A(B18X5 z=L8v@E5CEquCnhef0_O-*Qbrl-tRs>#~7rxFJ8G~H2ubQ?DSW>j<3?jITnGe08uq5 zB?_Ne;UQjMw^d5A<0kLs@B z>P;#cf#Wdm1ordZVExNcRZ|0y8MRkn55Wf`P$!1Wno<_5ze;b|vKSlHjVhzZTTS=;3q z_Rn7mKA-%k4a&SZ$O_IT_Fq?!MM;&ja{F)yY}I##Y0($NJ8?TW zMT;dqV~P0%IVUNxnbw*<^TE*KjA;s!wnJdWZo?>d6+z;rDEaQ^3zkY+rMZSba z=q*)BSVi3FUDwC2wnC*#B(Ljyrpiej9OtN>*i8#^ zeBJtT6#+TkYJKSHNp;=7`N#Iol&$N{@DCN0&7G%~WU$|5G{)@2zU~_6p4HpgYnEZT zu;LfE0q6sWMsaf_gNGS7AEjfMWSYS-Sbw+T*dW zgw9`^^nDs|>s925Ve1FGYfJkkz9$*3xsNlS^^egIs72NgZMZY!0{ujlh(8I~q`7sX z*$icr0Tj%{5vu1t|K@@MoGAZ*Z0Gfax|EZYlOA2^hkRv^E1LVgdY|lCVxvv2iSmj$ zFCOq{Z29iHvQNKjWy~X7)?2$JcjUO>R8wI4IrnI;$Q8Q%&PSo~m6mf4geEQp{q1;O z_ILB;U#Z+?BfVGGm-+i~j}9~MXyrs)Z9u*;INl=x>d?828@%{{)Y4|g7bttxq6%>8 zjN8ylDV5^t!zYlI*Y~XFRqng5S2XE!j*;g0V`U#jZ_RB@X{iaz?qo#g(w98%6h6;3 zquWUC4-9$!S~>VB+0HDKtb+ODb1sv}U7Hr}i1_g*_jX{PX|VB|xQD_-OTm-*ACDO; zW=v`-Z#PKIqT@eH`(Mdvuh@)q8Obp^s z+t~7TW+E}Kp6P>s00KqlkR(||P1JB!RRz{=vZO=ps*`b>rcWoYEurv`rwk5yHvPu_ zqLmL=XKMsavzn`+ReZJJn=Ycm^_PZO!*q>T4ojguP>$q>s?!60kJ3F;ib;o2qxi9$ zVK0_~yE){B+k?-cHP`%&mzGR_MLdjD_5RcEYHOJb+wJWCaw$$F(&6KLUEfuWl-S=+ zRRALZR3kiO1bkPSeb9eBcf5jXn%x(q-BFDmb7dZRh)~lk2K*q%EZLwmse0l|uQ&(A zi&G|sgqbJ9s;tACt1muLQP}2UQOqOZo&?fCs=r6tL5s8BSu<|OkN_))xvR>1ZP5XS zbOYzXnyi)-%*<7uj4PFnQy)Vk3Z3FBTdDvCdb(@~84&eJ*j1-Uc`=wMWGX{gIf(#B zUsm4>;4|UVAJcn!=Hr#^PvIZz_I+NSD#Mp7@Wm9}46mne38%;P*@pyvk}{9`T<0BQ zLjvWkiMR9jlWl_Qo-Pxw8^yBAzWM2kD)qi-PdmsNd1NS zyLn-*Avn>me_|p*-LMP-L|=v3WoIj#y_AWy76kZ5e5hUIf-D?+*D>8)Op$;j<0Ub4 zmZ%Qq>ltGcS>mjib*u<#j=Pft@noWF=?pChtV2k@d89&rHbRevU5k1VDZX^t_fgoh z6CZ=qC*A)#fB5qsSNs1+?&2c=y!776ru&Q~I##SHAv)Hn$WoKgrmKtxvDRn5^lPN$ zavfswK`D7+{3v&&%6Sm6fmNE!WOvvZb~6JIV_1_N915=a89cgj`v$d^RvG8LKwi8n zp7OWogMpXMezpeBx$KV9X zjb!QxD7xFebMNdA@K?V|v2q9Mc+|681i`GF?(B>FqlJ!aT4Y;IA+2gUp*ZExLtMAq zDf;iFBqCCL2%lIzczfY3a}wA{Uqn)6&NIPi!^5x2gV+!fcHKkGpwbmkXfQKj$Z$<6 zk^rDrvCBoTLA%2OK_O`9J=_Wo?Y2XwL|rsxk_g!t(Pc;WFZYhoJNd_%BfAk_3*1bG zr-OV3l-1^V-3iP$Bl@N{MV zMG5KZ!le&aPj@?74N0qi@dL#Ij2PUSN>CKWE>4v|#xA&O&FEn$xOJ&TLFP2>)N%9j zB7*l9oD;=U+_BPl%+pF>I?WC4pG`tH|0qh3^$@h%PSX2B=ug6tKj`u1xLwUGMxwac zOoN8B)mo>P5;IUkwVSUiPn?Re;`M2robN*sMpf6=|H<`>5z#bHS;T&9= zxeiP~QCJBtH<;G%tQzwk!FSIZ+0Ne);u@`3hlcJ&cKdX<{Gn;+HGenr%qhsS54g-L)O?Z#1b2%Bgsv!x6E&fMYk zO|m~AxaihBw7WQ(i|m@CFBa!FT*oQy5^h!Z=lrSaJu6VHVaJl1n%ne&{(?9Qfnn z{FC2Wlm<<_J~&}XL?b|Jrn){bcG?Md)ggVY#MMy+mh!s`W|vokm>uSBM8T+a0a1@- zyV8={u#fSFjnP86X>M%iWN2C6L0m;|j}2amDXEGQeU|RCtq3Gh-tp|DgeY#@tlpql znZ3qbMvk}L-gao_Y`b}08=uOurveIDsI@%Md7oJ-GvrrBTYFbHOj$xt@()|{J)SQe zv7G|#gHSu^5vFMfTDfY9p8OlP!=Hv0-z5KKRmzixe#atyLFefelmbKzWV<~KhXHud zV|!<&U|6ASg|7z|Z$sOwe42I=aw9^MQn`_dS?fu2ZxUF^Z ztPe^Oz6u|tm+-BC2LW)fXg;Krmt)t)gP%8ii{LZ}Ar{ws?5XNl&LQXnqx2%hvjU^_ zW)9A6uqlVF_!UYIhhVBQ+bs-|j2(F?$3cf^x)2klVV7=O;-pc)^yaaTy+ah)KCNU` zv!`w5Ng(H2r>M8f>bA9a28Qmz)jEo;?oZ7l4R_8X3tsBX`wrLMX7u^635)-A%YrtK z(|5xG^!k(yI&oHJc~Zb2@7r3T?J0Y`o$>dNDG%v2m9dG(gJ z9#OyNFrtzc!yZ7YD#J%_{fuW}i1#7^eoq%+7~Es#ELxi&CbWFSe43SZHib@psd&Xi~3sE4D&fku_ z8L@NUJs`yddO5E#&V_JCfRCIleESkx^Oqp5{rj6y^c~KM1#Vx@EjE>%0C*5{(=^h9 zfosnBi{w2_uhB+o!F~u-Vn@`mzAC7F>rPfM+eM!XrrAjTtGA{agufJDS(mPmP%JRl zpT9^2Zf|#e`&3@gtU|YS9G%KOE4%PG_o+`3x#Y>5{I4aMy6ZuS9Q_wx@6U2K;dGN& z#ff`H-V&$3>q&*6PlC$+$MO2rLc{-5ex$+%1@vaUhzRmD|skSa{b#ElNhRpTrex1tbMQj=ksH7 zCwNG(M>lef@mwoIYF%f721V7NdR}6JCoP+c`Ke~e%GVs@{em8jPln6Eg_c8J6ifQq zPa_M4sVi$H-DvMG)8|^sLQuMT}Zpa3q#^a>I=e!G1*55H0{P=*SZ`Y zOW!*fetgfa&i*!bX+KHqBio zHcTo!B{Ah@VyUv!UxEV2xV5s~tJjl$Cn;g=G)g@?j^Sk{%Hd)R8eZAsy~0-erlbW-0Ve&}UZUf&Wk`6!m!S zR7_-M^S5Zip1<1-^W;xi?mOr3S|7VXVNJXN9dN)f7nia#FtJT@w|Na7=$Cz8zWsnV zXy96N+XIV2&Idvr#x%A0_xV0O)7gq_ zYyR(W_mAZEB4|yLc&mj%Gj&Y5e}D*0ax}7yAuFwXID1Qq+Q1J7z|=(&X)MkivM5lr z#w-Ehk)%iDAH-n!T;@x(;klU%VJ@F(*k^MR8t3Od$*R*g=(nX9976ZznXGRiD)n<8 zNkd3b7|EKs$}7Sv&M*4^@b%vDY={55a1ud85IaE$Vz1b`{B~($bl^bSNX_<(#G4Prf;HX77sHrp2D zE?0pc^!L>uF}EcOp3J$so|93KOHFcW7MyH-P)FF1x@-Pc@lzRgVa=gkSDeE7_o*jT zH=~07^IWs$)PSJQ-d;^;dETk-%D~Lv8^6<&w;#i6Y`5?4nN}_^h$mqrjS+!E_B36)X;ovIvn+Biu>Z&o$A{c zH#|+X7fiChhG-*yIi7Z3z5GVSGP8)b#GPj&GHbkXM1p@t;%yXWz>#>|w z888y_>#t>_O;`Z{2C&y$JQw^xQ~526FviloYd1_1GL^$8emh|^AQe<`H#$poDKfSH zLK7A%_aNr^c|t-<@p91(SZJsdh7i&n*3QZwpSsr3FF5-sy1v)VGqb_LMsN zLd@^xnSR&4eP+IZh%vKk?MaYv1FKw)#9QMm{Tc`sbt$Z>3e*CzBK9p>cd1b+r~Zj= zZ^3qunAYQZ`^cI``c*c%uw(l1Hc!0N zMEM+_l7&k^zhi~DvQ_x*3yn}m;URNwUsmJN#FC$Iip(SW(giup?8|BdN57hn{0&xW zFzFa~GUKnc92cvse}4T;GcWdL47yhEg;lVrY#j8vu&vFN=P9iIg^yrJCD-`pg#K#T zr$u8d%Q^o!?)o=lZ6gMZ(N;M{v-vz@L3H{%<1YbmV>!R1uyQm{p(XllN_Cba02o_& zWJR-cDH4)8GxkwxEDSCZ+*vVYM_5v)g`%HBi|o8i9(q&;|cd4<@iPVYk5 z*eBGQpGPOPW#Xeq_!35GQWXK|;$gzB1snjn4IlcndD`+C)&CYI(ehO2>^*=?HPw2y zje_K<^WqeeJ5e!SoU$|#>{>OoH2GVTjOR{Aih8P0jZ1@r%#jhsdPg_qO4W7Kz`yUeV(X^vzo^SGTs+p;c*Xv! z^YDYrr>kb5X#!l2JiQ4rERRyx?2U(`zSoJ{u>d^o#HLAk#KP+7jp^v>v>^zPTx8jl zthOyZqfeV%j#7N#)TiE$e`-LF&H7h1(f!YD8B!QgLxs;86wy)Fik6n@soy#24jR-~$yj3ya#H zdW{rVH8vOX`$fa|whtXCV;MHQrV83+qz>iz<@%V^_cjOKjSnZb$m0JMZZrn*Z(j|I z0I+TQ;YrLyHF%1Y@nJw>J$pDCmc>VAL8hY4xUN(Yn9l9lx~bv$d@Ath!yepWDc7S3 z@+aS!5Jp%L2b>d;PeX;U{2IxT@mcs{)qJch7dS@nV;QA6t3`DCJY;m6K&AQ!jw~Pt@N1yQ*<6qx@bh>fw<=b!DA2FIN zfGuP9pK@}-yHKA5f%cj%jHfwu9TkSbZq&1c33<*byr3H?Oh zIj~!$^!JJvA|13gBInjJUB#Jit!y1$wnB(j^B$SS8<-g@z57)Wk;|RRA*S)2XN1Mu zVba#X;n<<``{s?i-*qb{f0irAM1Jq!(OO1F94Fyizl2E%ES^(s?Q0!&5^%5V>4&5k z0}KINY1|^L^!P`n`L_}QN)iYXeJmSdTE2-g)VUq+q}1kY>Z@jI*m2l;b=9SzV3{MlG7Z zYrwL~kLj^kD{b_!K0uW&R1v5DT%0tr>JZdzCmbfpTy5>ef`8Awogev8f(~a7?=I@sq1{3kA)Xk*!|oN7p|lO-x7KJf@=H#Ocj+KGgCY5srEu zOBBN!YxI-6x2nVS7#NrZiz^62!gNMg=UtS1VB=cIpBh2wX5Fq9m)Qckb?8v7^WUkj zgcytsXbo1XmJ>{pdL1}!tbfiGC6!fAH}TcZ>>deps%ZXRaP{Mh=Qtn%ousz@$Ml2nq`mqg7pnbQ#U^GqcL-29T1 zfT_5CD@vNiGoM}TxE-nMH|(7|iD!YiYua)`ioPhPp-HPxe%ZXb*aq_(^Ihvtj{;0W zQZ=`0`Z?8fL-E0=JFfx)x*1UN+~w9e^YhwHZ3Eo_!-=Nl`KoYCzWj

          v!?V4|YI;Vi(Ws0;azdu4(nB%c?q9q^ zy($%>>ZWZ8P9H-(Hm3@(?$S`tnpk~bG&B~UzCfJlQyUnd zjG4bHP?#1mk(6(%X#mLE(Gf{E7f86c?IiNT??L0eU)OWe4D~9qrB&i*3)wRaNZI+U zJn#jf22Q%2=#g1Y2q`TAD%C-lnTN`Hk+h@n##J>&^C%a!n=g)Kj{T8-z%f_a11wQ|sI9RW3E3om0$Q^1wWc8F@`Arw-vX z-rJg_83)JFkBUlrgBnAjs!AE@ACy|J@o;(fCVKJ7ACPSmH`(c(s$zLH>(Lp!0b>Sk z>^u=edYpTb&~Gn-dwUBb!qu%(3(I;wIypaj9DdgXWED$oq*OVZd}vjn@a|auhXdjt zd=apz8#|Eb^%g(z2bfs_qRG}msiz0(l2(TD;QQsXNGN*_j z2nL}{ZNnX!9FVpoMVtXSKZnW2r;WPEi1~trgC<<2`@qVY%VvmgnPm)_~ueR@%;We~CYV z+p_TT2F&~Qr}iB-D+T%cbvs$7Q6IzPM0Hx0k}utRrgSs9_d2r!Md$SNIJE6#BN{}H zNpJLO-^Z15M0vxRDD)zj=fxC5acM;Hr@Ve_n57e%-qt(c>PVDgKxSY7=mVPKYV5cV zW%`?1Ncx@LEv^ro|FUMg?ntGz3FC^>W?{MM2vPl@^p9gUA)*edJ^rEgMrj)gVQ)HP zevr~mPvI#^^FVrH)T7H$b3c1UZx~kS+(P1bNKQz zC$-+U)(8J2UKD+$VqkybT6rcW4v@M0wE2E}->l7BOEny@eHWDM&fJ$bVCAK+2L#e8 zm?m%vb>gK0YSjb~tP93X^m{_|AyS$0i5{__yX64I9Zyq|w*0Q?93Uoua8KUHK0LJ9 zX49f>yu5w~oaRa;D*nzU8mz{Rio2wi+?(Ksu9^Gwz<6k{x};v~P%+_7h*r>ff?FXp zm3UqC=$1!^WZkK@+w94}4VKfBEpC>E@uKx?=ee-#A?86c@oBQD!(bi}-_%c-#%k8o zhq?c1Qbr;?`5z@J9+n7zT3F}C|6U(!G+opglb$re@Lw;ftRdpOO1x8xKdXIbcP#gNo7v(eZ6hTwTM_Su2;#AjR?rqeHmpOL65WOg{K2GoAQ@|O%+}8$> zx{FRP?+e(ZeF6u5oL>$uK)3SPwZ?c}99=}es3eQcOSE1!Nf`9~)en4KLBd;IU>fGg zufBiqto9nqxzsf1wT>soW~kfeCl3#zB-BZ4kOy8_?3Le>97NA54{<8#Y8;6g+tAro zdIA}RGQpdS3~>-F7G+w$+1HaXn4VR>sWeYPsY3>ho|m zCpz-Yl?saZvKosRW$NsT`>(xW+2+>XIl(s?Ro8W1+4#3@+9IXVaw#Ue6O)3u;*w<# zW1HT|Z7*~mtEv^8Zn@as+_x?`+l$z_a7u(n`H$xk8(|RdkgFq=<|mZ2bQQqhIAt8L zEw+MKuQ5|)qmVcInH9a$Korts=RN|vU@uwy*#L-aml{J*NQ%B}U1$O1b~n6T>b=N1 zTJoyqX22PvfZspDOna{1a=o40TIFpw!k_uI`eGth; z9^}%rRztno1Pfefpk+J?soVHmw!ejsIaPuEorng^9$D zYwI96qcAzw2)6podE84__cTLM`ul(V)8=d$C8N&0<={+A?fn@BkcEMRXSj%5d-;Gt zF*7*UW(=;uBMkIMZtyun24MmlIOe|v0I|E0?GW)}Asy$p36RPFz3wHTimPnK2@I3@Kskz}bhjc;b{}2*@XPi91cuq>dTHLw1b=`}UH6knk-5SA z(VdwNI+c$mLM52sG%sobMVu!M08skENHT403qu7tb=#DG84QFn|p_ z0W^%>t;U9BbAan(4HbFbkrxPvqC!<|kT!&#UZr?SQ%wv20N%KqqYurLqyn$` zC(|LNy#QbLs^~A63A?*5zK1Ztzi{yK5I;+OTM4+s3?=e`#c7PAI?WwRc{TjWPxh(0 z(_Pt`M6XYACib=)Kab9*oBJ4e){yApZO=)i1j@QdAq%S1u06WE8gtaynDNl+uFUye z>o3X`kT0t~WYd zxWl@?q$DgBK-KbOhl2Fhym(l6IBo4}X)^Pn@fGd(Lva(TBX}0QxjQv zNQtgsLTZB{?y()Y@9R>rJa>u&PH`fMWdUw>_&H+ptzyjf9%1*-BKX-WXa2k1)5^S> z(poB7XZE!bePf__a1|ha&4pk7&~D~Wr*k|dq6eJZUaSJ-0Xh@?LKn=4I>r7({6C4q|96%pMf$Y3r3=s2Bfaa zGJZ$r@4DpD&(R6g?nFT29q5;XWZKGltWzKj6bTovrrU+R z`=-H$aIY5;6b-hjJ&(TCd$ z#}uECYyg0nN?uQHh>!J6;15e2LPQ)$=6PaQ(-_6*Mb0P*Gn~f*xlKzJWmrwXkCW?@ zl4o3YJ4vwn8D=j-(m99KfING`U1n!niQme- z|09bjA-7E|rYiQ1xu%W!8#9Yr!v;m7$}3GeW=f-jsPeT#DuSiyGI5I z?+#Gml&Wi)&pEHO=)cFHZgHMzzb~Fi0sM1|!BaYA&CRrs@iG+*=p}iVhB|y?3d@?y zokYQxG45wfE-;#i>vY^mnF&>TXXawPS`%90bWe3irT4)2ZRhUQ3>03LizyS&_vUB8 z-?L{wqZHH+HSc|0{PATk=D%=<|9O@RX7vHEqK{2x^P)`;!pCAHd_;!0hz!%)Hkvx&mc-CmgY}giMdj&0shXfHtO%SOElDnq@i5?#)bO&> zt8d_VWIDnFt|;2JQKvUM)@6UrRU=p2pNoigIu`x?_UZHprv;mli-gD%j!Tm@NAi_k z-9N1)!QAOBU+o1Ay_7Z7Bsp$>r`ryF&(#IcodzzXpyAGuH7|vKgg`JnT@AK=aB`G#w6`6X`=Mo1q zm=3|wkcAYEVM{Fsmf=4wO|oG$nJ|NUe%6ht_6&BaKAF#Q=Q`gXqxjbYIr{USKsA~! zs9c}B@J8)DTP?F{2kd$b6Zj8!=n9-TQBK_T06>|3#tAaD**QazJ8ZY{r4ykn-V`{%YZY4 z5idqL(8lo$%%Iq85Ig5X&NG&D^0nc#W>`-X6}xM-^alvuM-PVL( zxUaj@7ry@};WVG_>8|{f^k#clN={)dfVnQvZuZ&ILs?q66U^P4s+nmio|%Xk3d68M z`^$IY*GCHybq zU9Y*@h^_L~eWUb$3X?XzU?BT6QNAXnJ?hb8%chg&zq0I~RCi1b4ZEWskDKyfBo!5j zy_j-$Fv3vOqSld~61Lh$UElV`4+Fti(c*F-5}rk|9fVNggwV{I0@uRZxchvyvagvN zvihS7+lh%yR>)a!_f-BtJ2oD$vz{!Tv?*BzkE4J9Npc}LTe*Yi`^8hd`T``$crkV9Kwz>|lloHu3 zm2tAw&apvE;i07@uG=r;33{bcId@R4i^k&j(N zD*pM1J2^VOs4m2qKg=%hz&|<6C$Vh|JK}=Ohv`-3X~q&Y!j&D^WmwE?*<;Dnu#m02 z@>eXuiBZXU*_u_U^x&EWP&K_WAWKz@0n!&KFK%k$)!}>dF>$3I3iFm-RUx^F_(AAN zVV#x3Ma_a!@F^}2T5l?(SFl!%$|&MZkF&yOg*zSZSXy)K-0+bTIVWFgdzijaI|(V! zzjyV5tL^AT1?kl0l5y`JQjhE&4;ev{3JZcfk0q+su4jad!S5`)7TgzMoz$qSu}{Cd zP~-FH^+8oTre2977Wex|?NWH3D8oSqMu=^YAzTU5&r+qdK8v|W&k1VH!36N+(HaCW znP4ybEp)sVbf*z7C`AL7`VA4SD+_)(GZ39*dzxJKhc&h zadm(8=;MC}ynm3>+N52Qq?%bQ5>>I+=}N3GI2v+KODWMRr~B87eG{50qG%k4W@AlC zPJm;`Qk1b=14jwGI}GLrGel8Q$zzC1oQ9oya4EGH+8S!2%qO+2Rs$WHrSCdFA`?k~ zuYcC47NDW#g5$Gnx9G(8%x1-Mw|;U zbWdb|<^QR15|i5V>dN2Yjf0<`Z#MOwdwOEvRuTP5qz}NTpj0s@te7HSA{;PrPT(Co z1zD^euo(pwyTy?RfM){?P>QI^`wr_yTyy0dD3RT3bNtz*sK%~Q^m_o*u#HRNw&9C- z90be}2^di}ga8EqqyE&bC1Qest@o#rSb&u0P9~t`j;VIii!k;V^FQC5^nUa^K6iTh zd(6OBQmh!C>T}U}MV|tSV_<-i7f~=G6v%-XpR#dRMaH;uf#LCtbbC-}Eey6NJ0odB zaBt}>)lha8Bf_q=Wn{zJ;2+M5sk@o7Ar0`i1exlzC82SzB`klNcAf}^m+cn$y!2xa z&_6XPy}NLf`A+-UrPg^5hwrKapZdc3L8yKpQ<>O>njsHI_IferBlE9FnUq+@m##D| zyWmWs9R*xJuf4SMM}$D=SWYh+V^!`sXqWvdHSZQ)JQzdaq`E~UMBKunRc z5$4Vy?-f7`CfTL5U7uXMqwD#$=m!^%$h1q4Wzzfe_`lD1XVez0&=4)J4uW;Z#RrTe z-R0mwbszC_11MjbAMGI*uOgKKPniND){!Bxz^UnuK`>`H1XRVINgkT<_KODFXov#o zI*8jJg5(sfYaiXHtgMpCZ!7C&t2H;#dN5Yr#;{g<8%qV_y0r}ZRRy4C$;JU*uPE8i zOmdAL+E6cwe<~A_o7JtkSvBEggz()yXS#ZMs^A;XxA)R6-E=I!gS(mS{ucc1eQP+( zh^fzxf`L)D!en_F4PXRqj233j088SwLLi{-^OCJDZjv#jX^gfNQwYXh822l7T3?ZQ z!w{qjaAJ1=XI_77N2x7xmm9@3J_<5GZ*;R&f;<~6Kn)TOq08?htsA}L{2J3AOg$p` zWE`o9>2y6E)K{cM{+q<(^+xm6bM|e>GYR!Bjmr%`mI8nL60X7$sa-w?8Z`__AUXt>X4ng}U2 zcw(|Qr@0jREa7zpFYuOZ-+moUEy6m+X&FIHe39YY^4aw4uME!Jhtm*XE_txG?)VWp zeEzn{Y~t{R$Q$Cn##5f(IaTGhzw^8E^8by#e~`OA3}D=jGqETuHg!*{PpJ%&2xV85 z!ZxFOVs(Xgryn4<{?CTwU} z-Loe9=r;bhO_GPd??*M?Ybt0hwa~gb(dfKuWae8X) zLI(BiBM(O!HH+;+1Iuzm@e)(~*yO;yWQgUQrznVC0hh{`32xy5cpUsBmJ=gPSQMhR zQobh0BhUkHQ20@PuRY-N{ycceq|9pk(x;C)pXnqiC;>4xo1QC?cYgY2 zlLb&9b0uh|CwAl*Y#GMpUi_`<1}V&7>+(e5iN_6{)BI3j`Vt-kEi#8i;vyGbI0bbC zd$nSQ0rI)?0{hkAtte#^96aY|M}aLxpF{CCX(-#VF=5Dgc&u{2J4b$0^<60IHtuU& zH|N%=@tJ1PJUf3$aG@ydCkDuGpvZXXos}8FOmYh{_L*6kZMSI0av*an{yDB%JAzaD zcUOh9fMPJHI@V*p=m;0~(>x(mfd34Z8Iq1ilmtVRMD$8Qe+1?H>Un%U`>4K|^pM4Q zVth`X@mMS5FM)CA40zbEu%F8#HMDJMsTkeu=cWI+yEV#Vs7juh(TE}JXX{AM$yw9e zfVYBT@1)Wvy_8#j5X8uvJZ6gLlbdmCM!)0HK?vrth)ox z2LM1MnF;`>1o#fEvNb#apy41pU}EmBVONxVz!QEl+B)SyY}P zfr+`w^ZE3BIiJG&O(@N=FrTc(+wnS2r%VLbsat8u-Xfl<>`HRj?CWo^ZzI7;qaecb zs_Vw#XI$^j|9bU?&*<<}>U5&s;f?UP1E9ZlSenv2X2|M+t-A~u8pkph`_s}MhkJ$L zAZdX-Bn$ZEuylN~g~Jr2N#*0+hL>>Z6rTCPAoJ8QL4$|B_|{^5GeKlGqpRDDLTPNfBYss3fdj~Eaiv)ASQeup5dwx9COM~-i(>JQkjlE;8gj_# zfV|It(T1oqa>w8sbAr-vpr?uKA1L1gq(dtyQ4CLd+z9>^S-afrxn3`VSY5F^u>E6S zVICfqcyD?~bN46RP&yVp>S%DmlD#!X-6X?JYA1bWPsZ|r>E9domVf=2=yPVI>@f&PdbCu$#|)8 zkk3rq_xDfk)+!aYy^vXZ8o2dfgReBhIYRiw+2kSM)nN~*m|Ud)83bKO4vnMcGHRSe@u`b4}kBZx#YP-NI3AZ(#$9;45zb$KMk{7LM=ZQVb zW8L!Hk?Z5L^hk|kMb+s~Q%CFW(1WTfTi46H1BPJg^n6$Uo52Y!@e`Y2oqHMneSl(a zG1>Q!yS*xmmE_DF=@oL{ay=r)~(eLODyL!!En`)G~PQ8{3L5>icQo zEmBa&K*3QSeHh!Vk<{Y;XW#jcM}xKuqSlgvLt4}5;$nxyr?KrzKn1=_0Zr7}>kY_( zdOH;l!W~AjDd+79mQnWB&o2qSz<~aV5po8P0xANLwq6U=BihPr$rN)%{`9Rk^{Ag0 zbzb4r()r;q{jU0d2s5*^i8Q4o&b$yMTKAQnbuvzL=Dzs+1jkNfxsa}>wr(kK zWQ3*R>F9}O8v6~EEBqsLdFinkd3KCfw6HjA26IOs@-RX#| zs-|RSWZ_&qIDyexkooZ!+B4Z@wM8(LXWmH929n zn`X>5ZXPWH2><&v8-NpNqTLO%_ zV@?lWA3=boiM64y+x}VHK_&wGrY{pZIJ@o+8>JDO!!?sjZ@bJn8!u3*+>Ypu%8kXM z?KjG+6tP05r$?6GI@hI zQ0;>Kv^uUbB5~N^@%to2C*m_&nXrwsoivO6JP3RE2Q3;FZCUxZBDgw&|ALyPYGKuN z!K1N<$0tc|Pj~(1?W9q=;XH$_hC*b>(!g+)Xf{h=2R$~4&Xamc@b--F1-c7yY3YVP z2XChnq9S0^jD0z~jfIZxl2R%3rSblYtyEH5IHltfo)M~_lfXytcf8u;%~)&lnA{P)^z#)xKk- zl*uIx#3wC7+-?NPZ^?5L+aFZy9wuxjuQ<$EkJ3NkZVR`6@YFc(Pp9q-@#~&mKG)Ls zFu$)WNzIn01m(qtr%ts+j?IQi_bn*oig#)B4P{ad=|=r69SxZY7&N^i_6lYJdNw^m zMYRXDB> z3!j5Or*QIzkCWjQduSa4@0e5rFG#4cl;UA~tZn>Nu)F)rW{1RF7UUCsgBNUJ4 z6H?UkoQq|#Xy|jl`^#&{a#cghduy&W*rlk4{R&IduusEGsaz^F!?5LHz&n#wQi{IG7NX~tD zSh~NwR?VQ%$m5W`}ILL40Hj6Fri=>{pfBfe6>FM6-%Rj28FKhmjxc-COQ97+N4sLEfc|o-`V9Swo zDVo52tgSWelQsZh_3D59ZjKgc2w*@s#zEMj#Q_^}!rb~Ju?e{1@LlfWFknJ@wm=Cf zc@Gh$2P}^}OGmmQm0TRo1oz_*V~On#in-1%I9iyAtVV+Mp>M|m#;m%~gE;SanrYL7 zY-gZ~cvI~-%Ufb_>&(R*n+9}ZQ^s}m&;UU}>@ZxD<8u4>RN)2Z%~$h?p&ExCL#Ja; zZ~b?V=(%5&n3PrhpbIt;>n0%6PT>d{1Wd%Um3m)e!pzHpiKbIfsqdJlQ*HngVf9>C zf8tv~sy{s)eLo$8hR$VgaS#hV;tPR4f0)spJp&Za!zQ@ysPY)DbWw1QR0>9vA0TRl zTNZGL0h9E00hLjUFqABlnpTs!`GXck*(znrhxn4;i{2Q6CRI*On#*YR1-YvKD z^Q7bjkucCI+4j1S=)VZlNo#@X|HR&*w!?B73xHK%IP;Xeql|(bzzGxi47*w zeJWrSh%f@~xNASE9xwV3HLPYADM;G#d-dcJualv)9E#3*I4fl$g6|xkj(Ev7v zNqk>S@O~KC%tZ_!L2=AOWqU%YX^YueEjEvNLJK*F zI?G3gvC6|0L9=U~C#N8zH50e5HG&Gr8GN~k8sTG4gGc#BByJ%)5j+I1G)4d;r$723 z7DuT{?nxrrmVDo?_z%qegItq205tT-+;Y&teXoXwAe!7i$6p-GK8nmPTq@^RTp+HTOC(@uzf?W zPM`jKLq;!UO(xqa{G`C*X8)GVtUy?p)r-yNB4xmhk4x&z z_U96kbuWcnO5_Y;v1q^Ox{vn*GfVDI^e=nnhibG;aqXlD?0i|g?$?y~y!;KW4bNy zL?wC#2BI>(qJKG_83VyS4Cw2dxeIAzGF(O1Eo%+rf|?S7Fq4q->K{f0v36DTs>G5{ zQ41)bdD8T;Z`$eCv75&O7JBZ$iz6!l$l}Zc-~a&z$|Hkox5Tad1Kk)Y=Pi+=8LD&Z z0;3{e_c;isEBK_QUc`gjh!h_`WTJlEn?aRpWaiaD8S@ zeyi4cSI^dUJvxLxjseNQ28xq0VlG+8>|fWrK9Rtb+QKRw;aFFK%M(Ft(%G$(@JtYf zxUx(not>Z!N=Y_&G6SO4#~v`o1HQYs^myXTm$7Rly(heYr^0~xH>anaRC8VUf5ef{ z&Ora}NOJQ4AQdCx;-Hi&HC3wA-zTw@^QQhLdZ0n_|2R7v`1HpICJJtrs|E2A0I2eV48XsR{ zkWXqjlLg~Z(aQa(7S5gnPpQQBk95cOe=tZ`rS!`fv+-f#P9mD|cU86?%u1;+=2|uu zudO=4ckt(bmPZ$Sc=?>gblw&KhX9!9Z>k=d!I^gw^q4^Fc;JP_ZRqL&`-ALBP8XMs zw-f3TmK_O+BKVp{b2FpJkHxVHtXcWCdC;b-exZ^d7CZJP6SlU&==XQ@oU0$_l$~Wp zn|WxyUQpxpWCSM}v+=+oe}+v)(0=zbpYf2K==w}lt+_W0Dp+k4m40(7C_O2AB>Z5n zkv&KCUb>=J%-B8{$-%|v9iGZbs${Q)z2ISkdx#UlveoxlU4omNgky8U^2ZuIcvPbE zt3+mEe+TCStDV`wQcC`U20wzPG8vgi(3T}^hGW0ta-6GT_^>kAYp;zjbGZmpD+#{R z0i2co$)gV1dCvs=U*u>+PeUu4)r8-FEq11;tp)2VH(+}hxdJX1PS*HH$nZxvyq^I> zlS|;jn@ebd4}1#XlR**zzy&o(D-A3;s*Tf&1Y9L!HH5aiGNC?PQ^?0GG@r-Ob8 z=n*kbpEY|S99PJ_t1obkLATGD+M^?i5><2rmhVNTnlTl3-?mXXdsJgv;LC9IbvtA^ zLo2P~)v;&i;|(lFw{ig97Y57@z$DN=P_P+Ci-D-Dwi#xuOI=1wV)nHRA?AJ6ed z3Bkv9#rbmbzHU@@xxGws@Et}&{ll$e9rtuQ372LGrX(N6SuT^s&6l&%?HZFhk&;!B zKN#PFCfv^!7uGnLfGUbFy3VGR{GxaK?GpN3&tZ8|d{07p%r565Z2Yi!-Vtw7ozAZh zksVP`#=>*S*xKDv6&*gr)EZvETg5Ht2bB2_IM#eSrBsYv*^?ge0B6FF*ZtDJ_@5Femp+Y$B`+WC#Yq zYPYluM8v3)wU1Ht&z$iQ8l3v_d_Qk+)^IOH7S+UBprn$OD(ji9_6PJVh1j-K3#FZ} zzMZs&))o8Gz%^v#dP82DBDL0{kusn^(~VRqm}uvbG{P2e62IJL5_G+2wd^Rt2R2V&sfmZ+-)%M?{;QWIewFkf&;Y3_aGghrk4Jftr z5$~`{P$&NDjPnrlU#_bi2bLbd$MZ-YFi=_&Gml=Rdu(D&DGKR6d3_UiajqtABL0UK zv!5y8j>YCl+)D8ETQZlx1VB)8=gu{*z54@k^#D!VOYBR z2gFcHD`191E@N^K^tsPLd?H@;fFt{L#HGzMC3gi|X_!7P{N8=nkXW*wP%c5$~8A+EQ!X^!MR==lXN?vg(uKI-9CLvR#PW?HV8*PB@)vuO+(4;kF8BpDxc^6Td|N-K~ID#}RmgT{8O}y;5=^#rSr_V4J;* zui~E}d${OmVQ%e$_;T7LS!?qQ(b?N$u(v#3RQu??14HK(2|2 z6de2{SveH&c~*)Jnj2cNiwvnM{2lK>r7W{Rg>+TQs>`gqbyGut96uyGC4q$O^|a2~e9^L41AbMOz8w8f1KY>2CiQVCyE10-r}Hw^9#2~Z(D5<32x z9(Tokz|1!C)XqE}w1d{7qHNkwt#NV%6Vm^&oE&rRPdw1Bb|R=RWcj6!WTbIQ((|o= z%)f!gvSc^zL7AqnrqT=ApSKM^n3RYah)wl9zsw30H*ewjtdjE(X(xkA7O#kYA@=DL z=X-UnKyH|VdgzR+%HP6HU(L0LJW0@jdfTdwmth0K{|{a78Px>4Z3~AaK!AWrXrUT9 zp(by>EP&P>mD{?_s^<^@z@`Cl({KAXdX!PHju5wo2l&ZB)5=w1Ajug)w4ManP9&C#fXKH};B=5a&QxM9}~B z-=JG_?{Y2~fBAODr2UT+-P5@F2wrKy$8x~CBM6!yMhI|<{-(d=gdZTemz&K! zGm(p#;#dnd{MnN*Gpb&68dO$Xn8cs&vs@c~i#g0Ehc@oO-3qCX5>nOO>JSuGfCoD$k4D3JrR zW*S+0M~pZuotzqC9p6M%UQNn$31(bMvGl03DjpFq`cCzn-fSLl-EelPc`RF zJ1a(rGB@YC>n-Jw$ECRUV{~gdCnrw&Nzu#xliL~o@*n>;?aA)X{<@c$n8t6}EUSxe zg2F^J`LiTF z$eR72+D=`Rgk6wQ`>ao?ADp!boiqJ(`EPwS{mpg(uwHz%LN(6j_7f!m zk?2QqbD{S2-hs(KMj~rY9v$pO#GHJ)IN5J_(nMPc`Jb>mg`Dqr#%Y!FC0VkY8e@_e zn1%zSQrMZWr#CdEht3yDBs`S82Vfj1Z~w41{MKYx8RI^~EW*|s0n62aK!{j~okC_K zlX@k`UMMO}@w6W(Otn~!^7d|o=H0&zykxyh$tI-vHXVc%YT2F9yYMnRpj>8@ zr+?@5mA`AJZhffe?z^Jl)XWR|a~v}a93O9_QApE+<3?l&2EJBLQPezH5?+``6{T?% zGbg7e7EJ&TR1#Eq>Ft>S%F>y#}5+9N=S#Il?tFrp8nYlLH5spyd!b1y64Y{$QA! zXZaZHgR7I%2KV6*tBp53vyx2rj$7;;lSOwbpvh~~GCh_n$07+E)iHJ#v$)0`>o8JL z7&cjg=W=VdD7gTjPAnfh)#7`bua`s;P5pZ2@YhACQO<^V9Z z<0tEdlM%-vW}^pML6(Jad;Hk(|9oowr^>~wo;h0pfz3dHYAxJj4!wc z{qRV3u^GWjyl>_4Tp9mV_w1@wtB3i%taCBsTqq~*_=PB3l;A;DBt3MDJzP3fi;_o1 zlpEvQ3I}{q2IUS&zJbn;IuFQB`TLzb1{8E5`=TmdNMMhKZoHLz>*)*c8@4Sg73ODN zx`bc!3uk(Ox2AWVo#x-_58^E1ihcJv?Dy1nH4K9oaLrxV6>e_NP}E+Sq_7qg-g`gL zBxR#b_k!Z3Cem~djI)x#pX0}pb(0s3kOePJR?b|qC)%cbnoWnATa7Bt_&KOSHNfLG z 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

      ?c+@&pI2%yI82m> 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⋙qD3Jx>lJ+JP|2M0kr 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

      gj#Ks|-Bu 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

      (?bb<-)t0hhY{GL^YT zFX7)ax@`5-#b>XaZn$*QSo%Z7w3GKv5#{-|9lfwnz9`35eN)%a_L3R*=dGQ}s4B1e ze&jt_%G1wrMl0SMM-8H5T{SQB)(WiN*W9h}S3Y68>r-#O`fRiI&xvZJaMnFn10>vZ z@dS=xjZ`p<6JYc09bs-@1bhu(3V+ZIUdQ5+lb7}>SKu$v2q7GEf4ANG0BJ6?QZUO` zMT{JW&vt*7o&rAL$j#9*9}zX7(re)#Q?%_1eNU%dk*h<&G_P9H-yhuJ&)NmwuzIl? z|F3cGZ;?w?1c?1m;B$f_oX}BBc}{eKn9M(X@L?`0y*E1$_s`*DF3(AnYZyt6t(%LMGMFmck6|xQ@_@wZ7Ew_42zD zesOuQlW%$3#ot__L2gS_v* zEgt}~b_cTuy&5gbLRkvSy+I=g+rjbSW$tG6@IRO+b4f98x5A7)!U9^?#t>0SRieVm z2uC>0iSoI$_Smw<*|MYq^!`aJ{O88yf(EokqXtbPttj{2spU($U2zSy=h(g=%}_SE za`2Nyo9r)5O{=YkyKjX~sodke9_-Zg2cSE6i#bhi#MMiqJU{IwG2YDqwkofE;b965 z+tzA-@U~H??l^0oW9Qb7QIJ%+YZRUoP;0&QJ^YGN?b0>nn0q8LNKeuhdeRNE(-~wLRh}A!)*_g7hOvsq&CILuR|d~-M!IC zrxivZT|))j*j@O!yBOblHYAca2sRWBjynL~ZD_Mr)g#VQ0tfLvM_Ao1rn&TOz8^x)nc|H3jCmF)W^2j6&?gk zF|I{f3-mX1dm2Eh&J;+dsVhAV8CX|I|534{eau z%Oc*+1-~f_*?e?oUv}1jl$QopLFdZ{A$Cm+^8{zA#)Iv#`r|mI^VC z8r!T-nx)BmQk1m)q$~4)9F_N;8@s*okTNG4$`E$6GtD#)murXyC-T;2gY+=4l1Io>2IexUcN7QiKE^7(;N%g zOOL8~%40KaJSR^DL=T^i+5G?5dJDIv!?$gG#i#)r<>-wZ=|(rB!vP}&6dBzOf{L=y z-6AO|B}l4(L8pL}*wP4CU;+aB&F6TZ-|>B)=l%Qz_i^vsbzgCw=hc+xGkyH$$?nEgkHLStUmzT^VP-*NYaI7Q98OEVMPSCqww(L*LrQdRBvKk_no-U+P?1{jtxIr!Th)LdT6rj4u)H9Ua zLqM&X#$R{Wq427C9_#tmP9R}Da@)PNd@dXCyY|k);nnQy39&QE69Q}aw0;9367_J_yi*AI*0LK@*iEx>ut5Y~&37b#5%?(485 zW^Vm(QBfwM!=NV*G10)Ccfw)dfwi1z?Kqu!V)G-|`|w*oixt|B!)-&D>4E|$0D z()WhHm}11f$m@6(jg%)Z+dt={Qoub`Ug1=GXQLZU`FfA8iZvtItlx3H&~m}=3Sb0 zPKtLhrgb6+0GOl7mC#Sv%*Z;Yn1x@;{PZgC0r?(-d0UZ(lB*_;Ufd;Bz`9|YPtLFXBtU5*fmz3Y_gZ+9r}{rjonjQ+ll#!4kHfK%I_pG8Ks zV7i?`O0uiGcqN=N$-7^{k7go~?;@Qs7+y(H<|q^xO&lw4bPm)&fizGBYh(Kp~?HVs8kW> zFDYl#5Nbg)@qEX$)wc5!aq`zM*iUZl4gKri|NHI42sdFBtBdDh^u z@B=WY`jOaS)2x1_uk?o;2*j96J+>2>#y%ycsK++Hzj_>>O#IFge6msUXlHeGlHS~%=xoQUdfl&s} z)61Z<4t&w@yUjgXc%dpc!76AlLz*vb6M_Z2b29kKj&{!I{mNZvJ!hq?Zz^%^lk}-! zQ=8J0gi~aK_>F*$Uz8Owtvnwnpf;E){YFCl$xHQ|Jg3oE>T`iWbzXcdf67B?G@W^q5z|#LOy!iRu;eEz2I^yUMW3x^xEgi%fs8>R4?58nRc1Ab|9PT zZdw*Ll(KvDRY!@{^RB6o3-#}(1E&Mc^Q8iE#@c4F{Z%#DQna%0&oADpaUGG0Q~e*} z#X}~4fQAB#m3lL9_!D;vETjOEg9N;4pofX4p=nFfdNmcFQB3JrVQv>{EziCIa@Kk< z0FkV$De4!8BtP)|m2;b|&=1PhyeSpfXrR?N_aXYB^bXhXy#EDid+m&x>u}`tD51iB zlWQ>TzGKJlcUMQQgwAh-Z`2?3uW0c{M?}T`mHc?riB0-N{rI2sk^eiF)AOXwyY87= z{hN0sGV%-t%NFLnP%MH4;k3) zMIT6Wcim6*G3*MRtz+cD$2!L=&I($H7QDSiZ`SH?f%d%^4wE%y`geME367mF))3K& zO>H7akG|X42cvt=WNJ)RbDp>#lQDzC_}--GEZ_jZNYT)R8cOj?TNyxh7&SZ^EGmOr z?g@%0q?uExl7jPfnQ|G)6<7e75e(~rZ{M*HD|pE^6JQI|bG_rmr0zqhbMx?^yOXj2 zGs3lr2v#E4ru_M`Y0(YX;Fv z(_{JCTnP|9X3i!C7zxHyfE6~$puaAgqAH3^{P;_D&~PGshR##Z-w?hcjJvj;<}MY~ z7LkPvs`3IQbLH4&;C5g^wfCuUHHhft;Mf4hbA@?lrQbH0#5o31 zw`7zGmR6pqaNl#dGt_v4tuz+W>G+FDhkAHCx_6mgqL8Vmm(Po147s6yf}eIwzscHL8nB$Tf8vp-p`VGTy>$aR+nvY2$8NgoY zJHR~xCf6Xh4T*IaT!NG^+?|}Og&m$^&}S&t&XksKP#!ILz9VI)Wcu?ep{s@I z&7UuM`Z~`4la5YP<#cyxkfVrY z4B0&79E`%=F*-y>LM!)l^IVhE(1YSE5D2V3voXq{dvGX!g;Vd684rIxa)^$^jEKkr zqNU`;+Me#y8@foGXY7B(y!JhOR5Rf6OQdXy!gcm=Nddw<&oHt|r>w6Rtybjt*yr~B zm?_pcB2kYzCCI-k4VGXO>3LqoEq><#5Tswg7W`ABieBoh8b$XkD;cl?aCHNGa&Nq= zv?+2$hObe@*ix2=J+?Q5KWO%lg2Yx(2rtx8D?fArnY@+J0x6 zZX%ZLA`@b%$rf^{9zV!JHt-gf?P8}U)neRIx`l#>U$sa+M zRWg!n%xT?C>TvAp$lD7qVGm`4^ZQ}q`f5!E>!0F-CSdb*$^(y8V?6PW2_{A!ro4)S zP+Mf6xGN5r3##km0cUNwh=7soW(sDk3^*9vqXyzLe^wp?I0wsxx6zi!e^1HHNx^~v zVi`FAASa@x+C5KA5K7jnX+*j0f+;31>;N6XzheL0msJm2`59DCf7^(D#D9mlf8^kQ zkV~@#uo~=I5c4gAP-LT?hrz}HoC9ij^Uc7C&y^Ci{l8ZMpaF(|8Ojt?oIH2U zF|T!a4nZGeee@aTeR(hRmPlfvgOuGoEp~%_rKHK<1wb_z5$KUYOSxzu^vJwDz$`8hQ)$)fH8d+&x zBh!nk2j_S(+)yWZ(pG&VUENU6u;;ol!ynugho{=yBRE&m6rlP_a3LIuJe`2S&uoD~ zIBpn}k!_Ol+z5Y1Bkjp>IyaG3w-7^jjp25(*x4#6$Q7B`msIM{Oy29Aqe-{_6!fpC zS~Frxsg{Q!ZZKd7KV478GID%YV39`n4(Tr%pB`gOXDJIHdGyCwt;~DC{Is#5wxGwg zvuQL1(L!i#yuIiqKLk61@D1+Hxulk9gruz3>Qp1(9hR01wd3GTD!rMBF z-+68Mf9?+t0BvEcsOx?O<3wHIY=9d7Q>{dQxMG~fiIaA8*2lv)^=(T}XHn+OQ`g09 z*7~SN_p?giqu{nO>YoaW5G(+T&;1qOkgcqYO&virVc#ByG~U5$6eg>9e6F@h9y-KLOF0hWgz8#kA00A>2k=7qjtH!2?;p ziqaeB9MT1KBVum-+2Ev9`_&qsnsqQt$fzCA-mg5c^{keO<3rTz{DnkkFi>u%ry znBC=BM>eKK$aJ(Sn2ICs%R)x^O_YfxnStwQM)@uGiQ2MBhlw}Ly{#@O)f;iX=@-k{ z0#=GxHd!@eIETxYso%D6Kvz<U%*wF0!7Qo&d``*uhpJ z=~0#XCe=aOoQ&?&Pc)yDdHk@#X+8bIf3!;eL2jOfrncENr$sq!?DZYf@4+ldH$#=Q zWogofgF6z2PXuUw=>7QoapFEn_3!imTEQs7s+rZprZ^5gZ@xG%hk8rtp9+m=zmz=( zC{V+O;Vai!uD}-#$nz+c(%QMx&yl0bYt7Gm=SZKjvaYl)EK^Ums(=mRn#!KAhvLMbQ*mz2(718a z%uVf(m&PG57k+j!82}IrHZvw-d?dXZTP71S^)HI|1ZDkB)$R80gWW zFH>cTxi)X?wb}OBkK8M1_CX?CQ&J^5KM#=VyiN(7%D<&gE2txSmd4ioCQQ?chOSH0 zZMH00?{1Zr@*T01|94LJ4|2$dwCMwj84(G+F%`_X)HJWo^O7&2i#6Z3>3NJ%v0rw1DdZG%&|HU(6i1h36(tM)g{y5Ze8_ps8O z#9K-Oc63eK*p1LT^&SB&+j4$;1OP=J1PBp>txd5mVt7BzzpgKwlt8Ho;2{cUgpl*+ znn9PGADacr=~--@3dt`Vvk#*Ja7LPd1#QI%xQdbH+C;? z3u6@m09}NhL6^wnxvIGq`$0KnJiLsWzkA@eu-cc!j2aaE-RhiJV<@9H;Ak;*RP{mW zs&8Qh!_CA57#_=y@iAPT(Emy4gj>W`V;f*@$*uVeoJgwnj{_Fso{U+4FB$O(s886I z75Z8@;75%;{j5VRv^?oMTt03{wa{nFmT_PjzjCMUpvWIYFEglUk-kIzgY{A(7EKn_|GN9YR|jC*@FIm3au*xP+Ge88SCWZmKUx%U%X$2q zLOnfao?HSqOi-e3EVzHyKN6K@NpTc1vEgj}4(j{KxTIMp@6-!`s3SLeUJjPNL_E=C z&48(w$QKu-7Bd$Y(v^gullw~OLpYS)K`}6NXw*Pa&*qz9}E8Da^lqG<~6VaPz4|z zbaMtv7Uqhxc-wK=C2b2VWM&AGw9{BXY3}DIm(gtp4|*ram{fr|82c^TC^&y+LZ~%i zMbh&)2=B$OiQH2mbUL7rNta9Uh_^jiy-xk?8&GNINWt6=v6kdhB8_K2`{TNAjJV67 zkZ4gf1=}y8*o;H3m|U4^V_KWZ&O;U_9>lqQmNdO(9edA1oC5=n<_C&lvQ{#R9u^M} zZO>ycN-TB)sB&oM2&E_NM@A)#?IOT|5^@1-KV)o<;y`hSTljjxl4;ceY45#6bWTEh zJ-nT+2o436%c6LmnJYa5=n__x#Glg$bgXbxBOcD~I*)f0R*ch4g4C)DBqz5=sFWEd ziJ_@RsxkjA=G2#UfOrPTa6^vw|7C;o4{{d+Xy(*>=ZNW7uIybGpXdxXzr=y2*|vJh z4#N4wQ>T@M0dXt!W(MxiEz$}oLV3^HuoJG!Dk|&v)pdx(WoGQL;V=j3+CI9tR=H+W zl+0!^?&7P#6_*i4XMupYs9mdkS$B!Y7+`zTGvV+&d;!6Wy+pUFMrd$!zhCZ;HQq+# z)nYbH4ejxTIdNVG?}tDR(8b<1#v_a26-E`7HG-rKs*c0Mjk85 z&U2oW$1&;fL@fRA%ol2Lw$8tsU96vBaaG0?AwZ{9Ru_IY(TPDvn+B2 zrJVM9*X0fhqA={X9(NA`0!wCP8=fWi$33;^UJ*%w0jAD1DwZ^#JQ`qxE^xvL7}wtq z=HFbX9q+pTDx#&<;8FU7rS;86=ZenpcXAsmT%_lNrEq)Ddt4V`u;|bV+c+n1C75~~ zh{)>oc>Cjs^z3Z%&TPUX1@Txal|GhguD)!vu}3Q!ObX_!7MAL#P($*n9&_)KuSZE)q<-OR(DVrDk%EeyF5Y^_=f(nJustTA#mz-m&s)aCG3|S zQyuc|_K!1^OR{2gx&_$tJNgP%EH$%r`IqS~J|Fa(JgZwCza{bJnl!1P^-+_bj)FML zy_&E=U&ZSe9UQc?erxG(Cj5u0avHzzUBs53Sd#XQsU*|~vrUElpn>=A()BYN>= z*_CD_P7>bOauI2BAp2RZcEob{926i$axTrqDQ17?Qnr+(U`JYWwzN*AyD}-LZ_?HCehB zQpSb;4_(Pqfuj-rzFduH1PI8haA zs%XxSMZzyVfV$OUi49WB$R3{f6eY+@-N^H@Lu-w^hzGEm`8Q}GSP>OGr}J+ zeaud|#`l|{RyTm@;YWjStad-%>*Cj&?(hCcxE9^`lIzJE^_C}L+fRERTmF!)sEu57 zIhm*(buwFjOa0NTqodl0Eh%rJ7t8}a1K-SUI?d7J~qt56qd(X9c9*OXj@8SAG(S%}pt z@Sk%V9ITM6mQib(RiLYD)67DiuIVdQDZdOJtQcrkah(%{HlCwYkMEzmiR!NgRQm-5 z!5@UJKtLIv85s-C#BHNRC37s&l?PAX^&-ME1+&H0A5WZv<;!qyY+t=#ojkEJeY6uL zJ%0JTEG;v0g%-mrmZ$8zZHK4-n0qd87nCGd+@!H>n#TL?>GJH7R#%P4aJV2`+FmAlAl{95>4TpTpq^Q{5JU;Y81d(CHg8M|dFs(dPnZnRK ze@-ik;thA0Q2|>z(}Vhn_#8V$MM5UFLxO_;Rz;SAvWvj_hDC>s3DupK+MZKS4Z|0VG?Ys^V4OJnhPfUaw&`KR5`I8I(kKp)zSmNaYHm{Y%@z@~=cKV{(k9`vj*^y2z38kf&@Z^&+cnmy zv7Pd3dpRLbvyxXisdLMzdB^wZ7_YSMY(_-HQ}3!F?-2t|SCcZ|vqw2MCm7RD(vdPb z;gY%yyrW%`#nCbb9~H1u6Jy~D+0)o9g>Gy}hikRk&<7wxymlHOo`aoX+Wsu0Ai3BG z0hV}k%!zf+<{gGw^*dTM-v|Oy61ZC~qz5pDK%p$0p5Wreq-NJrGLsr>hwWExs3u|b zW_?O3+`arw4(%cxNem*UQ$Pt#_8|eF!s~U`@CbP3a|ru3#cL3d3iu~lbN%F!+$^1BvtSF$CXk(-r zJx9lfYNBDlh2@WHJ!#4!k1eO%9x61g4^yAq{@!M-ENuQooadr%Uz$HvBI?&mf1=As zp7&f78|@+ej>RvOKct?ThtPB}ZKFX$Vuu#-chyNgOKTib6qqAHVF30Pv*1S)+pM$E zPrubw06reeTQ|v?IuKF@f$>EuN~;XMdBSI!rC`z9^l))kPcL}1-|sD%*^o8yAoZmT zep_raKo6uW7$#Uu&%>KHjjOwgvhCn4aw|6RH_VMQQkdeSiUG8|UXW2k6rsRj3B-lwARN=Hix_Z}RICR>s*Xst29nZC;r8jD%>ZZ)4SC=}{U#%A zlJR*AwyXh7JFGbpbhf3mgHWlT4M%P(^Za*9qBKj%fd~#{B$j`Gt%uw5uE(4_2 zHx62MBWO0shn>++&_{+FdGRn1Tn@XaXkg%357JA~32U$7C^C`0jAwG>u`#jD;Dt9> z9blj&Qh;v97HMc?H~!F8og8^*b3sMbvhOGLlO@f3X`7)jI-u+*9?H*w>j$IE6^c61 z+T3U`J<_+DrHGswpU5+tuPL13GkUrER?hKnuEpY&zONZF9D*G>1<@HB&haB{q8VR3)NRo@ROrs&HJ-G-E1!Qwg0nH2ZyKDTrh z4P7uC71UqM^Drl4>J<0?Zj#U-M{xcOV2v>U2RT_{=0uaB@9turQsK=Xat zmh17+4!NsCI3y^EmK` zV8qzHFWjUxl<&tBKa`G-lk>F9&os3ko@{(xU7}O)S=*NJ+F)nv-pR|;DCW((BF>-Q zItry3`HxX?B{*_;dUyWA^lOMpOig;hbC0dbLLh_!TziPbe%!)9M z(74@-m)91L6vo{;Sg1n(4s{uY^1u~y;@lN3%d73_B5j~pFd~72kEpO`L))|y<^_5o zmZ8C=2Q1FcFc}uS)eYj&?&=Jjb(lWpf%VrU`@{e4&ZodA6uR7%x%{m#@TSIzWaEUs zW#3W$*`$Xbto1!hrc+f$;Te?qtEj2338XtJ2IRUH{_%HvKQ1d{Z_L!)%SZByS!?&6 zId$2Uy=vhXiva2|K2;dA=-}{*7J~6pcsV?a7+w`s4bd&S4-5ec0vAk1VDFv#Q0T0V zIMu|Wt0hEyf#*E&@huI6pm3tI#x5@p7?Qc59XI-+vo~$)gxaA8jkV{uy7$qovpUvc zMDFQWK_mxCVm^{>J-n&2$!{#FW>NLnbRwmJ$g8O+|(u5@EY7wCE zI4&e2o4z_)DkcQqKVjfe4igE@Q(Qky2q-cd3ilW?xa&qYz})hv$35X*5;#4t`0U@p z!w1GnC>P9&Kc25=>QOIxAg^|0Sb2Q2>QD-bl8O~KQ!T%T@^onC)HI?m>Mar$RV+@H zp=0ch9LCh&)SDHYKkL}^mZ^u{#}x;{g14A&Dab&r1&Zhs7pjZNT<3Ss z?4ET|H@oLT18&@HReSS#F@kL$%bq;(G1uXgkA%Nn^^*@)XMN5u^+xK=?>OVyt5Z6M zDbX80d!HZbk7ZjaJR3`Rj<**VBL@C5>L$C9{VoBK^k8JP51s+rbV(D1RD}x{!rf3P z#bPB??)^h2Fl2h2V0Gxw@0MsPYbarrc&j6k&<4h170&dE$y}--u-w-80Bzu?Bu4Qk zj@J8^=CCs_TFX2GZX^)7^u|Y?Gmfww9Haz<#Q43xc=tu7TBhi@!8&#A!uP~O<@I~N zbK{D0blYDceSM@bsvbTgTFhNQQ4oZIZ2gOkVi-3*p}klDX;Pkk!_+>OVdYT74qB7~ zR;|6Om!;`Jw)$z#}tBf zgF2g~zEkis1HDQjlx|vf2Mz_dOXLPI-_mIwj>)_MT(2{fj`l`crWZbfB)Fyb#i=~g zxXC>D2K=rt=DOs}Ej=%ugBWJ+(`uJ1o&Jo)^`Gz#nO}-i>1Q~v%*Th98@m)8%-Dd? z@&4BGha5auoRQU+A7YZsDP;VV4+<7>adjZ-q@$=+f3emOIb7JtLXl{*|Elh=2Saq% ztT=OE3Z$z8)ABIsSogrtTT1t@OBY>tDhE3r1bXUnQ#16Uelg~1KId<8^X%ThnMde&73xW9C7CWZ7M` zCJcoJ;s*MGC_D+20GU!v02PTTTuoPeT36b3NL1l@qpoD4sDBexUMRt*^vMgFL(r7} zJkx~;;Qdu9THW&L>YFUN%TElm;|*(;mk1`opLdRLFoY#*s@VI1x4CY&ea3!!|10ZD zf!Gu5ZT2TB_xv;u9a^TcBNzokTw|j6!o<5*6#w&i{Rg>50a}zxGM~$jcG^o%r9n>i z5~5wj$b8dx5HG$1Y^Fsy;7B}^3MLAC?&~fT$kSnK|Iv&e}o$M ziDL+B?NWBreDZ;yR{KVYF?BIgFXL}w<$BqpH$447w?Y!bp>>{>%p1?S&SLH*E5K#M zhxQD%Z__RgZx^kvCp0`6tL`pgll62Dw(|G#h+3CC7zy+!`NK`KGcWNP?(fo9&`~VL z<><5FXm;EvpZ;i8n@G|VuY>7#C_w*vm5pkf#k!e~l82OrvCN>Eg&A(3!ObN6w+@_F ziJ93p25jqhu$QKZr<&v$omX#rU?cyrJ%*!i`U``i zBTI@_@CWLfCpXTwQV&P^RGcXpj7El1g42kW!m#gUV%ZwQCioHqvbK&E_ zp-o@An4yDtSajs$9w+v+BCc8b}lKDKJs?%P^&Lq+E<0$)e6$2K{gF%~mNnm{| zjpGEQNMtH!zRvE*;GH!?&yEDr6Pzh_B`JmMg!%%}uOH#vT%EQyQ;C7)ZD~*bT)yv?A(8dsbAi&>3`3Tb~SasXS}hzx2ScRtr7^ueCqjsXN>u10bVmrv-c zLm>Q?>0Y@rGBrHCXibiw?Ja;Sh?aW?G$tyg-uYk>IkchO<D(*p4td%?bXTIn_!|}) z6e?exY8s~`DaPbS2H8dseOs|U%eON|zqH?lhFD@Zz^q_Q5}NapjW(hfxmep@+mKZb z5P4Csidi1K<3R{(wCf6K@*lk0{9QLd*c@i(z3@Cz?3^xB?cUeWVfkAp%=>h)dk-F| zUOGW9YuB$|?u+xE@D;onbf2eTsPvF+Dt10DVmfl+srfk_+t^RJyC>+^H>yIJj}^Wr z#q{3eC#CzVb!^)GHtJ~}GwioW5ZGp;o94#9J&QBA2T)b-D^(dUa2 z#W7iHG)LDc-b;h=eGmF<<47I0U6UjZVV*kICKMtp1;O) zTu)s}AP$By=;5Z^zf1}S4fweGX`Qt*NE4R7@kNB!h}p*ampAW`KgmLLz!q-D!b#6U@Gcx z{(PC-U!kQ?oga$JaYG`R!uy62nsfK$47;ap>T+;kR~fr3@-py$`rZ5t%q1I9BG8Fp z{d~pLc&Bu_TW7^G+1St$Jx`t&jpK`vP!mWK6BgWF_-TW%+e)Y~p4%K!PM z{#UPr2Dt#w6ad@L4)eKq%OrBLAhY;5;-6 zhzTP(un#Bo?IRZT~S*~8|4`y!SvRYuVf0h+nZb$%lWu9GQ~Cxm=kXUR^<11 z6_T6}BF8a+2C6{V4Yc$ALksYxzlbQ5IR9nz*&;P&p9Jjg?)%qnYIywncsz3ylX;f9 z@=4@x1a$dlu*u4A?Lm$?{dix1yh%vJPFWIMysCQ}krP+?O1CLL4a|lH0$}6s`9!UC ztFRsUq7ayhu>l2Fsb;~HT-Q6O6X~#u3ctp5fnm06T_0N<^Ge?!cl3o$O6Topxj43DyQ0#D-&P@#Y_Y8kYS1so`F#JOr2YpvyUzf& z#e5p%g0=c7DX#~^%`S0iso+^XTL)Qc#3!c9uSP&R2+cpO7C#PU)WS!=h3QDca05;S z-4zr$fkkPoI?p?N667k{xK?hUivYC6u<)eU-1Q@%-bVf~-@Fsq82~py?+RE~>1o_u z=^f(>au|&UpK1`I}`!mD+B!Doac+trB^_9{OMs}cb{#sAk{zGoMqL3q3H*BTH zXbmgLgH+rA7SkITspp{>H8yb~t44MWMH+q1&85q!BZtTaI8oCvB0u2#Ko0CPj1DZN z=<^z#06m;DgOblNfL^lL}E-%`_n@R16Ji}E-5*osk zTpV!8wW=FAb922W9>qqu?8sb}2+&6sjFzXZ15nf4M^Ke&20FSlRPlu$0xm8%uq#_44p< zh|OBdSc)vZTo7FVm*C}Veig=fh>~3zg?vwK)aOjAt(w;H>U)#3 z&kq$D09k~M9-PefLV`l@g{g=uSXIcVFczOM$>4fV@}}NEhzOL(&!QsygBy@!&fqfy z1%bgJLYG#1VqAvwtcm6*Ft2-J1Xzhq+EEe&B$AzAv*Pjv&BRdveUfh6xGYruqdc*g zbK(uMo$p(`F-;Qn?70Q7!M?3lo!!xK)&BCq#vjNl{FM*+f1b42CFupA%UE z^MP5Bcip(?fVtvqfV4ATRBSL0Q=mzOkr4I5L4(%2T4&ej#rQ7R&q(`VnOJH!3po^~ zpWMMW%&<>fRhR6wH{7(+eRwQi`{6>JL+SIPYpRKf-*dkSVFeBvp%p921xIrqaz5Oy zseRDbd5em5akFZ=1#thVFgEjC1`}wrSOf>biW{H$Nji4D_Sz`Ey#n$vGrD8o)8J)? z_ZUhufM_dE;8WsCEQ{xO;Zi?LbC%ybSj#plV@+mnV-09KH}#5s7^(Y2EAx*UctX6{ zaz?*fqfC-k$x|se&k$G1x@XSHDCk~iOq`Vbb%Q2>p#IXKHp@d{i6y$ZU4qCP=#0jA z5F;MOFiwQn4ihm$=C1(z)iUJ{%*5)QLOTA*tr%4mL&L#OXDIzKh*!B1Xb0twnC%6A z*9K9hcm{j%^OveGO}d|HF%W*zDC-*a_sl}a;nae^aO;HVpiWjlZvaLG=uzF)GS_|8 zyPr9$RZ{Bg9R`KbzDerGv+vwWZ(g%JRyn!< z^P_Nz_Ow~P;lnsWx9H@I(GVQD1d)V-rP!q9+tz*q$r;fk7WHQgK+-DG zWUtFuI)6!kT0^^}B_8VHf9hHPLGJrY8Ywu9mdjbn5-IVG#A~G(_E0ec+0DRtb5@Vc zuRB-(fU(lHiYymxScEeU;hDmCCbNjc+29a*Px-WbQg4%=t9~lyW!Fj+8tKV|VDZmN zy=+2uD#Yzo4ZzSUMgm&|BTh6k(+j6O#NK&h+g(P0v74#&RIcEoi|jH>lSO?$pOq%> zdI(>6nASX+9T!Lad;WA#+MPj0W?-MSX0H9ZtpilenbIX_ku-aUs=GeLt;;!JBF_RG ztR4M{C3vTVOl+%VDY@aECD6L)=`^#86cqr&NOPwE558Le(A)q-K{eiHP*?C^0$&6*8Je1`!20RkzU0l>27hFO*>WT+vz(o6<3~Tin$CAprzNjG{ zVsdzM8mv9zKVKa^6Sy~i&-V_!L6i4438I`}o;wPBSMmlOi~wfA!Bg1y6M#I^NJtA7 z2Oy3HMe+{qz6UVn^6x03Fdh#OZJ(T?#tbbSBcr+5&S5rGzIdwEeEIn9EZv29v&LuW z*3u6{D-#X1)g@1MQtC9*APbR}C_!l6`mFwWMh?Ch;fK4K`5H6S^K5^vHp)3&d*1rH zahZDjXQLlfbOFeiiLc_NL%dGG9wM8Ibqm$li&&tkcz4fUj+ro}@^U(iFxya424!YM3H?QGvyd-Fy@< z%K-4eXOYz9Nh#G#7JxDzgA9F{xpgMrEDER?`EhAs)Xtuo_C#Pdlj}!2=*IuAB>WE# z{(q1&z|$&L@;}IF^nLW8RTZF`Pfm&&SzG9ux0#$-XOn#(GwXaYe(jt+BQwL3$vI!_Qf{ zsrxc--;t~9o_e`?lHJVXm_VBMd69zPHqVQ!@W+x2$kYs=ysq~G%Ue2S%CkK@gKAQN zQFZBX#iEygGwM)lHg{VUSbX6@%6yW9XNo!^xfh5X#2j` z7|Y9pPAPR|s-lC2Dw?R@X8QmlAER~W5H0=7@R45dL{E4B`;P8b2Z9(x8-N&2sWT1< zA}pl4zZLO-GcwG!w>%S zCW-B0A(w@EL1rFF25sw7QQ2EdRn?m#WPtTWy4kY0_+$BX95IW6(p+}@2mGn*?fk!L zm+1a-A0FuvCNU%3=2lLyj)@dkR@ zNXd%Nt^!Uv5j-XD&)De6F#j0M8%reLO{*#<=J57|#_ZJk27z(e;(`E1Mu5#?FN6mO zRT#OpDg5g>ohxXxd$g$?HVAl3*K5jhT*_sb1y=)yS-AFMg=C>n?ljd!yr;*c%#{!q zaZ!o4lPJ<-`FXF1GcHg!?l=dTHv|O8w7bxDiZf%;iBSsJ=Va+e>?*6f!qt%v3)c$n z@yr545UeRwEtEIzf!WA#;)GRWmGx}-gC4Wt$9-I?$FX)=FB>oXd>QtD^Dr|rJ-dgt zPW$8O36sKBLW>8Y($_E&O!w}c(v$gghP&^xNgXIS-i;+|aAtLmGm5mgs3rntJ8) z{~pUUz5OMve)MvJd2|_}@vs#PBe+8LF=~ zKaCMfh)?GB;1E*E?dJ7D0E07tjAr~0Xw`705+CIJQz`DpU33LUjva$CQ;f-Lyyy=M z?80#3Sz>7?A#OYs6lBg4-_O6%!o0`HS0b>eCY6NBv}l2tDbHS?et9+DJ>6Q9(0%hm zaoN*c&*18j(;YWz{O`UiE%m?ZG+z`lo6WQ2;ng^s~M}T?VGik z;%KvIkA{NkPDz@hWueD`zc!Y3^i1pS?+vpsat>38Lr0k`R3yW^d~HG`@ofnrO88n# zacXc$yY&g)J7j(~K#G+0>v$5@!vCa+hu^85VQ(nu|R6pQ_-$3eC`WbYi`2W>xBFx|_N-oDku2iPu|>zQ%ewouOnc z?tK}3!OMn}s5N@lwexoWK+91H%yWb8SmvsaK+d9_G8A1kswy58^%i8KZALNjUP$kn z2Em-BPXYS{t6Xe6)o~ZA{O5meiz6{$;>+^^z`A732XPq}z9l=MjX4|HZOpUN3XdfO z&sBz+Wi)CBO*uAbA8+gY%5t`ns^nS9KliGYmhkoPyqm@ ztpL+Gw9>{*p7H5D^%09-oJwz)%W{=*s3I)2c(0ETcZt9#byu4-7RCZ06bXpY`s~1a zcm^j88`MjqBxFJVpyt4t*K#^s(7oaW&76F8kkNfW(jPZ$YBaBqc>zy`0+$RKO&7QW zI1nei`d97y*}0joJs)A5iTx+ou>$xj;7WQtBCcmjBs2omR73XRQyU4*JSTEtf-T-p zK(LPF6HQw6;_*2j!|Fj`A5#|g#~sF@C)5J?lJko_nc?vC0=1s)C;F=Os|`VkhNJEQ znC6rY&YIe_n&1mwStia8n(^HhX^{o?S|O0I5rsBxcE@xLUUrDF*Fr^jT6!v%`$Nlf zGhtTcnpwKvO#**S#C}Nmi7RCNIYB$79j!+1I+;S1)Gn*zzAD?6!Ba9j`PuW~eN2R; zzNrK;trX%MsfM(m?LO*Z{bn$medsloT3wk9G8hmucBS8g6=C3z2a>JQ`Z+k^WENn8 z5V>+AJw>sQftjD|WejV+5~r621okbD_UNzoiLfqIhawH6e99_;Ipsg zY2KbZr3P!<01#+v^+tJ*>t@teh)GvY%@G5lqz`P6l_~#D-S^9{(~m^)OeIv&zA2A_ z9LhtI)Zx#YtomY9YZMPKDD5yurk>=;i!z;K_pp-tv|KyWOXvY=*KFnNNG1Blp7-bI zzsM`JVf3f%`R5BKYh*(FV(DzQ@#LVyy~O+)42sk+*R#*uJ`Jt=1eJ%qPzSIh*~Yn~ z#^`0^JbFwLj1xdY4Z6#Yl*gED#|&|I!97Xru-%t5vny^XP2I*nx;Mrvbd>-u>#{p` zXQb&Xx?%{4(>zLj`8ubC*wlg&z${8LN+Bpz*#))_Pk}>CQ|GMSvoRX%&^iSE`5u1) zwIEZK=_hk{zbaQ+7L$*PP8GYXYv~Reo404CEl}fnPG$m-bGLhhhnVpwG5DY<6%AOb zButOPg=Du(6S>F$QwE_Y1W!}@d54Tr1vCi{^Wysy;np-Bpp0@>*s{dhZ+SStV5X~9 zL$`F|kOnTx7?f$>5<_UO%7{(Xn_C@zE^{{X-VdH#`#d(h|LQ=Z`K+NTc&zPJ?K9_I zDAaN?5HXMcokWHy-%k7{3X2vZT9-%3l$uJHE9|;qayv(p*V;t@8Xhk2=^xbUmJZ`? z>uUa#F&AqDuV4Yx+*wJP6!9!+PRe zJkD4pqOLfKOiDggUKk6~r=K3r%;&wZ;0e<_C;aq(HG=<9XujT|L$02FXN2q&6mL)* zA5kLDb4C?wUK^bb%yN(0@#+Myk-T&VYb6rP#w>_RIhgKhgjE*`W4^HOj3|A6Pwj*o(;sIfRYBQgdo{XS?(Jit4D5uha88fBH;)e^j}| zsQjSCU%#gIg|d3?H3$HN&w8$p@QjLl3%WHwTl&UKXi~*nx{_`gx50T!=8|VY8OcaY>A5b_2_sb*zh8z?-AwMkX0NW zh!+V#i(#6Q%;LEPDIQ8WyjDqI0*IfDGG}YXBr3vmYt8de3Yf@{;wREKDYQEVei7tc zr8H!QiwyEI7OQ|mWL-wyb->TC=G=02yULW3%hK{%IkV}j*nwSK1|oaJcFt{A))<&w z5)!QlUx(ATMV<^trrofOw_a(12LQ59BA@iQc(F#mBF>md?Ji>5@AIx1L!m<=hM~Mw zLxVKzr}Jvg1qw2OwE9EGORwd{PkgkbnR9->RPsRmS6e=uJFb)55e=`-oyuWQBA)|U z-6mOhqk_NREVeWPm z7e8k4u>VP=|C-7D137=X2J#MgSl!Ugm=Xff{6Gt%wO|i8<4jcX6Dyt^KIu52@j6X_Kv9nRg(xao->szkG zo?JUU7DINUDmWN~4$XS!_1-KxMMXDq1Lw$|E*cibP-f?}sZEBL&%63r7pf#vh3YpsDFRie8TLTYkNQWdbu)l=8>dnL;`VH7^ z$sg0OCX+~4>Y98QL7_4v&0NDw030&eKkmu@LnSXOtB1`rsKB3phJDT;Nl1)0&p~M= zi*(8kjRxOQLq5_2gf0yY9BMU<)gV%&)L{+_EFGfV-zp*(7b)`KuM_ax`p2W?`Pl&c zi7LMPRhDYqD{6~2Ew8TBhz?B1nWFd^;@pT8gbmDx_EJM(ake$svuO@D8&%QG=yOarF~*UoifZ%u}zXHFZA#<#d5(t^hA>^dz!^;C3s{Z3n+=W{26Dk(m=3xZ{tZQ zUWsa>^F+00mkWZ*nMyXQ%zD$&ZF$q6LLNXES^|Rg?V2I4`{yT)o&G(}{Uz3zSO5pz z0dz9oFQ6vcpqTDWtGb#BS95$UR8%Zpdls#<+`SQAu2^(I@{ ztX8^%DkC_7S#B16khlEvPcZ2PrfOGza7EjfpXQ3cua}?>;2lD+-2`QqQ)Yh<%H*EY zYD5fLN3vsU%B012#y?lM>|e$~`ug<@S|4%fM@k0;ab@Wf`n5Mh_@#U>)tdvc3rjX) zEcRwOS%#$1EE9u?UIlJWcIA%rmGHMrR;Vq#n2MN-0h#a5BqyFz!i;C|%G~rmc(k`) zz>Imp#Pb4d<;liuT+HpqXPXWCoOwb!?wt~Y8lSY*pZDhSOKB3Dmw$I&J$!r;1P#~4 zrG|6NM!nEIhQ^;Tw-kk5B$-R(ju}frs~EEkHK1Y8OuqT4xNg}`750AJ9*J;Qw-tB_ z1N~&^swl93Kq=lTKoG@rS_#=Jp3BMzY%UEJH;HdDFJ68IRl?`a$ng$7RJOx)+a|*3 zONXxIWI#N?RK-@vxgI;hP5aaS|A};eAqSGAZ`&OHwQW^wi8AnZiHP#z5mmq_)IQEb za7YfnU#tKy4md~j-P%aeTjzrdrpj6!z`d7>3tf{iJ(Lz?k0mgUjPD^$IipbU#t{Cm z{f;1sSw^7A+ZLj7&ORVpk0rIMoOeAqcilF$RIJwBzg)rWsX-(E04A?)3TII;01r~m zPe1SYp7_A%!TcfFyoc!BAEMs6uZp~nqnn$)b1;lT6pUuXQ4vu&3!U*o zq6Rr^x8B5$`!sE4kEx9fh;TSJh2vHP%pttpwpk|tZ+kMw5NW?F()u`*=*I@2R%nN6 zMINPDHKPjE1uJYGK-(F{HQPV#J#pHW5T`05uWM6n9-`Jd!@(zVPVK0gTTo3!e-iGX zZ3xRC1GKLcKoA|gU|VP}=t5slnSZ8;$RoMKH#jCFUV6eM*<94Eb!GbD(MJb?z}z{5 zqca)X2=7|7Qe4n<)%w6&j%miF!V^;3J=b12+I(VdFt4(Kmk+EJ+Vhtw;WiONTJ&>p zr6G z4=1Yu+iaUGx)qhjR%-zR zrJz{=L%KQAfy!jjb9yhD?1WJMDI+rQ%2X&jvPGvLe6^rxQ)dZyF71OtlGKO_wl{tgYc%#yAJ0$mm9gS=9dw$8O{0!(orCTyw)Cl^JH zo#F{3+QI5K2@+BzPHuYGf))-7M&u)sTdyd=mBPTQ&qM%Y!_UHPU8)lGu~*KDaOb=B zDp0xm2#eVubc-@6F$vIHU3NW@HA?a0ZyQdbI5+gJ+9+53qKo^ygO&Jw$5!nP2X zGgshPnUvvHHxnW>C>?Qqg71XO`SmzHqCbGZ!Z+}0$NHHy*I`6@1 z0el+DDr@5G!o0h*%C)nQ2!2(>-e%V&qk@v{WrVUs27@`*?KWcSb7&U#4r&q1g z^sJ5^<#1bct;5PW6YEkLY);+?tBo(qCGMj$So1~So(uKfEL~!|00vtZS>VzJ$>c$Y zE$m|VpRr`_d2^oP_5nR!=uT}kU;P18jrg9Jq(`XF*N(O8U8mY|AV2o9D-=(>j9x5a z+Bp|C+pf&|Fx>EU$r36TEEM9k3~GIco{P4;@RF-v!X*8cZmwt9pfY5C&9qP-FLs&z z^7u8@w(L>)JnmZt_e#F}_HJh82LS4+K%3+@qlOxlBzGL$L7d-&s>$4+&kc2_Q(3-g zTKf}6{Lo9D9%J`;l@K5=hsFxB@k#J}q*yO$X33whIU@2XM!n!(@xYPb{e9Ev_8iAL zMcc;Q>{q@TN9SB3mW?rwvBmd9Ufc4H-9|i}or4(uvA%Gq@S4%!Eh_eI$6JWopV+AV z`Y$oDFN9A{pZ}8s(13BKh;ybFZ*1JjhjEa_sL70l%(zrFzGu9gwkfHJU?)C*Eu4@vLAW@n`<;&zlR+l)|qlwlrod+cO66?le8SAQC=zxOBhd?hLjl z{j^##!pS;(ZKBj?`by14Q%VxwRhi^_Z4u{VvY4s0Jf(t{M?O@^#@cVM3yFMhKGfXo z`uNTRJkhMWzGPo2wwRkxjDxpQ^-NNr0`CpRhM-y<4q5lefXLw}mNbvginF)RjX%cn zwb$na^XIEybVV9I@XmRA?V?;@7aNz~PW}VNLHFRtnj!4rcl4_yJ_di<_>BK1Snzs{ zGG`z$C>z{g`9x{0E#iPv?-MdP|7xCP4?a>;$hdqDkw*%n@D;0*JL;XcwH-`ffWwX zt9uR=^(Mk6`lR7$!9WxH4pNU=`yDr#?lmznt22|JvBTB}k0h?jATYBv{mDAx$LZ7Q zcICh5)?}Dy2`S7WxUYFe3FBWlB+qXYc&a$8sK{p8;mNq(lXLlm^X?a7f}Wt0A#)Y0 zH?xinOY+Wad^h|Sh<@9~xD!Tzbml=X005Y;c9}rycjPF^C4HYq3CY|bwtQ~;Z{|0< z-7?U@H3}7}#xASJkR0>)B%aV_A&0b9N3RsIP~&q%Eo?|IcI8cD^?(@V{L)t3e2aCV zp!ywTPS-i+!6_f>)(X_vMN*G}u~oYaveEgXfHz2C_)XCSNcsxZxuTb7ZOy1BWjSv=SB{J>L(>{ z-@|$Fm~1%;9_P-v*GU+EkT+u7yyJ8Bbw!fX@U$5pS9k(jl6r-Jt5T+X zoY#ctkLyXD=9(e3@zzJB+m9Rb8LlcCWO3E)1PIF}I3D?^J!LP`z0~ijC=MEYyOpri zewESndWA0A1vjPCUsLsgJzP$gns2P&2fxa`JK;0>S^t(iSAP*-{|e+oD~zZseZkX1 z;a?c`FXWv6dT54OScClRmD1Bna^1Izto5`^|IWJ%>NbIOcjuT&;s@gOvrumase=V^ zREkOt0HBCwx#jY^W3!P_l$Xn@KWK`X@y?^_3eJ29f(c}7rtGJaY*vmL9@o#+f2$^h zlJRiwN461lSJ}naR;NRTOP_D!L@ImQ8f8rTN$aCl=kDxKp>V4d6GdTHFP^jWS5>;~ zAehRu&8#n#N?Tf-IogrG*IvAt-foD&??QrjO5(o6KNhKw1K5TnI*QryPAERU)39n~ zpzk7tbI6%YShk9|g2FgnufiA_hur7o0X%TJh*L4?nm8hl>!!NY6J|X?mCsT2lP_VVx$xQ(d!xL!@L%|g0VZvglN4&bw z&%2}TqkAXE&3w|gonA`)1b6(dJ_OBuD&9Kv`(uNjjm@!?=uz0ktM1_^@Q)g=9!%?T z_0Zc`293<-{N)D^1j5T(@n+NZNb&W>F*%3QvHKy>VnsP-Y&3SRt64M{$hC z%%|8M1OgJklKP+CcoB-|C8LOnLwMYR{(wx75N5R!+Im(iI}Q})SC@cSPon0G+nijQ z;n%rvM{W$ng1zfUNSsWThF97|Zg13c>GEMpp3T4aeE9Kl&E(bXu}8-}7~eQj|B0T7 zm%sRSdSBG3er5hi-m#x8GejdVX)W~dWS8()l!B_P^v(l7eF;g~z*N)->oAcG(aL{7 zzAF?z!mJ6}6l}yJY!bQ;m>*~1E{x>5D6%9iDV@+vYW*f{IkX`*?4TIDT0QjYe%;Z9 z>Bqa7{ZGGdr@e+tbET&Z_7jeCW<_iSv%w)f!gm5P<^u ztdvBew*fL~Jw>GE=xeOKg-d6@rKV5~rI(nnugms#V($s}r zeGkWSY5mXl&K9OQ39Q>-u4_j;-?#j8zcrCV1n}F~tYTIFglGP5K+mW2zN8(&SvWMw z*xt*5s{)(~L{-%;@d3QZEb&c?tc@>j2K-XGoBL_W+f+HB(&;)i_w!+i{em>rTf_4~xpFZZ_TO|Ksg7Zg(4!Jw#GiF6l6A?VL_qo>>-O zYW%4<*7mTu^WoAZznhLuk?FzV?~diLF-N`qb`-dC@>xdZmTCwTtTsq47g7TzPhr)h zbGh}H)ZvIAXI99ZQ*o8N$vsVtyCbikgap*Ll!bnIr=f@0Ei!XgWxuqd30D7>O4H&# zyrE^OGwj#scnc~ds8U5-YB$9hzlu!dZqMN?>levy=;A-!RxtEXT_>u~+*JN#sv?V9 zfm=rG?|z=(KE3^freVoY@%`P8eZ2Ffd<^hR*|3$)UqH&k7-4s$t6oE1cE!dNR%x_f z!m(rw6R!*J(Vyc%#T#RcPyHv35CK(5aUuP~)kU zE+$lfr4ck2`S%5!F1{bu?vN3?EA%b5bK9M@rsd3RlPr1W zDbeGhxNqny-1#uS8qd(Bh_A;kosWz}NzLJW?^Zi*|1)CpCt7Q^y|1kRF1%0R=gW?+ zQM-B|_eaCdWnz;D!V66^QL_OE-9hP~dQ)MI@SbFJw^&in8iW-NF!cf)WiVrpv=id9 zho*W}BOQ81u4O8@bjPboxeZsJaPKPyC$oqt&w_5iSt%-NW8$uG_DoI&X$&iPhl@KD zlqMtaGMXg6>2J$&}hYl7Dat^v0I#}XsZN*Gw=&5 zMMzw)>n6PTYae@wRws$8EQpK}8HeOHQPblj1@txS~%LlcVyW@Zn}9FieC&?MlUBP>>6nDD()FFp7Qfp1V7!MaDt++q`Wh z*tA@~nH||N(Tu$KL^p7MQPV`KK+mKI!yyX7N1B9eaady5(JS1cDaePIN8}ITQCdv9 z{O|8PyRMPfx%Ya=YhKe4z)1$In6u~e(f?X2U)|o7DM(>P1I%g19yn{Z?2M-e{&#wwyTJhj%%|0Q;?p8c?;BnuiLD)n1gs|Tbd{PMlDKT}MmKhrHP}d^+ zQwFq>plsY;lk7~AXZ^>4c}(maZeGsi+Q}<|87B~z(i7y8_Tea*pf}XiG)B2;M0`A> zJ~UnGbWF=hQ1uPp{hNT+ArV~>^28mbQ&3o53Z>Jr(wJ8SmZmy31AtlKCww$cwMk$0 z{yZ{0<@oW_k3{akjFr7JVQ`=6`C=WT-QX@COC399nHAii{wrXY)!o88WopTnWvpxO z_iW?uh1OJuk2^YcJsEs!m6ljOKjY%Q)usC(yT5?t9J86{j=}uvz8)SGjt+mE1sjxU z8^x*JlW5d>0ABA?w+G%o)o|^jq~OtjS7>D#h@vE1(jKGxh)+5;LwMHXQ0Bh9R}^_k z>P9flNr2UZNKp+tqL}& zWT5UkqV~B#fwl+k)}*a;1eIC*uMF;=H15B0IlmZvx{&11(z?{rZy}OVushVo!d~wT zR^k3Fy%%EAaZP`PB)|%+?qZ{g8}2%qn+Gg1&INw1EZ=QFnoE3`$IB?hkO~qL7fNju zVPF-BVROh7y_G1Yu!{JqpZGgg%JzkV-@U3ac>h74U)az_u5HqDJbXmVSgs(|+*!1E zC{+9DxE9y`0q^A7RxY2|kA2UGQ=gjycNR~`=?c6D((saRe&sWNBpWE1}8E6_dt@sk?ygC1JE#g&` zke?SX`7MAKOF`rvFx*R!>KZAsW#9^OOb5I5s0K?YxFkXne?UOzOx@9}&MX#~a4STr zAfj(a38V;$U_zeRLM+k*PtjK6?k{H^SQ9NtaSW$Y9emRV&PMtHt4K^L+Jrk&;v8O8 z3!9`6a%S8W#w6&QNJR$1Vk4rRg!M}eQ-Q(}Du|a0udQr_SV>YL$B!1KtZ8{518%#O zd&8;k28hpYM?T5W-NZhAO?a?&8vl=eY6!z_>jd+b7+X3X^l}|<)Bl0^Vf-afakZ})^inR=--edDAb_!c%nKrtZ9E^Igpp|79 z=o%{Vn0;2{mV0yH{%ZPTsN@6k(}B8`#W&u|-}^@%Z#^4hBw$K3f5kEf?w{BGXd~}? zDXz^z^!dvpW7=>VhkOKj7ywY#C9P(wqK$K?)PCv+bcC`3h28KFZ43jZBM~g(v({_6 zaG8fB2kUS7x>PoUJm9f0Ya$VLxty}VQ;od!h-#~LcBJfqc5P@QevL5maPG}|S;2k; z_nhq)R30uiDrl4Jf1P#ihGzSpSZ9?$pIo4=4&~u+;8y{iA5~`zd)k@nj3G3pi&mF0 z8B*LRzvRRRxy{&h2bE$3Y_*$$o=N?j%0Pv#7izmor!#SvS*YAe>Pyikwt%78BOZC2 z{!lSz^R62`UbP~DT2~)pv_Ho;Iwf38J5W(_iwN`yl_V~q(hRB|T7Uau-*Y~?M-OQE z&Mv3Sl|8t%OZLH6K_b(I2%f+X8Kzb0>I+UE*)(3ieQKGF=a)Bay8QK6^Jg@3d|}GJ zV~#GD!|gEBnSDt37z)YDtJ`I@ilo=j8zW+ z2QrZW4T8z`MDL*Ghg_~eMo#UI3JswaT#0oYa=}?>E#tL!?uMKrw~ea!RGoIjiY!4@ zDiOjC(CoV-chdMusJq-+e$@j`h76rwza}Yuk4}vj{#7<3ds=%W&P?vyNLK8-rpH%n zevaLsl}U#(R}JUw&`(=XK;0|-zACFi#@*hhovpAZ+l(={GAgO37p|Jm2jz;-F6QDd zC7uy#kQetV3$P!%IG9&$+N<`M`#|A3JNxER!!B&;$-|uF%daN}F7yn?-0i~PemqPJ zyga47j(gvjDPA6?HB=Fw(z=3+lVB}5vbtlNPpe-3P)PqMhXtrM-Q2V=m%fUt0=Ia* z;L<_d*5L7*>{eq+-~t=GncjRYOY(3SOPr#yEH;%a@A7nMVxYgHgs0mv6D)I5JEvJ& z;-O+;-STR;dBK+pzApqazg(_dUm1SU7$tdk)AyY99dDjd?khw7xUYxX;UXha;lfbs z_SPSV*$U#7wje8cr&8!J?-MO{QqFw;yLJJO`mYuhQ zYVP>2pSf}XSq@n%P=0ZSoWT%N0R@re0O$bZHFwVHVlQHNNC*w*tFsyL?oUVm`d+J9 z6E-&+K%~^4wJIGOxJFaqW`^2bYkB_1aQfcK2OpQz!ZRWz%>p|Z8oQi8)mF!conKZW z8cs509jH*d?McT$D$=!d6 zhy4uBT+%7tfsQ!JNe2V~fO0X6f0rq%jLTWkX2+%7tBBOFs!)Q!%H=#dq?ckU*hbZK z4S|tEyq~dL$JZ7=6=po%)zPuUcn3_?6P2NA!%g>OtZ!dmxEd>Y^JU;zn#tZ26K|Zg z$&+^sSv77ea~sOEA2T19{CAF{e%>lJzLr2m1>jXh9nNe2z#JSIn#^|XG zGQ@Lc-XA^`QdXSYK>-f>@B&fd!Z{)xzdrGMyEhk%%ti0w>tk5s`3&E5nps{{@oG3Z zC;oB%oNTFmW7$jTRQq3-jZS5b9=&|;dONuB!jFX3Fd6=9T$t}Gac{cZa?mP!#;<43 z6?OcCC01N|=~x^No%P=jJ);tsqtzP|e72ouTJd?v0^B9-wh^-)g!Hw8i9sILJp=%x ztGZ<(f*NhmkzR>NhsHi2-HA#9mTD8fMFFImsa(FXti=j&@VX*OFazkayPl(a7b`o0 z*-rYJ^NXa}hb>we_dB>SfJ^;Vm-wnzbU#lT>ig>FLXX9`$SKmA@^w;!Z$)0^WwH~jy>DDZTs3t|2E=$RiWE91uE6dGT$CTnLm62XUT%rQ3$7!!rqNcq*aW{qhqT5>$0^vie8F`oeAfITNU*$-C(aXZANmV5WBM| z?#$bJ>%VWV4H|EZ7G$cd>Jz`O0c*}$nTT<1m%O>a`*V^1Y(Z_lN`*Foc>T&9UscfO zD`;DNuQ%HaJ>Lri%{ev)U28>OX{-NBtK@IND)|ZkKJc=%+rs(dGa5`0feO*Qi#j-k z#jUBgrP6U-WswzhUIhSwXcq|d4vPmS(?ma&ex{26U|@~Ub9tU#kK?M7d*zRssB8%R zN&RqzwQWAR>GiudDZv4c?%DPZ9z%ezU86nQ&%8^}<}I^rw`h{ZH>JgwEq2@6M2Gh7 z#fY`A$26Qy+xGiQ4^=TRccj_Jtqb-Skv0vg20x`NN1IphmZ> z$_W*Rmyk>@(Jj_}jgaotn8PP+)AitV!%@ZfIOBp)MvP3nU&2^I+3d|M@e71Aa6MYR z`Hc<8jL!-8lD^rtd-z2-zP+;gHSJIK^PgEQ>tF#eW?uyl)+KvGs>W$QGvuzE3|zuq*p$i5PT0;A92$h-Y$JEm z;%b>3&N^4sJ80?ljq|K8MCFyH2oc#Bb{LD){#-VlhZA*W7~)3t)5iK`UhOr?2}ZJ{ zobU*60s=5jOzlI#Tdw*e_tw?R1&obLP8XE8Zhl<5p&}BLc{D!zYBMl27M@tK)QpBZgb+jK%hSp?E^}%J|Obj&Ax( zn7}N!L)Ti{6&P7zL- zRwM5{(a(D1{`<$d7a0c9oB;b|7Xb}($!(nbmfon_w$HHwbo`93y=aM>$2fE9BvLn2 zq~|^?owp*qou^d7tp5HBlcIsdpd6t3DVC*2KgZi@qNSWHW;U7{w^XbTDVJPpzU+PO z0=!|;gn2BTWM&o;M^^OmIZTNq4pc$=a_1vmRiwE!X3QB?U2$OKjFb)r+PK{4_J<@l z#TLg5;8RYMYJt5`3+gBJ36QZZv;J8n&_vGzH)tOeVYUWGLC`^F4aITgr<)+p7&!HK zg$pkHIsdCRdI8WqJ!T6zliHh!!||Flk;8gf3ITi4-CQwdmmthmE-e`dx4WuJK$fAm zA>Oub>P7Ex3HI5ICT@)`PgjE9bVc<j-eEc1dhBk@%}?3aLucu?-Q1NC3>Rc*$8NUo`5l)<`eiNJZRuCN4EbWJ_S|0q zga|JJn1~6c{?pSGPO35Cr*HC8NyPwPkpSL~!1}cyN4SUTyz2_sFSWo8CgRB;9lVk3 z1ygcG4S7ej?(Q3k*k;uJY8kaFdp|m3{^3rrsK63`0qe!I)XtZ)VPF zWI7`IGn4e8S$Js@5US?hrgvI#uCe~sTgOy!xf!Gp6DOI3**W>{_0j(Kr!4=oL-HS; zV58Fj&b}LGtV>M-Ve!3mQE;hre$Fo}`%-R?0f&3mj^6?uaf`m>RF8(QdAF__3h!1H zWX>sb*}5sY_Eip(DsL*cO5aN{d{RGxoN~ek-=mS8S3I;IwWu4lnI_1;NWZj7sR!M0mukA9Q49_7D zxmp1!J{$}{CPp!G-wBs^uD;?pf=fM~y#$7KdtyYACQ31>F(9W2l|~%ADpCv~0O4ZN z5ESO^!fS7@?SUphWSm_WJ;Y`G>sHGd7?PDT_yo16)kO(_$vlXt626)RG)jYa0d#*{ zNyIXG0hk#DK=J)mxGvq-M)X6PgCI1cu_BQ^D-I#Y_pSgTA>49!N~TkIyn5>>AR7qu zdWjAalz7%;9O0s9a6ZLBMpe?xaHz0$x#wu8{8iYF z;)yjXZ18)*MgCo45N#&ctDcr-ehlox47F&R08|ZVD^nY8IJ0j6#%=)7 zMO?}P!|OZ5wFV#HQQKoPZeCjA5k$G)X zEkd8dD@%w=#-rRfU3_}P5deq`7Yh?VpFr>a(}R1o`G4t|{3X_+y1ygVGuCW=$yJH2 zj;;~WZrnr1SpWOc@x~mr<{!L%0C`(_u~{B|gIMUU?Vt(oY~N@muAaO;3^d5@jU(yH z@`@&2lJrA@Jdyy6L-HVvnM5GWSM7AhSZ6M`ey=UH_%5pL0m57zaKmV^!%#J@zWNSW zPhpBbVR1d)v?Ul))cPRdbtTID%)83RrErIwt&b?NoC{f(Z%dfgF5l^DaS|c?0ZrpO zQfN&SuN?YyLa3Gn=UKC??_bP4w{VH6xMr2i&mLJ^R@4h~8Q97v;>xx3X^!k-D&ubb zkASj)`zU|=6f`$+mbtZ$#Zc+F%TEcYtqK?rU^9oG+*Yq<50oJ8Hi_j{`65N|%&b(~ zs05hcdRpaynr{}Om4$%7+EFW2AW{q`{G3VHsZrW1zyg-v_0%U}q#&=ctXt1Qj)9Ss zQm9^yK%`bXtE{|J<{C!GB@W_~Bp#0@XoOU-JnMBd6`evvvhO+d=qY_xay(SN$oWLf zUpSv95e@s?>}xoG^XsnH{ThlCoIO5{t&y4f{H}#C(s?dA-)|0biDaBB3bNz~`xN-~ z$pq~+y$QU;;CYVjs66z)3yHrY)_xT_s9B_GEtR;(x0 zJq)5Ja*J?g&JzY=u2QX?cM;9WcaM@#{wX?O09C;xu?BE}T=$i>W@2SEZRQ+lr=)jW zwh7|x+mphUvhwilOEDcq6K{~lqJ)^W4!tfO2$M@{;Jj+`;T zLKio*%1>(|V_f5u%yOEO{?snz29u$h22n=)qyD8dL%3n%?3TD)cEPR39pAcY7LLe+ z_TJ;83|inICuBbDNNI0>3E&RM(Gy3HX8vf4vAr&nBIF%kqQsPzDua?H1fUHP__Y_R zZg7!dYCi@tyoW;S48E1Lu-G3Au<5p)fb2JePZ>x)V!lUV6ppRhR!RG{vVT)+xGx_x zxR4y@DmU2Wmzqc_Q!fFNWwX*?&1x0-KK;dOkI&n@!i%Sq3gs1bVh_MWhxM|yXJ~&a z9x}a&hw=kPj&9;CzL)DOtLo^lw{)be8<@$6v@v zd(k0hYHF2Xl3kTBWUB0~Jey}OXKXImWvYd!AEszp0|i;AF;~5XG#R;}vT+D0h)eFW zAG^~l98?zC&tQcN_2|C`;r3&c3UTISw@dwcLB^Exku2Y0On}2O>PFl22eBGWP!Hcb z)BD@Qiw_B0VLA0wY08T{(#p3JR99tUDo@@GS$|A2PofOhipd}%|4qTk_t=Fjz9}`@ zk3X^WV}$I_f4w}#nn=RFd07GE1B5Wf`=0Bg9Nd(BVif@Qn#ao$|>0+|k zTnY{xs=zDNBc)biiHoe5DDL1Pma#dmf=&q}}H1!hLm`_r<*;f5dm(kzZ) zMXX9@-lh#C_;qhYrry}c|DUHG{u^=sC^WzQ)h?mUtl5m|xg3j+io4P*kN;^j``MEC z2*fFB^8x~xQ*=^oeMiND^pagnmDR^qx06MF&<75@s%&_poD01+V&=GC64@6+sy_5?A9CLtUEz^la;_c zrktcHdlLTI?R~IHDl0}g5d&tYtC#u9muuzwQd5LCwItM2R!n;{j+830irb5x=Q_l{ zIJOTf*qpbAc^6~EO#Ei5sgO0+ZQXG1)TWykx~`aVMYn)Gm&5(N zu8jLg9|Q*F&M_QiWVg(FA*b)qsvc0P5CWFuz}a1dGDNI>d;MNbA>{HvL0yOzAXrL2 zq%ec)GdhiQ#8nr-jGnj0ZA@n^hvls8$OVUlV!nz$*kNxI5?)(RabT*>l2A3G?Ki97 zMroT?T2grmf+uvB2eV65du&u%c(|O@#8kHO^q9a%;G_`9U~DIbuR%X?TGEA73jtJ4 z@>zpQU>8lqOOz}K^x0+P#x*{(5q+U=^B(0C31GMo_hc-Em^Z|=nA;C@3KzIDYGwj` z9x4zLbL!J47vn?Z!~G-sJf8v7-(rFgr<|3}wbMzs}x+oAyi1PBm9fZ)M{2bUrV?q0lY zaCcgy0zrej(-wDHtXOGrm!hRm!zr}1XbZKx^xb>LJNJLj+n@G_>@oI8X4Y@XoO5x4 zpdu(RsuRRxIG^a&M5hSiFhVG4h$WGd#=6Askkj9o0x#;3wF)fJKehkzh}6qC=uhyW zCcMvor1O>>e{(`=?~r^?TloL(GW$fYCgVrr3Sa>46x`2lk6 zQ(Ok&6>)3)kkzJ0U@)Iu9Z0DgB3s7r)h)0OH^}28mLN5Di$@zSm0O1vLVWs-CUKiS zRaRzckMnSxdG}l->sp>y$XHs|vz4+KxBGNz3*S+%1Ofy)CEo3Gt~Wa;dR=9PuG6(i z#kgGZ4l%`{?O_$+$=8Th%zE>g$`KBn`4~Tc>h5xgCAi@4{iT_Yhk_>v4S&qL0RA@Y z0QvPguiglX(A4IqYdP>x#G8aGKp6`a8c{|<8cRbr34`qm02^(kzF#MH&e!FbneBVJ z4V#Xhy{5mTz~tj6FBvb>PO8OkUhwzBW9{&?uB|<1^BYKGINKCXm$<(+%+i@Wum7~W zgZQYD(6!3M78>iP(U{8&*uXw_>UkQ&owN8e1nbv*- z1|F9LoC!Rr0=3K!1ZG1E56wK=t-@o?>h#?6#?{@)gc|1HE3Z~q;vtHQ()tDfm1qc9P2`UWIkBFj)Fbpziv zCIgeIeIlE_nCRNdV_H3|iW-X~olnZA$=a9GrqkoGE+b{yko9|D-CLVVx+xh1@)R4v z4m!=t%~^Ju^UX;f+RwiK;Z70;Z*K6BtK)^vux)q$9QJ=AZG$@0`o%AXTmx;ZQ!C9^ zZLHH<&;8wL6dn3qfrwVpJ-yQJC;X1om;ZYh!fy;_R+$0QfxwPZp@Sg9;A?IoKrmFKDfB{7dfxO+7E2jg5fnq-3MgrO;o ze2e+7`gsn0-|92(euFuWXg`im)T6CqVa#lI?vs&%d^*UV&C%W0!a>Og&jT*;W0~GT zZ3;rD28x}^q5iI|Zz4;^hl!Q@ti^VCE9wsHkSE0XoL`BQSQ0YOAb=bo4AVpiE1L+d zRCatcB_KCBC_7IS6fPa#YN^I z8CUQ-Y^v$jc}9@;w%nuYI+uW#zAuY7_wUwiGLv4Zgs$`xekSpj2d(adnfKO)z&9l8 zd8r+=I`r!&5S5`wv3GLvUyPe;#C$i>sfdu<>tHxiFfgj_qL!^jV)7-S0M=L_}1r`L6t&OcNO-FxI&1;(XHBxSe=V)S?{ zxc^pjiD0fvjdJSCV`OBQB{`9GlLJct2A<(I;6#ShU@A$B&>n!QN5mfO>->kBNQJ|K zQm9NKT_vDfMt5e z{eEte*m(R}HF&em%@uYi!6jMO{qb*O&EyUyPC#oWBzupjRT`C%fg0sp6J!StE{j2w zWtalv(+Z~V_&Ey!pfbyuP2_|At>C65dqhFS9a`R8N66i57D$(M45NK*O8^c!m z=f2E4F)_GCVwiC$tg zKRU_FK*sAR9V)J_M=RAusxE-kuU%9I5g*|Y!JZhq3;WT90eOy`s;x&S_jH=^Z zi+=Z#12dEDXCB92QkoU?z3pd=-x~jpA8J=w!oE91Ms|&5vyKjSw{D7^2NfenIb|Bo?jJeUW!`-M#Ix+DI^oZvK?4;n04^#eVXlVd(@YIw)F19! zNR%qAyG^7&43r_>GBtp>W}tm>t$DHqi%t;NL^K(%H9tjTUTB^%QX)wTmkq75zzRgG za&<}&nJOo_wfUsGC$G8I+`Jv6ts1&Q`lg4ISNo7+1euAY`#vHgX8B`sw7>7~b*3L# zHHDw%C|-u2L<-6l@!nWz&T>6E?{^4O_RjoGpq?Cv zxfcu4NB9$NI`=0J_uOE5|3b@hH}G_Jy+#u$rYw86*If{9Fq~J}73pPsC2gGQmF`+s ze4DtY>nfbMvs?%?p2k(_YFN3vqR*e4Ryy$p4D3`oGqQ_jXwNnRBS#fww_<>}{E~qh zkZ2)6K#$6-PC!shL^{`}^j?>%4VsphvZ+91F6IR82+?v_S-Yn}{tE_AghnU(=@4+oF6`iQ|L%x>rQjEL?~e_liYmGoz!c1_N;#_Di4g z#N?SfuoH2@Q+jvXYB#^!E$h5kxb1Qnr;n4x#AHLb$>@?(h)ln>$%!mBd7V*T>7&yA z?D(CxA9E+o<86Kx88gr73|+5Ur?nyc>~MjR&e@>r)*6VdngO}?Rkyk@>NIzfSSl_I zUf(W3No1LcmYI5lj890zrEol!|L#224tScCpcHC@N9GiXdGy5!AG(u8AUSn^nzK@w zj556=ms*~sYb{q8zoAzUKh4{}mC%7|>gHXh zVrv4Sp&|lGCxZ@{PR*i2a(xylr5}-WoNgpK7Q078=bs=E(hrt15Y$CIeKBVk5^Vp zEC3*{SggV9h_}7|i2q$V3p>nsMcO?23)3*ps>#kqq1U=qP81?o@;&_`xDxMO81l_+ z3y3pI#<}V-C%G}1Ptmo_?=$Q;Cpq6GjBnoheSq_hCH#HXR|pBr#I^V$8FtFN3i6t^v z*U7+;bl^kE956png2Ph^=T`1J*e|XW=e*mxO8AX(<6?u_}h^ zd3hAp-EAGdOW_rkbj;Rx$Vz6~_b@q?2l@IHtFj-LD`Jyj^i2gu6vvdz|QtG+a6iEvCw^(~QibHeH*?4|B!^<78 zG;oZ9ir!z`FPTT9K7lb=$l!=sVp)I;p%=oh#jazMuFJ1qadc=6dWB;;HSS&ypOT;} zWGh2mOLl7hJ|P6Ve%9h{7}oiYesQ`g=t^x*>2dwlNmbO}0>Xv$vveK^8Qn;XP&x^k zs9q;0p^<+?V5K@tz^Zl=>-5pfWb?U9wVv;^8K1rI_^+qnlSfro?npG|Oa@80iamaC~4q)4o%X z7M%qoWKEyeBqLb!Nv2IbS!ijmcU;TJ#NLC(j`6qen>n_iEzivY+6ehZI=1g+vcG2( z%s!*fN;f68el6a3q{Y0CenH7v_GRS%?*9^hw*R{RLC%8&K)-WO$DG~NuPt?Aip=k< z)BHB87Hy46j541mZS7nc@zZ4zt}7C<*tD+A3LRHW38_z($Z@v}7Krsk2A{StaG(ld zvRp4?qdWHQC5=oJZ_6XNwxqMljGeOhu?ujLR*=_O2q1u&ncSZ}?uJLhJ7y@^^1j<) zBU8hDiPvYG38E@4S_;`gtan2sFJOlCb={abV<^G}cV#XTc$!kYIBW0zk+6!4R^$pO zCR(J>(Hy%DVP)>d+hILexNS;W4|OhFA&~*RfL}Fn0tJt<8$Ms zP&rfKx7(|?&diS{D{u1^loWQMU>cjmU8jFS)7j|&G)aor240ti;!k?&1`4Btl45Z5 zWBQsT=s^;v7UJSO(BKe5p&lp7UgJbkD!xj5brYw-lQ_o~&dE$&<$jAp!jEJ`$ENE8DQZKyYF&EruV=Nt7fNL`v}wi`*{AaZvs=rOsE^r&h9dof;VpB?eE7J$SQDmTB-4(*XNvf`kBoee!SsjA zGq?`R-;PJR+-{;8>A1NU5{aM3t5GAJzgiXieq`P1Ju)%x{oZeREI~Ig|7dJ;%CYw7 zqlym7Q1N6qf98S(yLoko2K2%1ZprCK!spMtWPKzP*M^QL*}QL82(Ep?3T}8ZN*AK! z&zPvCpYZ`0q$=k(87&5R^U+?oIM#_sb)w%dt~sQ8xFL}jAO9Op#UY#!jm_buqUs1V z;(;|-e`Z0k#DDVgd^vxrf_Ykh&qmYCOYHmDH%t4$BK@^5tnpIfS{6F93Wr{m*2U`_ z&59&UCku`Dmb?Q9gi*~vHd~T`RIpZVplb~Y)Om34B{KphpR-}s0^*oMqj64VF09ig zA*6!A2lNmJONzk*HgojgbORn%r4j2k6q9fUaY4k&j_@*5x5ptjZ1=qsC?{n#)1L*i z>5U%`t5ZzJ?k!l}o)j;6M=%pgn0WRwIZxM*iB#4$h;40i^A=MZjQeNWmc7EQh{{3Q zS+@2&Pk&7;Ef!xACr&4ScQS2o_Z%q0;Q&h(U3qJCgwzkiqHz7kOsuv8jhUJeWocZ< z0oK$&PbyiDZH@bM6xxeXh10QtW_m%&U(00Q!xn_H%FCwTYB8e+-~fH!hijT){utOa zYZk<7SjbF(Ckt>iCw=sM?x`d>{!#pHGcnd((A6&e&-{`90^GkIiLdYifZk18XP!ME z0qwg}e;&YllleBg3Z0J_W}y;!lH2&Nc-Z2SCuu7`S*U?4>Q@&rxq^Xsujmo9;R7rZ zIJnW2orXmU2PfgPo%rKKJu5Ex@qsxB)o7=9C20NU=g6P2*{TSH+^fsh+}4j4)7=!OyB6s#N=6P@YOY^AL2!fheL z)VcwPg9s~P=aEj=W1ytc+|CgeHRawz&-(nL$BmT>6tViM3>~E@Y*~2-0Tu3@h!7!% zLio5mVw&gEPyeyYuY$hmw24;dE@gt}%Ub>J^!0D8qX>V>A&A0Ro+>E?D@VAYlwve7 zczoK7861wD??z+&v4|qP54wD?2uT6<8AAG`yCa!WaFdS`9=0(6eaemiRyv+DTF!uP z9$E5w&C<(_CdhV#^>_SiR$sq=_Kx49Wff-DFTRHpzdwBb!zF^K zH>>;W4TE_r1Gav;_1@oZk=Fgsuf{GfI=GgTciF1?e`N*B8Gr22pZX@G*7&Qj71|^DU--COF7#sMUyjFZS_iLh3yrjTaCto1Wml_| zTHA?I=@{Jn>O=VHeV;y(`)m{~r1c+F#J_Vjdxp3(jyS8PiHJB({4@pk5?_Yeu@d); zM8-&0B1!u6yGclR_8x?r)dX%+*sB>ekRZVa%wDV}+L<7{hb^z|6El66ZN=lwe)h|U z2M?7LH}EE5b!KA(rVa^t`Yfy_gT~YmZ5ZpVx$5pvr%g^^8b|0Kr=ij#| zY7;P3y0reg@D%EORCBLFcy&GO%w(8x2uCy?d3EKyI@X`@G*9>QwaR(|;aPq9o8AE; zvNW?(vZ>^})2VZ;0CO2sLk`)0*>?ea@f)%)1`RE)Kp4H?d%%rC4H zow(K4(5-J3)w>>uzMvORFPq8_u%U~3k-=7vc{=ps`dleIbwEXz`b-HJ>s3OLX8fD$ zp93U2dcJ%gSFFd~Puj_`{&^w)GCd60HJcKBtAd(bmKQr(+2m|SA^{Lvdqql18>@kP z#e+6OD&ghxFqWxx7KL5;gITN^mO5rBMtd!I31GIEAq!(3{Tt2mU)PpXMv*(eEv9M1 zGkIDk>x-`ArIy7fEILm-6gtMn?{AV*%LLt!(pr7lP$G=Xk1TtXnuEQthwyuxWH6h6xp9J|7x(RyNPV44l z6&ctOeq`r}v!Aa)cC3z(WZBjZS!cmv&e-aKosvh%6Dm!WlMc`yRU zVhbPef9A{mgWPkXyPT_?-a?L#e@DuJh>)N74x<2{hQHhAAzgk?lCGLE006fDXhGuP zA7_lBQPY4K-5or?rf;0_T!MnXTVl6~i3e>9SUGKM%&!#T8=gy*jk^m(emGp*WBAHt22fK_HFhbUB6Zn zssJHOgzp$8K&m4W-02=4zY&#s8M-~5jToSrfkcSks1!D0LtE@7(+Nazjl>am?TP_Y z{42UqScPkoXl-J zx03;N2Pixhi7n;%?pR;}c5A+`anrn4P9c0)DLlOODB)-S^5ea(U-{C40D9fukN#Wj z`tM-XS0(Nlq1BtGDY}ad#jl+O(E7sG1knCYCzx?QAtEWb1&~|C!N3eG(oV;gVRF%e z5CM{rJqps~SncKtA_RcgD(aU0FY~A5wu@A#$!yKCgZOnPy^6pdU7SBGzUx@g^LmGG zLaXsseWYjOI#IVN+nldk;-!+OG`cMnW@0^_b8(KTkBf2hhlcXq33YUKaJu59PI0O4`!w(=&)-pLQ2Yrn=+u|TR%&dCS97?)Jc+Ydm$zhA8@UXhSwE%@bdUv z9;`(oV-yoU5~^=@KJ^Rc+%$=-t#fpm*%RzAbY0Zyxkb!VmIHg2?Tn&`cl(qOm@_*7 zsjo=~oG~L8$p%9xQQfE!SfvLJ6zxvW!ip%i$7D*y0|qvw(PSi=(Kb&0c~qH0W?Y!v?Mn4CHt*~79ZODx&5TN@v+gu>zl);y_X5U<~~2T@w0~@ zd0~=fD;X7V|2Iku=8SQ7^mmS+&`@*Zp%`5bz{Y2hFtBBLVnL}0i84I^gh9d`VH}Nw zlU0-%!vl9Uw&g6USHEPNv=)MmN~O{E;yB!*A{&Hb@64T+vlenL8*0W ze6m{Ve-`?e2uElA#P8;0BQyKI*#Z-fqyN1AMY*RbM6G@_(L=My`#9aJm(gp#lOan% z+xW#ZQXRql!9LDQ;#1|=8A0;M8D9?+#23WDR0>Dvi|LjN20`w3gA~E&aQ>_7^Pk6P z|Gdqnu1i%KiPjug(Q|U|n}q}w@iU7CBOcprObQ3bxa6FJ$7Ulyo6HsP$OTkWuDo0P zVcW3*YL5M?(xiaXC9SKOqQ*<{qU3pvpR#pv66w3YLBSmj#q!lR9&B0x@RB-HqkMhYg*37bSC!T_|OCtY)$W2`d@%5J}T@dq{5A3YW zjdzPshUObEniW%by`!B1aqY`HHIFHB-)$&OEp>mq!uZ$uOtxvfw2R+mcO;}-nKLpz zdsL~D!@~&mxt5Vq5v2cvYkGT{F?*_`T>O@bZm?2(za~}OB?J&XM6QM40q6>5k_*sr zNdKwqBqb-Ii%Et_THTPALAB8GwW)-OI*!?T?vLmI^S)Rokw8VG2c!(~Ib>%hlT$P_ z?NqNxrci9Yi$D33n}87Y0$WVAPLG8PfCOAgr-#J|$^$t$XNS=r|nbA#$O^6fqK zsHZeP^Ck$MrU$kkg_Y=tTt?f*Jgn^J*qKb-Jsm3t`D z$yqN}e!2WaCNjQo`;PSD1?|Ac6Uh@>jRoeUN33FIynHGFv8QJ@5a+nDxR75scU5(qgkib~k{{r7X$X%TPC_`RCyR|hjNAk4B>L$b$TkoYiA~_Q7GHK(AK_=NS&W9hXhK>4QBDs zH#u`VwKLMxmEASYD-AIgr4=X-J2Ivx3-e7gmdlxS$E}DM^JcqiM(k+n^NtC)j zpP!nxJ5afOyO6txdD(l()q_?<@^R4%qtl2(&#s3Cw^d%=Sen!(^V50!dqlkA3;-a8 z+YJGVx%pGX0WaSh-4?=o}{Eh9w-E4 zXGTN!PWzZ#hLLQGRBi~Kqa>7l#&>zMI+m4|6R+EQ0%^uIf-*d-2kDM4okX~}?Fn;`jviCPJLF(a_K@Sy4bJt*^ct02pDw zYv^!O6>5JN1vpoB24 zxkfT_OVONOPJody(3kZheVhh=sQF0Yy{bKish=FUAvSAQ3xJ`Nuz`DRsM%-7dx;>UA7(YfC4FZ{vO)Q2Q13`>aDLd9RA#T#CMUUuK75sl#_TZV7Q@1! zq2>d<$09!@&-7a#psfJuYukHQgId(umC+mqxZ&vXc3ltD#?}E__2g-6(_(ZbE4j_F zJ{2p(Fg*vi=}Zq7Z+)ihBs>`OB=K$@IkGFzxBl5RJnE?`O`F*SGmcaEXU-(%E=;Ft zj#;@>TqFlVeHZ9-UsI^ktKZlbdflAFlM^Ttw9 zEHA!)A)pepuEpX%w!8lNOvCK`*+43BsGiE1gv+fhz2gqsX@9Fgh}#OQBYC~=`zI2Q z?lJuxY!v~camm$y(k$v{dL8!`h>M5Y2**Pu# z&x7_K9l;HkkZN(cvafKW{CRGUzvyIm= zb`0N&&y0%8bvfO@D!V@s1d>W;UX=yT|ro_i5B0?JT|0S%?w<6lqzg=M@Z97o^;~L(A-Z?Ow7=6`@xB zC6!P3w-vR!=23sFy`xy31qQb%Ov;~TAX`{9aG1fst(ihNWP>%vCJiL&RGl%RV+Bs)MJ$;+bwAq(^7T+zEDiX2YXckxXp&T6YsgT|!p4|s zXRB(k1*bK#-yAF*lkBnrY9GSEsCA<@(4FcqhR5zCi0T-1=r~DI0p6Hxs-ts(GNeyP zT|fKpOHDNc@@C<4=Ir>m;shy0qr=O>o~c|i8+OG{;_qJEa$eXzYfp%_J>#mdoa(r% z0dQ`|r2!I)Da&0n%VrWof^~A?kd&dosz7Nc=(EDadf#@=Ok_>>LJ^LkCix-Gik5n# zY|1nf2z!(or&2xmGJX~z5B>d)Q(4VG)ZiVFnO6L{_^Yi+ix2stP-*f9mdHG%zPJIC zlj$TDXHoFOL6(&grisMBg@G4ttNp18!hi0!$$ZB7IuU+T{$Ho+|BiA=1;kt~$@o=! zkxw9Azh~3ys4nY56+PSceaJwlHmU1LA+a$BDXBrico%X8Ni`7w+o3RCr#d{F5r9lM zyS@f))LC)RH$|0JJo0{);Ol>gLhZJ}bBnhkU7LE-~r=Ft283boHc-RQh!tLG4r4)J)SFuc+DtK~vZx)6VAd_; zYv!a6x+y^d#2Vr^k5?1j1!bnP8~>>s>P4Z-bnwgIPD(e~-*=Uw29C$fFrOkKq(~IzTNm=I890%L~>( zv5usMOhL2w3BaPau%lUCiFr@jL%xD!a*5gBR(6h#i=SI_z2494gx6{+k1bIU>c0Py zD&0Ydm1&V}l!{l??MRKJwT&j)%LvIz9s>k_68b$QPu(Asj+YEu-*$gwHtT^1nL#T^K z_E+N&MoZq)*VdMXoo$~?wcB4e8*1lG4bW;42M`kj2#_7bD;CclxDYlJ>wdG&!qx#% zrqLR!RZ^ZCqnhRxS0$Iu5c(hqE=e9iiKA^=f`+`5-v{ znd)KIAMg3FjBm3~U9S8*xCGlxr5p%^TQOK-;;~1Hc#9MO@LfYwK*(^>fr5oGRr>kp zpu%@zF0Bzi#u79Y87Ylkx=6PiI2RWB2b199h(2t}PK9Nz2>LWG!y##yWKwq=k+y0C z5J2+dcIjMUWCmprxdsyNII!ddJci_u%na-CHo=}Fnnjut7UZZ>UY$ah{j-F{rEK-0 zb%>Vmv;|1Tu1+AF6OIT!djBPMX8-T>p^gGT;d;Z=Y}!;6oxZ!~5#|@kaHWdz!+sl* zW^uE7|17*|007WnbxP1+aJ^XIvt>Z&`0fHVu?>Mzf)D=2^G%oU`-W@##0)={Xuqhx z@eaGTNFjf#@`>M*9&h)3<|#v`H?hbwl5H!lY_fiOTeTcxH`Oc@VuD60bCBlIAH$d_Ue zn0cefk@*o%X`*eU$eIl@P6nggbZ**^Ldo!Wn+yn48aitAWjrb8Ycv{47kKw31NQC( zpX>AU$+*e_Kwz%Ac@UI9*g-d{We}Ssguh*Az!*|0G1!$Br$Jg%3%6ct;aV1`&W*GS z$`7@cOT?pLQh7JYDW3Snm6WDH<-XJyB)P@!ao6vE8UfuM2dgBDK4m(RC)rtWqJLZW zQ1Y9Iv{3`{Pk*e(uTB@vA8E~})OR9Ih!G6%`(Z2-l|5hO`>Y#gGvnQz6Cuqf-rxCR6iYx6V@C&fnNoouP& zmWBsL_HG5b=pR%;ByO8;4jct0p?x$+C_${`Te2M(5F&&O2`nsD0;1F!(|z=wN6P;SZle)Q`}p^8e=5 zO8nLS>-v|=kvt$m&f9oiCfs2lJ*nr)Z-0d0kFXl8Q;>$45Ybz-xrKPJqB=*>Gl0}- z*BPs(CL?@D1y>*l?y_Ay5DjLs)zeVs_&P?|7-q?Ao%GdIh;j+^l} zD{-@;xn-jl?SmhYEo6jPS(!xOe(KQ`IJYdtpuS{U8J(6d+x0y1+od^VzN*c#+mr05 zxahX}TmP3h@80@zy*oP-R<)b`v$ygo1l__%}DRTX3Ws+(jRwi}PRh zMgKO=XLZcnoKX|sHS{Uiqdz^Is5{njYvp3z$b13MD6I>7{#|-EK=s0*zPG=2|Cve$ zK+8xBC}%0n0`==Z6R7(l(f9;oU#?_F=cB*Sg0IVN#!sp_&P78%d~DYteElAEsE{4`f7B2EAjfS< zBn96#m>0EmM5pT??D>7FgWgxyFh1}Z5*Df*tl`r`0Ay}*(mBttxd^`;22W)IcJ9H| zB4|kC8UnR~HjWN>5Xnd4Pcw@3lTNHery>Fm_WkhLha0OobP8mxtSZ}8a!Q=mEO&iJ z19fV0q#0_pIJyUdd*k50_)k<1vN~v2Gr2N*+QVX>SH{2N`rB}S=ULxU_BVr@_5MT2 zIbWJ$lzf{W15mNL-{tH=p{b8R(D7Eyx$O*%Yn(-|cZ>ptBbSV8qTLHNroVicvS8E{t zFHfU^y5~=wLx#xv@d~FWGJ^(Zw0zs$=X{%a00}hm9Gzvc6*`V48o;w6K{CzvcfhyNt+u}JEq%UI$1{#O zE83_2T;n~xB$s?*#lh)4>>_dTqPD8PaZ{senVMVhshH91*4%4J+hm>qeun34rO|J~ z&^vj#Hz0KQZ_Y%B`{O;d8KRG0AxUTU=TjqyMWdhosQzvKY}lQ-NoN=|>ZB1UC148A=c?9O4u z$@roK@B&UU+b@{cWq8wXOU*sUw|Y=qW_FhCj(q+Lv{+l;rzw#dzDu3Xfhtn_2$92$ zPwb4{ta+L6sqRasqMozg@{~hN3L9X%~K*#T3Xx?tB z15MRG6!uCOgQ{NBF;-bfR~T|66Y?Vq#uCY98PhW&b;IR{qmbcJcC+$W;5(5>=3>&$VP0GD=2r{7a| zGUk)Ovev=?QUGY%6>NY|Ve7_vQlU`u?Uz>}-~sDT=j2lYE`P0{j~2(eZS`T{SovzE z&=rneiMxXDChMzkmO*mMnCWuWbH~*i-T}FF)tp4-v^$eO?n@J(Yj&)2pZW z+$TJjPjvXy^eA)wN$hI{>93_vtjl;Plhoz~-ybygxAn<;&mgWYGQ0EUAq&yfWWZt> z;qc_K@Ifvq1Y%+1&{(gxjM38pzbS>K**t=<@&XE}urR1tMcQ@14bA&4^3l4{WfC#g z*CW&&Z_qyM;Bcw-c7cXdsvfa6oQiCHe0g8^2g7G&xhL#jj+)2sJh0x}@Sy3nfO7K7 zW|zH?TqnAZbFYM?!P+@S31`!&35!$UBQ^6Jpd|@44A;mKTLO71 zE`^uaQN$YCcu8w;$a-vqHj?1SZWfBrj#dM%EX=-=70u1(sBb@XxhMfr_oAj<4tY@J zY=)2zji>AP-adh*`hlE#M?9xVZE@3eROP$VIaktm-baki9#psUP)CNpr{+y-x-)Y4 z2`rE#EE{@cK##Bz6!-sEvHltX(DMfw5ykrQ*@*|qa$X6Y7UdWn+LrZf zJwYU{wpa>K7;fdup$9j65;I7l>S`Ta#)EA~lj^MY4U%kzSy|~_AH!E&W4y;9-QtB` z{8W`#6eF;b)p}6k^--`SseAeF`$t~(zoONa_D$uGV2N$3uC7-!Y3CtI4r7Kn)k(BD z4rQ~QuPOmOU(K<2W90IDqXS0Q#TU}>(L?(irqa}P>Z0Uv38!$xx2ikW=Hn1lMX@?# z^wfm_Pbv@)pNZgC3L#MO3q7y_Q|d=meZH>o_>(1$gPZCb@OeksI*vPrGq1wM*(38Pa!K`vvOX$Y9Sqaconl zo+NI4KgPfn5>&*~NeC z)$@KVOZ>@Q$wdF3agG?}d?$thWIGScEJelS2Jn<##{pEn&_PwBrj~UBG+nj+`-3-R z0LG14Z#-xMZlP&(Bla>6WCnV;=aB5HK^2%2WUf_$j{`l(dj7mw;Fn$7#A&CJl!2>d zs8D87Y6i|uybP`w1VZ70dh^GJ7KeMU#p}pblwJDy^mZiOxs_1RRIWA4GDq1&uuSkIlp=l0rm)qDB`(u25~ONsVY-#srH?RTh|7 zWTjoegQ$f~`Gz7ky~Nen%L4YruaArh728@Rjp$TqtLK;C<4rYf!m{6{=F@8Yc8TD> z_1-ba@7E8)%3}A~(x{#vv$8dS37B)vGQ`enOU|H%)~#79w)p8_;9LhKZwtE3H-Tbh zANwZH1Px;C*oGR_eqax`9=bblRJB{M5@V#Z*-bA>v*>nmKdARjl79~O{j4IPHSv0* zE!Gvvp6xd?ruh%Ic&JIa>=UYJY~!F1jBDJc9)!jMv5u>m;X;#WSy!ylEWJsbRR2BH z^k)Mlmu*h19cltEOOaBM-q@EmITfa4;`;21o%e zW*97oQ;SML$Yk)>#FJ8M*_4nl`~ZODDNaIA?v8Ucg=r*@f~}>PwbT-%o;95ur%OA9 zeG%srmlz9Rh(a}KKV@|r45A3yEED5j{>dU;5ucu#SF!&`?YjortX^nqL$H5~KxqDt zD&pV%-x+5B*?FL;)wG!G2L9jDxJYX#iK=vY8qC?wC@;rFkKB=>R8E4%d<@?4KRL|7 zw!Ynt)S524E~5@G*Fy&8=e{=Co^+42HCUJ(LO1b~Q(Q1AM09Buu!Jxl3VKF*YWntHU1%m@|g1)(KoS5nd`4uE(QHP3w6t?2SYSx$gF2}O^ia& zX#&@2q1ZHL+cev86LpPQH5&!@%wyRc-7fGVO1jBtXxCCX#)#uko{Gbh&Shh;l&wZi zg=It{TTZHU=pihXZ!zx+@2VK^4!66Wf&|s5X)B|9TsU1 z6;`)yR+Wq~AtLUp?=fHiKw2V+xkuh$hV{iPh^?NOpRY(&5x4o z)d7c=l}z21(k}g`YY`B|6^_!D18<;IY8ZnyCmqCena* z3g&EQG73lLK>bAHI#*X+10((+>_)FL>je1Uuq(B5?63* zi81ju;D>!oDO&X}4r=_wo(Gt6nTQCG%(Ya0K5KY0*YTV&t(oM6fe+Ta+w)k?rbmF8 z9N_w?4(DQQwF33kpO3)-{c3KP-mYn1b>IsqZ%?wAU^F7cF8wt;|BC#cDXx2=yCv{HE-6 zz*a<`Aq9{G9{0pIG%F{G;WLN?Dgr+k!x&9v{8SvJhujz)Hp91rzWGoJx>iQ}MAnJq-L?Rlg07Byvtu>il2!~96EC7J#7NpTcS>cSUK z(f48?i4Vh=F!m(340>5)M)iHGV?2m_nVLm5X~Id2wwvO27+$0NzV%GXOSAFnQl;fr zHw6}aAr^+Tvst-%2CwX_9zj~G4K3yndlgOICSDb!;-kf^{K09QPkMmLVh^pC+NsdiEd1WwL>fowT*?ebDGD-oK>OwkK#+u%%nLvpQ&+g*LBf|{`<3pV zSvVSjXPYhUdp#pW=_@Q&INzazAiGUL4e(?}xsCv!)ENh_NMaw|em|~XC)ifRhlaC$ z4=tT;7H`m@3BNMqnmn*2Q>Esjz^Ga?eXfkqG6j9#){2sfUo`44X51dNI4N>;;xqRa zWBEvKhF4}V$$8?v4e94zptC8CvYK4H!q_*Y4?Y7*dCnH-Kg{}`l&owBZK^O%o?^R^ z_gB_ktl?o!fghW+wvtj6>(9=?96i|)556b{u=5Amqn5dh987I$rLW9T_e3Fh3-BY2 z7Ut;+9-~W*aBL~WR#n{+?U*4G*UJ=~nur;oK{)FPfdE`{O2;qe|Ma)`nH|^AN`Skp!)~8 z-IqiMemb-3WRgZ3p_)bWA(6Z=CybT2stoQReV=6ZK+lrQJr*1yp3vYn;^pX4BU?66 zW0B#VOh)0VKM^Ykr{)Ctt#8MCpRWjd&GAW#@z0k=&uCYU{kAl^hlTr2sUx;Cq{pwP z?Aza~Jjg#NHoY_4tTO*7!2h~LbtHz4g7S&~-d&Ls%E&JEJkQ82qM4)kO zI8zXElE39co&}VvfNTIHSRAQH(_A#uxd0rRc*F=NitIxs>a>iQInx`?-+iMr5O`?K z7)Y@|srvu$^h#fnBVH?F#D5toMA5m??}fMniYkQauz$u zV$dZnOiw(pDpi(~Qa~0{71XHJn=*$VmdvC~p&R_D-=+yx=4?fe*E14M6)bH160Q@w zc&AXFnol(yB2R6vqT}2U)5SVm)_le&eQl~W30W9FlN9IzOqUK71Ed%3jlBbqRI27L z+C(eaIQ;)tIfFP>D|gk_`IVYgZ*1I)-mqv2Yi68tqrtNjb>3>)8^10P2nGPyB>UTH z4UQKwi(aGUK_GV7?|i&~#+E?$A5W-QirkyjSUNl*4VbDYI@_{ru-D~5Y z`aY(oqd};$gN^2Ju~`kA!L!+2mEqDYr!%SNJ)K{W_?6Radi^i<71+}=!?ht97O&3# zTlw&}!*%z(X0^O0OH*&&9)B>t`*1#@3iA1es9*2YGx61FLAPV^A{mcEj6I5KD7QJ$ zf%4>mpZ7Dt@xc#jr=Ia0Pr`3fPCoFk9Y(9-u7(*y6HUmb!z}x^vDsj!w=Cd=gNeE+ zn8OXqp|c}kTTkwDghzXtR(EA-sx53NNsx&^lfo|)KRXIHrgeq9L?zTymQY{nA$tEd z->TyPAII6kB{ikR7V<#cB0{)SuG+RV6C$vv*XJOtpHpt)F&kLX_dRkLmKH|;b*hRdU_f5>z>YKmA1V3rag1PJk6$~HLZ=Ttsegb z&}co*fthNVhwGxm<*P7J_DZk@!y2N{|_VgUq64VT%ri;U~NCW z=ylp^C2rsaGb~yM#b)F@*)!XJj8~TSddCC6#vy4hkl@!-;G31@T)pAzqA55TiZ8qzOV@oduj)Wzq*T?H ztQFEkel(a}t(kq%V10#Vr92{pAAKp@YY$>S=L##g`1s=Z()K|ACG7nxLQl~NcUI{b zi+xO&{kxH0d#|R0?!EuIk(~Ygm6^s}v5_9(O)c=uo2gzPH@+s(S7osi-LKLgV2!B-O+t zCFPtt2Rz!CgKTS8dwAtF&7{bup}_~4rzKsYq71j5Vn4b1Y@;XGZ*--y4L|=?u^fP* z+Hr4X*nyQp0w;A|)w*>Y;-iyQ_-8HS^+wQb*E+rJpDAg_`p3_yxKz8TH%&zSs&KQ( zeam+KYN?e{;d!@B+XknrQi#-lvw=-NJr*66E;TWWUwDUl7wzt^R=$4Vlbmwn>-}H{ zyUxXjPu>}xPUu|;N`|#`8fV@dl`K6;j@xEV=6k;BblpY)=^R5eB;&Mrf6$K6Ktf@@L0PS?=0Hr-^$%7w5I&C5kSd zk~O#zhLm(likXnPW@UA`eVW$^J}-6Sk&81^H4XrO5y&CpOEAW)c!DwP>`*bTT92JXx^S6mswgMC z5K|ZrmH&a`r?=kde>sbB$t7iQuLk_xM0K7-OY8{7c@R#8Z}idBnL@-PJO8Ad7GM)F zqh5H#KN9{`f2qx&R}u@Z-8jyUjSS5~DX4L(ZsEaLn6sRn{Gi(|j}738S#KeO*TrPx;PF$9vtfP3i|0F*lqqD!-eJ@$K4W z)JC^A2j1vvJen*3=x5bMbqU+`Dvou@3Ac^ymu_%Qa|61oJ(r;#oX4Z>Y<)c|$)2{J zs3z~9o#d@*EbcPVH&!BSin1#mT3yX!aEU(LtnBxkvPZnGi6ym*>uINJ^2KP_Vk|tW zKA{H)aYRwcLcsnt{F1o@#&3@B^g-2eO(gcjfNvR*Jv5PP9fm#$~c*i|2yvf zLN4VuD}vw2##vKYo19!_(ZUjv@F8{Wm3x-@vAMp$DKiWi0I;nX)L@(ELOo3FEKRs? z5ngWUn_(v6p&+2^%P70=Jx14=ED(JStr<{`@Oi2y>=25sj8c*^Py?T7ut9?O+U<8- zuB#l}jpr6sM}m3n1)|aXA#?93%5nZ6C#w(d7Tnue^D{nOKYxU~aJOwS_x07ND`(p7 zgtZ2QM#pM@op*Ptzo}fIzHLDpre_Be%4mJbRDXKaw#%dj45dNhQtypd_si1k5z>&? z(mXSubyj=n89!Nt?xZ(13LH&rw}le`a8cJ50LEGGEN+>b(V$F1`&qLIdiHNg0?zJn z5)yLafWt`){uI|m&r^p$rKYpq^kdsv6}?7QnD**{tcZfY+}gp~f6VCs&MH?0q2 zPfjKz1n%n-TXx*f)XkadcV--4oci7b5AcLKSBu}}%P1chggUA_*BJhD$!t2?=_9Wv zxv&{FFDcjl_1(#7=qp3w?0~JLO;#*8AUN;1>eVNWub#e%3cT@W_w)nVhQUNW`{}70 z%bMNP*A>Qk(zp1RG;qvk-coS(sRLD9@2|e0b}j+~FN&iuX6d5JTk?JHDa%zS{%UEfA{~>um2Zv4{88hgT*%UsTOLOm@3!(AUl?JN#C~7 zpuPVL_HEjfT_hmyMRK{Ir6;5?4#wjxiuQ~(E7G{4zzT8ac!5w%U8m-?;blInd-3d3cnDs5sktYAo^$=TMjFb`JZ3J`Zar6fh4}ei^_{B)m3Kp6<7>-E%NmU@v9RLOxn~@A+JCB6W zd4O)M^gxl(VPghg_y-**F{e-_5o-o9o+&II!b|0-!Yw2N6H=|7Zzn(SA)1|ompy-dX|aeXmi8a zclEC!+zJFj~`IXWVR(P~$QDoH-#COZZJ{~R41Eyncu#;MWj%6a(D zhMVa*^8JUC`Y+@RVF2F2TQ>7t)@qo zIL3%$fK!&kN3dWO4_L>eL;cZqh)^VcorGdjC|sL7fBN778%NNFhEoc)YHnJlk)Er> zC7)-Sn@j>K-ns4}wlhh9K+x;=@(9U)ZYWwBcM$1d> zPgM%@GNR$-1wU)EPZ<7uzx%xIvgnK&lUjqk5%P;1QHuuP(LheB{QSse8|BF7KFJnS zzahN|eK2B~uL(5C3k7*;p;2XXoQ!Kz!)Ka}20z1>B~VGY&=_OXI9sLtI z#|*$3_jN90Zv2Z?zsPV7Q=Q*I=n=Se+5^KE@;p6KCD$P4Vxjw<@{=8Bx83||lL%2# zU^(1o(oR;B?5cynsTN{?0bLDTrN{$(u2EMAy(BDWvc>tMIc1s{Tlp(Q++F(ju?BiS(i-Lw=ru+$49amr$DFK zFSGID$Ea@yvee@>P1RHQ0o=kXOJbT9h?#N_j2&$IU0&Vx9`+n<`otu^631v7^c33u zYC@l11JJE(@Fnc&k8kYQX4WGEYP&erFTQXiTl)fQpN>Xmw%Yy&L&EAt{zC4L5UZDS zw^_WXW)&RoW6>XG8_hqZYpLR)(hn4nBTNlNf&fU?e|bDC-DlB>o>0u{HyS4vP^-9s z;v839(TkYBTF!QWvIL72Od86le}1{%cd9BUqd281pw&Uj^VyH)v)L9?glNzD#)vAu z)OSv|{O|gOW@{1XPGX-+ZUs3^e$mzc^eb!LI}@Vv%24NSn17XTOV)GE_JuzvPY2r5 zL;T4rua5pjeR@m`3)N?5UPRPV-3uMcPxrH%4wx9-ks0zw7AlLjTY z(Y^l7&j1k3VgAzz*re9H4P4dZj^#VpRG#2B`B=bN}a@DX_pg^%iR1@SdB$uZ z0>^F)=iNCv`sl~4*Y)B*9=cc%`n&!@PEU%ZU8=Bg;8Iq@M9EmpgxR>GUg%nK8+7%b z%=PJ;vd;h(3#S%-B?Qyn9lH)hocx4S)|hY~^Coz`5kL#nyHk_QzM#1>TC)uK-$;oK z%2Q?zHmuoP*)2+EGmzr(x;-|-zgzG{$)?w!rv`YP#Il}Qo_?sA+cEl+^x>TUg!kcU z-M;jPmd<2l(w=Rh?IAH{!sed)J;wv(lA*EQkB?rY3Nyv99?Smqu7B2n+*glhanz$w1Dc zOuDxRt*G7@YL_rZ;G)GwE}1b|Dmdj|Sv&HYE=yl7xTAlV>?&^UOLNy%ox0j`RRO|W2w`ML`dbWKz?TKl25Sdi2BJHZP8I}PoHuV%;x6Kz9G+{__J zP18K)1b~s63ktHLL_Nbk&_^8n4w^5Q?RxX(q255pDb&ALtL%!WUTD7cbd@vT__iPw z(e0pj9h zUnNA&Og5ar^Kaah!r1d<>gich7d*X8TP8EgwTOHDoN=N&Pk*z6*@woF;opGMHO7INF;G#mlyFqxG1KQK-{cYBHLj)X8%a0m*&D^be0~Gy=GmL-e#BC^fRwNX%HYY#HZ*U@ko&3+^iSC@?;*^g$<5lhOo#)rr zb$sSd`(Vs#hY%J7o^ST6uqu-&52&_z%Ck z(1wIZF17|cQllcA@iC&0uoXXyS1l!v`lYxgXAHm9D+#ys+$)QJF2{Ae2+`@cT38F+ z(oo_Co`PM#atWlFn1q>$!u?5xqf=n@XfGbPtBI;GKo6oYKbJ3t!{&Hoq_9a4LwKpg zTC^)R&x||<0wyyAfAUWMU;{V2Hv4$g z$PL8SeqeC%St`h;MMZ z1m0wHv}pl+yGY%yG^+r;4VEadEk2uG%#Wj)wI5GxKfy8=miUnQy=$-fa9BF$7knfY zbR8?h4B4AJ?<4ui0rFJ9St7c>;w%j%`m{!kar_8qNeeTiH69>RnORXKlBxHD2@DPi z6SSRDwCHcZbH-s-MH#IXv1oNE1q0w~_@>s}Z6$?XC?F0rBK!Ezhemn1>{mdEfk3ab zoh?GzB^DGiIg{c=2)!hV#G4@rph^sK8TZE1CnM2IS#wI0Cup~ZdS*Hr?|R+vGK#wYR99RmCI2_^^v{v7;?V-O zM2fG)Ku}`*wNk^@Dm>S}5*^(QuHvDtUoML6(c=5jix^J7UlJS@a53sU%DN%>V1e;N z0ne~o*K-4HXjn`Y@XDJ2OqZjUdbLh!9SojkMDCNTUg8GXZ8C2QN}MZ0VgX;b=8{s% zAJ{{bCXNjsu|C$Lqwt^q{rdVBa?@ihx6P={oapKE_^Z7U2$}dpZv3}WeLGfBQ!S9}(ncG;z*r}=eR$cQu+`mMmZkz~uW_0w=cH^&O z0QF#i_m}4qfYhye36Iv1bHP`)hxHJiHI0n53pPyh@Hjk%V0Y#Iq#SH_X)5u$hB5 z;nKH*`L0NWKXjE3-m&V%f@UgE+S)1rj96F|5z#j1F-U;V(!IVO(=+Cg;>N4pa(3eT zRb=THW43r#hCL23XgR+KpM-NjymO**R;$NHbZi2?y=;DPa4=USQ|U(^z`iOD!K>nWi;3pMqAawnI7f^PcZIva#+9LUFyMHi z{l_O)<%1*Ndh|2iqmbZF4#z&YXPT_%7e4w-$X>Om}?4=SX zT11)Za{BV~dUWw&?jx;Z|2{d&J9^GibRFj~E|gSLZ;~XJ2}@B{qty#Gl}d2xz8F5)G7oNB zb`CLB=dZD_>J!>li-G5(0_vYgG~g`v3n~7hI;))xFCHRMnFFDZPoAl`U(HHt?@D&{ znJgqf(D2SV#VOqT8F?ROr`5xhZLFI0krN2}liyUx{xLwsYA!uuN8X^d|0EJe7AM4< z=IQTc?&pBw${0xb30i#dWOVpQ{0LVpkOlzSB7%zutXyN8iRB(kPoy)Mm>E?CY1ye-%C3^Jwxr8iXMg3^};bVfQFh}X0fF1CL#HgjkDBlorL z95-zeK<263KzAyB2Y(OELuM+ys2)HZ1a;CE z9|^_%x^1u^>mbuwxypm1$!lV85X? zREUbnB@d;3wenhv%2XEs8}&gi2_PLN5ID|FY$xol4@uj@^okV88juB5Bu$sV2lUnG zB>J*XtTlmdWq~gQE}$+aTh8|K)B{VZJD<;66xKf!sN-$-oq7_R^Dde=;hD+l(sJ$l zKg_Gqn-(0FO}|qfgxo!A@cH4wwfwrP>CV>;1~ew1dV7)-O8Ix^wsM@_iGzpx|E$SASk?Gl9=I_}+k~XBnRfJwG9_sYv zGzQxoXBa*<>6mlTrxP<$*MXVI8kGfXh62k$o^RP^GWup^?iUIo?j! zhVOZ2Z};@gus?T=j*LF!8GThd@;%yh96zj>0M1s2N7}aDMTm9u>Z$9)iE+oY3TZ88 zYfP8fdGWTc!k1%dGp7_4Zh!$wVQ1Oc)s%i@s-_&E(OM`7ZLacOh^bJZwX@O(_k;(! z&A(dTXF0SbKfy9HJf8<{<17{NmuLsh7O0ZVaSfBwmL8<^^=Nx_^P>b@nAXCzz@Crd z@tl)Vx`(+Ogql~-g9bFP%k2+1+auiF>Z*e5oD z-;M}oz1V4*G=3FyMppL3_vm(6Y{Hc?0RqIly|w$;$dBgVHy9`60W9V+K1T)r6|f3T zX-yRL5JFc1dd)Uoef&l<%l9)lgaFSim8B?>2P&>b*DF`bBerF?Lwia?|rt=)QPUN;-#Q7!1 z_W1@8=e@>E+nGld*7n!xNsex5bg9@Wn{dNJa4i40Wy^f%)tvmm>mtqj*$*pAWH!(J zzImegH|TT;Sw>z1%i(V>EJ^ET?8K?)4FhrcgEZlGISFJ;e=;0K@Y<-QO7*Wxw7r1f z;MRlB#JNmK>M%B*z<{5lJ^OJfjS1y(lZ|<`YtKqA)-}&jt<%1ZV;)s-kL-#6 z1#y2l66={JR*_>^*@;FP2d9lGg8k(-kW(zkdGN-nR{Bm=<|hLH=X=R;P$#TSM><=a zhlhwf4TM;mu-%|G5a9){PAP+Kzv;9|AwoL~lfT8aC}xc1RpzL81C6rFh>bgv*@(H$ zo~g8)K6SysUlmqHZu23LI@xF*``2DsjQS@(kEGlE0&7JS=R4gtIM&Be1EPvu^>gX` zLTZC4ffCA*pH!L$75|(*;xLLcN@{+s8A#p(u(@*p#jbi|`@Fc44M@W>IN3>3PMID( zK3{D>)!*Dar%^-xu2V)q27UMT&fH3ijuKB-X1>h#3*Wpr5|jc}v~RT}x@|wzC0#nN z^6)19UxzV2=W9Mi&H67-IQHZ(@L<1HaN8NV+r@f>=MIyusKxE3MgbB+0CDH?8P&l@ z9Pq6i6OpZMkY^s%GVQtb(qk8|yfmp?3-5*97W1pHO%kgWHRdqP&`wlzIy?12w9`L_Kxc(L4vZ-x{ZI5%R6YR7$ zdR4N7rwR~H`-xYdp_(IuaTtw$D8v70AMc+pu%&>iufD~%k#rlD+pe~Q>3HG*y{2@ zs4*ftR;cW=h?f4C3r#**3zmTHV~fqjWx~oMXgnM684c+_7mTX}KqjUe3`T-DW#X_~ z;NUc;E|<67P?pNiejv9)PkBIq?CUx5P6 z)%44b5@Gp;7$VcAmx_9cvnT`LN32!EUn90GD`R!ZdN5DSGU|fh9U%n3oYTv-z(4Ez zYjw{+g$QB`S84LGN*MNK4IPjZU51^3_pz>_l zxG*Htm?zd)jcY}nO6g5}-T-pc=$2fJmjs!oEKNE-QU&yxISS$&y@+_@8G0N{n2k%= zx{R8@6JHaRTOo|ki~~`r)YxhmWD;Biw-)}__KLJ0mM}=s5L1RSFdicxQ^40RqnEJj=NVx|q-rGr@GjXDS`DNBP4uCq(8(a3$ zq+Z0wT88ZWS*`klO+%IfZ%+nP@kKT)d35;+jAlBT#!1_Yk6@B|2FLNxVw@=0bBp?r&fc==^x zqeVbVD)L;%^HU`LF{28a*+NeKW$~+o%7d@y#w?t*GsXI5TiEYPa=8U&@E^k`vl{E| z+19mGs&ksy+joegR}`UGiWW!W`&_fGdP?sdvofAU5H~wp7DW?5@#8gP6b&0fWsfB% z2Hf3}PE6d2rHCfWx+a$MOG&xuDT9U3s;&rp&$=tnU9!WR~p0`IcD`1o0 z$I2rrgZ-?ae$9$=lgnYiv*>P_sk80hCbyIN6gZj++V1U>$PH1Wb#@h|?^V)M{_x6dCUvvvAnPnh^ONw-p-PBDM# zRMADwUw^e8kt!6G#rJmFrDJ-j;$(bz&A%=X^5>sPDR-B)a=Z{_z<4Pg%QWIS96oZ` zQ!_}~digYnK}&unK(~ohMscE7tQo7N;tz`p)8yke7ui+qnEYQ>B;e`JP$6sjv$T*T zXGJi#sI%UvH$ia7z3uz9es327d1VpU^>E+6cCh-l+*`HkaG9KzCAOnKj(p6lzeLkd z0ITrJ09Ho2n96VlokIq~63@}9vOwMi7nvOi1#VksYd?OOdpM9F6X0GQmJ7bGsHn>k zu5(T>PP8Ol?!{HJCBN)BSFI}7mC6Yi_2;Z!ElIWW2}YqHJ7jHWsob*U!iNae_QH-s z@*A2q(7QK99a@|mSQY#gJ{NZw}3-fYBirxVpj%z4OjO#K=AGs2;b_8~LV zQXoSf3`cbL)89l7md=9o_C~x^K(x9r$IU-w`%y-JFq@PAosk3lU4MJIyb=Ip!|#;6 zm9lnux_=7Fe1B?(3+pb=Y?}o z&Va}i3h31qv^4v1_=CBxE=lXviNrCMi7T_cpDg?Iad>71b)M9hW@2%LR1h9-MO4xl zvxCk>-uvdFC<20?C4-u4C*)rdN-`k&S2ps71-oAFep^C5x${UZ4bhwWe9`a)?}ty{ zV~#YQE>0XByaFKO>(yx^5YYnyG)+O1ON_e~0PvT(DxoRp;-l`Ojd#W_VW2{~r`DQ5 zErGRhJ|-=vU2He}Z|Ob{+=8fMxxf6(nZb>{N1pv!d)N^c?L&9A^y3-}ozt>T(5Y%4 zQP9pcyDQ}@nWo54C&7d*d5=EYIUHNP-f>3wpE-F;zSysye=Hw8e7ZLN^xK?K+#Uev z0l=;*xL`ym8RFpt2PzU8PL;tZ(@Uh?fdIJF3@}dBZsP@c8CR@V)+-`^o$q}HSpBjcE zP~xzrR6`SQ`_8O;D(~>xna+3i!%LHmiTQS^1MSKz`b&fvBi5E2e1gKbSWVFgmCZg| zl;v{t=EnU(9Y?t=k02Sba|^2JH6of=VKW2lk8AY z9>)sA(zU!rHqI=Y9Olql%`P@z+PdfLWipQV$hx=*Z+A@ZL9nHaOx|q82omV-*6X2L zcLBi>yq24ZFRMgV9*;w?lPbnqY8B|NkQ15xo|Sf} zdtT9-F~?WLF7_~&&&*8ebOq=%JpoTMwb6IZhgQ`5;kw<*ZF3A)()6nNg}{S9?KVgA zKQBvdgeDk>M4lKHK{tJ=^$G-q>~jxZ5W(B-3=zH0igx(&XHe^6Gs=io=W3P8uh-Z* z#_p*ntZHxq)hr$ckIt5wnd}QbR?bpgNwXMyZ@HYuG3EL`;`~%EgaS4dO(tYWcj`>N zNC_Vez4$2}41P^f1(W>F=LQeGmu9?9v(8y4!UT4no>3HdODTYPw8~ssr9-~{JH%5SK zQkUsnAqv*^=nCVcEUnY{)47dq(J3DD4#i2^E!Ypcv&pdKp9>dMJ$?A$a5E^g%PUKC z4ez$o0AhD%{_wiZd$K_ZH2K!Rv+%sNsP3Jaug6p8&DDk`0q|4~PykfyB0WJARxJ+JENSxmLh&n=798 zMqV7Ere5$Y3&Qc-6!H8~PHn{qmW|jiiImlCQT;W2{gJ`_#mlY}<;WW09K(SU*99+BW3cxSetx z)PI=2qaU_nUx~1Lt)jE~v(<(NyHz3m|HNlp@YlNk843C{trEB1YV{*%@9J-<=s)Zc z2j`XiZyzaM*ck3>W@HWEevH*ZXomXSCwzo7S0{zzrssP#xOiZ6S%kOaC>*1$cq{Qd zh+)s1LULy%$q0)hG^{yMDPbBui|2GLL8rEUY8eZDav({ZkyNh8Ry`4B<=g4}yr6X3 z_x*%;Ww(3KypH}qa+yz2Y>Q{POsWkz8R6;g**PCGf8p4l95W+iY9Hktb7}WEBuN$K zUr@YJvGX5v@L$MzEd$s$PFvZm)tM&Z1ZoG^AaO8#XKx{#_| z?$|Bv9M697F5EO2&bMzQmhlixmaf9bYrn;UR^N0OC&q2>%kw{=-}8u2j!v7I zxA|Np5c0cX+cIDDN!}x^@qa4sIE3+w<`@(J*r~ILRh&g`f;eBx+ds?#YXR*`9o$i1 zS>^jVm6ZkS(#038H)0phTOEXC3tIa*PTxG{G_7rHkk<7%wRItVP*}+}XlZv@?`SDP zRc~DOnXebyz|XKI6AZhsaFcw&O>McjiGO~)G~^3y+j)|SNdI^A)DQh}sb~sIIY+t7 zP5O9*nbw?472e4F^LvDOI&`g&Gs6)wmPM<>_9ogAtx;Z>8fmmN%mZlQ7Qb&V03r%T zw=phl;++etZKUNXt14y6t+0$--lxg17N1wal4-B~nl~HWuRnm~2CI$=XX?X5G1c$F zTt;}aPdadiS^SVI5aLh}3B{qpyvZ1SLNfjG=8v9}mks=EfsRUf^LOfe)5S!OG5ESZ zVYKfdZz#1usU%IbGTE-_c3={No6S^_%in8kWV~Qa2G8~-P?kf!Hfu>=#rmxvZPXc02K%JVAb+cva&}UZlk}Kcr^cwsIBjNomJZZOCr2jD zB*wr~2;(Tw4Lj|8`L&353+&}TRY~Iaa_*PW!SPS=Q+iqQGT+?~j?1fz(9fhAam;`r zwM=!Si(B3Iw>Ig^J2hvsbC0L*Z@7-d4P|GK1zwHKsQy#79r$F+XZ?^4en~&3dPPW> zLkOFal*P{}T|nPfQ%(jjgB|%zc)T}zGaa}9Aud2BSMQY2>ugb3%kjI3VE$%wfJ-XB zGgir`$bn7hm;rz9S_ZC=tZ#jC3kW&V`ZkL z#p4_^a@sU1&MSF3n7bggE`|b4O}x8>+9*3CGQ@Sd#?qyPY@c6`8>h;_E2PJEY?_gQ z->k>Wc`pgR5*PJd3@VVFBQ3cWeNJ}LQxMjV9acEzIy_IxkbBD+SfVi|I4gUoEu`@8 z{pN;>x5p=%kl4Wyd%R3voEgS3c-u>g6nobi3pmakrYiLHGD_|UfLMW-{OFe}7dIj( zcdMi_q#vPI$h9t~wBn#WYE4=&6N| z^9>g$kk^v(Oa3R5cdvLqv^e%u@DQd_F2oAaN23aVlb%SQzM|{;XXx>reB8KA0aIPU zZ`Lm*{7rHmlcO{Y#t;*!!`OQ&q4c>+lb{LJv0=iysErz7)FO?8GpRw5k9k2&$Z zXvsX+Km5+O-x2ZVW!9Y?Gela&{WU&IcJsvBHJMqqe{{%^of7rT)3P*0Yolq=^6r^K zhg@8uLTJsRKK<-FVR*R$=~ef&v6^|Sa-YqSw_GvzXAj66gOkDJ!67)jrT^AxNW-uh zTpp5a-A~|w&(mKQVodjK7HzR?F=o7xNxMv!S?g z-qs{2g1r6Z-3!OX^MWZKjB`3Pz8w>!6Sd*@-bT1y&`;l(vwmh5(O_d4erKKVCrit_ zFQv8(=4E_1qMJ3`v-%`rKKNC`z|^n0|E|^iuY;8bz%zKsiZxEj(Uv|IweSCKF!P?8 ziOOm#kswn;_#45WvFD8lH^7lNbYh^Xkm-pwk}CNfwNfUyxqp?s6CnUd^QRP%UgGNu zR!-seKWT1N)swi&{H5Hki<0>fV5MsbykHeUkLFh`=R|j(auS*4Z+nB_PES70oj+W7 zpW)JHds$IVUUrd+*75XMQR5P$e}(q{hU)bw7cA!w4Q*rzt=ZiajSzcBypWAEi8DiF z7U_}Uh0j)GDU&-|CTWmH165S3F29e=B-Zx}zxsf2VJB>?*zqJS(=bi9)hF6fKFtnV zc)Tf>UZc_IDrs`0gU;>^LZL6c15HW(;hL9TbH4@;O4rL9U%B$E$uzF!>m2&St#7(2;InE*c99fPIUV*0=!YAqiQFyJOC z#ush(h(~IMcP;dBbKPz6O!nTgrUsWz}%C35M<_IGbIoTGrHgAP82hRMIC zd}=6gczZgm`ZvY==kqRanRSz45Xcis3DI4+$!f4cIVj0>b2YeARz_QC zs!~dyrLo+Px(haMbyOE6EM2o0>pLhMpO$#N{DgqbJFc z&`F9XaTsKRwk9)^c+AMm875ib;*^%@VrDNw9b>yZdK!Mm3~|v%yaw zShGUwXL4tu6$ds7v558OuVW_@f%ht&?H1Tb9DVR<_!0DH#c^|P?Bt<|Qq$U%O3(he zb31okwu(QWAoXjNyw|;))q+b~{v+Y6G(FB6G5t`+M z`daDsxAEgpKsSa@(6O5pA1e;6-f8CGOy|+Mw8T@`FtRCDyFM2ksVCog>1+pOcZ%kWb`$2%FrkDJ*voN;W%q(qqW@|+-PfA$7|IJ zf_fFd^NRF10Vs>baT5KL_|Jv4cwZ+&DnIKgTy&Q&NpCE=LpI^4-Ub?EVSh z9oTz0=5}^Hb2Cg`S?ay;(*U{D@Ni3RktDsjpYuIa-A|7jZ(jI$ZSq(#23%>aA*Bcz zN#lB=cZxl(5Vg(ZG?8)B%e*qtm76rW6OQZ-9-eftTf3}Cwm0B4RFpF63r!m@ysZwT zRe3Ooui;X0)_)An&9v!+ricC-R81R(*=^K*PEsmsG3_vIkCI+UE!%1RRq{w(HVW5q zegDh1)^|GLqXI}1(l^7Ai2QS`4o>BtWBKnc+aGxS4?gZM-2Se=Rqi?m%ambkVV4?Y z*ufYZ2l;>KU=12EQR(@SB3-?mn}7QSXLg-~P?^@Vz<-Awd-`LY=>W0(4oIlFN7FLWrck{l%;=VtcoK_~Ku?7%rTFo^@5I zFZMn4IcGoGo1P6gweIt?;Na$S<>EtIqZauKw{&7xKZ$-sCO>6mwhl8YZXT2ViW=IP z=}b6VL?i=nAB4nug|(n)WS*mU5*Ly~#x3nja{hmWW5rW)H*cD8gp z&j|~r3l@{QlU(N(!-`LDq+)?^!h5b*`1KlQN8<4hG~b}zhWXf-o2CDL7<_28mGFG5 zTCG(2JXRY|hlZ;wN%m)m;k3vo-jz-~`)YR$kzMd#KN4?lYNfc1Hs_#~cy}Y%9J-fN(pz&$$%uU@it39Z} zueE3V1}-+UkeUo3uIMzw)Q2ShRDEQs?|sEzb6*KRvU>&8c$6bei+tgcFera`uN}bY zRJFjPcq`j?>>eKZ%cus5aloTOr+Bd0*~apwoCkx$C(~m*am}a}PlU(fT)Q-#LhL;z53FGvGhI>S~2$c*F@d@9VOkVb@Bg;uQv~e0uJ}SXEO$a8SB_*7`vFU zi!@_j#!lHP`<|>tNnP$#esu4K&1?-(b%-^4FN^k0=~KEA|Gz5S|3WS# z%NW4?ZL*nrs-%fd-&}eYsgRDuXpyXNi|HyzKhDP=16m<)gJ3p8VWWiHL^eBKMrHM= zG*60Hkf0p|uF3+x`YJf{+b6fo$0z)1SnZ$dTu?}hoHYU7DhZYU(Z2ao*wUiR)sk;( zU6{bR?AjYEv}#rnyYv`%?35nC^t9NdCGRP?;!*Fh?%MX-JM`B=EH6;1C2?6e>Q=#Bzj*y8y4C_I)=-6VclJr%7k>fGx~^j`KhvJm`vUd zqpq9X>+H9Kb=miCj@=T!m*bZ4&h>Apl9Mfwi=8fqu?{tQ**=?)XeZbgu%N*^# zaoI(K5HGYSm2mS`BJm+`+!8p%mJU?Purr6sbvQsV);&^Y3fXqU-*=DC8QR`#p$YG& z_^+jsKlFF({2ofbI}q9?1tnDwL}{gGV=6yxv&|U7E}e#XPd>#D4}Yp^`NJnM#NT+! z+CKgo`|XNz3&rQ&TpRs0xc_kY*~RbIhL4L#ygyfQd5zF1{Fn?!?#u^S8#~L_`l@k7 z0KBlK#ghDVni^^|wyXt@QkSPIDbmZqr~+YO?Gq?(eeuwtqCLx8pt;rknpR zGR9oru(#hkXSKM_a=!Y>M4`M;LQ#6_V7;0T^3(L$VwXs@nL)q{d}R}HIV>hSAu9a5 z(@Q%8^ScljKZ}fWQd*2i8E;%&^T==fyTE-@FGO{Q_d?tgH3>0`T^H5T*Zuw*hZ|$D zPs-bojDEOjjp!;bkxdGgHuD5KzQISkj_W8^Cv6?~Oi=3xRQHZd;m}Z)3anuviR#C# zbU5C4n$`)Tla~>qPq|33Em2*?1Iv(cRLE1F36D_nJbRx8sqxika%#cYO{x)vomFk_ zS@KAM=u!-HInBwm-V&RCg*k49GyQwU|A;d`yVa+b43s55yCCOTD$U zVa|>xd88EV*cAI`s&kAR!29uK%_Zomsv(tX;n{Xpn9El&p@I`^e%CF`hVNY5{VoRX zRmBET`h1%0_09206KrnhH2rFmP)6qZd}p?gpSO$id4YY?r|ZI<+}~EPVWsfmaGN;v zEOVPZoiE+8xBO;?yC^YZ2n$91BFtOSIg^)?ceqiXfPvY|n{*bQN@JsPOHtIT5ux&5 zblxk%hqm+uwGsg%GDOWZk!iq8x~}N zK|VcJz0K$EkYP-tC5=@Du?Ic-d_KyurSoq1QZ(ik{_)BC>j~{=GiX{{?>Z@DUQ%I} zWg5;vbo$5}{dBxU4$+?GY!FTY5!H@eec+^(MsPIczEx3{y z->|xj*`JeKD=B7IscIRj{@^5t2LK3wIiO91MtFwa-&pL+eUzqXJNlN6?%)Ms0UM0kP> zsj2VJk5fMvc%tj!aMguS4%HeBR`whkI^O^Vn9d!$i6~5J;D8gpujhXF9|OV6()ACy zM1N+HJH-?lDrw@9!Hr>;O6>*kS|rYu?J)?KAMi~Gotaz#8R62#vFYOY8kPVhNt)w` zbEW-zCze6P%vHtmtyt-~5{rA@>j}p7UIK0+eq*OKU$0&ARe8T_ecV#rIyb*!f@1LM z0rldkkjMQYpS_SZdzK5d=8TODJ+%a$AE`?hG2{2jPbht)xur4Un`^_-LHkD;Xsy zCm>l(JJpC)wRUl3a!%_U-l$)H|2TRD8J;8vM8Nw$zBe@f&1qK|q$GD3YVMH;<~C99 zt+6Up!!xSc$YRBK&opGY2F5TjI~4>Ncb@M{9m*Ns(b?b-LVZw*6kq+h-y|$|ky8Qy z6iO`~vg_tE2KfFc2@Ug2NQqutCO+iBF@&*t;F@0-m$VYr9{8Ijuh^3TBd;Zl3mps_ z^pYmDVRF79DU3p23X2D0+Nn8sWyru)`?xJv8Z{{Gq&MfF!~eUm{|~u{I{@hXl(l2K zih5XVe{pVPY!aU*6FE;63O945@J+x0bHs|6VNgL(wQt(%`ikPTQFsrSm~!f6r4d51 z6>Mlb+bSXRHCDb6B4hlDS21_tuJ$yB?}2?St1ftZMKJtZm(eYjd$uW$0(8ARE!<2F z>$1;&J>lyfJ(h6ZrNbWe5;=A6iSHFi&!d+i8Jz(Kvy%R;B`?C>>)}E+*ti}jmpr9lKd_zZ0yAOvPp8kSz8$Gfm;HXWi+|$$bK}##9%xr#=i_30l z{UBH)W&n$d^({tZjXQ!evvfI<2$fQT znG+-znD4n1g0KBNrRET=Hh*+*qxVI<&NQAP+0Pq zD}`AtKq^dai7QOZEt+*x0P857?m83YjNY#1TjqrvPmAb%T?2cEoOb;9*o`N8-A-Nh zdfvhp)>Vpov$3f`YE%AXU#p+kFYT@Ol`SD^6 z5g++?ElqBnP5nKdaLVp`j0vMF5Q`xcwtS?b0b9^LO!zFXJJ;7`Av8lAt==Cv~ zypklyxR12jXah)1oxgSxt0qvCX<&{+k{5_!VoD%yFsI24stg(oOuj2Xq%T4|XA-)H zSRNn}36-7i1M4q0U4eTFxS+3#pJKmu^a-(LsGh|1$ZC4ZM&*`Z1I_s)Nk+DkAjjiy zo-aZP>Da_CWg&rjxYy{@NT)?i1nQ#?%E)=HLjB3x>?eyRFL`CiYy10o)Fd&_)uTIfz=&1T02Z6209aY_BVdycnxq*^bsZ1bF? zGRVuK`Fn1%7chVY&LJkW^1^9kL28qE#Yo>iF48En(UEt-pyrHHn{~jm1lF%bTgO3z z`ksp3br8Gk&q&5(-<$?m%dTYN{$Rw?g-5y-GyoR>%6?pEQ^3D1fGrGAE&8$cf>u=x zb@{7aHEsSxJwXW%=Ie^UPO$u z6QM1!YEwy)4TT$(c??3Bg9rmQi7*TN=x_obi?$H~n4+u`H2p6;FMr`^$2R8N(c_%q zzpEdsr;L&spb_c5{4A+2TTVh0jegm&TVadp9z5}4NGW!lx_TOvp;*lrp(#vu;9ciY zsh6Yg^b*1hrfF8YmY^hMY+*&yOq{%U{zVd3EN^#k~-C^kMtc=^(c`KarIeX-Si1&-6qF5ZB>+ zr*X@R1QxK@RK@m$bhkO7$C)vB}b~= zmXAk0f?HLVF=Yrvq;YVI#kjZ4srp!69| z&*T5C!QgMzcim_;NCQ;N4zeTCjBc>59J1{cYdALM7S!mNyq`HN4LZHbAX*s(7jvlk zc$mm7KASGPZZ;Unu_;w=nm_Dy{bN?{eAYAXIlsPAQL8J3>OST$O6#*LV{O&C-xfRr zHQ%RRz4-RdC#HiYOa8au;#UBGBME9|UHI|2kTvf*1~Tfw4q;;tO_wxc%CQG+lhRys zu1cO0)C7LmeJx)X-ZNG$$QNo=fSPvGxn`&uDf=nqoouug0F%Uh3|67(F3Uav&$dqY zYYy$Z@JPNQ`F6ro(3&+WBCkT|>ZsTkk(6*KL4qfKT_8>K8WTbgI@k)|z@VwNix@q1f zny5AJ^T*D)+t9swti!hRljq0kXeTp9Vy1-A=t4;9Niz`xR(lH>(~uaMz;BkpJ&`_R z9=t)@(N)=%rTo__;w}yR-`Vs3Rp9>P+dt%rSO2XPTH0sW7%?(OkE;c4HP}w*kVy16 z3y0bUK84 zbO_za=8NmQ{ZcN6$x`u&{e$|6BU#WJ&dp>&&TsC19CF zbczLb;B!|r+_zjz5(+dD?*@o~vX6~s;l{?0no}-GptG_oTusxCz~ie1l^EOF>%S1^ zET}ctm&W5M-8|(!a|Vd)fH*xj{dGavZ%;Qe{JC6xCY+w$lt|YwXZ=cED$Zb=scbuQ z2g5q>pwzg)^Z}uEc(-f#j5YCy)4k~kwUayBA{QbJXp*zvi$?&4aa8t7${gGT(?y!Y zdjv-z&L~-M-(cfZmAes?v9gx3(llZvklm>yHfJBsTEYLlB=4fR{qgUX{`V*iS_@6? z`Da_bHHqAxDH0<$#8`5SR%H^!cLHQS7R+zhU46(SMs^;y_q%XiAWWkNbff;n4@ms^ z!|LOF$ttPLj1!^{ViYixS0X8{uSu}SQz6MC;~}D)a)+>|3d%1- zLU_)b66Lhj&!*~LKhoMFohU5j`CrwqhFX9A7CUAoXm`H7-G37*;}(5P#%=P?c5#`v zz<*E4{U7T7Ar~6VL@wTHw$w%wk!5xnah@`dG{;+zntLevm@Sr`I_Ak~_5__|9w?V8 zC<|8ONH9ZWfzGs2@E@*|Gg%TzazkUcIWR&4wUzr$C-|cR7fy96s(4UlN`8B1$^Et_ zS9SF?qqCf$ONRp3(YLfB;pY!QjlZAk3N{MKSmMcaNhH?XUuk@9*(gHh$5V$VUw{pZ z`sV`+4K;e!It!k>jHeRDoUHYhM3c}IU>nez z$B^Ki&SfURj?eYY`-nHg4l_)Fj;%uhJN7ZPABx2y%+fbL4PMqCqvpOUz};Wvm(LvX z>;#@DxP7@jn0Y3$_Hzrp6Z2LnLM=S}^YWiur? zcgFZ0er7KSc4?7Rh~YnticKYdzJs0`LJhflRW``2$RrUwXoTyC7(M!U-GVFihII&6 zQ|4!mz|R>UKs4HkR~L0aa<8oh&cv))#hDOzgQh9oo}n&k_$b*%u_K~Cu)3N@)eE~bwTVqiRG2JdJQ zrqvMy9}s(v=9$6S@Qh7Zs4XUHTE~3b24pJX)llUzdQ2hk{B!N~LwgDWN%%D6X#BJgt~B zZ#XEy_+!)~sWu$84Dkr7C!~9?%gPM+%PoHaZDxYFxNCaLAvi}ek64N|eD=nHY>EhZhofG_j-CA7g{KO>f%X@``U>SucA8VufjMu zcnaW}WKS=eIos3JWCBkEkN&sfE|<&sW+q%kXvRQ~%539klH9bcDWH5b`Xbnhyxm@( zbbrOoj?+w2S9=s`pXQ;O)bLQ&;em&+yx}n?)28+t`w>w0&4|XbqL)9J3MTrui#>6v zkk(uvL4um-@zLrwx_P}^?9Vu}O9)xwrvaxXaf}PZgn?yy(1}{}$}Xu6qX!mC zX7JMi3304uYpJrr1*A5(0hOKoS7F$AGUwW7jy{WYNMfE%%DxU}10@Cw7sx-ISmY+C zgbD)tGET$0trR+UqzWn&90V^zbDH_B@NHpBPaWwiwFZ@5K2Y-B$^9g*t=P^>i^*?a zu-MgxOxIldeUu%4KjY-Cod5optq1XYWmBKvjsG>G`LD`ZL^7Wbj?5gonIM|RCd?c7 zj(Mg~#l))i&;l>LWp%U23;_Tv$*KBt00+`g7BbgoV{nf0ILi1MA+b3iDeh;D_^N`g zoTfnGqNwx=SBI0DdDCvM!I<%JiF?Pa_NyALQMs6WW7HuzHj0)LZ z>=HJ(bg+EJCYDzNthcGYy2+NZWNk*i_LWIItnFBM?sHR-R% z;)Bo|HHL5^uCoZmrX))WRj_NPYrw0`X>u@vAjN<%vLg!bReA)%d9LOWsJm&u!@Mjm z0}Tt#`jr6Pg1XNvURn)2JnGMTKapIuGz2OQcK&=!U3%k<#Cg4$uBTgbU!!RSE_Y2T z{#+og`ipMTVrLebvY>G!H``XfRLZd*yHk~U5sU|LjY@-dAH*`dW&~$Ki@p7un#C}h zuo3!f0tXRo6mp6b1oWtfDIQRRLLQm%V%@y12-9$Gucj*f&fu`t8(4vi0ppcl!MEF3 z2iNRQpLc2MTr`jfv3s*qskrTXw#Fq~JvvzW7HsP%jVntXd)2^n!zWr;G#-0xs78yQ zEoWdjN@7esnw9l!1Lgl#8vaA>L=Cgbxmwy~FcX?Iw#%SE-vwsO%ZPI&+`zoff3#l0 z96+u{Ita4iW+N4_g3s`j=?Fyb>M%>LVWYDjhQs~GS<F#rX*$@_j3G#ZpKuHr!lwQFp4`t-}T#U68>Zn;PLF4^8ynY@?cnyD7z+z$4K zyHqC$pK&MWKFh*se!`?zN@pw_NU(m}BuBM+`P2ZF(+66cAG8^yoTyBsmyHX4s&cvX zQ*Bp4;>E^W<=fzic;%_ogDInNf{4K&LDG-usH4b;qr5{+15SBidJU%|Fml^%lC0QU zm2wJHsOZTo8C4jMdY{H~=*hYR(8qT9-B&j#n{^EwP2~ov_*+f+C{~4+d9uB*JJTn6;Bqe{&@ZJTdi0x zo^bke?&uD+t(_b<_Vf!kJ3k$i_>|Mi6P5pdXKW(M0&*|$VyiwW0JxFP@N2IPfDOci z+0|aAtR)aDUu>lb!RkJbEHOswqpH9BabY*qJl*<6jEi(8VTDT-)!#hT=vN@$AMcy^ zbCnHqnp-*`Kzj~dyCop7$cKZHdo$2*=e2xMH8##uLd^K{#iZBOd|;e*|Izj z2Bwmf5ksR!M0VwV6T__3SE*XVM|hag-*@UP(3a&wX9A(hmtBpqseHE{0IX!aWVI9Y9+vUB z=}ru{v>)5NpZeI#>$wVM#}mNfWVFZg$z#gF4zFHIrnUwCo$U=zS!#_F*!z5*&hVDu z%x10pKuksjN{*=V7()eT9TEx*azFR`N{jfKus2H@ZVOZ? z%qaQ#%vM|+8~Xyq-Jb-hH)H1{{RUa>o_w+BTf}TNe8-d{Mhi)(%|JdxQN5Aa4@Hzn zjk`oUN?zaZ)+;&PqrbdIvPV^Y;l}rRTfZDlyX^JfxLUJoq4YmIBK{#~@61Fl(qbm# zf&eZf@G|&ccIk$q(Xr*PloNF~vwH6B08yA68f=6UhV7f0$~5au9ZEC?kYMh!cD&Ji zhHNj_jFB-#Yt!e{UM z_uLs-I|&jwz<2pQ7SkJZCi%gLa&WGYJ%8v%;*z+#dOEhZbQ*E%{q+AFz#zjKQ(E%X?PE`9V=y@>tc>r6L|7Lb@%t)r!yyyu5*V!y6~4ah-^7+MQ0==3L$;G zk~TS^A$~(>W|bQPz}X@C3}&y|0Y&ioqfui#`P?y33|iRB;J9%VAlafsZsCg&;AJiO z8FV@TXQu6v{Nf!r`_!e!A6*KRo_#p_(sZTQ;pMB_jg0oluUp?^#@iQkBb-b%zeN6( z_TnzTE(dODpuko?s~qb~I*hVEA;I>xv_#ML{!c5}qWJ*RgGHKXqJX}pt)aaE*a+5Z zW2;UG!UEC_0R4LWI0D*iB_XpLd?vYBT)>c~z4v1t+!cWF0ci~;oaSDA4tiiEMW$p{ zQI(`Yj)nIgHiO@Vx-aBvxm-0mpK{K9ZSo=Yy%E0fM9G`7YKLMrOIzhUK3Rjq`B{hX zWYfk6W1P*u_hjy*95s)~5(hfoeprA@%l zc)w590Hl;WCm!a!5>eK-_^3&_oGpDpd>Q!^dJ3v-T&TYA#F72@baQ;IIx^)&$?5EK zxKD}bLvmT@5>=d(W>?2ymibliY0mw!Xw!-lzp^Z^DGo2C?W-N!W&pq_5OeFqDkdNM zaq_z!fz&X7yczBoU=p^1_9WaKUBBX%!66QW7Bm>RvAxZwGXxpGo{Bapv~Z_#$*+IZt|0D$iaDZRJ)_k8?xRxdy0r}AZ#~!T_gIgl90NR=QFShXEaNKFDx4-+H@;OVhsA?VS_xVxQx$t&J!Tj2>g9a^2r?U`S<`^8&Q>1*{SQO-D#L$xX?km z=CMZn%)Qcdw*oo0pVr62(j9W{8}2G=qcSn=NYntapn}d@)l~@*2T>qWu>DUEpllI1nc`*QIFWK!f^1;^EmtrEw2DN~*%~?7*2Vx7VC0nVmbi@Xoo!yN4 z=uTPlGiSGEA&#hXTl&e*sdxV@dQd-*#$AKG?G>Uj#81>eHV$oFe&4mfUHUljQ3&bU zH%xvKz3XTpnV4Ec{7;Y9f5;`e0O0H1hBLe|y348ZLE!W6I(W`Y8~m$sM$+%hJDK7o z1G2gN#Z2uJrx0UeE8VR~R&W6iYGr!>he%WPqR1Zf7S7QFu5t~ME1HV8={1}`s|XI- zpPGWP-eDjYwb>Kvmn3uEUsI^Ic>JyO!Jc>L(Z_!5V&P!3mP@K+$>o#a$*X?qYz4&O%uNLc-z2S!^uG z(gXl80kH*>cC>Y3B>*!shu@)-X zmgQ>hOajdNXkRFar0a6^DYX`#N@z+l(cZkf{sX+8FOR;Ir;XfUt(W0U29N!+30pAIw^& z0O0`1umr>tvrX(N2FtXf3L+`Z+JXw>cUZ-U7+9m=I-61rAXXKBKii~1=-X($WsHsF zy%NQ&udzO0j)%Y9Y~mxeN4<5A*1_?4jFwluIJ3hqU>26$dia)l+zPef;8}tChD5=6 zR*q{=Pg%oO$AR$qtPD2Bskugf9Jw8g0dZ5z7j!NfL`VxHxqJYD{1B?OBRg~bYqh(nnjRfe$SuV>Veqio1||SBtF(sNw{hvI>L1L z!YKz6#(6dUlY#-S?B-7ATRbldHzlo1%ZH-jH4H!jMvMe6DpWHPfVQWkE1%CLsYJ)Uw2_s{;wrqIP?&HHKlFj! zJoOhFPws8qTaVa%UjIEAmVwi(;k<0fe)$J`ZfHkCm!G92HDxaieKD6+7^o0*cN0vu zaolbDn(xake=leChm6q3#pODg3@u@0>j8;ca_ag``P(1-vA;kjWrM6uI=@6{~|M!gF zXij9WF|2LbG+Lu7W!j?dGniFCT2jI$5&KfcyYP!%%f8|hQFjIE)4inw;jE8+11FA6 zPQX)yxNaSM?ds`ILd(hzF`=lUTzFZc`zP3`KoF39tugtm57uxU?-?I;)(# zrMRGZ1~1E1)BTC&i`_~2%JzuS25GbSJVegVqLs+k_w3p8iGocp%JV~s+_1CQ)KCMM z6!0e-jx0?~%*pVnJt?-ob+{{wOXk!%%$Yv=X_6NDpQc^^fm|!8zJ!UKyTx=qv&yA! zo9~^Mokylg8CbRaGSHB|nN?eq1^^})f*itZr=3N?6fYcMWqK8XYKGwn#C(G^A3um1u}t_7l0oD2%ScmnxyyS2sWYqK+Ij zycPEVupEaYrd`a2p%a9pKHF@0G{gkMfs(+XTaft&{OmbZ+XKQ+(3PngPUA*tVE#L2 zYparwPtq0MXs-3&YMm#U&EVGb=gOqG{GvPdi9v-Ku?x1(UYeHc;UxVQxQ??}ls81J z94-)lAUg+DfE-V%1&_uAH`sP_CWbcLiw+&8ej(p;yCNQ+!FVK*CxI!J3=1+F@2a$# zA>aGhK^xAbb+c%7J6lFyR-E*tH?JWuCc!?LfqQ*q=ypVVLU@DA${bcq)jF{HYCf0a z9*C=H0aNyj6VX~Cr-*kjX{r}NN$fP!WF4SSOWujggE_CQuaE@fVYujp4sab|f&t{i@R zVs~W@W;lTlX~`Ck-Z~$KIYvwnXP1g=jV>IEo7J$7{65yYaV^HftSGGKKIC1>lr&4X zJr4SK;pS0MxoXOj{sh|O-d~L;*X(D0zg(GEl*O03y02_B|~(LB;Sdh0l=iQmLu}5RjbF)nPYYrJ(}&cLE2mS&?oknV=WXX z#y*hh9o|kcqVireTk$MCv^;Ts)H0Be2Q?=={dDQvQF#Tc6)DYWDRS}Gn{2uF8+2-7V}HsEV}!GL+AUpv2l^poo%%C^lW?X3V{O>cOWiNy zH@z$#dNX6Ib+eSE9;@fgIr0$Xi9t`xI?l?^uA%B_HPO60Q- z_h(1sYjQouwW>)%y#n37nWY$Sqtj!O5~I;qhHjQ`T+dVY09X>BQtZ^kBB-+rbP8tT zOd5Kf0HtSaS{Fm-%uAdB*X9Cqtf)$Q#Q{p}NV+H7C!7ZHgA!5B*ubS?YLW~FMdci; zA_L_HtEcfX{e)ih4h{}w=1>h8i=sZYUSXiu2p%uOMO7BZ7_Fb~iPr25q$RS4N1DpeGjnY2N}F39?B?MH{Xqq9rpMBrf~aTOhwA5r zxTDp?Ud`WXC5<)uOy$Qiz;o5e+fv-)sW>QdT;H0zk>ARFA5T9V=?&vu{)qDCf{jf; zW1yfS=u_E3c7G%aCEDQK7u%iI$5;9|eunj>nvrR0ag-DhZtNh-x5>*HYLLb^9vHl^{wExyvuc1YN(ehpkCI z!zrc;%9P>*nERHM%ETI%)}5=gwH9y=R&%kvIk-NTxpmJ^8q(E1XR~*3??r#xvg;)r zBtbQ{AtW{Gpd8*q%Ow)E*PYHM06bdImq`klFT^64Bl!qVprmPGdGFM{beWmU4K7ke zFG8~T?9WGezhBZ5xo}J($$T&TVYhc|R6>+*F+z`k+wW9&5mJ*^P^*2Wk>#QfpVd*& z9ti~(=5kIr>N+M3ulHlxC)5GBV$qx;=0!phsgUX_ z47+7lCT%ZG#w@%W`d~#;RaMF-gdZ}`dBav&i^s@wmhT0R@jXbgg=Tj$l1F?J#1@kK zP-=EajUCC<6Vrl%g1x$AS-Cf<#G#rB@r4L4mhFmplQ)Vih@of+`Xb467Dww+kX7F` zf>|@;PJ_w)ZX6S?#C5*{VyQ)hKsl>NFH@}J1r~)bu;Wd}yDG!MB!bIIiMt1aMU2B) zwGzfjf0p8$x`WPGrqvgsJkbPiG*NLNoliZs>py!9{~@Q!&pcD;W_`*MuD*O_&4qmF zvYvpk4l@*-)hEX#&CH>HO|WIgH&~3k8Aurc_KuUuYk)cuhx7Ln@>~7S4Wb{N@5_3C zakya)xOXWaLVJ$4`op^o#Kd!|B-yqzMtA#O8bwMvfA@UT6`_@nFemqq0*0A)Rxd7l zHU#v)45C%FhyPr;ey?erTbu#FF*w;(oh_rlrB2dpYEeDY@E-XW9F4Gf%l4%U8vw=CU)FXfG1sJI>qO<14j>ucSqH>a{l~&V|`~Tl;LBwMN^{nE@;# z0HE>oYOsA#G#9Inb|jc-l5?2m9q<`9Xh)$T>bU7La>E>4F95Fw+;37s#EQ5C^f3?P z%1iGHgow6CcM7Yf-L7QZdnZldRn@yr!t$2}KYQh$YN8k5_Wctl7>2p$^Jzgi#W6bV zc<6q=qtoq+1N(&!2Lto5m1*3#VE#fl=s}qX>%8bauRi5t@`aWxwD?5lzh06?AI--5 zJ<;X*`Xjq0O6M|+YYs-A3P_r`7*f(QM*bZC@QgPrLR;S@`aW;jeZzS_E0N8zuYQ-+ z{4{APDz>I}GBV}`n~O$%fic2dL0;D6n(2P310FX~t*f0bH}rv5r!~_7iW?#P2Cs$i zj;EqjMa`ZWwZa;nS{mAw!V47D(~^W#g|pOXk(W>0k^;q>5Ihn*0DYdxrGG*I=3 zR5!vq^4>Zlj765+NLRSbsaL!D)Bd1NO8$QjAQ=CU3zcS$SRYzACaU-t#IH4yBQFQ= z6ze!~p2+BP;_}UU6Vf8)V;bW>G-A?|u1vsbVof*-Lek4ZswB?t5S071?89x%bDGLr ztPN?KVedgE(il+$i|d$poK6kWW+U#HHB?gIMSN|+2d>Z_cea7nznIs-cso1yiGasg zP~$Nbi50SsPHWxJlJ3>Ruv-p4kGame5d)Zp!~1f2Zt=9hnc%o@-U43lOQ}7bI?>Ns zKTiCG&p+qvwS#J=32BSQJ+7*=8QOg>jNgscE6zLyVdr&GvEugEI#5TosgrQSQggR& zusbHS183{SQ-iw_q^ROOxqeZ~;qqQOiEKzba*j^Yp3R4{&M>kg% zbv4y~Cvqul5+ST>=;GN_=K6v|&mUF#jEiB0m(^rHC-=pI zw#lpB4>@<=9=lrl`(Ex^&hC$j>(2u3g0q2FGpDa`@&!$bUA3AD=k`9sDVd?IB)WCV z;XeNqW>+(fY!I&+(J?XDe#!}MVyv#ZXaVy{AZ8rYs~XS;?&xu=zKB{z5&_{8Dnd9K zp45Mfb3Q42Zr@3R2) zi*ly146c9X$D7Tvg=sh zoDaf40003YVoD1RYsM0BGDZ$#bm}-dOYVRW5JPK;vcgwT`^d7MUaOuSsf^DQT|qN5 zd6LP{v=F4$N3k2c?_m>=9HVZGd>uYt=a4jK|J16%4%9PPzkZMLdm#-$eJk@h;;M9h zijrrWW$N`C7)sPVDc!%PPM+Gn90)e!P2w+8c^*oec<>Di%RDItkK)bTKbDoxI&o8t z`vf1U8*SyrPqIeCy|7$36}TU89H68TxjqEtJ+3?sQN(+a`T_08R6;A5o5oHic!r3s zsvk6`+a|;g)?ctJ1N*Ie(v{A?WyzwC-Q;g8O|=04=*u#I;(QsTW2#UE)rVAt#x3RY zDfX<2or$75Y{VD^bD8+#{g;YB(tC^P1T=lY`^OodDNa0Z~3A%f~%Fx zu_{WXaXQ30Q{lCEc3Z&#y*mN+PYmIm_XP|OHm`-~%Pjh7TRF-nV_tFgof^^}|K^=g z*+anz z(%at870YL$zHB{tv-fVp*hcDSj8|>5OTi${R!?=@9Jk7$HUq;yq|ZD8CJ{gTpn!{h<7A^ZL4K9}YnEu$uX}PT%9RlKT-KyKs;@UQ zAoe&(M|9i)PLGP|7);Onm^nN_l3VPf%z2pUEzQD5ntKhN6XYPxKC4-?ZRgIxE+C8;1!4qhd284j3G)ek|1_4nG1h$2;KTq}=9rd(n*`aUavZ~24CI|?%=6G)^k zlDJLNBmVILM(elQaK7d3XJ+OlXB%tU*6Kgw{HztLDhi!$KeU`W-5gj?Z^e6-o>nZA zu~j3Jd3g2=aJ*TcumWO-2JNCt1=4Q&^d|JG?2NV4*u+BO?*r zr1MhMS7-{puEGI%ntp_O@7&GM7F9ur!L+Oez%PYb+~$q(EHF`}2M2B*k|I()D0{Fm zHDu!5XpOH@!9rjh7?s7}HE5cEeecD_uAz|R$MkOyQccAAh9%jmmDvS+OU2hSfNv89sDQ7maDKJ4|y3UZUjC9gofSDE9~22pVd5y$@1wQ85EAc5?)MBnQb{9uF&X!go> z6jgT;*EcGm6^xx6d-bNNZ9*&Ptb3#6o4t|ViVs)bvAny%_vp&7aoyKArxa8KlGaxe zxirL8{FnHhmpq5%3? z*AkA9Tt9m)x5I^aS&YWmuB>ZvpYm0y2F$HW9e**#G?Z=SU-vv^Q5PEFFJ2Ry6#G+b z$ZJi*^kPUM(d^vWOX8g$6~_zn--eh0Rc5tgB1iI_V|IcQtsO)HH4!OnV-CJjLp=A?m1~Xm-sMgl zC=7J(+K<0--O}6tSDW>lo6-(Sr&e6QmHa<+eRn|8|GzFEA}Shg92qDoZrmd?#I0y* z=C%;Gxl2K0DM_IT>TCPgX3imEGH8m@DYRg$x7MJfm=XdY<-E+_9AO3v<&*yo) zU+Z~XTp0(yoEOf%E2RMdSPqeM3M)8~nyv)%JLp6Sl(4y^{M5~~-emDAC79q6ttFWD z`4=!t@7U8kIiro$n}QR^*JGAngs6)TEq!z#bO(q!Cr_xw5mi$}2*VQKQ3+F>`r=WM zN7L!5!q^_DL%RG+wg~>Rk-qzWDkzgX{SBqf*%|lYsxOOd2N`dBpzj!P;&Lr(f7~cJ zt3{HXfVQvdb zqB4nU$kMj@R&r%&NM|6Gp+9p^``%U_i>L5F>tt>F?~mc=3m$oCVDtCND$UD(bOfAT zs?J}S7maU6S$|GdHOBjI?Ou}Gs}{R|YZ#y0D|CUu*!wFf#i2rW@*|08`L%7cyauvl z@M5J#YJ4Xi(QC-;Jc|{B3pgaCl_uF^lKimuc!`Ck{-2>mku@UHZ|w2A_93s&&$8wD zq8)C!!W!kK;Jwmnj>)J}kEs-yuZ8|gQj}7=d8x63910eoQ)KJ# z-V!r>icG05rvESg#D;Sx(=!es(v+``X2{u=; zY&6`1Q?HQYel>L45zlqg#Uw@LUBawL)^T9lRVMY06%n>k%xb8~kOXsfPX zOxtOn2PZniJ zF{zgfT7o1;SFy4Q_u0<2$451L8Kr~RF-2$u;o!4^92c4s>TQDEq$~|ABu-pfFqus4 zu`Cn>R|H4vD=3M(gx7+bj$(a3S#B}KO-#ZQci1HaIa@hx!&V>IC{VsMuk)OG+*Gvi z=KF;w7VnnX2ZYSs%s)3Bv#vAE{?x*KseG|0Amz`7>g3|+U?!J3VO-@ zc$$Kzl6eBUo(MwZez|tJ@_9PdpMuJ+^p})WHutytt`AHX%WIwh!56dnc}+6p(4!f~ z=aQl^t?<2bxlNxh6#HIJwp8*|NVr%11KQa*xg1Bm3pItl;aUje1J~GAY0Jp_y>CA_ zQ@W7g7xP==%p0fFNC(TWN41mUZyue&KR;s3$DVAd7)Kh!QH3XF$zQlev%yo8`1RDX z1Ug+x-O%@t#Vkq{Um7>lVF(sc@9ti*61=8R3borASMFG>N*#7|y|&$B^~9BP_uKQ- zsP7-{<`HnVKZ;+Wit|A-0;!*d&UqXB5t2v^7t)=J5!k7{Dnu%}ueckamM&H;760wN z?(HTg$@6n~G^Qz(4+Xs{03WvaL*(v%^nv5;PuD*8-xt8{z%5CGItpT(^7YbF4lvML3!+-rvewnvfMlpVvfZ)Utc{3#a7tw#$Rh z3aP$zC@rMgotu)esn*TZt*P|WQ(r&Pq)5mN{J#0*oT}3w(L=`N%$*)G0MrQ1;l&-V z7^#)x&^6+M+R&D9Yw%Gglc;l060UYG(t-PUWKE9Zhj7n~N3>H9TW;$*v7IQq=0AV+ zKsxmlOyI|r_gB8Wyy5TNuH|EFI^;)*t^(sd6DpJE?d>zn%IpTpb@ehUIi3c~c715h zbx^9fq;c6@dMT@dZ;6`qouFTTtro;sbWPWqA^Fz?Jkaisi-`SJIg?&szOoj3Dq zDwT6rln?s@K#{9c9fvX}0YWSf30aabm|6VW ztU`~Wa~>A_MukJMMgZ4e0slxdnP`rA^+Yo<1;xTo)9 zs`P)i?)u*x_a7{$xWI&*!|90}ZHw&;%od-wCzl#vzsDBe|4rmtRV2LS0hJ8)Gu zTeSDTW)`S9)4~``|Fda9%7^iPg^1e09S9HcJ^x04UufTjyTWiy768%hySoPdbLu0 z$@PteW*yh_{(&sJ%4V(Dt5zRBmw9t!ha1SWGM5SC`bZea4a{5HaB19TRf)dTs~13NbZ}BTa=KqJviR?Oe#D2Pt5+vI z{!jY)56k8FFd=7S&NO3Hq-SF0f&TIRSqJP!io~!<*K*&~>a<3tn-ZDK+}Y;KDlcRA zQAc&#LGFrSo++zb;*5fd4fW@~IHqcMvfO0iAQ10N`W>A$cB5~;+$rtBT8@M8Y3eE_ z55-vl5)Lggv$B>6PwJ*+R@@pPW^UBu^EjIK5539reCtM)_q$U~MdXhq2Ye zYH=F7RECdVw{jsbzq8-ed@Qr02?QG?fU2lwQHUpTZ2!-Nsgu!Jm6M)T*eTO(A zt?IIHGHABf*ZV%G>s=I31+#pUnh3GdKYqqoBb;~IS1ZH7pqe&_9>np$ifvf?K$3pw zsWJXV_CAVjRc3Rx*GqQOq!F2T^vTZsSNlrVCx+C|04@#qErDzPaComMg9G62%QO=KQrx%6nOiyr~y%68>rzS5r_PYZ_xdAhKqMj;;$BHI5 zA~-*?VtJR6(2{zB;=1U!;P5zuR5MgutOTy zC*^$~_8O-w)=!`<*s?gY#r2v*!FY}Q%8c92?L|Vt3rnThCY6f@=<{%N&RyA@wSvnJ z#olK+o^felFh;?H5V}|@|J-X8?Vy>oiOJD>#?ME*u063`hQ5R~iVdY2(AUEscr0~Y z^Hc@-$1TuM{Qg)tf0RmNKS&RPb@N#$F|n$Dr@x5grN~u^t*>OCsF`f)z;`cvpv%$r713fyw2Iv2jU`uQhb`0 zm8sqx6uj4#B#mQMGkYE?{gA=XK2x8~mNFN1jqf`akY!bz zMju^oxDsf_F*(&EN$yWiU=h53emX|4((2e^{<9lPO7pH@4+FQ__4BI`=w6?FKJO*eFO}v)fE~ zy{mH)3pfUZuJBX)rVQg&bs<|g8eu3^95n8Z!U3U1O5hY2!3j-AppZg=DSJsenCryeJ(cdW|vOK;+IR^Cv z25Ul6xh41RQbSZ}OAmJ^^W$j8ijb}*Y4;d^TPMw>Vn3P}(E&g@mXA-LYQ4vGT&1Tm zF+oZYi%Nib8sM;0s>n-lDh(DTMhA}E^?pzpS8%^#m)nY0P?!LuH+~0IO7YYeqY$4m zJRz07{_UqPUZFikzFI6`_k1E)q&LFK+CA<2n2$|W>&D$xc`Lay;2y!XD?1ds`2k9- zt1KT16E{4&su{e+vk|_q!I(OjC%bA8WVrgWvaF@Nn7oS8_wsI05qIL zxqj1@#6{Wswdp(Dc1L~c((4hMO~NYy4d*BSqWRQ5)R4t5vu`Wmo~UbCv1l+DvpynD z;*Jd6lcuQnjE_oFfkx6S;(%^9~aRDAD zABuP=hz=!|q#EUprKn4ND|xS{s!WTm|L|5acj>p1)>^hiWiBg$i?uQQGVC>O?Ej~w z`H%nat-s73Ym|kpD4~j)l^op|qKkv~$(Vg<>cHz1u6I4~GiMe_7BA1`B0Z2`2OV+4 zcJ7PtJV5C!9!p4?6`u=1Y`e_{nuy8jd#*<<6h#qMA9z^xw%zBM&hD@DLgM0W;O>v^ zynU)D%U@ekWY{AUIv0?y6NSrS?d8tm@LAzm@(9eo(vs3s{Lt+kCB^Qmg7n!xs*r&4 zN&t>}L%FWp#OjY(>`TO!JmY8VZeYSa6`~qfrD`)zpXZ4kwM+2;mOufu-j+`W8s4hB z*#5CmmMAO$241Cio&u+pc1@qvgZmQ+eh@QlXm_3jm|BVpG;>OHGGhs2u_gR!!M}_L zc5e`S*DQXd@@?=x(x3ga4t9BxpS5>UVN62wSavvxNT-eSViUzsomiAt3ya9f3$+(4+$X9E zZ2S}*)gX}$fEqVj8;z|Ap+NZChrC}^iMY$0j-pcA5lWrSk#n6kE-wdKp(>xzPpiDi zMSy&>ko5?`9?Ftz&$pKXd{%#3-WK3ISbM%?AKd$S@2DpEry^r3Hoa`I66K!~sKRL| zXuz6~EU8dTv_ruZGDfn+VG5XmA?aU;g~Hl8C*PE83M4;_OapeCXDF;d&3YEDlgg=>Gq<+POTzms<0V!)LI7VbMC^#2HwZ+$y#u-lF_F z`&)r4gMmrsJif|0@g%DlV|(}09jrleVDZi@f6a2LaW*#>?)Az2XCwd_WSEd?PeS#8 z9I>T#ejfd{or&9$B6X3X$6=IhK&TB3)K+2bWlJxusHL2z2#1=lZnk~>X|EC_a6nu{ z*}~i>Db1S58Hemkl4t%{)ZMf~q&#q{Xkv`IL-%q*7<*kyIV*%tEB$b!lEwxK_Z zSaamEn!}c;VxjE1@-iSbF*BZ2_IN-}U>BcJ{DKMsn0hl=L&k<&s#E}Smpz!0;80;< zZa-Auz$zv#6G@q<_#wn{nZX!q+h03KDCPK?9q(H}!{z>?uCh7VM#;4BH7YKk*X6;qixFgf`s0QGt8N&EOzM3>{Y)T;4cTvYIu)VBw zF=AFD%qa>uae_;$zp*O|=55eg9tjs3hp|$V=(NE-Tcl0upqgsJmmpfIJfiD%6u%+o zW#yD#tWbMt6u5DH*Ls@Bc74h(XJQwaEq#v5@D{&Cgs$^(eb9kcd~-mBr%A1Qg=@4*>TN&#uLC6i!recRdz#OLoQwGcU&y)MOo$FWM3-Wh^$+9@ zyLAy&aSa=(08m$a9KZ(K3e^t`@G_mKQNZo=U+yuEuKjS&)-dW#n=T1F#edoIS@#Kj}~608e_`gjO85ox$7llYS{d9VA=`PJ0aC`{;| z8T%yM9AQ-< z`IdARzW=La_@9{j2XcwE%bEJN`D6hgt zNwxsGSg$t>r0WMQ$^t@Lk-pcWFT~eSRv?=1x8^K^L zZXLm!4RprikY9%!(@7`65c>e>YnyR%SD9C+pM)^zC1{>#iHVC!vV~s-Uo19mb`mv? zcUvXp;EjC?GJ4;zx&lO1mPX&a#`Bye@Mv_>0qD7LWPL4a)(z7+p>xPg(Po{$q<<3`VW4|6dB2{5%do z6FUjwAw&|?yK-T!Dxy(?YvqD07E%4dD%eO4Krv608I?l0CH#dB+${NWRi19wrH8gjE^7K=(e2=L^Io>OVKy|&l7vXB8kaItzkv~1d zNSQ(Pm##*Nyz7+A{BrLjgYjbgbgamP@AQ@iIq+C|9Wu#x(g$(s|CB|h{>54VucJ@d{9g1K1*CBiklKjS2~ia6(#OdOX2xm=t$`E1Ld zC;OKejd^T%Py2mw|5G0FeqqffUE!~5Vq`CT*X`SG#XYwst;A~X@gIL5{oOV6;dlY# zF@5lrJ2yp1i^15BD)QHQo<4M40XKIX>f`^i~ANXvDA@rcN z?!MDLrgX_Q;!^nKrvTXA7v)=|^uK7jJ z=fuAI(0i)QJ<8^h)?Cp^GIj6u@3SU`lhw~LG<`irPqHOwq7VciIi~~f7==-}MEoXF zA&C2^2f#v%ESw4_@a7ZoGNNWaUivKlL5M}{HnBFc2N5NgbJ6tY1`tHsa{5Mzvn)Mc zWB1Ojf~PDa$+f}?h%DbGc|YE;!f_Z__b-i-4rJGkwdPmrb?Wu!#0h2ay^d8o9+Ruu zM-OLbNm?{XA^9P1$1)fj3ePwHpGMbz;_e^FC6kyeM>3w^Bj~GB%yd@#)24X;2;dYu z+qx}i>wV0{X#fYSg1WSoEzx{sr6@67QI$9*ViQ-xszi3PLu>Kk%p_GC=(D^Awf8}J z1wTj9YMoO!8tPU0yVTrTpf*mwrln7STq4&R^DfDP<0NRf)3tmlcI~h^lTAXC_t2@c zWBtadT1_V~Jvv1so$ikh3j2>~k>-WX0zNVtDWtYLS|ZRx>fwDk`){;b0N@y%=a_1F zmnpu6o16m(4Wne}Bz`7A3Jo}lbuZ>7$^*6SNW;0)X{spCi*pyS-P;NAlvj^@#D)Xu z)seHD{ckXQRWS|Pw)C93CHvKsAV{0NF z55mla^%A8wxIHSHA~^(E4F;M;9q2YZc>u|y4iTFjBrF4N;FxhsHvF5hhCDc-X9&HM zS{N=CKZ@gM-f*{v92Pa!t~`Fl?$&Uw?SW%qxvtrm?t}UhZLEr}@EKW@nwbDwQcIK_Lv7TW-i%oylz9g;m&r=p~x>qBw^{8Gwg?_MZB zsA9gVqvIO?o=5xxxsygr$hqPs_==)!(l>Ov{Xh2e{1Lz_c{FtEB0sV|$zKGpFrx=8 zl&C~(TpCIwA)W8TofCLiDEo4zcIKHfy?{qT*lDjf?9~c=8p5U27f`bVD_~IeGK%Vb zqKjRg%MP=lJz<$>lU*QSfWl80&QxCZqL%MmAM462O?|(+Q)G3rYM=>mb*Pq6$r!m$ zBv-sq?begTzW&*%%lP9vbK~^w6UqmFPgB);kO1O6pExqU$%5unWv!DK>f4j)=5%YG zGtRP5tyVl4XzQENG{yfHRc?XMzeSCo;ev9L&{=_)l?<96gcITlJyK`w^!qX^<{Z&+ zMz^ry*pq|<5PVw$zovTELHne3-l`k>^yfFDR9?<-|5cv_`O_N}55GL!3Xd|lZEIzE zwIkYwO_}jGb~!$Akk+>dPt4F{(`!@jL%s$iLIM5K_Co4NViSx52IrctR52h!Q%fG| zJV?4@YYuB2G!C+E-FgNOWBI6CBN7*LLg&Dw@V@zBl*=bYzmSSj!-Xn#_B4lE9Xmzs zVlKTM`*$_`uB)CfPvRxyY1n4HuJIW-;9n=l3cc115M1_eG7K=iSMk{58M^r5@7mKZ z;V?13)nuc3IlTaIZ=W>AUN2wbyILGNlLr8TSwYblP{Eg`X8uCr#au}q1=jq}j{?Ks zATFTwTC-VVs-Z@2IlWB79sp?-Ny2Al^aCpfg?g#xW(sBr^kdcENaC%-go4tKrI%Vf z`R)z%w>fCM-;>Szv~#-P!sCm*IGM?z*@St`P6e}A#^I&C8r}b=0{ovO_rC+{sT5{l zH8?dP>K{x^Gt=1%T5jWQQp0`ed;%g$`&xD8Gu13O7EL5bEUO@tcgwgq3luR6-4yQ0 zqX7^QB+qrD1bAhGaYD)Hl$-+xt1yc%w>r(9+(tHdv~{F)Wun5_;{mgD^+4?hC``~J z=_g03ir;J929MtW=jvZ? zkKXpRKagP=A_IV7pg0rfjR}Lqtb}y1Jbgm#RHg_;X|_i0IDw+ddBeu*ZC78G%QgiG z7i2np52%{KAxIUVX=<9bLc4(GeiHa4J5KNXqwUpRXdR?p|statHWzE}$ zl2zu}e?H3!dk5I{#&j4PGj!hs*RylC?!FaI2{S)pmgH`Js5x^OhXHK!6jW2FHtNv+ z90I&83OhPvEsdTP_V5XDR2MO$5r#)_A47;?)ym-%5Ls*w zsoe|KGvjuE69>z1HIo);9ymk0V1KVsBmhhL(Ym`Vv^aQiyb*Pxdf2)nx zKm}*@%xO|fT4v};T^)d}i>xNhfp<=*F0{~n%L*Xh%?P1P8O@=>`i)_Qqfb5~>Ub3+ zFJ};O>N>LO0ac)NO}zt+$}!f8x3MrcjzqM(%>$I>IK_son}TsF3WR-S}y)a8VokZ7Fzf$oG?7bH^jp zm+DyCPKWK?((jiUcbSs0DW^v{0E)Uk_BU|m41=zfBGy(`9x@9KyN;y#B`#+7D4y2% zxfct@67$yeU|vZ$8v_ZWbsc=dN$9oPv~l@xao*%1f<2eKWp=rI-f)nFfx-93Rg{Wn zj)om*SnHcnju=#mZbOnfB4MXbcTlftGPOOmOdm&#khO(#1WFQKo>7KyKGsT52RRLwCJ{WRp zs>FFuQ8g5&ne-0#w~B>&FD%lC9#^D}`gx-AqP9FT-pjUP{!BLDt|TmBDM{hADcn~P zGtciwxq42%Fvr$&=r?JF??q~mCg$Gh>uurJ%rl?JzMa)ViDZtdeqf$tah9!#{Jsnz zl*#DTe*AAx`>!n5F~*!-x^6ixdPYe#F}0Y@f31zzSq&FNIumas?ORfP4*>uuBXJ(l zjS1dji<_`AF6nUmT{D`bIlT^OKLV?f=>tQVv4yckQm)~dr&l!)ww&kZwor&9ty7X#)f($zX9`4-#`9&37eTZ*<^jN`r!0i=LLzU;^tyHJm$rgE zA#KW3@XN8Wy3TT%Yo;9b7@rBa!9w5?oXkh3bd_Ao?ZO22iebJSv`CgGe;cVWe< zJm(F`O5W5pi53Yk#c5zK1HcQl}ienj@%vbV5QGGq3kT(cW!PI;L z!z?C5TGW%AGuZbqQ+>B}rIO-Lf>{YmT@~aUvSf7|Q30$wn(wMCuL3S_Z1j!$dn-Pv zGjQ!E=(fK!I-Og&Q-knC0x%v5r4}1{^5>p;Ny@y_lTmT1U>f}VS>CHdj@fN3mn{~} zGjx;gNbwgBS{zoNzB9wlTBf!+K2f}x%>v6msmxCtKoA0Y>-0D!&X2owKw_0#-| zcKw-wbxqCai@so*X;t;R>bh9~Seh6WbD*eFb9gbCm&^^&qpUsUet8~Fo3N3nfrWaM z-alMmW3_PdzHB34Tp1eff(dgn>5`WKO$+OZ;KUV(z%(aCOW@>Fd!DZxVYMkzCv_1K zI;sut61QSGw07q8g(?o`)6a|UtsCwud0x=Y4>Zv^9x{hsd%t2zHA%erqFwafOL`vSVWL-0y9|T6dL(-gy9FoW0Bl%}Bz&%RaWv%Y zpmv+n#BF_H4E}gYH3ogvPd#*^orz46Syg#)3T9baS@)B_0q>G}Y1y>;n|uHS>5&l6 zHF+mn7oRb?JA$xRmb1HWs%ii=(r##Jn|rJ`?l_}`>VF-Pb)7|G3Bj8pO)CHBw9FEk zIAtpSQs?!ElEC@$mzT~;w{kH#I0Dw2R$!}CquQnH2Gm8s5rtW3Z!C5IQpAJT>^DUI zJj*RXr2ec)elR8$M)OS!ooU4GuUl1|v?#-4&5gR{PE&WMU9!8N)o2@gB;2+-?r=6- z{#^C)d5RGUwv+Y!g8$wT>b1s`mFqG5Y+A~{d7H1Z!nN{$cxKo>s=-0vc3;t;x$3P@zxNN<-WApcBz?s zVRj!3q?v;x_if1kkYYew*Ou1;B%;Ke!-q@Ey&OM;ySqcWpJx|G&2zy)+^{y7#?_&K z+J%=5s98UJgO@{ESyP_2G`~ow(DgfVh_K43D+Lv+C@V>wv%Om{n$OtsPh=;UlY%&I zqCSdsd>rOA`|NY#BpBZJ0_taUx5MedrLX#Q5Bw z!BygB>HSJtU_@NhqA&nzkKiW{TV{WfN%*^x1+H!_IrOoZoS}IFjs??s>_5%mT5Gd1B)At zQr(b|0~tYq1iJ+#F}%QThzlu1*^K>zF!Xy;{`zouXbO6 zzHG7Niy2Fv*N|JW;`;gLk#6rSQ~A2*YNx@|q=I~9O@i2;j^vBtWv9%bwr2N!+`I6{ z^{1^@-hZ#n{R6p!56tu-$;$R*h$21RpLv&)nc-ok4?(9Mflf*LvRB`SGa(0TlkDal zi6U{!nCJ_@#pGb&U`=KFLDl%sHZ-%dPb%-B5m7S4Ua(7<8b%~Tqd>}sCEh(sQ-C*L zF8jDZ6c!Q2>j*BfuS%QiHK)m@Z`SM>-MDiYnsj`~Ey-n9O|$QQ#!W)Zz4l6{JK*uY z$0P^k_Zc70Ueh$*3KOC=4${(VzW;v0V2nHdVr8iTfWE*o0UJK7axg(vw2}6_HAfkn zB7rA+q>ZS%C0pOvR}GX_wiHcei33)5O3iWJ3VvXPA@lFg%*IxhT}MjMnxWhaY#R8z zlMc7<=)Ei5`ayYrdwcfIFEM^($&_GVjxLzM2h;u|`^mH6e&GHwMh?Skwc&jKlZA7& z3WgiTHcLo{YzmExv{2F$j`m3<2lpBiqIAjm7oq~8{c42Yx`&Ww0Y&$H3j@`;C43@B{f|&Fl zGJRa7A_q$|Yt?cd<->v-viOkPhB4JXlWj!jU#U`hn_*LC?dB|=GPY(vm@)rO$Zpt9 zsMj41(s2?0QX|O3X1Y(vAH>tRVotKBdp&Z`WOiS~P)!=H;!+@s%33WSwAS~Zam^}c zm+0qnqM;%tsV#LGwvsOq(T|MJ?SIz^K~(@$J=^ZwV_%_k>GE+H%b(;^>-iHvAA36)fyEta`on78I0;9lJkED+<%mUS+LCX!9{Oe zG%Apo=3Df`*XA1UojpAzAIoly3K^^Fbmr;<3%z-Cf)#KIk|-@CfK}`9ZDXToBuRJ= zZimOKHLCj6U@lR#5$2s;U6#7Aovs+`JSCC)b1>GloG?GCMl^J}VeM_S>w$wG$L)D~ zme=Uqjz89NW9dasb4T`whR4&XY$zw!_n9+m^S`Dte^acoD~PZF7q#jh+($#cSe<(Y z_eL5H4`LZ>Gynj6Ubqm)f7wUSYu5}*B&NJvO=_0_Yy+J}KrA?(`F!a~PVS1Lo+@3e zpa#(mN8JAy?eoryOw2NP&7}=G?pHdQ=P?PwkI1eIqfOrZSZaFONboV1AC7r8RO0qj zC!s`aQ_U*hs(=9Nj;hIb>uXj&Y(1gSJiNNz669B+b^2&?S~`|-RLir95MT-t(i>Ma zQ{n(fIJ94t2S1MKgoEH>V0J`=n9&KvTNn^}#7GIpJ_Q5Yd!;?4c&j>N`nE3f5Q@FO zEWXLAhm~cs;3;1=FXaNUA9jBUH3UD+0HHuGSEWsxi4pt*Jhj&-w~-bFmVs(ePReYX zR=!$A>K;HF7-MxEG@Hd4?a-8WMtK%86) zW=Rj;zDP$Iy5+qROVrNdxSXwPM=g2W!k4e%`a`N9^qg*z+WGM0f%D@>{9G3pi`LVT z&%DN*4@3tsXZB5O?lBlPqyOVwZsR@^a^8A2qD~jLGuYWz{8h(!H>Ge^>sFHn71d+a zcNdxE*Tql^Z794buQw$Qm{GX$dFsceT^4Z9ZiIBgr@H#z2eooVQ+!yXrO0($0!sv)=!1tA`yHj|=%4dG2lQ zQ@_?+$LDK<5I+vua_rOeI3?Fii>=W#ucJF7DyBN4MT611+jOQpHPi>Cia6>sQF|2! zGS36>wz7y@5l4yfYsyTW)W!gp_;l$)opKonivgg`>y!Bow0X(!R+hiW9gmlseE22~ zOcUJqnOD!)?rOAij%70XTkCEbp(k*G7GM>=Xdr1`pdDz!-M_YWtl#r9jZ6E=-<<4} znaTKjrZfE)rgBW!%WqVD+JC>2U3i#6vtQI9$@#wX7kpB+nI%E|UBC7I ziOPJ|w+iA_+o}sKv+n|ZKF~yR$BwCR5b!+t>-J`so1ED$0}%N5;?U1@D0@Waugf#b z1MzkOatOGAY~_h-U{7DMcsq-@gJg3qbXHJ5CL3F@s;F*5&uYt3QNf=om$n(Idf4-R zCE&rOH^m2;ho>U=ocO{CBTpVMtOLJ4_H93UaP!uQuzkUd`s?TIpVkkdZrx&qsI#j) zOP^)QOZm4ECT3s_ANELj9s7P?9>FV^!#M(sOMn5XDk@UgvXpU2I$Pt z0qk@Rag~}O?^UhqrNrSZ z7~_^JRg9Vg#$g&jqKjt8WugWQo8>z&K?*WOjGt~6vh-Ly@T?9Bq?2=D>%#;vK`e12 z$q*RFWdq_i!q&+SKjDFC1DnxJxYfO7ZHsAqyyZM=O2JcQ|Jv^D)03F}6B1Wl0v(0t ze5G!(DxBtR;O*8iKcjSS?CGerg;Z;Eonv7gRH|Yg+r`qb=t#V=Ar z+m@=z5aY6UsUmbuTc4C$2siQgGc_O~YSp$}c8BTI8d7~O!)Y)Pga#31v!7cDp8Gs} zGnlQ)dcfqg&b3F(Mqc!q)EN4)fU(DCW^>dci-TOK{etoJ>Hfd%=mY-s{Nw){&fK=? z-D3(G5;SR{tit0Vk}>?(Wy}P)T8pe_%k-)sr{YPC2XY@Fo5xmqS2-*^^`Jb zikr4hQ=@OZNL+}{SY`4ZUID{B?|hZxxBO1-jp{G%TB+LIWkG#`nu@;Jy-=@sUVTD+ zb7%Q+b0+Z1v2o#A-CIdQFTP)%75^>L@0tG|aHU(AN19iJlxTtwCxXf9YCi5NP35*u z>IOKo(96-ORRRP;BZh7^3eTmVBN*M`kVmW4ID>d!0tQ*7j9#SDZn6Vl3L=~O_zK(=4rgn*%(F#*TK#9QI zT?FW1$6Hu6xxuO+S=qQWx^#B(JrJEtRL{oJG%D^GuyPk}$kS&n-#|JG+##zEZv*He zg1&b`UX^1iPIAi(fjN09&b+)bab}0}wff20o(7BO-sgFfGhuLaSK%zp@Z~OEQLAiP z>BRG>K`n=l0T-!zql(Yd2EISPSE8WzG34#lx23_lK1cHxKF5@R2C}(R;&lw^YzzjL zOH$>Wx9Zm*m4#9L#97rjXPrEfrqZ6anqF_nC0{g`t*UycLYGoc-yM^i>jp-}?}9zH zf%jMXKe+)Z5|We+Y!t<3GVW$le>GHC7J)HT`HA%QZxiq4<}QzPntkdH)QOuTfX*7{ z9yYS;K?1#@pyL&By&Q|FtYGY;keD>BAF&62ZZS+5)r`OYGAyM2LvqJ{G6yu@TiAbc zB8A75*M?t;apAF*xBtg8PW)zN*L#0r92oZxM91;OO@jVdjy zXWBPFsg^F3e5txq*4KhpMt+aZN3>9A)~lyXJY#No?5j-Qe?oZPet2^meWM_GX!F>Y z(wN=|ykft+Dj5-S z(^yF5bA3$M|2ZVLu2ELI$UHtnR3**i6O)tGjQ@Jih52F1h$RlF@D>*mMK)mVY5#s?rNN#9H#w-tT?VU^FKZ8pJ&szR8|<4)M@Ay!ap zo7>OVQs>JT?ns~Qz0|BNP-N|$S)%&Z#82*0e0}qpQUCUc&+r(vZmO3UkvKShYS1yK zaH@0sL8st>L-%mdS_>=hkb|-KhYxuNsZ1mH91g4*k!<8gf_W|r`mSJomI{es<9@0V zp}zs1ZQH(NAD?JF(&(y(he2)v8p4o@0Mz&c6jy>w-NDw^sC`VmAa;WlsOiG?f^P!Uwset%&(^0=8$* z&ipaeKnvIW3Lcxos}E;JyI!5J&OXxEpTeFY9cp984W@{1LrG-|B#sWhrCrZWs%Lp_ z6uXx<){E4bPl8?s`uB+E=yaV;A2?h1a5Pd=O~Srss7DCEVQX?vu`ozAsBs&P@p0)& zN;Z`-6R}V842uGogw|APOL%Sgp!WTh+4Sf^_YBGRbrOx2+T;WH5kNmKQ} z)3TG+ed!lpiVnL}{V*yc2aZ+u8W&tcP+1xy);ev7tKD&W^$jHTUUXgaVL~51*33Le zOaQ<3Xqi!&5KhcYyJI9WnIiRR=X+o{yO)aLY>#`W^t$Lz*P{u5lXfV&K+^1n#PMda zTQ4QcSAJJF_UE2!LS^u3@J3xJl}3p_PQKPk(+`*8CrCFDSou(vpjW*Q&-hX+2FVxv z9_>WYB%G+`WKz5&KXpudL}SZsSZ2=^z-6edHj>*_HipR^y+tqW13@xKB+uk5BTrUb zMd@@8Mp09>3t0{nR3eVYm33u$YZhCJ0yc3;>x2zxDi3N5X^X01H%KrRBz6I?L+`w} z35zvl2Lh0cc-L~2VVvD}y`+QoeBsw0j&v9)e~pL6NoKEoFZ0}b z;LWpt%Ul0}oS8ZRA|+)pnGod}8YnGS?wwvCkfmtOwWQqjvOK^eF>NlTn@X!vLFdE# zeEO#%Pkm;}1ux^4S%igy7x~7!)Q=kzd3tFVkUVR6)@~Qt_)7m>1u?D@_8Dc{T_u-s z8S+<*S==Y8yPL+U~c3m=-ToGzUI?3iKeI?|E7<5^kbTrtl#>ihTmb>5E~tv}ik z02ojhD2jD=PRc%S1edY9&?nqYe`qG`Kv!JR@*&*h1Dv!uB_}e6=D_~3V*kiSr)8jT zt(+a8e@K;|ldQxUmCUSO<-7M-ze?i8wa|6P7vsVr#{i2wBI11d!SO>0t*G;{D&uEA z#gGa*S-?U-Rn{&qk1XC~K8O_7AU;bblO3X9;+4=tlSbPUG@o;>y5l|xlJWgBVTK;d z@Px!hFI!`uStkWaYrfHVt;xG?Ta?~|$K&t)euJM*Qd-rxy?#L415O7%mB|jeX^z}# z)0vn}jA#w>_1LtxfFuWZ)$;WUbCdBJab<=*9C2L8%R>oc)Y~c=W7=s~*GpiER7!HrhXZPb=hxw4mo2TF-PcI@IyTj| zw7wI5-c6@1=i*vYq7~QIrasmAAD|%-!asO$l@-fP5OqJqopmv)h$>7DcZE6YO9g(K15BTw{QrbtU(0JEQB_zGVXOB%sn z-3K}w`qql?VsK(fU|(6dPhQmXIA6yPzmdUjzGxJzIDh=co}FW?@M>D^*H*>YU(*Tz z8`!7Pxd7h9Vh&AEu|5&_d{CsuIK`=~RwI3!IIcMNpt9`Gc{r^o%g9gf2f;I4!5R(xr?P&2H&3D zsU;=b#R0jh_^(hMMH0)qS7n1P0+Q0rho0?eFe&R|01IgJG8h-?h4EloVVWoUK=B!! zviz1?&fbn#eq;|>a1zrQmbEFg?`J;@X{^<*qgAy|*JqC8gCl#r+|w|P1dUuptlgZe zYx?9V_`dE}6H?gY#TUu?6QmVRCO9#L7_kEt{^?XQ30S2JkAPs0L)RpB;zhhPSRb`lTAG^AR z2HoRx&{r7?{q2AEwL)qBAWKj8-k2?3V^d+tQ(YZF8#XRqWHtUs6yB~4Oq?_Qs{EIBo+-zkDXfhjs%Gv*Y(m^LYl8hq6<(DOfzMx!ZRBd zCcpw309Fh-I+QfGB!Ai_oXxw?8PuQGR1y$zG$(Ch@)%6#`DbrBxD{ufzJG@H@#M7S z2cNpn`0|~yz#djou!ZK+Pv+;i>03>lOKa=I8|60&z)FCI?sww6B;0XIsbau#j+^17 zPDr^f7#)z`E@OXpq`E-l+^0_|HQeuVOY(Wet8EeA_mrstF5ONdTfY5HK-3pm&2Kr_Anw;JVaEN9*i-<==pKxY;G+y_%6?_7e#X(RRm*T zD#Hcisj{Z;cCMWrhkQe+k0&c~HRQan$(5kHcIplYUv+%=iff`X?@uz7u4;m`f{`AiJkzB;rO zj=2U|*p&aME%m0EY4N1jE#sxpCpj+T=atJQUP_Qlw%r4PRfjEj?*aRJV#E&w*RdLK z#*8G)r|!yoi=2ynxAL0{V!M;Pj#*Fdo8$*_m?qs#Hx5?~z}TMXiz zC04y&d8D36Qa9pHv!}z9@DNlFRF>W%l1UQh1IK90@36XEgWHYA4Vh&1u$v7Oa!-hk zJjC04Xjk%n75pIU^IH3pa7-drw#;I~Bop*;M6avyf&SU#MsuUYF?AlrDT>bMN|T10YS~~)@mA}6cy7ByQ1aAH z4i<`<*Pt?Y#>?XOwV`h$*oOlv<9r75bc0q(s~@I3ugSlZKde}9n~osLswXVUhzDP( zG|bnWf4Lw8l_aE!4K=89_caEd;>Dn<51Y0^b)t0w<6U+wmd4yROW~3JE6zH+@nxcm z*8BPaxJI>5p4B~NmuLsjI}4Pwo`v14MS^Z}L$4_3M2*YmZ{zHSf|WULtVeQ&t#vTd zDg6eu{Dl683FzBdL7sl1f`U$$HZx6-`tni zg@S>1Q+9smFph%xX z{N^7=guWN+B;y$yZyAOthZ(uEntxW3hc7CU5T3UI$Xr$eN~yzov8>sGO{NV?lo3EM zGo7s7rb#%9oli9UUmPO-LC&78LnrndTW2en>fDr&QSsx9MNs9en;xk~t7mMEyz$-! z0ArPLHQaKb+@sry)G7j~ANYh^a3^OXSPd`CK?A&-+gcH$2#7d74fDz@wqA zv62;;AYO64#21X3$%EUZ)(uT;e>+N(>=&KPF2o84r}?cLn4!5@FL7wN0)vvYt;cxL z#y#V%;!^~TOtyVe2p~Q%dn1$5eOvPDu@~>Ro>r53Fiwa(Q?DBPL*cIP4|!RKwI93o z!lg0i;hOxcJ)-mk$b)jxI)6;K`7D(oj>5VsUT&8S^>lJDh_%k#czYjH@`-JIU2h?X zGe(Sqb@ry)e)C7|e!^z3^sQX0bl2b4CW!md62>`3_1xPz0p~54!?O?W%h=CnMvgP{ zh-4zz1sD;r1F+SlttMl_kMz=@#%z7Cm3r;N9AYbCnJ+W+;ETwQrarUk%GoyyDFML#IJbO-ijbq%vx_$0bHj_lo|f?t<%)~*2+!{K%n$NOm%A8nHc+bGbnt!qO%{+4EpuUT$$Nlf}Qs>J(_Q< zbI24M6m_^bKx4+p)Q$hql1b=}g)4$m&Bdr)+eOeRupyd9&~A%?O%QLzXAv*xmX0r9 zyE+$xAg8B;7*E;gfe?#!uqB6*Os;ZKw2xix-gw>Qm*J3hP6S$A^k(^3g$roG~!E258|~VccYN=R;FqlfQkh7|Dl|Ild(wP0=@~COah#6 zRss^rOgwa;w9=$i4-tQcS%g)=`judDryoU?A(LEu?%vfl5r_7|HTXbGeWj4s(!mo3rcZz#s# zH!v~Dl~9ZsfNJV9sRF7NqMH;@KA`9NGYiv4$=86iEr3Bmov&+VVHQXiv=4Qp4RYaF znXyp0?z?)#VO_)6DKHlg0+>r2fI7s&1a;y$%MZA)6c}NsLde$5ka>nb2m+YPmG8}3 zyoSKWc*NSASD#|_q-%nIm$O@QCdP>Vk1XOJSyCc{^>Wp=J7Qtyj1Gz5KB z9)07&njc-)^J697^6U;;E=(KGvA|>Q?&JUEq0tdK$KY!F2cJX_ElbA3iawd7?t6dB z`ZYOoVr%7gk2NzZJk1BQMH@XTo}PU`&?Hf01cfCFjIh}Gg+N|eT|5{pUptERxk3>czftuXGZ|~pS(Ji|YfXLexT~0<+8;7(JSCg&m0}h+77|@F z9oBsX_lR}ZS5@O?RMG{&)awWZsHGM)3|ySGqQTrYOFYbFz(a=t&R?CY)vfrc|6)k9t^`ZQ z>l`b~nKL$5_r8l5jSLyw(NPpJHmt)-xf|(|@5B`E|^tqgu&O#%}v^+z%kZ>)c66qsmd|6S`=!m0+`g;2d6aaEejNnHArx^`m z=*uj(1};4n6Q}&EFra7=MmejJHAyxxT5?GA`s8Vl?|2KrCXnloKUO)g^Oc`YVyc(KP*Yg;$v2@OX(K zNlmu+b2LveR`TpZ1_}%;Xm+XZ2eTKl1WjuwRoU#QLn_5$q|i(^a&-k_%i%7cb-)6Q zXof0c^AEaW2x0`lz{Qk9Oe?eH!vT_D98190tY}F9pCZ{Dzs^SEu+tQ>O4ODa+(mWN z&p#w)@Q?LETjA<)*sGz~9dPe0E+d59aKbdIQVfO;iU6#$_to$=jYN z8|!`lb?)A9Sca!i9+dOrS0S~C%hCeKrbRIRpkZ{_;>uALMS)=W@eQ zMpg^wN#-%S^?||Rl{s1xhU{ypgX(E?r{GOB0OcQjh%VpPqfKOrg2>T@n0RPlvxYT? zU=1*7eR@vo&`|vS1>efCdA?3xgzI2BSBt91$ZDg+=#3IlVo`E)bRtKGZu`Za z$Lh(|^Q?_HEvrs3rH9j3ut387G=ALA=4k$Yr)YW7$Ty|L>5VLf8vQj|js7BgU7MqRF^Yl}BeQlKr^V(lh%oj+_(-%>a!fZ^f*bqT)!(Q2eB5Ag| z5a0L^qz8<1hA%(#=7Fa>_Oz5=h0&*}3G2w4>Uw>r&+qppbCjledbt){0ss$JhjXqE zGcdm|gbr8`UmZZlR9A+cB4;QRi##0ok*1ikTo8_Dh*+Ru(XOwcwve4_iqFjkxhwi+ zL`qlf@IN$4DB??2&xRGn`P81_t5PhEu4F08M_;!INF1L3Hifa1$0Cs`saCQ|IG25> zI5RspNfZezOe}4RImN#D?#@%zw{&Bq=*jYa*fFQb;VHr=oRfw^d2uc&H{C+Agf0#|3+_51Q09 z*9~T4hD8UA&eEg5KGX~skaiB&&qp`L+I#BL!h%O}kzNqUeS+ZPp|V_t`gjfq7t!Mqy=6;X8-DeM5x;e-qI zv6O;UCDHoAM{+B_5pbZHpgW5|&ScTci=yb+GAZqdx--cyE`)Rh5OqC*^wVBdw0-Fs zE|YYvzpB$Tt&40Lc3B%MS6)gBjlmzw-`U`snTTQnZTbXN5cO~<^us3GYAu_vr6s=< znI3`g?fNSLE2rnRtX&1%x*G0p-socqx47in=qSFZ;hX#N)9?Hr5ud<6$)2w1iSYuS zF|H8et+JKbD>;RWiA+|`#qRDZoA@H~7<0QlCyfZ6h@7^c8dRk{65M70>WMMO!*n#! z9C^$XoRSFFHXG@ABe5}|m^89D+@GS)aZ2z8JiBOzfsFyi$Vj@5nu26=mu01~L!*nx z+S=>rc2*e<#Dlt}CA-r|hUm8^zfuQQGyXm8{_kAQ|GgCb^kK`yn(e$PE^JeS;VM%i za!t;RT}v$*An3#0Bo_fFtwJv%P|s6vz?||K14WUEBqkdUs(!}|_#U$)t47VL`&g<7 zjAon5=^AYQ`^#Y(t6`#lgGsjaY710`*O2fflBU5nWHdDUa#>rq!&DE-#lE`~zpI2w z%=KM|7^RHy<9WGrK#WWY94Il#v9N0t^K~Vr5|}o=?$7|=V{Te+nOSmarqCx(5p)M> z>&JU@uj9^nD-U;;+tvU;KA=rK?s1W*dTB1dc0lDfV<8rwWDS11!~2DaiJ= z#vO(Iv=$}710}{ma~W0cf6Cigx4$RH=^u0$L0D8s|Hc3nDw4U7fb~{CD#q$yy&D~r zCMf3l>vsrl@boy#hG$fM&-8deHY2vYE-tTI;DCwP9cRjr8B2!oLQfb>KXAP{6z4iUKDm6F3Con=5}y+Iw>kh8?VIV5IE*M%FgIOG8T794p_V9i zqriC5C`Gx^AP&NbE6unu*YQwXZzL8b8ix(DZMFA3*MfIVtjU(paXZh?#h~{pv#w56 z`(r}7QSVHI(C&8H*2AJPV^nR?__( zhUloj7c?1JTd8(ODALDfb3P~_%~1ta6ZPiWx|7!g2E5dd27=_&=Ett-yDnt$BL$s8 zRTD_6u#5zhbk*e)@rSk)%cNeJtUm)-U~>?+=SxK2d%(Uca&zPx5r!mbnYV6-OMF?8j1RiyndTd%>ceg^{m@n@y%>hV`+u9vut=2% zTWeQ*1Fre2YsL0^Q>^an&YS2ncN=)WPDZSo-CbQ$$iAVw|ChGgYIfFP>FTTH!-KjC zuPNWMul+iQ6_{h>24D{Lx&akNvKpAiKWsw6Fw3Q$0e@>}`AlzCR~9v~cE1q35oZc8 z-mpLpgMrBgHK#q!SC=im8h!Gpv+#yt(k%wBsf!G&ORn~s19FB~-<#lI)qspriQWi9 z_g@4_d!5DdRu$!+{7=ILbO)2Cpl3f+%`js>A1uD~J2_`DSGJgt@v!67k7p12RP~eY z>1cZU{#VfbgPa$MuF&)`US#v?P(5}#;779NroD4nx-~xI`9*brEYwJxh&yq0 za9O=@0z#@Y3Pfb)^3Fc+V2ti(GmX86Z!wqnSdns6L0@gg5K8mJmjrE0fe%8-LASf6 zJOyOgg&t#tSs$<+xs#nq*pL`=h8z85WyO%8%wW$0&E#E?F*FJ~^koW}_h} zEbos5;nUuPaB7L+PokaO>%tn*~XLz6y5lAxlrq=c}Q7xdG<(XBuh`g$y7 ze2!fQ6rBokv!`%H17RR{ii9_Eq9VB?!+K0Pu(2^|&P@zfBTw7s=dYE?LCI2ixmwq5^G<@}3(&>5?n zvGu}vlYo>vJ-Dko`_<68N7&_Z!Pp9jf4fwYd&Z`)g;RE2{6){>b2pPzSaaHI%QS71+Wybjll{cU6{R?NiJ)iYCK;39AD#Ug?PT|BC&=l25xkm zFnj2;)Z2GQ+l;FZ<+mrdNaS{_)E(`bc|-S<9Adu|DC@%0C&G4FLAaiIB{8&r|b*?79(JPJv?nj1Yb{XX)2k)J7RyF@`!pz_y&YXg(7?`%%Mxh~>7 z7bHcPf&6MpvBCU(crsBF2+v56Lq-__U`Klm?wW}`B9!XpS}xMh+}xl5_HGaj~)Err;jxau4k$EH!T77 zC&GFSb8DzwHNgocZD4X~*TTKqI!ef1t=eH~KD{@@?b}pM)r;pfWoh|_!CYF(8Mt4e z^KoN_Oz@(h*tWrXb|#KiULK?& z{8C0fGrzf$XR$Q19RZ^=t(Ck`4gjkmZ5xSs6PC%o?thy?Uz}K5Lev`52+E2ZJ> zUz==Gb%woR(qE6aoY)uNEj4pY`q!p%~A~ zj+>{d4UG<5sk$L@Ssu^grd@jH(l|0c^IB0LM^oj=!0u}n{3t^H|99<080 zPLZzfBj|-dKc!B4rVai$CP6DU5WTpedc0q3X70!+DXnw97Q)176@d+1+@lH%q`+=+by6y}8ih?>`})dDEZWbZ1BGlie2 zSdeE3lBFji-Bau5V1e>VcEjG$yI{({B6S5t!%O@bXf3`~AZ9nRRB`)98r!o^YqG(w zH`+ME5|t_x!Z@HaT!$2{?UKgbC_;-Jvtq_%HCqmUo97zp!<|^4s39a+8J@%lgJkh{ zjhi!TN~voAHngh;g~gNSUur2nNM>ffk33l12(eXxyZNiaNcWZ z&-(V3ID)z9ZrHJ*l!ZA6ikkmsk+3T+m48IVz)HSAI5e+j^B-)f@TCZb4i?lHp;>9+ z(UQ^eiXG~$tDP~`Icj5|J}VB!gH$VnxWQMsE#R9i zXPm=6;aUVMIFt(8h-M;#CO;}e()szf9WLP%khqczamCeMCl!U09Ew($JoQ!){56bof?RGz1 zkUjYuhyG48F`IlVcQWL>6?L?5Nd*lML^7jEK426)-n%``wYVgsDFc_tT$l%4q{~w_ zTs|HRIyNqLcfO46Oq4wWSc85BS__p7ELFOGF2CtyBK>l@p+BhVnM4J0hnrN!&z{By z=XX9xpDw!<*ad5NHT4L3X5?y;-~QqL(l-Ib3;pDR3iwN&WS!E65TnQYhm&J04$e)UT z`hf^PYktQ{HMSMmf;qmZX}|Pd>0GDy>z}_)mS4A@tYoYc&N6Wb2)O`A0fd%WS1TCv z=U9cJ2oNrI16h@^iB|0khdIn#?}|H%Q?Cn#NCqUL_r)-lx zYrd#Ck^ZCg^z-uKN5qhc>t3Y9+czf3iYGatRc-$R(*D)A|NEmu&fhPSPFSOiEwg*(M-ufN@s2`&dTR7&DpB)dT5J~c6Fp^BwBs~*#Bm-dW zjxX<9z@zo_b?jy0hq7I9jI(VyrXMLn^@;4cZQvK9L1q*RF8cxJ^395#Q>{?r_nUIV z-mIplU4FDJ7QK6|Vl0V3t%pLlbC#w*u$`qPS;}vU7Rjctx5b6(^(?-d?F6z`2P75* zRyneK$XKOdWj*tJMYowvNwy8`8)3A);D;#7ZERrH^ zNSkdzlH21Ef@NoZ#NwuAMsvhYb_ei};L4QX4N1JE(H)YvjkNXV-9ouY)u= zA0-tlsK-Ka*WU#Tk{Ye0%8wraZ6Atns~TCnuYyFP$8|JNZEY3|b4UB*j$}3@9ctpqBU~)ui7I1Bu#VBhoN5 zoLgOwq9n!v9@)-ADuP_jq zV)4K#h=_S{pU*le0JYe+FuQNYq%^|D-{ z%)`o{Le>Yr^e~-zxnegwqOP7m?;V>#06N-9Ly%w|CXp#L3P!I&OdSTGHk_(Cm^Meo{eFEG3N@-1-QTYSC?ZlR4^l{RrJ{ zQRlz1ReG`b*H~4<=!es~I`drT

      uNe-U%AD272t9-l5OtiT8*KU3}@SXa<6N!KJ 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%0Da`#!)WiF=Ac>~KIQ=`6} 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

      k*3w0wJe->ccNeXW_nCa!oWhR-xmNTNaz zpd$#e^-lYo2)F|lH3ze9Wth(WR^xqo;kh zF9&w^;{R>1{}*zGCji)?sWJI1NuLnEy^Hh2E?7N~G&WV>v+@wF(XL`jrwPvhg7rz> zf#PB%+W;nc1Q5}8H6g<&DuDq;)4Q@CU4WUs+?jVs#ws0GL0Ez1Z!J935GITRMue}S z$<1COY@SylRyLI_xYN>zMDB+~*c|XDyYXA+>30r^L+^5G-dM=>8K}PfDbn!k`Dx)q z#IS|zHHBX++PwW19Sfq@_aB*rsWz@83t8ui;V{iO?SiN%ybj+yDcK@ZkDp_?hr}jY zD&fB->53-7-h|-5pr5gHf4C zuhEZ!HWvb>1~9|LGX-y^fYB5^OJW6Ypq@4_I@OjB(4P#3BaI)GNC1`IwVFE^yQEpb z^0`wI`hn5zCbi^M=CB(*@?&n`w1G=)Vy*4Fy>H`IyV#`TkSsh2+H+Q_qmLMfm!?&s zLyorZbK@yZ?k)!LUxk$xP@mQkixf}A*Yw;N^i_doi1OcY%Ks>hho29gchi+!R(cgx(@;yiJ)}Js`)| zElomoY~8;v@;1J^U`SKke?>4MS+=G7PBaOm2oYvkG@Y?YIT-p6q zm;2)ZfO!}ZXIsqm$ca9_%AVMDWT&Ws?75&wlS&Eg>Z$@7

      ((WrwSO+J&%TMavKEICMw{4F! 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 z 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 $c9Q^ggvTcNujiP6a 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%0A{*yICXh0` ztKldg-ALACPtGdCa-MmmUWy&FpeOb=H5lzD^JliGYhTLd_t#w>R% zU=aVNG3=TNtAp~Q%EDb~r>q2jcS{u1K=fAib5Z@)Z5PT|HX*0*c|-a|g_NP?yn#jP zIG}OR(m=;O4&x>vc1qu^?G_kxW^q&v2LftTAE|@AulVqQLmAd<)LG;e&PP0h=E)z4 zRAuzk5)$!A9ycrSwq`3bPUr8_qf_ag$_(Y0zUWQhZX(}hsktk;tIX~Qa#8`vNjLsf zYJ^Bz7#a|x@~)C^iz-YkvkO!|gj_;IyNl`CsJmGx+Y8H@dzfB2nx5RNRgB7ccO-Sz zz9k%KqfH%YLiZ`(R89AR?(mURP7r{s1v8@29Fggrj{nG`fam66jwEKZSk6}^Lf>i` zeDldUM0ne~-SboFDd95sEv#60bu zUSe2ecitd!U-O<73Z1ojOz!zya;ti$VPCX+H>3GLP4ZOab2?P_Wwlz1l3%?{Y=_O3 z*8dc;{)3#hIkjUgw3*0{blJ{?9z_S!Q8k6y7+EUhBt+KIp5NI70DCYfszQ2**GVeE z`o!}Wp(O;dOk^%0Xyyq#x$5{guu{)s(iqN-`+9mBm&h*2*lPlXDgKmWy>_98hqR2( z@6Tb7tPc-)V8C~yyg^kPB+Ge6S)y(A07k$ZRcyRinP=%KU4Nm^6l``Lnt=Zurh8!a z@a&#T;~?c6bN5N_HB%aDjePW5Q~k!~OX*z?=>;m}0H6rf6`)sqvXhPn^HrQt9NL5D#S)I-HjC`-Ydc*14tm=rnJrm1^#onxXxyNY3A8) z)|=)v%{+Bj>qkQ{%FJ82dIxJ)!2*so{l1Vewb(>HshH`8`POWTt>h?YYW`>4wu}gM zkDXBsbM~S8FB3kz+L0s<&^KHPH>Fp~o4reiu_D;p7L`M|@-mCRhqiAjMzwyWE4$#! zqQ0U)kNd+h$S`vGk-fXN!+Fd1PVVASK*4@Q9X+6X6=~9Af-UP?VB;ynn9yjWI<@7h zeAW8~@qr>ugb|vJHScaUw-T8UEb+4$i%0f!92prHG4j4pS0Xm#$gs{_wU(k$qPX{I zg6Y((oEH*b40Q+`9?hJQIe`<}d*vaS2y2S_Ph{r z-N=Ob{O8Ntd~s#Ut={thhW>)kLDEQ1k2ce_BZ5O){D8yek-g~q++zt^tPE`-{}^G# zjF}wFp7p%p$#n8CN$upC@erqkz%|jGzERcOI<2~QG0~r3(k1_$Qvbc#f3*)x)YCRz zk(QPjHrlOO4N);v9y;Qa0)~kSIYm)%$>)txz?5Ve1%MI)Jus`)PP&_tW8f;oJp~pw zHq{1BYykKNQkAc~7dB$WVLZ!H$5~PaZ_73oR^Ph&*bYz;@0(YjKNyuRBl0}CNSW$S zEpDP;@QW?N-~FQFiyg6c!OQ8C)!rMKf0Mg2biXE2w;9oh48!j9iKG6ZT#m9)l+>b@ zzad_3!CaQ2zi`)n_<)7#uShM~u{r8J?xF~84BQhl+7Ixd6Dl16dw6Xl?U+N(^)=_+ zFI>0Pv&)KHJ|GAZTJgEf+o@be&ngR8pLilX&UX)Zou$svuLmEPxf4+n@+Y0}7j{=5sakOlC}-+so)O6;6oHacRQ4M%ezdJ`~LBs3&P$>MMni7xpVU&>8Km+Zy+jQ2L3KHS;- z`hAxHXrcLanJ%Zn(6@;DOLUT&Y^E9H#n3jiQ_CK&CtIugo}x$@_|OU3=EHc9XE22| z5g9+pH={}Ra8S(!aMIh`{h^LYY)eWai@imk7+4Wnq>fk;u9}2r{`Dxq7q@+-~bK)mrK#_ipZGu14NWN{Za~_8@3*N`w{=D zF||Fz>XdWh#SiDc6tVqQ%Vb8%$VSDOS7o{7z)fzc*$9=UO5bIS-$LuOM+MhW8CHS!TwaqeN$6P-8+5 z9mo_9cp|NqQtJU4e_yQg;QO`Pv-%k?TN-a*eqU!a4$ax}WLSCps#t&)z`x6A8?y}g zO+TS)p28}eG5I7tJQ?U>k=A-v(zbYSPtCAri>dakgLNaM=5jcg)#NPnscbso@x6&M z8~|Jn`vH`B&cS;%GsRpAujx4qQBMbeRHhIf3RsLOjS?J63z&q{e@N#(31PS`Qy7E- zoV_`Ikj0Qx{`kTG7iVnhRG^X-^!g(0*!w@gbxPM;3-zk)>jjZ=k+|$cWR2u*LzIG~ zyi#kz z29H@4W|+q#wK|es3p@ z{1XL~Jr1t14NlhSd&epHit0B6#Od#z6(1YLmGl6o3=O|vkzU~(7tXa+@l%!c`9s`L zXQChrU5)Rar6CPBv3l&WEEBOKrztI{D)B)G)#_08N@{nt3AzT~&x3NTVd$*68Z}P7 z!G4BW?MFE`cRm^sx}eIG*GI&=ie%I3AtaA(hIv)!!Uw*YNF_;m zewV^aLgJ^3;QS*FEras;5e#>jh5MmKg6#P?egT9Z%ZWxVsmRxL7=;FZ;xEdbj?h)_ z==J*I1yOL$U8Gc58G$w_6uZ%+#1}Ndl%0)H%qxD2oqx**s$E+Hgb=?J-vfa;T}Au6 z)xzib{51Fa=}Ck{Fy~uKCKDbj^gzhkLoZmD`e;qDQ`%Q$u73fk1!e3sVT|s-D(%z3 z6s!e>Ot5fSqQAIk2!wo!<`@4cyx;vp&?XA^2?T2+jg@Ks?B3Y-1-8E#9b8XZBtK*_ zOW&!^p&i@5aU}e`a*KrZhLAqvC_}_hXncj~AVkP#>j^C9mpJ#l&D`v! ziDR*?CH&K1L+4P5EtnGv1#+^N>M8SsTrO)Ll-v;}IAt!YBPx@SrIeE>B|cHAxozfX zQX@&2Y8e&o;q2S$0ORJYG#0G#AG(6%bl0o)@tF#|3lRq!!diwvqB}(kUS%Myxr<>S z5vu#m(^1mPfpikPfD2C^8`}qIDOtsrZkbe`bOAU?hAXKy;~3l{FFeAItk-`p8}-t+ zRqH~TYFF}o-^&@4!?fl@ecsc_h*HN%N<#fhv$@x0wsfzu4P$pA^}t@z*Ex>c?9<3! z{Qj?n7x@P@%6XYjC^?aE*^SOIejanSYtnMEI^6MkV&0q7#7Y1F;1|7H6_a$BOWTy| z#>qTreZ4Q0tMy9?jb<441o9HyviU=$aJ=YPnr-TSjcxX15hsNJsvIGYVNY=0TE`E$ z1NEonGf`@bPrRR8E0X0kTJy;Knsr0|-Q}@}0c2CG??i#txzR6wZxtC4n^{N~?L@~L z)F`)+4n`)&i>G1y@qrXdy`(J2Tk{|00B#^Af?*a4@BtHUnVX=Vb3{;9POdCz^V`3Z z3|5Q*5C93lb_L}?IVk$1iMOD-GG_L^60eWHf59tzS@)5EAnyk+M%Z7nUkaKU6Ywee zZ6UO#9JToSLY<)mjfhe9*UU+%XOfNDOK!^+J+qm}8LIX3hBme=VIW$Ebq<)$>gxPb zQ+Jqc3^tZ(+LjCUq$lTB$AUn7F>A8|5tiKFFv2`2=JEn@FG54b$q#qEjL$N+-W1A7 zoR-x%=zN7!(}Y}rFo%`6R%gk%WYZdTcQhd62C#}2KS4c6&f80rWC`CM`;HQ{t&{|{U58P#;RZ4W0Qv=AVncS1GvP^C(M&;x`b0uQ}6rK*610HL?g z1ESKKpdhHAC=hy;q9}^etD=CSfI!}O&b{M*?!9k5^I?zio6Nn}nsdzs)Z@8|oYc$X z<;07X5#D;J1kn12zQ8UePNOn|Cdp4=bwW`Jp0z(xZ#oLc^G`C#@}@TzZz zKww?fckO_oB^LP|4WFr`hIg}{FMbv9wl`K!djMa8fd$wXZ%U~eV}4rD z*A?75s93%U!MidowRA*zKciR}Gf`=w^lV$ARNZQatK%5nZ@t-CXvKEt z-Ql|fZNG@yhu`%5=QZuUM+&V5XKYq(x1~14XWDEI zdnbJZbn_pkDK-RH1T!!y`R#ir#0$Dq zRYG`;M2X0_#sK@l$v9R@Il%}S{xUjdl6#r0U5VL(&(?l$P`ZDsp zq4rdKqvYm4JFB{@WNKLb7!PU~06i1m_$QHfE0^fSfRkF-iaKZ z#mnNlCZf1|a8^p1HG-d)$c=M&^9N;VRdWZxBy^0JI^fBi(sK>w1M8x9UUV;(1sK|n zqr^-A{7doXdR1RA;ie)rA~x@AOU#!?>C6A2mk&;EbdQySrbazcr2H{i2E+wk?V@;9 zKeURkBc|b1yzIf}&qa{1f|iQ-MM-ycQVBC(Dt#&ayg`axsN1#qqUI+(%f?k>xYRrW zzk4r6035G&aBLD<6hYj%Z5n^bbi23fv@%{478(AhRlam%TXebRX8e^m*?lw~QSUL( z!c8}Rnr{F1zYEGHZS=L@pE=iG3a7|ypXa{V6FSAj@-FMy5h&5`k6G5gG=1ua`wKbd z&(w-F&U~~tDj1hxI+qzh^`X*3JPGLMHI4~6>>l~pxy?iKgv zfJr zNA{!aSFZIr=QypbK2zYZC2Q_?c|H*`R&HM! z!J83ELgek{nWkK2Drlxy;G6cs2sMLOq0oP8 zlYw3yuM#|*n6;;}lmSKMM>}^<_EZcJFdTZo{s;Vg>iGt`yoFWjlelU}`P;@2+0+Q{ z-JaU*qC(Jh7!z-K$)$`j4;lwUdi$p@b$11guX8#q>?6O_D6OLJfy@{p)60wD*7F$S z;qO#|U*F#>ny0j&zEhnW6|E;vDIme3v@{ItS=w-*4v7XwT3 zL0i5B@R%t2XU#n*Y?{Eb{dm}(-XWT-wd>_|yCmc4abC0{!jRjjSKIxC-aa9x^s>#S zLY8J1E@f5tvNO5qZ1KeDHRUV>sjSDllHmQ{O4kb2)%y4M*Dm+*0)W*!!rVN;F?}*4 zU@rJC%dJsaZkw6v(Dd=>tbZ;fuk8RvL!3`{bXc*_ia^Xf5Z`TfF|I;%IXOV$}5OH$&dMMPc7~@Q)9UlndncKhsN~OzV+B#7gDN!si0qh00iLpe=> zmp8HR{_EsWy`>xwTDH%-=JqQkB^=M?&?HN+mz>x@LKTpfalqXq@IqtT!?s8n{8O6& zyG~xJz`o&2mrb!z(}BZP?3C32V%WE&n{xQGDIFRC`vQbk}e> zC$VfxNKJlIl#eZCMU{V~dc#|@WIaDt`$24xmjm@_r?BZJJV+9FB8;-BbYWHclkiks zsnUy{4pheyU+f<`#S2ty;A4a{vM8RLm^ybP53LbPvY}s#vqnN?tCQ@2e4ISJob@^m zHE_iW>`pmv34UqIsQ=-?(rss-MQ)|4jWU5hzlG)G4JF+$6AJ;*!;K=s@~zW(efPt3 zK!P~EQ|vk2>{adOH!~Gt3Kup^$kO^b{lb)uq0Zy+0sx(2a{`bRoRG;6o)d^clnqCW z*%HX{7FcG0D9TGx$fT0C`ECC|GLJ}B!2P)E)v{L|#*?hj`O5rs%+H+4a1>A@nzGtTm|O z!y_}*YKi(zxpqK8d`cozC0L30C64(ecGxO+l8m+UuUj%ONE2YUV*?i&4E=KL&v?@d zc%%$U165bBdG1^1jUznL+>!DZ0<~xcNv0i;AxHL{50+ds^J)o*UQ0Q?q-EzQTJ<*d zmj)i?=u%6A4d$K{hip+hE2u{Mp}EYkX7U4h3bpS!&TCzYc# zIJtcZ_i{TpUfT5;JsXyU>G5t{%5tvtM2Q_(2+a#jRFJ5XWM^(o=W$(y>i!oT95)AO zrW_F&o~pVegDkcY4ZXJUhNtH1)|}iS48B9S7s}tB38hB z*5DYMcqB$t&%>LH=viDu1M8E?mwGbw=IvZwbf@BuvuU|5D)j}qy7q7`TU+$Q2Sm)= zBsT8~ykVAW{5;DGO%9_1?!UB0}C%7katgqIXF9TRY-MqjK8zpFx{| zLdVEDuW4=FGf!kAD|J-Lt%#Ig>OlE(hi-W$A~V!G9s=R}P@}zGgYrN|jhs0;B>i`wZAj$;mTsJs7d6T665IZpTwS z!MSEEX6WW5X@LkychT~41A6G?{*rebn9uSyvH@8duL`6i?)-|Q54+QdGJ~gpj7@^^ z`Se`Nl84R#X;*#YHm!leL6X|GtFvVc8I5+Fw<13M7+AFD0H{2DD2uQcLL{w)mraW% z(PGLuC)D-3mX{M0IdBU$G{W0qs7X6&k`P-s-20}}KVQ}D|B{@nvLdREjO2|&p#0w^ z=vV6DT6ykM2SacwNPJsg(g-ja0#{Fyk(30m%CK5Pq`6=F^k)4(n=xmTu_2zY#0SW?E2YcE0H1Q7BP-Fj{@N>p1l` z>6?O(^`k?CGmQs&`eI|AAsod~*$6^;0bnBSp*#*|?=EBf)@U2BzCW_}&XeL|nBp(? zSbUu)?$Q}v1@vDl%TzM?ThP-{K z7GCK{q7QoYYp=%LH!*IjA7mn9F$3d+#NN0lS@=bd0fe{px4f=;CHym%ekF%I#;ITH znTLnAqFJI#=P3I}u=XqF8AY)tTQ{bKC^Kpie_PYifI0&iCpvLN;MZi&rx-~UhY0_5 zHU=K~-)t`dboL05GTVe^vBs7*04cjGwAxM-axANOi%GK~ugGN}LEgG=E8b4^n#gfU zpO!@4{H=xdgi0;{IbmGvxmQ8^D`{(rHWvS^+6sRdnV<%R+zU)rcLk1P>xqSND7RWoOvcG*;=)n0~jMhQVLivR4B&ohk^T|vKuJJbgR>Q>dBN6d&e(I zvBSCJ05JJ(F9>BF(8zQ1BdtDxQTN?g8El=!f!vIv=eW4kt!QtTXHbiK=BYN!sl{j; zXs9H2*gOEl_&`dXFUo}1_pudjkJ&a~J`{D`>6D#@=2$-)+J+9(QbuUzdf8&~O3H?7 z`O8c!#4l~sJbz{eS6*)MJJ~>TZL3r8ud0vg(C-1*!9Ls$=4eA|cY<$(sm=vd zw7AMBA`G|%3lifK^tl?}(_I#}YdW`R_uv*$C$F7uEAv%2lY48UAs?}$u_xxM#q-h1 z1|^VIP}Or_w&vG+nnivp0NVcA{*oS4zLKjiigK zK&Wdi=JjWA#hrD3p2s>LNg&C zuBT7#(a0#_Z3pgG6{dbbmA?T2=nUhB^{n46Vz0l1+!HMW^y(2jZp}SUu6(R)Z@HJv zJzZyqW{}(DHU3l-5XThytbX;_L%;ui3I~`I_e1j)HHglJeg<_4M_?`7W4}U-U@IL|zOZD6=_fOC*l}YTAY_ zAsfgQ-r=k-cw=4a=9`)>{G2Is#!cR4>LxYOsb_)HS)>J9)a|F}OZpyg35ktt6}x-mZuU!K21)_K#PI(V5C4Lk9*KIfUbn(3TiGKrHs@0R1{#X! zC@||h*EbPc^XQa|f>9xdF#?+6^=&QZPu9J6aC|sEDCAAl6!H@Dx{VB-_F&r0P{%kr z7RbjoRXZE`7az^YMr9q0cFa+-p0eawHmAlu%!1_l{+t>5xay3HkT$_9+MDf(O%w|G zewrR_m)QCF>KSKOMtX`kFJV%Q^-h-+cY5Da+$dhbUWNn0~+F#r3% z(k>$5qfH+6?4@tM2Vn%#7UMM%K#l5q8X&2fA6f0^(N~o=Q=~4<#Y%qhMT7XoB^Oa0vRRN&KbSA!iCH&Uy40|G}YxM z=rt}^(cVznx_Y5_f?yGPaBJ_!gFu9y`L_J`hppy$qh$0$97_YgS z2hG!?o(DajCj^+vXbdaJ+R>$VunF()Xe|7C${oM>;^(`=@cT``508n~cx$E)FWofV zM4@cL<;Mg-Y0mevwDf*>9%V{iPGt81fI)yzYJm4`X7QjM6vA?|;5?YS(R+`0Sfywo zpr2UT>GT&z)zOs8FNSIw7c;!b@;}MS*=wG&MJba+#?Wb!*k)->_rt2jh??p~_*+{O ziGW&z#qJc`WP*ucX0l!{UnhS&11r>Yu-ZcNX=>I1vcr1}xu%=jz(iErdW+JyTs4T~(qa{mK^+&X7tEqA5?Wh#h z77%*f4w@~;f+Aqav&sB=`UaW+A;omGg$&u7Igqw2MlTuftpbG>FE6`@Jm(r$V%w|G zf1;gavHQg#a+Wi7Px)VpTA$4QA^dMeG+nW^F}A3UfQ@ z_vgxUN50ye$VNyK*01H5pd$d9ohvIQ2kYLChswUtZ81N%1z&glN!KE4*oD+xTN(*m zII|KrTBV#llS~75L-@Q?L{-G`kM$^b3X6dQt3&U{43Q2vZ=3+jGxA!Ti12eB^VXVH zMqlX8K+n`urN=wkdY~c=vqh!NR7e#k`JA4@ao}ZmQ`o1Pj3?5wB&d#jjyWRpo89Dk z`S z{rh6wBU2$~Wo4f3KppU^---!XYhz>n3%N&TI_K8vtBP;{f``E4GHPPfhp&pi@FM*L zS`yxf@Ji^4iON)JNE(QDdeBE1a+UQ8Ti$wuCN6J69+ z@M=1K#agiU^~af8EtAELFN;|HjL=q0EHaABIVw!UkTX>^`^%E}hYVgJ<0(GE!b9fN zwKlii18b=sFgnZ&$}w%tzda-cU|eo={hjxInBfgHEl0xO7z&J#&{H;)mi`oUQTw>Cp69|^3f|eBVP|}H<#R>3T|q46u8{s@xGtqsioc2a?%*Mp3kbR2 z1vw-=lHeh2n7=2oP2?Mjb9m@W#S!dldi@==*?8)D8RI>Yd9RnnsJ-)`ZLoZHITg>Y zDea&7@Wi7j6^yseg@cEC--X?aYsgFBZ6mO!)ot-(+$CkcwV3W z`NK0SATG zS%q3Ovk6*u_7P@@u%Gw$S(+Mh7v2ya&f{Arr&}dY9qLO8Pxq^h6W#+x$D&$bD+aQc z7@M;^xyqu7cTGXtZ9VpM;06MZe=!Ov=kYyRzoJH5vX=O@%Her@DuC?K=7PMCQ2`r; zO%uu;90j`VU?#MmMMS#NZ~ht;N15UwkX+5fk#PsleVEn5_#B1AL%;~bKDZt|Bb1}Joe1rO;jwFvMmb>zePD2PHACvN2xPklGG@y=G`qmC*euD!1c!rRFW~*NGes~w z^BqagJ9FWl!50dC#rGv~Gkv-IvMrvvfasv6jBbHiqejZGtVi~SFuvu)jtXW>rZ*Hlq3O_}%6%$~`#;P}e=F7p767WB(Q>pmCT%}w>nM=gm!m>Xnwgr1 z?r^U9$-m171OrH3FD;Y7G9v}LR}{ax=%p+VG|*e|>&#z?KW#AJV;H@giVEXFGiatu zsbhTB7<5e*NzMJ+*27_U!{t3BNE`_d8Fs6#O6MoO^Hp88Ifes7MIA>WR(Ay}`EGr- z)fRJCCeJVj2b_vAyiT8D9L%($h^&+aP|hk9zsAN=Cd30M$HTPlRJZ|vaRT{JG>9kA zvz{L1+si<}majS@M*0>nf$?%Xuw;o)jpfz>nv{&!W6owqOe)QNC9AYKJiJ+= zRwWn9R^n#&zKFlD5g6A1(A<7+_6fvmN*067!vuN?a+6$rc^M~UB&^=)OVAa0#Ieiy zk{({Yf9ppzzNgWQJX!R%1|bsFJ;(7rkah>4L7!T|D0V!wFN$B{gzLZsEhs7+ifVT# z$C;Q4ncfh}7X^0x&lHMvWTxCA08Cx;2cscvE?og)d?TQNq8?$PE4_5nC|nzD&5K31 zp<-zp2h7|*T0nok*(s^_ie5-`4SVVsy1uUzKTVWZJ7u5R${L;8`xNrk#4XvQ)fRJ4 z)U$JXrMn|kmEHio)ffgVl>m9A#Uj+A?y~XRbBMt75<#~z=bcGa+XX6br(lJ1jj#cH(=0E+OEL#veSvd zf?Oz$WxtHzWOh2a^WP~VePP_lShrR6HdP|!WY(aIqJG6i_b=*@*j0e2%}>ROgeg{V zMOV%5w2T2eE?IDSyvU_l9yY)SLc>;xc$~KxqN1s6SOvtwUg1*oJ~;X!RzPYx9;(u@ zUr4N5GMvvI;OE=OG9XFi7V9t9vcNM-Z-U|`5|+{J5KnQqfU{&^A3;M}r|55BK@r!Pw69v)FRV|A1D;ixy)63ec>YpgvAy^ZAl=ZEn@ox5=$eb-s8 zSAW;3zQ0hCqN2My@qdT4wF(>svVDaVe^>u zlK0PTOQnk$giuy$-y~BbzM?=+)fTCEV*$MxhGfMlu0mb&M9_fJCdQq7&`mmfj1IBJ ziyA(LxSQG4An#t8koMwoYI(|NsuZ6X`?x6nMDBq*fV~2}YfG|P(NizgGhnCR5UJ1c z=1n{JU2ms2@I|z5gFAMpJk%>VWcH*nMDWO1+$7Y_it=N^j6CW0||0`9kGuv`&+YJc$e2UBKMm(>*7O z5($>D;^v-a7a2<}c970YsX&3-iN`4m*xi15#OA__7}6{ALY4(e9Z~T6L9CKwt^z=v z`dEXIV0NBmo2UuC4pg)HpgTJfHTpq>iyd;eV1^{3)I;Z-!7Bn_=ih#?F~yXWDV-+D z*>#8U4Yt` zbEc{f<`>E`k#jL2Os;H+T8eU=hh+U)AI450X*_l9YTR;9#(Qv+C_WNMN2@1AaN-cU zoGMw*(3ZOYUYrO_SG|H3-3-6_e6l#k=s7Xs@!QA62>>Pj0T=KCY}2ViOi^Ln*A{7F zPspiVqP>Y0B=NXXZ*lNvda{VJ8ilTArEPA9m9B;?`kk^k5kgYq1nNt4ok@yoIvP^W zmK}{(R;{c$ zuyDQWi8fsmc4J^ay~M4fL=;+}^t)}aiU;354as{DyL*!?5J56O?3&be(cSHa(Z%By;vAa?4T&}UxVCTli!2xGSD-SoYKj2&>G&k- zbfYo%uz}Yw^f6zgzUq74(`de375T1PN5NCh4LZ9UzfZwSyAE8zsBgI? zb6NR7nQ5bQJ}#Yty8y_*t^$X&KS1`=tm8?FBcJGckSZKpl%uL-Vya=+Nx9S&lS;AJ97uK{wM96m zq{P6+FO^zov_S(W39z}f3UHw@Q*mM{;^5j`8eW_`ZoK>V<(tBrfu+9Md2;Hc?awb) z8zg%!*6El#MsZp?d!~`+U9is+xk2YS)Nd4Q210bz-*>gG@=cohK|hCq;j; z8MSGmnYdZQgE4|b!htf{9I^v77uNVhy#VfTj*yKU=Vm}uyejGvR9|NhcO7Ts!!*ko zDO1cy1ULu{#UU@fbd2oPAziU$rTs9}k$~EOhTd574j<-VDwclj=Gay&#fs-#V_(bZ zKH@w3teI4*6b zUCi9CtQSH`KB0_o@yJO~mizt(%T>RnvK+x?^hI>wZk80UXAmSNN5ULsvCK5BFGV#4 z3vN=sGXTZy0Z!WS^a z9ksJ158SosHTEBWm)51o*U1~MEKrK7@LyS?zn@uHbc9}Khfr55vAYA1^jtg&A}G+r z!H?bfUbPhdKOQ}q$YoK5{lTC>@0~k1$gfZs9y)Ehkdz36l`r>wQUvCANX!U0_=@BU ztF?dcgeXXhs=Vw8#?eGxy^6whe;03yLS8lXAgC zFK&1andz>_xQX}f`?E<+hQbF7&V&i4@QpL@aE@+*fKzt0=i^~>b>_XG^bfVo_hJz| znb+F*WE?B(na= zSyElg`N9AY352%!$qe%pH3|e=O~v=FS}W_ba{wi+g@9gWIlmM(hoV#2R5$V;ugllI z(c+LsL!ZdxICI+8z4y;FHgTBAeXGy4rojn>Ou#ufgL3+eWqg|)atjZK3edUF-r0dMLtNue-r6TCR zet%i+t`mSo+{p&ZUK|*jBkh>>cl4pfTvl!!ZlhT5li12c9cCHi;KOS0Li1I8(T>%? zZnS^1Gg=SAnzEEZJQFFR##hZBpC{d6`L{RaYYF1yG+`)ZZE0Y5w?~I#_#KPf;zrRu! zJH}0?_)7u-zEyWA3;Rtn$Jzdq znLO8rZAFloKr^Ce?HHDJKo8iU5umWf#(VY{sX>UPoTTQ7t5DXsXJ=>Ae8m%De=29V z!+0_fGr41>2-sw(NSTP(1)$P-m^&_PI#JZ?cs&_{&q*cK6p}JJyG;!fcGNdf41mXT z)!)pxP&~Z4Zw8e1M!cjOUa!dq1+YB3lsfbb-IOLq@O68(d{H2wjQetp*I5vsviu7m z>6JeZf+#6W^XH?^#?I3C_;#DBb9Ef)kzUu7k#XU9t25@A|Ct(Cj*|CjBCAOHN>$y*0g@6|lh`MpWT>zynxO!25EPs^8+osQ+=6k^K}hYBz&*pyZ(Uh}E2{b$)Y$r)zP#A%Ma z^;rTv#s6EeDv_)*dmL{yg)eIxqjvW*cQifpp1{(@xswz0Kg=Chy%jK^{E5 zmK>Zg|3n`Fqd^}3WwZ9Smu5od@{XOUEFb2OSCR$YZ#s9*#CGPTxngg%f1#{7_jN1g z&2=l4C)x7RGhd(=0i2t}@evFRE}nJ6?lLpb@}edSYL%?bj3>NydxN|0(XUsw+1qqR zyRHC|K3p-wsBleU#B0;4LgX!{ru#idhtF&MXt&w_)5~CV{e0|(<$X25zOGGK4Kj(G za4(rsUm7cv_|uK@Dt@zQB*gZdg^qFlTjZ;FUlYFAhUg5q4uDo2RxdcF(+WYYUOIoD z0Dg-e@1voI(Oq1LhbcMWBqZ&~fMgS6Sd$FBfov|<(lv#l5^;7~Y|;FSl4P$(oXTie zTxH&cnCgfful(ih!zdFxMDm6yyz+*UqeSK9kS5Gob1`^)dnV{ZqVCh;`y`xY@pQwW zqz^rVJ6Z*%B=hK7$@`nZ##y>`D*sb@pz_6Eho*5h)k%_RGj2}JLr;=+O!n`eW=m8+ zF|RX@$V>V3P<`le)W1w(s;cx2%;NdU;j!D1p^qn)Ur9ozUc+!(!)GL_L`2e04qL2kbSL^`1mvDiKDze#4h*CYZ-a?wPCm5GNUZ&H@zIZFbzU%m zpPzn4rY!WLflg`K(LOhVn9h0kpPx~`QfYM0Q-GiHNO5}wmx|vzqzDKW0+_Q%?WAr5 zr^oteB&=5z0s??X;kA}@_MY8X9hGYZwvaeRYckDHLKX^DR+lc<@MNj&3!ArTb%@Vb z3t>m%V3IShi@YOWLbo`S%&KUTM6@my*RdjoBQ%!6Sp{^~8SWhQX5h|Cv0K%2eXo_Y zEK1u{YEY`VD|>3DUX`Eo{rd+K4oG`^g0ESc=VnrF#>l zn*m(n!Vh!yRNz42Ng@zcRiOajU?KPZ_2|r zeeQT&Ezt|9TSJPOWCcX~$K6{z}u$AF$~~fP?FkV0M(6cV1SMQq8_T zt(=Ig5e^UeOboueuP?q5c1L3Q&?TYw2l~^@hcjNTo;6(M z#rwb_yvBzKX|(rOr|_JhRsT>*9wU1Q`UES$`BCa|*NAmoA{VExg{WLaKNopGF5y+9 zu~@PIPFxm{i7yKS>}99&1ok;B8fI`rKY+n%iiyfx3Zao%8tA0Ol}#n@4Wm3R(37t= z28(M9Xt!_a-qacEb34L3Z660Ee6~I4rD@-FDDb4e)-KT;V`VR4Q8GiPq*iIgO=_H1 zrMAKCL}gvV1OEK_ZOuLWLn<*yb9qN*?XhJ<4yIa#r>lo@^0n1vlqCL|LV3ND|G(dJ zf1h$E)Z8WSSevo*sKB3@+f>M%y8<6KSJ`QMuCIxdSgWll20Ta{8fzjB&5li(tl^s^?@>N)>wmlmDPcOaz7+(tvFkoX@JgLTZVUF3Tn9mXLyJgzF2VY)=SS44>I zr>(l{jp7za<0^Hl^plGcp0);4w`DopB zAb=EhdVT7`si3Ton-u8eR;<|j@Q!34fQeyJjD;hWQQtALT5wCYp%2i_dUdc7yuTl~=o?v^a3wxD!6C`FPukBr5^R(k0Q0v>3WgMU` zhb2aV)N#}Kx8o}?e~9j+(AOV%q&@@?!0Yj*^I3=_Z#WAxE3!u<^T3wi?Ej0=9e~1G zs87TK1eHTqTlH**^ga8svXsRN_e7L@3VZsn-87!eRh|7F17NsN+&5)JoYeZ6hL{NL z_Kq3Ws^f^sPKvg`X+?a;TrPO*y7^jD$EyEcB{Wg1fb+z?yh)rq={HOgk3 zJyfVUbIbJFWwAasQv;RDOP9$uNQvUMJJhFK-vv0w9qx`=WV&JsT^!jARI#?A+znhz zjVosm#3PwJJImL>5G=IH--&G^ORNI1RiF=2R`n-rv*gavW6EG_>HDz4iR#a}eO-`$ua7 z4!f-l2F(TH-NkeDwpeSiRx_;z8kugN9B zxNau1ZZ4IV%zQs+O#&^O&T;X)>JgqBd>f|q%^z%LHY#$jH7ym-t9W20>caSQnMMp# z_s+;T=)#P$efd4=9oan)=C&*HsAGeLPI8#3;x^g;E4ARX{dK%vJH&xPe{4aCNdo|! zAQ2*?;9g5nITIwlpxb~5Q!#W-HxP$@zS0^ws(HY>DAO^nBM@+*`YcwRzrH!Qp$Mp}r zZDnS@1J2L32kcs&*cG<#Fonm;s$5UtW4&iUP}VddwDPVxejXfstdKbLo5C9%%f9-c zYX27N1m(B$uu`sTg@@VwlkYb)zD{FY*rg*Ve~9S($N!DJ(7!B){y>GC0~X5^WgD6~ zeB>Lj(Z}YaNX@1Wi+4P?MoWFlG2F$q!W-I!-5EPG0mJ3U(osf%~0EcAx&5N6`tP1ZkAhFjP+wt+&&cZX{GEXZ_W(?mIc9 z()*Y2RJid#QOKu?hjh26?&N#qB2=U^x&f;F!(}b`8)4?RF}ta0_bQ}iASFW4%o55> zL8;UwtKEdsLAg2kpdV%@H8gWFv}^?mJKLc42NyCDFy@|4hwM+5_AH-=pJ@%KPE>`Z zelOX8KvMg2H0bvRzeTQCM4WgX2t;jGh4w-!pDhT&CQGzGnQ+iw0T}+fG5f@-`r#34${#=q5@d#}Jeqp%xCA!Ft=anNNn~{wq z3J=I2WVDImzZ%{pk(uSMy~2R5raR?=LMxv;SNWrq+Z}jA*~D=eA3qw5sQk5C#5v=c zIz@5hr!mw_D@#)q1jodhsjD=~YnJeA%)aPCk}0TqbJ;m{Xp#uR_jreLGo5U#r~ZNq zT>Z&?exo#*3#qCvpZMx%Fe}^wadc_#Ma}>7ll+C8>pXy^Diu3+Cn|6^Gxf+bgvk;f zr>kV?VNO=7t-kxOcnC&3N#KQ_T1;@mBC!ItySP8WE=`K#xq28%7U)L1lH(PIhuAYQ zuj+gsc_br{66YQ0%_{92R8RJv)JJ-(Ucok7GxA#J`JE4mX(Wl@KozAgpGC}0`-nZ1jjZA-G)iX|?@j9J7)@a*bg1G?s?E7@s%O|w6)L3;fU2k1AzeBe`Lqo4!pSq zcVcKf?|)i2al041u(QT`=&BSk=&4hF{$$~$=v4z@+`?O3Hz^0yyJ4eMKpwXq_6k5r zU9S}upP^=FW0|KMQOaXkt0&(Gc~sT1!o^!ktkVkwp*Ir{TeKO^t8&_0?7*LSCp zJ+P|mBs;d#ER!ep48cBAgP`;}b_RS$X&rDNZ7EV3wUHsOBa||xFVAUuRr}ZRP;wRK zldAG~bfURXAGXVUdGFR*ij$j_^%erpfz*W4ezs`OUvb9@^m$)~U{h86@d6B4W@U8& zqiG&Aw3jm(CG}`)AT-RqJ9@8!hC7$ZZ>JRb5+(}tMt{>5DPARM-4ioBzO^;szZTt& z)lVu$WIs8n+Fj7#+}Zf$B7UhWd|~W&ZQ*zJZ)=s(wUleGPj$?!x!+d0biNSiGjsdH z%sCdr->m+s@_#?${&lzhh1{2MYFkdvYMehrb}^N4>pHc3V0)?i*P%&vs9kdzU`qL0 z9Wo5jV*@8Y!!p~%UmNQ$BdkN8o7ADgMoPE5279fAVd?Fq(5$C($fd6sv5NhfF!%}Q=x@A@rRsK=r*aXyDEvh+PnLpmGm?p`lI9{(XJ^pwlK z%SA8KYsNrxcT^^4o3c5vUV5tvCaXO;^BL-dE_btIH!V{=I4^kX!;d=O#c^pU;UH5l zhD9`7+98jID5Ni~Yt^MD1P(9P!A#}}memN)ewaBJwV3;nQCU5^eo$AWOQKjD@QdkC zwjF#-9OxuU!voDA z>@6zI*+9zyUfsjB(Gb6!xrYcs3SHHzVRL%^&?$7=w>i-z# z{zA_5E|uk+t;YDHf+n-5EO%LAI`^`UwA`|_zS+4o$7hA_sYA-;pllhR~QPH@89@>4}OHX)CWmeAUhXZjF zi4K+S*79Lz9fM|rfBp67E`+C)IZpk`8IC9nf3YD`=N6Jh`dOgc%Lw3dUged)ZK^uM z#C%0QAM>)suNT5MR&7;t90cpI8N&C)Y{(gj`hhKT7%y?K5gc2`bgJlIZ6*^B4v?Hq zQcTpNA$+E)tUj3^g}PN`vIabUZhtUy2nu?5F9wi}u)0W^z1@!y=!2nC7W(4Nh0&X{ zG0%R2Xl~~%_#C|LrM6|fL(dqMkSIWuA>ln_y>z7$?k{>c4+%+zoAzYkqutD{P?Y#k znji>;Hr4u&uC@S@QSx#4cX!tsNs#2D1CA7+`MT-%7G7g3N0{+4kWeCV>x0QWiOXC7 zl_&Y>#^(~*d{;R*b6z+dtNqaTMtMUIvG6b6iHTh9TE#cyZ)bIlvO$OspnWfPZ`8h2 zp?$oo{A*-tKlWbKQRNNN&r*Jr2nAJNv_40%H_cG3z42D*%m$schbw`~Ul%84a0cW< z_pgPqSw&S(1pbfF+&{>%)sW>O(k$NOM8qy9Z=Z$+#6L&aXi5f`4hyYi{((rloYEVGC7KmgFA<}3lTnQGD4k9{PWMfq(PMJgk^c<~L!_>+Aq%qX;7Wd$&7%A!n0 z5LtIjZO|mNq@pG`m5mOjgl=Y;c6H$;hThGZ27wcYk@*2FzD!ckTTV9C1+rc%;?($= zfn^bzVSuM3bUNt7%7sW|M$lJY`(;6|=aS@a)ztj+-P))34X->cp{nTeZZx}&@ntcL zYVmXw6ASbDn~RX-pbaABUl-ne%9S1pg{dp@U6OLW0ypHqEU$(FuL#h}Pq78Xp=~UD z8pUCyV3~+8HQ8m4U)NnBkT?9Si`zGgUW&G7!QbULRxnsped9R0nTJh?UWH}tp_oEj%xif{pkZtXn`}>;7?8uvxH*h%h06&4zI-kb zh@mm=g-OTQQL74ziLfxMy}8DRZ>>cznA->M$mHM&a!H#PonUGW>{GAqD|nX>1_Ix+ zcGs&D?h%$3?{(13iajE%=0Osv8PSQ8!_}Aukq}@;LOB2o;B&H2P zmA}ycGokwjxnJMO%ZF$(bvyEWr;PoEOI`U`=QJ zTMpoLx+~GFJ+3%o0E~uTCdmb2%0!^fKx+{t*lKBXQLH1w3z!|<8d)RV>po2iW?{xz zt#Li!B?^CDaz*p<8|gfM`OQrIhof5YxN)_46NyJ|(bnfi*?bIVyK4L^CZ3Z4Vhaiw zx0InzcYvRKFdU@d9)VYRF=_66k}Slz zt~=P-rFUNJQ+Kx^J(@t{=mp_bb@z?sOHBfTP#D908cNpW@k|gq*+;Z(!MC19w0hfV zt++lqzDhgvu4~1W24jK%jna5#?qZ<>19OaG>-v>3b!jVKg>}i>ecO2*=84y|sD3cN zgsy!P2Q~L5MZQ`@3D9s&&103^4^NH)5C_t|BJ`Mrlc7r=XDx-g?a!A=6?vSioG&c7 zV{ef*>bc+Y2teW@a|VLfcsiCN!BaSG^;HyE(LNZCq*M^56bE>reI9>am6eXcGsbYn z!Dw{})H$>^2CdY$DS8*McU>)xIxnP~p4$a<6I>G3zsD6 z+MV37-m);EjLdCLPg?koXIz%1q%_%bT1CX8?!|+7t6=SZ;{|nLw}=v+2sr@SP_?iv zJ2qM$sMWydb-5v~ryo+3`?&<_kP_{8M>aV3Hg3wa(ie*SCO4@MZ^M2Ax`PYT$dt|ksQ z968eC+A^ zJesXAW(yhX=quMMu>CfFC(xyppr-9-@%n>*`m{12>YMc!%pibOBOQX{?6n}E2r#ZjiclJ)>-ZXlGM3Pt10Dw3c zOL-}kwJ3EsRR$_)aHw(@G&D0B3{5?@<`oKNNyWtKutsEt37t@Zl&}z*`j?`t&seYi zFu3F`kA(vr-D(~u58!6Oa?4ty66h_rD7u^B2v#E(shRQnavB8|9lPz##;>|M99f=h zDI=hnmg-JZdY&7_A|gNeJLleN*yc?Bm@Imre&Yv>Mfm@dSo0o`1r1{@#yiO3)R{gD zZsb}H5v(a~wr&w4B;qmJDfaJ>gaSnk1^3|{H-yzfQidcQ)A|6EQfeqn5S;xcrnH5} zT8<)1Ax1ELlmHr^%g)y+cdf%QR~JcFXrU6l`_27Olx+sCZ&>W=DHbiAO9>v+!^ehq zHTd`heN^O2l2*E6AudnYp~~6)ZfD?w$*af<&l^X;{ilnuyE1uqd%9Y8y1l9!{}h&z z{_4z*x{!~ok+qPXNl{U<33(^%P&YPVBu2jw-Z|bo?UPyvxJs$>zQR>2Ejkbk9mAVN zip_rhBnp-4uZCOPbZ$&Vx`ZhSu4*-he#+SC=~1JdPuMXfWuK_qGqv*ZnvIBX{eE@HLkxnT0N356xN z=PBIHiOjH$)o3BTHVP4WEdd@7Ej>l1hbJ?Qvkscp%bKv|Q`=p)lueeh((yggCR$wy zC~sJ{o!k?%+D&5KMqk7hzuJiBoH5{{$kWL}^JVQ0gbXCq#~J8{UG=0RZQM1Bin zq|K~vn`O=$(MoKHmsUQNOCsovKqAiYh@F+K=h=imG12a;&MFRM{atsOLtx5=R_Up< zO&2EDu43yB$*QDuX_MuD6IuU7xsQ*?Q4VcB!5Lw>pZsXy<_%FN_~2z!fco=3XR_|n zzaa@DExuDXwmf@955+N8A-OU&L@0-5s z)Q9g>8 zQc;EAwDmJN>WVV2#m`DcD8xQs`{@Tr12Hf6?snQfU3Rc$uB3W3O^At3<}8Kl_)Hsb z6svK$f-w-)KMlwTlT-D%Xpi`ePu$dL4@8XxEr)Mqit|NvB3yz=;e)+*F<)gW#>e-t z-3RzjeRUN$fsTqHRjdjC00YKCI3G%F>KHwx519s=lr!!JiS-966!P(wyGhis_!kRX z6xT@%V_AznnPDD{V`uX_rAy+91tAM&?xTtE55+ccP`M9*fkh80`X|+{Li<*XKVM-U zH|_Xvz=P1`V(~>nD=aR1yn<4wKIjZ7ue#}lv*|mJ2Mhkslu9m# z$S*SF{LO;^0CJQwv$D9JnJt#Y8*1i+h`cQOST;giQ^*56A$A81-~~XXa6BG|H+%e6<{o9tMxc= z_ajLuC+)M`DwrX8gQVu`bvAnARPMbHM}rHWD8SmQ0{e=Q$m#INM4t+SOr`gVoyQZr z7|C|?tZHZ@0!3#0H_iu750Av>`+G#`i+_QfDJl%|eqBLf6F^|e^6_~=TN>=VbZsJJ z|F{Vi&B1w_ig&Ek^KI)8J_Ve>z75(xn{nM5JzUm>h>j}A$ba{m<^fM*a-xR$?sc1% ze%6`#a5|9HLb|AVaooQ3pKlXy4cOAxZe}v7iGT%CFY+RF3;SqLK;3NPB_=@@wGYX4 z?9BOJe(4tme<0`!P&}w(XU!ClR}Ny&D!?>9#unlh9CwpjKl;#QGziSoQNbRFsmdBO z()mgG$dqtX&B|r`ezI?>B*<+Y)xFr*DxY1EZusG%Adys3E? zOZDDHJRlqZYMtpq94*lwzA9CMC%S}`CsGbcDN<5w7(5@gLzww+Qu`si_}vg2sRXzCMo+AZHGz!3=I@?){;q>g?t7?d)La_ZGnSJm-jJy=pPS*T#8*lG&e+zswM7T4?i$(m=HIl z42q3BFkRld%&2*A^)OCPCrybII-EXfe^}>1j)8#ZBDEo+_M*fjUt964ZUeHR5tYrLR3Jnl&Zk zu$9GNOpn?!T~pj}RH%S1?I)t`kF<+x!DsVuMV~S~&GB(efZn?uMYrleN<0P3Jvavv zuAXQHHbVX$5|yvA6};nea6Af6#`H1PeK!tnQK!mPQPJgDeX;_TT@D=kRN~vPMD=P6 zqtPxWvIBO9YC_C!7BSle#vZBcKgHtY9?dCy`u>;JBhheE(|Q%7Z)gnvs|W0?Og2H_ z9`fIjY_Z#sk!qVN*rY@CQC!g*t-16kwd5j;NA<>0GUC4%bN>>n3?sQ?O|cv=36Rdr zP8zie*nDm&WTFs&Yv|*y5;~|RGp7M2G1L@sMY7mfM&$PPU@SY-F*lpY0_@crAnL?a zR=FC)?*vkm%RWt|ic^NVAL#`%0r9PV<5J@>?(vT~5Jl;OwcKKNoD%BA=Z|_;l)Z{@ zOGSy9&)8)=F3H*{LuAjxZnuA^RZ)*%w5Ealod-eF*t7z`pPw>Hd^m^^;ksMzc~V#& z8~ak`7*O1QQGo{l71$cxF&wNu!d{|IH?;H-mNeEta6NV#2La$&L3vbgaBOO`#&bJ; z6!Pdz!OSN%2OdguAxN2r{8TuHp{J-WMsgT|t+f&8sk-K1Z6+NN$Q9#2bG;}|tpE9- z>Z;z~$H=#}@k-sN9e)l9h-73pG1!8UN5mcsq?eog?Ex-c!KU(?a{4iQmhi5kL~@=-#iM~6+Cl=(HVtW(wp z2yWswdr=UMp;f-ZmtC9YBbO@jNn_)a^=2*)&ObCN*x-|Fov!=mLuea3=Z#Knn1rEry}U zl=MfG?7E6UxG9q_@a0^eAay{O?SohuZko22gX9a`B;o!_g`IMDgX-SvPyDX>$svPj zUgs+r?%A@J*2yCDAv8q*@Flaor#(-*$KET076YQh+xAM`@5#H%{3K52zHh-JtJg#= zbEA@p_SZ9=6nxZ;hBni=50n1Sc;r8s;6LYbafaRhMmctb2%+Wb`BDCbvVqK9x z=yye`HzOe&5k4Z`cWwL(D z*^6DoR4%rgq`ynJShL>!6n^y<=_B)%_V#xV|IWHK+;5=$t5YpRZ@mxUG6i!3*o(FK z2D+&o3bQZQyXy2zS}6$du%yL;A6P+I3?2>XpA^Xfa2oh#A)ij$V>KhOB!6sy&nwDn zf&hZC{WX<-Ec-L(_SZpQ>&Mw+dj-5RKM`hpcwdVqaGx#x(u%~`+i$Ff4h5_5SZ873 zUFn}L#@08-p3a>cGt*D{6dTOU_rFQf9%oK`Ta6bcX!CeMHw+u$Twc2|@K7xfN*491 zJ?&+{)8fi_~}_napuWVKA@N*juoo zsT;O8I5vS8k@h+61|Q8W)=_J%A24dzG~bBthruhuoQAH4FY7*{#oZvGd_Otvyx)`i zYs_KQJh9aAWB0Ixl_(L&rK)Gu>`saHW{ldwJRBfa$Bl6+{T0?)@0i&lFzNONSn810 zTn-9{>wHhvE=H|b|9g!4SIU_(TLI{G!%R(bA})s{8L5W)(VAPfkfpvlUrsCk6EtKe zBd({%#bv*8^f?negU35lh4@ULhLA{L2H;&SXZZ{mdts30lH-Z1%0i*fgzt}4=rej= zRYd%>qL$5yv2XbFJd3G0ZHM^4h~wE+$vv|q%h8VlB1uwD>l}V>3xbWn=v0={(f+6Kh*$nNj6#DhHB81fs{Mcy`GYO~fEWl4zSgTJ3FAyHYo7)**7@y^Qo{FCJBI(*n~{%#}cLY+} zmdIbO^4hR_*X#x}`+Fb&fH~+}AfTat!a}*Ff^iZWgmmeD!}wS)|0srq*JlI5_ASaG zAx?_9;aWjkAC!ulkE%esX^g9GW<(`L{8GHM`tqFd(end4TG0We&*cjsehs;|tBhsJ zkwsyzNZr5aXj=`rNH6Qp_4&HqEFEhrLZbfgXDfblC*@y+KD)S?mzVc2chT0l;M?@( ze_QAOSB(1)c+*&3bS6M(T8p?(NSAa; z$q7j}MIkJdig47{jG3oOzJNKHk*U>Uq+k6uV>goT}&G@p6)DraMQ&5v5#Nj5y;F9wza^3TO1D#FY`R651Qlq zC{s}LgY<_c=ux3qHIJvQ?2>^Pt+$v+R!W_^ae1`xsxf~I^3jmo|8uhxT>IZ3*I^9+ zeT}!An32-Y%oKBQy8(5Ax0|RozDCBV2$AK`*)1H5uGIjP*%l$0&VA$g79aMc=_GWymD3)B-^QMFNo20-x%3d^gx&*htBV2gCM@Jzk%(5jJSSEm680<~Mj6X^7^ zpQb-9i-(`ygWj{tHIs51JfxR*w!Z_d+L3==057nx?3B*&P7Lvl_$hgPB(4W$@EAo| zBEg7JN1`+Q{8^a?FU+5I|7FhnQ^xbF`W5>m$M2fQ3{~^hk+zE=QcJ(eL*EJA)$EYy zDEmX&I>a-As&a`HqV6Zhw=tRMnoFV-6_RT@^!gxQ;^au7-{_vCnGqLrWAMU!NZK}% z{dwsFKg6lyh*gP|S(kZoehwY;i^*rcky`aOLa1WcmaL_bATE^D+cK%f5peYI#s$=X zJ6BZg#;f^j9GFLJsoZN0apDJ2=Pva2`p2LVA@Gbu=)g+iVpL3aPCW@+taLr=!w zU*!$g1QamcCJz{LB|tR1;yA*$XQRvaJkr{2;So8quIz?j!+49Oz}4g0#snJSXD~fH zjjojJz%_c;_n6iIs9Aw5sDhaJbZqEf$y0T?8dK4m!dUyxrX(HPLtGKS4g8#6(WNQc z+AY6tGYL#sk^7m%;^>$8I-}}mu3<9yHt{w9SIr ztVliEr13IXn@mB-#>3b#*3qNgMqdihOCOI~%swhBh5q>Q%XvQ#i0)lvi5j_X(5Ok5h7ysoKa zSzY3l)slzNq4~|gJupe5n~Bl11J_P)g1x=G)2LiojFy2@0t#hGC%`|6aBsq4Uu28& zaWv|OAeQZbAIR+8+9A$|2+33VeVmvooH^tJ~cxBy=8P|35FwbFfUxnHpE#y zDY(2pZUQADXzG3555vzkwE0D|o!(0|7}MJ*l7|Or~U# z>abSMS3`QLVrHn%S`u&NpYK+=f3;oadbZSTdF#Exn7LW%_+PgaN!bQ-j@n|&IX=JN ziKmMSq$P4v@Igo?&rLF!Nc`;dnFZfl2d73dkM239H&s#J9KUHvz@8s5XuHPiz10~Y z0w5}E5z-*rQm?A=chm~$K8e6Yeb`;6P;= zjrLFDU3nYBcYK9u)yv&a_rcnm?~91h6>vje8A{FY@}CHA+o<4Vn1c=W*VR`TP{_AN>xJ>Nawu7$7#sIa{9 z23W3msmi}tMny-~>%ugw_}y8Z7+c+6P-f$qTW@sCVk(WYdzxU|-1(mvr5kV6m^kv} zQcvVO#wDe*89aGcWAy7g62G8?1g3=VvDbnDvJnAV+;gBAU^x@G6YI)5IktFB95%uA z_q9gmpn$+SLP!BINcZP%qeS;jyU50m47md%l$nQFpM@a#D45)^ z79*|I=d*x`HM;hch4K&`ZFhxWfcGS`DKCr};O14{DT7haZ#Xj4Mg^ zNb$h{2XmT)3qyUgqnb?bp|T5I5jJW;=@mq`Q_ygkotx3#fE6h zXZ6BIS1s&HmebL}qc7&fAopjm@00GVf!@@IIB292IcVPuTF^^>iZJvsXkeAlNhy&i z7nt{*s-qS=%jel6DCdqj|GdE;p^~Q^GqGD4a`yA?wuIUl@7r*3WXJot8^D;k2VJ{J>2blK?g(1M9MtRoETbLanm)gGX zJ;!XRVJDlB)%%KDY3EVy%SccRGH`)#JF&(8se`oH$-KY8h2mzN$Z6uwj|LuL+F@^w zT^DKHLWfCXjE0HY{P0xY32hJFxi;Pa<*a6HvT9fn-@eOHRmpcb3hU-4Ug*NUUyzqP zbsui!CML3Fal7pC9=Dzk9a=62l{NC{s4kKuG0&LS;)(!J%`nfUm z%jAz}{)o#t^#cLuW^}BU3rVth>lXA)?P!OJ$E5>0>L1jp&ND|#%Ll(SPZ*9PpOCWV z<^D&v`Y%2G>sWtb$x$xM#5Bjq36UvgWa&o}h=`VwGb1k_G>Agr&c|B-nm!i^!3_&q zMomuvCQAK` zbivup>vZ*$bX?een%5oH@>O0L z5IvDZ<^=8X>nQKW~IMb1>y@64k&Oa(vk7F zZQD~Yp!2DH`bpu7afS1#xfx%;R<#c?I_C}DNHahL5b=?wh5+J0YOY!?TvwJ zY>x~iB{voZ3i3-L4RO1yA>+soK36?N(YvD#{VJ(a&%;^9AjzY z@N$QCzTX88xR-+|=Qc`q`5`TlTQV1coICuu z#}Yq|_-cQIMKg}{;>Rgmn3Zr0gferl@tPQyaL<*X-fUNX@FMOjJqpj&8*5NmXJAO1 z?ASUYT6?f{^D@1hAw*1PX??5Dxl-jl($Bb_YnPtH>z;wh>iRBs8;#tS%Z-s?P$I*^(W_!oc|`g z^bc}lwq$}=7-mA=RG%?rd(<`{p$|cJeK1qEAJcmz^k3FCz?0}hd5T$am#@l50?6PZ6sd8|?Hr|brQeCeQH^}cKR63n7Ceq@P%$M?mEN;Y zi(Gj#KK@7RV2X-YLH8z3O`2OkeR(m=wBX=W?Z>l&v(Jilt9yMZY+~o0)C+v%RIA&zA<{nYxRTWmf zmL@2-kfsokre+39d6Yl?%$Rnm81aJotG<3%`(xW&w$d)u5re@1>9328kHyu}zT9eh zZ4%|WiVpiF3>`xK{;ie-Xv1@wfmJ(idb*_^FqPX)e>7WX(ETXU}R*%5d|QXnTEbG?KWg2 z%%3#1kZP{iaXljqbkiSyFl@8P4VEh9OSSh)VcQaNI8=r-e>P zDw&{ggW^5{t0iZq{!Ck^X5DDKEP}jX!uR8iX8aW9>cG5;!*qTkt4Irrl7XmRgnrPR$T*2&~CbG_+AQx$|USSv!`xJ*%>rqEuw?ixZ-Ztjr?0z1}| z7Q(J0aof9vL?vMPa#9p!dzawS^69%**5!l?eO~(WlZ)U?uan;CiTz-`YwA8x!g<#e z&pGPD3Kf_k;_!G5Z)}ltso2Vo1zHniFnZvnR*Z0p91M zEGulYK+WB(B=f&hx67A?~-im58!9F7HVn;d6 zoAj-P?507vyRCaQ4rZ6s^ve22ayx!EJU7@e5XmBHUf1n>`1?)*6P(@6*%_fxT3`9+ zs-?yNB|3p+HO4gnUZ@g$C1JBR3qMwQ6fAQ2en!fmb|0_Wq`4J1lP-cyh5y=!j((V{ zE?)!;B?aRx6ozM3xPoJhRR^Q&Wb<7BHjDv0qrA*a%!A{H!beZLh3a7oTrDv<9JCf2 z7RK3GS6PY$y16ojSGIhPsL@>r7zmmNtQv^UVy9u94GNg`SCV$Jj=nmka%$-ocUJzp zE+e;Y15VAMmMtrm!E*UWs49u$pN!#u7jFFrxpxBOjy24}Y|TizBHPEo>jv#L_-iuc z1kYlWgvjF5Qq4X8alPL}iU3s}Ws`X&{+D14}C8hY{0p z)=6}eO_t{LNm{DrfFxxhitE@TQbF+z5MO`ZPjLKQ5rnM~T(=lG&EcoceN{NdN{Q1L zGMipuFHC7BiEzbzaFK4f{UsweONxKm`;M{{#n&0P%KhE?ul`D=*_aX1vncCW({P!e z$~)K^>%LoiRZcI8?w=jmgVa{u@feQj1R75TkS=e1c&~x~1fZiZ%9>ohM1exBL-RN{ zg>8Werg@(1z8z8v<=%|ZEBe#?2mBwYsBT~PDw+pU(o)*8L{9IU4CyM%;m7&eWUwJW zN34gQroZ>viQQVs*G|IH1Zg&*+gmLaDdJM3QBw~uZRPec%-*mgO;1qlm10dzs!ZQ( zIAzDW4qJB@sKwfP9Is(|+DJ@<;mHCJ3JjL#v!Vqm3=L|5K0T|E}d+$)jLzjG3FiG-Fm>`+r8kbXu}>f}Pr0!qrBP9u(pKL5@-@ zGd?*1x!}SG8w8q}a*gfchc;kW#>PM#h1(F2dZMBb6NpO-DF`rS5t5~RhQ=p6?UqGW zX22@^TIs=QI6ykpBdhR-_e&ijiY#CKbQiXKd5ea{-u>7+KKNwtP_!f*^^({WLtxv& z25r&bL7APIYF7LmOz_pyT)TQKpo@3C_*6-i4xk>SaHSCH5sTasl-lbc{jfmrbi>mVacDA6!_`MbEaF;{};OzDAcOwY{o8E5OXCmTj;c{{jce1?v%~(;CJvZ%4 z9&_d4lb~IC3CavA0Nfer>;Iq>ZZMJ+HC`}-v}O%zROxxI!ZB8dD8K)-^#i@SR?W%F zRAg^_7;)XV7{PB$8(DfqH>gEg7r6$exI%GHTy1o_^rb(BMVG+zq1G{LP`b|2#`a6R zS}`p_Pe(n%C47gEE;oRMRtP)#Q`CB@&b4|rqixi@L%uONJKQ~xz~ygw#h;8r(t726=M<+-(Kg&XfvHNPR&cIDF#eMY#9lhyW) z+lR2a@$OIU)LZkdl1LX*03|fcsghL?6&xDNEt|P^okLb@Rc}B9&eVtkY2Xt$x(!Fn zXmA)%2K3LTWBWTq_DU5+n+s34mB0I653dxPWt#-y+8PV`96K+iQD# zWMKJqqBa8dmLtKMT0^-b_5$XW4rkwP8h>b3{o-_(1;qh$_@Zijf!Ce(hvqf?fW#)0?iD^;Nh#aM zij%#$#a#Bg^tdM#%xtx-{#Wa9l5k3I5U-0(11f2SknIG^*;K0Hc-tiab74+(3)q?Q zW$$Kt@r*BPMwD~?Tle1ED%Y*8M(30J8aoqaPd2X9YVk)TihdC%L?L-@VK*P`zSmQ~ zilm6u2ciKK%NECZFhdEnf3#7KYi&QJLQF5^IGhs6=-yYHt0LoDNN_d0@iMu-VoUnh zQ)c9;4#i^zc3)??m8ryRG{8X!V8CB2-F`Z@(02B{n^6!hVEOE)k(2%J*XDGFZ`L^n zTVH2~EBNsvZ$}45=(biD{8Y%9yjwWig{wME( za`_mT(jn|cvbl3WDoAu3B>?hyr%$=c9BduUJ`yn-Gl96!$3 z$w+O`40(ahDv3bD;~BKl3MnX5fMBQavyqQsc}T`ymr1@PW9=s)yFw@cq{n^N+O&7V z_04HlWlhbCA&4Ja!BEKd%X~5Te){^H?|uDE$=_~W7nW&a9$l3sKNAv1c;sqOE)$^N zrvq)BU}Dc9E$Qphh-PBq|1RbJGbA~3Crj|VS(v66U8zbNQPuL3aDpdk%F;=8YRf$G zDC^{Y3Cz_9;G)3YLRSu(MO@wDjq!jLs#Ib}^fBKbTId$u8;I@popT%n26((Mpop!7 z^qK^v%K~0jo!AQn`u%|V4@I-+qQ)E~n|xz6ZkN#j#c2s2gVF6co~V;8BA@WDcy^MV zzBBfv6?ak045Fz_Yieujale35!`p&T=*o-V2T=&gd~GV1Uk)AImYpbt=Y zu9T34#=y5+L{;o*pcc%t$i&Iop+totiHeRK$Xr&7A!`^{{XK=@Dr?b^Ju_fdhhC>~ z)lJu`8cM*O>K9VwZS*xosr3z*oQ` zdpff66E?Ox1#KQ1v{NZom@W69I?!FPQT#jo|R^0I5RE$86us`b6|z2NL7(6rcb3* zJ{IQ{Iax%i?E}6F3mX91b?B%CY2h^JSe-%O7r=^*Sg;vPPM@Abk6jC{*Aq&myDBe4 zsW-*XUy>7^-*f<3Y^~Qy3hCi&9nd{K&FU>2-gs~&@GHGBg#TG%V>^a4-p_7*!$YWl zGVH+3It<@l|HNvnE+>V}lKsjf#N_w1a$#gjJtCc5wcGM@$OZO{tgX0i^}j2)f2G-f zz5XTExBBEEiJQfEf8=Es0;I^(Cw_p5TSNMB^{Zt4>UAg?a(Fa=ikepBWxclw^AKcQ zCAA;d+Yj3Vuu^%WgJUWSRcAP;MZd9ip$qu=IV2=aSp$twsx~!EK{;6zd=&k0yLN=^ z$ERHMQVq=QSMpBx-r{N2?d%=bLG`FEHfllaFn{)IdV?HEYlC#xr--U?WNM&%KJKlu4*(d!5`h%}15cyvbSfVzj>jW$xD*7Cqss~Jlg0N& zmywU}s&_HI>I8l3S+(-cp1Xv4*z=#&W<>nrSXXEapQuCX!Ws-5%{NTfJV$HJ7~pkZ{30AJ%NpG~7E5$Cc( z5r?*N;}y?Ev#}%^t)}JQ%V35n{}OJhXz;l2r8Hu>@1kxGtjW+ho#&vEe7UIpej8|a z!DBBWQv|qpbe_V8V|jl3@Xc4Z#gc>bu6u|eHG<9P?(92KOV9$TNTJhz4;bT`>yHwO zUSCabV-Zv8*vC$?n>pb5^p;U_GwQ6Vl(c~A&|E(F!{|%?+w;{u6Rj)2q*$>)q1UvD zk&H<#RZRoDw^k;_#RMkBk8G6>Gun+=uj&O{dvue9J?C7}$T#G%)};4Z;sE$1u~|1D z`j54PJ}US#l@R#GgSE#xZNm@Kx%6)e*BM0(+pTt8S-&Lxzh}Y!)a9^YWXL(1nZB{O zf=KdN@buxIW@6DGZy)^n)I~g=)m%d2$@rwAy)f1tZ9oZ56zUX)eQweIN=<|e#u=?E zsKu_Xw}wr=|H21|rvfmSeRdc?H6;LVDSgqwQ(C=_wq4KtZiIR{63;MMDxNQ#0Wi`k zO{#o!@$DX+Tfg^_$-tT{7uyxgfly1G*06SbA#ug$oxx9Fm&M^QvqOzF+C${U$2{3M zZO!4y!aWxNfSCatp7t`-&_20YLUwrzi130W$AiK2{3>@p0Da=8ui`zWJf0K*c6X$5 zX+Z$IT#cBZA=`Rt-B$Q(eO6GPBR@ey(o)8WJ*`=kDg42+GOp)HX%y9@<2NEB<-Paa z6Wv2khYyxCs8}IrVGVGIzVOI9gK+^#Mi>5MQH#}Anc(L1j2#ujT)35sm~Y_;)%a+! zf;%LET9Qr~#|gEiBvPw}4cG{50H31OJrcXKqItlV*`j$RUvA&UrAlhIR6UM(iHL@S ze^}Xv7CvVkI8nbKm8;Yi_ji=n-gb!)dLWH@8ee{Q;8cTBb5>d4z?1UnZ!qg$c%NhgJWxclfV{HDiQ~I6bTxlO!uKy>8pf4;+ZNrzb0g zI*U;h@~9)1asY~fC;q}dB5hj50GNCL9NmT{6zTAJuO+yO+FVL5a6N$#n2Y5MgOeE( z%{c1%0vh?B3AjnYVS>7-i{`3Wqtmb#4`E}%f|0{w<8nNkg&@lNBEmn*_F_zGm|i5` zFdaMIJ0Ao;ne-c%ta$jK?AW7=5g+_3R4wnBaiN4)WX@Yry)GHTT`n^6p~S?e98hMj zG7g|u1a^ljNz29sXh_SCXs&gc(Qa|@M!#p9jIBYpPajhxa(ruS@0_yv&6saNuPT`& zWo2`x%~R_#SbOb9Tld4BpjEBwRRwP}4t~50ZvS)R>xr(MGzwxL7eympc%};KudEzO zAsi+`9IALC-YRIFm9E(6bY=WWiBCe$aL(E^1GtpRQ(@r#>mdqb_x?J~7~a33 z!@_RjC=YN-j!T~>nQqS4j=L#9DE&f0nh;XEDnn4y?u&Y43I^GfS!R;L6yr_Z^GkcwKgac zm_{OCoss~U#;wcPaDJ$Eyil`s7y~m0Gw&XKhL<13FGQ-S%zfHx>2XQl<_^Z0O2M;X zHhvvVisFL%_scI|tG&2vn(=H!Cy>?5{il>$&>^o_qsZNZ{pFBUF$Y`s!BqrY4;6q5h%tZUVbob2fd>Fy z(rY*Cue&JVMd6uTVLD`;s99@x9?dI?6-YlFC0WIPd4&CDEa+iC@K2ux<~iYoH~z5G z$K@u8^se_zK2jzwv$YQvwFIg!eYzj06LdmzedZaZae1kL+?AVZdrMwymt(&KSJXcZ zDrXZCSCm}OOjExb46?10i%+iE6moL%eL)(w@BNjooZ+E8yhdg?20P9$hPx%1jMl+4(laXT_i@jA!DFJ@w<-8OoLgn85sXsGo3RWOxa3jV%%`*M2F!O~ zj3*tWO%4!mQ`6+H=K)Q8Kc;Ei{J+?G�!tZd*7BEukh5AoKtMLJu7jB!SRdDAEK; z=uHJg1w}}xq4y3Ns(`4Vh=_&WK>-o5(p9V!8wl(h&-dMN&wJ0^zxR)4jA!n-_F8MM zHEX(6C?7d)tJi(-q`VQ^FeIMA;Y}x}2 z&ZEK85O$y2Jb~G<6;KMIN^WVP7m}?a>Fr$?BR(-MmS(CDmW6cYp-PW?yL`tMh6lg6x(SUF5NV_n zf9a5P5odhg-DcB>wxZ z<0m`_94E;}lB?>RP zRAe+4C2GDhIQ1qO)g*7&<@^yr7m zpTF3T*u@9mf|J}Y*4moAHqkdT`FbMT-_f%JST^(7lP#4dqx7*TkFrE=SJmKG5N+08 z{3tkm%)ejzyAr>x{KTlM7fd5&Pv$ypD9{nKyyQs?G{}9pjNRE=H$6xYF(R zqgmAcuUq5qAG_}qg|+|kJ(m9j9G+hIUUCco6vfyxAtqJGYniZ@8Ss6>W?UP8)ZdiB zhY*(ay^Xu!=Z}=DX%~oImU8!6 z_gYu}x?9?hfP*3ZMTE8rYj6rNOvc2|y+sz+PH>!nZ zD=E_8)QNw5Zm%Z0l)X(|0OrF;BA4*uac5h@dD4`D}!mLj@07rmmFU zxM+G|h_^JI78*fPz4{VqorsS(x8~lLe`&XyABM-T8|z(C)_kp@B%g~Y z_V-Y-gWcNvVIdG}j^supSP1GY3b)M-eSdVTCuwE=mE+9OCgAYY(d@Dr0D!Q9nI}hS zzv;{7_Pq3){gh5RcP0(m2iE0B38u9~v}L5@M%ZYE>9&tvYV9JAw}x9%{E-KB>}=Oc zHbPqe%(0#{k9yyD{r2_pqeZgFM47~;jx`h4xj?7Uctd>5S=fG=e&Qp~3xRZ1rJNYS z8v%mV*PK$K?!JEiH21>?w{O-hg7J@Sjvg*P{x$4m8R5h?$RJ~_x=|bM`dLo~b1V&o z=#-^Kw2(AZm$arP$f7Bo=2GTe0?Dcfo2FymqAB0#qhV`*2xo1)ZwbHWpAd~sV@;+x zFGzzm?t0(<^;o>Y@h;$b`sp#T+{Xn&vy4v0rAb@M-Y$n3m$#5<6%MJ)3=J)~A7s1H za_pTYP~%p6dhqkTzt$nTQr_}i>C7UkQlcM&6ih%|<*JAX4sOEY=q{Z4%*`1>MVk>x z)YO1o7J1houKaFOyW84y`~a(y#MMsi7PnB*C)1+SGE<6@f;HAxbgIQ$^hFh=o|LmE zl^gIoG|f3n%&L1n%9hM=I~%INFRO%}EOQU%lC*2`_*~Q+K9Kk2)N9B6pRpmD#d0?( zm#$nK>=1*j{f|M`e=PSWg2{4mOgE*NFy=x-E9WriX~eD~ljUyon>EP6S{q_O;1SCh zOM^KqDk6i0h8ZbL{k{#vt$;qtmMpcgbTGNZOP9bQ0Y0uGEX|9BRm^ZqfFb>psy zA4ei7hf^K$+gDD&qn!+PM#&=dTCWZ5QEu^qFE;io8re;{=Pz4o|Hz2N;HKwa|Kv-o z5WndLGFRz6>m<+mhy2~WFhH>A$zsmY=f9U2vKWr!uwGQZ;(6_XiK}``H!Cz>otckn zAu4^}m5Nm{KPG;722lDLB9&D*MC3g$gNz6lUmKo*DawAW?^nY457VnaoGvYdKLQ_x za5Ya;Q#19?x1ss^DNkfqOIj6u^U<8LoJE8{`14$1aSCn@OH83wPTf$ozWUwE3eVh) z`N$wT|2MpQ#(p(Dt}JmP_rwS>P|j}w(I1&RM!uhi$$WEIr>UX6zw}E5_#|JNHLj?4 zco^zr`Ae>t4_0|S3Y6<~meM;Zt---VVvNe;^Dtc`moDDKNHkF`Uur{?HyUPrR|oQS z79skwl;Y0Uw2|?~JCJ%p^s7cd$;%_9+YZ(uRps?Vtv%{zMKh0Q;}dDg$!YLr#B>Lm zh2xz*%)7qDg8tCGw(jpbP-|TDPV*XI7rVat0QlW@h_O#6N*e*dLBi?ewa-yw|M^Gv z4{{1TAU^+aJ6o1mr_FqKTQLLtr6(tKAmG}*{6on@zFMHrjukf&yKW^C^V&#_gpdIIy>bB6?rLf1f zOelSxo%(*^wYcu=+1I7?f|V{BG`S9ol->1plEQ z*DzZL_8CjPX1N@|{`WHLcXgxxGzQbGXfFOTkLHrR)axRKWjIg(ytj`#8sq-5UIK4Y z+;Nm2lsF*KAk!wG-5u!0mgF+@$3`%3V36vLO5D!8|HH%!o4L^VsXbnUgR*cJjQhRk zSyr$iOEbz8m!5^N42;T&NPw~2>A(Bd`Nd8V9kK^r03Q{`%4xsPO+DR6vT<^Hj@~zFlMy|TD6P38cW0Yg)cVCo|%p1;Hy3Q8lqIMZ` zKTGqM%W~t^Fsjz zgLl!JfQ{i-%QpaBnuU^({sTDd7!I-iA9D}?e_$OXFav9#olR0qQbeYuh+7!fMZ~&} z1`ksdY*D{9^su@cx9QTySyGxZzarSwl3pl`%_>>>m<-D>2w=G>n#oIU;%~^?L?)ayVk` z;Wuoj9G#y^>CK37g(YuEH0L+EwaI6-Og_*3B(#+y)GZ9Lu19Ng>(SGm~|%X^kg6MV zu>f@tY{GIe=Z@6HvKy>mLd&>QG=E4EO}T?5mIyDDYT9l4R_MEA)f#!ax%Q|{bK zH#Y7+efR@^+Vns5xPhbQxX8Tb{wDDJu#6Q=^_@ZiqS3S`qU~v`D8T zmEWX8gS&f?ZP0DPBXPa#QEt#;xYkTFH`rvy(y8uO<`2xMxhyEpM4xo7$y~YZPpIcc znX%y2tcv4nr>4wZ5t<2y*Y*lwU=)=6qpvGZ91?8dSVqVe0;P>XICx!2F3E$I0!V#i zbWz`Eo~2JA7z;LQ-#7)vw)?ZBRR+@G{Lh}LHsbcw8_#^^Maf=NB?i|B8;-A>aPMiNqMI14kW&`+fmxB zP6o?64^;O`R)XF;Jb0~!N|QP9=TvO_Q?=m2S!U8oiYvS+d-vp-zE5LU)WxC?ib|V# z9sgSz@egu8vzUSPoV876Y*=(&vq5;sdOxCEQH{sQz2ByBovq_49h6Tq&PLKl((S{M zy=mM-O#=h$iA-+=3WX7}u=O$#G|T~0-mPY_m8Sl!yi<~HVhs+cvu;9h)-|3Ay7_^% zajIU4CH{r@6}LFObGH;fGz`T01nmKSh39<3*S}p{TvS$<8dqP~8;jaS^U~DSdq_p~ z$0Yba?6&MGw*N|a%4t^p*T*8pIa$`8PK2<>yOf!vDz#HVJBiG} z^d*P}-P&!+c9<0l|0#GJf-fZ`1dbz~AFF{Eq zQ#0taqVy(v^-|}*1TQ69*;AIOF{74sSCdEjhCpN!4)~G0u4S6ZQ5Yv5N+CO#6Zj#- zlL1YH>FVu3?=@YZlfL1QV8c0Q?R*|+gjvC24XUku{cF|WEnRchDnmM>?;abxT>m{) z_IgW`4UWQ*NY0xM#?I9f>x&|#hbGS$u%!Is_3 zrZ2vo0e)w<;J~ZtR5GMRrjdz7n}wAYw01xESyeDW=fuY$>)fOPa7Sq=XF+(+`_^HRLglI~`*RVWtc#xZ zx7nJ^5_-Eul~m{IrJ0)|&9lTKhgU8XB^+cnsIN4?C zPmf}3x)M0T?rIcq)+Zb3IEB5t;M3`=BPGHeAd29+_kGOBVc5WUZc9kmUmE(tYruHq zJ+^Hy0Z@u9YXz~e4u^5-mj(D)xT^&Ov)|R=obtGxIZH-`3HdCC`W86nA0g-YNs~ z(0qrJxLnJ&0}|#^N0WqA@T3V58F3}?*UkQLBkQJ}j?BTyu)vK^*HDgaZd&nM+YisMuxh=x*+nsiecXe0PY-Sh@(ZS+ zzu3jyBb|xO>j&Stw%|{_~DG9E*C%R?Nf}{*SGJA_e_-h zQoMbT007vBEAvNRth@%qzPat{+&V=3KO*Zt$az;Wg(M-?ws)+I;aSj^cxL+G^oW_U zuAk~B$}-nO+;~7`rij^!tiCi9Xs{hd1Lg9<(2`iXTCyi@`t@F>da1zfklVlSI{ULHIBsJG^Apob<|?HZb5_TtqkyBoj4EP`gi~2_sAat# z8MH)JKGw~5C2T}13vgmz8jXeEUm{Ufk&N_YNx7$cTiZ2$PPwq9u@~QGQ8bj%4R#XE z(6-cG;&6nWHA$0WQ9k>w_(5{Oc3xml0RQ!$_KC3!As(0vn9cGH93l{7z=%nZ_1${g zbTZyPu)h3U{F#WksN*|g2TH*4@4Ak9J^*n2EZqQ+fr`Cf3zg8+H|e_qLruqGHRTFu z**0uxldT%<#Tl~DE7wNNgS`tVqF4Cw*yUb1WWa6CE|qPkTFn@@?jKy7)}Z5?CzOs0 ze#hLCL&QX8=${Ba@$~b`{EJpmB1gcBjMDnFt?uaIAJ+a^%~(SL^HYklaWb<6zPL&; z9lx_t){8?#U{Cn7t{d1X3f=%4OyMV;*5O3pZ_=^3Q{kcE!YXwqC z0>?wmg954#EQFo^%Jiesd~cg?M>;;?*@h)2IpZBYlLp81W_4}*&Lr8qvFY5u@nR}L zq1fxWmf&{)cz){OKY;fSa;kTkESGF;=jVQcoM&ZlDnxD$k*%m{XQZEa1ha1SNcCU$ z;h#d&y@rDSn98jx}oU#hkLdJr$$G23(6^khaOxLn_w@paCRbENG2^{nxZ5#Pkl zBOIsVh+Pln+^4~SK4)xkU|ofVaH zc|7^HR$e*>bi8Q+Ss45*FS!Q{VY=YbET=R;)c2@XKHu(F7RdY|4ZtmgM% z{Q9Z4$5Zh2nGF^XqPIBCm!H+)wV6toNlaQg9n|(5<<~YIKYt(R-NCTBlHX@$bQ9GR z8Q2f|tov9y3&Y$AEAr_3a7TPCv-S@##D(lTd93TSxW~kgvh(5~GgR0>uMlidI!YEj znFV$1#Sn#+3UTtUY|XO)3+gh@>g+!5`C8U^^$+Wjy=TS8gM|g7-0oBak*?e>=(r}zBgZ8|yd@WlB?Wa@qLzz4;PloxmR>|_cU!CE4lv8cB!$r{yW2WM=sAl&g!93v`9K)Oq}7U83?kz^>#M@@%H zOf4>7jfcc!9^P3$b-=V6mpzjAy;d5#$p*W3V(XR|AY5C%?t1tA8%pPRy$t z`TU))IA|K+D|-qYt}AVQdhyDZ$crVevOTZdFfT9v8z^IY6>OQ#eukcnL=67OuS>=$ zPV1o}eK?#zBIXhoqd%}A$A{D+#cNYIi?yBXon~!Vvh*|%wk8f7CT|L4B~m5BE1Z&T zjVlgAVSXK=tb})xO}%Y{F_L^0s*TqwD}?$|-qtwBemz5aM9f~+e%5n97XtoPD&B~X zqdKoJHKT&lXzt$RtW7E}F<_0oN>^5%NDijmX3G`I+kd=)d3u^YrOR%Rq0-Pe_EqKA zrylphPcjuUZN4T}>5Hz%ri*WMr~J?k_Y~eZ6=r^yI1IfRd_$vEvR*CjmGJ4p`S)TOr28gV>T3 zp!O8lGNY9Bh3JZOT4Nb1vf?(4I_Wj6iB{DlPbX>x3CKZ~nnVr@TLOf%Go7Pnaov_` zw$_e=NmoUs2i20^WDJ9qSoBjfzEdI;wu^`-4aSeZ-zVANst)=ah3<-)lK~$qWcHAGi6N3*^s8f z6pt}-nmj^7R)+c8P1RK??Ivc@nCA~A73=?tRoDpJY;rE<)U-S7QH+}z6DA$+bU##8 zYV~H^<1klN$B)z~S9-l)ob#ppXft6u>JNTA1h9dbW-V{D@fHpEYs}){+=^c@-eh9| z_=B~EkDr=Xba#oqY7AV~C!RbSQe#9`_*pE zlDf8l)0xrlhX-GRvd+{H4joUpHRc8tWUQAN9ubm)q8+to*Yju@GPp|{{SNW5yTBU8K}bUhf#1(4f0Qwn+1}kIOPiVB*>_l9F z{rRbBe8X<-L3t8gq3^l{PS$v5IPlco_`}hQjrC%{6Pa6pk|Iw52_aCkLLx}Z-qF#G z+`$NO%j(ERn&6xVuDJ8yH4;Hwk{mqcSZ7rYngEZUPztYB9Rvy~fF#crE0=3jsaR=p z-Bua7{2~qUmUS$q$;*TOP)sJotrEWMzxnH2YpCH@m2?+`##OkJawa;u2bC*IB4!Q` znK`oJ<>Nzo1oNfTfkCoj*310tCc3UIp(@Rki^8d)H%}YoA=LP-zl9nG@fb-v^)uHM z^nAg+6AmJy&Cj8uHh4JKkS1_iyJ2p(i)^96Wm_$>fNs=`PjM}hT^8IctuOlUOiv}X zO&)#X8v8)ydeOR{MX0~)9cT14$4jr@v-kYY__{<@Z;|m6`#O2z5HHQKvhcGfQ?;o? zfX!*}EAZjUu~6eZ#-HRwye(+cfX5aI0`pSp1NVvo$(e6voso=Tv$=%`JG`X{Z>g<@ z9sC)Y6U|@;+q`pOFwDJ+D$Y3zp1VOtYiP-7N@oV%Em#+`d8My}DY*!VX|Cm+oa!t> zBj%Hzr_Y3ZcGsn_c(jW?jEK=knD#xiK*GaGIDB*)O!V-B=w1eq8hFeHC^B^Wn|(Rw zrTH)Ad&}x(R{z<2_%Fz9=`vX^m1L9Yk+GRR`qKHIx6N}?wJB!zLAb6#q*2Nmlo^*? zXkK=j@=>!~{s$q{)^w9x#}5;MY>SS)w!p*LE1?3!843qWL!wBGPt=3r^xX?(&tt2V7*apk={Z1KT}AML8rI5G8@#zRtn5bbfp zUXw`&4Pl;Qxt4N{oX>o5j34_wN)PwGVb~-dNfqpp%J3{8Opho%aS?0IM;roFTxJhO zl3lL@KlDd_s%h=F_5i>ko#~^C1|`Rh^d{L1<_*@t*ucqI#6BV`SYE%kua+H5Aw5ZW zYc?kshs=^(Kt<>~$$DJ>j6&3lo4`C^wP-Ju*ZfU)lLau4_a@=iVeY>R9FuHIzs;lk zqhj1(zVd|v6DaC0;h?iO3XwSq_3e}x8P>`Ai}$Kkj6Rbpizcpird6vUUCscX)rF9D z%Emyx#q6%tQ#`xE5gQiaiWuU!#k9C2bO{bJ(Oza(#&}cV#5rxqIFy&y3;zu4yg?d$ zY3iPXH3-}ABqw8#TkUPI`Z-CV#<7A8I2%{8TkxB%!guHEf*yT?VTFu+zXeI(0*%ke zWloPv??wk1Z=wW`Pp$+NfUg|e{?ecmz@6ap5yN-crSwyDWXt~vrvHM||9<`{G>avf zEcXv`4#ybT!HPO(c;XQ4OqL5&oIQ3efQQL)U~XJ=DW|%gnO=YP4+b z0caM}b6{B@nyv$US|P?WAx8{-1+r$95`irbASy^rDDq$uTXG*nX0RT@t}kB!bLZjG znSB-2Xofk$u`UgNE?t}tKGP9!9`sG-Vk4JJ_pR5WZZ=KD&A8{|A8&*@O?}m>b`6R+ zV&{F`(|GGuPUY9^(6`Dc#uLHFFIQX?WQNrBo$>y>!fQ!CphiJf>r7KVee1#mwW|3w zXv|(CPPq@0OWASK9}#91W4$k79S0YuWAf#X9}UludlrvQGD!hv*;)?j^&ieQACN;Rn_TuDo5Dj}cGh z*4YB?3-Ih;kH3^F{I}%L!~pnHci0117yjRZ^nY>n?@6oX9?9HK$v6>!;A65&J*r=^dGc0#xA>7uz26}B2s2ISXwM#}a<7J|50SZ=Tb!01x~;c% zv3^zC?}fu%IIWgiPN&~mPtTp(!G}wJe{&YtK6-T*cM>PS7gzdIQbv3cAabl`13$&u zYL=K^45A<1M>VY%9eh6;9J-1tngMAnfuWOD=I`++R+>%UAdE#^;r8rQX*X`_%C@g# ziOk9Mil0hR@6oEcEa_uH=hgNdi{xdC%3bRU%DMh3^i8s+=bcQg%Qih2i%_+>=eZPY zjh0r>xLRfSegC(JV2PcATVs2i*pjLdT>wKyd92lkR2M=GTS~GCdYwxVtDcUwa#q2T64)h9zGVmYtIM@PE1uFd*%<%lWs36R5esO6LKR1wT*8Iy zvskY4uDx9>wN|4bxPA;WJ^e1pEi*>#gq$yg&9sjfES0rlnglf(bvKtR^T)KA30HLv zeehN~!sZsgdJ3V@E4P!hA#QIi;C>O!w-RqJ(Qr$~D&BP~$J>y!u3n~xIkopRzSeSi z?jRUYwi5<+asMM@{Rg?sX6CSs&woJJ$znq}LvvIxO>YD%5wJQr$5U9A9 z?1!R0E7pBFJe}<+e9T{yQTC=lM&438;to|-!IJ-O(H#MZstTo3+JiEXee;qNF(<(* z9g1vP)~UZz@W%P)g^XmV%eKox&pQsBY_b2r&Bf6wuSZcp?-?HSRNVIE!`A})_g#OJ z7)4C)$A@PRW0QO-XB<8bBy$x4Kg1Ce(g2XOJ@A!z77(vAW&jG|gUD+K*^^lU28W@z zQF9B(jap5qGSD}tlXu9yh06oaAG(WENCMI-yEwU(>05REq*i|@o3l*i;C)#h{Rji7 zh!|?>txF(|^#%^#q)qRklekCRAUppcv%wl{;!0)i+T&4-mERJRNDt7z-BC^|D*&0-M`Sze%Uq5;@0wfaoxldOwW$1@=beA`Tw3r5W zORwQ8hhd|rqC*Y3b1`S05NR*o*ojnplCh;Dyqi`QzJhN1(Wg+m5 z1Ebl=qj9 z-rnoGAT?_>R93}c+$j>H>RT^V)St_Ky`Dgd3(oQZMyS&R3Hx#~|Ji%^uU|RR zJhKvfnKW@HwstAs>ZMGW>S=zMv5K8)Hz!^JlYZ?gih0d&|0NULS*R+GLPO0|vZh&8 zni1{}f=obe2>G((2sQ3RZ?eetJwU z0@TI${oB6-^)}h}fWw&dravH8SfT}$T&VEzgOFBT)?Ij?MYWjHF)&Lir|_wXlb4;U zgY24doN)`jEIv>Mr?QX`Tu`M6RNLO0h=5Jo>1f2fYwFkIP}6o+$oo1HS<-OK9|D5W zPG*?DpH_H#L@?>Zz2A!(l8I3qj;*Dpnp~9VAIs^ku2RD%+kc~hto6F;p2PM~+IPSs ze?}SD%bdiplxRA>Obr9^^kqm!N?iG4{>mzwK_=DB-q6H8(;m+g=cml7Db-@|{Hil~ zjlJ};NT16g-2=~Fw&pCeB98|l9G{!}gSw&Mq}G7NFQ~rB{=vjzYUZP*uXOm%1{AGa zqhfMmJIZRlo(m<}|HFK)Wt=r_73Eo$vuOEJ`_Nl0yFn1xUmC~x09)^kQacjSws@rl zc+nRw?JxZm)YngOn~YV-=Wp1+7Axey3E59>DU%rjj3UxRTTL9X|NM(h)5U!a->48+6 z*Fbi1-6U{e%?&nnwNdj8s$>f6cMtS!p(6whUih2!7EYQo{)bag6O3VYGvuRcyv}zP4{&o?ZY5)WG_c-P^|k12+XS1c?(Uv@bbDv2E%*4>tObw`ZMfR zP1(WvPK&KCH0cui#w6;}KIO~3s*CB9p)5dQa zT*;ef4&PNBWbkEG9VUG`vR4s27n7fQ4}c~O$#n!6?>DtM{Q<$KlVTj=ntj|aaPAS~ z@*#M{8q;XAC61@{PKC>MgZUr52&(PPa&o1av5_JH> zKtE2OK{g$q=NR|Sm$#X|9Td6K0WPd-EmN``{sYXkN9APzzaHsbzni`f{hJZ)@X)r; zOUZbP_EYjGkm-*ksMSg>CGo_|Mg2!L_#fon4>2Kkk!0s=tHwwT9&-wjTX9x3#@$%^ z&J3&p-q)@$dYQotBoCHh8lYN{Eb}M`%J5q!E9hh%l_lRVkyc^TluLgI<^VrFmG0J& zc5c@zo%ikPJ-MQ20e>^LM5m*njJw`0O$m~vCr=zri?}H1(sWJ%R)|SXvDH*?3JSI7 zQz>kCSbKFZvQKIwf9i~u(4+A*eu^F%AhZT8oEK-w%mO~9i7J_kh^ihkppm^`YWk5g z;7SyUCJ7;d?8-C-IJ2O>OE-R!;^z|OYDw5i3`PEw$Hj)v>ps#8bb-itF(u);FB)nj zRAl2L+enI7SKf<_?Mv_24&r&T?hZ}TRF)&tkw5Q`gm^SIya6gKQ%`2b>q?ncAD9;@ zDPs<@L$B>#MM)TN0VBREOHn@q_x+_Y?CKR%P!Tt|7h=u)3Ll>L&-*Hl!ura|4aZE|UYA0aeVsNd3o`eYHfQZ>Ku z42wDsoy)AqcD&PNfWcxP{0>~XaYI#2>djrzulgLhG!6Wmy^fgnmvDn>5pfu?M8#)j zU4Iv$Z;TXHy98|W;;%o6<=b_oUZc)O4{O0ph>5J?Ys+bzS+)<5`jyDZp#bUUkMLM} z%%=Xi87&Uf@!xMO@nr4K_`53pEt_ez2=E`<0y)AdwHCB{&8N9fMtV;sg((bsB)7xl zbJH-=UtA`nF;7PiSIYhL+?J8crL`JF5~b~-O-UJN8WwhnE%O~K@@G>d4S!3*G5}PIUIs5VAsP*>X81lrkor4uPiq>7c!k@OdLx5Q zy)D0G$9F{iS9d86pun&td28s2?U-kdV%X!J>?l;O)fnSbN6VccauV5F(zPtJ6{ahbe)r}EZV zm8>#!Q%7YpukAe3dV0us(yj`hcH09(Fr53EaM;=2j9cX`mi7744Y)N5iMAY7XI9xg zefZ=`porG0`=$Y&V?K=7~ph%cjcc+m{>{O|aj_0Rsj^aA&6CC@noc~SYjunFX0_kKThmS@NQ%W3)Xm0vf_#C@jIMzVD1+IzZD{ z>9L6DGgT`3i_WFoe7rt~bvlgO`ElF1Rm_ior0xHOn-1dTZbp7~$&Q7dmDB1JnlhwlZ$cfy(=kMZ&G!6Qf{0>Y^J_WayW8`fn^ls^}S3NO(f577V>Tk@$ z$C_(VSH}yvv~CmIXsgm#twez$Cyh@mXp#kpzh6juiOefUbPp!Q_)DHu;1rXh$}T$# z$kmRb5m$tLTl#!^+bm6^9cPn)T zd<`vZg|SQ)LWTGCv=M=Hq^U%_!UlKdv1Rsp_D@XZ<*9t4uaMqh9a}|X`hD_#{&e9G zN3bk&XN#<{R$<{ZE6YidnF3B04%^8PRwdo50lW6ok@(q^hD$*hPcq}RlsbB0F6BPR zi;k+=PKHmkhh|nM_OhnCeg1Yy|GA2ULco;K_l(uO?6*l?gVCH^okI07!psY$1Ih=YbF5j~=O+`NWt*wWzX4Ys9U zDbryxF*n^>nS-Milo#uJl0^vO=9@)Afh!->yC9 z)>Zv2#A>G<51k(3;nYn(dadWd>6b=!0a%a5mhanc9phih!=D*O>ep}|tKd0QNz()q zakLmn+=-Eyucbmgg-<6r=-W~!fE{OFuR@A@12EMHweiBamZlVj9M1kPA_THVKEP3(=u=Xb=e8 zC&kSR;VbK#$+;q>=+V_&-j1JjYRcq8vSqO#*_sLAwoZ6yUozcKQ)&B`YiT&Ksq>3y z_h}Jc1v7C8-Dx#*)1k0%1LNg%TZvM6w781-)iJ;4Vfo|SuejQto%~eb#imk+{-a(g zIL-LjCTK3Z5-JEGq;O~nfjZQajRJm}#QaG%dqYmS2R_mvEaN2n+})R2k4?skz!*`J zSpKA*;*W|FlrNpWU2ny=B2ulvRcgbR12HakLzg~`Xs4w-=E3vPvQlga>oW%|3F|e| zf(&Xy0x)LUT+HrbKIi~^@f{}apGC537Y2lxNiYoDO{dOB{t>&KbiVK1SHIc>SJ2bu0 z?vc+iR_{hF2tDPr`R4V7_0G!lYf>nQ7`FcKa|4IzIfL`kJI`LSO;@oHCeO84qM(7p z@wV=+0FXK0%b5EL>|3G#H{Jb%92(D@oIY-CBM=)Jkso4UaVltq-$+r3H`J^rPGDVeKqo=MNKwd304H4SR?o?BkDL(3izcDni}epwHQ1rDb)P9uhw)H zd3>i>fG>N{i?h8wdFAR6d6(VTT;YL`c$HcXxP474gsu$bbkLA90rA#;9I@*5tBTh? zU9&l=Foai!EO|ZM9|k7VW_$nK0%nO-xW-khG+?){X+x<9!~`6JTL+w#QNFR2>s4ue zKPQMPKB0+|WHZsgnUmP{0yF)&yD=xfq0&ixI|CKf+C`v30rbvaN%c<#n&+ccRGMzd zq1$JT8QA2Mzu}c%Q|fT9aKk-nbx$M9pQs0(W$#wb;iy`^i+X8A`npze-R+2HsNy5N ziv89K<@ZWIN@?a$pMuSAiqzRL z1Or8IS`O^qGPxuWRA>P6%vh1iTox5S7581brMyyj)weJ5DzG!u-fs+il7sgBUw+ff z>-z_}f+tLtbFsFWU_vfy!@%v|=mS_$Uv~?_K>T9Gt2e1blEtR0rlR$VqnqaA-&d8C|v@vKFT9>U}JQ6)LMEU z0CxPq$JDY!6q)|!>D$b51k+3mPpExUHp`g1ww3?QGrpo~&Rn_+hxSM(;4NuT)+eIK zH3X89_iz|ZqsUBHdDGwlAuI-leoZ^*4F2NJ$D|w_(Sndkl~)70**=DmftCX4M(T#| zyWccCm+Ev-rj_0Zy;{HrOErC0i?Nf;hb%ck>TLFB5Apk5%LzNi#TcBj000aQjO2kv z&~P+ptXG;`bCpNFPp=AN8!+&ZjzM#jyGIeVm9n_N==7WR?f1Vy#Ez&K@c2{}-x~Qr z=FIR+A9&YxK6n^qsQqAw&Y7s+#Y?(ir!EeS}1%)1=ERUnW=Fi7^nLB(dkRrioICf_$Pqh`~Wc zC&Dy7s%ihY;RHxuTcQ5V+g3IUmuZ2F>x{2{T1VN5$J;Mxb&w-MVjaWD!i?Lr*;0R1l~=m>;U~(S2aO(29>}iO!SGDKR(VLvgEE+Bu=~GTU}iJ+nCS z;LtC9yaIKK*CN@i!+3PMR2Zr^rAl6HtX??S}mr6Qo{_*wx{X=tR@bu1 zn9yTBaywucA`>H0k|w#}*l1YYADIUOrLmd>8cNREkSXX{ij0{H0U2zv{6;@LD(Rz0 z`vp`|1ItuNoW8E%r&P(YAjVek@(PHWp+$h_>VElJ*B>(1eBJ5!y@b!C4&9OuYTOV0 z^sP+KRI{-JQ_VTRGXm>Uqk5)ddj*Fsd0T5eyNCVHl9{7?3G*23Mz%w3idKd*>bTK8 zM}@OkRSC3~wze!62MX_}0yQBOIeJ>*{O*7=t{)z`A@{=L#>;8*ZE=^cO61hU8}>!) z*JpPzPipdyiTnNh9_7uaZ`nJ)yZzj+4<7>}dzih;Sonn9o7Wl5^J04Vj;%P1;9l&d z8PY`x7c2EXNv}ustxCTN0sdY!!e)1YWRXM@UJdwN>fo$dPlm5m0tBzzy=7MIevHU z-1*J$7w|l1W$pd$z4lt#eEB^%56;*g3IZ#h&PcW3qcP9)CaLsUc4arP*Q#og>hj73g#h9KcOisA!T(?_99e+#u~W@mp|d7kb(Ns&-(ai@o}!Mo@% zANQ3MNM~OSsgEJ&1mb*t>jRZQ_1N9Ov3%`=1VH_Ja7x+v|65G*m*w;wz^%TAnFXiS zWk{l_sRP){aVp9xD1r+wCyAB5(b`=IG}es|#z!13(~0dpb7H#3ZH4;2*$bDAkdU}* zNf2~HP7CEQo}g2b#^eT#JiB-Qyrr+ytZ8JSpl@EYOn`r_mkvw5?HQ&!w)Q617)Kgu z{13jZ_0Vo37L!Ab5{VVk-)6{3lI5f?$`}{T-C(8TM`D? z%5QDIQlvBq0^#MfMx-c&b;qO;W5)!>9AjTG5OVNP1f5Y1jmvGx4~vqWqP1-?VYk)E zmxc=D;$)s5$ya(3N*NKAHzMw?uO5ov-RzT7E<74%{8A=*jjh^=ZIl_}GQS%B+{iA% zgYR1{e96ihaavrMj?B(521>uCB1da8t=3Xa)A@f&ABe2R*UMp(b(RarZ$};%&%I4# zEPfzcXvjwtQ;Q-PW+fP-C6w6{_*W79mYs_Us*H~nrm8N>MmII^Z*$VzVYLW27rv$V zI-vvWBx*>Qqk14>eZSmIce29yaD~!*XfrnjaBQ8bu^Ye2$r(&u3u~t?GTsmVA})HG z@IiJw!VrG!?sEZ?pnH<=1eoz5NK+?vMRoF^g;V;YyN9Nc@dce?ySyyY137s<5CLa4gNplT84oT*x zKJqGsDSArYR)^<>h=e-3qflqW#mpn)ZTB~UN7t4f@i8$p)<8(l=^iw+xcM;Pg69Kb>$G zf^GYA>kV=Hnmh4zViNRGKeSI+%& z(_Yk-?s|Tvy~_77GR1{t=BMHUdRHFmU?1=-n3|5)pF~ z!+S*PP9=7cGRJ{+JN?9kT`ftg$RES0d3hsMFUw70wjpGsw7hQ$p-Re@51n>8OFhYM zP~z$o8=S8*RzZiaO>0feqlP|TrYJ-^ipR)gFf+@Pdx_Ef6@3zwFg5AOqXZRxfBu4> z*P=BOE002yZivqrBd>}5&F?)iBUGduqzFbM;3z+adKAd4ZCM(E+&)y6w6JvY>FT5Z+3*+J zo41X(*(A#3epT0^&OR!nk4HrH6S}u+>%#@6`2{aYB{fFKzOt|#8u!|#id=l_HZQJ^&4s*$Q^t3DPc}6F z1ViZJmD=oU3B{f#Yqc~^O>5OU_h%OtT2J&muE+iGm%m=F`ZDrOYx%Fir1X%^Hr@cBw@ zwoCkR^M!rwx#}#DgL^_%{nZ*0*GC!RgZ4vp`IYLZ5N(9z&hqE>uLFvckCrgH*WCG0 z6|j_u!Od~eI&{vcT|5~E4s;Zpi!`<7GE~D zl~PKn-HWH{)cXzBR=)@clLVx0A6tJX;62S~rBO1t2|7k2Pb-epUHzHtk`EWpT>7c4 zTHZ_KmNNmYcO;ux(R}~?T2<2c%W_Q?Dg)qLF4xlHRDs_v2)SE<4FCE=Sc0K(hEQZ4D*Ii3QNf)?ar0H*zyxHDM)kWU>Q4YA8`bYR?{~PL~~erCX|os$X@Fb#bzjndtT|#@#9+I41~_< z$XaGtGH@^nRwbr$mTlP215Sx5DU2262csP;0rUGG3Hb8Mt)_v>oTNcH@IM0IuF`l| zR~aG3JKY#oqb@C@%YxKzcL; z`TEUNZh{(f7AiZqycAmBsVt^YVG!WCIHpLfDcSW)c)DdUs`N};Li5D6<32Im-f`gm z^@F*qua9FK^ae_+>&sWB3`*z?WSdd817 zq-|l)*l)`+Ei-7G;)Bh`4CA^N-K@<;9rf(T*bJhp!x$VsoioG^avaG$*FCD|^nc81 z)9~!U$s2bvOG?C;$548=XA|$!*Jv_pptCe$9QwL4rQG~we{lv$cF)vT<>_1qkNPgY z4!bE`)!`iJ*4Wzl=s0ht-;>%3981$FdhrHh4V? ziiGen6zh)9>Y9GWxLopts67MtI=4$D>DK6Fw5vX z7evu;unVrKWh*GDIMY92)IvJtseeB?Nc;(V8t#EdEMd zx8LvhGZ`t_S}*jqG7xaTPV?MI(Piakg&*#kS+upjp^bJBV2{<$$ho_T#zaGHzNvOH zN;g}q2E%Y{aC*9jI^E}*8RY7BAEO_Yh+lJyfm+8r*y!>3)d@Pu*CT>WzRR87nQGoG z;S{d?7MYOo!fSDxMz5ahN^@f)KT4MjW$>`k(N3?@?s5qDUa4GjRZz+2_^N&}A&Js? zyJJfogU^pA+_NYl%OP^jHxhd?5d2U zMhq+8q4jPfgRysS-y_DQrIu>ZQdrzA^GDZ+vzc?w++VlH7P@MLB4iUZX8QG%s2=D1 zd2)WdIfcjNXKLu>ao#g16(tjDw6uSZ3^==U=lg7is0WxuG|swRa;-i7^8K>02wef#%9)1$-Rg5d^%WXGlG6ksSHVjKJ#RwcULJ3oWf(-c ziafPNuft$OXL6Tp29!*rrgBU-WpBAf_o?=1zn*fsZ>K2B%U|KT%)!ioNVNOd68l;l zet)IYf8t%;15xsJzxv_eL8TNDhGkDoN#iuCzk9OZ0~TK`Maf`CAX4^e$M3{DCw3fN z=hw~e;qL17X1`yz|DG^vmXI(La7+@p2mCNDzYY#;)+RcGx-=8SY9`g_a7dN2QU%q* z=lU+AIXXrs*ijUlfAVQvCf)r-Zz`d+8}C>U0q2;N&GtS_sB`*tE%tx&QDS5qOz9F= zV&0xw_?;Q$HrIX_q5ka+Me_2rc%X;K5AhOF*XNNRSyaqlimyo!Rh@u=$X&D~HpB4Y zPTA@5wp&LAk#mOXK8xOcC1P;7=t6YUT~r~gQ)i*O*1~R&1IeYXE*b*qVv+;`duawZ z6`q(f4HuSYvRB)E$;<5KJl(1pJ|lCJqcw^7j<32r)Ev?L2H^<>W20`yIotz#EJ!g^ zI0Tz)S7xBX(W6xtBxKmT*zk+(x~)Px50pHwbA8o_1J~~R1604*LPveK0Bfmc24JOo z$6x`H(3z=G;wCD>*RRAl6NFI3Iu7s=@T2tt{Rnhh)KH;}&bvAWdSQq7z3B%y)7L*5 zgQoJ8ubuZJabZ%~G>pFCTnSp<)8k*JHc2xkk;^pLBh%w&(-~u9BXWHofwexPP78rt z*@Mzs%lN@y`sX(;Y}sd*xeXj7oIb@2jn#|!b`X_Q8Eb%Jccv)(r(W(a(%INfM9`iX0NukfLEWH?V1Rd0OiBnV zlyjI;)8cG2ff||ul3@W%D9)nVAJ=(2iA>HocKSw=X0JD#V9t5{wK`MNC`VD0Q}|_p zMAN2>OlrV&rUyJ1cP-8gl-P>wS;PZ1HD@B?GQOiY`lb?QN&DR`ZpClbk@Gug>A|cwNs}8HLI2SYpjBF&3`f@WWH)(0mJZ z;SVG`($%%tDuPQRL~=jMS@oDLV>o2@BJzV!i#qLP+(zWel3~LJmPOl>_j_XF)1-#* zXYC_Ti!NUnWQ%glHs^j@hLKBd>9cOMNm?dfRtA3Z@ha{{k7oziJsATe$zTPTeq@+- z7BV~5D=Cc$WBtw%ro!Q7GtKQ_5Q{1ZNwyoIurr)0f48XOp(QK8&C=VBMz^d$mUg3S zNF=+J7?!V#Qq)R|c67~#MsYE$S7oar{+z~dNp3dgK7D!SC39;oR`FuD)WeN}IGy`9 zGq2A`_4k+jf*jwQ?I@OT@si)g3C$auZ1Q= z@#123syI0VJ>zv;1--ZEiLc#eOR>gWbxgkKh$*QLyQ%jX<(N;$W51|NPr3d?E~&(` zu(v(bvd+>~v`_9Wef;*lFu%KY-Gf{4->$(@hn)=#BP)4SsP7Fr`RR=$=UJKHd&O9k za8R~PAW*Y_pO^h{vnIO(h-s>60Y|G}?pOZLjn`kueW3@p`tBghfrT|aaT7eYN#b~| z4=x|fyGhlntl%V=MIJ?;Pq$whR!B#(j_nR)LGGbpNwDdPZc~zb^a^9Q8eeUeD+jqQ ziSmdk?XCRKU5h{WG^0gv<&*3_8!E@EV*0Okyq*pNy?|&!_cwfz`lOnmvU>BKfoCr@@qalMc5s zjop~Z%cwH830rZsL;BDnSik&$w|8ms2C#2k+Z7M&tCF_|FpwJLG`p>X!o*jvAeFd# z-m)V3K{grm5Xj;XsXG&oaomB5QyR2WkeqNuv3JP}DRJ?{6eRREiG`(lhH(OV-ehr+ zq&7HUK1P`l^=|eX?*HIsmvY2PfK=wA3tCEe2d{DW%e8$Lq&Z9!ytK$Js=ds}&LXFu z88=_0<_+Jx@LlS#NIA{m2{3DeG5!bm4qH^}*BgsW+H+AX5VvZ?VU&<~DPr24e~(rQTTu5siqs@X&>wB++qLqyeGMD?wo>?UO0 zHvOJ#*K`*6Axs?s9mwJ);yl5jFgW4*cSaHdIT7k2d&gfrBeVN3|}Khnw1b*y+Fmj!1=^L=N)%Eg3*2YsL2)P(Km!DiV-NEJq<}(93+&rS%tt zn!`)E#fDN7^7G9t)l@WUMqr)E>fJ?Xh{ITDcY;Ro>-albM$ws6uOz|g7OT(%n>Q1N z$S#&MRd&CZ93k1eIhUvkT&>wINuwO9LUHpKLX`SWhS)Ts5;A{($;Yz8E?SdInza@_ z=@3g@aGZxV-*)LG4){NXtR_`wA5#^DfFImUoEhwVwXI~SC<|sdtb7?EZ6T(Kt$};O z&t)O#K8Ac!_J~vcQ;g8qUK?tGT1(qjoDFA;xiJ25wk^x7z&Mr$WtB;8{^fJQpv-21 zz#{d-RqN8j4Jww7qp->KcD?Mm7?$;f?NKEIrPBpf(fsi$2h(M$aHMEQ-b+gbi428< zq`-abrY&$pfO!E&s?D1fFf4EV$hy^I?7%echZKjPw^wHks=J49I_PXL4IKl)!|6K< z$gfjybizX$7ibt4Gfcj`6x8o{nkgt&+T1Ks+i7qHBa%2 z)uMAROrCsx^lRge@~ekGCE!r@F2xB4Dc(fm;nco(h9tbo^#R+x`W>ME-0JS|r^vmz zXyBOG^`H98|AO4BPLSnttjy`c3%65cH*sKLWpB_^`uFrfx{@ATK1eY-t=AWOpG9PM zd&E_7_L4nI-L%3uq(sr&f{qriE+#MCRDBlZlN+0uB3hXeZyFk(ern>-G|$gYpiI2< zA}arhuuU!R+-8y?h&}o7U;k87xvtg!MoFAE3hI}z(`zAoXJ?`)_9xlD42qp~4Dm_I z>pOSk1>~b_qSW@M+yGft19Q$xz#rO_1aRa%h!UIhokqWjP22Gqs$gk@kFnF|bV(a? z1i2;D_@0Q#<)E)-OJTAyo z7+jEd%eMRU)D!B!tD7d3C;s{K*oE=@$e*90OhJuGC`RoiENQC31L|@azGNNPJH8t0 zq_uocTs39>?2$=@VIVMwJP-Xcy0+GnVZ%y+3&+E;%z15FEW1cU(Qh&C`q=p+&-`8Uj)Ms~ z>0Fdgj{lgb7&5#r0pTPbowqLQg#M-uAoUxV# z?U@R2*v%>!=vvt#)a$wKDrn;y{S^t)Jrra6b<+@) z47nk2DDy5fN4kJ*F_z8r+tca|0gkvr!S+w?2G&uU6(x?q|2E~X3AzL~QoFP=J`_P9&Fb5+|xNRl&lNUc^Iy>(;B0Ss+-!Fh@9C;?pny`uf0?LoP zy_1xMf!##Z?xyZl<@`)GHHjqf@c`~15=3O)-lNNpNE|7+Go(V}Ra$0%U?~}%JrJn< z6{2P*lra)v+{4Jqm6AVfenQMe^8J<6s)H%}U8dl(lm1wAv4e9vvarbD&!5n9Db;)u z{!e~??0g}DNRTmywPlWP$R)?`hhwWV-4$G=p1kf57v+5%=>ZsvSYKB@#@zr8V;%YR zk14^A5zNAJqLmdnmX^B2fm(~!Se&aU69*p%RkOUlBSb4HN$}&V@|2ei_sljZH8Aqo zqM|4Px35mtDA5F^nC0*O{DQ_L0P{m?i1y8qM{Z zjoCtpdABv*T5HKkkXY43*Onv6+M#w^bPtvuxvSPEZX+e*s*vRcm!V2=4#zzPb|{)$ zFdJh$n>_P*lie8Ap0rce8$UaW!O?x}U4_E`d^HgZlm5gJ3FV zNfS~pETAKkwkT`lH7?@Xw8qn$yg0--ZC?Ep(6Lc^YO&J+%xdsvizlkz=!H2(<1oMf(QkO!j=`Sp8&DCw4zEpCZ`j^0=k@Pp zkW+Iv=Cjok!(}Yxgad$8Bk1-iEuhfTnr5E9x*m9Bs=se@%MiX#7dtuF)5P%HVlGkB zA{x$=Pmf?`C_t*j$EAs>+KcA#hf9g6=F4R`21YqOe-uB;rZG^Rz>eoPzuw7=6})=; zvoodFoj%{Fb)$7pWAHkH%PPgWM?B+(@ z#Ufbg@a`?eTuCsdlE!}Cf=}`51%&csNn8F=CinZcCbK;mXFjt0aQIPXF_>Kws{D*p zE7VmN7$cL@*iV#lP9^td31_;IC?|~mAYwK$KNTqFWH3o3a?s8F26Ff_yMkpq0R214 zd2HDt$Fl6?y8k$P01@|ZFZbFJT(K&cjwXls{YXhPH3auvpblM*b+e&6sA44%EUa`n zjwE=5g%hrGVDzTot5w=ps#lFNM8-gR1E@AX zLxxHN!M1CNe4iLwA`eR}Sx|w%vAg}?+bp-*P{BS|_!V_z&rX=q2C(0U$-Dpzt#%*K zb-o7xET0H)bV){(8CIl<%Gi_3H}<@AZ_P7Ff*Nm3ye*-WFH_bTFV(mR+5M9DVTxH; z|3uZh%CpOZOi|KyH7NE$2YYMH*L2D;$y3_c>g?_;G4GevOBO@#Vk+v+)2B0BFZulK z(La5j73J|})rgK+u_!x>LXJD*63v?u?D0Ydjaak1j_)2GHcmxv%=abMJZruHv(w`H z%doN?0~oopB-5J2h`ab(b}H$j0gO-5SWrs^IoP!XokDXVWr%$K)Y`TPScPYzhAkUv zNJVwUh}xQsrc+}jd8X*6bb7kc7+b5ciBJcF(n8Dxe?KGHu#qV9g0uhQM+ADkW{Pg! zi7AQxBr&Y1?H+aMvzDWRndju{lI}UxSX6L)X9>2FogxeD(+)YYw}k|N?>xkslNUin zNmqIy*lgwY9Q@1vI59+e1QLYwI=9#9> zg`qFrT8M#*Np7->txW%PN~R=VPK6%}0fEZlt+8fT3txr4B{<~jq>n1nFKV9NQA zC=+@SWzXN-OUX(`sJ)GvuzTz>UUqsO@0Qf1ne^6XB~d8XTdB}@*d=f8hI3;Fg%QVt zUpN?znwj)YFKkJR6%U4%Wt~yviUlSt5V6r}N5p(Urq8$wsp}1F?9qLu!l) zcbH}zzq5q$B>0g!`p@XpX-ZUGbi-_J% z89Hej2%fQOm?&7TS>g4iCI8w(&~v9`@mpp*RVkucKV~b|qj8NYz>ZVlloZ=0qLJm> zZqfoqp(4~eC!1_Cu%N{!l&ABfFQ)(l>p#y##^s{!v5G#Mh=U_ckYPEmR*ARl-=$sd zMw(Bn&I>$rEFs*6yA9oP$GTTsmfUpcp@|c$Fs5A2{TF84rFT84fK%4-XRL;pGH~!& zRov1pU_S^VA%jTElT9Ck8l^UdcBPF<(J-+-(9%T71lYvGW>GqS9Idmzt(Pvw7B!=O zh0*}45+Fy%G`~##KoGlcPJ6v{^&VbyU6?Y!JN3j%{YYlosvx5HYGUzyzN;c1f{R0W zs`m1FWpdPxld{h!MZxrx@?Qo4hl`nX0QFNjj7;lD7u zMG6l-eA_1^Fi!`5mb-0um%v9pVku&bv95)dZkx%15ChuD zsB9<{m&HlKBT;1%;y06U8a!-5o2uOmD1+#^YhrN@oEaBK>f)ukd>qi)6%TBAAraxd zXpG>C@rPZC<#$tpSood>itI7=b^ONCu-Zn&VJi>`vw|bYL|ge08z71)quJ#v*5 zJ&u6|-2uM8lwhTo&^Jg20Q~<`TK}@#s2Ip{zSbbiC2gl{f)@N>80$YK3am@%cqM5` zOAvCpB)V5L%*vM(f~-8HGhR~@NoTqu-~;=EgsQ}p!%_kdFHo;ZbUDap zQy&&plx4I<$P_;&J?eHLVK<^B;)-yRx_JmXI$K*T-s93KamE%{h6M!sTJwt<+=%cN zI47jefenQAgddmp19LW&xrX}>*EGOHR;{f7*G>NX!or8ZSRq(o(FQsgJ`E_1k1w`s ztFKTHha`8I7{lrF4H2#tMy93VabKBRNfH>3IATG1-PwBVG`-BO*_6hG>WDZ5y+-!Z z+`TH%$Bw0!UA}uJHfAT?d@Ft~^wz^6r=LKkxoGT%E0M<--XxO|KZ_1Q9@y>+sv1(It!T!pH3#UE15kQ5?$!5 zPIhzq`O2D!a1r95%<`x!nqBtfk2z9OF6tlF#GDdOF6!tb4?_@vC7&^4x8V)s{zvpf`TL-}7-oO}pE{Xp-cVMJ;e(n?`wh_8{P( z+N?iO82H11(Pm+x-_cahqIcI_SF?^#VR$S@qhOYOVS%V^7-l#nIt%AxY8{l;5ItQd zu^Phfe!9?TlAMjqu1slbA2yTIL2i%h)D|b6yLh%zu?18!ebhO7(k1%B?}QF#LjWsCOgsa9ZKhLK_ z^Q73>p;e<*=wd2041d`gz?9v6=;U%&AFj`$&U@{pa87Z-o8bNS_6ZhOi+l-pez{18 z;fBLs=BIY5kADc|l7lWy$1uKg;=$c9P`Fn3Gjlm5rtq?r#7v{Cd}PeginE-M1@pNQFSS>HpY#w?L@IT&eX?gHN-nrl7-6E}{JiLfJ@G zwz^)%yv|Z8pDXhkx|V19!GZZH%u026im7fvOX!8{kcu376|sa9QCXF4Una)Y;|{(W z)a953jDv@LcLZ>SaMB~r{VBq;mdifg`}touGuAacZeQ(a5d9h~GDZBI-@e#{?F5cJ zKlLYO>pPKR-Q1EIUzu8xxW-anz1IDwb`(x5$;N5wj=}Jf;VutsFHyO zho*{lV|JZ1v0EC&OxwwbMT^njxJbPt`ZP%s6kNN2j-f4w+&gScAi%#wSNdd$ZvLIydH&CW0N&b<+DO9gD2hS)U|W2cN&M zZ*OTe>4^>sHyO0mVtVU!=j^Askmdse>Qo>XL8OGObU`d3_;OR_DC6~!EyeKKE`5$l z7LQeBfY6w&Dta8${)uqoDRKKV(C{qF=wgSp(f=$R{tIva8*-uA5T+FuGw|9bdOLOK zDL4vt&14552QIuwRh5?QwcwBh14A;PIW)_r168mY-&2B4o|O>bVM4+Af}j)%EkB6` z<#3gWo?cc);ak`gJBQzUYwxe;gij4lD6lX4zl~rqU`D{A*k|Tju8F)AxThu; z^l46yXU2pbRd;G+{b@AeZNP3uMnGkBn+rNf(t~GJ^{wcU8onqs9st~jhtq-MreT?4 zGBQ6L_bNmEO$^)Imjm%$<-YIO9XGzkr$xySlrW0vvI({}0gDg{eN?51lUQQ5uzlGO zX4Zd?jNNsEq3YijN?rNjToHD)t2Sz!ALeYAreD99i#^9Wl+lrfo>ASxLos&Zyeld@ zbi)~3LW9wbgH~8Oz5-yCt9WO!I^3{$?Vr38Mo~|IqZ!|QLjttK&7eFu7nGYjLCIsg z^v@DlhkNrZZlZ#MDfpd~MisIF{#>WEP1oYC{O^xB)|X{-^mKR$U5kSlV)Kdl+*3hI zCy+$>pFDT&!<2p_B$IX=iS>e+5zxa{IyCGgH=Aj?n1$;t!?}-sBJrJ)WL4p+{tRW| zmn}xLTy2J+o{on{n@wEp{_`D2-d^#FC9r2z*5!;Ts^VgIuY{jL+|5A73g&CSEu!g5 zT8phWT(N|zV(i7GNCGD9hE*PC+|Ie0J z`;o>#M6^Dex!{P3@NJ=s4d>Tu^EPyasqu{yrQy&Zc}gv@RbOHY_sNr5QX|gE@!PgA z(01dDc;Ttdvp|k^%gt&4nEij~?k~#?7J`uTupCtbpATuKPrX4MItRTL)^g>a;WJgM ziS3Fz5F99j7t3BV=fMcT64245!_7*S)(VT);-ZEr&^yNE$X0(8R0fA$B?pr)J(xeA z{i=CKv0MB@8SX=#|vO=$qR_|#?THXvQCVvl#Tj8P{azw-@nWA^H|^CI=ojnsoe3WIobPLDTSg)t z+z~!%x>9Nlne33kI0n*i9#jMm@fO2H;|aIVm2a?=pi+#zCH+DRl*iMU!@W?Hl7W}T zpphK%V}{oq)W#pLnGzjrq(s%kr{T*J}%nSdL9maY5}iW)9JdQ^sVjk)JCnz#AbfYpa9L{GNY z>!gq~}!S;Hx89h>g7k*7|#Jk-MzIENrEtCoV*k1(QOjOY8*VJ|w zHNNI5sE~m5m3s@HVbR9l*hR_A#cBNYSj>~Z z?YQ?@{x;9|?2_nibLW44;{lf=!QF}G*J8~I2NJcOxSKIFX#^;@sAZdwH zz$&617beOB?_-Vxazb>aAqaS^Ad`A8v^>}_hE+(LK69KIUc&7Z8_P+op`%L>t!zV| ze~`D`9c{D4UeC8Bl@8l%E8#9~uC>vY_!0LhVlj?``NS}HXyx-kL1&)NMLKM2W>qqoLMf|#s=Qi{x z!3-RqCFziTnj_QVeyY44biUk3RSBBgoW17^e&pTkme5^l3!VC5ZPNf*-d##|%Hr`Q zp(s73{L(4#ZtpHaj5_+yXMRK+!UAi3q_D`o=Vl<9JI+?cDO@*RvvAwjxY(NE8<6DQo(1<^98dL?0>DY|>57WJ7qZVF(B4ae=*zDQ2TIk>P?!HedZMu9 z8FP3qO9rCrOw37{Sf3D2rN*=7kk`*$YG&kx1rH72V zGjS?Xs=9oCqtoF)(BKb8R=m5m1@r4g5?9Rwo|`*$G#*%uE3&yOM8zaIc0KnXS5OW= zfA-ISqXV{E6DZGqU=Qp zm6>Q~VsrEKRXjaCEmVAh14nooJ$b?L%P=J3Q>z6DeJ()>duYH^deg#;HY?RxF63&ZY)(OyyiKctT22OYBj9HN52IXG#Z;Ds zrO(mG_*F=kw*jTdY=peSUjVzI!>9rK>rzG#L4+ zKQ$vJj0Z|2y19gD06UKEDm-x_#|c&rF}@;z+_BHM+W)Ji`&(CqTtJcoeV4$KLQsbO z*5(q!&CG!Rf*i5h%d%Z|yA%A#bQ~YLJ5vMZx)UvQwPzXGQiEQ0;$cuuycp?q3dshS z|Adtb&Ud3KALaJY`HquVf?C4e6?H-J2Rl|knby^KnJYS&nw$mjMhQV{d?=S-)mr&BjO%!2g@JH3V&UA3(^&A^Nr8!kz~tnQ@kthnoPS`fbcO#qQcYPF-_$U z)~O}i12+R}(o}i);qf_)^KWd&{c>eMS-fqZe;l&o*dyP~*Fd(TH)MsMlZxkYzhA`> zA>`v5bCK-)*o5J1S0-<3yan%Lu>h%*_yE677f5E0VnXRg(v2)O376l@k7TI4b8w~{ zsr#IM50c)h4_ZhLr0}tPjCye2V}Y@X-e-x{s;DA4#zsmpKivuuAsWuae;av5U8aQ> z#2|&@mVZ9-Ib7_r%QL91B70L_)O0#Z&QRL0G5eD|O#`yIzp4o^Z7@jec}qyLY&W zyNbb16?w?^n8UQUxhi>f*K5i!^F}c7v`Wa`!XukyY&-Mfo25#wpq)JdC|`8TzRk@H zbGvT04DiO0f~pwR5{o>%C6b)z3na7scSrXZa&|nRT&}=sQC6ArSAXvB}I+s``(HKl* zU!H7yhlb1VYIFA`rtltHq}qh;FTp%3gf?!Mvlj~*TLRy!=&pw9AMWV-dA`d7)HsU3 zUje-?f^hk3xIaXV_>z0Nzg;+nobY&RPC zN>dH`o;q;b?#oX12OC|@cb>rgk_`)qCLTM$UXJ<^C`svp#zm`L)}LKzKFi@`{A%;bG1-BxQF(yXA-wh{2i-~3-WYf6 zmEN`K!zDWE%W}|OwD1&**~N~-!Do6b>5<1|CQ7*TjyRi7z}+V%i`FymqPw{V(?U!{ z6=)o9891(ml8`~lQ$|HqDez*OpN!0f>g?<@b1m%TY=Wl&g`^=z%GcGc96FiiW5XEu zFuTs2Dix*9^`ms3sYFYGi3)S9J6Rl-hk_d-qz!y-$Y|iCn11u0P#-k+xpGy2=hIb| z-Rxj&zCWocN4`r*tr?c5xUgOw0HCRSD&65g$TH};>0^WTUcb;Bo-sZBXC$gp+FnK zVreB>CfhWRT7dGHphT9c9 zLRV;>_Bbw#DuPwq6T$!N0PXW$ozx?xbdJ=f)cq4he}cxm zmA4HmN@IieC&j^N7x(G9-Fp~-JsQ^Cpgg+&CBKj10NcADsewZ?C>;hKkwUX%Us&ca zqPLu+)Q}oAX0W81MpLHw)_-zgoYKi&aQfsY_6aU!rO-2OTw~9#x+7fd%vidmCJGN3 zUA5JbvQk1;+Xe~zN;aJC=w4y@Su&?JzfjSt@y*d}EfJW@(B+pgx9y~R8ef73BKb?8 zEA^I8OuKX0{BdZm&;z>CenBQIO&lh5(z*$B>JvIk!Ix3kYuLrIufrg@E`u|u58WxE z`?7bp@pa;Sj-{q~Zt+}?mZUW9JX+^s@y(ZYJY$yI`D(D?nr=cyy|br!-#@+^PN+WJ zXu37E6Nku;6?4GoxuU`rgGh%bm+i;wBu^9)ub=IZT}8Zd__k&opGZfJ=vHX}g5A9E zKlP6l|L5H1FXYr-fm?lBE3n%5Z6|KNz2bXuisO;K0-Ikz_Zex)JFWLfppYcpc@16Y z=O*<)5Gi`Pnc)Wt5p!mWS8Oj;{Xl)uaR9Lyfl*gz+hz`~`x1(sy7xhVlbucBf|Hv+h+0K7T=5i3?VSZfPFNae7e8mxFjYo&kSMaPuP|E-Am0LUL%PutpMPMm- z_iK1Ws{X{S_cF0^9zSrhI+yT6w0;I2W;BWrceYCu&MU}VLaArMSg^3&yr?41hU}8U z#@odCcfzHnO+^LNDoPBEvT7sP@RoKy!3BSg6Rs$!Ym3c1{+M64dZnr4GGy+{tWICU zbsmfDN7U&{k=x0RtR?3da%6>Ey;W^6{KC{5k!`8IeVhH4FL4#C0S3#6DG7NlsI6f0xgrd4tY(=?33#jM{JMIo@>olA@ zZ0hN^n(|RTEw`mD7-aU+1^+2-FFMAjTa&Q?Yqv|!O}CaeA=-6yZ4C3dm=d*q4w2=P z0-G6)Z$7ee^;JX|oWu{C?y{wcp(N(Vee&(ON;Nz=LW8%l_)Th}6Zv<`e zz;LnnFLY^18y}a%*oQ&l@Ce^Mi0zX&-Z#=^Mb{Q|?&vdZZ`UIMiAcb{JCKT|_ zQfUfkRJLymEwu5AQ49p$6TP+9Nrq>knPXx%X#O@#jao-`@QF;7hZJ!x#b={@J@ECjlm2zyBN@ZlW5k3yw&RL%5h1ABx^FYR*NE-JgQbY17A)LJbIPPjpo=;Ut2%r8I zdYn%;*F~Y9Y%)f4jG-<<+!-*rz@cNFVQR;5aCB!nuwQa6^&YV5f%H5Fni%v_CtXI6 zDRzRd`Yeij7t=@bg-~&f4x45MqKSuQm&K6Anv@=rF2(LuE}lt2Q_AFPtzC+aC7&p6 z4s*%!(B^6B(5In=YoB1&#^-XaEA5l;A7wQ59*X1`ZudW`2|54t#<*Bf`9a2z#=X61 z0~yK7y5@3(D+9@y8Q)nV?$88Sk?AZ~fSI8AAD5#80if3Ozk%2Jm*t+;f`!%5+Po<2 z(n7lFTTCEB3Wuql+!;URLKV<~zxo~u{LBl!EJ4Ul`_V-Byl`s1?*0_fAc1az!vmT) zV}>9@gTJ%TGt(E!;{9OV53KP{*T_q5za@$_3dg&KFTezq`r}s(t)^^6saKeo#R^=k zJdz(skwjI$l~0(|qpj=TFA zK4ZyQ4x1QiavB!WTVZL5Tpd}F`c$HzP?*Tfke|UHSg^n7Z{g3bEZ8DpDo^K!j8ykM z2TG3XYFjOg@r_kBN|c1tUurYs)D^jISx~R#tSK)?`P~G!-G@5Ls!5uEf_*>c+TO?$ zC>pvUAL7W%qSpUFa$11d&zwZM2rV+d+)_4d$=x9bf znI={nD`&3F=T<2HOZ_8_;q>qp6AQ)v=>4(Vl-juzgVplAq_=IKUPjhjrH^u!*u)e@ zP6#`>-Hmq^iv&nZoWXg(OmFZBX#hBFrw{BM8<{R(Ea=(am$o9j-xu+e{-k>+mG~gg zb1=hth&>J53$Ch}Ovf^bxOl7Yq@Fm@dp`K=r7zm*&7~w&+*IpNh#_I1`4ATuJu1As zv@I;QEr<%_QpW!?(fk}E!{WZmxXLTcIr~%B(foJMr8lx2slzYnMYO|zV6ON{GJ2%% ztQ@;z+jA3un#qpgRP8;z|L4x;FJ1iCzKbadEUcHUMwkn-7E%(2@PX1dIX3lV*!(QJ zRiq{P9*YoRnXz?n^|py&$`$j3R82PRLWNG88he~Aqr3^lBJQNDO%NAEMK-hp%EsT# z*MrC8P7uzONF-}iIdUytv|6Mt@>mO`92m%0)xrobgZplWb;x1Tsha>4ZCo&iIy*c(R4%{CuEwKE95($0-bETpdb z6;&}t#rs{p@IdcSP+|DKKYhBK?6n8ZO*u*$s@#0%j3D;nkBh+r&a7X#;+mg+=hfMT z@pt7m{t=6!iYEW#BoI5_CaEr?%UmWY$<4AqAKUG~d0-SJwTaf*U%t4aX{jqG_wlIl z&r#SvwS9DnRVonCNl%m-o{Sfa@>7ZjBttk$0U#GoqB$62M_&tV=X#~|kvSPySsB~- z9LLE}$^$2oQu{`JlN!@w&zN9rUP26%YMLElFDd zB%tUy=vdrW<@~j3@5>IH1u!QWnpGj|xE13&Eo<<2X#WI1lEPe9MrN#v-0TOliUENt z2lsiz6cS6r6@_ndV)s6%5QkjE>DV=R5RHP_Ru-HWidj^}!8fJp5+9A&>Kp+t+HwmbfWuWfFK@qsYU4pjTNDLzVY#YHxBdv4Y~3&G{~h{k8@tl zr*W6k)K1klY5Fp9>+K+G8ssK;6ah%Xqvq7Hs=M-tapxLl;n>nl#lA^C#D-Ue6F--% zh$IQ)LMiT(rHs*UH=Q&3ic(xxGGS=04jUMj2 zDN>-z6uR5REV}75oq^0%HE?<*VH)oAyxXWaY>k(+9&p9ko}NNn*7US=i{rmorPS3K1<93 z+%lkWfxrqYJXB_(qZkz1A&5AlJufzpHw}$|h1VC2Ca_M<13l3HsF#K`tJRJlkTUII zhGc&5(pdA?tB)54I38?oWQ#5c`qcMCq(+cUX4@cZG$&6^X^(jY5?RC%$K97_)*D+I zc$j4cj-L^yD~UT=1{?std^Vr{g^m@Ol)Qa>Rwz}U`a1gZEwCV*2?m&O(NKXcI$w>- zbIxSK^(+JAo+%Ne*X)5kBrL8!-hjlBYaqAL2=4VGD#jdmu~gzmElKfPf~8wk^^eeb zu(4jov8ts9$^VqkBGmJ`UU*OSCBg9GuWkoK@v%|IzWVsNgWghd`jn#A4vRh%MxHFc zA%ku<=2Skm)X~?p4POuzXKk`{-_Sp)?#BGPZ~ae{iw4rTO99s7|0<^gMo)R@@R0v> ztY;b|m^*JR(2Dl>K0%l=qZccT&5F*a5_1z~nN06dE!U3p&9`0h@8<@6;8TX`C(FCu zx@1-v?Ca$n~*(*@Lp84dnOPv*iZ}go0E8K<` z#RIaL`Aem9<|-iZh4I-5JkfSA#QE}l6ecwfA@}%Jp?LzIa;|__HX84|#smhItW`EY z4_V+AGHCEoT+GW5v%8c%usr-)zN;Z3g5{|(Fs&b(wPI$^SI5-9LTW=f^#$CG4A0;k zW4}4_B=ZSEU#|SXC?j&$e157ft_ksrI##d)M-mkk4Fv%; zx4l;)|2RI8`qkX;8T^2{iO!b?(t(ioH-V&yHuTKmG#)>e&kx3G(@oKX{m%%|o8CpV zp&}=G&V0mv4(XDfvefJu+uM(#p= zT5#{T5%GQ*9S5nOx1)j(UzO2=t{Ugw^X_MBm}7INYK~2wTRNRT7gP6m;ZFX|`D=%_ z#A%G_V-wE*b=>B(mNO2dwGZ}q%a_hJJGoy*&(e74aFpq(^kGh;fku~m`0rc}AVVS) zFe0=JTA=kNst3!{&?F%5ymsJ;(c^fQF5hhTnXF2Wgv|P)Y*aNVcjxQKJ^32Xuiw>!&Fi7k;JxQ0;$v<^B#@pPy7T5lJ3_~ix31`A z9V4QqtD=sY!TE4y{gVdR_l&gRxI#h2E96tWK@1Ss)L~K^tajF*hQgL9%*_SJ0-Oas zkmD%Rvh(mWz9l5+1aPsb9uepl$L+mW5abw<4AS0^W(6&X#>Qmd&m;raiusfC!dbKAs{*(6wl*!^+P~J0^_fnozCWJRDKoa!lvh?P`QaIPF?i&l>0%Me(KcmSPWTl~DKp{7)rv$F@R<20^__Eq)0%bbp zDk@F9lJ0iH^H1#dm$<^X?xd~*qMUhH)=268%^Xs#Y095NMG93U&zt>#rQ~IBGDpRu zZw4hTRz&%HExH*f30epz&uf)ioBe5RF*Lt@Xs+>=E6o_5aVBn;PNU3cWxI0+wJH`s z8V$2#qfj_LWr&|uWa}>v zDKn?LZVG0SG#P$854C#H7>9XZ7Ifp01Y%;K=cr@)(EU*S^H{3%e{~H*l+!PF`kX>; ztAo})SQ2PfUk+UPqocOr67z6pV~pI=&vGqVlzSwC2LO{Tm37}RDFsb@q3hQDao}Un zyh;T~gwK5!zbO1QMC+6Qh0#c{@?>et$3-w|zR)LLg+0(a=trE`uNy9A46 zA7(6~xd6RUJHy!wDW8s+{9Rqq;{TA(ACC#6L*fecm1gEP+;812X6yGp{q8BPB)pzI&mwwtiHFo3y6fxQ_*w?5iWjWZ}qdYIg&xo zTX0aWI{AT$zN+%yorL<$UutG-dbpgU&Z82W|L#@)59&@KcLhg_a@PnGI?;hUdCX~n zAvDNcGRMf%JT%YJNWqiRr%?{5$RyD38=W89dna=lJNbwq83@E-f!Mu#32F35YUou? zdat5Vv+xx`w@rkW*oQxx<&Q5H{*_CVP}1ALwn4s#}oPyp)f>;K%mM)E<}j z+F5tuOonkJZD(Qaw;4Oq5nUod=VvQO)e8;Iv%FUNPd)a{<~RTFkgAjSPsBc$vY*(w zenU*Fm7Lb|{3u z59Hk&z7G4=X48jMvrm?j)$;F4*m*x3IduJ53}!R3ZvHN9RPjg7F*PdL2@2d;IC%rP z%hK>yud_a;2Hk3VW$V`i>WQLf4tD97ejvr)Zg2u5cpX@<{fBqAlY1b+(gWciwI2~- zkU8SZf#RDby5{fmYz$V_`y;ttXSG$fu%-H-kII2GB*3DS0zZ%fx{tE6b6-NS0auq4<_V z+d&GoG`d{nDdb?vAfvqU=_QS-bn=pcbLC=`$QU1vq0=k8?B8Z4m|z zOa#W?!p(B371y2iB*@>A#91!!P^-(@%|?FCY3NaB^xTv*HmU9!C>{}-O4z%GM4Q{t zG0+Fkq)w`^4A-fz+i>}C_aF3!pW(phg|rkaYR{$o5lH#8fz*XmpCik zuHsm1(vi`1{>WK;T)dVv0lQ>Y_f7PEQRCUaZeN>gD>P$Nf_EZG_B(zPt(2=_zt2Wp z{A3FNNM}=Eu^K|uCSatx2~SA5f-ucYeel=O^a}flrmLtfidk7gY_g1-SIekBVG#@h zq}O|pnK*f#u82nWk2b|XejPJVg_N>h*#7WEsY2#uIf z>{O#uODLoiw!<zRQFDw6@CS%oWkZ|i3+5&+3 zL3Ahvwglyy{V0CrwO##od78|d!qq!8pQtQqD5#doFDYEeu6NPQt6e@(Ogz2@j&kq9 zR4^778<@DIb)>wWyH;z_@$l{SE4Sb;Yc;WXeh0VeZ<^H`G4i&J9et4`tw;#T{}N!{ zl1SOJyy;@zxtpA{!j~S`O4TM0s$QLm+im1ci3yuu_&`1SBC`Z=da#gIl?*7PxiPMN znYg5v*=OcphFfi%$%IMBSjPd^6HS}BVYnD?^OTCl0pKt@v$cfLg(TxAZDSrnGW2dw zA>M8&=F>IbCc+!EUOJ*K?m?y+x8AR6@cV7+*s7M3^5vA`Q) zZheE17nbCFN}QaRV%T@V0)$)jj7S$_n>YDcJhkzqa0aV2w)~HE1RDYqK8&Z)`+Jb% zCk4Ht{p-^f!_hxkuon8|ym;-nU+nlLNG{)ceQTw7>b>KITw&bGpRX6!3&d3PwWuZR z2!WE(hn}i* z_UaPIJVxHz4Mp`VV{iC5GXTbUF{};F;nAL7;;k<8EQmOCFW&NLO?0{a;b+_1fQqib z!6)CA4H`?&UYtRxE@R@Aap-l^*z<)LhlgH_GAXc)*&$)cI78_Z!uGY)oW-h$|D9I< z1G$Mz03+_A#kg!48J|5mdNqjUDx8&;SbbXhbR^fE>q_t>05GKofDOk7``Nd_BzZ+k z>p?$D$$IWyFgoWa`@#r?HVOxKegwZ_Ds&iZP-U5-2eiR18)447&UTuc-jrGO>~_>Z zwlAlfoiBLg?Bz_Vx>Ts=ESJ1?^m!SUFXQ+RRc}={jgfosy3PLmQKY-Xn|Yjt6t&fy zJ7rG4@cl0-!p_I07xNSGW&^i$PJb2TCpvuI7J6f$K(EQN{{h>jCv=9YV&}pM=q}e- zr;Hd_lt4LD=^_(MbzF^1>m}t>L9CfY!Yh-9LAa%;pzIEcO}5JLsLzb-%ss(UaWOJ8Ilx-?)7-Rzd>$UEaV-0s>@h_R>y*2Ss_Ml!4LZ<`7fjdVur>ytB&EW&J zxCrJx53JKhS+&drLd}poWV7f>P>! z!b~6PaGly>5y^)Bbw#l((3&Tqt(W3Bra(pL$6Ukzn@uOW*4DcIGnG4qT)QREnMPhp zvN@{~9gIy%D73^m~%euAS20j)@R&ZB$~hlA|sOmCbD%G_Dp5PPYgV9#m7rD zgDh`bEpcENeb>zWbM6oaO)bp}2M6AtsaOE%xBK&phJd5Ty?^jlX~01?qhAC>x@+>gMeU7K(} z@sG#N6dk_!TgJuo?8VWYeW;~LcP54O7Gm_u(oMJD${h!_#QXQT!V&gml|n&TvBt7w z!N=vJ8BKy*m;E+1EYX&VOI&<$XARhuFMoULF*p~Wcow~CJDD&4YhbM>B=C&eiO?1= z1DXXdr!Jp0G@UbiZvcEpHfLxhf9QqZ2$?m^KCz=jJkr`bcCU&?J7 zb-5@-v(S{FahF2+2=(hiv>6F4#+k{;`!Nie+_=={EmrR~Hl7G_mWJiQ_*10BTp84` z=Eh}WeaXhDt=~+|asl;T^coW1Dt3&d(Y(;>gMpp^cHOG!*fSb>ZLHe29u(293uJgu zRe18zf=V{SgP5J=XK~c~PWuqj-ZPF5Tk%xtfy8ZG{qsPCE%hgMnWjXtj(hYw?s#^a zi@Gg-`rcSgR)G@DaR{3emeM#r9MAkCRlIdX#nY2GJb+%T?X7*|l-WhBCVtPq)Hf8Z zSbfA@8U6*~}knFvMB6k5GFzvI9ucBh*;?IO_(A;2#v;YC;$ zH&H=tM>30!u4ul8YcG2{Wtu+;PG zwteYs+GnIoHO(~<2P7oGQ1P8>R%L5C#(nqrS0Lm@jfQ1S{@}I!Fx-9Rs$g_rWm~lSgYRMLz?O0vuYB6$YqljH@4T*S z&G__goGU}_Q#Ez^Y4B!Ch*UYjwOpSa=Ydd`#i(=#uWqVg+dIz|PLm!xwlUY4*tL!lx7 zO359ZS!y+-37*N^3u7i$dnZ(NElJ8h%l{KTiefcMObWXAE0r}m@C+*!`r&~AxyEe5 zXok(C2kZ1SfBX3z__?DvQB8!Vr)zxmKV?lHsWZXd593yN174i`ej4NXhw3=IZCUVB z$?z0)fH8oH*_gMPx|dFldWz(i_@UTAtEbB0UNUH!E}%SNeB8;GdtUH9E6 z)->$_+A+6iAs5Viz3!`!%6(51vFR=3ILSTXeT&Ug!hYM9isi#6EL*zuLPa0gEC(^N0j+%hNp3(+=NdCIWWvk==;Hei5=Zbk+e@d_k+Z7p$Dn1%Ft*YKSFOWVs+Ea1Gj*8YM z)`m^nc)W_M*p9yC{#kzv#wJq$sU9Z+l7Q0P#6(~=;**1+AX1NLn{SBN(8F>nZIxNs z;`)~D0$^J~4ge6HdL~_=J)q7!*#c_Cl=rucpQ6<=k_P%C;TnFKoz?EaX9)AaTNPr~ znd^7E&JQ&Nyph5GmN_8=MmTc0yT7Dr#6^f)H zJYO7ENl{N6<4XQ_m^+1BbtM4m9co64azQi`9Or+Hf}0Fzkh^DSBDpr%-P8r311=Z& zax_)KW2$TTL3~5j-M)GNw<_Oiq$rR<-y$Hok&~ZQ*Ok-ATx7A)%=2DfN~Th>MWNZw zo7u+~wSL+RQo=G@9e5uho=Uri#I(BAfHMp|vcL8l|5nPlXKwW^_6vTEMWsde$-`Fi zfOX$m)t+wIwKyA-AwR3@p=m8AnmnEay^lwp40{Q_H~z&NP%0*z8N@{2_nlGj+_@o9 zATE&=bbbgX{vHc{pz1mLI-Ok>r;O{|C~(Ppi~scEEN3XJ%r-{uM%8a2CSOe+wtAS# zF6X7P&EYJo(c7(qxUeRFoSlo52p8`>F(VIC6vDt%PSa&`+-%ZEyARdm6p7bP>L2aY z*B&#SBSS9AZoLpPmo?hb_}G4+6zrIybRMaMb#wEPi;)2i~W<%OM!{4v-ZU ze~WTzLgATk? zt-|)~AU4yCFV(|8^z+lt3?t^EXtV*cQ|3xRK@6XO=gy{;BvtEd9Cb4Yg^GhU{m*&u zDdawg&{nL`v=wVi;9gEZfJK1R9K2OuhUQJ(hZ6CAOA}5503=d=ZRBvsXeRCs5ifK7b8}#X`_6O`bFM7TCjOX%jdRBUqTiGZ4WsydhS?ahEpaz5zMZJ;(8)5_@jOz-m}**F&CC@M0wyRH~;LL z)t}_W(T&}`;HL*Ym~a45?RF*FuovQ5cl%`VEU+$v=S-*WN3J7>^F_+{KaMfd8|qW3 zSzYlTKh_x_`7BA|we&oUzReA>->yb8(DeX!LFQ^8V71M8V3IgTEg=wkb)B?3WtS>1 z31_~R$NbVe=bI&`;=5011*A)uB5S%(q9;CxBM9v-ADCY<>tL6RGvaZs(W=`G%oY^H zDSaz$_XVKY7@K$v*zN~ZdGtkJ$J{J`sjTytO*EcqQ%d+4m-+{t=}6r_#Js2Ow7!E|lf6o94CdeX>Zg z>Nyu#8QWp<9Sh#@b^aKWSJM~ge;*=<-k2NK)c4fy|2xS2Tg!p`Xti91^;jZpESE6y z4U(}hG${z^ zC^dw@?xO3Px4G|Kg2ry*ZNbl&C+ z9kN5Q#^zmhymvm75sT}4FFEP5C^76JUd{oYz-$Us*5GVa2#xw7=h44NDP z>#xbrk5=k6iJ1i(v3bw2@}scc#(XS9Y}&Gr7q*bx>o_Rx>{8V*YaE|M_OMBE7KLe& zh^hjGivoVz>sN&`E`QWe=c@Gd&k$EtrmJ2Mleah^wA~jqzGdQmOH+f#$3orEE@^%B z^;jx_{e(J12lX${k1N!m?!4Hjng4&)a)KWKF40KAx#pu9G)bXNo&hG5HY1^V zXpVMQZUOV5Vg4VcGWQyL71@&P_HxEoFxnP|7bSo_Yf!PTFlF{=v&{Qp^kO*V`c3B& z8SlWDj)l1x%0t6>aO;iv2wd%!Z6p-8AMjgJ8r}?Pm@H0m@w(Sr@JSTPLwZ)&~o0kCus>H5Z|X0+0@&n>292y<_#a~idmLt4A02LX;Nqf-`uB&}Ay zIRp|PX3w12QV&L+#qAekr=N28V{8z9Ti%kOkc+*_jjd{DWO~lmQwM8^BpY8T(Hl~# z!rhH$Rwp9IrnZ;c-yT zx`Hl=DB5CTfT>`D0|zZEYD^S~<`Op~SGkS(&7!++@mykSEtG^)+>KddoeR53B_X-B zbSH1zQd?S>CL0x_#D_XPU#2QEu96k%R3ArkORRYyRLl zvRRU)s@#G$R!IUb_kD_qPn2DLQpb)7plj3%MN{lxlxE#G%c31z@UQo}0vl%{N|Jtg zD4f~IkJl~snQO`a6DTKDNFDTOBb&hAtGWh6*ODHaXD6|Eb_nP;tga+bb2N4mq{Clt z=u;)A2mT-ai^6o8SSx8!ZjI)LE)WyAlg<1^ImBn4;~`CL^GP9HMXGkNn|4hJ0Ez#I z;#TDBsZt_y-HZu1KqZ3sUBdbLu6{-Nk8%7Ih>A*V>da&|uu!@a-)DhlZGy(q7n}oZagq=zdq9DHr%#KKb!^&9ZCpth0+qc z{*juNT6t0zw`xc)urYmX>`q`%9u06f185FxYMSjZr>aa7 zsHIgszd!#3cX0oLV1(is%V(ya2I|_K|0ukFcf>F&lj;6A2>n9HTvANDXv`)g@Wtgi z`4O-kD$IAi=*G8)9$!!bKN|-)6t60ZhVJ;cuUCs3J1uIO^H7hrRmZS@sAJxT)}NR= zci~3VgEDbSahD==Y-D0DbAt`Ku{biAltdaF;qk7qyyT5|3_!!US5%?&3NdVi$grE!+H7nm;)ozTg7ZuMOW4e ze<-TCMlC|#@m6vukld>D3Tl&6qB_fF0BK#02V5*;Evoe#fsf6#n* zQujEou2v$qe}vVrn87QhA;~ikD|{5B>yZHA1F4#HTX;3%T~r>Q->xXjW6@7iukRgI zgj!10ex$0&-#!?4e`rjb454oUKs}028q1Kqd5U~*rFY{K@|=}283wGtd@QzGqZW=! z?1xAQrbeYd;b4rhXXMFfZ#6_D2{NH$JAUbMOR?*TI9H3+V>^GdhF=DP&EtuZg?-l{kSjip+*{gVW~zU0e89wRg}k) zEafG?y~#%~Sh1{gEOXek+3==B^A&7b1>Bz~M}`kf@|=+k&YbjBaH{2cY^7v3=~uS{ zny2^1a!T2~?5kka4D8DbdxOq>BlndMl8W#cgHV5Ql@>_dq`p2cx_0~P#g`E%>WT5B zp@H97N@@FGGZU1zEy`UbQ51&reA|Y=*7}E+3!mls^3mntQc< zG%l5}9MnC||CSTF2L2z&(SN3$DU3U< z<$`AN%?~V2ZCl@-kzu1HR*iL(j{dqZ)@E#NDUp51@ zLfna)LfUyMRXB%4dvgFQfQTg$as^6PdbOAz15&-q;95Wl@WlgC`*DbHy0w7NKOH=r-3Gr+6wK3*b$75(!Pvy-iVmpSirnSg9?m;ZFp(uNbayb zX)wmOa4_ob7fl@HNw0a2dF&<>vAIDp<*9CJ!mT|S^6j76+ql)#PRE1@6^tDbrOyQh zFD?f<&s!$I z@sIn6Y3B9Yk#Qp|hsD2tA*uT#!8rJTr_}%KA5If1`35bq=AT;dCoW~A9T=V-@Ssb4|9Yc_E8#W0M}HPNVrG#E3ySO@cy zG1J}tZV@ZUr?^G-_QKwBVLB^vO@*qS0d1zjTPo-*pHynm|xaX?a!6|n47%aEN(+%`^#TS1}xhot2`?{Q2@ zj((x?>jqWa(l5l+y*R)HjalahhaTMmzAc6u^?6UiLDHvwC}- z&(54&+O{h7k~7=QnO~weN?4@iMJd$l>di8Zo#nEhHgi-2xrBNUR!2LfMDU9@v}}ld zb1s`v^&_2GGgK7-{iuon<4iOK1qViUOm;(N(Y&l>{$F(o7C?{C3(2EQ% z6J|5}-)Ctl_j}5F+-raF`3Yb1LAeb7?UU^2ZADclF)lGTws#PSK$yqR-G?h}xLV}` z$FSV^0Aa6o`US}|7ewf!087?BgBR?SXAR*S(j(my^HI(y*q2_j+Mtn-m%b&KJo(oRwC$?&QcZG|#%oWu9%uGJHOb198#SC)QpB&Zi;TP&N^p8+d->v& zki>KxRnOrgwG{4G+!JPjtUzrUVj<{vY0v>2ve86R5hRGih?@z57}5m7A)|M0 zFL*387Z*W8y(x5g1@DX)AhGq9N@P+3Pon-^F>xI~Jp+9qe8kU2$G=RW)4Suw;w>+N zt*&2)Wb^dEGw|fw&Zs8zT==lf<^R1x|Lel?4*XN(%v?{7i?SM5v`^|J!;0 zG%@}AoJKiDGHv_d|1aeB@@NaMNLnq&t&h3u{e8}umRM;WDio>A81 z5kFwd!~Qm{kXWJGPGhH*3as1))TMKwg`wQy(|5XG(N%=zy>zzc;M)J8O$gsV|HNHf zWT$GAaQNW`!HQ-!TjBUwpJJtfA)UUsbkw}OQU-xhA5y+VF~KVK#u)VVny7=J24qri zm1^!JgJQTetW<7aw3C7x(GP>os>0)J_5@i(#$Gf;B(rV$+WkJ-eq-n&uz9fI zMm=Vrh#b4Svf=Sd9u4O_t2o7zCy1gdN9wMNy;YG4;H1=5lo&gp)VZ`4%;H>^@6QfA z@XUAWW;L_Sh<;jXBsm1H2fKXL;N?5?!uPe+#NKtP-xN@oGUhc0tH1FR*U9%>oiC0k z;lmeRP>^(;mBccs(@s|pEeWr-uBhBV@|R3SfBAe;jhxM+9@*%+eSYM)UrPEg>ckA} z%hX%zC1e$Y$K3kTelCnaBv{qu4XcphEuo+sV{t&Y(GB5H0OC?Lj{Bq zo2@+Q1Cx;Nk2qfGD28-zr{fydtxk`z0{BV(PTo;Nmrar+S zjaH7-05v!u!+m)`%tVv-KQEts%W^PTk4PeS9WMe%Pwu@myWISau+V&*vKkyyW;0fY z_dGlPVa2n)ao--cBzlp;%?zH5s)0PC_nZ=CN_qe4g(%Qa_oaWh#wO~qrk+7$SsATM{(=q8d9M+M%Bx^8!eIu-4pCh zB0AIVnl&tKZSJHSH2dm;PM$H~4S(nbwO`2A=`ArVynXYYL2S%JaaXIl0P@S&uI~>a zCL;xv7mmLr{m7T6K6KIl#R;@VJ{pai$TByrcG#mC&G6Vh42UZek2{+9y_5gB2avo3 z*5ODge;F3uWxO1g=_m2cYzEwWmrTz=o7-^pCNt8z)^M>T^!DKlNgm1(ce}!PcB5zQ z84L;eM8m{O>}Olm6f+RF>HT*M?U=jrZrTMsta*;;Z9#-sAdr1_%p z?-bp+dWq1p`WJWdyI8XWGPAyv=i76oT~^l6%}6u1+!nns?`?Z*vb+vYC?;C#ALG(u zuSJ$++^C6sD0Qd$=82d5jZP)C;pPwiBLBamU<)zYC^-7u1ZRxS<=io5zf)2$w+@Ep zF4yN$=RHXq1p^pJtH1q~7Ci@&MFTyE39?8tZCS-tPMjeS0EDgTC}gUtJy1k<2vl9V z&C@+q$x;2mY#xHsv5NDc#1~l=n3qNY7IU$Sxr3jsI)}m+ZlsOc*r+F(a(x)h?oU^e z{dr^u7#!uS8eDM`Y&5~<;ZtAUKB;Y7oxjc!XXDE)2xd9aTYM|{W}I)qILj=Z7Ux^%EEQ}sv9)6YVQZcl&CFS5Gd&G+k{S=vKnJH_yLmIjX6b=ZHWdx9?eTkjthHY87_g)$RhqEZ3Nk410>%%_I48;IW`6(5 zYM`y92%JwH3#9ZBun{#p^6h?>eI@O;(8;-(w@ok$WToT_cOv{_(JWhSQ$N2I}4|4y0>MCHJ7|Ia#jkH1Q}2f&PHVo2!Y6lJ8%=2c2Zwi!9yg!=-H6w6@7!o()x;L>`n6|S#yrnOa z9l0ZUY-MWr#9Dv%%P!Mk^C|lNGbFj#N^2jy&y5#EWAHiV&MK#x!Xh1-rm&^&oP_wl zi51xQ8f3!CUwC$(2kcEwj>{b-(f5!N(H#6pj${N;H7Q;#l8)5{Y^B6tD5??2?kH9% zI}*9l_LcPT!_deS_e-_OpaJ+D|7;bf45Pd6X0F~^P>auCT)f&neY_wk`cm|D+;12g zlW^kFPYy;Fx*T>UzB{UM8|F+L1x?gFAbpa)?4Nt94BF{z{9yn9Q9|#Iwh`i&5u1nhc~ugc`IxN z0mv@yqNFX7v5f1+6}RzTP$Ia&S|XM)p5@@}<5-J3r@9K078f&K;2PQU6@+C-WsF>H z#4p7kIdKxOy0Uxd8~00gmUGvOn!eEEH4|V^yo5+FK>I&se(6g}8nPOOW$7MIp};>F ztNjxbRg2Fd!#_hBV>_4Z$9|?kRU>^}dJ=>sGFua^r6ajRTkgtKZx8s+7Vsj+jtzOZa8=iddB2N*dcrb?qwee?vFaFG|C?Grcaztu zZtg9vxIwhvYkr{Bk4xI{J3XnH-N+9hCKM~j#4>!qlXlZkG{Teqst{aJ0-vz!%L|1l zp?*yf%|Igvx>lx6P0T|In&)doxPZ2vjD0${2I7#uI)61x)q-?kBSBwMaW-;qB31F= zvGMm8SsHn_`s!4ae^x+9u!y`ermA^eyrQG#KW5i&f4=pZ&mpjiC9YgnZ5^Dqi@18` zz;AO==6`G-+AYgEY3+miIogg@CoG@Y*)dY;0>>{|njiYvK2=fg$!-}mfO*gih|*l3 zyDF#gAkkPy%e8LLyQe3AD`oA_642+!5W)!!%KoWnlmSaFuFznoiM~a}UBQ}9&OL|1 zMPKKea#g*%pb}t{t*7*61$;@N)8u~r{ZHoRCC8(k9Gp+}so1#_4!JC~eBPn|U{*{OGY_HYGsBgRjGR>(0a@-TB_d$_dHv5aoof|kPmGcY2c zEJDx#3m=p~yrY;cx%;10GrO(G2a*Q{aEaY*R+i+KejI^p##mi?E>3TM?L8gC^;{0t z=NWTuZe1OPOzqKf{g*zkGc?O*lB5%swGNZ$4MPeIO=kL-z^`N{eQDQ8`Wc2dZ)hj( zSRGjsUq&5Vojhc}(!O!tQ56bKNFi9(3-+Izg|0+ZUl4j!v$4Dmr-J(%!LR(00X$! zh<;&?;Ficc@Q5p`9KnAckcdOthz?mTeQqa0nF^mSR3zwJFXB$h*UQ_JRB8AjYrePy z_UMbpSoohPayzMpaOWqTttibwa&@AUl)>y8^YoAcX$uP|34P|r=^^HB(0Ql zvbHR+)_88BX8AqnC{%LmeqX=4Y=9YM(U+#OJS-y_#~xi{sj!y# za>(Po@jvJPeAgk?4R#)z1yq&QzJI-J{G2(7z6}xmRm6sV_(giQI5yaI_>3$swNNYV zuT0F)k+^5lUojLtO;ad%>kjIYr8-NsCl3K39I++bP;!iQRILU7C3y~6fx(XW5mhC= zo)!1k$6YNh>ji`H=zBhS@&=HBYj1mxZtH{4QsY_c(M0aC)WCrUX$cAvIrJ;NJErg{ z20+V{6@n*x| zY{5dA)NuIHjIE$5Be`rJ^6jigkFOaU+Ub)oI|me`lGjd5ntA(`jg^bFIOKf=7r-q& zZOh_UmE282V;f$=4Q(q`UWgtL()W#t#|oul9}12vF*BrWA|kvL6d#VieBIr-Js-~z zF#ql2Z>Bt&FEtwXChA%fGmV<=sh3i47`>DsEHMyX<*_0Q^72^X*ooieM5<7Bv|lQ- zDWVFPO%y%CZ05dtdlUgEs{mK4rO2zea&T|fO}Yd_<}0Pl*ilMIZs)6xkt)a%n1EZ( z)VKPe$v4tt!tZ4ONtpl9)Z!{^Ue*;n`!R}J>@)K7s$|Mr*=vt8W@j4hZq68NV8G{K z2z3!=>JEIkSV%pqra)5j<5<4ZbIp&`lMy!RN#XwscBhb&!_xBVC2K1IYh7Yi+841P zrc`*A#_2VsF+HiZv^&D(0048mtr*0H*!_Izdm_+y zeqKA+`LMv@Rh^f8o6_{Wg}|^02@H>tJDN*kQ*h*BX7G;NG`TY0ufN(mgnXIM^VSat zq7e|Gz~o-wHS`mCCG4>-)whk{IY$s>=uGSWMuwG1xR3l!W( z*w)ns=!!y!M(Ec-SR3aTA{3jg;PJ5DlTCV})eRPZHqS!&t3*)!%s`dUIwJ`U=tT=O zjt<*(?d}fay;+K36t_DQI6{V3)+H)+-C$8r2h?kP#1pCMsUl8u$h8G< zs)`fH6qejbvoCa(N)f@9l->*d9v+tOpgq9e>8rBR%>~a#@+3^y+#pzMjriB2$uF4e zy%?XmP$w`d!g%QgHdpEh0>2~nsM_-XVe37^nozfG;e=3<5FiOH^w0xRLKP4tgcf?0 zCPJtJf>af-5PImngY+gK%>piz7CI*x+#~DY-@y|qkw?7a9g*Fv|mwJ68k26=?-&B$>r%n(){!;&zZ4!Bq z>LQJ@U78XG>I|DMuL?GuBfSa`l*7Rmc@VYqDBgO}OP(AB@Y+W>90(S-p|(aaK=HAD zkS(hc2_@0Jd!Qg)(ho#{`}0!fveYkL(X#<47)CJ|7`;WPd4KKZXl^-#WxaNfdOhb% z_^tIK3|pTh!n)E+_I{VBGe~g&Hiihzy|~|aUL-DZJ-4IKsfT(tL>d76_>ULFAIK$L zrOD7O%uU7vE|#Z_ZtGlUi9j@5lryDqBm^2q(j<+cjq3nrAR0&Pa8Ltj@skr{5ycwQ zUH~b55wr&maP1WvSZjUL^xA1*IRuwNZ@hfRShp*_Zq=KW5s>n5$mv%4)n*?o7QhEr zu__H5RX+~#sM3(`x%=(t-8}^^DaWrWygv*400T`&&}51yJH7V1$gObwsjyonA5R*@ zv{pj24&GcGraVoB0RWd>jST5|W^ncKyHQ6bx)mmLy<{NAFtP{_Q?oi%&6q&#xlhC% z0^$o#1ni1*b}jBzg8xOjdLCqr0mzFPh+U9Z1gGbg`i+&X9(b#KS-(kFOB$aBIxKBVS zSJDi=&{=5@%8D`z+x%|4gnWb&e;B%5+LpCw#(061GpN1K#}0it|2Gt2ku>IGhk^vS z=)5Dv_5$?kx1D}gtr25ok+#|yv*xA?ly>{IR-^Hbmd&#|$1B12KPzu*ZeBc+#>MOg z(oxo4(Ml6_$0Ev)B338(aZjy3JhLM5BymK_uE2ibk^soUq~yg=N>mZQ&y%ve&AI1D z)9Gw@P9KzYMHX6uDd#0^cj4mAK<3P+f%b*t56C(tVsD~Ozt zqPnfFP;|CUTY_IQ#51>+aZPCIjX*(lS(_7wFCeJs1G6#9B~BSi-Kw&(ip24+(Z!S@ zh3X#b!5EW=h`d^nL6WAbtuS@VQCV6?+HZy~K97pN>>}nSK^;wVbMtj$i=?Ik0NUm1 zow}@EZbP?F*IgwA?7hrugIO=YFVm}tPQ_Cug^jeMQ$fm-Hgfi{t4~6pyTRl0KDh>F zkAdcHs}=sX-K4>2pFC@oz#hGSA{}7Q*=1#Cm>)^E*S*ce^X*ipaEkTx4*n zBk39TBu6RMN@3w~&?D2^XCIoEukUgicN9l9)8YkwXnc+ip-vzYLC>KKJ=Ej`$VPD7 zO2Ce?!ATXB`a%Bxe>VKtul^fy-<4^Nm1u6lM|(YF8a5~eNZ&<_(yH9rml>sUvBd5N z1pokh6f;G;KQ`WqOVmn%ojrzMfCr&aKmw+4#H7S(OAr8WNTix~p`9kOA~@IX)=s~d zQPFBoZ2~h}KnIZD1(f0aOaP^Led9 zuL?R;dL!%~PMo4DR^hpR;Z(T20|yDa^eUFu^{Ma!_}W0_U#)pNpu*5sV*f+6u(ObU6O9!c=}rfBW0(_JdnduaC`%_H#;?U%yK?j9>9?4cnR%OHzBJ zC5X(&>x4)CN+-nC+2&PF_u!GyZ2_;S)Dd7bI-7x4;qvaFQl6cX6)4RR7xW4PXfQzm zV77`zaQqgkqN(v?xaE5806E;h6JN}S_V zMB}*Zl-BDbr4F~?ANz&vFMS7mRX!L85jNB$BMjpEv;|{mVx9bUqy`Q7itZvqY z2PJ1s_Rg29TCBT(z1<#z5>PYNd&(+R%#+gZdAIxa)C!lwle2j2)kf?`+t5)NErsQo zkj^P@6ot^2z#Y{g3k3W0Mlk^WFA_63yMy~nS4S(|@^I51#!K9z5u%fTh1Lg?Ql-5L zQSgl43Mtgnch^6?v%dLwT{mM7w@}~dBq;kZS~##ZW6$jqb$FDcu_8d|v~72P^#4+k z{2Ou>p8?RdYlg<-ezx!=$zz=W17~ERmW-MAml+FD55pHUS`L5)up!V-@RQmhqK!ck zkJ-;Dlv}$#P;7UHa1n$d4pDS1$~I;;{lUy<<+VuI>-R&;Pzes(@o+SnAU4E)B{7ac z;sVpPPkBs+8~02eJmvv%>fEvd;0a9+#1B_P0oL4`JE#(z7B3;H>*ua12-lTQ{e>L~ z*?4v)%|_V^KQQh5cJA6(=g+Q>asYt3V;n;~DYn*D-$Qq^E>t@T2qeOE(F+hnXFaU9 z1}LnkkWeQSh#!DtazQ}}`N1X+nOQ;ny7%+^buN=fKzOIC6i>Me4PWL3r)Y;p%SIH2 zZdY6UcFIu&mT5A@)=ULHfs!dhjRG91<((pe$Rd$^>L~;@v(B>D5Lpq=izuc3_-)&> z!w5IAVJ|o#UIUJ%Tj&!&#Q;ViPZXL6fW%W`afm*Yc900Os0c`tuxnW!yTp#!G&D=u z5mZ4^w$$K3xZ287kwy5mG?qF-nl%UUk}D3Pg`0UpU(e= z1#<(uIBDTz23Kxl&OZm5Q%AG3*7#1^Qxj8lbzWEo*Of$=h^gYK9}zi$B05S6qO!g! z(*x#ZYAs4)1SPzv%w_W`CXiBV6kLhE8_TmX6p~iPkSt?}PC`5LGQCJ9NIw?hcU;|n zgK)r+Lzz)@%*J*&u=rAfz<@6nTTuSJ%%>I`f7UqYnTfx;YkN{(&ZzT9#6YoX>MkGi zSlqNfQw+S5@eS^QX#w@;Zc3wYoM0m6OiNTm)H3|z+2#LM%KdAt|EICW{7EFyGo4@$ zv)WIpUla+DjbKmIl3=BYg4L`3iwQ>d!rMsTcqCnRdZ5|@{VRqNpOWPU7F6|M^mJ@q zrIS|@<+YIh*UP958_V&s2zFPTak_6s@}1*S&0Kq5EOWA4mq5zsqqZR{ zR^tyxEMu2gM0!)OL9*2qV!pZ}e^24>^`C6wK#;PtN4RSv?@x*xKIq&x>PifD7`aHz z&;S6`fcn$m2{Zm#2?ymfccq(LUsO4FSF@9`5@z&3?nUEN-M~?NDtuDA*P+CV9LIDX zw4@%U<-zoblX%NPy=;VMPCVOooGVyOpVO&uGq$tg+P#lAAe)wt@-+mXQy8s%T|Y=t z;=Jd^Q9~_Q2J{b`V4kb`$HUb6k-d-SCpRKhOd|L&Sq9XJ6jm@7tgyhImJB#DD$E>G z4o-RLtU5v<<}gUN_wjd_aAvipq2Sa-r;p+`JKNX7sAWUYEL?kExt0;i&W%YP+&xm5SvU^CG{po zT+^t*QG3ai`5kKI`XNE^>YcNzmWeE0l4mtf{`s{qe&!KT*?Se(+ra>s5R}CRg6%uQ z-F?U`8~mtP7zjXe2g1EuadPV9_#8z&R+NgX0v!u`D7RczoGj^Fkn27-! z#>QN4konu{F({*>Mw_vyxKCR=50q)EFoia2P(;SY$1B{=zw>o0MuK_e7ArI}*c2nH zjmw@C*i7RTvJ6Xcq3-DHF9xhy;!vIntg~wg^AWYJZPO4Kr z%xZ;??4C60gsadGM9SW%1U!4@_<}G0_4ksuCExAx=kUkvC?t{Ko~T~AM7F0QIgn&=Z% z150Ho9>=5gr;4)Zc(EOm-k8rr!i*URLdqZf^S!DR;X8NF4Fkdz z--92Ux7%Kmbe&8r>us;s+RN8O_%PlK4|HauP#$2ofWauT9B+&{Q{`*w)RpPAt;oIQ z0bgV4y3a4JQ-=Sk)BFRu8hZevn2Y&%#~&TK&#_|w!(F7hmW)4b`JnMH?b1F809eSG zo>h>Cl1t7d7SsrOj~1~MJpKuudL2~|h?oWEvLIz}L`=b5^}efijdnE&5I+ekN?JSn z{5JWHv64R0^ZuKNvNvNbJjT)MUz#!10!PlI@>@mAgz^JLUEIL&v)rf*b}Pc@rm6J- zM|%5^gVZ74R~JPE)8luNRC(TPwzt&R>u;(10a_#g8~_qy6hWrxbICz96|!P-Ik6n1 zL1Lv(avEwIzCX1@5?ee`I8bI6by5bCE7m@L&Fz97g^Nf}yBEFMx(n?$0YRu|987Qy*Ocn8 zI}Lx+17rIb*{RExkt@^zTn;FK`MKBD(2lAVZU$!UXL@$ofBMi2h$$s2HIkNBu)N^I1vr*t0Ui8(BE`6yo|?_3iu zHgbwryr}t$ZUi}B-v^q(%NwCG9F*BL@=m}gO!eThE#hjg`2@#7ch;MZcW+)cc~!mO z{PNDk9?9CJq-$|&XoH*9t;r9*LO_r)zAl4ATb}Qw*(^VtM;or{)3eJ_bdl$ zr7a&qX;qG3z3w6$Lwu*GkSUc& z)<=M%i*|0HomLDJ&?&K^+o}&>xN=?9>((+jUEI?oh-hn*wC-dLQui)8(@gZ%EhCn^ z#}4{eTmv3Ux|OxafU|EW)OSV<0Qf5uRrk^2`U-EnGDjp>N_8WKmp6YIyi9B>(i=E= z_2o;xA?$=%Kz7{D5NA)K4*qpx{aH#_ zMDu;Nf@IlV0UIYT*732$<+_|uar&DNo&{6XI{YcFtZkN1(?LPH`w=z*6ZX_>CU0l2f6Xwrp`z`EonI) z;~6v2YKDKEDNJ7C2fzTzAP}5SDOAT3dj9>C&2$+Ig(hjt3+Y*dphrD2GW6Lp7G4k1 zSZ|may4I_A;=gign;``Y0p%3C#=_0FjE;*X&>6lQh2!Hc={*IA+eFjj+&O_{*2en# zV!(G}{PGMmI@TV0Ld(H`m?P1Jn4oWJIU>d4)5 zbF2fiGl}XTDv}gqp1j|7^DW4NCRUG^CrmF}To(f5-@H9h%vO0D=bi?PHT(tIx~_EN z#>K|^r&V~D4ead&W@9oZ?*bLd3udjB)_4j> zNn(h?!TMgc&;rmF6#Buel~K@T%8o=(D2LDH*x2h%;8?z9Jv=KYY{kW)oNN$=!uiQw3ogt>0y zl7%j`A09@fW}Z^QjJDacf9>93wGcr8(nKb}HB6uuTrq)S(r zuadP^1sq(d!@3RdKSA@U1THO!us1Yg6qbSUspq&A!IWPM2 zs8_;t!TL4=z(H?TldBNdXx`|z)h|yd)f|t;e6k)|du8F-JLU$a2@CVrwrRogz|X07 zM<#MVcUT1uip8@Np#K_Jbhp)|XMVCDg;fZ1>I}D@Cv2YWBtS5=IFE{{9!UH*VS@ex zxo-lrDwkkBmR(4@|4Zgk3OE;mnAF1fuQx|))X}#3rCWeYIzn+KPz3-F%p0Z{h@nI9 zWM(5xHUKmy=NOP?8L|$nO-8@gyD&QGGlBwMh8DllrhCD7_iy+EP3R<-jP0C_ax`yc zQ{l&IPhot~^@t^HrR$v2<@e@B)NalHkVD2r2lj>}>B5@BdF{k?!j!FwsZx;7=;*H# zSExA@#_!h8HVh_)%c$c!VzfwfOHBaaymnfQ@L~)U%Ny&^T8Fw5RR-mK-x}hO9jg*u zZcnZz!>8y|=x-Xe3g9Rx=;xQIok?8!u8NkbHy)6CHR)%HnsD1oVG<7`vy}(loe0j` zEb5@{E15L?m9AV6m({+`u$7pw*c2|KD<0VgDDIJ%wt6SoL#6&~7nYm5@Y}NGq-~Hs z^5{%{RXLbu7^Xv0yf)MVW#l;dE(9uFTTu{Wzcni8$t8#d>{nv4XWqk`Fbc(vpXCi7 zZ8>v4EyiAtYR<1IX>h#*Uw8wt9~Kgf3e%a0ziWXFW|J1w$YDM@XIHJ9n}`|Na0>R3 z&=uSljsp8#E7wK!dOeXp+sa_drv7y}&|2`|IOe|BRV5ed+DvB4FP2T1LAWkAE~gE_ zQ&>RHCuC$;mRz`KsZVh6E1x4p#YY=YO2Nos)32?|?`V&!KmeVVNwUUX9O$c2Qxz;e zz@0d3QOsB8-XP0c>)ckDoli~V7ns1-d|sClY||o9Mo4XqX{9wIXXFD3qjAb)VI={e<1hy6D{h?*L?f}t+B>7 zY=`*lR3lISIH#NYt?Ft7X!#H%0DvbH!N84PWE$*@iuNLT2MX09u?jNj8%Zce0MBQ< zF^ZYD&zuw0>%@+9B?&bugk=b-UIbkPLkk%=G}P2I#vlAOfA0~^Yp%ECV8z@LuH65R zD`D-2@vOL!ZhO)jOQo#+%IP8J`LiRLC5FAXS5EqlXTonD1)R*iG|Yb?^ot(!?PNKj zMBH$b1gyC);uM>g#U&k-!;jWBUD4AnWY@E|#)c*qc(S3Y4R<{$)5)xU^%Ea1**}iY zY8#c|*zc^6bR-n*ZA^AOe-$XBzUVAR<-XbI@onH*aRkHO03-Q+u;#Y0? zQRzKvZ1t4;cD0+QhB7u?3@p@~*6{rYT$LoV#2cFK+uA*ea@DEZK;xrC?+7?`4i~~_|PaC&Q7f{$8mGL5c00FgG z7u@jlQ(79c-&bRCv*CyeGDm;D@kjjW%&q&L)CV6_21K=4Z+1K?oIM3W6G`n-k&~}K z$yYkxGu4wHrC13oQ?<_8omwl-0y{t4mFv={8Ok*gCjE4yQ9$&t+DrU>_XY_hum2KG zY?WDDAJ>-X)6WFEIH_W0Sp@c~MN3G3rB^s7%zp(QQ#PvYv!vZ$fOIv^#)AWWO7co| zfA#jr5{BNLWPX=35PkZw;C^=KoI?2IC>DyYMi4tn&s?$d!~Krb;q@cVQG?exK2qm* zaJB50T+aGC%#2sQbtlN)IQZ~<7z|U?y(X!X3B0xH^lfeqlUyEaK%Ox5$vN( zoOt+l-{-Jlu3O(2Z9Hda7=$rK`h_Cp6zSgtEh?{#Ra{mdUV$P&Tu**p12reEIlW_% zTAw{~cbB7vcdFW-SKWdETD;B-0Q92NhN1>ZV8V(! zyLJX}JVrcef^?e;iL&R)Srt@sq4O9%?m@4>;2a-Yik)2Usm#W+Lm*WX&PI0ZP!ZkWqZU7-X zoxfZ&zRS%xaXgaN-cLr0q|DcJNgI5^%2o~n&COItoYdOYrRRUJ$S56iR7>-tLZQuv z=^ZO1vYtITC3=-o*r_oTy^PzI!+ug(CG?}x>3nvqfnTpTD8-NF#vO6dq`3UEj)v#w z?y+q$zhDgbr8gUSRC+@fLp_Q-Bmp7zP!`5`umK5Fn{t;9rHHCTyDO&P!;_Q#T4R*3 z$S5@!bQ|L_*bqbWx0a`WuFb!h0L6*D0K{}_tz zNwN}76G;{_xx`!a#)Q6pNT2o%(e>ncr}9YxdjQokv(4=^UBvj8+CfON7cr80D3vV5(8%6oG7byzI^*`)-kK`da6L7%p7kNz5WA#vBvL8?mYf{(~)JXbm-^28Sp}# z#IPd+(u^jQ6hjpP4sI}OmB&zZ$|Sw0Ib0Le<7EdDfPU9t-9{nnfC;ZAaS$w`m`GGM ztSK${DV&T{5oxGbD|swYlUNXwPw;*kGq6pFuc1r zTUa^hE?(`N3%VTVYBD1!?Eq1cw=haeu{-v_=)>S-4*$BZMr=uS;YMlla zyo=W*^SlAndOt2$p_6I;axVuiz(2+!VSO_*mD_zx4DOk)l3=OktUuPabkpVr9O@?C zXgVMNxM#(m(#<`c(v?|IP#mJdR%vzP(&GXzqw5y?a`9~*SJCpnRvGIaNb*)3u_g4J zaz?&!COo5Vn&*s@q9PKr;-Y#xqUu<^k%|PuYoNQF@Prcs3?qdbIEWLcUV3eq!WYG6 zkDbnMGU7mAS@>BwUC*Vf#4ENYPvY?PA~V*rFU4+r$6np@B;-w0emm$EQ%D~Ce69^0 zbU2Kl8`0Nns1FEA6b`P6U#ZfpFR)m;u0BdLlP}l`OK#yWMea;UocuUb=A_R2A3pd` zkwZn%%r*h$#(d!#yD3}S27g?vZ5L!F*NywNt3323N_S}g$mME;m$f!Us-EMDw-WczNF` zr-!OzJ^^DkPzCPMhc7JO`~(8j2%*^UgLz;WucA#};KE<_eonhETxrUw84rT3!9zgy zfN{O&K_qsVs@dS)a}p>B+E1rFwz(Nt1)1XuF{BEf7j8V)yJBSv0m8{ca!MCDczF;* zo~`_d?@;z}#ckvRCsARGko}(}YK(gI)*r6GZr&d(JKofOF7tbZoXWU?S?A2_CC0vr zYv5-Eq|y--EsvK5x=^|y3CzaT)3k}qX4MX zZ{I3`#6%ej`-oU1ok!J14*brN&Zs^NDk3N|CJr4+2(|F7CY60YUlkqKXHZX(1M%F< zJvZ&@k;VfbthUi1)v+I2zKbqwD5tBq(WbHcNhQy6?C+Y<7**yeJiD_~#G+URw=SUM zQUvqI@`qu{khlpRzF!5hY~zzQqOx<#$5K5DV+tBtN5Mlq)QSWal*x5CaKhpub~mh# z{$L^*_UHgxP(3Y+$ka}Yt;B->Y{t7^c(9Caa0|7yBi=gR_XXPY@vG-S%rWTmX-p3} z86+6>Ia%)0WdvCMefB(8&IniCRLrm{RpF4oKGpya=nd*!OG*L8L_mUxhgk9C;zZGb zh*bOVQhGPqJw5vZ=9q!D6;Si9I?nSIkz<{|{-??2e{v*CG`%71!D>`oL}P*p4u3cj z1kVNOKTNP74RW-bakO{{62U_egWZZ9T*_G4OCOd5fDo{e%t_L4WxN$y!%LS#j6MU9 z%7*!v4p7Et*5nxrWRx#BSo&$vRk`cqIM=PO?|#ab=+leCr2-3bM?dwZT`y&P6l&Ie zNJkLc=&Bzwa3XtgKSrH-IQe^X>o&dI5R18A88xfo*Rb(s$mje4hYiub=ht|SIrTWR z!SW^vNGey>1aR>e$f({3>gvU9;Mo#YCJFWm*wB#`WIa8xumfkIJe#1%2z0a`Y0tih zrkI#ALdW7Pff@NhU$;Y0^-ezE3}J<32pd8|$pj---m%;7`F$b$w)K3YosZ9(1rOJS z5Z(+?{yo9K2t$WN+~5;F-a=3Ps<&ATWmIMBoa^qYs&oG&Z!{mA5&rYi=7t~*twi@qHR{{z(!b;0+P_U`4{+ioA|?9;NHfoUX3?fAENq? z109SH1n)n5^^_O3@=^O-jJ$u9v8(-$jrHu`R5(nM4;Fbkh&NhW`~~~@gOAHO{m2UX zf2!KQ^&|g{xPNJvm}yKfZQo`5C+aIr@>nE!b^Y z^EWGY-Ffw?Cq_z(EwyR+ZKXW_3#qD{R$@1Dl-I~pL%>Z2Gl)7ZHaZx`c1AQ7RFqc(5`Zx==v7!OGyN)1)oemqfwp`z zbKmrdrt4QM#Hxkz0`#vXG%E1UK?x(Nd!8aEB?zfPUXps<51H#bD7Tbo6Rgu8lRbils>K z5?(n;a>mEDN>l;)b*8f6*f{R{E(L=TT5}QZR3p{fQ~wKme;O-8DgZ{g zXFARt;d@9Xk17SQL?9W?V_0aAvlm*MoRkfNW}d*gyb~Gk3%Vx{VVrMjL(raj{Z+NW zR^{#t6OM>VFM2#%?F=YB*k$IuS{&~?(zovx`qp;!_zx{aj z>W>El3GDZUXty-R4HOnb!+2|p6fsdTL}SK0XVqQUOYxy#&&)#CJK_5vqw>9#nx6qK`Rf$ejsWjBUTjSXc2qU@gYvJQfilYt9~ReW1QDDCn`pGj^RQa zI9iZiHBM`fVb+02sUxV(Hkx&o3}1Yt{8Xe(cwUH*o9Jc!Loj9Mg5o{SL~>cWd&pa9 zgE6wJ1Z#Mga^=VR9A&PAk0;BSU}qI-sjTwN$gxyw>hByJfH#_nCe?>W1x3@vvm*F4 z@4MylBmpEevmzSKAHrCX_ap>)*cEQYvT95* zuqx+h6s{X&^Xh4A_Yu)_YXx*I+ciJ4zwBD%iyYi`Ik>6qbZ%59KyeFO6J!VW>>RXF zv1@k_bZO|U8NWMiNlswgJGj0t&V}P}>p7HQCf46R3p}ylUi*09)W04%m5~!e-AJK5 zS*3bCgc~QOWAuPJ*V6>BBa(xK69%0M1%^(9k*@f74t}uPS9grbxvwGwX$$W79*u?m zFKrCxY^WRQewzFO;xUoZRp!7jJ$BCb8;j* zX)ev!a^xI&Wi&#{E_OxN{7NXXldC>M1S#3b9&A@%8!E+?*J4>$3dP=_vzezaJ}#8; zz4zDM=R|BR_1ICWFmikgMcw8pQ+DVE(2MqPu+%NlY8c}++%;QA5rh&pTmFid`=D>| z%c$xW@KP|kGG#^oB|*Yl=?zB>?*iS2*2OCu49d9y<9ILckD~rxN=udrb`v0eh`~cc~tmRBZ?B@Byf0 z42$|FmH)3X?qALIPnCQAiq=@OOvjkRuTP~Lj*5mz`ytxYWlTLy`!(x44F7obW245M zu89x%@&=nM$!5oXKtfb^rdTHiBlh7o7?BGl_#y8L`JD+Nt*5C8tGI^b(?nC%sfRr{0!wIwP;Per=@Jo@DC96uUoDS!xBqR)|?EegEF8BiU=4e}+`c=WA9 z^9ipNwU1MA(e<3H7fzWTD4Z%XP4}!??#afn6)Q8|v|RQL1__pV!404LasgmYxfD>J zVX=B|sK0ixD5F9zm!3owV#e}vV4AxH_d0!pSJ{y^P7yqQGg^pJePxhYtA!Gt{sEtY z@&D_oe`PW_fAfc!)!Frn$@JR6EMH!8RQLb~&|M-DdXZBReYb8uqbxfS;pZE_mp^>a zFvhv%a>FcE^!zyxv=6uZ${cu9QRqdE-$F0VoWc&vCrD##(JO!jw+}`3%enD9SUx7E zO0lhTK+WsZ20Jj1N0(?xAbKe(W!;SeLjVAEr)JSeMNWO zgCdLLeQ&cwK=5ioD)yz9pJFXQC|l>$V_`R&jP1yUR?cJnjeH#?p_8huE2qGN|D{I% z138{-03*f6%;bW(Eu5T4D?^fZ**VoQte(yNSH(PNv)nF;_I|LT(}_zjSX&V(=T0Cl zwvyo-Krq@Kg`1*dCrW*jih~Ze2jyWhkmci@JtmfhHAe25WA$_8!@i~UlX!H3ULhm1 ze{*;1hcShfHk*pGN3I}~Y5%f+!dzZYYBDj{?Sz&>N8?>P1Vyy$gkTimvfpglq4M`H z9||f8IM*E_`S2#i+Is*MHe(Xl%#oGd@_>_%nXy<2xOyH14N}@-JQ~&w622zxjzvmo z3unar3{1unqBWVa8>eGdmebB>XGtowSUy@nS^}kx4=+9Cxh{KBRPx*Jbg$`Yj(_8+ z)R01{iRhiN^WT*PxOdJ()0z8xfROhQSQ~YP#+S83;_!-=wtX;PdgO2y{^M@kN2+~b z=U)ncmm}}( zV<0QMqV7(K*Ms`foPVyeC0}Kk_-m^ev^2`VVEjlu) zBaM9fMM?ERt*~O2hV0J5U4<8hJQ<4*lGz{`Kwcbts;ee8I%|U9NDqMn3>Cj9^mM+H z^tqmWL$z%05Z-NA29hsSS2Ek`>%V%{Kz1}V4$e3EwkY^r2yR9`aXzSY@wSwx3%-|E zX)fNPb?yeRKU1c@{qhSiRIeo|KKi6STUrz`Zf3TvPs>BUBvzeBJ8eUQ8~~sna|zdvG^YE9zqNKmq4n`a zFbDl#B+)IDy@(q=$3=$O&d;ln6YmBc^TX!+Uvj5r&0Ohc4c5*;G*85@nr@L1(LSHsXN@fJeE=e)&Llss=LoJjH-5q9_()Ne zFM9X&+t)(=FS<8(!l}4|Xj;yftr#rbj}TU{HI_2n3Qq$7&*uoc6D`H>^m`s4C5-3xfk{?HoD-xS;+Son*AsE_HzYEdOcH@|kLbFh zcAK0s^k4@5-wDsu?l0^+Hj4`;UluyJXLf$CXUf+^-^fXM8GUexN1@M}6ruT^ z9T22s#m@hlmB7Sn%Dq5qV#zT7s~T}7?NE#Ft=E!eFXE-KE97W1rc_spdQz4iV+vXr z!jgN7>~<;9t$khRoB~h7c;MX@4Bw+i^U1bOH9%t)DGt7D4$>$7@9cKJ^b{oHQ6Y`&nhd(&_Q|0E>Y5T4yv+?AAg;O`sAa}!x z^CI>O@k_r(omk=He0w07e5E2UCYm7)7t31!=+w~>r-w7gC0Q-$G_!C^BLX3 zso0pHJ6F-nCT{$Sy&-UBpp)X3CvX-vKV!q@*Q_&!4qOxb`sB;4Rqgyve~cr;$xJll zjrdwy|JG*-rWo@y8$_r%#<28KjBKMWrPHVUR&IbiNAkJQY^yC5!ZW*V%j$W7fXSrS zd;p-4MO4GxJ_d%A(Gpn{*bJkk2=#~qE4eg^4Vb-Ku4xTsm?}cl#!e|sB}qxyz}LoY z=C82OsXy9WXDWGWG+!XVo0lwdC_JWpbH~v_xjnk-*l4S3f5hN)+$QqM1-)2p0`X~F z!bpxM`aDyVcC4_SWsh5>i;x@t6UJ(SO?O{QVku+KneI@9G%Re9452A(@;?m5qB(B) zr!@oi6iF0aGEll6r+9gzJa9VdCN~CGiajr*FI>@iS@$WTUxr?9!0g#F<%Yk)+tRSy zSt%EW*lb&ebf2PBq3t_8?Okqd@AJ<>sbkG|F48X%yw{)QGFDW%eGbd8PY@e)ad5pK zMCUcXYH6uKu5#PLr|Mj>ifk6iuTZ)lV-ZOFgadGMcq=V$}-kIhS+xe zq%z%R@$}YAczQ`JV|4u0-TGj8uA5?kS&d*~!PYNITHB$t=ee3`=T^~@@+8}-OqOY{ zbU9Y()jI_jukrkH^~sU|ct%zm25;C6k;gYre)*kGq|`TO&!wMkY3=LlouZ?A-rvux zZ>jrzKE;wf^7s3x+i@jV|3ilUFUa-N(W;!Oxk<6H9F}%yM9JUt4dU+$*e}bbV>Xhs zS+1cI05B>qK#eFtQ5?$Ct=O>?Or&=k@xJ+9Q?~e-e2_yrl8bgOMIv007K`pMjB9fW#6@M3EW~ zb8kn*V}XJxvf9y&q?ovp#Ms{C(O;+@I4v>8_~EN(g7k1np4;5(`d9TIFW93Qw(oe3 z_bo~TbC?m#j|m}?0wP=oea?)xiTO@gfdQ*~+8=bKo>f>B{qxlEded``QlCgDHHY1Lzw_DF_ zCQrzW!d0kEg<`+ zn}buIGIiY;J9p2)pF4D3Qq9I5zW#A6wwO1ZIp@~Skf>hpz&}2feW{ZfzWT0TY*(2I z0=_qLTQkHT$)+1TOpKSHFWO*~CT=rMN(YbC!gsFs>D!&SyKZn8HS5OLW<0kLBzie3 zNkK@lQR+EzKSmu$+@cnAj!=fYYMr#2>gtL@z(YXoetvn-TAQ5W1to`qLhlc1jMhfK zA20Z#t_R-DU+!-IQF{Z#2kygMmULQUf2DR=C+^h@|0?UgM-9ZqivLcy4)dAybkB44 zhmmXj%d7v7S+3BQrqIkVH)alVJWPcw{t2f>LN3afE`8}Yk)%<Z2&@`nY%AqW(k?GidnYH9W7}ghrM-JllUsbZ z^6m2no0Ipoi(f{5KO4Omc^14cSV*Pr7m@8w-ik|Rk!UM88x}}wHX{Zr67r0|C8&6d z9m%O0fv^G$Nc^^K3}{03)&zmi&-MM| zE&ejnA=%x%K*=tPvEi1uV8Vj&-#JP7>i&=JMhNzLn3$-l$j?Po$viwZF+Wb7@}KkD z$A1}yo!omabmlYW;$kw}e~Xb{1khU_o(C+z?>$47AnGypgM$=pfS2t?rcS?K^*dxQ zV><2u#+eJ5Rb{TmAvYy$HAc_Ou;5~Pi_Z4#sfyjMW{|79vc$@+evS9-aQ6(Wc+6k+ z@hGvi$(`NLOv3N?n^AZX;$dC=l7=EY^~2*gMOaN`X^R8qoCCa@9`#qxTYROk(8)j| z%av1ugt@eMdMG^uc2()keFn#(I7m)>F%g)-loT&(J7yz+00_h<&}(rlJsa|l+X-Et z%o&-)nq6T|27sd-M!)fhpk;i$v=gOkCqEeKUcYj~Z`Q@4cV)5Wt<~K7O^A=xhe)P( zlW!0ToNRPNR%zuS>p}N$i&0MY%&@=RYtAHYxPo}AP>;ReXa{WG?Kx@Ppzhf}`5#2d zpT?S)MuS`|Ew(j+Mv`nV8eM0i*;ut`Avn!5Sjj(B@GejkfFt2I!X3=OBNjJnkK8+-^XVrE&Y%4~(PF=~{Y_I0i$AH-sayYM^QEQL zS4v;s_$$`F{HLdDXf#(R!`(We?8?nmWrrQ;a3IByi^+uoW{*47vvTdJkFreWuNuf7 z(Iu3erw%cE+&K(^xSYc4Pd@(2;J*83CSbx`5fuTap>d1W=c{#dK~;P&qY)zLhetN! z5+)h5@dRbB3K)>aBMz2xR*Ps`teH5x?x*J)o^hs(ay840Nz@`Z=*4U%zo;LKypyY)D*DSee36>*qRh&fZA-$;6><4bv002Dvn$Gp z@^63c+jC^&O!o%f-BT14KjeBV>Kd??$0mcLT)=71xOC&(rAh> zYT4oV7VnXqMcrJ7x1wlSU8MBKW9=VQjX?-?jQ@Y}!2h1*-q9|2d4$vCa^cql;~IEW zY0rl&1PyZAwCzK6b!v4P0RW&>a&YsYu_0OXRi)||p2vtn6e<;Wz(Y`qp24I?A8&t$ z@Rgry=n`lrwzFf2GUdJCq3|@iRs0!7O8lMGY1H4}Go*#TF;6&iNJl&wI%PzC1nQ`sH*A$K8Az{~wAT|XJ*nCdm{YncHedotL8oto&mdJ(o)TRaM*_I&f zJm1fJ901@bc#UTM@8l_jmMFS501F>h7W1z5fdR@~_KM*T1|%iVGDK86vjD5OigR~W zoojDh#B5=v<`#qRTJ(W&7>)dO<>%wx+ze|0M-I(d@!#BQTKkC@QZK8LFDIN12=6Rd zoFAr=2pB!NrNOX|SOO1k;d|NJ*>~ZU zi?>lR1BOBl1Lb_LBQB37^3L(2{zBgRc;#Dy7VSRl@BBo|?jMf`3C}bv1D-SJ>8Esj zY%=V#pL>YpykbmEp3`WGqFCzw!DGTK083^gyZiEQ7FuWGH|7Dl zI%J?7nN9~l+>k=VG1YFoom%l2hzA+Grws@~?#7dGvwBr9o?$MI?YF6aTYD#W-Qihl ziW@MM82)5VsqY&a(KBzizMFJm;H6~H&{&&g#hH!Yu|+|~U({TAYU|Q7YPlhm+983< z%KE=?_NPYt`}3#DZH?1J!8gr~jsFNqMtOjLbm%@8rDb0{$IH|5A!vbyy|iyb8KW|Z zGtoF3i8E)f#A~&m`CCOfiC%*AWPGd_SJRh5DQ^EHYb??|4&**(0R&uAjE)u#S;7VT z$}~)M!s0RZEI0o@!oEA44Y=((A_#)mTZ7muW>GZuCT7iwJ!;cd)ky3u_HJX3YHPKs z%igJ~*=^5OYqluzrO!K_=Y8Jyx;}rn_|J9aIQQ?q?{lBSLDMjB6>`})T#k&0O?U=t!#tY{gvjw}qguzm)r(8>=Hy-uyqM?`*CT$5J!{w|o_bYk=@$bKWXfxr zde;C{RQPpXfG40vt1b>*mpG`@`#WkN$pA=dS#%{d!-Zu9&8hCff;2^gr@MS)>O)^qN)aic~GF@2^rNJdiU)4J>6}c;%Q^ zKR^W53agB+bf4?sm8r0?7u7pN`-2--&$P0%ZeO5t+Cr9dWiVuvGMuF;2IORkH15bf z#*ZWqHNylC!RHBObIz>g;KiDGp0LFSn_~@>Qg_Dt`JvH zN&Lipv7e`NL&Wc!ifxbnw+oIZ3#ns8|J|`(2_{*R7zIh0F;-rYd`K#+hV?c4FYloN zpaiPI_k+4-P=gO~1U%t~Gpb?4fY#p!(BB&$PX)0x2@K9ipo^^PLWLe6gLyo{K#%ys zo0Y|2Wyi({$5vj8G+S2wBu4eiAXT^l zl{LPS(DLOKRIcjrAs?_(^u+~=m$;402)kH>F*36eEeihu|9t=x3J&Y1Ao!AoEN&Y; zjC=5Q6@IOid;z~?Iyr(E2zYu+S>9cj+Dt)hHSn^W1r4Bz&GI~ZgEx$Gn^pJPXO6sS zDY~U9Wf$^IeIIu1&&TT7y1YW>4E@vcw4Y{j;Fh*s%4kywNrlrUv9jNQ0&z|2{Yz4A(fxBj` zzCmC8v=SZ9c_w!>5ACoN^DO=4A(RPiyVn_b6*7ULx&m-BelElJgtpw&V2IfrTab3# zGx0_;(4K4h_jpFHvD76lXTwgrvgCHJuE#UF$|m~f?u&b(oo7q1nyUmVH!ytRhfmGh z*yc6>V9_F2*^WS-p$Pvo`4%1VQ3hbR{?f~f!b|7-J)QWttV43C5z!BZF#LM1e?T1x5h94_QF7B*4DZ;nE zsH(kiI2!)KSVwUz4mqU4fCH%ME>OW;+7Vl^EZNLKXZMMh1Q2(LW0x=Ns_Xu@Dal`! z^Y9>bte$4$FGwtxJGw<4W^|n~T18xH>2axMJ)HWLVg!c7a!~RNeJz3xU^*`&qF7~M zQ?qx-3j`>|Y~PI+CgY}AbPO-_J+f}4b9C@(B!gsdYu?Q3&-}vXe7wz~TRPovJ;cZP zX7MAznf>|-ca?}YZ1`etP9x4ooJLZn`oEtLp16Sos8_FJVEkam3rYO5ymOs4!Pwty zDB^E6f)Ibu8nu31Y0w^gi6m=*02br!QZi>)bE~*5S30b zGp@HS)TI?FKA@jEjc1a~Sw?2?#tBG#2^m{Rl10no6TNb2eU;tCDtu8mz`DSB6+ zn@sc57KQt@IF9s7Ht10t!M5m906r-!Kmi{Gj6;Th1MyAjW{6lgNQAh0|E!U^Ci|S{ z6EUANMPM0$Cqtp|NSo#v3R6hd+8~FQWMnb(%kFVR_cwf*?4G?45H*_r(%?wG$NN7(pIBn@x~SFBoMZ% zR}?C=b3%ZF^X9b(a72bEF2auyT2MQ4KorJ@u?o5fkf{@Na*W6qoh+n?@MO`YnCr5K zLwj&3*)`KSV^*%%Z&!(9Z%2iRQevIw9s&zQqyM$|`m4}vZUoQ|Tqo^VBmDa^Qb!rX zM4~LC)kz0l=2K20HHL(OT>vsUK+*(!IN+2yP~P94rS@Ibe~7~NLq1&|IZal{E{!tB zrg${!ZZ0eMv6RJ}t-({Lq%ZqzS&ysL@+Fv)EwCmuh=#grfd1P;h{W}8XF7>Ld2XJ6 zHMhP(SpGbsr)RLl1ixh=Y!r&;j?Yh8SkneOE9sk_HH%RC@)ISbrMd~ul*BxoF%h0? zP02=H)tICm2Tg7HN)^UZJbRr-j46~O*vNGm5S)*Kd#nmTInmcK$Yp1(ol+N?xQkx@ z3{k%%+Nc)0qLb0KotBUR8;6Si+bDVrVZK65X|2h2_^oq~t9w9@>Sjl5| zaIqQ!Vp~Ftyz;~v;<4hGKEN7&-(rA(Q)(Y!(?heT=E<&F4U6*IxQwXJn;-V3r@T$S zL%IUj4Gnz!MW9bHb!52~A~}6Swa_zo=TFD&n&yBfNguvbg_UL!)i-4vg0IeZkHp!f zL4$Bb2U_-wOvE8U=1*sPy*{1i^xni)MhOf|GgAwEj0SMga}^6KJ(um7fpvIJFJXFz zC7q1t!7r<4S;6Ls>0=7~!|ys6KM8#Aibmts z72P)zMkwj*&6s6!zFZeNP4Dyx9Hb0KpQ(s4;l)MEUjrC!*f2gd~$s)Ht zCly~7)c)cmI=ypI&jkE*gx8$Ce5;P{`J1yl_;%pduj>fUj29kK zUe2ZY&#_uOxsh-AkMI%CovxPLKcd&-X8UHo$?h_Fl&hZ^lbrh~@S^>~ndIA=I*>V+ zGD%%5$a&vzrIv$ZF;pe)X?2ShPZSn5TJWibM)8_(mY|4+Dc$m0C$68hb{=Jpaf;HU z2Z8x5O%7Kdg>Qx4!rNaOKX&Lot$r-x-#)9`%5ru27cyUv)*@tWrW<7^AS0?Qbtt_` z)tN)DAZXnq_YxwS;ac+*!`v zu-ekb@oIbr_sE%8Kj;H@%Ik_;Tzr^mbFzCjrtF>%rb-x-p{6@U_ynb5_|NeEo+dMg zdprx33{(x~8%i2|%f!N!ZJbY59LxeW;TdMwV0LIG+t2w_HdHh`6kQ3%MM)g@BnYrj zJvDMtnQmi8c zuWP_ieCNflB>!TAmJ~H0u&hQ2CA%g=cu5^Cjudaf=t|l6=48wqfa%5xY|T=}9+{Zp-O+HL3FYPui+4$J6gzUk(P=;|V;J)w$>~zIO8m@~%7vuT#;rojMcE>j9e~pHHyY$_8d7QD z*_Mm5_gDiKO9I5*DqfA56T|ERr8u)WR`R*SDXQ#VV`$`m403t$CaVmjfS*Wap0NMv z6y3RYZhkE`^JA65B$+Y|5K4`3r`KA}!jO^jQBv62`!Hm^Itht66+&r42KIlroQH!! zV*Xm6Xm<6d0X%AMCsQ*RYojKU*tWDjnhRt3k6W%pwk_z6?%^d43rMr&W5 z$H#4!SqOxzf02cAFx$7PUAw4mAoRTqQm}mr=We-aPL$_aVSQ9n*xexHkZY`TR6v3E z-~gsECdCz^`*jIoQ4_B8#oq^52ocspd`L3NNk~6PI05N*SgJM+A|pfig!Rco3&%f{ z=F;GUp9kE}Y`kLPl!@tqTCkFb%_;aw;K)I;3Pu^jYqeWWVJp}tpAbf3Z$1-8PYZw0 zXKJh^EE^_)o+GHJk!9Hc{IB&^t*Jxya*fX>w7OGG8VlJmD(jEBXS~mJk97X^UjHxT zB%Db?5_gkvZo3=7**0ofSq?ysi44Yw=>_?^yOE^k5_d?;|P+nGyW{ z^yZM>QKQ!%?+9>3GLNYnwhxU#zYk*Qn+&Qdl>Tw0Ko)2}ayQZ0!v zwl41i=JMd5v7w+D!gtugs8h!Z&)?ye=4CPZxB$k2C+a$JMyqjgGao6xT&oPys&MV& zz7@42cM|pUVhz=u{6*}yxSA-N;j>5LNdqiUT_R`4XHVr$sF$Bpey7#dkyrDD7cSSG zDwP*_(Xc+4#~%bEWJu6e0GraQCx-z+f%wS=|ADFkJvnkY>X$xTuFdOI6Kq={j`zw|d z)=pYFOe(PHXgDx#S6ftHZaZM5qE|%-zQbEV=#XMCEgn9oASJHS!lO5hJC}+}fhQ+8 zi{$_RFg>h6$wV+&+xb@Scd)c-(0~^6W463owtcg!S5%d0-bGZw98|uW#Njc*DXXDp z4euTKxn+^>h_FE96@kF3YTcsc^~5(cnk%zc!yG4$B~+3m1KBIT%xj14>F~#-z}w4^uB4B z4XHFh6GN^nH<*wXs3P$4Q0{MD4F!`MC|e6-N+)RE-0 z7?weR@#d|uBq>mdl3+%vD4x2cUymXoPB>yOrKh|S?J=P3H3H~(YBq%G(w=8_<>J#( zS0OO!q}$H9R0zxnBMzog0E)kDN)!2Gr!{5e$)WFbFi+hBb>URL!9i}pHL*XgoZV(S z_YZvNQ6e*O_u?QmwN>-sQS1c0(!W|o{AD?J8Pbfz#$@aTDH$_8wL~?H&Y!7QURY|K zQA=F7mah59KN?m9H4WS_HLYB8D^8I!m@#>y<~_AErDh#JsEm+qd0Burjx1^R*=_x# zLhNfN%yPyt)m&~vZn^k;?}d-T$aaoVU^{ho_M_tQ^@}$WzrC|Eu4wE)us^)i46d(w zXCgPG&bDr{3CCfuXD^-b4&VPx)NYLN^6Y}>|j0OPR zV_6l*6zSfYZ;-0?1wz!i2dxPhcop<)v{oVoOwQHU>)E4j;ldc#wqnwPFthJ-Xx_AK z{G1Q(c{>yER^rN20otFk6rrnzuds&`_k06dJ+uz0E8GX=4PV~#o%6#sHpzYtItiPz zJX>lDNGOPwc~Ez1kkxm2fjEfyI6nUINIAj);cw@3woPw`8Jst{^6bR}7=+7RKtQ*d z@IGbcvqL~q4yVzl6bc?F-%Mp^MDQ@nW6gugnO7d*S_52*M8nx54^C%qWKdj)xj`;x zrr-g6)|0j!J(LzaiD^_(hBzC2PZ~xC#O=OnuYrDGh9<)vp2!8ho8p9iQE%d%&)4q> zSq~sum^}CSn0q>c4G<#E$Tnig%(vkXpcn+pnOTz8wz$)r!xLAUvZ zR7Jod!Ys6aBBm|a5USbz<#Oz~uAvGkbUJwsKp}$M$2lns=$dE_4A0T~9QNmr4Qka7 zG4TNb0ze(XHy|TgQU4coCTw;E@7RMR$D!uiiv!lTW<1#@f6O?JjE@W605`qWtthHn zyR?carljqY-m$5m?0t3J+P_I;$aV2LbMDOyn%t4NT_r#2qj1(RWRtASs_1EMTDG9& z;}deGJ1(QKr>sDHyB&+9f(~NDREdKo*ybwKMoFu&^sO9V53a?m&B`ZXsvx{Y+<2w>mQHX$YQF&6gB(4z9`hW^xyR?mI9wYj8{osytx z|M?Z~@WsV_V<9aVGrsh}Pj3Mz=Dyf;?3!jxm5^xr%@A}B$K5vlZuiiWqs!-V2Jd7} zQxjT`fwANTSn4KnqeY5E2D{O6$dLQeqka>{$50@@!38}9EjYw0-3SPKX{FK6>#O?| zPR-pN!#3tR{PfjEEnv?U^{sz`eQEA1XHit`OuGm@VWvZuFDsXnS!}H(w!|3Yo$ae~ zZDJd#omFZ`gogyVyd@q|0#0g)=XX0F{!iJ+KT!5RzWrsnAEaxWfn-x-?uZ+cF^whe z9y>FPSVeJD*T-=x!X$eLUea3*jefRifB@!c+*ahzvw%@Cy?}} zzJSn@0v%Z>UI+&~WVMTZx20T`A!|_U9Ljxs^S40*2&dnwf6X&eng3Cbb?cq*TVt#A zSlkvOG&Ew7WVIf}3eS$(qFh~~;&3-qARfR<(g$?qP78FD`b(X8L=n?g!;8S7z99ufwXaMJ0KcVr9|2ya?s;-S{TR#m(@Jj zU;lbYh~`7Xmpc@z6E1H)XjMu(Uxb`gbwB?hWrP(qyt1vE42*B!DPMs^rjniVeFVRZ zh;VU;-5~c!nnHFS_od6*#LgMVo|WqpFJ9x&LkVnbl*(aW`F@E67yp2v(CJGd$Q*$I zTSNS_%LY@eG>O8OV95Sviu^(-ivB$cp#g^3%+`kV^(BlyYRNl z^wQ~g;$iFon`|(E>zmPVQnU_tE1Q!UDw1LP5(_xM{tYXF2qvZW{eP zo>EMNi`;fCfE%UHe{x4uP+PzvNs2kXrcrsHp5@Vg!=ooaMCVj#A4V2@#}t59$x0n8 zZz=3Y#|Xee`N5lohI^>DLK_iqF5)CR)ymt+r-F>qS2rRHMHe26%P9pp6CcdU{{Qgy zpDeemOzK#@^^9JSR;*d0sj4?fZ@E-<(E!ql6;daZS%1$CL%L&CrV?mnW~Y&Lx1yI5 z{w13kD%1|-H!2V#r>I#fs$$mVViy%vN$W)obkWib-mu{p73UwfYe!gNhT8+zn(o3) z8JQjOs%WqmW_B@mHtZrYE~)-{9o|e=q0sc?<_%&KOf!y6m8F+o$<)*f!9*q|tP}a2Okdcb z&b1oR7C=CQYaRjZEXa6MT1G50ImxR8bPLVpMyBG$nqJt;8aE%wFg{uDjZmbaJ+Qgw zr!RJ!Acy!|vTRq@_g(CLf*~UiX2H&Q54qB{h>n_NC+2if#J*+FFCh5c$R*k5*A1}B`mU^IIKi&hN}yI2i?&gG22_??%KfX`Jc(sxB{N0EMJAMxqL zn>^|7?HuE@6^nBo!3WbCO!|N2)c<0h^fK$-L#G`7y^$|o*I3vV=LjPbZ@PTgl3qEE zP=*Pd%RR{4%*#4fRna8#Z7}s*iequ=FMFhbYnL{|B_`LlLWk)pBw#*yy$b#wJ_gTl zS}~7fd9oU8Ki|J^8#RznzdMr^(ZY9J{uK%yF0Z!GY)cjs%o>S9PtAfakq#u>Ok>B= zlb$uWFF@nl)~|~E4qf<($|Bkv-Jzaf``6do-w*7cUw>K7>H&amz(IGcEHZaDfjZUQ zcZ1}+$_c0Ueb{Fx>_Pof2?hWGmS{5|;32XM(dL>n!nmo$p?wq!<-N%%z|!t_*LMV? zgfu2kd-VIaT}Rugs&w{QZ*pofoEMOxFoIQ4_*o!D=Djl3#NhqMn5VB_8KyL#ekZA4lVb|R{nF}jEmb#+%^gZ5uGe|D z`Rv5LNtTFw8{0fYx0Oq~)pWI#)&bUXpbFv25Pm~`@4dgCp8 zUYKC)7>oEq(6qeSugt~ug&oH=*@ zf{G!RQcV^J09kxe=V^o9rKIFOGmF5BI{iH4=D5rpyRwXy42xZM0FaBesPzHDzbN2% z=%`fN6y9j=3*U)1%|P}FK;r=*P|JX}He-Tb&YNc=JqwHk+i#xgqEHD}s- zS=ri{cty?y)9WtOWlYulq?}g^YO&m`ZoCL9{DQkXw=kx71! z%axj2_)Z`{u`|6f-Z4K3Bu%J)2`)ZY2KFuoN$#?cP=t*7JXR z(OMy*ixmz!9K>EYFD))ok~4D{AOVzIQK7D&oOf?19TlkfFd|R`1M5gPbV%Ze*CqK> zMhFs0CZegW6O4crAP4j5j0$VT^dOqv&0pN80WzRT8}@gnMmZ>;WnMj<@HT_?%}bkY zFK&r)ZkJ3vE=cQEsXbs=d;7xp{r$MLQ(v|WHuZ#&7UBfoCSK2D_Gm_3FYoeHv}roj z^uDS3wc{S%xPO@k|Ak!38EGy@lC^XD%0M$WPppEd{F$Uk2VSHzR&_W$k-$sxhlpEj zldTl!xz$_4!HGC&(=EW%HHC6OKg1_-KtnPbi=kk*)=&_3*}oP7*3Mg|j9y@)cg0s} z62;KCC&$zGg<-E9AIgC^CE7aRO5(b_9852t)GKc6)yqjoKY#HS_vxpq9Uc-`-A!_= zLg0S>Dl}>wz8v3RdXa-bJiR}l7uT+#b?4G5CCd_YhC&<(ka&echeX~g=|!mouT%9= z0f7T#2{2(T>3l$*71U5`mt}me#rN6R{1`LOjkoU`^eG?CF8&&8d0<-inzce$;GvWe zoY4W?ysoet`tq*7D$^)D9FR(IBc)=}CYuP`uS{5p-9rI|kh!!IVmA@d%r{4B}mqgs-l zYfL|PjN8&^PwLXm?7DBEvJZuMqY*YGbT4a!wrg5c*iTC2ep5K|k0c~r!rm`6NJ!)M z$)M;spI_U0)6066%YlD{TcszV%`$)`f+1sD61pAA7|F37v4U>V*l8| z|6Gq4rnJr=cW2orT=ioyh7bChTASl@3OgAGf`g8`7_N#&+X3XH4TO#7(ihR;KpmCEC=_ z*48W%tZZ};R`PTPTIJ7Z1Ndle|zBl zgu%O*A3aCPkagvp^EDj?pqk1Is5nRzHGVb3Jc$b&E;uFNN+Iy&GgnAXGZ=0*O>0qd z_xNk=Aos=FVS`h#J51j8gy)`w+n#MBu8$h~cef=#)Go9$cPq}#-eZ6mnNjj+F$&%! zOS^-bmCTTkY?lMK=hVj9*Dp|yPq>_84T%LrJO+RbT2)L?TslsF%_>dLeAxqFOMOsW zD&elggqGyxp8SAe%u3)q>&hp`SY?1!{@ek2KD6C`b#sPo=*I&Cv`Vr-8YO3B#8Pi{Nx2akJkSy+PU%$( z1iTLh0d|TpJ!nQP)l4=*gnH*)*C$;J^<>!Wx_+@(5!mn<-n3Gq21m+U#K>sOX5@sT z<>?2b$&ZIom3rTFuY}EVS4>sc){Rltc1!%0DFnA)W4ON6?lQJD@id*SMQvW(>2-hd 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%0D3CMo4p2+kq( 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

      (_a-z^er{rVuiP5}@H$?`NNnJO!@{t(sSK?T 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 _xkAFxX=l+` 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�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�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%0Aj9Kte#e)+k5g#LcJ|9x?zI2Y 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%0Ai93})=9|(7rUW692YZT$)xAZw;S(*_ruM&9_1!J zqop8j@}3p{vHf+2MGrKvj~o5>LiOLO2lJRRfO+MT)ufu$2||X+{!GYf9k;d~{_bNw zuwI=^YR5fUBmiWfbYDknc$s_cj1BqvWg)v+NQLerO9Glua`sSnF|(>-IL)k;?{2GL1?@j02AO#2m}ZsKeTRrdz9!0XKxgWvubU}|u$}z^ z&jmfK2}_ePbdC^VX35%h3L_!r6j=;hOW0#pQ`xffg6Kc(n}(xuRqsg_{?6S&`L;qk zGKLHlw!|H-j@w-A9!o7d9^^2+A!(SC;;!;;?z#J2P;^5Ps2Bh1!^ivurvTn87>X;t z(61=CfF#5bFUG?PN_k&%rP7B(tOdN#ct+=grgyy3ODF1MR<=`>g(euuGbhcG@n@p1 za3CpyUW#p3(eppLa^yj2*_J$x>uK~OBS}nrU|avW)AVjroF2EQ%k|;afqDb6)O&cH z$@J`7O5c0Z(<7ejlY)*sf4TIO%Ww+jHjIW=NMvA2a&8ewcD{>q<;xy|qHdj6)WcXCqMbAbjHh86lVPHkNl&~{8pzoPFJMvGcD zyD6DER!sDoSv6FY27Oj5CK(x6Jjs-`esjUk>{v}H{g(!FzfnO6eUIid2G1(ZK4+S5 zE+@I8C9N!^%P@5x`zmqd6IALd&))63{hP8ydCC(*23W=syyN@5&@8Hgqyve2+#Tx! zLyAax!$%D{u>8roNjv#>Z??EKy^&3|X1F-!uvpAa@q3iR;j+>J=a8@D zOq;o>X;dwdJ*8W3@q4BC8s}@+MYAW!5XplVV!t&$`#M?~y;k=N9-=kgxX+#{J7sYR zx_@)GUwiFKOUnI~J)aWh0U?AgG)_wQ8)4PgaOXkwAz)bQImlo4Kw4xK3@!{64IThK zXc4$HMA51N&KVD)Sv=w;f4f5S1#;y}*}bQ4T+jeL`N2yF77=`5q-1Tr_EJVPYPU3e zIeE3I(JL;9KA@1zi??1q`2K4>P!XFsa5H@<;R}Ra`qOBs84*{#JLnVgU^%NN_VY8b zcvO2*zd0P7g&KEB1vhOQkISNmpr_0zIYtICl~^E~kB3R7g_dC)3lcepuFMM^qh!3; zdwJgDdER5CGt|u2J*rJM13IJg?B4ewTYj^bu6@0B{M{Fx>i`zs3Dr!#AfB@tgZWvn zEdHY12X;An_qw8^q^^HRM<^)pnvS(5OKb6u@36VKiRsVPIV@JooJs%TNd12}?q8i? zb4L6v>xv%3w$;flG<}n0IRv}HHFz99q5CVDR3~H6%9a6u7$H`#!`}+3Tt=YKT42B! zE)Py!{8;8yu?9A{W!7=1*;g%ZtR&?703PT3o)0et9aa@O^tR1&vBOsipPSIeC0D0w zewkB#Wy@G@bRYHn`9=DZXz8;f`g49GcVFhpRlYaViLqSBCO`BC`f2q(nV!ccQ{A<{ z9uDWLm2Z4ptJwD)H&OyXT0}y|7SIm|k6Ri-lE#BsL0;K`Y%1FJv|cW2RER%|6cXKf z)HtGwh4#7wo$|5vxXp<)@^r5GUE4*2Ad8!=vRfjz@2ROh7EGDlXfW++T=OaVeDe9{ zyPuBepP#-0;Zh{%-{dF#OywW7N|n?c*bTIsM9seBzWr0!Xzy#kvHX4FrwnQt#^U+V zCI(Dn;qf=`d!TAX%d*~5(5)x}5KW*m2@v_&d{TRZB=*do7$R$44ln55uehPU_bsoL z$ksnN6`nH{UgqLak+I!pe;a$-aB#?1EYr$1|4;G9$j$b8(A1|l7Y=@1KUX>{`*JG$ z#nI3ztTLp@Wxw?KXi63D?QB{5h_BG7g5c??**{s@7S2g&B`Wo>&;kpt5fGM4ph z*lY`Slh()*FUv+_stY>t3(kcsC~dgQ9IyN!T~JHF^(6+Nm+ejQVh->dM@k%6$It`IwYK(oKci z`YtiRdJ(7#5Q{tcU zW%cNC6P|e&jZEo(aKl`LrW^9Q)*bY1X9FjE$1wj;UEvGA7l)H$#HioD>n>L<9UR@f zmrVv(olsQ^k)d@ce@_A_$=E|}Be$0ZqCmh9PY~vsHfo)fpDBSA^5nDh<|~IUn2=k3 z6eC`FTmqOD`#X0#v3<|4npq1u&@HQ?ocMH^+f{At1zoVN+R|?*LfI;czD5!$@@EqZ zr@s%Jv@psoIo%kmrz58NF_bPj?;-QhLR^pTSF#;NzwyqcN=o0FD-9o&Eab2jyqjly z-2@^joOJ<=;+J{~VUlj*1>B~Xi_=Dl1JNLn1%NbmNzfp9F@vIyY9*-}30V|B2sA`@ z+`}4T?seB;4Ng^`T+rRP_3S`w2KTZ`b3o8wm7jh%3TwL^kdaf!Pv4t*%O?*a=B8UP zN*LSBzRX7lA5J?x%}zb&vj2GGFvJEWH$8%9TjyKWuL(pL z0c34-C{g3nyrrRY+f$Yn((Uq7zkI;D7AX~7ulu9E7LV?gd$TAvLf-crZTwDwqUKJ? zH*3)8OTq(NpLZ3Gdgw>I)-MR_+r<$yH4bFzfv$VvhXL0G>xHu8QDr*}w+etyRs~F5 zilbne#<`7f(WGICY(XH!JTnm_Mk7+5xe+9Vy<<~ZAYdJkWnRsWpafr%Q{qoJ?_$ux zALp@eHEwFpAot=H<3F4(V`ya7Ty34aGMmaWB+`~Y?C%XbL!qBK==Sd*G(H-URnUh&UcX7>L^S6(Ewg{*4rlCy<== z6EYF9sQ!4W3rEsB96$)>9sOtP-?SHaEn=rh0QhV=c*>RMH= zX++o&iy?~GCfyZ;I*hD(v$PL7fDzrKxB|=QAYRyd()3&@#nV+EHXO3eMic1h|GTOAuZvaa z6GN-7V>+2)b;2-3?p6P#r2+0kJ$1$I&Y80^KBI5%Mlf8T)7*GW75YB1?Wxb0F_8_4 zM1)F6*%FuRyjzhFl$LT)7cQ@B@=&>U|G2~W6A+!`F^{w+WQbN!!N8s+j?90mar zOf$MwtD_*LpU1xop+pV4*BMdR8>c1uS4sP(cbw>SRdcZRIKX{I`f-?E&_Fk};rp5g)?Xi4#sppA?lI;JTER zPSl_9cJcm-q_cd_7%~fM;<-t+O&q2_Nx|Jcdo!94+oKu8>?pG}_XVig0bx}%Dzz2V ztqmXqm|ek{`Yh%g!2)NN3@kGjm^_rtj7V*}#4q$l&6>ciuzv-uRnQB0Yn0`I87CLs zRDBm|Fy7OKN7UxM^Lncs8ASu(xNc;z-0(HpwlVrUjv@skZXADc@P+5rx&d}3?J~`G(;~1N6?o?`#IoYIj~Aj(4O!h zk5Ftj^eF}0yX*cV!;34hH=}VDSP9-B_d%oi2*v{sYpj{2vMA9twJJt1WJ-1E1Fe(q zUpg>v+^D~fwR9lu4m&?x_11PuAG#h=8Ux?tV=qgD51n6+VY(Z($sCi@bHrvLVr67M zDIC@4U{4ZzCe)>~n7h$%=BLHizp=3N_|qR0HiA4k#Q&Y>{<7RtM#}k0y2(UJr2kH; z+^gkF>r}3|V|WYQ2c|qSG7}wnvH;cGe%TfjkG@-`=3X2VeP5pfLx4Rhi3I5yQFKE8 zwH=ku7>+7^rZI167R8%2FbAawnrR_#DyzQziE}@rvO@&tFZMA~Npm^5LTyF;RtJRR zxBscM>3s`NT;d_i-`=Bi4*dEdL-p7QenQt7lIo*vRrDu3oM1#XN*k60JUh#=iprz^ z7WJ8$OKa6$u$uxvwV)UWaXTj(4J!*z?01Qar`~`Vf;m7Ao?tGxFKdlJRhg+Gdk&BS zA1I8(OS=CVFGZC*o?!bjD{BkdzkJ@do+mExaq3*r6QBOb?;rdQVL9nG%sTDL^rZ{1 z(?PddBOlOzJ9}VJlDe1a0_tlCiAvvhF5O7Udq<`-@{$cUt`LfaG{fHkhAVD7_ zDB2aAIz!s1FslLbn+ab=z(q-M%g9DH^bRI8I|9B zmS`q7g3-DtQ@tJqVdv)3KcSIb7si~~)X67#SnR`L_vk!5UbwTvi1I+cB53!%a>T}& zL`w^kp8Z=YWDL7|)t~59*&xwBTiEUV4o(Ao{ZOc^DoWy$88}(+Or|?Jd|hPT0b=P! zt|GWcCslBjBUO!w<~WjhfzFwyIn37FwMlBS{p2pB^p!pX{&>6O-|iA;m3;QKOpN-j zsqbC+E_-H8ea3$?i2fCBofFZN9edt****sFq|fP~ZB!0{6DZmNi@Fof@e`uUb%CxJ zeA1Angvft(fB)Zd^?#QSXa&pgXwqHY1;EIi zvxLSGDQzBVn#UJ*Vz=7e7@{Slq+rSB}mxb0Dk0){kK~&O35*@$y>p zVh%ZK2ZnK*-%w#jouYK#k*$&>;bAz2OY&8yD*q1B zgrep1yneur0w3Y_6gqw~i8d7>@}|oRcSt(lI}wY#YKR#JzgR=V&Zn{%N4>mn>*h~0nglO%1m!*xDC=y zrUGnQgaP>?C)urdLAE%72&_U}fc8f0sybEt)KcI#$F1_0AuRDhtGilSrS#v(VaUQv z5+677Nfr0O=+1s{2n$>%>X(hZzi#I}|5~0KTXAxm^x>s-UP>q=2JwrG)QQa>-$#$D=ldWnU{ZoK` zhehTZ=fxuWTE%YOt~fJ^CSP>34&aLiz@h~(g&b999H1yEoM4vi_QVs=*yKfUGP6PS zF`r0LT+f$T_^azBB&VJ9!tj*rmp;-_cl^3m~cLak0m)-@{f%? zC?4Bjq!@?$TPUk|ayF!9Tk=6ja;83I83x?!Ie#>aBT z1GIJ>7RX3S;(JICo5^k*9UfOFiMU0l%YU>X*h+d0TujT59C=caoIA!LbnOQ`hh}$2 z^|<7v!Z)#V^Y)Q1^Rx^fXO4=EWq!fVmaF;X{=D;nz9S@i8r^1oS|O!klHoA?R3qxB z*N7~a{&)!}8pFQ~hLJs>k_2GiK`9Q6__YgFw+^Kv3G%+d`WSM#8Ar5{RRK&? zYcaNR-DpX{WbHzIq@0bBAS+emPL4u-!!zPc?!9*&!E!fmqod~u?EANZ`4G1svmQ^T z^)@C58-R|Ul&{^_IH@O8<9;$rb$Qf8oAt?w_KsHkr&nIBlRkxqzDMp#2m5cL_?}IU<+dB|cOi zG)VBtxK^W>g^;anyDS!9>u4ZXaQ)5k$?ZEGzivu!EN}}^seFhd7sIxF1cE2HCS7o~NFTtq#Fxtp z^WWFl&3~PX?5WOjkUUl*@l)X7SzQr*`{3EhgPyB8Yb$kN>RxgsLV>6XOl2e@?26o| zI3^s<_nGIiNK2UvaV-HbZNHX)Ag`cxa`eYIMGAHyXoOswO&e2)3ww4 zUTBA?*|6otb&1qMg*+XjG3HZ!ibbaEX4*>?&=$N3Z7UrQNULgTwE#{;Oy3U&yt;WTR26$vs6BH*NY#r^b&@@W#9crboUSTwEY|Ukxtu86o1&Cs*KQHKn9H~+gj|0 zHhP!Uk<|^^nFvN1i=j4|{m^$tWbXJe(2df%DiJDj)>M*0=$& z#JC{{s{r6pBMEaamvh|ek_}`#(*OBUjb2e4(*Ci2aazWQW&ezW9aNII>v8ScKNt(vwH#P`|-`9&1oe=3V z6|o_Q9HoxqPb%0&2}LqpH3~vAW8!&+i$3OojezF+39aZy3)XH+^Lnd$Onp-ymkKi< z{k8SxyI&;eV;?wE=l|jBz2n*N-?i~XB7z`dG%;hxPOK_Q>=neU)e@^_snOCU_9oPb z)!Id?HCtMriakng-K||(ZM8a3kE`nI7Hm|1L?46a9il~9wimITa-Up30k z2^WF7lDr{V0YM<;o^cY-aJ6!c-sJ*ExUJY7pnj3QsqNRBRe*FWV~@n31gB5mrKCL` zu~ytHjZ_LvuF+?~#P>dD3%FnMqxL?9dpJPjlchMWL^NBRkaqFt|Y$^_vr9ohjeg|Bdru@bZwz1acAc*INRam_O4 z>$|ZdngDMz>@vpbS^Z6bpXLf%P~tjCnX%e%_?r4larx!j2=!>Q_iv1se=`pPuY`s7 z=j;WHD+d}pt&2VEuEf@NJ~|4oj(~savZrjCHt6ZMh&h z_=!0)P6Gffs@^N=a%#BdR&N6)2oh6S&4q$%-7WK1h|z~GwmZALcS!IX{v>{LLmH;} z4)$o~mFrK$sp3k7iu%vm>~Mae&Y)Un*Pl7zZ$32U*i)dwWe=TxAD(%1WQkmKLg>GJ zinE$U=L+Oi2}PteUhF?a6wefy|D&EWIA=qDUV8G7BcP!}YJGUZD!WCKl$sp|UGyYH z`v8P0q($?FSmGc;DN^6mG#RN!eb{RQ+o=Xz35+dtlm!*^Sxkc+oCLiBwr~BlV72HV z7IAL$nw1k5Y$RVjk{HyzLPyNnZ4G*;Epw*XYU8I&G|hhrW+pFwM6#vaY#~y^eA9xqsftN(!H-H6!Y@Pa1MD>iu5m*kinx`2YaZ^d}^PT!fEF)~`Ef7g6z z9rNI)WB46yUv@te7E?<;PoO`JbLVj)Zo^O;r9w`Sx}+U`GfqUsvCUl;hQh|TRSZBg zE~r_&m4vP$l?j+%$84%^QZ{@fL@Q?&zRG5biCzJoiFvH74htBvJ$%p zvP#Sf6=}i2gCu~1wnwlEo(5@UR#I{G^@>0YD*(->NzetnA`K zDj2QTH5LT2Wt%Oy#D}UD24M1MuBQ^1VK19tiAYrnd(Oe!6;Yk&xzVidsi|Bw**xa{ z%X@9+*1j$sl00fB?f>BkITKk9>S?@_Z+#^rY5A9`t?YmAlpMRu6$CQ8zAhX?F32;t z!F(oE@tmEMx~A1Sd*3Ok^X3!k(Tp=zq)DJNvur^#^kvAo;)sD?25a+J5*j*Wsg+#Do$MqE$69<(aFwjJ36Z<_)LwX{Cu5>Y>gf|&r*7k{a(BBKpT6+~a&&$U(^m2+>w&HAx z&5y|L=ptomRgSGriKm6AQLfygH(jFlM=S_+qR|oj$00gc=BUQp2h?clBjRHaZ5 zJW*#_IE4<`Ba9?>nAO(Sw0>u^R*fw_z3}1n#qpyy)nwDXsqKF8xF;^RY3skRN%6^G z=MqUgh8e&PV~c0u=#(8Tpfsufv8;Jaaxc6Xbv4lPUx>TO&`21FL%1kwhAbrZ>hDxNVr~4?!cS9 zq0&MshTP93!)9+?o*#Cq<+Y}UW?nS5TT?xk+V=AI=7T}uJ)>6FVo$vkR-wzWSzanS za813o(qGLpQtO)`d+t|my&Vo*XtN7wEj_d&blQA7t46U(llfJ@l-s&W1~)5fMeRb& zM6O8U;cXgs)WqY?SICiCwNNCA*Pee;1lmEt-Ba$=Bh5^o^>b4lA!_GVC%K@i+{*5iMX_Xw@=u{bdjsN|4yQX28ov~ljR(kBWLV4u8VVyMYGVAn0Vdb{ z&NDOBNWZ-A&ciLv<<7e=#>NMtB*Jl7uzcaXMUt0ld7T|hShE+Oi=Rt241e!0OE{Yx zz0nPf;wcZcQ9?mh9{RoAeCgwfg$+`TVQzbT7}o7>ZI;m;m7VkMWVi}vM^S9^VLT%!3pCido$y$zP7@Rggb`x2$k8-5p4hbbxHe{XDfi>VHQEr3ZQg|Th&`W&qHJh{>K+`JJR=2KP7R|%E+yY>Sm4@&LR z-vv$+!r%PmJHxsnP{fcK=!+=h^!_2}Q*?zsyk$cqmbS&5>irRL-j| z2j$u1W5z!Je@C(Y$5cP>7o)C5Sz14d4)V;AO`8q*SkL{BjAqE%-9AE{OxAdL=ke;2 zCUZ&_EqDl`pHv&S!!4~()AT3TF!GtnhJAi=U<(UH-Qox0UsF-e-*QZtNn%mY90_ltO)=(LU3xaH`k4muY6xeh|2-O zfYSM3aexNjju>O~T8%K4l#`Bv#uaJ}3F-FpyPcs>nB>24$Fl&cehS^5kkcR1$YZ7{ zRHk8Xr5JRG#3*uKRsPt-|6;Vbf1!1Ya& zwNP(LaCI zfrzk}`x$)2GVb5tV(oqrik*>))Bbu63Q5Z< zIBPQGS`rGCPdP2jeYR2^?!wBJNUqYjz_5M$e%YnwM4+m$UC_Jd*|Z{O_wev+mw_!V ziCqU!SH%~NJ?iazr#MD(E+Mkem=(9#MSo?w;NK+PbC3GrplpQq_My}hj{*v&qzVi@ zD)~rDI^Ts#f_bHi6rJ}I11C(Gu|?0pJS%47JeQb0sd)jwgC*OEZqa$mb)t#?aBItl zu{k{w|0#}j;tlRiJU1=%c9KTpv(?UjU3Kse(8+Q8k@3p_vHoePZc{mzYqxJdcxV*B zILE@g&M&=@H(bv;+#D7a`$|?&h9EF3x}V-nyc+e=zafd|=0`15=aexk4Qs2O2OmSI zS_m4Eym^w0>iu{`IKi1hZdmkBntp^M0H(l~kWP$f*?%FAu>W?lm_O#hoR>&UeSzXj_Z+XxPWf-~tR% zLlnC=M(>qEOH&rpn0)5FYIENY779C|<+zX5kVRkyue|DWm-Q(W*u*>Aq5$*-c zI2YP3tRxLM8vRB4$S#<`Qh0&v6p38c$+>tNwcJ();0w?W0esk_)@^GhX>#FUs`3(f?(MQ|4Tz(wucs)dAVB z&&I{;6lTpSER-E^lOl|d`-e@FNW+^3-t~vgTaj9-PF72>zr6(JgP{f36lytCK6%xS zmA{eZVs#A>0BlzT+i-Eahp422T zhAE+>US#pT%*)r%7H1wp7c{e;q<)^ zO7DL^4(Xu}#!f5I4-N1B*C1bj%s|?IeU9I9Rg9^=Pb9-~Iogew#rkR|LM9jil+m$T z3W|4-Iq&i>mV8{_ZFFOO5wv@ z-M#^9O;7*6YGyv=_bzqgQ(m$@H5DVj_99f2Wt~AAF&HphX_7Bz0Q&_enk*%GFw?2t zfe`LLg#WnwxyOrTF7U&FQaL8XKI)*iVa!;Y{)J_FUGXZB{`~D*kp?As*F^xJ6KLQa zoj7i%suecZR~Z33L0Du{N##W#u*Aexuu&Moxf$rRZPuKUiZ&sERd!n~k#N1NXr(K% zZLObdhpUu*Iy>)Ol9CNAk&yTQP3ru|jP=vxA5|UTA~8Xs%>R|G1GzcOUuX4NuU$2I z|KwOUm#^^9#RRNC54&k=@Ks=a7W@y)H{%3W!)m5ExE>*Fr;h?H0w?8KFd913v7)VFaF_e zw-mMz96LbV2gMykWl66Yzx?^=7J3vkohqtg7keXs=;?0*OCfzYLYmE;#9Va!@biki ziU+-9Z)NNb{qjkfM)NywTOs`b%m8y=6>WXAg0>moFTI7NN*YPPSd5ujC-sw(Q^l}w z_%z;mhe&5iP~FE%rXF1H zal_a5^0ay8^1cq#_n7JW4+yh@O`3{zOnI}4nd=JoGmHi+4w`udPVA(X^$+)q3Rd3C zJ{4PawP5_I7i<}p7)S>3r0kKb}l>F#wh<`ay<%GBp_ z{w0aK?PmKxCf3IafPD@0Ga+qb%&X6VJXcS&)UP%sUrURuCi`-gbt&=gXoXwiZ$gYz zvu>jAYPi?1;w_{cN0dLg4sn=$G@|@vV)ILR}=@s$iZ?(!ATGyuuh%gVo4DjW;N`%1Vp~; zooB}lj;Uxh53#tv9FljPLW#*M6ElyGqJbS0%TdJso&$50Rf6e&&0PkxHw?-QlU0&z0&wR>ebPN_q||7KtAH9sdi{9YZdV&Uniu z6P^oR3H*`K5c4BMYL5FXBWGmIs?V_I<3x8;G{cXiV$g#_=jVXS7_mPMhKIFRzZtq@ zO|l``1Bkd56Ep1B9x-NK1Ka12JHeSFNj93EFxycw49ZQeWo8<1QO6SrUQW_JYN z8}AL@=!!rVXE4@&Oi+Y}SJh|Ks(l_Q(tkQHaBvO~tW7SOt_d9&MSj8jN{zjZT#{UF z(of7Hzst<*9_AYd2S)>7RX}O1A@Mmj;Cn7OE+amE9ZDv@ylDD-<`(l0e-4>@%p&sS zQv(A`@zoc;8Vo9rY^!1HtB%?=`|JE+^zP7DAJ(1kf;-VFPidAH^v{*{(6I_4&v}i! z7mP+eStlSNI1_PL`=>& z0~bWmrZvJ>^5*`+dUr|M5#%oC1MNASP34=>IZ|U|PsSCL<0SBFZ~{MWXA z1*htB9oqbqzm4%|r_z`UT#HM zp!r#|UCdpPU?%-s9p2&r*||mQ9KL0>m8tV3%>E)q-z!~EW-Y;{q4u?}y)z<$nak-P zuPz&9m+AdUdGhSrN_Ds$;m<+6J6D=1ogZ?GCnxsMEG3?AjeWnplC*Tq8NdRDou6|* z{~<+VPE+oz_XAG#ifuHm@F5boQBTxKME{Jg(cF9@7M6?Xl1t@JdR`>ctycA!GcDD@ z6ThuP8N|=mE{i}L)Ovm3&y37v9MU;3o}tRQHYv@~^*+j%r0Z5g6F=Cv8)%D_Zcg60 zGnddywtqCtNikdHGLC3>Z=xeuzRN;Gf6kzXu<-6hd_R9FLDvn3rVz{=@TjrnFb3%g#T??VB##kd0SbV_?2kt>~W|hZDvcHV* zoMQzVx|v{G&6gb0nrESW>Q(P|zL=Y@k8WIl`)uO%6&H)rf6jK9nqIODEzp5dak(DYTIr4#&k6=w%Fe%#c(K|_0F z7H8?K65x5C3V;%37PAO1G8E%*$x`NlklqK#{!X=?20{a>Gud-qyZ%`({j7)*FK9vV zYY|3x8-t=BV|RXtaaIKDDLJ?~JoP%a5BH6ynk73jkMQcPNqklO^Zst+qkO&FvcK-q zi(Wk$QMq{dIm}Y_G5zrN>-_)PXF7(Q>2c(=H{m%?wDxw6c?l>~K9D;~<~U6$-lT@1 z%aw04bUDKnFGn@0i`&zEOS4P15gy`9Il?6Kc=77Rb`(0gx#3n^Fg6VGkyii;I%86t zb2XaI`2(JS@!t3y^Hu7LScn%Zb&$oMtu0l6FZUYoik zd^{yR$r3;CX3L`}S}41KA{J=&u}sT!hT^_#U;p*OIHtbtlX;<+^@E+vpgoJV2xE>} zs@l8nSLu5?Bf@Jbmav~rKXU}=^gEl~uR;%YN4)D=SZ7OgyIT=$D2V%1OQ4jTf>c7;F>EJ+fCx{N!M4ur!|afrJ#6wu_opPM*`u#JmC=89+iH44qYyy$jn{ArcIqe}^@B}x z{}E?WJ4vrKpYxMJFLL067!QQiy6TD;6B3%tN#+$|tK)&DWb&)97ZKE?eeiHBDnEHy zKf+M_S>@h+U$fvhe08lg+SzPGyHl!VMZRk0f4?w&%zt$w9+mP|a2IbE+xY25IP1qj z>)O_mcX{SdE9QsepR?pfiY6J?KB?cH|2~#w)+n52VY7Z{$tkNMG018vsNWcQ!QPkm z#Qz#q$bejMRXYQ6f##E?(QaX}4Kclpppm&WSxxHzn?8i(I>)>5T>yZGEYN2pgw(yH zD9ywK#eyuT&D5pMp#}gr4lO1KqNSQdMoyoDV&{K|6>pwQI0saNMl=@5I%(=GhrJ5RJS8}D^ z`MUp8a_yF?(zm1bZNjlW}ASr$Ti z>Rtxg#+Ug;okG_1d5TqL7_6hlYMJUT9wYEyR~xJ_h7LGcs%PZ z6m?o$$U+NBewT})HnSH>sG&9N9#)^M<}ftsjJm^@*$dG3EFw=$u~QQgicnt7K^*Y4 z+;gY-gM;|Wnr-O|IY*QGuNY?N=tq0~uU;MX+*zL%|DW2(f7aDwT`ssch0#9vSlEY_8jDErG-On89DK_j+tbl4ihf*-@s!^n>%@&=R{ik-7k#prmsp=FE0kLV zIdTn(g}uHL$iji4rB$tIgfN>`Z}~rdK*Wq7M9;Nc6*kKUm#Lp#tn^QaYwYe*k2!U* zrp8^0^x`~7Kyql_&At2NgRQbKnf}nFqbC!e4EVxdS!BDIa}Ou4uKDZjc7GW6FYA_I zBB#*tVPatbA<(#*{e%IC!>2t*Q+?b)dt8QRoH5K%2f~~MIm=aHd!D~9*hC?Rh6(eX zAM!IdF-E%KwL{`gXfUuKN1i=Fy}>MDR$@Alc4LB?mSBo3He`|-uK;tXe}FfyPB=58 zuho@Mpto+T_>A$NNI6<3z0s=caDCxdZS%w9FMZBsH$wYJiV^(yw34yi89VVLf8;hE zn0z5QXdOtLswZ_QAvZ22GP5Ve85r<@GN3>sPciPGBPz|{b&!L`14>5?=lQxsOSFfZgT($my$5vOOn2p|wJ`iMGGr zDSk_fpmY(-FqI;5Ij@9n;ZLK{;W-cLxAhJM9w2jAWB1`uPiA^(W~(6Q52x{>*I8Z= zf}qfNB{Uw<%+1eipT*2G@rkw&`aCxbkR6G+laKIWCs!=9+VdbChUPB7yB)+J^2yxH z17;Ev>co?n>7`k|E@qT78eFh4SO)MDPv(M4E*1V{nxg`|Z)SA638PA5_1@TArr-Fs z@BioUHhus9dBS>(yJN^9_8E{1v>*yPyAjh2&3Udq5kj1n)d}g|jTg_7WcZ;^F(RTo z5d%l5nupI948=$KvY3Ui5)~1C(O6)-00>Nbzq0F?-<|yF^mlZ%+b%`XuJd{-TfT@V zvHWrP*GHYtj8j7XT$Och48iyQZS7FtWT?Is;PO<5C7Cpe>Td4MPR_e+AVpfq&0X}WOw3T?k@pmc%OX2-1qw-^#9+ZUAd)gF z&HfiEVq(u&T`mqmZaaYQN=ZV>Il1jTvrN>qI28mW0gOtPmWZH|WOLckiM?ceoG}p> z7XecxS|O?8_ibj@Pu#RPl(7}Z6y(^EJKjmzUV6MpYa|?w{FFvN^1m@!>P|Fkc9ix#s<_&Jkq-9R`(+EbrWhMNT|$b0=SSlyy*7Tknm)Vb@hA2(ondtJZ+j#E#cu!k$1&t=KQY|pA}olr z(S~6ZL+2d^b8+QpF*{Mm8pJ9+Y0B9Am52tp-eDz-b) z($k83U~SR_!|hkaROwS1$bF}FEr+E`KFWEGl_(Qn^@GUobGf zSU^u8FqUdULGn5w%Lu5WTx5k&9AE_tXF@QwsG=uMJmDS_Nsp_qEBzGn)B=<$M24Fi z6k{kFtG_wMpakwk-sBI|*<7l6d}HqT*eHP@B&Wi68t;tc_{JCdcJs}jZ_a28OkHzg zWE8?h8lee|ciy|_>B7M`!JP&&XG|Z*a6b$`Aq9BT2lZ}~-~xYAI1w}GI98gSd(cAe zy&B$T-}Kyd!gS*;ur{KNNq0eo&svoT^OUfyLfty2uD_$h+ePN|weA8&vp-Q~Y>A zrmgHl)ZBG`?(?$!eyUVIKvwc$Qg2^0{Joy>4%$Zz(Z8*7QU&cFSDBil*@Nd=;S%B2 z&>Zg_AMfiYsw0SR$p#nofFhiRfFj{VR>%XT*UoGdeVKY_xqmX%K zZOWkNaO>PB>zWnh{o426Z22r+(f>l5FIi^V*wcU2zTq$*zJtAlT2ZQM!Pyvi>#GLi z667OzLGBvoINEsfjMO|YXtZgnofd|l{&=E!2nR4J%Bw3(GJzKk`K9~e6#dLVCa5$M z%q_nQ>=NjUdH$NnDV(N#Qx5j5w*g7#MH}Bq7260oZBB$F8b?-j-8c!_;j2)IBeyJK zf6@>J$jthR@l=achzXk1>-&Z>N*V=~;vRa3$&>Yl9{Q;K zg%6Ia{2#YI?1pu$?`FwCkasC92g;bkWt))2;LRy?+*bas^sWR^kmX)hR*;S5pJRRb{MvC(U@^IncpfnyH@sXbO z^Uv%Kk3~B2zaZE7f>Bt5O(t(LoPv`jj?Jk}5c=B3K_huGSw4)yiUhF4;bojzyNRBA zC=(MSno>|8hfo*~e_)zRQ7VS*?kTZE_G_b}KC;OY47>i4Wqie^bB1Z0im>s>5sZ~f z>>tP4Xr76{0iFW>vixAPpgaOy$W(q@;q!8EN3$uiFt48~@32C@*Q@6IVLRCBQ()k; z5YvzJ(*o^^A&C|rn-h3N3$4!VDW?n{ST562rz_7`TEO|v3 zBOQpxkf0Yja4AjYx|N@_kXWd?9gv&UR7LGIb8zm@>ASgPYZ--y6)!V+sVA%F_N!d7 zb5@far#WTTuB9admSzEZWEHizbdexQ8?*zbz$z~G!2+-pw)zePvwYK~jb!L98f1!I{H0n0W~C&y zJmiqInr|Fm`_^_;*}9C6gQ^wi_`Q)gsEnDL2j&<}^h`Xm+N z`iyhfM5OpILHkPQZN^%3l9wZEkU2YbM)X#)dOYgj-&s7}X&{lE<&=~aAKI`Ybp*=k$L3_AGms0Z5Mm-3DfUSzh+T&Q zDn32L!}Q-rXY4i?3B9m-9=q!BRsK4dwu;U$B68O_mE8#FtdLZz!7CVfUh+x~X3-hF zOi&(M@!FDVxhGNhEH=fDSLcg6x$OF^L02+*=!fZc+pQaxISi*%Q0&^|k#72fTzZNp zCjfzhbqSYsQbq73t_Q`=Nk|1b;k=jBtqv66yohprzJqdD_7OH-Wg_ueEfxTh}~+cP>!RihtbQ@>05uvWX5%EC&b1oxOsTgI+!>I z&xF1;+e*C$g9eNDaaUI4cLX+n_dCb5n#|rW^|YF>LB=EU!o)TcS+NlW($1Z+TS4l{$f#W8<_?&POcpQMJ5>zL@`R;frb~o4Va2!~LM4R|Jm(Xm=x;b~#mwk`$qu_Aq0-wC%c z?9iDUkoa}z_jqEoN6JaCgcR>rI5iR|4fC`+lvz1haz5*GD!KMXb*S5|w7YeTFyC9h z#YP3vdk%v9nX#VlpqXn=dhgr z{;S7=YVj~Lsv7%n-qm;FQTAilTj4J!=?5ndFZ9rNHj7`P$#Dd|4LQtr! zBvbMsFy7K&{%E-Nv#|FA+roO)Tkp#A7FwW42meM^c@DS9P#7&K#}7~YeF4VueHB*W zhXy4=DVM|}JHnHm-^G-Pk0Z1VNY4=gXGF0p6vCE-><8gR7?rf{_2lT_KRZ*X)ufEjP^>sPue~3 zThe9HB#=1>W;~fX92{Y@3555iCzm-ZnH6=dK#j<@b$i!O%+Y8EPhnK5r+i(MSe}tT z9~dWq@CB9D)(sZ7`xu!Bz~d~#RBl38clE2#-ews(`8vnxaddhEHoNuzqm&$z9MdeL zt|r?MOGDkJlImntFWUv$g`C#4!bQiUsJ>S37(2lLwh9CR3X~F3+qG8$W2fSp>`3CC zD+oz!g`Jp~4`jO?FK*@=9#>)Yd=TJPk@)fn|EwA1cIqhG?+t?YwhwE%?5f7x&C|C} zb(vgiEcz#|Q&9TeSqq^Kp}fL=KSS2dD!&r?{9J^agL7QR=+Iy1q7yf>7FL&xF_XXK zT-R@@|2o^4l^;uQ46xICtTV;f-}3~C3AC{zRR!{R;IBd6XCt(svuArjBDvlt^uwCg z&jZ2&XxEICIGEQXGZwWgB$riXqEL4JjsQ!qf@C{f3MF(gz7EB*-h+LKvj^boZc?@l z5|Xyf49&uzbFby`0vk%QK7F7BZ*&@Mk1T|zFjs(B-B5bR-=qr%Q;FiIr@o%NCGx0q z=L0H7!NSXjpKq+R$J&aR3)p|4SC4(X!KMJf3+})Yy&=F^c>{aL zQEy=jp3@w&GFdB>bX5c(A|h$!lyUP~)BZ9P?L9I>TlhH-=Ifnb=zCG4J9?viKvK7g!gFkW9CrOX zu9F*w0cld|w6C||5)V(Z2qDpg1?EgYNc_@tkx%JYj6SkTg2y7+D5s7$&JR~6j$Q05 zu46-)Q&@v}!K_SLGtIql&w7k7Mi>M_16ZkoF*(Da%svR7wpOg%eDV8rBe8y30ELNF zpNVsY9((-d5^(_5c$cWe4LCGKG7CZt9xcp~XKhSGVjAGAIX1we#IymX$=!HIy}+z${=Kk#exS0OGm^)^< zWjO$B?%J^(x-L5XIKV495OGmk*Q&eC!Zf>D|7!>Zz=R+pJ=w-TOrNH5h#6wlMvK8z zJ~rQB6d>Luv)NIIjo%0vbpio4;_Hb-k9@yTU=^wK0uf~#qM$N(V?)uHY(#qLRa^fh zl}G*QlNSo+%z(bLrgPHmi8f7_9w2n@ioT0ESCQ6T@#KhjEm)i@hl1E)DKWa7My4)W z9aO@8y9{xm->d8N(Koo+cVBKp0Bo=bfh_##2?Z?q^RA|l>IHrk;ltA|!8r7?RzMT( zPyz?!QRf}Q`pDrlqcm&{*(@Z*u*BvLq~yRe5R5u~y?AQ07y~t>0U`2CT6Uy6v}$|> zfK^k-j*W!{fNXJ@)h=$PL7UDdq%lsixPmk9LEyNF2Uwi!NBZZH1TH!qaa=m00UB&Y z0;uU)jNm?HN-Vj6O3Z!5iLX-oiD1RCN(JJykr`nz5z}YJKYj*$jpkF$2g!Omc8WFfeX=1^ zijX3zTDcmA3@B)sF*AuY;#1V5fCL1v-m?x!RU?qFEzX;`*yd7-Rjh6q=R|8r@d_bs zu?T~T`vFFNe&Lt=*6Mf>I;jAN{VwSVBR9~>SXJrNDJAv)c*-$yMuZt@O6fMlC(*89 znJY1Xt5j>d(bKw0q>p*3Su4F?w>Hs?${Gg5XBq*XOS1DtbKH}4Nmx4dc(qm%&Y@YsD)~|7Bb*(Hw;YSM0J;4ljmp)e1 zu(cOHPp31Bew@e@vNGyNMrArCy&U`}CzA~tHnb~~`EWFBngArI8nyR1M> zK%q^5e0fMhy*(QXC(|WWv$8Ru0nIF**Q>cV-Vg>>uoa9u(!Z%j%~Jo2LJG0qF2aUE z)oggOiLDqgA$h2QD{r~N}+BG{3{Cqx;;nECFA_TMrXe<{u6rWyZ5Dql3x2{^O|szlSxSxwU=n#2%VB7onOi^TfYH*#dJ~}F0+g?8c>&VwRc;-1#HDo|NdQ)7AZ0b7U6+d& z%@cD#DKEB(G-v<*_>9)u2(_zziT^&0IA*z5jf}#2$Hs=8F=8cGr=c%j@v*zkV7Z#^ zc#Z5Dt79cN(M$R**4t<3FT~Sq#YS2!J*!WKa?2g+@F?bl$)>voU#pWTJgc;`9?+mlLqCi|E(C*kZe4%_1hD z+B_tZFK$qUhD`N{_nI;Cne@0l#?Wgr4FJot1PlKQPOo08xZ@#Ez@4|y*;`B6UCT$; z?w_?WEfeLiSb4D0*v$6g#Ge#p^Z3(GV(pmLUwQkSTMPT(_I=sj?D`wax$38FU-dCO zs<{=tW?ToIl-+K_qr3e}6=29?>Y6C3Srd7sS9D<)>2!h`__5e$Qq;Ycs_;i(fW7og zx-i4>d&hm z$5_~+4O!2uY;93BiI~h76|9|DoKpQXT7`)7tndagA1)FR&a)R7fIoU1d*)XF{oB|7 z$!`DtmP?g8zP7QR)@HC=hGFXB)hj;szNdApeS>-rvevBLtub!h87#+#AD<&kz+lpy z697ZRC@Tk2YDtZ6%8sUw!=0mSP`~apx4wAXg}&{Gg z>>c?VlfKxT7uOdxGf+j8A+KJS!~WyCY;{^b5h`zW>CI)kZx1}WxW+j9@8f?IKDgG@ z@~l+BhP1*xccX{?Wyeqc*`qUubh$IVG4bI5lz>!AJ_=p@NqaAkWKhfucS*%{pkC&@ zN{$XHJ;h#`sOef<59-Y%c2J@54T;-(g5qfz{$=_t-#6mVPX=83gB+|M2T&I_CzHn4 zLpUFXW^w0WBPPw-9JUp7X7j}(uQrvreq7*w|JIW~iB?)EO?~2pHadkCf%e~Ls@2#j z{JWtwo${I&#z`JE^ULBxL7oH;FTu^7pD$1K0+W&tPnIX38(>`+f|;Yx62`fn`Im1zSbAK8-}+DpW{xMA@?^XD&~Gzo&_@02MedFe z2{GiUzAU`6P@o?odCF#Lb$ur#ESc$H<=Be>Y(KA96K@76izhL}Vg}10 zrcdfCE(P^zaC$S|a?Sw$USwQ31eDKFf*BjnQ1Swy8&^O~Oo~V^R_D&JC*91v3U9#+ z`O~WbGa0Jpd2o>*L&*SYt-@3Bl_f#T$5r|lRv-)SpL?V7`<=w@YC7i~tq~1($3Oo1 z`_11WW$&>;xg#+AS`?c%iELcBg95 z5~zx60_og$CU3GAXCPw&pxie#!MV@{mNTcs^_jA=0DK8rk_!S55WE^E#$ljZS9X+o zGGtsys9=c!aZBQUkBnmIq04;AxATnD>8>wp zL9ai6#UxM5dx&lc&#ukg>v4M?yE#{c>8*J_{wQ9u_bp;#Cb@egtOgchJT-;MvSx;K z58!XWggH_NeEy6lle_sdRH)bf21*3u@rttnmvSBsYx-dZD-6+RX$u3I0^jO_UUA3e zQ5#(To+n;g|1UY;;{y zhlqzdmG5RdAIxPkXZN=68+fnNXb_4^g6REyw+jk`3H-iYs;%z}#ba+>&b#d)9MEqc zWLFnjc}s@=d0?#h!Oky~6^r}*`KEUVS@gY;_rGbNY&|S~31@N+P@N*S4SAAdq9qD> zjxw3zkcM&%>5`K3AjyQRJIQFDD(`1^*!)S-(qXI71QRcq+bk!VlY<>ZC0?B3DJhUd z17tX4TQ)LID^J)Zg`2_NCt$%jFK_-IzTP`7>Hl9J21Nu#MMVQwxVN&Lso_S&ZKh_1 z3%9vPS%Q1u9=R%alKy8 z=XE`w7aHI@ock45vWoif;All%m&13@irLgRni_wu zm{8b0dl9wcw`ZeY-}JsmrAqjKix0`wz3ba(`{(>It=V1oH})5o$VA}`)`eg)9nu}gXei14upj4tf(%Q0r9zz$~)-IL>%ixuUw7)q1hZDO>5tx+W@ zR2S5h<5rgr(7BbAF?FB?f0q(CVQ|_XdTAVHfn{0@KuXZeFHu@>pqt?C@;UlvSa8%@ z?o1#mUpPZT0K9y+SRu3xDi2#|6#o%Zc5v_Co56osuHzSgixX2gRpwzEQ{>;eb-D*B zVt?4u-e{H!S=cP_a?=SQ^BB>qqVu`%$_;qA3gUC7-U^7y@SvPFyAGnSNA@MS3|hzx zW=HT>!^p~0ZsX01ah~!aQjUwpKe4Wlok%#8G-G`V?@Nn2SAet70Om2Ht< z{|6%llZPXOvE71rL+~fvnt9CKIoRn&i-*VOa1u<2NQm`H3PdNaeyGza}D z=-bY~eO}!NDVy<0tysm_uloxP#`7tE|D>7e$scIIlJ=nRj7?ABg^Q8H2}1s@162y$f1t7Ky^;{m?eI>W_V|W>)hJ# zS8OrYrE&kxW-5iNwyU4P81LfR!}X0>b%Sh82XYw3=3Hh2#ML2&!Sd^wv!Ndg_k6CE zpE8K2mhv)X2VL$#h;I(DLQF zIzWKl+bE!;CXYIAidnhTT9}SvsX{i*OobO1ltJLqPw((P(^al|O@&q=P>-hZ7B~}- z{ZjXs5b;_-$WyWb4>w)H_fx!jX-8~~zRr$wkbR56%lX@9OhgsQB#E1%;>Qt7=wDtn z!Ef!w&rVn!vH28RRo}NwDhT2eF{>&aeDuW3;vMP4^5g`j7a#L@I$lO#Z z6td={dFddUOl$*SHb5)ce4D=jrCg46*;-T6jS2;SU3${Qz~^lOs<+Ri>A zg7r5CYw79W;ZEYBDBz`{DE$+S8j`r%U-56yf|#$JCuy0{C9x$biZU2K+2F*Tfouj+ z)z)lX-X>JyLg2)SC2K6o{De21xKU)XqM9Ec?_P7|%m6y@V#xKAxR7RFoKh{NhIY|%%C8!PQazhQ`2z5cv z!?_ha31Ia@3MS>U;(4ugg^is{cb1DiDq0^_Uz&#<5AU#yNU)^Kp7m+rF~;n7+ugl7 zyRfHk&cYmIDR7UhmVWP-JorR(+Sv>^@YO6+^!hhQVz}k+pj*K&QQD_-mBUx}&npeK zO}_cFUxzMxlpnM^&mj1m-Zk_H@bl~n-Ju4DYK0VD3s!p@pjJa!sPg|QNHL%Wy6XFy zab&D^5+MkvX_@u0egx;E^iuqIm34U?OfK9stwOx?#!u0l&?S=v9>&u~Z&8 z-kbWu`75Iy<)2rLYWtiW8-7|A(G)Qm5_b~)li!sIz1qL~O+$cN(A1VDDHPhfp0z0Z z&MeR-(?yckuid8d8X^O0%2S~Fu%X`VupMB@v^|`E&hz6@`PsaiC02TgD_yxfWx%}h z9Q)+9OZzsa5es2LAKpB@t6JBb>{n`d6o0}#I3TIezA?_=W(>lCJA3Mh!X5VJ6Nld+<9!A47umCyDtI~8%p}0Dc-(U4Fy}#kt0WEIb{ewy zFx{K+G(f*^Ykb`$cvQnm!~}%`;FPS;7&;uo=OW!Q2EC{zX9VVh0J7c)n+YHRvfQtBYP76!?f{+& z4VEwQbT=RK)XPjVuDRO8_?3GdzxR7QVef0qm~o@( zyt2gXrK~{y>k!qhP)hv(9nEAFq{Z$6ccgu@;J{+Rmt}JUn(`DX0#L|PRfMn196|+j zRz$%F8v0#1G$2=I%tj3tWteX?^T}b)ha-E& ztg3wFm{Uq}{uyXlFI7nbW-2itPE+^bGW@w*0r&F;B1W&o za2A4s1kNU>%$2)AP(B5L?e6uZnJB?GPCc>niFaOose7ArAwtR%+cGGgpeg91y7e|Z z`J9fBMe2QJnMm^rc~*H<-ky z0xqya8$gmE%pM}_)aU|=))4^&J5uh>eY~!f8QHt)_IWv{A6Oiu;9z3mD>V1KQToA! zjn7X{DWcX7_r$h^%DUhyKLuS|`2CE4pibmj(oj?)0fk;a4fTtDb9HNPCg?2w#$U3zCCA$W|E?^ ze9x-HDN@6qz8tBY z?1k&SpszjWjeg9ql7hI>3xYBmzJaZS2b@P|~%YVK4HeCD&hZJ}7O25ygEH06swQ}_aGpIEH zW3_}-*EKyj;NpoJhQWtWG12+_wV+nt#hUXH9POirkHm>ieq8)|YkbN=NC8eGJX@X! zHkah$dPr95mRd(PeniALw^*6GG<`f-$0NoqIQVp-b?xWw`_jVDN!c3UZN|I`B;ApIY65Fg-5JgHH2OTH!W{yo_wvPd13$SXGIfSm>`{4^07JJg;hO&}!7Y#qlTzEWx>MnH%kSx8o+t ze(XFzLc9mcCys_ncv^4+fCl#N-sz0ar^1}E!`sp;5V0e)rZzEznQL?~ZUa8N{$25d z2MgpBaGmz1IqF!hR2VERCeJ2|khrG=NoO406t7Bs)Ei0dKi55BA#*JJS-1mqmHp}W z;KQTPJ3`IL$0p~!qX01R55u(u0x#ZokYRt^ETo;3lQ0tEXK*w`EM^*P#&wv~bVp1` z&J4-#V%E!L2Cs)thaXe{D$XA9)^55(uG>3pJI8VpYt^X~xzyaoGK=xUtlbEaMacUU z+kNYZ8JuzTi*I}~(EiVzXnM&@e!-?Rgw$HRs9*>xtI{OK_orUip*Ob2uU)RPefoJT z{J+%@e<2sC%7L7w)l{vv`BcF>KGE>L84)o_Lrve4Y2htFxf7@)09PID@>?eLHrn>`bn}`N!vJ?{WJLls&KW4GT+VDk;&)s+RU-CFA~zEB1F|iCOruQ0o;q2{mf! z|1q7Sf7GCn5i==S*XbXx!QqCWdD?UrZj0t?V`f$sH7<()cS@#lCVYvno{6PFlfr}` z^Z-+PuXwL_Mjv0Uxj&t=(39xnTD~WJV|{ttW3=zCRJiu@=K?I@gdp+y4IFABE1&gQM4ewSA3>F3oyMJ%?H7fMb@_%=P`htClEz|w?{pC#ld3F(!j+)aW>958d#*^+nk|eJY(ZX1$!5LFstEj8SHX!iQikIq6_?Zx0QI& z-yRG;NWrTAQ_5FUH+drD<7NHGU(fTR?w>R~9;f^2>-*7*tNvv5JlxZJ=Y7FBC#ANvD(zcxRi4fDsRu5W9-gVa zHb!{FW`9vdH~=oPKWYT+YqE8W*lUtXyPt@(>W@UoU|LDPC&X%WN0dvEbx2#6DD)ESVY|EMY)M&F7cxdz|1;GS0<3} zw3-eywq7g2+fYq$>siB*e{{l6U$`F=K|ZPjUU_rdX*W&W>9cA~d(3ih%L>}7Y7v0{w_&fnkPv3y61VRL0jp+jDfGP4MfU+q_Cb9;7 zK)Ujz>_{g=HUA-^VhN2~##oTR?VbUsDuJ5%8xx(>njTw5Rtd-`m);y6FSoH(GH~O* zC=G+(tqU&xU_d;|+=^dDfQ1DKZd^sT^9V7T?7Qg?Mg8u59=3uassSPaeZ5yTxrfRQ zaE*6+;SCV2C;}>HVi|v!2RQsq3`-}eD5(K0Ez(%LxN}N!3f4Dc!7=`6{E>Vum3|hN zx^tkFk!9`2YxZp}DeaRQKFv8)X;xh!*lYYqKK9%_5OiZPh46>7t-v%l{~h74drH%+BhwE(pIuLtH~xO-!KeKjsY@rk8f9`GskaDU z$P(7hvaN0@TA~a@=W=EJl$T67OEE7gYuTs))p%zmG@ule4ncRdaNXgmSte)4tLo)E z^5#`!FL=b57SlA_D(=NPAq2IAfwSV>9$5KUq%V&}I>ZWGri}rdt~t?0Mr@zc?}KQU zb~tj(a_q=s9v6E5>q5EzXpa1!_rH*9dkql$hPQK+thS4a8$gxC8oD8Tl{t`$SbPBw z?Bz(T92Yu^rTA5d3pQk_KMKnA_Cv2!(pw5-fZXX%M&yP1?+Yx^wcVGiX`Z z0xTccS6eLIbkRwYp3YQaUd+1Sff7!Ko#?pyRR(C!Z!3lN5c!0Fh&e#uZu;KKy-!My z6zGJ{FA@I1w&2^CPerFex4t7Sg1cWGlKQWoyn-LA;wnduXzSwrJ?7i!>Qxr}~GCh`8{yR#sDXB62U zSYYLw@F}>OAsBygQ}Sxh5AFBv+m44#*`F`6o9BZXGL%uJfVSL#=|$Sl-gas|i&E@I zr4an1y@MC}eEsC!?<`sTCTq9~>t-d*|8=F&Ui;Ir{6Kq*i% z8*R`i-5>4SFhbT*)Ec1{@|3kZ9Rd12-}FFaMXqIz28JK|3pOxjUArs?PJ;Q1nYHxY zs25o0mKwvG~wPEm;9!HNn?qBxs%tnDROPuE~iH*jlPsWHJ41wN3VeLR6il zp~qJH8?0FNeftx7xu@duUpy0(Ed={ywO7T53@GDuPQ`t_6o%JS8g{>>Rnhup0DJ^Z zjUUdkseJS7Q`Y|VjY|i>sA}q?CQiX= zUFx_u!zI`>_;OVOz|-rx9DFw)Rv3a5b}7csur~1kegho*UMr>B3EGQMfJl4V0EBOn zny2~GA4JR{h=oG;%9To6!Xhr;&Lzy*c_mM~-ZdWCm`S(^`empE5;%}!?n>xd45;6| zYoE>1GTRa`JjH(&|%JiBHfxVqqxl8_M~q>gT3dZD*L?#A=U_~loa^+k5(94b7mZbRHOKfI&U@7zaz?9YRdW*lM(lfe3SZ!EUx8SePhBH zr0ze&9Q=Lk*+Ts9r_^iIQRj{1=WJ0Gzic`49+J^2PCo%x(2s*S;q6B8$@01Z#k$5{ za1{((ya6^o2FH}b4v6zq4hg4&PxKDK1PA-D%sc|A6h}exK)^n91=CgGSzRLD%3Q=5 zM_e|o7Je6pDy`4r&Cn_kuHI37!FinBx}i)9e!}ZRR1?gr19hXgY-t(+IM{Z)=#Tcs ze=Alw-1RTLD@KXKa)~4-Q5*5DB5sbvdY>fn086xQy4R;G5CHtN<;%$#5l24P!WB3; zPe)tn|5SOKv<&N4gbZlwtpoZ#*R-)3`7LPEr4T98W}@%Vdm2w>|A4f+RdZOo)1!Hq zVGGzoK^rOUopS3>!wv3xBEJQXzD#+Jw6FjJm6>PkvE&fpH5-NKlCn~-gP|d3%Ik>D zHUSrTvCS1(ep_W{gJiWPoqO-3t)AR(M*;82P&$mQj9D20ErJ^%A-euPx>*Jsr!^SA zv6{BvJLg6X3NaL8k|*NFVIB+(nZD^ZCTKIwLN-?&_1cV1ibM-qRfuF*+x~g>bsLQa?UOJC|zJByw+>83&Sf|phD;%L4(TxtuDSGqU)E{ zSZOeRn;vLz_;6y97SeM8uB8#=4n~N>fI7=xoy56nq~X392Z4F?sjb}$#hEnUjwlu; zj!&?O#?w!9K*2qt5-Hf?>6MLpgA|qL%+hg#kEd(rJZE3q9WpgqCt}ofuim2jG`K4v zd88yntAlec<5c}RJU)TBNJl9bTlx;}9iOh{magJAA&W_T1ZE( zE5rim+;}+_bGi~+_ew?uaNCyJ>Sf)U8L0TU#5Qyi^Hl=MjNu-Rs{wG8FUzS@m=5&I4 z$Wx-6S$%rHjVnj*663Vx1VbYFL<^eeA33T%u=mJRr%mPosnd%zsZ0xjZW3W#>Io^X ze}X}i8X_{WEvBdSq7-3Gp!(mEuH<~$ltQqGmq(3(McrLuM^P+P65x<4KvzJp)VK7g&1^X)G1M}ep-FwoT<93e5%S}=|EtAb!$>_q2bY6 z*bs%9jhnj%4*pzw#D3mMk7fjw6PJMpSH^`7jJNTOhpIamSHTnz0(>gt+8Tv=iewSv z0#p*LRN1}=QE>j|^aSh=X1IufSewgya&>uhb{O0@HD6{jL4!| z2@FpXCV@qD$y}GcLNG;YPZv=g$ZkUUs<6`l3lnkA;>Z7`qGf}DP|zFXtc#!u*yT~1Q9}-*9&)xR-sUV9Z<%!(kow1S@7^ROVywjpQ!?{W2n4Bx3|%D95NTqb)pB)5*+) z=jzMJSpw7o)~ zn&@^4k%>2S@I6W2s-i+CY$g8=c(J&F4lJI=`L4cWQ0B#yEP0^;jujJgNk>;}L?Cg<}Wq?IjeAG1ykvb-C)zT)f_)xY07{s%2 zpk|0nmv#Qr=gXX2HnFAK5P3w5jSE^`|11!aFwqV0)88{fiB7lH{e<&CS0IM+oOOma zp>KRROH|5dn$H#hdFB@oekv>fnzs2h=Pb^|E3HSNA_1LH~U%z;)L z7XgGv*}Gu=AG6%%e zc`jL(7p|hP{QC!L4MGkc`E1`lYvQi+Q^O?j@ng)~kCBFdw%4z-jS^@epuMsY2A{Kc z>4wQsQJJ!O$`~C`*M62060cd zYn7#!0YYwb^MeJr!wf80Tm`CY*}UAQq?I(KX6J9JR?W}SuLpLunSTL2P}2-8c-&jl zALz6x6)!7qsY5mRET3*!^fY1k^*xG`Nal)`AiKdvkSBdR-2A#08@~HRP^8>k_pscb zG;lK?pKRZ#L5yZ9(lh-_d2;vXcMk{T5AXUegDe5a9Bl~^d^OXcrZ}Q1G6ETyfLvCU zdIzlv)vp;{u9jkurzQ5Zf-&B?%3LR$*A}WQ5H8!6e@(!IP9vp5%II|Rd5C9Y zyoj)pN?_))U7Q`!y%Y$@&!DZr2v1(>F6t0oE(}V8oP&L`FMj(l0|w=<`GB0gRn;8j zv)DhW;T9(HnxU_=9;p}XnMbCkbl#A~NE<2KoZQoX_dH4^yg1LDJX^2R^WM<M<|GyQa(8@jD}FFY^e0GQ2Z*A{`56kqXsip;H-|r=Syy5&H zp=7=kQ@|d*mxt*BY{>j6#ft0gkUcCBpZaU$3zYZt-?>YbbEJ-A??y8Jy)pL}a#j2s z$YpZua(3b!*+Wo2&KRr613c0GfpD6R*gEuOFNbe?pDL*uG@m;4u=b`B^ru_rjR0tH zsQMKMgN1zmR@R5lp=i~VE3@<|SW9w$l2tEmRKcb|hpvR}W8nWxMkqF7unu%p_}4TT@bXF$9oOm*9Sev|rFNWT>TV!&r>xJ?>Ksj<$^@ zB?2;r4nWav#P=PjeSzhKZ0Slc9NpimqM!(z8-5EZU>c3r9WpPNGKW<`jcV{Q1Sdz2 zbh(!vj1JH}uPX!6NlBytB5#zVStLq|r&v4WqYe98-p?1{!7>t??Pa6Eip^s!(*yc4 z$M2HH5(HWm#vI2NhOZ9yWMja{1Rfaha48K5uTRgCtI8qt4?IgZmEj>&2&HMdsVe+@ z$k!L#;R5Ob?1EE7wA&WZ=k#$%?A=WfNSy1mny`>q$p{*Aw*cx1aG@%qI- z@+##X-b#jBTdBYGKR$-Ve5h}9Upg!q|HWHMR^{qM>L95Hs`j3?O(U{;W6_VTiyxm0 zct=;6-u8yw=8XutilPY*zrYVX8|)ZvfSm%03y_D%lOz~F&Trkio*6@2o{6A&1wF`&I(RMw~7b*7vJ4aGsH~ zPmjMy=sV{(%5b{t8>V0h=H&5kM!5fbI_6)6Qg`YrxlGf z*CQ5}E2#zJGH4J0&;dJ$Ej5=`)j8HVgQG96m#{iZ@RS$~8c6Z?&blD6kkmyH&l({$ zj8465wNImKH}+kAD$eWDoRec$eJ*EEtKHq`yVs;|R;|#i@%bz{;b(2{Xh_3)Pnhl8 z!FCt6@MQJ?%u&wzgu(C4O(`As7iU2y*%6^y@$H_uH*w#z*Hhir80tj14jBGeo4*7G@)Xfi9VS>`b4$B%~ z4wSW67;gI;@#-)E%NXWnaeWOfIX53*Pu3yjlKTPUYmf;u(Vc#-UJE57hoXUzzQ$OHoo}l6+7L+kprfh2=-9;0cp;@p#gEU%54$iVZQ!jQJ8vp zw^V&+bKwx2=vT0qXF7>n9uPA7F$(B{Hf|pfml_aQB-1@jGrIslt<@JcF7KEIik@)h zhq-pH50tB?k~3A^2KixOTdieR1rL1~%+N)6Yd`h4o(tipeV&y&;Gjgq1(F@rXt_(Jc|@*XuY8Yp;%K7OHk!OL;$rI^7ZvSVa&~C9x4g zEt&21y5D3^`N9IxGVgI_pn(ED`fb$0YAx=8b-|;m!b9UaTn1rrTi)_InG;zP1}h4? ze(6XZSpGeIMAIywe|-6!q|{Op92wR!xlo$kpECPHA3RPQIE~*M_Z60O4Ihzm=ynYY zo);plGba2ykSqFl%J^vUYo#QQw-qg=VML4*deh0@QH!aMgbzFMJo=sb&7V7U3>n&4 z1d)8VJ9oHh0maA$+mvR|cqh(R^?LGgS!QR*wkWteEx7TOaoh2qB>MtXu64YH=D19? zw*^B1%F}z-n;NPV{8h*c$1)8hDj&`q5crv>z%M)>!e=VxioF%-q(vI zim-Ld-oK0EZIRz>7S6{v0diRrWTV{CYSINctm#PeV*@rA>mNK?HIQjzQZpP+jB^6q-(t9<- zwA2in_87PT%yhJ0E#Ce}jv}vRu`YA+MFRh9H2fi-3b*%Px#Zv-JkauCqyQP2Q&ru9 z*;*-Ub(-M8@J`ZKKK71h%GO#aIrCqg9J1aY{jZ|x-`2?g_xj6n{Af=3aMj*PlEZTJ z^lDt&@2LUqz<0PyV1P#RcaYRn4HpfAx z?s8uYj(!cnw0hvnQ)8YjPj&JDYTPc%0ggKp`stpcA|Y1|ZrZil@8*5pkJ=l0e85rp zJzBa5okzI!WB==Smrdn!S8hZKowYO!K76jmtgA_um4E59~I^ z_9kKypBwK)JlugohQR<7p-tj@UoGF`^OVn}7%MxJwShoZ7b*)N5fs6r6mfNfcrL5G zh^iqlWO7ld3+}hGA-)wA@)#uJH;^S>sko)${gI8E=Xxses#t9*7%#>8@tRkb0CY3} zh?L2AOdk=5e=%jYJOxAe$Qtwjvp+p%2Y}jlpJbVcso05 z_VZa5e3+1IUM@joQTbflPVrehT)L-IZ$|=yC^vlbUw!>Uda}aMhv}xt$j>7KcRnlI zzFF^?)(8*I6rNDqN-5~b&Yz7=H1a4r$zD$;k*{8}*ZlBpNcE4h5lu#p-}6bOM##l; z<}c`j)42k#{{%+3sH&zECzdLsFVn}~+s$tgqt9AKWa6-`_RC5XRZeb30A2x9esSX_UlHlzW4NLYcpiOZG#~^E}TEb z;~9JJg!K*feGd1F{-@r^|Ha&2$VE~Cg7e&tj%CTmDB zmlbaTK$h)7j{aP+WeFoZW0>wrSmgn!@M^e)2DMl~d?|tb7&rf7p4A#+I^bm*ln_Rq z#|u~0%JCuN=sz9*$ETpm?WL`YT^|Ja|E z>)fddCZk8>o5gNu)7Pf9*6wnhX}@eA{NwFKe_{PR@VWgv62Os2?)c9xJfAm zo9}B<{MeK&4-X2wE(XkBGKZv2BBL8!97Ri8@y)Eq1s*F~18EXR>dk2oAGoR20&&n| zY-y&w{pi+>tG~{vb3%f7z&6TSYGz{9Tv&4W#PBtnD|)xY%VLh72_tqW8l5q;O8p~& zsY&|z78etkWvlszy9Ti-Vs)8$`^~P&{STj(4EEVN`kf#%8)wB=W2qUzUrNSC!msZO zmLAw68g^{LNj!Lu_osFObZh}JIN?)E(p0ITvRJD z3WWE%=?|L2cr?m$Mj^29;NTuOpI>7Gz|6ECf^K1}a3;5}6PI(O|5u{>3%S{oobut5 z{bX&j?N(BAa#XBy5~4y+pOgPv3awb5n9%9?yD7LI#+ZQ3IM|mjfQo(PhG0WNc6^d) z$NP1m=JvOMozmh`jR2yy2erTXlA&bFDVnmVOQadIImO!y487LCEEivc=cs*mK72}E z_hp-w?fI0svxr4>qLi4qvVP79_6PpDGG_&KRA6=ABa%jrv{kK;qiV3~#jn>-&m8yE zzWDR^?4@dOML<8N3f~>zZ_2e;INtDQj9CG3m~t4N*gY!r zI?_ha%ng^@y#$$VM9~V-G^X2=aHeyblrKn1%%X(Wm(TN9pq1pAyX=;W{}nqX7Yhm%?FvvZBvo zfTqk#DlDh18~nZ}TQjo)m9-7uIt+{bz5`9S5f>&URC9Ghs{7MsMW5h zDP}jxL7?u+iyO*N;<`*zr;@);f}TpPo^(dvib|-RRO+v!ni_3(Yj5*woto6ArkVg4 zU|HJ+>stPyJr=oBpli;@J)ZCF@)ejjQJ#ru2!@k%T0yeNK<3tkS(wq@F{KvY=QSHl zr?kgjbcTYsps(eO>@yKeq+e{B<@&=T5y73*AvV&E#dEs?=qfS#CzTI4Czp(5+bbHqRwK zE})K3ak8fwAUyxWqw9yfNlBNltgEzV=wH6=$`HKUgbQjvMzx3ETky*XvJnG=9*b*T z-trQLr7c613`x^ef@Z6SkA)pV#IMj~@PSR4jQ@LfXS|WyiT%uC>yUnP0d|G70uTVk zBU^&Iz|R$|d~R;&E7PXu7IwQQo#IAWu)d~0PgaHpnEH>SyZbR7z0+@poUgEGj0s_d zsbZ{ZftQ?g)&g>~k?Y0N2GB$7$%006!|t&z?ImTdh%%TIDeMU9scFr+yb=tGSoYW? zY96P`4y&m!v1vF(|HHfKFlQ$=`{6uVG((wWWq_z!4vik%tb$WxP*oI}fE!<~^|$ES zbIciG6ef$vVwMTl!rmqDCd~2_U_Z!5s535>*PB}&_2gTA>3K5S_6YEk)f$o@gojF? zACOiKMmDh8O7U_x-u8O!fVUfB_~_PwCp$F2X>N}EB%5F63~e5kxXn6_l+3qgnBNq3 zB@k#N9P@M8%xg&D_3<}WX`9YyJ*A6#ggk3&-3n3;?i^!vgSp>(XG{91y93 z#}H*%Fj^4UpYL3KY#&NPCX-7STv-!tHm20S{TYLFlju;tYGvKjd2t>&bBw*;UNUD6 z4FCOK48ea-*S~hTy-AKk^9BcU9>-?V*OOyo?N5nha_({~5ouEL&Al9!1A_a72v5`v z+X~c6HJ1H?;^>P3fevEFtC!nKy#wO{q?_ ziYAY=+V-rKj*ML}q2E8u{$&(o*|?*g%5F{Li*g`7-#Pp{-D{NzB+^iPDb(tu)1ZZQ zfBOdDq(4HbD*UbqOso zulT&G8NeD?ht5C}^vkg|T6L@-BKIKwxj|PIL~;H@&&RU9%L+6JDX@ z_R9;m0M)!Mshryik&8mCq19)_Dpc`^BZq&w1wW@VNZtdGilk0}+3QHkIuOlA(OH?5 z;cU183tDb>5wG*DQ-$z;Zg8(zqG|#PA0|=Nn9=81m#3)CFz?o%S~9+O4OG+^!Fu8F zXt~}W{^DDO+R*Nu?Qlhp2xEbhk3W{qz$Xwk83XUv*`w)qoF~1s+216pUs*m*wPRx~ z*c(IK*-~(;sJYIH$5cOFiMLB}pxw(hLwuJ|FU7%0DAKjKj#i9Bz}L2n82^a6!N)Lt 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 z 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 z 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

      `78 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�!~ZCf}AAp{5zLJK{F0Fh?sMbHph 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

      OPr2O3A)d5@UkHo#A* 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

      $0O87b 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

      (guy1 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%0A@;q8oq5&DK( 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 MNY2)%RBD_x=({jANgwQdFaxpTM@ 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%0Di)@R1eh`tGx>sNobZ)eWG5}xbf!nW z<~@G7ljf8X7E8hx`$Ebe%-ck|4ZjpW8#3_CDJ=b;VA`Xxb=X7I-h{CDPQ?2^^Y@b? zGmb~uBL`9=oXS4n1vP(Ni7g-gS(LRjwdZAZaokd_+F{x0-QLjj2ldR;qFuDM76v3v zh&4Xtm5Xqv&t5ja6AS_r^p|_vjh;h$eW1ATxN_6`%=~lB!rWSv?|YE$)XAlpOa54X zPtq%FXuFhh^TxrqvrqFao~<8tRQ)(F>0qdtvb_$HOTQGD%D>YTSc9TpQ!RjQ}Bk!=53;0hpl0C*=l zhV6Gqko0oAPSh3N9S?(oo1n4E%jCPLm|`8AO2FiPrB=OMj

      EFV^I&$cL*O|ojtm{oVn=x>0V(RfPv6f-d)Aw zKa(vDy_`{yCS@8}F9^zUnXV=YyHS%waUk<8thSuVOEFlAYo)Ewh<@P^jqgchezKk> zL4Qr>rS|Rg7CR-p%=2eMtFE^jmbjGbO!~tw3fKRTTzpw7a3H2sbf!b&)7hoBUqR%( zat{k37uUO^5XNF_wf6AK+Cz@G1cCmW06>3?WDHZpdzgn8V!~(iGT06?0#uk=y970Z zumq!Xl=ML#3olnr(}ijv+bilWBlL>YAvv=RpjsY)X3kTSF)DAwmCIT>cqeOWRlc=@+`+2r#i(I zv-W8nfakVm59nXWO*Mtrg6NKL)`!M`DfEUI6Q5%1SmX%7ejqhQ(#|DC*fgNNQd88` zvlHA*_t3|6oSBm+&IKUY3uw%pD!(%22calCq4=o=hEm8`qZnloh|+C7fPuynDyKn# zf4r4KW$rT$HNE>>Y5D$_qw3qLUi|R>a=@AsUcGnp?8){1Gm(EUU#c#_tXMMuD3oUs z&;Zg*Hh>6H3g&VX=EAjnS*4=vG94pDxqy0wC}tQvE_M<)Qj4pe9SJJWk*?H;n^eqv zaSN_E@e0E+Un&|1YwFBpb8V{|?7CjM_?F%kOd0332M8?saM(SeTOZDbT>4#7c%>(@ zPW;->Ag>ePS60~3n%k4nEzt9dP*H6DI@;{*#g7XLPtL|@+WaT^`G0iP{|9oebM&{I zuijj7xK%((UH85p(=GTMH_?=C^<`b*rQKVGqvy%2vZ9F%coMlko_;DI6|aXT4+vIqp2Yi{? zjbS#72h?9Gk<)X`1{+D;{cr{OY_sKY)MSGG8eq{8Jv8SdqpX&mD~I>PZUEi=FSS-J zL`J+Ve71kqmm_GCZs-XJU@OAEGoubjxY!tUkmKswzgQEK@Z`8?u&@dnbFr+kU6mSI zI+@Yp)D!a;OY<*)f=I;6zPL}Gwj!%-mQCQTb3jd6h<8e~_@}B@7M>o^_{!6b7z7HG zeom&k``ni&=YDE^U!2tp(pnLoI`a!|GI~}c;89XywCpe7>2Jg+v-LAikIt1T&!SK) zyCzCiZl|G&S*~uGykw$9Qf%#-GMX8GU*d~mz>olwFJmo&olvF0At~%VyU2kAY4gb# z*BOE+F@TR17Sx#hT{YE_*MdI0`AJno)gj9QP*%~vDFtuBp|uQe%Jb6O+dGdD4LP`9 z-H}0#JGoBhwi<;`a$h`@ST`P!wKi)hUO-%$Sy8?j!M=`O$PTUNFjfiLP~ujz8A3?t zRB_`4dG*Yrm6>>erl5q3P*0F9G*;7l>CkYNqkS zJP{AuWSDzc70+-qU!dkvZ+i}pjFm0*2LaaaJyIuWe>*CTTK#s=?4gizddUFYcd|s_ z%0+ElFIWpG=sL?x`pJfn8`w!W-Ipx!dh*wXUTO{9+~Xj{lkwb z`TypOthHJii@pc;HWUCLz{Ldw2-o3;UIA90JzkjNl@{aFuy_bN+l)Aw1v4hRCywu^er&t`k||omohtvP zhpLE>Crg)W#fk%Mb}CU)Jbxw{#~fOmV6Soxd%kb`vcC3q>o)#q=5=DH$_gH4gd~yR zs6S42KQ`{^YzmrjntrQxx~-OY_fZe%XX*Z9Ob{ciUvyo$rH(I;8?41|5=bZWeA*NU zkRgr;m?Rg7IiQ)zx=HbXXo5xclsz%VkTfo_m5l=2D(JNAS72Nu5Px95-pDk?)ULQ7 zER1Fb8~cw9Bxt`pWmXN)A{F|tJWCDE!vpKOAFOT%Q&&1~>+8s2KB*waeRxn=Th&x> zxoZ(7SnQ0)!{a-fFFt5JU#ZW;EmS7jGN(c@iyX;h6yz7ilR~mXzw4h^O5}riXQ-pp zY#<|X**PvJ^q8 z{k=35b&^u}-%8y-$c^pMtK4O}p<%cqIoYs#-H$yP{!D^+xu93)T;+SlruxHwhK7R> zcIyuC68U|ivx~^+HAnz6dLbAEMO2o-_c2cMOexy@+4NC+zogJH@4 z>fnO#L=U1GmQ1%8r5$Hu-{v{*UdpWjF;rSIH8AuXrWsZMd#6PWAs4l|l?L95kG*SU zP*pyC@v4mnG{|yX+LPlKVL0FE-iwo;$2N(7)N=v=YEVI~Hf<(TAVH-n7T+JKLLi|S zU}!aUD)fQ&a0$=$#aWC<|Hxhb!DkCl#Pj>J+=(%Ls^P1%MI5({KCF*Ybm# zv!;-Ya3%N%-pFOu+kvmK-4PKkpr>U0^mXpzDx>Wz+I{vebLiN6NeR}YjjJLBXD`^q zJkh1dF6BDpJfj4iJcjE#?C&R5cH3pjoM@qxmXv*l0;z_q-;&X=Yjc03zNml&_P#0x zakHZ=$i}f`4t%gq;#iA-rHfr*YWA^3Dn?t5nV z^xhLS5uAWzwiI%-!rwU$0658G=zDhbd(GY$TEOdcTJxCn7q5-uq0&2nzI|-zMfaqN z!;qz1KmCrybf2yy%22jX$~#oxV8XK}r>10HbE-R59l*R!{>+d6?@qzi;&jMa=~!^l z8EZ;n_q@;EaF&pSj%n`&kbWiIDVWY!nSjqX4E1r4b}?2q01xBTH`0wMwVTpV9Daam zj?)W+Ul9QXJ&EVV+o=QF#!@ch@i-f1QEH&~#jUUrTMPx-{rRD_72~&=MMdbH0KZIG zleE1H&sMMH7@fU3^QvA8e(&iUum_X2b@(q5A$|>U+WOqu2E6@k-J39j2<*i^sbq!& z?}2N!duYI_2Ia_8MVwTwYb5@%0%FAMzz8O7vl82U|A-jA5EGm}1(J;}K%*>V>qhjb zJvvkc!@o`9=;jWctD6ZADtW|>3Q!>{^E9=oB!iY}=@VsnC#fv{rABf@G~=X%{5^MuEu zrKE)0@Fb}7nSg%MuiZCtqOcND@4@!>-{0ESJ~&^=>B2L(px(riH63ag*6bwk(>h(w zzgT+{J4$;ao^D^IRy;rXhWH;r_piz=Gt(jGY&e?|Zf%}&XMFG~Q>{g}n9k+uULDoj zcj!ZsE(RKRY(IQjucUQ(IE|O?AY&M=ywrf5APd z+~M3&%O59@+n2|Yl}Td!!lG}ip2XM7%L~rUT3;0pJ&^jE{$1+#Epq@03Y~iWW;l*! zzAb7uJ{FUwSKm+2H_U_SkOAm^U4=3Hsu+Y(VdvHcVbPTOMO=$kA zVdg&SCDU6YLy9Lx-2cj!6UD9yKgb2BW)5or@T7acJI)gaWZz2=Jc%zojO4Xi`bqx`<*}@m3Uz9VX zwA^EGRDM4A7cUiiTH6S(3@0WU2P&STc`I3zFIY%5UwaaFXPGa)w4oD``!XUs9y zH4GvGsj;2;al+6yG>^ZVb1l-0Mf;q= zV{u#?agq!3wlPHCi2#4ovdzBk^QZ;jLRqNUEwnM8rqyfb$c`=B@|EHfL*+l(Bs6z5 zPHz==UOgGc0xU?Zr)IMumA!_+kaioz9Cn>N!2QdY8}hynTSD;? z+S--UX-zU2hM`R_0#nAe)4)^)t{Z=k z?oM`z14?qjv#9Vfe!wR+-p8(q(Mb%YqI8R_{O8#p)S|<1nsKGYgG~eGX$ho}w1?30 z{ObtDn)YprKt#>c5I)hDLAheE_QQDuL?4DSO~5dXy1&q%tLw$2us$9Y-w7|Aw=Nv} z21?8xoGd=OQopOB74i$)^=_~XhiJyT*J53%JUAO$rkLe2h zNJ{_mCi{e0&HL$&;zTfj(OZ-kWsShtful*R>>T2>LBjAam<5Z{Fa=O<6gMgHn&5K9 zvQ;-vF=61xt6`b2&1e9M9C}uuK?7rd<23*$>@XubYvuhTjvCl_o#6|IXk^mnFd4v{ zmr-`eSO1M$<4INjtwBFbLgoNOqu|M}%S-RDVpqai!?|w$+Ni$D!(wn9ck-?`z{xPfqAKqAQoekE5*gOzvY`O8>llk84S^Y-^T@~|6wO05 z;7kRGLLG~|B;TygpO*VBDtzR7e{IoefUdO{&yMx0|27e0PKOl9*v{ZB4=mq*zKh&g zYq$qt4l1@SY>dkHGpsuEV4Z=U)nc9TV@HjZzIQ#r4Er;ef!ELNkN8o0;K20U&^pFeL;)253U)(L~g% zHe+y9yY(heY4N)Lu%moRKp67(F8f1&YLIHfB|+!UdTa|~c^X`MH;VJ!JMz#0y93T{ z7w>63e!pn4CpI=~cT4y^-{W0b<_kfWpSALMG5>7rnoF?~p)?3(K1E9Mh_A0DS*yjOSzq*haxRLj3g4`VHt zhiX#X0HeajFgv2Tce1t&xqp_f#)8jgP4g|ZWG!dJ{)uxRVZT=TeCw`lVSzbAf6ea{ zDw9-X6LjHMO}!6TcWR|P+2KWXM&zS|dY93bspWvvkI8{yA!!Te0TZoBokmQASxIk$ z$dSFU+_0R)#6ch4wZ7j^kA4!|(q5jIEm-wA%9lLOkW^ID3IIwN!>`*@aMExqY(Kgy zeXK1813)_AxRhC05D2_t;)Fx7UNAAWlBOcpGq9J5%g{c*a2q8WNnAu=AIJ2^hA zvzCOO*AT4oS7Tppc(rJf7WdX`X1bu)qDfu_YwE7|(B+1Wtx@;wLIE%1bj2iR*mm%< zUp+`z1o)e+RUV-d<>HFGDD@l72$Tgfv%|!-yHH)N34j96RhdI?*md&(fLnP#eTvAy zs#M@ovD^d#k}%ohrM90)h(+{y|Cy;HDqulNPU|4AZdFavK%r)2CHB5-*ALHNxRsA@ z|CAM1byBOBnj7u*4xl~L#8+NaHho^<;M>-#$l9-bWo|!hekSxu_o1EO=PSGnxOlx8 z(g7p@eDsRv6K+cuLjqqUNpiu`Mj;N)h4P0v6pQJApS9SbXneN@5}xh%em1+$!%>`` z3tDvA6Ph(eMSqn|^8-wve$&q@nQA(JxEoN6p?Md$30^o(-@l62{J*P*UGXBSDd;2Q z+^|u!oQ%m39eZ>v>ebao9h2o}A@H}}77?+pbo;Ef1SV;6exo6y|BH}>wC)7pd>3qD znc}aSlbra0;1e@uain0z-twFtiMo@NPzwVjQ!xR|j1IM|U@XWbisCsq31N%n7teOY z1tB~VSRVWD^;BF*_(beW6G&RMlju>{q?wfJIie5 zfuyHBG?BIndkd4);dyCVPK66A4Xd23%Vn~cdpFDU1GZZ1_}!()?+5p> zJvZ@7N!5}YwINv!Zq!NtGhbBdV~}c*gMIitJ#9{29t}s(WR<4-Ab@faPM*?BfHU0^ z5aPl)2JCwJkoc-i&(%E6dq9%BbfB93Hq*3hu{`hoDa|g3;mh$~8|{x>v=i5c$x zdr6A^8cP5hz;dk+vy>r5-PpL%kpP!xY!!A)Ms@18l*7kLlE*7C9noA`>Kl_mM59u2 zeeJEy+f!Oe)nxCV-Rak|KQB&dpD9&4y6;wdAaNHChHR@d<|0ZwzU%0WVk@{_X6CTe zIbDZemgF~TwLxcG$pQ(w#buoMt1WX@9+UGQrZAV>Nx2?7ewLjj7pX?1c*N&p#U!{y zqyQjmsdXujvFR+WfTNBPqkJ~UTx*)Gl%B|-j_!=4z772_0|#PDzKt@NU>w2VeF#qjz^|_^uxA zrq zELoj}WODMoaoHtf4$TTh`6_vL_;2b|Pp%a%g$lpd2LuSbxO`W4;UmjZE-VR!w&oTY zW!Bdnjt+6B0aiCNSnv?tG1VAW%|%85&m?(0PK@|$rBd1rO~Cyo`w(+D14#i!-G2PO zlvelo;}3UlPel1VllwcNQza=0?TyuyiKzHw-WQ z)myay0JR-pt8&`mvO(lTur_Oc|K;!ePoFE_f$Dx2RRtv=u7V^>JRay!*kat)>Ch(=#`f+f{oXb+oIj+DS`zWbY4HG;itgXN&U>>)WVJM`-rA(k8#DPXLMe*AiPszv1u+&5#vsbZD;G!}y6}ljG*kG`_I8E{qp^J>!t(ayB1NQNs0m$93;y`Q+bAJ8hT1Y@xJop3!IlRH z6Pw|2MZ2d|*Yh9T%w!|bYKGn*m9iB&$%cj1@Rb9+p1XZ`*MD?8 z<==7rs%za6boX$8T>F*YFN!Y1TM4ug!{(u<;v(lQ$G=1SNZyrst^{ zxtIE+1wsp_tI*;#T&3^NCP6?c5O#oEaEeiz=GU$t4b)Io4V=j+($4|-U`iMBNdfd+ zq<+5qI&C^gF)NcZi0_Wgi8?h?Q+YAs0L$=(;qNoDh}@DBR?Wt*{W$9Pfn7=(v&cTq zvmvZk36!-*Pm{4f3FZ^FrtfVlivQW#RaRx24gJxXWs*kFGw?1h^>+XfoiF>q7_s9} z*iB0!jH1Pc*JFqFazpzNwk?B^&d=gMKAQ#%M&kST0lmx|T8Ox$T9SP&$>q61Fl+IX zWR`uZCNHlk5(g0gptZ_)2VRrNrfkj-V2xbL=;4K~LK{xYqNQh;J=m2ek7ww$%p<=T zw!q8Al$8ENhLiKIfbr^&Ld|Rce-mq4aP|b_E@y21LY_^dHf58acFEHNu`h3{ct)+? zD64MrpWqcV0PdieKUMcfGICz3Pa`iO6Pwz6S*T5{rgYi3tLLydQ#!__dHq=34)K)B z?!y(DiS1q7$t{KhsejmgpLX7e6VBm&Vt0=fZw0WCe1!OS_89(Of7tPw$8z7o4ewkjylE=j_ zKii*RN0-`wD}42GNF)a&g^hvzgP) zRC&)$y`*CE-atbQmN3C|3y@r|0rgFwF~yj|bS3b9WBLXX*D(mmRJ98N(Zl+VqY0I4 zV%MLT{7DDBV{B-WNEP%|Ea@dzJkYZq;!=s%yo|Kz21~U)0vSo5aDj4N(F_gOT>EWV zo3@I&yKrZNM0gS~J;_*6Iv~CBAPuwOWheHMYZlbxAYPd(ws1|tZ7TZpvpWIcx=8)Z z-KQxJTOSjXKjY zoxBC(GB1Z6saYLJITG_SfDm^wSz=(AkiaPlvhs9d^5rE?5w$&x(`dfLwuoHwl(1`Q z+MHJuRbB=Ub9y1}n6iou8ZtK8ZCROg_%($HjeZIU7&xk?p5T0Adl-}DuMhUT;Y*GSBoATSS_B#|e=CB;DRSxDj#kbu^O02SX}2|1FVU@ZOR({I-+?>y#u z_#f8w|Mpd?F90;}Vm?2PSGUPZZ1lQXrh^!j$1@N&E5lWn`A_gPTMk1K49`JO2ze4h zwtQp%EpI<{MZ_1Hg8+wJ7`S~67geUov5#C1 z@m;@YpFh%V$fgtlKx_<2r$tmWV-Er6o+*B4DB;KEDA^BUyT{(Oi%t7r&JDtoM&?cKi0*zgt3eOMcCURa3@bKccQA%;A^g8acz1 z3;;s?4mNnHf%QpdB;F#ayVse2LQM}nXmpCA$>cv1G-up68D5J~WiE(`n8DT?4PW9C z>W}#cd>seAty?;su!mzyn9gMrd^?@H-@B79lcO(Kfi1}aWR7?Ha`~PS^Aa6(MG6>4 z6`fL(w6V$cU`atRgOmsWu!a~Xw@M`8{p-cgyNp|Nm-~O%*8dB+rB4hQI?a4e9XnNhS~nN3dCH}i>E2@j-i}SN?5)o+5Yi+PU_62D^elhkS4zh{qYU`l||{0;73SBUnV&otMEGXm66=~7Q#8PXy33y_TilJ z{j-mHPU^ztzJHkla4}>h=jQtmoinP)UUJKeRf!i7>(8{Nw+P)Y3Z`EE_r@bh>j!mlt~Q-KqX%la|UINh2^033kC$> zE>+6KKE8uLR`dM*4`jFkf0iKL8-fxBC8vrBW-x_X98bq_!#u%EYQ)u(z!aZI+C0b0 zO62Fo=-IqKK+9(H1GkZC>U!Q@f~x%U&%|)+%mYE$p=@S;MOqA0YbUEbg>Y%c>>W{sJs;CSOe9Q!Pz18hr6!RuwC9uVKJsqU3 zzN0s2$fT;ezUq$=-P2S!&Vw#A^iAQ7Ocha_!J{1N-|+1RSi%HFZWstr8DtU!*0lN* zpQob5HH@P%NAZx>`+FzO|9gM^3pt}80C>K|d^Yd01tGbn#Pd?APHvaH=_F<;LAd-D z@G<8D0I;_)fRvC(rBGOUvDCQ}i9n%vBWC@&cNjqJKSJ7_5Q}gN$E9>y3u9~XANCZ) z*V=k=YcDRA)UO4-Q&y%slAr+W z19P?GM`xlZu?wFx9eU7e(9bQCn#w~A)stjN@NignRc0~RyI;7f(-VD^!EFpvD)rak z!<5)A;S{k8om%diFjc}jh8m?l7LYnF4vP9woX1~B3P~#)lfJfCC={p%BniWAxdF35 zp39{WA{Bu_mYYSB8m!o?xej+ zJ$0{$x^BbdmwmzneGzFbRPO)DK04oXwnR0|_;ItGTyIUW_gBU*G(h_U!iTGA!Gk|U zD`xkcaoX30=2QM;7ewEnf5*Z1!Z%q(VZxii6IC(TOc*&)N&`b9H36r!GnfS}(o(rm zuh4npanEZnW-8WBK(yuJuak2zLs>?BUb{@dCb5@|(^?pSD1zp%X5%A)&IIHu3A5it zd^>5WF4h$&z1$HF3bb>)@#!FTf&TNDuNna90ccIHc&_^WhzQ+wIQ`W92|6qJKUqXD zAcwbTVvrBc`m-Ei>T2ZFQfxqSe@+FHu_fkmzfGOLS#1UtNCp@K2*LGW6)uPi7FHv7 zf$0=Ag>U8Y3X$<_l7tDzz#<3oP-;iA4(D&TAKs^enK5uknL&!ns_)@~wTwCKNW|3t zej$gB_64l2ry-2|b0BaBaKT+nFH!M)pbG~gK+^nyNkF3Yk))BANG9)1w2P4WzHn1E z@}uLXZrr!y0IQ3(odBPEc|eL?UNTM~z>?$6_}DW9tCU#EQsDAs<1j#L!1+agyFKb7prCKSuqYzWDg0Gjl2_^tZ8%TL6ZT--~sY ztIG2an=I{@^4!*5&@|m=wv@u)p|@=UI&k_RNHSRlj7=2++u69}^UX5~GT1ru8b7!C z(3LmIxph0GE!5QV8vXKa>A(m_qLDsR4M zi)9ux?<~Jr2-^xrc3u@`m9bQEQA$b#*GgP6WbW^yHbgm=0=7``i7G*aL^!JukQwUB z1A(aF6q>>j5GcSv>$}BE2yIfw28xZ+>+1vLHK|yMShdOi5q+2nC-?p&tJ&xasOrY^=I;|)oEEfuG}F>vxowD zoMo|lf_a@kOJ_zZ0GM!8+_~kMlbPP!ca4^5)G?u!ub>{~g>$lvWlcY1B#n;4=Qr4P|)EGjQe-B27=BW4Yo!y=wLHL!{o zThSZDTH3>EZ-l_`&Dpq!6tTSs_`Qw=0H#lt*+B{Ax)+kXT%bp2dmnrJ*4zAB|-tnzU;)BjF%v+ za!w)y02pzlz`_Hdy~CpnE8p+$-^k-0Ypx2)n}O@c4p)d*Ma)x=^4( zVk6tdljmGb)J3inoWy>bo;UO99x91C9zXL!^9~d16(~N9D7n`*UvkCpj7HxNd$^EC z3sTZJnjWc9=w%%n=};SmetLX?BF-ItifC^u%UgjF%|olIYpDX1nUkcNbc?m&7x8g% zn0bbM0fZN9I0FN~*yCAxMNRKyCcxgGVC&oC0a?XN47;`G4+MXTKh01rvz43OweDYA z%GM4#-bkz)|H48x%uio**l@$vG*4{_98r zR0TAzd}nh|xuE8B3QrtGR@c+?Z2B78u%`MiDf#Y>Qk$y7h%JVn6hA_%JL|d8?Y&s=4E8~wcS>f?n1=V%Rh5~Z(n?ep zh)>{_hKy^DO`x206s|J}NvKe#zoU4<`W8fmxXN-IHS+^K!CdI0cYCd^cnP(C@I{;( z<0&edA3glWyCjAr}C^#V5x_D2aQ{|%&`QC6( zl8J&U#IZGsq$7Gw%U?5_qa=Tf_e~McruDE>mGWr=YNWlHXUn)uz}{{|P_A(RxEu5F z5cKl?(-}x?-3v?LQIcDbn>}3C$yGQP^8B|+c@uMJAhSY)Fdd5Xha9DNAQgdoiH4RQI;b$_M8U+11dZq@XE+hA?qrI37$0ZkUNkB z$jNg^h&PmWUu9JlwOv>|iLshoh+>AU;&{}&K@bRwRXR${G=2>RSP>l}OBirB(WY5K z6!V-^^&R4(L4OMRgKsiM`5Ig}X5}9h@_(jR|CYMHkRzo7mrYDwmmMi4Vr==%j2TH5&h8{%?KUe^-5YThkUah#~=M7pegNBNcHO_XU#=!7Zixd{}bGlA(HuLEsn}uf9UujSKs~uRZ+J1Dpl{015G$_(1Ul z>Pr;ngQ*?KKGPQCX_m}n$gGf~21?p!@H4B;wDE^9ZGUPme9XZxW9y!!(s-^v^vOx_ zJi~HVW?qL%-SwgliS9;hdj9OktosY<=XDDi=$K<(3pX`PYHUva6w$*+8Vm0z=Ps-{ z+>bV)G6*V_x_d5n0zHFk0v)TpG_7TKy#ucqPvja)neodI@K%w@VC`1V5wKVS6Q>$7 zs#qPHd??5RQ>$uUfuK0akg6_w8UKo0YS-O?q6od>L~-WxH%9e}a91Zu0t65Z`Pgaw zUM$Du^{QWiY>6#%?NyBQMYpqTD=QIxH#*&aSvgX!@N&zxMOoUsQwTPD8CN+bEk3fG zb;tXQEVhKc%~*MWkWPXQ9~Npxc(yQ|q3?tK-wlYrjWvarVGj{xKEoYQSev=UzZS+B zn&Tpm3(?i=S1gxi$S1o2Oa?YJQV>iv(`kKGg5j6~Ah(P(y)u&?&n#9|yh79L9v-GF zJEl#^Ly)L^E`xh->(sro^ly~3|5A)hzPq?E@K`uvX`py`Ay_e`olWSq)wg?ZC#T*- zvf;j&0?j7wEQ~0q1j;r`AV>`Z?`Eako;PIA215M~b3WUKrzAuxN)42U(f{mzGpGN| zSOE}x?1mr4_+@W8c@X=2rL?_Q>-+uXvU0%8yado1KvhH6AfhBzFFNyr0Ddsj;Hx7LNg)8#i7V3}rY>b^Nls zkB}UVSUxWc-<5jmsnPzNerU%IYiGjbaOe2nm~=&ga-1PXWYRV}g2fu^J)vH0%G$SI zcAdjqXZvBbEy;n$IVaMgWHa>x8NsqGtmLsm&G79^r-A)zr3%d_O1cw40Po(4SDyyl z`w|w`LyFl=$>7Ztxmvf2UP80}xF?=9HH9Bd9{Lz6PQL_iWk!1{-yG?G=l2A8^F)=# z?w{Y^%ki0@#3WiR@cy57v#;4i^xNkHm+7E2{e=x3h`sLQb=eF66T_gTUP3UIFk0DzqDw= z|8-d!ru{8!|Kt3H9KwbHIa3SUJiKl`#rUW-%sv!xUfw`Sm*KEmwi(~U$P)!7G>EI{ zsdc-gC9GT_mV}D(8e0}u1M~RPZCOTvKpxVM=0rQ@Z~3s$|tmHI#O24wXTZ7aO^dow)T%V}GPl72N$A zWyE;hAZUzFa%$=H?Jy?mkW&h6_PlDtWkJEmhPl)FYCV?f+BW6X4~{O&_TjWd1BGH9 zNi+po7wSmjIK;6vHnkB@;fqVpb>x|m?#*n%k=_4VEjo~a?MM5DL;C9+)i+lHxlxIQ{W`y^K5Z;@t0Wh zCz)2-N3^q0&Xi22QSS)At1?pJGax;97i?Kcn|=j3d4eFu;b2P3x}Z9FY9;_Ej+stp zU6zBn5Zi#`XVa$G;2kn>7>KF78ep8wqO-aP<9(-d{fBni-s>U6U~ySYrB$CGER~Jz zgRjF>*GYAw(frh^<8hXrdziEIcE9X+aw_YzGcTS`*SYcEA4vXU?=R#+WEqf)WmLJ6 zz{4!5qpBze4@8cEdovaQZ99{LH~ zc>j6v>fW+aYI628@x`yS4qFrRE(HlRs}ScM(8wsO zWS<=r1QnvfyT3s6Gi@IW0jrIfp@)vXvK(juC`<(?z-@--50|x(QE(NjNc+nBu@O5 zrL{(YbM$F9N_M|E6}8Hi{J8AbYHD#d$jeSr>#pI=6G$b?a1#i(aVL+D6w|KFQ}Zb` z^xafIz*s$=KhCi_liF`&gVpzNy7cma)@SIk+GMf!v>9$M%Y~yv;UZHVX5PUz4fDnF zgZfmK>Xoz%rJGY+7enpC z#~3b1G3p;8=4f!pSX^11Tatf5js>XO$WYSv^^z%++l@lBt8DoJpedT>vI5uvj0vVi zS6>|Ca8~h`LA1!$msCX@cq(J4GPm1$x5OelE^@KP<{a%Rs$iUV;ZI${)QpVj-+#{O z%^Tlr+!dOANB{08)QfE=eMmbIt+}>6_+OX1mA{bt@z-}L(_*G9IFy!oOO_hukd7cK z;}kcVXBC9%^?S^V0U%H>PJ_==Wi?Sq2s6a3W-f<;=G0ZCfGc~cS{NFN>Vi#TGS#be z;Il!i{5*f3uySvmOU8C)g}KXy)V+@lDy^y0b70oYEfT49Mvs~1I%Z$<3Lg$YCA%K7Q$jHklRbsn+BtM@KF{O9mL0&jP@p~`0`FTG7 z0(TiqR;N{PUiuxBGGZfbL${e1q|@IpMaqEUN&8gjLrY;>f*Ugcj4==gvtkOw8h2iB z7Tcg@3F9UcA=F7B1DYicExM+65N{wN>s9Zsn@fIeyIM$%9*yK;$!vr@k}#j^mZgcC zxj#PP6^VZ(>GiGYwe8}cke^{If%#XX4`{x*qJ9a&NYdeO0+y{w@=gg+8DoTq zx5i&Bd3l+3WB<1nVZmjq^|O7uF*s%Ru6n&(k(E=v%y%C z8auJ+OiLa1CHazAQ}gix5(EWLFD5;iR}We0EvIF-XPZ5(H!h3DvliS!la+0rLi?`w z^;*>zvcz(?IC=O>RlH`C!|+A6Kbh9zZ}|2yY@hQ&V9?n^eleL)2SNH*%8cY8eG^Q5 z3Oqr2%9={P{M+zfx&6P8i~d{XvMr_)!;&!>TUxDQig64-bUnq@4v>+MRNozc2E~hQ z!?yO@9iTC%z2-PfV4`g7GQh)x;s;FwEWOTs1z;ubNhb}wpBzWdsXjEU;Di&_^YVw% z^nwQwO}h=PG7_+w1RAI9)f}+o*Rp;+jL>A#LJ~!qWzM#6ur|Q6>SN+7ITy~jrtTjV z|2z?+E85&;TaS^sd2cZDH_zHFm!5WCCjTGm$AJhjEZw(VlWw^Yoq-?0y zrKRd{0gA(FDxUc!Sq8q6o>fv@PY4Fd#%r0w>;gDZq!%}v{smSV7a9aay(cyLr(oMx z8ZY02I0OrQD{Nf$B=ErReA*+hdx_El8ztN}B6zG`OmdkMf*i{f1L^M?XyHP@ATR5m z!+o2dDg>v))(ryM;tX#xqF3KqNtP$prH+B}VVNaHa2l$(d9+ZN#Kc&3pL-5Siw~!* z7O!Sxx32V^>Q2=gM4C`|3M4%f$pPduffqkO9$>#-eBp*02{s2$L1es4ahJ|W8KF93 zcT zm+KbnnHLOl9iJA zv}<+@7FJTbcMS^s_}vAgJz-Lu`IFnYKB(E&ZA?gpbF-BlvpRqcaywg=fq zE&un*{$I$gJ!9+?CgN=bV}ruelaGeNko5?-vYzEe8{%{sW822Al<`EedV?S5LK7_h zP?Az8=wy5zlsT5ANk)+%^x&*VtD}~Rf4TND}k7sXD zmLw?9svfTme!jTM4P5bd3$5)9K+ec7s2X`brT@%BAh=>>`=w`)#;&I}usimh=1wY(tHiAQSBvnh@`;|5&is6OCic`M4DAY-gIOz2~qWtN7ZRP_16FB{}U z3D7`l>I-sc!io(e}G zYwWaV#eW0h#}U?3EO$$w8~uRIL7S%RAyU`M5 z8oL&JRQyl$ytCMC)uZTA#XxDTk_Q_8xS?r9wG6)3$L`gVbN^8;hmY6+aCJIcOy`A# z)Mm(xz6!JT;07w=LPG8us8w(Ebq&}tTyX58l)coD9ZWK~$jJhGmclZW41|^0dsQ*o zTYVLH(hv{6z^;x=ND>*ZqBhB-0+$SXY#?ZxFwWtBid@R8dI=JJKRHdnrZxG$|EyN0 zRK>=^&Xr2Ok{p*u4n&yaA|oO@@%`&ZGX>?xx*fN^!j*i@<8{lvyrb9i_RkAWB6f_fFvWgACv`ez%6sy1aie}Df$ zdFo=7TbzUJ&qh1bHkw%p>bL&6kp@W7f&TBEZzsS3l?!g>T@IFq=d^f~gKypnH0_;e zIiSrd-#knIy`woUlmH2P*)HUm`mb&E|BMeu(g3KporN8@wGl1VED#j%sVVo9BF^%R zrh#@{LtUZn3c#TM3yMQ5IHOv-)oev##-$hT8y%Kgxc^!i*#K1^_sCB}0Upcva+bWo zte31EUR#a?cv_--J4$i$&e;R7jd&i zCBR`0f0#$d@mxO5JA=$F0wFg+nuy(J?6>H2>RFzMAbQ?efrTEnOkIZkP4r9-xORd> zt4}OPj&aJteWf5U{y^Qw3JG?m{Pp*))Ky^@oY>lRl`*LTKQ6le0z*fT4)}eZLCaE0 zGD)4SsWjF{n$M_?Z7JY{K5bI?#tT*}U4)aHoo?Za=Q$=u$74I+Cl|lpe-$`UmKTUM zQ}tQlPq-8Pn*MX9aq`_%e%WVzCMG=qN|>OH|I{UbBi0B^n=)f98gjQSse7>icMA*z zu+rL1CB^oAcxnH@zLN;N?{oLzgb=ypn%m|XNJ-QM1&KzxcB&1za(5*QcPgj zN%jvu@|SHL;o}>lD-Zsp2N@1p%5-$AYW{GHIT81oPCuN&e!X)y)2g@j#*HBLmdDwy zmwyclhyD-N;lEx=82P_=TQ>lgM4W{^H{KYNIT{$?lidx^k+Q8g=V;iVNMq_#b;7CCh2$Htt{#xc3 zsOc)uoL-;XyTZf4jt8#1+2Z}u>z44x1ght9wlz+aRwuOlM%d!xwc*tK@2slh*_Jb~Tb}5S?oKL9+7q?p+0J#7zrfE#&tv zbDfh9-mO9n0BkDLn-DzvpsCvW%{*$VQC+kTm~Y0v!L6H%y;}JZ>m^u`Qu5ndNtcYy zKVvbZ_9-+34WrrIeFiBfQ>#(NLMS1=@%8qRZ8Rj%da%ELj0-yGiuW}OU^_kjqIdDz z9pb@4P-LFsX_M*ZXqAHH=DXY{JL;<3vW-qn9^bfw>V7u+%+M?3cUOI}T-5Ce=DxIl z-MV31<${+o8QP`i=JRgKmYA#cV@yHpwLBH_=A35=fS=2x^&j)1k$(YdNF#}Gb@%BZ zQlI+V2g&GdBRe*tV+nh9R|h_KfIO{$JtED0Eq1zVhMi%soxukN_7c|ZqUIO5*PLn% zYD|wfslOKsDUMjRo6y`6xqILM$&v@f#^ws`v=7ZW&+A^G_;u^t(g6f!7QN&OqMdKgNnaRKnq0TxP8*JQJyDoI+}FKD2XS13TVdR#(L* zLH|{_f+x=@#}Oe))xC*_##Knu5pQyUA%8J7o7~oX!*+XlZd&d>UCl9!{#zOZzxl)B zx7=zXL2i|d^M`&taDW9OBAM0M@2aGg2vEp^zP^yP)(CYfRD-{v8+s8llXH6UH7Jce zizRRot0YAdu~_Z4&sEjCQpUZ7jUw9P&Q9_LI7a4&Npa5fr`u??-#O>|K?@&KrVuJ) zrW#QrN?R@g4opsyK#3hax+UNuTVcwNO6!KB()!pVGFgiG zrwjS>D8>G(SMaprNm_=#TzEej(ys>)>Rgt9N-?ViPqI?&`fP~f6s!%U4v-A1Hwy!T zW`e^zuJACs6lr#UncXgWzH4qO!b{itlCyY{-f)-xCk5~?t@SVDfVK?CJv5*H8*-k& zRFW6vLS`s5Z8?eZ{mNN&z&G`10AR?61&isO0CGD+j}@R`b7VNeqtt6##r?IV4!e{S zPK4LB1F9>FRr_P&{aJ_!VRR9a*{ZSH-SWgmIiYMsNg%$!oVDy(e*S*xK7h*b%{@Y; z+8JNg=D(RHF@%-fNN(gBy$j(MgsLNB_t><7R9jFzWCTEkp#h0E(Q8Kh~& zpN(^aX1_h{eP70)W!{sRVi-x4(61yNZ?*4(@6DT_dls4k4HHI&r_(5QPP%~NA;UZ< z2sn)n2Q027vLxfDFJjO_q+-8@1uB}bKUOG!+xG@MSNm-V_YxTSZmm8zs7KxQofOCf zH?*Y=US7rZ>h&*NK{w$qI=f820(HrgS2^H{#Rcy=e%tSd{TzbmndzW=0eJ>l`^9j?_avU!58Bd{%*erK?~2fU z~?z1<8# z>DYOAy?|n(>;;u|P8mvgV|rEM#k*3~>*n5?sI{Tn_9)B0zH)W@JG)P_7Vl6x*(Xcj zF6E*nwnv@i`~*Q{hrfH;=)V@Z|4p&>%rmxFKUml&;;m?x6B}ualyk%S8i}MTqS;4s4sS(XaK?=q`(=K^4lhP7gv_@T&8$E0DKK!SS^3 zx!gbU64_8L1+`t;dyASFbts8&I*>55&COE;g-}!=Iv=-f2@NpvOneeyl-v9^+A9yl ziwVyw%@Lts$Th;uD)5?+$134WhCDn_s{`}}sT9{;*l<7eIwlqcBif_!I|_F9A;=Im zLtq+=5!B^<*(R1$ny!4tEcDZ%o>=c7e?6QfZK6tM*36<1kAAd7j1%p=$B*<=(g`rE z%(ukkrnJm4?ceE?u>^ulDgZ?$$ugPnzBNPFS|QizA6aRA$M$0U3zv*dX$T+HrI7q< z+};^(-z9aXnhNy#<|S{vt|?ioeN50ZtZt}28$Cal9=FNFJ4ZbuqK-9sQV2|CRUe z^XmVG+~68Rp&4M|z{C&*r`I%kT`IFfWXj|JDm3kKB=z5h5OP4J)KpPsVjtkScq4|q zWsw`78U1h&;0YYybiaz&o)K+rUJ%Ne2jS-ekb~V3kra^tL0Z6j8y}?mpk_#|B8|6F@;;^#z9gSdR7`#9>G@8;bzTX?zq&64**;duTLKPaR{jZ?vi6U@`4lc+PiK zL{Hq7a5w7rz4Nk5W>-G>+^N0Rm8rZK>>6>+klJ*Rt1H_`Wq5B#!P_^+GYnh zj0tYxn0Dka*(@4(dW-gP`1TgIzF6QDlJg@>g=I=?Q+j2lRrBsfCK8d zP$0ul0NPW=PA&PuE^s}B|EH9|>?FTjxe)Y8AtU9l12JYu^)>1cAozl9P{3)Jji$uP zBv)13>wzf$eK}$)sw>Jcu*oTFC51`+HB0Q51S!%0uUcW|=2(4sYEkkD0fj z!qX8dW&A|hCJf5U1U zLCR`2N#0ttD3=&Sm%N1{=1TvC3TgdG$!-$$?`4jqHyaQ-Mu9lMUWVpp)W275Ald8| znqm$wUwj-gF@wRN(?5+G>cGtFn1R2O$qnBfz;XOE}P`}ZD-Jy?~~ z=MkUwzHu!2uE-aJ6{y&bNP$<7x~$YBhvVKuoI zWv`|dc)x^sC6Vhvs?sulE3;jOw7|ZD0ozHC-9cvEi<02g*rjJ5fiuD zm8|m}&&9l0-Wra%yKniRQje~ve-n^*|QUGM^L8al|BiRd)m&fGl+}XSEPUX z%5nKT86djT_GA?Sw*9QnQL)??74p3Q=bzF4@i@nT9NsIDq0o#ppDi=vL#L0r8U~~e zBP!%gLoiDQFbV(BWI=XDdRNt^I`;&>P5%f;r;oCP^-I=7jPi{V*?M`1@rXZGm3<@+ zquktc!VRh9bne+VZ|x=hq9tXuZ*tbE&7Lfb^!P&84`&*eiLcNOg1JsS{_0m-@;;RJ zW3TGDo#pAV_v>p8)=Gc)8mYmR+qZ0dKIxhYB)rCLp++3De^}rBd_BU|a1BZfyfu1i z&bAi-Xt->n5Y$)#<1vUy;?b7^sKL=*AYm@C0jDv;#MG9x!yKR~j4ei(Mdm6{E<4)I zr9pixHfCFCsBrV?$H1D+diy8`KwDgbA2tiql^ADnKlq}rb8u5++ts1Gt(KUQ!Uwp( zC#QlllQ2r|2PeWR;N0eW@Hf_R=Xx{uix5PklPZ78ZY;-T1H-d@bM_N8{Dg{k4C$Qm zdr_WMXo$W5Z*s!M8(69+tcs2LRgpqM}J8+Rz*VGrzPP)}1bYep~m`x-WkKFVP$KIFJ=&_`}MDvSJ`O zr7OvE(qZ~VRDjPR=31h-Nx+w221?td*FZ}OrK+ivY|kH0Qf;3e)6L(}E9V2=%B3xb z9?`$NQuq&BHh-(u-}4u8#T5*`i-4Qu!1FTZ6m9N+od$%Zq-n_dWWS+U1F!|F2~1CT zR+Zpf65T5Vc1F3oWC(yXyvK!9<{MH`%+9uD#zHJ&bqrER%{W6v!>-RoGqSeF+WVuJ zw5xmB{-WEc&oj&3wd}dy$7VcV-i2Z;eX~VBxpQGU_Zxnj4y=vBv9kI;C$`v)B0JhY z!8`vsNen;Mep^Hw`2YuLN`rgro5iK~pQ-d%IIfKOGl-CtR?Jv0w^q zqVr9J+gr{u1D{bAf4c;sJy$?Y&jozuN1ImfU#>HRU_|huQ#!0OOP1r!!N`F6Psoc! z>V*A3)h*XY@SZo$scbHeMg5|-*Fu{iJE9^d-mPYiLU+yVEtJf)@az8NIh-HooPF8< zp%)%*gwTIhSS(iQ?M$M(IY28$bE3iuY{h}-#h={I3Mgon!m3gQRYM`561+PxibYj4 zmLiK{7O3C;g6IC3p4Ds$ZaB86Cap?lau$p@Iy8uhHXO2PSKP@vM>;v8by)rg?K3t0 zsUh#PEajUccZmQAkK$WQe-VI#0;pOV7V*5UO;*A`thgUswhg^?QS~|f&-P5gla42c z>h#~W*gAkq=}%)<(Pm6Qe~Fn4#j~&L01tk_BeabK2%sOVw7hUj^&hVyzmI+;b`W4W z8OP#%r{O$ujTkzApcylxHRwFMVBQ z;J=V#y~==`tAQQ23nOR5v=8;<^&hSHjn4m3stFNBJ1ppobpwRG-(*=5(VHluS zJH!T-ifS*2%S^`5+~Lz1ACC=pokjTdF+rwDk{=b=#cunhhIfQuC=oSEyN^BQ%y~Zm z66>HoN7cU3^O|;&dm}r7}Pc%g`r@O{gq6&PIMl8N9y`VU!j;nH`qh;RsNjY_Mex9<@ zBnspOsweY0`Isdx(nZYKrLv`Ivfscc=AKdEqHxkxhrUtO*sA2^;P0CUM>1H2XvCL&j-y%P72njTlbn2d4_Po<35J8#wbwWgatrn`H)yod|8 zvE=r!*X)uSGRdaWJKVD)JV5a!EVG9~(^(zsX_(L2=Voy+y{$A>-ez&X40Q{;uY0j; zv!`C@6s$%my}E%umz3~Gsn+py*s!=>gv>WnJX3#EJlt(;x>Tz8yn(#`>@E0Rcf0;B z6z%IX7hK~jo#1Z=dyC{9!No4_Ez8}FeSf}&Do-i4|7KSIPl@~gs+?yKqp=Da*yS;j zu+n5)fegqYM*l+2-M~}A&!~rC^~KtUONO=uQo_CD6y8gyeq?PZw#g#RvG~D~5ZavV zXh430+X<8YZJ{xW25%|8;Hvt)eA)(~3!aR6^h!(P<=ZMz<&UfbU&1vJNe0}0_uyPv zmb-@4AB2PVpKR{d`F(njnV8OqoKTI~^0;;I2YqDUc&)?q*{pQ+-(HN5hw5k-- zNzEiq{yYP3<;$ZeP^w{r1J*f)Ds ziwCpvpU;_(kxKNPI|AEDs7K@! zKX(dl{^+^I&p1K%*?#)bko#9R`r$;)(_;grKY6HbYzs>X?Z-h*qo6P>wJP8a3#uE% za1Ah-h|YP8-CybRlHzlkk(h0OP_>d8YoR(F#jQKBm+*S(87gRW0LIdoVt^}94iZm9 zQDlugKR1KJE@*70wmq=_vvtng_ZnaS;GpbpT1DGQinGJM=3a+q)u5fdo5@M#)}-(D z{%h|-t~YKc#6J?WV{*`WB5EGSVf_a}n&w9GtM(nB{8gz!J0;ai5fyPL_c{ z_27W|35%YGOxN)|A=VE76iT;gYLZeKGmFMLW8K3in%;kYb^~yqFMB}t;TtEmUNVk* zar?SYZ~lqye4gxjK&q9XqsR&F)JOogp#y6KY6)fM?V<0`Iar&ZW3J?h894oWwGL~wgK*~IPl+7Rn|`mtrButfSCc?8R#wlBIPHbYQEMZGQv%T+ zbFQ>Yyt-sjcsKI$IPTdwm1*ZMDR(YjI0L(S zPtJ(+RS!~8;c4G|c@znzi8f~M80nqPUVv3E^w=a*($k=bIZLEH3YCXHRN}YD*C5LC zUA)|UE`=abb}4Ys`As38Kaj89i-cy{~`B?!%cnA5;!mKO~Mo^@i`idmFkSC&X)0 za5l9J+{-T2kj*9G?^$7Ia1Z|>JJK42BC8Es0g%Rc3>@|7)?Gh10y3q*=i;*F#{99$+R{h!wRK@9bJ8QhQlJp{fPH%A+R^T-$(yLV>Q~C z(8gYKWL(L!xN2qV0m{TedJTJN2Z!Dcu?e;+IBog>Koa>NwEjkiVJue1QaDy>fEhIy z(4(P!bTP1X$YdCzv82mfSAcGDE0GzmEX`+1o(}yaDmFf9pIH5QRmR-NzuSSX-y*09 zdI&XS75aHP(;2RAd1DLtKToIsFSPxSH-90Ax1|}4I1^^s?M=vOJ`U@?iF0h?Qu=|K zQRC*q4Yox$d1>O*>`Hb{b0B(Y^(=-xUS45(Q*CsZ5{rk26M$JKSH!|8K(pJkh8W>0 z%^ar`3#d*`Wd!t-#U&9J(SU4$5|hOeQVDS7@`WE^PaV%g^lJ8=P3>@KyLE6T#jo27 zsI>A9nN<1&Yqq*x`dM(-EU|U~7pFO4wRc}_*!1{*&};eSZz_K8=K;w{BmkQNj!qd4 zJBQ22C|;w_p5CzFh!Si>5!q1LA_Ard!lZ2uHhHD?0WQb)9ooGVSBnU@4+GNS^G@Pi z-YN0VHhmhuywdgj7OnNA+Pdr1+RS2TEsQ{rBEO$zf^%Az*Yj`Xwc?Z(NA9)Q;Z*g; zKEyqgS8f!(If*b}g@3vGE9^$ti?b(@66W67fPFH6M{%0~aw-2&ACPTROx8{#cnm3s zANBT$I6fb(y=5_g0$!umZtZZ;r+$q6z;fZf_z4rp%=7zkk@fA?si}n(5t26L2N*JI-C0dn>;gf$E1pW#2g1?stN~Q9!r01Ro zW4O?scsdT+pu714ogGjiHDtfi@_WbECtT7OkzBT@E;jD9qL~S<8YZPwXGd#-(_LZ7 zIFa%n8$iYukQP{;ztm=OhFw-p=wxAd_T7q>Z8|LR_zEJI9t`|WwV%M^qg*YU&b(vk zkF^-e;^%AspIZBb_%&vG8@MFe0RHZW;qFgUK#!Rid%VhKjS|p66J0ct)%wQ z##&F49n+^0_USf;KPt%RB3}1FtuMMf8h;^@K5$+4E)bNQwu@YNAp%x2n5UzTj4M$F zyHXwl?O_?Z4-!xphfqLQ?FJy5IW;8QP#eNhimlCSs!GFhsh1mu=+ftlNtL%yt~Ah( z?hApL8+AY==lDVUlvMo6+-|*smhKODLf01DSv!s1z5iCn75Q(c2|sz{R5wGe`93$G z+P~4-t!X!ld$8Y&e##DIK-D@*bH;i{@kp?nSA%Bw_rsjJ-a%8Z zm$kq^q9xsDeZDO?LjX^!P1sOmdS!lbG!5&yf?y2LN8xA4A& z)a>C82lgyT2@(k9$3#WDO^tRiiplmUGl?-U;j(ka_yxXDKqS(*tm6zi8{-KzxMz7g zhdP`#sJD=U;reQDn$_PwVpixON~aRSwkixUzuqC@!S03IHt9J1{+d-;}!5_t^3>jgtfIRajG>m!!qg4L6%YsbdCx zvF;;%kZPQF@c5g6j9XWEmPC6VkaK5YOz6=$A9P*0LAJAGY&!{*W*mJ&Ug0C zF3wKitG`ztfMd@c|9Rf(%#0C z6@ahkBtV%UyPJiperwt>!6T``c*JZ(AmpAMUAnJR_Y2NB+A8tIj87l|1-1`pKO-AP zgwqx5@0|X~{uRb~j$Hu1SoOLic3g1@?b@pu z{Gx=}hj@?!_ppHpz$l`o^?6+OOq-uHVIu1DhHZfs;nrviS9*Y>W3r7Ltk06O0=F-*w5#RouUH?MP=DwV@Poeuz?mcZaqlrib8*(;{OM_H++{2P ziYzGBw2XzJ;>o;^-lR+>lZWZjVW`W1Ic8HQj-gB?>$FaH6f=iFkBNtLa9?X=^7*03 zY^*T|upLFpY5&#A%yhdPKx&M3R-v^8v)jbd#+mDQpp9#K&ytnHb?+N9vI&N=I1vKC z?mog#n?}}Z(yIcyl(qGreIlPj_Nr%NdLv7uylD>9U+`=c(4iHi3PB3qRq6?30qGIX zusT%L_PG(NybAGc>?#5V3CT@TzG?F5db+z_leYJ6@SvMG+5&2WjRJYzf$yYpnI!#K zF+A84e|aWL226OH21v+YR>^c@Nlk2W(_pLR)a?E9A@c6?GP49vTV?ATX2kaO8>c5T z`D=_4zplCVeTk_MZ~T0EQu(z1B0UN*)|p>wIa_wCG-#!!ftp+ugDhUuR$A5j;W1(E zB`niuQ+JKRGIh^^FWsgfKNn4nx=iBPwcL*)tR;bUxAC656iBMOo=Z+A+>M2ai=R`B zZ5!nt6CcB!W)U;nUZGg?DfHg(RvcQ~hDYzt$j>|hy7A1j_)EnN3+*{X$$Tbe1&I$u zw2|P`leXVu%Kyoc{EL^1st2$PUND*|HLb|b^fej?!d+xzmedN|X8sGgj7L@&0Dxh& zmsimzX1%Wg{%ZBTzUK1-of>yj*RsmzCc*u-`|M6{Ppr>OEWfru1cxU#{Wt&z2oT-ljhYp*HW5%X4OB=DlmVk*= zQ}JS?X)V6h%)oR;++=DYxxve8N{-sACmSEnz%_39JsWf=%|%jf3Ivz?`mw}&VPg7~ z@0(p}HdLD@>GZ~smY7Z5ZofCp4$k+!%e4APD3P>ux#GefBf4iSuO$z-=)ySdrdd~KGOHKilPr<@IWDWImTgfun%q)u4Bl>fNeWu^iv}!anU1_kPseb5(@fI z+9t5V{I_ATr_(?Y-*ZM_WvqjI?{1=z2!1G)5GzpAKmj|CS}( zj9VoDAOqs8!7AgFHZU6MKf@^bN?*eC8F4LW%exgk#k=p*-R>kR!xTkiA@*Pu`gp1^ zL6`W&&!n*AhBL-p?y`qk)|!Tujz*1u8C#D@ks zd!uK0QKg$1j7IZ8$W%55NzK5mJF%qN9p*_I{y581!fCxxxKf0rWNs*=A%szMTnpGzMeLE~pNQ@3g&Q z-}cMIDGO3>Eaqb%fX6Ali7K}fcd>|+K7T`9srH?iUuLGOre4-AQhEN=id--#u6({S z;O`Cmp1FVU{S5%Zu-dIJChwO(s1zkPoXHWT=hRg~1+xu__+a<9^FRR7B*Yd~M9m$l=&Auut7LW>z zsjZhx()SuzozFq#q&k)X@w)6B#x=?wID|C|#DT!I4`^+hj{*@egncTTP6APogjF_m zAtph(s&^y&DD&AL(CVrw$!L;^M<{2pI>HJD^&;gM! z4kQ6B%1VhZlRz?ceN+bU$j~c0P6ftm5|P>%Ol>-b-?f=6&#pD%&wh z6{5SdRHaD~MI2ADo8|qzuG5e9!`1)074dgMv-K}Y5^eOXw8T0%eNS!RFXT8SwJv&^ z^edEmoBcb=Rrc1g!+F4IjTe2JwUd(3v)$RU{ln}mNycEaGj0^hDhb3flx`OGle3Tt zyaQzP>iXCYxsPp%%c$+F^>Bj-5zDlt!Vy|P4{5hJmKUEwb5~^fI+drEWWI6EW!Z+j zcMN~Kv?dkD$9ZRHu-~v%6;CN6LjCi#!mdt|f#lDpzcWsMfB*7y_jxWCt^bCW=1*fn zNf`f7rMdijGEu}c$coi?dm%xJL z$*qhbp5>ZgyY9>NXhj)Tu2uw{;Ug(Zry-tdBrxpS!RUpw;xLe{yuJSQm_20Q2^x8N z$|ZE?d!ZB`*NtDU)CDsFiP+yO5XTNW6I;WqgJmONgcB!9W~ulHbY2u9S(fO$*^FIg zzkSxd8lg?-E0c1&+4i~*!37s?ZRk0vEx(9a;d9lX~3re;y( zdOh~r9Oo>QXI|ku>qh(py23xr+=<`4Q90*_%assQp^5k70P^!q;^b5lm>HkvB z{S9)_tTe>M(DG`r-+t<@(R|>?Znh>#!bRU({hC#h%&jVT06?%8%8iwh9Uug+u8f$| zUtF#gkIt78cW2fM>MZQohCE3IxrsSr zfM+aYzw7FILmt7f4PQuH;2ZT=--0RtmFoWojPY3Kc&>}@h?E71)R0*ZDQ73hKLiZw zY(DAxHb2s^6Q2D2aBVtK zL|~wSHcyO~nsVJ&3mw{M?=l-r_O6bJCsnnwdfKY6V=H?_P(AWbuCZ-J&Q-0Tk;SJb zZkd)DCyh^xbLUK7%9lw!+7pYaTNY1eAfLFgbaR zwo+{sZw5xmQF#Pck3Wb-0=@2te==2loTK$QR`ubbC4KkS4t%*h&uCjb?`>1@)A3FP zxu;)BPsgZ>GD9L&5)Xj&C`5av zG{_E{fiar*ebc2`G3SQ6OKLi$_EJugYrQmXBlZRj>0X5iXUu-%=}|C&4$GUlXM+hUnj9}Uo*&vFCtObvr25L-?CHS zL>r!~L`uE13js}OHH&;ivieBTsYcj7Wc1)`@9fMpu^^wJ8(nUv@AJhKPeZhny#vkV zc+aj{e9^Ey_mcmS%J-=YR=3Ngy-%Zg+`L|2yOQ+fJGOu01E2jk_z#0Z1fW9e| zlM(--#*4LpnrztxO`!CzvdS3Z5FVGb`8B=!0KWDFWpR};sA;oRuMwq^rC*Q-R+FmZ zGN1ENk3&TMDX)fDax!7IY-BA;`-@tGz#OFx_q-LS%~n^x@c38lyR_ki{uqaM69zex zYdKA74;qsM!L!q_%+xS5llTAJyYO?QYOPUfSj_+qHZ0K_=6S%zE?+y(!lQqoCa{f# z)-N|%L0GM$dG0pb1Q*4-x?9Y#gMihbK`Z~Ef=c0BvHrvcq6(S52nxkNW@O^Jk~e#r z+6%=lxH@{6qB>YQLgd-1tlDl#OeVh;>Uo=eaPGbF$Ul>}U%da?xjy##&e1N$bt>~Y zi^tOGm*6*=;qbJ`W8E!-DowxtolpV)e*J}9{6!iQ?4oDM7ZpHCZ8Vw-+!|(!;M9^Q z-|g2Is$U$T*@FUDfW9d5_fQlmelSiKWvBxNO)hm0#DG~WW4yqbxgKqR0#J=tp(-mC z0HC0xC_A*GxRYZqa6TCSOr5Jw1ZoEvy58r@vczA)z!`7&?k-d43%eYbqj^_q#;fAG zE8+!ixEoXERto1Lu_MniQUOPCflHd|5c(%wmJ)a}H%R6~m0t z!H#!NtqHwm!5^_fk*Kef7f?KWFJ{l=$nKA_GGI>Li$&1AN$bNp}7Y> z%pe=a?}w0P&8J*1_iMj7 zU(cRB#gfeGVICQiYo{eu-7Ff28#bm`;wCIkH$G0c1`Nz-l~(+&Db0Y0nY>?xQAv(> z@5PZ~V!9B{2~Et&dx zY6hjNu5#S#`i5mR6RWCtsOET8P__MVck_wU%hs)-CeOpC*11e)zx)i!_m6(Y*>SG0 ziS4%8)$^x5&Df>W{x{1tvG}I%BYQSR+tGG{E$67mJqjExlgf&^X4%Y zmb&16%8t1*H->c5R2k$#tIo zmaJ>^LfQW*75o=+x-2wWE<}&So-SXR1(oUxOjwvz<0QyEvhO!QOY}{eivqyFnI8bm zAX*!myKzba}IVDdF_2_0ZWbvtEC=~I>Yg5xjWPBspEv#M$U2qF5XP9j0wJ9rEQVi z=5#x6PYY(Qi=4fm&Lu=?&u)|#h9D>zECM2xU9+);00>Jh=J$A9CU8&$;gRCv-$~F4 z?lq?GnOJuY?tZcB4DL1L-RLf+DbpcM_;J~D!rt@(mVflMJtcwsTZN6c0afW6AcLGODM^r5HEFrsH ztsScSiUgk7KCrnz?j8T=QE+Rm5ygqF%c1A#kC7Iu3kO$E*#1i?_b-klUYJ(P`TV8j zY*teZ_6C9w$(A%G*xdC_t`W7K@v$c#0B{E=r(IIV*+eLKx^X z(5S&!$FS=zx^ia-v#a6aEtPFAStA*A;!M{qM2H-6pjCUwzJGS;$*XG>!*jviO|Np3 zb|>ZQj&91MsOO%kaCTa|+emTVa?yt_h2~1WyqN#;3u*)BX1x6jVqVjqkMwjSrX#G#X2w^b^gpc)pVfm`1X zE|s?+>rE^zF|n|;%~G39gde_p_t-D~u|8^ue5oj}T~WK{LHawMh_~LDC?LsDL1C>Q z&mN{tAu>v7H;blI?P|X?SUD9)GiCqG#a}&3+2W_umU=mD z7Tc`M!XYt?5|%MM2n2$`eBbaDkfthTN zumLK4AkvJsY0Xu4zTbTrFF4`x`ImZqh8)M(RmUy9pJj z5M}*9rgi0yF+&C=R0i*o*%bnL8VoD3^=lL=1%jw1nu#-Z^ zwmFtRkRQ+lMA#=RRp`F{f6c4^g50$N0A$lxZ{}f?|7r$YbM^Kqb;&M z_V`RRg(iniK`_8G0I_iKDVg7V$=l4)A00uy&7bDP!{Bf3NwSYmy z0@R0yyc$jsPSb~Rkj1?Cbua*T_Zm8ebU&EAj*&#$;Y0%fj0=Fqx>OiSt&O)EpDR^o`3NR?1~V7jr%hiRB(T6B z)Zx`F?TY|n4aW3pZRkb0=pfGLF7+lW4x67#h^s#TxlZ2Ho_T>h^ZU@zwQb78)Zu|P zT!HdZM@f{#{i9AXckC})on$cyyy z&zryW_e#&07Whh6Pf>`r%X=b6i~dtbL_BEd+KchGMyi+QBSMpyHRO9?sA1*Nz!ZivS>zGxBl4@7UA{_gGjFKw>>Tgm-4qRcLd6fX6DTc9m*$fRHVaeaX0mM@j;05oU%6^fn#*VIme7Ea;HC< za(vI<*s%)zc9`;=wm5yZKbYECPxI~}1W%V#0d?0$h@ZH4>s(_2p4?@jQZEA1B=#PX zee%>>1$l@weV@?EA09V0)clS&R8x}2Lb-l2ay>5nl!GlO+*bd%@t&j6BCh9uj-Ym;_+N?a zk)+8bR>Rz*#2Scl{~Z-Oz0_og_;bjra&Q~k$W~daZ?Ze_^*5a>!3q(bTLS6pm4 z4H>qQ5Re;bAA$w%nMyPDtC63=4!FjT=giEr6y7IB>zvbg@*8UHt-9oKt!Ly$(3wLn zP1_&uu|2mWt34AXp8npy%AS^Z^N%jF<$C;6>*tj>W1!l7^;ls@FWh5M;&w58ruLqV z?A4JX^A0&HO8Ot;)|eD7F~{0M!3d7h?bJF}wr_>qN4~=OdzsK3_qR zwy0K4&;HVHn=|!iT_4Unh(<#H%ZS|n!yE0*-&$^Eo(4GwQ_F_|T!dVy%Nv2-OO|Fz zhJoTe{n`?{Q~CGpApn3t6t>e-78Xl3h3?8jbL(-u-aFa;e0Dj2Y%xVl?jSl=+kI4+ z;BP*6K{uT$;C%YA(`q{``%`J@K#iAw&THX0i?@ zBbCGLQxZhlO*`Qk_Bc!|MZSH`GutR3_pA=EmPrX6CkldrCFW=oJ5Lm%?8V(48|4_j z7*x9GIhBz-=rEr4Ccr0sp?F94~xG`HwcDWvSnUAPnf3R?uSBpGF|1L!OE*|LEmX-k7=Im20&ieIplMkXJlXGCgW5_v8(na{^ETJU3%=w zuW(v(`jahL&NUR$%Yl6upWe71ok&NR)YInzu!a3*Au#TLk>0#4Nlq3I^ipbGipxxE z5l&1=NVKDuJ+`pM8a4a&woNV$^?Wp{%^rMv=|sQj(_+`KWc5tlTb;*a=JQW?i%XWo zIehq60Odq6!)T+?N69>F)ypA|)@GtPhAt zl9lu}Wv%?Lne{K^+V*IWvoW5b2^!Yt_?Cca<8o|)GFl%WeS@8)Ib+_h2myc@2QP4$ za!$J5qJqREw4n;4s%4f#!6=pV+Bj|;bK zPpvKxyV@qsxeF=!3%(TCxp8``xtO5WUwQp`B>)ggPplG)$8xGm(jl_=5hu9%sY>Au zdMZ>b+g@FRd*Pu3AohV*U|>p@h{u^RLQ@aviHR@YT)VR}zu9v%;7*}`NYTS0F@=Y` zp;co}R;_+6UE(`AsLq0R`h$UIRQ@P@-TE@-aYy+-@!M~i&9yHHG&}ic@{3<0id}Ke zyk_2T`UjaaS`jh`$fhf@k^}IA7N3H9w;k~TpY)|M7%yLBO~SC2-L2lZI0guIUoz_1 z%!D}#;u?u!2*&quZ&ysLXxf34j8Tu5tb z+W39xoz?B9?1RlssIp>ikkv|dxB}KS3|FKg+&0Wk2cypc>ToO8!{tMO#2SK5|2tSu zye^0$ckqc_WaVL8XRVM)PQ9#82qIoW2vZ=w)%`{y{llp14a|&=$2sY|$-Vcw{r#T} zKU{i06c%c2wz%K=+u7f4iD|3r%lY%JKlt9q?fi4jYy9f{)6=K;OHsWfJ8?#n|1HG- z7jhoAXpoCAnt5-**_+nnd+58>P3w2*nqhlViK5;aUECzfzXBt;k`(ZSwzFEDz?{bh zpjXz)fGg^P#^?*EG1{rgAS(B`A`eyrfgcB-(|N&5$C3*o_4YLnsd&sikdE$lkV4|J zJwF61_Q{MspR_5`H9R!-WC^-drn$9junpF&-A{=k-i!se8kc zNH1HFj!(7@qx4V2EWfV(?vqO1dni_0==p;9J!a7LC4*9UJ?^SmBa|1Fpe1H8s_P1| z)?RA(01tUy#&u?GsOM*e{6V6Unhf2nK{u?a;r7v6!C$Fu_ZHu6TjPUE@3YhX1t%h; z8CpHZO88O(4<-vIh>_#CUSAVjX&|gn6pLW_!FLnb-T=DjM!@VEK(wv;voHa2s9ngr}Ny0+`ko|9b6gf{Z3+nBjdTpBQF5M zmGoPo+l@z?furFs9qMEftuiT~|)snMjqqRAz&1xuuwz#oq4afL=OnADoq-czMaW-Mc<@TOf(oSg-5b=*Ld;ZQgN6zMa% z4V)Y%B7gRdng(7|+&TZ~#!K_>&~G1qj&JUocodYqZF9dNBn~_@eCk1bf8?Ng0M<90$vlngGe`;eMIS5*)NUW=c@+fd9O6l3jJk;RGs z(&lfqG>M%oK5;)rDOwK9q2vy7=AM!c?Rox*Fx0-)&S+433q$7;WXPK}a#!S0@$#b| zeRV@=s4uul#RqObO)hob-1#%`dUN^h5Bl>5c~0fqE~_4G!*p;AYMy8gMdK&YwG+bD zZT$RBSjBhuG3z@@!FBI6gNuB{4s^Uz((UskY@oh=cW2$w&3H4F#oVr!v|{?{HAk7fHX1%u zz(&Sar}xcNFZ^~<-fx1WCEeTjPdio`Qp@9Fk~!N4t_v-vojEEP#YKiodd379JqC zl}JTva=>d+=mv40sIq4JwgLZH5^;`W$CnRC~6$Cb$LCeS64#MWh`*?^i54(0ths4tsIIm!GA z5iD=pEDEG^q3dUaFo4CfVftv)XGDru6SUlr>XIy#_!Jq9PYtep^3u>DuvH@qi%7D( z#g?Tm2e5pSm*oUPPMm%diOi9s3vX0MV_wmo$(pj16mB{Bw``LChQh1KTX~=4#wev*WwT8c_trD0FpqJ1>y>4{J&c+3k z!}|(j>&Nv29bM@X`OV!#RugKN;Hn@cIk8i-rTUs;O!lZp}LBmgF?tto7k+m5kA;?^|uX1BD$`4j$mP9QDm#G$$|+ayZ>HXK0wN(do-DNc3~$(=k>j;d&{PUe;iEIuVOt7|Q?wsCZs9So}*9Sf3q=n&cHI ze(oc-YBj(Xx96NR0wlv;xlz_9=$fJ*(!Npx(F1*TpDylp{1-E$m3(+`F?*hzL8K15 z$xJNw=>pvVz!b@CpsI04%|Kb7#O_1*)HhR(=80%(ff%wEW@F!H;)S8bs`36Yrc1ow z##8-fD0sN91n^;7S5#9A)PY(a8&;CX^mIhjn^^37}oB~ZH#@&G? zNrJa|AZ5z@PyW~k=6da^-Tjc6Bb3fpxgXj4w!Hump2-@M&S2ALNxFi>xk?c48DlPi z2m`dON(=;;yT2>>0fN61pcAVlRONG?EkcJ-!8dyW6)vPNn>bcD>6FRs*Tv!1ulI@F z^I-#Lz$nNIU%G*lUTi+rncY_JjIn5t)hw z#5H9hZ6*c_d??x_K!fmZKlzhqASjGQM$RMC1rDzKn6Vu9rzs8!LrBR^yTBdba;cZF<~XI#?b=) zWF3npEkF;)kQNZq?}h2BgNIgA$@x?K&#I{#HtCatuNL9<$wRrBhd#G*%%-vu=;Gbybn zR%pMrvi^@bxqkufUnEJu*B+WaM2d;c1gmLpl6w<5vQ(WNCuy1Sj}nY#jj8=6V6~U_ zX%L^TqEV(}B?4XZiqNUV12l^gZi(m&)^2z1t(@$ITE! zyCs932N+&~kw65}d?D3$^ zQa2@d&as!65qMS{FDtLinKqSe)6u3b=~nwm-eRCN9X&Iz0^UT=Gu|$!HRH{Qdqtu)zXkTcu3cTZnMvG;|yEq zj~q^3v^|MqdUT`cikHC)000isQN21mD-z5TwHgM$IyQ8jF;){YTGE#8fEMLv33sru z4J|x=iA*OZ`-R8tdhjK>j+-rdRhG*0tc;~d;a^>N$1@Ro%|Lf^&f}8(;MmmA3uhzE z4<>c$-~}6t+SnNNRT*nd))*Y6SJTs9bSb$^ew)>pH$AS47`e4!Vgyx~!xZd{EDZS}BH6#)O|_ zkIYx_2H1FT{78x!#_$zaZF)VR28R#agH*$5eA^APGw_4+@N3~_Grf;9TAij}(bbIE znICBGR7rCHP4M!Q8;~Bh(8c>_ZImBulU!3{ znU$aG^g{$`eyok|a9MsvMLqzXt1nxK_KKMLhr;!IB042sIUy6z(frn`utY7ZIvMDz zrZ$~>aA8u!^VWb}lW@z|<6qHp;Y?U==FQ#T(HYl!{D^{ikx<`a^NVwv`uxra@Zery zVI|(`{j_TlHJT5f5!rT4PI1vGYF({0=(_l@T=cD>X9I^pi5&M9P%hizN3j6cDvW_$ zObOf&!h(u=;_4NH^69OzM$*BZ_;8i0Z^o5%GSxb&O*uX=n2yKODPXr5ixb}P-IZA# z0G*LwNgc?i>T?iYHDU)DnNYaq1Q!TS)d1n(pUl{>J2&iCQ|VSCifHX_q%^1Vp3ja) znNU^V1-&;j-Idt-wh#;7<;7h#wb(yt@c3UsB>y+W{X57t?*dpLIY#qo7H6zdBw@O~ zyPdW;1w*s7jM)Rh_xFD+;>*tk+#cHfdv z?4l%Fgxb4u|F%4_P?Ue_W_&UDIo?*dWH?fsI<;)L6*u2= za!)}H{#S>TQrCISU9(G1ZpMCBc8L9NVpmcpGyCTXM#}eM+~DUu*p52(IH**ZGW%MsmlKv0eKAqvZB|fTsrOkYZq_gyZ95VlDfV#5c zi)<#fO?vsIDFEbnNM7Gv;}Piit(bGG?Y9|eG2NK$cYBTAvxWTy3GlLr8s20H0vC-# zKg4EvbOcl*+EV=4L@5s3OU3LMN%2b;WOm#yZd!L?#(e|raVOxByZqu}j*FIl86kjK zPb*u)I~+ z@mtWZ$V<0eFz(8SvDP`nfV(D`w<)x}TN8OV{nV8- z>)YSL^U~XGlKFOQ49Y7=aUuvDpC(kdx+GtZdZo(@0(stHbqqKZCr+y;EL#+~E!~M8 zEx%kKZQ+;`CQveFQ&(10tyL5Zm)N(feBnF9QqWp+@oTGobP`3)WlD%Rx$W{w&EnUE z<(E+|cc-4V>cumi1jf3dEq$^2481+Tb(9p3JGGLLg(J$rvv4U*b2@KVo;@On-K+uI z=Cil`>cagH)iV1K!Q5NjlmEb*G4GzXuN2d9=xD3F5B%QRX8ic{mWK2V>G8KNCt@Gm z`oZz+mW2so?@F&&U_&ogf2afdoaC5)ZT!G#tYoR>2@+6M#4UfdKZqVXJlAz_9cLhv z`rk%K{vGK4o*r0f<2IWnCbkn6Cc&Asqkou;3md1LHN0(6#~4{}^m@yu7XW~qhtDg}+Aa>Ga+fhdwz~~3(ym$K_myG(s{ARM3(?U#W#->V{Ht2S&ZS?Z{!5vTU&jq2?v>P8&dj!s*7v9< zdIfB$o+(}SN*Di0-EKNNe|tRm>9YQOk0qEs+cftgSbDNcSc0EgAM2UTm<9wAqGc1H zleHc72rq;=5AED2%F$Q6ixTS`OUJ|n4+?_v42j=Nt6#<%04fUuZrQcAtXJcflyoNS zepw~*grz%5YYTe%lc}lkMn_D-`NcHo)m;d{v+vBl2w!{RJMjk*MW(@sbu`D zrk~)_MCekxeH9Q&6^V1DuIoO)8<741YySvN6=8LC2!Hf^iFx3y4sVIX&D^J(73Vvj z;`UOPf^2u6(d@k5mbk0~2mOz^Bz@7WRIa>;%}l|R0{U?D3*86sfk(&0D~P6}f99Xq zuaZ%U9?xek>WKM9J@ImYkPU0e-l0LfAP{=;9Jd|?Xfydb!_1*<;H3rTH*{2(6-&uO z_Nl(C(Pu=Y728{;Ht@{s)uqy;oS|*Y!|CX`aiCSZmF0Hx6eS%Rvr@KQ<$u23tu{<0_06%|m5%~j-XctJSy{LmeTJek+{FX{^etrF>)rT4*BVc~ zxXzfzr$;{^OP2{*SL)>-1J%$W2GWNSYGqJAeqp9`lO;|tPbUG!&kKQ*3F~gf{L;>Z zCM@(&mAu>mia~%C{fk#GATPa&(MFR+pN+<|0YvBl2=5E`=ef2$tKKHZvMHs?m=OBM z6a@gIMnEOqw?Nv3{)v5bQ%@KPS`HbZo z6-}#}J44qW#4zh6Z_^ynRF(Yng^faq(0=xdNCiq;8+-`bi<%c#sPd3ASJ%9fmyAR zyXtA8RQj$%LKQM2vFcAiOnuQX^9{Z=b9d*l7!G=tF1`Tyuog*CS%FUh`-w=|up|0d zxI0q~x}K}>Mq@)lYa|zgbGU!)Hsv=m(~oIeog?V|a8IMRSRw%bfB1T@uqME+OEirT zLVyrj=m|Ac6Ph$J^cEmA1q2MeBS;akg&vyH2}PxM6%Y{+rAi0sMNt6(0Z|cAQBh8u zne&{P`TqapBA2;Z*?Yfh@3ofys+oY>4m43611Df9F<}B`QVMwMMlOb3QeRoBq0GI} zGxEPq|NRf=rGJpie+pop(=fBucktK?_As3ch~~DJkztrq(_{W3rP;=}RuK$vGMp}D zr5xc9N-{;j%56A5g=@^3i(U6BBKC&v2m;OhRMCUMpAf3G3#yPJQnWt9iac>psh8xc zh|*>retmz4_91cE{(hgz=MM+Xk{o^37_l=WUv^zpHU{wPb&=Qgxfh69&cx@&lHvE0+*Ys{*xs&oOup;g+mlLBusk@J~&tA;E6yV<^YMfByX{2^G+qwN- z+wR;PKRR*b=hHS1V{p-}Gm|5jo8#SMm?Y0zEXtAqbC&6=7iNJ4fD*L65fiSod?%y^ zX(XXR2|?a2b%O$<$QqFlvlw%eL@Kf1z`MI<#TLXZk0WrVW(D>@B+TuZ6lQk%hz15} zp!8cR-Qp(?R{_~~oW=I)QEpPZ8jU5PVmzx;!q2KQqbU*T0c+>${3hk?t$+xJbUDdgIE#|AI%HYJUikb<_qG->L-*lpT z_vI`~XBOI7man!8#$FO`Pivdzs&foltPL){;_P=-=5DG(Wb|gpmso|8?HnO=%u-TQ zVW}y74)BDC9Z&+0)SWyVRkm3AK|~4cq#hLsJyC+QUvY;^^n?x?Dd!u{$?L5&Cc!yO zn{_cCU1q`T`OiI{apY=!zc*4fBUY31xkYOG@;k0uU?WF8lY_5EKaPIXZtGkrn4Cx| z6^F9?9UOr`;CI*{1xiaf5c*+>I(cZC9l2t}D?zF=!f9?NECI++j2P9xMn)Whx}3q= zMH#rnEg9Fmj`?d2n(ATl{<8IZ@1vv*e|y*P#fspmgirH#&4amMl#r|aJ`PJs4~BPN zD@}!M)wM^Aw1_xFJL-@kM6b%Sx7$Q=e)~6f2L*nOyt3PWav|ep-meeXD{|gpkKPQ} zY43g}^=9F#+4{NSD}B?bkqB*N2MqxLkw^rZUZ7L@jELQ=R9Dtdlf>|+(yKPjsEcsU z9&_C!^uts}`kv&`gELYtU5f9ylx-NQvnjt?&);Y3m*{UCO_45M-(9Vuymj@XeCJ~ly!R~iET&Y!o2h-A#!_$DM_sd>>7)==Ha<{~F}@K3#q}dGnZ;jLUJQvlJ~MvR@BHNXN*1`mMB(3i7gH)Sq< zDep1LJ1BE|jQVL{^BPbyChxCwuWU*iVxo99rm92nS2yNV9x%ngRF9$~4k}xHZu2GN zwT6Aj{9;b@DK@?n9I}EM_c-tAI*K3Nl=ZRXHHNAux3mkijeNQ7`uAgC6?$cH>0#vO zdl?;QsnDH`UqQhIN3A}VV~>xgyZBewfHqY>HJZ6wyPq4G&^g{a@GFJ)na#e|U5)eX zXKgJUVei#|I44lYlzQTMcJ{PH8;6O}T4R}dqL~vp57mVS4h$=`Kusq3*St^q$9!_h zQM7)mI~;k}GC1_S;8!vCcdG&ZR=RxhN`bH1jhlxvzT4k7x;FP=vf^qfqxJNxrgP|G8gf;O<|Q(^vzrOD39G*B6-Y1tbLd!_eua{Dpe#ztWP z$WjDj9CBtO1&ZPKiU<3+_`i?oA@D>5L*^dal-L`u%Z11o$_6ri(lD1Dz=Zzr@ujfL zrywp3?`-uL$&~bOZw#4)T@Xw}@uVB`-c;gP1ayuBD2mqLIa#1F;%^L!r5kfweTa}`|!%QIf$;1ioOdR?V zBVOiM>Is=zT_vvcym8&sjn`j!*gSFpbzLlwAkR+d$nC7HqF{+ToZ%n z=-N<>@zgf%PK%VLl7uC_q*3+#^!jjloJG=DloKy+DgaS%S{2rbrw9?5A;dV9r@{)Q z%XnhHc@2)?0Vz%1OH=yQDxt2duNuC1eUdvluf&IQB*M{uA#`5sS1kWnL`HY8}VKyhdvKLng(p-;r|un#)gwUwoIIT5?alw&G^Zg|qm2%2pnn*_YmPLC-@# zyU2RY(!}^yfmv0HdiPS9xZ*E~LM#jckE6)sp%Hj&k{Z<@SRUq4yTll+q#s69x}+`H zO?Fu53g>mBVD&o-UiUsKXh3UXbTzLrD?2M+AD5GOO5u7~8Q<0T+3df0wElyflMDbn z+sR0Muu_@5-f!9)=HSa2q+oYX`$ex2M`gk%UxsWnrdu~Au^x>9tZf4Pl6iI7d!+>W zpEF4k;xQ^|k3Q%|>)#irqQ0rdi@}#ckO@N-clot= zRPQK=baeV~Wdordz4?h_yQE+86i5uEGKm1dftI{PO)J3CMj5X39L)$aDNw&t#pBbNOJ-`^!;v-V18RdoHIcWWqq2Q=V!uH?hfl#sp<*f8llhej*H)?PV?$X`eSW+9EMiXP=X?h-?I{8zxAyg*x}{X(31s zdt)UL>2 z-amIPUfj7u@n(`~3xt^kLIiJk@3xQIkpPn#Y9P?qM2ZKV-hWG6$HzYl2fjw=9}5pz z^V0vkEM>F)c0uay*5&n-|FXdSkKXzZawla0%(DSzbNceCWRIpj8qY2fsz~R7_AW>GEl{XqojBLpGW_df|@Qp}z>0-xenal63rvI|| zUs(`tyO;R%aPcg^*O7ch+Um+p3oez(xjF^-vsdQR_rk5may7q54+m}Z^a0V7ZkUvE zsW-)$AzUwQaWmldmfYg@UY0kKlqzf#3U0x+y&iz`6%@_-XD;%f$aumR%zSSNEwjpa zQ-zC;nDmatQWFyG$^3RJ8gA!TC%O~asWVq0!%28iM64}cHM;yK=L}o?XS{i7fEWs7 zKr-tA5GYc<{H?A2rZyLT`aB3Z$?%|_%a32oFsqnV(-&zI)Ah*-hp*7fZJK#%=<>^b zylOeas$S=E+wi7gb9_oRAKk2N20mh9xaLx*u;3*|F;M*Lb&4bZE}et3MG1(%JnJven>^0s8^&JKe~aqgl?F z`l7Q@R^NT)hD(^n_;kk_BF3JPLV6FC$25so2TkM<;l!hvA)VNLIvzvI{nk`OYQL{h`7 zzE1m-Gi^EsQ*dKT8+(n2ry!_3dH^PIt4)Zy2bdbuCwvCT((L@$;-t^BjgDT^|3fbQ zKfv}szy3ikYXZQ05Mnl4Pf{h*^b06gic~nC%8}Xd3m{qc%AQYwD?|V)G8TZQc$)Q; zC7J+y^ADcM+F{wzP@{a$=fwV3b#svg(+0$$1hCdHaX#mxs}?EjB@7bml$v(F;YB1)bmW>+z66XnJbsp8d3|beqP`{xuR3+_X0t`Q zc_Bx`jNdUKJczm`Ale;(zFLp zvQkO+W;xCfa7yT9du}3sH{oGe*QN@HSwGyOCtsw1qwm=!; zwLfBn7&`a!8m4%rJIXz68?U32Za6sXe%NU&GP1H1wdX9FD}CnY@KUISwRYkSMbUs} z(^G!m3>MyLUnuhPawQcYJ!N2^f`@*`R|c%Ue!C61VJ!aj6-!O!f%k5TB%KvDRX|y# zQ<5}Nwyw~@kkC|LI{looX=aHT{e`F~w4p1(g&L z%3bs%V{av7tI(UP-{?0j9)w+LmbAA-fJw@U!GmG#kEDwm8Ixza^a)!{STA`&1ZL@Gh*n&1vx>DF*nr|qJN z`^Q_;U8b5jw*=Bk~Bl}n8$*(mfwYiCuC-aKR zHwu~pc;b0XnKmsv@>SHyrd4BY5z;yGtGrO~jh_kwlaJHgB9XRC1Wr}MFqN67H>PoQ zwco;jVyjw6_;}Dmi5$`g zeKltd*P+A!u=)xI1x^Ee{QnRRA3Go8E@ zHk=Blv9KAL>QaeJ6k3G`mI^8{aZFF9nUBGW&F1xwe`onso2iXq|+tO4Q`5Dn+7qky7wd z@}0%elh_=N^mED=%F~3e1!Ov1n0}Rg%1oh_5WfB1W#sdDQ?{@CUf?uNWqAXS^QK=* zraS^Mwik4jRnn9>sN#|)T&$U3@N;F>rHAtRGqKl{bK_J*z$eh4g7;1Q-P>77w{e)B zn8#rBievKty<~CAx;wkjO#|bY%2cQqnq-;+M0af3;c@6IaYTnv@qjg?H)IlscLVt1 zYq3Up=I#aW6N3MVqhFBGs0Md2PfzcXMbHiaO^>$`k1gmhwpro{ zg9XAUNZ+LqrPTC9A~FVzZ23af18s>RZ!-C@BV&5?`enz+GiD@lUE(D&O2R`|>+OM~yz1T~hQqc3}F!sz$AD!gR zn^)&LXFJ(8YV~{y`>pnTXoQdOmd4QQdZY)qoqr4KLF*jA-ntFZ1Q_JB~lsG2yZhZZLMTYspT)^D;9-?m1_{Nws0aR z)-mmsl0gF1$3Q6zEg==uEyrSK8;Fk@WmojiP$&eRGcZjE+w{99g{dkl$QLTk7oh%s zjkWA60KS1Xor-fX-;0QIq+W_vx89Z}jcd=C+25=%{1l`qn+rIjVP+wh;jUa#0Y&eE zQAX$Y-Pa|i`h83@bdr@yu?drk-Op_eA=~cNUhhnLwTJ9)JFVszWTgY$CA3;6W=uPs zzg*edUwXyu@{_xVVgoZrncklEoVJN3G-fe9^=C%P&9R8(dWp?5BuJ zDu_I#T0Ul|R7r0lB-d!_S$I8^E)e)ws;bqEKCo;PjP=%*cZV?A0I#N<FHGRKt5^p`A5@cAcR3(YUeL;#l6puj!2vQI#ClHp`!(*Wp)7Kwk z-BBaS+W$hF!}*MaUYkGhgDqZ|H4iNd3voXKV3xw_5^I>sa)0UB{^AvQDELH7gW*v2 zL_OBCBkSN7V8Q*wXoem4u1xFfsdV_o>rLAI6{z9iW&6GF-{mLmGMDU;FO_~iO4JUl zcTcnL@Dzeo>9P3oYu*2~bM}hkbE~Vp2ffEN0s@$gocrfPmBPQjl`LR^asyGmS8WE0 zuqK|Lu$%4`9o`MHP{MATcZ0*GIM~EfiHR9vDH@jMfghfa_KvX-q>=+-+8^HpR+OLT zc!4%XK+psc?M?#Tfz6QM2b*R3dZ`#3FNI|(ROyKD)XkWEZ+%`6vqoV&`6-mIO_;r2 z!-vV(q+5F3;i7nk4n~wmT#Y|52WX{=89dolzkIxTdhGwk+`lSEFk~#eLd<4nNJhlu zs)Cg;nLryBX%mZ6JaC;t9NSaLb_xTZK%;mq^mlJ5H#a;E2lFKYk!tKN>gs?~ku(wu zgy<}JUeWhzmo-HBe52saaT~wc!)VKK54Lr;Myu2N)jUGpQn=xy=TjTe(KtnB%+L-S zb;bOg5xH>T0q14^;r6^wC&T2E*X5re8=5aE{aT+YJk8hAXYUSs^&-NxdTj0#>E!&z zw;P9^4huXiX#YZwFt?(ic(Sb+6T-XqM(h;=OG zQ&$xDNnCYf3nz{yh@ITD@wY*sdvSBJ^ks?`c{-_;Oi_M7@Pyj3ysG= z%(JPo0bq^n$TXQGCy7;sN*u&8@+Js~GA^EWDXsldCeaGs&wFJjcQZHfa);q2x6x!vODV#D?o!FlBlJ_?{uWdIi3YA!!)o5 z_way%a9L6!6q*#8+fxzoaEplmD2@Yg+9P0UTQC61j#h*VNQRve$s_{xoov%pXJI<* zo_Ydj<-&O4sr;$eEL@MC8B7Zq=JMR?+ikX0ZR4m{-R8`S=d|<78Sf`XFVht3r>fq* z=l`Bo`}hzAq=;7h7Y>^Lc)2E$O9|tW#MsbQ&`K2_C%vN-01dWT6*mf6W$Se+ksj`> z>;M4lVo0Q^zN$_fY=|9?gYzdQBUzDL5D+_Re2f~7X?RJyIR(dwcg*;Zx7h~j={ zdNBLit|wAs@TG6wbN%;ReM~@UUr`JFA5KX|b4zPI^iavO)hnC6Re4?`QW!NZlbuP4 z^S#{e>JvP6kxspD4szD0C28O1Uh6(L<-z12QHDK5= zn-dxisL`@I#^E!pqXMHbSQ>URQ?+$ty6&=Xp~#O}GF$Yx0HQ6#`~qTgy2@hxpmh1^IV-+FaJk;nG?)(DtR@!{HasUh2~|E->`Cx=grMf8pF8 zV;c{k7&_(nZ#FOlqX-f!ki*`hB8uZdMM1QO6bIPwAON$;tD-3c0*SC|K6OjXDys80 zpoc0s8)BUI`9xrKsR)(U*oU^oLlN})@+rDD(OpvWhEST$i?|D*GqLpslt+c1dWE9R zV5qbDu17U{ZSApucy;nBh1^RF?DeoHdn1xo!QTHw@F4KR<+X=T7$#(0!FH6-mU3Ti z9P3DefYnB4hHzQ##+y(9s3)Gk1Y06ORX4yOdrZ<`;U>HIJ@S+dn?70$XrOoMg3bLT zVi^+oUwSLicEDBxfn!j^lsd68KQCYHa%Wak1HND!_f2ed56yM!{HY#LIxAa_@ zIcspSX&aJBanMBHy^Na>pvYNL8orytu&D@;YXQR9fhMkL2_RtPov0xlfJ>Kf7kTrrH1h7GD1#*YurHS!CvDwB_!-y)`2lt!qtBzfc?D)CVkD+7T3QHtxKc9kH#a`%AW;PhYD$DS!X$ z#Gi8!LAHNNd8$;39_^T2UdE@Kf8ygCnty-W^|0RTf`vfGdQjcV_s6goa$o%;Id7o5 zK`T>zJmVNuL7GXL1ep~i4A(@EaC`tjibQQ{9FPWD3EE@Gk!{ZL>&{*@Zgom|FwLCb zlh@s(e(p}$hz5Q`i>vl5|Fw@s>!_oe_iw8IHoODLv1Zt~Ow6gA=yJMs#sI`Q`(8-| zt{&3gB0v#Dh6XNKI}0c-?5N)2e(HWb_t$47dBdnD) zXfO%@O~(6P?JbQ&xhXs7Lb%zjY!;Atc}8nvb|FKjYQ;vHMEr(iZ1C!p&YeaSRzOEV zr^^>_mgj7(8k@Oozz7Q+(&okJzQUJJlr-eFap^8`^>3e^sJHQlKDq7d|FP&?Vk*DG zg!)&p^sTbHUwy4R=<36EEo7horVAZc0^ zLoEKH+{_?$46k`!F_y#nA##c0D0kcK+{2^z>a?!FZSrYWDY3-v`j%hW{vUgN0*e;F zvA>)Rl;TcjEpeZWv{zi%5L1d*>;KrWD6(-b!wN;zf2}dF6k&Bd6DNPX(qH@ec;Wkq z*8TT?t8Tos@cb{^>c4##>F*F@lyftf)}rf&B*W@Ze%mdaUR(x>o*!S@RaB>U3b!#N zQy?lYcvAz;6b~qwiU)ejLYV5HrU+@A9o%&*s21JmFLA_ExlMR(1r9qr^c5v-cY0K!Cfq zN5cDk#~9->0u!B+IIYvHYNQo#wUK2(hIjcc_lKqm2{HLN*vW=~tB&uFkMCJr`k8;x zU-C%&__@WEx<5~k`=23UocQj>caY28NKe8!j<&w{j(Dr>sZ2K~_#_I*XMS6FDm@MYQ%Mm^&1@UKWLw>zUijARoJhL?Z0PPx&fd@ zVI=}cc~%+@XPThStqmsD89;gP7Xh3s)L3dPLgSFT*c0g++Z`W6bD!proYLoh-ebKN zykgQZO|+b@fpcr|jpJ7BhMY!U{R|IM5VG66A+C7U^!Wuc>eRw_be_$`1DUrkY{gdr zX7VEVo|VQtO9@&(i4srGtRAU;J!f9BU6GUQ{JBv6-o-bR%J*G1e*X;>{10+*#*8ZG zY&4a9L80;Hw#?TH%)y-B1Pv@U*rv71rIR~FZ~#^yaw-i5Jq64#OEfA21?+eK1-P*^ zB+?x+rnLM$eTQg^neBGP&uK8QpZtLdnFx5cjKZn*&YJIR4hU?yWy{?drX{jZ$y)cR zycRa&h9f_Y)!DaZ5PCzp^q0ko`#+rdZasFr+cmMIt{^t;ZAk?(s-E)VaP zzP7R8KJ>=n3@kkaz+?hiA--RuDnoSuWjs}J7~q61O%ens&D1?mFA&J!$Lpy};AZa_ za(--8e@D6~K8#|WMLeE8#qPKJE;;$`JzSqq=lKd_+dXs3_!DrS;4EE{-=;WgwEu2w zKjheA@zX<~n0kw}`pcwztadxq!P(AL^;q`Yu8W0YC|3Sr(v56HbBEVap-@%+zBnL0 zWBLUfn}dUpY>NMykq?Sd-)vSAR&XVa0#Y=4<19OS32s8FI;DcA=|~A2WZqE6-0koP zNU|T&&m}_n6rEzVApCDp*1-VlreXe|t(6K&-irG0DB&zYwE_()ExZ zbfxy^eGK-y-@v`!SP{oQQ6D@r5b{{KMhP*X-|@BUHy>RhhIvs!iec`i;)It(lU{sb zjfM-=a$;&j-PCfUO1cWWinbk@NB{4~>OYp`ALKA*49K|~S#uT0g{0RkeZ9bxh9d9~ z+40V13T4%Xop)pzX-bo5Ks;0(Z6d`j5f_^%otNqaD5Zwt@y$?x+!tU)6gN)q8=Tt0 z8U7KCpM3*@Zp+ILzufhff5rFcXATe2H#kfyQoy4S!FE5=-*xcKCB{4B=F>>mOA2>- z4y;IAAd{~nc{MdP;Us(rnh8wBXOyCOBb+tRR1H;6L*J{r(p;ab*X|yxhjs&`_Dp7M zPOD?F;+Z+hV(dunA|g!1pjU5@Hvg`K5>q1yX2PWFXFMXupH4<*@Z;=VSj>wD7CJ2T z?3B_wsF}?%0O!lJ{doh2XWUcJXD`bdN)Jmz85x`4{8NIrD=yp~{4Ml#0$e)q`grc# z;rG@jC@?$;e7YBNm%~op&l%A!68@{}uUOg8i3SxsSOve*r$56Pn`R)QTw=g~36D$X zW&r}kLu%aYNXQ~F=@N}yF$5dXX*-)a@+^VqVqdsSd>#W@Hmc@w96i$=a@n<4z+-1q z3||BHKIa&duX&dL0oU0^ZIRE?_I^+99W?EfB)`nwjbcd(TfsHXzFdEWzTZ3dx3y*G zZj5|z^-q2%_&xHR0oPAD0ybWfdw$rLY$Hc zR-u=op72&_W70%(TD~wbUdf)cLZ+YmW`1Tgt&-YMqM9okD#yES2EA+S?Of2<>!784 zg7wZsAx7BiBkmK~Ln-s@ZaGq(Bb5z2Zz91dRL`TRrjdUB=LNmC6jRpN&Zzx&@j8yj z`zgBrwc*!4$btSr?h?b$(2oz9LQC$sU>0mc5Z4P@|JbV|R;Al1%Q%-~Ej90#HWci! z4qeqJ^AlKY?U`*Uz2q7I4o^W3g3@N0N-Ou(V~93~4tGARp(DRyWnK}Q)#lH!^?I;R z!g$sK($!$M^=+tI7N>2eS^aNaji~NAD|F^!R>-WX-tVy&M(Z6<_c)-*S$AZcR0{P` zC`bKc(m}e|(*%_skq}Y?ONU-pw@&;a!R;*$4jZ&E2wxgEi%p!P`x{6)bDcC)MuvK2 zke$G3;a7XT5nDvlxc>74{b)?DCZS9Kufm#F1eP)xE#*0Q;i6zl=k#RcMpXWW4ALNK z=u>XZ>9uJxT=pq0k_k_6?)?5AR_|>)Rt0~L9!di063JYlfoJ?z%?a$~*O+xIay;E` z)o}`baqQYx!8E{_#@92ZvQ2J{A*rnc#Igu4@i?!K_-XEo_PR?k8F3mCpDwXDxNZRY zJjIh*Zc=sU-Kt_ZwP|%lW+qsqY=^j%Ut^|CYGCaC?zD{0NnD~r6&Ydi)3Q4Dj=4*AZ2W!ZSNLNHCG#azX;1vym(=*)~nx(R0tC;w^U&#he9J9ujR#u+fb7Cey_E6Jcp zybr(wHKVLfW!Q)q^kse+XxnuM@d@ZG1UbQ)d|eOCB(MGmEygpg&?illD0-x|>}YSU zp?@--%*RrO8}GK0&8sB-PUAQpzJBiFCkNj@4mGdV>Tm3>5C3O({Rg>g4GhR>noJcL z@gb9NwY?X(XxTtO*Tfax8?hk=o8%DQQj9>2)(nQiPY1^m7do2SJTFacL{pVr+pd)fu1X+!#_-27Pm2%zTGpDk~pELe0d-w zUq`OzG0jZ=#p%xt51#xU=B_7pzbC0LNLUDB@7)}aN4^aoiGW{{=YRgVr>n8{SHaM- zp-6~(H?Uh?-6vBj$BDA#ZYve6;y*Jm;7su}a@I@p-GZ?LbyK5xzwrW$S;kzO;N1XN zDbG174qO7W4tOIS>e{OE1H79fBej8F%&6%5n;2wjsc_n281d@4>ImcpG#aq3nC&;8 z^6b{E@^F{KCINr#q~o=xe!sG(ZeN7FY5sC-D*5>6@Xkmd#Su^tf^CV4?_nCMLFh*< z>T)@n0AkIHCrCj@V%?Yl6=dG4FMPOb zLvP=IEFtr5=VfixllJDf$3@4FT5m`Pe^_-rVZYJ6f&dW-+jcWJBn8l0(H&yazl*sj z)U!r@7n)3!05Ki8w?}E1xa5D+XO6k~NF7f!8q9=ByBP@)sWJCMZjS6?Vvp>ht>J7e zD1xVm!F5|O2)Rf-TdO$k9yx9I_(j>EGpgT?H5(j-wqqWa*53-aUZ#?A_nAc=?IKgQ z`|#RAL;H@o=@jXFS3|*#W0wGW^4_KY2#xy(Ib~OdBMHM@PS8)WBxPW`lu_lf90|l= ziB3H&v1*IXRt!TQykb`}+MhPLG{8xKG9j+9oft4=h##;7ioTG>W%KLHq6RoeDQMyo zC-+7LNBj_$4&^hNvGl%W6U#%)@?(1KySpzKO5?+JYk0$FrhR#hr2!lVI`Qf@mp z8uD~cDrTWi90gU0*G_c!NXp;pobrm$IvrnhOiRK4_@sS7*Y6GaFd(WZ29TjF!>ksd9jKNxHgzwK2 z(wGqV#0I1+W+GE>iV}t!$*f`D*~k$QvUAZzW2>`8jyZLh5v82{y&{>}5_Kvw69kwBfRM3TL|MRkEOw zTAYYPu>Yq=tdfCY+>`q)`*Vd4f1LQS>0fGUZhzB+>4KQHUduO=-QwuWxqr@OP7>{G z`wed#z`&#LOkTW@8<0CPhyrl=fMUFBFm6&*HxEH$LMfQ_CLX{vFHvC+Cr5568}PtM zo2@_ddh`*MoOlv!{#9ZLgv9>}I~-N(0XQKR9e490nM*EU%nuC~it~RHYdc)|aA^O$ zR@lB6CqUkqIuw{U^(B_WiMu5)1ZQ^T&V7Pdm;W z74~iaXNmh?v)q~lqsn=iPZk9#W@N}D&s<dLtrf)(%k#g7-ZrikPM*EerP}Zu8SY(r{eFgX}UB~9- zL;_%v4!)O9zH4f1Q?@l%XvqU3tmpm?FF(0C#A8POD8=D3Kk;=yIKEQDJ$~ej3$9*$ zjFZ#RH?-jviu*kLhA!_Og5{^#t(xqD{u75(0Kf;{V&v{6hH*p5sL~O16$Wj18VI>h z#Uo2Jl$Y)>T=CEC(AFsc3b)OX@t9O=-(()O(Y%EYFzA#@};;-IM4 z>ltnAWs%qHo=pKq7cTd6T(Q>GUl}o90Q(8hkkseQf)ZYE)>pHii@piu-L3!pEm*ty zwK3G84=&3mE64&I&~bUv12Y9ib!U0d7lE1Jf=~Q!S!mr{Er^oVvt#qr_h!7?kL~)b zY(O9EM-n$}GnrzhQKC(_Y^B&D9}(Nyz)Vl5=#}@*rF*``C-kwH%NV%I1wta!@N{|Y zi=eK}w+FQ5Sd9TkV+IRxeEId#@5d8YCaxS$JFezY?#kWx$$H^PI5^Ds`qX1Gbtb)2 z6Y9+5X`sRUJh=b~e1&=~^-`%wa+^5ij*~H{E=x`8NPTlLbzun!u#r++uMa)wzrhi| zTG3pNCkAUzz^?4EDt}DheKz6-N>wbAZaqF#udw_@Ehy#G=PcX9>nb?KAdJT)I+D<`>pE*=0gq!Qx&0)ce_T%v6Xu>LnHj7!Zwyd{8%mUUlo^& z)L>gAajH2<*1PZ8<6K06+_UL-%nm7pmsj0e1pa&gBQzipject+itUPqP{LW(Z^!Au zSmx5^+!T(@Nl2p+rUZIlk@AI(6dK$bEYkyw2?2Z$yQyg~K)-P;r)Z?gVCwhE;5g)2 znDJwxor%z|{Khb48<@cayF+?Y>kH+9DXIS|H)7C%`Ji&AkzKKt%i-W zIkkR#=UUX)YGil2& zZLIl+X11s$sZ8A44()h z<(q&hiK9hwYG7DcPl*iez#^h5`6SJ&DqFEsf^6vXZ|M5@*eA1f!Hgl1%-je4nqOD&@=+ zo)S=}Bx@b38Df2a9yOc{)1y?B0*GWPnUIGTrnx^o5k-?EIL9yv+&u%escmQ_XI7?k zr4yTJO`R7GT5wVq|8xM}cQ$^gw%_o}QeBWKjo29x{A>Tzn83TC$1D{92>}^Q zRKld3`qCT_NPSOb8v(xBXBgB6ri8epxLBfPFK_=SU}Yh^mE}asStW~QgKB|MMC@ z1+d?-6YC(C%$^YIbUBtZ`@WVaF|n4ULE(xBc_{OeQoqpmQM({*qCNy|Wc%ZD^LVF!gQ-TGQC;p-Dzy9AYj_{&X^CVH4EqO}kQa z&XDdEB>z=0yVJpb?e_!j|HeoEk=ZYrPP^K__7mVfjlv5eW)1|Dg9n;m2ADNGA9QT zz0K-{T}@<`yB&(;05+Rk{uJa)*E_seXra=@e2P^5`5@?rOD}9+QYe{}Z&tSEAfW|? zuE4Ei*(LH}akP7Kp?r3Ca#O>ZO_Ti2$->9xnIS&KS|pO|%^w3PTgC$7GL~0|2~Ot0 zLbZnW0l~GhXK-Kc`u8b=+x#ENShVGa08B5yjKW4YHxUw9zF6--wcw^CZf%vZNh`^V z4E6J$%FHMW?l?2;5dcin7o2cEkrfp(AKnHkPt^-(Lu-vFy^<$o(wSZw3|jBFTkDy` zircyaA)s=zv(l>$l^s%`$O$E5|KqXaw_7R4$NW1IJpbL&i&5nQ=bQo14LQZFJV{&|Y> zNZ{=9Dk_$#Y3A&C_T}Wngvk7anzK#aQ_bxo`*SOtF^b&eP-8TC#YW133|$?w14_wX zHFMyB!9k`T`uq}f53iCXKs|_AxF;f43t^L+5r44nO+u@8XJ#`U1dls8DDhma+M&D> zFY+jMx@oIkTR3} z)qxU|d&NxPJypI_VrpZSoSl$9ECrTRg?T5|Vc|`DCr5~qvX_0~JE?WGHuc$vw-3Ky zSk*P>Y6{Ce$%5<*4s%Gx;T2&X*mEy8Mi}xb33&%H?V^g@J66~u5p}1Q(HTXF29v9g z0M|uWA7l-`tbV}}elODYzR|nT=@0u0a#aj2?BypW@Wpv!jqQq1#CmdJ!ArBTmv>b% zEo-M(->DG0odoLK*z<~eRYLp4($Nm4gpjuR*Xxi(_Fy4QhJ!kOD+I^8^%|S|jA{f* z3BsuN%FF(m{BUzo!rK25r?BXDdks&;gsIp)&e8i!C7wUM>wL9Ho=s-baiPsMm;T^u z{}#Fc1dX^3ZH}p*H>|k5C*#?h5}0{#MjE)aRfa_L$|Q(1TUx>7Pp;fX1(C zvj)!NYKn{T6iK&3GpuGJQJ!UAmQ#;${z(2*N^71bmZ1@vFIB^Ufc6nCj zuW^@)CZ}~jkl-E8JWT!p3?`5#MqB$D>V-u_jg?TTo#81DX@}=8!YoEk0nWg|*mmQ( z;%P}Qw+MsP`xW;G2RA-z>doBgHvFZ1DwED@ zSYI;*R!=T-nyWgPd**o4IWVW2L><%jv{)8%+#@yI)0WS18`^#gTAjylC~w-zZ(9A# z%0XDe%Qs905=OZYH+I&c|JxekALMj_0QkD0`K%mCwK2`l-}-`_D^~(zmfJ|~Jza_G z=~QR}0q`rzHjVudM=3;ojqisH5CSkjB8I29gOcW-m_{z6?XW$h&GkO#_-|F#XWCiQ z^gMoGt9(wPH-j}EV?U!NMf`+}hyKK5^sZq4LD zx;mA6)(bAC*?h`;`M%lrlXCdV%SyGSfzN7PGA9Z@yjbw1KOH?uyoqK~zAianEbl}isZ=vOU@f!5&gBww6L$5p*uc%oJ{2E;fdX*?V z{KVQpO6<3;^=#8GH6d{z%KVm0-W{9PJGtrl!#00y9I|&|d7-i|zur0|tsKsm1eKKq zIq@B^eVp4q*#8PYUOTvZeEjR4(;3ujPGLHwDTkH{!R!x!o!a^H;n_{7TG4ht&mw-3It&~Q?`cH3 zN}M>4MChp#KnQfU>Yl;u{V(KAjb_TW&B^>{Vmzs-TQhkrJg%i3gMm6tuRl*{@hK$b z43B_KGJc^ zBV{U!;ddllAA@jh*$v_fU*|2mRU>ZgrGCV1j}TUsSX8XRmw0pOevWlE?YwK|->-X5 zvITlmur230TY7-$M^!(Yi66HO3QzH56uC)HeNJ__G!XoHSkXUH_(RV9bXVVWvB2QR z$9%I4WAyd;s{g&o{)1dLgCsein%jb{NZoPL!~0h$D$KllGR?%(%+=Z!bsB*%4}pX)lW^E|Iq-30wljK4w7 z_W&5TTYA^@fn0P}<+ET&qOr^AbI>xH7iGHe5ofelg=|dmF4GNVf z(vaUQ6A#$tKYun;m-miObkzo!cUvk+$6j&Fn7>j}y$|@9(jg8iZ(<-M4qVG0O2dyK zpiQae3okU4bbTJq(ThJ@G|qE?H*LTbK!rmGheqlt_bA%9)g?e`tuFltghMyZGR8$U zZ4E>2kmKpVu<>FnB;)`lAfPBss;C%qEj!S&P=fhfqx}_&?KB~h2=J2JbGdPT02@iw zrbABo=&6h`c{HV!J4JJ%Ohv#L z8Ntoh@d6>TcPkGZ^xGx6CryJ4%^93!S=3u6%X!vVFC9PZn=E~#`S^}NN$L;yIlX3fN(( zIytrFy?B0C*3Q6bvJ`B|yXtcl>c--JL(g0m%?ZzKVKyt(E72EVuPdv$Anjtwo2Si; z8+tU67IxUHzf)hFDLz9zJG-;~VqESN!zm9fcZuN=;I9+)n0+qg&s!3*)(_TCE$3JP zLXc=It-SFM*~Hh^ve#;J=C zGvb?2kWxLXolvG*SYaEF9OU_Hq2+c^dg~n}Q-vMfm7x3$LjWrv1E+rI@tes zM*lxH?*ILzf}BZs5|s(IF|lIBb5iAUP(k8WF~UPmPg>Y<&PK4F=^rK-I9#a~!nPw< zFP_Q3QvMSZ)wrRwQ-cl4;*7lfHUt@O*tBlKsqH@8(&V!UTv3oo&DVND`KJ{ z;5^2RUF}E-DKoiH5LKNWnLWF+O?<>?o=vm?8CeUnh|WDM63?o8<#^pOGd;ZF)5M2W z%3_; zaeDfc3iZ_N+@~LJgOxE=;Axl@mVS)%aS0su~=0>1`7P~U~ZzR zS&lSpB34eH4MySWvRh~C_dHblFt)I+z zp||L(c)T(A*E4R}uJ$83UTLE4#I5A&$IA*yG2!irWcn&AmUdQ)-Sm5}Xg_*4 zT^Bf+j#y8a`rV_YX09^>&x|RZ;YXuwa^+$ion1?XJb|cmgp}e?qIBUJW?*yJV8h;- zndDThWi3WQ)0cZE#E5fOkJU=KFT{fG!;74nR8Y^a70|3)leBZ-)T<%(?<#uYSY;KP zh#7Xaa>)9Hd6%*{YhCh$`VGQRl>O^F{?jqc&3WJMOs@WZ{z>f2!TK}^VRmR|<*8H^ z3#|sqh_gX7mKfm8JoWTYUKM-GA{aCJJ(7S22NDuiH~}+PW9{%L=bF|q9=+Qpl%Xye zL=*#wHLH4q6WP0HbAnqnz)h?A;&VMWdA`?W4i&erxY^@s|71K=om9TPL-`q5+IZN0o}n{) zRAW}qBlpQY&eA7;KXl)bx%u;)U+urWUH?GcKPacgM=d$DzGVr4qdb%12=d!4v?@Ho zN^eR}Tomw%?-hAW6=<#srqE%fOdOBB*oD0Ub8L)3Sin{~4PN*rn8(ND>A)~sMM{c^ zdEIOfwuz-iz{z0@1Gpn<*FcHKB(%LPVp9CLeb3QYt7g8X;II0%qXL$PirPsUp@;$9 zn`;fd7PmS4r(heuhzx0t^6C~JaZyk(j+ZCIIw|Rq7-VMDsRFP$SCT|Q5lJ!e2bloqi8I08$qr!%E~7mV8BW9D1_TP9s~gP5 zEse-otwUro<4kY|8`A-gtyI-)(MgUDFMN0Es3HA%8zj+)3a(pWhtnuCu@ONR?rUB{ zpSrFXjC?2v>B&BLuzj{oSpJw3RK$EFj(utcXGiMv1-kWiNc;82k%$yiK)OmJf zoXM+b7D#X_`*~H(yrk!z;JZkOi_l14ugATSNc~_&jb&jJlK1+ku$UFG&;I_OWXKsb| zucuyWt)*SxI>qH=g#PF7@LwfoUO_Fn8``tnge&FQ^sf%Doikzy<;45R+Ye|6?f@U^ zT2O0qrO_MIG;Y9>NF%2p(bqQVZMn(3_RNfiYFp?O)~8g$2{dUuHQ0d z3M%&brT%^#4{;>KM-7pCm6z$$ULgDaaa7AJd&4a!O6q4~zSlylShHJCuQ_wWm}zM9 zrSE?pfyP<(Y^t2B7>^|ri5VdQK>ABm46@D6oY;zAOZ(K>Pb9zz*?rkw!i z{(uBPoLXtJRCDgTV-St+oPL6pjtjHutz4#SaP}J?uI;h+g*(h&%^mbUSUgXtbUv@p zJqZ%mW-hxRBkZVE+T+ufXrSgca_#WmU3Ycq#izG_Z-xIVk(Z{^s*{3pE$Xmo@e> zf23yL=u>U}WUkBjA(;DEadj(}7gz@+FwV2V>^`3$FRE+C$bDzln0!HBqsI9q^~Z>9{@ znKDC~J5!tn`}8II)jtTMFVYKY@+V~GB$*YSZ_f3u#V?8Yawremus(@@+SG0pHu8d{ z|E^!i-jA;z7PF2$Jx67ZlXS7eD++MLoW$*(Y&Ai*yG&p}03Jmq;obE}Ag1d0kOt;5 z1sGwFf`S9(&4Aq@iB&r4@A>KSrU|rCI-!(y>nlccoYsy`nO0xJ?ugpFQLq7xxfBEx zn$g4+=iBAWV0}hb<%IvZXl(}d-)C(r+;SaV>R0rLF2fB~H?cixQtLsOJ~^9WaDPQ} zCuaf=eVlMFygCcEa4|iiPaRt8bu1Ro4s z&!tkwqis65OA-5U3m~D#e8hjbI##d?jUmxO;dErBgiFb35e!?*nu*v{>GKzh)l~Xs zY%1t;hQDywq2GzLc4=n%EEe+a#?0de?+F%Hz7#op_wdwmYHIj~egfjxRm|G3>=$9< z7X?n`2#N#zZW8BNz0{g+y$OkBLCm9-RO_pg!p95~aE8f8jwR4=sR#tMn>WeF-&79e zLK7(z2n#R}4K>n*l=sX^M?Ud)MX@4^%7mPxy=sCl+(v-rOAM9eCC6w7V8=>8Q_~8G3 zSj`QoD5pr6<(9I`Bztuqde5z~`iW?nuHGMTuKjUihO?0&C}bRU+UYBv9e1pt|&Ro{c$oP_kOCW+jM)e(dTMM@I`{h z`Ftm0YNgbMp>6W*AQU(6d0dDS>XL5{LVdRBJoD-|2T7zvR>h#G6jrmS0ueX`8z)r) zSu8Bi$^jqF&UQ4MS-@)zSW#%XQPt!joQYK!Hbug(!0d(IgLl#AyfkzFK&t5S*{n-Uvg#X2uoN>)xkhAitEh*k|wtn67<(HoY;zOvqTSj^^KTR`lz3@Dy5atvhdJz+jXoB)PvtFvixU>-!%;-S5rrtEXBPc z7P6eVnJ`!z%fK*$&50E7DtPrsHYQV1%AO5^$qej^cM}-Ss3Hf%$%_^yhHllfs-9o; z4zw9zr^_JXYaiee)Eb|RCvsQjw;KXAiuWBzW5gT=2~NqRCmOLk$K^Zy3=_$_`>D22 zyDITJx+7-_`I@`lN$e-mAPo@!SulZlUi)W!OToWk?w?-H$)8Hgg;Gn--wqSE-MvCo zTw_)IK`pt10bTAoVDCTK)WE(*J=am1AsyQKx99G&$;@@t=wcq82=4WU1 zR;mnu5E_p9!q$4cS;!DZnI8~WC_cbk_M)qPZWk3KiSg$4GRaYfl`{YkuIYPXQN}&v zYt98yqDGVN!vG0+>~mX}rPg@Et0rBl`i|H#U+1=k6GvUYbUYc!dNyUv<@8GfHNu=U zA+!@bw@+caa6LNlZ^6~m%I=1oNd>NmF{dVOIUp4Dou>0P(9_ruRyOFio4cE;{UOXntaSh@D9N7`=Nj z<~S(g2~BAK)f&^`i0*oufhDWbsX93;US|87x{2%D-#WMJLKpH=%Swntd%4PZo0Ryd zulJv1{3cqyuK4_ruV38V<!4VM929U6U^4zr`vaqbYFfRQv9s}mXqsM015kmXT zFf!YgOVV7c@Ug3L_Jl}}w2$j2d+XhEqjFJ_f7xB(HjqMx0>abHccrFZfaF5qL2_}c2m;K*HA|k$-7qmW29>|p|HxlB z8}r=Te9sI6E3ELmXPa)FFlIhRVVeR{h8JO8#H;M zxywsC!Tsd5{=A-1@}!ZfYVxEK9IAvWd_k}4M$!2AM4z5d+B&-7%jtqNuySj9iSCmk zUO}-^&6AZ6qePAY?0iHwr7a4l1z~HF0unhA^!jF2N+z@O9ebVDwLlb$A%+XsXGI~l zwFM5$RX0qA1b63E?TvpYNV1 z+#YU@o;Z2Ekiq_)J?Hz`@j%_m^*^W8VrM5kaj~3ic8C^xXF*YWJ`f$VCclkZTQDdQ zbHGMJ8*g@cN|9qkY_vdK1#=#)fdIjljM2sbnQ9)F7*@2!ORfqVB)=emUZBk5HF!zP?X)R7Ejuswj+d8cdy?(tlYsj*Vv!;jX24SP%n^m8lWE@bX%PJc z#&d{~N9B?6iMW#Au6og2D!KbJ4|G}jtLYwugf_c1Raf_sb-0L=AZ<{^mY!adr;3J! z37i=Wly^B|xG0KorR5$IZbQtO7$XKW#YD8@Vbj?y)e#p-h~h z+?RhTN*i|FPH`}y*ye?j6j}3#DK!w8$+A+eZh3ybOsqY=rj&C~X-{ByF4q30>{59N z(7wp_f1Z5!?}v3Phl+B3hO?}`cKit=Kl*}IBoIX+*z1~IWZOGi{gdOT0ALK#5bR6^ z4V_vzTbN6&R1|St$3n1THm@rl%ZGmo0w`9g_}nU$)3pKy&n@w|k8prvlBY~w*=OS( zGbuSe-o1Yvl4dwBk(^BlP|%P?gPa!@?u`hPJ1^#>8(sZvBIkGW4oZGsrR1rbpm(;C zl}VhdNf?eW#WAIb1-S+8nfkl*#Jwy#!&m)o^eAiqXA2R?)|hUdsRa&X+&ox!fE6%o z#RbdLl~f!kvx|GoyW(KQp0{|8mSi#~AbiO;GT;gNqFZ%7U`G8TY`5C*)(n$mn)q{~ zob23l7r)`2!3nZU-NX+xscfg|YWoY1!r?+ue>HW-n)b8h;AeeAL>UugwKh_b<$Xjt~tG3&9h|Ycrj9+v#|@6cShmD!e(ubcTkym zK3|>n&7Wu+yvs)X5i@@jsz!55x258|X%$8-84mBC)NSHZ;9h5Er^9G5 z@d7bKV`l+kMW~RW&|1}K!fas)6yn_QX#Z@3a0TifDt+XDW0w=OL#7`t$oOa zJ(7>xG4+E@Cr}uD}eC#l2QJ&gU!({0u*V(=P?uv%^5-s+7ki9joHWzQ3;uLDxy& z19AFOJjgd_Ek-_ky_JI&FS2`mckRz zzHMRWlbTJFB=%=#f7Pe3fWD5{JWC5fotmDYmq_Z_wRi(gMR^7?Qp!RP*(mjaJxLcx zVh6UGT{UyZtT_4gb`^T&J^>_avR?^^|YQ>m?V&T}Vh6r_vo#Ae~1swY~sK?u&=tdMHQ*oY} zF>MrSWFVeL-W&y@9c4%AA>n{=C>zolR4))X-Rk0QG_kCg+-)So#&xOF4P=#&bYva& zlvClGo@YAR`j)%-P)$wS(%;)i%i-m3%ZYhB_{&Tm9xyB97rnSe+jm(bB#_aKSCXaX z0rxBWxJN>%7UNb8-%iN(Lh|<6{=4kPG!2CRMT!1T$+6~BOU}mFlG|Skp0?fH>W@if z8JEVH*7V{Gs8)^TjD#iNgjm#Pc4WecIMKztU1Hv)U^-n z_f<}hBkp}Dl^>poaIee`VDha{Zmk+s-w2+_|GHeL=lN;Vm|s6j_HV{)7fxoCgs`EN zhgT!&0Vaesf-Q-jL=CrG87>b>-n7-XR%}<4=g@VVBE2VYv*vq{oC1x`m)AC*R|%HcWhf6YyHpiZX{BP{7sZY!(zf*+m@zFbe)-LcdD{%U>ja~J&V zf_Q=U+b>37TVw9(R>>v(#Mw^>!GdM!8R)RpjWc;vd%v@d$soN2vm0Opluu(Nhn(G- z3G`lNNNE-MSYH4nk?V^l%0$=xs4TV$6*xth>3y!aCy{U`7I0paBNwe+-<5g$F0*JB zcJI&o6TY&7?6-a%>vDi+8Bcn>H6IvNzI&UCdK4OaPb}B`?zgf9e5+FDH@-sO?+(Tn z=m)`U@0eI^)4Us4f0i^A{&~~zqYKNV%yGrrv_#O8iQkLHT56h`MgYzvO7|=-xhg4< z&Z`h}+`}QiWP0*)i-(zy8cjA{An5=%CIj`Bb`cGA9Tv`ZZI|ycN=PyXU4#i}B`;xk z$U>G~gL^(rs$EA~S6ddfpSZgHrT%9jc9O{2tY=sLtTy!djkL(Q%S(2ED>~7?Cj*dW z(wE2Mnav5m?^yq@cKv@!PFouQbq_J7dJ3;sCL8|v?vXZxKq(k~(hSF$3T=xrUq@ z6C9vH#Nn~Oa**iAi;}+`7UgQUL*iUeWh9GfFPlZ>J-si- zQlH<5!Rvl7K9QQx^mpKAw)UugCwoWQA@bycW6JIOO1lgMZ|VR|y*aJYwpL=rB~Unp zs*F7^ozrm#pbLdbcazpy!CYIFl}YJj;*f~~z$-KA8yAaB?wX!p>#ZP$j$WRZfBMse z0@S*q86x{SYV$YUsRd8%9=+J#2{ z+3R1^4?wBX2*e~NARu-iLC=9Q`Kn2s$=t5d>qkvD!K{lh%;C?O z_9uIe?eI2sbcNY7hMm`NSx#pynV#`H*PUtg^$z~poSpsPTQ=9(6q|9_cWr9;Ygegd z`X5@k|L)~xIRT)JK$E$7e^dT+@d;KB${5R{lA+%w+ zBM%EF&}^O;Kn-kFV1!ZbllXbiT?pZ=pxma3Mf+==&_g8K5Vvp|G{s}4w0NBt`AkVr zWJ_1of8pi(q9}8jgzu`ID>wH8BTQAKDxKge zr0A=Xi$KSht`T)TFuX-6m^!HMG3b zkJs%lrIKJ)yUqdur4)AUH}@*X7Jogv&g9j0qqMwJCV7xW@ykeF9~)=u`Y?IpF_Ik4 z$;NDe9+yr*Rwddnxi)9tV!89Z_9Fj*DdOd4!O;L!M)-^E`|m$LxH@Xsot0e0Gu%R_ zMrGehdp+Z6bxQ^4P?;4vp0r;S1@jxdpMV7DoQ3Lp`uj%#$iU~f0YlylfSQ@1cMk(u zjVTPx_>!>mw}qFuga)G_9<@q|(hHr$ld_sVlMAafq{pV9L}=vzM;#1(0^vMwk!Pse z%9j<1)`3_PUq`X!z!7cik3V>ZJBlb*IcUm^`rAIBe6#*O^x7OHhCI@&SZZF|bt-!8ZT=gCj^~n|9_u}Zrx1X$GUsitU-V21k#=4?BjU zDjI~m-`Jjy0p|u<9$E^Ssm=Xf4>F)xHLN77Oczdu;^5Y&=HZi>5sjESe%B=^8_q(; z7GeA_qj5>7*)o0y(yvPb2QtS5=`fn9veE!Ja)<7K6XgN9O=wGDIQEhvxX#r^^9yKJ z(6d{}d_63%JT%8ZzUbYE-vjK@VN#!;xQZx0w5oq#uK2`R{^uongRf4^YR`>t&uSms z=qT>pCuZ07T0MFnKO*OPoOI@OdP^rF;e7JFGx#rSm{b@capL8*a8u&XxsI3VN|smv zkRi?$!3jXC2vu~XDv&A3bm$q(MemS6E^))S{0S3bKfXk4(5iU|9(BuJ1N23yfXmO_ zSfFc0M~6p<4##k_Z%j!heInKpQk+{2OJT}bC&NXp)(QkRJ|No-Yy177*+8QZiCksCZ?O!L2|dqY+)`+AYb5GqsQ!ko$0+MX){ zBW&Uq18jHWECx~`KrGD_=izi0zyl>oDS&=w7O+I<)5r30Cf5Ou7)BX!05DN!c~{0l zpe6=aBBHl)?5Vsx4D>KRiD znt8BZ;w-_>=f?eH^%xz31^MsQv;L(2e=|pYSbe1`siNQ`6B`q(9tZF;jf}{=+EYKoZ&ocy5~tY%xP~^fY2&@71L&pb!;kJ0skE4~7(vf+x5* zbMDtz!c+`g(%%zB`c1T1p~1&NOdFB4@9i(ak6cxiozqKG4Qf-q8186p&&4v!1hBi9wF^Qo5=&a zABa1jCm9S$LqkJHY5{#x=Sl0Hsh?NIvxnatW>yqq9YTFzAZg zvMexQq`YmMEm(JIwy+vn_e9+{^jPBpAsmM-_Ol5VT$>Cx6|I|M817lU=7|;%DKSgW zWfkNp6E-?Vo$h~99sf8Wei^nK7RmeIq8U`h`zD^=Gir;1wgRi?$7UF^ppij{njAeN zZyc%Un~~sj8aJ-?W$|Ud)b5C!^L`K1hx0nae5J<1xA5pD7oT2 zRrFjSZwWYgpp~0ixWbh3j{NBj4f?EZAt^iFEn6*Bl3tb#&e7BE?lCHSJ#n1pB$94jjJ%d~=x zE|qb4EYzGtj3?u3kIB2w0V(CXw1-&Lat=>qB9046(&NGaQz0~L$R|Uj)X4CM=LcaQ zqtDJ>^CR6rl$d3Wu3D_0X8#F^EnpQ+*A&6naHUx!#8WyGqLq-h5>uWX8#iUt<6UVoN_GI2RD zbBBP3gXG+AV#V)f8*k1k5(0P~(WvQlPg#e-!tNWx!r`)_7IGqa8G*HLar!lNKgaek zqS>F!I~z9BAA>f#{`h?x*=&UtOs+D@C)IygxAvXEAB#5Ul)8*~<%?JMZ{Nce{jPWQ z#b?`lkP^9^^-P2U69uS)02Sl}A^?2=06i@p3UIM;WbaEP7g8qV1|3IF2MCsh zL-fo_u_&3N?=~v5XW;gv1rzTKDbKgPk=}fKocUvvw?+wRum!GemRDm=;7raT2}q%1 zF1NUyecC2V)1}z{90L*C=k}L|6{1>U^j71mghyX^8!d%@!QGCDUxN&^tTzfNE&!x&7L@DUK=BX|)@S0WmPOTmbpIaskg?X;t;`cl{90dL z`hF{iIe!{0Dn*|O8Zniu;#KApzh;#E*P=PZB-IbVqS3@%V>~S^HBygIZUXh>gGOUku*9Qoc z9&fM_h$7itqjS7Je7~b)g`8<6-+LMC<<5H42pE#g6ND3sKK{vNBtymJa#O`CP*(be z1>e4JZxzlI;v+Xg&o4$*HL_`O&;a%r?_$#x9DUJo~T>8WJM^CdvwOMu>O}@wldJk0%D(W)%GAfd6rd(;z=Tie{ z)!O*`%M*T2ODj|}i|5Gjs7pMiOOUrAgB1E!VmJnNh6*8tZHrOvLP#takXos$0f+z= zae&wqk(04pg8BC&_-S5A`f$hE3_lkB#J36D%$Je5jRCBUFmZgo_6uJS(&tpBg%BA5V-#}20Rj4-|q%8nZ58p9RD4_U+e zn5YRnb&>X{b_S5bN%szpr!ypBaTJv}8#DO2W&dC4$40bPys&vyvp!eHUh=K(f`$m~ z0ActaopZ)wR%UrhT%@Phi|=Q4o=!G;{#{*)ks4twvX~0|$w)tVBu!4(Lpt5s@9LB^ zo>hvLwxa#yk7<2y&p6826(e;e$+CiIRhe$&$q(D8;mXOE? z5e%yaRTWy%i6C)u+`3^f2nsOLqa^>GGY?uWP|S5rED852B6~iPf#5m;T(YB0v^cOF zDQ)@G=G1D8-L3- zVX;Kb1O*+}G;Ra6EEdau%UW2mSMd7m);8rZ&tK)jJ-MhpUDD{;gVIpjw?ZH18(95v zbanKw56=E5E|a3fC9Hn6AWqA4rj9Hh7hC zDOT%5w;Fztxj^sLCT5IzFR+{+r@~Ki9!dlVZyEY9hbafZyTsGMFvjXrp7E^ONMfI$ zvxo}VP`LBnJD8x~K#y$0R?qT+zUBZ)Vj%0e3YhV_(TzG2M8xeb2Atz%AxSQKn}*?& zhhzIp*CsXse!EIPPvow1Y52s`rcAi#A*Eg29?jO=61`v+^h=wr`If`jNmBXirKcw= zJ7Sr4eo5_BaIRj&{hONmha>s4M5X0KO&3_D^s%W)QF6qDdW4*q5fe2Iok+D5=8Lfa zP{U+4Quk)53KnAjq7W~TS-!fBd1=j*t0{ZrTYK;(~ml;xF-4;;qkKZMU+r=u5U4ZTQYa%;p> z>QS*{6$Kn?A2t3wmELjx@ILkl$IV&DxQO|w2FS6-njVC-r^Fko6M!*ZOnx>%ynWC2 zD;`}2JG>?1tBHS#<+p_No|eV`Ue$m=&htv=^s$JWsKH}9!S2Ue70x$|jFq#;j#&DK z^cQq+JdHxddWQFW+q_&W2)GLi`mpjy;7$OiWf&R8+@$lO3vSFSILZ<3qx)nK}z zxc>9Ov619)DCFtmi>)bKFbS7rt~dkmD@T3{YrGT}V3P@Z5>H3EaxL(k>`^!&=x4=i z#B6B}9c_|IfhzW6Z(NV?y@X-G(p&-kAf%B^Yz$o|VZMg&0sP07>%qI8fvAYahw+0c zn|h9Y?%K8Y$nEBDUt_POsm&%$m;mk?Fs#1xmkD&-io4Nlu4mP7IS>$fIqB{hyLMq{g-i8yU|tiu2);k{XFFqP48Fa)wkFE7U-gNSn{q3dq$MNWBTy*wU#$ zJtG@|$_P4&1-UUiPL>kLJ#F95H#%bvHngY%i(Ou5jYjiv_E(0A<-kOhAT)>*Sff{H z5&=pWBf0sCDv;UGMoHwt%fp^YH5B1{FSFKcy!ER$=;w)BA4DY|6)9CpXGD$HP6h?+ z2-hrFsZ<0`E`O+EIyaU2bSFeG5 zzbFw4y-eW>!}o7y+*BUaGqlV9gzeIB-xm!;^NSuN^QpNWTG3`@nND78;Ic^Cz_ToE z=~tbAdme~2d#KIFPP)AL121x){ahMe{plew(X^9IqoYBWHLN{!mm_t5S*LK@O!%8( zvPuN!@-X&~VxJ93vCE2f(|fN4hq!@?ed<2bs>}&-WeigODB(qnn(i|<+`4&S1OOc# zXlX^Dd9yj)&L_5O8CnSzHE2ib03Hsp^9_Vf^w3n(HC^_N6vcgH^JI~~msI$0G+J_s zkKo0%?BMihnk}q&e|Gq23i-1G-(oc=Zg~5v>ejb_Mj0cur|6)6Kdt}tawjSPdc_K( zxqDK|^0&~A?j8yGtnspjuvQf#<;tDB+Vcn!0N@aurpr#MugJaox$q<=o~1ZjVB~@D zbE553Gr1RD}OwXO_?FK#I(~(AxVVcH@Bk$-c!MV3s z;GN~)a@cGGWlewa5D-Rxwb=Dful~LowH^9*tfb}2-|<@mHymH z0oO@7Z&q49b2Ff&1wl-N)rMlnDHyP*;bd~_{ zcyZn1PK_07_tTsZ;|H}@<5mu_xwi!X!SI=W1V@r3X&Z*%zvRUHL(|jfg zUO5n2UQFK|Ng=POl(o1LcRimrm83id(J=H@`r7En4XzjX+R_+6ACd+k-r`1H3(?mvi`?#`8Zv zY3YAl_CuU4w%~Y;5sYQ7^Z9xb}Ph-7@gcpBdQGXz#99}oG;k|kb=4nbluung zFu80G(By9S_ZCIQQP&TKq?Sn&o`VePt@gt&{B^=9^?GuZt)U54#+sI$ul1{VQ&d}w zA|5H5G;fdM9=!_>)Vu<<=(N0vK~k!Y-A~OJ7;Q$>Sj-v0u|n(Z5%fZ!!w~}b)ButkV{i#~wIcUDW#YmP1oUv8RUG_0Ai1~n!Z5}SiB(=kURs6|K8JbHJ|SRC ze3^w@9w-jf!$xUCsg+P&VMOeLJVE|g1)tUGs>8CY;h2}8Ho^En7B@9zc(ir-?9InN zU2P6v#`8DiN1yeEzS~n7PO;1jKjfS~TUxX1o9VkuHzb~Fhr2nFF4ts!pC>Y#DdvVa znJ*=^gH+u>xCSx&t+;h^>9QU9xO*)3Ate2*7vl3l_X~dJP^VPP5m9p`BF~s(E@DHi z=mqT@S2kZBL++oSew`K`Wze5;#IH4mSDzyWOqtbe1>Zl2=vA?sX(xnG93md$Rh7Fd zYswnVCF-C4F|Sq4HHG=YWM>}MgeWhGJvD?OM$H@F^?F=^t;Pns6JyZpNgqKVf-pCpUB-Rxx5qC#e%M>hO zPg45d-0=xaEb5{FSO5TBH0=;(L(tD2ix+LR1TrK&#pr^s?JmETp`qO7&Q54X9b9ZH z66=@nrU)3j33^hEI3Z3JM}hRAxUA$|txEk_qo^Ds2aU2f>ecWLz<*jlo^Y5BeIOXs* z+^1Ee`<+bPia_~jl?k~4sDQM6f$duCN|rU9$}*fo5SgaPA`+&(6V=OCF@J5Q)3>Ow zNwzueg9-V&+H~c$B>IaBP_AFevAWrA_wP;W{k33JH6nAeI`xe0etfX581+M@JI;n9 z+jx0v(nOh{EUHk7I?}ZN*7t&XSF1n9HgOvHIX~K!j`hP2RH2v?7yybmFVR`-k)0a~ z0fJ>D@@Oc=7B;jbl;nU}GAt_?LkDVl$8oSEjBhKGxGVoMKDA6i$dN5Ybj>4ds7USZ z-D=)FiR2JheS|4i+m=4tn!^fJB;9tX<6#9_FsO{2sDX9tCCZ4LYy^kdX{GICnT}=3 z`u^}^^zAlCUsu_vp?SlJ{>pV>54uiqJTrQI@lxRyUADuG3&fW~uxbDRo6di`$d^xO zdbYo~AOUqn2^{~1KdpUKtm2O&{UanUUD$}o4!Hx`=l+& zv$20SasM^1{@;?Tmj-~`ubV8~6Ibd>H~bmu5j)26PQglAQ$E{Jgg9JRbBYH5#`yUL z?Bw6t>*!?~(IT#pLac8(#cc)DiQoC=**+6x_wsUWv`}b;yyMK<+fv{0??ovPJ}I!+2muC2(IXl0-SliY1a=<(x^+0qG!XFXjmx}f z;3|~PFrRBzq);_&{6Xk7?47FjeU<6Q$3#Nu?a6v9fZ-vrF(R3M(i?CDb2jQXY?tc` zzZOF^+g5(94zq_o4dV+d|E%<+-mRl>-;pbM$UaU}%HF#ZO!!(9g@pOAi60Gr&P^TL zn~}1UgfPU#B=IgNx*FMt^GYNUr&f|4(mN!9o2`!*RfstK*4U&cZuL&Va!sYgPFR!IK`WCQ@@5|`T8*O!h_F}@0sfT943{KWXKtoHh8$t{W=LlR$jeG-Kgx0O#w4+b`^ zno3?Yrk9XmnHUxbQ5MC+|9bL@>gv+*DhOm)KFH{4J9s<6Ez z(Lh5nbRSHo6c8tp)99nBo)r-m+*AHm*st;YQ8$iuMTgHf{(OGBxJmTirow+vu3Dd} z(7bBAs365VN2WvtxR6JzQF0bAY9fh9LA_4zlK`qh6Fz8G(hmax744M9r6GYn5};x( zcW*}1t=fHEC2p9Xw|L`M((DT{-e=Lvy%jHS?YYQY5)Q5bHO_u@{_3Cvu}r##%EqnV z)Ihwf@#lP)=J8Ra%|0Uk4#d@1zdgf|DIMDJ%nmUra%uD$U*6}D@V#!g+UEtMGD(V7 zaxrRUe<$FdlFWf}|MIVz%LIf@nLetCSlKR@6g zn|;}UzM`YXp8nA7K|~P5+w`$xmi$)8mq)4g;k4MXHWen_H_dc7xv!G>{#Tpxjqe#N zy^6XLxP8x5>t(cS^#qDT)FEWE5NR69204^?vq*~S?x5?xd6fA>k)RR{nbWy~2qPB9 zt;E900dJbK=I^*bKGr`i`1m(qD~mT0J%%M$#HqyXs?wdJVum@*v?RjMN3FZZ=@Mz_j1JWFe&@nwzyO2{*##JvTzx73Jic?!zy9Kll<2$l=8yJzUT$@s zRgX8vRSL+**7)6ePJ3ChZQ+OTe+uOO8{Ym0%AG5t#lqd4VUA=5E(dS*-YjjRhmlS}1sRTFnCQ(SIaGFlhqBwU6%d6In>=Rwrh#+zHRROd>;3A@8|ouzyDxy z9_RUdzMju>j!kzcg(jwNJLE8bbnRgBdHI=Rez|ccFS+UCtB0J6vLFVL*|@@8 z(p_@}1LYr?Zi)g=E@`XqdVrKo>E&PEOCjtHV@3sb!^^Cj?~tu-9fEwr2h_e_Q;a0A zqyr?xL`tiC1J)kh^sK5Y!bpep7dDGibNaewy~0&Rx+E@02Pa8vU(+q@9p*R=#c?kb zsX5IHKe13Q;pSIE7Ys_dNm6v8yHkC$kRo(WuTbymnFSB3vg@wkHbXIUxZ5+uSpA@ zPaM*!XIFw_lb~t?r!-P5)V(jBfJ|XAmK@tznrY2-nh(7v;@c5Hsjvrly!1pv>{a-9 zjf84J-3PKQ8wWeb@Eds~@=}mAGPIO~NGBrT-{K0B$wF2(Fv|`QT4o2vQi=0S{`l7mD@9kgk7XRrd{(P})QqH`x zB*Etrxt`X!thC$@u5WH1d#9LiVi$zgQ4%#RPPlb;p;l!+;QfwenWlwbhO*&;|Ev8i zZtFP>z3hDQwae3yY+j3$-Ri|+gkOrqn{Rd4>pu?sK48^ZpbeH-nU){w!23xnL}N*a z2v);QtuKWJZo}|4Cb?|a>w%!g7uAt)jFd7X&4gP@7~_rNLDs2wjE&%I{Kq`uH(@yf zO3*NzYvnn9)qAbTDI)zWp%*|-z!xxO2tA$@rC2 z7AE?kYB=Dwm;yqC&KEn)tVuH%q#9pLUSy=Q;7U?Q0{o=9+WWV1?O@wn%q6G&-rtHN z7cUJWZ&GKc^|x%MK5?4hHb*UA#qYsz#~M>u47LW?$O^6K#_BG<3~KFthUd@#6Nat9gDrpNEfKPm`F~ylEdzkB%ml z6(u!s6+j{wy6IL(v!pD+!l1rKip9X-L`Hm0j36W}b<0!)LM;QUv$_vfz~R`;Bxz;H zK&PUllOO|%=Xt@2u|FpiO)E+d`eQ!2-^ImDic!c6T^=RV5#q)WnKnhpR% zq_-9)7gYR?Iat4eZ5J7PmJ;o|$RhP6Ayab$y89&9?d=Tv-MCXCXAT&>tWxP4Hd6W@ z@_RFk%W)U!nK>@4gT*6(o$5E9f7VLYVY)zJo<&|#pIQ499kE6`-Eu5sr`C04^Y(P) z^u^7c%T0;?gjLuY}8WFoc&970OG;c_@p?-zFFgbJX>v)rl zgY4IxpkddqjsY~&H8bgP@6g4LNs}11#+dU) zp0V!7%J`z=*YHP^a9hKUSu7&bBL-PcSQEsc77{7CN&f&#W>DC7Q zQcd*WvH6lh;29j(1Y2MR#~J6n4B<0G*vr&ljeCwys#bs4n4YuM^^FtbSq(^cZp?lC zDZ~obM!I$SRonn#|C{-dZ)kuo3IM>v`0+R409KrAP--g;N2uS9~64GL2`<>a+S)<_IBHXHd3Pu3sh@diAN*@^|2(n9^&mr;4HhiT} zlPgTo)w`%`DUxYQKlOWWS#Szy2OVA8-i;3yVGw!fl|ha~e=mJWk28YaFOeP`eG009NRx^ z1}#!&{oY?7qRL7f;U@A!U%;}g$t5*gq%~T;kn)E?t3{{aq0$RZ*Bw3KcHGSWmCd>D zW%WgsP5#bRx|E*ab-4Zshduc1QhIcmKSS@M$eCRbO@C>hHyK8PMyf?^ix5k(e%K z_7v?B6CvC=U01y`F70PeoLuoSZF*m~to~r$F%ESX5FFJq6ED{h@kY62L-` zHv2Ug9t-T{yp0Eshv%FJ&>?~`S`fE#n-&tsS}&zij7XH;sS^Z|rF)aJs$8y2J?oC^ zP#MGJHi0BpwLL9vZhcHRUB5U7O>#F-C{+=7?-=A^VcAqui0_!YS?lY&pnIdd%c|Ri z5x4i%wyQ5oI2Ne4Vvx2YsV4-Sl>VN!b}+Rc()F!y4?Nmp41u{08hLveZn_b-IidCt zY=0{d?~6dQgy(_*Mkn zP>NHSudf-aJd(isP{EWQ6uIc^W@#xS*z;V+;aBY z(fJL}Ng8%d_OI_QJ#*0gVu`rzf0$w}sTT2+s(rax4)?n)(xoI{|NO5Hz8BEw=qTrw zW8db8S@lvhg-A~lblb{45^+7$IpOg^x?>5&|Lz%uD?+dGFB}EmKG^I8unH5(43-Xp zXppwJnxwM2zEz)Bo_!C|bla&ooEDp5e$N1#VU>wZM}w!`AgOS+TIBkCk5ln?NZ9$F zSOEEi?+N?Hnzs*M`ZkZ-99Kxvr|~9*L<@*|QZpqFD9+)Cy z^XvanNHTK#{1~W{7XLc@m>~JrGn*NEFZ(WuhfbC=#NEug@z-{p8K3O8xmArEQvwrR zV~12|6D>c4o?ZTZ?85gDyE}VozezIy09zl`X?uEnsuLhte24t+2aj}nL~7ZW+qMt>pNF6!&sF&nR|d{{|YQNuc_9C8atY?ZkWQY%OLJxQMpKQx?at$|#^-He(LA|f@C z>;w_mf{&HWwXhrc*ZH#>VYU2PZ>w8}4-aKmQ5dKO#YK|=AGL?-V*6vE6wMiv)C_8e zd+@8Nw=PaPD0jM=Gmuz->(7Gy|KN=91U+4uk#7ilcdLf zfNz`(V%n^uzQ^wYm$ZbFs!=tQW4uedH9uzAllQSDuilu2ZG`^ruD==4p67BlHN&(n zDkT31>-pu7zZV9HH_T7H7!~$ytCqZ^^vDy^L**F8%NA9!pw>fKq=CTOgcf2gOoZUl z2qDHM0u$YKrzI zS!6>&{cma{U6Y3~+7KfcksqO|N^sN4fVRw_)#M;WCOMZv2fVp(bDXT=lzYYpVPtO= zLeRPXH+?A|*%vB$81d&8e99ak=|&%{YMeek3f{RI*Dg7)xma_Kqi%3E#IJ=bt$}=O z-50&4?@N69k7Qw4y^f6`Q1p6x`RYca&6@p5!{a2;V}E}B{;C6goWHnN`F{iM zUjr+-NsbA*b4z^kbaPgPbQbxm=94|LwfS*} zM(^ZZS|Pr2TJZd5)=zbykP||Zlpq}Dq>Oh$O_OflbDhR#JzuWhf$ggP_@@0}`I+o! ze#oM@N96n8B<$A1=KFiyZ?=5v07y9eBIE|%41^k;Bg=Ed;kh~Zd&MNB00NkfLE;)K zaqeuox=Fym`RW?`NjG#X9sq8nA4Wh}KmmGF{pp&oe6kRklD~WRgRP1;jbwZ?VOmma zZ)cjUy*mCm^>cZ-!_DqH9EF@^Nr9gWcv6YfRY=vjSNWZF?sBp>JG(vr{jnM(D<)JD zWJ-(q7~2PCfgqinbV-~sAP!kQATmla0pamdKvHe!TA+D9M`UPRxl=u>vAv8MJXdTj zvtKCqAneV2H@W6QWjXF}T+`Dt6C4(HX4xQ4e)-O9hcFERUH;y_fignUI6Q0K z$G|{#btnZ(FzB9+r<-V`*x#xju=T4y2H?cKQ@ZOH;@hSJFI4;Xi=u;LGz^U0em9rf z|M*ZQb-rRp;AUQ(DtNz0n8ASz&2IQZb$7MZq?|i{^4VuM(TM-JME}cjM|Didd1y{& zJGspzdCPzDS#RJS+%OC{86M++VkTqOGjm2p{GV}aT(#I7csy>mmZ%RG5Qt%kHb|1= zOvJ~&0EJeY)k55*;!LG+f@UYOe4-vUEKRujfbbF1eKNKL6Cdiwr1c1~LFh0Qr`;*TvRSO;gGtTiztFo3}czTum zxp3bmw{urZYM;MS?swNj`s1I0$D3z4OhQS^D;!5LtmVKHihGLmNexlJL3YiY^BaWp z!Bhwy$m(l^5Y-2dh5&EP3bt^^g-`M8d}D8G*mpAaZ(5h&lC;Vdmj)L!tb4jpl=~d0 z+wC^&9=5l?X1tSfvCsm&3Wt4+Yd9S~==9_}tWe19H+;P$)YatYqcKKa{pDaC?Fcy7Zmn)HYEXQo-f z5$E^dGcYF|BENn?(GsDB zHndo`&N4>Tnl&kS13=(me`HBK-NzI9owDDLd^vf?DuFB{D26I1J`RY#lvY^D56stx zgLBQ(%<@+tuUK_-T@x@R^Y?DwXa#cEB#RW-8nFGw=5bDhfgO>$86X5!_R~9f0IMBD_U{*%i zkPIJB{SDGXVV^QAg8D)?{Uq>2Tp2&1lSL?GAn2NAV`2oDrA$1@6jkK*QF(J_eN5$> zWqOJAvHdS`!rddo{rowhM@R8bRl<&wj?N!RoUOv9&>iC-Wtj(k>Ut0emN!!@DS?eG z7RnDtQfLIr)t~_#ygu*Ni8LB3z)0{66_~-#h8H%zE1(R&B)DwvOH^UxD(Tl*gbP2X z^%-4A5DR_0@`M0<5V(oA_`xTGliPwR@$gP<=9-+x;=VST2AT8D!& z54(?!wlZyeOBQb%JvFP?H7yG2RbcFPa*TV#-kcq_PHK^$(M4<4f>C8LstKmM#&N!~ z;RC6ypFF9206_JC@-Gc{2E9rREapnhAUYtphWKsH#E7XhPokEF4RsSfCun;L@XiaEXtELwGO?wlM#uW&E~V?$E#%J9v1 zx-p9KHp(QmDA04C>9&+|-r`r(lwk(|@Qw8bzR*(5t;#O$V>AfnDuj}% z!eH-Kk02aiC`LJj=(_CzIH-`U*P{XQyp4sW`v(Q~n-8_#Z@j(pB6b6YL|0^;0nZ?- zN%SJM6wXsJYKw0;(GM@x1Th|0PruA<*k$}q%5%T#e(}_p^4_(hx7Lz&jH$&;HPu4B z;S0~*3vqt+azDd&QFZyR$0tTLp>9&fL0F}*;J2Pm1UGtutcL4eO-%Zoj4Hbp{(_fK zfIYjV_Z;bB0&OrhM$p`&CS4)w{sc#5aUVbVeU^ei7Ml!lh}3u>Y98*+1=AN%?dVz- zcr!yPKiG1*yk(Q;^v&Ftpm}t`a{B7hTr#xt*V1F(uodH*24l4gB#;O^6jNZ@rG5J7 zXf9y;!mbw^D=U5bxGr@&L6U0tmZC`=p(SoxYY6CIv6%JuoC#?NP^`Ut7d{p$aS}-w z0NFsEm?Am&=|+67_SM0U@WFO6fE>DrG|5094IQycYxSlm1J?UM zM6@&+$|@Z*j7OcHTBFtxa~aVc*#c)OsrYguAl)ifTac}@B94{BS~uO%+iP7`pv=PR zcBj~lHW6*AGOQkGujL7il|{^T#l(J^StT%I)%+&SB|a+6ND_%GfnjFES64=+Tjc}+ zdC*2T`MXJ0KQ0{YyV@OXePsq<)A=~At7l3A+S83#(*(CXh0z&pTG;2cFgz#!0G*h= zB*YgzE(_ECe*GLXnXZk`6qxCE!S}v`};v0)NwL2*tgp!^*P9CS)0s85wx@X2fy##L!k zhx7QX;l}2-*Q?rz&pp)(&WYU+>bteK6O;;c2p9~>;+U z^9<+6VW&NrPBWuxDnrW_!^2NjhRNug^4E zKI7%{=;@4k%0lyZXH&qY@wspv9padZLe154>;UQ%uqt*N3>0=S6+@9i-V1^fIM`}5 zog`swaa=@$iaB)y-U4Ecq|B)P=NJB9z!xVuP^r+U9nIe^nFvUSa|NDY*% zu~8#wh##X3&)hwn+f`Rs_$gMKJFHqY8Gr|$`D2ul5E3^36kLyM4-;$Auxp(|WI~PZ z+&MCQbp5EQ!u{Nj)LUhG;I%a5AT2dTL`y#V1h+tffD#pLJueb%$d&GDG-yDJv7pkM zdIyasrFWu+iHLbKf>80Cry?PV?w_I5jTu)1S)Vm~Lxlt%FMFfBI2-rN;sI8tZ6Uuu z{!HeJa2cEL>ID{^B`H}Cem#H^azEw0x{oA|)#=_Mj`TLzNcMp6T0>{gA35ute(~Gm zb0|B%^&~;>|F!S(52*$~HycPyLqq%Cq=bmdP>V>!uA-@bjb<`mfhWg=AQ}LGm3Jal z3-i+p)_CJ7X%f;wQ{^$~(Zw0{ezH^oEnvKa)g3wjG|ROa1Cm?mA6M}@sL~uhF2Z|G zq{8;tQh_u*%#LU-r=}TN!4_VctH1qaTcyDx6ipyJ6C&Hb8=Y{xFW>#{R{t&av-^}h zTiZu}u9&=g@SLXjfq-WBJZ&{yx=_*k;fSCBM6tZa$XXmJ{QXb>EQ&HQ#DeIa_+pL| zj4OvwGlC#^TK@7KV`Cw<0*EeLxCD!O7t}-sR}-_I>faVN3~IG=PM3yz z`b=Xd4OFF`0Nj+SWhVr1`tC-%RWWcW0Od(1Cl|~S;zOs^fdlhbTx1AT%+`=SQ@enr-<`qE23%_7JlBd zq(ox`!0Z!ciWSsdKGEEM5 z_^=|!ci))YgkYgyLACC%-OmQ>4OUU<*cSJB>Wm$_xg>#C8A;D`UoXr{ko83uhH<(B zRO2k&2Ur60lA;v}y{y3!?X6CO#jJdIskFLy3G?jp1@p0nWnH~cAb?&^M25syjF{g8 zsb~Wi0U%CxfOzq7Y<)ZQOqlrDGncnR>YYi}XI>v2aR5xD{|j;dIts>unKITnvUM@p z5*rcg9CSI-)J|B{@OIC0_{9z<3uQWL}Nde)vI#ae@ z>EK)(6~BbZ$>^LF|5g|DT4PYaDb)V7cF#yW_$?f)`Tgjq`mtRwJvfwYsQoysot9Fmextp@O-ec1K$W--j~lS{UL-PO zSpjljoC57MI55>Pfz45)f+fsSoL3(WZH*%zgLh@K6ig>2QNnH_4TgzYg_k@R<78B2 zxZSf2$-|#Tz%UUvU>>8F9}7)|$e@te(-{Xk(o0FNy%OOb)ovs;Ll`g|^9d z@AF#7A#RDp_3^6ya%PHb(QaoaTER%6MhH zg}#^TdIfuTkM|H5(-6QmykfRaNjBkn60hlfC+-2hEShc!2ql?Pc{|U<4vUwQVq7hz zD4iZ|NEB}2>h*VYo$J55ug(2;ab*@({|C+h)-Qf!+jb@O-qhGa_?2Q~M4GB)Q>#Xd zNV*5`RRGhJ46=+6Ba3FfE=;7hjEdl~t6Z@DTb{<8_StAepUT$F`7Q2iY{Bjn^ItWe zmJnxQO(v3}ag_`;2?Knhd`2=^JG^q?pvb*yb>4{M1MEbX^=osM5wLQJ678K-_lnH3 zYlraKYRPSCK%&Nu2ko^23IkUK@VM%ZoDAB5Uo&_+(p`5Es%+L8qd7dQ30S_8j2dL8ET zpvD>c8gQi-YV^UH(+=0KyGd>PYX>EQF`wK9>i>j~uy^QRDjkuQpgDs7NFxz@91_KA z;hKyIFtjs=>`q6&m3|6Y=kQkISbTZyxY|Yct-5cN zDiPGwz1HY;c-fO$&ZGs@5W`W+d)M}jSv+ge*}_i4)_qTf43Bz;2cRD80Az0LvV2n= z?cjU{ZrN@)4RS7^qkVk%8`>}yP{vE|l^=b=5gX4@z3-ER0VZq)x238Uy^EgNnNE}N zbWkaj2VEd9-(ds4mP1mTT&FWXbNAD2WwTQ|g;aM3&JzLl$kndAdj$!QFrQ@60@kGT zEMfiK_ADe*5g?yx%dJolj)XwxSpWmWVP67PS#0-gs00dcbc%5F6rhBa|5NCp>3{Rv zzt^mPA*W-`bR>CiKHGTQZR#qEGxc(j7#~`hDSfy>(u2A8y$?XK0$AE$B>>lxg|#e~ zk848idxIH$Fk7;pe6qCm{U!hqBR6W3=Hp=bGU@yF>8C|?@g+plAV@1AvVn4lme-qz zy(-pwuhW6N5SXI-O+|Asysr11PuTPy1V^=jtm6;|HY6Tn?I91JK7J+>IDL}lp%9<+ z+UH)0rr1a>7JajtCa?aj8e#OS?4xt3gKp=04VU;z!_yLBi`!R6d-^LnhWc4&#!BX= zdJd9f(T(Kv4vp^7ejPWO#&~!Q&XlscF)KJ=VRIf||FS>6(n^ecFBhsDhhngy+P1A* zw^}%|l$EA6Wym+S=Yn&b{AU;oMJb6><yHVRH0bz5CzwsY4)#z;TRA!v;e+nKFN7BtJxy92+AxO0>V2Rgy#XkbADiQPPVD>x zvgL#4Qpy)I{EMVmNA!{F4UWuPHM^kNT1R2;5gf66m%~-~yHkc!*orfDry#~kiVtH> zRDO&MSbd)O5ABfkCk(d6JoVMmIj#fF_Alr!>?|$1Gz1Lp43-pmc-8#wiO9qF6dRsA z(Za<*R6j$X%wyO)Hg95aZfJCBJaXKa3o;T0Pn9%H?VWp^TEl>@VAKR9EGlQTCU#&7 zcrN64;%uhYjY}@Lv7BM9S*z^SsC*6juQwA?XM~{ixrKu?XfH;@{rC3Q$xBVcPN0Y? zS7-3Ij6lX}7EVsh)fAzuW&7E|0oDKsfuul)YQ_d?x;R=k6h`Sex@7ymy&~v;As4m= zVEGb7ws(V)TM{;WLN7;p^F36x<;E@p_tI*JkKO|4a0nBj1_|CS)#9pLsaP0RE_%S5 z#!fYwGV+?Dz9ol`XVMLVqCi9E>*_V7v?bG7h|bWgrbhwWrW-_Ygxwls!YR{rnc|X$ z(B|j;V^Qsdw`>bXCmYA?Wn$_}2{xJC>~L|*@2s+)M(mFn(I5C%4(0e5@k{k&%eduK zQFAUne<^EN`X=Dst#{XFdjVnqC;~Z7<0D(ik+TN5VgAr8n>b8;-WV^#lUCC&JgCnb zJ3u%C$F69om4#}+2Sm@nO4JhuI3AyPYCz#rvu+=C2ecOkX*FjRH^MntbFkxisV4z_ z2K+B4q$gwy9pKOT^-KV|YpN+C5Ghn936yJ21_1?3i-_}$Bo`zwI zu2hPtpA>b&9EhNXxxgvlgyS(u_%Ay~STih6W~|GnG|vtxC>;2Crq*MA40v%hKf>?+ zT*!%w?uI2r9~ixD7R?zD*B^<#=3HjdHcmylg~uvndz@76Agsvd)wdihv`7Q{LV}B0 zwzFJ^d14BIAd%t2ue_hx-}q@+%W%LNzTEA@rK(Ep)QcO9SJrOJw*0zhe8>;DJwkxF zQD8xpa~`>J#4y?wlRLd(Npg-5Pn<~^#WTSq_K#7xD`6Yn#8IQ!8;jSH^MIX0n_#J- z7!sD1#@kxRl?*7P65~n8Z^duj+++nzU1Lyovrz)LHd~qV!eZtvEz8WqJ0Z@S@jTZ2 z{rU!UAaT%0@H^`NkKg_e%jMcKoq{vT_FPKpQ_+=$L7@*&eDkWzJMHQpg{^n~pH*eBt9JPKbV-%$zBV=lhr*y=CW$hW> zc>GB6cp>VRn5}F{Wnn|qv9#TxjWW&oLOQD_!^O?olK~EPO|aPUNv#P|a(yp*t=HE` zj*F9bkeZ*scFv2{ORq@X#r55GsvWEW7%XBKQ7()m2}m60>NmJ9Y-nYG5dr%>-(PUaa+A$ zVEBRk=RXyePh(n3@7-G{C(n3;4GQidY{AtXX8YwGK<9o3OQj6@o|j<-qF?5(H{Za3+Z+?r&f->^cU+Kgx&g zU3$TNwMw$S@&$nk?uAJkXA+(?^3|suIpZ*t*~#pROz3bZf0PKt*pJ;T8dYO@y-aK} z6{O!)G$o6CTd)oDk)qu*il(DE#)qrbZl|T{Ap}ndlheIRj5BWfOZMe^?s?KQl(c`x zsQ!NpmquWs?k~&vVgaBpNo0r9WOYhxWnl)BjOd<(WCd#(WFNXDVrbT3>?>@hw`7yP@7hRi#F zqP4}-UQmh+C0qqspTp~7*L}mwNpr)PB zfTQ?Q$Xvq?0^8O+i%9r~+pJrW4zT+GEb*liTru z)BH|Eqsi_$+Wg(aA6LCibxfMTeBAspX~4v^0=x0-z*Gxc=oH)dq96m+o{;-lovpW( z-<_J}iqi1hv$@b)APFT)aHrmr?stL?0rbn<6%rp!d980ZX0QR&{!v3as5@;yPh!b^ zcIoLG=Kf>LIzI+f3NmOi6Mv-M-cG+I2SiLldOO;^>`Zr6vjwGj0+eLFeCCU&VTxD_ z^TkU3RaoU7F?+c<(t?4Kx@(G5ebD7%Q$As3JEqzuM)WV__TU-J2rqHStp6|yTpxNa z*p^sW5m{?iZTKqxY7iJ!%X#(wRU!W*T7^|CSG4mxbx!ZzOC+&b1Yyb8MVTv`MHLcK z*=HXe;?D)OWiX82_>C7)>JEb#Q3VZ_^zS(zYPvW0cnojYKh&!>XY6#C-%xhysrn&` z7<%zwX$UjV6+7m%EPwyJBrPSXscDqxreO=2s3e)IiAltsOmved%?2hLV0>p8V%dfv zY7Eotk0Pm|@){J>8wm4=foyzSofoy7NRPF?pHdzdixwwmP3d3`C{dmp%PA1y>CBo3 z!X)(mVvd>G3K1$ViT~s(2GGbDCSjMO^MPy{$ah(TZF}T1#=ZtDTnX{{AaLtWdjG`HCT@^g4F~h{9UPc)w z)jQJjhlU5{r8fm)$F$RHQj}n^(+Q;$tc#72h#(oj@?>AaunWLF8yGGn2Ul0O4S5;Z zs{kzSx%w`LOZ(~bX~rlxf%ZyNa{DraA%E+k*U{Rm|BbYK5&FOD>c3cS>#y48tNFZv zl{+O;Dyb#32xiZw_?P9L{DjpSP3)}p!T}(-s3uoT?YL?5s^Nf*_s9|pn?edFfGjXt zS@$KkaSL#xJ68H?_NIOGXimNiq?@l?;N%-isSWV}lb6A<5^5}zsE4{^3-;L-vm$S^ z>aEizjrV>cRQ{Q|=8r5&c=|#GcQ$HeDoRo{B9>RIAf&ZpopXsNKtuOpR<(D0M7jpg zu}Btn#p`W;Uj*8Wg1_oDfE(_AFWkosp1jmK1ZmIJ2j1TB20>wZfRtV~KK})lV({ZL zBD!L(Geo;Qj||nS7~@f0XXvlM4v>f~9qQT!J(Tv=~8nNNz7Fj~T+ z888~%f)rgB_jHu6!;-(7mG$1sCLz72bF_szMNk9HKywv};B;%v+{5622TI?HawG%ZZGCZ;eG zcszKc(*`lNJSgaWFfP1m(e<-T(fI2Cb>G-F>pf zZnj$(A9}24{c?wzXlisU4A~u>fi42jVw;O_@+}O;IDmaZ?eHFAZlFl^lbZdinh-Iu8@BCaYF29eOPMD2e(EC8WTVHj9SDv&OHUZbN_W>*|1-E|d7x1dtH z2tMwAhNBA%S&kk3*(u++2FE)f;&F_@;1Yv+~$L#)hBj zSfW(Kr{LQ@S~%LJMhSMAcvAXSu-KN7gp8Bu%M$meM%u&u+xB%b-175~=Dx6otGOxX zs0TMY`|8ThUE9{UB0jmV_>%l(-e1MB>+wT*?FWNIGHb>yaDH$>K?P4%$jRQ2R7nn%F>5T!!AqLEwMH{8z!B$A(W+^!_Oxk zClxCCLkDNHeyE7NG>LN!mzRGFfh|qFV+sAoEdBFa!Y_Zkd{eaZKM5^<0J)>=sDtM$jzo3o>vUsQAT^N)fRgn1I{}2?;M-gAB>BR zV9(<1eC`#`J}XnITN>r-`+Sy`@Fb^7MVaCz!zjqTp7vTfBuZKHfdMrf-2J}V43wjP~C8H zvgseasgFyFi=cpWsa%H?7bHMFc0D9;7)!z0&mFt?K zt4XMOjAc)BanHOi;1H(^Lf z{Ekf98=oC^L1DDG$0?pZC{UUc2~ zTr)VKe&5RKsSoDM_LH}l<~Gx$BmCMjcowO|Eoot+`g!nkYF+PFTE2VS8(|6O`QiJN zRQIl=8#e@Rt{2x4WKb zoG9e~6nOcKhZ2gyl9$4b?lv;ttVt<%*I!J7*vTD}~qv7qr4zvLN9S?PtrJ?nRQq9!$r zrKHez5BF#0>t<}^IA&+?TY@1g#U4{6o}c$UjW=N*yduoM>$?6wj^+LhIfXy~IE+A= z-yo}(#celuU*I^$U$1DXd{SK>j@%*kRPS8;+xUUjP?c3V1Gy&_lJ2Njqj!fHm@R3g z7CNNtqA%i7mjB%=^~)5Q8r)E^N7|xmAauW#uV?gCjn}9GN5z59Ni}d{#*mlg4gc|Pndfq0S{#aXclpK-Z%o;q74zIS_SO4f z@pf6><>?gjQ%FeQwr7RdaXV55oT@=?ym}}BI9nVK7o0)h508epTCxxkoOJIv9^K7>O`?dZE&vrrfZYeti;ld12@B$^sfG<;mX<<|Rv(aW*K?%Q@%S zHH=u0QN27!>DwOu;P@C|ejz%wAcR^?@gYp+6@U7q*YeHDJB%;ejKd(&l%``0Gq%Hw z`-oRQkxaH>?7fSQuKRl7_z3T%OhBEDj;ZD?#$gek+SiK%IYz*%jP*vdavtslNc$Tk zwV1QCIT$~3&O234p5Xkl^rEP9|9)E~X1vtR$%2oURuF!oYfYnF2P)JuYLd!(Fc``0 z-NdTlePh@^ik6rFGZkc01$=~1DC6Vt7Mg1(0F?=J`hHp$dlj0l(-8w<3oF3NnSlTn zrVr_f=He1u5=IiJL98{6!_>8dnThAW*@G%a=cU85e;Vz?q67yC;rD+rzPh-KnatW( z3yp-gwpGtRGw8R=n;Q@N@4?|;^TXf5TIS9a+uSj;<6;)ptCimmE;wC6RLfJCFTtGl zuxg7}0lk3aiV`)}FUq532tHG~88b%d^ft9_ayBWsBrE|+19R#jIgg_QH!M%~6OBY2 z4(%3LXJ!0-=3cZdos$v@ncFWs2_Vrzp076OCd*aK z3LG*BNZSjWL8!qax}Jk)JwO&HdH&FAxbf3bOHuB3Z=bbW9n(;#zj9XmO&05_3>T70 z9TxMqHPl`L$78c>O)Vt|SbevfU-zzCCgKne=vQb?4I?*+640d&pPh-qvrw^Qon`=G~R7hnFM3B3D-OMwN}xsR;doFd-$c#`#X;JeZJ58 z=C99RIdXh*9@lx_*Lhy&)m#c15iNeU$t5i7Mt2+SEIZ?N(;m}E(rX>qCWq-3jg%xd z)(RNBCi1ypa*m*2ha+a-2|&SQ*r5#7>EZoT;bi&$a+c$z&*~rFvvg!swwAa!Tu~QV z$qBC+f=MQ-D+XGvf{Md40eMKK%Mh>@E7mQ98? z?JBmw5WCcink$cx8zmD-RG%NiU-GJA**)Dt|0-;^7?hWpmX?or_&=?a$M^G4S%5CTKrk@K)YvZE$&}2U%k_1^mDiURJ&y1l1OR5zU+s z5?Zmxg(!P16LcFZ>hTgB7Yms!MrbjyCVIajJj$eGe7aN~(CZ@&3M1A2tazW?zz=t= zLFW6M%}$oLhn_-Lt;}DYjV~6oc6eH(>9SBEnnn#h;}CJsEs2XDD2fSWpi~BMGHCnz zBz?+<=Aw`ZlSBQE5nEdQQt=ZPAFo7-%`=km&>atpHeBjA|Y4DJ_jSvE>8J|2FnAR&`vA-J51 z9Le)ZoJ<)Ee3vGOxO6$YV4yhgB$-{3{Z&n&TFW3ffBu^F zwmzW>@6V|X%-l4s<76hdORJq#RZGAYsIvKCMp9Hb*#*j*3VI|&4=1Um6_H1@TU5Zt zK>t?6$!Y5URP_Iqxqnp-GDq)`Bw8$WE0_*YjoqToB^E9Y^4KW)J>-?34;{HGlt)3X1VZc%gFg*b|j1-tRelN*M?RCtPy;nSKr*hZ@&4Ni$%a!Fv{;q z_odPFWzN9^*9_ltK7|TO@6^^qli!pM=u!x1Fu;xTORz+;80 z<5~3c8($QzJK}jh>8qH1#D9eX%XNESYvW!nxIxjC^>+e-Dl6Dd00WuEN4TUf`yDw zMAW3~sOZ`Lq{C$WZ0&62)a|3&t;NA!UC-lTb#=|XcN1vE29Uzd9{Csucs7R3HIZ1T5jp=>L5koVmC zpL`#F^Ska*9;zWQBg5p;(Yt#Z`zv1nn-0(=72c8is^SlGIU`R+e}9izO!_<{rGs&; zfBG?|*O-GXo>AJSaa(iJam-?vAr*4LK}*o{DYG#bqckMmPo=twiB;8#_h?rzECwhN z0XjY?+?0?AGvs7fZ<=K@W{fp;as}}TGB@H6ItW@gA+M)`hf`ikNd(L|_NO>YvM&o@)b77kWQ=u$ z^k#EX8JNw0rz)4eNA6Sh`M2!e=FW{4K!>kNu89hSjS&@W?xkyKGoC-2t>*L6gK5l}snkd)qkynUYH|+10mprz#!T$_ni}@sUi|3*AQx|l z?NbKW46AWcALNou0vH9SJ&g)+DW~;_mnYhrZ8klX`uX}oRvCWAYcko9lv|qWyDIxa zn~3bQVfXeQ_JVt&@B8FiHG8_5Slk;d1{@ASMHD(o0R?eP5>!_b;T@adkgw;{^kLLC zlG!~|TBzUwp%gX!rKje1mc#8S-w1D*>(Z5LRxkfb>Rije_(yTp`DeV3RW+Wm-dV>y zB^k)jDOAweb33Wc)>>p6Vj~Sf{C<)H(GwYA=im){Im+qD+v++*1F6t`BgE<+r}Ki#!f(9r69U80u)M`0 ziPk%El?6CmGLTbH^r#@6GH3*>p4y}goI~W{2DT=iaF(*#JVcb*YxR8pN(1=8>bL8(lc^18r#|ZJ*(?F$5rhWm4X)+ugs~eu0Wai^LcAg zO@oqRO+nX~gcwTIH^Il6trULhUC_`!y zTS+&rntAy>a!QrsPG;=YQ09amHn-=+LbF(>T&~-UOhu;l>2Gte*mk9VD)6-70ZH(e z`i>S^D*sA^TxQbBS(RjG*%_fqi+qY=`5^*;+98Wte3+9=;MGVHhy%t7p&&Xp`Pl^$ zg-24b?+1+eeqg?e@X8ANx9nroR2E*daL==YBcyt5&u&f%7}ndQbpqo%EM=sP+8F+- zAa(8;DRljLKB93?1sABpzgpFNyWz$e#JG!5=D|4Bfk%*$ARX_oo6pJ9(5&R=I9FBnlhEWN&q{_XDa z`a|S*%k$TMpB&(5BC@V({NE_q6DruvLdTwNb3N|g3 zo(BLYGHUxOcW-I|3M6o?f-^O{1N~FByzda)(gYGWcV%fpX-m*#LVri?_nWXk_r&2~ zGH+)___x7lmpv>(<2UpRG&8JsqR%XpC<)ZgXpZ}2o4I=d!K27T^ z9{bv^=2YA!tKO*4TbcOe*gxZU4Q2%jl)kU};`1v4s}VE}XGipCG!9(AxeRFJu(4R| zsJ>=u(kd(x4Q4j)5)~5xTSRaI-q*otcZWotWsS)(a$j^?x9J}Gr9S5Se&IIRtM51o zaY?elIa(Dqv##9JRJoC@+=m#dd%xkZ>QYps)>GzKVwkh;JF>^Kz_+)N4CmAy;g)5v ztB0C0m@V_)?YC5Rf|L#id2j&h%nr!>n{Vo zXC5(H)2bD4M}(1A5QvU+WYkRE2D?6X&DMFi6=5uw_mI0%BgXL47xQT5_-7yaRKG}I zR@YaYM;(3(9@kDT5vQyczFB8$GL!9a^>$u|>Z&#@)gKe#T7S zva3HIbR1mB;2cR$@l5GpmWx4R5qC?phI!*!7WA+6C1P;vVlv_hEuv8chD6dGJ>>n(`FPlYz zzzx66iF|_bR>@UXNV6i36F`|Et&~sN=@c&TRY=zrxNgX9 z+5;RV#SiXU@?iyifjp8twB65faUWr%ae7mZk6lGUj$5Vs8I-ZEfY(zdR1+y1)5#4D zv;xuJN4uMQsJfIT%Knpo4}KCHOi&Clc9<9$;8AzndgV3O{}szB93PK25X49rDTzf( zzg`eqmt?fZC?C1u;|E!YQu2wrpwbHl}82hvQ|E8sj0?-kv@MKC%D+YQcB^^H=Q z?MzObHKeCTm=~Sl*0ERP9SUfzUnf_t;TOb^fDWxn9&xdh)b_*qpA4Plzk}{*8)-$k z9bZ&dJC?J9vQI+@p3Q|Jr~HqjE-k${Y>Ptmo^gabJb>Z?DDekaUY6Q5x`yQI z?})X-mmV03eLK_#yM6qSS|XThp2LVYRwL4dBAUrLDHjtH4PQC$gQA{T{~UIf@n*@K zt^+^j_jV` zikSh~vsDbS{Vh|UnrI^X)J!I{c5YHi9PzgZBg*;fniqJOtRqL!Y~yb}366R_M^E@K?a-X^Hl^ucnEqAo~Xo zJO_PXtaj!DHMbgoiU8=oHw}uq+7FWtM_?p*a}hULHjCHYDqdaJl^R;K9>Yv>F!GS65Rde{+G$aoI3?Pz%TkXy8 z;}mv?w69#xM2q<%K}%O>Q$hg{wod^zc31i{8{;Unu^$tKB50|Ia*QJX-s;F`4j9+5 zM*taJi@Ih!_d&FrO1d-zUVAM(RJ~)3Uy`0~Z_IL+*Jpes`(vWcE70BZsZX2q_5J{I zf^dvu=2vWXYbs9#xAR9uo)f!vrvK=R(EqXj{rPv6b0*WrSX->%URLXRc41ZHiTaa2Rx?_K6V8K; z9-+&{^*wAjQuRUctx6{!N^J#}!cA`eQTZmHr;-&7@#DgEOM5blm0U|R8f1QDA;C?q z-I!77lBjSimXPwW(5OxQ7`GVK6s#+`mx#CAGCnjr?b5c`cG3!l;1XsF+7se!@7ShtZ0B&X zv3pOY`jy!Mz+^uys2mUXp9jfBYyFU^I;#vVCC;#B4WYegf6l^-%0?gU`)_R~N*@cg zbh^$MgCvcqbrK94s=c3*9t=Hwp{Q(eGZ#{N9P~-9Zm58x=7zGPuLa`Uqtbh7D_L&! zb|Z!Czhvv~|GBBR3G_o#trcH^c7ky_koxxodwbbl2m z55ZHa0WrLM^6qFn#+Q*5$1EtsJuruCrZi!zz#47ad zk5roO%HfW**tv_QYZ&XkT2Kd$6yJ!A2goqks+h=SRN14GFW3=$m!kG4;P0C2gZ(xer6x2R%fwV4SmH{!A8|)vdFl=udT{(AQb9sbB^fP2CPATQTdh@qN(}O zY-w3J%3#g^#bq~0uPVc-?nR>z&^MUDMVK!g=nt4do-L;Ou+fpU%qO&b+xmfZS zDaE*@Zo>I@8a}F>^-eYcA5B5aW#p!A#P5dZ7n>j4g1o@~IgeZ}fAl~zrH-8tQ9mf(VkJ`LJu znkwn;gW?p z#QuadDjK7Mh({_c@dn~tMxV8}7`Z`&B*{4g3>zqP2*bd^)D!d-#3xlC8>d6@3y`c= z;w2mTh1~P}Dt1dqZY$zU${$Yj%f3p-+Kh1)HK22rWs2Xy%aLZk+Ei4h{FD5mT&M6? zx~Z&gnO{wgZZBRWRt#RO$@ovP)%WUl4*|FG- z#vu!KK_lPgtab^Na7#$9Zlrlq0a+t}wE+eoP`_HIX68?zf0s7Qm#9DGH|7mBAHy7| ze?72Kz%1FG{@gv*+nKMKrx0F-(L794m(Cp2)*mYBdQc|@K6oz}xjp^I(~5O}^mCi) z#qi2N%GAN}hi2aCKQeoOl+<$y>TCx!M|T^glh1IStOuUs8qEKHbmRV8l_PxoPHzPp zSUKKQP#ei(4e<%s4S}&L66t}4Ms5wwhNUt91^{%TF&GyD`O3`9Q0$W(VZ=Z%BfBz! zOHp{fYRc0GF48}v>Z8AT-2_aOcYJ7dMgcJ`unq-F(I=C^7PN^}|F)#{SHxL?Mr|!r z`up6eakb^*tHbeK9!P1a2~%+^5xK%Thzxbd25~;@kqNdxqGW$b=fw~GN50uV=lA5l zecHU;?j?g~0Kr1lAYro|0~EovZa30hnwp!MCW@I0>PpV^Ipo{=a8=_ybWFd5K3`)t z7_D#o(#0;lMoy3aEl$$`z4>;u*(ormk2WHIT?S*u*)FG&>AROpE9YwJInUxzv7mPC z9%_U17NQO#J9Br8kSh7EU07T+Pjy2ri}q7=jth%lO@B7&8ACEMx91BC=b5=)Wx(}=7R|YElFhN6YhF(&2Itf0eH;#kz${$cdMqP&1IVtYmXjFVTWgc57O)hftWyQy zn6?{Ia=>EUKfsp|jxfcD9 zSfbJ6KxMySMe5D1BZz0`*}9#{dh58An*5!CZ2hw7 z_%>x{jeK|<(|VR-!OcM3&Uu5OtMho8?DtlAzdHAk-wE}|U^CwfvwSZckqe**E%8uQBRoqe4DXI9qaVb)GfKeZNI;NkO@O%gA7j_esrZ8a|sQj4!<6 zlJo}LQ;QnfP~~R+xF%7{KUU-zc3@Q31f6xbkqN|e)>hns(oTbk3O{+P4c2p@*5Uai zJ4V?;oAs!7ro^4|m!fi2UT*e(>QhUrYHQ%qc3uxV-eh7ntU3fm0+Vv}TKxrm1UqWm zGV?pYM%?6v&Z@p(arq&#HTr+;V6sbbY*b zO*#30*)^}ZFVuk@A%rWQN+g`zbmFw-`_&zJ%g&KtE4Fk zw8Zz#h`WCH1B2aPYH^d^5-HYGp)Xbn`XnOWwU9&XtgKdS9x-QgaC%{^+KP{a?=js( zT$;f+IjncAjr?Ebhkt>FcI|XxwXs;zl@{yD4h}I4PG08TlB6dE_c2H|$nuqn?f#p! z(PC!S5;M5M2WKcRXtWAEux5?tW+-b*HC%Pgc8*evK$Gx14F(?Dgn1!df^s2gZ0Xkv zTd71ZGVqo%D35s}XiYAt(pys~>_FE+x8RB7rs2+AS%0F0)`Bm~PHh6Ywg4|7GAC^B z$B0>STnh0Bq3MS@Nw$uDUckRm0aB>md-pGkPcTp(6H7s4?)*CRT~@iES8M=4rpB6U z)%&FG!}tC9Hzq&YI_H0rN^uPOMGU+HQBZB2^gd^IJLZZy(+AMho0VtNb!0ms*Xb|N zBtOruMlO%t667w*#>iQ(o<5jdsJQtpqp@5{A&S}|T^Kq(m34CLc;4#a$D*UlaT6;a zW~yDK0V6-~U|OT{bF?HtOB8U1sj>(l3`&JD3!)kWDLm$L4^2kPeWNp&%%3J%nplpoCA(0`5JRh`xTJl6-!on z5HK&Tji4vf7FSOhxPOExhR6OK`m30<)#?)*c=wB2bW5r7SMSlY&#o17r-u%?0dm!$q1*roh!mf=ZXH0&L$NFch0sk>3p*K z$T%v}JJDs9e8S0MXq0>p#VuzgV+#0aO&ntWeLI9<@yxHQ29fsSjq;;6cIMWTCms8o zm))ygG`qLWhwdq~EhTU)_p$B~2s1SbqFfECa_)KR-sa=x|6x}8-<0}aPydP>2bRvO zj%JHRu9k;+vLV>u-9#8G4}F1GMzU2snbIgs1TdK2Uu;l+0+Ex_F!N#P=F)5BcI9pi zF^M#}nXPAnYntNcaMsWOK?7=71Lki3?O*`NGx?Rak9ZTh6~hil>rs2mBS&k+V%h#4-doLH#eTRghZrL^}BSA=(X zV{`86&6tt?q3|gp8;f>*cKJNx+NPl)GXoi6N8m=YV9cyuNPwhu{ zrtL6Kgsf(l8NaNtfce_{aq|+rM`tk_YI>I&2Q zks?Q4UoqrmmhCRm^ea;c*ZmYa{$tN_hJ zV-QnGArvVg4$$1qYnU>p0vvi+r-2wYutNJ%#f=4>p>>YUZ#U9=UylZv);b**GZnFFS`72A0o;}!Tny{4S~L| zTFrcaG}-m;xugHjuhU%eRH=RKQ;Ri0)#~YfrdDGGVAkD8mJ|j?L+}#3Zp&_9Ymk!z&0DdtVLvzSKCaYf9@UR%~1rl2W7bjv&>b4Z^U$ z#%xGKWqO$pwO7?>HsXiP)!+J(?B;dy^M(_Ri3iY|f$?}_UD20&=*V)9G+Ry=*svN1j84M({ndwWUL}qQabPppf-#uq9R{HwfC-tWB z^FQ})UV&$Ku_kWLd7feWK5R$s{`5{e`Z>5N{_TNYn&Mx=j%OV473X!>|H5)Y$jG8oxga#ow44z09-(dx_)xYc#88^0K zr8ER<`BwgZ>3sduhmrBJUI;`vgDry!E>%*Cm6Jud{^0%KucBX`7I^7#=yW2(S1-jM zVYWYx8ynA^yJ4>xKfV`~_xDT2?*9n;`Ug2p7(IbM!D^Am)iN?|GDJN@~ zI;GdpEY&Eq1^|xvM_Hz;t0YZR5lqBLY7>s`nnHrjZl|)!~vU1tAqsE54(we0Sk!LVHyUmTVwS{017e|O>hQCY+kv~1`}myXqSSV$mAbQGnNlGnUi69umki)r@eSM z8~pT~dyM~OgnHwqxsd2h>kG#w?ou>ge5sp?028}oNmt?Q}1C20@L!7J=Ss=FNL&-pZ$UvR8l?zv$Bm=|Fy;V^Q z&8DK6ZJV;%@;}OZlo+#{>qS#M$E!Cg(A&uS`6dIlTDo?kT%r%Pgm@3}7w)vluT8!L z=i`h3Lg0n*3{?CYu)0CUzcAB&o`sdoQB+M!VTg#cMVi@apZXo7#2!1QymHq|RQ!QB z*YpBER}8L01P^cJGSG2|g2PQ*X%u=6dRgm@XV1JI4~>xwiEp++-Wr&8felgnQj*u^ zCF^lcF(v;7ACbN81GB4MZ3AaYroe$N_F97`I2?c_WjL)+BKF7nL4{|OQadFWon4FK zBi-MPnP-ed0(K_Z-j{u{1r&7MJB8ldRDAb3LHnx2i9rtB&-1U{1#oL=T&^Ipx-pWi zOsY9mhhMI!v6u*s76%WP{pgd^v}0p$x@D5lSx~8vI_O`S>Bhux^Pmbl*T{3sP6?GV zi}EbeL0R#b>hw9r=1OuT0y87)7X%_nuAb_$9;Nm6o%QSONTk9Cc%;GHallKRd0oVX zG*0kb7y62HS;~aU8UCi~vX+nRf4j2MAs6=R zEPZF(4T}Z({$E@Qe)4T7!zCV|jODDpMzU`0Hf84aE`3-(n@23b23MO~-k`ZHLH=r@ z<4Pgey(KQqXDUo^RNeWV)y^xcEVNJJGdg~1aSCQxB7tdN zt6gzxDsPx!xokNVJ&n<+%M3|Z*zTg_dNiS|jDtpS*a-p`l_4TI{d;NzgwoMQbpI{N z-cf+kTNq{2ioFNb%QAn*8p zTHxT0Hw1wZW9;>K#5^D$I{F+4KW(hwk7o7Ms*qeIsqF>tedrH?w~>JlA$O3ppcO%>{6b-r^d>Wl?ukQ9sKNFI1WHubw3 z+04CU$ZLwvpe>=}WFP#T>fLftI&?>bGlJcWoGm|}#I(METyqOD<^2Tze&%qC2q&Kn zWSXDEfd*B|S35Z6gs5TUQHwOwMkyWoqfQhCH!zf3Bt<3ku!2&vJxTBYQ|^Nb8ir@* zLqJ@Km1;YLMolTpx1bbu5eht-H0rfD4157sP-5=(~$mIZId9J&-w4%`VVpty2Lt?Wno_gG3ZLePj;SB zq46oonuOP%He!<4PQ6cu9B_z1;Ms+I|8VmZHO4EIT3v={S^H&Hx$zqRwa+89PlP0I zbX};f6;zuDP!o5w_qxs3CA9Fx7JcztN7^~a*d`ZmRHU7T#%8M{EIp}kyv(X_{fltdjwQ3ky{Y7-7WTjDA88rid`kJR=fYqNzkQE%JBnh!Hi_Pe<}J6dmp z8aX(B*f9W|5bxnR0iH`U#sxWu{6(i(2i&ajPztCV6<#gT6lllmDvU82)^XFWle9yL zpkbuDDp6J1<=ihi=4G^`95_k|uEd?a`rW2TEpBkGeJ}?vlFYIGkiC=_Ey&#zSphNi zaWau(Bz~^2Yxuo$F6n?J$9hbUJ?+hZy~@A7o&-0heTEcfW^Ep0J|46OCS|{RCqIEw zTIvX83S4Vo9*ckiPy25(aR!jy4jT<12C4zL6NC;2_viEGFFe3|2CQgdR z`bj)FcWdl9nqVS4Pt}V18kPB42iz|hrYM^k?8@HeC@lyvcqV!;&W+09&UOj4pCRAP z_p0QKnvoHC-UdTUF3>AkMJg&P6nwNR4%R!>S$XB;#J8&h7>O_gNe(4t0GZ6kHIss8 z0vkYnwV(}pXoLreysJfvELXI6;Z@b=94_m_Ws$se;xVYdGRb^joDLmI%f^xkZq(ba@>zCJTos zGQ2W4ZqbF<%xfHIiQ7{m{qq4yNr}lHkh2vI$Ru|>mywCY`XT6g2rhfwcl;((E{2^wyOD@B7(CIojJ@RAfZ+>3T6b7K4cY1 zxWZ>0q@Hrvn}z@s0q(|#-Csy!5W8sB%HZ2nQNu(Yv|2+9)QpBN-Im4RpNH=!NgXqh zfHDAE(3xMiE>&hv8ZzO8kYh90Uqh`6X zbN})m%{wPMN58I}EJs&@;NdK+b&PC+epj%0lZ9~qYtKsW_6T0$wks#SD*u|-nURQv zpJN`R&FfZ-2^A#2i-{Yx$dx8 zQvk#9U9$y7SKs~AOBO;Y z^niNBe2y_pbL7tvLor0bRn=|Q*3x7Te5!H)b5Ur^F4m%#`jt1$DAUZWqoL)wPMO8~ zP{?FipKWxz>sc4Mu+U4c`HA-aZ27|+k{SGZJP$j{72HQ6=Xw0Qv~25BYM!{fS8aKe zKpytH-Z=`-)Vriu(p{vA8S4rRx|Q&>=t!mW7Ur@uW2@|xg(|a>i>^nR*pI0W+C4)mMr!}9LJpXa7rP`>C%dI zbl69C>Dpp{zDl;p2eP1q$8Wa)>os88oLd9Jx8Z}ZTHCY(Z zH>6MJ5l62xQ(IaoJPWZR(qAU98f7U%w;GMhPPP?tqn9(YPXbRxCuB^p*EJ9r$KZ2A zt;>VFkcRS7LitZoL7WXdk$HcR1R zWvP^=5O_gJ%68iYrG`|TpFWLWOqpZ)!}P9dFo(*AB`wAQi1*1(T@(}q#aui&Dd$e< zy6}w~xCTL}A+)&I{WhZZFQGL5*rJV3@-lc>#&)Lj|Bn(!zeW73a&MgI#5!n5hg@QG zdb8U=jHL~atPEZet79Z4MV_oz^@Xt6c6{8!pskF2N7bW!!22YMs2f?yUe#Cz^Jpkd zJBbwBUZaq4uHgki5!fp4GlO)fZn(+jNJOANHCOY$5>G8N*ir#ZC`XMpIC93hw;Q6e z!-Xpqr%d#>VK1z2eblNrRUM~#o1w5n(CSMJw|}|8i;xEfUwm^FW32CwmSn2I`7)Y* zT@)BP`SWb}@28(x$Jq(xmtZB9fqda2Gje{&Nn(g^vLF@TU-zd9diP2UAvftw@k2hJBufkUXOm*yG~Gd9{g_lZPEq_ zU%9XZg!Pyl-<1~84xc3=h`c&U`7hBzLEP$JKB4s+5&F&};}qQ;x!<`=uCcjRY9ps} zqI63d0f`IEJxveXUud32?`+&-i`=PKI|UD$f$(#YcOBQvs>>tpuWe))Pi9p)#+L?g zulpzOlxx(=HX=|7tdE$$uGXz?4X==m1f!fEzh1Xr`NA@-`R(a=fcmY!xk^yL*wQO& ztsM?Tk|h$1tRca^WOp2V1c$jDfX$SkP9I$ZL(-EZ!}@##vZxI+5A9#NB-%8*l&Axo zeM3D-<{2_Yeno;WdnFQL9@|+cR=D6`+E^D86WHEuECDmRR~{4N#NJ=QajJqZJ-MgRnfTS0 zsDA5?Y%brFP@f&F*VM@H`3Hk!%K~)VciyCe%{-H^kz7Oj`a&7E&FAIsHRvG_<_?mD z+_5i5`)JJ#LQN9Qvs0ty6{Tv*PzsW$kgIEIb<=YlvM=fnxm~xi`Y%IkI8uvoY` zR#Pc0qexE8-OhGgPbQo;_6;sAfBc(37cH_sY%_*3)gqZ8?gP1;HX&uhS>|OXIGYR; z+nc(zq<6^Gy9#~JmnYS)tolv)-FcJlaT8TLJwaq@7^t}-CV*4UCEhh^u`mthjL*M1 zx&FFkSz4raC@z1S%GRuB$L}xl#)-0YCzXCfXbEYA^Rl=-%n0>_>XZra(&x+-o@WZu z>Mi|rhSZdVNqB?rt)Ys@WH(;k(TRe^71s=SWrnRqBWwAxCqK2|y+)CD)L)&zr6Vf$ z*z-3U4W`wLa$jShWXFPAMyH@q><*3$4bJEHt`EQ%Uj-xiN~k0%1_3Auaf2n7X69Sv z-*v=$XC_$Xb1)ZztZ3RNA?nR9Zho45wy?DDz^|||AVgcd;8dlEg$({l6U(OyqLHn} z7<2z%xCH*om-u%xwoEAx{=hV(`mgaX@SxYvV;pzu*oeuOG|92Bkh3Ko(WSj{7Yq`= zCbr^eF>%|@XTCFM^JToi77H>=w$ojcDHC9S3qYq)XDI_Q9%#k$%EOUwF@9?UAoZS7 z+Hl7Q#{77xd|3C2o3*-^n$~@?E)k2mrNOdv3#G)Dr16miAc$4VCnUeq^Y!0UuT#PY=NvTq@nMzF!g#C?g|r7#vzF&XC;j9g8Bs zsZLrcIk-S0^s6_XnG6h=vb~yg^!Y)d_Vb(E#Vk1jp;N_Yq{ z29P{JPvD|CVP?)~Q6>zGg=!5;k2+4&@C?6?Ddi545n?U$ z8%q2zhY>`d8XiwIwD3rZMPOUpmWm7`R=9rl+3PWZ8uWdb#UW^oY(v~EH}J*=C{874_f*SQ>H{Fw^9vsqPu8~}c6~aACh}uSRe0vVB|ns?Z?d*$ z-V_C7_(^2^_1&Lb$Otc5r zifKu#dFu%}!&7fpJDS!i*ydjvDYlzk;~Smd*0e1ds+EqoAl*_EZI$|wvI3oocieM= z-9C(Tzm<3=Fzn^UmM95%gt16%m60nSUD^1(gt5D(DNN&zt_Ofa>mM9RGlo=bTDrjJT0vnB# zJu_=uky`iq$8+ASVbG@vS32e6vVE>zJCiS5IBX6WhLBS?lc6d_2IxVE85Ue3qJ;MX z&s76r2@H7=rbOEPLFX$HCK-vQa&h)Px7-6&)hE^(7ybR@8*wAzPj_xLa8}87Tl%zy zHZnfEuYVth`gKz7%RJ8{_{0!yST8f@o;C6$efU7)#>oLX*)6SboW+b)n)cRzz_g;J z+>nb6nvdoN8=hOyIaZrvR6;?cNlW&#X?<;1$4IS}46ahUfEr8HG>BWt`eeXN$w|0x z`$oj@DzwWaNoH1#|8_x{L05b7%_VZP9XRK$BUoC@X!1dU&)i|?fWj6m5@9)foQlO& z*x8J=IEd$2pIqoHd8fI2>CqXUvcCA1ASJc)+ww`I3Bi;+kpoOkUusEtd{i?(I15@AIYBJPa_0)$3 z*36r{{#$$Atj^UKp;LtSq7=j;<`BF+fS8Bag7q#5n;+Rur3_*UPkXkcjZ7t9F5sVj zb5br=@azNyy#7wn;kQU)MC-dh|E(ANk65YobYcY>E%89qyRu}3?0hoj7QQIr!!fHv z{!--BvN8z(Xey>U#{-DrD_mFy!cL59V+D3?vh?yT!6(u&HG+}6>#l2~-tn9j3*HtV z(y%2{)i#-b6v`!$xcYid=wse%B_>8S!N8C-E_j=5-Dc2F^1Fq7b!N_$I~IoU%f&8a zW8uCA0hi#LyStYTgdYJ5F@>wwzgOj}M}*EURe+Kv&yqVg>=RT(V~v|=7Bug5D%;k()@ z1l;PNV!|9WDmK=MF!YURw32(6SXAKrK|{m}hX<>OtmqeaAZlS?N{3=d-L6cI1>zMUva zRhZv-^S)ra-yKoCUdVwnHtZllH>hS+LS*zs(_Ck! zDWk4Qg=$qRC#xL9a(}ghtAbJttKv(}0Z*Ux_Nk`SQ8O!_nn|BLju0npj!L1yA??yz zoYVu9t(QwJ-)aIG?&>YFYw|mf@ieb;cic+*Z7<`gZC%OhK^a~b^dCt7X$up+5ag2W zY^k>yl1}&^mh^v+a{~Vpyo?;!WySJygV`_v^eyKB@_0pzXQ6jPlQrE*0xY`EKxPB@ zA*raHNV)IONKwQP-1Pib7Mw^1&gApWG$yFT2`7jSGn{C>GC}pMoy3d0yt`h4fY2o zn+O{RHcB?olW2mHm69{H5eOH^lmf87;6X;R-Hb#?c~GUPfC%I*4X?YsZ-L^K($B12 z5M{wzK$CcAXc@;iEuQ8~O=5HA$g>wsa}$TO*+ksTm3od|z+7R%Xhh!8H-tmbuZMdy zD|;SX=GNElJ4$<;^}4ZBopt)I(bgjT;#YCE8pU>tk8%?|48B%1S5&D4{!s=0K)gQt z8LbH#=;-s&PI=C?*o7Fw=m2Pff<>EcG$x=aIO+bNWlg$0H4+?^1jTFxl7ub-nJ7Rm zE)n=c$7Lxmtjre87H{4e&bqpd*A0@D$Gz$_3&XTFaP{49@z8dRqx&8`~F6*0EemCgoL;4sRBJ*>k$mwMX znG#9>KG#9qJO}%0{wmH_)!n=XcE$Ss;XOP|4fZpNzmqU7gEOSh7k-W>JK7f*=TDuOJAGJ=-P` z5jzM)Y3;4Gt2<&PR_#sgRaG@Rw6$y3R-JayMN5YcU;4b?_dU=1e9!w`f8~!m$8jIY z@4l}4JkQ?<2ds~xvyCJ)h+W^cLA!_OTY4O$rYA$LeP2zu{W`__XS>JSBUOkKH02#L zMr_E!-Gl24H|mMUDHbmgmDURo70?5OsAM3?U!L}3O;XW+0{)_UvUN3GY9}EJD^>-2 zB{m$O?YQpUk{_eKn48oX^GHK(s^w88hd~LZr)W(#yM@80oU>FTNV5Atd9Q6>83~WS z`G>)ONvFiV*qLE<)MxwWk;m=&zmGh(Cu%dOd@u|20k>_!ZBcq;#=tCnL0V&YR12CT z>^yUJtK2Q}qr(oMd+c%BtM*8@&jPDcMPSw3zO|4(?CnMlkeRdbXFmJod+IU1$O;Zc z4~@PDJ;QhTMLSvw^Ty0jhXUP+vm37-`Tu@*+H6YZg^wC4{p4hGzsb5p==0oP8xbQf zEl!tT`=Rl++we=9ccFQ&1|SryYdK%))K@v+&!2%V&%r9S^OTooj_8%qZTz>&*6V*A zyY9kO)F*0xgYCf%D0hPOw`I)LAS@4>ZQ#9$Bt4tg_n3FBXy%~2>e2=#Q04B^=mGe^yGwB}cQGMo&gV3HSEo zzvMbu*8I=5OaIZ9J3j*eMbgdZBhFip6NoRgnaT(Fpc1+1k#;hIrw%x=e(x?4#K(MT zBC`<69AYyC80zIeLP48qO&R{It{fn(YQ8q(?$eG0ZTO_u4eirTVZ+zkPCDx3@qen6 zha3zayq=t}Z0siTcK2fm2oS5MUEGy+u5z_1`P{9S#Uq?>L$25hC2d2yo1F{-R2qKv ze$U91?VMiv~?L9xtiPdBerW*vs`&zF2ZBWr%P; zfghiP4lNfKFIulu8`cYLb4+=B8hm4HI4YaRMC-lUMVQl?vGs1n2n`Q^cnW0^RTTdE z;+uqJsOU+xWZf^Qzg9hI)(L+VANd5VK#-B6O0$}_96U%4oo7~e*5J>=k?My^DH=z= zSllFP1LS_ZVyr%;18(92Eh`oPkc;$6Kr#(MWuZ|5>gfGv%!g-YKI-xLeD{at5%R|N zpG@@fEqdyeYfbg>dh(yi^m!9GTaB7lWB*FK z>R5H6z1PW9X`wx#W;VI{%I;f&`M0V+4aRag1}B_8%R88+0vMrtSHsJLyb}*5vVH`5 z?x=F2R+#927|y$Tqr|q%EniCTMNMqQ06Xy}rG$?6#bxFWZ7Nbi*w}Wzob#`3&he-w zo{$dS^JU@m@bnGWQnm8|erW0or1k?vhR7w{@@zK>+=mT*44d|v^^n7cCwk-4*hFPZ zi29eU>?g9U2l(I)0@j`4C#01JRMf{z<&~Vgn~OU}J1rR`Lb*cIN1IG;$;FN8kUwVs zIoSVKuueBJEi}`ZM!~$E%L#GL)PMF6+bWJt$J6@I+%>Upg6}(F0Dw!J@Z9RtT8KgU znd0qw5(`UyOhiRvk1l-qwLn)@SjHU%(tfhhWB^Hc$XKc3F1m$M#XPzueVVOBVl$r) z#^jY-iYK*$dbcrUDvU5yWp%yY>b2g!a8Ld&{j{sx+4E;!nO-;t?i3%v6Mp7VUm(x9 zHvEw|)0llh!s~6f-`VYJoflBa`d&eo+CCNhOx(mV{C?6+J^JIf@39kuYKkxUMjD4T z2(!iA6iMaed!X(?T1e~{$bkMhP_M@hCTHAE9UJHc^bEhRIzFfoHwzO`5B7otVx~2T z1f4le)LBiqfY%9weVGO@j0B(;_;a*#$7Vng%d@WI(CU}ZduW?36d!;)Bn~C6KAjy* ztd6<>L8)?6KeOS0fs%0O{iJG6ctbr#E&HC-^x53r2Gb;jIU+gMot&8)>~JZDuIL}A z)qzR$;r@E%sji3+Z%rN>OWPF(&Krc+yaT%SiZ7OmrdG%Ln5M4g5}X6=@%d-r0;ge9 z-R8|rx)|TP5*{D7ob)9u0V~MPGnTdq9N`6%w&rgR^&XF1`2OV8`MfhHVx?3U!Xi!C zWKtDh7t~3SYBh|8o-Ed;XPXM0FBXjUi}Co3kgmB~oz2!m6LYWj9>TR{`x#n^A^_*e z>NiT*%H$*xlO=v?HL|b>Xj?7!u^6A{iA|`wSDMenb!%hSZdJ*^!sqX&;Y5y;I=^x~N00E$Zee?N# zUaj40VCS}o7;FA0)zhinvwg>)J`ORB0M@7$t^hOYYWF00P_yBTp zWbAmgEndG%#p1k_BEAh32B>qRz;_)wD|Fps($cRtWo10mA8Lxq{*zGuG`NVeQk$VA z>P%K-TogxVF3ea%=Dd))ZAxU$*$T^y(2(T%xO?rMv&L5x21h$GAKHo)t@a_q3S1@I zaBwH;fy7u1i({~+X@Av$o;1pS{*;ZJwp$@B z$moMM!wG!`vEWPlc%ggby3yUEAHP;)=hFn5gXeEcjadesQe*)r_5j>RIoUi|hym`x zi3T`-_eP8_n>Ua94;Y)Nbaa63_CvkeU`Y`K+B0nAUg74Qh+?CKpg4|VNg@_g1f_-v z*>WRxoN;5d%9R&>y(=+*h-i@`GEZm=v?)tzImM;6Y42s9xzB}?D7d)52{yHiM=Z%s zQk*70&<3OaSa4!0>Vym5+oRi3Q~y)-5KKt{fW5~p9Bv)c+P#?Y0v9BI241R4hCb2< z0cw=yb8gyI0zeuW`PfyT1~i{d;j>|#^Zsqzd*UG;RN03ljMtAc*LA75GV(esCq+CXb_bA!43*gUgtIeYHPz1xN|x**uUm#^@F}}d zZP!?Y{{Wy@fm~Pf)Z`PQW?9|NIV~>CjO1ZVJJ{lpLbjvsv4<$m3SYkE=mz$numQJM zAzYq2tSdi6mEB}tp1mzuHN@tiY(JxX*EKq4TWAo!^149qhTF)6Cch~6&jPol0Jb&Z zhf}Ate-0=;c_%S%)>%Lp`BsU{_EnVfwM|Z|J}8ssH!^6+&Eu2cTE{NcXGgP($KHNU z5OMdV_;I$#0-Qw~WkHy610EPPH`vW=U~tw};pH{yyV8LJ?O6f0PO^USH!p8@4RoH-3)liNa|*IK{f>^Lt70w@0t*KBL_b?4@O={&=(%~6V6ivzYUZc!QI2j7 zVhjDh_v8NWeePeu`qLl4UL9jGKZZV2o-$%yxQVqeM;&*BLBCnhkR`3rSpvowURhP z;(E}jvLD^N z`HB13*_bnvAkj6Rf9_H7Z^tDMlgq3zGhu1DnyJAtEw|oxghU+_8OlsNyYOeDL%aCt zAL{fzLpVJzXVYu*uQOaW4MTT7l&i81QJuk3`Na>~o0nSo^SC+R4utzEIn8DkWCuwc z1Y4@3{964#K5T6`!y%Tu)>`WZ?cI2Xx0j{_ZSl#7<+iswrg93Vb4+w_9=MNF%|cFK z`%(?9PDfV5G}u|SAWm;hI#wxM`+O2sSn!KF zIl&y<#meaF%AUM;f*UbT%Bm}G`l?7< z&cLJkwJWrcQy`2x0JN5@-S8+gCLRc4SEYi1w$xZ~CN(n?B9RngaWj!}kl+5q!}F`z zO1TerSoLV>(}wS^=_w!PTxP%hQLlNChB{GZTq&HNFP8qS=~&;&1F!zrPYK$rPK(FA z^6z&C$X_f8)?f@A!_gr2C(~z{&-n&FNx=I{Y}nVY0`oVYzb#KrbJ}ZY*iiaoJtC4@ zV8Ta^6OWD0vK&F(W0OYTQ%3x$mF}f#$n<8&HkTG0sz|3MvqzzkXa>fOy|*uh{?ovN zXTvN^UZ<9QH33m4zwW(p!Uo;Udu#Ampik7A$}FUvB2?>esg=dYD}*n|X4YDjyriTe zx2ZcNvfzpHZNL45@0IkqWRIXr3oE(?gcOTG*@=VCpdIC7`^`v%RApn!zzd_?rIBvjE zD22d-?pZR0I6d-})%d{fQ=AeK7oYb(es!svQb+Vy_Z9kH`&C&U3doS1R@&oGXmssT z+e(mMQ6)yUw%(7u*TQT*3G>!v!xjb4JJi3vs#_`IGf{eQuhdRG0~Z>n7QL*Ua!E{#R{`8HQ6gd%f%!VoeRqA9M!L+pwC$h?SD^PNI%t4p$=Es zd4Ny9ojkdeJdoIb{1(T@vnR3&+=u>rzoA*&rPDu`WZcwrxAN5HTlj9dPbzNMZX7*4 z^v$slKk31tzyO@5LYY1-s@&!owaUBpv{wIQG6QA%=F9KgBpZf0G!i>~3SQ-DWAa`6-J3aQc|WtLIG=t4c^5ElAol-uWgB zNWo-_qedJ6GEaF4JOS7-)(+b4!yC9ui}#ETjk_f*#RIZjsWAcqSa$Z{RZ9|EvW|-NmjfX4^+qjP4iWyn!8)&Iq{Qr z-e#?_vtt39YpQ+sEsy@bse@n0do+15%IN6uFGryw_J4erGXOE$a*j-MYF@9YbTehF z&$}6c6=sv9dv;V24><`0_gQi;t`ELvrEXbctFiQ*>)q=J19j0WVHC`Z zB|o9EliTJl#o7xX0 z=@7;TjsUt5i=;nGnE90!4b1IT-Q;R+7J_rUQgaN7d_TMX_c>Jcl37^15)`>at!kvU z++NJ{kz^03NgSLc>&@aR?jb9& z3#&e<8!Bq0JjIX4mSZbsqnxK-t3W+QNP-f^i=xzA+HP)o|NgjvN&Ny?OI zeDTMh{}g(fTr)gsCu3t5SZlvWu%Zl^R}eD8E$S*&ir=0Hb53kFl6K&YKa^X4u_4&W z{z)zD&R3~}_n7;PsI4a|ZkKPJ-6;U8 zu*Vy!uwO{HQ4l9L-P22nM2Mqby{QJpNeTlIl*Dr}!?;-K@{iD29_3_o3v#83%^fVy z81wACFeh&8vf_w%p*;Hxf^yc|NkTo-9l}3W#h!m17#JLI9o;xHv#0tMHs{It9+~k# zf0~%0G=BDPXZ0B!{wIHIlCGKkH{s2{iq*Z28B>^N;b45sa*95v)DvMvx06?OfF3_a zlM$+oogm7XF)LQPT_ZdK<}E4$|DeyF=cx$gq55pGi3G}WkxpAlfKjI@@z+IMbVt+u zxMK4(F&8-6Dd-98%9 z)zWL@mMhDM&n5PkDS)``5>GC;M*oCgl9OaMo)i2m2NL}R@%S%DXm|F#WMIYhK%j4nGIJ@mE?dND@0oc0Pi;p z)_{9ZYsy4D z55U2DSNLHV)>&|Ia#Qc5our7^Ry z{}RJ3_*R6wUA=I#2}zXgIf@c90v`0HT@WIR1fB_^k4gPDg~pT0GICy7M$ViI=y-p9 zZ>xH=qxH;VMVlSRD~W?i?S+LR3Nuck)dfDw95?ycrA5UCbAsYI7;!`OM2Q%2&kd0~ zr-+^>3$%>Fara!YzEdlVB{rjrg&lg{EBAY5q6G^1hdA|DFI^Zxs8XG? zD%9wiRAg5b3*ChoYsk2pC!rqb89tjcb#|*6ZGLg%=&PbyQB8zkYn(T@CxfvZ{Qn!q zs#e9cZM|VJSIldPO|BWCMNlfUSXFG%$2CFhLYrw5M3H}VIo;)!{J z-QLm4`higApO^N<{OWpT(bt{oB}VcPhqiugk>E`J?0rrCj|*N}1@^=2rzoka6UskO)n?G@ zN_keFNr6%k;fMIXQl0eAgJQ>LM^Bpnow#Xo+(LP8HXUFoeN9o{`}GYJnAAIL0%6S- zbPrhOOW>0wK{ztP9rXs|;fOO)Mdm7}&v3*PF_iO_S(VR>6`JNrIIPft^&K;B1}qE~ zGIKLWZe8`aOwSgB3D%R=U0Gg>=xr36{IquM27 zbq8a!^xW}lNmO;dTHvp>qv!87>IcWKTf5;uw*BJIW2SWGp*+ul>_~u15NqjV4wn}o zlkU3!vRSkV&+T4_aaQf!bF6PA^`;ownbx6^nFZeKYQ|z8|&fJiU-%E%~-d zw)(*(+e=BrfN^Iv!O4YrYumW^vGFj@gMHy=!S5GhuUJrY(IIvAPk9kSxU@9KYk}7j zOG2;*HUW7S*B*^XO1mfi7&@*{R9=&;<(_!4C;LVRaQjw_Lq7|x9y=w-N4Cx4NMliW zGL}lKkRntKKYkP)4&bgi2i9GzNg+fT>nB1&_`;XL#` z^_H^H=tc4DJ2$kVL&FdN^r~;7YnOg0mLV?<9$Wl!{ul3~%r^at;g9}?du~7Z zi)^r9lHt6Opl9Q85r`J00W|z+VhGME!6E_FRf}Bx0fBn4wGCVp;b&nh+zq({%rKE1B?4s=8_R62{`Da!{hbl|_4o?S)AE^mENIy0gU(u1Y1@`&h z`g8wwIgLk556wk$J1!@S$i!`PKju`QZ$!xo{YV|8CWeabu89FK0HO*2mLaFGUL(#t z&+ls!N`=o4uQ^{+xG^u0rnOg6?CLHdS$&WTC5v# zSU{bTj6}f!1z;|0=ffsu+g0&>bX2M1!rRN>mLlkjKS!0u(#(#bp6Zf!ngh@d2IXAW zQ?FdA@Bta)V|%klfL;}^Tug?)Kz%dMA9uacfm(GrnHH&yc9GU{gZp1z6=8YMZm4*> zxLSKakr}VXVSD^Cla%mUwV2YbgesT_H0u)L#{AAED0_cfh({jS!D{=D-e0%hec|64 zhJVIX+n9-ET|e60YcT}?si92OkrARqAbgg&y-`D-uz4kTO zK!u^sPZI&Dw3=EJBCis_KbJrpr~=a_3J3r}XEhRr97<;5C^Rq)KC0i0(VXM#Oi!KCRR(^beAyert0 z92VP2abpZRKd(`!Y*5Z1%w@5pA?KP1brnapl?Ji@Uy;{8$Q7Ms&R8Fq&2rgT4#fND z&z`qBBjBJ!{%}_>_Ib7+uDi?`P|P5@E93NOR^|;UD(ty;1lb&=rCmPBt8EGc)e^w+ z%Xg=#s8m^=Q76XL=Y?jO7mdV|`8mX^Bm?8ny#=3;W_iF@Vbkx6&~J?$V5dffvelmc zj&R*JSjdvmlFjYWqc-wUDsZ+MtSwCp0B-ueNWmKUBpE(!nwp=LjO^utA`*L6DvInbMkQe|(A*C8RM?CF5f(}h zcQab;x!HN?X|KsrkWWzY16A{YODg9N5=We}Pqb9(h#X0N{_yt`;RAqEHVzI%^8iA< zj(bjt%mZ*{I1cw7pn`S@_?UH#Moie)M?%xG0P+ z^6lE&R}7S`pdj3+EhQ%4UA9WJR7g4sa+Y)k z5p%lI@cf2|0BR=Ds;RBG^w!p&M;iJ9g_vh!sJlnpm0xxQ6dcFJe}CP6HeVq6+*6I1 zZx9&Cmeb_ZoFvL0Sv4fI?ruCFy&df9;R}HZ3u?^R+jCpc_}9RZPP8gtD|ULYZHN$b$~jtQ(<`q&s$sWOGlv4rT(fGw;}!KkA6Hq$K!_n zZ(TU%`S{<~KgjtC6RU)y$_t`G0o@r~~f+*WM-uPrj^Jj!pxI>70RY z8iT0kwD5`6{51z7y(3&Y=gh}%@e6!B5s@)7Vbs^Upbw;lK@4I!gYwrltWsN@jNBa+ z$lF}YE;lzhb*hj)Hu*X-{Fz1Snt{4^?pE=t*>3RN-qz&oP*!TQvV8CX0_Xutp3?v9 z)z}6YDh^`2xhZ3oS5ef<*TtFSUnEY_j-?TO*2@e`?>iTEvK8>M3Ha;%#BR~a9J^({ zh}c}PQZcnQU8bej79ez7rgo%(DH?IaN>hcQI`~YHM&3XlD9@lV-HIm^B_b_z|LE`B z8-?F2KOetkeqXerM8>=`dd^{MlUvVQ08-7psIFk zWssMcwCK9#W(1z;oaY6(tXWy5drbc>3sHS$#m=6^T+-ZDpy^_@XTb6mSGGc5aeplrimnMR;luJb+ zAazz0#vMKaarer)%gH=W}*eI#j z$!5ep&Gy&X8)>yuzyGx@@x5G2xjVGf*ZH?QGaPPbP%BkAIFsG zOY1#Hw$TkOp-P^-uX(euL5Xa~HF{Uwu`AhNfW5~%jp1Vx zTz}vGe4O4sAcOsCF0PMP?>lf{Wmiy7%jV5U=p6*mTiyE<9&kz@K4phF0lIQnaSp#> zt*;l!NE;3cuAvyfky99pkhY~A`p}P4erM{o= zoEsZq#X?P4;C{ghI<25Jd138ofDGy`u#hV1lzA!T2iAjMhAsb99|u)b6T95Qs4fR9 zB$Gx(oSRLAozHd^u)^cPV_;tPR3J3tLyID+ z!!}Vc^9acCXsRom_WX$M^~kie6CX>8r)AQt>jIZDt$N3Ibg$B zru%lL_hdXqw2m|Bxw?E^P-_RbFDpnhKU`?`?!Mo|5qrYB#|iUwYA>iaDF{mIdV z(H=l3+1N`!oHqHu0|YXGaL;3)0kXaAj%@Msa-bGJU}WB+*0sIQ_=9)+_5J+Ih+RAjnd9v>b~$tLxCUX#DNUO#*QweNSs)SjO*#pCG(@pD+lLK zYsDPvnmLZHEsT{dm=#Dc^%(10H{~22FH}9Z;RA+l0zI~JfhBtM!!+}mfUikoF4S2~ zNTi;c{)9NHFKoTyS5ED&CP~YG)Hb$bAvjy3Ws1DYH5*0N9kcThS zje-o2E4P#jLLGjOe_i?--tu1g;ZuigX78l@f6cqfHJK{bC=0uk^Oh|c0p>&>`jG94 zB8eIL(04*^i)m;m0>~)y+c5S_BuOhNW zvUCD}y0}Y1w<#p^_eDu+el}$0TCJ&kzDi}F7EhdvSomop`Sp_!3@82pi;@Vi4(YDE z&UM03c!}-hMx7|1Ok{d(RF|Utho*4P` znU6~>q|Ts0RzqnN%iSgjj^E|;hbZUhi9lG!u-;ac{n2Eh$@uRZ!Dz!PPs-!pCYBqH z*I>Orw|nG|xHFTtym>SqY|~6PXa+0jqKs{Gfw57-yKA4Nlnrpfb;k8J-UHvBN2Unl zoSH^cw25=uYZDN(@X!f2?HlvmL-mFjO0cF%+N+%6v~$YdOA-t&-jfbI^VyaoqL%e` zyEoWC&CYa^ECm7SNVn7?3Ci&!%8LPR9(Er#3UF$;;8}?prCVV>(~GYoYj$=5$yz3M z^Nfe8Mx(9Iu}aocIx@Vk19foLFER(NP^yc81K=Tf50=Kv#Vqd?yEM*>vwsop7azpo~zXZM4ecEt@6L7FyfaU! zJX4d=Snz4+yXU<9d*pvrO*8+xe?1ZxGE-7$PqZsOMj$7f1#0?i=kd>r5&t=ooRRbA z$gksPUbswM#w{z1Pd{@{zc5XG3g@K7Xl7s_;xzuf29NW7BceVc(&=o;c!;}*iTVtY z3ur_u2FY=Z>#{H+z2z58mJosZJkwKqxa=>{F>*eN!K4>J|*H9a3)>=j*V#tBH~zg z;G{H=++aLcCa@v=%3b-+SDw^W$8h78E)Iz)7OakC0U<}5N3Tle$j?pMFF zQ_fj*GDsEHHs*CUz6E~&$o-*br=VRXtjf>tLbzdScc+50fJ%9k?#HHdorQ(@w+CPT zEOZ<{dUo`&q+V_R;z{q>G5n~EILWydj*wxL)83j=M8Z?I za}$6gv^s)Sd`JAuS*zotrG7L*n2T%jA){;eGM&dI6&tE@_MFD^i{GE{=q$RNPJiXA zZ0a2e=W%_9M6SmB$KpXAocyb_eU)vK3K8Xa%X;TQJ`G@6dcMPm^tpp)N4Kn=K3LOI zdVN%O@`zl};3ygn=m}!?XGgc;q4?&z*;?5xRUE_*EP7;FEW0r)PXdu|dxQ)HISOx# zU1U3jTeq>fP(VTkph1N_va=2CS@~Aue)12R`irK^r^f3PLpFXIM6{?kFHIqDH)Rnn zrJ1JMSHyqJyvsvdZ$3z2Omgm9@oPcGGH&_#`Is#lX3?wR2eKM8Hlu6LE`E4;^!w;n zw|N2aVQ|HN4!!*R*wY5&rWcHxf8CKN^=2W&r@&+I8+)&6=G_Hqql5Mkxg43g1 zlciTeeKdb8Igas6+s5`fUboj8US;I$EUKh|K!n+z-2uk4SEyK4(adStG>v*7d3-2~oC@vxF2w z>yw@(!(=bti6krNqwMtc1!p{(G%9lOLN1Od%`b~J^Pk(3F6L`*UE|2pgS8`9!zv6g zP@MFSdP|1=ly-#|v3#nOpN-_VaAeh4Ep0y2wH@yCRxK~o6#GN7d<)gM$` z;8}IQ9H%)1VX$#aKZT5|z7#U~g2$4p$t;|&24wCqP3!=neojro9Y7Q})@bb0Vu_+p zb-!vjrt!923tEr`V4NezmBT_MJ7MY}uCBQQ?oPW7>Ir;z;wZf$QcP`t>VtmtrijJK zK-1ehBX0_~+X=_T>xXl3a!-zQ0ORuIV%2wxHzfWOW6Xc-zpj4;tCgN(l=U^!3HoOZk=MQ^pa#8d5;;C#-+)(IZl!WIUmJKu6@5$fB>?d4yF|?)H3c_4t_T z(dU+Jk!5x9nFgMH7Jw`iN?$d_BG{zEd2}^t%(ggKS=y+h$J-h)*legxw&#Q+fml90 zf0~6@c@S*NUncyN~XAaBQogJ%9aX@ZMy0 zC+X#jpAJzdABv`C>(XNQ?b0TS6P3FCOQdx0oh)J6#a1Ej605r0l`Q93x7swFvD>11 zH{_g~j*h}ndOZ?+RVC*xwWVvE#w0k6c(;l3r-t6c+|PMFAP3LohDm79UB?J=+E8fG zWex25ko2zl{t$@fky(*21cMhQeJH&V5bE-E=;pYnR=veHA^s2V&cS5z#8+cRG|%ox6GWtr4pRo4y01zxr(UH} zKSSqmVSS3SF`|{X|7XGAk?8=DwfVSOaH6T@<2+H>zi;OYqYPi_!`aN= zd-Oe1@eCmJSye+JD2>O--gJ?%z@#h6s3B3K1Vv%nmj}c2h@+3C!to{SW+)$BW>6*o zB4Y%R(`nc1s&blO;=n{0YjI)rvu-uSXQgHc@mWI3iIVO(th9il1&@R* zOcKHgq?rJFz%1bYJ6Je^EYG!VmXuRKm#NM-F`RCK2_;Y_JdT(C&SD4^`*=M2`zV-M z>@(MI9h|--yK#3D?$K1FPva?2fBte3FT~(d?&cl78(6D{u~73@_vL&; zZjIgK`$pfrch?wDxGC69&oz5Bwy=F7v$hen|B&e%p49l#L9Nb&c}KTlsD!5i3IH`v zVcYyE#e~yhx#QjA*lj(R(>XrU+ukZw@YoS&GV%DD)Y#X0IR2D4Qvi6hS zE|G`@+k=uVU4_&$;)m(XUO|VT;?$08E$K(dy^%g+objff{!I+Ze~k4MFCspejVgBn zLqQ6aQ;uSp#J|1g&RbD#SMIaCdR_dtpGtT;Gd zIuLx38sY3@|3~Zu_hSb+{OXJpmXIKz0Y3yy0YjSicpY2V0X~#pQ4z3(7f59*0CZ$)6MTYVJJN z<%TMix4RF?INsuRZ}tgyXI5=;lbzt6Iy_9zNJRt&D{)QNW?SW4y?@BpXZxY2xIbIdh)QiwUoy@yhq zc}V#;OY^T6#LxchcPK-52&vl=?x4$#jus8v$>5VBj_N&xS&k}=zBK$MAk!-PmS)fR z#(IP>`*=8kU3ZMCA*@jp+;3tZgBs>kHGc{uussHGX`D9Zi3Jx?v$D%!EVh-9A)(Y! z1`wzrEdXg95_c(n;+X`=rqSfwDRT8~g}@Z(BegXCHrQp}Y##LXJHuJS$#?$?c7OT+ z5byt1G5jaqn4kVZ?k5+sEq9VQtzwo}o{Spli?BMAtuA83U3&#DSB2uJ=;~tuF#G9X zO{nE4!Ku=DTrf@tMOM1OL!e^uBc;A**NnhElqj+XUt_<+o{duW?Ph(CmD7*MqQgnF z)$Qc3=L@MAQ^l-UE_uWJE1Yp7D@8ZFU(meYSiEM za1ed-=8|ucE#Zski~By;kB&4%rp!~)0a!Kw9F_uAKCJ^Nj|um-Wh6gjvHd_{)pOChRh-zvFx6=E6#CuJE#hy zlx4yhXR)B+N!xD?jr1UW+|5u3j#Z1iTq@#San%?6>UoBE3ik1NLY;xBJ@Yo0>-SbK zh(zQE8Brp9`SlF!iKgl~V2*LFB-W?nzpp$sF{UN6M*Mn}09Vx0p)f&V6LswL&;+@^@0u`7m&sTvGFwVwuonXa$P?ts6*q?VL-J`I|FV z6)kzsg7atW8f&bFhZ!I2%l@r+f_M{eeVP}o^TtqThGvAoCN!+hX>IA~=x@dx@FlEA z0${hRAtwk~d7}BWuO}VtF0tyfNpY^lFAcFF6w}(4&p3csfyWB#DXz$|=wYgMFBa!L zCHG+BrebHGUuOnquYpbX%y!)Aw(BWsjF$J|jWI#%6H6Z(zym8E6x?6jdXUkzJRR5T z@B$^6+UP^z9cQ6v5QVOt6t zFqUt>w=d<9K?|De60K|N&;vOfHabhDc2UTjQP+Du&5=g8KHQ%ENn$6c@ok2zqEsqJv+WF z9Ft>`-{k`_er8^n2PV_p7dQ&*82iY~nHj7MR|RJgGE_urBxlfV z!gvBpa`ahb8dEDHYn?bR_OkNGZ4)JA1gP}sI`Y{J514!>z_QCO2uUyld z9@s9W@JC!-v=a|(n};Q;s+}&(LE(PCia+Ua@S)prC|Iv6zpYP2@I-QEZh(kx-OHZ_ zgwssZ|G<{GOyTd!`LjFM8m+8%W zY_2suC@{G8V8rZoE@y>8d-i*}PyNrWm{j@qipj%;UD0wD?C%3&>wc+xL9-}fsm5zw z5!&!<79)-FOeO>JK0T=bwcB3a3Tw4EqgB0fOIp2`%+eRfwTuCHdxDKQ)?@2g$Ueg` zYQh~DN>(}JHfyf*m!EMi8i)2iimax~3g4i%2cJ{>F=0XXg8DNu&A)=S;n7eLvUkZi zbw@CLEwe{2eLdXf521MWyjod_?(b!1coq|Myycg&l>Sef+<)}t!Zw)|t08eJ&L$m` z=0DOJk~WhSD~9E6b*15}6neWm?p?=1C-GmuxRc!>nNJtU{(Y>lTn#QUjkM$z)9>9> zE|A&|wW>t?wNtVBSuO-AXll--sAXg)&nxiD%kY;}wCcIFol`jm zsi%4v3Ulozp29Q0)Wyb%vZS+)^QY%E>J>8d4D=qhS7vJexO?X~Z}CHrZ8A@M;#2~tU%3O3_X3+Ne&7uz3ZJMQ zoDBNWy|I|&!PyHun6vx2706lK{5a^Dnds-4hr7vRkXN#nGSXA6F4gXaTFpn>9|NiX z7hmrkm2~|64FfJzRB(bTRNM>qEYire$XF(EWSP{rv9V`Q8ubz&ZTK;k-WA^?qO1YqWFo{|R&ni1oRBAOFMcJM$^I zSly2n7ykz4|1m|!6^Uc~IHX$ZxmWy_Qab=X*Hckc=d^r_Xs-@yg|1xM)qo~~IPF3Cg$$|uGUV9W8EsiWeq&!^?tWxv_0kZJf* zk>b9|`(IQtPdWNG)hJz!sDQ5qkXE!x1#T)xvt>L>uD?{f?!`pkR*HLHrOl`gRQ9E; zjQ_Oa|5xSOMHy8t9#3QnNJD1&GyKq%L-UmpC%Kl}2eoT_$qdNZ3_7Yc3`N?o$s-yO z^6-N`s>J<&W z3)}FIWD_!T^S+;Y%LvNY&&m4lH>950 z8JQ!!{8PnH@fs>?A{!0s7DtyqT0f>wfL^yjNlRW$8Csq?o~@B;&6lsQcF}Hk4oQnGAy;N4W}^UQFIHagV^v;Hg!5OXkW`PRvlYmx1_wMk z-&$<*z@S_#|MjeBHHiJ#%Dcv|FFcROu4$w!r_H%u&NY%asvhd4d^7YU()Y&>pI_AA zqtpMmj`j1X>5<4yzT$yV=D_s!0u?#KHeBKo3}a*sn|2!JPNe{tmC;W?ESYDRXHwV_ zO|TrBPL?T}Om&KRq_Q*T!pz;jqdmoLT6mCY@lOTRl5XovK2rLDxcZ&&aYJzA41GDS zbSvV5<>AYSkS8Hm>rz+mWtbgjuQn)*blelj_xMn>x>=&}+Irphi?K%V9r|B$a+oyF zj+WKpWLgK8RjpIo{1S$Vk=M<`sR?s$`(5bgh!;kgE@)N{poR^RXDvpUZ;#EBz^u9v zuf;?A^YSM1pN<&E=YE~Fj|hm@LG9HAJ1qonp0ZSR@)vF{M{1vl@vKDMQHqyrlO3=2 zG-8tox^8Q>=y}3cx6XD|ot?jcen9oR{yhH!{nw*TwF- zRSr#(O3mA_A8+Aw>R28cj>2uCG@ODyk6kf4zrrCp?^m-b8LpXIeV1P?2)7w`R!T|j z%mPBR#%VUj=$e+usr(kL4|+v;+y3om)$q? znXe)AKZ=Ye=f~8L?J_%HdOU+ohL0^bHBWc=Al%l13$AP9;f@SL>WX^Xg<(j#{kDPu z*N3Fv1*h*+a##7-QmvW?>Gx#k<3mbZRE{ZyT|3d&XMzr8?rg=3%hstb9{B5uf+hS* z!lX*sR&l45*Ua^DmiR@>y%oUd#N^5k2+l---GMa}_6M zabMASP}uGxWl6FeO?zp{4AJPC^Lh-aeOJGQUiscKl=M2^5doSGaofdSBl+F9%M zUj+cBCvgIrtoOw)+T#^_3&60>`Ox2!Vvg;d1DW>}ZV$D_ zl!4NkZhDpn5R=0u2RVcR!!6A6pfdTfbDl4aY|M%2ab+GDjapBq$n0|#jeXD8PJ{1; zoC@U>Ea~jWikU~A?zCnV{GP`=b@YYdiR9>3*&w;ka3MLq$?lh|ewTXF=Gm6L%cuvJ zU0@2Fs{Gf%Z~MO8FOLs@ZY2ynZhoBq1+g-boOY+~e~jn;LC%fNfZP>4k@I4RLry@z zYRIR0-f#par0zkYy|ka{1LZg%=NS(iYq73}dObwbi$?Zm2GxcWsR4#}$GLrT@d|(v zCMf{+F5y|0!!O~Y?NB~A0oE3Ca^F)JT%t~Mu2uPRxV~fCZOj|+TT&59F{o%+_r}#h zT4xmMyG!~$4%ScFsvQ44>;5{aNr3O^Yn=(@!IY!&gYv$#8a>oSi_4DqSiOD3ck zGsy77Q+ELHDmoI3(+ryxIIXn9Z#Blro$NS-UK)UJ#S|_u_aq0CBlY(`wQ#6fm1k|R zxM!_lP}?^5k{uhxh;UnrTUjKJ+_AOv51s%Ii4ydQQ3ideLa3 zgnZp@!AtrZ17EtLTX&#C&jf;A|AghcwV6uQYz$ zV^8fKlZGAXVibGw!jY$}~w2U!)>T z0CI&&co6QAM*$C$&nIQ<%X&SqfMCYUNJ_GF2+|u^d>4Ew0?ZBxS$XsPf>$X2K3=3Z zs*X13KB&z7s>l`ccq)C%QTUUYvXIgXQK~av;esC`!Np|lxyg{@HD{_qv!CdO$Z=cT zV5P&HmEDa+%fO+OFK>S)eTfdg1@+nU)=h>2nQI#${ldzeSp)51cyZ^;Rv6wN$?(kX zpMPY}e)`Cy()jZ1jiUrl-i6Omqg4<2e7je84wT#@xG~DCGDl%cd)L0?efXVc0;zg2 zvp6;{bRHF#b27ww)Fsm4^H;O)UG%EgBQK{1_h8{zIAzT8N^FH8F#t2=4mm&!EQ-OwB`YIeb<4-EwC0z<{_L&)<5%}E93XS!I1^#GvJ_^Inx3tC=gUBfPD3WgrEn{eWkVuh;HA+C9Y{ zUwmup=U06B!mF!ewJic$j@#O-4WRKkl@C4NR7S-Kb{6X8QWUgXA%dkhU+54~(&8&_fAky@O6a>= z41U0I?5~7(e(w|m)_%RD)8E2QHT}0r$Eb3_ycYm~xlzlPK~~mnv9+&rBh4=GhbvoU z8(mKn;`U*Ax8?6i0wR&PkbVq*e?Cgmv}@E@t#O!X+QWtOYG-*2V?p?Sb7WegMfb^u zyJ-CR5jDh(=lUJzV|;Gfs`);$H!eTX8+|_P3fJ?OAxfXEDop+sO)Q3IC~~W|@_&$j zH<#1&wJFIeOG3o|C0b#?x}c_v4QubumrB4yNg!Jb9h+NXZam6{-#GJDL|)2!vA-~% zb3gqF8?=h`Ju?ta)b?@lSb?Xe%TmMk-Mhj&SyJ7c5TYIK1Z)z(pBnubrm3+B@z=1) z>S8q?c)P~0jTxSW62UkD=k!5D96X!y3@h3W+OtX z+7H#FBME+$pwW5dh0uNQlA*Kx#-q}wh-263#J4C|>XJldKl_c&fo~zD5548{Bw?xQ z>~~VeQy3dN3-W!|B?OCF<7}Xe`b^}oikjoBrX4e=^f2JStz11XBNxsY&?}fE!P7?i zMS$o!eTDGoHC|F0W?`zD^gzC|8R%fM2WoU)B0b+ag|h0!z`k>syp+?F0e&&F9Ci{m zoxS+$V&hK*wf_dTfB)IPQE+?kay)>0UB%Ka>9o~Un3r>IWUL`9Tal>LHb1DtAO*kM zq812u`6ounGcj|Bs_zVw1qc)@wQ%lpEd?;ZEbfe#L&dY%O;%)py*H`!GMu5#(4|s7 zrkHxB={cIFt-5+iNhlsWSgDtd;>+6!eT>{DM;oW~xV{S9=vMDN!rDAoobnob-SH+z z&o0LTB$Ve)4Z~#1C*s((aa@3n0V6Ue&R))5w!1~i7WJ<2eTXGi9maG~>DheMTc!44 z&oXO7nzn+R>rh?$oJYTT{n(Kx^@mRtu-f0(9#-n3S8E4<0ZW8Hd#I4ooKw`QHkOtz zwm6_wUjLx5Xe2*ghnY`b&&d?76|izzv47dG!ti(JHb#1UoRCRE2id z8g^KfD^ufTml5DEz3-Urjeya@WYMHIGkklNO}8d{D01G(DLJOG>tm|f+JLUPf=H!6V_fU(5brzY z&51%qa#F5C@7KhEwV1npaeMv6@ZdzXKGO!mjmPJ02o&_R_u`2pkXTM~hI$9! zJ<~J|rhxgljnte1Bzr3^@fAR}w9*UAG3b#3T}R#55ffB7Cy%Yf6u7HIZZh09z@0c^ z#zIV^TA2iozW~}{20FzQ)Y}V$;N+}i{`*dm-+vFxFzdU+2FDT9rr(k*nOz3(p-mud*=jYl5ROaAH=yTJ@?lqR5f3r9@@fQ~p8J~E zvj=>=z9>N{5;=R~w8~rX$2gFdF~wd6<;PtT)^zE`1Mh5#MX!FCscbh$Bhvxw*(bv^E!)+_%Q6}6yY4_<4}D(${>FeCk35{ME~;TdCdYiABEg|n z{wF5cFx~^nl3WUI=-+E^Et4Rb6Y+t3;>FaVsw8!{i7u?D2^BNpvDDNrG7=0RF>RQu zQrKDF>yW@Qst|bCg&=Hu;@NsE2SQFX1AkhS!tSfb52v{*>8dqdqNa{RWc1VsCf$k6 zYK%A&YW|bDoFn`HzzzP_SFfI6q$!zMzBEwMB4&Cu5wDc%!X7HyOtihkspixH--q}! z_;Nr8S^wM1##VbAlTf7lp)aIR72dAeJZiCjHOz~0!c4`inFFr&`I`6GN0Iv+(9(f@ zlI2475KTXh!P5|5(RA-h+((f%>&MfEt?cD{)$MEJ-Xx=>ErLW<)9;;JFFfmXpEt_( zOgvwJEmZ$T#9sL9&%VDU?}GCgy6sTA*=LFE*TS%e?k2pfoJkR$h1?@*YgCV9QM?kU zg@s@Y$GGXtFZ9nA^x9#!{lFe_PP*Tp=2n7anP?bdrlh^VdDh&9>19e8 zQ7z8b38^Z|RB(&`&elEH63Uih*SO=}sh4?vscLiTk_68C`)*bhs{*I6XOJc*ko_bg zu)PKZ2kT`bg^`k;GEKEqeqKabz>%ahCYdF=`EB`sn2Y>ZNBytQe~{}(GOFAy%YTv6 zv}-_EF^-@ZZPws$YtPtLjP~#YFv3 z6c^)#RC1ipUOIhCyW;x3VjVq~F)sm`zaD}tWujpqD%P&ciUzSpD$mJK) zcHp|Zoe+h^63_8=*8QBHo^m#75lJxINjogCKfm46>IG=9VFR2T+010RLNk^fQHOBr zDox+cY%co)Xn>PSBPZHN%Fs)$WY07zk&gp(h~}UH`fnk#ggK2b6I;cT0L_A2lx?N@ zHfs&HSmc8=rix$ux@QmK;cQH4Po~!@Hs7R;QgRS?wlPDeb|#<{YAV-OmZm?5C4RN^HR0TO8odQT37&viLfx){O4`-u%D zP)_?(8*hfHKKwoZk8xh_Gb$@RLi_Jv``?hWIvvVbv3gnBi!i*YvjYOv15)erm6h?z zMw)|!x=n1ch#dgHPOhWQCi~WIVL+{n)tIO5R;IjVy+4gT#dT%U&Vi^KK>lP$h4Ytyy5wkw;1VG9Y zG^#ER=@}*T^ zQA+07k=~?i14A7n!Wp=X(WU8Htx*+a?Y^RqgytX3(HxZ>U4~#?8J*1#*p}FH;72#bs8r#fRSct`!H@U7#iBNh0ci{+o9tZ$7}t zi&&cNI&Rt@*u5QpB@$ZXX^?V9+40PM-h<$8s7!#k(`?`7hmKzkB9mCZqWDM0e`MrU z-))244!Y@X3j{tOl9$g4Ea$#6$k4~)jiDYmJQ#cjU*LRhf}0P zrjceFDbkisfkPIK*dN8sXHEUJTa+O;O5WL9BDGDZS(_OT%w-JE&|;p2s>CxwA6a9P zKUqv=6-g+yU)T^+xk**bQ@eIcH07W%!~BDxMEK8d$6r52fB1aaXTI;&Uh#+DMkEg#BZ5))m~d1av8c!)4+rTKEr1@N3BSvdcg#5`2G)c%RK z>kjF&O8Pn&^CT}%##F|o+rEq#-OkfxlABi3>ZhN(+1pka!ix@d$Zsn?37jSCVli$l z0wx`?F$ZPRr#id_S>R)5PdFc2CD+?4lD(Qfr$@Ye>8RoSqSUv*&*y8^ukin9g!2z_ zCLxR}=U_g=cUsdk8*Bj#lD}YQB!uH?J4$qxY9QCE5&*1EQrW;-TQ9r{^;$ioSY$b` zJ|msYyo46G|JWLRPi5v_$>v~|XY!wvomHU}J41`|G|MaK`zI#Ag%*WFdUG;W+daNU zCPfZ&X^))(eNs|XN)(2Y9tVdeoz*#$&2@CXGbr`EmQ*f2R^3c5p};cF(VXsTIsEuE zJ$90AVE3rW$vNaf(#Jm&_%Nu_rKJJ34Ne*Y=OrjSm`Wu&VZx*wOt0O8S}u9^J0vpM zn6jTH?+yvLb8TU5o4o&bT_)}@w;m$ z*^!MgT4AFc+*x4|eW<&Ee%Np-1fN~S#Nv@MX#s=F&Fp0|b11G2BUsA(d@w9Zr;ne7 zj*29@C^ECQDnH5BXyAVoCSrPaBInGD_djFvN;sI)yVBxcQxqMNFP)=2(l;cXzuF&z z(7ra$BmcAwWEH%ke_qL^D{S!VALY0ryZXeT7L}L-#P{%TCd%17MF!U+0A&0NXHBnD zu5e0h|GIqz#@z|sJ_I7h3Qt1G3e$DmRvk#nbMKNW@K_3k5wnWkN&;QqM#!B}@D|}r zioa2~X?iBVA^44Og>h!!!&jX=M5oM^uNH{Xyz`JY4Y8-UUM~EV1U+=HwD-)t=B6O@ zcsFc6y=T+VM#IIj>2F75d!%vTWO0gUlWD@hsoBPw@p$V5#jp-fjzIa+@bU5RMn-S_ z2RTC(MwRn7o$ib=UZPOm00UCH3dH1bA?qQ7ZW0Z^h6X6ZwbCD>zRHwpHI)mo!U&q@ z`%<=$tY9=~R{~`h2F4mgq2W3AY^N$*>v@Fx(q8Ic0I~~t*)Wx=uS*oUNH>;DXWF{l zk?I7^B^DbRc*ZR<5$KWfSJ(Y)WZ(X1DP|(aq!OsanrH6gk5V(5x+RSXN_Rx;P*pLG zUq{wR8!bSGHI%lMiya?Zv$U-Nk@hn_#VIM?(es-K{)NYXtcyF)9EhJphS;o_|V8A%s5%Y&zOBYx#Iyn^!U5GxcK`->ED?8rT!t zmu+{wV$sr7n&jTN;l>aZ&$XNrjh^$p^CDUub@z*;{Dgzsy`2)0SswMh-4#I_3BCx=c4krImsifdHmnxx&i(3g3sMXO&XGu*0uA6gYZ`dSlQonGF`58-pomT)zO=B9hw?*k^ZOxrf0(4keF-uA^VZ#*g zb2B0SgS;{Nhltdgw*+4m4e7L^PtNX^TY3ec6onPls2JBOx|@A5|JLQF>k7>ey>(CC zS!~WZ3o)%)e2Wp%$D7Rfr)kD2c>wAV1aa#ocGedH1xg8KWtZKbIzSgsRqJb$0R`Eo`JXKhg<7_Gl)F#VbJy$i}~P5Q!Rf5;+YI_EN!KODYvt?>lHCnCm1{C6;a;GTB}welRgqVovjjl zjyDmFn}8c%f(+!qF@{jC0d~?yRW7v*B?|$kSD1VQB@9G9e@J?hk6BI-NJGQSJ;(5D z9s?W>O`f)_5m64eiKdRZCX?r!s}w1yEVl57tJ>-8(byKaAx%&mp^*Atqo@R;GK^?JqW6``lb1wslorM+~IcyE|GGi>mvcbPr0#fE+Pk3-# z9wCGBDB1LSPB@U2Jxk)M?jf{|Sy-bD(`8#gDjtv+d7L<48N+M?RTsGws>~^>-SUOG zCKSLh1_N?%r{-x@D|&Mwo;;N<>~`XRo49n4X78)lFps!4rzKbyRY^JDy)xjLW1pgu zd%r-V^Q>Xqs35OqJai~r>z6J2AN};MhPC;GfDz4`_rB3D4Z1z~b@cTEV>SQy%~v7- z4n~)`r5dU|z?tmu?@N%rU&>Tz%H{TW(n?;<(9f&K(lp^tip2y&Z!e}$%57Sk-9Ap| zNfnRS9#rX?iZF9%I_Cc?;e{er<*Zlcw8-Ojh8kDKP!@I z{iLH3cr@>K`pw8krEJlO_26^3-0HKuv$&nVYTLR5!2Ii=nkrwS?)9xXuR1(pLM1(9x&3 z42i979y(_6S9HGO6`}IKO`OLxceO-oi25W&L_HV&9Wo{QU^Y<<6C~6OkjMGSr6T#A zFt!02d`?J^f6Gf&g4sBarK)7G{9lw{yiMV_20}_b+EqH4mKJnMZdgKD4{$<8Ug@5I zS%Mr@;ew64rYVkfME7d;$IMgu&0i`m>*?`QV$+LPJ(wy^6OWzpGaBJlK*v<8 zp*>)=!2!bB10L6W9#T57)K>U}v6lPkHr7%v?!xMV zhdT6%dvyYFrF2z(YWCo%XSr&0hwdtR7y#f17##^_ugP~{ElL%}mg{=h3Wl5)?vhag zI_Ue>=-W3a7^qXr1Ri{m06ya=?w~c|Qv^NG0(axaUn@kS{GLBl5s4R0xN(TMhE8K? z)9dQ!V`8TLdX+LPrz!q&nqN4*j-yKc$HH)mv8BQ6jVq^?4pwm{+bXZahlRt>GrP?R zt-gGa=)^k&s4}nw+Tb}$ZCP)kkNNn4%xwEH5t3ia`OPu;K0gEx2ZWu|Jy+LsO#(8l z$ifPbunIPrs#)?*?Y_MC-y!mMAxx?fk0;4erl2(emT{!JV!A&T9BSVbg?y#AGx9={ zE%UOfPxEumsQKKQ*7h;GIRc{b>R6dp_%Byb@A)>sr@*JCvVki`XIK&_^R}3OIRqse>`D81Vg%W0Y`` zIiKLvWwq}vV`H=)+dW|4>*iQ4ifkoRLCOh>y z&~9nSwJ&3VCYNN-yF9I#&fUkY-EVX_?DR~Lu4DX+5RKcOw@w88IH-8um~`A7>>aCZCM=cDd*;xH$iZkqN1F2H|)07A&-bH4+ zwj{~o9MN;0Wa;Wsei9YFY$D)$MES{<1UwaJ!1FV4#zR>FnkKoy+UzK4X{n39VzV$g zmY&~V864z%L5jmL`UFsA;kVll7NIHyIlgdNtQ)_O+PehqHfOhW?rZ1GkbbwIwxq-* z_?Smd8XO8oqP!uT3jX9EsFF4UJ|NoW&XIB}58wfvdDp^yS&sc?Qf~K!t}%2Y^HCiT zeeQ(I7iGN$dv0Ld{Fq$0k~B0*`EqO7^j`Q7@vK7SddLIwXYT5T8lzJmsk&li>iW7# z_$)G~@aa=FQ#9U%Ncv}=Gu_TV~G-<%%D%wlzwg{bjaZ z*Qa>dA%@83xxB@O$e}EbTq;L~Y4UIUY+4$ne1${W^ZBL3Whd`h*Uab0XR|j?#J@5i z?Q$YKUe5NAQWVdQ_nljSUBY{Yl}ty^j(sTQJR0}hF|@H}ML#+J;kxdD@=)hh`gihx zJmv}(mBb=imB6;*-qY5*{^;b!^~Y1!w_b`oZNmOfLF+%r9o=CtG_iyk&eIq8v)JXA zgV-{7VNwjSzUrWDZG(ABYY!j=3O`^KrFn*-zr#h77UaM*wEJq982f3=l6PRfX2;gO zuB8C&iz+_|n-4sOJhy6T?3IWF@zD();;)|veE^EiJ$OOE8&Uu73&U&>OT|8E$hCf- z&WH4GZ^Sb@mNyFJ>UAy1P3H8x1=EWxpxsllJ zyFH(TQzQx{A!}`SH+)TRIwtsB(_pi+k2o!yJ!^0LE&BALi@A}O2C^PZo;|HKm1nI) zbPiV(;ik3crEk0EWA;4T{U&we=yG4wI$tBE<8us?a^MUSO?zW_V=qoqh5aGRXVKJ|3sGjqpA36CylWS#8 zpad}0DE$Gl?_aU7bN_xAA;dyON5{!?@P2RScW#*H=Ed^+--qM!&! ztO1&trC+Z>fEkMA4$hHYT>n7b*|#VTj!czAX!Wop*Co(Znw52N8o(3&SsEKTQ>y{Ok_i$fsTr)O^PH}8{{Ab}%0}UP)7KgaM5#jYP_C<%M z3hFatgH@|AB?wlVfG`jad)N=Gw;b-6@y7yy^JCT8*@zd792 zT~)eGs>CKQpn7nd=oCBeCRJxl9z3bz(gObDEPy0W-M_QASao3A^ZT*$PJ80>o#0P% zEL#Q2H}?Uyf#2WmPA|W2Q`fOz|GRFJGxUl+vbPd9(s>N!cu~_!LB_vwJIV}CIBM=S zy#yF+Nx}v5wTuDnBV9hvXb4}RvGPOr(fxx-S-oTKjYLrvUHe|geu398hyEwoEbKco z+HJ!m7B0AS2PRykD<+H+hr4elU*IE3JI}sTJj-c&x%*YT_x#gqp1;qT$-J0M$fYEj zNpf}^9QIg9tBD^v@I|DZ%Gc&=RV3$6{1UMmQVlR7ZCp-_pzS=xe$vP z&ft@|x#sfIL9(H+X<5SLa?n#n>5r2wVm*K~i|Oflcu%tdcVd<`;t)5;k;Vk}*eEvS z=q&RrLTgLTJz--d*D6F$x<3079$r6|)laZE*TbrYS*XqjVn#ZKzUZ}XUpG?IeKs=H zGHuRr*F~(umI-+^|EGnpH2bTrmsN#o^OF^VGLEO$aYMD3%Nv}yYV5?m*FuK>x(za! zTj11FuJdA#q98KO$gS6GCfnf)p7;BN0+l@tOe+G+)4YNAP0n zlX=`ruOg&%VTpj&#Lq;gpsZh5W9A2Sr_W(fX#dptn-yL?;^L&snfS?J zh)4vJK*=z~$sOZ^=@7;t9hyx$W#!U7gum4sQ#s+dw_q+W7@W^kB-CBqde&c0$*_|D zyp8$#)P+(-s#KWV^)B~}Z*mYJ?ALW$pR9M=iS=^TH0aJ1HZLOrYA)S1NZnN&76 zT$=;dv<0Ps?Y0PxSZ;7d?d%pdnVs{X!~|-4^3{r4cTuwgT+O^?(-5}tZrVON`m=y* zVkRd*NA}t?o-1_<@5jqqsvZ{25EtTwXWfRj6Xxt{R_qH!4}{5K5%#+b7HUkdX<0jV z=+!nSA<%5nGeLn6YIaEfK9K5oXLr{`c!2XcO`>AWNLKe%!+ zY`H!B+Xn#|sm*ch;hHvWs_clqW~XWLcIlb!k!|4Lr?ZsD)3xdM=9C}(GFQFz*Y{7& z4iO;G-^(z%de33pqq*flF7EQ|?`6WA5ul%TIDyBj6x_--$+XI7Hg~=)xhj38!Q5h& z;uPq(hpsJqTXo8sjKm$cnbvlAzc5an@cF8U4gX^NRoTC5X6>r)wp+>5i{EQ@`FMFn z%_n>HUXJc70%)i zR24$`pjn^_{|Ww_7DMHp%*HSWOJI20W$NhoZ97vPX5SLYt5mbNv7*nbufqO%bW|)B zdYj-Ap3CHMxgDj;ozoXE$+-~ZcIUYAI#!FLsuUd1PNw!Ch$)&@88M>F`rKYP_w`*5 zX3VEYDWLYKrrcU%k+|^ z2}}1_l(xvId{+0uNd#d2mJP)xZ0+-${}pb`pifnvLksHh)iM>C^uEU%zTtkAYkYdk zFbS;oI1$lXEq;1v$^GMT^-Y=osV@BIF1P5+xIVZV+h)dC?4+0n>;*{A@CwM|xt1me zgQWe;>t)S>?B;?&G!GLA+eioyEuvu|;LoZe=%^Wf4%VR*`^I`C2G4S&ubWl<**vly z*KVr{1otx)o}7A{zkD{P?8r2m<#Annv-(fHZi;c6A;+($gDSwrV7QW~p-95ryz!B; zJ%Mtxt-6La^}`?CV2k&s`7SnzVP4T|3$%gnk`n)$vNniMLU~ z^n&x6uBKKq8Ydnwi2#gGHOuS1w~_g!p`CHd`}6u*esz56efES4tYsqMloA1QAI^OF z(`RIwWej(+=8X#%*ZH<$qBUUXxsz|{6 zCO6UY5nG#6e_jT(@zq{XmnL_mEYloTtD(iw`uGPC>5;w~-QCa6UdiMsEA!Xn6&5cA zX(Vm*ptENWm>e#*on9AHWPRP}N0*`}$P7RM;v8t4UJ`Xb$*bH!SnVbr`3ugJcPwz%a2GkMm&=Gu+c5}`_|vH6ww=fzcV*=^4GbXs}26h zJ$^|~elAfhicpz#)0|qBk-$o%h_lrJ0aIU{JCIR(awna!$YEpEj&m9;<58<&(`1U9 zGD!|gxAFbk1ujq+BtqO7WTy+9fD&!j+mdSaVYy$pb-(COmfeS&sHwZ|B?epQMXSFi zhsD_EUwaYxf>ydyQQV-6zdjtGvIY9wXta*n5{x1Lo)qkE(f_Uk3;*!PHXJ2)2qDfl z5(_YgC#%|@W3o7iudZt}O~f!JdMk{K^&!}2(G~}N^I<_jO%(BAmV5+~jJ)|09WH|J zxxGHwC!n52Xcj;q3U8zOE7`62vp)rKJJf^3!=;#ZNZM+s7U=bi2Co4mCbl>sYV=ts zuav9AojAp=*YU33*Bd0^+++FTf}6Z37lu6h-5s;zZ?8CW<5OoEE++)b`2Jfu{I~YX zfL!oUBLFm4Xkl-8+H!{Cqqh`P%F8REXfyFp8HeVnOMkZ&*lz*=;8}6P$nl&oAfmk* zHqy6)`z{&GAa%gqyFVKORG|KYKCQ!J{sL?H4x3f_&n5U_EP1;uJf)2fnmL(L11s%{ zH>A%+Uh#^ysFujV^iywAVUontQtJy)Sqt>f7Y&Q=YdR>A)=E(#9GH>}#Jxg`SMf4r zP(grjTkGhdDgzQ6T~VQ2LWv>5T)p zkEi~S-i?0iWUmVr_T4TbPHjo6nShz{}`M`IRLrN^#M&qs;Ou5QCylVJR z&rObZYwv3|=1%K?{Bzu4p&Ysmja27x7JVY=%LY-95ZBa%YEpLLW%ARo=yV{fn~crf zld{)GsKbHkzxLQ*Ewz`|Mq%B8ch7!1We#T~qRTxnFTE&~KlA)6O#~@tVgsb|!x3Hi z!eo`6tw(qgH8BiHMp^{}TJ znhxW)41Aa5V2uXC8&MSv2P)oHp7;1et@chW{Lhy9zm9YNAlGpSU>kO`m>W{n49hhx zHNIS~%OH{vTiRan+H(7_zYpGH7%zdcMFYysi#<*=`?54b^Q1XAJX#*QJ9J$x`hD%8 zpOm~k_mJ|ig_Y*i8?mP{mzDVn5qti8(LuUee6xE|xSQLTS%>#nZW3Cp6d?*eg&oHP z|B&ey_Iny0vs|^e-?})&Ltl!m2^G)f-rB>im_HC{5KS0yF@1hAT1Wl0NGWYUk;9Yz zfiMWJ1@Hra$!W{Cd_1x-%elO{B_ODb=*6%T6{;dy^>J%4f^aD!l^_{8HJ#^*_cbk} z(zubLR|5lP5ZzlFXN41OlRj8QF+Ud~Yx~xL18(6NnFZ3Rx5qq_Qhg`^DXTBMVIzy5 z1N?kRkHXpTb}`;cNYlJ+VB)Hr3_0tw(;SU+ zZd`_fW;(P`IUk_z1{1 z>?p`ttRz!cCiODY!?vJ&_xM$#@lP{ZeP_sdO2i((F%SXp5-an}UGr)>3hTKLW+Co> zV=p0b!i$4_zxHD=N>uL1LqLAWBrP%=G3gs*-~RoK?>S3&-kM)idnHi?doW>xMT(ofDglKDL)Hp{*-beAK%iC}n zsb;8h*J0lWZvqP8Te#&adqLi+ShEa&=YWAx%W3=i_F!Z1@GL90tB=>^0HH|hw^kkp za?V%Zl10;~HJ_BP#r+&&zU9l+ zVV$>po>|B3UPEsSeyC^+UbZ~R8emXRVE9z=;sv>WlSkPzW~hB@&;#qjKGWM1{D2cA zVB$FIwpghVz&nFn=9UH%EGrN%Ly1!tW#Mn6%az#6pkifJ>@8#PKytF6Xxp#sVfZxF ziTI2LnL2)Al4ZDHv=|%wqW}3c>S+#y1X-HR{>&nbO~IkVK1!*{XoBq7M0sFZ(k4Yr zO7N!v*V%=6;aR~0CIeO^uWlqNrbqH|NT_4n$+>8CEietnA}UHsVjU(r$MAiLADxA8 zgybfrR!MXdBxt(Sou}GJ#4u6^W;~B!bAgl;@HN>yKZ0&*dREw0-OXhc{Fr&Xn3F2H z87Ka;KV9Ee}9v5P`*U+f;3DsV?bd1T;O2Jjk?LI(tMX5^F-7KL1c&R zez%OXv1O}_(}VmowKoqh)n$FD&c&TZTn-Sf%@&5UR2=>&y$Kf~e=B7Y=l*Gc`U00BgwZ;&09VIU>VXH=d8xWu83z&b51r=mqt z!pkbCPxUI;5ww9^h3lA77`*Ux6CbrjubGx1TlN$-%3E5B9I&M^m$@t_u_6dP-$hum zoF1zU|EDGEKgcN*F?^SrE$x|9t=!{knn;mx-h4o1>wlzRWKLc7yDc;c@^%8l9I8W} zY-k61TEApVuN1|ZSsdgsVwH4YBqRZhv6peRE?Pr-T%a5@(+j%T&Zg&OD<%zel zTcQ2XnLzFPM5Hr_S=vPTT`6^m=vAZl+Rbj$T)x2`n5GkQQbf#a6s=g$YCvD;X7Fw# z{w&fZREDptxYSdv7X4=7%A4SIrNs1#XY)6P)SX%thVN%VxHUgdv~3&RaQdvyms^lM z@<#WW(vW|FsVJ940ebn;A}J|)(aH(0{ks5Xpa<$!0zEDb+p2^lVR3*AjT{JbRC>OJ zFSJyzUz#+Nim-hj#>@|20B5rYK#2a6%UaJNBw|sOHx@ty2Z%KHkbu4Fu>k#t@6YJs z5_>$k^9KxBvgDzZH4xzROq&B5J~PHD!o-VFi?>K6A&KB_X7aR3bm8o?R<1`O=chhR zEX_XqPp{siV{)ie7d7HgHS2Xo}SQKroG(R}36AFR{AhmlOH z%H$ePYT0@|7+aS5D{m?G#_)23CnC!lNJdsQaNcOiBS%+aw%(_mFv50PmlpmS(?tx0 z{}2_mm58vaaNo4ZDm$Lr8FjaM;NF-MyH?8tz(!Hr)iy4Sd5}!r4e4=8!GccWtfrPf z$%J_XSn;ox?K6Y*68R?9gfc}x_rLpF`RP9mfdBi9B-s81BWL8Qh5ahKc6BOKDe-b# zH1GdI*Lg-Y`E_YOg@gbBLMVo6fB>O~-Z4Pvq4(Z=ea^nl-oNc8ZqR{y0g`6-0Y0LS2K~qPN3uEc z8JWW!YyII}fC(#E4LZ&h$nE|$S|U2fY*LI5SGNDqMHDoa1R7|ZZU#Oue%VN^xtrg7 z=i&^EgQ5Mo$i6*gDnWX6%@Nq$%@JVQQo-S4e9MrDQ!}B;P&%Ksl zEsJ}Rn;Spa15CV~-qWzxtsL_CeJb?+RV*Xry>3CHA;p}}Vw$UFPPCL5(mE>tPAX~o z(zaVsgsv^l_>wtBDj3$UxlKy-^h@zpw7Vu}S}99dmg!R}?0IaWdS6D}P^K~5AEg$K zZ-Mnq^8R_nN!)hC7YEco75VH<3!OlPQ0PfBokMv_w7Ny89TH@=onIlE)pq12TYn%G ze9czx&Xp|<2z7=1u%#d>v_Tz<5>dJVBsS}v6nNZjw_SF_aAd<+L8X&OQmtH5(xSzB zFB8y0j~!?_qZDMVDrhNiy-vS2V#|{@slLm!6FsC4-UkGR`G;|$E@Bi+tDb$BxnpSN zsK~w9+dC$O3(0@-++E>?@?i6Zn^$=ob!ziY-n=)Pqr08xev`}U+&({f-$pu?Yshu# zP7kNE{*W~XY@o0Rlu1*X)0V;wgQl=i%ixS!ma(3@(@N{a7OJC(>Ewdro-$FvTn&wY4O$>@I;TDFDElr%U!Z+~&V3LF*?7*a*yTW} zE>ac8atV_&#m#QC{1Oq{tnNTeYHYqwhuq-UG ztK}>;ZIDAXR&Psa&_`;VhYeQ7psamCc&=d55#?{bJKwGFCjhLeVTs~k;7`mGLzLd3 zG1T?D{$f$U&>t49Ez)JaK1;PBVC%&$O@Hm#uSEy{O=9T~>OBpTlZUI%i|gu6=2QJk zbSsv5zoY)7e`}aBKO0D-EC#z#7W#Np44NNG<;sd)K)CXeD;MfDbA&ZK^DlX})pXhx z_>)uwndSUCte#iEl`;5C-|5(o`xk{4f?bdNc#@K7(k6Tt*vo5~qy{;jBf9HEosXX<)#) zUnVC!YY@fZN|WiGH`Cqw;KTR6i4&Ftj@h<)#H^b0B;MSep3U}ff!9;>;3%AgVwgUM zDv?@^$#t?p)pKE`LQoxqdvsIrtMZX&eGEux(roM_uK`~lBL75dU32-JXS^J1LWmz&wTbQW)K{%k+J<>?Xt<384y}3rS>bl_M z!uc)z7Qc4`Ak#UT1HIQT5vqewQ~uSQV9STXz0~Ot&me;ZqAH^qX~ES7e`h<@pVt+{ zyKCXnPhpTT{#&m4pMj1dIpTXxiY=F9K#?2|F2gsAH-N^uFqDY^@3bFLs>1@?1v&x1 zsbv`^(;O{ai&4HC2yf{DU;`8=>->|svc5C?*K~59+D0f4mmD)J zH}7%yF@*Piy)^&IO7<~4t$t^tkVy`3jW+Y3aXX}d>8rq(_Q^j>P&4+r@QtWXPd>I; zh7IhUN8dQ$2uk-$3H4^u*w%UlO%VM zoM*kO*EIM_)lCTxa40Vz`)CT)9e&JmR@X>}J#pnguWK1=W!rG!MZ4}9@LRxUSZ$Vl z>k9M3na?sWS_>Y$3KoA9<*i%(K1DaraSVxXY2)-nf4%&4}L=nC4yN>OON6b zM!NYfFnkiK52jLDF=$x0OwbZLNanYSq1fLAeK&g|&96D!c(MMnSV6n{a}Vp#{&*R8 zp6KHvUH7BJg-+LYlGa8H_x3Bh0q*71iw|C>L`4@UbJ!4>FlF{-s-KTinjJ0}M!G*? z~h*ho51ZfeY6}l1ytGAvShxNQ7r6c4`)^o_isCyPltGv zPBB5UncAWm<@$+woKQ~_gFQ>VG zB$w+%kz9nq5~r9BE@x61=$E{L6c^PA!VM-F@V+Ir3q%6|bTzKY56o@?R&&F632<9+ z0*_-&WFf15a#A|YsO~q*vTT@i&-*4gw+U*bsg4VgTFG`a-xOak^(37ey~Q^_%J0zo zY2iezY_*xIB+Hlw$M3e-WA=cVKGV0TL(}=C>aYDD%3|&>w%UYLesTYzv{{}@1ryA{ z{rwufKkkxZbDi!a|7flJcAgqf*NMPmryXz&=>verz_QA3i8YB#UI)_9Wtui5pb#bZBq zvt5#$oobi#u%m}p8nsyOfDGSl4b6T30hdNe70CJ;%Fz3%dLor33<|Pf%41wppVAk}3*=hjo4hZ0-uZwU(yxl+kuf_U+U zRe8+>o$`A_*Nc zgb4(sDgkPOXJF@IU>AQ;j?}&oF1?3(V4}EoVn~+$-N~mZ26ZegJpOpxq`glDeppyG zvr@;#YD3=D)LG>NtcH%}mS@T1!kUIBy&`8m|zkNsF?v0=8L`8sH<&tG&E$dhy=w!C3|xXbMkXD2^I}UM%U?AZicD_=;jpN&GvC8{bI{5JGAs>r>Psw zp}F{H`FGf@CQFJh4e<4**AD@z@+V@`*TDvP`IW$Vc43JkIBuBET?suD7{sSzR&-y( zbeWfaA#j@Sw^`)#MsfgS)$AxwUk~W<-O4}N>L>SK&D(XQUt5b5eyimHdXNePhQc&v z-Kf`ivTa?Xljk6tBwPP*7JxcJx3`e%lfqLh6^ zEvS7DJ1IA$E?Z4px7 zPWzq3L3clsj|R{8eZ)R|_R+?l)Cz^WH;%-(2Jb!_3%PClhMX`(lhsU9s&4BjtR!?x zGcH0!*rH|Kw)vapuy7w0kz8KKoDbhJudkWSCl}`qj86Dv6_~PV1#S$=7V1_4dn@uk%atd`yCvO?lq+t}0@4UX;FwcsPwfPZc!C}TTZ-7+ zH>hW;n{5rdEfOV8tpHTFMU1EP5ju7;q|k= zb)D?E(e`Zh)8fGs3icqFiAoFs9`-w@ydSEsUJ$-ni_&0cPK>CrWr;#jW~QLpF;7!i zozSytMmJHo4NYoV{;d{!+z=iy&K1vDm{lH)&tXyp)J&U>)*xqkqhB5`b6M56x~6_7 zwi3oW=~I7s{LOeQQIukzCpvYc^!ia+)T&Nz-JtY+6P`Ql_UI=m+oJr>reg8wn5SAZT%>d9Mq{wG&*ICZks({%;q!Qo_xhE} z$h0b<0HmLO!9dL8rQ{fhmxRNHoy(Y_4R;YCV;vmqh}p8pq>avx179o&{@JQ-lu1^e`w z@edMPnfGQU0zEKVIMy5z)M$$<(K3JWvdfR44StdO&=<-Fm!J2E6i%58B1G%{YB46e z`)1vxSO<31Y1?a-H-m9!E5mEnDMO!xXp;E&zng)A@#Trf&PvVan?s);BKo;K8gjTN z6WWa@f&n!Mf`Ws~X-9I{x?TrwNmAdf zVP>S~s=+`_TmoU!v>tj_YQJ;5lSJ$^xBZB&Wb%Q`FVa(TF^gkx z3D=|s{%yS3i!>-8WCexWotk}KB=2>joCyu^#s}nZFBCH+;pE!8cQdJ#s07Zr6s3vJ zk+dV+`w}b|ba`vBH8d6re4dnZN(TgX_AgbU4PbVk0$vE!TU{T23pr0O=u%pd` z;j5CNS(R{bO}fv(LI6t^lae^WNMNu~^=8v>^Rgag#_m=b*dKESRkq8Q)g@AYX`u$- z*$t_#rTFq1s#|-eb#~1PT-a0mrf?zGff+f*r|qE%Lio)L(nY+g``uHPB$G1}=_d|W zD!tjaA5JI79weX3Q;*05!?-lJ(6 zt-;JK%75zGQI(S;M{iWVl%c!88OwCY+Am@|m4pF7sFK`j2>>97&QbvKgoDbjJ_q2K zeMEx>B^NeLN<0{$dSVlRk{Ad>v069H(S=3Gz)Huq4BxZ&cBv=nTE`fD&>65N_aD2j z*8HmS;EO8@BP11QR9-Gu&eU2O)**NNBFH9FcLJ8E>-Yl6Z|NYPLnIWji3@i?V$!^M z(H^qcF{Gyle=dxvZhT$3!%)#-Yyk+7oJ7M?X?dDeWHveilliQ!mGMQT8Wc^*xziWi zP;HAyes{Jw(7fsu|1Q6@`n#4!N%`dywB4O(Hz{|%SX!4JBbntR84ZVAi7^K+rrjMv z(U){tC|c-g|MA_k#W^p^8jKL9UJ`S)tBMN9VAu7*7PM3cUJ)tJP^w0H8&~W$1u6xA z%StCJVTV$~wT_S?79a%MvLjWS)=w!K1GcSHSno9sv`tDW$F7n}cQa{9l1{v)}xw*b1Yo|nuxZDY6cdtj2g47i z`YAu%;s~tc%`x^uRk^wqPlA&&vH{%CsEG@#G^0j@o)4=sDVsMuQdy?D8!#*HO;J<^ zB(CPdb}JgGQp;~oUb9_gH@omA=$L=)&6waws{J`w`nSpPn3is?(jUFz>m_%Z&zY;m zW{|g=raxAG>j;M&m#PVo52zxBApWfFgijQzd*643-zOGo8l<8F8MC7D;HTAW)Qb3b z+q-&^a!n>;cn#hit(4gseoYn~c9HGG?X8!Bcxh2yB#mYw?FcQzinZ6?vep#`OqZ{2 zt05aU0-#fTC=Caj_v2|%qmDm!RGK{EhO-Q!Z@wkPu@|4k549ThDb`dvSWf?aTRhc` zwc~3%!(ZVizr%41X##V`u(-SDp3={F;YB!0SjcLV)Ni6l1G3yTAkh;mTIZVqWM=__ z=D-YsbiaO~PQV)M$f?c;W63BI@8~XH&AhE~@w76B@X8lsfQD1WzACEN_nQ)0xUOIE zhJ?{2jJUV@#(ZP3-SK3_l_xK~lV3Vvmn211EIJnuXP-&IEMB3|wXT6#R(ea^sGIM1B?Oq}wfFE`;Vt)>vag%=rC zD!uS|<+fR+=HOo8g*_(Z{g-d`MQ-!CNp#jl&4B+%nk)E6ay9AnKXHuvG!WdYR*Z33 z%WOevEvVx3yY&s!&WhtWITBiF+?cocv~w&#NK*@)&NoSBZhS=SXrk1e;bA&L2pym( zLtBs?(Ow`sr6!gwlWd=1E5bd8!|&P<(95N^zjElyU9Qh|b12UpZ^#16ZUeDK|4!9kA#bu>2XVle8}I@l{LJP0RVz8Vy+j7K%SQng^~R z4>EeDjK6qP*=Y@GEWaJuqg*6@7*%Eue!^`B4-9ZSj>i>B1 z{pZa)eyK{cmmlWUzW6)(ooeG@wv`#Fr~-5-l%qQ(SRwzWNFwgck38oiG?B^9OqqVd z@3|{-1;3E==|cSAyGnjLIDRIj*Bp&MBoBXo z$=EKQQHyFMjYplDqMZA~{WMvt$zq z&Fto*A-}H^%n(Ym{?XBh$E~K}hsHGsoCeOcD+TExzy&+ptPu9Jb8YGCqXzk=C&~zg zx?EWJyq@I5exm4XZCr|dE*@>;%waYbY4vRUA)eQ<_yI|QSJ>YMFS+*$RIf=;RA%@2 zX=yHhwi!~jqoDnY{8{v*AhFc4AoQ)-lQ$=1caJL^`ATJj%*7&YA%IUP z9Zft-%Qyq}hQVf9B2f3<*?#0Z+_YYb-Mdi2EwCM^2#gTrIPj*MEcugvODHHIL`F+k zudj0M3+?J)`GC~szOK%RO-0p74<`RFQx&AS$mdciEZ1xG`g`RZH$oFgS?rmo6!je_ z4IeJl4fZAK={IWTpd3ci@TJj18eq>f)Ni20=>03+0zl1Mq(zY!K!n3+^uw!b-;7FTp`n1ov%q-*_UvS29WAoNW7)3;gP8b1!AM7Vsy z+NG|aW`ui>O^!W-!Bg)}KJELzID0d?Zf8aRhD`nuc%p-Ia|J5`fP6+&R1;6(T!$hE zT4o*=DIA!Q9uAO-DX~#Z!eh;FqM}}c+NuniTFEAG2oofYy4+4>A{}jzNNXWdgVk8P z%}V^v(oe`Q3b>lEo|BqKFirHk%k6H}(ojW~+n0#@Kz_VH3mrq3>{7?Qy3IwdrvE(D zkUle~tjX-v=5qa6e8521XG!kZ1Ghk$2db!R1ON)E` zr>}x}ZIUJ=Hj_qbvhUC*e$>rs<;wkVvk*w3r@6yurIV1YpU!*LG#|kIz0R)=^FZ9X zW4>IHpHTdaYS51E4x|=(vMSa1=+J*wT2M69Q89&gYJsrRYRqu3`cp{uy(qv{{WM2OW}*dY2*2Zc zN8q&I-GqfDa^I9U4LNtz)k{vy%1dl`tzAMxD9NZXsyEAwk`b1Bf<0hsesdsh+;6fe z`0nT+E`eaH?=GPl|Cc3p66CD`9=e=5qW$8O_tUa4Q{-FDaw;?w7>=$3E~jQ!UKC0V znFb{J+RnqlveXK)!h%gGO?qFmgFv9cK+vWnxh^JUBJS%_*zVE`q)P68t%u;~S zuByHjRJRsX(|LtAJ+VEAY3nWd4pBg~BLZzdHI-D8S4sY1H}H{imh1I$y0p~eBL0lw zK3Q8SqP)Y)J^Yqb!nws)&YZ`|P5wvtH-D^EQ%4Gc`tadX;#U}#QZ%d;A7Ze(mMY6K zrh|1jD^z5G5$vmr&6Z-#Ac1{WvC4pl?uhZFocd0zq4`b&T}c%0pN2+_wEksqc&NE;A>xd({LpncL1TXySZ&Q7bc?b`vOK!nFuAXJQsD+=98(lZU?{ix|i=! zA8PNilw=}vs8q)Q?$()DO5KU?1Iku=$s5%PdskfJkO;DY2=Yh!_LVo?-^(s~mmnvC zf{Ic3bq#o4iMKRtnTpLET`!Vpr-9Rg7ITK(T@%lkLR0~rjc2@U&dgh_FU{&jnJQ3( zpe_v#1CxZ9XGCcqwe1FunVC0_%6I~+Id?^OQ_Zim zc*m5_c%{D5<9+`pdEnB?%d#Rx=

      _4(jQaUXzn(Hs?o&R`mlU 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

      0fUw@>H|C&X@F%DIjEGS?H&Pc)JueBpCk+`W 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 iJ zex^!1Y}UpIG>gH*BpSCCOmi*tg%p@6YK$vqU)+!h-9%pgR#tj(O#QCXCp;RHwao zVoUT6>?wAa6TK7_t@`G@g1_S0?(ez?A$Ok-E6?2~Z3~@g=Ey+@!e)YOHq}KN{ z$Nkie8n$7zIg@g>be=x-;fC8rOO}_H{qNkmANX0jDzj%>KeqCJ^n0_~buEb4ONu7o zs!rsFpTGmUC;Ylf-4*)zf3&FfQ1r6|wSG6O4#t=p0>FjV86{rOIypS|`GHd;{e<&` zaylKivAHhBU9?{`d?b6+{u0_;cIk@NYg~4?=QBD{MHdS&cP=pTu^~bPhRA&jlAMSZ z&Ap=bs5?~aQ)MIZscWn>(eJa5w=6NSAF2K@Nh>CS2Vm0=j^V7gVsvn8nt6Ml(nNVg zIr&5hp~7#MiA#Mc&UI%bm?E z0|`H%Ykoc)sc|xtI?U6$*tBNVVfwTthzXq-rTyJ$H}cYCEu+JSKa?%HU8y{qii4%- z;J3dIQ99!G-;?&MalpLpK$mP}KPk7&3`)?>qn8gLVtR)vE7fygPf53HUam$3!jUM( z;4=~Z-R@3RNdjkZ?h(KYM>1dAN*hhZsC7pd$;{p1t?3(%!ybMz(@+i=q~Pv9L$9&Y zq`)92W9Xn2Nee_tLS1oCQDYDbIyKzL) z?%^A1jWx`Sy5-!+H62HG( zl8$V>Wd2jxTEEGQryHcUoN+5<&ex%gVN@?>U3){BZsqLkoN7Y%o4gnH)6CMza*sHl zoXigIhut#6W}>3^4c)FTN5l#}A@p_AnTjv@s1@#ARsOKmH7999sEEE%Irjb6tBP9; zqA&6a75`cW$qd_A7%92yy`AKwmEWLV#^+NQD}y4IBXK$@Aqruv#+RT+fkA~6-K2Fv zC6V6WaAX)w&JHbK<{NHSq-TcG7%vSZUI(Z4$c}D%K7TRG6+ILiPnR9R-<;Fk|Uh^>WmjMLIFZScCV@c&{frj1h!$1#$6`<6Ijhn{y^zRse?BaO}NG zgD$GOp6(JQl^ZdU>I4^bF+^E8XHIj|g2ulrUzw@%27mcAT9A<)e-mbzQ;wszw|!BR z0bI-WYv_E%mTW`*Fi4*>Y7j)qeAoCjS`o}}oR}`1A!SBUK}ghgteRs63tSS<_*fe% zX`R%-TryW=_Z;MBMXxTa)@BB1e4;oehgM8obv#n=lJs9ahF{-a-NDgc=I6_?Ug{2g zUO=eMu~g(G`rhd@m}-nZ8^mLs;e=btdF1MShKKyp@HsCt?NzAPNe)iqJ-%B}SS~^F zF>e;QV99PG>QjH8WSIWCwQ6jtv8o9Mi9o{947PoAWp6_hpMq)CNf1<-aCE_98*ccE zQv}A?+7RQ9^SbE77Pr{+>3sub-{RsC=fVB^MU-D<&yH&TC+1Ee$7f509Nye=&rH!b zS;TuB9{9socZBET%NJv-5}mIfa}zouyncjbHU-@DDN_*8=Z#EYMSYaHk2u zn{kOf4mhK8-J%$v8XnL7h?myYsa&dJR<{(2+@&Fg z?=(6WgKe0QG_D@{zthKXPHbVHqG+6W>wJk%+7q&%T7Eh8`k5u<*Yqe87aK*0?+}da zu2T*H@MzDc;854w(mCGSM0990NZ*I(n{GiT`SZ>z%^)fV@?AfGqh>2PFbVNIIL!Ds ze-{ShJMmjml?G?a88e73ig>UtpY#{}!OhNd=6Jz0Suaf|f&`{qx3S4CfJmvjyJ z-X3vHeMD>ev7)w*emTX!nDU`O{GpF5KC) z=4XNP<`Vh7D@NovL!Dv5mbk1RVvWU!(ZPo0Ty^ zMxlta{E-JClv7RjzemeaQFIEqwFPSUFhup`%#6FjoDAf=9tv_Ws8REB8jS3TWucFE z4DzU%2&#{4&Gk`;rcRfUjk**1ylAc*CtBS}i-(cCzCJqAv0H3UD34fKZnq(Khi8@d z<|wd86rVTnsdWw=_e@G%sj>g|RX-k|v6Uh3$+hN(8}|E(dT}+7Bok6CA8CmbQjkZn z)=%NX`AuGq+nU&L5MQ|4x->kx_kL2HulX}2+2%slOZ%JAhQ@cZe^Lr&+YOI{wh&0_ zzW~q^0m&uP+erfFs{U^0KFA34Z;!QhiKuA@ue0$YL04Uu{Zct~nZUf(8Bm2B=La`> z3~X!axgf4mEP3mUt}FT^hn`D`?m*lG1Fbp1%M7L+E)o%~tL7Z2yD~^tpjIHS>53|6 zYWX%va$=h}U?>IOCL2NRSe}O=l#9Q}Xlm#R2D!D;+*1cBXNm?$!a4C;#&}0z(Ca`Y{#g|&-3VMsU~}S- zg1BM7n^Ak-zW@4$crY4E(7iA6@X4{C-rT1*J{(A0?MOw;kl5K^#ghT1fH}&yk15%G zCwcJ#QhEy^4eNnf(=uX3mF(y(5I^8T9~sP-{txo`$eEX-x#dEg5xkpL}LZyIDymmeZ)M3X$JTkNd3DDPVA3o5C0d+XzO-^zwqSUiqVD=n4^@h)h&45OpUpb`}`?r;SRd zkfZqlfTugmC!Ee2kKYZqQ}n+a!NI9TNO+m_nvLT4LMClW{TNAN0lX zT_&26UiI~IeclLed;8R!vtf~|XUH4+5Jj4@JN#q%B{968#e*?4^!!oa8wQgmE!2+k z$UY5$=Y_U0`dw#q!liHdD+*;7{b~K`*>Y|#)`$1HRel3L%6fE55?yRj7K~MU|8{EQ zQa_aDC7klnY3BJst!TQ|9+ePN`A?3rqp{mo@vd+eVn^dE^LrIk-;h;CGuC8IZGCD8w}!?0HH#YOzLQ+jcmVun?HK~s)<6Gnp6$h-l_xe z)V8jv$2PdhF50xmx^*sgJ;(r?jF?;|6Fue9BYxe6QI$C7@X$)1$VtbPJrxUXw>H@n zAZ9<1h?4 zUwx=iBl3Y?#kAw?l4!YZOrM80WxhsRIophjf9LAnhv>iAp==qBu|gyBLdP4iv`IYB z3QTL#{x3kvV`qt!`uKO)KyVecCz{_eKE<_d!?kpf$UqI`42fhY$qyHNFV6{{Mr`9J zq7WY17W^FxEh_{r7z?L{oBPhdYb7Azsy#NBI2cXzMUb%!CV6LFi5A_J>)M1J#;zF< znGKnP>x5~jtNLdQdx(UJjVj2X+qn4UI{#zvaH{2~0}XkphP9FkIaU)~6hTeI=^-yW z1HoWaQxS|!Slt}kqHm@>)h0O4)Q|FLp;3CMG8>a|r-Iytu3qDTCsEu{f09b4a7}5> zp!Z<9tD^UVTybHNBb;hs(D7K+X=TC!MrT}igrUdepCwUDd}`{-cp7g7VCJn@E-*i?cXH^{pG$$8|53to8(Yo+NDIWc!6Awn5-`m6G>PX zbvt7sDQC)W@>2M=8 zJQSSzp}K}`^6|qqa`QjVR|LV>g9k+=*S`Ka;XYD-MWMXgs)m42C|VM6;7$$=E&4=z zaE`aOp$Cg#IJKCFdu`8EJj{yQ0v(OgmI|}nXY;FhYKh(b$pXnt3H)=))*I;N-Uy-dYc<*K$byd4LIx?1<`3Q-_kW2O z+e9@i)PHi@mHH1_?o`PY3Q!T(VPa10d{DUiT20;mP8holHF}`-cc~_dB!2Whj6MY% z_0YYn6{~@k2RbKgqGhzTl_hD#Qcq}Z(#g}_GXj}CcxRr`XbAJ04;9pnabX7x(C;3C zQKBBH&tJY-{>CjbOfoZ)J4#6@hTV{H38`ss76z&uyt!qITeNIn<4# zHM((xN6iTdm8!nwz$*ozgoWOUUQ)VH{BV>e3@KacxVK18t`$_rHX^)NnzrANp83Kv{zqeXo`+@638^`Pz4Ft@N4u=pRo=BY@1R-ak#}E zV-UrhdhTWil`qA@`qj?<&doxxvJo6c=ZcsXd&{}Vxa20p_0)e1`pYi31goG>^>)w8 zAv^!XN3v*5UT-Kj^|4T%>uBj~$-jb;(XEktFllc|_Hdk-d2fF~LGyu2osg}EsvW^< zx;blSD2DYr<6b&V?`PgCW%`jctd!mf_n)(^(jmBg8S@_5L#vm)-SO87*&I3uFYDg} zm_ZckjF#&-4F|u@nVehz85Nw{>%)8FyvI@7#&l0jxK`+>@(r}T^+4#JD1DSer9f7m zvlI`H0p$VTg=2&R%R|r{$eER!#n{w*KQU32~t^Yz0^~WjXe08Xh%Qm&x zgDDrsLiAUH9vYuQZnTpdEXnL#@X>qmHb9HUQTw|fw>zq#dQ?h0n$=#=y#89xy2$n{e+hYpOTDD? zZTic6k(zsuhSO5I&*5ekP)y}g_2`opt9#(%E1K}`$lHG`9r~@%iCjt>q(ztF3fxY!*n?#DA{1Ox?7}x6SqUW6FeldLH8lDsbNG<-P0bStiD1l56(P z)N-(1VCc7!B+zx@sN zc{Cd2gAS5R+PYnJI6lY1#=UPgAj?$qx!3;V!@H)~hc6K;=S}nhI_7%naD^gb4?Ngk=@A)x zwOM{zrCwJ9RKffe!7IrLvBg=>|1k0l4zpG1<8~uIKzS^+99^&8(bRsfHuFj)?+7Z<4^WUMAQx88%E#D(;)Pu>yf^z*4H^Y2%Or-1 z+H^B9xp_Ahna$uhr32DXKq*rSCuZu1`YwkQN1@a?;0%u{L!*V!fNE}-u0A||;|ZKN z8IcIhch+RAPUbOrsA#-E1jq!dm#H@%F6J2Bl(_MD4o2Hud)emUCClDe1~FNtQm4(9 z;8HT4*;ZrwY{jF*<>O7;vas!ebMr{nZER3EC}tyjU#usV_I>(N;&rp5ZCEb;cgXRD z8Wol`I~4=#z^c8ivp(2k^>E65>6MW@0HBfNN@ocNQd0PdXmv;9LK5cYO(C}UfBLT( zTW)<$DmuBB*7yclz5f1;OvDlm*k=E{A(>^%C^-I_EXT& zbJ;@2L5ZL-TT%~zO3439&rRoc-IlkYmpIOt_I%zG<|Fqk&VBwZ*`jzu# z*&=t_DYaQ5l-Hw|V5$q9-S!L28Ad z*)Y-I1facAlwBqPw%!jxYDcJ^M^_^v0KA)q?aw3$_UbHHr5zvNu{+culgu2@^MKQ# zH_kD(J*Rh*NaaE0^+T$FOF6f16GM$O(QRG&=SwQjfR(}-qehikx#V)2uXCr2kD#dy z(^RlgJ_&>M0e8u6GW9wDz%esg9a~+JOomBn@ASkn(&};rq(vC?x~GY%Hg}Lyp`OX@ zl1mn({>vEaC!)Pcgr0>G8`BtKL0s$Dkcgg>?5dHg0A5I(C1Der>+Fh z*@&2rU#4m~e+j9?8`4?Uv;?iuPIaxf`4tl#t+v~zQq{v2n>!c#N{UO8cW>m7wilQm zJm8gKXNE%AuU6&zc18H%G^bHC=CnTQHJ-MpY5Sh%4DeS4;$4y9$BC)7M9mnl&|%2L zpo3ZP_MNEWj~pDTjd+luo7ePSOw^Jmx?I*h0&%x>n4Kz5fR+d_a#25&PSNtJ zk2Wc-y>PNll&*w?FqqIr^UtMkAg0djQT$CfJN><>c6E_OIE#@@ zX`n-P)KDc!H#Rg}?D-uQ7WfR>NfU^BKiSI`*GXOJK{O7euFrf~!qmL;m0bXN*(Z7h{F< zPc#qmI{@=oFPCy9%3l}vVfW~74eG%R)pO}Jx99^qbsG>`PkPbM3f4I`+o3-TN5}xY z@(SSV5rKrhMTW*bNodSrR^VN2~u zAbXI8@39vGlGyM@uVC+vuK`I+F(6SkhEYqBEX?FSw;DO5%5(j&SS&^~2w1 z+Kbg(rp^D!mQtV0f1gvxG4=yc8(t%`d0VI5J9<1?H!NeQ0}XXf=PnUAoCQ95w=bMl z^>siI;dB6$hJgl!))++CcB8nYYYopo>J3*2hss+DqwF^LF45_7kh{!`V)G)$B%KTr zRwhO{6&Tz2>Rj~(uD9vW@UC3`(%-TF#yX-rrF>3*cG!D+nCphI?`IG{hG}Ujp5`e%H?W^yW{8fgzFqv=l7Bz%4m1hhumDk zr5dH4USL_Jo*pRuT+!;*ut*FSHNnnUX%l>n0r#2Fgl3$q&+Wc$Fu8kW(TmcW^NH<*cA%ww$Y_8|^O9kGR9o=cTZacedl zH*%M>RpX!QNqqWK#l`Eqt(KF5D0ZGFh7Br=pDV`r$n=t3gbOb!59+EGKl+xtLUdEj>FdQNE^k9l zWWw;3iv4Hy=Hiw=WtblX2TJ`W0``;|3Q!%VRkqP{_z1X#+?Fb6v<->ZQNygWTi?ARmoqi^q+CB=y?? zfGOB*-iih_bOs^IqtW|><}nl0XYHpY6ls{w79JfTl$6o}f0bkYoF$z*LqlFYrV*_l zS;U<%uh&RI1B=fTJ{T@7*P}-^HF@ZOQQu+Xd)eXI*fNc1n2bnzZ(T?Z{p!OzV)g@w zgNq#@5xE1c7hR8*?(^b4zV;nx+?iog*%hE8O3GhY8fh;dT z?5wmjEFGHi~;cG*8 zZ!mWuOw_clYpRDK%Eencm4c}wvrZ*U&&?Ixc{^V8ZQR>*7`im_CF%<+9z-^g112Tq zScyiOsc~U?o^~RT(2~rVPeXSV1@tCFY(#%-)(FV-ccq6`Ha_b3C+b0QA4hs%3(_*; z-upKSm&^(7HF_VI7Lo|j>Jed{y;UjQ@WAu5Z#1u+7_eRaOj&m1WF{%3=y?B<;+lLY zSe^-awPz z*m;WHHLUnO7t{ozU?-_K%kZPCo{`qPSIJb(cIR2W?dqOvDRs)~)c!w?p7(0R5=pvvim1uAuw&+p}Gn zT6k89IiE)@bq>_W=W&xO^@c|36`HNHM)G1GC0z!KD?^;uV)V5E6g_A_`tkQN%wr-_ z0f-O<8Xp73vCNOFs{v2k`3}}CrR4ls;Mh?M=6^a%ePK+tGTa?Rg#{L z&DyO}6&{6RC0bJdI{kkUnNGDF;dB{ml!e9KSqJlo8iv0fV$&R7buKVdBUV^ZHCt6_ z2{kWw8b0uI-?{i=WCMebn?`Gax#lmr0$SIW%qPy#oTCkQ;KCZ>o0|s@W?7U8*Wm{F zm4?WOw0K$Wi`lA`xFwqcf^^%xdy=u1xdWFIG86(+mQ44f|&I=uocL8gmd!EJciBb(y zSj)vcolB4H=96!Egx!-#+0!}LbC&8$!;DDEqa_uX(+p+OO(~Sgq%vrmqyY2PfN=aem^5bcnj1hQ(~klfI_+Czh0Ma5xY@VSWm)Vr zXo!1;c0(gc_4`C^!G)@o%9{I z$di#a1QJ1E-%CHzDLlTl+f>0w{=*3%Nv)@$; zU(8JKx4ukPzBL2pgW_rZQxPd6i8-TR@?!n9#yI_oC=StcDgg<(2;nmXX1HM!<=b35 zs~hFz3ZimO`1{YfTLn~M%eimu6wvLPZtAdmSy@A|e>u>8}F&NJ5=L$yjCG53$Y1OD-6 z^(t<(fIU)+a|PFw9cKEEHUBgs`Yw+MbaF}S7a76FEH3}mN3K-9s9fj#$W%HZvF>we zcm8ItY2Nv>7Ll_XAo}Yf2|fm@#O>>{oJY;Z(mHOIyTh-%>Wf=&Y`m^F!o8V1CC}>~ zLMAg&GG%Q~45WFXlMhN>YVe=Ulj=&(?hfVKn`Ka5Joj5sK$0tCn!@Hnd|+3bmAg`> z`ze+5(N6rA@vN4;t2giaKdj84N%7-k!a_S6FnIGz;EgdW-3r@pd(=(VFaU;x&9sQE z6ekTX!Et^&hS(E!$r^U^4oO6#*g?uOL+Nwlw2kg%!t(b=u4|SmJRw;~PkeaH%dWe? z#uu!xn3xSiu6z%ulybPTmaVfc??W5^_Dqf#>Af?)rF&YR26@UfX->wk=f& zl?nOQSLzkQQ}CV1qrEJf;nxSf3x9o`N({TVE3+7huR6IP z)zs?3`#+T|;OTiNgz9{2u0m`?uqOg%gX7G$ivLtM9;GH-bo4^hcvVv3+t7Ckybwt3 zNzum21xZVBy?VlF_&S|k?rUg`#Qb+IvZ(EYwEECS=h-ez;OTt@XBo8geFYCRF}2l= z&7HSsgn_Lu`Np3aO^quqlds7EC;`gm)tUYrEL^1=6A@{&*?SL=FdU{ZC6@pStzIa^l?igihWt zV+o1h*;&5Lr})%%^i7MT8Hkg*qs3CuXX1&iIAi}1y_0m_6i558Da?rpJIZ-X$zBMC zFXOBFVs$Flv+(b7UL|3tc4Q(9WiKsUNO~zGZ8A{VU;N(t&jrNn_cI6mIxyu)ZKLn; zBIeGmA6%)6qd!O)5xgkj{aNrLN{7o_%1YtQ8b8I{hd${hMfF_{x^p|-REdYU(<@e%rC>aJK<1WwO zN3cl5^eVeL3Jia{h)!NPtDST z9!DYZs?DiPO@%f7C;Vjx)lGx1UWX2Ky8tv1A;@Y#q(F;gHTr@f%fdv6-W6l4g-am) z5Rwcr|pB8%$7lRuhqA`MHI8&ogJy4$9Hp)4*-3bH=>Tc;Yy ztKn0!7>Eg36Da$-vCE+H2Pv&ue)_lo{D~0~1qzQka(TtI!wKK7YxadlTj?Z+(`LOM z!ocQ|s%wJGxjrGCfUNfD;$xKI``3r2VO`vP9?yFtWFqb%A)yybZ4@?difI3Y-+Vhi zWUu}HY|68{oXBCpnPR`Vr*n_}z9#*E$`-wMop$(e5ToivdryltMjq3t6L}?KJvKM@ zZy<7B!>@>tru09e)>B_DzLM(8S({j_i0diDRL`z?giWVSsNfPhu|2jq75|L6p!X$W zPyo>NTRvXk%3|d;Qf)#I9l_|5H4Fro17#<3YTD9UU)mCr7MCoaQoJI+3dG2lVLSJ~ zg*{W8SCW2xQX}uTz!&iArO%n`CUh@+^1X_xlE;m#j4M5f^?dc>{n(qj!mE*Ne+STB$lK!deTT z%F*-+vsx&e$fBcpRPkQ;gAHq9leVadI=&=x4Yg!BDw^?Cx|_!r(w}Kh7w*-nT34Jy zDEwR7RJT2}lDx9*?F`?--E&l)nyXE#U-K*nTR#o8%d21JX#M>-WBlFc#@o#EJC({e z^2~eM6S1FqV$Bs+nq7fVIB2-~ZVC>QtS~4pAYq;t9vj82#yAcO!&r-Sy&GJxd!EM$ zquJ1U6#A45ae(7$m-5yBQBh6+CPV!fH-xfMcKKFm{wM}Teb}&VNt^#kSkb9bm}mY1BMnKJi4f%My*p!t|NK6MN{q9C`3Tq21guBH=NP77x9g4P{>o z59wv|r*15&62DY%NlJ>&{8Vl*M&%H0!E4oe69A*eXE7lA?Wu(0S?_lOIDBe!OiALE zcAXe)K@E5G(znOc*G5$=n0PeqPth!0m>ce*v^UG&V74Evs*545JvD#ERpGd-_v1Gg0jg8$N1yf1ETImUC z-S#sowmBKgkVrOkXmdE}gXqSfh&?X+ajyI1O+Z#yl3lE`Ryy|kF%}H)i{&1!_~Xa> z7xRmwXUk6%>Yn8-{dIavSU7+#BW>MA*hNhe%B7l~9klXlsr4f!vfphKEOUfw+xlEv z-P5g@ZGj5cS}Mj*@5XWSe0==tf$r6-rS)9)qLu}6@2($4aa*^;(z7UYRD$X0K>>I! z)$`rDp{6Ghy^*jDfQE)x6Lk|l#|b5)`oZpuNY&r2;c?Mtlp>qMu^^Uj_SWdS)%MtY zUE!1;vX*!SySAYwNuEuAMQ8jdp%oVjq4V16f#P#Nmq(Z6>3~eG?{2q>y`65KnXMgv zyZf*Qh8T<$rhYMaeZc5>g$4A^6pD9&Mc2+kni?OpN5Sy%9C*%oI34f8*#1md1^Nn0 zU7?1J>;ry-wZXE2*qYq@nj+eJH4fNE-%BfQ&hsOhzIgInmiyve{Oqsohm;<%t09@^ z>(BjEeUEAvy{G~)`7{alYk?*kjLV_`qenvm!zy)FCql*c#(7uEzAgSt8SJyVi~NXZ zoT8C=F;EgXa$$c1P;la9u62S$ntDfK)EZaFU8IGc&*8%HX~(=*6(;w<7Zk`4$az5~ zG~h2H$)%N&5|t~7dHy(wsT0mt_O@kdoFJZ}TpTXW!%J%ge`-*gNIR~jW6XBWsGQMA z7-ZhqzI!J}Raz63Zb!9)PLphx~UACzY;aC@6-Pz>HOo{Cn8_pl?S$Fk*X#1^;1i*Y{`<&`%h zg=FtkTYW!x;jvo~@XI9j_Cat)7;f#Qu*d4f%(;-PwEH3D>xSIb-Hmvou{Fmtv&dTMbItf(%VP*|x5&osn|mW^T1nNG48m8Xj< zUHZYL`lZ9=C^{^u%3(AKcI-d{zafb##h%NR_Wc=~1hmVH_Jk+7(7-pqnc~*Tv25J+ zQ61~DWSws|tmtlp2)&hS*3S45@ET

      oNb6x<|QEC$tG=?!olu2S6l)CC3D|npXaR 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

      CgZ4V8|}3I6SpQ_~M+Xms){j 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�VskcDlPu!=BR(Z6_J|~C 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%0AO-CCB_{)1w%N2Aiq-Tjbiv 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%0AYns|?u1_SWs)BW2Xn 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�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

      -1$`JV`w9#q~9WLbV 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 z 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

      ?mgOmRK&6-0N5)??S;0K?^x4ht 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%0Dd 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 diff --git a/html/newuserpost.php b/html/newuserpost.php deleted file mode 100644 index b3dad45..0000000 --- a/html/newuserpost.php +++ /dev/null @@ -1,42 +0,0 @@ - - - - - $salt, "encrypted" => $encrypted); - return $hash; - } - $passwordHash = HashPassword($_POST['realpassword']); - $passwordSalt = $passwordHash['salt']; - $passwordEncrypted = $passwordHash['encrypted']; - $query = "insert into user_account - set - username = '".$mysqli->real_escape_string($_POST['useraccountname'])."', - password_hash = '".$mysqli->real_escape_string($passwordEncrypted)."', - password_salt = '".$mysqli->real_escape_string($passwordSalt)."', - accesslevel = '".$mysqli->real_escape_string($_POST['accesslevel'])."'"; - - if( $mysqli->query($query) ) { - echo ''; - } - else { - printf($mysqli->error); - } - $mysqli->close(); -} -?> - diff --git a/html/stylesheet.css b/html/stylesheet.css deleted file mode 100644 index 2382766..0000000 --- a/html/stylesheet.css +++ /dev/null @@ -1,4 +0,0 @@ -body { font-family: arial, "gill-sans" } -body { text-align: center } -h1 { text-transform: uppercase } -h2 { font-family: arial; color: white } diff --git a/html/test.php b/html/test.php deleted file mode 100644 index 147cebc..0000000 --- a/html/test.php +++ /dev/null @@ -1 +0,0 @@ - diff --git a/init.sql b/init.sql new file mode 100644 index 0000000..0324a4b --- /dev/null +++ b/init.sql @@ -0,0 +1,50 @@ +CREATE DATABASE swgusers; +USE swgusers; + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `user_account` +-- + +DROP TABLE IF EXISTS `user_account`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_account` ( + `user_id` int(11) NOT NULL AUTO_INCREMENT, + `accesslevel` varchar(255) NOT NULL, + `username` varchar(255) NOT NULL, + `password_salt` varchar(255) NOT NULL, + `password_hash` varchar(255) NOT NULL, + UNIQUE KEY `user_id` (`user_id`), + UNIQUE KEY `username` (`username`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_account` +-- + +LOCK TABLES `user_account` WRITE; +/*!40000 ALTER TABLE `user_account` DISABLE KEYS */; + +/*!40000 ALTER TABLE `user_account` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5ae8d14 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,594 @@ +{ + "name": "swg-site", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "bignumber.js": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.4.tgz", + "integrity": "sha512-LDXpJKVzEx2/OqNbG9mXBNvHuiRL4PzHCGfnANHMJ+fv68Ads3exDVJeGDJws+AoNEuca93bU3q+S0woeUaCdg==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "discord.js": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.3.2.tgz", + "integrity": "sha512-Abw9CTMX3Jb47IeRffqx2VNSnXl/OsTdQzhvbw/JnqCyqc2imAocc7pX2HoRmgKd8CgSqsjBFBneusz/E16e6A==", + "requires": { + "long": "^4.0.0", + "prism-media": "^0.0.2", + "snekfetch": "^3.6.4", + "tweetnacl": "^1.0.0", + "ws": "^4.0.0" + } + }, + "dotenv": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz", + "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.0.tgz", + "integrity": "sha1-huYybSnF0Dnen6xYSkVon5KfT3I=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "moment": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mysql": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.15.0.tgz", + "integrity": "sha512-C7tjzWtbN5nzkLIV+E8Crnl9bFyc7d3XJcBAvHKEVkjrYjogz3llo22q6s/hw+UcsE4/844pDob9ac+3dVjQSA==", + "requires": { + "bignumber.js": "4.0.4", + "readable-stream": "2.3.3", + "safe-buffer": "5.1.1", + "sqlstring": "2.3.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + } + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "prism-media": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.2.tgz", + "integrity": "sha512-L6yc8P5NVG35ivzvfI7bcTYzqFV+K8gTfX9YaJbmIFfMXTs71RMnAupvTQPTCteGsiOy9QcNLkQyWjAafY/hCQ==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "snekfetch": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", + "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" + }, + "sqlstring": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.0.tgz", + "integrity": "sha1-UluKT9Jtb3GqYegipsr5dtMa0qg=" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "timediff": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/timediff/-/timediff-1.1.1.tgz", + "integrity": "sha1-ZkN6+bCUAicR596FDssAqfNAfTg=", + "requires": { + "moment": "^2.9.0" + } + }, + "tweetnacl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", + "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0d7232b --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "swg-site", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "", + "url": "" + }, + "author": "", + "license": "ISC", + "homepage": "", + "dependencies": { + "body-parser": "^1.18.3", + "crypto": "^1.0.1", + "discord.js": "^11.3.2", + "dotenv": "^6.0.0", + "express": "^4.16.3", + "http": "0.0.0", + "mysql": "^2.15.0", + "path": "^0.12.7", + "timediff": "^1.1.1" + } +} diff --git a/public/Content/bootstrap-theme.css b/public/Content/bootstrap-theme.css new file mode 100644 index 0000000..31d8882 --- /dev/null +++ b/public/Content/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/public/Content/bootstrap-theme.css.map b/public/Content/bootstrap-theme.css.map new file mode 100644 index 0000000..d876f60 --- /dev/null +++ b/public/Content/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/public/Content/bootstrap-theme.min.css b/public/Content/bootstrap-theme.min.css new file mode 100644 index 0000000..5e39401 --- /dev/null +++ b/public/Content/bootstrap-theme.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} +/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/public/Content/bootstrap-theme.min.css.map b/public/Content/bootstrap-theme.min.css.map new file mode 100644 index 0000000..94813e9 --- /dev/null +++ b/public/Content/bootstrap-theme.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/public/Content/bootstrap.css b/public/Content/bootstrap.css new file mode 100644 index 0000000..d919b97 --- /dev/null +++ b/public/Content/bootstrap.css @@ -0,0 +1,7022 @@ +@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic"); +/*! + * bootswatch v3.3.7 + * Homepage: http://bootswatch.com + * Copyright 2012-2016 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*/ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 15px; + line-height: 1.42857143; + color: #2c3e50; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #18bc9c; + text-decoration: none; +} +a:hover, +a:focus { + color: #18bc9c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #ecf0f1; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 21px; + margin-bottom: 21px; + border: 0; + border-top: 1px solid #ecf0f1; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 400; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #b4bcc2; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 21px; + margin-bottom: 10.5px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10.5px; + margin-bottom: 10.5px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 39px; +} +h2, +.h2 { + font-size: 32px; +} +h3, +.h3 { + font-size: 26px; +} +h4, +.h4 { + font-size: 19px; +} +h5, +.h5 { + font-size: 15px; +} +h6, +.h6 { + font-size: 13px; +} +p { + margin: 0 0 10.5px; +} +.lead { + margin-bottom: 21px; + font-size: 17px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 22.5px; + } +} +small, +.small { + font-size: 86%; +} +mark, +.mark { + background-color: #f39c12; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #b4bcc2; +} +.text-primary { + color: #2c3e50; +} +a.text-primary:hover, +a.text-primary:focus { + color: #1a242f; +} +.text-success { + color: #ffffff; +} +a.text-success:hover, +a.text-success:focus { + color: #e6e6e6; +} +.text-info { + color: #ffffff; +} +a.text-info:hover, +a.text-info:focus { + color: #e6e6e6; +} +.text-warning { + color: #ffffff; +} +a.text-warning:hover, +a.text-warning:focus { + color: #e6e6e6; +} +.text-danger { + color: #ffffff; +} +a.text-danger:hover, +a.text-danger:focus { + color: #e6e6e6; +} +.bg-primary { + color: #fff; + background-color: #2c3e50; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #1a242f; +} +.bg-success { + background-color: #18bc9c; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #128f76; +} +.bg-info { + background-color: #3498db; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #217dbb; +} +.bg-warning { + background-color: #f39c12; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #c87f0a; +} +.bg-danger { + background-color: #e74c3c; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #d62c1a; +} +.page-header { + padding-bottom: 9.5px; + margin: 42px 0 21px; + border-bottom: 1px solid transparent; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10.5px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 21px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #b4bcc2; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10.5px 21px; + margin: 0 0 21px; + font-size: 18.75px; + border-left: 5px solid #ecf0f1; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #b4bcc2; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #ecf0f1; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 21px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 10px; + margin: 0 0 10.5px; + font-size: 14px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #7b8a8b; + background-color: #ecf0f1; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #b4bcc2; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 21px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ecf0f1; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ecf0f1; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ecf0f1; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ecf0f1; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ecf0f1; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #ecf0f1; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #ecf0f1; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #dde4e6; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #18bc9c; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #15a589; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #3498db; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #258cd1; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #f39c12; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #e08e0b; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #e74c3c; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #e43725; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15.75px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ecf0f1; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 21px; + font-size: 22.5px; + line-height: inherit; + color: #2c3e50; + border: 0; + border-bottom: 1px solid transparent; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 11px; + font-size: 15px; + line-height: 1.42857143; + color: #2c3e50; +} +.form-control { + display: block; + width: 100%; + height: 45px; + padding: 10px 15px; + font-size: 15px; + line-height: 1.42857143; + color: #2c3e50; + background-color: #ffffff; + background-image: none; + border: 1px solid #dce4ec; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #2c3e50; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(44, 62, 80, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(44, 62, 80, 0.6); +} +.form-control::-moz-placeholder { + color: #acb6c0; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #acb6c0; +} +.form-control::-webkit-input-placeholder { + color: #acb6c0; +} +.form-control::-ms-expand { + border: 0; + background-color: transparent; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #ecf0f1; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 45px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 35px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 66px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 21px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 11px; + padding-bottom: 11px; + margin-bottom: 0; + min-height: 36px; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 35px; + padding: 6px 9px; + font-size: 13px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 35px; + line-height: 35px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 35px; + padding: 6px 9px; + font-size: 13px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 35px; + line-height: 35px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 35px; + min-height: 34px; + padding: 7px 9px; + font-size: 13px; + line-height: 1.5; +} +.input-lg { + height: 66px; + padding: 18px 27px; + font-size: 19px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 66px; + line-height: 66px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 66px; + padding: 18px 27px; + font-size: 19px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 66px; + line-height: 66px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 66px; + min-height: 40px; + padding: 19px 27px; + font-size: 19px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 56.25px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 45px; + height: 45px; + line-height: 45px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 66px; + height: 66px; + line-height: 66px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 35px; + height: 35px; + line-height: 35px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #ffffff; +} +.has-success .form-control { + border-color: #ffffff; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #e6e6e6; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; +} +.has-success .input-group-addon { + color: #ffffff; + border-color: #ffffff; + background-color: #18bc9c; +} +.has-success .form-control-feedback { + color: #ffffff; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #ffffff; +} +.has-warning .form-control { + border-color: #ffffff; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #e6e6e6; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; +} +.has-warning .input-group-addon { + color: #ffffff; + border-color: #ffffff; + background-color: #f39c12; +} +.has-warning .form-control-feedback { + color: #ffffff; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #ffffff; +} +.has-error .form-control { + border-color: #ffffff; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #e6e6e6; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; +} +.has-error .input-group-addon { + color: #ffffff; + border-color: #ffffff; + background-color: #e74c3c; +} +.has-error .form-control-feedback { + color: #ffffff; +} +.has-feedback label ~ .form-control-feedback { + top: 26px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #597ea2; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 11px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 32px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 11px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 19px; + font-size: 19px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 7px; + font-size: 13px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 10px 15px; + font-size: 15px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #ffffff; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #ffffff; + background-color: #95a5a6; + border-color: #95a5a6; +} +.btn-default:focus, +.btn-default.focus { + color: #ffffff; + background-color: #798d8f; + border-color: #566566; +} +.btn-default:hover { + color: #ffffff; + background-color: #798d8f; + border-color: #74898a; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #ffffff; + background-color: #798d8f; + border-color: #74898a; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #ffffff; + background-color: #687b7c; + border-color: #566566; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #95a5a6; + border-color: #95a5a6; +} +.btn-default .badge { + color: #95a5a6; + background-color: #ffffff; +} +.btn-primary { + color: #ffffff; + background-color: #2c3e50; + border-color: #2c3e50; +} +.btn-primary:focus, +.btn-primary.focus { + color: #ffffff; + background-color: #1a242f; + border-color: #000000; +} +.btn-primary:hover { + color: #ffffff; + background-color: #1a242f; + border-color: #161f29; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #1a242f; + border-color: #161f29; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #ffffff; + background-color: #0d1318; + border-color: #000000; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #2c3e50; + border-color: #2c3e50; +} +.btn-primary .badge { + color: #2c3e50; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #18bc9c; + border-color: #18bc9c; +} +.btn-success:focus, +.btn-success.focus { + color: #ffffff; + background-color: #128f76; + border-color: #0a4b3e; +} +.btn-success:hover { + color: #ffffff; + background-color: #128f76; + border-color: #11866f; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #128f76; + border-color: #11866f; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #ffffff; + background-color: #0e6f5c; + border-color: #0a4b3e; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #18bc9c; + border-color: #18bc9c; +} +.btn-success .badge { + color: #18bc9c; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #3498db; + border-color: #3498db; +} +.btn-info:focus, +.btn-info.focus { + color: #ffffff; + background-color: #217dbb; + border-color: #16527a; +} +.btn-info:hover { + color: #ffffff; + background-color: #217dbb; + border-color: #2077b2; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #217dbb; + border-color: #2077b2; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #ffffff; + background-color: #1c699d; + border-color: #16527a; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #3498db; + border-color: #3498db; +} +.btn-info .badge { + color: #3498db; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-warning:focus, +.btn-warning.focus { + color: #ffffff; + background-color: #c87f0a; + border-color: #7f5006; +} +.btn-warning:hover { + color: #ffffff; + background-color: #c87f0a; + border-color: #be780a; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #c87f0a; + border-color: #be780a; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #ffffff; + background-color: #a66908; + border-color: #7f5006; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f39c12; + border-color: #f39c12; +} +.btn-warning .badge { + color: #f39c12; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-danger:focus, +.btn-danger.focus { + color: #ffffff; + background-color: #d62c1a; + border-color: #921e12; +} +.btn-danger:hover { + color: #ffffff; + background-color: #d62c1a; + border-color: #cd2a19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #d62c1a; + border-color: #cd2a19; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #ffffff; + background-color: #b62516; + border-color: #921e12; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-danger .badge { + color: #e74c3c; + background-color: #ffffff; +} +.btn-link { + color: #18bc9c; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #18bc9c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #b4bcc2; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 18px 27px; + font-size: 19px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 6px 9px; + font-size: 13px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 13px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 15px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #7b8a8b; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #ffffff; + background-color: #2c3e50; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #2c3e50; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #b4bcc2; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 13px; + line-height: 1.42857143; + color: #b4bcc2; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 66px; + padding: 18px 27px; + font-size: 19px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 66px; + line-height: 66px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 35px; + padding: 6px 9px; + font-size: 13px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 35px; + line-height: 35px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 10px 15px; + font-size: 15px; + font-weight: normal; + line-height: 1; + color: #2c3e50; + text-align: center; + background-color: #ecf0f1; + border: 1px solid #dce4ec; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 6px 9px; + font-size: 13px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 18px 27px; + font-size: 19px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #ecf0f1; +} +.nav > li.disabled > a { + color: #b4bcc2; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #b4bcc2; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #ecf0f1; + border-color: #18bc9c; +} +.nav .nav-divider { + height: 1px; + margin: 9.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ecf0f1; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #ecf0f1 #ecf0f1 #ecf0f1; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #2c3e50; + background-color: #ffffff; + border: 1px solid #ecf0f1; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ecf0f1; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ecf0f1; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #2c3e50; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ecf0f1; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ecf0f1; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 60px; + margin-bottom: 21px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 19.5px 15px; + font-size: 19px; + line-height: 21px; + height: 60px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 13px; + margin-bottom: 13px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 9.75px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 21px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 21px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 19.5px; + padding-bottom: 19.5px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 7.5px; + margin-bottom: 7.5px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 7.5px; + margin-bottom: 7.5px; +} +.navbar-btn.btn-sm { + margin-top: 12.5px; + margin-bottom: 12.5px; +} +.navbar-btn.btn-xs { + margin-top: 19px; + margin-bottom: 19px; +} +.navbar-text { + margin-top: 19.5px; + margin-bottom: 19.5px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #2c3e50; + border-color: transparent; +} +.navbar-default .navbar-brand { + color: #ffffff; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #18bc9c; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #ffffff; +} +.navbar-default .navbar-nav > li > a { + color: #ffffff; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #18bc9c; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #1a242f; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #1a242f; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #1a242f; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: transparent; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #1a242f; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #ffffff; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #18bc9c; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #1a242f; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #ffffff; +} +.navbar-default .navbar-link:hover { + color: #18bc9c; +} +.navbar-default .btn-link { + color: #ffffff; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #18bc9c; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #18bc9c; + border-color: transparent; +} +.navbar-inverse .navbar-brand { + color: #ffffff; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #2c3e50; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #ffffff; +} +.navbar-inverse .navbar-nav > li > a { + color: #ffffff; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #2c3e50; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #15a589; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #128f76; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #128f76; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #149c82; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #15a589; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #ffffff; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #2c3e50; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #15a589; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #ffffff; +} +.navbar-inverse .navbar-link:hover { + color: #2c3e50; +} +.navbar-inverse .btn-link { + color: #ffffff; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #2c3e50; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #cccccc; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 21px; + list-style: none; + background-color: #ecf0f1; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #cccccc; +} +.breadcrumb > .active { + color: #95a5a6; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 21px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 10px 15px; + line-height: 1.42857143; + text-decoration: none; + color: #ffffff; + background-color: #18bc9c; + border: 1px solid transparent; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #ffffff; + background-color: #0f7864; + border-color: transparent; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #ffffff; + background-color: #0f7864; + border-color: transparent; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #ecf0f1; + background-color: #3be6c4; + border-color: transparent; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 18px 27px; + font-size: 19px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 6px 9px; + font-size: 13px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 21px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #18bc9c; + border: 1px solid transparent; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #0f7864; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #ffffff; + background-color: #18bc9c; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #95a5a6; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #798d8f; +} +.label-primary { + background-color: #2c3e50; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #1a242f; +} +.label-success { + background-color: #18bc9c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #128f76; +} +.label-info { + background-color: #3498db; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #217dbb; +} +.label-warning { + background-color: #f39c12; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #c87f0a; +} +.label-danger { + background-color: #e74c3c; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #d62c1a; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 13px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #2c3e50; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #2c3e50; + background-color: #ffffff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #ecf0f1; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 23px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #cfd9db; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; + padding-left: 15px; + padding-right: 15px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 68px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 21px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #ecf0f1; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #18bc9c; +} +.thumbnail .caption { + padding: 9px; + color: #2c3e50; +} +.alert { + padding: 15px; + margin-bottom: 21px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #18bc9c; + border-color: #18bc9c; + color: #ffffff; +} +.alert-success hr { + border-top-color: #15a589; +} +.alert-success .alert-link { + color: #e6e6e6; +} +.alert-info { + background-color: #3498db; + border-color: #3498db; + color: #ffffff; +} +.alert-info hr { + border-top-color: #258cd1; +} +.alert-info .alert-link { + color: #e6e6e6; +} +.alert-warning { + background-color: #f39c12; + border-color: #f39c12; + color: #ffffff; +} +.alert-warning hr { + border-top-color: #e08e0b; +} +.alert-warning .alert-link { + color: #e6e6e6; +} +.alert-danger { + background-color: #e74c3c; + border-color: #e74c3c; + color: #ffffff; +} +.alert-danger hr { + border-top-color: #e43725; +} +.alert-danger .alert-link { + color: #e6e6e6; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 21px; + margin-bottom: 21px; + background-color: #ecf0f1; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 13px; + line-height: 21px; + color: #ffffff; + text-align: center; + background-color: #2c3e50; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #18bc9c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #3498db; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f39c12; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #e74c3c; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + zoom: 1; + overflow: hidden; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #ecf0f1; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #ecf0f1; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #ecf0f1; + color: #b4bcc2; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #b4bcc2; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #2c3e50; + border-color: #2c3e50; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #8aa4be; +} +.list-group-item-success { + color: #ffffff; + background-color: #18bc9c; +} +a.list-group-item-success, +button.list-group-item-success { + color: #ffffff; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #ffffff; + background-color: #15a589; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #ffffff; + border-color: #ffffff; +} +.list-group-item-info { + color: #ffffff; + background-color: #3498db; +} +a.list-group-item-info, +button.list-group-item-info { + color: #ffffff; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #ffffff; + background-color: #258cd1; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #ffffff; + border-color: #ffffff; +} +.list-group-item-warning { + color: #ffffff; + background-color: #f39c12; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #ffffff; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #ffffff; + background-color: #e08e0b; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #ffffff; + border-color: #ffffff; +} +.list-group-item-danger { + color: #ffffff; + background-color: #e74c3c; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #ffffff; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #ffffff; + background-color: #e43725; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #ffffff; + border-color: #ffffff; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 21px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 17px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #ecf0f1; + border-top: 1px solid #ecf0f1; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ecf0f1; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 21px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ecf0f1; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ecf0f1; +} +.panel-default { + border-color: #ecf0f1; +} +.panel-default > .panel-heading { + color: #2c3e50; + background-color: #ecf0f1; + border-color: #ecf0f1; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ecf0f1; +} +.panel-default > .panel-heading .badge { + color: #ecf0f1; + background-color: #2c3e50; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ecf0f1; +} +.panel-primary { + border-color: #2c3e50; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #2c3e50; + border-color: #2c3e50; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #2c3e50; +} +.panel-primary > .panel-heading .badge { + color: #2c3e50; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #2c3e50; +} +.panel-success { + border-color: #18bc9c; +} +.panel-success > .panel-heading { + color: #ffffff; + background-color: #18bc9c; + border-color: #18bc9c; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #18bc9c; +} +.panel-success > .panel-heading .badge { + color: #18bc9c; + background-color: #ffffff; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #18bc9c; +} +.panel-info { + border-color: #3498db; +} +.panel-info > .panel-heading { + color: #ffffff; + background-color: #3498db; + border-color: #3498db; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #3498db; +} +.panel-info > .panel-heading .badge { + color: #3498db; + background-color: #ffffff; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #3498db; +} +.panel-warning { + border-color: #f39c12; +} +.panel-warning > .panel-heading { + color: #ffffff; + background-color: #f39c12; + border-color: #f39c12; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #f39c12; +} +.panel-warning > .panel-heading .badge { + color: #f39c12; + background-color: #ffffff; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #f39c12; +} +.panel-danger { + border-color: #e74c3c; +} +.panel-danger > .panel-heading { + color: #ffffff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #e74c3c; +} +.panel-danger > .panel-heading .badge { + color: #e74c3c; + background-color: #ffffff; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #e74c3c; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #ecf0f1; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 22.5px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: none; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 20px; +} +.modal-footer { + padding: 20px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 13px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + background-color: #000000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 15px; + background-color: #ffffff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 15px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #ffffff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #ffffff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +.navbar { + border-width: 0; +} +.navbar-default .badge { + background-color: #fff; + color: #2c3e50; +} +.navbar-inverse .badge { + background-color: #fff; + color: #18bc9c; +} +.navbar-brand { + line-height: 1; +} +.btn { + border-width: 2px; +} +.btn:active { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: none; + box-shadow: none; +} +.text-primary, +.text-primary:hover { + color: #2c3e50; +} +.text-success, +.text-success:hover { + color: #18bc9c; +} +.text-danger, +.text-danger:hover { + color: #e74c3c; +} +.text-warning, +.text-warning:hover { + color: #f39c12; +} +.text-info, +.text-info:hover { + color: #3498db; +} +table a:not(.btn), +.table a:not(.btn) { + text-decoration: underline; +} +table .dropdown-menu a, +.table .dropdown-menu a { + text-decoration: none; +} +table .success, +.table .success, +table .warning, +.table .warning, +table .danger, +.table .danger, +table .info, +.table .info { + color: #fff; +} +table .success > th > a, +.table .success > th > a, +table .warning > th > a, +.table .warning > th > a, +table .danger > th > a, +.table .danger > th > a, +table .info > th > a, +.table .info > th > a, +table .success > td > a, +.table .success > td > a, +table .warning > td > a, +.table .warning > td > a, +table .danger > td > a, +.table .danger > td > a, +table .info > td > a, +.table .info > td > a, +table .success > a, +.table .success > a, +table .warning > a, +.table .warning > a, +table .danger > a, +.table .danger > a, +table .info > a, +.table .info > a { + color: #fff; +} +table > thead > tr > th, +.table > thead > tr > th, +table > tbody > tr > th, +.table > tbody > tr > th, +table > tfoot > tr > th, +.table > tfoot > tr > th, +table > thead > tr > td, +.table > thead > tr > td, +table > tbody > tr > td, +.table > tbody > tr > td, +table > tfoot > tr > td, +.table > tfoot > tr > td { + border: none; +} +table-bordered > thead > tr > th, +.table-bordered > thead > tr > th, +table-bordered > tbody > tr > th, +.table-bordered > tbody > tr > th, +table-bordered > tfoot > tr > th, +.table-bordered > tfoot > tr > th, +table-bordered > thead > tr > td, +.table-bordered > thead > tr > td, +table-bordered > tbody > tr > td, +.table-bordered > tbody > tr > td, +table-bordered > tfoot > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ecf0f1; +} +.form-control, +input { + border-width: 2px; + -webkit-box-shadow: none; + box-shadow: none; +} +.form-control:focus, +input:focus { + -webkit-box-shadow: none; + box-shadow: none; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label, +.has-warning .form-control-feedback { + color: #f39c12; +} +.has-warning .form-control, +.has-warning .form-control:focus { + border: 2px solid #f39c12; +} +.has-warning .input-group-addon { + border-color: #f39c12; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label, +.has-error .form-control-feedback { + color: #e74c3c; +} +.has-error .form-control, +.has-error .form-control:focus { + border: 2px solid #e74c3c; +} +.has-error .input-group-addon { + border-color: #e74c3c; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label, +.has-success .form-control-feedback { + color: #18bc9c; +} +.has-success .form-control, +.has-success .form-control:focus { + border: 2px solid #18bc9c; +} +.has-success .input-group-addon { + border-color: #18bc9c; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + border-color: transparent; +} +.pager a, +.pager a:hover { + color: #fff; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + background-color: #3be6c4; +} +.close { + color: #fff; + text-decoration: none; + opacity: 0.4; +} +.close:hover, +.close:focus { + color: #fff; + opacity: 1; +} +.alert .alert-link { + color: #fff; + text-decoration: underline; +} +.progress { + height: 10px; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress .progress-bar { + font-size: 10px; + line-height: 10px; +} +.well { + -webkit-box-shadow: none; + box-shadow: none; +} +a.list-group-item.active, +a.list-group-item.active:hover, +a.list-group-item.active:focus { + border-color: #ecf0f1; +} +a.list-group-item-success.active { + background-color: #18bc9c; +} +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + background-color: #15a589; +} +a.list-group-item-warning.active { + background-color: #f39c12; +} +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + background-color: #e08e0b; +} +a.list-group-item-danger.active { + background-color: #e74c3c; +} +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + background-color: #e43725; +} +.panel-default .close { + color: #2c3e50; +} +.modal .close { + color: #2c3e50; +} +.popover { + color: #2c3e50; +} diff --git a/public/Content/bootstrap.css.map b/public/Content/bootstrap.css.map new file mode 100644 index 0000000..f010c82 --- /dev/null +++ b/public/Content/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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AW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;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ukDH;AexkDC;EACE,oBAAA;Cf0kDH;Ae3kDC;EACE,WAAA;Cf6kDH;Ae9kDC;EACE,oBAAA;CfglDH;AejlDC;EACE,mBAAA;CfmlDH;Ae/kDC;EACE,YAAA;CfilDH;AejmDC;EACE,WAAA;CfmmDH;AepmDC;EACE,mBAAA;CfsmDH;AevmDC;EACE,mBAAA;CfymDH;Ae1mDC;EACE,UAAA;Cf4mDH;Ae7mDC;EACE,mBAAA;Cf+mDH;AehnDC;EACE,mBAAA;CfknDH;AennDC;EACE,UAAA;CfqnDH;AetnDC;EACE,mBAAA;CfwnDH;AeznDC;EACE,mBAAA;Cf2nDH;Ae5nDC;EACE,UAAA;Cf8nDH;Ae/nDC;EACE,mBAAA;CfioDH;AeloDC;EACE,kBAAA;CfooDH;AehoDC;EACE,WAAA;CfkoDH;AepnDC;EACE,kBAAA;CfsnDH;AevnDC;EACE,0BAAA;CfynDH;Ae1nDC;EACE,0BAAA;Cf4nDH;Ae7nDC;EACE,iBAAA;Cf+nDH;AehoDC;EACE,0BAAA;CfkoDH;AenoDC;EACE,0BAAA;CfqoDH;AetoDC;EACE,iBAAA;CfwoDH;AezoDC;EACE,0BAAA;Cf2oDH;Ae5oDC;EACE,0BAAA;Cf8oDH;Ae/oDC;EACE,iBAAA;CfipDH;AelpDC;EACE,0BAAA;CfopDH;AerpDC;EACE,yBAAA;CfupDH;AexpDC;EACE,gBAAA;Cf0pDH;Aa1pDD;EElCI;IACE,YAAA;Gf+rDH;EexrDD;IACE,YAAA;Gf0rDD;Ee3rDD;IACE,oBAAA;Gf6rDD;Ee9rDD;IACE,oBAAA;GfgsDD;EejsDD;IACE,WAAA;GfmsDD;EepsDD;IACE,oBAAA;GfssDD;EevsDD;IACE,oBAAA;GfysDD;Ee1sDD;IACE,WAAA;Gf4sDD;Ee7sDD;IACE,oBAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,WAAA;GfqtDD;EettDD;IACE,oBAAA;GfwtDD;EeztDD;IACE,mBAAA;Gf2tDD;Ee7sDD;IACE,YAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,oBAAA;GfqtDD;EettDD;IACE,WAAA;GfwtDD;EeztDD;IACE,oBAAA;Gf2tDD;Ee5tDD;IACE,oBAAA;Gf8tDD;Ee/tDD;IACE,WAAA;GfiuDD;EeluDD;IACE,oBAAA;GfouDD;EeruDD;IACE,oBAAA;GfuuDD;EexuDD;IACE,WAAA;Gf0uDD;Ee3uDD;IACE,oBAAA;Gf6uDD;Ee9uDD;IACE,mBAAA;GfgvDD;Ee5uDD;IACE,YAAA;Gf8uDD;Ee9vDD;IACE,WAAA;GfgwDD;EejwDD;IACE,mBAAA;GfmwDD;EepwDD;IACE,mBAAA;GfswDD;EevwDD;IACE,UAAA;GfywDD;Ee1wDD;IACE,mBAAA;Gf4wDD;Ee7wDD;IACE,mBAAA;Gf+wDD;EehxDD;IACE,UAAA;GfkxDD;EenxDD;IACE,mBAAA;GfqxDD;EetxDD;IACE,mBAAA;GfwxDD;EezxDD;IACE,UAAA;Gf2xDD;Ee5xDD;IACE,mBAAA;Gf8xDD;Ee/xDD;IACE,kBAAA;GfiyDD;Ee7xDD;IACE,WAAA;Gf+xDD;EejxDD;IACE,kBAAA;GfmxDD;EepxDD;IACE,0BAAA;GfsxDD;EevxDD;IACE,0BAAA;GfyxDD;Ee1xDD;IACE,iBAAA;Gf4xDD;Ee7xDD;IACE,0BAAA;Gf+xDD;EehyDD;IACE,0BAAA;GfkyDD;EenyDD;IACE,iBAAA;GfqyDD;EetyDD;IACE,0BAAA;GfwyDD;EezyDD;IACE,0BAAA;Gf2yDD;Ee5yDD;IACE,iBAAA;Gf8yDD;Ee/yDD;IACE,0BAAA;GfizDD;EelzDD;IACE,yBAAA;GfozDD;EerzDD;IACE,gBAAA;GfuzDD;CACF;Aa/yDD;EE3CI;IACE,YAAA;Gf61DH;Eet1DD;IACE,YAAA;Gfw1DD;Eez1DD;IACE,oBAAA;Gf21DD;Ee51DD;IACE,oBAAA;Gf81DD;Ee/1DD;IACE,WAAA;Gfi2DD;Eel2DD;IACE,oBAAA;Gfo2DD;Eer2DD;IACE,oBAAA;Gfu2DD;Eex2DD;IACE,WAAA;Gf02DD;Ee32DD;IACE,oBAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,WAAA;Gfm3DD;Eep3DD;IACE,oBAAA;Gfs3DD;Eev3DD;IACE,mBAAA;Gfy3DD;Ee32DD;IACE,YAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,oBAAA;Gfm3DD;Eep3DD;IACE,WAAA;Gfs3DD;Eev3DD;IACE,oBAAA;Gfy3DD;Ee13DD;IACE,oBAAA;Gf43DD;Ee73DD;IACE,WAAA;Gf+3DD;Eeh4DD;IACE,oBAAA;Gfk4DD;Een4DD;IACE,oBAAA;Gfq4DD;Eet4DD;IACE,WAAA;Gfw4DD;Eez4DD;IACE,oBAAA;Gf24DD;Ee54DD;IACE,mBAAA;Gf84DD;Ee14DD;IACE,YAAA;Gf44DD;Ee55DD;IACE,WAAA;Gf85DD;Ee/5DD;IACE,mBAAA;Gfi6DD;Eel6DD;IACE,mBAAA;Gfo6DD;Eer6DD;IACE,UAAA;Gfu6DD;Eex6DD;IACE,mBAAA;Gf06DD;Ee36DD;IACE,mBAAA;Gf66DD;Ee96DD;IACE,UAAA;Gfg7DD;Eej7DD;IACE,mBAAA;Gfm7DD;Eep7DD;IACE,mBAAA;Gfs7DD;Eev7DD;IACE,UAAA;Gfy7DD;Ee17DD;IACE,mBAAA;Gf47DD;Ee77DD;IACE,kBAAA;Gf+7DD;Ee37DD;IACE,WAAA;Gf67DD;Ee/6DD;IACE,kBAAA;Gfi7DD;Eel7DD;IACE,0BAAA;Gfo7DD;Eer7DD;IACE,0BAAA;Gfu7DD;Eex7DD;IACE,iBAAA;Gf07DD;Ee37DD;IACE,0BAAA;Gf67DD;Ee97DD;IACE,0BAAA;Gfg8DD;Eej8DD;IACE,iBAAA;Gfm8DD;Eep8DD;IACE,0BAAA;Gfs8DD;Eev8DD;IACE,0BAAA;Gfy8DD;Ee18DD;IACE,iBAAA;Gf48DD;Ee78DD;IACE,0BAAA;Gf+8DD;Eeh9DD;IACE,yBAAA;Gfk9DD;Een9DD;IACE,gBAAA;Gfq9DD;CACF;Aa18DD;EE9CI;IACE,YAAA;Gf2/DH;Eep/DD;IACE,YAAA;Gfs/DD;Eev/DD;IACE,oBAAA;Gfy/DD;Ee1/DD;IACE,oBAAA;Gf4/DD;Ee7/DD;IACE,WAAA;Gf+/DD;EehgED;IACE,oBAAA;GfkgED;EengED;IACE,oBAAA;GfqgED;EetgED;IACE,WAAA;GfwgED;EezgED;IACE,oBAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,WAAA;GfihED;EelhED;IACE,oBAAA;GfohED;EerhED;IACE,mBAAA;GfuhED;EezgED;IACE,YAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,oBAAA;GfihED;EelhED;IACE,WAAA;GfohED;EerhED;IACE,oBAAA;GfuhED;EexhED;IACE,oBAAA;Gf0hED;Ee3hED;IACE,WAAA;Gf6hED;Ee9hED;IACE,oBAAA;GfgiED;EejiED;IACE,oBAAA;GfmiED;EepiED;IACE,WAAA;GfsiED;EeviED;IACE,oBAAA;GfyiED;Ee1iED;IACE,mBAAA;Gf4iED;EexiED;IACE,YAAA;Gf0iED;Ee1jED;IACE,WAAA;Gf4jED;Ee7jED;IACE,mBAAA;Gf+jED;EehkED;IACE,mBAAA;GfkkED;EenkED;IACE,UAAA;GfqkED;EetkED;IACE,mBAAA;GfwkED;EezkED;IACE,mBAAA;Gf2kED;Ee5kED;IACE,UAAA;Gf8kED;Ee/kED;IACE,mBAAA;GfilED;EellED;IACE,mBAAA;GfolED;EerlED;IACE,UAAA;GfulED;EexlED;IACE,mBAAA;Gf0lED;Ee3lED;IACE,kBAAA;Gf6lED;EezlED;IACE,WAAA;Gf2lED;Ee7kED;IACE,kBAAA;Gf+kED;EehlED;IACE,0BAAA;GfklED;EenlED;IACE,0BAAA;GfqlED;EetlED;IACE,iBAAA;GfwlED;EezlED;IACE,0BAAA;Gf2lED;Ee5lED;IACE,0BAAA;Gf8lED;Ee/lED;IACE,iBAAA;GfimED;EelmED;IACE,0BAAA;GfomED;EermED;IACE,0BAAA;GfumED;EexmED;IACE,iBAAA;Gf0mED;Ee3mED;IACE,0BAAA;Gf6mED;Ee9mED;IACE,yBAAA;GfgnED;EejnED;IACE,gBAAA;GfmnED;CACF;AgBvrED;EACE,8BAAA;ChByrED;AgBvrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChByrED;AgBvrED;EACE,iBAAA;ChByrED;AgBnrED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBqrED;AgBxrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,2BAAA;ChBqrEP;AgBnsED;EAoBI,uBAAA;EACA,8BAAA;ChBkrEH;AgBvsED;;;;;;EA8BQ,cAAA;ChBirEP;AgB/sED;EAoCI,2BAAA;ChB8qEH;AgBltED;EAyCI,uBAAA;ChB4qEH;AgBrqED;;;;;;EAOQ,aAAA;ChBsqEP;AgB3pED;EACE,uBAAA;ChB6pED;AgB9pED;;;;;;EAQQ,uBAAA;ChB8pEP;AgBtqED;;EAeM,yBAAA;ChB2pEL;AgBjpED;EAEI,0BAAA;ChBkpEH;AgBzoED;EAEI,0BAAA;ChB0oEH;AgBjoED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBmoED;AgB9nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBioEL;AiB7wEC;;;;;;;;;;;;EAOI,0BAAA;CjBoxEL;AiB9wEC;;;;;EAMI,0BAAA;CjB+wEL;AiBlyEC;;;;;;;;;;;;EAOI,0BAAA;CjByyEL;AiBnyEC;;;;;EAMI,0BAAA;CjBoyEL;AiBvzEC;;;;;;;;;;;;EAOI,0BAAA;CjB8zEL;AiBxzEC;;;;;EAMI,0BAAA;CjByzEL;AiB50EC;;;;;;;;;;;;EAOI,0BAAA;CjBm1EL;AiB70EC;;;;;EAMI,0BAAA;CjB80EL;AiBj2EC;;;;;;;;;;;;EAOI,0BAAA;CjBw2EL;AiBl2EC;;;;;EAMI,0BAAA;CjBm2EL;AgBjtED;EACE,iBAAA;EACA,kBAAA;ChBmtED;AgBtpED;EACA;IA3DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,uBAAA;GhBotED;EgB7pEH;IAnDM,iBAAA;GhBmtEH;EgBhqEH;;;;;;IA1CY,oBAAA;GhBktET;EgBxqEH;IAlCM,UAAA;GhB6sEH;EgB3qEH;;;;;;IAzBY,eAAA;GhB4sET;EgBnrEH;;;;;;IArBY,gBAAA;GhBgtET;EgB3rEH;;;;IARY,iBAAA;GhBysET;CACF;AkBn6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBk6ED;AkB/5ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBi6ED;AkB95ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBg6ED;AkBr5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL43ET;AkBr5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBu5ED;AkBp5ED;EACE,eAAA;ClBs5ED;AkBl5ED;EACE,eAAA;EACA,YAAA;ClBo5ED;AkBh5ED;;EAEE,aAAA;ClBk5ED;AkB94ED;;;EZrEE,2CAAA;EACA,qBAAA;CNw9ED;AkB74ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClB+4ED;AkBr3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CLwzET;AmBh8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CLy7ET;AKx5EC;EACE,YAAA;EACA,WAAA;CL05EH;AKx5EC;EAA0B,YAAA;CL25E3B;AK15EC;EAAgC,YAAA;CL65EjC;AkBj4EC;EACE,UAAA;EACA,8BAAA;ClBm4EH;AkB33EC;;;EAGE,0BAAA;EACA,WAAA;ClB63EH;AkB13EC;;EAEE,oBAAA;ClB43EH;AkBx3EC;EACE,aAAA;ClB03EH;AkB92ED;EACE,yBAAA;ClBg3ED;AkBx0ED;EAtBI;;;;IACE,kBAAA;GlBo2EH;EkBj2EC;;;;;;;;IAEE,kBAAA;GlBy2EH;EkBt2EC;;;;;;;;IAEE,kBAAA;GlB82EH;CACF;AkBp2ED;EACE,oBAAA;ClBs2ED;AkB91ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBg2ED;AkBr2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2EH;AkB91ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBg2ED;AkB71ED;;EAEE,iBAAA;ClB+1ED;AkB31ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClB61ED;AkB31ED;;EAEE,cAAA;EACA,kBAAA;ClB61ED;AkBp1EC;;;;;;EAGE,oBAAA;ClBy1EH;AkBn1EC;;;;EAEE,oBAAA;ClBu1EH;AkBj1EC;;;;EAGI,oBAAA;ClBo1EL;AkBz0ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClBy0ED;AkBv0EC;;EAEE,gBAAA;EACA,iBAAA;ClBy0EH;AkB5zED;ECnQE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBkkFD;AmBhkFC;EACE,aAAA;EACA,kBAAA;CnBkkFH;AmB/jFC;;EAEE,aAAA;CnBikFH;AkBx0ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClBy0EH;AkB/0ED;EASI,aAAA;EACA,kBAAA;ClBy0EH;AkBn1ED;;EAcI,aAAA;ClBy0EH;AkBv1ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClBy0EH;AkBr0ED;EC/RE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBumFD;AmBrmFC;EACE,aAAA;EACA,kBAAA;CnBumFH;AmBpmFC;;EAEE,aAAA;CnBsmFH;AkBj1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBk1EH;AkBx1ED;EASI,aAAA;EACA,kBAAA;ClBk1EH;AkB51ED;;EAcI,aAAA;ClBk1EH;AkBh2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBk1EH;AkBz0ED;EAEE,mBAAA;ClB00ED;AkB50ED;EAMI,sBAAA;ClBy0EH;AkBr0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBn0ED;;;;;;;;;;EC1ZI,eAAA;CnByuFH;AkB/0ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CL0rFT;AmBxuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL+rFT;AkBz1ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBwuFH;AkB91ED;ECtYI,eAAA;CnBuuFH;AkB91ED;;;;;;;;;;EC7ZI,eAAA;CnBuwFH;AkB12ED;ECzZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwtFT;AmBtwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6tFT;AkBp3ED;EC/YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBswFH;AkBz3ED;ECzYI,eAAA;CnBqwFH;AkBz3ED;;;;;;;;;;EChaI,eAAA;CnBqyFH;AkBr4ED;EC5ZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLsvFT;AmBpyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2vFT;AkB/4ED;EClZI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBoyFH;AkBp5ED;EC5YI,eAAA;CnBmyFH;AkBh5EC;EACE,UAAA;ClBk5EH;AkBh5EC;EACE,OAAA;ClBk5EH;AkBx4ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB04ED;AkBvzED;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBy3EH;EkBrvEH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBu3EH;EkB1vEH;IAxHM,sBAAA;GlBq3EH;EkB7vEH;IApHM,sBAAA;IACA,uBAAA;GlBo3EH;EkBjwEH;;;IA9GQ,YAAA;GlBo3EL;EkBtwEH;IAxGM,YAAA;GlBi3EH;EkBzwEH;IApGM,iBAAA;IACA,uBAAA;GlBg3EH;EkB7wEH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB62EH;EkBpxEH;;IAtFQ,gBAAA;GlB82EL;EkBxxEH;;IAjFM,mBAAA;IACA,eAAA;GlB62EH;EkB7xEH;IA3EM,OAAA;GlB22EH;CACF;AkBj2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClB81EH;AkBz2ED;;EAiBI,iBAAA;ClB41EH;AkB72ED;EJthBE,mBAAA;EACA,oBAAA;Cds4FD;AkB10EC;EAyBF;IAnCM,kBAAA;IACA,iBAAA;IACA,iBAAA;GlBw1EH;CACF;AkBx3ED;EAwCI,YAAA;ClBm1EH;AkBr0EC;EAUF;IAdQ,kBAAA;IACA,gBAAA;GlB60EL;CACF;AkBn0EC;EAEF;IANQ,iBAAA;IACA,gBAAA;GlB20EL;CACF;AoBp6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC0CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB+JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL+tFT;AoBv6FG;;;;;;EdnBF,2CAAA;EACA,qBAAA;CNk8FD;AoB16FC;;;EAGE,YAAA;EACA,sBAAA;CpB46FH;AoBz6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLi5FT;AoBz6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CL05FT;AoBz6FG;;EAEE,qBAAA;CpB26FL;AoBl6FD;EC3DE,YAAA;EACA,uBAAA;EACA,mBAAA;CrBg+FD;AqB99FC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBs+FT;AqBn+FC;;;EAGE,uBAAA;CrBq+FH;AqBh+FG;;;;;;;;;EAGE,uBAAA;EACI,mBAAA;CrBw+FT;AoBv9FD;ECZI,YAAA;EACA,uBAAA;CrBs+FH;AoBx9FD;EC9DE,YAAA;EACA,0BAAA;EACA,sBAAA;CrByhGD;AqBvhGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB+hGT;AqB5hGC;;;EAGE,uBAAA;CrB8hGH;AqBzhGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBiiGT;AoB7gGD;ECfI,eAAA;EACA,uBAAA;CrB+hGH;AoB7gGD;EClEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBklGD;AqBhlGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBwlGT;AqBrlGC;;;EAGE,uBAAA;CrBulGH;AqBllGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB0lGT;AoBlkGD;ECnBI,eAAA;EACA,uBAAA;CrBwlGH;AoBlkGD;ECtEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB2oGD;AqBzoGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBipGT;AqB9oGC;;;EAGE,uBAAA;CrBgpGH;AqB3oGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBmpGT;AoBvnGD;ECvBI,eAAA;EACA,uBAAA;CrBipGH;AoBvnGD;EC1EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBosGD;AqBlsGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB0sGT;AqBvsGC;;;EAGE,uBAAA;CrBysGH;AqBpsGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB4sGT;AoB5qGD;EC3BI,eAAA;EACA,uBAAA;CrB0sGH;AoB5qGD;EC9EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6vGD;AqB3vGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBmwGT;AqBhwGC;;;EAGE,uBAAA;CrBkwGH;AqB7vGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBqwGT;AoBjuGD;EC/BI,eAAA;EACA,uBAAA;CrBmwGH;AoB5tGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpB8tGD;AoB5tGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLkwGT;AoB7tGC;;;;EAIE,0BAAA;CpB+tGH;AoB7tGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpB+tGH;AoB3tGG;;;;EAEE,eAAA;EACA,sBAAA;CpB+tGL;AoBttGD;;ECxEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBkyGD;AoBztGD;;EC5EE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrByyGD;AoB5tGD;;EChFE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBgzGD;AoB3tGD;EACE,eAAA;EACA,YAAA;CpB6tGD;AoBztGD;EACE,gBAAA;CpB2tGD;AoBptGC;;;EACE,YAAA;CpBwtGH;AuBl3GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLisGT;AuBr3GC;EACE,WAAA;CvBu3GH;AuBn3GD;EACE,cAAA;CvBq3GD;AuBn3GC;EAAY,eAAA;CvBs3Gb;AuBr3GC;EAAY,mBAAA;CvBw3Gb;AuBv3GC;EAAY,yBAAA;CvB03Gb;AuBv3GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CL2sGT;AwBr5GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxBu5GD;AwBn5GD;;EAEE,mBAAA;CxBq5GD;AwBj5GD;EACE,WAAA;CxBm5GD;AwB/4GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBk5GD;AwB74GC;EACE,SAAA;EACA,WAAA;CxB+4GH;AwBx6GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBo8GD;AwB96GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB84GH;AwBx4GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB04GH;AwBp4GC;;;EAGE,YAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxBs4GH;AwB73GC;;;EAGE,eAAA;CxB+3GH;AwB33GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxB63GH;AwBx3GD;EAGI,eAAA;CxBw3GH;AwB33GD;EAQI,WAAA;CxBs3GH;AwB92GD;EACE,WAAA;EACA,SAAA;CxBg3GD;AwBx2GD;EACE,QAAA;EACA,YAAA;CxB02GD;AwBt2GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBw2GD;AwBp2GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxBs2GD;AwBl2GD;EACE,SAAA;EACA,WAAA;CxBo2GD;AwB51GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxB41GH;AwBn2GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxB41GH;AwBv0GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB05GC;EwBv1GD;IA1DA,QAAA;IACA,YAAA;GxBo5GC;CACF;A2BpiHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3BsiHD;A2B1iHD;;EAMI,mBAAA;EACA,YAAA;C3BwiHH;A2BtiHG;;;;;;;;EAIE,WAAA;C3B4iHL;A2BtiHD;;;;EAKI,kBAAA;C3BuiHH;A2BliHD;EACE,kBAAA;C3BoiHD;A2BriHD;;;EAOI,YAAA;C3BmiHH;A2B1iHD;;;EAYI,iBAAA;C3BmiHH;A2B/hHD;EACE,iBAAA;C3BiiHD;A2B7hHD;EACE,eAAA;C3B+hHD;A2B9hHC;EClDA,8BAAA;EACG,2BAAA;C5BmlHJ;A2B7hHD;;EC/CE,6BAAA;EACG,0BAAA;C5BglHJ;A2B5hHD;EACE,YAAA;C3B8hHD;A2B5hHD;EACE,iBAAA;C3B8hHD;A2B5hHD;;ECnEE,8BAAA;EACG,2BAAA;C5BmmHJ;A2B3hHD;ECjEE,6BAAA;EACG,0BAAA;C5B+lHJ;A2B1hHD;;EAEE,WAAA;C3B4hHD;A2B3gHD;EACE,kBAAA;EACA,mBAAA;C3B6gHD;A2B3gHD;EACE,mBAAA;EACA,oBAAA;C3B6gHD;A2BxgHD;EtB/CE,yDAAA;EACQ,iDAAA;CL0jHT;A2BxgHC;EtBnDA,yBAAA;EACQ,iBAAA;CL8jHT;A2BrgHD;EACE,eAAA;C3BugHD;A2BpgHD;EACE,wBAAA;EACA,uBAAA;C3BsgHD;A2BngHD;EACE,wBAAA;C3BqgHD;A2B9/GD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3B+/GH;A2BtgHD;EAcM,YAAA;C3B2/GL;A2BzgHD;;;;EAsBI,iBAAA;EACA,eAAA;C3By/GH;A2Bp/GC;EACE,iBAAA;C3Bs/GH;A2Bp/GC;EC3KA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5B4pHF;A2Bt/GC;EC/KA,2BAAA;EACC,0BAAA;EAOD,gCAAA;EACC,+BAAA;C5BkqHF;A2Bv/GD;EACE,iBAAA;C3By/GD;A2Bv/GD;;EC/KE,8BAAA;EACC,6BAAA;C5B0qHF;A2Bt/GD;EC7LE,2BAAA;EACC,0BAAA;C5BsrHF;A2Bl/GD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3Bo/GD;A2Bx/GD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3Bq/GH;A2B9/GD;EAYI,YAAA;C3Bq/GH;A2BjgHD;EAgBI,WAAA;C3Bo/GH;A2Bn+GD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3Bo+GL;A6B9sHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BgtHD;A6B7sHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7B+sHH;A6BxtHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7BusHH;A6BrsHG;EACE,WAAA;C7BusHL;A6B7rHD;;;EV0BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwqHD;AmBtqHC;;;EACE,aAAA;EACA,kBAAA;CnB0qHH;AmBvqHC;;;;;;EAEE,aAAA;CnB6qHH;A6B/sHD;;;EVqBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+rHD;AmB7rHC;;;EACE,aAAA;EACA,kBAAA;CnBisHH;AmB9rHC;;;;;;EAEE,aAAA;CnBosHH;A6B7tHD;;;EAGE,oBAAA;C7B+tHD;A6B7tHC;;;EACE,iBAAA;C7BiuHH;A6B7tHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7B+tHD;A6B1tHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;C7B4tHD;A6BztHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6BztHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6B/uHD;;EA0BI,cAAA;C7BytHH;A6BptHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;C5Bi0HJ;A6BrtHD;EACE,gBAAA;C7ButHD;A6BrtHD;;;;;;;EDxGE,6BAAA;EACG,0BAAA;C5Bs0HJ;A6BttHD;EACE,eAAA;C7BwtHD;A6BntHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BmtHD;A6BxtHD;EAUI,mBAAA;C7BitHH;A6B3tHD;EAYM,kBAAA;C7BktHL;A6B/sHG;;;EAGE,WAAA;C7BitHL;A6B5sHC;;EAGI,mBAAA;C7B6sHL;A6B1sHC;;EAGI,WAAA;EACA,kBAAA;C7B2sHL;A8B12HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B42HD;A8B/2HD;EAOI,mBAAA;EACA,eAAA;C9B22HH;A8Bn3HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B22HL;A8B12HK;;EAEE,sBAAA;EACA,0BAAA;C9B42HP;A8Bv2HG;EACE,eAAA;C9By2HL;A8Bv2HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By2HP;A8Bl2HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo2HL;A8B74HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm5HD;A8Bn5HD;EA0DI,gBAAA;C9B41HH;A8Bn1HD;EACE,8BAAA;C9Bq1HD;A8Bt1HD;EAGI,YAAA;EAEA,oBAAA;C9Bq1HH;A8B11HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo1HL;A8Bn1HK;EACE,mCAAA;C9Bq1HP;A8B/0HK;;;EAGE,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,iCAAA;EACA,gBAAA;C9Bi1HP;A8B50HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6vHD;A8Bh1HC;EAwDE,YAAA;C9B2xHH;A8Bn1HC;EA0DI,mBAAA;EACA,mBAAA;C9B4xHL;A8Bv1HC;EAgEE,UAAA;EACA,WAAA;C9B0xHH;A8B9wHD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9ByxHH;E8BztHH;IA9DQ,iBAAA;G9B0xHL;CACF;A8Bp2HC;EAuFE,gBAAA;EACA,mBAAA;C9BgxHH;A8Bx2HC;;;EA8FE,uBAAA;C9B+wHH;A8BjwHD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9B8wHH;E8B3uHH;;;IA9BM,0BAAA;G9B8wHH;CACF;A8B/2HD;EAEI,YAAA;C9Bg3HH;A8Bl3HD;EAMM,mBAAA;C9B+2HL;A8Br3HD;EASM,iBAAA;C9B+2HL;A8B12HK;;;EAGE,YAAA;EACA,0BAAA;C9B42HP;A8Bp2HD;EAEI,YAAA;C9Bq2HH;A8Bv2HD;EAIM,gBAAA;EACA,eAAA;C9Bs2HL;A8B11HD;EACE,YAAA;C9B41HD;A8B71HD;EAII,YAAA;C9B41HH;A8Bh2HD;EAMM,mBAAA;EACA,mBAAA;C9B61HL;A8Bp2HD;EAYI,UAAA;EACA,WAAA;C9B21HH;A8B/0HD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9B01HH;E8B1xHH;IA9DQ,iBAAA;G9B21HL;CACF;A8Bn1HD;EACE,iBAAA;C9Bq1HD;A8Bt1HD;EAKI,gBAAA;EACA,mBAAA;C9Bo1HH;A8B11HD;;;EAYI,uBAAA;C9Bm1HH;A8Br0HD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9Bk1HH;E8B/yHH;;;IA9BM,0BAAA;G9Bk1HH;CACF;A8Bz0HD;EAEI,cAAA;C9B00HH;A8B50HD;EAKI,eAAA;C9B00HH;A8Bj0HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8iIF;A+BxiID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0iID;A+BliID;EA8nBA;IAhoBI,mBAAA;G/BwiID;CACF;A+BzhID;EAgnBA;IAlnBI,YAAA;G/B+hID;CACF;A+BjhID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkhID;A+BhhIC;EACE,iBAAA;C/BkhIH;A+Bt/HD;EA6jBA;IArlBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkhID;E+BhhIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkhIH;E+B/gIC;IACE,oBAAA;G/BihIH;E+B5gIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8gIH;CACF;A+B1gID;;EAGI,kBAAA;C/B2gIH;A+BtgIC;EAmjBF;;IArjBM,kBAAA;G/B6gIH;CACF;A+BpgID;;;;EAII,oBAAA;EACA,mBAAA;C/BsgIH;A+BhgIC;EAgiBF;;;;IAniBM,gBAAA;IACA,eAAA;G/B0gIH;CACF;A+B9/HD;EACE,cAAA;EACA,sBAAA;C/BggID;A+B3/HD;EA8gBA;IAhhBI,iBAAA;G/BigID;CACF;A+B7/HD;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+/HD;A+Bz/HD;EAggBA;;IAlgBI,iBAAA;G/BggID;CACF;A+B9/HD;EACE,OAAA;EACA,sBAAA;C/BggID;A+B9/HD;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BggID;A+B1/HD;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4/HD;A+B1/HC;;EAEE,sBAAA;C/B4/HH;A+BrgID;EAaI,eAAA;C/B2/HH;A+Bl/HD;EALI;;IAEE,mBAAA;G/B0/HH;CACF;A+Bh/HD;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/Bm/HD;A+B/+HC;EACE,WAAA;C/Bi/HH;A+B//HD;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B++HH;A+BrgID;EAyBI,gBAAA;C/B++HH;A+Bz+HD;EAqbA;IAvbI,cAAA;G/B++HD;CACF;A+Bt+HD;EACE,oBAAA;C/Bw+HD;A+Bz+HD;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/Bw+HH;A+B58HC;EA2YF;IAjaM,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/Bs+HH;E+B3kHH;;IAxZQ,2BAAA;G/Bu+HL;E+B/kHH;IArZQ,kBAAA;G/Bu+HL;E+Bt+HK;;IAEE,uBAAA;G/Bw+HP;CACF;A+Bt9HD;EA+XA;IA1YI,YAAA;IACA,UAAA;G/Bq+HD;E+B5lHH;IAtYM,YAAA;G/Bq+HH;E+B/lHH;IApYQ,kBAAA;IACA,qBAAA;G/Bs+HL;CACF;A+B39HD;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4vID;AkBtuHD;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBwyHH;EkBpqHH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBsyHH;EkBzqHH;IAxHM,sBAAA;GlBoyHH;EkB5qHH;IApHM,sBAAA;IACA,uBAAA;GlBmyHH;EkBhrHH;;;IA9GQ,YAAA;GlBmyHL;EkBrrHH;IAxGM,YAAA;GlBgyHH;EkBxrHH;IApGM,iBAAA;IACA,uBAAA;GlB+xHH;EkB5rHH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB4xHH;EkBnsHH;;IAtFQ,gBAAA;GlB6xHL;EkBvsHH;;IAjFM,mBAAA;IACA,eAAA;GlB4xHH;EkB5sHH;IA3EM,OAAA;GlB0xHH;CACF;A+BpgIC;EAmWF;IAzWM,mBAAA;G/B8gIH;E+B5gIG;IACE,iBAAA;G/B8gIL;CACF;A+B7/HD;EAoVA;IA5VI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmwIP;CACF;A+BngID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B00IF;A+BngID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By0IF;A+B//HD;EChVE,gBAAA;EACA,mBAAA;ChCk1ID;A+BhgIC;ECnVA,iBAAA;EACA,oBAAA;ChCs1ID;A+BjgIC;ECtVA,iBAAA;EACA,oBAAA;ChC01ID;A+B3/HD;EChWE,iBAAA;EACA,oBAAA;ChC81ID;A+Bv/HD;EAsSA;IA1SI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+/HD;CACF;A+Bl+HD;EAhBE;IExWA,uBAAA;GjC81IC;E+Br/HD;IE5WA,wBAAA;IF8WE,oBAAA;G/Bu/HD;E+Bz/HD;IAKI,gBAAA;G/Bu/HH;CACF;A+B9+HD;EACE,0BAAA;EACA,sBAAA;C/Bg/HD;A+Bl/HD;EAKI,YAAA;C/Bg/HH;A+B/+HG;;EAEE,eAAA;EACA,8BAAA;C/Bi/HL;A+B1/HD;EAcI,YAAA;C/B++HH;A+B7/HD;EAmBM,YAAA;C/B6+HL;A+B3+HK;;EAEE,YAAA;EACA,8BAAA;C/B6+HP;A+Bz+HK;;;EAGE,YAAA;EACA,0BAAA;C/B2+HP;A+Bv+HK;;;EAGE,YAAA;EACA,8BAAA;C/By+HP;A+BjhID;EA8CI,mBAAA;C/Bs+HH;A+Br+HG;;EAEE,uBAAA;C/Bu+HL;A+BxhID;EAoDM,uBAAA;C/Bu+HL;A+B3hID;;EA0DI,sBAAA;C/Bq+HH;A+B99HK;;;EAGE,0BAAA;EACA,YAAA;C/Bg+HP;A+B/7HC;EAoKF;IA7LU,YAAA;G/B49HP;E+B39HO;;IAEE,YAAA;IACA,8BAAA;G/B69HT;E+Bz9HO;;;IAGE,YAAA;IACA,0BAAA;G/B29HT;E+Bv9HO;;;IAGE,YAAA;IACA,8BAAA;G/By9HT;CACF;A+B3jID;EA8GI,YAAA;C/Bg9HH;A+B/8HG;EACE,YAAA;C/Bi9HL;A+BjkID;EAqHI,YAAA;C/B+8HH;A+B98HG;;EAEE,YAAA;C/Bg9HL;A+B58HK;;;;EAEE,YAAA;C/Bg9HP;A+Bx8HD;EACE,uBAAA;EACA,sBAAA;C/B08HD;A+B58HD;EAKI,eAAA;C/B08HH;A+Bz8HG;;EAEE,YAAA;EACA,8BAAA;C/B28HL;A+Bp9HD;EAcI,eAAA;C/By8HH;A+Bv9HD;EAmBM,eAAA;C/Bu8HL;A+Br8HK;;EAEE,YAAA;EACA,8BAAA;C/Bu8HP;A+Bn8HK;;;EAGE,YAAA;EACA,0BAAA;C/Bq8HP;A+Bj8HK;;;EAGE,YAAA;EACA,8BAAA;C/Bm8HP;A+B3+HD;EA+CI,mBAAA;C/B+7HH;A+B97HG;;EAEE,uBAAA;C/Bg8HL;A+Bl/HD;EAqDM,uBAAA;C/Bg8HL;A+Br/HD;;EA2DI,sBAAA;C/B87HH;A+Bx7HK;;;EAGE,0BAAA;EACA,YAAA;C/B07HP;A+Bn5HC;EAwBF;IAvDU,sBAAA;G/Bs7HP;E+B/3HH;IApDU,0BAAA;G/Bs7HP;E+Bl4HH;IAjDU,eAAA;G/Bs7HP;E+Br7HO;;IAEE,YAAA;IACA,8BAAA;G/Bu7HT;E+Bn7HO;;;IAGE,YAAA;IACA,0BAAA;G/Bq7HT;E+Bj7HO;;;IAGE,YAAA;IACA,8BAAA;G/Bm7HT;CACF;A+B3hID;EA+GI,eAAA;C/B+6HH;A+B96HG;EACE,YAAA;C/Bg7HL;A+BjiID;EAsHI,eAAA;C/B86HH;A+B76HG;;EAEE,YAAA;C/B+6HL;A+B36HK;;;;EAEE,YAAA;C/B+6HP;AkCzjJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2jJD;AkChkJD;EAQI,sBAAA;ClC2jJH;AkCnkJD;EAWM,kBAAA;EACA,eAAA;EACA,YAAA;ClC2jJL;AkCxkJD;EAkBI,eAAA;ClCyjJH;AmC7kJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+kJD;AmCnlJD;EAOI,gBAAA;CnC+kJH;AmCtlJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,kBAAA;CnCglJL;AmC9kJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2lJJ;AmC7kJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwmJJ;AmCxkJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CnC4kJL;AmCtkJG;;;;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2kJL;AmCloJD;;;;;;EAkEM,eAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;CnCwkJL;AmC/jJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8oJL;AoC5oJG;;ERKF,+BAAA;EACG,4BAAA;C5B2oJJ;AoC3oJG;;ERTF,gCAAA;EACG,6BAAA;C5BwpJJ;AmC1kJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8pJL;AoC5pJG;;ERKF,+BAAA;EACG,4BAAA;C5B2pJJ;AoC3pJG;;ERTF,gCAAA;EACG,6BAAA;C5BwqJJ;AqC3qJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6qJD;AqCjrJD;EAOI,gBAAA;CrC6qJH;AqCprJD;;EAUM,sBAAA;EACA,kBAAA;EACA,uBAAA;EACA,uBAAA;EACA,oBAAA;CrC8qJL;AqC5rJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6qJL;AqCjsJD;;EA2BM,aAAA;CrC0qJL;AqCrsJD;;EAkCM,YAAA;CrCuqJL;AqCzsJD;;;;EA2CM,eAAA;EACA,uBAAA;EACA,oBAAA;CrCoqJL;AsCltJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCotJD;AsChtJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CtCktJL;AsC7sJC;EACE,cAAA;CtC+sJH;AsC3sJC;EACE,mBAAA;EACA,UAAA;CtC6sJH;AsCtsJD;ECtCE,0BAAA;CvC+uJD;AuC5uJG;;EAEE,0BAAA;CvC8uJL;AsCzsJD;EC1CE,0BAAA;CvCsvJD;AuCnvJG;;EAEE,0BAAA;CvCqvJL;AsC5sJD;EC9CE,0BAAA;CvC6vJD;AuC1vJG;;EAEE,0BAAA;CvC4vJL;AsC/sJD;EClDE,0BAAA;CvCowJD;AuCjwJG;;EAEE,0BAAA;CvCmwJL;AsCltJD;ECtDE,0BAAA;CvC2wJD;AuCxwJG;;EAEE,0BAAA;CvC0wJL;AsCrtJD;EC1DE,0BAAA;CvCkxJD;AuC/wJG;;EAEE,0BAAA;CvCixJL;AwCnxJD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCqxJD;AwClxJC;EACE,cAAA;CxCoxJH;AwChxJC;EACE,mBAAA;EACA,UAAA;CxCkxJH;AwC/wJC;;EAEE,OAAA;EACA,iBAAA;CxCixJH;AwC5wJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CxC8wJL;AwCzwJC;;EAEE,eAAA;EACA,uBAAA;CxC2wJH;AwCxwJC;EACE,aAAA;CxC0wJH;AwCvwJC;EACE,kBAAA;CxCywJH;AwCtwJC;EACE,iBAAA;CxCwwJH;AyCl0JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo0JD;AyCz0JD;;EASI,eAAA;CzCo0JH;AyC70JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm0JH;AyCl1JD;EAmBI,0BAAA;CzCk0JH;AyC/zJC;;EAEE,mBAAA;EACA,mBAAA;EACA,oBAAA;CzCi0JH;AyC31JD;EA8BI,gBAAA;CzCg0JH;AyC9yJD;EACA;IAfI,kBAAA;IACA,qBAAA;GzCg0JD;EyC9zJC;;IAEE,mBAAA;IACA,oBAAA;GzCg0JH;EyCvzJH;;IAJM,gBAAA;GzC+zJH;CACF;A0C52JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL8rJT;A0Cx3JD;;EAaI,kBAAA;EACA,mBAAA;C1C+2JH;A0C32JC;;;EAGE,sBAAA;C1C62JH;A0Cl4JD;EA0BI,aAAA;EACA,eAAA;C1C22JH;A2Cp4JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Cs4JD;A2C14JD;EAQI,cAAA;EAEA,eAAA;C3Co4JH;A2C94JD;EAeI,kBAAA;C3Ck4JH;A2Cj5JD;;EAqBI,iBAAA;C3Cg4JH;A2Cr5JD;EAyBI,gBAAA;C3C+3JH;A2Cv3JD;;EAEE,oBAAA;C3Cy3JD;A2C33JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cy3JH;A2Cj3JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C26JD;A2Ct3JD;EClDI,0BAAA;C5C26JH;A2Cz3JD;EC/CI,eAAA;C5C26JH;A2Cx3JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cs7JD;A2C73JD;ECtDI,0BAAA;C5Cs7JH;A2Ch4JD;ECnDI,eAAA;C5Cs7JH;A2C/3JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Ci8JD;A2Cp4JD;EC1DI,0BAAA;C5Ci8JH;A2Cv4JD;ECvDI,eAAA;C5Ci8JH;A2Ct4JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C48JD;A2C34JD;EC9DI,0BAAA;C5C48JH;A2C94JD;EC3DI,eAAA;C5C48JH;A6C98JD;EACE;IAAQ,4BAAA;G7Ci9JP;E6Ch9JD;IAAQ,yBAAA;G7Cm9JP;CACF;A6Ch9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6Cx9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6C98JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CL26JT;A6C78JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL+zJT;A6C18JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C88JD;A6Cv8JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLu/JT;A6Cp8JD;EErEE,0BAAA;C/C4gKD;A+CzgKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C49JH;A6Cx8JD;EEzEE,0BAAA;C/CohKD;A+CjhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co+JH;A6C58JD;EE7EE,0BAAA;C/C4hKD;A+CzhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C4+JH;A6Ch9JD;EEjFE,0BAAA;C/CoiKD;A+CjiKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co/JH;AgD5iKD;EAEE,iBAAA;ChD6iKD;AgD3iKC;EACE,cAAA;ChD6iKH;AgDziKD;;EAEE,QAAA;EACA,iBAAA;ChD2iKD;AgDxiKD;EACE,eAAA;ChD0iKD;AgDviKD;EACE,eAAA;ChDyiKD;AgDtiKC;EACE,gBAAA;ChDwiKH;AgDpiKD;;EAEE,mBAAA;ChDsiKD;AgDniKD;;EAEE,oBAAA;ChDqiKD;AgDliKD;;;EAGE,oBAAA;EACA,oBAAA;ChDoiKD;AgDjiKD;EACE,uBAAA;ChDmiKD;AgDhiKD;EACE,uBAAA;ChDkiKD;AgD9hKD;EACE,cAAA;EACA,mBAAA;ChDgiKD;AgD1hKD;EACE,gBAAA;EACA,iBAAA;ChD4hKD;AiDnlKD;EAEE,oBAAA;EACA,gBAAA;CjDolKD;AiD5kKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,uBAAA;EACA,uBAAA;CjD6kKD;AiD1kKC;ErB3BA,6BAAA;EACC,4BAAA;C5BwmKF;AiD3kKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BqmKF;AiDpkKD;;EAEE,YAAA;CjDskKD;AiDxkKD;;EAKI,YAAA;CjDukKH;AiDnkKC;;;;EAEE,sBAAA;EACA,YAAA;EACA,0BAAA;CjDukKH;AiDnkKD;EACE,YAAA;EACA,iBAAA;CjDqkKD;AiDhkKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDkkKH;AiDvkKC;;;EASI,eAAA;CjDmkKL;AiD5kKC;;;EAYI,eAAA;CjDqkKL;AiDhkKC;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;CjDkkKH;AiDxkKC;;;;;;;;;EAYI,eAAA;CjDukKL;AiDnlKC;;;EAeI,eAAA;CjDykKL;AkD3qKC;EACE,eAAA;EACA,0BAAA;ClD6qKH;AkD3qKG;;EAEE,eAAA;ClD6qKL;AkD/qKG;;EAKI,eAAA;ClD8qKP;AkD3qKK;;;;EAEE,eAAA;EACA,0BAAA;ClD+qKP;AkD7qKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDkrKP;AkDxsKC;EACE,eAAA;EACA,0BAAA;ClD0sKH;AkDxsKG;;EAEE,eAAA;ClD0sKL;AkD5sKG;;EAKI,eAAA;ClD2sKP;AkDxsKK;;;;EAEE,eAAA;EACA,0BAAA;ClD4sKP;AkD1sKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD+sKP;AkDruKC;EACE,eAAA;EACA,0BAAA;ClDuuKH;AkDruKG;;EAEE,eAAA;ClDuuKL;AkDzuKG;;EAKI,eAAA;ClDwuKP;AkDruKK;;;;EAEE,eAAA;EACA,0BAAA;ClDyuKP;AkDvuKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD4uKP;AkDlwKC;EACE,eAAA;EACA,0BAAA;ClDowKH;AkDlwKG;;EAEE,eAAA;ClDowKL;AkDtwKG;;EAKI,eAAA;ClDqwKP;AkDlwKK;;;;EAEE,eAAA;EACA,0BAAA;ClDswKP;AkDpwKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDywKP;AiDxqKD;EACE,cAAA;EACA,mBAAA;CjD0qKD;AiDxqKD;EACE,iBAAA;EACA,iBAAA;CjD0qKD;AmDpyKD;EACE,oBAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL6uKT;AmDnyKD;EACE,cAAA;CnDqyKD;AmDhyKD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5BuzKF;AmDtyKD;EAMI,eAAA;CnDmyKH;AmD9xKD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnDgyKD;AmDpyKD;;;;;EAWI,eAAA;CnDgyKH;AmD3xKD;EACE,mBAAA;EACA,0BAAA;EACA,2BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bs0KF;AmDrxKD;;EAGI,iBAAA;CnDsxKH;AmDzxKD;;EAMM,oBAAA;EACA,iBAAA;CnDuxKL;AmDnxKG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B61KF;AmDjxKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5B21KF;AmD1yKD;EvB1DE,2BAAA;EACC,0BAAA;C5Bu2KF;AmD7wKD;EAEI,oBAAA;CnD8wKH;AmD3wKD;EACE,oBAAA;CnD6wKD;AmDrwKD;;;EAII,iBAAA;CnDswKH;AmD1wKD;;;EAOM,mBAAA;EACA,oBAAA;CnDwwKL;AmDhxKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B63KF;AmDrxKD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDwwKP;AmD5xKD;;;;;;;;EAwBU,4BAAA;CnD8wKT;AmDtyKD;;;;;;;;EA4BU,6BAAA;CnDoxKT;AmDhzKD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bq5KF;AmDrzKD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDkxKP;AmD5zKD;;;;;;;;EA8CU,+BAAA;CnDwxKT;AmDt0KD;;;;;;;;EAkDU,gCAAA;CnD8xKT;AmDh1KD;;;;EA2DI,2BAAA;CnD2xKH;AmDt1KD;;EA+DI,cAAA;CnD2xKH;AmD11KD;;EAmEI,UAAA;CnD2xKH;AmD91KD;;;;;;;;;;;;EA0EU,eAAA;CnDkyKT;AmD52KD;;;;;;;;;;;;EA8EU,gBAAA;CnD4yKT;AmD13KD;;;;;;;;EAuFU,iBAAA;CnD6yKT;AmDp4KD;;;;;;;;EAgGU,iBAAA;CnD8yKT;AmD94KD;EAsGI,UAAA;EACA,iBAAA;CnD2yKH;AmDjyKD;EACE,oBAAA;CnDmyKD;AmDpyKD;EAKI,iBAAA;EACA,mBAAA;CnDkyKH;AmDxyKD;EASM,gBAAA;CnDkyKL;AmD3yKD;EAcI,iBAAA;CnDgyKH;AmD9yKD;;EAkBM,2BAAA;CnDgyKL;AmDlzKD;EAuBI,cAAA;CnD8xKH;AmDrzKD;EAyBM,8BAAA;CnD+xKL;AmDxxKD;EC1PE,mBAAA;CpDqhLD;AoDnhLC;EACE,eAAA;EACA,0BAAA;EACA,mBAAA;CpDqhLH;AoDxhLC;EAMI,uBAAA;CpDqhLL;AoD3hLC;EASI,eAAA;EACA,0BAAA;CpDqhLL;AoDlhLC;EAEI,0BAAA;CpDmhLL;AmDvyKD;EC7PE,sBAAA;CpDuiLD;AoDriLC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CpDuiLH;AoD1iLC;EAMI,0BAAA;CpDuiLL;AoD7iLC;EASI,eAAA;EACA,uBAAA;CpDuiLL;AoDpiLC;EAEI,6BAAA;CpDqiLL;AmDtzKD;EChQE,sBAAA;CpDyjLD;AoDvjLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDyjLH;AoD5jLC;EAMI,0BAAA;CpDyjLL;AoD/jLC;EASI,eAAA;EACA,0BAAA;CpDyjLL;AoDtjLC;EAEI,6BAAA;CpDujLL;AmDr0KD;ECnQE,sBAAA;CpD2kLD;AoDzkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2kLH;AoD9kLC;EAMI,0BAAA;CpD2kLL;AoDjlLC;EASI,eAAA;EACA,0BAAA;CpD2kLL;AoDxkLC;EAEI,6BAAA;CpDykLL;AmDp1KD;ECtQE,sBAAA;CpD6lLD;AoD3lLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6lLH;AoDhmLC;EAMI,0BAAA;CpD6lLL;AoDnmLC;EASI,eAAA;EACA,0BAAA;CpD6lLL;AoD1lLC;EAEI,6BAAA;CpD2lLL;AmDn2KD;ECzQE,sBAAA;CpD+mLD;AoD7mLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD+mLH;AoDlnLC;EAMI,0BAAA;CpD+mLL;AoDrnLC;EASI,eAAA;EACA,0BAAA;CpD+mLL;AoD5mLC;EAEI,6BAAA;CpD6mLL;AqD7nLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD+nLD;AqDpoLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD+nLH;AqD1nLD;EACE,uBAAA;CrD4nLD;AqDxnLD;EACE,oBAAA;CrD0nLD;AsDrpLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CLgmLT;AsD/pLD;EASI,mBAAA;EACA,kCAAA;CtDypLH;AsDppLD;EACE,cAAA;EACA,mBAAA;CtDspLD;AsDppLD;EACE,aAAA;EACA,mBAAA;CtDspLD;AuD5qLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,0BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBqrLD;AuD7qLC;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB6rLD;AuDzqLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvD2qLH;AwDhsLD;EACE,iBAAA;CxDksLD;AwD9rLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD6rLD;AwD1rLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL6gLT;AwDhsLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLwlLT;AwDpsLD;EACE,mBAAA;EACA,iBAAA;CxDssLD;AwDlsLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDosLD;AwDhsLD;EACE,mBAAA;EACA,uBAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDksLD;AwD9rLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,uBAAA;CxDgsLD;AwD9rLC;ElCrEA,WAAA;EAGA,yBAAA;CtBowLD;AwDjsLC;ElCtEA,aAAA;EAGA,0BAAA;CtBwwLD;AwDhsLD;EACE,cAAA;EACA,iCAAA;CxDksLD;AwD9rLD;EACE,iBAAA;CxDgsLD;AwD5rLD;EACE,UAAA;EACA,wBAAA;CxD8rLD;AwDzrLD;EACE,mBAAA;EACA,cAAA;CxD2rLD;AwDvrLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDyrLD;AwD5rLD;EAQI,iBAAA;EACA,iBAAA;CxDurLH;AwDhsLD;EAaI,kBAAA;CxDsrLH;AwDnsLD;EAiBI,eAAA;CxDqrLH;AwDhrLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDkrLD;AwDhqLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD+qLD;EwD7qLD;InDvEA,kDAAA;IACQ,0CAAA;GLuvLP;EwD5qLD;IAAY,aAAA;GxD+qLX;CACF;AwD1qLD;EAFE;IAAY,aAAA;GxDgrLX;CACF;AyD/zLD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBs1LD;AyD30LC;EnCdA,aAAA;EAGA,0BAAA;CtB01LD;AyD90LC;EAAW,iBAAA;EAAmB,eAAA;CzDk1L/B;AyDj1LC;EAAW,iBAAA;EAAmB,eAAA;CzDq1L/B;AyDp1LC;EAAW,gBAAA;EAAmB,eAAA;CzDw1L/B;AyDv1LC;EAAW,kBAAA;EAAmB,eAAA;CzD21L/B;AyDv1LD;EACE,iBAAA;EACA,iBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;CzDy1LD;AyDr1LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDu1LD;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,yBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,wBAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;A2Dl7LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,uBAAA;EACA,qCAAA;UAAA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLk5LT;A2D77LC;EAAY,kBAAA;C3Dg8Lb;A2D/7LC;EAAY,kBAAA;C3Dk8Lb;A2Dj8LC;EAAY,iBAAA;C3Do8Lb;A2Dn8LC;EAAY,mBAAA;C3Ds8Lb;A2Dn8LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Dq8LD;A2Dl8LD;EACE,kBAAA;C3Do8LD;A2D57LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D87LH;A2D37LD;EACE,mBAAA;C3D67LD;A2D37LD;EACE,mBAAA;EACA,YAAA;C3D67LD;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,uBAAA;C3D47LL;A2Dz7LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;C3D47LL;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,0BAAA;C3D47LL;A2Dx7LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3D07LH;A2Dz7LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,wBAAA;EACA,cAAA;C3D27LL;A4DpjMD;EACE,mBAAA;C5DsjMD;A4DnjMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DqjMD;A4DxjMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLy4LT;A4D/jMD;;EAcM,eAAA;C5DqjML;A4D3hMC;EA4NF;IvD3DE,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL86LP;E4DzjMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D4jML;E4D1jMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D6jML;E4D3jMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D8jML;CACF;A4DpmMD;;;EA6CI,eAAA;C5D4jMH;A4DzmMD;EAiDI,QAAA;C5D2jMH;A4D5mMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5D0jMH;A4DlnMD;EA4DI,WAAA;C5DyjMH;A4DrnMD;EA+DI,YAAA;C5DyjMH;A4DxnMD;;EAmEI,QAAA;C5DyjMH;A4D5nMD;EAuEI,YAAA;C5DwjMH;A4D/nMD;EA0EI,WAAA;C5DwjMH;A4DhjMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;EACA,mCAAA;C5DmjMD;A4D9iMC;EdnGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CopMH;A4DljMC;EACE,WAAA;EACA,SAAA;EdxGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C6pMH;A4DpjMC;;EAEE,WAAA;EACA,YAAA;EACA,sBAAA;EtCvHF,aAAA;EAGA,0BAAA;CtB4qMD;A4DtlMD;;;;EAuCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DqjMH;A4DhmMD;;EA+CI,UAAA;EACA,mBAAA;C5DqjMH;A4DrmMD;;EAoDI,WAAA;EACA,oBAAA;C5DqjMH;A4D1mMD;;EAyDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DqjMH;A4DhjMG;EACE,iBAAA;C5DkjML;A4D9iMG;EACE,iBAAA;C5DgjML;A4DtiMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DwiMD;A4DjjMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D8hMH;A4D7jMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;C5D8hMH;A4DvhMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;C5DyhMD;A4DxhMC;EACE,kBAAA;C5D0hMH;A4Dj/LD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DmhMH;E4D3hMD;;IAYI,mBAAA;G5DmhMH;E4D/hMD;;IAgBI,oBAAA;G5DmhMH;E4D9gMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5DghMD;E4D5gMD;IACE,aAAA;G5D8gMD;CACF;A6D7wMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7D6yMH;A6D3yMC;;;;;;;;;;;;;;;;EACE,YAAA;C7D4zMH;AiCp0MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D+0MD;AiCt0MD;EACE,wBAAA;CjCw0MD;AiCt0MD;EACE,uBAAA;CjCw0MD;AiCh0MD;EACE,yBAAA;CjCk0MD;AiCh0MD;EACE,0BAAA;CjCk0MD;AiCh0MD;EACE,mBAAA;CjCk0MD;AiCh0MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/D41MD;AiC9zMD;EACE,yBAAA;CjCg0MD;AiCzzMD;EACE,gBAAA;CjC2zMD;AgE51MD;EACE,oBAAA;ChE81MD;AgEx1MD;;;;ECdE,yBAAA;CjE42MD;AgEv1MD;;;;;;;;;;;;EAYE,yBAAA;ChEy1MD;AgEl1MD;EA6IA;IC7LE,0BAAA;GjEs4MC;EiEr4MD;IAAU,0BAAA;GjEw4MT;EiEv4MD;IAAU,8BAAA;GjE04MT;EiEz4MD;;IACU,+BAAA;GjE44MT;CACF;AgE51MD;EAwIA;IA1II,0BAAA;GhEk2MD;CACF;AgE51MD;EAmIA;IArII,2BAAA;GhEk2MD;CACF;AgE51MD;EA8HA;IAhII,iCAAA;GhEk2MD;CACF;AgE31MD;EAwHA;IC7LE,0BAAA;GjEo6MC;EiEn6MD;IAAU,0BAAA;GjEs6MT;EiEr6MD;IAAU,8BAAA;GjEw6MT;EiEv6MD;;IACU,+BAAA;GjE06MT;CACF;AgEr2MD;EAmHA;IArHI,0BAAA;GhE22MD;CACF;AgEr2MD;EA8GA;IAhHI,2BAAA;GhE22MD;CACF;AgEr2MD;EAyGA;IA3GI,iCAAA;GhE22MD;CACF;AgEp2MD;EAmGA;IC7LE,0BAAA;GjEk8MC;EiEj8MD;IAAU,0BAAA;GjEo8MT;EiEn8MD;IAAU,8BAAA;GjEs8MT;EiEr8MD;;IACU,+BAAA;GjEw8MT;CACF;AgE92MD;EA8FA;IAhGI,0BAAA;GhEo3MD;CACF;AgE92MD;EAyFA;IA3FI,2BAAA;GhEo3MD;CACF;AgE92MD;EAoFA;IAtFI,iCAAA;GhEo3MD;CACF;AgE72MD;EA8EA;IC7LE,0BAAA;GjEg+MC;EiE/9MD;IAAU,0BAAA;GjEk+MT;EiEj+MD;IAAU,8BAAA;GjEo+MT;EiEn+MD;;IACU,+BAAA;GjEs+MT;CACF;AgEv3MD;EAyEA;IA3EI,0BAAA;GhE63MD;CACF;AgEv3MD;EAoEA;IAtEI,2BAAA;GhE63MD;CACF;AgEv3MD;EA+DA;IAjEI,iCAAA;GhE63MD;CACF;AgEt3MD;EAyDA;ICrLE,yBAAA;GjEs/MC;CACF;AgEt3MD;EAoDA;ICrLE,yBAAA;GjE2/MC;CACF;AgEt3MD;EA+CA;ICrLE,yBAAA;GjEggNC;CACF;AgEt3MD;EA0CA;ICrLE,yBAAA;GjEqgNC;CACF;AgEn3MD;ECnJE,yBAAA;CjEygND;AgEh3MD;EA4BA;IC7LE,0BAAA;GjEqhNC;EiEphND;IAAU,0BAAA;GjEuhNT;EiEthND;IAAU,8BAAA;GjEyhNT;EiExhND;;IACU,+BAAA;GjE2hNT;CACF;AgE93MD;EACE,yBAAA;ChEg4MD;AgE33MD;EAqBA;IAvBI,0BAAA;GhEi4MD;CACF;AgE/3MD;EACE,yBAAA;ChEi4MD;AgE53MD;EAcA;IAhBI,2BAAA;GhEk4MD;CACF;AgEh4MD;EACE,yBAAA;ChEk4MD;AgE73MD;EAOA;IATI,iCAAA;GhEm4MD;CACF;AgE53MD;EACA;ICrLE,yBAAA;GjEojNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on

      , *may* have spurious + elem = tag === "table" && !rtbody.test(elem) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
      " && !rtbody.test(elem) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while (j--) { + if (jQuery.nodeName((tbody = elem.childNodes[j]), "tbody") && !tbody.childNodes.length) { + elem.removeChild(tbody); + } + } + } + + jQuery.merge(nodes, tmp.childNodes); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while (tmp.firstChild) { + tmp.removeChild(tmp.firstChild); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if (tmp) { + safe.removeChild(tmp); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if (!jQuery.support.appendChecked) { + jQuery.grep(getAll(nodes, "input"), fixDefaultChecked); + } + + i = 0; + while ((elem = nodes[i++])) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if (selection && jQuery.inArray(elem, selection) !== -1) { + continue; + } + + contains = jQuery.contains(elem.ownerDocument, elem); + + // Append to fragment + tmp = getAll(safe.appendChild(elem), "script"); + + // Preserve script evaluation history + if (contains) { + setGlobalEval(tmp); + } + + // Capture executables + if (scripts) { + j = 0; + while ((elem = tmp[j++])) { + if (rscriptType.test(elem.type || "")) { + scripts.push(elem); + } + } + } + } + + tmp = null; + + return safe; + }; + jQuery.cache = {}; + jQuery.camelCase = function (string) { + + return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase); + }; + jQuery.cleanData = function (elems, /* internal */ acceptData) { + + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for (; (elem = elems[i]) != null; i++) { + + if (acceptData || jQuery.acceptData(elem)) { + + id = elem[internalKey]; + data = id && cache[id]; + + if (data) { + if (data.events) { + for (type in data.events) { + if (special[type]) { + jQuery.event.remove(elem, type); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent(elem, type, data.handle); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if (cache[id]) { + + delete cache[id]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if (deleteExpando) { + delete elem[internalKey]; + + } else if (typeof elem.removeAttribute !== core_strundefined) { + elem.removeAttribute(internalKey); + + } else { + elem[internalKey] = null; + } + + core_deletedIds.push(id); + } + } + } + } + }; + jQuery.clone = function (elem, dataAndEvents, deepDataAndEvents) { + + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains(elem.ownerDocument, elem); + + if (jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test("<" + elem.nodeName + ">")) { + clone = elem.cloneNode(true); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild(clone = fragmentDiv.firstChild); + } + + if ((!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll(clone); + srcElements = getAll(elem); + + // Fix all IE cloning issues + for (i = 0; (node = srcElements[i]) != null; ++i) { + // Ensure that the destination node is not null; Fixes #9587 + if (destElements[i]) { + fixCloneNodeIssues(node, destElements[i]); + } + } + } + + // Copy the events from the original to the clone + if (dataAndEvents) { + if (deepDataAndEvents) { + srcElements = srcElements || getAll(elem); + destElements = destElements || getAll(clone); + + for (i = 0; (node = srcElements[i]) != null; i++) { + cloneCopyEvent(node, destElements[i]); + } + } else { + cloneCopyEvent(elem, clone); + } + } + + // Preserve script evaluation history + destElements = getAll(clone, "script"); + if (destElements.length > 0) { + setGlobalEval(destElements, !inPage && getAll(elem, "script")); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }; + jQuery.contains = function (context, elem) { + /// + /// Check to see if a DOM element is a descendant of another DOM element. + /// + /// + /// The DOM element that may contain the other element. + /// + /// + /// The DOM element that may be contained by (a descendant of) the other element. + /// + /// + + // Set document vars if needed + if ((context.ownerDocument || context) !== document) { + setDocument(context); + } + return contains(context, elem); + }; + jQuery.css = function (elem, name, extra, styles) { + + var num, val, hooks, + origName = jQuery.camelCase(name); + + // Make sure that we're working with the right name + name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(elem.style, origName)); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; + + // If a hook was provided get the computed value from there + if (hooks && "get" in hooks) { + val = hooks.get(elem, true, extra); + } + + // Otherwise, if a way to get the computed value exists, use that + if (val === undefined) { + val = curCSS(elem, name, styles); + } + + //convert "normal" to computed value + if (val === "normal" && name in cssNormalTransform) { + val = cssNormalTransform[name]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if (extra === "" || extra) { + num = parseFloat(val); + return extra === true || jQuery.isNumeric(num) ? num || 0 : val; + } + return val; + }; + jQuery.cssHooks = { + "opacity": {}, + "height": {}, + "width": {}, + "margin": {}, + "padding": {}, + "borderWidth": {} + }; + jQuery.cssNumber = { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }; + jQuery.cssProps = { + "float": 'cssFloat', + "display": 'display', + "visibility": 'visibility' + }; + jQuery.data = function (elem, name, data) { + /// + /// 1: Store arbitrary data associated with the specified element. Returns the value that was set. + /// 1.1 - jQuery.data(element, key, value) + /// 2: Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// 2.1 - jQuery.data(element, key) + /// 2.2 - jQuery.data(element) + /// + /// + /// The DOM element to associate with the data. + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value. + /// + /// + + return internalData(elem, name, data); + }; + jQuery.dequeue = function (elem, type) { + /// + /// Execute the next function on the queue for the matched element. + /// + /// + /// A DOM element from which to remove and execute a queued function. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + type = type || "fx"; + + var queue = jQuery.queue(elem, type), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks(elem, type), + next = function () { + jQuery.dequeue(elem, type); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if (fn === "inprogress") { + fn = queue.shift(); + startLength--; + } + + hooks.cur = fn; + if (fn) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if (type === "fx") { + queue.unshift("inprogress"); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call(elem, next, hooks); + } + + if (!startLength && hooks) { + hooks.empty.fire(); + } + }; + jQuery.dir = function (elem, dir, until) { + + var matched = [], + cur = elem[dir]; + + while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) { + if (cur.nodeType === 1) { + matched.push(cur); + } + cur = cur[dir]; + } + return matched; + }; + jQuery.each = function (obj, callback, args) { + /// + /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. + /// + /// + /// The object or array to iterate over. + /// + /// + /// The function that will be executed on every object. + /// + /// + + var value, + i = 0, + length = obj.length, + isArray = isArraylike(obj); + + if (args) { + if (isArray) { + for (; i < length; i++) { + value = callback.apply(obj[i], args); + + if (value === false) { + break; + } + } + } else { + for (i in obj) { + value = callback.apply(obj[i], args); + + if (value === false) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if (isArray) { + for (; i < length; i++) { + value = callback.call(obj[i], i, obj[i]); + + if (value === false) { + break; + } + } + } else { + for (i in obj) { + value = callback.call(obj[i], i, obj[i]); + + if (value === false) { + break; + } + } + } + } + + return obj; + }; + jQuery.easing = {}; + jQuery.error = function (msg) { + /// + /// Takes a string and throws an exception containing it. + /// + /// + /// The message to send out. + /// + + throw new Error(msg); + }; + jQuery.etag = {}; + jQuery.event = { + "global": {}, + "props": ['altKey', 'bubbles', 'cancelable', 'ctrlKey', 'currentTarget', 'eventPhase', 'metaKey', 'relatedTarget', 'shiftKey', 'target', 'timeStamp', 'view', 'which'], + "fixHooks": {}, + "keyHooks": {}, + "mouseHooks": {}, + "special": {}, + "triggered": {} + }; + jQuery.expr = { + "cacheLength": 50, + "match": {}, + "find": {}, + "relative": {}, + "preFilter": {}, + "filter": {}, + "pseudos": {}, + "filters": {}, + "setFilters": {}, + "attrHandle": {}, + ":": {} + }; + jQuery.extend = function () { + /// + /// Merge the contents of two or more objects together into the first object. + /// 1 - jQuery.extend(target, object1, objectN) + /// 2 - jQuery.extend(deep, target, object1, objectN) + /// + /// + /// If true, the merge becomes recursive (aka. deep copy). + /// + /// + /// The object to extend. It will receive the new properties. + /// + /// + /// An object containing additional properties to merge in. + /// + /// + /// Additional objects containing properties to merge in. + /// + /// + + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.filter = function (expr, elems, not) { + + if (not) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [] : + jQuery.find.matches(expr, elems); + }; + jQuery.find = function Sizzle(selector, context, results, seed) { + + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ((context ? context.ownerDocument || context : preferredDoc) !== document) { + setDocument(context); + } + + context = context || document; + results = results || []; + + if (!selector || typeof selector !== "string") { + return results; + } + + if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) { + return []; + } + + if (!documentIsXML && !seed) { + + // Shortcuts + if ((match = rquickExpr.exec(selector))) { + // Speed-up: Sizzle("#ID") + if ((m = match[1])) { + if (nodeType === 9) { + elem = context.getElementById(m); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if (elem.id === m) { + results.push(elem); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && + contains(context, elem) && elem.id === m) { + results.push(elem); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if (match[2]) { + push.apply(results, slice.call(context.getElementsByTagName(selector), 0)); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ((m = match[3]) && support.getByClassName && context.getElementsByClassName) { + push.apply(results, slice.call(context.getElementsByClassName(m), 0)); + return results; + } + } + + // QSA path + if (support.qsa && !rbuggyQSA.test(selector)) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if (nodeType === 1 && context.nodeName.toLowerCase() !== "object") { + groups = tokenize(selector); + + if ((old = context.getAttribute("id"))) { + nid = old.replace(rescape, "\\$&"); + } else { + context.setAttribute("id", nid); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while (i--) { + groups[i] = nid + toSelector(groups[i]); + } + newContext = rsibling.test(selector) && context.parentNode || context; + newSelector = groups.join(","); + } + + if (newSelector) { + try { + push.apply(results, slice.call(newContext.querySelectorAll( + newSelector + ), 0)); + return results; + } catch (qsaError) { + } finally { + if (!old) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select(selector.replace(rtrim, "$1"), context, results, seed); + }; + jQuery.fn = { + "jquery": '1.9.1', + "selector": '', + "length": 0 + }; + jQuery.fx = function (elem, options, prop, end, easing, unit) { + + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px"); + }; + jQuery.get = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP GET request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A plain object or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }); + }; + jQuery.getJSON = function (url, data, callback) { + /// + /// Load JSON-encoded data from the server using a GET HTTP request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A plain object or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, data, callback, "json"); + }; + jQuery.getScript = function (url, callback) { + /// + /// Load a JavaScript file from the server using a GET HTTP request, then execute it. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, undefined, callback, "script"); + }; + jQuery.globalEval = function (data) { + /// + /// Execute some JavaScript code globally. + /// + /// + /// The JavaScript code to execute. + /// + + if (data && jQuery.trim(data)) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + (window.execScript || function (data) { + window["eval"].call(window, data); + })(data); + } + }; + jQuery.grep = function (elems, callback, inv) { + /// + /// Finds the elements of an array which satisfy a filter function. The original array is not affected. + /// + /// + /// The array to search through. + /// + /// + /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. + /// + /// + /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. + /// + /// + + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for (; i < length; i++) { + retVal = !!callback(elems[i], i); + if (inv !== retVal) { + ret.push(elems[i]); + } + } + + return ret; + }; + jQuery.guid = 1; + jQuery.hasData = function (elem) { + /// + /// Determine whether an element has any jQuery data associated with it. + /// + /// + /// A DOM element to be checked for data. + /// + /// + + elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando]; + return !!elem && !isEmptyDataObject(elem); + }; + jQuery.holdReady = function (hold) { + /// + /// Holds or releases the execution of jQuery's ready event. + /// + /// + /// Indicates whether the ready hold is being requested or released + /// + /// + + if (hold) { + jQuery.readyWait++; + } else { + jQuery.ready(true); + } + }; + jQuery.inArray = function (elem, arr, i) { + /// + /// Search for a specified value within an array and return its index (or -1 if not found). + /// + /// + /// The value to search for. + /// + /// + /// An array through which to search. + /// + /// + /// The index of the array at which to begin the search. The default is 0, which will search the whole array. + /// + /// + + var len; + + if (arr) { + if (core_indexOf) { + return core_indexOf.call(arr, elem, i); + } + + len = arr.length; + i = i ? i < 0 ? Math.max(0, len + i) : i : 0; + + for (; i < len; i++) { + // Skip accessing in sparse arrays + if (i in arr && arr[i] === elem) { + return i; + } + } + } + + return -1; + }; + jQuery.isEmptyObject = function (obj) { + /// + /// Check to see if an object is empty (contains no enumerable properties). + /// + /// + /// The object that will be checked to see if it's empty. + /// + /// + + var name; + for (name in obj) { + return false; + } + return true; + }; + jQuery.isFunction = function (obj) { + /// + /// Determine if the argument passed is a Javascript function object. + /// + /// + /// Object to test whether or not it is a function. + /// + /// + + return jQuery.type(obj) === "function"; + }; + jQuery.isNumeric = function (obj) { + /// + /// Determines whether its argument is a number. + /// + /// + /// The value to be tested. + /// + /// + + return !isNaN(parseFloat(obj)) && isFinite(obj); + }; + jQuery.isPlainObject = function (obj) { + /// + /// Check to see if an object is a plain object (created using "{}" or "new Object"). + /// + /// + /// The object that will be checked to see if it's a plain object. + /// + /// + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { + return false; + } + + try { + // Not own constructor property must be Object + if (obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + } catch (e) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for (key in obj) { } + + return key === undefined || core_hasOwn.call(obj, key); + }; + jQuery.isReady = true; + jQuery.isWindow = function (obj) { + /// + /// Determine whether the argument is a window. + /// + /// + /// Object to test whether or not it is a window. + /// + /// + + return obj != null && obj == obj.window; + }; + jQuery.isXMLDoc = function (elem) { + /// + /// Check to see if a DOM node is within an XML document (or is an XML document). + /// + /// + /// The DOM node that will be checked to see if it's in an XML document. + /// + /// + + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + jQuery.lastModified = {}; + jQuery.makeArray = function (arr, results) { + /// + /// Convert an array-like object into a true JavaScript array. + /// + /// + /// Any object to turn into a native Array. + /// + /// + + var ret = results || []; + + if (arr != null) { + if (isArraylike(Object(arr))) { + jQuery.merge(ret, + typeof arr === "string" ? + [arr] : arr + ); + } else { + core_push.call(ret, arr); + } + } + + return ret; + }; + jQuery.map = function (elems, callback, arg) { + /// + /// Translate all items in an array or object to new array of items. + /// 1 - jQuery.map(array, callback(elementOfArray, indexInArray)) + /// 2 - jQuery.map(arrayOrObject, callback( value, indexOrKey )) + /// + /// + /// The Array to translate. + /// + /// + /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. + /// + /// + + var value, + i = 0, + length = elems.length, + isArray = isArraylike(elems), + ret = []; + + // Go through the array, translating each of the items to their + if (isArray) { + for (; i < length; i++) { + value = callback(elems[i], i, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + + // Go through every key on the object, + } else { + for (i in elems) { + value = callback(elems[i], i, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply([], ret); + }; + jQuery.merge = function (first, second) { + /// + /// Merge the contents of two arrays together into the first array. + /// + /// + /// The first array to merge, the elements of second added. + /// + /// + /// The second array to merge into the first, unaltered. + /// + /// + + var l = second.length, + i = first.length, + j = 0; + + if (typeof l === "number") { + for (; j < l; j++) { + first[i++] = second[j]; + } + } else { + while (second[j] !== undefined) { + first[i++] = second[j++]; + } + } + + first.length = i; + + return first; + }; + jQuery.noConflict = function (deep) { + /// + /// Relinquish jQuery's control of the $ variable. + /// + /// + /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). + /// + /// + + if (window.$ === jQuery) { + window.$ = _$; + } + + if (deep && window.jQuery === jQuery) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + jQuery.noData = { + "embed": true, + "object": 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000', + "applet": true + }; + jQuery.nodeName = function (elem, name) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }; + jQuery.noop = function () { + /// + /// An empty function. + /// + /// + }; + jQuery.now = function () { + /// + /// Return a number representing the current time. + /// + /// + + return (new Date()).getTime(); + }; + jQuery.offset = {}; + jQuery.param = function (a, traditional) { + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// 1 - jQuery.param(obj) + /// 2 - jQuery.param(obj, traditional) + /// + /// + /// An array or object to serialize. + /// + /// + /// A Boolean indicating whether to perform a traditional "shallow" serialization. + /// + /// + + var prefix, + s = [], + add = function (key, value) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction(value) ? value() : (value == null ? "" : value); + s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if (traditional === undefined) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if (jQuery.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) { + // Serialize the form elements + jQuery.each(a, function () { + add(this.name, this.value); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for (prefix in a) { + buildParams(prefix, a[prefix], traditional, add); + } + } + + // Return the resulting serialization + return s.join("&").replace(r20, "+"); + }; + jQuery.parseHTML = function (data, context, keepScripts) { + /// + /// Parses a string into an array of DOM nodes. + /// + /// + /// HTML string to be parsed + /// + /// + /// DOM element to serve as the context in which the HTML fragment will be created + /// + /// + /// A Boolean indicating whether to include scripts passed in the HTML string + /// + /// + + if (!data || typeof data !== "string") { + return null; + } + if (typeof context === "boolean") { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec(data), + scripts = !keepScripts && []; + + // Single tag + if (parsed) { + return [context.createElement(parsed[1])]; + } + + parsed = jQuery.buildFragment([data], context, scripts); + if (scripts) { + jQuery(scripts).remove(); + } + return jQuery.merge([], parsed.childNodes); + }; + jQuery.parseJSON = function (data) { + /// + /// Takes a well-formed JSON string and returns the resulting JavaScript object. + /// + /// + /// The JSON string to parse. + /// + /// + + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.parse) { + return window.JSON.parse(data); + } + + if (data === null) { + return data; + } + + if (typeof data === "string") { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim(data); + + if (data) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if (rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]") + .replace(rvalidbraces, ""))) { + + return (new Function("return " + data))(); + } + } + } + + jQuery.error("Invalid JSON: " + data); + }; + jQuery.parseXML = function (data) { + /// + /// Parses a string into an XML document. + /// + /// + /// a well-formed XML string to be parsed + /// + /// + + var xml, tmp; + if (!data || typeof data !== "string") { + return null; + } + try { + if (window.DOMParser) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString(data, "text/xml"); + } else { // IE + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = "false"; + xml.loadXML(data); + } + } catch (e) { + xml = undefined; + } + if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + jQuery.error("Invalid XML: " + data); + } + return xml; + }; + jQuery.post = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP POST request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A plain object or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }); + }; + jQuery.prop = function (elem, name, value) { + + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + if (notxml) { + // Fix name and attach hooks + name = jQuery.propFix[name] || name; + hooks = jQuery.propHooks[name]; + } + + if (value !== undefined) { + if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + return (elem[name] = value); + } + + } else { + if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + return elem[name]; + } + } + }; + jQuery.propFix = { + "tabindex": 'tabIndex', + "readonly": 'readOnly', + "for": 'htmlFor', + "class": 'className', + "maxlength": 'maxLength', + "cellspacing": 'cellSpacing', + "cellpadding": 'cellPadding', + "rowspan": 'rowSpan', + "colspan": 'colSpan', + "usemap": 'useMap', + "frameborder": 'frameBorder', + "contenteditable": 'contentEditable' + }; + jQuery.propHooks = { + "tabIndex": {}, + "selected": {} + }; + jQuery.proxy = function (fn, context) { + /// + /// Takes a function and returns a new one that will always have a particular context. + /// 1 - jQuery.proxy(function, context) + /// 2 - jQuery.proxy(context, name) + /// 3 - jQuery.proxy(function, context, additionalArguments) + /// 4 - jQuery.proxy(context, name, additionalArguments) + /// + /// + /// The function whose context will be changed. + /// + /// + /// The object to which the context (this) of the function should be set. + /// + /// + /// Any number of arguments to be passed to the function referenced in the function argument. + /// + /// + + var args, proxy, tmp; + + if (typeof context === "string") { + tmp = fn[context]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if (!jQuery.isFunction(fn)) { + return undefined; + } + + // Simulated bind + args = core_slice.call(arguments, 2); + proxy = function () { + return fn.apply(context || this, args.concat(core_slice.call(arguments))); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }; + jQuery.queue = function (elem, type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched element. + /// 1.1 - jQuery.queue(element, queueName) + /// 2: Manipulate the queue of functions to be executed on the matched element. + /// 2.1 - jQuery.queue(element, queueName, newQueue) + /// 2.2 - jQuery.queue(element, queueName, callback()) + /// + /// + /// A DOM element where the array of queued functions is attached. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var queue; + + if (elem) { + type = (type || "fx") + "queue"; + queue = jQuery._data(elem, type); + + // Speed up dequeue by getting out quickly if this is just a lookup + if (data) { + if (!queue || jQuery.isArray(data)) { + queue = jQuery._data(elem, type, jQuery.makeArray(data)); + } else { + queue.push(data); + } + } + return queue || []; + } + }; + jQuery.ready = function (wait) { + + + // Abort if there are pending holds or we're already ready + if (wait === true ? --jQuery.readyWait : jQuery.isReady) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if (!document.body) { + return setTimeout(jQuery.ready); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if (wait !== true && --jQuery.readyWait > 0) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith(document, [jQuery]); + + // Trigger any bound ready events + if (jQuery.fn.trigger) { + jQuery(document).trigger("ready").off("ready"); + } + }; + jQuery.readyWait = 0; + jQuery.removeAttr = function (elem, value) { + + var name, propName, + i = 0, + attrNames = value && value.match(core_rnotwhite); + + if (attrNames && elem.nodeType === 1) { + while ((name = attrNames[i++])) { + propName = jQuery.propFix[name] || name; + + // Boolean attributes get special treatment (#10870) + if (rboolean.test(name)) { + // Set corresponding property to false for boolean attributes + // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 + if (!getSetAttribute && ruseDefault.test(name)) { + elem[jQuery.camelCase("default-" + name)] = + elem[propName] = false; + } else { + elem[propName] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr(elem, name, ""); + } + + elem.removeAttribute(getSetAttribute ? name : propName); + } + } + }; + jQuery.removeData = function (elem, name) { + /// + /// Remove a previously-stored piece of data. + /// + /// + /// A DOM element from which to remove data. + /// + /// + /// A string naming the piece of data to remove. + /// + /// + + return internalRemoveData(elem, name); + }; + jQuery.removeEvent = function (elem, type, handle) { + + if (elem.removeEventListener) { + elem.removeEventListener(type, handle, false); + } + }; + jQuery.sibling = function (n, elem) { + + var r = []; + + for (; n; n = n.nextSibling) { + if (n.nodeType === 1 && n !== elem) { + r.push(n); + } + } + + return r; + }; + jQuery.speed = function (speed, easing, fn) { + + var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { + complete: fn || !fn && easing || + jQuery.isFunction(speed) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction(easing) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if (opt.queue == null || opt.queue === true) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function () { + if (jQuery.isFunction(opt.old)) { + opt.old.call(this); + } + + if (opt.queue) { + jQuery.dequeue(this, opt.queue); + } + }; + + return opt; + }; + jQuery.style = function (elem, name, value, extra) { + + // Don't set styles on text and comment nodes + if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase(name), + style = elem.style; + + name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(style, origName)); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; + + // Check if we're setting a value + if (value !== undefined) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if (type === "string" && (ret = rrelNum.exec(value))) { + value = (ret[1] + 1) * ret[2] + parseFloat(jQuery.css(elem, name)); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if (value == null || type === "number" && isNaN(value)) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if (type === "number" && !jQuery.cssNumber[origName]) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if (!jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0) { + style[name] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[name] = value; + } catch (e) { } + } + + } else { + // If a hook was provided get the non-computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) { + return ret; + } + + // Otherwise just get the value from the style object + return style[name]; + } + }; + jQuery.support = { + "getSetAttribute": true, + "leadingWhitespace": true, + "tbody": true, + "htmlSerialize": true, + "style": true, + "hrefNormalized": true, + "opacity": true, + "cssFloat": true, + "checkOn": true, + "optSelected": false, + "enctype": true, + "html5Clone": true, + "boxModel": true, + "deleteExpando": true, + "noCloneEvent": true, + "inlineBlockNeedsLayout": false, + "shrinkWrapBlocks": false, + "reliableMarginRight": true, + "boxSizingReliable": false, + "pixelPosition": true, + "noCloneChecked": false, + "optDisabled": true, + "input": true, + "radioValue": false, + "appendChecked": true, + "checkClone": true, + "submitBubbles": true, + "changeBubbles": true, + "focusinBubbles": true, + "clearCloneStyle": false, + "cors": true, + "ajax": true, + "reliableHiddenOffsets": true, + "boxSizing": true, + "doesNotIncludeMarginInBodyOffset": true + }; + jQuery.swap = function (elem, options, callback, args) { + + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for (name in options) { + old[name] = elem.style[name]; + elem.style[name] = options[name]; + } + + ret = callback.apply(elem, args || []); + + // Revert the old values + for (name in options) { + elem.style[name] = old[name]; + } + + return ret; + }; + jQuery.text = function (elem) { + + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if (!nodeType) { + // If no nodeType, this is expected to be an array + for (; (node = elem[i]) ; i++) { + // Do not traverse comment nodes + ret += getText(node); + } + } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if (typeof elem.textContent === "string") { + return elem.textContent; + } else { + // Traverse its children + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText(elem); + } + } + } else if (nodeType === 3 || nodeType === 4) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + jQuery.trim = function (text) { + /// + /// Remove the whitespace from the beginning and end of a string. + /// + /// + /// The string to trim. + /// + /// + + return text == null ? + "" : + core_trim.call(text); + }; + jQuery.type = function (obj) { + /// + /// Determine the internal JavaScript [[Class]] of an object. + /// + /// + /// Object to get the internal JavaScript [[Class]] of. + /// + /// + + if (obj == null) { + return String(obj); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[core_toString.call(obj)] || "object" : + typeof obj; + }; + jQuery.unique = function (results) { + /// + /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. + /// + /// + /// The Array of DOM elements. + /// + /// + + var elem, + duplicates = [], + i = 1, + j = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + results.sort(sortOrder); + + if (hasDuplicate) { + for (; (elem = results[i]) ; i++) { + if (elem === results[i - 1]) { + j = duplicates.push(i); + } + } + while (j--) { + results.splice(duplicates[j], 1); + } + } + + return results; + }; + jQuery.valHooks = { + "option": {}, + "select": {}, + "radio": {}, + "checkbox": {} + }; + jQuery.when = function (subordinate /* , ..., subordinateN */) { + /// + /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. + /// + /// + /// One or more Deferred objects, or plain JavaScript objects. + /// + /// + + var i = 0, + resolveValues = core_slice.call(arguments), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || (subordinate && jQuery.isFunction(subordinate.promise)) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function (i, contexts, values) { + return function (value) { + contexts[i] = this; + values[i] = arguments.length > 1 ? core_slice.call(arguments) : value; + if (values === progressValues) { + deferred.notifyWith(contexts, values); + } else if (!(--remaining)) { + deferred.resolveWith(contexts, values); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if (length > 1) { + progressValues = new Array(length); + progressContexts = new Array(length); + resolveContexts = new Array(length); + for (; i < length; i++) { + if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) { + resolveValues[i].promise() + .done(updateFunc(i, resolveContexts, resolveValues)) + .fail(deferred.reject) + .progress(updateFunc(i, progressContexts, progressValues)); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if (!remaining) { + deferred.resolveWith(resolveContexts, resolveValues); + } + + return deferred.promise(); + }; + jQuery.Event.prototype.isDefaultPrevented = function returnFalse() { + /// + /// Returns whether event.preventDefault() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isImmediatePropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopImmediatePropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isPropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopPropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.preventDefault = function () { + /// + /// If this method is called, the default action of the event will not be triggered. + /// + /// + + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if (!e) { + return; + } + + // If preventDefault exists, run it on the original event + if (e.preventDefault) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }; + jQuery.Event.prototype.stopImmediatePropagation = function () { + /// + /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. + /// + + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }; + jQuery.Event.prototype.stopPropagation = function () { + /// + /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. + /// + + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if (!e) { + return; + } + // If stopPropagation exists, run it on the original event + if (e.stopPropagation) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }; + jQuery.prototype.add = function (selector, context) { + /// + /// Add elements to the set of matched elements. + /// 1 - add(selector) + /// 2 - add(elements) + /// 3 - add(html) + /// 4 - add(jQuery object) + /// 5 - add(selector, context) + /// + /// + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// + /// + /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. + /// + /// + + var set = typeof selector === "string" ? + jQuery(selector, context) : + jQuery.makeArray(selector && selector.nodeType ? [selector] : selector), + all = jQuery.merge(this.get(), set); + + return this.pushStack(jQuery.unique(all)); + }; + jQuery.prototype.addBack = function (selector) { + /// + /// Add the previous set of elements on the stack to the current set, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match the current set of elements against. + /// + /// + + return this.add(selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + }; + jQuery.prototype.addClass = function (value) { + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// 1 - addClass(className) + /// 2 - addClass(function(index, currentClass)) + /// + /// + /// One or more space-separated classes to be added to the class attribute of each matched element. + /// + /// + + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).addClass(value.call(this, j, this.className)); + }); + } + + if (proceed) { + // The disjunction here is for better compressibility (see removeClass) + classes = (value || "").match(core_rnotwhite) || []; + + for (; i < len; i++) { + elem = this[i]; + cur = elem.nodeType === 1 && (elem.className ? + (" " + elem.className + " ").replace(rclass, " ") : + " " + ); + + if (cur) { + j = 0; + while ((clazz = classes[j++])) { + if (cur.indexOf(" " + clazz + " ") < 0) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim(cur); + + } + } + } + + return this; + }; + jQuery.prototype.after = function () { + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// 1 - after(content, content) + /// 2 - after(function(index)) + /// + /// + /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, false, function (elem) { + if (this.parentNode) { + this.parentNode.insertBefore(elem, this.nextSibling); + } + }); + }; + jQuery.prototype.ajaxComplete = function (fn) { + /// + /// Register a handler to be called when Ajax requests complete. This is an AjaxEvent. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(type, fn); + }; + jQuery.prototype.ajaxError = function (fn) { + /// + /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(type, fn); + }; + jQuery.prototype.ajaxSend = function (fn) { + /// + /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(type, fn); + }; + jQuery.prototype.ajaxStart = function (fn) { + /// + /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(type, fn); + }; + jQuery.prototype.ajaxStop = function (fn) { + /// + /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(type, fn); + }; + jQuery.prototype.ajaxSuccess = function (fn) { + /// + /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(type, fn); + }; + jQuery.prototype.andSelf = function (selector) { + /// + /// Add the previous set of elements on the stack to the current set. + /// + /// + + return this.add(selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + }; + jQuery.prototype.animate = function (prop, speed, easing, callback) { + /// + /// Perform a custom animation of a set of CSS properties. + /// 1 - animate(properties, duration, easing, complete) + /// 2 - animate(properties, options) + /// + /// + /// An object of CSS properties and values that the animation will move toward. + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + var empty = jQuery.isEmptyObject(prop), + optall = jQuery.speed(speed, easing, callback), + doAnimation = function () { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation(this, jQuery.extend({}, prop), optall); + doAnimation.finish = function () { + anim.stop(true); + }; + // Empty animations, or finishing resolves immediately + if (empty || jQuery._data(this, "finish")) { + anim.stop(true); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each(doAnimation) : + this.queue(optall.queue, doAnimation); + }; + jQuery.prototype.append = function () { + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// 1 - append(content, content) + /// 2 - append(function(index, html)) + /// + /// + /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { + this.appendChild(elem); + } + }); + }; + jQuery.prototype.appendTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the end of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. + /// + /// + + var elems, + i = 0, + ret = [], + insert = jQuery(selector), + last = insert.length - 1; + + for (; i <= last; i++) { + elems = i === last ? this : this.clone(true); + jQuery(insert[i])[original](elems); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply(ret, elems.get()); + } + + return this.pushStack(ret); + }; + jQuery.prototype.attr = function (name, value) { + /// + /// 1: Get the value of an attribute for the first element in the set of matched elements. + /// 1.1 - attr(attributeName) + /// 2: Set one or more attributes for the set of matched elements. + /// 2.1 - attr(attributeName, value) + /// 2.2 - attr(attributes) + /// 2.3 - attr(attributeName, function(index, attr)) + /// + /// + /// The name of the attribute to set. + /// + /// + /// A value to set for the attribute. + /// + /// + + return jQuery.access(this, jQuery.attr, name, value, arguments.length > 1); + }; + jQuery.prototype.before = function () { + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// 1 - before(content, content) + /// 2 - before(function) + /// + /// + /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, false, function (elem) { + if (this.parentNode) { + this.parentNode.insertBefore(elem, this); + } + }); + }; + jQuery.prototype.bind = function (types, data, fn) { + /// + /// Attach a handler to an event for the elements. + /// 1 - bind(eventType, eventData, handler(eventObject)) + /// 2 - bind(eventType, eventData, preventBubble) + /// 3 - bind(events) + /// + /// + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return this.on(types, null, data, fn); + }; + jQuery.prototype.blur = function (data, fn) { + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// 1 - blur(handler(eventObject)) + /// 2 - blur(eventData, handler(eventObject)) + /// 3 - blur() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.change = function (data, fn) { + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// 1 - change(handler(eventObject)) + /// 2 - change(eventData, handler(eventObject)) + /// 3 - change() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.children = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.clearQueue = function (type) { + /// + /// Remove from the queue all items that have not yet been run. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.queue(type || "fx", []); + }; + jQuery.prototype.click = function (data, fn) { + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// 1 - click(handler(eventObject)) + /// 2 - click(eventData, handler(eventObject)) + /// 3 - click() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.clone = function (dataAndEvents, deepDataAndEvents) { + /// + /// Create a deep copy of the set of matched elements. + /// 1 - clone(withDataAndEvents) + /// 2 - clone(withDataAndEvents, deepWithDataAndEvents) + /// + /// + /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. + /// + /// + /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). + /// + /// + + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function () { + return jQuery.clone(this, dataAndEvents, deepDataAndEvents); + }); + }; + jQuery.prototype.closest = function (selectors, context) { + /// + /// 1: For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// 1.1 - closest(selector) + /// 1.2 - closest(selector, context) + /// 1.3 - closest(jQuery object) + /// 1.4 - closest(element) + /// 2: Get an array of all the elements and selectors matched against the current element up through the DOM tree. + /// 2.1 - closest(selectors, context) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. + /// + /// + + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test(selectors) || typeof selectors !== "string" ? + jQuery(selectors, context || this.context) : + 0; + + for (; i < l; i++) { + cur = this[i]; + + while (cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11) { + if (pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors)) { + ret.push(cur); + break; + } + cur = cur.parentNode; + } + } + + return this.pushStack(ret.length > 1 ? jQuery.unique(ret) : ret); + }; + jQuery.prototype.constructor = function (selector, context) { + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }; + jQuery.prototype.contents = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, including text and comment nodes. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.contextmenu = function (data, fn) { + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.css = function (name, value) { + /// + /// 1: Get the value of style properties for the first element in the set of matched elements. + /// 1.1 - css(propertyName) + /// 1.2 - css(propertyNames) + /// 2: Set one or more CSS properties for the set of matched elements. + /// 2.1 - css(propertyName, value) + /// 2.2 - css(propertyName, function(index, value)) + /// 2.3 - css(properties) + /// + /// + /// A CSS property name. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, function (elem, name, value) { + var len, styles, + map = {}, + i = 0; + + if (jQuery.isArray(name)) { + styles = getStyles(elem); + len = name.length; + + for (; i < len; i++) { + map[name[i]] = jQuery.css(elem, name[i], false, styles); + } + + return map; + } + + return value !== undefined ? + jQuery.style(elem, name, value) : + jQuery.css(elem, name); + }, name, value, arguments.length > 1); + }; + jQuery.prototype.data = function (key, value) { + /// + /// 1: Store arbitrary data associated with the matched elements. + /// 1.1 - data(key, value) + /// 1.2 - data(obj) + /// 2: Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute. + /// 2.1 - data(key) + /// 2.2 - data() + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value; it can be any Javascript type including Array or Object. + /// + /// + + var attrs, name, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if (key === undefined) { + if (this.length) { + data = jQuery.data(elem); + + if (elem.nodeType === 1 && !jQuery._data(elem, "parsedAttrs")) { + attrs = elem.attributes; + for (; i < attrs.length; i++) { + name = attrs[i].name; + + if (!name.indexOf("data-")) { + name = jQuery.camelCase(name.slice(5)); + + dataAttr(elem, name, data[name]); + } + } + jQuery._data(elem, "parsedAttrs", true); + } + } + + return data; + } + + // Sets multiple values + if (typeof key === "object") { + return this.each(function () { + jQuery.data(this, key); + }); + } + + return jQuery.access(this, function (value) { + + if (value === undefined) { + // Try to fetch any internally stored data first + return elem ? dataAttr(elem, key, jQuery.data(elem, key)) : null; + } + + this.each(function () { + jQuery.data(this, key, value); + }); + }, null, value, arguments.length > 1, null, true); + }; + jQuery.prototype.dblclick = function (data, fn) { + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// 1 - dblclick(handler(eventObject)) + /// 2 - dblclick(eventData, handler(eventObject)) + /// 3 - dblclick() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.delay = function (time, type) { + /// + /// Set a timer to delay execution of subsequent items in the queue. + /// + /// + /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue(type, function (next, hooks) { + var timeout = setTimeout(next, time); + hooks.stop = function () { + clearTimeout(timeout); + }; + }); + }; + jQuery.prototype.delegate = function (selector, types, data, fn) { + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// 1 - delegate(selector, eventType, handler(eventObject)) + /// 2 - delegate(selector, eventType, eventData, handler(eventObject)) + /// 3 - delegate(selector, events) + /// + /// + /// A selector to filter the elements that trigger the event. + /// + /// + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + return this.on(types, selector, data, fn); + }; + jQuery.prototype.dequeue = function (type) { + /// + /// Execute the next function on the queue for the matched elements. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.each(function () { + jQuery.dequeue(this, type); + }); + }; + jQuery.prototype.detach = function (selector) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + return this.remove(selector, true); + }; + jQuery.prototype.domManip = function (args, table, callback) { + + + // Flatten any nested arrays + args = core_concat.apply([], args); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction(value); + + // We can't cloneNode fragments that contain checked, in WebKit + if (isFunction || !(l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test(value))) { + return this.each(function (index) { + var self = set.eq(index); + if (isFunction) { + args[0] = value.call(this, index, table ? self.html() : undefined); + } + self.domManip(args, table, callback); + }); + } + + if (l) { + fragment = jQuery.buildFragment(args, this[0].ownerDocument, false, this); + first = fragment.firstChild; + + if (fragment.childNodes.length === 1) { + fragment = first; + } + + if (first) { + table = table && jQuery.nodeName(first, "tr"); + scripts = jQuery.map(getAll(fragment, "script"), disableScript); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for (; i < l; i++) { + node = fragment; + + if (i !== iNoClone) { + node = jQuery.clone(node, true, true); + + // Keep references to cloned scripts for later restoration + if (hasScripts) { + jQuery.merge(scripts, getAll(node, "script")); + } + } + + callback.call( + table && jQuery.nodeName(this[i], "table") ? + findOrAppend(this[i], "tbody") : + this[i], + node, + i + ); + } + + if (hasScripts) { + doc = scripts[scripts.length - 1].ownerDocument; + + // Reenable scripts + jQuery.map(scripts, restoreScript); + + // Evaluate executable scripts on first document insertion + for (i = 0; i < hasScripts; i++) { + node = scripts[i]; + if (rscriptType.test(node.type || "") && + !jQuery._data(node, "globalEval") && jQuery.contains(doc, node)) { + + if (node.src) { + // Hope ajax is available... + jQuery.ajax({ + url: node.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.globalEval((node.text || node.textContent || node.innerHTML || "").replace(rcleanScript, "")); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + }; + jQuery.prototype.each = function (callback, args) { + /// + /// Iterate over a jQuery object, executing a function for each matched element. + /// + /// + /// A function to execute for each matched element. + /// + /// + + return jQuery.each(this, callback, args); + }; + jQuery.prototype.empty = function () { + /// + /// Remove all child nodes of the set of matched elements from the DOM. + /// + /// + + var elem, + i = 0; + + for (; (elem = this[i]) != null; i++) { + // Remove element nodes and prevent memory leaks + if (elem.nodeType === 1) { + jQuery.cleanData(getAll(elem, false)); + } + + // Remove any remaining nodes + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if (elem.options && jQuery.nodeName(elem, "select")) { + elem.options.length = 0; + } + } + + return this; + }; + jQuery.prototype.end = function () { + /// + /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. + /// + /// + + return this.prevObject || this.constructor(null); + }; + jQuery.prototype.eq = function (i) { + /// + /// Reduce the set of matched elements to the one at the specified index. + /// 1 - eq(index) + /// 2 - eq(-index) + /// + /// + /// An integer indicating the 0-based position of the element. + /// + /// + + var len = this.length, + j = +i + (i < 0 ? len : 0); + return this.pushStack(j >= 0 && j < len ? [this[j]] : []); + }; + jQuery.prototype.error = function (data, fn) { + /// + /// Bind an event handler to the "error" JavaScript event. + /// 1 - error(handler(eventObject)) + /// 2 - error(eventData, handler(eventObject)) + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.extend = function () { + + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.prototype.fadeIn = function (speed, easing, callback) { + /// + /// Display the matched elements by fading them to opaque. + /// 1 - fadeIn(duration, complete) + /// 2 - fadeIn(options) + /// 3 - fadeIn(duration, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeOut = function (speed, easing, callback) { + /// + /// Hide the matched elements by fading them to transparent. + /// 1 - fadeOut(duration, complete) + /// 2 - fadeOut(options) + /// 3 - fadeOut(duration, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeTo = function (speed, to, easing, callback) { + /// + /// Adjust the opacity of the matched elements. + /// 1 - fadeTo(duration, opacity, complete) + /// 2 - fadeTo(duration, opacity, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A number between 0 and 1 denoting the target opacity. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + + // show any hidden elements after setting opacity to 0 + return this.filter(isHidden).css("opacity", 0).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback); + }; + jQuery.prototype.fadeToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements by animating their opacity. + /// 1 - fadeToggle(duration, easing, complete) + /// 2 - fadeToggle(options) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.filter = function (selector) { + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// 1 - filter(selector) + /// 2 - filter(function(index)) + /// 3 - filter(element) + /// 4 - filter(jQuery object) + /// + /// + /// A string containing a selector expression to match the current set of elements against. + /// + /// + + return this.pushStack(winnow(this, selector, true)); + }; + jQuery.prototype.find = function (selector) { + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// 1 - find(selector) + /// 2 - find(jQuery object) + /// 3 - find(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var i, ret, self, + len = this.length; + + if (typeof selector !== "string") { + self = this; + return this.pushStack(jQuery(selector).filter(function () { + for (i = 0; i < len; i++) { + if (jQuery.contains(self[i], this)) { + return true; + } + } + })); + } + + ret = []; + for (i = 0; i < len; i++) { + jQuery.find(selector, this[i], ret); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack(len > 1 ? jQuery.unique(ret) : ret); + ret.selector = (this.selector ? this.selector + " " : "") + selector; + return ret; + }; + jQuery.prototype.finish = function (type) { + /// + /// Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements. + /// + /// + /// The name of the queue in which to stop animations. + /// + /// + + if (type !== false) { + type = type || "fx"; + } + return this.each(function () { + var index, + data = jQuery._data(this), + queue = data[type + "queue"], + hooks = data[type + "queueHooks"], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // enable finishing flag on private data + data.finish = true; + + // empty the queue first + jQuery.queue(this, type, []); + + if (hooks && hooks.cur && hooks.cur.finish) { + hooks.cur.finish.call(this); + } + + // look for any active animations, and finish them + for (index = timers.length; index--;) { + if (timers[index].elem === this && timers[index].queue === type) { + timers[index].anim.stop(true); + timers.splice(index, 1); + } + } + + // look for any animations in the old queue and finish them + for (index = 0; index < length; index++) { + if (queue[index] && queue[index].finish) { + queue[index].finish.call(this); + } + } + + // turn off finishing flag + delete data.finish; + }); + }; + jQuery.prototype.first = function () { + /// + /// Reduce the set of matched elements to the first in the set. + /// + /// + + return this.eq(0); + }; + jQuery.prototype.focus = function (data, fn) { + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// 1 - focus(handler(eventObject)) + /// 2 - focus(eventData, handler(eventObject)) + /// 3 - focus() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusin = function (data, fn) { + /// + /// Bind an event handler to the "focusin" event. + /// 1 - focusin(handler(eventObject)) + /// 2 - focusin(eventData, handler(eventObject)) + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusout = function (data, fn) { + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// 1 - focusout(handler(eventObject)) + /// 2 - focusout(eventData, handler(eventObject)) + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.get = function (num) { + /// + /// Retrieve the DOM elements matched by the jQuery object. + /// + /// + /// A zero-based integer indicating which element to retrieve. + /// + /// + + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + (num < 0 ? this[this.length + num] : this[num]); + }; + jQuery.prototype.has = function (target) { + /// + /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. + /// 1 - has(selector) + /// 2 - has(contained) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var i, + targets = jQuery(target, this), + len = targets.length; + + return this.filter(function () { + for (i = 0; i < len; i++) { + if (jQuery.contains(this, targets[i])) { + return true; + } + } + }); + }; + jQuery.prototype.hasClass = function (selector) { + /// + /// Determine whether any of the matched elements are assigned the given class. + /// + /// + /// The class name to search for. + /// + /// + + var className = " " + selector + " ", + i = 0, + l = this.length; + for (; i < l; i++) { + if (this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf(className) >= 0) { + return true; + } + } + + return false; + }; + jQuery.prototype.height = function (margin, value) { + /// + /// 1: Get the current computed height for the first element in the set of matched elements. + /// 1.1 - height() + /// 2: Set the CSS height of every matched element. + /// 2.1 - height(value) + /// 2.2 - height(function(index, height)) + /// + /// + /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). + /// + /// + + var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), + extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); + + return jQuery.access(this, function (elem, type, value) { + var doc; + + if (jQuery.isWindow(elem)) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement["client" + name]; + } + + // Get document width or height + if (elem.nodeType === 9) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body["scroll" + name], doc["scroll" + name], + elem.body["offset" + name], doc["offset" + name], + doc["client" + name] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css(elem, type, extra) : + + // Set width or height on the element + jQuery.style(elem, type, value, extra); + }, type, chainable ? margin : undefined, chainable, null); + }; + jQuery.prototype.hide = function (speed, easing, callback) { + /// + /// Hide the matched elements. + /// 1 - hide() + /// 2 - hide(duration, complete) + /// 3 - hide(options) + /// 4 - hide(duration, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return speed == null || typeof speed === "boolean" ? + cssFn.apply(this, arguments) : + this.animate(genFx(name, true), speed, easing, callback); + }; + jQuery.prototype.hover = function (fnOver, fnOut) { + /// + /// 1: Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. + /// 1.1 - hover(handlerIn(eventObject), handlerOut(eventObject)) + /// 2: Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements. + /// 2.1 - hover(handlerInOut(eventObject)) + /// + /// + /// A function to execute when the mouse pointer enters the element. + /// + /// + /// A function to execute when the mouse pointer leaves the element. + /// + /// + + return this.mouseenter(fnOver).mouseleave(fnOut || fnOver); + }; + jQuery.prototype.html = function (value) { + /// + /// 1: Get the HTML contents of the first element in the set of matched elements. + /// 1.1 - html() + /// 2: Set the HTML contents of each element in the set of matched elements. + /// 2.1 - html(htmlString) + /// 2.2 - html(function(index, oldhtml)) + /// + /// + /// A string of HTML to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if (value === undefined) { + return elem.nodeType === 1 ? + elem.innerHTML.replace(rinlinejQuery, "") : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if (typeof value === "string" && !rnoInnerhtml.test(value) && + (jQuery.support.htmlSerialize || !rnoshimcache.test(value)) && + (jQuery.support.leadingWhitespace || !rleadingWhitespace.test(value)) && + !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { + + value = value.replace(rxhtmlTag, "<$1>"); + + try { + for (; i < l; i++) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if (elem.nodeType === 1) { + jQuery.cleanData(getAll(elem, false)); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch (e) { } + } + + if (elem) { + this.empty().append(value); + } + }, null, value, arguments.length); + }; + jQuery.prototype.index = function (elem) { + /// + /// Search for a given element from among the matched elements. + /// 1 - index() + /// 2 - index(selector) + /// 3 - index(element) + /// + /// + /// A selector representing a jQuery collection in which to look for an element. + /// + /// + + + // No argument, return index in parent + if (!elem) { + return (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1; + } + + // index in selector + if (typeof elem === "string") { + return jQuery.inArray(this[0], jQuery(elem)); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this); + }; + jQuery.prototype.init = function (selector, context, rootjQuery) { + + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if (!selector) { + return this; + } + + // Handle HTML strings + if (typeof selector === "string") { + if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [null, selector, null]; + + } else { + match = rquickExpr.exec(selector); + } + + // Match html or make sure no context is specified for #id + if (match && (match[1] || !context)) { + + // HANDLE: $(html) -> $(array) + if (match[1]) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge(this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + )); + + // HANDLE: $(html, props) + if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) { + for (match in context) { + // Properties of context are called as methods if possible + if (jQuery.isFunction(this[match])) { + this[match](context[match]); + + // ...and otherwise set as attributes + } else { + this.attr(match, context[match]); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById(match[2]); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return items + // by name instead of ID + if (elem.id !== match[2]) { + return rootjQuery.find(selector); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if (!context || context.jquery) { + return (context || rootjQuery).find(selector); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor(context).find(selector); + } + + // HANDLE: $(DOMElement) + } else if (selector.nodeType) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if (jQuery.isFunction(selector)) { + return rootjQuery.ready(selector); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray(selector, this); + }; + jQuery.prototype.innerHeight = function (margin, value) { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding but not border. + /// + /// + + var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), + extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); + + return jQuery.access(this, function (elem, type, value) { + var doc; + + if (jQuery.isWindow(elem)) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement["client" + name]; + } + + // Get document width or height + if (elem.nodeType === 9) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body["scroll" + name], doc["scroll" + name], + elem.body["offset" + name], doc["offset" + name], + doc["client" + name] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css(elem, type, extra) : + + // Set width or height on the element + jQuery.style(elem, type, value, extra); + }, type, chainable ? margin : undefined, chainable, null); + }; + jQuery.prototype.innerWidth = function (margin, value) { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding but not border. + /// + /// + + var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), + extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); + + return jQuery.access(this, function (elem, type, value) { + var doc; + + if (jQuery.isWindow(elem)) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement["client" + name]; + } + + // Get document width or height + if (elem.nodeType === 9) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body["scroll" + name], doc["scroll" + name], + elem.body["offset" + name], doc["offset" + name], + doc["client" + name] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css(elem, type, extra) : + + // Set width or height on the element + jQuery.style(elem, type, value, extra); + }, type, chainable ? margin : undefined, chainable, null); + }; + jQuery.prototype.insertAfter = function (selector) { + /// + /// Insert every element in the set of matched elements after the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. + /// + /// + + var elems, + i = 0, + ret = [], + insert = jQuery(selector), + last = insert.length - 1; + + for (; i <= last; i++) { + elems = i === last ? this : this.clone(true); + jQuery(insert[i])[original](elems); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply(ret, elems.get()); + } + + return this.pushStack(ret); + }; + jQuery.prototype.insertBefore = function (selector) { + /// + /// Insert every element in the set of matched elements before the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. + /// + /// + + var elems, + i = 0, + ret = [], + insert = jQuery(selector), + last = insert.length - 1; + + for (; i <= last; i++) { + elems = i === last ? this : this.clone(true); + jQuery(insert[i])[original](elems); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply(ret, elems.get()); + } + + return this.pushStack(ret); + }; + jQuery.prototype.is = function (selector) { + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// 1 - is(selector) + /// 2 - is(function(index)) + /// 3 - is(jQuery object) + /// 4 - is(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test(selector) ? + jQuery(selector, this.context).index(this[0]) >= 0 : + jQuery.filter(selector, this).length > 0 : + this.filter(selector).length > 0); + }; + jQuery.prototype.keydown = function (data, fn) { + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// 1 - keydown(handler(eventObject)) + /// 2 - keydown(eventData, handler(eventObject)) + /// 3 - keydown() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keypress = function (data, fn) { + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// 1 - keypress(handler(eventObject)) + /// 2 - keypress(eventData, handler(eventObject)) + /// 3 - keypress() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keyup = function (data, fn) { + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// 1 - keyup(handler(eventObject)) + /// 2 - keyup(eventData, handler(eventObject)) + /// 3 - keyup() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.last = function () { + /// + /// Reduce the set of matched elements to the final one in the set. + /// + /// + + return this.eq(-1); + }; + jQuery.prototype.length = 0; + jQuery.prototype.load = function (url, params, callback) { + /// + /// 1: Bind an event handler to the "load" JavaScript event. + /// 1.1 - load(handler(eventObject)) + /// 1.2 - load(eventData, handler(eventObject)) + /// 2: Load data from the server and place the returned HTML into the matched element. + /// 2.1 - load(url, data, complete(responseText, textStatus, XMLHttpRequest)) + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A plain object or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed when the request completes. + /// + /// + + if (typeof url !== "string" && _load) { + return _load.apply(this, arguments); + } + + var selector, response, type, + self = this, + off = url.indexOf(" "); + + if (off >= 0) { + selector = url.slice(off, url.length); + url = url.slice(0, off); + } + + // If it's a function + if (jQuery.isFunction(params)) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if (params && typeof params === "object") { + type = "POST"; + } + + // If we have elements to modify, make the request + if (self.length > 0) { + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params + }).done(function (responseText) { + + // Save response for use in complete callback + response = arguments; + + self.html(selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("
      ").append(jQuery.parseHTML(responseText)).find(selector) : + + // Otherwise use the full result + responseText); + + }).complete(callback && function (jqXHR, status) { + self.each(callback, response || [jqXHR.responseText, status, jqXHR]); + }); + } + + return this; + }; + jQuery.prototype.map = function (callback) { + /// + /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. + /// + /// + /// A function object that will be invoked for each element in the current set. + /// + /// + + return this.pushStack(jQuery.map(this, function (elem, i) { + return callback.call(elem, i, elem); + })); + }; + jQuery.prototype.mousedown = function (data, fn) { + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// 1 - mousedown(handler(eventObject)) + /// 2 - mousedown(eventData, handler(eventObject)) + /// 3 - mousedown() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseenter = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// 1 - mouseenter(handler(eventObject)) + /// 2 - mouseenter(eventData, handler(eventObject)) + /// 3 - mouseenter() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseleave = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// 1 - mouseleave(handler(eventObject)) + /// 2 - mouseleave(eventData, handler(eventObject)) + /// 3 - mouseleave() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mousemove = function (data, fn) { + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// 1 - mousemove(handler(eventObject)) + /// 2 - mousemove(eventData, handler(eventObject)) + /// 3 - mousemove() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseout = function (data, fn) { + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// 1 - mouseout(handler(eventObject)) + /// 2 - mouseout(eventData, handler(eventObject)) + /// 3 - mouseout() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseover = function (data, fn) { + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// 1 - mouseover(handler(eventObject)) + /// 2 - mouseover(eventData, handler(eventObject)) + /// 3 - mouseover() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseup = function (data, fn) { + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// 1 - mouseup(handler(eventObject)) + /// 2 - mouseup(eventData, handler(eventObject)) + /// 3 - mouseup() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.next = function (until, selector) { + /// + /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.nextAll = function (until, selector) { + /// + /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.nextUntil = function (until, selector) { + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// 1 - nextUntil(selector, filter) + /// 2 - nextUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching following sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.not = function (selector) { + /// + /// Remove elements from the set of matched elements. + /// 1 - not(selector) + /// 2 - not(elements) + /// 3 - not(function(index)) + /// 4 - not(jQuery object) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return this.pushStack(winnow(this, selector, false)); + }; + jQuery.prototype.off = function (types, selector, fn) { + /// + /// Remove an event handler. + /// 1 - off(events, selector, handler(eventObject)) + /// 2 - off(events, selector) + /// + /// + /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". + /// + /// + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// + /// + /// A handler function previously attached for the event(s), or the special value false. + /// + /// + + var handleObj, type; + if (types && types.preventDefault && types.handleObj) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery(types.delegateTarget).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if (typeof types === "object") { + // ( types-object [, selector] ) + for (type in types) { + this.off(type, selector, types[type]); + } + return this; + } + if (selector === false || typeof selector === "function") { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if (fn === false) { + fn = returnFalse; + } + return this.each(function () { + jQuery.event.remove(this, types, fn, selector); + }); + }; + jQuery.prototype.offset = function (options) { + /// + /// 1: Get the current coordinates of the first element in the set of matched elements, relative to the document. + /// 1.1 - offset() + /// 2: Set the current coordinates of every element in the set of matched elements, relative to the document. + /// 2.1 - offset(coordinates) + /// 2.2 - offset(function(index, coords)) + /// + /// + /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. + /// + /// + + if (arguments.length) { + return options === undefined ? + this : + this.each(function (i) { + jQuery.offset.setOffset(this, options, i); + }); + } + + var docElem, win, + box = { top: 0, left: 0 }, + elem = this[0], + doc = elem && elem.ownerDocument; + + if (!doc) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if (!jQuery.contains(docElem, elem)) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if (typeof elem.getBoundingClientRect !== core_strundefined) { + box = elem.getBoundingClientRect(); + } + win = getWindow(doc); + return { + top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), + left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) + }; + }; + jQuery.prototype.offsetParent = function () { + /// + /// Get the closest ancestor element that is positioned. + /// + /// + + return this.map(function () { + var offsetParent = this.offsetParent || document.documentElement; + while (offsetParent && (!jQuery.nodeName(offsetParent, "html") && jQuery.css(offsetParent, "position") === "static")) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.documentElement; + }); + }; + jQuery.prototype.on = function (types, selector, data, fn, /*INTERNAL*/ one) { + /// + /// Attach an event handler function for one or more events to the selected elements. + /// 1 - on(events, selector, data, handler(eventObject)) + /// 2 - on(events, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + var type, origFn; + + // Types can be a map of types/handlers + if (typeof types === "object") { + // ( types-Object, selector, data ) + if (typeof selector !== "string") { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for (type in types) { + this.on(type, selector, data, types[type], one); + } + return this; + } + + if (data == null && fn == null) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if (fn == null) { + if (typeof selector === "string") { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if (fn === false) { + fn = returnFalse; + } else if (!fn) { + return this; + } + + if (one === 1) { + origFn = fn; + fn = function (event) { + // Can use an empty set, since event contains the info + jQuery().off(event); + return origFn.apply(this, arguments); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || (origFn.guid = jQuery.guid++); + } + return this.each(function () { + jQuery.event.add(this, types, fn, data, selector); + }); + }; + jQuery.prototype.one = function (types, selector, data, fn) { + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// 1 - one(events, data, handler(eventObject)) + /// 2 - one(events, selector, data, handler(eventObject)) + /// 3 - one(events, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + return this.on(types, selector, data, fn, 1); + }; + jQuery.prototype.outerHeight = function (margin, value) { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), + extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); + + return jQuery.access(this, function (elem, type, value) { + var doc; + + if (jQuery.isWindow(elem)) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement["client" + name]; + } + + // Get document width or height + if (elem.nodeType === 9) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body["scroll" + name], doc["scroll" + name], + elem.body["offset" + name], doc["offset" + name], + doc["client" + name] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css(elem, type, extra) : + + // Set width or height on the element + jQuery.style(elem, type, value, extra); + }, type, chainable ? margin : undefined, chainable, null); + }; + jQuery.prototype.outerWidth = function (margin, value) { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding and border. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), + extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); + + return jQuery.access(this, function (elem, type, value) { + var doc; + + if (jQuery.isWindow(elem)) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement["client" + name]; + } + + // Get document width or height + if (elem.nodeType === 9) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body["scroll" + name], doc["scroll" + name], + elem.body["offset" + name], doc["offset" + name], + doc["client" + name] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css(elem, type, extra) : + + // Set width or height on the element + jQuery.style(elem, type, value, extra); + }, type, chainable ? margin : undefined, chainable, null); + }; + jQuery.prototype.parent = function (until, selector) { + /// + /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.parents = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.parentsUntil = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - parentsUntil(selector, filter) + /// 2 - parentsUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching ancestor elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.position = function () { + /// + /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. + /// + /// + + if (!this[0]) { + return; + } + + var offsetParent, offset, + parentOffset = { top: 0, left: 0 }, + elem = this[0]; + + // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent + if (jQuery.css(elem, "position") === "fixed") { + // we assume that getBoundingClientRect is available when computed position is fixed + offset = elem.getBoundingClientRect(); + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if (!jQuery.nodeName(offsetParent[0], "html")) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css(offsetParent[0], "borderTopWidth", true); + parentOffset.left += jQuery.css(offsetParent[0], "borderLeftWidth", true); + } + + // Subtract parent offsets and element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + return { + top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true), + left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true) + }; + }; + jQuery.prototype.prepend = function () { + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// 1 - prepend(content, content) + /// 2 - prepend(function(index, html)) + /// + /// + /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { + this.insertBefore(elem, this.firstChild); + } + }); + }; + jQuery.prototype.prependTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the beginning of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. + /// + /// + + var elems, + i = 0, + ret = [], + insert = jQuery(selector), + last = insert.length - 1; + + for (; i <= last; i++) { + elems = i === last ? this : this.clone(true); + jQuery(insert[i])[original](elems); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply(ret, elems.get()); + } + + return this.pushStack(ret); + }; + jQuery.prototype.prev = function (until, selector) { + /// + /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.prevAll = function (until, selector) { + /// + /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.prevUntil = function (until, selector) { + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - prevUntil(selector, filter) + /// 2 - prevUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.promise = function (type, obj) { + /// + /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. + /// + /// + /// The type of queue that needs to be observed. + /// + /// + /// Object onto which the promise methods have to be attached + /// + /// + + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function () { + if (!(--count)) { + defer.resolveWith(elements, [elements]); + } + }; + + if (typeof type !== "string") { + obj = type; + type = undefined; + } + type = type || "fx"; + + while (i--) { + tmp = jQuery._data(elements[i], type + "queueHooks"); + if (tmp && tmp.empty) { + count++; + tmp.empty.add(resolve); + } + } + resolve(); + return defer.promise(obj); + }; + jQuery.prototype.prop = function (name, value) { + /// + /// 1: Get the value of a property for the first element in the set of matched elements. + /// 1.1 - prop(propertyName) + /// 2: Set one or more properties for the set of matched elements. + /// 2.1 - prop(propertyName, value) + /// 2.2 - prop(properties) + /// 2.3 - prop(propertyName, function(index, oldPropertyValue)) + /// + /// + /// The name of the property to set. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, jQuery.prop, name, value, arguments.length > 1); + }; + jQuery.prototype.pushStack = function (elems) { + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// 1 - pushStack(elements) + /// 2 - pushStack(elements, name, arguments) + /// + /// + /// An array of elements to push onto the stack and make into a new jQuery object. + /// + /// + /// The name of a jQuery method that generated the array of elements. + /// + /// + /// The arguments that were passed in to the jQuery method (for serialization). + /// + /// + + + // Build a new jQuery matched element set + var ret = jQuery.merge(this.constructor(), elems); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }; + jQuery.prototype.queue = function (type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched elements. + /// 1.1 - queue(queueName) + /// 2: Manipulate the queue of functions to be executed, once for each matched element. + /// 2.1 - queue(queueName, newQueue) + /// 2.2 - queue(queueName, callback( next )) + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var setter = 2; + + if (typeof type !== "string") { + data = type; + type = "fx"; + setter--; + } + + if (arguments.length < setter) { + return jQuery.queue(this[0], type); + } + + return data === undefined ? + this : + this.each(function () { + var queue = jQuery.queue(this, type, data); + + // ensure a hooks for this queue + jQuery._queueHooks(this, type); + + if (type === "fx" && queue[0] !== "inprogress") { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.ready = function (fn) { + /// + /// Specify a function to execute when the DOM is fully loaded. + /// + /// + /// A function to execute after the DOM is ready. + /// + /// + + // Add the callback + jQuery.ready.promise().done(fn); + + return this; + }; + jQuery.prototype.remove = function (selector, keepData) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + var elem, + i = 0; + + for (; (elem = this[i]) != null; i++) { + if (!selector || jQuery.filter(selector, [elem]).length > 0) { + if (!keepData && elem.nodeType === 1) { + jQuery.cleanData(getAll(elem)); + } + + if (elem.parentNode) { + if (keepData && jQuery.contains(elem.ownerDocument, elem)) { + setGlobalEval(getAll(elem, "script")); + } + elem.parentNode.removeChild(elem); + } + } + } + + return this; + }; + jQuery.prototype.removeAttr = function (name) { + /// + /// Remove an attribute from each element in the set of matched elements. + /// + /// + /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. + /// + /// + + return this.each(function () { + jQuery.removeAttr(this, name); + }); + }; + jQuery.prototype.removeClass = function (value) { + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// 1 - removeClass(className) + /// 2 - removeClass(function(index, class)) + /// + /// + /// One or more space-separated classes to be removed from the class attribute of each matched element. + /// + /// + + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).removeClass(value.call(this, j, this.className)); + }); + } + if (proceed) { + classes = (value || "").match(core_rnotwhite) || []; + + for (; i < len; i++) { + elem = this[i]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && (elem.className ? + (" " + elem.className + " ").replace(rclass, " ") : + "" + ); + + if (cur) { + j = 0; + while ((clazz = classes[j++])) { + // Remove *all* instances + while (cur.indexOf(" " + clazz + " ") >= 0) { + cur = cur.replace(" " + clazz + " ", " "); + } + } + elem.className = value ? jQuery.trim(cur) : ""; + } + } + } + + return this; + }; + jQuery.prototype.removeData = function (key) { + /// + /// Remove a previously-stored piece of data. + /// 1 - removeData(name) + /// 2 - removeData(list) + /// + /// + /// A string naming the piece of data to delete. + /// + /// + + return this.each(function () { + jQuery.removeData(this, key); + }); + }; + jQuery.prototype.removeProp = function (name) { + /// + /// Remove a property for the set of matched elements. + /// + /// + /// The name of the property to remove. + /// + /// + + name = jQuery.propFix[name] || name; + return this.each(function () { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[name] = undefined; + delete this[name]; + } catch (e) { } + }); + }; + jQuery.prototype.replaceAll = function (selector) { + /// + /// Replace each target element with the set of matched elements. + /// + /// + /// A selector expression indicating which element(s) to replace. + /// + /// + + var elems, + i = 0, + ret = [], + insert = jQuery(selector), + last = insert.length - 1; + + for (; i <= last; i++) { + elems = i === last ? this : this.clone(true); + jQuery(insert[i])[original](elems); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply(ret, elems.get()); + } + + return this.pushStack(ret); + }; + jQuery.prototype.replaceWith = function (value) { + /// + /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. + /// 1 - replaceWith(newContent) + /// 2 - replaceWith(function) + /// + /// + /// The content to insert. May be an HTML string, DOM element, or jQuery object. + /// + /// + + var isFunc = jQuery.isFunction(value); + + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if (!isFunc && typeof value !== "string") { + value = jQuery(value).not(this).detach(); + } + + return this.domManip([value], true, function (elem) { + var next = this.nextSibling, + parent = this.parentNode; + + if (parent) { + jQuery(this).remove(); + parent.insertBefore(elem, next); + } + }); + }; + jQuery.prototype.resize = function (data, fn) { + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// 1 - resize(handler(eventObject)) + /// 2 - resize(eventData, handler(eventObject)) + /// 3 - resize() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scroll = function (data, fn) { + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// 1 - scroll(handler(eventObject)) + /// 2 - scroll(eventData, handler(eventObject)) + /// 3 - scroll() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scrollLeft = function (val) { + /// + /// 1: Get the current horizontal position of the scroll bar for the first element in the set of matched elements. + /// 1.1 - scrollLeft() + /// 2: Set the current horizontal position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollLeft(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + win.document.documentElement[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.scrollTop = function (val) { + /// + /// 1: Get the current vertical position of the scroll bar for the first element in the set of matched elements or set the vertical position of the scroll bar for every matched element. + /// 1.1 - scrollTop() + /// 2: Set the current vertical position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollTop(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + win.document.documentElement[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.select = function (data, fn) { + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// 1 - select(handler(eventObject)) + /// 2 - select(eventData, handler(eventObject)) + /// 3 - select() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.serialize = function () { + /// + /// Encode a set of form elements as a string for submission. + /// + /// + + return jQuery.param(this.serializeArray()); + }; + jQuery.prototype.serializeArray = function () { + /// + /// Encode a set of form elements as an array of names and values. + /// + /// + + return this.map(function () { + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop(this, "elements"); + return elements ? jQuery.makeArray(elements) : this; + }) + .filter(function () { + var type = this.type; + // Use .is(":disabled") so that fieldset[disabled] works + return this.name && !jQuery(this).is(":disabled") && + rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && + (this.checked || !manipulation_rcheckableType.test(type)); + }) + .map(function (i, elem) { + var val = jQuery(this).val(); + + return val == null ? + null : + jQuery.isArray(val) ? + jQuery.map(val, function (val) { + return { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }) : + { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }).get(); + }; + jQuery.prototype.show = function (speed, easing, callback) { + /// + /// Display the matched elements. + /// 1 - show() + /// 2 - show(duration, complete) + /// 3 - show(options) + /// 4 - show(duration, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return speed == null || typeof speed === "boolean" ? + cssFn.apply(this, arguments) : + this.animate(genFx(name, true), speed, easing, callback); + }; + jQuery.prototype.siblings = function (until, selector) { + /// + /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if (this.length > 1 && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret); + }; + jQuery.prototype.size = function () { + /// + /// Return the number of elements in the jQuery object. + /// + /// + + return this.length; + }; + jQuery.prototype.slice = function () { + /// + /// Reduce the set of matched elements to a subset specified by a range of indices. + /// + /// + /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. + /// + /// + /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. + /// + /// + + return this.pushStack(core_slice.apply(this, arguments)); + }; + jQuery.prototype.slideDown = function (speed, easing, callback) { + /// + /// Display the matched elements with a sliding motion. + /// 1 - slideDown(duration, complete) + /// 2 - slideDown(options) + /// 3 - slideDown(duration, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements with a sliding motion. + /// 1 - slideToggle(duration, complete) + /// 2 - slideToggle(options) + /// 3 - slideToggle(duration, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideUp = function (speed, easing, callback) { + /// + /// Hide the matched elements with a sliding motion. + /// 1 - slideUp(duration, complete) + /// 2 - slideUp(options) + /// 3 - slideUp(duration, easing, complete) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.stop = function (type, clearQueue, gotoEnd) { + /// + /// Stop the currently-running animation on the matched elements. + /// 1 - stop(clearQueue, jumpToEnd) + /// 2 - stop(queue, clearQueue, jumpToEnd) + /// + /// + /// The name of the queue in which to stop animations. + /// + /// + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// + /// + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + + var stopQueue = function (hooks) { + var stop = hooks.stop; + delete hooks.stop; + stop(gotoEnd); + }; + + if (typeof type !== "string") { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if (clearQueue && type !== false) { + this.queue(type || "fx", []); + } + + return this.each(function () { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data(this); + + if (index) { + if (data[index] && data[index].stop) { + stopQueue(data[index]); + } + } else { + for (index in data) { + if (data[index] && data[index].stop && rrun.test(index)) { + stopQueue(data[index]); + } + } + } + + for (index = timers.length; index--;) { + if (timers[index].elem === this && (type == null || timers[index].queue === type)) { + timers[index].anim.stop(gotoEnd); + dequeue = false; + timers.splice(index, 1); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if (dequeue || !gotoEnd) { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.submit = function (data, fn) { + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// 1 - submit(handler(eventObject)) + /// 2 - submit(eventData, handler(eventObject)) + /// 3 - submit() + /// + /// + /// An object containing data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.text = function (value) { + /// + /// 1: Get the combined text contents of each element in the set of matched elements, including their descendants. + /// 1.1 - text() + /// 2: Set the content of each element in the set of matched elements to the specified text. + /// 2.1 - text(textString) + /// 2.2 - text(function(index, text)) + /// + /// + /// A string of text to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + return value === undefined ? + jQuery.text(this) : + this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value)); + }, null, value, arguments.length); + }; + jQuery.prototype.toArray = function () { + /// + /// Retrieve all the DOM elements contained in the jQuery set, as an array. + /// + /// + + return core_slice.call(this); + }; + jQuery.prototype.toggle = function (speed, easing, callback) { + /// + /// 1: Bind two or more handlers to the matched elements, to be executed on alternate clicks. + /// 1.1 - toggle(handler(eventObject), handler(eventObject), handler(eventObject)) + /// 2: Display or hide the matched elements. + /// 2.1 - toggle(duration, complete) + /// 2.2 - toggle(options) + /// 2.3 - toggle(duration, easing, complete) + /// 2.4 - toggle(showOrHide) + /// + /// + /// A function to execute every even time the element is clicked. + /// + /// + /// A function to execute every odd time the element is clicked. + /// + /// + /// Additional handlers to cycle through after clicks. + /// + /// + + return speed == null || typeof speed === "boolean" ? + cssFn.apply(this, arguments) : + this.animate(genFx(name, true), speed, easing, callback); + }; + jQuery.prototype.toggleClass = function (value, stateVal) { + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// 1 - toggleClass(className) + /// 2 - toggleClass(className, switch) + /// 3 - toggleClass(switch) + /// 4 - toggleClass(function(index, class, switch), switch) + /// + /// + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// + /// + /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. + /// + /// + + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if (jQuery.isFunction(value)) { + return this.each(function (i) { + jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal); + }); + } + + return this.each(function () { + if (type === "string") { + // toggle individual class names + var className, + i = 0, + self = jQuery(this), + state = stateVal, + classNames = value.match(core_rnotwhite) || []; + + while ((className = classNames[i++])) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass(className); + self[state ? "addClass" : "removeClass"](className); + } + + // Toggle whole class name + } else if (type === core_strundefined || type === "boolean") { + if (this.className) { + // store className if set + jQuery._data(this, "__className__", this.className); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data(this, "__className__") || ""; + } + }); + }; + jQuery.prototype.trigger = function (type, data) { + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// 1 - trigger(eventType, extraParameters) + /// 2 - trigger(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// Additional parameters to pass along to the event handler. + /// + /// + + return this.each(function () { + jQuery.event.trigger(type, data, this); + }); + }; + jQuery.prototype.triggerHandler = function (type, data) { + /// + /// Execute all handlers attached to an element for an event. + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// An array of additional parameters to pass along to the event handler. + /// + /// + + var elem = this[0]; + if (elem) { + return jQuery.event.trigger(type, data, elem, true); + } + }; + jQuery.prototype.unbind = function (types, fn) { + /// + /// Remove a previously-attached event handler from the elements. + /// 1 - unbind(eventType, handler(eventObject)) + /// 2 - unbind(eventType, false) + /// 3 - unbind(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// The function that is to be no longer executed. + /// + /// + + return this.off(types, null, fn); + }; + jQuery.prototype.undelegate = function (selector, types, fn) { + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// 1 - undelegate() + /// 2 - undelegate(selector, eventType) + /// 3 - undelegate(selector, eventType, handler(eventObject)) + /// 4 - undelegate(selector, events) + /// 5 - undelegate(namespace) + /// + /// + /// A selector which will be used to filter the event results. + /// + /// + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn); + }; + jQuery.prototype.unload = function (data, fn) { + /// + /// Bind an event handler to the "unload" JavaScript event. + /// 1 - unload(handler(eventObject)) + /// 2 - unload(eventData, handler(eventObject)) + /// + /// + /// A plain object of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.unwrap = function () { + /// + /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. + /// + /// + + return this.parent().each(function () { + if (!jQuery.nodeName(this, "body")) { + jQuery(this).replaceWith(this.childNodes); + } + }).end(); + }; + jQuery.prototype.val = function (value) { + /// + /// 1: Get the current value of the first element in the set of matched elements. + /// 1.1 - val() + /// 2: Set the value of each element in the set of matched elements. + /// 2.1 - val(value) + /// 2.2 - val(function(index, value)) + /// + /// + /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. + /// + /// + + var ret, hooks, isFunction, + elem = this[0]; + + if (!arguments.length) { + if (elem) { + hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()]; + + if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction(value); + + return this.each(function (i) { + var val, + self = jQuery(this); + + if (this.nodeType !== 1) { + return; + } + + if (isFunction) { + val = value.call(this, i, self.val()); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if (val == null) { + val = ""; + } else if (typeof val === "number") { + val += ""; + } else if (jQuery.isArray(val)) { + val = jQuery.map(val, function (value) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; + + // If set returns undefined, fall back to normal setting + if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) { + this.value = val; + } + }); + }; + jQuery.prototype.width = function (margin, value) { + /// + /// 1: Get the current computed width for the first element in the set of matched elements. + /// 1.1 - width() + /// 2: Set the CSS width of each element in the set of matched elements. + /// 2.1 - width(value) + /// 2.2 - width(function(index, width)) + /// + /// + /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). + /// + /// + + var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), + extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); + + return jQuery.access(this, function (elem, type, value) { + var doc; + + if (jQuery.isWindow(elem)) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement["client" + name]; + } + + // Get document width or height + if (elem.nodeType === 9) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body["scroll" + name], doc["scroll" + name], + elem.body["offset" + name], doc["offset" + name], + doc["client" + name] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css(elem, type, extra) : + + // Set width or height on the element + jQuery.style(elem, type, value, extra); + }, type, chainable ? margin : undefined, chainable, null); + }; + jQuery.prototype.wrap = function (html) { + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// 1 - wrap(wrappingElement) + /// 2 - wrap(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + var isFunction = jQuery.isFunction(html); + + return this.each(function (i) { + jQuery(this).wrapAll(isFunction ? html.call(this, i) : html); + }); + }; + jQuery.prototype.wrapAll = function (html) { + /// + /// Wrap an HTML structure around all elements in the set of matched elements. + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapAll(html.call(this, i)); + }); + } + + if (this[0]) { + // The elements to wrap the target around + var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true); + + if (this[0].parentNode) { + wrap.insertBefore(this[0]); + } + + wrap.map(function () { + var elem = this; + + while (elem.firstChild && elem.firstChild.nodeType === 1) { + elem = elem.firstChild; + } + + return elem; + }).append(this); + } + + return this; + }; + jQuery.prototype.wrapInner = function (html) { + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// 1 - wrapInner(wrappingElement) + /// 2 - wrapInner(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapInner(html.call(this, i)); + }); + } + + return this.each(function () { + var self = jQuery(this), + contents = self.contents(); + + if (contents.length) { + contents.wrapAll(html); + + } else { + self.append(html); + } + }); + }; + jQuery.fn = jQuery.prototype; + jQuery.fn.init.prototype = jQuery.fn; + window.jQuery = window.$ = jQuery; +})(window); \ No newline at end of file diff --git a/public/Scripts/jquery-1.9.1.js b/public/Scripts/jquery-1.9.1.js new file mode 100644 index 0000000..80e1a9a --- /dev/null +++ b/public/Scripts/jquery-1.9.1.js @@ -0,0 +1,9597 @@ +/*! + * jQuery JavaScript Library v1.9.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-2-4 + */ +(function( window, undefined ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +//"use strict"; +var + // The deferred used on DOM ready + readyList, + + // A central reference to the root jQuery(document) + rootjQuery, + + // Support: IE<9 + // For `typeof node.method` instead of `node.method !== undefined` + core_strundefined = typeof undefined, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // [[Class]] -> type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.9.1", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, all, a, + input, select, fragment, + opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
      a"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + checkOn: !!input.value, + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: document.compatMode === "CSS1Compat", + + // Will be defined later + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "
      t
      "; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "
      "; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})(); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var i, l, thisCache, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + // Try to fetch any internally stored data first + return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + } + + this.each(function() { + jQuery.data( this, key, value ); + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + hooks.cur = fn; + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, notxml, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + // In IE9+, Flash objects don't have .getAttribute (#12945) + // Support: IE9+ + if ( typeof elem.getAttribute !== core_strundefined ) { + ret = elem.getAttribute( name ); + } + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( rboolean.test( name ) ) { + // Set corresponding property to false for boolean attributes + // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 + if ( !getSetAttribute && ruseDefault.test( name ) ) { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } else { + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + var + // Use .prop to determine if this attribute is understood as boolean + prop = jQuery.prop( elem, name ), + + // Fetch it accordingly + attr = typeof prop === "boolean" && elem.getAttribute( name ), + detail = typeof prop === "boolean" ? + + getSetInput && getSetAttribute ? + attr != null : + // oldIE fabricates an empty string for missing boolean attributes + // and conflates checked/selected into attroperties + ruseDefault.test( name ) ? + elem[ jQuery.camelCase( "default-" + name ) ] : + !!attr : + + // fetch an attribute node for properties not recognized as boolean + elem.getAttributeNode( name ); + + return detail && detail.value !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; + +// fix oldIE value attroperty +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return jQuery.nodeName( elem, "input" ) ? + + // Ignore the value *property* by using defaultValue + elem.defaultValue : + + ret && ret.specified ? ret.value : undefined; + }, + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret == null ? undefined : ret; + } + }); + }); + + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + event.isTrigger = true; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur != this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + } + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== document.activeElement && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === document.activeElement && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var i, + cachedruns, + Expr, + getText, + isXML, + compile, + hasDuplicate, + outermostContext, + + // Local document vars + setDocument, + document, + docElem, + documentIsXML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + sortOrder, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + support = {}, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Array methods + arr = [], + pop = arr.pop, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rsibling = /[\x20\t\r\n\f]*[+~]/, + + rnative = /^[^{]+\{\s*\[native code/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + funescape = function( _, escaped ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + return high !== high ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Use a stripped-down slice if we can't use a native one +try { + slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + while ( (elem = this[i++]) ) { + results.push( elem ); + } + return results; + }; +} + +/** + * For feature detection + * @param {Function} fn The function to test for native support + */ +function isNative( fn ) { + return rnative.test( fn + "" ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var cache, + keys = []; + + return (cache = function( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + }); +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( !documentIsXML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + + // QSA path + if ( support.qsa && !rbuggyQSA.test(selector) ) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsXML = isXML( doc ); + + // Check if getElementsByTagName("*") returns only elements + support.tagNameNoComments = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if attributes should be retrieved by attribute nodes + support.attributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }); + + // Check if getElementsByClassName can be trusted + support.getByClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }); + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + support.getByName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
      "; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = doc.getElementsByName && + // buggy browsers will return fewer than the correct 2 + doc.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + doc.getElementsByName( expando + 0 ).length; + support.getIdNotName = !doc.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + + // IE6/7 return modified attributes + Expr.attrHandle = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }) ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }; + + // ID find and filter + if ( support.getIdNotName ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.tagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Name + Expr.find["NAME"] = support.getByName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }; + + // Class + Expr.find["CLASS"] = support.getByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { + return context.getElementsByClassName( className ); + } + }; + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21), + // no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ]; + + if ( (support.qsa = isNative(doc.querySelectorAll)) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE8 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = ""; + if ( div.querySelectorAll("[i^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + var compare; + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { + if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { + if ( a === doc || contains( preferredDoc, a ) ) { + return -1; + } + if ( b === doc || contains( preferredDoc, b ) ) { + return 1; + } + return 0; + } + return compare & 4 ? -1 : 1; + } + + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + // Always assume the presence of duplicates if sort doesn't + // pass them to our comparison function (as in Google Chrome). + hasDuplicate = false; + [0, 0].sort( sortOrder ); + support.detectDuplicates = hasDuplicate; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyQSA always contains :focus, so no need for an existence check + if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + var val; + + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( !documentIsXML ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( documentIsXML || support.attributes ) { + return elem.getAttribute( name ); + } + return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? + name : + val && val.specified ? val.value : null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[4] ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + + nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifider + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsXML ? + elem.getAttribute("xml:lang") || elem.getAttribute("lang") : + elem.lang) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push( { + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !documentIsXML && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + documentIsXML, + results, + rsibling.test( selector ) + ); + return results; +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Easy API for creating new setFilters +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Initialize with the default document +setDocument(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, ret, self, + len = this.length; + + if ( typeof selector !== "string" ) { + self = this; + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + ret = []; + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, this[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true) ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
      ", "
      " ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
      " ], + tr: [ 2, "", "
      " ], + col: [ 2, "", "
      " ], + td: [ 3, "", "
      " ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
      ", "
      " ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + var isFunc = jQuery.isFunction( value ); + + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( !isFunc && typeof value !== "string" ) { + value = jQuery( value ).not( this ).detach(); + } + + return this.domManip( [ value ], true, function( elem ) { + var next = this.nextSibling, + parent = this.parentNode; + + if ( parent ) { + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + }); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, table ? self.html() : undefined ); + } + self.domManip( args, table, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + node, + i + ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery.ajax({ + url: node.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + var attr = elem.getAttributeNode("type"); + elem.type = ( attr && attr.specified ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
      " && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + var bool = typeof state === "boolean"; + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("

      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 @&G8|3~%=Sz+L+ddHDhj>nb| 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 z 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 diff --git a/html/images/star_wars_1.jpg b/html/images/star_wars_1.jpg deleted file mode 100644 index c186efa1b1d792a37bb164ccaf10f333e377368d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24743 zcmeFZcUV*1wk{q7sUnIZQY0!M2m&HiT5N!TfYeBhh*AXvK{`uCM4Ay4ks77YmPa`9Amui7%Q|v+63f~ zwuY7lgpLjZp#y&)G%7^-s-gO2V|_!VllFHdoF3e>Klw;n^886ruZNDV_9wNpHBV~a zRM$NDNdCgvb0^)sZ0Go3+W{WV zBOFIh@InPn@bdGY6p|DmTmWo2cdA{SK^FQ`b$$X@u_2^|Xy%K^3n z$JyDBUpU2o>cao{MXQG#W~Q^+cb}f_G-TglI{L$Ov?d4?6mmb^A1}z?UUd8D8TK2^#-`?$ z*0%O9J-vPX1K7c#Vf^IO^vsXhx%ma++WN-k);4Kp_orNR5c)sG0)PK0*x$)@7?f)t z0|Pw+(@(kR_IZN`{b7dvr=%Gq~xF0!v;R*B6E72c{KC=kQ7!tVdczkC)CM1g& zCjJ!d56S-b1bg~#N%kLt{ij^RkOTB|;NsCAhQJ^MZW`nk&PX>4w%f9s-~u^np#J~d z!DWY|nCh6kd5=ebUY0*nf-e+7Z~8LpaunT(jX_dxReDX)cy6zqM%BD z2&O@Vx@izD&A)5zHom1ny1N??(*g}yw*T!7!28|u!0qgibjZPj#!EhBT+1-Rd+1*S zhW`3~@t_3_0)w#tul!k)k;hVNv#3YuX^?N9X^%sNHQ32cMEr>zwEu2Qh<~423 zms1X@wVDky2-7_xcj&oIM>%&V*C+Qvmu3j>Umf&5_^H!citj4RexHyq-ApS z%)cD8$t(@>*Ra+1{_jl5)02^;Q2M@MC@AzVaz_1>6E5eXq$_x0x6kmp#e z$+~WkgI*-|YDac~s%_(LMd%6xZy`!G4^?#+5nC7ajmlUe-v4Y$G3WA_T8qmq(bVww ztfHxp|LO6EdvGcrx55k0d$U;@ABu-=-*- z-OC+WRr|)TXqlAKzbGI`EDR>})H^7#M;ea5=SyXpiJV&19y6=O#9q9M#Je>ZM<3S6 zQVMR{!*U*2UpNeGK>c>8zB836TC>sVZ#5)WT7|==Un6AnUU!Lq$$;;@Qx+z7dI8wQ zz>zKOjz^ve6;1kF&YaRHvrpj{e8Pun(gg-BgDUfZ%-wi`JMT4}I%%u$(QBAh@4}G9i=Ye*_bdLtv2PHfFc6&LLy1*CI z8v2uDC&#bSY5sci{9Vy4V;Uqj@biBsq-JpzId6rn1gFM4Ze{IYUTtOBsVvd3|3cfX zCm%ODePnTq(=><=4WhIy^#r;mwFuo@L+#R`*%K)Ns8#5!^_g2SU)>!6?=`y;lHfXX zns3JSSNF!AW}j$B`;pQfQICHY0rp1$5zrb^@&3(I^WJy)HB=z$eMi0Yjl6T`(MZ{ zKJusFE%1M_99XM~RpuzS`nt1y393DxISYzfm0xcoktAk%Vj*MYyk3Y|SCV1PiIfzr zsLYt(J1WHCVJ}u+x0aV<lQH#2*D|DGPpVr=V_wL9E1@N#K^Q|rwuS1t5n zh}3q*NIOohkL#H+)w&FKdv7cSNjsu$6Dds#=i`cm>vyM|gK`0-3FnbIr9t7AxHRWO zk-61ZZUJ5`n^etp^x;Cw7)*J+k(+11wu6a@<43d)>Ev~SU9qNtC$Mo7&4l(Qfy#5* zu7n0bfF>$6%QMaxk)S=RZ`A$134BRYd+e!)6-> z|I?iiP6{@=8r#3x+A{+xc6n)cn3_aS@(uI;rZ(72a{D@{n>aIy_?y(!%wr+yj-Tb` zo@f=sud4Br(o%iu=u&+$TgF+=>|73VnT8=n0}ld+EfGz?^I{*9uB=SAxa*G^8D|Ox zHxBscECKYZvnDGT)*9m!k?(~yXA7aFDi5N0UcWwff)(X8#nd}*%_zclE`#FCLWY$I zyj{Vd>xVCFr7Tsbh=mUkt)GZI576~bZ__y^wO0Xa35|tCb44LE_0pX#>m8iWOFNdo z)DSM3cgR5fDC8d3CuX-~^F1^44|ADBgDmnbIF|myEB@-m6cs9Ay4|#E zk{6j?;V#H=XM*=@-mdUOZ`rciCbGlrA%E6fK1=@MStSpH@vqJg2h`N8VacgO^e?tL zqy=_ZVbSEp7V(iF6~|?{Ol00Qg)5N+nS&^K9{s83Xil_9Xp*&+eq8suU2L8FQ3DIL zBQ-@IiFR?`IVb%^3k@gE4fDmthQ0L{gyKfM{xqMrE#a^j6d- zT~RTjL9T3N&>)XHsYie7ws4io-Bmz?T(aQUTLu*oNkS-9Q0VT%RzWAnt5%W(bibfM zCJ=}U|yZDg35ay3Egqx`^4OG-id*pCwSYWH5K`2+?Zuz=gx|B(i%!;zhT z5Gvm~hNtHlrg3x6uC2I<8by@Yv(O;Sn&H5lbsvVngK0qiK6hMWU_AQERDb`wb+m$- zb-`wv0D=_h^i0O+f*QNS?ptK4Q<0OY!ZD<9L-9G{n{)Ch8qW1+K#@fDT6eH{P$X{- zbnUM}eK}E4Exq#4B-WOr6HJBQ zmGH-SXk~ZMAi%px@r|hWbrw|7hdqZ8(xRzlDi<^4D<^f8Zy2CTyRrwDDtC}GudSDU zeBi!#zf4+t78LoQ=e-^k`pl8*DAgvr$=jMnB8o5qKkH6wQyy1H-{e?}~9Ig4pS z9KjcDn#XUOY?YTKypTwdBAqaanJJ$0bvbH)aPUak@dgnLyq+O$wbR8ZUqA3$IR{mV zW7e9LrW9Nt*YInzta`fz<9^>6jQa6iRjpJF1RbK7wNZnON zNBOGNNZHN{+rUtv@Q}#c!TYyUIPliZUW5w#W@M^($Gl6r-~+8PhAWzd%=6YJgl?*~ z8W>4g(I8t!RvfL+of8F^#ReFKWpVc5e(Q4E1FA}eEG@f!B@Skn+w+p$$l~bdsEy+Y zGOy;(ty@WQ@Zkjk$wU{7fM!fBrM5MJM!^_^epj0g#0p^Z0}dB|DppYA?T^RtTwmd_ zf(|Nekkx%=He;k?KPh_rd~tV8#bCY+eo`N+_CTG$?A|u9+-creE}(J zlJB$WN|G@NJPYqH#(e%WMo_>Z?DPr3^mm??Z4=#ywS($47!3C?q5>itfVjk-^WucfNUxvFF` z4I=MoF=eBE6kdAwpAkv_XGDYl_ER}!ju$A7Ou_(&bm!lGdy%*|qPbfM?|VtN>yM4_ ziD=v&=NZWAmFnee@hDVV3irFP#~Z3X;O5D0&aR{XuGO9GuE1C2oD-k<4_mJTj_Ksv z1VgLgqrpZM3}>dka@xKd>E|mV`yWQgDV$5=1QDU6m?}^$Nk#6CSYcNMU9)$_!;1p% zJBZ$iQJs*pkN-t4-Cr;0h=ust=RQlyP;9&o3*$VDpfW7l1ML?g06mft1j3B=q z7|KJXUk*`sH@l4@H@Vga7vwJNuAT^mN06pykP4~AP5EFW%a|R3BkEoP7YX;U!Cq;u zGZ{sR63*_(y1G!x2i*FqWvzdy_?22Y)5Iz}UD==UK*2SCj(Vvb=0#w$1xjJYCXn)| z8q4-nOeUzXoqq6t{+W-W{tn-ys^E^GBftuiIbAr1TjTEq)1yf z7ur2#Mn#8?ll9kgyYrNMM3@7NoWwyLfr#dPS^e+>!ReLRA9Qj-;jq@4#dQh%Z9isG z8wk4YQsw3`hfD%22+upLqP%rjTRq)J1n&kDU|(vEX*%9@JQ1PH`BmS;d93cxm^zxo zW<*%-*mv3<$yDl*(>gtp_ge1#M^90BD7n&kWr(uNrMoVVGWtB1Q@EU7T$3_j6J`^g z=011%Gu4DWkk>IUjsANbn-g${*geGaF>YY>nCh(nP+Km;lI_X2dV!LlQws<3o>j4V zfWWPrs=`}|V_&e>Aj&6Z2S0K1c!^t?MfJ)ppaeX>0Y#e*^(R-$?Z8C}0}|oE@NJ$Z zk)Cw(odTe3$XRPgK+1ZRaFu$k)1F!fvPtT!gz#g*;t&wus~BlFzFRqN(#(jxvj`hldJ(DRjhH=kQmj!0=~Cmta5sqmA8jLR09C_d=H9)&;)? z?8ob1j*?=AMJL^gE}w4ql2-poFF{h3i>^Jzw$;T!I1Pqb2@WSR;_B0s^7wN5+7e=B9z zY4VG?<@l&mwzF@;7&>k{2(Rim6G!l`uQPUiy%5JE9{qLQcGb36YG-<&vPB^V)$g!q z>L)x*LAWh`%(=1}zx0xRO0TpE8EM#XW=tTNIjV>TQRVyLMtKv&^`l>+v#G+{aCG$g z-2}Mg%9vSLyBwF_@pBg%@ObsWSQ>0vNBDkjT2HXY|v<{deAOuRt2mo>9|q}XgEPl|*Y^)4s{4`Oq{5HprgL19{17Q2@8xsxWO?2qVngl+o$`6aam2?n%TE${fjpA^U5$!EU(;PQg_ zJdVW&euH2*%BFuvOCld5)98NApDUEOPda#HyheOdxFz0us#Y)X)RaH`fllkT*;dp{ zV1->#o3u+`$}#pYNnR1o_lBsb{@hYeL;s{Q9XEHmjIZ!xYqCbyK7aoH9)9#A9#!9yet+QBQLt(f9Qd_ zpLczAMMQJlz+;r8|Ai+1JV}lPKxw8@?JMZ1M+K5)6Ww76h>j_BgO1Xze_S-r*}l?NSp#!cuM?@h?7{ zz{959UTh$zqcX^%Arnx&v>t9_=EqZEOmxD47 zMs?amZ6e8=s$NP366FfW8eo{>Z+F=`iy(7DK~1!_PkY8iqFidP%bgqye+#c6i$tlw z2))MGjN|LPW^4ZW&QE9%q$`>amWzM##KMClGd;T}N_fi<;hyO2eWt8DW^IMf0q$9%)DqnH z`U&DH`RaE$eG+`jn*ZCmGgY5oo@KbY(#pHN`;luxNiy$DSpKlngXW{f!)-#>-f(7w z-gvAzP)kqcMuovpO2!0ySW~U%ERSQaZ-1lbLkk}nOsGTb9lejxjs_`a*Q!7+g_Bg0#Dw%wbRxBf{xnQoy>!=c8aCUB)v=gJe!wvw$Awk>^0o{@gj4Lsyhrkz2z0M0RV} zpxR_59}q@MPNO=|bB>y(Q=`8+qn~Wkflp7C3-3KO2s`Z&smiPCaa3)gHDJ15T@S-bgLIdhN5jXQA6LfyHZWwHf`R|`w{ukbCJ_)N#Wo3=Z5z?I|1 zR4@%PfabW+>4bM~i4_YNeyFy!CKn(mDt}0+9pwXf);o3^F z82LtJN~!a=&gACO;nFfmUqNl!T}z!@YN&nK0AmD73ku34>_2Ux9l_?gJ z9M8y1S#`1ai0hKB@TVXc&t+c}0`1xXin>o>Md5AvYcIpyaG-c#R1mvWWq=B?-R z0~86~;j2Ko%jV_#lE%t`F}KK-EYx!X&$jbdNrrXDKrV%XqfjEq;-5Q84wNug;uK2# z%M-m9(VIV<6^-8}bNqM48Lj`Pbru}FLC6&!`^_(aX{z6?`hW_P_xAa%BOpPx{fu-9 zpQCkn(Ys4iNU#al21oj&X@_1Vs%2z+7HsFrU*@cNH+pHa`O)nXOZf|~M=h%0!%f;r zsfAy|MN?}}{}(^^@Ax-1+)>ih$ec>oc zQ3lpPvq9)Irr<%4V&4&CVoQlH&sR53yneP(DYOk}nz;)|u&$=E5vDmlXOC(d-XAVq?s+xq&ncD+S}df4r$yx%S5 zGby4jZS(62tI!>2SIxr)Kl`oj2+sl-k6GbOMG$-NSIn{d!CRAW$c;y52;M%e+JVlT zDg)GE$v!-Bt3{;yuxq2J4!6Ex-YbSG9^snEScUE9IkXQ*&CTKw zlzq2pkk95INyF0JfZ1jE42Gm-X?wPyrMpzZVTXwq;7|{gz_-`XPeIEX!K}lzhO|!H zo$O2ZAFBtJFW&-!fm-}r^M)-T!p6x1*0*1~#Y9NShd;QaWHv)4X%wPht7%79EGIeX= zu;sDZzUiPyKx}{{0uuRpAT@~q&3x*~1XNBfVQNxEDYlqo+q4uD#@+sOGRV|K#n;0ga~q%^t^`1G^xzpnL8B9| zUrm)tRNvab5)e{b%Q4}*I9s-iIH)Grm}4RJTt%;4G&`H{=3lnt^A@} z=9Pi)$j^DrT8U{7YzDcFjTX2WJf6G!DN zidp;@Ny)FEmd*)*zaT%4P1qB}nw%4Ca~jx?E7Y9iCclyJredHwSSx}!Rii+YT7#rM zFKZ)T0p}nDoE_{Gn7JZ20Bt|eB<{KUpdQugIf07l)AU!DfBhBvgTT-2|D#yu8v_Tm zs4g>657>;_lpX%#-hZ9=*WYcB9vvKAK+y5FbO}m)-C9p~e@bV!uFsEs2Q(BAvnUYI zmtsJWKs1pICTcdR@qd5cldm2(^kJ-|GxVW{*2RmPa%o^ECC#X@UJQW`4EYdpI_wEH zPW_&OOg!x!rn|d*l}0h}y65_2F&r=OjTN!C2mPbQ;kTwaj!>;)Mj2BE`FYIl2GFoX zwBPnzB{PCFiFF!)D4C3{ug zRC-`@4!rTuWcSKEjs)%#Y}&9rqFtXzgZvznYdpcW8D1;yMaz4g z{msjbqgMJt>lZt;#NXO(o=LrRppkE7N=&pd-xk}CA)V@GCW|9v+*$-A>xj>b-CSu9 zZ&voVTMHgVB3YHH-F~y#skOt#A2e8#)BR-`H|J*aCl@Z~A70VMz7NF7z*+wr~N&U7i z0h{+FZFEi;9e!@$q$Oc7R}=N-{Y0AN->Z#jY4>w$>0pzR1S?LHmlwas*ECHqGN5YV zuzxA-sus%L_wXLK$bi8K`s3AM!(dmXKKvl1bQ!JA3c`SB^A=FR&~9 zz@${Lip8Wp?>Nrfk+Z{LUo-vA3k9)ko|#$?=Wqi0rJNg6M$f#XGd0GztyjH7Yia6omr1hwuWo-*)J)S~2f`V{zwCEvPQ3BgJNoIRPy1Kh-=*!xY~VNw{!XY;ceQ z8}G&&*D>b+jLu?d=deO_D|fgW7GT@~I=S<4=7BwqKgNHY3BM#kc%Y#;TVUsdm^@g9 zXX9Dg`0PBRE0QqoY4Oq>iEzTdG>W8lrSN2Yo$)Gs+k2%p-M23cgEuAhQXhk9Fx=oz z_yqgAHV8p}GYY@0YIW`3jLqHQxJMQQsm9f#^8)fc=+)A&Q)N$GdamESa@0jFRF3